Name: series-workflowfz4vq Phase: Succeeded StartedAt: 2026-08-12 11:57:57 +0000 UTC FinishedAt: 2026-08-12 13:18:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[0] Phase: Succeeded StartedAt: 2026-08-12 11:57:57 +0000 UTC FinishedAt: 2026-08-12 12:34:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 11:57:57 +0000 UTC FinishedAt: 2026-08-12 12:34:36 +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": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VFIO", "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VFIO", "KVM" ], "series_id": "c5938596-df92-4cde-b647-64f2f6126a51" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vfio_ap_mdev_probe", "vfio_ap_mdev_probe_queue", "vfio_ap_mdev_remove_queue", "vfio_ap_on_scan_complete", "vfio_ap_on_cfg_changed" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fYXBfbWRldl9wcm9iZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUmIzM0OywKICAgICYjMzQ7dmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUmIzM0OywKICAgICYjMzQ7dmZpb19hcF9vbl9jZmdfY2hhbmdlZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByaW1hcmlseSBhZGRyZXNzZXMgbG9ja2luZyBpc3N1ZXMgKGUuZy4sIGNoYW5naW5nIG1kZXZzX2xvY2sgdG8gZ3Vlc3RzX2xvY2ssIGZpeGluZyBsb2NrIG9yZGVyaW5nIHRvIHByZXZlbnQgbG9ja2RlcCBzcGxhdHMpLCBmaXhlcyBtZW1vcnkgbGVha3MvcmVzb3VyY2UgY2xlYW51cCBpbiBlcnJvciBwYXRocywgYW5kIGNvcnJlY3RzIGxvZ2ljIGJ1Z3MgaW52b2x2aW5nIGJpdG1hcCBvcGVyYXRpb25zIChiaXRtYXBfYW5kbm90IHZzIGJpdG1hcF9pbnRlcnNlY3RzKS4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgb3IgbWFuaXB1bGF0ZWQuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbnMgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBmb3IgczM5MCBhcmNoaXRlY3R1cmUsIGZpeGluZyBsb2NrIG9yZGVyaW5nIGFuZCBsb2NrZGVwIHNwbGF0cyBpbiB2YXJpb3VzIG1kZXYgYW5kIEFQIGJ1cyBjYWxsYmFja3MgKGUuZy4sIHZmaW9fYXBfbWRldl9wcm9iZSwgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgd2hlbiB0aGUgdmZpb19hcCBkcml2ZXIgaXMgbG9hZGVkIGFuZCBtZGV2IGRldmljZXMgYXJlIGNyZWF0ZWQgdmlhIHN5c2ZzLCBvciB3aGVuIHRoZSBBUCBidXMgcGVyaW9kaWNhbGx5IHNjYW5zIGZvciBkZXZpY2VzLiBTeXprYWxsZXIgY2FuIHRyaWdnZXIgdGhlc2UgcGF0aHMgaW4gczM5MHggdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBBUCBpbnN0cnVjdGlvbnMgKGUuZy4sIEtWTSBvbiBzMzkweCBtYWluZnJhbWVzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRjOTYyOGI5ZDVhYjI3OWIzMTAwYTVlMGMwYjBkMGNkOGJlODIwNWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxMjoyMToyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbmluZGV4IDQ0YjNhMWRjYzFiMzYuLmZhYWI1ZTkxNzlmZjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuQEAgLTgwMyw5ICYjNDM7ODAzLDkgQEAgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KVxuIFx0bWF0cml4X21kZXYtXHUwMDNlcmVxX3RyaWdnZXIgPSBOVUxMO1xuIFx0bWF0cml4X21kZXYtXHUwMDNlY2ZnX2NoZ190cmlnZ2VyID0gTlVMTDtcbiBcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZtZGV2LVx1MDAzZWRldiwgbWF0cml4X21kZXYpO1xuLVx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXHRsaXN0X2FkZChcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vub2RlLCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJfcHV0X3ZkZXY6XG5AQCAtMjI5Nyw2ICYjNDM7MjI5Nyw4IEBAIHN0YXRpYyBzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKnZmaW9fYXBfbWRldl9mb3JfcXVldWUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4gXHR1bnNpZ25lZCBsb25nIGFwaWQgPSBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pO1xuIFx0dW5zaWduZWQgbG9uZyBhcHFpID0gQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbik7XG4gXG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiYjNDM7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuIFx0XHRpZiAodGVzdF9iaXRfaW52KGFwaWQsIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcG0pIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgdGVzdF9iaXRfaW52KGFwcWksIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcW0pKVxuQEAgLTIzMTYsNiAmIzQzOzIzMTgsNyBAQCBzdGF0aWMgc3NpemVfdCBzdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuIFx0c3RydWN0IGFwX2RldmljZSAqYXBkZXYgPSB0b19hcF9kZXYoZGV2KTtcbiBcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2spO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuIFx0cSA9IGRldl9nZXRfZHJ2ZGF0YShcdTAwMjZhcGRldi1cdTAwM2VkZXZpY2UpO1xuIFx0bWF0cml4X21kZXYgPSB2ZmlvX2FwX21kZXZfZm9yX3F1ZXVlKHEpO1xuQEAgLTIzNDMsNiAmIzQzOzIzNDYsNyBAQCBzdGF0aWMgc3NpemVfdCBzdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHR9XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXG4gXHRyZXR1cm4gbmNoYXJzO1xuIH1cbkBAIC0yNDE1LDE0ICYjNDM7MjQxOSwxNyBAQCB2b2lkIHZmaW9fYXBfbWRldl91bnJlZ2lzdGVyKHZvaWQpXG4gXG4gaW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcbiB7XG4tXHRpbnQgcmV0O1xuJiM0MztcdGludCByZXQsIGFwcW47XG4gXHRzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcTtcbiBcdERFQ0xBUkVfQklUTUFQKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XG4gXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuIFxuJiM0MztcdGFwcW4gPSB0b19hcF9xdWV1ZShcdTAwMjZhcGRldi1cdTAwM2VkZXZpY2UpLVx1MDAzZXFpZDtcbiYjNDM7XHRtYXRyaXhfbWRldiA9IGdldF91cGRhdGVfbG9ja3NfYnlfYXBxbihhcHFuKTtcbiYjNDM7XG4gXHRyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoXHUwMDI2YXBkZXYtXHUwMDNlZGV2aWNlLmtvYmosIFx1MDAyNnZmaW9fcXVldWVfYXR0cl9ncm91cCk7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Z290byBlcnJfcmVsZWFzZV9sb2NrcztcbiBcbiBcdHEgPSBremFsbG9jX29iaigqcSk7XG4gXHRpZiAoIXEpIHtcbkBAIC0yNDMwLDExICYjNDM7MjQzNywxMCBAQCBpbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuIFx0XHRnb3RvIGVycl9yZW1vdmVfZ3JvdXA7XG4gXHR9XG4gXG4tXHRxLVx1MDAzZWFwcW4gPSB0b19hcF9xdWV1ZShcdTAwMjZhcGRldi1cdTAwM2VkZXZpY2UpLVx1MDAzZXFpZDtcbiYjNDM7XHRxLVx1MDAzZWFwcW4gPSBhcHFuO1xuIFx0cS1cdTAwM2VzYXZlZF9pc2MgPSBWRklPX0FQX0lTQ19JTlZBTElEO1xuIFx0bWVtc2V0KFx1MDAyNnEtXHUwMDNlcmVzZXRfc3RhdHVzLCAwLCBzaXplb2YocS1cdTAwM2VyZXNldF9zdGF0dXMpKTtcbiBcdElOSVRfV09SSyhcdTAwMjZxLVx1MDAzZXJlc2V0X3dvcmssIGFwcV9yZXNldF9jaGVjayk7XG4tXHRtYXRyaXhfbWRldiA9IGdldF91cGRhdGVfbG9ja3NfYnlfYXBxbihxLVx1MDAzZWFwcW4pO1xuIFxuIFx0aWYgKG1hdHJpeF9tZGV2KSB7XG4gXHRcdHZmaW9fYXBfbWRldl9saW5rX3F1ZXVlKG1hdHJpeF9tZGV2LCBxKTtcbkBAIC0yNDY0LDYgJiM0MzsyNDcwLDggQEAgaW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcbiBcbiBlcnJfcmVtb3ZlX2dyb3VwOlxuIFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFx1MDAyNmFwZGV2LVx1MDAzZWRldmljZS5rb2JqLCBcdTAwMjZ2ZmlvX3F1ZXVlX2F0dHJfZ3JvdXApO1xuJiM0MztlcnJfcmVsZWFzZV9sb2NrczpcbiYjNDM7XHRyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3JfbWRldihtYXRyaXhfbWRldik7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0yNDk5LDEyICYjNDM7MjUwNywxNSBAQCB2b2lkIHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXG4gXHQvKlxuIFx0ICogSWYgdGhlIHF1ZXVlIGlzIG5vdCBpbiB0aGUgaG9zdCYjMzk7cyBBUCBjb25maWd1cmF0aW9uLCB0aGVuIHJlc2V0dGluZ1xuIFx0ICogaXQgd2lsbCBmYWlsIHdpdGggcmVzcG9uc2UgY29kZSAwMSwgKEFQUU4gbm90IHZhbGlkKTsgc28sIGxldCYjMzk7cyBtYWtlXG4tXHQgKiBzdXJlIGl0IGlzIGluIHRoZSBob3N0JiMzOTtzIGNvbmZpZy5cbiYjNDM7XHQgKiBzdXJlIGl0IGlzIGluIHRoZSBob3N0JiMzOTtzIGNvbmZpZy4gSWYgaXQgaXMgbm90LCB0aGVuIGZyZWUgdGhlIEtWTSBHSVNDXG4mIzQzO1x0ICogcmVzb3VyY2VzLlxuIFx0ICovXG4gXHRpZiAodGVzdF9iaXRfaW52KGFwaWQsICh1bnNpZ25lZCBsb25nICopbWF0cml4X2Rldi1cdTAwM2VpbmZvLmFwbSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgdGVzdF9iaXRfaW52KGFwcWksICh1bnNpZ25lZCBsb25nICopbWF0cml4X2Rldi1cdTAwM2VpbmZvLmFxbSkpIHtcbiBcdFx0dmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHEpO1xuIFx0XHRmbHVzaF93b3JrKFx1MDAyNnEtXHUwMDNlcmVzZXRfd29yayk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcbiBcdH1cbiBcbiBkb25lOlxuQEAgLTI1NTksMjQgJiM0MzsyNTcwLDI4IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICphcXJlbSxcbiBcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqY2RyZW0pXG4ge1xuLVx0aW50IGRvX2hvdHBsdWcgPSAwO1xuJiM0MztcdGJvb2wgZG9faG90cGx1ZyA9IGZhbHNlO1xuIFxuLVx0aWYgKCFiaXRtYXBfZW1wdHkoYXByZW0sIEFQX0RFVklDRVMpKSB7XG4tXHRcdGRvX2hvdHBsdWcgfD0gYml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hcG0sXG4tXHRcdFx0XHRcdCAgICBtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hcG0sXG4tXHRcdFx0XHRcdCAgICBhcHJlbSwgQVBfREVWSUNFUyk7XG4mIzQzO1x0aWYgKGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFwbSwgYXByZW0sIEFQX0RFVklDRVMpKSB7XG4mIzQzO1x0XHRiaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFwbSxcbiYjNDM7XHRcdFx0ICAgICAgbWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXBtLFxuJiM0MztcdFx0XHQgICAgICBhcHJlbSwgQVBfREVWSUNFUyk7XG4mIzQzO1x0XHRkb19ob3RwbHVnID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdGlmICghYml0bWFwX2VtcHR5KGFxcmVtLCBBUF9ET01BSU5TKSkge1xuLVx0XHRkb19ob3RwbHVnIHw9IGJpdG1hcF9hbmRub3QobWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXFtLFxuLVx0XHRcdFx0XHQgICAgbWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXFtLFxuLVx0XHRcdFx0XHQgICAgYXFyZW0sIEFQX0RFVklDRVMpO1xuJiM0MztcdGlmIChiaXRtYXBfaW50ZXJzZWN0cyhtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hcW0sIGFxcmVtLCBBUF9ET01BSU5TKSkge1xuJiM0MztcdFx0Yml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hcW0sXG4mIzQzO1x0XHRcdCAgICAgIG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFxbSxcbiYjNDM7XHRcdFx0ICAgICAgYXFyZW0sIEFQX0RPTUFJTlMpO1xuJiM0MztcdFx0ZG9faG90cGx1ZyA9IHRydWU7XG4gXHR9XG4gXG4tXHRpZiAoIWJpdG1hcF9lbXB0eShjZHJlbSwgQVBfRE9NQUlOUykpXG4tXHRcdGRvX2hvdHBsdWcgfD0gYml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hZG0sXG4tXHRcdFx0XHRcdCAgICBtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hZG0sXG4tXHRcdFx0XHRcdCAgICBjZHJlbSwgQVBfRE9NQUlOUyk7XG4mIzQzO1x0aWYgKGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFkbSwgY2RyZW0sIEFQX0RPTUFJTlMpKSB7XG4mIzQzO1x0XHRiaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFkbSxcbiYjNDM7XHRcdFx0ICAgICAgbWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYWRtLFxuJiM0MztcdFx0XHQgICAgICBjZHJlbSwgQVBfRE9NQUlOUyk7XG4mIzQzO1x0XHRkb19ob3RwbHVnID0gdHJ1ZTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoZG9faG90cGx1ZylcbiBcdFx0dmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTtcbkBAIC0yNjAzLDI4ICYjNDM7MjYxOCwzNSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZSh1bnNpZ25lZCBsb25nICphcF9yZW1vdmUsXG4gXHRERUNMQVJFX0JJVE1BUChhcHJlbSwgQVBfREVWSUNFUyk7XG4gXHRERUNMQVJFX0JJVE1BUChhcXJlbSwgQVBfRE9NQUlOUyk7XG4gXHRERUNMQVJFX0JJVE1BUChjZHJlbSwgQVBfRE9NQUlOUyk7XG4tXHRpbnQgZG9fcmVtb3ZlID0gMDtcbiYjNDM7XHRpbnQgZG9fcmVtb3ZlO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2X2xpc3QsIG5vZGUpIHtcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIHRvIGFjY2VzcyBmaWVsZHMgd2l0aGluIG1hdHJpeF9tZGV2LFxuJiM0MztcdFx0ICogYW5kIGt2bS1cdTAwM2Vsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIG1kZXZzX2xvY2sgdG8gc2F0aXNmeSB0aGUgbG9ja1xuJiM0MztcdFx0ICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAobWF0cml4X21kZXYtXHUwMDNla3ZtKVxuJiM0MztcdFx0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuIFxuLVx0XHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZChhcHJlbSwgYXBfcmVtb3ZlLFxuLVx0XHRcdFx0XHQgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcG0sXG4tXHRcdFx0XHRcdCAgQVBfREVWSUNFUyk7XG4mIzQzO1x0XHRkb19yZW1vdmUgPSBiaXRtYXBfYW5kKGFwcmVtLCBhcF9yZW1vdmUsXG4mIzQzO1x0XHRcdFx0ICAgICAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcG0sXG4mIzQzO1x0XHRcdFx0ICAgICAgIEFQX0RFVklDRVMpO1xuIFx0XHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZChhcXJlbSwgYXFfcmVtb3ZlLFxuIFx0XHRcdFx0XHQgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcW0sXG4gXHRcdFx0XHRcdCAgQVBfRE9NQUlOUyk7XG4tXHRcdGRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kbm90KGNkcmVtLCBjZF9yZW1vdmUsXG4tXHRcdFx0XHRcdCAgICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFkbSxcbi1cdFx0XHRcdFx0ICAgICBBUF9ET01BSU5TKTtcbiYjNDM7XHRcdGRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kKGNkcmVtLCBjZF9yZW1vdmUsXG4mIzQzO1x0XHRcdFx0XHRtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYWRtLFxuJiM0MztcdFx0XHRcdFx0QVBfRE9NQUlOUyk7XG4gXG4gXHRcdGlmIChkb19yZW1vdmUpXG4gXHRcdFx0dmZpb19hcF9tZGV2X2hvdF91bnBsdWdfY2ZnKG1hdHJpeF9tZGV2LCBhcHJlbSwgYXFyZW0sXG4gXHRcdFx0XHRcdFx0ICAgIGNkcmVtKTtcbiBcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRpZiAobWF0cml4X21kZXYtXHUwMDNla3ZtKVxuJiM0MztcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuIFx0fVxuIH1cbiBcbkBAIC0yNzQ5LDEyICYjNDM7Mjc3MSwyMCBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX2FkZCh1bnNpZ25lZCBsb25nICphcG1fYWRkLCB1bnNpZ25lZCBsb25nICphcW1fYWRkLFxuIFx0dmZpb19hcF9maWx0ZXJfYXBpZF9ieV9xdHlwZShhcG1fYWRkLCBhcW1fYWRkKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIGluIG9yZGVyIHRvIGFjY2VzcyBmaWVsZHNcbiYjNDM7XHRcdCAqIHdpdGhpbiBtYXRyaXhfbWRldlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4mIzQzO1xuIFx0XHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVx1MDAzZWFwbV9hZGQsXG4gXHRcdFx0ICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFwbSwgYXBtX2FkZCwgQVBfREVWSUNFUyk7XG4gXHRcdGJpdG1hcF9hbmQobWF0cml4X21kZXYtXHUwMDNlYXFtX2FkZCxcbiBcdFx0XHQgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXFtLCBhcW1fYWRkLCBBUF9ET01BSU5TKTtcbiBcdFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cdTAwM2VhZG1fYWRkLFxuIFx0XHRcdCAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hZG0sIGFkbV9hZGQsIEFQX0RFVklDRVMpO1xuJiM0MztcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuIFx0fVxuIH1cbiBcbkBAIC0yODIxLDggJiM0MzsyODUxLDcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuIFx0REVDTEFSRV9CSVRNQVAoYXBtX2ZpbHRlcmVkLCBBUF9ERVZJQ0VTKTtcbiBcdGJvb2wgZmlsdGVyX2RvbWFpbnMsIGZpbHRlcl9hZGFwdGVycywgZmlsdGVyX2Nkb21zLCBkb19ob3RwbHVnID0gZmFsc2U7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbi1cdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiYjNDM7XHRiaXRtYXBfemVybyhhcG1fZmlsdGVyZWQsIEFQX0RFVklDRVMpO1xuIFxuIFx0ZmlsdGVyX2FkYXB0ZXJzID0gYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFwbSxcbiBcdFx0XHRcdFx0ICAgIG1hdHJpeF9tZGV2LVx1MDAzZWFwbV9hZGQsIEFQX0RFVklDRVMpO1xuQEAgLTI4NDEsOSAmIzQzOzI4NzAsNiBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXG4gXHRcdHZmaW9fYXBfbWRldl91cGRhdGVfZ3Vlc3RfYXBjYihtYXRyaXhfbWRldik7XG4gXG4gXHRyZXNldF9xdWV1ZXNfZm9yX2FwaWRzKG1hdHJpeF9tZGV2LCBhcG1fZmlsdGVyZWQpO1xuLVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuIH1cbiBcbiB2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbyxcbkBAIC0yODU0LDE1ICYjNDM7Mjg4MCwyOSBAQCB2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbyxcbiBcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiBtYXRyaXhfbWRldixcbiYjNDM7XHRcdCAqIGFuZCBrdm0tXHUwMDNlbG9jayBtdXN0IGJlIHRha2VuIGJlZm9yZSBtZGV2c19sb2NrIHRvIHNhdGlzZnkgdGhlIGxvY2tcbiYjNDM7XHRcdCAqIG9yZGVyaW5nIHJlcXVpcmVtZW50IGFuZCBwcmV2ZW50IGEgbG9ja2RlcCBzcGxhdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKG1hdHJpeF9tZGV2LVx1MDAzZWt2bSlcbiYjNDM7XHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4mIzQzO1xuIFx0XHRpZiAoYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LVx1MDAzZWFwbV9hZGQsIEFQX0RFVklDRVMpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LVx1MDAzZWFxbV9hZGQsIEFQX0RPTUFJTlMpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LVx1MDAzZWFkbV9hZGQsIEFQX0RPTUFJTlMpKVxuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRnb3RvIGRvX3VubG9jaztcbiBcbiBcdFx0dmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhtYXRyaXhfbWRldik7XG4gXHRcdGJpdG1hcF9jbGVhcihtYXRyaXhfbWRldi1cdTAwM2VhcG1fYWRkLCAwLCBBUF9ERVZJQ0VTKTtcbiBcdFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVx1MDAzZWFxbV9hZGQsIDAsIEFQX0RPTUFJTlMpO1xuIFx0XHRiaXRtYXBfY2xlYXIobWF0cml4X21kZXYtXHUwMDNlYWRtX2FkZCwgMCwgQVBfRE9NQUlOUyk7XG4mIzQzO1xuJiM0Mztkb191bmxvY2s6XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiYjNDM7XHRcdGlmIChtYXRyaXhfbWRldi1cdTAwM2Vrdm0pXG4mIzQzO1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4gXHR9XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZGSU8mIzM0OywKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZpb19hcF9tZGV2X3Byb2JlJiMzNDssCiAgICAmIzM0O3ZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlJiMzNDssCiAgICAmIzM0O3ZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkwIGFyY2hpdGVjdHVyZSwgZml4aW5nIGxvY2sgb3JkZXJpbmcgYW5kIGxvY2tkZXAgc3BsYXRzIGluIHZhcmlvdXMgbWRldiBhbmQgQVAgYnVzIGNhbGxiYWNrcyAoZS5nLiwgdmZpb19hcF9tZGV2X3Byb2JlLCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB3aGVuIHRoZSB2ZmlvX2FwIGRyaXZlciBpcyBsb2FkZWQgYW5kIG1kZXYgZGV2aWNlcyBhcmUgY3JlYXRlZCB2aWEgc3lzZnMsIG9yIHdoZW4gdGhlIEFQIGJ1cyBwZXJpb2RpY2FsbHkgc2NhbnMgZm9yIGRldmljZXMuIFN5emthbGxlciBjYW4gdHJpZ2dlciB0aGVzZSBwYXRocyBpbiBzMzkweCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IEFQIGluc3RydWN0aW9ucyAoZS5nLiwgS1ZNIG9uIHMzOTB4IG1haW5mcmFtZXMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGM5NjI4YjlkNWFiMjc5YjMxMDBhNWUwYzBiMGQwY2Q4YmU4MjA1YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDEyOjIxOjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCmluZGV4IDQ0YjNhMWRjYzFiMzYuLmZhYWI1ZTkxNzlmZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMKQEAgLTgwMyw5ICYjNDM7ODAzLDkgQEAgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQogCW1hdHJpeF9tZGV2LSZndDtyZXFfdHJpZ2dlciA9IE5VTEw7CiAJbWF0cml4X21kZXYtJmd0O2NmZ19jaGdfdHJpZ2dlciA9IE5VTEw7CiAJZGV2X3NldF9kcnZkYXRhKCZhbXA7bWRldi0mZ3Q7ZGV2LCBtYXRyaXhfbWRldik7Ci0JbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7Z3Vlc3RzX2xvY2spOwogCWxpc3RfYWRkKCZhbXA7bWF0cml4X21kZXYtJmd0O25vZGUsICZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldl9saXN0KTsKLQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7Z3Vlc3RzX2xvY2spOwogCXJldHVybiAwOwogCiBlcnJfcHV0X3ZkZXY6CkBAIC0yMjk3LDYgJiM0MzsyMjk3LDggQEAgc3RhdGljIHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSkKIAl1bnNpZ25lZCBsb25nIGFwaWQgPSBBUF9RSURfQ0FSRChxLSZndDthcHFuKTsKIAl1bnNpZ25lZCBsb25nIGFwcWkgPSBBUF9RSURfUVVFVUUocS0mZ3Q7YXBxbik7CiAKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKJiM0MzsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCAmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZfbGlzdCwgbm9kZSkgewogCQlpZiAodGVzdF9iaXRfaW52KGFwaWQsIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYXBtKSAmYW1wOyZhbXA7CiAJCSAgICB0ZXN0X2JpdF9pbnYoYXBxaSwgbWF0cml4X21kZXYtJmd0O21hdHJpeC5hcW0pKQpAQCAtMjMxNiw2ICYjNDM7MjMxOCw3IEBAIHN0YXRpYyBzc2l6ZV90IHN0YXR1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2OwogCXN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2ID0gdG9fYXBfZGV2KGRldik7CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKIAltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiAJcSA9IGRldl9nZXRfZHJ2ZGF0YSgmYW1wO2FwZGV2LSZndDtkZXZpY2UpOwogCW1hdHJpeF9tZGV2ID0gdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZShxKTsKQEAgLTIzNDMsNiAmIzQzOzIzNDYsNyBAQCBzdGF0aWMgc3NpemVfdCBzdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKIAogCXJldHVybiBuY2hhcnM7CiB9CkBAIC0yNDE1LDE0ICYjNDM7MjQxOSwxNyBAQCB2b2lkIHZmaW9fYXBfbWRldl91bnJlZ2lzdGVyKHZvaWQpCiAKIGludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpCiB7Ci0JaW50IHJldDsKJiM0MzsJaW50IHJldCwgYXBxbjsKIAlzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcTsKIAlERUNMQVJFX0JJVE1BUChhcG1fZmlsdGVyZWQsIEFQX0RFVklDRVMpOwogCXN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7CiAKJiM0MzsJYXBxbiA9IHRvX2FwX3F1ZXVlKCZhbXA7YXBkZXYtJmd0O2RldmljZSktJmd0O3FpZDsKJiM0MzsJbWF0cml4X21kZXYgPSBnZXRfdXBkYXRlX2xvY2tzX2J5X2FwcW4oYXBxbik7CiYjNDM7CiAJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZhbXA7YXBkZXYtJmd0O2RldmljZS5rb2JqLCAmYW1wO3ZmaW9fcXVldWVfYXR0cl9ncm91cCk7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKJiM0MzsJCWdvdG8gZXJyX3JlbGVhc2VfbG9ja3M7CiAKIAlxID0ga3phbGxvY19vYmooKnEpOwogCWlmICghcSkgewpAQCAtMjQzMCwxMSAmIzQzOzI0MzcsMTAgQEAgaW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldikKIAkJZ290byBlcnJfcmVtb3ZlX2dyb3VwOwogCX0KIAotCXEtJmd0O2FwcW4gPSB0b19hcF9xdWV1ZSgmYW1wO2FwZGV2LSZndDtkZXZpY2UpLSZndDtxaWQ7CiYjNDM7CXEtJmd0O2FwcW4gPSBhcHFuOwogCXEtJmd0O3NhdmVkX2lzYyA9IFZGSU9fQVBfSVNDX0lOVkFMSUQ7CiAJbWVtc2V0KCZhbXA7cS0mZ3Q7cmVzZXRfc3RhdHVzLCAwLCBzaXplb2YocS0mZ3Q7cmVzZXRfc3RhdHVzKSk7CiAJSU5JVF9XT1JLKCZhbXA7cS0mZ3Q7cmVzZXRfd29yaywgYXBxX3Jlc2V0X2NoZWNrKTsKLQltYXRyaXhfbWRldiA9IGdldF91cGRhdGVfbG9ja3NfYnlfYXBxbihxLSZndDthcHFuKTsKIAogCWlmIChtYXRyaXhfbWRldikgewogCQl2ZmlvX2FwX21kZXZfbGlua19xdWV1ZShtYXRyaXhfbWRldiwgcSk7CkBAIC0yNDY0LDYgJiM0MzsyNDcwLDggQEAgaW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldikKIAogZXJyX3JlbW92ZV9ncm91cDoKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmFtcDthcGRldi0mZ3Q7ZGV2aWNlLmtvYmosICZhbXA7dmZpb19xdWV1ZV9hdHRyX2dyb3VwKTsKJiM0MztlcnJfcmVsZWFzZV9sb2NrczoKJiM0MzsJcmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX21kZXYobWF0cml4X21kZXYpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI0OTksMTIgJiM0MzsyNTA3LDE1IEBAIHZvaWQgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldikKIAkvKgogCSAqIElmIHRoZSBxdWV1ZSBpcyBub3QgaW4gdGhlIGhvc3QmIzM5O3MgQVAgY29uZmlndXJhdGlvbiwgdGhlbiByZXNldHRpbmcKIAkgKiBpdCB3aWxsIGZhaWwgd2l0aCByZXNwb25zZSBjb2RlIDAxLCAoQVBRTiBub3QgdmFsaWQpOyBzbywgbGV0JiMzOTtzIG1ha2UKLQkgKiBzdXJlIGl0IGlzIGluIHRoZSBob3N0JiMzOTtzIGNvbmZpZy4KJiM0MzsJICogc3VyZSBpdCBpcyBpbiB0aGUgaG9zdCYjMzk7cyBjb25maWcuIElmIGl0IGlzIG5vdCwgdGhlbiBmcmVlIHRoZSBLVk0gR0lTQwomIzQzOwkgKiByZXNvdXJjZXMuCiAJICovCiAJaWYgKHRlc3RfYml0X2ludihhcGlkLCAodW5zaWduZWQgbG9uZyAqKW1hdHJpeF9kZXYtJmd0O2luZm8uYXBtKSAmYW1wOyZhbXA7CiAJICAgIHRlc3RfYml0X2ludihhcHFpLCAodW5zaWduZWQgbG9uZyAqKW1hdHJpeF9kZXYtJmd0O2luZm8uYXFtKSkgewogCQl2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUocSk7CiAJCWZsdXNoX3dvcmsoJmFtcDtxLSZndDtyZXNldF93b3JrKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTsKIAl9CiAKIGRvbmU6CkBAIC0yNTU5LDI0ICYjNDM7MjU3MCwyOCBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiwKIAkJCQkJdW5zaWduZWQgbG9uZyAqYXFyZW0sCiAJCQkJCXVuc2lnbmVkIGxvbmcgKmNkcmVtKQogewotCWludCBkb19ob3RwbHVnID0gMDsKJiM0MzsJYm9vbCBkb19ob3RwbHVnID0gZmFsc2U7CiAKLQlpZiAoIWJpdG1hcF9lbXB0eShhcHJlbSwgQVBfREVWSUNFUykpIHsKLQkJZG9faG90cGx1ZyB8PSBiaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hcG0sCi0JCQkJCSAgICBtYXRyaXhfbWRldi0mZ3Q7c2hhZG93X2FwY2IuYXBtLAotCQkJCQkgICAgYXByZW0sIEFQX0RFVklDRVMpOwomIzQzOwlpZiAoYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtJmd0O3NoYWRvd19hcGNiLmFwbSwgYXByZW0sIEFQX0RFVklDRVMpKSB7CiYjNDM7CQliaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hcG0sCiYjNDM7CQkJICAgICAgbWF0cml4X21kZXYtJmd0O3NoYWRvd19hcGNiLmFwbSwKJiM0MzsJCQkgICAgICBhcHJlbSwgQVBfREVWSUNFUyk7CiYjNDM7CQlkb19ob3RwbHVnID0gdHJ1ZTsKIAl9CiAKLQlpZiAoIWJpdG1hcF9lbXB0eShhcXJlbSwgQVBfRE9NQUlOUykpIHsKLQkJZG9faG90cGx1ZyB8PSBiaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hcW0sCi0JCQkJCSAgICBtYXRyaXhfbWRldi0mZ3Q7c2hhZG93X2FwY2IuYXFtLAotCQkJCQkgICAgYXFyZW0sIEFQX0RFVklDRVMpOwomIzQzOwlpZiAoYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtJmd0O3NoYWRvd19hcGNiLmFxbSwgYXFyZW0sIEFQX0RPTUFJTlMpKSB7CiYjNDM7CQliaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hcW0sCiYjNDM7CQkJICAgICAgbWF0cml4X21kZXYtJmd0O3NoYWRvd19hcGNiLmFxbSwKJiM0MzsJCQkgICAgICBhcXJlbSwgQVBfRE9NQUlOUyk7CiYjNDM7CQlkb19ob3RwbHVnID0gdHJ1ZTsKIAl9CiAKLQlpZiAoIWJpdG1hcF9lbXB0eShjZHJlbSwgQVBfRE9NQUlOUykpCi0JCWRvX2hvdHBsdWcgfD0gYml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi0mZ3Q7c2hhZG93X2FwY2IuYWRtLAotCQkJCQkgICAgbWF0cml4X21kZXYtJmd0O3NoYWRvd19hcGNiLmFkbSwKLQkJCQkJICAgIGNkcmVtLCBBUF9ET01BSU5TKTsKJiM0MzsJaWYgKGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hZG0sIGNkcmVtLCBBUF9ET01BSU5TKSkgewomIzQzOwkJYml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi0mZ3Q7c2hhZG93X2FwY2IuYWRtLAomIzQzOwkJCSAgICAgIG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hZG0sCiYjNDM7CQkJICAgICAgY2RyZW0sIEFQX0RPTUFJTlMpOwomIzQzOwkJZG9faG90cGx1ZyA9IHRydWU7CiYjNDM7CX0KIAogCWlmIChkb19ob3RwbHVnKQogCQl2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpOwpAQCAtMjYwMywyOCAmIzQzOzI2MTgsMzUgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmUodW5zaWduZWQgbG9uZyAqYXBfcmVtb3ZlLAogCURFQ0xBUkVfQklUTUFQKGFwcmVtLCBBUF9ERVZJQ0VTKTsKIAlERUNMQVJFX0JJVE1BUChhcXJlbSwgQVBfRE9NQUlOUyk7CiAJREVDTEFSRV9CSVRNQVAoY2RyZW0sIEFQX0RPTUFJTlMpOwotCWludCBkb19yZW1vdmUgPSAwOwomIzQzOwlpbnQgZG9fcmVtb3ZlOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgJmFtcDttYXRyaXhfZGV2LSZndDttZGV2X2xpc3QsIG5vZGUpIHsKLQkJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9tZGV2LSZndDtrdm0tJmd0O2xvY2spOwomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiBtYXRyaXhfbWRldiwKJiM0MzsJCSAqIGFuZCBrdm0tJmd0O2xvY2sgbXVzdCBiZSB0YWtlbiBiZWZvcmUgbWRldnNfbG9jayB0byBzYXRpc2Z5IHRoZSBsb2NrCiYjNDM7CQkgKiBvcmRlcmluZyByZXF1aXJlbWVudCBhbmQgcHJldmVudCBhIGxvY2tkZXAgc3BsYXQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChtYXRyaXhfbWRldi0mZ3Q7a3ZtKQomIzQzOwkJCW11dGV4X2xvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKIAkJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwogCi0JCWRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kKGFwcmVtLCBhcF9yZW1vdmUsCi0JCQkJCSAgbWF0cml4X21kZXYtJmd0O21hdHJpeC5hcG0sCi0JCQkJCSAgQVBfREVWSUNFUyk7CiYjNDM7CQlkb19yZW1vdmUgPSBiaXRtYXBfYW5kKGFwcmVtLCBhcF9yZW1vdmUsCiYjNDM7CQkJCSAgICAgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFwbSwKJiM0MzsJCQkJICAgICAgIEFQX0RFVklDRVMpOwogCQlkb19yZW1vdmUgfD0gYml0bWFwX2FuZChhcXJlbSwgYXFfcmVtb3ZlLAogCQkJCQkgIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYXFtLAogCQkJCQkgIEFQX0RPTUFJTlMpOwotCQlkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChjZHJlbSwgY2RfcmVtb3ZlLAotCQkJCQkgICAgIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYWRtLAotCQkJCQkgICAgIEFQX0RPTUFJTlMpOwomIzQzOwkJZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoY2RyZW0sIGNkX3JlbW92ZSwKJiM0MzsJCQkJCW1hdHJpeF9tZGV2LSZndDttYXRyaXguYWRtLAomIzQzOwkJCQkJQVBfRE9NQUlOUyk7CiAKIAkJaWYgKGRvX3JlbW92ZSkKIAkJCXZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZyhtYXRyaXhfbWRldiwgYXByZW0sIGFxcmVtLAogCQkJCQkJICAgIGNkcmVtKTsKIAogCQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9jayk7CiYjNDM7CQlpZiAobWF0cml4X21kZXYtJmd0O2t2bSkKJiM0MzsJCQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKIAl9CiB9CiAKQEAgLTI3NDksMTIgJiM0MzsyNzcxLDIwIEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfYWRkKHVuc2lnbmVkIGxvbmcgKmFwbV9hZGQsIHVuc2lnbmVkIGxvbmcgKmFxbV9hZGQsCiAJdmZpb19hcF9maWx0ZXJfYXBpZF9ieV9xdHlwZShhcG1fYWRkLCBhcW1fYWRkKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsICZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldl9saXN0LCBub2RlKSB7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIGluIG9yZGVyIHRvIGFjY2VzcyBmaWVsZHMKJiM0MzsJCSAqIHdpdGhpbiBtYXRyaXhfbWRldgomIzQzOwkJICovCiYjNDM7CQltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiYjNDM7CiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FwbV9hZGQsCiAJCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFwbSwgYXBtX2FkZCwgQVBfREVWSUNFUyk7CiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FxbV9hZGQsCiAJCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFxbSwgYXFtX2FkZCwgQVBfRE9NQUlOUyk7CiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FkbV9hZGQsCiAJCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFkbSwgYWRtX2FkZCwgQVBfREVWSUNFUyk7CiYjNDM7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKIAl9CiB9CiAKQEAgLTI4MjEsOCAmIzQzOzI4NTEsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpCiAJREVDTEFSRV9CSVRNQVAoYXBtX2ZpbHRlcmVkLCBBUF9ERVZJQ0VTKTsKIAlib29sIGZpbHRlcl9kb21haW5zLCBmaWx0ZXJfYWRhcHRlcnMsIGZpbHRlcl9jZG9tcywgZG9faG90cGx1ZyA9IGZhbHNlOwogCi0JbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9tZGV2LSZndDtrdm0tJmd0O2xvY2spOwotCW11dGV4X2xvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKJiM0MzsJYml0bWFwX3plcm8oYXBtX2ZpbHRlcmVkLCBBUF9ERVZJQ0VTKTsKIAogCWZpbHRlcl9hZGFwdGVycyA9IGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LSZndDttYXRyaXguYXBtLAogCQkJCQkgICAgbWF0cml4X21kZXYtJmd0O2FwbV9hZGQsIEFQX0RFVklDRVMpOwpAQCAtMjg0MSw5ICYjNDM7Mjg3MCw2IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldikKIAkJdmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTsKIAogCXJlc2V0X3F1ZXVlc19mb3JfYXBpZHMobWF0cml4X21kZXYsIGFwbV9maWx0ZXJlZCk7Ci0KLQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKLQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKIH0KIAogdm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sCkBAIC0yODU0LDE1ICYjNDM7Mjg4MCwyOSBAQCB2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbywKIAltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7Z3Vlc3RzX2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgJmFtcDttYXRyaXhfZGV2LSZndDttZGV2X2xpc3QsIG5vZGUpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgbWRldnNfbG9jayBtdXN0IGJlIGhlbGQgdG8gYWNjZXNzIGZpZWxkcyB3aXRoaW4gbWF0cml4X21kZXYsCiYjNDM7CQkgKiBhbmQga3ZtLSZndDtsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIG1kZXZzX2xvY2sgdG8gc2F0aXNmeSB0aGUgbG9jawomIzQzOwkJICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LgomIzQzOwkJICovCiYjNDM7CQlpZiAobWF0cml4X21kZXYtJmd0O2t2bSkKJiM0MzsJCQltdXRleF9sb2NrKCZhbXA7bWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9jayk7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiYjNDM7CiAJCWlmIChiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtJmd0O2FwbV9hZGQsIEFQX0RFVklDRVMpICZhbXA7JmFtcDsKIAkJICAgIGJpdG1hcF9lbXB0eShtYXRyaXhfbWRldi0mZ3Q7YXFtX2FkZCwgQVBfRE9NQUlOUykgJmFtcDsmYW1wOwogCQkgICAgYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LSZndDthZG1fYWRkLCBBUF9ET01BSU5TKSkKLQkJCWNvbnRpbnVlOwomIzQzOwkJCWdvdG8gZG9fdW5sb2NrOwogCiAJCXZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcobWF0cml4X21kZXYpOwogCQliaXRtYXBfY2xlYXIobWF0cml4X21kZXYtJmd0O2FwbV9hZGQsIDAsIEFQX0RFVklDRVMpOwogCQliaXRtYXBfY2xlYXIobWF0cml4X21kZXYtJmd0O2FxbV9hZGQsIDAsIEFQX0RPTUFJTlMpOwogCQliaXRtYXBfY2xlYXIobWF0cml4X21kZXYtJmd0O2FkbV9hZGQsIDAsIEFQX0RPTUFJTlMpOwomIzQzOwomIzQzO2RvX3VubG9jazoKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwomIzQzOwkJaWYgKG1hdHJpeF9tZGV2LSZndDtrdm0pCiYjNDM7CQkJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9jayk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7Z3Vlc3RzX2xvY2spOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjM4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNzUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlZGSU8gQVAgRHJpdmVyIFVwZGF0ZSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AuIFRoaXMgaXMgdGhlIFZGSU8gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlJiMzOTtzIEFkanVuY3QgUHJvY2Vzc29yIChBUCkuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggbG9ja2luZyBjaGFuZ2VzLiBUaGV5JiMzOTtyZSByZW5hbWluZyBgbWRldnNfbG9ja2AgdG8gYGd1ZXN0c19sb2NrYCBpbiBgdmZpb19hcF9tZGV2X3Byb2JlYCwgYWRkaW5nIGxvY2tkZXAgYXNzZXJ0aW9ucywgYW5kIHVwZGF0aW5nIGxvY2sgdXNhZ2UgaW4gc2V2ZXJhbCBmdW5jdGlvbnMgbGlrZSBgc3RhdHVzX3Nob3dgLCBgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlYCwgYW5kIGB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlYC4gVGhlcmUgYXJlIGFsc28gbW9kaWZpY2F0aW9ucyB0byBoYW5kbGUgaG90cGx1Zy91bnBsdWcgY29uZmlndXJhdGlvbnMgKGB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19jZmdgLCBgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmVgLCBgdmZpb19hcF9tZGV2X2NmZ19hZGRgLCBgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZ2ApIGFuZCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCB3aXRoIGNhcmVmdWwgbG9ja2luZyBjb25zaWRlcmF0aW9ucywgd2hpY2ggaXMgZ29vZC4gVGhleSYjMzk7cmUgbWFraW5nIGEgbG90IG9mIGNoYW5nZXMgdG8gZW5zdXJlIHByb3BlciBsb2NraW5nLgoKQnV0IHRoaXMgcmFpc2VzIGEgcXVlc3Rpb246IGlzIHRoaXMgZHJpdmVyIHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50PyBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9uZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuIEl0JiMzOTtzIGFuIHMzOTAtc3BlY2lmaWMgZHJpdmVyLCBzbyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaWYgdGhlIEFQIGhhcmR3YXJlIGlzIGVtdWxhdGVkLiBUaGUgY29kZSBwYXRoIGlzIGluIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGl0JiMzOTtzIGZ1enplZCBpbiBzdGFuZGFyZCBRRU1VLiBTeXprYWxsZXIgc3VwcG9ydHMgczM5MHgsIHNvIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBIb3dldmVyLCB0aGUgcHJvbXB0IGlzIHRlbGxpbmcgbWUgdG8gY29uc2lkZXIgaWYgdGhlIGRyaXZlciBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRG9lcyBRRU1VIGVtdWxhdGUgdGhlIHMzOTB4IEFQIGhhcmR3YXJlIGl0c2VsZj8gVGhpcyBkcml2ZXIgaXMgYHZmaW8tYXBgLCB3aGljaCBpcyBwYXNzLXRocm91Z2guIElzIHRoZSBBUCBoYXJkd2FyZSBlbXVsYXRlZD8gSSBuZWVkIHRvIGtub3cgaWYgUUVNVSBzdXBwb3J0cyBWRklPIEFQICplbXVsYXRpb24qIG9yIGp1c3QgcGFzcy10aHJvdWdoLiBJIG5lZWQgdG8gc2VhcmNoIGZvciBgdmZpb19hcF9tZGV2X3Byb2JlYCBvciBleGFtaW5lIGB2ZmlvX2FwX29wcy5jYCBhbmQgYHZmaW9fYXBfZHJ2LmNgIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIFZGSU8gQVAgaXMgbWVhbnQgZm9yIHRoZSAqaG9zdCosIGJ1dCBpdOKAmXMgYW4gbWRldiBkcml2ZXIsIHNvIHRoZSByZWFsIHF1ZXN0aW9uIGlzIGhvdyB0byBjcmVhdGUgbWRldiBkZXZpY2VzIHdpdGhvdXQgcGh5c2ljYWwgQVAgaGFyZHdhcmUuIFRoaXMgaXMga2V5LiBUaGUgbG9ja2luZyBjaGFuZ2VzIGFyZSBpbXBvcnRhbnQsIGJ1dCBpZiB0aGUgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlLCB0aGVuIHRoZSBsb2NraW5nIGJlY29tZXMgbW9vdC4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB3ZSBjYW4gcmVhY2ggdGhhdCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fYXBfbWRldl9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9NTg9c3RhdGljIHN0cnVjdCBhcF9kcml2ZXIgdmZpb19hcF9kcnYgPSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6NTk6XHQucHJvYmUgPSB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtNjAtXHQucmVtb3ZlID0gdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9Nzc2PXN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X2luaXRfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldilcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzg5LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjc5MDpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9wcm9iZShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzkxLXtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjM3OD1zdGF0aWMgc3RydWN0IG1kZXZfZHJpdmVyIHZmaW9fYXBfbWF0cml4X2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM4Ni1cdH0sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjM4NzpcdC5wcm9iZSA9IHZmaW9fYXBfbWRldl9wcm9iZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzg4LVx0LnJlbW92ZSA9IHZmaW9fYXBfbWRldl9yZW1vdmUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI0MTQ9dm9pZCB2ZmlvX2FwX21kZXZfdW5yZWdpc3Rlcih2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDE5LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI0MjA6aW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDIxLXtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE1Nj12b2lkIHZmaW9fYXBfbWRldl91bnJlZ2lzdGVyKHZvaWQpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNTctXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE1ODppbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKnF1ZXVlKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtMTU5LXZvaWQgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICpxdWV1ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY3MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIHZmaW9fYXAgYW5kIG1kZXYgSW50ZWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGB2ZmlvX2FwYCBhbmQgbWRldiBhcmUgaW50ZXJhY3RpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBkcml2ZXIgbXVzdCByZWdpc3RlciBpdHNlbGYgc29tZWhvdyBhcyBhbiBtZGV2IGRyaXZlci4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvZiB0aGUgbWRldi1yZWxhdGVkIG9wZXJhdGlvbnMgbXVzdCBiZSBoYW5kbGVkIHdpdGhpbiB0aGUgYHZmaW9fYXBfbWRldl9wcm9iZWAgZnVuY3Rpb24sIHRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZSwgZXNwZWNpYWxseSBhcyB0aGF0JiMzOTtzIHdoYXQmIzM5O3MgY2FsbGVkIHdoZW4gYW4gbWRldiBkZXZpY2UgaXMgY3JlYXRlZC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBjYW4gd2UgYWN0dWFsbHkgKmNyZWF0ZSogYW4gbWRldiBkZXZpY2UgZm9yIHRoZSBgdmZpb19hcGAgZHJpdmVyPyBUaGF0JiMzOTtzIHRoZSByZWFsIGNydXggb2YgdGhlIGlzc3VlIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBUbyBnZXQgdGhlIGRldGFpbHMsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmNgIGFuZCBzZWUgZXhhY3RseSBob3cgdGhleSYjMzk7cmUgcmVnaXN0ZXJpbmcgdGhlIG1kZXYgcGFyZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIHBvdGVudGlhbCBwcm9ibGVtKSBsaWtlbHkgcmVzaWRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHRob3JvdWdobHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRldl9yZWdpc3Rlcl9wYXJlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjM5MT1pbnQgdmZpb19hcF9tZGV2X3JlZ2lzdGVyKHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0MDEtXHRtYXRyaXhfZGV2LVx1MDAzZW1kZXZfdHlwZXMgPSBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfdHlwZTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNDAyOlx0cmV0ID0gbWRldl9yZWdpc3Rlcl9wYXJlbnQoXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VwYXJlbnQsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZGV2aWNlLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0MDMtXHRcdFx0XHQgICBcdTAwMjZ2ZmlvX2FwX21hdHJpeF9kcml2ZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE3NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRpZ2dpbmcgaW50byBWRklPLUFQIERldmljZSBSZWdpc3RyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGB2ZmlvX2FwX21kZXZfcmVnaXN0ZXJgIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGhlcmUsIGFuZCBpdCYjMzk7cyBjYWxsaW5nIGBtZGV2X3JlZ2lzdGVyX3BhcmVudGAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgcmVnaXN0cmF0aW9uIHByb2Nlc3MsIHJpZ2h0PyBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0cmlnZ2VyLiBJcyBgdmZpb19hcF9tZGV2X3JlZ2lzdGVyYCBleGVjdXRlZCBhdXRvbWF0aWNhbGx5IHdoZW5ldmVyIHRoZSBtb2R1bGUgbG9hZHMsIG9yIGlzIHRoZXJlIGEgZGVwZW5kZW5jeSBvbiB0aGUgYWN0dWFsIHByZXNlbmNlIG9mIEFQIGhhcmR3YXJlPyBUaGUgZGlzdGluY3Rpb24gaXMgY3JpdGljYWwgZm9yIGhvdyBJIGFyY2hpdGVjdCBteSBpbml0aWFsaXphdGlvbiBhbmQgZXJyb3ItaGFuZGxpbmcgc3RyYXRlZ2llcy4gVGhpcyBkZXRlcm1pbmVzIGlmIEkgY2FuIHJlbHkgb24gaXRzIHByZXNlbmNlLiBJZiBpdCBpcyBvbmx5IGNhbGxlZCBvbiB0aGUgcHJlc2VuY2Ugb2YgdGhlIEFQIGhhcmR3YXJlLCB0aGVuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBoYW5kbGUgdGhlIGVkZ2UgY2FzZSB3aGVyZSB0aGUgbW9kdWxlIGxvYWRzIGJ1dCB0aGUgaGFyZHdhcmUgaXMgbm90IHByZXNlbnQuIEFuZCBjb252ZXJzZWx5LCBpZiBpdCBpcyB1bmNvbmRpdGlvbmFsLCBob3cgY2FuIEkgZGV0ZWN0IHRoYXQgdGhlIGhhcmR3YXJlICppcyogcHJlc2VudCwgaWYgbmVjZXNzYXJ5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gcHJlcGFyZWQgZm9yIGFsbCBzY2VuYXJpb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19hcF9tZGV2X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTE2Nz1zdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTg4LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjE4OTpcdHJldCA9IHZmaW9fYXBfbWRldl9yZWdpc3RlcigpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE5MC1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjM3OD1zdGF0aWMgc3RydWN0IG1kZXZfZHJpdmVyIHZmaW9fYXBfbWF0cml4X2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM5MC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMzkxOmludCB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIodm9pZClcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzkyLXtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE0Mz1zdHJ1Y3QgdmZpb19hcF9xdWV1ZSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNTQtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE1NTppbnQgdmZpb19hcF9tZGV2X3JlZ2lzdGVyKHZvaWQpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNTYtdm9pZCB2ZmlvX2FwX21kZXZfdW5yZWdpc3Rlcih2b2lkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODc4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIHRoZSBWRklPLUFQIERyaXZlciBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBWRklPLUFQIGRyaXZlci4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYHZmaW9fYXBfaW5pdGAsIHdoaWNoIEkga25vdyByZXNpZGVzIGluIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBob29rcyBpdHNlbGYgaW50byB0aGUgc3lzdGVtLCByZWdpc3RlcnMgd2l0aCB0aGUgVkZJTyBjb3JlLCBhbmQgc3BlY2lmaWNhbGx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgQVAgKEFjY2VsZXJhdG9yIFByb2Nlc3MpIGhhcmR3YXJlIG9uIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgdGhlIGRldmljZSBwcm9iaW5nLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgYW55IHBvdGVudGlhbCBwb3dlciBtYW5hZ2VtZW50IHJlbGF0ZWQgaW5pdGlhbGlzYXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBkcml2ZXIgc2V0cyB1cCB0aGUgbmVjZXNzYXJ5IHN0cnVjdHVyZXMgZm9yIG1hbmFnaW5nIHRoZSBBUCBkZXZpY2VzIGFuZCB0aGVpciBhc3NvY2lhdGVkIERNQSBtYXBwaW5ncyBmb3IgSU9NTVVzLiBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyBpdCBoYW5kbGVzIGVycm9yIGNvbmRpdGlvbnMgYW5kIGhvdHBsdWcgc2NlbmFyaW9zIGR1cmluZyBpbml0aWFsaXphdGlvbi4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgaGFuZGxlZCB0aGUgY29tcGxleGl0aWVzIG9mIEFQIGRldmljZSBhY2Nlc3MgYW5kIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLiBUaGlzIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBWRklPLUFQIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBjcnlwdG8gaGFyZHdhcmUgYW5kIGVuYWJsZXMgdXNlcnNwYWNlIGFjY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2MDpcdFxuIDE2MTpcdFx0ZGVidWdfcmVnaXN0ZXJfdmlldyh2ZmlvX2FwX2RiZl9pbmZvLCBcdTAwMjZkZWJ1Z19zcHJpbnRmX3ZpZXcpO1xuIDE2MjpcdFx0ZGVidWdfc2V0X2xldmVsKHZmaW9fYXBfZGJmX2luZm8sIERCRl9XQVJOKTtcbiAxNjM6XHRcbiAxNjQ6XHRcdHJldHVybiAwO1xuIDE2NTpcdH1cbiAxNjY6XHRcbiAxNjc6XHRzdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcbiAxNjg6XHR7XG4gMTY5Olx0XHRpbnQgcmV0O1xuIDE3MDpcdFxuIDE3MTpcdFx0cmV0ID0gdmZpb19hcF9kYmZfaW5mb19pbml0KCk7XG4gMTcyOlx0XHRpZiAocmV0KVxuIDE3MzpcdFx0XHRyZXR1cm4gcmV0O1xuIDE3NDpcdFxuIDE3NTpcdFx0LyogSWYgdGhlcmUgYXJlIG5vIEFQIGluc3RydWN0aW9ucywgdGhlcmUgaXMgbm90aGluZyB0byBwYXNzIHRocm91Z2guICovXG4gMTc2Olx0XHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSlcbiAxNzc6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gMTc4Olx0XG4gMTc5Olx0XHRyZXQgPSB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlKCk7XG4gMTgwOlx0XHRpZiAocmV0KVxuIDE4MTpcdFx0XHRyZXR1cm4gcmV0O1xuIDE4MjpcdFxuIDE4MzpcdFx0cmV0ID0gYXBfZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNnZmaW9fYXBfZHJ2LCBUSElTX01PRFVMRSwgVkZJT19BUF9EUlZfTkFNRSk7XG4gMTg0Olx0XHRpZiAocmV0KSB7XG4gMTg1Olx0XHRcdHZmaW9fYXBfbWF0cml4X2Rldl9kZXN0cm95KCk7XG4gMTg2Olx0XHRcdHJldHVybiByZXQ7XG4gMTg3Olx0XHR9XG4gMTg4Olx0XG4gMTg5Olx0XHRyZXQgPSB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIoKTtcbiAxOTA6XHRcdGlmIChyZXQpIHtcbiAxOTE6XHRcdFx0YXBfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2dmZpb19hcF9kcnYpO1xuIDE5MjpcdFx0XHR2ZmlvX2FwX21hdHJpeF9kZXZfZGVzdHJveSgpO1xuIDE5MzpcdFxuIDE5NDpcdFx0XHRyZXR1cm4gcmV0O1xuIDE5NTpcdFx0fVxuIDE5NjpcdFxuIDE5NzpcdFx0cmV0dXJuIDA7XG4gMTk4Olx0fVxuIDE5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzQ4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgSGFyZHdhcmUgQ29tcGF0aWJpbGl0eSBJc3N1ZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYml0IG9mIGNvZGU6IGBpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkgcmV0dXJuIC1FTk9ERVY7YCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0htbSwgdGhpcyBsb29rcyBsaWtlIGEgY2hlY2sgZm9yIHNwZWNpZmljIGhhcmR3YXJlIGF2YWlsYWJpbGl0eS4mIzM0OyBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGd1YXJkaW5nIGFnYWluc3QgYXR0ZW1wdGluZyB0byBleGVjdXRlIGluc3RydWN0aW9ucyB0aGF0IG1pZ2h0IG5vdCBiZSBzdXBwb3J0ZWQuIFRoZSBxdWljayBleGl0IHdpdGggYC1FTk9ERVZgIChEZXZpY2UgTm90IEZvdW5kKSBpcyBhIGdvb2QgaW5kaWNhdGlvbiBvZiB0aGF0LgoKTm93LCBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgIGZ1bmN0aW9uIHdpbGwgYWN0dWFsbHkgKnJldHVybiB0cnVlKiBpbiBteSBRRU1VIGVudmlyb25tZW50LiBRRU1VJiMzOTtzIGVtdWxhdGVkIGhhcmR3YXJlIGlzbiYjMzk7dCBhbHdheXMgYSBwZXJmZWN0IG1hdGNoIGZvciByZWFsIGhhcmR3YXJlLCBhbmQgdGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBxdWVzdGlvbi4gSSBuZWVkIHRvIGRpZyBpbnRvIHdoYXQgZXhhY3RseSBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCBpcyAqZG9pbmcqIHVuZGVyIHRoZSBob29kLiBEb2VzIGl0IGNoZWNrIGZvciBhIHNwZWNpZmljIENQVSBmZWF0dXJlIGZsYWc/IElzIGl0IHJlYWRpbmcgc29tZSBtb2RlbC1zcGVjaWZpYyByZWdpc3Rlcj8gSXMgaXQgcHJvYmluZyBmb3IgYSBjZXJ0YWluIGluc3RydWN0aW9uIG9wY29kZT8gVW5kZXJzdGFuZGluZyAqaG93KiB0aGlzIGNoZWNrIHdvcmtzIGlzIGFic29sdXRlbHkgY3JpdGljYWwgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBjb2RlIHdpbGwgcnVuIGNvcnJlY3RseSB3aXRoaW4gdGhlIGVtdWxhdGVkIGNvbnRleHQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oPTcyPXVuaW9uIGFwX3F1ZXVlX3N0YXR1c19yZWcge1xuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oLTgwLS8qKlxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmg6ODE6ICogYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIC0gVGVzdCBpZiBBUCBpbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZS5cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oLTgyLSAqXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODQtICovXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaDo4NTpzdGF0aWMgaW5saW5lIGJvb2wgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSh2b2lkKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODYte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMTA1PXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X2NyeXB0byhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNTEtXHRjYXNlIEtWTV9TMzkwX1ZNX0NSWVBUT19FTkFCTEVfQVBJRTpcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTUyOlx0XHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNTMtXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE1OC1cdGNhc2UgS1ZNX1MzOTBfVk1fQ1JZUFRPX0RJU0FCTEVfQVBJRTpcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTU5Olx0XHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNjAtXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjEwMD1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX2hhc19hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjE1Ni1cdFx0Y2FzZSBLVk1fUzM5MF9WTV9DUllQVE9fRElTQUJMRV9BUElFOlxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjIxNTc6XHRcdFx0cmV0ID0gYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpID8gMCA6IC1FTlhJTztcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMTU4LVx0XHRcdGJyZWFrO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zMTAxPXN0YXRpYyBpbnQga3ZtX3MzOTBfYXB4YV9pbnN0YWxsZWQodm9pZClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEwNC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTA1Olx0aWYgKGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxMDYtXHRcdGlmIChhcF9xY2koXHUwMDI2aW5mbykgPT0gMClcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz01OTI9c3RhdGljIGludCBoYW5kbGVfcHFhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNjAwLVx0LyogVmVyaWZ5IHRoYXQgdGhlIEFQIGluc3RydWN0aW9uIGFyZSBhdmFpbGFibGUgKi9cbmFyY2gvczM5MC9rdm0vcHJpdi5jOjYwMTpcdGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNjAyLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0yNTc4PXN0YXRpYyBpbnQgX19pbml0IGFwX21vZHVsZV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNTgxLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNTgyOlx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjU4My1cdFx0cHJfd2FybihcJiMzNDtUaGUgaGFyZHdhcmUgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgQVAgaW5zdHJ1Y3Rpb25zXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9MTY3PXN0YXRpYyBpbnQgX19pbml0IHZmaW9fYXBfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xNzUtXHQvKiBJZiB0aGVyZSBhcmUgbm8gQVAgaW5zdHJ1Y3Rpb25zLCB0aGVyZSBpcyBub3RoaW5nIHRvIHBhc3MgdGhyb3VnaC4gKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxNzY6XHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSlcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xNzctXHRcdHJldHVybiAtRU5PREVWO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI2OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlYCB0aGluZy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cyB3aXRoIFMvMzkwIGFyY2hpdGVjdHVyZSBzcGVjaWZpY3MsIGlzIHRvIGNoZWNrIHRoZSBoZWFkZXIgZmlsZXMuIEkgZmlndXJlIGl0JiMzOTtzIGxpa2VseSBkZWZpbmVkIHdpdGhpbiB0aGUgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oYCBkaXJlY3Rvcnkg4oCTIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFyY2hpdGVjdHVyYWwgc3BlY2lmaWNzIGZvciB0aGUgQWNjZXNzIFBhdGggZnVuY3Rpb25zIGFyZSB1c3VhbGx5IGRlY2xhcmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbWFjcm8sIGZ1bmN0aW9uLCBvciB2YXJpYWJsZSBtZWFucy4gSXMgaXQgYSBjb21waWxlLXRpbWUgY2hlY2s/IEEgcnVudGltZSBjYXBhYmlsaXR5IHRlc3Q/IFdoYXQga2luZCBvZiBBUCBpbnN0cnVjdGlvbnMgaXMgdGhpcyBtYWNybyBjb25jZXJuZWQgYWJvdXQ/IEtub3dpbmcgdGhpcyBpcyBpbXBvcnRhbnQgZm9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzIGFuZCBmb3IgdW5kZXJzdGFuZGluZyBhdmFpbGFibGUgaW5zdHJ1Y3Rpb25zLiBUaW1lIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgdG8gdGhlIGJvdHRvbSBvZiBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0LyoqXG4gIDgxOlx0ICogYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIC0gVGVzdCBpZiBBUCBpbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZS5cbiAgODI6XHQgKlxuICA4MzpcdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgQVAgaW5zdHJ1Y3Rpb25zIGFyZSBpbnN0YWxsZWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgODQ6XHQgKi9cbiAgODU6XHRzdGF0aWMgaW5saW5lIGJvb2wgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSh2b2lkKVxuICA4NjpcdHtcbiAgODc6XHRcdHVuc2lnbmVkIGxvbmcgcmVnMCA9IEFQX01LUUlEKDAsIDApO1xuICA4ODpcdFx0dW5zaWduZWQgbG9uZyByZWcxID0gMDtcbiAgODk6XHRcbiAgOTA6XHRcdGFzbSB2b2xhdGlsZShcbiAgOTE6XHRcdFx0XCYjMzQ7XHRsZ3JcdDAsJVtyZWcwXVxcblwmIzM0O1x0XHQvKiBxaWQgaW50byBncjAgKi9cbiAgOTI6XHRcdFx0XCYjMzQ7XHRsZ2hpXHQxLDBcXG5cJiMzNDtcdFx0XHQvKiAwIGludG8gZ3IxICovXG4gIDkzOlx0XHRcdFwmIzM0O1x0bGdoaVx0MiwwXFxuXCYjMzQ7XHRcdFx0LyogMCBpbnRvIGdyMiAqL1xuICA5NDpcdFx0XHRcJiMzNDtcdC5pbnNuXHRycmUsMHhiMmFmMDAwMCwwLDBcXG5cJiMzNDtcdC8qIFBRQVAoVEFQUSkgKi9cbiAgOTU6XHRcdFx0XCYjMzQ7MDpcdGxhXHQlW3JlZzFdLDFcXG5cJiMzNDtcdFx0LyogMSBpbnRvIHJlZzEgKi9cbiAgOTY6XHRcdFx0XCYjMzQ7MTpcXG5cJiMzNDtcbiAgOTc6XHRcdFx0RVhfVEFCTEUoMGIsIDFiKVxuICA5ODpcdFx0XHQ6IFtyZWcxXSBcJiMzNDsmIzQzO1x1MDAyNmRcJiMzNDsgKHJlZzEpXG4gIDk5Olx0XHRcdDogW3JlZzBdIFwmIzM0O2RcJiMzNDsgKHJlZzApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODg3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmVhc2liaWxpdHkgb2YgRnV6emluZyB0aGUgYHZmaW9fYXBgIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHBvc3NpYmxlIHRvIHJlYWNoIGNlcnRhaW4gY29kZSBwYXRocyB3aXRoaW4gdGhlIGB2ZmlvX2FwYCBkcml2ZXIgdXNpbmcgc3l6a2FsbGVyLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBzMzkweCBhcmNoaXRlY3R1cmUuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHJldm9sdmVzIGFyb3VuZCB3aGV0aGVyIHRoZSBBUCAoQWR2YW5jZWQgUHJvY2Vzc29yKSBpbnN0cnVjdGlvbnMgYXJlIGFjdHVhbGx5ICphdmFpbGFibGUqIGluIHRoZSBlbnZpcm9ubWVudHMgd2hlcmUgc3l6a2FsbGVyIGlzIHR5cGljYWxseSBkZXBsb3llZC4KCkZpcnN0LCBJIG5lZWQgdG8ga25vdyBpZiB0aGUgYFBRQVBgIGluc3RydWN0aW9uLCB3aGljaCBpcyBjb3JlIHRvIEFQIGZ1bmN0aW9uYWxpdHksIGlzIGV2ZW4gZW11bGF0ZWQgYnkgUUVNVSBmb3IgczM5MHggZ3Vlc3RzLiBRRU1VICptaWdodCogZW11bGF0ZSBpdCBpZiBpdCYjMzk7cyBydW5uaW5nIHdpdGggS1ZNIG9uIGFuIHMzOTB4IGhvc3QuIEJ1dCBpZiBpdCYjMzk7cyBpbiBUQ0cgbW9kZSAocHVyZSBlbXVsYXRpb24pLCBwcm9iYWJseSBub3QuIEkga25vdyB0aGF0IHN5emthbGxlciBydW5zIHMzOTB4IGluIFFFTVUgVENHIG9uIHg4Nl82NCBob3N0cyBhbmQgS1ZNIG9uIHMzOTB4IGhvc3RzLgoKU2luY2UgdGhlIHByb21wdCBleHBsaWNpdGx5IG1lbnRpb25zIHNjZW5hcmlvcyB0aGF0IGFyZSAqaW1wb3NzaWJsZSogdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBJJiMzOTttIG5vdyBob25pbmcgaW4gb24gQVAgaGFyZHdhcmUgZW11bGF0aW9uIGluIFFFTVUgVENHIHNwZWNpZmljYWxseS4gVGhlIG1vcmUgSSB0aGluayBhYm91dCBpdCwgaXQmIzM5O3MgdmVyeSB1bmxpa2VseSB0aGF0IFFFTVUgVENHIGVtdWxhdGVzIEFQIGhhcmR3YXJlLCBzaW5jZSB0aG9zZSBhcmUgc3BlY2lhbGl6ZWQgbWFpbmZyYW1lIGNyeXB0byBjYXJkcy4KCkkgY2FuJiMzOTt0IGNoZWNrIFFFTVUgc291cmNlIHJpZ2h0IG5vdywgc28gbGV0IG1lIHBpdm90IGFuZCBzZWUgaWYgdGhlIGtlcm5lbCBpdHNlbGYgaGFzIHNvZnR3YXJlIGVtdWxhdG9ycyBmb3IgQVAuIE5vcGUsIHRoYXQmIzM5O3MgYSBkZWFkIGVuZC4gQVAgaXMgYSB0cnVlIGhhcmR3YXJlIGZlYXR1cmUgb2YgSUJNIFogbWFpbmZyYW1lcy4gVGhlbiBJIHJlbWVtYmVyIGB2ZmlvX2FwYCwgd2hpY2ggaXMgKmZvciogcGFzc2luZyB0aHJvdWdoIEFQIGRldmljZXMgdG8gS1ZNIGd1ZXN0cy4gSXQgcmVnaXN0ZXJzIGFzIGFuIG1kZXYgZHJpdmVyIGlmIGl0JiMzOTtzIGxvYWRlZC4KClRoZSBjcml0aWNhbCBwaWVjZSBoZXJlOiBjYW4gd2UgKmV2ZW4qIGNyZWF0ZSBhbiBtZGV2IGRldmljZSBmb3IgYHZmaW9fYXBgIGlmIHRoZXJlJiMzOTtzIG5vIEFQIGhhcmR3YXJlPyBObywgYmVjYXVzZSBgdmZpb19hcF9pbml0YCByZXR1cm5zIGAtRU5PREVWYCBpZiBgIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKWAuIFRoZSBtb2R1bGUgd291bGRuJiMzOTt0IGV2ZW4gbG9hZC4gU28sIGRlZmluaXRlbHkgbm8gQVAgaW5zdHJ1Y3Rpb25zIGluIFFFTVUgVENHLiBBUCBpcyAqb25seSogYWNjZXNzaWJsZSB2aWEgS1ZNIHdoZW4gdGhlIGhvc3QgaGFzIHRoZSBoYXJkd2FyZSBhbmQgeW91IHVzZSBgdmZpb19hcGAgKG9yIGlmIHRoZSBob3N0IGtlcm5lbCBvZmZlcnMgQVAgdG8gdGhlIGd1ZXN0KS4gVGhvdWdoLCBzb21ldGltZXMgc3l6a2FsbGVyICpkb2VzKiBydW4gczM5MHggS1ZNIG9uIGFjdHVhbCBtYWluZnJhbWVzLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIHJlYWNoYWJpbGl0eSwgaWYgaXQgd2VyZSB0byBydW4gb24gYSBzMzkweCBMUEFSIG9yIHovVk0gZ3Vlc3QgKGFjdGluZyBhcyB0aGUgaG9zdCBmb3IgS1ZNKS4gVGhvc2UgbWlnaHQgaGF2ZSByZWFsIEFQIGRldmljZXMuIFNvLCBpcyBgdmZpb19hcGAgZnV6emFibGU/IExldCYjMzk7cyBjaGVjayB0aGUgY29kZSBjaGFuZ2VzLiBJJiMzOTttIGxvb2tpbmcgYXQgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AuCgpPa2F5LCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBhbGwgZGVlcGx5IGludm9sdmVkIGluIHRoZSBtZGV2IGxpZmVjeWNsZSBhbmQgQVAgYnVzIGNhbGxiYWNrczogYHZmaW9fYXBfbWRldl9wcm9iZWAsIGB2ZmlvX2FwX21kZXZfZm9yX3F1ZXVlYCwgYHN0YXR1c19zaG93YCwgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWAsIGB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlYCwgYHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZ2AsIGB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZWAsIGB2ZmlvX2FwX21kZXZfY2ZnX2FkZGAsIGB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnYCwgYW5kIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgLgoKQ2FuIHN5emthbGxlciB0cmlnZ2VyIHRoZXNlPyBEZWZpbml0ZWx5LCBieSBpbnRlcmFjdGluZyB3aXRoIHN5c2ZzIHRvIGNyZWF0ZSBtZGV2IGRldmljZXMsIGFuZCBBUCBidXMgc2Nhbm5pbmcgKHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgb3IgaGFwcGVucyBhdXRvbWF0aWNhbGx5KS4gV2FpdCwgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWAgaXMgY2FsbGVkIHdoZW4gYW4gQVAgcXVldWUgZGV2aWNlIGlzIGJvdW5kIHRvIHRoZSBgdmZpb19hcGAgZHJpdmVyLiBUaGlzIHJlcXVpcmVzIGEgcXVldWUgZGV2aWNlLiBOb3csIGlzIGl0IHBvc3NpYmxlIHRvIGNyZWF0ZSBzdWNoIGEgZGV2aWNlIHZpYSBzb2Z0d2FyZT8gTGV0JiMzOTtzIGNoZWNrIGBkcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZpY2VfcmVnaXN0ZXIuKmFwXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBwcm9tcHQsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIEFQIERldmljZSBDcmVhdGlvbiBQcm9jZXNzZXMqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBBY2Nlc3MgUG9pbnQgKEFQKSBkZXZpY2VzIGFyZSBhY3R1YWxseSAqbWFkZSouIEl04oCZcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBxdWVzdGlvbiwgZXNwZWNpYWxseSB3aGVuIHlvdSBjb25zaWRlciB0aGUgbnVhbmNlcyBvZiBkaWZmZXJlbnQgbWFudWZhY3R1cmVycyBhbmQgdGhlIHZhcmlvdXMgY2hpcHNldHMgYW5kIGZpcm13YXJlIGludm9sdmVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBsZXZlbCBvZiBkZXRhaWwgYW0gSSBhaW1pbmcgZm9yIGhlcmU/IElzIHRoaXMgYSBoaWdoLWxldmVsIG92ZXJ2aWV3IG9mIHRoZSBtYW51ZmFjdHVyaW5nIHBpcGVsaW5lLCBvciBhcmUgd2UgZ2V0dGluZyBkb3duIGluIHRoZSB3ZWVkcyB3aXRoIHNwZWNpZmljIGNvbXBvbmVudCBzb3VyY2luZyBhbmQgdmFsaWRhdGlvbj8gCgpJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIHRoaXMuIFRoaW5raW5nIG1vcmUsIGl04oCZcyBub3QganVzdCBhYm91dCB0aGUgKnBoeXNpY2FsKiBjcmVhdGlvbiwgZWl0aGVyLiBJdOKAmXMgYWxzbyB0aGUgbG9naWNhbCBidWlsZCBwcm9jZXNzLiBUaGUgZmlybXdhcmUgZmxhc2hpbmcsIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24sIHRoZSB0ZXN0aW5nLi4uIFRoYXQgd2hvbGUgbGlmZWN5Y2xlIGZyb20gcmF3IHNpbGljb24gdG8gYSBmdW5jdGlvbmFsLCBuZXR3b3JrLXJlYWR5IGRldmljZS4gV2UgY291bGQgZ2V0IGludG8gcXVlc3Rpb25zIGFyb3VuZCBzdXBwbHkgY2hhaW4gc2VjdXJpdHksIHRvbyDigJMgbWFraW5nIHN1cmUgdGhlcmUgYXJlbuKAmXQgYW55IG1hbGljaW91cyBjb21wb25lbnRzIG9yIGJhY2tkb29ycyBpbnRyb2R1Y2VkIGR1cmluZyBwcm9kdWN0aW9uLgoKT2theSwgbXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIHRoZSBpbnF1aXJ5LiBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiBvbiB3aHkgdGhlIHByb21wdCBpcyBuZWVkZWQuIElzIHRoaXMgYSByZXNlYXJjaCBwcm9qZWN0PyBBbiBpbnZlc3RpZ2F0aW9uPyBBIGdlbmVyYWwgaW50ZXJlc3Q/IFJlZ2FyZGxlc3MsIGl0JiMzOTtzIGNsZWFyIHRoZSBwcm9tcHQgcmVxdWlyZXMgdGhhdCBJIGdhdGhlciBkYXRhIG9uIEFQIGRldmljZSBwcm9kdWN0aW9uIG1ldGhvZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXBfZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDExMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHJldmlld2luZyB0aGUgY29kZToKCioqQ2hlY2tpbmcgRGV2aWNlIENyZWF0aW9uIGluIGFwX2J1cy5jKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCBvcmRlciBvZiBidXNpbmVzczogSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgZGV2aWNlIGlzIGluaXRpYWxpemVkLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgYXBfYnVzLmNgLCBiZWNhdXNlIHRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBkZXZpY2UgY3JlYXRpb24gYW5kIGJ1cy1zcGVjaWZpYyBzZXR1cCBoYXBwZW5zLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBpbnN0YW50aWF0aW9uIGxvZ2ljLCBhbnkgYXNzb2NpYXRlZCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQsIGNydWNpYWxseSwgaG93IHRoZSBkZXZpY2UgZ2V0cyByZWdpc3RlcmVkIHdpdGggdGhlIHN5c3RlbS4gSSBleHBlY3QgdG8gZmluZCBhIHdlbGwtZGVmaW5lZCBmdW5jdGlvbiBvciBzZXQgb2YgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBhbGwgb2YgdGhpcy4gSSYjMzk7bGwgYmUgc2NydXRpbml6aW5nIHRoZSBjb2RlIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBpbmNvcnJlY3QgcmVzb3VyY2UgaGFuZGxpbmcgKG1lbW9yeSBsZWFrcyBhcmUgYSBodWdlIG5vLW5vISksIGFuZCBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgZnJhZ2lsZSBvciBwb29ybHkgZG9jdW1lbnRlZC4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGJ1cy1zcGVjaWZpYyBxdWlya3MgYW5kIGFueSBjdXN0b20gY29uZmlndXJhdGlvbnMsIGlmIHRoZXkgZXhpc3QsIHRvIGNvbXBhcmUgdGhlbSB3aXRoIHRoZSBzdGFuZGFyZCBhcmNoaXRlY3R1cmUuIEFueSBub24tc3RhbmRhcmQgY29uZmlndXJhdGlvbnMgYXJlIGFsd2F5cyBhIHBvaW50IG9mIGludGVyZXN0LCBhcyB0aG9zZSBjYW4gb2Z0ZW4gYmUgdGhlIHNvdXJjZSBvZiBpc3N1ZXMgZG93biB0aGUgbGluZS4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBkZXZpY2UgY3JlYXRpb24gcHJvY2Vzcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2VsbC1kZWZpbmVkIGVycm9yIGNvZGVzIGFuZCBhbnkgc3BlY2lmaWMgc3RlcHMgdGhlIGNvZGUgdGFrZXMgdG8gY2xlYW4gdXAgcGFydGlhbGx5IGNyZWF0ZWQgZGV2aWNlcyBpbiBjYXNlIG9mIGZhaWx1cmUuIEkgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBkZXZpY2UgY3JlYXRpb24gaXMgdGhyZWFkLXNhZmUuIE92ZXJhbGwsIEkgd2FudCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBkZXZpY2UmIzM5O3MgbGlmZWN5Y2xlIGZyb20gYmlydGggdG8gcmVnaXN0cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZpY2VfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jPTE5ODI9c3RhdGljIGlubGluZSB2b2lkIGFwX3NjYW5fZG9tYWlucyhzdHJ1Y3QgYXBfY2FyZCAqYWMpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yMDQxLVx0XHRcdC8qIHJlZ2lzdGVyIHF1ZXVlIGRldmljZSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyMDQyOlx0XHRcdHJjID0gZGV2aWNlX3JlZ2lzdGVyKGRldik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTIwNDMtXHRcdFx0aWYgKHJjKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjIwNDQ6XHRcdFx0XHRBUF9EQkZfV0FSTihcJiMzNDslcyglZCwlZCkgZGV2aWNlX3JlZ2lzdGVyKCkgZmFpbGVkXFxuXCYjMzQ7LFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yMDQ1LVx0XHRcdFx0XHQgICAgX19mdW5jX18sIGFjLVx1MDAzZWlkLCBkb20pO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MjEzOT1zdGF0aWMgaW5saW5lIHZvaWQgYXBfc2Nhbl9hZGFwdGVyKGludCBhcClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTIyNzMtXHRcdC8qIFJlZ2lzdGVyIHRoZSBuZXcgY2FyZCBkZXZpY2Ugd2l0aCBBUCBidXMgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjI3NDpcdFx0cmMgPSBkZXZpY2VfcmVnaXN0ZXIoZGV2KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjI3NS1cdFx0aWYgKHJjKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjIyNzY6XHRcdFx0QVBfREJGX1dBUk4oXCYjMzQ7JXMoJWQpIGRldmljZV9yZWdpc3RlcigpIGZhaWxlZFxcblwmIzM0OyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjI3Ny1cdFx0XHRcdCAgICBfX2Z1bmNfXywgYXApO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MjU3OD1zdGF0aWMgaW50IF9faW5pdCBhcF9tb2R1bGVfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjYyMi1cdC8qIENyZWF0ZSAvc3lzL2RldmljZXMvYXAuICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI2MjM6XHRhcF9yb290X2RldmljZSA9IHJvb3RfZGV2aWNlX3JlZ2lzdGVyKFwmIzM0O2FwXCYjMzQ7KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjYyNC1cdHJjID0gUFRSX0VSUl9PUl9aRVJPKGFwX3Jvb3RfZGV2aWNlKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9ODY9c3RhdGljIGludCB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlKHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTkwLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjkxOlx0cm9vdF9kZXZpY2UgPSByb290X2RldmljZV9yZWdpc3RlcihWRklPX0FQX1JPT1RfTkFNRSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtOTItXHRpZiAoSVNfRVJSKHJvb3RfZGV2aWNlKSlcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTIxLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjEyMjpcdHJldCA9IGRldmljZV9yZWdpc3RlcihcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWRldmljZSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTIzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYz0zNjY9c3RhdGljIGludCB6Y2RuX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jLTQxNi1cdH1cbmRyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jOjQxNzpcdHJjID0gZGV2aWNlX3JlZ2lzdGVyKFx1MDAyNnpjZG5kZXYtXHUwMDNlZGV2aWNlKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jLTQxOC1cdGlmIChyYykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM2MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgQWNjZXNzIFBvaW50IERldmljZSBDcmVhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGVzZSBBY2Nlc3MgUG9pbnQgKEFQKSBkZXZpY2VzIGFyZSBhY3R1YWxseSBjcmVhdGVkLiBGcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLCBpdCBsb29rcyBsaWtlIGBhcF9zY2FuX2RvbWFpbnNgIGFuZCBgYXBfc2Nhbl9hZGFwdGVyYCBhcmUgdGhlIGtleSBjb21wb25lbnRzIGhlcmUsIGVzc2VudGlhbGx5IHNjYW5uaW5nIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHRvIGlkZW50aWZ5IGFuZCBicmluZyB0aGVzZSBBUCBkZXZpY2VzIGludG8gYmVpbmcuIAoKQnV0IGhlcmUmIzM5O3MgYSB0aG91Z2h0OiBDYW4gd2UgYnlwYXNzIHRoYXQgaGFyZHdhcmUgZGV0ZWN0aW9uIGFuZCAqaW5qZWN0KiBhbiBBUCBkZXZpY2UgZGlyZWN0bHkgdGhyb3VnaCBzb2Z0d2FyZT8gSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEkmIzM5O20gZ29pbmcgdG8gaW52ZXN0aWdhdGUgd2hldGhlciB0aGVyZSYjMzk7cyBhbnkgbWVjaGFuaXNtIGZvciBzb2Z0d2FyZS1iYXNlZCBgYXBfZGV2aWNlYCBpbmplY3Rpb24gYXQgYWxsLiBJcyBpdCBwdXJlbHkgYSBoYXJkd2FyZS1kcml2ZW4gcHJvY2Vzcywgb3IgYXJlIHRoZXJlIGhvb2tzIG9yIHZ1bG5lcmFiaWxpdGllcyB3ZSBjb3VsZCBwb3RlbnRpYWxseSBsZXZlcmFnZT8gVGhhdCYjMzk7cyB0aGUgcXVlc3Rpb24gSSBuZWVkIHRvIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXBfc2Nhbl9hZGFwdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0xOTgyPXN0YXRpYyBpbmxpbmUgdm9pZCBhcF9zY2FuX2RvbWFpbnMoc3RydWN0IGFwX2NhcmQgKmFjKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjEzOC0gKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjEzOTpzdGF0aWMgaW5saW5lIHZvaWQgYXBfc2Nhbl9hZGFwdGVyKGludCBhcClcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjE0MC17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0yMzczPXN0YXRpYyBib29sIGFwX3NjYW5fYnVzKHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yMzk4LVx0Zm9yIChhcCA9IDA7IGFwIFx1MDAzYz0gYXBfbWF4X2FkYXB0ZXJfaWQ7IGFwJiM0MzsmIzQzOylcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjM5OTpcdFx0YXBfc2Nhbl9hZGFwdGVyKGFwKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQwMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NzAKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBBUCBEZXZpY2UgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIEFQIGRldmljZXMsIGFuZCBoZXJlJiMzOTtzIG15IHRyYWluIG9mIHRob3VnaHQuIFdlIHN0YXJ0IHdpdGggYGFwX3NjYW5fYnVzYC4gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBzdXBwb3NlZCB0byB1c2UgdGhvc2UgQVAgaW5zdHJ1Y3Rpb25zIOKAkyBgYXBfcWNpYCwgYGFwX3RhcHFgLCB0aGUgd2hvbGUgc2hlYmFuZyDigJMgdG8gYWN0dWFsbHkgZmluZCBhbmQgaWRlbnRpZnkgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIG9uIHRoZSBidXMuIE1ha2VzIHNlbnNlIHNvIGZhci4gSWYgdGhlcmUgKmlzbiYjMzk7dCogYW55IGhhcmR3YXJlIHByZXNlbnQsIHRoZW4gbmF0dXJhbGx5LCBgYXBfc2Nhbl9idXNgIGlzbiYjMzk7dCBnb2luZyB0byBkZXRlY3QgYW55dGhpbmcuIFRoZXJlZm9yZSwgd2Ugd291bGQgZXhwZWN0IHRoYXQgaWYgaXQgZmluZHMgbm90aGluZywgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWAgd2lsbCBuZXZlciBnZXQgY2FsbGVkIGJlY2F1c2UgdGhlIGhhcmR3YXJlIGhhcyBub3QgYmVlbiBlbnVtZXJhdGVkLgoKQnV0IHRoZW4sIGEgc2xpZ2h0IHdyaW5rbGUgZW50ZXJzIHRoZSBwaWN0dXJlLiBJIG5lZWQgdG8gYmUgc3VyZTsgbXkgcmVjYWxsIGlzIHNvbWV0aW1lcyBmYXVsdHkuICpXYWl0KiwgYHZmaW9fYXBfbWRldl9wcm9iZWAgZ2V0cyBjYWxsZWQgd2hlbiBhbiBtZGV2IGlzICpjcmVhdGVkKiwgbm90IG9ubHkgd2hlbiB0aGUgaGFyZHdhcmUgaXMgZW51bWVyYXRlZC4gVGhpcyBtZWFucyB0aGF0IGFuIG1kZXYgY2FuIGJlIGluc3RhbnRpYXRlZCBwcmlvciB0byB0aGUgcGh5c2ljYWwgYnVzIGJlaW5nIHNjYW5uZWQuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMuLi4gY2FuIGFuIG1kZXYgYmUgY3JlYXRlZCBldmVuIGlmIHRoZXJlIGFyZSAqbm8qIEFQIGRldmljZXMgdG8gYWN0dWFsbHkgYmFjayBpdD8gSWYgaXQgY2FuLCB3ZSYjMzk7dmUgZ290IGEgcG90ZW50aWFsIGlzc3VlIHdpdGggaG93IHRoaW5ncyBhcmUgYmVpbmcgaGFuZGxlZC4gSSB0aGluayBJIG5lZWQgdG8gZGlnIGludG8gYHZmaW9fYXBfbWRldl9wcm9iZWAgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIHZhbGlkYXRpb24gdGhhdCBpcyBkb25lLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyB0aGF0IHJvdXRpbmUgaGFuZGxlcyB0aGUgc2NlbmFyaW8gd2hlcmUgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZG9lc24mIzM5O3QgZXhpc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3OTA6XHRzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9wcm9iZShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpXG4gNzkxOlx0e1xuIDc5MjpcdFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcbiA3OTM6XHRcdGludCByZXQ7XG4gNzk0Olx0XG4gNzk1Olx0XHRtYXRyaXhfbWRldiA9IHZmaW9fYWxsb2NfZGV2aWNlKGFwX21hdHJpeF9tZGV2LCB2ZGV2LCBcdTAwMjZtZGV2LVx1MDAzZWRldixcbiA3OTY6XHRcdFx0XHRcdFx0XHUwMDI2dmZpb19hcF9tYXRyaXhfZGV2X29wcyk7XG4gNzk3Olx0XHRpZiAoSVNfRVJSKG1hdHJpeF9tZGV2KSlcbiA3OTg6XHRcdFx0cmV0dXJuIFBUUl9FUlIobWF0cml4X21kZXYpO1xuIDc5OTpcdFxuIDgwMDpcdFx0cmV0ID0gdmZpb19yZWdpc3Rlcl9lbXVsYXRlZF9pb21tdV9kZXYoXHUwMDI2bWF0cml4X21kZXYtXHUwMDNldmRldik7XG4gODAxOlx0XHRpZiAocmV0KVxuIDgwMjpcdFx0XHRnb3RvIGVycl9wdXRfdmRldjtcbiA4MDM6XHRcdG1hdHJpeF9tZGV2LVx1MDAzZXJlcV90cmlnZ2VyID0gTlVMTDtcbiA4MDQ6XHRcdG1hdHJpeF9tZGV2LVx1MDAzZWNmZ19jaGdfdHJpZ2dlciA9IE5VTEw7XG4gODA1Olx0XHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2bWRldi1cdTAwM2VkZXYsIG1hdHJpeF9tZGV2KTtcbiA4MDY6XHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gODA3Olx0XHRsaXN0X2FkZChcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vub2RlLCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCk7XG4gODA4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gODA5Olx0XHRyZXR1cm4gMDtcbiA4MTA6XHRcbiA4MTE6XHRlcnJfcHV0X3ZkZXY6XG4gODEyOlx0XHR2ZmlvX3B1dF9kZXZpY2UoXHUwMDI2bWF0cml4X21kZXYtXHUwMDNldmRldik7XG4gODEzOlx0XHRyZXR1cm4gcmV0O1xuIDgxNDpcdH1cbiA4MTU6XHRcbiA4MTY6XHRzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfbGlua19xdWV1ZShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuIDgxNzpcdFx0XHRcdFx0ICAgIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxuIDgxODpcdHtcbiA4MTk6XHRcdGlmICghcSB8fCB2ZmlvX2FwX21kZXZfZ2V0X3F1ZXVlKG1hdHJpeF9tZGV2LCBxLVx1MDAzZWFwcW4pKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkwNAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDUwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdmZpby1hcCBhbmQgaXRzIEludGVyYWN0aW9uIHdpdGggc3l6a2FsbGVyKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGB2ZmlvX2FwYCBtb2R1bGUgYW5kIGhvdyBzeXprYWxsZXIgbWlnaHQgaW50ZXJhY3Qgd2l0aCBpdC4gSSYjMzk7dmUgZ290IGl0LCBgdmZpb19hcF9tZGV2X3Byb2JlYCAqY2FuKiBiZSBjYWxsZWQgd2hlbiBhbiBtZGV2IGlzIGNyZWF0ZWQgdGhyb3VnaCBzeXNmcywgdGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgaGFuZyBvbiwgYHZmaW9fYXBfbWRldl9yZWdpc3RlcmAgaXMgb25seSBjYWxsZWQgaWYgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKWAgcmV0dXJucyB0cnVlLiBOb3csIGlmIHRoYXQgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSwgdGhlIG1vZHVsZSBsb2FkaW5nIGZhaWxzIHdpdGggYW4gYC1FTk9ERVZgIGVycm9yLiBTbywgYmFzaWNhbGx5LCBJIGNhbiYjMzk7dCBldmVuIGdldCB0aGUgbW9kdWxlIGxvYWRlZCBpbiBhIFFFTVUgVENHIGVudmlyb25tZW50LCB3aGljaCBtYWtlcyBpdCB1c2VsZXNzIHRvIGV2ZW4gY29uc2lkZXIuCgpCdXQsIHN5emthbGxlciBydW5zIG9uIHMzOTB4IEtWTSwgcmlnaHQ/IEFuZCBvbiBhY3R1YWwgbWFpbmZyYW1lcywgeWVzPyBJZiBzeXprYWxsZXIgcnVucyBvbiBzMzkweCBLVk0sIHRoZW4gaXQgd291bGQgKmhhdmUqIHRvIGhhdmUgQVAgaW5zdHJ1Y3Rpb25zIGF2YWlsYWJsZSwgaWYgdGhlIGhvc3QgbWFjaGluZSBoYXMgQVAgaGFyZHdhcmUgYW5kIEtWTSBlbmFibGVzIGl0LiBUaGUgdGhpbmcgaXMsIHN5emthbGxlciBpcyBmdXp6aW5nIHRoZSAqaG9zdCoga2VybmVsLCBvciBtYXliZSBhIGd1ZXN0IGtlcm5lbCBhY3RpbmcgYXMgdGhlIHN5c3RlbSB1bmRlciB0ZXN0LiBUeXBpY2FsbHksIGl04oCZcyBmdXp6aW5nIGEgZ3Vlc3QsIHNvIGRvZXMgdGhlIGd1ZXN0IGtlcm5lbCBoYXZlIEFQIGluc3RydWN0aW9ucyBpZiBpdCYjMzk7cyBydW5uaW5nIG9uIEtWTT8gSXQgZG9lcywgaWYgdGhlIGhvc3QgcGFzc2VzIHRoZW0gdGhyb3VnaC4KCkJ1dCBkb2VzIHRoZSBndWVzdCBoYXZlICphY3R1YWwqIEFQIGRldmljZXM/IE9ubHkgaWYgdGhlIGhvc3QgcGFzc2VzIHRoZW0gdGhyb3VnaC4gSG93ZXZlciwgc3l6a2FsbGVyIHR5cGljYWxseSBydW5zIGluIGEgZ2VuZXJpYyBWTSwgc28gdGhlcmUmIzM5O3MgdXN1YWxseSBubyBzcGVjaWZpYyBoYXJkd2FyZSBwYXNzZWQgdGhyb3VnaC4gQnV0IGV2ZW4gd2l0aG91dCBzcGVjaWZpYyBkZXZpY2VzLCBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCBtaWdodCBzdGlsbCBiZSB0cnVlIGlmIHRoZSBob3N0IGVuYWJsZXMgQVAgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgZ3Vlc3QsIHdoaWNoIGl0IGRvZXMgYnkgZGVmYXVsdCBpZiB0aGUgaG9zdCBoYXMgdGhlbS4KCklmIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgIGlzIHRydWUsIHRoZSBgdmZpb19hcGAgbW9kdWxlIHdpbGwgbG9hZC4gQW5kIHRoZW4sIHN5emthbGxlciAqY2FuKiBjcmVhdGUgbWRldiBkZXZpY2VzIHZpYSBzeXNmcywgYW5kIGB2ZmlvX2FwX21kZXZfcHJvYmVgIGJlY29tZXMgcmVhY2hhYmxlLiBXaGF0IGFib3V0IGB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWVgPyBUaGF0IHJlcXVpcmVzIGFuIGFjdHVhbCBBUCBxdWV1ZSBkZXZpY2UgdG8gYmUgYm91bmQgdG8gdGhlIGB2ZmlvX2FwYCBkcml2ZXIuIElmIHRoZXJlIGFyZSBubyBBUCBkZXZpY2VzLCBgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlYCB3b24mIzM5O3QgYmUgcmVhY2hlZC4gQnV0LCBgdmZpb19hcF9tZGV2X3Byb2JlYCwgYXMgd2VsbCBhcyBgdmZpb19hcF9tZGV2X2NmZ19hZGRgIGFuZCBgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmVgLCBjYW4gYmUgcmVhY2hlZCB2aWEgc3lzZnMgYXR0cmlidXRlcyBvZiB0aGUgbWRldiBkZXZpY2UuIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgaWYgYHZmaW9fYXBfbWRldl9jZmdfYWRkYCBjYW4gYmUgcmVhY2hlZCB2aWEgc3lzZnMgbmV4dCwganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZmlvX2FwX21kZXZfY2ZnX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNjkyPXN0YXRpYyB2b2lkIHZmaW9fYXBfZmlsdGVyX2FwaWRfYnlfcXR5cGUodW5zaWduZWQgbG9uZyAqYXBtLCB1bnNpZ25lZCBsb25nICphcW0pXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI3NTAtLyoqXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Mjc1MTogKiB2ZmlvX2FwX21kZXZfY2ZnX2FkZCAtIHN0b3JlIGJpdG1hcHMgc3BlY2lmeWluZyB0aGUgYWRhcHRlcnMsIGRvbWFpbnMgYW5kXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjc1Mi0gKlx0XHRcdCAgY29udHJvbCBkb21haW5zIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBob3N0JiMzOTtzXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI3NjItICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Mjc2MzpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX2FkZCh1bnNpZ25lZCBsb25nICphcG1fYWRkLCB1bnNpZ25lZCBsb25nICphcW1fYWRkLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI3NjQtXHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqYWRtX2FkZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjgwMj1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZChzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jb25maWdfaW5mbyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjgyMy1cdGlmIChkb19hZGQpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjgyNDpcdFx0dmZpb19hcF9tZGV2X2NmZ19hZGQoYXBtX2FkZCwgYXFtX2FkZCwgYWRtX2FkZCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjgyNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDc3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOgoKKipUcmFjaW5nIHRoZSBEZXZpY2UgQWRkaXRpb24gRmxvdyBpbiBWRklPLUFQKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2tpbmcgZG93biBob3cgYSBtZWRpYXRlZCBkZXZpY2UgKG1kZXYpIGdldHMgY29uZmlndXJlZCB3aXRoaW4gdGhlIFZGSU8tQVAgZnJhbWV3b3JrLiBJdCBsb29rcyBsaWtlIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyBjb25maWd1cmF0aW9uIHByb2Nlc3MgaXMgYHZmaW9fYXBfbWRldl9jZmdfYWRkYC4gTm93LCBJIHJlY2FsbCB0aGF0IGZ1bmN0aW9uIGlzIGRpcmVjdGx5IGNhbGxlZCBieSBgdmZpb19hcF9tZGV2X29uX2NmZ19hZGRgLCB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhpcywgaW4gdHVybiwgaXMgaW52b2tlZCBmcm9tIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYC4KClJpZ2h0LCB0aGF0IGNhbGxiYWNrLCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCwgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBBUCBidXMgaXRzZWxmLiBUaGF0IG1lYW5zIHdoZW5ldmVyIHRoZSBidXMgY29tcGxldGVzIGEgc2NhbiwgdGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQuIFRoaXMgaW1wbGllcyB0aGF0IHRoZSBjb21wbGV0ZSBmbG93IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSBidXMgZmluaXNoZXMgdGhlIHNjYW4uIFRoZXJlZm9yZSwgdG8gdW5kZXJzdGFuZCB0aGUgd2hvbGUgcHJvY2VzcywgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGNsb3NlciBsb29rIGF0IGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgIGFuZCBzZWUgd2hhdCBpdCBkb2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGJ1cyBzY2FuIHRyaWdnZXJzIHRoZSB3aG9sZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9NTg9c3RhdGljIHN0cnVjdCBhcF9kcml2ZXIgdmZpb19hcF9kcnYgPSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTYyLVx0Lm9uX2NvbmZpZ19jaGFuZ2VkID0gdmZpb19hcF9vbl9jZmdfY2hhbmdlZCxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo2MzpcdC5vbl9zY2FuX2NvbXBsZXRlID0gdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTY0LVx0LmlkcyA9IGFwX3F1ZXVlX2lkcyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9Mjc2Mz1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX2FkZCh1bnNpZ25lZCBsb25nICphcG1fYWRkLCB1bnNpZ25lZCBsb25nICphcW1fYWRkLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNzk2LSAqXHRcdFx0ICAgICBjYW4gYmUgaG90IHBsdWdnZWQgaW50byB0aGUgZ3Vlc3Qgd2hlbiB0aGUgQVAgYnVzXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Mjc5NzogKlx0XHRcdCAgICAgc2NhbiBjb21wbGV0ZXMgKHNlZSB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNzk4LSAqXHRcdFx0ICAgICBmdW5jdGlvbikuXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI4NDk9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yODc0LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4NzU6dm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjg3Ni1cdFx0XHQgICAgICBzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm9sZF9jb25maWdfaW5mbylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE2Mz12b2lkIHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE2NC1cdFx0XHQgICAgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpvbGRfY29uZmlnX2luZm8pO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoxNjU6dm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE2Ni1cdFx0XHQgICAgICBzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm9sZF9jb25maWdfaW5mbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTEwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IG1lbnRhbCBnZWFycyBhcmUgdHVybmluZy4uLgoKKipBbmFseXppbmcgVkZJTy1BUCBTY2FuIENvbXBsZXRpb24qKgoKQWxyaWdodCwgc28gYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgb25jZSB0aGUgQVAgYnVzIGhhcyBmaW5pc2hlZCBhIHNjYW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gSSwgd2l0aCB0aGUgaGVscCBvZiBzeXprYWxsZXIsIHNvbWVob3cgdHJpZ2dlciB0aGF0IEFQIGJ1cyBzY2FuPyBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRvIGluZmx1ZW5jZSBpdHMgZXhlY3V0aW9uIGlzIGNyaXRpY2FsLiBMZXQmIzM5O3Mgc2VlLi4uIEFoLCB5ZXMsIEkgcmVjYWxsIG5vdy4gVGhlcmUmIzM5O3MgdGhhdCBzeXNmcyBhdHRyaWJ1dGUsIHNvbWV0aGluZyBsaWtlIGAvc3lzL2J1cy9hcC9zY2Fuc2AuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBleGFjdCBwYXRoLCBvZiBjb3Vyc2UsIGJ1dCB0aGF0JiMzOTtzIGxpa2VseSB0aGUgbWVjaGFuaXNtIEkgbmVlZCB0byBtYW5pcHVsYXRlLiBOb3cgbGV0JiMzOTtzIGdvIGNoZWNrIHRoZSBmaWxlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FwX3NjYW5fYnVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0xMzU9TU9EVUxFX1BBUk1fREVTQyhtc2dwb29sX21pbl9pdGVtcywgXCYjMzQ7QVAgbWVzc2FnZSBwb29sIG1pbmltYWwgaXRlbXNcJiMzNDspO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTM5LSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxNDA6c3RhdGljIGJvb2wgYXBfc2Nhbl9idXModm9pZCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE0MTpzdGF0aWMgYm9vbCBhcF9zY2FuX2J1c19yZXN1bHQ7IC8qIHJlc3VsdCBvZiBsYXN0IGFwX3NjYW5fYnVzKCkgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTQyOnN0YXRpYyBERUZJTkVfTVVURVgoYXBfc2Nhbl9idXNfbXV0ZXgpOyAvKiBtdXRleCBhcF9zY2FuX2J1cygpIGludm9jYXRpb25zICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE0MzpzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICphcF9zY2FuX2J1c190YXNrOyAvKiB0aHJlYWQgaG9sZGluZyB0aGUgc2NhbiBtdXRleCAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxNDQ6c3RhdGljIGF0b21pYzY0X3QgYXBfc2Nhbl9idXNfY291bnQ7IC8qIGNvdW50ZXIgYXBfc2Nhbl9idXMoKSBpbnZvY2F0aW9ucyAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxNDU6c3RhdGljIGludCBhcF9zY2FuX2J1c190aW1lID0gQVBfQ09ORklHX1RJTUU7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE0NjpzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgYXBfc2Nhbl9idXNfdGltZXI7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE0NzpzdGF0aWMgdm9pZCBhcF9zY2FuX2J1c193cV9jYWxsYmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE0ODpzdGF0aWMgREVDTEFSRV9XT1JLKGFwX3NjYW5fYnVzX3dvcmssIGFwX3NjYW5fYnVzX3dxX2NhbGxiYWNrKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTQ5LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9ODAyPXN0YXRpYyB2b2lkIGFwX2NoZWNrX2JpbmRpbmdzX2NvbXBsZXRlKHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy04MDUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjgwNjpcdGlmIChhdG9taWM2NF9yZWFkKFx1MDAyNmFwX3NjYW5fYnVzX2NvdW50KSBcdTAwM2U9IDEpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtODA3LVx0XHRhcF9jYWxjX2JvdW5kX2FwcW5zKFx1MDAyNmFwcW5zLCBcdTAwMjZib3VuZCk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0xMTE5PWJvb2wgYXBfYnVzX2ZvcmNlX3Jlc2Nhbih2b2lkKVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xMTIwLXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTEyMTpcdHVuc2lnbmVkIGxvbmcgc2Nhbl9jb3VudGVyID0gYXRvbWljNjRfcmVhZChcdTAwMjZhcF9zY2FuX2J1c19jb3VudCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTExMjItXHRib29sIHJjID0gZmFsc2U7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xMTM2LVx0ICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjExMzc6XHRpZiAobXV0ZXhfaXNfbG9ja2VkKFx1MDAyNmFwX3NjYW5fYnVzX211dGV4KSkge1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxMTM4Olx0XHRpZiAoYXBfc2Nhbl9idXNfdGFzayA9PSBjdXJyZW50KVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xMTM5LVx0XHRcdGdvdG8gb3V0O1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTE0Mi1cdC8qIFRyeSB0byBhY3F1aXJlIHRoZSBBUCBzY2FuIGJ1cyBtdXRleCAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxMTQzOlx0aWYgKG11dGV4X3RyeWxvY2soXHUwMDI2YXBfc2Nhbl9idXNfbXV0ZXgpKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTExNDQtXHRcdC8qIG11dGV4IGFjcXVpcmVkLCBydW4gdGhlIEFQIGJ1cyBzY2FuICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjExNDU6XHRcdGFwX3NjYW5fYnVzX3Rhc2sgPSBjdXJyZW50O1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxMTQ2Olx0XHRhcF9zY2FuX2J1c19yZXN1bHQgPSBhcF9zY2FuX2J1cygpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxMTQ3Olx0XHRyYyA9IGFwX3NjYW5fYnVzX3Jlc3VsdDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTE0ODpcdFx0YXBfc2Nhbl9idXNfdGFzayA9IE5VTEw7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjExNDk6XHRcdG11dGV4X3VubG9jayhcdTAwMjZhcF9zY2FuX2J1c19tdXRleCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTExNTAtXHRcdGdvdG8gb3V0O1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTE1Ni1cdCAqIGZvciB0aGUgbG9jayB3aGljaCBtZWFucyB0aGUgb3RoZXIgdGFzayBoYXMgZmluaXNoZWQgYW5kXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjExNTc6XHQgKiBzdG9yZWQgdGhlIHJlc3VsdCBpbiBhcF9zY2FuX2J1c19yZXN1bHQuXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTExNTgtXHQgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTE1OTpcdGlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoXHUwMDI2YXBfc2Nhbl9idXNfbXV0ZXgpKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTExNjAtXHRcdC8qIHNvbWUgZXJyb3Igb2NjdXJyZWQsIGlnbm9yZSBhbmQgZ28gb3V0ICovXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xMTYyLVx0fVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxMTYzOlx0cmMgPSBhcF9zY2FuX2J1c19yZXN1bHQ7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjExNjQ6XHRtdXRleF91bmxvY2soXHUwMDI2YXBfc2Nhbl9idXNfbXV0ZXgpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xMTY1LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MTM5OD1zdGF0aWMgc3NpemVfdCBjb25maWdfdGltZV9zaG93KGNvbnN0IHN0cnVjdCBidXNfdHlwZSAqYnVzLCBjaGFyICpidWYpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTEzOTkte1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxNDAwOlx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslZFxcblwmIzM0OywgYXBfc2Nhbl9idXNfdGltZSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTE0MDEtfVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MTQwMz1zdGF0aWMgc3NpemVfdCBjb25maWdfdGltZV9zdG9yZShjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgKmJ1cyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTE0MDktXHRcdHJldHVybiAtRUlOVkFMO1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxNDEwOlx0YXBfc2Nhbl9idXNfdGltZSA9IHRpbWU7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE0MTE6XHRtb2RfdGltZXIoXHUwMDI2YXBfc2Nhbl9idXNfdGltZXIsIGppZmZpZXMgJiM0MzsgYXBfc2Nhbl9idXNfdGltZSAqIEhaKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTQxMi1cdHJldHVybiBjb3VudDtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jPTE3MDU9c3RhdGljIHNzaXplX3Qgc2NhbnNfc2hvdyhjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywgY2hhciAqYnVmKVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xNzA2LXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTcwNzpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWxsdVxcblwmIzM0OywgYXRvbWljNjRfcmVhZChcdTAwMjZhcF9zY2FuX2J1c19jb3VudCkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xNzA4LX1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jPTE3MjI9c3RhdGljIHNzaXplX3QgYmluZGluZ3Nfc2hvdyhjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywgY2hhciAqYnVmKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTcyNy1cdGFwX2NhbGNfYm91bmRfYXBxbnMoXHUwMDI2YXBxbnMsIFx1MDAyNm4pO1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxNzI4Olx0aWYgKGF0b21pYzY0X3JlYWQoXHUwMDI2YXBfc2Nhbl9idXNfY291bnQpIFx1MDAzZT0gMSBcdTAwMjZcdTAwMjYgbiA9PSBhcHFucylcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTcyOS1cdFx0cmMgPSBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXUvJXUgKGNvbXBsZXRlKVxcblwmIzM0OywgbiwgYXBxbnMpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MTk1OT1zdGF0aWMgaW5saW5lIHZvaWQgbm90aWZ5X3NjYW5fY29tcGxldGUodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTE5NjUtLypcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTk2NjogKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGFwX3NjYW5fYnVzKCkuXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTE5NjctICogUmVtb3ZlIGNhcmQgZGV2aWNlIGFuZCBhc3NvY2lhdGVkIHF1ZXVlIGRldmljZXMuXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0xOTY5PXN0YXRpYyBpbmxpbmUgdm9pZCBhcF9zY2FuX3JtX2NhcmRfZGV2X2FuZF9xdWV1ZV9kZXZzKHN0cnVjdCBhcF9jYXJkICphYylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTE5NzctLypcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTk3ODogKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGFwX3NjYW5fYnVzKCkuXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTE5NzktICogRG9lcyB0aGUgc2NhbiBidXMgam9iIGZvciBhbGwgdGhlIGRvbWFpbnMgd2l0aGluXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0xOTgyPXN0YXRpYyBpbmxpbmUgdm9pZCBhcF9zY2FuX2RvbWFpbnMoc3RydWN0IGFwX2NhcmQgKmFjKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjEzNS0vKlxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyMTM2OiAqIEhlbHBlciBmdW5jdGlvbiBmb3IgYXBfc2Nhbl9idXMoKS5cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjEzNy0gKiBEb2VzIHRoZSBzY2FuIGJ1cyBqb2IgZm9yIHRoZSBnaXZlbiBhZGFwdGVyIGlkLlxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MjM1MT1zdGF0aWMgYm9vbCBhcF9jb25maWdfaGFzX25ld19kb21zKHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yMzY2LS8qKlxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyMzY3OiAqIGFwX3NjYW5fYnVzKCk6IFNjYW4gdGhlIEFQIGJ1cyBmb3IgbmV3IGRldmljZXNcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjM2ODogKiBBbHdheXMgcnVuIHVuZGVyIG11dGV4IGFwX3NjYW5fYnVzX211dGV4IHByb3RlY3Rpb25cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjM2OS0gKiB3aGljaCBuZWVkcyB0byBnZXQgbG9ja2VkL3VubG9ja2VkIGJ5IHRoZSBjYWxsZXIhXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yMzcyLSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyMzczOnN0YXRpYyBib29sIGFwX3NjYW5fYnVzKHZvaWQpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTIzNzQte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQxNy1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQxODpcdGlmIChhdG9taWM2NF9pbmNfcmV0dXJuKFx1MDAyNmFwX3NjYW5fYnVzX2NvdW50KSA9PSAxKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0MTktXHRcdHByX2RlYnVnKFwmIzM0O2luaXQgc2NhbiBjb21wbGV0ZVxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDI0LVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDI1Olx0bW9kX3RpbWVyKFx1MDAyNmFwX3NjYW5fYnVzX3RpbWVyLCBqaWZmaWVzICYjNDM7IGFwX3NjYW5fYnVzX3RpbWUgKiBIWik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0MjYtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDMyLS8qXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0MzM6ICogQ2FsbGJhY2sgZm9yIHRoZSBhcF9zY2FuX2J1c190aW1lclxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDM0OiAqIFJ1bnMgcGVyaW9kaWNhbGx5LCB3b3JrcXVldWUgdGltZXIgKGFwX3NjYW5fYnVzX3RpbWUpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0MzUtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0MzY6c3RhdGljIHZvaWQgYXBfc2Nhbl9idXNfdGltZXJfY2FsbGJhY2soc3RydWN0IHRpbWVyX2xpc3QgKnVudXNlZClcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQzNy17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDQxLVx0ICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0NDI6XHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZhcF9zY2FuX2J1c193b3JrKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQ0My19XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDQ1LS8qXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0NDY6ICogQ2FsbGJhY2sgZm9yIHRoZSBhcF9zY2FuX2J1c193b3JrXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NDctICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0NDg6c3RhdGljIHZvaWQgYXBfc2Nhbl9idXNfd3FfY2FsbGJhY2soc3RydWN0IHdvcmtfc3RydWN0ICp1bnVzZWQpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NDkte1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDUwLVx0LypcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQ1MTpcdCAqIFRyeSB0byBpbnZva2UgYW4gYXBfc2Nhbl9idXMoKS4gSWYgdGhlIG11dGV4IGFjcXVpc2l0aW9uXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NTItXHQgKiBmYWlscyB0aGVyZSBpcyBjdXJyZW50bHkgYW5vdGhlciB0YXNrIGFscmVhZHkgcnVubmluZyB0aGVcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NTUtXHQgKiB0aGUgQVAgc2NhbiBidXMgdGltZXIgaXMgcmUtYXJtZWQgd2hpY2ggdHJpZ2dlcnMgdGhlbiB0aGVcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQ1NjpcdCAqIGFwX3NjYW5fYnVzX3RpbWVyX2NhbGxiYWNrIHdoaWNoIGVucXVldWVzIGEgd29yayBpbnRvIHRoZVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDU3LVx0ICogc3lzdGVtX2xvbmdfd3Egd2hpY2ggaW52b2tlcyB0aGlzIGZ1bmN0aW9uIGhlcmUgYWdhaW4uXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NTgtXHQgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQ1OTpcdGlmIChtdXRleF90cnlsb2NrKFx1MDAyNmFwX3NjYW5fYnVzX211dGV4KSkge1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDYwOlx0XHRhcF9zY2FuX2J1c190YXNrID0gY3VycmVudDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQ2MTpcdFx0YXBfc2Nhbl9idXNfcmVzdWx0ID0gYXBfc2Nhbl9idXMoKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQ2MjpcdFx0YXBfc2Nhbl9idXNfdGFzayA9IE5VTEw7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0NjM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZhcF9zY2FuX2J1c19tdXRleCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NjQtXHR9XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0yNDY3PXN0YXRpYyBpbmxpbmUgdm9pZCBfX2V4aXQgYXBfYXN5bmNfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQ3MS1cdGNoc2Nfbm90aWZpZXJfdW5yZWdpc3RlcihcdTAwMjZhcF9idXNfbmIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDcyOlx0Y2FuY2VsX3dvcmsoXHUwMDI2YXBfc2Nhbl9idXNfd29yayk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NzMtXHRocnRpbWVyX2NhbmNlbChcdTAwMjZhcF9wb2xsX3RpbWVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQ3NDpcdHRpbWVyX2RlbGV0ZShcdTAwMjZhcF9zY2FuX2J1c190aW1lcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NzUtfVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MjQ3Nz1zdGF0aWMgaW5saW5lIGludCBfX2luaXQgYXBfYXN5bmNfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQ4MS1cdC8qIFNldHVwIHRoZSBBUCBidXMgcmVzY2FuIHRpbWVyLiAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDgyOlx0dGltZXJfc2V0dXAoXHUwMDI2YXBfc2Nhbl9idXNfdGltZXIsIGFwX3NjYW5fYnVzX3RpbWVyX2NhbGxiYWNrLCAwKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQ4My1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0OTEtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0OTI6XHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZhcF9zY2FuX2J1c193b3JrKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQ5My1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI1MTAtb3V0OlxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNTExOlx0Y2FuY2VsX3dvcmsoXHUwMDI2YXBfc2Nhbl9idXNfd29yayk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI1MTItXHRocnRpbWVyX2NhbmNlbChcdTAwMjZhcF9wb2xsX3RpbWVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjUxMzpcdHRpbWVyX2RlbGV0ZShcdTAwMjZhcF9zY2FuX2J1c190aW1lcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI1MTQtXHRyZXR1cm4gcmM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDA3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBGdXp6YWJsZSBDb2RlKioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiBob3cgdGhpcyBtb2RpZmllZCBjb2RlIGluIGB2ZmlvX2FwYCBpcyBnb2luZyB0byBnZXQgZXhlY3V0ZWQsIGFuZCBob3cgd2UgY2FuIGVmZmVjdGl2ZWx5IHRhcmdldCBpdCB3aXRoIGZ1enppbmcuIGBhcF9zY2FuX2J1c2AgaXMgdGhlIGNvcmUgbWVjaGFuaXNtIGhlcmUuIEl0JiMzOTtzIHRyaWdnZXJlZCBwZXJpb2RpY2FsbHkgYnkgYSB0aW1lciAoYGFwX3NjYW5fYnVzX3RpbWVyYCkgYW5kLCBpbXBvcnRhbnRseSwgY2FuIGJlIGZvcmNlZCB2aWEgYGFwX2J1c19mb3JjZV9yZXNjYW4oKWAuIFdoZW4gdGhhdCBzY2FuIGNvbXBsZXRlcywgYG5vdGlmeV9zY2FuX2NvbXBsZXRlKClgIGdldHMgY2FsbGVkLCB3aGljaCB0aGVuIGludm9rZXMgdGhlIGBvbl9zY2FuX2NvbXBsZXRlYCBjYWxsYmFjayBmb3IgZXZlcnkgcmVnaXN0ZXJlZCBBUCBkcml2ZXIuIFRoaXMgbWVhbnMgb3VyIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHBlcmlvZGljYWxseSDigJMgcGVyZmVjdCBmb3IgZnV6emluZyEKCkluc2lkZSBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCwgdGhlIGNvZGUgaXRlcmF0ZXMgdGhyb3VnaCBgbWF0cml4X2Rldi0mZ3Q7bWRldl9saXN0YC4gVGhlIGtleSByZWFsaXphdGlvbiBpcyB0aGF0IGlmIHN5emthbGxlciBjcmVhdGVzIGFuIG1kZXYgZGV2aWNlIGZvciBgdmZpb19hcGAsIGl0JiMzOTtsbCBiZSBwcmVzZW50IGluIHRoaXMgbGlzdC4gVGhlIGltcGxpY2F0aW9ucyBhcmUgc2lnbmlmaWNhbnQ6IGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgIHdpbGwgcHJvY2VzcyB0aGF0IG1kZXYgZGV2aWNlIGFuZCBzdWJzZXF1ZW50bHkgY2FsbCBgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZ2AuIFRoaXMgZGlyZWN0IGNvbm5lY3Rpb24gbWVhbnMgdGhlIG1vZGlmaWVkIGNvZGUgaW4gYm90aCB0aG9zZSBmdW5jdGlvbnMgaXMgZ3VhcmFudGVlZCB0byBiZSBleGVjdXRlZCBwZXJpb2RpY2FsbHkgYXMgbG9uZyBhcyBhbiBtZGV2IGRldmljZSBpcyBhY3RpdmUhCgpBbmQgY3JlYXRpbmcgYW4gbWRldiBkZXZpY2U/IERlYWQgc2ltcGxlLiBJdCYjMzk7cyBqdXN0IGEgbWF0dGVyIG9mIHdyaXRpbmcgdG8gdGhlIHN5c2ZzIGZpbGUgYC9zeXMvY2xhc3MvbWRldl9idXMvLi4uL21kZXZfc3VwcG9ydGVkX3R5cGVzL3ZmaW9fYXAtcGFzc3Rocm91Z2gvY3JlYXRlYC4gVGhlIHJlYWwgYmVhdXR5IGlzIHRoYXQgc3l6a2FsbGVyIGFscmVhZHkgdW5kZXJzdGFuZHMgaG93IHRvIGRvIHRoaXMuIEl0IGhhcyBkZXNjcmlwdGlvbnMgZm9yIG1kZXYgZGV2aWNlcywgc28gY3JlYXRpbmcgYW5kIHJlbW92aW5nIHRoZW0gaXMgdHJpdmlhbCBmb3IgdGhlIGZ1enplci4gU28sIHRoaXMgY29kZSBwYXRoIGlzIG5vdCBvbmx5IHJlYWNoYWJsZSBidXQgKmhpZ2hseSogcmVhY2hhYmxlIGFuZCBlYXNpbHkgZnV6emFibGUhCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB3ZSB1bmRlcnN0YW5kIHRoZSByZWFjaGFiaWxpdHkgb2YgdGhlIG90aGVycy4gVGhlIGNvZGUgaW4gYHZmaW9fYXBfbWRldl9jZmdfYWRkYCBhbmQgYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCBhcmUgYWxzbyB3b3J0aCBmdXp6aW5nLiBUaGV5JiMzOTtyZSBjYWxsZWQgZnJvbSBgdmZpb19hcF9tZGV2X29uX2NmZ19hZGRgIGFuZCBgdmZpb19hcF9tZGV2X29uX2NmZ19yZW1vdmVgLCByZXNwZWN0aXZlbHkuIFRoZXNlLCBpbiB0dXJuLCBhcmUgY2FsbGVkIGZyb20gYHZmaW9fYXBfb25fY2ZnX2NoYW5nZWRgLiBIb3dldmVyLCBgdmZpb19hcF9vbl9jZmdfY2hhbmdlZGAgaXMgdHJpZ2dlcmVkIGJ5IEFQIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4gV2hpbGUgcG9zc2libGUgdGhhdCBzeXprYWxsZXIgY291bGQgdHJpZ2dlciBBUCBjb25maWcgY2hhbmdlcyBpdCBzZWVtcyBsaWtlIHRoYXQgd291bGQgYmUgZGlmZmljdWx0IHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUuIFRoZSBwZXJpb2RpYyBzY2FuIHdpdGggbWRldiBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gYXJlIG91ciBwcmltZSB0YXJnZXRzLgoKRmluYWxseSwgdGhlcmUmIzM5O3MgYHN0YXR1c19zaG93YC4gSXQmIzM5O3MgYSBzeXNmcyBhdHRyaWJ1dGUgb24gdGhlIEFQIGRldmljZS4gSWYgdGhlcmUgYXJlIG5vIEFQIGRldmljZXMsIHdlIG1pZ2h0IG5vdCBnZXQgdG8gaXQuIEhvd2V2ZXIsIG5vdyBJIHJlbWVtYmVyIHRoYXQgYHN0YXR1c19zaG93YCBpcyBhbiBhdHRyaWJ1dGUgb2YgdGhlIG1kZXYgZGV2aWNlIGl0c2VsZi4gVGhhdCYjMzk7cyBnb29kLCBub3csIGxldCYjMzk7cyBqdXN0IGNoZWNrIHdoZXJlIGl0JiMzOTtzIHJlZ2lzdGVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXR1c19zaG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIyOTQ9c3RhdGljIHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjMxMC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMzExOnN0YXRpYyBzc2l6ZV90IHN0YXR1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzEyLVx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM3MAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipBbmFseXppbmcgdGhlIGBzdGF0dXNfc2hvd2AgQ29udGV4dCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgc3RhdHVzX3Nob3dgIGZ1bmN0aW9uIG9yIG1ldGhvZCBpcyBhY3R1YWxseSBkb2luZy4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHRoZSBuYW1lIHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgcHJlc2VudGluZyBzb21lIGtpbmQgb2Ygc3lzdGVtIG9yIHByb2Nlc3Mgc3RhdHVzIGluZm9ybWF0aW9uLiBCdXQsIEkgY2FuJiMzOTt0IGp1c3QganVtcCB0byBjb25jbHVzaW9ucywgSSBuZWVkIHRoZSBjb250ZXh0LiBXaGF0JiMzOTtzIHRoZSBzdXJyb3VuZGluZyBjb2RlPyBBcmUgdGhlcmUgYW55IGNvbW1lbnRzPyBXaGF0IG90aGVyIGZ1bmN0aW9ucyBvciBjbGFzc2VzIGRvZXMgaXQgaW50ZXJhY3Qgd2l0aD8gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHN0YWNrIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBhcHBsaWNhdGlvbi4gSXMgaXQgZGlzcGxheWluZyBkYXRhIGZyb20gYSBkYXRhYmFzZT8gQSBjb25maWd1cmF0aW9uIGZpbGU/IFN5c3RlbSBjYWxscz8gT3IgbWF5YmUgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCBzb21lIHNvcnQgb2YgbW9uaXRvcmluZyBzZXJ2aWNlPyBLbm93aW5nIHRoZSBkYXRhIHNvdXJjZSBpcyB0aGUgZmlyc3Qga2V5IHN0ZXAuIFRoZW4sIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBvdXRwdXQuIElzIGl0IGp1c3QgZm9ybWF0dGVkIHRleHQ/IERvZXMgaXQgZ2VuZXJhdGUgYSBHVUkgZWxlbWVudD8gRG9lcyBpdCB3cml0ZSB0byBhIGxvZyBmaWxlPyBPbmNlIEkgdW5kZXJzdGFuZCB0aGUgaW5wdXQgYW5kIG91dHB1dCwgSSBjYW4gZGV0ZXJtaW5lIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZGVidWcsIG1vZGlmeSwgb3IgZW5oYW5jZSB0aGUgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIGFsbCBhYm91dCBjb250ZXh0IGFuZCBob3cgdGhlIGBzdGF0dXNfc2hvd2AgaXMgdXNlZCBhbmQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzExLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzMTE6XHRzdGF0aWMgc3NpemVfdCBzdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4yMzEyOlx0XHRcdFx0ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4yMzEzOlx0XHRcdFx0ICAgY2hhciAqYnVmKVxuMjMxNDpcdHtcbjIzMTU6XHRcdHNzaXplX3QgbmNoYXJzID0gMDtcbjIzMTY6XHRcdHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxO1xuMjMxNzpcdFx0dW5zaWduZWQgbG9uZyBhcGlkLCBhcHFpO1xuMjMxODpcdFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcbjIzMTk6XHRcdHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2ID0gdG9fYXBfZGV2KGRldik7XG4yMzIwOlx0XG4yMzIxOlx0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2spO1xuMjMyMjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuMjMyMzpcdFx0cSA9IGRldl9nZXRfZHJ2ZGF0YShcdTAwMjZhcGRldi1cdTAwM2VkZXZpY2UpO1xuMjMyNDpcdFx0bWF0cml4X21kZXYgPSB2ZmlvX2FwX21kZXZfZm9yX3F1ZXVlKHEpO1xuMjMyNTpcdFxuMjMyNjpcdFx0LyogSWYgdGhlIHF1ZXVlIGlzIGFzc2lnbmVkIHRvIHRoZSBtYXRyaXggbWVkaWF0ZWQgZGV2aWNlLCB0aGVuXG4yMzI3Olx0XHQgKiBkZXRlcm1pbmUgd2hldGhlciBpdCBpcyBwYXNzZWQgdGhyb3VnaCB0byBhIGd1ZXN0OyBvdGhlcndpc2UsXG4yMzI4Olx0XHQgKiBpbmRpY2F0ZSB0aGF0IGl0IGlzIHVuYXNzaWduZWQuXG4yMzI5Olx0XHQgKi9cbjIzMzA6XHRcdGlmIChtYXRyaXhfbWRldikge1xuMjMzMTpcdFx0XHRhcGlkID0gQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKTtcbjIzMzI6XHRcdFx0YXBxaSA9IEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pO1xuMjMzMzpcdFx0XHQvKlxuMjMzNDpcdFx0XHQgKiBJZiB0aGUgcXVldWUgaXMgcGFzc2VkIHRocm91Z2ggdG8gdGhlIGd1ZXN0LCB0aGVuIGluZGljYXRlXG4yMzM1Olx0XHRcdCAqIHRoYXQgaXQgaXMgaW4gdXNlOyBvdGhlcndpc2UsIGluZGljYXRlIHRoYXQgaXQgaXNcbjIzMzY6XHRcdFx0ICogbWVyZWx5IGFzc2lnbmVkIHRvIGEgbWF0cml4IG1lZGlhdGVkIGRldmljZS5cbjIzMzc6XHRcdFx0ICovXG4yMzM4Olx0XHRcdGlmIChtYXRyaXhfbWRldi1cdTAwM2Vrdm0gXHUwMDI2XHUwMDI2XG4yMzM5Olx0XHRcdCAgICB0ZXN0X2JpdF9pbnYoYXBpZCwgbWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXBtKSBcdTAwMjZcdTAwMjZcbjIzNDA6XHRcdFx0ICAgIHRlc3RfYml0X2ludihhcHFpLCBtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hcW0pKVxuMjM0MTpcdFx0XHRcdG5jaGFycyA9IHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslc1xcblwmIzM0OywgQVBfUVVFVUVfSU5fVVNFKTtcbjIzNDI6XHRcdFx0ZWxzZVxuMjM0MzpcdFx0XHRcdG5jaGFycyA9IHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslc1xcblwmIzM0OywgQVBfUVVFVUVfQVNTSUdORUQpO1xuMjM0NDpcdFx0fSBlbHNlIHtcbjIzNDU6XHRcdFx0bmNoYXJzID0gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVzXFxuXCYjMzQ7LCBBUF9RVUVVRV9VTkFTU0lHTkVEKTtcbjIzNDY6XHRcdH1cbjIzNDc6XHRcbjIzNDg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuMjM0OTpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2spO1xuMjM1MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjM5NAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDIyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQVAgUXVldWUgRGV2aWNlIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gdHJhY2UgdGhlIGZsb3cuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBzdGF0dXNfc2hvd2AgaXMgZGVmaW5pdGVseSBhc3NvY2lhdGVkIHdpdGggdGhlIEFQIHF1ZXVlIGRldmljZSwgYGFwZGV2LSZndDtkZXZpY2VgLiBNYWtlcyBzZW5zZS4gSWYgdGhlcmUgKmlzbiYjMzk7dCogYW4gQVAgcXVldWUgZGV2aWNlLCB0aGF0IHBhdGggaXMgY2xlYXJseSBkZWFkLiBCdXQgdGhlbiB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJIHNlZSB0aGF0IGB2ZmlvX2FwX21kZXZfcHJvYmVgIGlzIHJlYWNoYWJsZSByZWdhcmRsZXNzLiBUaGF0IG1ha2VzIHNlbnNlLCBJIHN1cHBvc2UsIGJlY2F1c2UgaXQgbWlnaHQgYmUgdGhlIHN0YXJ0aW5nIHBvaW50LgoKVGhlbiBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCBpcyBhbHNvIHJlYWNoYWJsZS4gT2theSwgdGhhdCYjMzk7cyBhbm90aGVyIGVudHJ5IHBvaW50LiBBbmQgYHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmdgLCB0aGF0JiMzOTtzIGFjY2Vzc2libGUgdG9vLCB3aGljaCBpbXBsaWVzIGFuIGFsdGVybmF0aXZlIHBhdGh3YXkuCgpOb3csIGB2ZmlvX2FwX21kZXZfY2ZnX2FkZGAgZ2V0cyBjYWxsZWQgaWYgYW5kIG9ubHkgaWYgYHZmaW9fYXBfbWRldl9vbl9jZmdfYWRkYCBpcyBpbnZva2VkLiBXYWl0LCBJJiMzOTttIHRyYWNpbmcgYmFja3dhcmQuLi4gYHZmaW9fYXBfbWRldl9jZmdfYWRkYCBpcyAqYWN0dWFsbHkqIGNhbGxlZCBmcm9tIGB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZGAuIEFuZCBgdmZpb19hcF9tZGV2X29uX2NmZ19hZGRgIGlzIHRyaWdnZXJlZCBieSBgdmZpb19hcF9vbl9jZmdfY2hhbmdlZGAuIE9rYXksIHRoYXQmIzM5O3Mgb25lIGxvZ2ljYWwgY2hhaW4uCgpIb2xkIG9uLCBJIHNlZSBzb21ldGhpbmcgZWxzZS4gSSYjMzk7bSByZW1pbmRlZCB0aGF0IGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgIGFsc28gbWFrZXMgYSBjYWxsIHRvIGB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnYCwgYW5kIHdhc24mIzM5O3QgdGhhdCBtb2RpZmllZCByZWNlbnRseT8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGludGVyYWN0aW9uLiBTbywgYmVmb3JlIEkgY29udGludWUsIEkgdGhpbmsgSSYjMzk7bGwgc3RhcnQgd2l0aCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiB0aGlzIGRlZXAgZGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4NzU6XHR2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbyxcbjI4NzY6XHRcdFx0XHQgICAgICBzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm9sZF9jb25maWdfaW5mbylcbjI4Nzc6XHR7XG4yODc4Olx0XHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuMjg3OTpcdFxuMjg4MDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbjI4ODE6XHRcbjI4ODI6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4yODgzOlx0XHRcdC8qXG4yODg0Olx0XHRcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiBtYXRyaXhfbWRldixcbjI4ODU6XHRcdFx0ICogYW5kIGt2bS1cdTAwM2Vsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIG1kZXZzX2xvY2sgdG8gc2F0aXNmeSB0aGUgbG9ja1xuMjg4NjpcdFx0XHQgKiBvcmRlcmluZyByZXF1aXJlbWVudCBhbmQgcHJldmVudCBhIGxvY2tkZXAgc3BsYXQuXG4yODg3Olx0XHRcdCAqL1xuMjg4ODpcdFx0XHRpZiAobWF0cml4X21kZXYtXHUwMDNla3ZtKVxuMjg4OTpcdFx0XHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuMjg5MDpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4yODkxOlx0XG4yODkyOlx0XHRcdGlmIChiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXHUwMDNlYXBtX2FkZCwgQVBfREVWSUNFUykgXHUwMDI2XHUwMDI2XG4yODkzOlx0XHRcdCAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXHUwMDNlYXFtX2FkZCwgQVBfRE9NQUlOUykgXHUwMDI2XHUwMDI2XG4yODk0Olx0XHRcdCAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXHUwMDNlYWRtX2FkZCwgQVBfRE9NQUlOUykpXG4yODk1Olx0XHRcdFx0Z290byBkb191bmxvY2s7XG4yODk2Olx0XG4yODk3Olx0XHRcdHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcobWF0cml4X21kZXYpO1xuMjg5ODpcdFx0XHRiaXRtYXBfY2xlYXIobWF0cml4X21kZXYtXHUwMDNlYXBtX2FkZCwgMCwgQVBfREVWSUNFUyk7XG4yODk5Olx0XHRcdGJpdG1hcF9jbGVhcihtYXRyaXhfbWRldi1cdTAwM2VhcW1fYWRkLCAwLCBBUF9ET01BSU5TKTtcbjI5MDA6XHRcdFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVx1MDAzZWFkbV9hZGQsIDAsIEFQX0RPTUFJTlMpO1xuMjkwMTpcdFxuMjkwMjpcdGRvX3VubG9jazpcbjI5MDM6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4yOTA0Olx0XHRcdGlmIChtYXRyaXhfbWRldi1cdTAwM2Vrdm0pXG4yOTA1Olx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbjI5MDY6XHRcdH1cbjI5MDc6XHRcbjI5MDg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbjI5MDk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3Njk5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVkZJTy1BUCBMb2NrIE9yZGVyaW5nIEZpeCBDb25maXJtYXRpb24gYW5kIENvbmZpZ3VyYXRpb24gSW5xdWlyeSoqCgpPa2F5LCBzbyBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCBpcyBpbmRlZWQgcmVhY2hhYmxlLCBhbmQgdGhlIHJlY2VudCBtb2RpZmljYXRpb25zIHRvIHByb3Blcmx5IGltcGxlbWVudCBsb2NraW5nIGluIHRoaXMgYXJlYSBhcmUgY29uZmlybWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcmVhbCBmaXggYWRkcmVzc2luZyB0aGUgbG9jayBvcmRlcmluZyBpc3N1ZXMgYW5kIHRoZSBgbG9ja2RlcGAgc3BsYXRzIHdlIHdlcmUgc2VlaW5nLiBUaGUgZHJpdmVyIGluIHF1ZXN0aW9uIGlzLCBvZiBjb3Vyc2UsIHRoZSBgVkZJT19BUGAgZHJpdmVyLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIGFib3V0IGNvbmZpZ3VyYXRpb24uIFdoYXQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgY2hhbmdlIHRvIGJlIGVmZmVjdGl2ZSwgb3IgdG8gZXZlbiBiZSBjb21waWxlZD8gTGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBgZHJpdmVycy9zMzkwL2NyeXB0by9LY29uZmlnYCBmaWxlIGFuZCBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGVwZW5kZW5jaWVzIHRoaXMgbmV3IGxvY2sgYmVoYXZpb3IgaGFzIG9uIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJT19BUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc5OTUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqVHJhY2luZyB0aGUgQ29uZmlndXJhdGlvbiBvZiBgdmZpb19hcGAqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGB2ZmlvX2FwYCBjb21wb25lbnQgaXMgYWN0dWFsbHkgY29uZmlndXJlZC4gVGhhdCYjMzk7cyB0aGUgZmlyc3Qgc3RlcC4gSXMgaXQgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBjb25maWd1cmF0aW9uIChgLmNvbmZpZ2ApPyBQZXJoYXBzIGluIGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUgZmlsZSwgb3IgbWF5YmUgaXQmIzM5O3MgY29udHJvbGxlZCB2aWEgc29tZSBzb3J0IG9mIG1vZHVsZSBwYXJhbWV0ZXI/IEkmIzM5O2xsIG5lZWQgdG8gc3RhcnQgYnkgc2VhcmNoaW5nIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIGxvb2tpbmcgZm9yIHJlZmVyZW5jZXMgdG8gYHZmaW9fYXBgLiBJJiMzOTtsbCB0cnkgdXNpbmcgYGdyZXBgIG9yIGBmaW5kYCBpbml0aWFsbHksIGxvb2tpbmcgZm9yIGJvdGggdGhlIG1vZHVsZSBuYW1lIGRpcmVjdGx5IGFuZCBhbnkgYXNzb2NpYXRlZCBzeW1ib2xzIG9yIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiBUaGVuIEkmIzM5O2xsIGNoZWNrIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uIG9yIHRoZSBgS2NvbmZpZ2AgZmlsZXMgZm9yIHRoYXQgc3Vic3lzdGVtIHRvIHVuZGVyc3RhbmQgdGhlIHZhcmlvdXMgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBNeSBmb2N1cyBoZXJlIHdpbGwgYmUgb24gdW5kZXJzdGFuZGluZyB0aGUgdmFyaW91cyB3YXlzIHRoYXQgaXQgaXMgdHVybmVkIG9uIGFuZCBvZmYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vTWFrZWZpbGU9MzQ9b2JqLSQoQ09ORklHX1BLRVlfVVYpICYjNDM7PSBwa2V5LXV2Lm9cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL01ha2VmaWxlLTM2LSMgYWRqdW5jdCBwcm9jZXNzb3IgbWF0cml4XG5kcml2ZXJzL3MzOTAvY3J5cHRvL01ha2VmaWxlOjM3OnZmaW9fYXAtb2JqcyA6PSB2ZmlvX2FwX2Rydi5vIHZmaW9fYXBfb3BzLm9cbmRyaXZlcnMvczM5MC9jcnlwdG8vTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX1ZGSU9fQVApICYjNDM7PSB2ZmlvX2FwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgzNjUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBWRklPLUFQIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYENPTkZJR19WRklPX0FQYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyBkcmlsbCBkb3duIGFuZCBzZWUgd2hlcmUgdGhpcyBgVkZJT19BUGAgaXMgZGVmaW5lZCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuIEdpdmVuIHRoYXQgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBoYXJkd2FyZS1hc3Npc3RlZCBjcnlwdG9ncmFwaHkgb3IgYWNjZWxlcmF0aW9uLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgUy8zOTAgYXJjaGl0ZWN0dXJlJiMzOTtzIGNyeXB0by1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGxvb2sgYXQgYGRyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBmaW5kIHRoZSBgVkZJT19BUGAgb3B0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2UgdG8gZ28gb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRklPX0FQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9LY29uZmlnPTgyMz1jb25maWcgVkZJT19DQ1dcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy04MzMtXG5hcmNoL3MzOTAvS2NvbmZpZzo4MzQ6Y29uZmlnIFZGSU9fQVBcbmFyY2gvczM5MC9LY29uZmlnLTgzNS1cdGRlZl90cmlzdGF0ZSBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjkxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipEaXZpbmcgaW50byB0aGUgczM5MCBBcmNoaXRlY3R1cmUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgYGFyY2gvczM5MC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgODM0LiBJJiMzOTttIGdvaW5nIHRvIGFzc3VtZSB0aGlzIHNlY3Rpb24gbGlrZWx5IHJlbGF0ZXMgdG8gc29tZSBmZWF0dXJlIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdpdGhpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIEdpdmVuIHRoZSBjb250ZXh0IG9mIGEgS2NvbmZpZyBmaWxlLCBpdCYjMzk7cyBwcm9iYWJseSBkZWZpbmluZyBhIGNvbmRpdGlvbmFsIGJ1aWxkIG9wdGlvbiwgYSBoYXJkd2FyZSBmZWF0dXJlIHNldHRpbmcsIG9yIG1heWJlIGV2ZW4gYSBkcml2ZXIgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHRoZSBJQk0gbWFpbmZyYW1lIGFyY2hpdGVjdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaXRlbS4gSXQgY291bGQgYmUgc29tZXRoaW5nIHN0cmFpZ2h0Zm9yd2FyZCwgb3IgaXQgbWlnaHQgcmVxdWlyZSBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMsIGZpcm13YXJlIGludGVyYWN0aW9ucywgb3Igc3BlY2lmaWMga2VybmVsIHN1YnN5c3RlbXMgd2l0aGluIHRoZSBzMzkwIGVudmlyb25tZW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgzMDpcdFxuIDgzMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA4MzI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZmaW9fY2N3LlxuIDgzMzpcdFxuIDgzNDpcdGNvbmZpZyBWRklPX0FQXG4gODM1Olx0XHRkZWZfdHJpc3RhdGUgblxuIDgzNjpcdFx0cHJvbXB0IFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgQVAgZGV2aWNlc1wmIzM0O1xuIDgzNzpcdFx0ZGVwZW5kcyBvbiBLVk1cbiA4Mzg6XHRcdGRlcGVuZHMgb24gVkZJT1xuIDgzOTpcdFx0ZGVwZW5kcyBvbiBBUFxuIDg0MDpcdFx0c2VsZWN0IFZGSU9fTURFVlxuIDg0MTpcdFx0aGVscFxuIDg0MjpcdFx0ICBUaGlzIGRyaXZlciBncmFudHMgYWNjZXNzIHRvIEFkanVuY3QgUHJvY2Vzc29yIChBUCkgZGV2aWNlc1xuIDg0MzpcdFx0ICB2aWEgdGhlIFZGSU8gbWVkaWF0ZWQgZGV2aWNlIGludGVyZmFjZS5cbiA4NDQ6XHRcbiA4NDU6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDg0NjpcdFx0ICB3aWxsIGJlIGNhbGxlZCB2ZmlvX2FwLlxuIDg0NzpcdFxuIDg0ODpcdGVuZG1lbnVcbiA4NDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyMDkKCQkJCQkJCW91dHB1dDogMTYKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgY29udGV4dCBpcyBteSBhcmVhIG9mIGV4cGVydGlzZToKCioqRGlzc2VjdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIFZGSU9fQVAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gZ2F0aGVyaW5nLCB0aGlzIGBWRklPX0FQYCB0aGluZyBpcyBidWlsdCBvbiB0b3Agb2YgYEtWTWAsIGBWRklPYCwgYW5kIGBBUGAuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgbGF5ZXJpbmcgYXBwcm9hY2gsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB3aGF0IGVhY2ggY29tcG9uZW50IGJyaW5ncyB0byB0aGUgdGFibGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgQVBgIGlzLiBUaGUgdGVybSBpdHNlbGYgaXMgcmluZ2luZyBhIGJlbGwgLSBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgJiMzNDtBUCYjMzQ7IGlzIGxpa2VseSByZWxhdGVkIHRvIGBaQ1JZUFRgLCBidXQgSSBzaG91bGQgdmVyaWZ5IHRoaXMgc28gSSBkb24mIzM5O3QgY29uZnVzZSBzaW1pbGFyIGNvbXBvbmVudHMsIGFuZCBtaXN1bmRlcnN0YW5kIGhvdyB0aGlzIGVudGlyZSBzeXN0ZW0gd29ya3MuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGBBUGAgY29tcG9uZW50LCBqdXN0IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjayBiZWZvcmUgZGl2aW5nIGludG8gdGhlIG1vcmUgY29tcGxleCBpbnRlcmFjdGlvbnMuIEkgbmVlZCB0byBiZSBleGFjdCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdD0yODc9dG8gaW5pdHJkIGltYWdlLCB1c2VyIGNhbiBub3RpY2UgaXQgYmVmb3JlIGJvb3QuXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdC0yODktXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0OjI5MDpCb290Y29uZmlnIEFQSXNcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3QtMjkxLT09PT09PT09PT09PT09PVxuLS1cbmFyY2gvbTY4ay9LY29uZmlnLm1hY2hpbmU9Mjk9Y29uZmlnIE1BQ1xuLS1cbmFyY2gvbTY4ay9LY29uZmlnLm1hY2hpbmUtNDAtXG5hcmNoL202OGsvS2NvbmZpZy5tYWNoaW5lOjQxOmNvbmZpZyBBUE9MTE9cbmFyY2gvbTY4ay9LY29uZmlnLm1hY2hpbmUtNDItXHRib29sIFwmIzM0O0Fwb2xsbyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZz0yOTE9Y29uZmlnIDQ3NkZQRVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWctMjk0LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZzoyOTU6Y29uZmlnIEFQTTgyMXh4XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnLTI5Ni1cdGJvb2xcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz03ODU9Y29uZmlnIEVBRE1fU0NIXG4tLVxuYXJjaC9zMzkwL0tjb25maWctNzk1LVxuYXJjaC9zMzkwL0tjb25maWc6Nzk2OmNvbmZpZyBBUFxuYXJjaC9zMzkwL0tjb25maWctNzk3LVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy04MDgtXG5hcmNoL3MzOTAvS2NvbmZpZzo4MDk6Y29uZmlnIEFQX0RFQlVHXG5hcmNoL3MzOTAvS2NvbmZpZy04MTAtXHRkZWZfYm9vbCBuXG4tLVxuYXJjaC9zMzkwL0tjb25maWc9ODg1PWNvbmZpZyBDTU1fSVVDVlxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTg5Mi1cbmFyY2gvczM5MC9LY29uZmlnOjg5Mzpjb25maWcgQVBQTERBVEFfQkFTRVxuYXJjaC9zMzkwL0tjb25maWctODk0LVx0ZGVmX2Jvb2wgblxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTkwOC1cbmFyY2gvczM5MC9LY29uZmlnOjkwOTpjb25maWcgQVBQTERBVEFfTUVNXG5hcmNoL3MzOTAvS2NvbmZpZy05MTAtXHRkZWZfdHJpc3RhdGUgbVxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTkyNS1cbmFyY2gvczM5MC9LY29uZmlnOjkyNjpjb25maWcgQVBQTERBVEFfT1NcbmFyY2gvczM5MC9LY29uZmlnLTkyNy1cdGRlZl90cmlzdGF0ZSBtXG4tLVxuYXJjaC9zMzkwL0tjb25maWctOTQwLVxuYXJjaC9zMzkwL0tjb25maWc6OTQxOmNvbmZpZyBBUFBMREFUQV9ORVRfU1VNXG5hcmNoL3MzOTAvS2NvbmZpZy05NDItXHRkZWZfdHJpc3RhdGUgbVxuLS1cbmFyY2gveDg2L0tjb25maWc9Mjc0MT1jb25maWcgWDg2X0FQTV9CT09UXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yNzQ0LVxuYXJjaC94ODYvS2NvbmZpZzoyNzQ1Om1lbnVjb25maWcgQVBNXG5hcmNoL3g4Ni9LY29uZmlnLTI3NDYtXHR0cmlzdGF0ZSBcJiMzNDtBUE0gKEFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQpIEJJT1Mgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWc9Mjc5OT1pZiBBUE1cbmFyY2gveDg2L0tjb25maWctMjgwMC1cbmFyY2gveDg2L0tjb25maWc6MjgwMTpjb25maWcgQVBNX0lHTk9SRV9VU0VSX1NVU1BFTkRcbmFyY2gveDg2L0tjb25maWctMjgwMi1cdGJvb2wgXCYjMzQ7SWdub3JlIFVTRVIgU1VTUEVORFwmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWctMjgwNy1cbmFyY2gveDg2L0tjb25maWc6MjgwODpjb25maWcgQVBNX0RPX0VOQUJMRVxuYXJjaC94ODYvS2NvbmZpZy0yODA5LVx0Ym9vbCBcJiMzNDtFbmFibGUgUE0gYXQgYm9vdCB0aW1lXCYjMzQ7XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yODI0LVxuYXJjaC94ODYvS2NvbmZpZzoyODI1OmNvbmZpZyBBUE1fQ1BVX0lETEVcbmFyY2gveDg2L0tjb25maWctMjgyNi1cdGRlcGVuZHMgb24gQ1BVX0lETEVcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTI4MzYtXG5hcmNoL3g4Ni9LY29uZmlnOjI4Mzc6Y29uZmlnIEFQTV9ESVNQTEFZX0JMQU5LXG5hcmNoL3g4Ni9LY29uZmlnLTI4MzgtXHRib29sIFwmIzM0O0VuYWJsZSBjb25zb2xlIGJsYW5raW5nIHVzaW5nIEFQTVwmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWctMjg0OS1cbmFyY2gveDg2L0tjb25maWc6Mjg1MDpjb25maWcgQVBNX0FMTE9XX0lOVFNcbmFyY2gveDg2L0tjb25maWctMjg1MS1cdGJvb2wgXCYjMzQ7QWxsb3cgaW50ZXJydXB0cyBkdXJpbmcgQVBNIEJJT1MgY2FsbHNcJiMzNDtcbi0tXG5kcml2ZXJzL2NoYXIvS2NvbmZpZz0yMTM9Y29uZmlnIFhJTElOWF9IV0lDQVBcbi0tXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yMjItXG5kcml2ZXJzL2NoYXIvS2NvbmZpZzoyMjM6Y29uZmlnIEFQUExJQ09NXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yMjQtXHR0cmlzdGF0ZSBcJiMzNDtBcHBsaWNvbSBpbnRlbGxpZ2VudCBmaWVsZGJ1cyBjYXJkIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWc9MjkwPWNvbmZpZyBRQ09NX0NMS19SUE1IXG4tLVxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTI5OC1cbmRyaXZlcnMvY2xrL3Fjb20vS2NvbmZpZzoyOTk6Y29uZmlnIEFQUV9HQ0NfODA4NFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTMwMC1cdHRyaXN0YXRlIFwmIzM0O0FQUTgwODQgR2xvYmFsIENsb2NrIENvbnRyb2xsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWctMzA3LVxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnOjMwODpjb25maWcgQVBRX01NQ0NfODA4NFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTMwOS1cdHRyaXN0YXRlIFwmIzM0O0FQUTgwODQgTXVsdGltZWRpYSBDbG9jayBDb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9kbWEvS2NvbmZpZz03OD1jb25maWcgQU1DQ19QUEM0NDBTUEVfQURNQVxuLS1cbmRyaXZlcnMvZG1hL0tjb25maWctODctXG5kcml2ZXJzL2RtYS9LY29uZmlnOjg4OmNvbmZpZyBBUFBMRV9BRE1BQ1xuZHJpdmVycy9kbWEvS2NvbmZpZy04OS1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIEFETUFDIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnPTE1ND1jb25maWcgRUZJX0RFVl9QQVRIX1BBUlNFUlxuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWctMTU2LVxuZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZzoxNTc6Y29uZmlnIEFQUExFX1BST1BFUlRJRVNcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtBcHBsZSBEZXZpY2UgUHJvcGVydGllc1wmIzM0O1xuLS1cbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWc9NjY9Y29uZmlnIEFMMzMyMEFcbi0tXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTc1LVxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzo3Njpjb25maWcgQVBEUzkxNjBcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctNzctXHR0cmlzdGF0ZSBcJiMzNDtBUERTOTE2MCBjb21iaW5lZCBhbHMgYW5kIHByb3hpbWl0eSBzZW5zb3JcJiMzNDtcbi0tXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTg2LVxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzo4Nzpjb25maWcgQVBEUzkzMDBcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctODgtXHR0cmlzdGF0ZSBcJiMzNDtBUERTOTMwMCBhbWJpZW50IGxpZ2h0IHNlbnNvclwmIzM0O1xuLS1cbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctOTYtXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnOjk3OmNvbmZpZyBBUERTOTMwNlxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZy05OC1cdHRyaXN0YXRlIFwmIzM0O0F2YWdvIEFQRFM5MzA2IEFtYmllbnQgTGlnaHQgU2Vuc29yXCYjMzQ7XG4tLVxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZy0xMDgtXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnOjEwOTpjb25maWcgQVBEUzk5NjBcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctMTEwLVx0dHJpc3RhdGUgXCYjMzQ7QXZhZ28gQVBEUzk5NjAgZ2VzdHVyZS9SR0IvQUxTL3Byb3hpbWl0eSBzZW5zb3JcJiMzNDtcbi0tXG5kcml2ZXJzL2lvbW11L0tjb25maWc9Mjk2PWNvbmZpZyBTUEFQUl9UQ0VfSU9NTVVcbi0tXG5kcml2ZXJzL2lvbW11L0tjb25maWctMzAzLVxuZHJpdmVycy9pb21tdS9LY29uZmlnOjMwNDpjb25maWcgQVBQTEVfREFSVFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTMwNS1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIERBUlQgSU9NTVUgU3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnPTc4OD1jb25maWcgSVJRX0lEVDMyNDNYXG4tLVxuZHJpdmVycy9pcnFjaGlwL0tjb25maWctNzkyLVxuZHJpdmVycy9pcnFjaGlwL0tjb25maWc6NzkzOmNvbmZpZyBBUFBMRV9BSUNcbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTc5NC1cdGJvb2wgXCYjMzQ7QXBwbGUgSW50ZXJydXB0IENvbnRyb2xsZXIgKEFJQylcJiMzNDtcbi0tXG5kcml2ZXJzL21pc2MvS2NvbmZpZz0zMjc9Y29uZmlnIFNHSV9HUlVfREVCVUdcbi0tXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0zMzMtXG5kcml2ZXJzL21pc2MvS2NvbmZpZzozMzQ6Y29uZmlnIEFQRFM5ODAyQUxTXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0zMzUtXHR0cmlzdGF0ZSBcJiMzNDtNZWRmaWVsZCBBdmFnbyBBUERTOTgwMiBBTFMgU2Vuc29yIG1vZHVsZVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZz0xMDY9Y29uZmlnIE5FMktfUENJXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnLTEyMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZzoxMjQ6Y29uZmlnIEFQTkVcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZy0xMjUtXHR0cmlzdGF0ZSBcJiMzNDtQQ01DSUEgTkUyMDAwIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L3BjaS5jPTMzMjA9c3RhdGljIGludCBydHc4OV9wY2lfY2ZnX2RhYyhzdHJ1Y3QgcnR3ODlfZGV2ICpydHdkZXYsIGJvb2wgZm9yY2UpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9wY2kuYy0zMzMyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9wY2kuYzozMzMzOlx0LyogQ29uZmlndXJlIERBQyBvbmx5IHZpYSBQQ0kgY29uZmlnIEFQSSwgbm90IERCSSBpbnRlcmZhY2VzICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L3BjaS5jLTMzMzQtXHRyZXQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBSVFc4OV9QQ0lFX0wxX0NUUkwsIFx1MDAyNnZhbCk7XG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9MjUzPWNvbmZpZyBNQVJWRUxMX0NOMTBLX1RBRF9QTVVcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yNTktXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyNjA6Y29uZmlnIEFQUExFX00xX0NQVV9QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI2MS1cdGJvb2wgXCYjMzQ7QXBwbGUgTTEgQ1BVIFBNVSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZz0xOTQ9Y29uZmlnIEFEVl9TV0JVVFRPTlxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWctMjA0LVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZzoyMDU6Y29uZmlnIEFQUExFX0dNVVhcbmRyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWctMjA2LVx0dHJpc3RhdGUgXCYjMzQ7QXBwbGUgR211eCBEcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3BtZG9tYWluL2FwcGxlL0tjb25maWc9Mz1pZiBBUkNIX0FQUExFIHx8IENPTVBJTEVfVEVTVFxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnLTQtXG5kcml2ZXJzL3BtZG9tYWluL2FwcGxlL0tjb25maWc6NTpjb25maWcgQVBQTEVfUE1HUl9QV1JTVEFURVxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnLTYtXHRib29sIFwmIzM0O0FwcGxlIFNvQyBQTUdSIHBvd2VyIHN0YXRlIGNvbnRyb2xcJiMzNDtcbi0tXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnPTE4PWNvbmZpZyBQT1dFUl9TVVBQTFlfSFdNT05cbi0tXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnLTMwLVxuZHJpdmVycy9wb3dlci9zdXBwbHkvS2NvbmZpZzozMTpjb25maWcgQVBNX1BPV0VSXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7QVBNIGVtdWxhdGlvbiBmb3IgY2xhc3MgYmF0dGVyaWVzXCYjMzQ7XG4tLVxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZz01PW1lbnUgXCYjMzQ7QXBwbGUgU29DIGRyaXZlcnNcJiMzNDtcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctNi1cbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc6Nzpjb25maWcgQVBQTEVfTUFJTEJPWFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy04LVx0dHJpc3RhdGUgXCYjMzQ7QXBwbGUgU29DIG1haWxib3hlc1wmIzM0O1xuLS1cbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctMTgtXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnOjE5OmNvbmZpZyBBUFBMRV9SVEtJVFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIFJUS2l0IGNvLXByb2Nlc3NvciBJUEMgcHJvdG9jb2xcJiMzNDtcbi0tXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTMwLVxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZzozMTpjb25maWcgQVBQTEVfU0FSVFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy0zMi1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIFNBUlQgRE1BIGFkZHJlc3MgZmlsdGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy00MC1cbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc6NDE6Y29uZmlnIEFQUExFX1RVTkFCTEVcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctNDItXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZz0xNDc9Y29uZmlnIFVTQl9RQ09NX0VVRFxuLS1cbmRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZy0xNTgtXG5kcml2ZXJzL3VzYi9taXNjL0tjb25maWc6MTU5OmNvbmZpZyBBUFBMRV9NRklfRkFTVENIQVJHRVxuZHJpdmVycy91c2IvbWlzYy9LY29uZmlnLTE2MC1cdHRyaXN0YXRlIFwmIzM0O0Zhc3QgY2hhcmdlIGNvbnRyb2wgZm9yIGlPUyBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92aWRlby9LY29uZmlnPTY9bWVudSBcJiMzNDtHcmFwaGljcyBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL3ZpZGVvL0tjb25maWctNy1cbmRyaXZlcnMvdmlkZW8vS2NvbmZpZzo4OmNvbmZpZyBBUEVSVFVSRV9IRUxQRVJTXG5kcml2ZXJzL3ZpZGVvL0tjb25maWctOS1cdGJvb2xcbi0tXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWc9MTExMT1jb25maWcgTVNDMzEzRV9XQVRDSERPR1xuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZy0xMTIyLVxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnOjExMjM6Y29uZmlnIEFQUExFX1dBVENIRE9HXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMTEyNC1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIFNvQyB3YXRjaGRvZ1wmIzM0O1xuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYz0xNjUyPXhmc19mc19maWxsX3N1cGVyKFxuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYy0xNjY0LVx0ICogaXMgZ3VhcmFudGVlZCB0byBoYXZlIGJlZW4gY29tcGxldGVkIGJ5IGVpdGhlciB0aGUgb2xkIG1vdW50IEFQSSBvclxuZnMveGZzL3hmc19zdXBlci5jOjE2NjU6XHQgKiB0aGUgbmV3ZXIgZnNvcGVuL2ZzY29uZmlnIEFQSS5cbmZzL3hmcy94ZnNfc3VwZXIuYy0xNjY2LVx0ICovXG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWc9MzEwPWNvbmZpZyBQTV9UUkFDRV9SVENcbi0tXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0zMjctXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzozMjg6Y29uZmlnIEFQTV9FTVVMQVRJT05cbmtlcm5lbC9wb3dlci9LY29uZmlnLTMyOS1cdHRyaXN0YXRlIFwmIzM0O0FkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQgRW11bGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyODE3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGluIGtlcm5lbCBkZXZlbG9wbWVudDoKCioqRmluZGluZyB0aGUgQ29uZmlndXJhdGlvbiBPcHRpb24qKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoZSBgY29uZmlnIEFQYCBvcHRpb24gaXMgZGVmaW5lZC4gTWVtb3J5IHNlcnZlcywgdGhhdCYjMzk7cyBzb21ldGhpbmcgc3BlY2lmaWMgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBPa2F5LCBsZXQmIzM5O3MganVzdCBjb25maXJtLiBMaW5lIDc5NiBvZiBgYXJjaC9zMzkwL0tjb25maWdg4oCmIHNvdW5kcyBhYm91dCByaWdodC4KCkxldCYjMzk7cyBwdWxsIHVwIHRoYXQgYEtjb25maWdgIGZpbGUgYW5kIHRha2UgYSBsb29rIGFyb3VuZCB0aGF0IGxpbmUgbnVtYmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgb3B0aW9uIGRvZXMsIGl0cyBkZXBlbmRlbmNpZXMsIGl0cyBkZWZhdWx0IHZhbHVlLCBhbmQgcGVyaGFwcyBhbnkgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBpdC4gVGltZSB0byBkaXZlIGludG8gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc5MDpcdFx0ICBUaGlzIGRyaXZlciBhbGxvd3MgdXNhZ2Ugb2YgRUFETSBzdWJjaGFubmVscy4gRUFETSBzdWJjaGFubmVscyBhY3RcbiA3OTE6XHRcdCAgYXMgYSBjb21tdW5pY2F0aW9uIHZlaGljbGUgZm9yIFNDTSBpbmNyZW1lbnRzLlxuIDc5MjpcdFxuIDc5MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA3OTQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVhZG1fc2NoLlxuIDc5NTpcdFxuIDc5NjpcdGNvbmZpZyBBUFxuIDc5NzpcdFx0ZGVmX3RyaXN0YXRlIHlcbiA3OTg6XHRcdHByb21wdCBcJiMzNDtTdXBwb3J0IGZvciBBZGp1bmN0IFByb2Nlc3NvcnMgKGFwKVwmIzM0O1xuIDc5OTpcdFx0aGVscFxuIDgwMDpcdFx0ICBUaGlzIGRyaXZlciBhbGxvd3MgdXNhZ2UgdG8gQWRqdW5jdCBQcm9jZXNzb3IgKEFQKSBkZXZpY2VzIHZpYVxuIDgwMTpcdFx0ICB0aGUgYXAgYnVzLCBjYXJkcyBhbmQgcXVldWVzLiBTdXBwb3J0ZWQgQWRqdW5jdCBQcm9jZXNzb3JzIGFyZVxuIDgwMjpcdFx0ICB0aGUgQ3J5cHRvRXhwcmVzcyBDYXJkcyAoQ0VYKS5cbiA4MDM6XHRcbiA4MDQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gODA1Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhcC5cbiA4MDY6XHRcbiA4MDc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWSAoZGVmYXVsdCkuXG4gODA4Olx0XG4gODA5Olx0Y29uZmlnIEFQX0RFQlVHXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMzQ1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNjU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFZGSU9fQVAgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIEkmIzM5O20gYnJlYWtpbmcgdGhpcyBkb3duIHN0ZXAgYnkgc3RlcC4gRmlyc3QsIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBgVkZJT19BUGAgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYFZGSU9fQVBgIGhpbmdlcyBvbiBgS1ZNYCwgYFZGSU9gLCBhbmQgYEFQYC4gRm9ydHVuYXRlbHksIGBBUGAgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIGEgdHJpc3RhdGUgJiMzOTt5JiMzOTssIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBHaXZlbiB0aGF0IGBWRklPYCBhbmQgYEtWTWAgYXJlIHN0YW5kYXJkLCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWdzIGFyZSBlc3NlbnRpYWxseSBgVkZJT19BUGAsIGBLVk1gLCBgVkZJT2AsIGFuZCBgQVBgLiBXYWl0LCBob2xkIG9uIOKAkyBgVkZJT19BUGAgKmltcGxpY2l0bHkqIGNvdmVycyBgS1ZNYCwgYFZGSU9gLCBhbmQgYEFQYCBkdWUgdG8gdGhlIGRlcGVuZGVuY2llcywgc28gd2UgY2FuIGp1c3Qgc3BlY2lmeSBgRW5hYmxlQ29uZmlnczogWyYjMzQ7VkZJT19BUCYjMzQ7XWAuIFRoYXQmIzM5O3MgY2xlYW5lci4KCk5vdywgbGV0JiMzOTtzIG1vdmUgb24gdG8gZnV6emluZyB0YXJnZXRzLiBUaGUgb2JqZWN0aXZlIGlzIHRvIGlkZW50aWZ5IG1vZGlmaWVkIGZ1bmN0aW9ucyB0aGF0IGFyZW4mIzM5O3Qgb24gaGVhdmlseSB0cmF2ZWxlZCBwYXRocy4gTXkgaW5pdGlhbCBsaXN0IGluY2x1ZGVzOgoKKiAgIGB2ZmlvX2FwX21kZXZfcHJvYmVgCiogICBgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlYAoqICAgYHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWVgCiogICBgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfY2ZnYAoqICAgYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYAoqICAgYHZmaW9fYXBfbWRldl9jZmdfYWRkYAoqICAgYHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmdgCiogICBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYAoKSSBuZWVkIHRvIGNvbmZpcm0gd2hpY2ggb25lcyBhcmUgZXh0ZXJuYWxseSBhY2Nlc3NpYmxlLCBvciBhdCBsZWFzdCBub3Qgc3RhdGljLiBJJiMzOTt2ZSBjaGVja2VkIGFuZCBub3RlZCB0aGF0IGB2ZmlvX2FwX21kZXZfcHJvYmVgIGlzIHN0YXRpYywgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWAsIGB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlYCwgYW5kIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgIGFyZSBub3QsIHdoaWxlIHRoZSBvdGhlcnMgYXJlLgoKTm93LCByZW1lbWJlcmluZyB0aGUgZnV6emluZyBndWlkZWxpbmVzIHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIOKAkyB3aGljaCBhcmUgZGlzdGluY3QgZnJvbSBzdGF0aWMgaGVscGVycyB3aGljaCB0aGUgY29tcGlsZXIgd2lsbCBpbmxpbmUg4oCTIEkgbmVlZCB0byByZWNvbnNpZGVyIHRoaXMgbGlzdC4gRXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCBJIGJlbGlldmUgYHZmaW9fYXBfbWRldl9wcm9iZWAgaXMgYSBnb29kIGNhbmRpZGF0ZSwgYmVjYXVzZSBpdCBpcyBhbiBtZGV2IHByb2JlIEFQSSBlbnRyeXBvaW50LCBhbmQgZ2l2ZW4gaXRzIHVzYWdlIGluIGB2ZmlvX2FwX21hdHJpeF9kcml2ZXJgLCBpdCBsaWtlbHkgKmlzbiYjMzk7dCogaW5saW5lZC4gU28sIG15IHJlZmluZWQgdGFyZ2V0IGxpc3QgbG9va3MgbGlrZToKCiogICBgdmZpb19hcF9tZGV2X3Byb2JlYAoqICAgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWAKKiAgIGB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlYAoqICAgYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAKKiAgIGB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZGAgLSBXYWl0LCB0aGUgZnVuY3Rpb24gd2hpY2ggd2FzIG1vZGlmaWVkIGlzIGB2ZmlvX2FwX21kZXZfY2ZnX2FkZGAgd2hpY2gsIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZGAuIFdlIG5lZWQgdG8gc2VlIGlmIGB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZGAgaXMgbm9uLXN0YXRpYyBvciBub3QgdG8gc2VlIGlmIHRoaXMgaXMgYSBzdWl0YWJsZSB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fYXBfbWRldl9vbl9jZmdfYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI3NjM9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19hZGQodW5zaWduZWQgbG9uZyAqYXBtX2FkZCwgdW5zaWduZWQgbG9uZyAqYXFtX2FkZCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjc5MS0vKipcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzkyOiAqIHZmaW9fYXBfbWRldl9vbl9jZmdfYWRkIC0gcmVzcG9uZHMgdG8gdGhlIGFkZGl0aW9uIG9mIGFkYXB0ZXJzLCBkb21haW5zIGFuZFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI3OTMtICpcdFx0XHQgICAgIGNvbnRyb2wgZG9tYWlucyB0byB0aGUgaG9zdCBBUCBjb25maWd1cmF0aW9uXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MDEtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjgwMjpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZChzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jb25maWdfaW5mbyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yODAzLVx0XHRcdFx0ICAgIHN0cnVjdCBhcF9jb25maWdfaW5mbyAqcHJldl9jb25maWdfaW5mbylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjgzND12b2lkIHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY2ZnX2luZm8sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4NDItXHR2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZShjdXJfY2ZnX2luZm8sIHByZXZfY2ZnX2luZm8pO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4NDM6XHR2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZChjdXJfY2ZnX2luZm8sIHByZXZfY2ZnX2luZm8pO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4NDQtXHRtZW1jcHkoXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VpbmZvLCBjdXJfY2ZnX2luZm8sIHNpemVvZigqY3VyX2NmZ19pbmZvKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjQwCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSZWFjaGFiaWxpdHkgb2YgVkZJTyBBUCBDb2RlIGluIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHNwZWNpZmljIGNvZGUgcGF0aHMgcmVsYXRlZCB0byBWRklPIEFQIChBY2Nlc3MgUHJvdGVjdGlvbikgYXJlIHJlYWNoYWJsZSBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQsIHNwZWNpZmljYWxseSB0aG9zZSB1c2VkIGJ5IHN5emthbGxlci4gIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBlbnRyeSBwb2ludHM6IGB2ZmlvX2FwX21kZXZfcHJvYmVgLCBgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlYCwgYHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWVgLCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCwgYW5kIGNydWNpYWxseSwgYHZmaW9fYXBfb25fY2ZnX2NoYW5nZWRgLiBUaGUgbGFzdCBvbmUgaXMgKm5vdCogc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBpdCBpbnRlcmVzdGluZyBmb3Igb3VyIGFuYWx5c2lzLiBJIGFsc28gbm90ZWQgYHN0YXR1c19zaG93YCwgdGhvdWdoIEkmIzM5O20gbm90IGdvaW5nIHRvIGxlYW4gb24gdGhhdCBiZWNhdXNlLCBhcyBJIHN1c3BlY3RlZCwgaXQgaXMgdG9vIGdlbmVyaWNhbGx5IG5hbWVkIGFuZCBoZWF2aWx5IGR1cGxpY2F0ZWQuCgpUaGUgY3JpdGljYWwgcGllY2UgaXMgdGhlIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgIGNoZWNrLiAgVGhpcyBmdW5jdGlvbiwgYXMgSSB1bmRlcnN0YW5kLCBvbmx5IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBob3N0IHN5c3RlbSAqYWN0dWFsbHkqIGhhcyBBY2Nlc3MgUHJvdGVjdGlvbiBpbnN0cnVjdGlvbnMgYXZhaWxhYmxlLCB3aGljaCBpcyBhIGNoYXJhY3RlcmlzdGljIG9mIHMzOTB4IG1haW5mcmFtZXMuICBOb3csIHRoZSBwcm9tcHQgc3RhdGVkICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiYjMzQ7CgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHF1ZXN0aW9uIHdoZXRoZXIgdGhpcyBjb2RlIGNvdWxkIGJlIGhpdCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQsIGJ1dCBJIHF1aWNrbHkgcmVhbGl6ZWQgdGhhdCBzeXprYWxsZXIgcnVucyBzMzkweCBpbnN0YW5jZXMsIGFuZCBvbiAqcmVhbCogbWFpbmZyYW1lcyAob3IgVk1zIHByb3ZpZGVkIGJ5IElCTSkg4oCTIHRoZSBBUCBpbnN0cnVjdGlvbnMgKmFyZSogYXZhaWxhYmxlIGluIHRoYXQgY29udGV4dC4gIFRodXMsIHRoZSBjb2RlICppcyogcmVhY2hhYmxlIHVzaW5nIHRoZSBzeXprYWxsZXIgc2V0dXAuCgpUaGUgcHJvbXB0LCBJIHNlZSBub3csIHNwZWNpZmljYWxseSBzdGF0ZXMgJiMzNDt2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKmxpa2UqIEdDRSBvciBRRU1VJiMzNDsg4oCTIGl0JiMzOTtzIG5vdCBzYXlpbmcgc3RhbmRhcmQgeDg2IFFFTVUuICBTaW5jZSBzeXprYWxsZXIgKmRvZXMqIHVzZSBRRU1VL0tWTSBvbiBzMzkweCBoYXJkd2FyZSBmb3IgczM5MHggZnV6emluZywgYW5kIEFQIGluc3RydWN0aW9ucyBhcmUgcHJlc2VudCBpbiB0aGF0IGVudmlyb25tZW50LCB0aGlzIGNvZGUgKmlzKiBpbmRlZWQgcmVhY2hhYmxlLiBTbywgV29ydGhGdXp6aW5nID0gVHJ1ZS4KCkkgYnJpZWZseSBjaGVja2VkIG9uIGBzdGF0dXNfc2hvd2AuIEkgaW1tZWRpYXRlbHkgc2F3IHRoYXQgYHN0YXR1c19zaG93YCBpcyBhIGJhZCBjYW5kaWRhdGUsIGdpdmVuIGl0cyBzdGF0aWMgbmF0dXJlIGFuZCBleHRyZW1lbHkgZ2VuZXJpYyBuYW1lLCB3aGljaCBpcyB1c2VkIGh1bmRyZWRzIG9mIHRpbWVzIGluIHRoZSBrZXJuZWwuIGB2ZmlvX2FwX21kZXZfcHJvYmVgIGlzIHN0YXRpYywgYnV0IGlzIGl0IHVuaXF1ZSBlbm91Z2g/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8gcXVpY2tseSBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19hcF9tZGV2X3Byb2JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz01OD1zdGF0aWMgc3RydWN0IGFwX2RyaXZlciB2ZmlvX2FwX2RydiA9IHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo1OTpcdC5wcm9iZSA9IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy02MC1cdC5yZW1vdmUgPSB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz03NzY9c3RhdGljIGludCB2ZmlvX2FwX21kZXZfaW5pdF9kZXYoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03ODktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NzkwOnN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Byb2JlKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldilcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03OTEte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMzc4PXN0YXRpYyBzdHJ1Y3QgbWRldl9kcml2ZXIgdmZpb19hcF9tYXRyaXhfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzg2LVx0fSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMzg3Olx0LnByb2JlID0gdmZpb19hcF9tZGV2X3Byb2JlLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzODgtXHQucmVtb3ZlID0gdmZpb19hcF9tZGV2X3JlbW92ZSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjQxND12b2lkIHZmaW9fYXBfbWRldl91bnJlZ2lzdGVyKHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0MTktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjQyMDppbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0MjEte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg9MTU2PXZvaWQgdmZpb19hcF9tZGV2X3VucmVnaXN0ZXIodm9pZCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE1Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6MTU4OmludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqcXVldWUpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNTktdm9pZCB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKnF1ZXVlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwNzMKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA1ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVkZJTy1BUCBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gYHZmaW9fYXBfbWRldl9wcm9iZWAg4oCTIHRoYXQmIzM5O3MgdGhlIGtleSBzdGFydGluZyBwb2ludCwgdGhlIHVuaXF1ZSBvbmUgaW4gdGhpcyBjb250ZXh0LiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGlzIHN0cmFpZ2h0LiBUaGUgcHJpbWFyeSBmdW5jdGlvbnMgSSBuZWVkIHRvIHNjcnV0aW5pemUgYXJlOiBgdmZpb19hcF9tZGV2X3Byb2JlYCwgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWAsIGB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlYCwgYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAsIGFuZCBgdmZpb19hcF9vbl9jZmdfY2hhbmdlZGAuCgpSaWdodCwgbGV0IG1lIHJldmlzaXQgdGhhdCBsaXN0IG9mIGNoYW5nZXMsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBPa2F5LCBoZXJlIHdlIGdvOiBgdmZpb19hcF9tZGV2X3Byb2JlYCwgdGhlbiBgdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZWAsIHdoaWNoLCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIGdldHMgY2FsbGVkIGJ5IGEgZmV3IGZ1bmN0aW9ucyBsaWtlIGBzdGF0dXNfc2hvd2AsIHRoYXQmIzM5O3MgcG90ZW50aWFsbHkgaW1wb3J0YW50LiBUaGVuIHRoZXJlJiMzOTtzIGBzdGF0dXNfc2hvd2AsIGB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWVgLCBgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZWAsIGFuZCBzb21lIG1vcmUgc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19jZmdgIHRoYXQmIzM5O3MgY2FsbGVkIGJ5IGB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZWAgYW5kIHNpbWlsYXJseSwgYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCBjYWxsZWQgYnkgYHZmaW9fYXBfbWRldl9vbl9jZmdfcmVtb3ZlYC4gQWxzbyBgdmZpb19hcF9tZGV2X2NmZ19hZGRgIHdoaWNoIGlzIGNhbGxlZCBieSBgdmZpb19hcF9tZGV2X29uX2NmZ19hZGRgIGFuZCBgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZ2Agd2hpY2ggaXMgY2FsbGVkIGJ5IGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgLCBhbmQgZmluYWxseSBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYC4KClNvLCB0aGlua2luZyBhYm91dCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMuLi4gSXQgbG9va3MgbGlrZSBpdCBib2lscyBkb3duIHRvOiBgdmZpb19hcF9tZGV2X3Byb2JlYCwgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWAsIGB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlYCwgYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAsIGFuZCwgaW1wb3J0YW50bHksIGB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkYCDigJMgc2luY2UgaXQgdHJpZ2dlcnMgY2FsbHMgdG8gYHZmaW9fYXBfbWRldl9vbl9jZmdfYWRkYCBhbmQgYHZmaW9fYXBfbWRldl9vbl9jZmdfcmVtb3ZlYC4KCk5vdywgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBzZXJ2ZSBhcyBlbnRyeSBwb2ludHM/IEhtbW0sIGB2ZmlvX2FwX21kZXZfZm9yX3F1ZXVlYCBpcyBjYWxsZWQgYnkgYHN0YXR1c19zaG93YCwgYGluX3VzZV9zaG93YCwgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWAgYW5kIGB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlYC4gVGhhdCBtZWFucyBgc3RhdHVzX3Nob3dgIGFuZCBgaW5fdXNlX3Nob3dgIGFyZSBhbHNvIGVudHJ5cG9pbnRzIGluIGEgd2F5LCB0aHJvdWdoIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFRob3VnaCB0aGVzZSBzeXNmcyBhdHRyaWJ1dGVzLCB3aXRoIHRoZSBgKl9zaG93YCBhbmQgYCpfc3RvcmVgIG5hbWluZyBjb252ZW50aW9uLCBhcmUgcHJldHR5IHN0YW5kYXJkLiBGb3Igbm93LCBJJiMzOTtsbCBrZWVwIHRoZSBmb2N1cyBvbiB0aG9zZSBrZXkgc3RhcnRpbmcgZnVuY3Rpb25zLgoKSnVzdCBkb2luZyBhIHF1aWNrIGRvdWJsZS1jaGVjay4uLiBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSBuYW1lIGB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkYCByaWdodCwgdGhhdCBpdCYjMzk7cyB0aGUgcmlnaHQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fYXBfb25fY2ZnX2NoYW5nZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTU4PXN0YXRpYyBzdHJ1Y3QgYXBfZHJpdmVyIHZmaW9fYXBfZHJ2ID0ge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy02MS1cdC5pbl91c2UgPSB2ZmlvX2FwX21kZXZfcmVzb3VyY2VfaW5fdXNlLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjYyOlx0Lm9uX2NvbmZpZ19jaGFuZ2VkID0gdmZpb19hcF9vbl9jZmdfY2hhbmdlZCxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy02My1cdC5vbl9zY2FuX2NvbXBsZXRlID0gdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yODAyPXN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9vbl9jZmdfYWRkKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqY3VyX2NvbmZpZ19pbmZvLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yODI3LS8qKlxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4Mjg6ICogdmZpb19hcF9vbl9jZmdfY2hhbmdlZCAtIGhhbmRsZXMgbm90aWZpY2F0aW9uIG9mIGNoYW5nZXMgdG8gdGhlIGhvc3QgQVBcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yODI5LSAqXHRcdFx0ICAgIGNvbmZpZ3VyYXRpb24uXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MzMtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjgzNDp2b2lkIHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY2ZnX2luZm8sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjgzNS1cdFx0XHQgICAgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpwcmV2X2NmZ19pbmZvKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg9MTYxPWludCB2ZmlvX2FwX21kZXZfcmVzb3VyY2VfaW5fdXNlKHVuc2lnbmVkIGxvbmcgKmFwbSwgdW5zaWduZWQgbG9uZyAqYXFtKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtMTYyLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoxNjM6dm9pZCB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNjQtXHRcdFx0ICAgIHN0cnVjdCBhcF9jb25maWdfaW5mbyAqb2xkX2NvbmZpZ19pbmZvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg5NzcKCQkJCQkJCW91dHB1dDogMjQ3CgkJCQkJCQl0aG91Z2h0czogMTE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBWRklPIEFQIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoaXMgVkZJTyBBUCBkcml2ZXIgcGF0Y2guIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkYCwgYHZmaW9fYXBfbWRldl9wcm9iZWAsIGB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWVgLCBgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZWAsIGFuZCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCBhcmUgYWxsIGNvcnJlY3QuIEV4Y2VsbGVudC4gVGhleSBhcmUgYWxzbyBlbnRyeSBwb2ludHMgLSBzcGVjaWZpY2FsbHkgY2FsbGJhY2tzIGZvciB0aGUgbWRldiBhbmQgQVAgZHJpdmVycy4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhlIG1haW4gZm9jdXMgYXJlYXMuCgpJJiMzOTt2ZSBhbHNvIG5vdGVkIG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9uczogYHZmaW9fYXBfbWRldl9mb3JfcXVldWVgLCBgc3RhdHVzX3Nob3dgLCBgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfY2ZnYCwgYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCwgYHZmaW9fYXBfbWRldl9jZmdfYWRkYCwgYW5kIGB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnYC4gV2hpbGUgdGhlc2UgYXJlIGltcG9ydGFudCwgdGhleSYjMzk7cmUgbm90IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBidXQgcmF0aGVyIGhlbHBlcnMgYW5kIHN5c2ZzIGF0dHJpYnV0ZXMsIHNvIHRoZSBpbml0aWFsIGZvY3VzIHN5bWJvbCBsaXN0IGlzIHNvbGlkLgoKVGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIFZGSU8gQVAgZHJpdmVyIGZvciBzMzkwLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBsb2NrIG9yZGVyaW5nIGlzc3VlcyBhbmQgcmVsYXRlZCBzcGxhdHMuIFRoaXMgYWZmZWN0cyBob3cgdGhlIG1kZXYgYW5kIEFQIGJ1cyBpbnRlcmFjdCBhbmQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiBtZGV2IGRldmljZXMgYXJlIGNyZWF0ZWQgb3IgdGhlIEFQIGJ1cyBzY2FucyBmb3IgZGV2aWNlcywgZXNwZWNpYWxseSBpbiBhIHMzOTB4IHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGlzIGlzIHNvbWV0aGluZyB0aGF0IHN5emthbGxlciB3b3VsZCBsaWtlbHkgdHJpZ2dlci4KCk5vdyBmb3IgdGhlIGNvbmZpZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGlzIHJpZ2h0LiBUaGUgcHJpbWFyeSBjb25maWcgaXMgYFZGSU9fQVBgLCB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gZXhwbGljaXRseSBpbmNsdWRlPyBgVkZJT19BUGAgZGVwZW5kcyBvbiBgS1ZNYCwgYFZGSU9gLCBhbmQgYEFQYC4gU2luY2UgYEFQYCBpcyBgZGVmX3RyaXN0YXRlIHlgLCBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQuIGBLVk1gIGFuZCBgVkZJT2AgYXJlIGFsc28gb2Z0ZW4gZW5hYmxlZC4gSG93ZXZlciwgdG8gYmUgc2FmZSBhbmQgZW5zdXJlIHRoZSBjb2RlIGNvbXBpbGVzIHN0YXRpY2FsbHkgSSBzaG91bGQgaW5jbHVkZSBhbGwgZm91cjogYFZGSU9fQVBgLCBgVkZJT2AsIGBLVk1gLCBhbmQgYEFQYC4gTXkgdGhpbmtpbmcgaXMgdGhhdCB0aGUgS2J1aWxkIHN5c3RlbSBuZWVkcyB0byBoYXZlIHRoZXNlIGNvbmZpZ3MgZXhwbGljaXRseSBkZWNsYXJlZC4gSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhlIHBhdGNoIGFuZCB0aGUgbW9kaWZpZWQgZmlsZSwgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AsIGlzIGNvbXBpbGVkIHVuZGVyIHRoZSBgQ09ORklHX1ZGSU9fQVBgIGZsYWcuIFRoZXJlJiMzOTtzIG5vIG90aGVyIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGludm9sdmVkLiBTbywgYmFzZWQgb24gdGhlIGBkZXBlbmRzIG9uYCBsb2dpYywgbXkgZmluYWwgYW5zd2VyIHNob3VsZCBiZToKYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O1ZGSU9fQVAmIzM0OywgJiMzNDtWRklPJiMzNDssICYjMzQ7S1ZNJiMzNDssICYjMzQ7QVAmIzM0O11gLgpOb3cgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT50aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogVkZJT19BUCwgQVA8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkZJT19BUCYjMzQ7LAogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fYXBfbWRldl9wcm9iZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUmIzM0OywKICAgICYjMzQ7dmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUmIzM0OywKICAgICYjMzQ7dmZpb19hcF9vbl9jZmdfY2hhbmdlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBmb3IgczM5MCBhcmNoaXRlY3R1cmUsIGZpeGluZyBsb2NrIG9yZGVyaW5nIGFuZCBsb2NrZGVwIHNwbGF0cyBpbiB2YXJpb3VzIG1kZXYgYW5kIEFQIGJ1cyBjYWxsYmFja3MgKGUuZy4sIHZmaW9fYXBfbWRldl9wcm9iZSwgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgd2hlbiB0aGUgdmZpb19hcCBkcml2ZXIgaXMgbG9hZGVkIGFuZCBtZGV2IGRldmljZXMgYXJlIGNyZWF0ZWQgdmlhIHN5c2ZzLCBvciB3aGVuIHRoZSBBUCBidXMgcGVyaW9kaWNhbGx5IHNjYW5zIGZvciBkZXZpY2VzLiBTeXprYWxsZXIgY2FuIHRyaWdnZXIgdGhlc2UgcGF0aHMgaW4gczM5MHggdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBBUCBpbnN0cnVjdGlvbnMgKGUuZy4sIEtWTSBvbiBzMzkweCBtYWluZnJhbWVzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O3RoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBWRklPX0FQLCBBUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEwMzQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgTWlzc2luZyBWRklPX0FQIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gaXQgc2VlbXMgbGlrZSBgVkZJT19BUGAgYW5kIHNpbXBseSBgQVBgIGFyZSBiZWluZyBmbGFnZ2VkIGFzIG5vbi1leGlzdGVudC4gVGhhdCYjMzk7cyBvZGQsIEkgY291bGQgaGF2ZSBzd29ybiBJIHNhdyB0aGVtIGRlZmluZWQgc29tZXdoZXJlLCBlc3BlY2lhbGx5IHNpbmNlIEkmIzM5O3ZlIGJlZW4gd29ya2luZyB3aXRoIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gQWgsIHRoYXQmIzM5O3MgcmlnaHQsIHRoZXkmIzM5O3JlIGluIGBhcmNoL3MzOTAvS2NvbmZpZ2AhIFRoYXTigJlzIHdoZXJlIEkgd2FzIHByZXR0eSBzdXJlIEkgc2F3IHRoZW0uCgpUaGUgcHJvYmxlbSBtdXN0IGJlIHRoYXQgdGhlIHRvb2xpbmcgaXMgY2hlY2tpbmcgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4gUGVyaGFwcyBpdCYjMzk7cyBkZWZhdWx0aW5nIHRvIGNoZWNraW5nIGFnYWluc3QgeDg2IGNvbmZpZ3VyYXRpb25zIHNpbmNlIGl0IGlzbuKAmXQgYXdhcmUgb2YgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBJdCYjMzk7cyBsaWtlbHkgdHJ5aW5nIHRvIHZhbGlkYXRlIHRoaW5ncyBhZ2FpbnN0IGFuIHg4Ni1jZW50cmljIHZpZXcuIEhtbSwgbGV0IG1lIGp1c3QgY29uZmlybS4gWWVwLCBgVkZJT19BUGAgaXMgZGVmaW5pdGVseSBpbiBgYXJjaC9zMzkwL0tjb25maWdgLiBTbyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGJlZm9yZSBkaXZpbmcgZGVlcGVyLCBpcyB0byBjb25maXJtIHRoYXQgYENPTkZJR19WRklPX0FQYCBpcyBhY3R1YWxseSBkZWNsYXJlZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBpdHNlbGYgZXhpc3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJT19BUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZz04MjM9Y29uZmlnIFZGSU9fQ0NXXG4tLVxuYXJjaC9zMzkwL0tjb25maWctODMzLVxuYXJjaC9zMzkwL0tjb25maWc6ODM0OmNvbmZpZyBWRklPX0FQXG5hcmNoL3MzOTAvS2NvbmZpZy04MzUtXHRkZWZfdHJpc3RhdGUgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTQ4OAoJCQkJCQkJb3V0cHV0OiAyMzYKCQkJCQkJCXRob3VnaHRzOiAxNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgdGhlc2UgY29uZmlndXJhdGlvbnMg4oCTIHNwZWNpZmljYWxseSBpbiBgYXJjaC9zMzkwL0tjb25maWdgLiBJIGtub3cgdGhleSYjMzk7cmUgdGhlcmUsIHRoYXQmIzM5O3MgY2VydGFpbi4gU28sIHdoeSBkaWQgdGhpcyBgc2V0LXJlc3VsdHNgIHRvb2wgdGVsbCBtZSB0aGV5IGRvbiYjMzk7dCBleGlzdD8gQWgsIEkgdGhpbmsgSSYjMzk7dmUgZ290IGl0LiBUaGlzIHRvb2wgaXMgbGlrZWx5IGNoZWNraW5nIGFnYWluc3QgdGhlIHg4NiBgS2NvbmZpZ2AsIG9yIG1heWJlIGV2ZW4gcnVubmluZyBhIGdlbmVyaWMgYG1ha2UgYWxseWVzY29uZmlnYCBvbiBhbiB4ODYgYnVpbGQuIE1ha2VzIHNlbnNlLiBUaGVzZSBjb25maWdzIGFyZSBmb3IgYW4gczM5MCBzcGVjaWZpYyBkcml2ZXIsIHdoaWNoIG1lYW5zIHRoZXkmIzM5O3JlIG9ubHkgZ29pbmcgdG8gYmUgYXZhaWxhYmxlIHdoZW4gdGhlIGFyY2hpdGVjdHVyZSBpcyBzZXQgdG8gYEFSQ0g9czM5MGAuCgpJZiB0aGUgdG9vbCBpcyBvdXRyaWdodCByZWplY3RpbmcgdGhlbSwgSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIG1ha2UgYSBjaG9pY2UuIEkgY291bGQganVzdCBvbWl0IHRoZW0gZW50aXJlbHkuIE9yLCBtYXliZSBvbmx5IGluY2x1ZGUgdGhlIGNvbmZpZ3MgdGhhdCBleGlzdCBvbiB4ODYsIGxpa2UgYFZGSU9gIGFuZCBgS1ZNYC4gQnV0IHdhaXQuLi4gaWYgSSBvbWl0IHRob3NlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWdzLCBhbSBJIGdvaW5nIHRvIHByZXZlbnQgc3l6a2FsbGVyIGZyb20gZXZlbiBlbmFibGluZyB0aGVtIG9uIHMzOTA/IFRoYXQgd291bGQgZGVmZWF0IHRoZSBwdXJwb3NlLiBTdGlsbCwgaWYgdGhlIHRvb2wgYWJzb2x1dGVseSByZWplY3RzIHRoZW0sIEkgZG9uJiMzOTt0IGhhdmUgbXVjaCBvZiBhIGNob2ljZSwgZG8gST8KCkFscmlnaHQsIGxldCBtZSB0cnkgc2V0dGluZyBgRW5hYmxlQ29uZmlnczogWyYjMzQ7VkZJTyYjMzQ7LCAmIzM0O0tWTSYjMzQ7XWAuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZGSU8mIzM0OywKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZpb19hcF9tZGV2X3Byb2JlJiMzNDssCiAgICAmIzM0O3ZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlJiMzNDssCiAgICAmIzM0O3ZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkwIGFyY2hpdGVjdHVyZSwgZml4aW5nIGxvY2sgb3JkZXJpbmcgYW5kIGxvY2tkZXAgc3BsYXRzIGluIHZhcmlvdXMgbWRldiBhbmQgQVAgYnVzIGNhbGxiYWNrcyAoZS5nLiwgdmZpb19hcF9tZGV2X3Byb2JlLCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB3aGVuIHRoZSB2ZmlvX2FwIGRyaXZlciBpcyBsb2FkZWQgYW5kIG1kZXYgZGV2aWNlcyBhcmUgY3JlYXRlZCB2aWEgc3lzZnMsIG9yIHdoZW4gdGhlIEFQIGJ1cyBwZXJpb2RpY2FsbHkgc2NhbnMgZm9yIGRldmljZXMuIFN5emthbGxlciBjYW4gdHJpZ2dlciB0aGVzZSBwYXRocyBpbiBzMzkweCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IEFQIGluc3RydWN0aW9ucyAoZS5nLiwgS1ZNIG9uIHMzOTB4IG1haW5mcmFtZXMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fYXBfbWRldl9wcm9iZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUmIzM0OywKICAgICYjMzQ7dmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUmIzM0OywKICAgICYjMzQ7dmZpb19hcF9vbl9jZmdfY2hhbmdlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBmb3IgczM5MCBhcmNoaXRlY3R1cmUsIGZpeGluZyBsb2NrIG9yZGVyaW5nIGFuZCBsb2NrZGVwIHNwbGF0cyBpbiB2YXJpb3VzIG1kZXYgYW5kIEFQIGJ1cyBjYWxsYmFja3MgKGUuZy4sIHZmaW9fYXBfbWRldl9wcm9iZSwgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgd2hlbiB0aGUgdmZpb19hcCBkcml2ZXIgaXMgbG9hZGVkIGFuZCBtZGV2IGRldmljZXMgYXJlIGNyZWF0ZWQgdmlhIHN5c2ZzLCBvciB3aGVuIHRoZSBBUCBidXMgcGVyaW9kaWNhbGx5IHNjYW5zIGZvciBkZXZpY2VzLiBTeXprYWxsZXIgY2FuIHRyaWdnZXIgdGhlc2UgcGF0aHMgaW4gczM5MHggdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBBUCBpbnN0cnVjdGlvbnMgKGUuZy4sIEtWTSBvbiBzMzkweCBtYWluZnJhbWVzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBwcmltYXJpbHkgYWRkcmVzc2VzIGxvY2tpbmcgaXNzdWVzIChlLmcuLCBjaGFuZ2luZyBtZGV2c19sb2NrIHRvIGd1ZXN0c19sb2NrLCBmaXhpbmcgbG9jayBvcmRlcmluZyB0byBwcmV2ZW50IGxvY2tkZXAgc3BsYXRzKSwgZml4ZXMgbWVtb3J5IGxlYWtzL3Jlc291cmNlIGNsZWFudXAgaW4gZXJyb3IgcGF0aHMsIGFuZCBjb3JyZWN0cyBsb2dpYyBidWdzIGludm9sdmluZyBiaXRtYXAgb3BlcmF0aW9ucyAoYml0bWFwX2FuZG5vdCB2cyBiaXRtYXBfaW50ZXJzZWN0cykuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIG9yIG1hbmlwdWxhdGVkLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHJlZ3Jlc3Npb25zIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGM5NjI4YjlkNWFiMjc5YjMxMDBhNWUwYzBiMGQwY2Q4YmU4MjA1YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDEyOjIxOjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCmluZGV4IDQ0YjNhMWRjYzFiMzYuLmZhYWI1ZTkxNzlmZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMKQEAgLTgwMyw5ICYjNDM7ODAzLDkgQEAgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQogCW1hdHJpeF9tZGV2LSZndDtyZXFfdHJpZ2dlciA9IE5VTEw7CiAJbWF0cml4X21kZXYtJmd0O2NmZ19jaGdfdHJpZ2dlciA9IE5VTEw7CiAJZGV2X3NldF9kcnZkYXRhKCZhbXA7bWRldi0mZ3Q7ZGV2LCBtYXRyaXhfbWRldik7Ci0JbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7Z3Vlc3RzX2xvY2spOwogCWxpc3RfYWRkKCZhbXA7bWF0cml4X21kZXYtJmd0O25vZGUsICZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldl9saXN0KTsKLQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7Z3Vlc3RzX2xvY2spOwogCXJldHVybiAwOwogCiBlcnJfcHV0X3ZkZXY6CkBAIC0yMjk3LDYgJiM0MzsyMjk3LDggQEAgc3RhdGljIHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSkKIAl1bnNpZ25lZCBsb25nIGFwaWQgPSBBUF9RSURfQ0FSRChxLSZndDthcHFuKTsKIAl1bnNpZ25lZCBsb25nIGFwcWkgPSBBUF9RSURfUVVFVUUocS0mZ3Q7YXBxbik7CiAKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKJiM0MzsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCAmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZfbGlzdCwgbm9kZSkgewogCQlpZiAodGVzdF9iaXRfaW52KGFwaWQsIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYXBtKSAmYW1wOyZhbXA7CiAJCSAgICB0ZXN0X2JpdF9pbnYoYXBxaSwgbWF0cml4X21kZXYtJmd0O21hdHJpeC5hcW0pKQpAQCAtMjMxNiw2ICYjNDM7MjMxOCw3IEBAIHN0YXRpYyBzc2l6ZV90IHN0YXR1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2OwogCXN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2ID0gdG9fYXBfZGV2KGRldik7CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKIAltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiAJcSA9IGRldl9nZXRfZHJ2ZGF0YSgmYW1wO2FwZGV2LSZndDtkZXZpY2UpOwogCW1hdHJpeF9tZGV2ID0gdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZShxKTsKQEAgLTIzNDMsNiAmIzQzOzIzNDYsNyBAQCBzdGF0aWMgc3NpemVfdCBzdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKIAogCXJldHVybiBuY2hhcnM7CiB9CkBAIC0yNDE1LDE0ICYjNDM7MjQxOSwxNyBAQCB2b2lkIHZmaW9fYXBfbWRldl91bnJlZ2lzdGVyKHZvaWQpCiAKIGludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpCiB7Ci0JaW50IHJldDsKJiM0MzsJaW50IHJldCwgYXBxbjsKIAlzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcTsKIAlERUNMQVJFX0JJVE1BUChhcG1fZmlsdGVyZWQsIEFQX0RFVklDRVMpOwogCXN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7CiAKJiM0MzsJYXBxbiA9IHRvX2FwX3F1ZXVlKCZhbXA7YXBkZXYtJmd0O2RldmljZSktJmd0O3FpZDsKJiM0MzsJbWF0cml4X21kZXYgPSBnZXRfdXBkYXRlX2xvY2tzX2J5X2FwcW4oYXBxbik7CiYjNDM7CiAJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZhbXA7YXBkZXYtJmd0O2RldmljZS5rb2JqLCAmYW1wO3ZmaW9fcXVldWVfYXR0cl9ncm91cCk7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKJiM0MzsJCWdvdG8gZXJyX3JlbGVhc2VfbG9ja3M7CiAKIAlxID0ga3phbGxvY19vYmooKnEpOwogCWlmICghcSkgewpAQCAtMjQzMCwxMSAmIzQzOzI0MzcsMTAgQEAgaW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldikKIAkJZ290byBlcnJfcmVtb3ZlX2dyb3VwOwogCX0KIAotCXEtJmd0O2FwcW4gPSB0b19hcF9xdWV1ZSgmYW1wO2FwZGV2LSZndDtkZXZpY2UpLSZndDtxaWQ7CiYjNDM7CXEtJmd0O2FwcW4gPSBhcHFuOwogCXEtJmd0O3NhdmVkX2lzYyA9IFZGSU9fQVBfSVNDX0lOVkFMSUQ7CiAJbWVtc2V0KCZhbXA7cS0mZ3Q7cmVzZXRfc3RhdHVzLCAwLCBzaXplb2YocS0mZ3Q7cmVzZXRfc3RhdHVzKSk7CiAJSU5JVF9XT1JLKCZhbXA7cS0mZ3Q7cmVzZXRfd29yaywgYXBxX3Jlc2V0X2NoZWNrKTsKLQltYXRyaXhfbWRldiA9IGdldF91cGRhdGVfbG9ja3NfYnlfYXBxbihxLSZndDthcHFuKTsKIAogCWlmIChtYXRyaXhfbWRldikgewogCQl2ZmlvX2FwX21kZXZfbGlua19xdWV1ZShtYXRyaXhfbWRldiwgcSk7CkBAIC0yNDY0LDYgJiM0MzsyNDcwLDggQEAgaW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldikKIAogZXJyX3JlbW92ZV9ncm91cDoKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmFtcDthcGRldi0mZ3Q7ZGV2aWNlLmtvYmosICZhbXA7dmZpb19xdWV1ZV9hdHRyX2dyb3VwKTsKJiM0MztlcnJfcmVsZWFzZV9sb2NrczoKJiM0MzsJcmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX21kZXYobWF0cml4X21kZXYpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI0OTksMTIgJiM0MzsyNTA3LDE1IEBAIHZvaWQgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldikKIAkvKgogCSAqIElmIHRoZSBxdWV1ZSBpcyBub3QgaW4gdGhlIGhvc3QmIzM5O3MgQVAgY29uZmlndXJhdGlvbiwgdGhlbiByZXNldHRpbmcKIAkgKiBpdCB3aWxsIGZhaWwgd2l0aCByZXNwb25zZSBjb2RlIDAxLCAoQVBRTiBub3QgdmFsaWQpOyBzbywgbGV0JiMzOTtzIG1ha2UKLQkgKiBzdXJlIGl0IGlzIGluIHRoZSBob3N0JiMzOTtzIGNvbmZpZy4KJiM0MzsJICogc3VyZSBpdCBpcyBpbiB0aGUgaG9zdCYjMzk7cyBjb25maWcuIElmIGl0IGlzIG5vdCwgdGhlbiBmcmVlIHRoZSBLVk0gR0lTQwomIzQzOwkgKiByZXNvdXJjZXMuCiAJICovCiAJaWYgKHRlc3RfYml0X2ludihhcGlkLCAodW5zaWduZWQgbG9uZyAqKW1hdHJpeF9kZXYtJmd0O2luZm8uYXBtKSAmYW1wOyZhbXA7CiAJICAgIHRlc3RfYml0X2ludihhcHFpLCAodW5zaWduZWQgbG9uZyAqKW1hdHJpeF9kZXYtJmd0O2luZm8uYXFtKSkgewogCQl2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUocSk7CiAJCWZsdXNoX3dvcmsoJmFtcDtxLSZndDtyZXNldF93b3JrKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTsKIAl9CiAKIGRvbmU6CkBAIC0yNTU5LDI0ICYjNDM7MjU3MCwyOCBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiwKIAkJCQkJdW5zaWduZWQgbG9uZyAqYXFyZW0sCiAJCQkJCXVuc2lnbmVkIGxvbmcgKmNkcmVtKQogewotCWludCBkb19ob3RwbHVnID0gMDsKJiM0MzsJYm9vbCBkb19ob3RwbHVnID0gZmFsc2U7CiAKLQlpZiAoIWJpdG1hcF9lbXB0eShhcHJlbSwgQVBfREVWSUNFUykpIHsKLQkJZG9faG90cGx1ZyB8PSBiaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hcG0sCi0JCQkJCSAgICBtYXRyaXhfbWRldi0mZ3Q7c2hhZG93X2FwY2IuYXBtLAotCQkJCQkgICAgYXByZW0sIEFQX0RFVklDRVMpOwomIzQzOwlpZiAoYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtJmd0O3NoYWRvd19hcGNiLmFwbSwgYXByZW0sIEFQX0RFVklDRVMpKSB7CiYjNDM7CQliaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hcG0sCiYjNDM7CQkJICAgICAgbWF0cml4X21kZXYtJmd0O3NoYWRvd19hcGNiLmFwbSwKJiM0MzsJCQkgICAgICBhcHJlbSwgQVBfREVWSUNFUyk7CiYjNDM7CQlkb19ob3RwbHVnID0gdHJ1ZTsKIAl9CiAKLQlpZiAoIWJpdG1hcF9lbXB0eShhcXJlbSwgQVBfRE9NQUlOUykpIHsKLQkJZG9faG90cGx1ZyB8PSBiaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hcW0sCi0JCQkJCSAgICBtYXRyaXhfbWRldi0mZ3Q7c2hhZG93X2FwY2IuYXFtLAotCQkJCQkgICAgYXFyZW0sIEFQX0RFVklDRVMpOwomIzQzOwlpZiAoYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtJmd0O3NoYWRvd19hcGNiLmFxbSwgYXFyZW0sIEFQX0RPTUFJTlMpKSB7CiYjNDM7CQliaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hcW0sCiYjNDM7CQkJICAgICAgbWF0cml4X21kZXYtJmd0O3NoYWRvd19hcGNiLmFxbSwKJiM0MzsJCQkgICAgICBhcXJlbSwgQVBfRE9NQUlOUyk7CiYjNDM7CQlkb19ob3RwbHVnID0gdHJ1ZTsKIAl9CiAKLQlpZiAoIWJpdG1hcF9lbXB0eShjZHJlbSwgQVBfRE9NQUlOUykpCi0JCWRvX2hvdHBsdWcgfD0gYml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi0mZ3Q7c2hhZG93X2FwY2IuYWRtLAotCQkJCQkgICAgbWF0cml4X21kZXYtJmd0O3NoYWRvd19hcGNiLmFkbSwKLQkJCQkJICAgIGNkcmVtLCBBUF9ET01BSU5TKTsKJiM0MzsJaWYgKGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hZG0sIGNkcmVtLCBBUF9ET01BSU5TKSkgewomIzQzOwkJYml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi0mZ3Q7c2hhZG93X2FwY2IuYWRtLAomIzQzOwkJCSAgICAgIG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hZG0sCiYjNDM7CQkJICAgICAgY2RyZW0sIEFQX0RPTUFJTlMpOwomIzQzOwkJZG9faG90cGx1ZyA9IHRydWU7CiYjNDM7CX0KIAogCWlmIChkb19ob3RwbHVnKQogCQl2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpOwpAQCAtMjYwMywyOCAmIzQzOzI2MTgsMzUgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmUodW5zaWduZWQgbG9uZyAqYXBfcmVtb3ZlLAogCURFQ0xBUkVfQklUTUFQKGFwcmVtLCBBUF9ERVZJQ0VTKTsKIAlERUNMQVJFX0JJVE1BUChhcXJlbSwgQVBfRE9NQUlOUyk7CiAJREVDTEFSRV9CSVRNQVAoY2RyZW0sIEFQX0RPTUFJTlMpOwotCWludCBkb19yZW1vdmUgPSAwOwomIzQzOwlpbnQgZG9fcmVtb3ZlOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgJmFtcDttYXRyaXhfZGV2LSZndDttZGV2X2xpc3QsIG5vZGUpIHsKLQkJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9tZGV2LSZndDtrdm0tJmd0O2xvY2spOwomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiBtYXRyaXhfbWRldiwKJiM0MzsJCSAqIGFuZCBrdm0tJmd0O2xvY2sgbXVzdCBiZSB0YWtlbiBiZWZvcmUgbWRldnNfbG9jayB0byBzYXRpc2Z5IHRoZSBsb2NrCiYjNDM7CQkgKiBvcmRlcmluZyByZXF1aXJlbWVudCBhbmQgcHJldmVudCBhIGxvY2tkZXAgc3BsYXQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChtYXRyaXhfbWRldi0mZ3Q7a3ZtKQomIzQzOwkJCW11dGV4X2xvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKIAkJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwogCi0JCWRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kKGFwcmVtLCBhcF9yZW1vdmUsCi0JCQkJCSAgbWF0cml4X21kZXYtJmd0O21hdHJpeC5hcG0sCi0JCQkJCSAgQVBfREVWSUNFUyk7CiYjNDM7CQlkb19yZW1vdmUgPSBiaXRtYXBfYW5kKGFwcmVtLCBhcF9yZW1vdmUsCiYjNDM7CQkJCSAgICAgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFwbSwKJiM0MzsJCQkJICAgICAgIEFQX0RFVklDRVMpOwogCQlkb19yZW1vdmUgfD0gYml0bWFwX2FuZChhcXJlbSwgYXFfcmVtb3ZlLAogCQkJCQkgIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYXFtLAogCQkJCQkgIEFQX0RPTUFJTlMpOwotCQlkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChjZHJlbSwgY2RfcmVtb3ZlLAotCQkJCQkgICAgIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYWRtLAotCQkJCQkgICAgIEFQX0RPTUFJTlMpOwomIzQzOwkJZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoY2RyZW0sIGNkX3JlbW92ZSwKJiM0MzsJCQkJCW1hdHJpeF9tZGV2LSZndDttYXRyaXguYWRtLAomIzQzOwkJCQkJQVBfRE9NQUlOUyk7CiAKIAkJaWYgKGRvX3JlbW92ZSkKIAkJCXZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZyhtYXRyaXhfbWRldiwgYXByZW0sIGFxcmVtLAogCQkJCQkJICAgIGNkcmVtKTsKIAogCQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9jayk7CiYjNDM7CQlpZiAobWF0cml4X21kZXYtJmd0O2t2bSkKJiM0MzsJCQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKIAl9CiB9CiAKQEAgLTI3NDksMTIgJiM0MzsyNzcxLDIwIEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfYWRkKHVuc2lnbmVkIGxvbmcgKmFwbV9hZGQsIHVuc2lnbmVkIGxvbmcgKmFxbV9hZGQsCiAJdmZpb19hcF9maWx0ZXJfYXBpZF9ieV9xdHlwZShhcG1fYWRkLCBhcW1fYWRkKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsICZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldl9saXN0LCBub2RlKSB7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIGluIG9yZGVyIHRvIGFjY2VzcyBmaWVsZHMKJiM0MzsJCSAqIHdpdGhpbiBtYXRyaXhfbWRldgomIzQzOwkJICovCiYjNDM7CQltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiYjNDM7CiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FwbV9hZGQsCiAJCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFwbSwgYXBtX2FkZCwgQVBfREVWSUNFUyk7CiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FxbV9hZGQsCiAJCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFxbSwgYXFtX2FkZCwgQVBfRE9NQUlOUyk7CiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FkbV9hZGQsCiAJCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFkbSwgYWRtX2FkZCwgQVBfREVWSUNFUyk7CiYjNDM7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKIAl9CiB9CiAKQEAgLTI4MjEsOCAmIzQzOzI4NTEsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpCiAJREVDTEFSRV9CSVRNQVAoYXBtX2ZpbHRlcmVkLCBBUF9ERVZJQ0VTKTsKIAlib29sIGZpbHRlcl9kb21haW5zLCBmaWx0ZXJfYWRhcHRlcnMsIGZpbHRlcl9jZG9tcywgZG9faG90cGx1ZyA9IGZhbHNlOwogCi0JbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9tZGV2LSZndDtrdm0tJmd0O2xvY2spOwotCW11dGV4X2xvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKJiM0MzsJYml0bWFwX3plcm8oYXBtX2ZpbHRlcmVkLCBBUF9ERVZJQ0VTKTsKIAogCWZpbHRlcl9hZGFwdGVycyA9IGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LSZndDttYXRyaXguYXBtLAogCQkJCQkgICAgbWF0cml4X21kZXYtJmd0O2FwbV9hZGQsIEFQX0RFVklDRVMpOwpAQCAtMjg0MSw5ICYjNDM7Mjg3MCw2IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldikKIAkJdmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTsKIAogCXJlc2V0X3F1ZXVlc19mb3JfYXBpZHMobWF0cml4X21kZXYsIGFwbV9maWx0ZXJlZCk7Ci0KLQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKLQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKIH0KIAogdm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sCkBAIC0yODU0LDE1ICYjNDM7Mjg4MCwyOSBAQCB2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbywKIAltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7Z3Vlc3RzX2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgJmFtcDttYXRyaXhfZGV2LSZndDttZGV2X2xpc3QsIG5vZGUpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgbWRldnNfbG9jayBtdXN0IGJlIGhlbGQgdG8gYWNjZXNzIGZpZWxkcyB3aXRoaW4gbWF0cml4X21kZXYsCiYjNDM7CQkgKiBhbmQga3ZtLSZndDtsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIG1kZXZzX2xvY2sgdG8gc2F0aXNmeSB0aGUgbG9jawomIzQzOwkJICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LgomIzQzOwkJICovCiYjNDM7CQlpZiAobWF0cml4X21kZXYtJmd0O2t2bSkKJiM0MzsJCQltdXRleF9sb2NrKCZhbXA7bWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9jayk7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiYjNDM7CiAJCWlmIChiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtJmd0O2FwbV9hZGQsIEFQX0RFVklDRVMpICZhbXA7JmFtcDsKIAkJICAgIGJpdG1hcF9lbXB0eShtYXRyaXhfbWRldi0mZ3Q7YXFtX2FkZCwgQVBfRE9NQUlOUykgJmFtcDsmYW1wOwogCQkgICAgYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LSZndDthZG1fYWRkLCBBUF9ET01BSU5TKSkKLQkJCWNvbnRpbnVlOwomIzQzOwkJCWdvdG8gZG9fdW5sb2NrOwogCiAJCXZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcobWF0cml4X21kZXYpOwogCQliaXRtYXBfY2xlYXIobWF0cml4X21kZXYtJmd0O2FwbV9hZGQsIDAsIEFQX0RFVklDRVMpOwogCQliaXRtYXBfY2xlYXIobWF0cml4X21kZXYtJmd0O2FxbV9hZGQsIDAsIEFQX0RPTUFJTlMpOwogCQliaXRtYXBfY2xlYXIobWF0cml4X21kZXYtJmd0O2FkbV9hZGQsIDAsIEFQX0RPTUFJTlMpOwomIzQzOwomIzQzO2RvX3VubG9jazoKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwomIzQzOwkJaWYgKG1hdHJpeF9tZGV2LSZndDtrdm0pCiYjNDM7CQkJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9jayk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7Z3Vlc3RzX2xvY2spOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjhtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYzNQoJCQkJCQkJb3V0cHV0OiAxMjUKCQkJCQkJCXRob3VnaHRzOiA2MjkxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcHJpbWFyaWx5IGFkZHJlc3NlcyBsb2NraW5nIGlzc3VlcyAoZS5nLiwgY2hhbmdpbmcgbWRldnNfbG9jayB0byBndWVzdHNfbG9jaywgZml4aW5nIGxvY2sgb3JkZXJpbmcgdG8gcHJldmVudCBsb2NrZGVwIHNwbGF0cyksIGZpeGVzIG1lbW9yeSBsZWFrcy9yZXNvdXJjZSBjbGVhbnVwIGluIGVycm9yIHBhdGhzLCBhbmQgY29ycmVjdHMgbG9naWMgYnVncyBpbnZvbHZpbmcgYml0bWFwIG9wZXJhdGlvbnMgKGJpdG1hcF9hbmRub3QgdnMgYml0bWFwX2ludGVyc2VjdHMpLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCBvciBtYW5pcHVsYXRlZC4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSByZWdyZXNzaW9ucyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBwcmltYXJpbHkgYWRkcmVzc2VzIGxvY2tpbmcgaXNzdWVzIChlLmcuLCBjaGFuZ2luZyBtZGV2c19sb2NrIHRvIGd1ZXN0c19sb2NrLCBmaXhpbmcgbG9jayBvcmRlcmluZyB0byBwcmV2ZW50IGxvY2tkZXAgc3BsYXRzKSwgZml4ZXMgbWVtb3J5IGxlYWtzL3Jlc291cmNlIGNsZWFudXAgaW4gZXJyb3IgcGF0aHMsIGFuZCBjb3JyZWN0cyBsb2dpYyBidWdzIGludm9sdmluZyBiaXRtYXAgb3BlcmF0aW9ucyAoYml0bWFwX2FuZG5vdCB2cyBiaXRtYXBfaW50ZXJzZWN0cykuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIG9yIG1hbmlwdWxhdGVkLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHJlZ3Jlc3Npb25zIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjE6MjcuNjcyODMzNTcxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc3MzM5ODIyMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZGSU9cIixcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmaW9fYXBfbWRldl9wcm9iZVwiLFxuICAgIFwidmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlXCIsXG4gICAgXCJ2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlXCIsXG4gICAgXCJ2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVcIixcbiAgICBcInZmaW9fYXBfb25fY2ZnX2NoYW5nZWRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByaW1hcmlseSBhZGRyZXNzZXMgbG9ja2luZyBpc3N1ZXMgKGUuZy4sIGNoYW5naW5nIG1kZXZzX2xvY2sgdG8gZ3Vlc3RzX2xvY2ssIGZpeGluZyBsb2NrIG9yZGVyaW5nIHRvIHByZXZlbnQgbG9ja2RlcCBzcGxhdHMpLCBmaXhlcyBtZW1vcnkgbGVha3MvcmVzb3VyY2UgY2xlYW51cCBpbiBlcnJvciBwYXRocywgYW5kIGNvcnJlY3RzIGxvZ2ljIGJ1Z3MgaW52b2x2aW5nIGJpdG1hcCBvcGVyYXRpb25zIChiaXRtYXBfYW5kbm90IHZzIGJpdG1hcF9pbnRlcnNlY3RzKS4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgb3IgbWFuaXB1bGF0ZWQuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbnMgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkwIGFyY2hpdGVjdHVyZSwgZml4aW5nIGxvY2sgb3JkZXJpbmcgYW5kIGxvY2tkZXAgc3BsYXRzIGluIHZhcmlvdXMgbWRldiBhbmQgQVAgYnVzIGNhbGxiYWNrcyAoZS5nLiwgdmZpb19hcF9tZGV2X3Byb2JlLCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB3aGVuIHRoZSB2ZmlvX2FwIGRyaXZlciBpcyBsb2FkZWQgYW5kIG1kZXYgZGV2aWNlcyBhcmUgY3JlYXRlZCB2aWEgc3lzZnMsIG9yIHdoZW4gdGhlIEFQIGJ1cyBwZXJpb2RpY2FsbHkgc2NhbnMgZm9yIGRldmljZXMuIFN5emthbGxlciBjYW4gdHJpZ2dlciB0aGVzZSBwYXRocyBpbiBzMzkweCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IEFQIGluc3RydWN0aW9ucyAoZS5nLiwgS1ZNIG9uIHMzOTB4IG1haW5mcmFtZXMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMToyNy42NzI4NDEwMzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODM0ODYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRjOTYyOGI5ZDVhYjI3OWIzMTAwYTVlMGMwYjBkMGNkOGJlODIwNWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTI6MjE6MjYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXFxuaW5kZXggNDRiM2ExZGNjMWIzNi4uZmFhYjVlOTE3OWZmMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcXG4rKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcXG5AQCAtODAzLDkgKzgwMyw5IEBAIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Byb2JlKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldilcXG4gXFx0bWF0cml4X21kZXYtXFx1MDAzZXJlcV90cmlnZ2VyID0gTlVMTDtcXG4gXFx0bWF0cml4X21kZXYtXFx1MDAzZWNmZ19jaGdfdHJpZ2dlciA9IE5VTEw7XFxuIFxcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2bWRldi1cXHUwMDNlZGV2LCBtYXRyaXhfbWRldik7XFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZzX2xvY2spO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VndWVzdHNfbG9jayk7XFxuIFxcdGxpc3RfYWRkKFxcdTAwMjZtYXRyaXhfbWRldi1cXHUwMDNlbm9kZSwgXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfbGlzdCk7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZ3Vlc3RzX2xvY2spO1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGVycl9wdXRfdmRldjpcXG5AQCAtMjI5Nyw2ICsyMjk3LDggQEAgc3RhdGljIHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcXG4gXFx0dW5zaWduZWQgbG9uZyBhcGlkID0gQVBfUUlEX0NBUkQocS1cXHUwMDNlYXBxbik7XFxuIFxcdHVuc2lnbmVkIGxvbmcgYXBxaSA9IEFQX1FJRF9RVUVVRShxLVxcdTAwM2VhcHFuKTtcXG4gXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWd1ZXN0c19sb2NrKTtcXG4rXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsIFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2X2xpc3QsIG5vZGUpIHtcXG4gXFx0XFx0aWYgKHRlc3RfYml0X2ludihhcGlkLCBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFwbSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIHRlc3RfYml0X2ludihhcHFpLCBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFxbSkpXFxuQEAgLTIzMTYsNiArMjMxOCw3IEBAIHN0YXRpYyBzc2l6ZV90IHN0YXR1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4gXFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcXG4gXFx0c3RydWN0IGFwX2RldmljZSAqYXBkZXYgPSB0b19hcF9kZXYoZGV2KTtcXG4gXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWd1ZXN0c19sb2NrKTtcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuIFxcdHEgPSBkZXZfZ2V0X2RydmRhdGEoXFx1MDAyNmFwZGV2LVxcdTAwM2VkZXZpY2UpO1xcbiBcXHRtYXRyaXhfbWRldiA9IHZmaW9fYXBfbWRldl9mb3JfcXVldWUocSk7XFxuQEAgLTIzNDMsNiArMjM0Niw3IEBAIHN0YXRpYyBzc2l6ZV90IHN0YXR1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4gXFx0fVxcbiBcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VndWVzdHNfbG9jayk7XFxuIFxcbiBcXHRyZXR1cm4gbmNoYXJzO1xcbiB9XFxuQEAgLTI0MTUsMTQgKzI0MTksMTcgQEAgdm9pZCB2ZmlvX2FwX21kZXZfdW5yZWdpc3Rlcih2b2lkKVxcbiBcXG4gaW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcXG4ge1xcbi1cXHRpbnQgcmV0O1xcbitcXHRpbnQgcmV0LCBhcHFuO1xcbiBcXHRzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcTtcXG4gXFx0REVDTEFSRV9CSVRNQVAoYXBtX2ZpbHRlcmVkLCBBUF9ERVZJQ0VTKTtcXG4gXFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcXG4gXFxuK1xcdGFwcW4gPSB0b19hcF9xdWV1ZShcXHUwMDI2YXBkZXYtXFx1MDAzZWRldmljZSktXFx1MDAzZXFpZDtcXG4rXFx0bWF0cml4X21kZXYgPSBnZXRfdXBkYXRlX2xvY2tzX2J5X2FwcW4oYXBxbik7XFxuK1xcbiBcXHRyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoXFx1MDAyNmFwZGV2LVxcdTAwM2VkZXZpY2Uua29iaiwgXFx1MDAyNnZmaW9fcXVldWVfYXR0cl9ncm91cCk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGdvdG8gZXJyX3JlbGVhc2VfbG9ja3M7XFxuIFxcbiBcXHRxID0ga3phbGxvY19vYmooKnEpO1xcbiBcXHRpZiAoIXEpIHtcXG5AQCAtMjQzMCwxMSArMjQzNywxMCBAQCBpbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxcbiBcXHRcXHRnb3RvIGVycl9yZW1vdmVfZ3JvdXA7XFxuIFxcdH1cXG4gXFxuLVxcdHEtXFx1MDAzZWFwcW4gPSB0b19hcF9xdWV1ZShcXHUwMDI2YXBkZXYtXFx1MDAzZWRldmljZSktXFx1MDAzZXFpZDtcXG4rXFx0cS1cXHUwMDNlYXBxbiA9IGFwcW47XFxuIFxcdHEtXFx1MDAzZXNhdmVkX2lzYyA9IFZGSU9fQVBfSVNDX0lOVkFMSUQ7XFxuIFxcdG1lbXNldChcXHUwMDI2cS1cXHUwMDNlcmVzZXRfc3RhdHVzLCAwLCBzaXplb2YocS1cXHUwMDNlcmVzZXRfc3RhdHVzKSk7XFxuIFxcdElOSVRfV09SSyhcXHUwMDI2cS1cXHUwMDNlcmVzZXRfd29yaywgYXBxX3Jlc2V0X2NoZWNrKTtcXG4tXFx0bWF0cml4X21kZXYgPSBnZXRfdXBkYXRlX2xvY2tzX2J5X2FwcW4ocS1cXHUwMDNlYXBxbik7XFxuIFxcbiBcXHRpZiAobWF0cml4X21kZXYpIHtcXG4gXFx0XFx0dmZpb19hcF9tZGV2X2xpbmtfcXVldWUobWF0cml4X21kZXYsIHEpO1xcbkBAIC0yNDY0LDYgKzI0NzAsOCBAQCBpbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxcbiBcXG4gZXJyX3JlbW92ZV9ncm91cDpcXG4gXFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFxcdTAwMjZhcGRldi1cXHUwMDNlZGV2aWNlLmtvYmosIFxcdTAwMjZ2ZmlvX3F1ZXVlX2F0dHJfZ3JvdXApO1xcbitlcnJfcmVsZWFzZV9sb2NrczpcXG4rXFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX21kZXYobWF0cml4X21kZXYpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbkBAIC0yNDk5LDEyICsyNTA3LDE1IEBAIHZvaWQgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcXG4gXFx0LypcXG4gXFx0ICogSWYgdGhlIHF1ZXVlIGlzIG5vdCBpbiB0aGUgaG9zdCdzIEFQIGNvbmZpZ3VyYXRpb24sIHRoZW4gcmVzZXR0aW5nXFxuIFxcdCAqIGl0IHdpbGwgZmFpbCB3aXRoIHJlc3BvbnNlIGNvZGUgMDEsIChBUFFOIG5vdCB2YWxpZCk7IHNvLCBsZXQncyBtYWtlXFxuLVxcdCAqIHN1cmUgaXQgaXMgaW4gdGhlIGhvc3QncyBjb25maWcuXFxuK1xcdCAqIHN1cmUgaXQgaXMgaW4gdGhlIGhvc3QncyBjb25maWcuIElmIGl0IGlzIG5vdCwgdGhlbiBmcmVlIHRoZSBLVk0gR0lTQ1xcbitcXHQgKiByZXNvdXJjZXMuXFxuIFxcdCAqL1xcbiBcXHRpZiAodGVzdF9iaXRfaW52KGFwaWQsICh1bnNpZ25lZCBsb25nICopbWF0cml4X2Rldi1cXHUwMDNlaW5mby5hcG0pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICB0ZXN0X2JpdF9pbnYoYXBxaSwgKHVuc2lnbmVkIGxvbmcgKiltYXRyaXhfZGV2LVxcdTAwM2VpbmZvLmFxbSkpIHtcXG4gXFx0XFx0dmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHEpO1xcbiBcXHRcXHRmbHVzaF93b3JrKFxcdTAwMjZxLVxcdTAwM2VyZXNldF93b3JrKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xcbiBcXHR9XFxuIFxcbiBkb25lOlxcbkBAIC0yNTU5LDI0ICsyNTcwLDI4IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICphcXJlbSxcXG4gXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqY2RyZW0pXFxuIHtcXG4tXFx0aW50IGRvX2hvdHBsdWcgPSAwO1xcbitcXHRib29sIGRvX2hvdHBsdWcgPSBmYWxzZTtcXG4gXFxuLVxcdGlmICghYml0bWFwX2VtcHR5KGFwcmVtLCBBUF9ERVZJQ0VTKSkge1xcbi1cXHRcXHRkb19ob3RwbHVnIHw9IGJpdG1hcF9hbmRub3QobWF0cml4X21kZXYtXFx1MDAzZXNoYWRvd19hcGNiLmFwbSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIG1hdHJpeF9tZGV2LVxcdTAwM2VzaGFkb3dfYXBjYi5hcG0sXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBhcHJlbSwgQVBfREVWSUNFUyk7XFxuK1xcdGlmIChiaXRtYXBfaW50ZXJzZWN0cyhtYXRyaXhfbWRldi1cXHUwMDNlc2hhZG93X2FwY2IuYXBtLCBhcHJlbSwgQVBfREVWSUNFUykpIHtcXG4rXFx0XFx0Yml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi1cXHUwMDNlc2hhZG93X2FwY2IuYXBtLFxcbitcXHRcXHRcXHQgICAgICBtYXRyaXhfbWRldi1cXHUwMDNlc2hhZG93X2FwY2IuYXBtLFxcbitcXHRcXHRcXHQgICAgICBhcHJlbSwgQVBfREVWSUNFUyk7XFxuK1xcdFxcdGRvX2hvdHBsdWcgPSB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIWJpdG1hcF9lbXB0eShhcXJlbSwgQVBfRE9NQUlOUykpIHtcXG4tXFx0XFx0ZG9faG90cGx1ZyB8PSBiaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LVxcdTAwM2VzaGFkb3dfYXBjYi5hcW0sXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBtYXRyaXhfbWRldi1cXHUwMDNlc2hhZG93X2FwY2IuYXFtLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgYXFyZW0sIEFQX0RFVklDRVMpO1xcbitcXHRpZiAoYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtXFx1MDAzZXNoYWRvd19hcGNiLmFxbSwgYXFyZW0sIEFQX0RPTUFJTlMpKSB7XFxuK1xcdFxcdGJpdG1hcF9hbmRub3QobWF0cml4X21kZXYtXFx1MDAzZXNoYWRvd19hcGNiLmFxbSxcXG4rXFx0XFx0XFx0ICAgICAgbWF0cml4X21kZXYtXFx1MDAzZXNoYWRvd19hcGNiLmFxbSxcXG4rXFx0XFx0XFx0ICAgICAgYXFyZW0sIEFQX0RPTUFJTlMpO1xcbitcXHRcXHRkb19ob3RwbHVnID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFiaXRtYXBfZW1wdHkoY2RyZW0sIEFQX0RPTUFJTlMpKVxcbi1cXHRcXHRkb19ob3RwbHVnIHw9IGJpdG1hcF9hbmRub3QobWF0cml4X21kZXYtXFx1MDAzZXNoYWRvd19hcGNiLmFkbSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIG1hdHJpeF9tZGV2LVxcdTAwM2VzaGFkb3dfYXBjYi5hZG0sXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBjZHJlbSwgQVBfRE9NQUlOUyk7XFxuK1xcdGlmIChiaXRtYXBfaW50ZXJzZWN0cyhtYXRyaXhfbWRldi1cXHUwMDNlc2hhZG93X2FwY2IuYWRtLCBjZHJlbSwgQVBfRE9NQUlOUykpIHtcXG4rXFx0XFx0Yml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi1cXHUwMDNlc2hhZG93X2FwY2IuYWRtLFxcbitcXHRcXHRcXHQgICAgICBtYXRyaXhfbWRldi1cXHUwMDNlc2hhZG93X2FwY2IuYWRtLFxcbitcXHRcXHRcXHQgICAgICBjZHJlbSwgQVBfRE9NQUlOUyk7XFxuK1xcdFxcdGRvX2hvdHBsdWcgPSB0cnVlO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoZG9faG90cGx1ZylcXG4gXFx0XFx0dmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTtcXG5AQCAtMjYwMywyOCArMjYxOCwzNSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZSh1bnNpZ25lZCBsb25nICphcF9yZW1vdmUsXFxuIFxcdERFQ0xBUkVfQklUTUFQKGFwcmVtLCBBUF9ERVZJQ0VTKTtcXG4gXFx0REVDTEFSRV9CSVRNQVAoYXFyZW0sIEFQX0RPTUFJTlMpO1xcbiBcXHRERUNMQVJFX0JJVE1BUChjZHJlbSwgQVBfRE9NQUlOUyk7XFxuLVxcdGludCBkb19yZW1vdmUgPSAwO1xcbitcXHRpbnQgZG9fcmVtb3ZlO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfbWRldi1cXHUwMDNla3ZtLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIHRvIGFjY2VzcyBmaWVsZHMgd2l0aGluIG1hdHJpeF9tZGV2LFxcbitcXHRcXHQgKiBhbmQga3ZtLVxcdTAwM2Vsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIG1kZXZzX2xvY2sgdG8gc2F0aXNmeSB0aGUgbG9ja1xcbitcXHRcXHQgKiBvcmRlcmluZyByZXF1aXJlbWVudCBhbmQgcHJldmVudCBhIGxvY2tkZXAgc3BsYXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobWF0cml4X21kZXYtXFx1MDAzZWt2bSlcXG4rXFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bWF0cml4X21kZXYtXFx1MDAzZWt2bS1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZzX2xvY2spO1xcbiBcXG4tXFx0XFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoYXByZW0sIGFwX3JlbW92ZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFwbSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBBUF9ERVZJQ0VTKTtcXG4rXFx0XFx0ZG9fcmVtb3ZlID0gYml0bWFwX2FuZChhcHJlbSwgYXBfcmVtb3ZlLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbWF0cml4X21kZXYtXFx1MDAzZW1hdHJpeC5hcG0sXFxuK1xcdFxcdFxcdFxcdCAgICAgICBBUF9ERVZJQ0VTKTtcXG4gXFx0XFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoYXFyZW0sIGFxX3JlbW92ZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFxbSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBBUF9ET01BSU5TKTtcXG4tXFx0XFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmRub3QoY2RyZW0sIGNkX3JlbW92ZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFkbSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBBUF9ET01BSU5TKTtcXG4rXFx0XFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoY2RyZW0sIGNkX3JlbW92ZSxcXG4rXFx0XFx0XFx0XFx0XFx0bWF0cml4X21kZXYtXFx1MDAzZW1hdHJpeC5hZG0sXFxuK1xcdFxcdFxcdFxcdFxcdEFQX0RPTUFJTlMpO1xcbiBcXG4gXFx0XFx0aWYgKGRvX3JlbW92ZSlcXG4gXFx0XFx0XFx0dmZpb19hcF9tZGV2X2hvdF91bnBsdWdfY2ZnKG1hdHJpeF9tZGV2LCBhcHJlbSwgYXFyZW0sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBjZHJlbSk7XFxuIFxcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZzX2xvY2spO1xcbi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0tXFx1MDAzZWxvY2spO1xcbitcXHRcXHRpZiAobWF0cml4X21kZXYtXFx1MDAzZWt2bSlcXG4rXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfbWRldi1cXHUwMDNla3ZtLVxcdTAwM2Vsb2NrKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0yNzQ5LDEyICsyNzcxLDIwIEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfYWRkKHVuc2lnbmVkIGxvbmcgKmFwbV9hZGQsIHVuc2lnbmVkIGxvbmcgKmFxbV9hZGQsXFxuIFxcdHZmaW9fYXBfZmlsdGVyX2FwaWRfYnlfcXR5cGUoYXBtX2FkZCwgYXFtX2FkZCk7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCBpbiBvcmRlciB0byBhY2Nlc3MgZmllbGRzXFxuK1xcdFxcdCAqIHdpdGhpbiBtYXRyaXhfbWRldlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuK1xcbiBcXHRcXHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVxcdTAwM2VhcG1fYWRkLFxcbiBcXHRcXHRcXHQgICBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFwbSwgYXBtX2FkZCwgQVBfREVWSUNFUyk7XFxuIFxcdFxcdGJpdG1hcF9hbmQobWF0cml4X21kZXYtXFx1MDAzZWFxbV9hZGQsXFxuIFxcdFxcdFxcdCAgIG1hdHJpeF9tZGV2LVxcdTAwM2VtYXRyaXguYXFtLCBhcW1fYWRkLCBBUF9ET01BSU5TKTtcXG4gXFx0XFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cXHUwMDNlYWRtX2FkZCxcXG4gXFx0XFx0XFx0ICAgbWF0cml4X21kZXYtXFx1MDAzZW1hdHJpeC5hZG0sIGFkbV9hZGQsIEFQX0RFVklDRVMpO1xcbitcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0yODIxLDggKzI4NTEsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXFxuIFxcdERFQ0xBUkVfQklUTUFQKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XFxuIFxcdGJvb2wgZmlsdGVyX2RvbWFpbnMsIGZpbHRlcl9hZGFwdGVycywgZmlsdGVyX2Nkb21zLCBkb19ob3RwbHVnID0gZmFsc2U7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfbWRldi1cXHUwMDNla3ZtLVxcdTAwM2Vsb2NrKTtcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuK1xcdGJpdG1hcF96ZXJvKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XFxuIFxcbiBcXHRmaWx0ZXJfYWRhcHRlcnMgPSBiaXRtYXBfaW50ZXJzZWN0cyhtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFwbSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIG1hdHJpeF9tZGV2LVxcdTAwM2VhcG1fYWRkLCBBUF9ERVZJQ0VTKTtcXG5AQCAtMjg0MSw5ICsyODcwLDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxcbiBcXHRcXHR2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpO1xcbiBcXG4gXFx0cmVzZXRfcXVldWVzX2Zvcl9hcGlkcyhtYXRyaXhfbWRldiwgYXBtX2ZpbHRlcmVkKTtcXG4tXFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X21kZXYtXFx1MDAzZWt2bS1cXHUwMDNlbG9jayk7XFxuIH1cXG4gXFxuIHZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxcbkBAIC0yODU0LDE1ICsyODgwLDI5IEBAIHZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VndWVzdHNfbG9jayk7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiBtYXRyaXhfbWRldixcXG4rXFx0XFx0ICogYW5kIGt2bS1cXHUwMDNlbG9jayBtdXN0IGJlIHRha2VuIGJlZm9yZSBtZGV2c19sb2NrIHRvIHNhdGlzZnkgdGhlIGxvY2tcXG4rXFx0XFx0ICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKG1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0pXFxuK1xcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0tXFx1MDAzZWxvY2spO1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4rXFxuIFxcdFxcdGlmIChiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXFx1MDAzZWFwbV9hZGQsIEFQX0RFVklDRVMpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXFx1MDAzZWFxbV9hZGQsIEFQX0RPTUFJTlMpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXFx1MDAzZWFkbV9hZGQsIEFQX0RPTUFJTlMpKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0Z290byBkb191bmxvY2s7XFxuIFxcbiBcXHRcXHR2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKG1hdHJpeF9tZGV2KTtcXG4gXFx0XFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVxcdTAwM2VhcG1fYWRkLCAwLCBBUF9ERVZJQ0VTKTtcXG4gXFx0XFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVxcdTAwM2VhcW1fYWRkLCAwLCBBUF9ET01BSU5TKTtcXG4gXFx0XFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVxcdTAwM2VhZG1fYWRkLCAwLCBBUF9ET01BSU5TKTtcXG4rXFxuK2RvX3VubG9jazpcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4rXFx0XFx0aWYgKG1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0pXFxuK1xcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X21kZXYtXFx1MDAzZWt2bS1cXHUwMDNlbG9jayk7XFxuIFxcdH1cXG4gXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZ3Vlc3RzX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMToyOC4xMzI2ODg1NTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNjU1MTEyMDUzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkZJT1wiLFxuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19hcF9tZGV2X3Byb2JlXCIsXG4gICAgXCJ2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWVcIixcbiAgICBcInZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWVcIixcbiAgICBcInZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZVwiLFxuICAgIFwidmZpb19hcF9vbl9jZmdfY2hhbmdlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkwIGFyY2hpdGVjdHVyZSwgZml4aW5nIGxvY2sgb3JkZXJpbmcgYW5kIGxvY2tkZXAgc3BsYXRzIGluIHZhcmlvdXMgbWRldiBhbmQgQVAgYnVzIGNhbGxiYWNrcyAoZS5nLiwgdmZpb19hcF9tZGV2X3Byb2JlLCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB3aGVuIHRoZSB2ZmlvX2FwIGRyaXZlciBpcyBsb2FkZWQgYW5kIG1kZXYgZGV2aWNlcyBhcmUgY3JlYXRlZCB2aWEgc3lzZnMsIG9yIHdoZW4gdGhlIEFQIGJ1cyBwZXJpb2RpY2FsbHkgc2NhbnMgZm9yIGRldmljZXMuIFN5emthbGxlciBjYW4gdHJpZ2dlciB0aGVzZSBwYXRocyBpbiBzMzkweCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IEFQIGluc3RydWN0aW9ucyAoZS5nLiwgS1ZNIG9uIHMzOTB4IG1haW5mcmFtZXMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYzk2MjhiOWQ1YWIyNzliMzEwMGE1ZTBjMGIwZDBjZDhiZTgyMDViXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTI6MjE6MjYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbmluZGV4IDQ0YjNhMWRjYzFiMzYuLmZhYWI1ZTkxNzlmZjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuQEAgLTgwMyw5ICs4MDMsOSBAQCBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9wcm9iZShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpXG4gXHRtYXRyaXhfbWRldi1cdTAwM2VyZXFfdHJpZ2dlciA9IE5VTEw7XG4gXHRtYXRyaXhfbWRldi1cdTAwM2VjZmdfY2hnX3RyaWdnZXIgPSBOVUxMO1xuIFx0ZGV2X3NldF9kcnZkYXRhKFx1MDAyNm1kZXYtXHUwMDNlZGV2LCBtYXRyaXhfbWRldik7XG4tXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4rXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2spO1xuIFx0bGlzdF9hZGQoXHUwMDI2bWF0cml4X21kZXYtXHUwMDNlbm9kZSwgXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2X2xpc3QpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJfcHV0X3ZkZXY6XG5AQCAtMjI5Nyw2ICsyMjk3LDggQEAgc3RhdGljIHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcbiBcdHVuc2lnbmVkIGxvbmcgYXBpZCA9IEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbik7XG4gXHR1bnNpZ25lZCBsb25nIGFwcWkgPSBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKTtcbiBcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4rXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuIFx0XHRpZiAodGVzdF9iaXRfaW52KGFwaWQsIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcG0pIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgdGVzdF9iaXRfaW52KGFwcWksIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcW0pKVxuQEAgLTIzMTYsNiArMjMxOCw3IEBAIHN0YXRpYyBzc2l6ZV90IHN0YXR1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XG4gXHRzdHJ1Y3QgYXBfZGV2aWNlICphcGRldiA9IHRvX2FwX2RldihkZXYpO1xuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiBcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiBcdHEgPSBkZXZfZ2V0X2RydmRhdGEoXHUwMDI2YXBkZXYtXHUwMDNlZGV2aWNlKTtcbiBcdG1hdHJpeF9tZGV2ID0gdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZShxKTtcbkBAIC0yMzQzLDYgKzIzNDYsNyBAQCBzdGF0aWMgc3NpemVfdCBzdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHR9XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiBcbiBcdHJldHVybiBuY2hhcnM7XG4gfVxuQEAgLTI0MTUsMTQgKzI0MTksMTcgQEAgdm9pZCB2ZmlvX2FwX21kZXZfdW5yZWdpc3Rlcih2b2lkKVxuIFxuIGludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXG4ge1xuLVx0aW50IHJldDtcbitcdGludCByZXQsIGFwcW47XG4gXHRzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcTtcbiBcdERFQ0xBUkVfQklUTUFQKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XG4gXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuIFxuK1x0YXBxbiA9IHRvX2FwX3F1ZXVlKFx1MDAyNmFwZGV2LVx1MDAzZWRldmljZSktXHUwMDNlcWlkO1xuK1x0bWF0cml4X21kZXYgPSBnZXRfdXBkYXRlX2xvY2tzX2J5X2FwcW4oYXBxbik7XG4rXG4gXHRyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoXHUwMDI2YXBkZXYtXHUwMDNlZGV2aWNlLmtvYmosIFx1MDAyNnZmaW9fcXVldWVfYXR0cl9ncm91cCk7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHRnb3RvIGVycl9yZWxlYXNlX2xvY2tzO1xuIFxuIFx0cSA9IGt6YWxsb2Nfb2JqKCpxKTtcbiBcdGlmICghcSkge1xuQEAgLTI0MzAsMTEgKzI0MzcsMTAgQEAgaW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcbiBcdFx0Z290byBlcnJfcmVtb3ZlX2dyb3VwO1xuIFx0fVxuIFxuLVx0cS1cdTAwM2VhcHFuID0gdG9fYXBfcXVldWUoXHUwMDI2YXBkZXYtXHUwMDNlZGV2aWNlKS1cdTAwM2VxaWQ7XG4rXHRxLVx1MDAzZWFwcW4gPSBhcHFuO1xuIFx0cS1cdTAwM2VzYXZlZF9pc2MgPSBWRklPX0FQX0lTQ19JTlZBTElEO1xuIFx0bWVtc2V0KFx1MDAyNnEtXHUwMDNlcmVzZXRfc3RhdHVzLCAwLCBzaXplb2YocS1cdTAwM2VyZXNldF9zdGF0dXMpKTtcbiBcdElOSVRfV09SSyhcdTAwMjZxLVx1MDAzZXJlc2V0X3dvcmssIGFwcV9yZXNldF9jaGVjayk7XG4tXHRtYXRyaXhfbWRldiA9IGdldF91cGRhdGVfbG9ja3NfYnlfYXBxbihxLVx1MDAzZWFwcW4pO1xuIFxuIFx0aWYgKG1hdHJpeF9tZGV2KSB7XG4gXHRcdHZmaW9fYXBfbWRldl9saW5rX3F1ZXVlKG1hdHJpeF9tZGV2LCBxKTtcbkBAIC0yNDY0LDYgKzI0NzAsOCBAQCBpbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuIFxuIGVycl9yZW1vdmVfZ3JvdXA6XG4gXHRzeXNmc19yZW1vdmVfZ3JvdXAoXHUwMDI2YXBkZXYtXHUwMDNlZGV2aWNlLmtvYmosIFx1MDAyNnZmaW9fcXVldWVfYXR0cl9ncm91cCk7XG4rZXJyX3JlbGVhc2VfbG9ja3M6XG4rXHRyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3JfbWRldihtYXRyaXhfbWRldik7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0yNDk5LDEyICsyNTA3LDE1IEBAIHZvaWQgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcbiBcdC8qXG4gXHQgKiBJZiB0aGUgcXVldWUgaXMgbm90IGluIHRoZSBob3N0J3MgQVAgY29uZmlndXJhdGlvbiwgdGhlbiByZXNldHRpbmdcbiBcdCAqIGl0IHdpbGwgZmFpbCB3aXRoIHJlc3BvbnNlIGNvZGUgMDEsIChBUFFOIG5vdCB2YWxpZCk7IHNvLCBsZXQncyBtYWtlXG4tXHQgKiBzdXJlIGl0IGlzIGluIHRoZSBob3N0J3MgY29uZmlnLlxuK1x0ICogc3VyZSBpdCBpcyBpbiB0aGUgaG9zdCdzIGNvbmZpZy4gSWYgaXQgaXMgbm90LCB0aGVuIGZyZWUgdGhlIEtWTSBHSVNDXG4rXHQgKiByZXNvdXJjZXMuXG4gXHQgKi9cbiBcdGlmICh0ZXN0X2JpdF9pbnYoYXBpZCwgKHVuc2lnbmVkIGxvbmcgKiltYXRyaXhfZGV2LVx1MDAzZWluZm8uYXBtKSBcdTAwMjZcdTAwMjZcbiBcdCAgICB0ZXN0X2JpdF9pbnYoYXBxaSwgKHVuc2lnbmVkIGxvbmcgKiltYXRyaXhfZGV2LVx1MDAzZWluZm8uYXFtKSkge1xuIFx0XHR2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUocSk7XG4gXHRcdGZsdXNoX3dvcmsoXHUwMDI2cS1cdTAwM2VyZXNldF93b3JrKTtcbitcdH0gZWxzZSB7XG4rXHRcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcbiBcdH1cbiBcbiBkb25lOlxuQEAgLTI1NTksMjQgKzI1NzAsMjggQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKmFxcmVtLFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICpjZHJlbSlcbiB7XG4tXHRpbnQgZG9faG90cGx1ZyA9IDA7XG4rXHRib29sIGRvX2hvdHBsdWcgPSBmYWxzZTtcbiBcbi1cdGlmICghYml0bWFwX2VtcHR5KGFwcmVtLCBBUF9ERVZJQ0VTKSkge1xuLVx0XHRkb19ob3RwbHVnIHw9IGJpdG1hcF9hbmRub3QobWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXBtLFxuLVx0XHRcdFx0XHQgICAgbWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXBtLFxuLVx0XHRcdFx0XHQgICAgYXByZW0sIEFQX0RFVklDRVMpO1xuK1x0aWYgKGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFwbSwgYXByZW0sIEFQX0RFVklDRVMpKSB7XG4rXHRcdGJpdG1hcF9hbmRub3QobWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXBtLFxuK1x0XHRcdCAgICAgIG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFwbSxcbitcdFx0XHQgICAgICBhcHJlbSwgQVBfREVWSUNFUyk7XG4rXHRcdGRvX2hvdHBsdWcgPSB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKCFiaXRtYXBfZW1wdHkoYXFyZW0sIEFQX0RPTUFJTlMpKSB7XG4tXHRcdGRvX2hvdHBsdWcgfD0gYml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hcW0sXG4tXHRcdFx0XHRcdCAgICBtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hcW0sXG4tXHRcdFx0XHRcdCAgICBhcXJlbSwgQVBfREVWSUNFUyk7XG4rXHRpZiAoYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXFtLCBhcXJlbSwgQVBfRE9NQUlOUykpIHtcbitcdFx0Yml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hcW0sXG4rXHRcdFx0ICAgICAgbWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXFtLFxuK1x0XHRcdCAgICAgIGFxcmVtLCBBUF9ET01BSU5TKTtcbitcdFx0ZG9faG90cGx1ZyA9IHRydWU7XG4gXHR9XG4gXG4tXHRpZiAoIWJpdG1hcF9lbXB0eShjZHJlbSwgQVBfRE9NQUlOUykpXG4tXHRcdGRvX2hvdHBsdWcgfD0gYml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hZG0sXG4tXHRcdFx0XHRcdCAgICBtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hZG0sXG4tXHRcdFx0XHRcdCAgICBjZHJlbSwgQVBfRE9NQUlOUyk7XG4rXHRpZiAoYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYWRtLCBjZHJlbSwgQVBfRE9NQUlOUykpIHtcbitcdFx0Yml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hZG0sXG4rXHRcdFx0ICAgICAgbWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYWRtLFxuK1x0XHRcdCAgICAgIGNkcmVtLCBBUF9ET01BSU5TKTtcbitcdFx0ZG9faG90cGx1ZyA9IHRydWU7XG4rXHR9XG4gXG4gXHRpZiAoZG9faG90cGx1ZylcbiBcdFx0dmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTtcbkBAIC0yNjAzLDI4ICsyNjE4LDM1IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlKHVuc2lnbmVkIGxvbmcgKmFwX3JlbW92ZSxcbiBcdERFQ0xBUkVfQklUTUFQKGFwcmVtLCBBUF9ERVZJQ0VTKTtcbiBcdERFQ0xBUkVfQklUTUFQKGFxcmVtLCBBUF9ET01BSU5TKTtcbiBcdERFQ0xBUkVfQklUTUFQKGNkcmVtLCBBUF9ET01BSU5TKTtcbi1cdGludCBkb19yZW1vdmUgPSAwO1xuK1x0aW50IGRvX3JlbW92ZTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4tXHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgbWRldnNfbG9jayBtdXN0IGJlIGhlbGQgdG8gYWNjZXNzIGZpZWxkcyB3aXRoaW4gbWF0cml4X21kZXYsXG4rXHRcdCAqIGFuZCBrdm0tXHUwMDNlbG9jayBtdXN0IGJlIHRha2VuIGJlZm9yZSBtZGV2c19sb2NrIHRvIHNhdGlzZnkgdGhlIGxvY2tcbitcdFx0ICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LlxuK1x0XHQgKi9cbitcdFx0aWYgKG1hdHJpeF9tZGV2LVx1MDAzZWt2bSlcbitcdFx0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuIFxuLVx0XHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZChhcHJlbSwgYXBfcmVtb3ZlLFxuLVx0XHRcdFx0XHQgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcG0sXG4tXHRcdFx0XHRcdCAgQVBfREVWSUNFUyk7XG4rXHRcdGRvX3JlbW92ZSA9IGJpdG1hcF9hbmQoYXByZW0sIGFwX3JlbW92ZSxcbitcdFx0XHRcdCAgICAgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXBtLFxuK1x0XHRcdFx0ICAgICAgIEFQX0RFVklDRVMpO1xuIFx0XHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZChhcXJlbSwgYXFfcmVtb3ZlLFxuIFx0XHRcdFx0XHQgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcW0sXG4gXHRcdFx0XHRcdCAgQVBfRE9NQUlOUyk7XG4tXHRcdGRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kbm90KGNkcmVtLCBjZF9yZW1vdmUsXG4tXHRcdFx0XHRcdCAgICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFkbSxcbi1cdFx0XHRcdFx0ICAgICBBUF9ET01BSU5TKTtcbitcdFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoY2RyZW0sIGNkX3JlbW92ZSxcbitcdFx0XHRcdFx0bWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFkbSxcbitcdFx0XHRcdFx0QVBfRE9NQUlOUyk7XG4gXG4gXHRcdGlmIChkb19yZW1vdmUpXG4gXHRcdFx0dmZpb19hcF9tZGV2X2hvdF91bnBsdWdfY2ZnKG1hdHJpeF9tZGV2LCBhcHJlbSwgYXFyZW0sXG4gXHRcdFx0XHRcdFx0ICAgIGNkcmVtKTtcbiBcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4rXHRcdGlmIChtYXRyaXhfbWRldi1cdTAwM2Vrdm0pXG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbiBcdH1cbiB9XG4gXG5AQCAtMjc0OSwxMiArMjc3MSwyMCBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX2FkZCh1bnNpZ25lZCBsb25nICphcG1fYWRkLCB1bnNpZ25lZCBsb25nICphcW1fYWRkLFxuIFx0dmZpb19hcF9maWx0ZXJfYXBpZF9ieV9xdHlwZShhcG1fYWRkLCBhcW1fYWRkKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCBpbiBvcmRlciB0byBhY2Nlc3MgZmllbGRzXG4rXHRcdCAqIHdpdGhpbiBtYXRyaXhfbWRldlxuK1x0XHQgKi9cbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuK1xuIFx0XHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVx1MDAzZWFwbV9hZGQsXG4gXHRcdFx0ICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFwbSwgYXBtX2FkZCwgQVBfREVWSUNFUyk7XG4gXHRcdGJpdG1hcF9hbmQobWF0cml4X21kZXYtXHUwMDNlYXFtX2FkZCxcbiBcdFx0XHQgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXFtLCBhcW1fYWRkLCBBUF9ET01BSU5TKTtcbiBcdFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cdTAwM2VhZG1fYWRkLFxuIFx0XHRcdCAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hZG0sIGFkbV9hZGQsIEFQX0RFVklDRVMpO1xuK1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiBcdH1cbiB9XG4gXG5AQCAtMjgyMSw4ICsyODUxLDcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuIFx0REVDTEFSRV9CSVRNQVAoYXBtX2ZpbHRlcmVkLCBBUF9ERVZJQ0VTKTtcbiBcdGJvb2wgZmlsdGVyX2RvbWFpbnMsIGZpbHRlcl9hZGFwdGVycywgZmlsdGVyX2Nkb21zLCBkb19ob3RwbHVnID0gZmFsc2U7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbi1cdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbitcdGJpdG1hcF96ZXJvKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XG4gXG4gXHRmaWx0ZXJfYWRhcHRlcnMgPSBiaXRtYXBfaW50ZXJzZWN0cyhtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXBtLFxuIFx0XHRcdFx0XHQgICAgbWF0cml4X21kZXYtXHUwMDNlYXBtX2FkZCwgQVBfREVWSUNFUyk7XG5AQCAtMjg0MSw5ICsyODcwLDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuIFx0XHR2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpO1xuIFxuIFx0cmVzZXRfcXVldWVzX2Zvcl9hcGlkcyhtYXRyaXhfbWRldiwgYXBtX2ZpbHRlcmVkKTtcbi1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbiB9XG4gXG4gdm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXG5AQCAtMjg1NCwxNSArMjg4MCwyOSBAQCB2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbyxcbiBcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgbWRldnNfbG9jayBtdXN0IGJlIGhlbGQgdG8gYWNjZXNzIGZpZWxkcyB3aXRoaW4gbWF0cml4X21kZXYsXG4rXHRcdCAqIGFuZCBrdm0tXHUwMDNlbG9jayBtdXN0IGJlIHRha2VuIGJlZm9yZSBtZGV2c19sb2NrIHRvIHNhdGlzZnkgdGhlIGxvY2tcbitcdFx0ICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LlxuK1x0XHQgKi9cbitcdFx0aWYgKG1hdHJpeF9tZGV2LVx1MDAzZWt2bSlcbitcdFx0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuK1xuIFx0XHRpZiAoYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LVx1MDAzZWFwbV9hZGQsIEFQX0RFVklDRVMpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LVx1MDAzZWFxbV9hZGQsIEFQX0RPTUFJTlMpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LVx1MDAzZWFkbV9hZGQsIEFQX0RPTUFJTlMpKVxuLVx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdGdvdG8gZG9fdW5sb2NrO1xuIFxuIFx0XHR2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKG1hdHJpeF9tZGV2KTtcbiBcdFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVx1MDAzZWFwbV9hZGQsIDAsIEFQX0RFVklDRVMpO1xuIFx0XHRiaXRtYXBfY2xlYXIobWF0cml4X21kZXYtXHUwMDNlYXFtX2FkZCwgMCwgQVBfRE9NQUlOUyk7XG4gXHRcdGJpdG1hcF9jbGVhcihtYXRyaXhfbWRldi1cdTAwM2VhZG1fYWRkLCAwLCBBUF9ET01BSU5TKTtcbitcbitkb191bmxvY2s6XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuK1x0XHRpZiAobWF0cml4X21kZXYtXHUwMDNla3ZtKVxuK1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4gXHR9XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMToyOC4xMzI2OTAzMDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDA4Nzc2MzUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipWRklPIEFQIERyaXZlciBVcGRhdGUgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGZvciBgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jYC4gVGhpcyBpcyB0aGUgVkZJTyBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUncyBBZGp1bmN0IFByb2Nlc3NvciAoQVApLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQncyBkZWFsaW5nIHdpdGggbG9ja2luZyBjaGFuZ2VzLiBUaGV5J3JlIHJlbmFtaW5nIGBtZGV2c19sb2NrYCB0byBgZ3Vlc3RzX2xvY2tgIGluIGB2ZmlvX2FwX21kZXZfcHJvYmVgLCBhZGRpbmcgbG9ja2RlcCBhc3NlcnRpb25zLCBhbmQgdXBkYXRpbmcgbG9jayB1c2FnZSBpbiBzZXZlcmFsIGZ1bmN0aW9ucyBsaWtlIGBzdGF0dXNfc2hvd2AsIGB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWVgLCBhbmQgYHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWVgLiBUaGVyZSBhcmUgYWxzbyBtb2RpZmljYXRpb25zIHRvIGhhbmRsZSBob3RwbHVnL3VucGx1ZyBjb25maWd1cmF0aW9ucyAoYHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZ2AsIGB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZWAsIGB2ZmlvX2FwX21kZXZfY2ZnX2FkZGAsIGB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnYCkgYW5kIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgIHdpdGggY2FyZWZ1bCBsb2NraW5nIGNvbnNpZGVyYXRpb25zLCB3aGljaCBpcyBnb29kLiBUaGV5J3JlIG1ha2luZyBhIGxvdCBvZiBjaGFuZ2VzIHRvIGVuc3VyZSBwcm9wZXIgbG9ja2luZy5cblxuQnV0IHRoaXMgcmFpc2VzIGEgcXVlc3Rpb246IGlzIHRoaXMgZHJpdmVyIHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50PyBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9uZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuIEl0J3MgYW4gczM5MC1zcGVjaWZpYyBkcml2ZXIsIHNvIEkgbmVlZCB0byB0aGluayBhYm91dCBpZiB0aGUgQVAgaGFyZHdhcmUgaXMgZW11bGF0ZWQuIFRoZSBjb2RlIHBhdGggaXMgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBpZiBpdCdzIGZ1enplZCBpbiBzdGFuZGFyZCBRRU1VLiBTeXprYWxsZXIgc3VwcG9ydHMgczM5MHgsIHNvIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgaXMgdGVsbGluZyBtZSB0byBjb25zaWRlciBpZiB0aGUgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBEb2VzIFFFTVUgZW11bGF0ZSB0aGUgczM5MHggQVAgaGFyZHdhcmUgaXRzZWxmPyBUaGlzIGRyaXZlciBpcyBgdmZpby1hcGAsIHdoaWNoIGlzIHBhc3MtdGhyb3VnaC4gSXMgdGhlIEFQIGhhcmR3YXJlIGVtdWxhdGVkPyBJIG5lZWQgdG8ga25vdyBpZiBRRU1VIHN1cHBvcnRzIFZGSU8gQVAgKmVtdWxhdGlvbiogb3IganVzdCBwYXNzLXRocm91Z2guIEkgbmVlZCB0byBzZWFyY2ggZm9yIGB2ZmlvX2FwX21kZXZfcHJvYmVgIG9yIGV4YW1pbmUgYHZmaW9fYXBfb3BzLmNgIGFuZCBgdmZpb19hcF9kcnYuY2AgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gVkZJTyBBUCBpcyBtZWFudCBmb3IgdGhlICpob3N0KiwgYnV0IGl04oCZcyBhbiBtZGV2IGRyaXZlciwgc28gdGhlIHJlYWwgcXVlc3Rpb24gaXMgaG93IHRvIGNyZWF0ZSBtZGV2IGRldmljZXMgd2l0aG91dCBwaHlzaWNhbCBBUCBoYXJkd2FyZS4gVGhpcyBpcyBrZXkuIFRoZSBsb2NraW5nIGNoYW5nZXMgYXJlIGltcG9ydGFudCwgYnV0IGlmIHRoZSBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUsIHRoZW4gdGhlIGxvY2tpbmcgYmVjb21lcyBtb290LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiByZWFjaCB0aGF0IGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MzgsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMTozOC4yMjA0NTcyODRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2OTAzMTcyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX2FwX21kZXZfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTU4PXN0YXRpYyBzdHJ1Y3QgYXBfZHJpdmVyIHZmaW9fYXBfZHJ2ID0ge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo1OTpcXHQucHJvYmUgPSB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTYwLVxcdC5yZW1vdmUgPSB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTc3Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWRldl9pbml0X2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzg5LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo3OTA6c3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03OTEte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNzg9c3RhdGljIHN0cnVjdCBtZGV2X2RyaXZlciB2ZmlvX2FwX21hdHJpeF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM4Ni1cXHR9LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMzg3OlxcdC5wcm9iZSA9IHZmaW9fYXBfbWRldl9wcm9iZSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM4OC1cXHQucmVtb3ZlID0gdmZpb19hcF9tZGV2X3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNDE0PXZvaWQgdmZpb19hcF9tZGV2X3VucmVnaXN0ZXIodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDE5LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNDIwOmludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0MjEte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaD0xNTY9dm9pZCB2ZmlvX2FwX21kZXZfdW5yZWdpc3Rlcih2b2lkKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE1Ny1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE1ODppbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKnF1ZXVlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE1OS12b2lkIHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqcXVldWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMTo0MC4xODk0OTQ3MjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDk1MDM1Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIHZmaW9fYXAgYW5kIG1kZXYgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBgdmZpb19hcGAgYW5kIG1kZXYgYXJlIGludGVyYWN0aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgZHJpdmVyIG11c3QgcmVnaXN0ZXIgaXRzZWxmIHNvbWVob3cgYXMgYW4gbWRldiBkcml2ZXIuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIG1kZXYtcmVsYXRlZCBvcGVyYXRpb25zIG11c3QgYmUgaGFuZGxlZCB3aXRoaW4gdGhlIGB2ZmlvX2FwX21kZXZfcHJvYmVgIGZ1bmN0aW9uLCB0aGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UsIGVzcGVjaWFsbHkgYXMgdGhhdCdzIHdoYXQncyBjYWxsZWQgd2hlbiBhbiBtZGV2IGRldmljZSBpcyBjcmVhdGVkLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSAqY3JlYXRlKiBhbiBtZGV2IGRldmljZSBmb3IgdGhlIGB2ZmlvX2FwYCBkcml2ZXI/IFRoYXQncyB0aGUgcmVhbCBjcnV4IG9mIHRoZSBpc3N1ZSBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gVG8gZ2V0IHRoZSBkZXRhaWxzLCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmNgIGFuZCBzZWUgZXhhY3RseSBob3cgdGhleSdyZSByZWdpc3RlcmluZyB0aGUgbWRldiBwYXJlbnQuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgcG90ZW50aWFsIHByb2JsZW0pIGxpa2VseSByZXNpZGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY3MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIxOjQ2LjY4NDUzNDMyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDE5MTYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGV2X3JlZ2lzdGVyX3BhcmVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjM5MT1pbnQgdmZpb19hcF9tZGV2X3JlZ2lzdGVyKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQwMS1cXHRtYXRyaXhfZGV2LVxcdTAwM2VtZGV2X3R5cGVzID0gXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfdHlwZTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjQwMjpcXHRyZXQgPSBtZGV2X3JlZ2lzdGVyX3BhcmVudChcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlcGFyZW50LCBcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZGV2aWNlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDAzLVxcdFxcdFxcdFxcdCAgIFxcdTAwMjZ2ZmlvX2FwX21hdHJpeF9kcml2ZXIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIxOjQ2LjczNDczMTYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxMzU3MTQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIFZGSU8tQVAgRGV2aWNlIFJlZ2lzdHJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGB2ZmlvX2FwX21kZXZfcmVnaXN0ZXJgIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGhlcmUsIGFuZCBpdCdzIGNhbGxpbmcgYG1kZXZfcmVnaXN0ZXJfcGFyZW50YC4gVGhhdCdzIHRoZSBjb3JlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLCByaWdodD8gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdHJpZ2dlci4gSXMgYHZmaW9fYXBfbWRldl9yZWdpc3RlcmAgZXhlY3V0ZWQgYXV0b21hdGljYWxseSB3aGVuZXZlciB0aGUgbW9kdWxlIGxvYWRzLCBvciBpcyB0aGVyZSBhIGRlcGVuZGVuY3kgb24gdGhlIGFjdHVhbCBwcmVzZW5jZSBvZiBBUCBoYXJkd2FyZT8gVGhlIGRpc3RpbmN0aW9uIGlzIGNyaXRpY2FsIGZvciBob3cgSSBhcmNoaXRlY3QgbXkgaW5pdGlhbGl6YXRpb24gYW5kIGVycm9yLWhhbmRsaW5nIHN0cmF0ZWdpZXMuIFRoaXMgZGV0ZXJtaW5lcyBpZiBJIGNhbiByZWx5IG9uIGl0cyBwcmVzZW5jZS4gSWYgaXQgaXMgb25seSBjYWxsZWQgb24gdGhlIHByZXNlbmNlIG9mIHRoZSBBUCBoYXJkd2FyZSwgdGhlbiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gaGFuZGxlIHRoZSBlZGdlIGNhc2Ugd2hlcmUgdGhlIG1vZHVsZSBsb2FkcyBidXQgdGhlIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50LiBBbmQgY29udmVyc2VseSwgaWYgaXQgaXMgdW5jb25kaXRpb25hbCwgaG93IGNhbiBJIGRldGVjdCB0aGF0IHRoZSBoYXJkd2FyZSAqaXMqIHByZXNlbnQsIGlmIG5lY2Vzc2FyeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIHByZXBhcmVkIGZvciBhbGwgc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTc1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjE6NTAuNjQ4MzA1OTY5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjEwODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fYXBfbWRldl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9MTY3PXN0YXRpYyBpbnQgX19pbml0IHZmaW9fYXBfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE4OC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTg5OlxcdHJldCA9IHZmaW9fYXBfbWRldl9yZWdpc3RlcigpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xOTAtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNzg9c3RhdGljIHN0cnVjdCBtZGV2X2RyaXZlciB2ZmlvX2FwX21hdHJpeF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM5MC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjM5MTppbnQgdmZpb19hcF9tZGV2X3JlZ2lzdGVyKHZvaWQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzOTIte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaD0xNDM9c3RydWN0IHZmaW9fYXBfcXVldWUge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNTQtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoxNTU6aW50IHZmaW9fYXBfbWRldl9yZWdpc3Rlcih2b2lkKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE1Ni12b2lkIHZmaW9fYXBfbWRldl91bnJlZ2lzdGVyKHZvaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMTo1MC42OTc1MjE5MDdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDAxOTAwOTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIFZGSU8tQVAgRHJpdmVyIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBWRklPLUFQIGRyaXZlci4gTGV0J3Mgc3RhcnQgd2l0aCBgdmZpb19hcF9pbml0YCwgd2hpY2ggSSBrbm93IHJlc2lkZXMgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGhvb2tzIGl0c2VsZiBpbnRvIHRoZSBzeXN0ZW0sIHJlZ2lzdGVycyB3aXRoIHRoZSBWRklPIGNvcmUsIGFuZCBzcGVjaWZpY2FsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBBUCAoQWNjZWxlcmF0b3IgUHJvY2VzcykgaGFyZHdhcmUgb24gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIHRoZSBkZXZpY2UgcHJvYmluZywgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kIGFueSBwb3RlbnRpYWwgcG93ZXIgbWFuYWdlbWVudCByZWxhdGVkIGluaXRpYWxpc2F0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBkcml2ZXIgc2V0cyB1cCB0aGUgbmVjZXNzYXJ5IHN0cnVjdHVyZXMgZm9yIG1hbmFnaW5nIHRoZSBBUCBkZXZpY2VzIGFuZCB0aGVpciBhc3NvY2lhdGVkIERNQSBtYXBwaW5ncyBmb3IgSU9NTVVzLiBJJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IGl0IGhhbmRsZXMgZXJyb3IgY29uZGl0aW9ucyBhbmQgaG90cGx1ZyBzY2VuYXJpb3MgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBMZXQncyBzZWUgaG93IHRoZXkndmUgaGFuZGxlZCB0aGUgY29tcGxleGl0aWVzIG9mIEFQIGRldmljZSBhY2Nlc3MgYW5kIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLiBUaGlzIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBWRklPLUFQIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBjcnlwdG8gaGFyZHdhcmUgYW5kIGVuYWJsZXMgdXNlcnNwYWNlIGFjY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg3OCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIxOjU0LjY5OTQyNTgzNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzM2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYwOlxcdFxcbiAxNjE6XFx0XFx0ZGVidWdfcmVnaXN0ZXJfdmlldyh2ZmlvX2FwX2RiZl9pbmZvLCBcXHUwMDI2ZGVidWdfc3ByaW50Zl92aWV3KTtcXG4gMTYyOlxcdFxcdGRlYnVnX3NldF9sZXZlbCh2ZmlvX2FwX2RiZl9pbmZvLCBEQkZfV0FSTik7XFxuIDE2MzpcXHRcXG4gMTY0OlxcdFxcdHJldHVybiAwO1xcbiAxNjU6XFx0fVxcbiAxNjY6XFx0XFxuIDE2NzpcXHRzdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcXG4gMTY4OlxcdHtcXG4gMTY5OlxcdFxcdGludCByZXQ7XFxuIDE3MDpcXHRcXG4gMTcxOlxcdFxcdHJldCA9IHZmaW9fYXBfZGJmX2luZm9faW5pdCgpO1xcbiAxNzI6XFx0XFx0aWYgKHJldClcXG4gMTczOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdC8qIElmIHRoZXJlIGFyZSBubyBBUCBpbnN0cnVjdGlvbnMsIHRoZXJlIGlzIG5vdGhpbmcgdG8gcGFzcyB0aHJvdWdoLiAqL1xcbiAxNzY6XFx0XFx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpXFxuIDE3NzpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMTc4OlxcdFxcbiAxNzk6XFx0XFx0cmV0ID0gdmZpb19hcF9tYXRyaXhfZGV2X2NyZWF0ZSgpO1xcbiAxODA6XFx0XFx0aWYgKHJldClcXG4gMTgxOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE4MjpcXHRcXG4gMTgzOlxcdFxcdHJldCA9IGFwX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2dmZpb19hcF9kcnYsIFRISVNfTU9EVUxFLCBWRklPX0FQX0RSVl9OQU1FKTtcXG4gMTg0OlxcdFxcdGlmIChyZXQpIHtcXG4gMTg1OlxcdFxcdFxcdHZmaW9fYXBfbWF0cml4X2Rldl9kZXN0cm95KCk7XFxuIDE4NjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxODc6XFx0XFx0fVxcbiAxODg6XFx0XFxuIDE4OTpcXHRcXHRyZXQgPSB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIoKTtcXG4gMTkwOlxcdFxcdGlmIChyZXQpIHtcXG4gMTkxOlxcdFxcdFxcdGFwX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZ2ZmlvX2FwX2Rydik7XFxuIDE5MjpcXHRcXHRcXHR2ZmlvX2FwX21hdHJpeF9kZXZfZGVzdHJveSgpO1xcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxOTU6XFx0XFx0fVxcbiAxOTY6XFx0XFxuIDE5NzpcXHRcXHRyZXR1cm4gMDtcXG4gMTk4OlxcdH1cXG4gMTk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMTo1NC42OTk0OTY0MDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNTExNDE4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBIYXJkd2FyZSBDb21wYXRpYmlsaXR5IElzc3VlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYml0IG9mIGNvZGU6IGBpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkgcmV0dXJuIC1FTk9ERVY7YCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkhtbSwgdGhpcyBsb29rcyBsaWtlIGEgY2hlY2sgZm9yIHNwZWNpZmljIGhhcmR3YXJlIGF2YWlsYWJpbGl0eS5cIiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGd1YXJkaW5nIGFnYWluc3QgYXR0ZW1wdGluZyB0byBleGVjdXRlIGluc3RydWN0aW9ucyB0aGF0IG1pZ2h0IG5vdCBiZSBzdXBwb3J0ZWQuIFRoZSBxdWljayBleGl0IHdpdGggYC1FTk9ERVZgIChEZXZpY2UgTm90IEZvdW5kKSBpcyBhIGdvb2QgaW5kaWNhdGlvbiBvZiB0aGF0LlxuXG5Ob3csIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKWAgZnVuY3Rpb24gd2lsbCBhY3R1YWxseSAqcmV0dXJuIHRydWUqIGluIG15IFFFTVUgZW52aXJvbm1lbnQuIFFFTVUncyBlbXVsYXRlZCBoYXJkd2FyZSBpc24ndCBhbHdheXMgYSBwZXJmZWN0IG1hdGNoIGZvciByZWFsIGhhcmR3YXJlLCBhbmQgdGhhdCdzIHRoZSBjcnVjaWFsIHF1ZXN0aW9uLiBJIG5lZWQgdG8gZGlnIGludG8gd2hhdCBleGFjdGx5IGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgIGlzICpkb2luZyogdW5kZXIgdGhlIGhvb2QuIERvZXMgaXQgY2hlY2sgZm9yIGEgc3BlY2lmaWMgQ1BVIGZlYXR1cmUgZmxhZz8gSXMgaXQgcmVhZGluZyBzb21lIG1vZGVsLXNwZWNpZmljIHJlZ2lzdGVyPyBJcyBpdCBwcm9iaW5nIGZvciBhIGNlcnRhaW4gaW5zdHJ1Y3Rpb24gb3Bjb2RlPyBVbmRlcnN0YW5kaW5nICpob3cqIHRoaXMgY2hlY2sgd29ya3MgaXMgYWJzb2x1dGVseSBjcml0aWNhbCB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIGNvZGUgd2lsbCBydW4gY29ycmVjdGx5IHdpdGhpbiB0aGUgZW11bGF0ZWQgY29udGV4dC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZnVuY3Rpb24gYW5kIHNlZSB3aGF0J3MgcmVhbGx5IGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc0OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjE6NTguMzM0NjEzNjEyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzUyNDI5NTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFwX2luc3RydWN0aW9uc19hdmFpbGFibGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmg9NzI9dW5pb24gYXBfcXVldWVfc3RhdHVzX3JlZyB7XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaC04MC0vKipcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaDo4MTogKiBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkgLSBUZXN0IGlmIEFQIGluc3RydWN0aW9ucyBhcmUgYXZhaWxhYmxlLlxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oLTgyLSAqXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaC04NC0gKi9cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaDo4NTpzdGF0aWMgaW5saW5lIGJvb2wgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSh2b2lkKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oLTg2LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMTA1PXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X2NyeXB0byhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE1MS1cXHRjYXNlIEtWTV9TMzkwX1ZNX0NSWVBUT19FTkFCTEVfQVBJRTpcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTE1MjpcXHRcXHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTUzLVxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTU4LVxcdGNhc2UgS1ZNX1MzOTBfVk1fQ1JZUFRPX0RJU0FCTEVfQVBJRTpcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTE1OTpcXHRcXHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTYwLVxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yMTAwPXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1faGFzX2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIxNTYtXFx0XFx0Y2FzZSBLVk1fUzM5MF9WTV9DUllQVE9fRElTQUJMRV9BUElFOlxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMTU3OlxcdFxcdFxcdHJldCA9IGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSA/IDAgOiAtRU5YSU87XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIxNTgtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzEwMT1zdGF0aWMgaW50IGt2bV9zMzkwX2FweGFfaW5zdGFsbGVkKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEwNC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzEwNTpcXHRpZiAoYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKSB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxMDYtXFx0XFx0aWYgKGFwX3FjaShcXHUwMDI2aW5mbykgPT0gMClcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jPTU5Mj1zdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTYwMC1cXHQvKiBWZXJpZnkgdGhhdCB0aGUgQVAgaW5zdHJ1Y3Rpb24gYXJlIGF2YWlsYWJsZSAqL1xcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjYwMTpcXHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSlcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy02MDItXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0yNTc4PXN0YXRpYyBpbnQgX19pbml0IGFwX21vZHVsZV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI1ODEtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNTgyOlxcdGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNTgzLVxcdFxcdHByX3dhcm4oXFxcIlRoZSBoYXJkd2FyZSBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBBUCBpbnN0cnVjdGlvbnNcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTE2Nz1zdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xNzUtXFx0LyogSWYgdGhlcmUgYXJlIG5vIEFQIGluc3RydWN0aW9ucywgdGhlcmUgaXMgbm90aGluZyB0byBwYXNzIHRocm91Z2guICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjE3NjpcXHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSlcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTc3LVxcdFxcdHJldHVybiAtRU5PREVWO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMjowMC4wODcwNDkwNDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NTExMTQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZWAqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGVgIHRoaW5nLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzIHdpdGggUy8zOTAgYXJjaGl0ZWN0dXJlIHNwZWNpZmljcywgaXMgdG8gY2hlY2sgdGhlIGhlYWRlciBmaWxlcy4gSSBmaWd1cmUgaXQncyBsaWtlbHkgZGVmaW5lZCB3aXRoaW4gdGhlIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaGAgZGlyZWN0b3J5IOKAkyB0aGF0J3Mgd2hlcmUgdGhlIGFyY2hpdGVjdHVyYWwgc3BlY2lmaWNzIGZvciB0aGUgQWNjZXNzIFBhdGggZnVuY3Rpb25zIGFyZSB1c3VhbGx5IGRlY2xhcmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbWFjcm8sIGZ1bmN0aW9uLCBvciB2YXJpYWJsZSBtZWFucy4gSXMgaXQgYSBjb21waWxlLXRpbWUgY2hlY2s/IEEgcnVudGltZSBjYXBhYmlsaXR5IHRlc3Q/IFdoYXQga2luZCBvZiBBUCBpbnN0cnVjdGlvbnMgaXMgdGhpcyBtYWNybyBjb25jZXJuZWQgYWJvdXQ/IEtub3dpbmcgdGhpcyBpcyBpbXBvcnRhbnQgZm9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzIGFuZCBmb3IgdW5kZXJzdGFuZGluZyBhdmFpbGFibGUgaW5zdHJ1Y3Rpb25zLiBUaW1lIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgdG8gdGhlIGJvdHRvbSBvZiBpdC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNjksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMjowNC4yNTIxNjM4ODhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODA6XFx0LyoqXFxuICA4MTpcXHQgKiBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkgLSBUZXN0IGlmIEFQIGluc3RydWN0aW9ucyBhcmUgYXZhaWxhYmxlLlxcbiAgODI6XFx0ICpcXG4gIDgzOlxcdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgQVAgaW5zdHJ1Y3Rpb25zIGFyZSBpbnN0YWxsZWQsIG90aGVyd2lzZSBmYWxzZS5cXG4gIDg0OlxcdCAqL1xcbiAgODU6XFx0c3RhdGljIGlubGluZSBib29sIGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUodm9pZClcXG4gIDg2OlxcdHtcXG4gIDg3OlxcdFxcdHVuc2lnbmVkIGxvbmcgcmVnMCA9IEFQX01LUUlEKDAsIDApO1xcbiAgODg6XFx0XFx0dW5zaWduZWQgbG9uZyByZWcxID0gMDtcXG4gIDg5OlxcdFxcbiAgOTA6XFx0XFx0YXNtIHZvbGF0aWxlKFxcbiAgOTE6XFx0XFx0XFx0XFxcIlxcdGxnclxcdDAsJVtyZWcwXVxcXFxuXFxcIlxcdFxcdC8qIHFpZCBpbnRvIGdyMCAqL1xcbiAgOTI6XFx0XFx0XFx0XFxcIlxcdGxnaGlcXHQxLDBcXFxcblxcXCJcXHRcXHRcXHQvKiAwIGludG8gZ3IxICovXFxuICA5MzpcXHRcXHRcXHRcXFwiXFx0bGdoaVxcdDIsMFxcXFxuXFxcIlxcdFxcdFxcdC8qIDAgaW50byBncjIgKi9cXG4gIDk0OlxcdFxcdFxcdFxcXCJcXHQuaW5zblxcdHJyZSwweGIyYWYwMDAwLDAsMFxcXFxuXFxcIlxcdC8qIFBRQVAoVEFQUSkgKi9cXG4gIDk1OlxcdFxcdFxcdFxcXCIwOlxcdGxhXFx0JVtyZWcxXSwxXFxcXG5cXFwiXFx0XFx0LyogMSBpbnRvIHJlZzEgKi9cXG4gIDk2OlxcdFxcdFxcdFxcXCIxOlxcXFxuXFxcIlxcbiAgOTc6XFx0XFx0XFx0RVhfVEFCTEUoMGIsIDFiKVxcbiAgOTg6XFx0XFx0XFx0OiBbcmVnMV0gXFxcIitcXHUwMDI2ZFxcXCIgKHJlZzEpXFxuICA5OTpcXHRcXHRcXHQ6IFtyZWcwXSBcXFwiZFxcXCIgKHJlZzApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIyOjA0LjI1MjI1OTE1OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDEwMTUxOTk4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZlYXNpYmlsaXR5IG9mIEZ1enppbmcgdGhlIGB2ZmlvX2FwYCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBwb3NzaWJsZSB0byByZWFjaCBjZXJ0YWluIGNvZGUgcGF0aHMgd2l0aGluIHRoZSBgdmZpb19hcGAgZHJpdmVyIHVzaW5nIHN5emthbGxlciwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiB0aGUgczM5MHggYXJjaGl0ZWN0dXJlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyByZXZvbHZlcyBhcm91bmQgd2hldGhlciB0aGUgQVAgKEFkdmFuY2VkIFByb2Nlc3NvcikgaW5zdHJ1Y3Rpb25zIGFyZSBhY3R1YWxseSAqYXZhaWxhYmxlKiBpbiB0aGUgZW52aXJvbm1lbnRzIHdoZXJlIHN5emthbGxlciBpcyB0eXBpY2FsbHkgZGVwbG95ZWQuXG5cbkZpcnN0LCBJIG5lZWQgdG8ga25vdyBpZiB0aGUgYFBRQVBgIGluc3RydWN0aW9uLCB3aGljaCBpcyBjb3JlIHRvIEFQIGZ1bmN0aW9uYWxpdHksIGlzIGV2ZW4gZW11bGF0ZWQgYnkgUUVNVSBmb3IgczM5MHggZ3Vlc3RzLiBRRU1VICptaWdodCogZW11bGF0ZSBpdCBpZiBpdCdzIHJ1bm5pbmcgd2l0aCBLVk0gb24gYW4gczM5MHggaG9zdC4gQnV0IGlmIGl0J3MgaW4gVENHIG1vZGUgKHB1cmUgZW11bGF0aW9uKSwgcHJvYmFibHkgbm90LiBJIGtub3cgdGhhdCBzeXprYWxsZXIgcnVucyBzMzkweCBpbiBRRU1VIFRDRyBvbiB4ODZfNjQgaG9zdHMgYW5kIEtWTSBvbiBzMzkweCBob3N0cy5cblxuU2luY2UgdGhlIHByb21wdCBleHBsaWNpdGx5IG1lbnRpb25zIHNjZW5hcmlvcyB0aGF0IGFyZSAqaW1wb3NzaWJsZSogdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBJJ20gbm93IGhvbmluZyBpbiBvbiBBUCBoYXJkd2FyZSBlbXVsYXRpb24gaW4gUUVNVSBUQ0cgc3BlY2lmaWNhbGx5LiBUaGUgbW9yZSBJIHRoaW5rIGFib3V0IGl0LCBpdCdzIHZlcnkgdW5saWtlbHkgdGhhdCBRRU1VIFRDRyBlbXVsYXRlcyBBUCBoYXJkd2FyZSwgc2luY2UgdGhvc2UgYXJlIHNwZWNpYWxpemVkIG1haW5mcmFtZSBjcnlwdG8gY2FyZHMuXG5cbkkgY2FuJ3QgY2hlY2sgUUVNVSBzb3VyY2UgcmlnaHQgbm93LCBzbyBsZXQgbWUgcGl2b3QgYW5kIHNlZSBpZiB0aGUga2VybmVsIGl0c2VsZiBoYXMgc29mdHdhcmUgZW11bGF0b3JzIGZvciBBUC4gTm9wZSwgdGhhdCdzIGEgZGVhZCBlbmQuIEFQIGlzIGEgdHJ1ZSBoYXJkd2FyZSBmZWF0dXJlIG9mIElCTSBaIG1haW5mcmFtZXMuIFRoZW4gSSByZW1lbWJlciBgdmZpb19hcGAsIHdoaWNoIGlzICpmb3IqIHBhc3NpbmcgdGhyb3VnaCBBUCBkZXZpY2VzIHRvIEtWTSBndWVzdHMuIEl0IHJlZ2lzdGVycyBhcyBhbiBtZGV2IGRyaXZlciBpZiBpdCdzIGxvYWRlZC5cblxuVGhlIGNyaXRpY2FsIHBpZWNlIGhlcmU6IGNhbiB3ZSAqZXZlbiogY3JlYXRlIGFuIG1kZXYgZGV2aWNlIGZvciBgdmZpb19hcGAgaWYgdGhlcmUncyBubyBBUCBoYXJkd2FyZT8gTm8sIGJlY2F1c2UgYHZmaW9fYXBfaW5pdGAgcmV0dXJucyBgLUVOT0RFVmAgaWYgYCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgLiBUaGUgbW9kdWxlIHdvdWxkbid0IGV2ZW4gbG9hZC4gU28sIGRlZmluaXRlbHkgbm8gQVAgaW5zdHJ1Y3Rpb25zIGluIFFFTVUgVENHLiBBUCBpcyAqb25seSogYWNjZXNzaWJsZSB2aWEgS1ZNIHdoZW4gdGhlIGhvc3QgaGFzIHRoZSBoYXJkd2FyZSBhbmQgeW91IHVzZSBgdmZpb19hcGAgKG9yIGlmIHRoZSBob3N0IGtlcm5lbCBvZmZlcnMgQVAgdG8gdGhlIGd1ZXN0KS4gVGhvdWdoLCBzb21ldGltZXMgc3l6a2FsbGVyICpkb2VzKiBydW4gczM5MHggS1ZNIG9uIGFjdHVhbCBtYWluZnJhbWVzLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCByZWFjaGFiaWxpdHksIGlmIGl0IHdlcmUgdG8gcnVuIG9uIGEgczM5MHggTFBBUiBvciB6L1ZNIGd1ZXN0IChhY3RpbmcgYXMgdGhlIGhvc3QgZm9yIEtWTSkuIFRob3NlIG1pZ2h0IGhhdmUgcmVhbCBBUCBkZXZpY2VzLiBTbywgaXMgYHZmaW9fYXBgIGZ1enphYmxlPyBMZXQncyBjaGVjayB0aGUgY29kZSBjaGFuZ2VzLiBJJ20gbG9va2luZyBhdCBgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jYC5cblxuT2theSwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgYWxsIGRlZXBseSBpbnZvbHZlZCBpbiB0aGUgbWRldiBsaWZlY3ljbGUgYW5kIEFQIGJ1cyBjYWxsYmFja3M6IGB2ZmlvX2FwX21kZXZfcHJvYmVgLCBgdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZWAsIGBzdGF0dXNfc2hvd2AsIGB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWVgLCBgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZWAsIGB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19jZmdgLCBgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmVgLCBgdmZpb19hcF9tZGV2X2NmZ19hZGRgLCBgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZ2AsIGFuZCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYC5cblxuQ2FuIHN5emthbGxlciB0cmlnZ2VyIHRoZXNlPyBEZWZpbml0ZWx5LCBieSBpbnRlcmFjdGluZyB3aXRoIHN5c2ZzIHRvIGNyZWF0ZSBtZGV2IGRldmljZXMsIGFuZCBBUCBidXMgc2Nhbm5pbmcgKHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgb3IgaGFwcGVucyBhdXRvbWF0aWNhbGx5KS4gV2FpdCwgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWAgaXMgY2FsbGVkIHdoZW4gYW4gQVAgcXVldWUgZGV2aWNlIGlzIGJvdW5kIHRvIHRoZSBgdmZpb19hcGAgZHJpdmVyLiBUaGlzIHJlcXVpcmVzIGEgcXVldWUgZGV2aWNlLiBOb3csIGlzIGl0IHBvc3NpYmxlIHRvIGNyZWF0ZSBzdWNoIGEgZGV2aWNlIHZpYSBzb2Z0d2FyZT8gTGV0J3MgY2hlY2sgYGRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg4NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIyOjE4LjM1Mzc4MjU5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc2ODM1NzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmljZV9yZWdpc3Rlci4qYXBfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMjoxOC40MTE0ODg3M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDUyNTc2NTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdCwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBBUCBEZXZpY2UgQ3JlYXRpb24gUHJvY2Vzc2VzKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBBY2Nlc3MgUG9pbnQgKEFQKSBkZXZpY2VzIGFyZSBhY3R1YWxseSAqbWFkZSouIEl04oCZcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBxdWVzdGlvbiwgZXNwZWNpYWxseSB3aGVuIHlvdSBjb25zaWRlciB0aGUgbnVhbmNlcyBvZiBkaWZmZXJlbnQgbWFudWZhY3R1cmVycyBhbmQgdGhlIHZhcmlvdXMgY2hpcHNldHMgYW5kIGZpcm13YXJlIGludm9sdmVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBsZXZlbCBvZiBkZXRhaWwgYW0gSSBhaW1pbmcgZm9yIGhlcmU/IElzIHRoaXMgYSBoaWdoLWxldmVsIG92ZXJ2aWV3IG9mIHRoZSBtYW51ZmFjdHVyaW5nIHBpcGVsaW5lLCBvciBhcmUgd2UgZ2V0dGluZyBkb3duIGluIHRoZSB3ZWVkcyB3aXRoIHNwZWNpZmljIGNvbXBvbmVudCBzb3VyY2luZyBhbmQgdmFsaWRhdGlvbj8gXG5cbkknbGwgbmVlZCB0byBjb25zaWRlciB0aGlzLiBUaGlua2luZyBtb3JlLCBpdOKAmXMgbm90IGp1c3QgYWJvdXQgdGhlICpwaHlzaWNhbCogY3JlYXRpb24sIGVpdGhlci4gSXTigJlzIGFsc28gdGhlIGxvZ2ljYWwgYnVpbGQgcHJvY2Vzcy4gVGhlIGZpcm13YXJlIGZsYXNoaW5nLCB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uLCB0aGUgdGVzdGluZy4uLiBUaGF0IHdob2xlIGxpZmVjeWNsZSBmcm9tIHJhdyBzaWxpY29uIHRvIGEgZnVuY3Rpb25hbCwgbmV0d29yay1yZWFkeSBkZXZpY2UuIFdlIGNvdWxkIGdldCBpbnRvIHF1ZXN0aW9ucyBhcm91bmQgc3VwcGx5IGNoYWluIHNlY3VyaXR5LCB0b28g4oCTIG1ha2luZyBzdXJlIHRoZXJlIGFyZW7igJl0IGFueSBtYWxpY2lvdXMgY29tcG9uZW50cyBvciBiYWNrZG9vcnMgaW50cm9kdWNlZCBkdXJpbmcgcHJvZHVjdGlvbi5cblxuT2theSwgbXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIHRoZSBpbnF1aXJ5LiBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiBvbiB3aHkgdGhlIHByb21wdCBpcyBuZWVkZWQuIElzIHRoaXMgYSByZXNlYXJjaCBwcm9qZWN0PyBBbiBpbnZlc3RpZ2F0aW9uPyBBIGdlbmVyYWwgaW50ZXJlc3Q/IFJlZ2FyZGxlc3MsIGl0J3MgY2xlYXIgdGhlIHByb21wdCByZXF1aXJlcyB0aGF0IEkgZ2F0aGVyIGRhdGEgb24gQVAgZGV2aWNlIHByb2R1Y3Rpb24gbWV0aG9kcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMjoyMi40NjQwNjkwODVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTIyMTE5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcF9kZXZpY2VfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIyOjIyLjUwODE5OTU0M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjE5NzM2NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRoZSBjb2RlOlxuXG4qKkNoZWNraW5nIERldmljZSBDcmVhdGlvbiBpbiBhcF9idXMuYyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzOiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgcGFydGljdWxhciBkZXZpY2UgaXMgaW5pdGlhbGl6ZWQuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGFwX2J1cy5jYCwgYmVjYXVzZSB0aGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBkZXZpY2UgY3JlYXRpb24gYW5kIGJ1cy1zcGVjaWZpYyBzZXR1cCBoYXBwZW5zLiBJJ20gbG9va2luZyBmb3IgdGhlIGluc3RhbnRpYXRpb24gbG9naWMsIGFueSBhc3NvY2lhdGVkIHJlc291cmNlIGFsbG9jYXRpb24sIGFuZCwgY3J1Y2lhbGx5LCBob3cgdGhlIGRldmljZSBnZXRzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgc3lzdGVtLiBJIGV4cGVjdCB0byBmaW5kIGEgd2VsbC1kZWZpbmVkIGZ1bmN0aW9uIG9yIHNldCBvZiBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGFsbCBvZiB0aGlzLiBJJ2xsIGJlIHNjcnV0aW5pemluZyB0aGUgY29kZSBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgaW5jb3JyZWN0IHJlc291cmNlIGhhbmRsaW5nIChtZW1vcnkgbGVha3MgYXJlIGEgaHVnZSBuby1ubyEpLCBhbmQgYW55IGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIGZyYWdpbGUgb3IgcG9vcmx5IGRvY3VtZW50ZWQuIEknbGwgYWxzbyB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGJ1cy1zcGVjaWZpYyBxdWlya3MgYW5kIGFueSBjdXN0b20gY29uZmlndXJhdGlvbnMsIGlmIHRoZXkgZXhpc3QsIHRvIGNvbXBhcmUgdGhlbSB3aXRoIHRoZSBzdGFuZGFyZCBhcmNoaXRlY3R1cmUuIEFueSBub24tc3RhbmRhcmQgY29uZmlndXJhdGlvbnMgYXJlIGFsd2F5cyBhIHBvaW50IG9mIGludGVyZXN0LCBhcyB0aG9zZSBjYW4gb2Z0ZW4gYmUgdGhlIHNvdXJjZSBvZiBpc3N1ZXMgZG93biB0aGUgbGluZS4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIGRldmljZSBjcmVhdGlvbiBwcm9jZXNzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHdlbGwtZGVmaW5lZCBlcnJvciBjb2RlcyBhbmQgYW55IHNwZWNpZmljIHN0ZXBzIHRoZSBjb2RlIHRha2VzIHRvIGNsZWFuIHVwIHBhcnRpYWxseSBjcmVhdGVkIGRldmljZXMgaW4gY2FzZSBvZiBmYWlsdXJlLiBJIGFsc28gbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZGV2aWNlIGNyZWF0aW9uIGlzIHRocmVhZC1zYWZlLiBPdmVyYWxsLCBJIHdhbnQgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZGV2aWNlJ3MgbGlmZWN5Y2xlIGZyb20gYmlydGggdG8gcmVnaXN0cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDExMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIyOjI2LjcyNzkzOTE3M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc1MDg3OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2aWNlX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MTk4Mj1zdGF0aWMgaW5saW5lIHZvaWQgYXBfc2Nhbl9kb21haW5zKHN0cnVjdCBhcF9jYXJkICphYylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjA0MS1cXHRcXHRcXHQvKiByZWdpc3RlciBxdWV1ZSBkZXZpY2UgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjIwNDI6XFx0XFx0XFx0cmMgPSBkZXZpY2VfcmVnaXN0ZXIoZGV2KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTIwNDMtXFx0XFx0XFx0aWYgKHJjKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyMDQ0OlxcdFxcdFxcdFxcdEFQX0RCRl9XQVJOKFxcXCIlcyglZCwlZCkgZGV2aWNlX3JlZ2lzdGVyKCkgZmFpbGVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjA0NS1cXHRcXHRcXHRcXHRcXHQgICAgX19mdW5jX18sIGFjLVxcdTAwM2VpZCwgZG9tKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MjEzOT1zdGF0aWMgaW5saW5lIHZvaWQgYXBfc2Nhbl9hZGFwdGVyKGludCBhcClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjI3My1cXHRcXHQvKiBSZWdpc3RlciB0aGUgbmV3IGNhcmQgZGV2aWNlIHdpdGggQVAgYnVzICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyMjc0OlxcdFxcdHJjID0gZGV2aWNlX3JlZ2lzdGVyKGRldik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yMjc1LVxcdFxcdGlmIChyYykge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjI3NjpcXHRcXHRcXHRBUF9EQkZfV0FSTihcXFwiJXMoJWQpIGRldmljZV9yZWdpc3RlcigpIGZhaWxlZFxcXFxuXFxcIixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTIyNzctXFx0XFx0XFx0XFx0ICAgIF9fZnVuY19fLCBhcCk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jPTI1Nzg9c3RhdGljIGludCBfX2luaXQgYXBfbW9kdWxlX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjYyMi1cXHQvKiBDcmVhdGUgL3N5cy9kZXZpY2VzL2FwLiAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjYyMzpcXHRhcF9yb290X2RldmljZSA9IHJvb3RfZGV2aWNlX3JlZ2lzdGVyKFxcXCJhcFxcXCIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjYyNC1cXHRyYyA9IFBUUl9FUlJfT1JfWkVSTyhhcF9yb290X2RldmljZSk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9ODY9c3RhdGljIGludCB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtOTAtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjkxOlxcdHJvb3RfZGV2aWNlID0gcm9vdF9kZXZpY2VfcmVnaXN0ZXIoVkZJT19BUF9ST09UX05BTUUpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy05Mi1cXHRpZiAoSVNfRVJSKHJvb3RfZGV2aWNlKSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMjEtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjEyMjpcXHRyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWRldmljZSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTEyMy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmM9MzY2PXN0YXRpYyBpbnQgemNkbl9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jLTQxNi1cXHR9XFxuZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmM6NDE3OlxcdHJjID0gZGV2aWNlX3JlZ2lzdGVyKFxcdTAwMjZ6Y2RuZGV2LVxcdTAwM2VkZXZpY2UpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jLTQxOC1cXHRpZiAocmMpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjI6MjYuNzg1NDUzMDMxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTQ2MDA3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBBY2Nlc3MgUG9pbnQgRGV2aWNlIENyZWF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGVzZSBBY2Nlc3MgUG9pbnQgKEFQKSBkZXZpY2VzIGFyZSBhY3R1YWxseSBjcmVhdGVkLiBGcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLCBpdCBsb29rcyBsaWtlIGBhcF9zY2FuX2RvbWFpbnNgIGFuZCBgYXBfc2Nhbl9hZGFwdGVyYCBhcmUgdGhlIGtleSBjb21wb25lbnRzIGhlcmUsIGVzc2VudGlhbGx5IHNjYW5uaW5nIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHRvIGlkZW50aWZ5IGFuZCBicmluZyB0aGVzZSBBUCBkZXZpY2VzIGludG8gYmVpbmcuIFxuXG5CdXQgaGVyZSdzIGEgdGhvdWdodDogQ2FuIHdlIGJ5cGFzcyB0aGF0IGhhcmR3YXJlIGRldGVjdGlvbiBhbmQgKmluamVjdCogYW4gQVAgZGV2aWNlIGRpcmVjdGx5IHRocm91Z2ggc29mdHdhcmU/IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJ20gZ29pbmcgdG8gaW52ZXN0aWdhdGUgd2hldGhlciB0aGVyZSdzIGFueSBtZWNoYW5pc20gZm9yIHNvZnR3YXJlLWJhc2VkIGBhcF9kZXZpY2VgIGluamVjdGlvbiBhdCBhbGwuIElzIGl0IHB1cmVseSBhIGhhcmR3YXJlLWRyaXZlbiBwcm9jZXNzLCBvciBhcmUgdGhlcmUgaG9va3Mgb3IgdnVsbmVyYWJpbGl0aWVzIHdlIGNvdWxkIHBvdGVudGlhbGx5IGxldmVyYWdlPyBUaGF0J3MgdGhlIHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzYxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjI6MzEuMTgwMDU2OTk1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTk3OTQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcF9zY2FuX2FkYXB0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0xOTgyPXN0YXRpYyBpbmxpbmUgdm9pZCBhcF9zY2FuX2RvbWFpbnMoc3RydWN0IGFwX2NhcmQgKmFjKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yMTM4LSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjEzOTpzdGF0aWMgaW5saW5lIHZvaWQgYXBfc2Nhbl9hZGFwdGVyKGludCBhcClcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTIxNDAte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0yMzczPXN0YXRpYyBib29sIGFwX3NjYW5fYnVzKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTIzOTgtXFx0Zm9yIChhcCA9IDA7IGFwIFxcdTAwM2M9IGFwX21heF9hZGFwdGVyX2lkOyBhcCsrKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjM5OTpcXHRcXHRhcF9zY2FuX2FkYXB0ZXIoYXApO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQwMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjI6MzEuMjQwMDQyMjkzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5OTE1MTkxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBBUCBEZXZpY2UgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBBUCBkZXZpY2VzLCBhbmQgaGVyZSdzIG15IHRyYWluIG9mIHRob3VnaHQuIFdlIHN0YXJ0IHdpdGggYGFwX3NjYW5fYnVzYC4gVGhhdCdzIHRoZSBmdW5jdGlvbiB0aGF0J3Mgc3VwcG9zZWQgdG8gdXNlIHRob3NlIEFQIGluc3RydWN0aW9ucyDigJMgYGFwX3FjaWAsIGBhcF90YXBxYCwgdGhlIHdob2xlIHNoZWJhbmcg4oCTIHRvIGFjdHVhbGx5IGZpbmQgYW5kIGlkZW50aWZ5IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBvbiB0aGUgYnVzLiBNYWtlcyBzZW5zZSBzbyBmYXIuIElmIHRoZXJlICppc24ndCogYW55IGhhcmR3YXJlIHByZXNlbnQsIHRoZW4gbmF0dXJhbGx5LCBgYXBfc2Nhbl9idXNgIGlzbid0IGdvaW5nIHRvIGRldGVjdCBhbnl0aGluZy4gVGhlcmVmb3JlLCB3ZSB3b3VsZCBleHBlY3QgdGhhdCBpZiBpdCBmaW5kcyBub3RoaW5nLCBgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlYCB3aWxsIG5ldmVyIGdldCBjYWxsZWQgYmVjYXVzZSB0aGUgaGFyZHdhcmUgaGFzIG5vdCBiZWVuIGVudW1lcmF0ZWQuXG5cbkJ1dCB0aGVuLCBhIHNsaWdodCB3cmlua2xlIGVudGVycyB0aGUgcGljdHVyZS4gSSBuZWVkIHRvIGJlIHN1cmU7IG15IHJlY2FsbCBpcyBzb21ldGltZXMgZmF1bHR5LiAqV2FpdCosIGB2ZmlvX2FwX21kZXZfcHJvYmVgIGdldHMgY2FsbGVkIHdoZW4gYW4gbWRldiBpcyAqY3JlYXRlZCosIG5vdCBvbmx5IHdoZW4gdGhlIGhhcmR3YXJlIGlzIGVudW1lcmF0ZWQuIFRoaXMgbWVhbnMgdGhhdCBhbiBtZGV2IGNhbiBiZSBpbnN0YW50aWF0ZWQgcHJpb3IgdG8gdGhlIHBoeXNpY2FsIGJ1cyBiZWluZyBzY2FubmVkLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLi4uIGNhbiBhbiBtZGV2IGJlIGNyZWF0ZWQgZXZlbiBpZiB0aGVyZSBhcmUgKm5vKiBBUCBkZXZpY2VzIHRvIGFjdHVhbGx5IGJhY2sgaXQ/IElmIGl0IGNhbiwgd2UndmUgZ290IGEgcG90ZW50aWFsIGlzc3VlIHdpdGggaG93IHRoaW5ncyBhcmUgYmVpbmcgaGFuZGxlZC4gSSB0aGluayBJIG5lZWQgdG8gZGlnIGludG8gYHZmaW9fYXBfbWRldl9wcm9iZWAgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIHZhbGlkYXRpb24gdGhhdCBpcyBkb25lLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoYXQgcm91dGluZSBoYW5kbGVzIHRoZSBzY2VuYXJpbyB3aGVyZSB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBkb2Vzbid0IGV4aXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg3MCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMjozNy4yMzE1NjQxMjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3OTA6XFx0c3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KVxcbiA3OTE6XFx0e1xcbiA3OTI6XFx0XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcXG4gNzkzOlxcdFxcdGludCByZXQ7XFxuIDc5NDpcXHRcXG4gNzk1OlxcdFxcdG1hdHJpeF9tZGV2ID0gdmZpb19hbGxvY19kZXZpY2UoYXBfbWF0cml4X21kZXYsIHZkZXYsIFxcdTAwMjZtZGV2LVxcdTAwM2VkZXYsXFxuIDc5NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dmZpb19hcF9tYXRyaXhfZGV2X29wcyk7XFxuIDc5NzpcXHRcXHRpZiAoSVNfRVJSKG1hdHJpeF9tZGV2KSlcXG4gNzk4OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKG1hdHJpeF9tZGV2KTtcXG4gNzk5OlxcdFxcbiA4MDA6XFx0XFx0cmV0ID0gdmZpb19yZWdpc3Rlcl9lbXVsYXRlZF9pb21tdV9kZXYoXFx1MDAyNm1hdHJpeF9tZGV2LVxcdTAwM2V2ZGV2KTtcXG4gODAxOlxcdFxcdGlmIChyZXQpXFxuIDgwMjpcXHRcXHRcXHRnb3RvIGVycl9wdXRfdmRldjtcXG4gODAzOlxcdFxcdG1hdHJpeF9tZGV2LVxcdTAwM2VyZXFfdHJpZ2dlciA9IE5VTEw7XFxuIDgwNDpcXHRcXHRtYXRyaXhfbWRldi1cXHUwMDNlY2ZnX2NoZ190cmlnZ2VyID0gTlVMTDtcXG4gODA1OlxcdFxcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2bWRldi1cXHUwMDNlZGV2LCBtYXRyaXhfbWRldik7XFxuIDgwNjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VndWVzdHNfbG9jayk7XFxuIDgwNzpcXHRcXHRsaXN0X2FkZChcXHUwMDI2bWF0cml4X21kZXYtXFx1MDAzZW5vZGUsIFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2X2xpc3QpO1xcbiA4MDg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VndWVzdHNfbG9jayk7XFxuIDgwOTpcXHRcXHRyZXR1cm4gMDtcXG4gODEwOlxcdFxcbiA4MTE6XFx0ZXJyX3B1dF92ZGV2OlxcbiA4MTI6XFx0XFx0dmZpb19wdXRfZGV2aWNlKFxcdTAwMjZtYXRyaXhfbWRldi1cXHUwMDNldmRldik7XFxuIDgxMzpcXHRcXHRyZXR1cm4gcmV0O1xcbiA4MTQ6XFx0fVxcbiA4MTU6XFx0XFxuIDgxNjpcXHRzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfbGlua19xdWV1ZShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxcbiA4MTc6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxcbiA4MTg6XFx0e1xcbiA4MTk6XFx0XFx0aWYgKCFxIHx8IHZmaW9fYXBfbWRldl9nZXRfcXVldWUobWF0cml4X21kZXYsIHEtXFx1MDAzZWFwcW4pKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMjozNy4yMzE3MTM5NjhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE3NzE5Mjg4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHZmaW8tYXAgYW5kIGl0cyBJbnRlcmFjdGlvbiB3aXRoIHN5emthbGxlcioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgYHZmaW9fYXBgIG1vZHVsZSBhbmQgaG93IHN5emthbGxlciBtaWdodCBpbnRlcmFjdCB3aXRoIGl0LiBJJ3ZlIGdvdCBpdCwgYHZmaW9fYXBfbWRldl9wcm9iZWAgKmNhbiogYmUgY2FsbGVkIHdoZW4gYW4gbWRldiBpcyBjcmVhdGVkIHRocm91Z2ggc3lzZnMsIHRoYXQgbXVjaCBpcyBjbGVhci4gQnV0IGhhbmcgb24sIGB2ZmlvX2FwX21kZXZfcmVnaXN0ZXJgIGlzIG9ubHkgY2FsbGVkIGlmIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgIHJldHVybnMgdHJ1ZS4gTm93LCBpZiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgZmFsc2UsIHRoZSBtb2R1bGUgbG9hZGluZyBmYWlscyB3aXRoIGFuIGAtRU5PREVWYCBlcnJvci4gU28sIGJhc2ljYWxseSwgSSBjYW4ndCBldmVuIGdldCB0aGUgbW9kdWxlIGxvYWRlZCBpbiBhIFFFTVUgVENHIGVudmlyb25tZW50LCB3aGljaCBtYWtlcyBpdCB1c2VsZXNzIHRvIGV2ZW4gY29uc2lkZXIuXG5cbkJ1dCwgc3l6a2FsbGVyIHJ1bnMgb24gczM5MHggS1ZNLCByaWdodD8gQW5kIG9uIGFjdHVhbCBtYWluZnJhbWVzLCB5ZXM/IElmIHN5emthbGxlciBydW5zIG9uIHMzOTB4IEtWTSwgdGhlbiBpdCB3b3VsZCAqaGF2ZSogdG8gaGF2ZSBBUCBpbnN0cnVjdGlvbnMgYXZhaWxhYmxlLCBpZiB0aGUgaG9zdCBtYWNoaW5lIGhhcyBBUCBoYXJkd2FyZSBhbmQgS1ZNIGVuYWJsZXMgaXQuIFRoZSB0aGluZyBpcywgc3l6a2FsbGVyIGlzIGZ1enppbmcgdGhlICpob3N0KiBrZXJuZWwsIG9yIG1heWJlIGEgZ3Vlc3Qga2VybmVsIGFjdGluZyBhcyB0aGUgc3lzdGVtIHVuZGVyIHRlc3QuIFR5cGljYWxseSwgaXTigJlzIGZ1enppbmcgYSBndWVzdCwgc28gZG9lcyB0aGUgZ3Vlc3Qga2VybmVsIGhhdmUgQVAgaW5zdHJ1Y3Rpb25zIGlmIGl0J3MgcnVubmluZyBvbiBLVk0/IEl0IGRvZXMsIGlmIHRoZSBob3N0IHBhc3NlcyB0aGVtIHRocm91Z2guXG5cbkJ1dCBkb2VzIHRoZSBndWVzdCBoYXZlICphY3R1YWwqIEFQIGRldmljZXM/IE9ubHkgaWYgdGhlIGhvc3QgcGFzc2VzIHRoZW0gdGhyb3VnaC4gSG93ZXZlciwgc3l6a2FsbGVyIHR5cGljYWxseSBydW5zIGluIGEgZ2VuZXJpYyBWTSwgc28gdGhlcmUncyB1c3VhbGx5IG5vIHNwZWNpZmljIGhhcmR3YXJlIHBhc3NlZCB0aHJvdWdoLiBCdXQgZXZlbiB3aXRob3V0IHNwZWNpZmljIGRldmljZXMsIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgIG1pZ2h0IHN0aWxsIGJlIHRydWUgaWYgdGhlIGhvc3QgZW5hYmxlcyBBUCBpbnN0cnVjdGlvbnMgZm9yIHRoZSBndWVzdCwgd2hpY2ggaXQgZG9lcyBieSBkZWZhdWx0IGlmIHRoZSBob3N0IGhhcyB0aGVtLlxuXG5JZiBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCBpcyB0cnVlLCB0aGUgYHZmaW9fYXBgIG1vZHVsZSB3aWxsIGxvYWQuIEFuZCB0aGVuLCBzeXprYWxsZXIgKmNhbiogY3JlYXRlIG1kZXYgZGV2aWNlcyB2aWEgc3lzZnMsIGFuZCBgdmZpb19hcF9tZGV2X3Byb2JlYCBiZWNvbWVzIHJlYWNoYWJsZS4gV2hhdCBhYm91dCBgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlYD8gVGhhdCByZXF1aXJlcyBhbiBhY3R1YWwgQVAgcXVldWUgZGV2aWNlIHRvIGJlIGJvdW5kIHRvIHRoZSBgdmZpb19hcGAgZHJpdmVyLiBJZiB0aGVyZSBhcmUgbm8gQVAgZGV2aWNlcywgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWAgd29uJ3QgYmUgcmVhY2hlZC4gQnV0LCBgdmZpb19hcF9tZGV2X3Byb2JlYCwgYXMgd2VsbCBhcyBgdmZpb19hcF9tZGV2X2NmZ19hZGRgIGFuZCBgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmVgLCBjYW4gYmUgcmVhY2hlZCB2aWEgc3lzZnMgYXR0cmlidXRlcyBvZiB0aGUgbWRldiBkZXZpY2UuIEknbSBnb2luZyB0byBjaGVjayBpZiBgdmZpb19hcF9tZGV2X2NmZ19hZGRgIGNhbiBiZSByZWFjaGVkIHZpYSBzeXNmcyBuZXh0LCBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTA0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjI6NDkuMDAzNjQ2MTkzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTkwNjIyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19hcF9tZGV2X2NmZ19hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI2OTI9c3RhdGljIHZvaWQgdmZpb19hcF9maWx0ZXJfYXBpZF9ieV9xdHlwZSh1bnNpZ25lZCBsb25nICphcG0sIHVuc2lnbmVkIGxvbmcgKmFxbSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNzUwLS8qKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzUxOiAqIHZmaW9fYXBfbWRldl9jZmdfYWRkIC0gc3RvcmUgYml0bWFwcyBzcGVjaWZ5aW5nIHRoZSBhZGFwdGVycywgZG9tYWlucyBhbmRcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjc1Mi0gKlxcdFxcdFxcdCAgY29udHJvbCBkb21haW5zIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBob3N0J3NcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNzYyLSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzYzOnN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfYWRkKHVuc2lnbmVkIGxvbmcgKmFwbV9hZGQsIHVuc2lnbmVkIGxvbmcgKmFxbV9hZGQsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI3NjQtXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgKmFkbV9hZGQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjgwMj1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZChzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jb25maWdfaW5mbyxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yODIzLVxcdGlmIChkb19hZGQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4MjQ6XFx0XFx0dmZpb19hcF9tZGV2X2NmZ19hZGQoYXBtX2FkZCwgYXFtX2FkZCwgYWRtX2FkZCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MjUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMjo0OS4zNjI3MTQ0NDJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIyNzEzNzc1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYTpcblxuKipUcmFjaW5nIHRoZSBEZXZpY2UgQWRkaXRpb24gRmxvdyBpbiBWRklPLUFQKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIGRvd24gaG93IGEgbWVkaWF0ZWQgZGV2aWNlIChtZGV2KSBnZXRzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBWRklPLUFQIGZyYW1ld29yay4gSXQgbG9va3MgbGlrZSB0aGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgY29uZmlndXJhdGlvbiBwcm9jZXNzIGlzIGB2ZmlvX2FwX21kZXZfY2ZnX2FkZGAuIE5vdywgSSByZWNhbGwgdGhhdCBmdW5jdGlvbiBpcyBkaXJlY3RseSBjYWxsZWQgYnkgYHZmaW9fYXBfbWRldl9vbl9jZmdfYWRkYCwgdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhpcywgaW4gdHVybiwgaXMgaW52b2tlZCBmcm9tIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYC5cblxuUmlnaHQsIHRoYXQgY2FsbGJhY2ssIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgLCBpcyByZWdpc3RlcmVkIHdpdGggdGhlIEFQIGJ1cyBpdHNlbGYuIFRoYXQgbWVhbnMgd2hlbmV2ZXIgdGhlIGJ1cyBjb21wbGV0ZXMgYSBzY2FuLCB0aGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZC4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIGNvbXBsZXRlIGZsb3cgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIGJ1cyBmaW5pc2hlcyB0aGUgc2Nhbi4gVGhlcmVmb3JlLCB0byB1bmRlcnN0YW5kIHRoZSB3aG9sZSBwcm9jZXNzLCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAgYW5kIHNlZSB3aGF0IGl0IGRvZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVzIHNjYW4gdHJpZ2dlcnMgdGhlIHdob2xlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDc3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjI6NTMuNTg5ODU0OTJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDE0Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9NTg9c3RhdGljIHN0cnVjdCBhcF9kcml2ZXIgdmZpb19hcF9kcnYgPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtNjItXFx0Lm9uX2NvbmZpZ19jaGFuZ2VkID0gdmZpb19hcF9vbl9jZmdfY2hhbmdlZCxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6NjM6XFx0Lm9uX3NjYW5fY29tcGxldGUgPSB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTY0LVxcdC5pZHMgPSBhcF9xdWV1ZV9pZHMsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9Mjc2Mz1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX2FkZCh1bnNpZ25lZCBsb25nICphcG1fYWRkLCB1bnNpZ25lZCBsb25nICphcW1fYWRkLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI3OTYtICpcXHRcXHRcXHQgICAgIGNhbiBiZSBob3QgcGx1Z2dlZCBpbnRvIHRoZSBndWVzdCB3aGVuIHRoZSBBUCBidXNcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Mjc5NzogKlxcdFxcdFxcdCAgICAgc2NhbiBjb21wbGV0ZXMgKHNlZSB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjc5OC0gKlxcdFxcdFxcdCAgICAgZnVuY3Rpb24pLlxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI4NDk9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4NzQtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4NzU6dm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4NzYtXFx0XFx0XFx0ICAgICAgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpvbGRfY29uZmlnX2luZm8pXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE2Mz12b2lkIHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNjQtXFx0XFx0XFx0ICAgIHN0cnVjdCBhcF9jb25maWdfaW5mbyAqb2xkX2NvbmZpZ19pbmZvKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE2NTp2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE2Ni1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm9sZF9jb25maWdfaW5mbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIyOjUzLjYzNzI3Mzc0OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjQ2NDI0NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IG1lbnRhbCBnZWFycyBhcmUgdHVybmluZy4uLlxuXG4qKkFuYWx5emluZyBWRklPLUFQIFNjYW4gQ29tcGxldGlvbioqXG5cbkFscmlnaHQsIHNvIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIG9uY2UgdGhlIEFQIGJ1cyBoYXMgZmluaXNoZWQgYSBzY2FuLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIEksIHdpdGggdGhlIGhlbHAgb2Ygc3l6a2FsbGVyLCBzb21laG93IHRyaWdnZXIgdGhhdCBBUCBidXMgc2Nhbj8gSXQncyBhIGtleSBmdW5jdGlvbiwgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRvIGluZmx1ZW5jZSBpdHMgZXhlY3V0aW9uIGlzIGNyaXRpY2FsLiBMZXQncyBzZWUuLi4gQWgsIHllcywgSSByZWNhbGwgbm93LiBUaGVyZSdzIHRoYXQgc3lzZnMgYXR0cmlidXRlLCBzb21ldGhpbmcgbGlrZSBgL3N5cy9idXMvYXAvc2NhbnNgLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBleGFjdCBwYXRoLCBvZiBjb3Vyc2UsIGJ1dCB0aGF0J3MgbGlrZWx5IHRoZSBtZWNoYW5pc20gSSBuZWVkIHRvIG1hbmlwdWxhdGUuIE5vdyBsZXQncyBnbyBjaGVjayB0aGUgZmlsZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTUxMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIyOjU5Ljg4MzcwMTYyNloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM0OTEyMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXBfc2Nhbl9idXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0xMzU9TU9EVUxFX1BBUk1fREVTQyhtc2dwb29sX21pbl9pdGVtcywgXFxcIkFQIG1lc3NhZ2UgcG9vbCBtaW5pbWFsIGl0ZW1zXFxcIik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTEzOS0gKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE0MDpzdGF0aWMgYm9vbCBhcF9zY2FuX2J1cyh2b2lkKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE0MTpzdGF0aWMgYm9vbCBhcF9zY2FuX2J1c19yZXN1bHQ7IC8qIHJlc3VsdCBvZiBsYXN0IGFwX3NjYW5fYnVzKCkgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE0MjpzdGF0aWMgREVGSU5FX01VVEVYKGFwX3NjYW5fYnVzX211dGV4KTsgLyogbXV0ZXggYXBfc2Nhbl9idXMoKSBpbnZvY2F0aW9ucyAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTQzOnN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmFwX3NjYW5fYnVzX3Rhc2s7IC8qIHRocmVhZCBob2xkaW5nIHRoZSBzY2FuIG11dGV4ICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxNDQ6c3RhdGljIGF0b21pYzY0X3QgYXBfc2Nhbl9idXNfY291bnQ7IC8qIGNvdW50ZXIgYXBfc2Nhbl9idXMoKSBpbnZvY2F0aW9ucyAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTQ1OnN0YXRpYyBpbnQgYXBfc2Nhbl9idXNfdGltZSA9IEFQX0NPTkZJR19USU1FO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTQ2OnN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBhcF9zY2FuX2J1c190aW1lcjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE0NzpzdGF0aWMgdm9pZCBhcF9zY2FuX2J1c193cV9jYWxsYmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxNDg6c3RhdGljIERFQ0xBUkVfV09SSyhhcF9zY2FuX2J1c193b3JrLCBhcF9zY2FuX2J1c193cV9jYWxsYmFjayk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xNDktXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jPTgwMj1zdGF0aWMgdm9pZCBhcF9jaGVja19iaW5kaW5nc19jb21wbGV0ZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy04MDUtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzo4MDY6XFx0aWYgKGF0b21pYzY0X3JlYWQoXFx1MDAyNmFwX3NjYW5fYnVzX2NvdW50KSBcXHUwMDNlPSAxKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy04MDctXFx0XFx0YXBfY2FsY19ib3VuZF9hcHFucyhcXHUwMDI2YXBxbnMsIFxcdTAwMjZib3VuZCk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jPTExMTk9Ym9vbCBhcF9idXNfZm9yY2VfcmVzY2FuKHZvaWQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xMTIwLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjExMjE6XFx0dW5zaWduZWQgbG9uZyBzY2FuX2NvdW50ZXIgPSBhdG9taWM2NF9yZWFkKFxcdTAwMjZhcF9zY2FuX2J1c19jb3VudCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xMTIyLVxcdGJvb2wgcmMgPSBmYWxzZTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTEzNi1cXHQgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjExMzc6XFx0aWYgKG11dGV4X2lzX2xvY2tlZChcXHUwMDI2YXBfc2Nhbl9idXNfbXV0ZXgpKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxMTM4OlxcdFxcdGlmIChhcF9zY2FuX2J1c190YXNrID09IGN1cnJlbnQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xMTM5LVxcdFxcdFxcdGdvdG8gb3V0O1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xMTQyLVxcdC8qIFRyeSB0byBhY3F1aXJlIHRoZSBBUCBzY2FuIGJ1cyBtdXRleCAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTE0MzpcXHRpZiAobXV0ZXhfdHJ5bG9jayhcXHUwMDI2YXBfc2Nhbl9idXNfbXV0ZXgpKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xMTQ0LVxcdFxcdC8qIG11dGV4IGFjcXVpcmVkLCBydW4gdGhlIEFQIGJ1cyBzY2FuICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxMTQ1OlxcdFxcdGFwX3NjYW5fYnVzX3Rhc2sgPSBjdXJyZW50O1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTE0NjpcXHRcXHRhcF9zY2FuX2J1c19yZXN1bHQgPSBhcF9zY2FuX2J1cygpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTE0NzpcXHRcXHRyYyA9IGFwX3NjYW5fYnVzX3Jlc3VsdDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjExNDg6XFx0XFx0YXBfc2Nhbl9idXNfdGFzayA9IE5VTEw7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxMTQ5OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2YXBfc2Nhbl9idXNfbXV0ZXgpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTE1MC1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTE1Ni1cXHQgKiBmb3IgdGhlIGxvY2sgd2hpY2ggbWVhbnMgdGhlIG90aGVyIHRhc2sgaGFzIGZpbmlzaGVkIGFuZFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTE1NzpcXHQgKiBzdG9yZWQgdGhlIHJlc3VsdCBpbiBhcF9zY2FuX2J1c19yZXN1bHQuXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xMTU4LVxcdCAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTE1OTpcXHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFxcdTAwMjZhcF9zY2FuX2J1c19tdXRleCkpIHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTExNjAtXFx0XFx0Lyogc29tZSBlcnJvciBvY2N1cnJlZCwgaWdub3JlIGFuZCBnbyBvdXQgKi9cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTE2Mi1cXHR9XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxMTYzOlxcdHJjID0gYXBfc2Nhbl9idXNfcmVzdWx0O1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTE2NDpcXHRtdXRleF91bmxvY2soXFx1MDAyNmFwX3NjYW5fYnVzX211dGV4KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTExNjUtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jPTEzOTg9c3RhdGljIHNzaXplX3QgY29uZmlnX3RpbWVfc2hvdyhjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywgY2hhciAqYnVmKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTM5OS17XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxNDAwOlxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVkXFxcXG5cXFwiLCBhcF9zY2FuX2J1c190aW1lKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTE0MDEtfVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0xNDAzPXN0YXRpYyBzc2l6ZV90IGNvbmZpZ190aW1lX3N0b3JlKGNvbnN0IHN0cnVjdCBidXNfdHlwZSAqYnVzLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xNDA5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTQxMDpcXHRhcF9zY2FuX2J1c190aW1lID0gdGltZTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE0MTE6XFx0bW9kX3RpbWVyKFxcdTAwMjZhcF9zY2FuX2J1c190aW1lciwgamlmZmllcyArIGFwX3NjYW5fYnVzX3RpbWUgKiBIWik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xNDEyLVxcdHJldHVybiBjb3VudDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MTcwNT1zdGF0aWMgc3NpemVfdCBzY2Fuc19zaG93KGNvbnN0IHN0cnVjdCBidXNfdHlwZSAqYnVzLCBjaGFyICpidWYpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xNzA2LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE3MDc6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWxsdVxcXFxuXFxcIiwgYXRvbWljNjRfcmVhZChcXHUwMDI2YXBfc2Nhbl9idXNfY291bnQpKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTE3MDgtfVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0xNzIyPXN0YXRpYyBzc2l6ZV90IGJpbmRpbmdzX3Nob3coY29uc3Qgc3RydWN0IGJ1c190eXBlICpidXMsIGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTcyNy1cXHRhcF9jYWxjX2JvdW5kX2FwcW5zKFxcdTAwMjZhcHFucywgXFx1MDAyNm4pO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTcyODpcXHRpZiAoYXRvbWljNjRfcmVhZChcXHUwMDI2YXBfc2Nhbl9idXNfY291bnQpIFxcdTAwM2U9IDEgXFx1MDAyNlxcdTAwMjYgbiA9PSBhcHFucylcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTE3MjktXFx0XFx0cmMgPSBzeXNmc19lbWl0KGJ1ZiwgXFxcIiV1LyV1IChjb21wbGV0ZSlcXFxcblxcXCIsIG4sIGFwcW5zKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MTk1OT1zdGF0aWMgaW5saW5lIHZvaWQgbm90aWZ5X3NjYW5fY29tcGxldGUodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTk2NS0vKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTk2NjogKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGFwX3NjYW5fYnVzKCkuXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xOTY3LSAqIFJlbW92ZSBjYXJkIGRldmljZSBhbmQgYXNzb2NpYXRlZCBxdWV1ZSBkZXZpY2VzLlxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0xOTY5PXN0YXRpYyBpbmxpbmUgdm9pZCBhcF9zY2FuX3JtX2NhcmRfZGV2X2FuZF9xdWV1ZV9kZXZzKHN0cnVjdCBhcF9jYXJkICphYylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTk3Ny0vKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTk3ODogKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGFwX3NjYW5fYnVzKCkuXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xOTc5LSAqIERvZXMgdGhlIHNjYW4gYnVzIGpvYiBmb3IgYWxsIHRoZSBkb21haW5zIHdpdGhpblxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0xOTgyPXN0YXRpYyBpbmxpbmUgdm9pZCBhcF9zY2FuX2RvbWFpbnMoc3RydWN0IGFwX2NhcmQgKmFjKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yMTM1LS8qXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyMTM2OiAqIEhlbHBlciBmdW5jdGlvbiBmb3IgYXBfc2Nhbl9idXMoKS5cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTIxMzctICogRG9lcyB0aGUgc2NhbiBidXMgam9iIGZvciB0aGUgZ2l2ZW4gYWRhcHRlciBpZC5cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MjM1MT1zdGF0aWMgYm9vbCBhcF9jb25maWdfaGFzX25ld19kb21zKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTIzNjYtLyoqXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyMzY3OiAqIGFwX3NjYW5fYnVzKCk6IFNjYW4gdGhlIEFQIGJ1cyBmb3IgbmV3IGRldmljZXNcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjIzNjg6ICogQWx3YXlzIHJ1biB1bmRlciBtdXRleCBhcF9zY2FuX2J1c19tdXRleCBwcm90ZWN0aW9uXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yMzY5LSAqIHdoaWNoIG5lZWRzIHRvIGdldCBsb2NrZWQvdW5sb2NrZWQgYnkgdGhlIGNhbGxlciFcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjM3Mi0gKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjIzNzM6c3RhdGljIGJvb2wgYXBfc2Nhbl9idXModm9pZClcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTIzNzQte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDE3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQxODpcXHRpZiAoYXRvbWljNjRfaW5jX3JldHVybihcXHUwMDI2YXBfc2Nhbl9idXNfY291bnQpID09IDEpIHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0MTktXFx0XFx0cHJfZGVidWcoXFxcImluaXQgc2NhbiBjb21wbGV0ZVxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0MjQtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDI1OlxcdG1vZF90aW1lcihcXHUwMDI2YXBfc2Nhbl9idXNfdGltZXIsIGppZmZpZXMgKyBhcF9zY2FuX2J1c190aW1lICogSFopO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQyNi1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQzMi0vKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQzMzogKiBDYWxsYmFjayBmb3IgdGhlIGFwX3NjYW5fYnVzX3RpbWVyXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDM0OiAqIFJ1bnMgcGVyaW9kaWNhbGx5LCB3b3JrcXVldWUgdGltZXIgKGFwX3NjYW5fYnVzX3RpbWUpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDM1LSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQzNjpzdGF0aWMgdm9pZCBhcF9zY2FuX2J1c190aW1lcl9jYWxsYmFjayhzdHJ1Y3QgdGltZXJfbGlzdCAqdW51c2VkKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQzNy17XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NDEtXFx0ICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDQyOlxcdHF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFxcdTAwMjZhcF9zY2FuX2J1c193b3JrKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NDMtfVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDQ1LS8qXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDQ2OiAqIENhbGxiYWNrIGZvciB0aGUgYXBfc2Nhbl9idXNfd29ya1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQ0Ny0gKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0NDg6c3RhdGljIHZvaWQgYXBfc2Nhbl9idXNfd3FfY2FsbGJhY2soc3RydWN0IHdvcmtfc3RydWN0ICp1bnVzZWQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDQ5LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NTAtXFx0LypcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0NTE6XFx0ICogVHJ5IHRvIGludm9rZSBhbiBhcF9zY2FuX2J1cygpLiBJZiB0aGUgbXV0ZXggYWNxdWlzaXRpb25cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NTItXFx0ICogZmFpbHMgdGhlcmUgaXMgY3VycmVudGx5IGFub3RoZXIgdGFzayBhbHJlYWR5IHJ1bm5pbmcgdGhlXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NTUtXFx0ICogdGhlIEFQIHNjYW4gYnVzIHRpbWVyIGlzIHJlLWFybWVkIHdoaWNoIHRyaWdnZXJzIHRoZW4gdGhlXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDU2OlxcdCAqIGFwX3NjYW5fYnVzX3RpbWVyX2NhbGxiYWNrIHdoaWNoIGVucXVldWVzIGEgd29yayBpbnRvIHRoZVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQ1Ny1cXHQgKiBzeXN0ZW1fbG9uZ193cSB3aGljaCBpbnZva2VzIHRoaXMgZnVuY3Rpb24gaGVyZSBhZ2Fpbi5cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NTgtXFx0ICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDU5OlxcdGlmIChtdXRleF90cnlsb2NrKFxcdTAwMjZhcF9zY2FuX2J1c19tdXRleCkpIHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0NjA6XFx0XFx0YXBfc2Nhbl9idXNfdGFzayA9IGN1cnJlbnQ7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDYxOlxcdFxcdGFwX3NjYW5fYnVzX3Jlc3VsdCA9IGFwX3NjYW5fYnVzKCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDYyOlxcdFxcdGFwX3NjYW5fYnVzX3Rhc2sgPSBOVUxMO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQ2MzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmFwX3NjYW5fYnVzX211dGV4KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NjQtXFx0fVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0yNDY3PXN0YXRpYyBpbmxpbmUgdm9pZCBfX2V4aXQgYXBfYXN5bmNfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDcxLVxcdGNoc2Nfbm90aWZpZXJfdW5yZWdpc3RlcihcXHUwMDI2YXBfYnVzX25iKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0NzI6XFx0Y2FuY2VsX3dvcmsoXFx1MDAyNmFwX3NjYW5fYnVzX3dvcmspO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQ3My1cXHRocnRpbWVyX2NhbmNlbChcXHUwMDI2YXBfcG9sbF90aW1lcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDc0OlxcdHRpbWVyX2RlbGV0ZShcXHUwMDI2YXBfc2Nhbl9idXNfdGltZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQ3NS19XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jPTI0Nzc9c3RhdGljIGlubGluZSBpbnQgX19pbml0IGFwX2FzeW5jX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQ4MS1cXHQvKiBTZXR1cCB0aGUgQVAgYnVzIHJlc2NhbiB0aW1lci4gKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0ODI6XFx0dGltZXJfc2V0dXAoXFx1MDAyNmFwX3NjYW5fYnVzX3RpbWVyLCBhcF9zY2FuX2J1c190aW1lcl9jYWxsYmFjaywgMCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDgzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDkxLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQ5MjpcXHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcXHUwMDI2YXBfc2Nhbl9idXNfd29yayk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDkzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNTEwLW91dDpcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI1MTE6XFx0Y2FuY2VsX3dvcmsoXFx1MDAyNmFwX3NjYW5fYnVzX3dvcmspO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjUxMi1cXHRocnRpbWVyX2NhbmNlbChcXHUwMDI2YXBfcG9sbF90aW1lcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNTEzOlxcdHRpbWVyX2RlbGV0ZShcXHUwMDI2YXBfc2Nhbl9idXNfdGltZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjUxNC1cXHRyZXR1cm4gcmM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIyOjU5Ljk2NzE5NzcyM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDYyNjQ5MDEwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgRnV6emFibGUgQ29kZSoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIGhvdyB0aGlzIG1vZGlmaWVkIGNvZGUgaW4gYHZmaW9fYXBgIGlzIGdvaW5nIHRvIGdldCBleGVjdXRlZCwgYW5kIGhvdyB3ZSBjYW4gZWZmZWN0aXZlbHkgdGFyZ2V0IGl0IHdpdGggZnV6emluZy4gYGFwX3NjYW5fYnVzYCBpcyB0aGUgY29yZSBtZWNoYW5pc20gaGVyZS4gSXQncyB0cmlnZ2VyZWQgcGVyaW9kaWNhbGx5IGJ5IGEgdGltZXIgKGBhcF9zY2FuX2J1c190aW1lcmApIGFuZCwgaW1wb3J0YW50bHksIGNhbiBiZSBmb3JjZWQgdmlhIGBhcF9idXNfZm9yY2VfcmVzY2FuKClgLiBXaGVuIHRoYXQgc2NhbiBjb21wbGV0ZXMsIGBub3RpZnlfc2Nhbl9jb21wbGV0ZSgpYCBnZXRzIGNhbGxlZCwgd2hpY2ggdGhlbiBpbnZva2VzIHRoZSBgb25fc2Nhbl9jb21wbGV0ZWAgY2FsbGJhY2sgZm9yIGV2ZXJ5IHJlZ2lzdGVyZWQgQVAgZHJpdmVyLiBUaGlzIG1lYW5zIG91ciBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBwZXJpb2RpY2FsbHkg4oCTIHBlcmZlY3QgZm9yIGZ1enppbmchXG5cbkluc2lkZSBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCwgdGhlIGNvZGUgaXRlcmF0ZXMgdGhyb3VnaCBgbWF0cml4X2Rldi1cdTAwM2VtZGV2X2xpc3RgLiBUaGUga2V5IHJlYWxpemF0aW9uIGlzIHRoYXQgaWYgc3l6a2FsbGVyIGNyZWF0ZXMgYW4gbWRldiBkZXZpY2UgZm9yIGB2ZmlvX2FwYCwgaXQnbGwgYmUgcHJlc2VudCBpbiB0aGlzIGxpc3QuIFRoZSBpbXBsaWNhdGlvbnMgYXJlIHNpZ25pZmljYW50OiBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCB3aWxsIHByb2Nlc3MgdGhhdCBtZGV2IGRldmljZSBhbmQgc3Vic2VxdWVudGx5IGNhbGwgYHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmdgLiBUaGlzIGRpcmVjdCBjb25uZWN0aW9uIG1lYW5zIHRoZSBtb2RpZmllZCBjb2RlIGluIGJvdGggdGhvc2UgZnVuY3Rpb25zIGlzIGd1YXJhbnRlZWQgdG8gYmUgZXhlY3V0ZWQgcGVyaW9kaWNhbGx5IGFzIGxvbmcgYXMgYW4gbWRldiBkZXZpY2UgaXMgYWN0aXZlIVxuXG5BbmQgY3JlYXRpbmcgYW4gbWRldiBkZXZpY2U/IERlYWQgc2ltcGxlLiBJdCdzIGp1c3QgYSBtYXR0ZXIgb2Ygd3JpdGluZyB0byB0aGUgc3lzZnMgZmlsZSBgL3N5cy9jbGFzcy9tZGV2X2J1cy8uLi4vbWRldl9zdXBwb3J0ZWRfdHlwZXMvdmZpb19hcC1wYXNzdGhyb3VnaC9jcmVhdGVgLiBUaGUgcmVhbCBiZWF1dHkgaXMgdGhhdCBzeXprYWxsZXIgYWxyZWFkeSB1bmRlcnN0YW5kcyBob3cgdG8gZG8gdGhpcy4gSXQgaGFzIGRlc2NyaXB0aW9ucyBmb3IgbWRldiBkZXZpY2VzLCBzbyBjcmVhdGluZyBhbmQgcmVtb3ZpbmcgdGhlbSBpcyB0cml2aWFsIGZvciB0aGUgZnV6emVyLiBTbywgdGhpcyBjb2RlIHBhdGggaXMgbm90IG9ubHkgcmVhY2hhYmxlIGJ1dCAqaGlnaGx5KiByZWFjaGFibGUgYW5kIGVhc2lseSBmdXp6YWJsZSFcblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB3ZSB1bmRlcnN0YW5kIHRoZSByZWFjaGFiaWxpdHkgb2YgdGhlIG90aGVycy4gVGhlIGNvZGUgaW4gYHZmaW9fYXBfbWRldl9jZmdfYWRkYCBhbmQgYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCBhcmUgYWxzbyB3b3J0aCBmdXp6aW5nLiBUaGV5J3JlIGNhbGxlZCBmcm9tIGB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZGAgYW5kIGB2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZWAsIHJlc3BlY3RpdmVseS4gVGhlc2UsIGluIHR1cm4sIGFyZSBjYWxsZWQgZnJvbSBgdmZpb19hcF9vbl9jZmdfY2hhbmdlZGAuIEhvd2V2ZXIsIGB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkYCBpcyB0cmlnZ2VyZWQgYnkgQVAgY29uZmlndXJhdGlvbiBjaGFuZ2VzLiBXaGlsZSBwb3NzaWJsZSB0aGF0IHN5emthbGxlciBjb3VsZCB0cmlnZ2VyIEFQIGNvbmZpZyBjaGFuZ2VzIGl0IHNlZW1zIGxpa2UgdGhhdCB3b3VsZCBiZSBkaWZmaWN1bHQgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZS4gVGhlIHBlcmlvZGljIHNjYW4gd2l0aCBtZGV2IGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiBhcmUgb3VyIHByaW1lIHRhcmdldHMuXG5cbkZpbmFsbHksIHRoZXJlJ3MgYHN0YXR1c19zaG93YC4gSXQncyBhIHN5c2ZzIGF0dHJpYnV0ZSBvbiB0aGUgQVAgZGV2aWNlLiBJZiB0aGVyZSBhcmUgbm8gQVAgZGV2aWNlcywgd2UgbWlnaHQgbm90IGdldCB0byBpdC4gSG93ZXZlciwgbm93IEkgcmVtZW1iZXIgdGhhdCBgc3RhdHVzX3Nob3dgIGlzIGFuIGF0dHJpYnV0ZSBvZiB0aGUgbWRldiBkZXZpY2UgaXRzZWxmLiBUaGF0J3MgZ29vZCwgbm93LCBsZXQncyBqdXN0IGNoZWNrIHdoZXJlIGl0J3MgcmVnaXN0ZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwMDcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjM6MTAuNTkzNjkyMDQ1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY1MDQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0dXNfc2hvd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjI5ND1zdGF0aWMgc3RydWN0IGFwX21hdHJpeF9tZGV2ICp2ZmlvX2FwX21kZXZfZm9yX3F1ZXVlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzMTAtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzMTE6c3RhdGljIHNzaXplX3Qgc3RhdHVzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzEyLVxcdFxcdFxcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMzoxMC42MzkzNDc4MjNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4MzM3ODY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkFuYWx5emluZyB0aGUgYHN0YXR1c19zaG93YCBDb250ZXh0KipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgc3RhdHVzX3Nob3dgIGZ1bmN0aW9uIG9yIG1ldGhvZCBpcyBhY3R1YWxseSBkb2luZy4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHRoZSBuYW1lIHN1Z2dlc3RzIGl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBwcmVzZW50aW5nIHNvbWUga2luZCBvZiBzeXN0ZW0gb3IgcHJvY2VzcyBzdGF0dXMgaW5mb3JtYXRpb24uIEJ1dCwgSSBjYW4ndCBqdXN0IGp1bXAgdG8gY29uY2x1c2lvbnMsIEkgbmVlZCB0aGUgY29udGV4dC4gV2hhdCdzIHRoZSBzdXJyb3VuZGluZyBjb2RlPyBBcmUgdGhlcmUgYW55IGNvbW1lbnRzPyBXaGF0IG90aGVyIGZ1bmN0aW9ucyBvciBjbGFzc2VzIGRvZXMgaXQgaW50ZXJhY3Qgd2l0aD8gSSdtIHRoaW5raW5nIEknbGwgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzdGFjayB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgYXBwbGljYXRpb24uIElzIGl0IGRpc3BsYXlpbmcgZGF0YSBmcm9tIGEgZGF0YWJhc2U/IEEgY29uZmlndXJhdGlvbiBmaWxlPyBTeXN0ZW0gY2FsbHM/IE9yIG1heWJlIGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCBzb21lIHNvcnQgb2YgbW9uaXRvcmluZyBzZXJ2aWNlPyBLbm93aW5nIHRoZSBkYXRhIHNvdXJjZSBpcyB0aGUgZmlyc3Qga2V5IHN0ZXAuIFRoZW4sIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBvdXRwdXQuIElzIGl0IGp1c3QgZm9ybWF0dGVkIHRleHQ/IERvZXMgaXQgZ2VuZXJhdGUgYSBHVUkgZWxlbWVudD8gRG9lcyBpdCB3cml0ZSB0byBhIGxvZyBmaWxlPyBPbmNlIEkgdW5kZXJzdGFuZCB0aGUgaW5wdXQgYW5kIG91dHB1dCwgSSBjYW4gZGV0ZXJtaW5lIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZGVidWcsIG1vZGlmeSwgb3IgZW5oYW5jZSB0aGUgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24uIEl0J3MgYWxsIGFib3V0IGNvbnRleHQgYW5kIGhvdyB0aGUgYHN0YXR1c19zaG93YCBpcyB1c2VkIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM3MCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIzOjE0LjQyMjczMDQxNloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMTEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIzMTE6XFx0c3RhdGljIHNzaXplX3Qgc3RhdHVzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbjIzMTI6XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuMjMxMzpcXHRcXHRcXHRcXHQgICBjaGFyICpidWYpXFxuMjMxNDpcXHR7XFxuMjMxNTpcXHRcXHRzc2l6ZV90IG5jaGFycyA9IDA7XFxuMjMxNjpcXHRcXHRzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcTtcXG4yMzE3OlxcdFxcdHVuc2lnbmVkIGxvbmcgYXBpZCwgYXBxaTtcXG4yMzE4OlxcdFxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XFxuMjMxOTpcXHRcXHRzdHJ1Y3QgYXBfZGV2aWNlICphcGRldiA9IHRvX2FwX2RldihkZXYpO1xcbjIzMjA6XFx0XFxuMjMyMTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VndWVzdHNfbG9jayk7XFxuMjMyMjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4yMzIzOlxcdFxcdHEgPSBkZXZfZ2V0X2RydmRhdGEoXFx1MDAyNmFwZGV2LVxcdTAwM2VkZXZpY2UpO1xcbjIzMjQ6XFx0XFx0bWF0cml4X21kZXYgPSB2ZmlvX2FwX21kZXZfZm9yX3F1ZXVlKHEpO1xcbjIzMjU6XFx0XFxuMjMyNjpcXHRcXHQvKiBJZiB0aGUgcXVldWUgaXMgYXNzaWduZWQgdG8gdGhlIG1hdHJpeCBtZWRpYXRlZCBkZXZpY2UsIHRoZW5cXG4yMzI3OlxcdFxcdCAqIGRldGVybWluZSB3aGV0aGVyIGl0IGlzIHBhc3NlZCB0aHJvdWdoIHRvIGEgZ3Vlc3Q7IG90aGVyd2lzZSxcXG4yMzI4OlxcdFxcdCAqIGluZGljYXRlIHRoYXQgaXQgaXMgdW5hc3NpZ25lZC5cXG4yMzI5OlxcdFxcdCAqL1xcbjIzMzA6XFx0XFx0aWYgKG1hdHJpeF9tZGV2KSB7XFxuMjMzMTpcXHRcXHRcXHRhcGlkID0gQVBfUUlEX0NBUkQocS1cXHUwMDNlYXBxbik7XFxuMjMzMjpcXHRcXHRcXHRhcHFpID0gQVBfUUlEX1FVRVVFKHEtXFx1MDAzZWFwcW4pO1xcbjIzMzM6XFx0XFx0XFx0LypcXG4yMzM0OlxcdFxcdFxcdCAqIElmIHRoZSBxdWV1ZSBpcyBwYXNzZWQgdGhyb3VnaCB0byB0aGUgZ3Vlc3QsIHRoZW4gaW5kaWNhdGVcXG4yMzM1OlxcdFxcdFxcdCAqIHRoYXQgaXQgaXMgaW4gdXNlOyBvdGhlcndpc2UsIGluZGljYXRlIHRoYXQgaXQgaXNcXG4yMzM2OlxcdFxcdFxcdCAqIG1lcmVseSBhc3NpZ25lZCB0byBhIG1hdHJpeCBtZWRpYXRlZCBkZXZpY2UuXFxuMjMzNzpcXHRcXHRcXHQgKi9cXG4yMzM4OlxcdFxcdFxcdGlmIChtYXRyaXhfbWRldi1cXHUwMDNla3ZtIFxcdTAwMjZcXHUwMDI2XFxuMjMzOTpcXHRcXHRcXHQgICAgdGVzdF9iaXRfaW52KGFwaWQsIG1hdHJpeF9tZGV2LVxcdTAwM2VzaGFkb3dfYXBjYi5hcG0pIFxcdTAwMjZcXHUwMDI2XFxuMjM0MDpcXHRcXHRcXHQgICAgdGVzdF9iaXRfaW52KGFwcWksIG1hdHJpeF9tZGV2LVxcdTAwM2VzaGFkb3dfYXBjYi5hcW0pKVxcbjIzNDE6XFx0XFx0XFx0XFx0bmNoYXJzID0gc3lzZnNfZW1pdChidWYsIFxcXCIlc1xcXFxuXFxcIiwgQVBfUVVFVUVfSU5fVVNFKTtcXG4yMzQyOlxcdFxcdFxcdGVsc2VcXG4yMzQzOlxcdFxcdFxcdFxcdG5jaGFycyA9IHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXNcXFxcblxcXCIsIEFQX1FVRVVFX0FTU0lHTkVEKTtcXG4yMzQ0OlxcdFxcdH0gZWxzZSB7XFxuMjM0NTpcXHRcXHRcXHRuY2hhcnMgPSBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVzXFxcXG5cXFwiLCBBUF9RVUVVRV9VTkFTU0lHTkVEKTtcXG4yMzQ2OlxcdFxcdH1cXG4yMzQ3OlxcdFxcbjIzNDg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4yMzQ5OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZ3Vlc3RzX2xvY2spO1xcbjIzNTA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIzOjE0LjQyMjkzODA0NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzIzOTg5ODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBBUCBRdWV1ZSBEZXZpY2UgUmVhY2hhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gdHJhY2UgdGhlIGZsb3cuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBzdGF0dXNfc2hvd2AgaXMgZGVmaW5pdGVseSBhc3NvY2lhdGVkIHdpdGggdGhlIEFQIHF1ZXVlIGRldmljZSwgYGFwZGV2LVx1MDAzZWRldmljZWAuIE1ha2VzIHNlbnNlLiBJZiB0aGVyZSAqaXNuJ3QqIGFuIEFQIHF1ZXVlIGRldmljZSwgdGhhdCBwYXRoIGlzIGNsZWFybHkgZGVhZC4gQnV0IHRoZW4gdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSSBzZWUgdGhhdCBgdmZpb19hcF9tZGV2X3Byb2JlYCBpcyByZWFjaGFibGUgcmVnYXJkbGVzcy4gVGhhdCBtYWtlcyBzZW5zZSwgSSBzdXBwb3NlLCBiZWNhdXNlIGl0IG1pZ2h0IGJlIHRoZSBzdGFydGluZyBwb2ludC5cblxuVGhlbiBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCBpcyBhbHNvIHJlYWNoYWJsZS4gT2theSwgdGhhdCdzIGFub3RoZXIgZW50cnkgcG9pbnQuIEFuZCBgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZ2AsIHRoYXQncyBhY2Nlc3NpYmxlIHRvbywgd2hpY2ggaW1wbGllcyBhbiBhbHRlcm5hdGl2ZSBwYXRod2F5LlxuXG5Ob3csIGB2ZmlvX2FwX21kZXZfY2ZnX2FkZGAgZ2V0cyBjYWxsZWQgaWYgYW5kIG9ubHkgaWYgYHZmaW9fYXBfbWRldl9vbl9jZmdfYWRkYCBpcyBpbnZva2VkLiBXYWl0LCBJJ20gdHJhY2luZyBiYWNrd2FyZC4uLiBgdmZpb19hcF9tZGV2X2NmZ19hZGRgIGlzICphY3R1YWxseSogY2FsbGVkIGZyb20gYHZmaW9fYXBfbWRldl9vbl9jZmdfYWRkYC4gQW5kIGB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZGAgaXMgdHJpZ2dlcmVkIGJ5IGB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkYC4gT2theSwgdGhhdCdzIG9uZSBsb2dpY2FsIGNoYWluLlxuXG5Ib2xkIG9uLCBJIHNlZSBzb21ldGhpbmcgZWxzZS4gSSdtIHJlbWluZGVkIHRoYXQgYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAgYWxzbyBtYWtlcyBhIGNhbGwgdG8gYHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmdgLCBhbmQgd2Fzbid0IHRoYXQgbW9kaWZpZWQgcmVjZW50bHk/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBpbnRlcmFjdGlvbi4gU28sIGJlZm9yZSBJIGNvbnRpbnVlLCBJIHRoaW5rIEknbGwgc3RhcnQgd2l0aCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiB0aGlzIGRlZXAgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzOTQsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMzoyMC43NDY5MzE3MjFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODc1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODc1OlxcdHZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxcbjI4NzY6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpvbGRfY29uZmlnX2luZm8pXFxuMjg3NzpcXHR7XFxuMjg3ODpcXHRcXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xcbjI4Nzk6XFx0XFxuMjg4MDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VndWVzdHNfbG9jayk7XFxuMjg4MTpcXHRcXG4yODgyOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsIFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2X2xpc3QsIG5vZGUpIHtcXG4yODgzOlxcdFxcdFxcdC8qXFxuMjg4NDpcXHRcXHRcXHQgKiBUaGUgbWRldnNfbG9jayBtdXN0IGJlIGhlbGQgdG8gYWNjZXNzIGZpZWxkcyB3aXRoaW4gbWF0cml4X21kZXYsXFxuMjg4NTpcXHRcXHRcXHQgKiBhbmQga3ZtLVxcdTAwM2Vsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIG1kZXZzX2xvY2sgdG8gc2F0aXNmeSB0aGUgbG9ja1xcbjI4ODY6XFx0XFx0XFx0ICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LlxcbjI4ODc6XFx0XFx0XFx0ICovXFxuMjg4ODpcXHRcXHRcXHRpZiAobWF0cml4X21kZXYtXFx1MDAzZWt2bSlcXG4yODg5OlxcdFxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0tXFx1MDAzZWxvY2spO1xcbjI4OTA6XFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuMjg5MTpcXHRcXG4yODkyOlxcdFxcdFxcdGlmIChiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXFx1MDAzZWFwbV9hZGQsIEFQX0RFVklDRVMpIFxcdTAwMjZcXHUwMDI2XFxuMjg5MzpcXHRcXHRcXHQgICAgYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LVxcdTAwM2VhcW1fYWRkLCBBUF9ET01BSU5TKSBcXHUwMDI2XFx1MDAyNlxcbjI4OTQ6XFx0XFx0XFx0ICAgIGJpdG1hcF9lbXB0eShtYXRyaXhfbWRldi1cXHUwMDNlYWRtX2FkZCwgQVBfRE9NQUlOUykpXFxuMjg5NTpcXHRcXHRcXHRcXHRnb3RvIGRvX3VubG9jaztcXG4yODk2OlxcdFxcbjI4OTc6XFx0XFx0XFx0dmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhtYXRyaXhfbWRldik7XFxuMjg5ODpcXHRcXHRcXHRiaXRtYXBfY2xlYXIobWF0cml4X21kZXYtXFx1MDAzZWFwbV9hZGQsIDAsIEFQX0RFVklDRVMpO1xcbjI4OTk6XFx0XFx0XFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVxcdTAwM2VhcW1fYWRkLCAwLCBBUF9ET01BSU5TKTtcXG4yOTAwOlxcdFxcdFxcdGJpdG1hcF9jbGVhcihtYXRyaXhfbWRldi1cXHUwMDNlYWRtX2FkZCwgMCwgQVBfRE9NQUlOUyk7XFxuMjkwMTpcXHRcXG4yOTAyOlxcdGRvX3VubG9jazpcXG4yOTAzOlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuMjkwNDpcXHRcXHRcXHRpZiAobWF0cml4X21kZXYtXFx1MDAzZWt2bSlcXG4yOTA1OlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X21kZXYtXFx1MDAzZWt2bS1cXHUwMDNlbG9jayk7XFxuMjkwNjpcXHRcXHR9XFxuMjkwNzpcXHRcXG4yOTA4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZ3Vlc3RzX2xvY2spO1xcbjI5MDk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMzoyMC43NDcxMzUyMjFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY0OTA0MjEyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipWRklPLUFQIExvY2sgT3JkZXJpbmcgRml4IENvbmZpcm1hdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBJbnF1aXJ5KipcblxuT2theSwgc28gYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAgaXMgaW5kZWVkIHJlYWNoYWJsZSwgYW5kIHRoZSByZWNlbnQgbW9kaWZpY2F0aW9ucyB0byBwcm9wZXJseSBpbXBsZW1lbnQgbG9ja2luZyBpbiB0aGlzIGFyZWEgYXJlIGNvbmZpcm1lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHJlYWwgZml4IGFkZHJlc3NpbmcgdGhlIGxvY2sgb3JkZXJpbmcgaXNzdWVzIGFuZCB0aGUgYGxvY2tkZXBgIHNwbGF0cyB3ZSB3ZXJlIHNlZWluZy4gVGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpcywgb2YgY291cnNlLCB0aGUgYFZGSU9fQVBgIGRyaXZlci4gTm93LCB0aGUgbmV4dCBxdWVzdGlvbiBpcyBhYm91dCBjb25maWd1cmF0aW9uLiBXaGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlcXVpcmVkIGZvciB0aGlzIGNoYW5nZSB0byBiZSBlZmZlY3RpdmUsIG9yIHRvIGV2ZW4gYmUgY29tcGlsZWQ/IExldCdzIHRha2UgYSBsb29rIGF0IHRoZSBgZHJpdmVycy9zMzkwL2NyeXB0by9LY29uZmlnYCBmaWxlIGFuZCBzZWUgd2hhdCdzIGluIHRoZXJlLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRlcGVuZGVuY2llcyB0aGlzIG5ldyBsb2NrIGJlaGF2aW9yIGhhcyBvbiBleGlzdGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3Njk5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMzoyNS4zOTYxODA0NThaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTk1MTU4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT19BUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjM6MjUuNDU2MTgyNzU2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjg1NDcyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipUcmFjaW5nIHRoZSBDb25maWd1cmF0aW9uIG9mIGB2ZmlvX2FwYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgdmZpb19hcGAgY29tcG9uZW50IGlzIGFjdHVhbGx5IGNvbmZpZ3VyZWQuIFRoYXQncyB0aGUgZmlyc3Qgc3RlcC4gSXMgaXQgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBjb25maWd1cmF0aW9uIChgLmNvbmZpZ2ApPyBQZXJoYXBzIGluIGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUgZmlsZSwgb3IgbWF5YmUgaXQncyBjb250cm9sbGVkIHZpYSBzb21lIHNvcnQgb2YgbW9kdWxlIHBhcmFtZXRlcj8gSSdsbCBuZWVkIHRvIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUga2VybmVsIHNvdXJjZSB0cmVlLCBsb29raW5nIGZvciByZWZlcmVuY2VzIHRvIGB2ZmlvX2FwYC4gSSdsbCB0cnkgdXNpbmcgYGdyZXBgIG9yIGBmaW5kYCBpbml0aWFsbHksIGxvb2tpbmcgZm9yIGJvdGggdGhlIG1vZHVsZSBuYW1lIGRpcmVjdGx5IGFuZCBhbnkgYXNzb2NpYXRlZCBzeW1ib2xzIG9yIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiBUaGVuIEknbGwgY2hlY2sgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24gb3IgdGhlIGBLY29uZmlnYCBmaWxlcyBmb3IgdGhhdCBzdWJzeXN0ZW0gdG8gdW5kZXJzdGFuZCB0aGUgdmFyaW91cyBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIE15IGZvY3VzIGhlcmUgd2lsbCBiZSBvbiB1bmRlcnN0YW5kaW5nIHRoZSB2YXJpb3VzIHdheXMgdGhhdCBpdCBpcyB0dXJuZWQgb24gYW5kIG9mZi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5OTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMzoyOS41MjQ3MzMwN1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzMzY3MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vTWFrZWZpbGU9MzQ9b2JqLSQoQ09ORklHX1BLRVlfVVYpICs9IHBrZXktdXYub1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9NYWtlZmlsZS0zNi0jIGFkanVuY3QgcHJvY2Vzc29yIG1hdHJpeFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vTWFrZWZpbGU6Mzc6dmZpb19hcC1vYmpzIDo9IHZmaW9fYXBfZHJ2Lm8gdmZpb19hcF9vcHMub1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX1ZGSU9fQVApICs9IHZmaW9fYXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMzoyOS41ODQwNzgwNzhaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxNzgxODExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBWRklPLUFQIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIGBDT05GSUdfVkZJT19BUGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBkcmlsbCBkb3duIGFuZCBzZWUgd2hlcmUgdGhpcyBgVkZJT19BUGAgaXMgZGVmaW5lZCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIHdoZXJlIGl0J3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbC4gR2l2ZW4gdGhhdCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIGhhcmR3YXJlLWFzc2lzdGVkIGNyeXB0b2dyYXBoeSBvciBhY2NlbGVyYXRpb24sIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBTLzM5MCBhcmNoaXRlY3R1cmUncyBjcnlwdG8tcmVsYXRlZCBjb25maWd1cmF0aW9uIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBsb29rIGF0IGBkcml2ZXJzL3MzOTAvY3J5cHRvL0tjb25maWdgLiBUaGF0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBmaW5kIHRoZSBgVkZJT19BUGAgb3B0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2UgdG8gZ28gb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzY1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjM6MzMuMzAxODk5MTUzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg0MDk1NjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPX0FQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9LY29uZmlnPTgyMz1jb25maWcgVkZJT19DQ1dcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTgzMy1cXG5hcmNoL3MzOTAvS2NvbmZpZzo4MzQ6Y29uZmlnIFZGSU9fQVBcXG5hcmNoL3MzOTAvS2NvbmZpZy04MzUtXFx0ZGVmX3RyaXN0YXRlIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjM6MzQuODg2MDAyMzc1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTMxODM2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqRGl2aW5nIGludG8gdGhlIHMzOTAgQXJjaGl0ZWN0dXJlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHRoZSBgYXJjaC9zMzkwL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA4MzQuIEknbSBnb2luZyB0byBhc3N1bWUgdGhpcyBzZWN0aW9uIGxpa2VseSByZWxhdGVzIHRvIHNvbWUgZmVhdHVyZSBvciBjb25maWd1cmF0aW9uIG9wdGlvbiB3aXRoaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBHaXZlbiB0aGUgY29udGV4dCBvZiBhIEtjb25maWcgZmlsZSwgaXQncyBwcm9iYWJseSBkZWZpbmluZyBhIGNvbmRpdGlvbmFsIGJ1aWxkIG9wdGlvbiwgYSBoYXJkd2FyZSBmZWF0dXJlIHNldHRpbmcsIG9yIG1heWJlIGV2ZW4gYSBkcml2ZXIgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHRoZSBJQk0gbWFpbmZyYW1lIGFyY2hpdGVjdHVyZS4gSSdsbCBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBoZWxwIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpdGVtLiBJdCBjb3VsZCBiZSBzb21ldGhpbmcgc3RyYWlnaHRmb3J3YXJkLCBvciBpdCBtaWdodCByZXF1aXJlIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcywgZmlybXdhcmUgaW50ZXJhY3Rpb25zLCBvciBzcGVjaWZpYyBrZXJuZWwgc3Vic3lzdGVtcyB3aXRoaW4gdGhlIHMzOTAgZW52aXJvbm1lbnQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY5MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIzOjM4LjM3OTE4OTI4N1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MzA6XFx0XFxuIDgzMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA4MzI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdmZpb19jY3cuXFxuIDgzMzpcXHRcXG4gODM0OlxcdGNvbmZpZyBWRklPX0FQXFxuIDgzNTpcXHRcXHRkZWZfdHJpc3RhdGUgblxcbiA4MzY6XFx0XFx0cHJvbXB0IFxcXCJWRklPIHN1cHBvcnQgZm9yIEFQIGRldmljZXNcXFwiXFxuIDgzNzpcXHRcXHRkZXBlbmRzIG9uIEtWTVxcbiA4Mzg6XFx0XFx0ZGVwZW5kcyBvbiBWRklPXFxuIDgzOTpcXHRcXHRkZXBlbmRzIG9uIEFQXFxuIDg0MDpcXHRcXHRzZWxlY3QgVkZJT19NREVWXFxuIDg0MTpcXHRcXHRoZWxwXFxuIDg0MjpcXHRcXHQgIFRoaXMgZHJpdmVyIGdyYW50cyBhY2Nlc3MgdG8gQWRqdW5jdCBQcm9jZXNzb3IgKEFQKSBkZXZpY2VzXFxuIDg0MzpcXHRcXHQgIHZpYSB0aGUgVkZJTyBtZWRpYXRlZCBkZXZpY2UgaW50ZXJmYWNlLlxcbiA4NDQ6XFx0XFxuIDg0NTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gODQ2OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgdmZpb19hcC5cXG4gODQ3OlxcdFxcbiA4NDg6XFx0ZW5kbWVudVxcbiA4NDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIzOjM4LjM3OTI4NDM1NloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIxMTYyMjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIGNvbnRleHQgaXMgbXkgYXJlYSBvZiBleHBlcnRpc2U6XG5cbioqRGlzc2VjdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIFZGSU9fQVAqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gZ2F0aGVyaW5nLCB0aGlzIGBWRklPX0FQYCB0aGluZyBpcyBidWlsdCBvbiB0b3Agb2YgYEtWTWAsIGBWRklPYCwgYW5kIGBBUGAuIFRoYXQncyBhIHByZXR0eSBzdGFuZGFyZCBsYXllcmluZyBhcHByb2FjaCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHdoYXQgZWFjaCBjb21wb25lbnQgYnJpbmdzIHRvIHRoZSB0YWJsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBBUGAgaXMuIFRoZSB0ZXJtIGl0c2VsZiBpcyByaW5naW5nIGEgYmVsbCAtIEkgc2VlbSB0byByZWNhbGwgdGhhdCBcIkFQXCIgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gYFpDUllQVGAsIGJ1dCBJIHNob3VsZCB2ZXJpZnkgdGhpcyBzbyBJIGRvbid0IGNvbmZ1c2Ugc2ltaWxhciBjb21wb25lbnRzLCBhbmQgbWlzdW5kZXJzdGFuZCBob3cgdGhpcyBlbnRpcmUgc3lzdGVtIHdvcmtzLiBMZXQncyBkaWcgaW50byB0aGF0IGBBUGAgY29tcG9uZW50LCBqdXN0IHRvIG1ha2Ugc3VyZSBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgbW9yZSBjb21wbGV4IGludGVyYWN0aW9ucy4gSSBuZWVkIHRvIGJlIGV4YWN0IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjA5LCJPdXRwdXRUb2tlbnMiOjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMzo0MS44MDA0NTAyMDFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mzg2MTkxMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3Q9Mjg3PXRvIGluaXRyZCBpbWFnZSwgdXNlciBjYW4gbm90aWNlIGl0IGJlZm9yZSBib290Llxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdC0yODktXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdDoyOTA6Qm9vdGNvbmZpZyBBUElzXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdC0yOTEtPT09PT09PT09PT09PT09XFxuLS1cXG5hcmNoL202OGsvS2NvbmZpZy5tYWNoaW5lPTI5PWNvbmZpZyBNQUNcXG4tLVxcbmFyY2gvbTY4ay9LY29uZmlnLm1hY2hpbmUtNDAtXFxuYXJjaC9tNjhrL0tjb25maWcubWFjaGluZTo0MTpjb25maWcgQVBPTExPXFxuYXJjaC9tNjhrL0tjb25maWcubWFjaGluZS00Mi1cXHRib29sIFxcXCJBcG9sbG8gc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWc9MjkxPWNvbmZpZyA0NzZGUEVcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWctMjk0LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWc6Mjk1OmNvbmZpZyBBUE04MjF4eFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWctMjk2LVxcdGJvb2xcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTc4NT1jb25maWcgRUFETV9TQ0hcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTc5NS1cXG5hcmNoL3MzOTAvS2NvbmZpZzo3OTY6Y29uZmlnIEFQXFxuYXJjaC9zMzkwL0tjb25maWctNzk3LVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04MDgtXFxuYXJjaC9zMzkwL0tjb25maWc6ODA5OmNvbmZpZyBBUF9ERUJVR1xcbmFyY2gvczM5MC9LY29uZmlnLTgxMC1cXHRkZWZfYm9vbCBuXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZz04ODU9Y29uZmlnIENNTV9JVUNWXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04OTItXFxuYXJjaC9zMzkwL0tjb25maWc6ODkzOmNvbmZpZyBBUFBMREFUQV9CQVNFXFxuYXJjaC9zMzkwL0tjb25maWctODk0LVxcdGRlZl9ib29sIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTkwOC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo5MDk6Y29uZmlnIEFQUExEQVRBX01FTVxcbmFyY2gvczM5MC9LY29uZmlnLTkxMC1cXHRkZWZfdHJpc3RhdGUgbVxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctOTI1LVxcbmFyY2gvczM5MC9LY29uZmlnOjkyNjpjb25maWcgQVBQTERBVEFfT1NcXG5hcmNoL3MzOTAvS2NvbmZpZy05MjctXFx0ZGVmX3RyaXN0YXRlIG1cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTk0MC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo5NDE6Y29uZmlnIEFQUExEQVRBX05FVF9TVU1cXG5hcmNoL3MzOTAvS2NvbmZpZy05NDItXFx0ZGVmX3RyaXN0YXRlIG1cXG4tLVxcbmFyY2gveDg2L0tjb25maWc9Mjc0MT1jb25maWcgWDg2X0FQTV9CT09UXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTI3NDQtXFxuYXJjaC94ODYvS2NvbmZpZzoyNzQ1Om1lbnVjb25maWcgQVBNXFxuYXJjaC94ODYvS2NvbmZpZy0yNzQ2LVxcdHRyaXN0YXRlIFxcXCJBUE0gKEFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQpIEJJT1Mgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9Mjc5OT1pZiBBUE1cXG5hcmNoL3g4Ni9LY29uZmlnLTI4MDAtXFxuYXJjaC94ODYvS2NvbmZpZzoyODAxOmNvbmZpZyBBUE1fSUdOT1JFX1VTRVJfU1VTUEVORFxcbmFyY2gveDg2L0tjb25maWctMjgwMi1cXHRib29sIFxcXCJJZ25vcmUgVVNFUiBTVVNQRU5EXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yODA3LVxcbmFyY2gveDg2L0tjb25maWc6MjgwODpjb25maWcgQVBNX0RPX0VOQUJMRVxcbmFyY2gveDg2L0tjb25maWctMjgwOS1cXHRib29sIFxcXCJFbmFibGUgUE0gYXQgYm9vdCB0aW1lXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yODI0LVxcbmFyY2gveDg2L0tjb25maWc6MjgyNTpjb25maWcgQVBNX0NQVV9JRExFXFxuYXJjaC94ODYvS2NvbmZpZy0yODI2LVxcdGRlcGVuZHMgb24gQ1BVX0lETEVcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjgzNi1cXG5hcmNoL3g4Ni9LY29uZmlnOjI4Mzc6Y29uZmlnIEFQTV9ESVNQTEFZX0JMQU5LXFxuYXJjaC94ODYvS2NvbmZpZy0yODM4LVxcdGJvb2wgXFxcIkVuYWJsZSBjb25zb2xlIGJsYW5raW5nIHVzaW5nIEFQTVxcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjg0OS1cXG5hcmNoL3g4Ni9LY29uZmlnOjI4NTA6Y29uZmlnIEFQTV9BTExPV19JTlRTXFxuYXJjaC94ODYvS2NvbmZpZy0yODUxLVxcdGJvb2wgXFxcIkFsbG93IGludGVycnVwdHMgZHVyaW5nIEFQTSBCSU9TIGNhbGxzXFxcIlxcbi0tXFxuZHJpdmVycy9jaGFyL0tjb25maWc9MjEzPWNvbmZpZyBYSUxJTlhfSFdJQ0FQXFxuLS1cXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yMjItXFxuZHJpdmVycy9jaGFyL0tjb25maWc6MjIzOmNvbmZpZyBBUFBMSUNPTVxcbmRyaXZlcnMvY2hhci9LY29uZmlnLTIyNC1cXHR0cmlzdGF0ZSBcXFwiQXBwbGljb20gaW50ZWxsaWdlbnQgZmllbGRidXMgY2FyZCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnPTI5MD1jb25maWcgUUNPTV9DTEtfUlBNSFxcbi0tXFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTI5OC1cXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWc6Mjk5OmNvbmZpZyBBUFFfR0NDXzgwODRcXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWctMzAwLVxcdHRyaXN0YXRlIFxcXCJBUFE4MDg0IEdsb2JhbCBDbG9jayBDb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTMwNy1cXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWc6MzA4OmNvbmZpZyBBUFFfTU1DQ184MDg0XFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTMwOS1cXHR0cmlzdGF0ZSBcXFwiQVBRODA4NCBNdWx0aW1lZGlhIENsb2NrIENvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2RtYS9LY29uZmlnPTc4PWNvbmZpZyBBTUNDX1BQQzQ0MFNQRV9BRE1BXFxuLS1cXG5kcml2ZXJzL2RtYS9LY29uZmlnLTg3LVxcbmRyaXZlcnMvZG1hL0tjb25maWc6ODg6Y29uZmlnIEFQUExFX0FETUFDXFxuZHJpdmVycy9kbWEvS2NvbmZpZy04OS1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgQURNQUMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWc9MTU0PWNvbmZpZyBFRklfREVWX1BBVEhfUEFSU0VSXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnLTE1Ni1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnOjE1Nzpjb25maWcgQVBQTEVfUFJPUEVSVElFU1xcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWctMTU4LVxcdGJvb2wgXFxcIkFwcGxlIERldmljZSBQcm9wZXJ0aWVzXFxcIlxcbi0tXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZz02Nj1jb25maWcgQUwzMzIwQVxcbi0tXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZy03NS1cXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnOjc2OmNvbmZpZyBBUERTOTE2MFxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctNzctXFx0dHJpc3RhdGUgXFxcIkFQRFM5MTYwIGNvbWJpbmVkIGFscyBhbmQgcHJveGltaXR5IHNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctODYtXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzo4Nzpjb25maWcgQVBEUzkzMDBcXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTg4LVxcdHRyaXN0YXRlIFxcXCJBUERTOTMwMCBhbWJpZW50IGxpZ2h0IHNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctOTYtXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzo5Nzpjb25maWcgQVBEUzkzMDZcXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTk4LVxcdHRyaXN0YXRlIFxcXCJBdmFnbyBBUERTOTMwNiBBbWJpZW50IExpZ2h0IFNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctMTA4LVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWc6MTA5OmNvbmZpZyBBUERTOTk2MFxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctMTEwLVxcdHRyaXN0YXRlIFxcXCJBdmFnbyBBUERTOTk2MCBnZXN0dXJlL1JHQi9BTFMvcHJveGltaXR5IHNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZz0yOTY9Y29uZmlnIFNQQVBSX1RDRV9JT01NVVxcbi0tXFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTMwMy1cXG5kcml2ZXJzL2lvbW11L0tjb25maWc6MzA0OmNvbmZpZyBBUFBMRV9EQVJUXFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTMwNS1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgREFSVCBJT01NVSBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pcnFjaGlwL0tjb25maWc9Nzg4PWNvbmZpZyBJUlFfSURUMzI0M1hcXG4tLVxcbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTc5Mi1cXG5kcml2ZXJzL2lycWNoaXAvS2NvbmZpZzo3OTM6Y29uZmlnIEFQUExFX0FJQ1xcbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTc5NC1cXHRib29sIFxcXCJBcHBsZSBJbnRlcnJ1cHQgQ29udHJvbGxlciAoQUlDKVxcXCJcXG4tLVxcbmRyaXZlcnMvbWlzYy9LY29uZmlnPTMyNz1jb25maWcgU0dJX0dSVV9ERUJVR1xcbi0tXFxuZHJpdmVycy9taXNjL0tjb25maWctMzMzLVxcbmRyaXZlcnMvbWlzYy9LY29uZmlnOjMzNDpjb25maWcgQVBEUzk4MDJBTFNcXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0zMzUtXFx0dHJpc3RhdGUgXFxcIk1lZGZpZWxkIEF2YWdvIEFQRFM5ODAyIEFMUyBTZW5zb3IgbW9kdWxlXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnPTEwNj1jb25maWcgTkUyS19QQ0lcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZy0xMjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnOjEyNDpjb25maWcgQVBORVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZy0xMjUtXFx0dHJpc3RhdGUgXFxcIlBDTUNJQSBORTIwMDAgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvcGNpLmM9MzMyMD1zdGF0aWMgaW50IHJ0dzg5X3BjaV9jZmdfZGFjKHN0cnVjdCBydHc4OV9kZXYgKnJ0d2RldiwgYm9vbCBmb3JjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvcGNpLmMtMzMzMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L3BjaS5jOjMzMzM6XFx0LyogQ29uZmlndXJlIERBQyBvbmx5IHZpYSBQQ0kgY29uZmlnIEFQSSwgbm90IERCSSBpbnRlcmZhY2VzICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9wY2kuYy0zMzM0LVxcdHJldCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFJUVzg5X1BDSUVfTDFfQ1RSTCwgXFx1MDAyNnZhbCk7XFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0yNTM9Y29uZmlnIE1BUlZFTExfQ04xMEtfVEFEX1BNVVxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjU5LVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjI2MDpjb25maWcgQVBQTEVfTTFfQ1BVX1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI2MS1cXHRib29sIFxcXCJBcHBsZSBNMSBDUFUgUE1VIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnPTE5ND1jb25maWcgQURWX1NXQlVUVE9OXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnLTIwNC1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnOjIwNTpjb25maWcgQVBQTEVfR01VWFxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWctMjA2LVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBHbXV4IERyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvcG1kb21haW4vYXBwbGUvS2NvbmZpZz0zPWlmIEFSQ0hfQVBQTEUgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnLTQtXFxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnOjU6Y29uZmlnIEFQUExFX1BNR1JfUFdSU1RBVEVcXG5kcml2ZXJzL3BtZG9tYWluL2FwcGxlL0tjb25maWctNi1cXHRib29sIFxcXCJBcHBsZSBTb0MgUE1HUiBwb3dlciBzdGF0ZSBjb250cm9sXFxcIlxcbi0tXFxuZHJpdmVycy9wb3dlci9zdXBwbHkvS2NvbmZpZz0xOD1jb25maWcgUE9XRVJfU1VQUExZX0hXTU9OXFxuLS1cXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnLTMwLVxcbmRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWc6MzE6Y29uZmlnIEFQTV9QT1dFUlxcbmRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIkFQTSBlbXVsYXRpb24gZm9yIGNsYXNzIGJhdHRlcmllc1xcXCJcXG4tLVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc9NT1tZW51IFxcXCJBcHBsZSBTb0MgZHJpdmVyc1xcXCJcXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTYtXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZzo3OmNvbmZpZyBBUFBMRV9NQUlMQk9YXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy04LVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBTb0MgbWFpbGJveGVzXFxcIlxcbi0tXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy0xOC1cXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnOjE5OmNvbmZpZyBBUFBMRV9SVEtJVFxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctMjAtXFx0dHJpc3RhdGUgXFxcIkFwcGxlIFJUS2l0IGNvLXByb2Nlc3NvciBJUEMgcHJvdG9jb2xcXFwiXFxuLS1cXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTMwLVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc6MzE6Y29uZmlnIEFQUExFX1NBUlRcXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBTQVJUIERNQSBhZGRyZXNzIGZpbHRlclxcXCJcXG4tLVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctNDAtXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZzo0MTpjb25maWcgQVBQTEVfVFVOQUJMRVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctNDItXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZz0xNDc9Y29uZmlnIFVTQl9RQ09NX0VVRFxcbi0tXFxuZHJpdmVycy91c2IvbWlzYy9LY29uZmlnLTE1OC1cXG5kcml2ZXJzL3VzYi9taXNjL0tjb25maWc6MTU5OmNvbmZpZyBBUFBMRV9NRklfRkFTVENIQVJHRVxcbmRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZy0xNjAtXFx0dHJpc3RhdGUgXFxcIkZhc3QgY2hhcmdlIGNvbnRyb2wgZm9yIGlPUyBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92aWRlby9LY29uZmlnPTY9bWVudSBcXFwiR3JhcGhpY3Mgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL3ZpZGVvL0tjb25maWctNy1cXG5kcml2ZXJzL3ZpZGVvL0tjb25maWc6ODpjb25maWcgQVBFUlRVUkVfSEVMUEVSU1xcbmRyaXZlcnMvdmlkZW8vS2NvbmZpZy05LVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZz0xMTExPWNvbmZpZyBNU0MzMTNFX1dBVENIRE9HXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMTEyMi1cXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWc6MTEyMzpjb25maWcgQVBQTEVfV0FUQ0hET0dcXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMTEyNC1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgU29DIHdhdGNoZG9nXFxcIlxcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jPTE2NTI9eGZzX2ZzX2ZpbGxfc3VwZXIoXFxuLS1cXG5mcy94ZnMveGZzX3N1cGVyLmMtMTY2NC1cXHQgKiBpcyBndWFyYW50ZWVkIHRvIGhhdmUgYmVlbiBjb21wbGV0ZWQgYnkgZWl0aGVyIHRoZSBvbGQgbW91bnQgQVBJIG9yXFxuZnMveGZzL3hmc19zdXBlci5jOjE2NjU6XFx0ICogdGhlIG5ld2VyIGZzb3Blbi9mc2NvbmZpZyBBUEkuXFxuZnMveGZzL3hmc19zdXBlci5jLTE2NjYtXFx0ICovXFxuLS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZz0zMTA9Y29uZmlnIFBNX1RSQUNFX1JUQ1xcbi0tXFxua2VybmVsL3Bvd2VyL0tjb25maWctMzI3LVxcbmtlcm5lbC9wb3dlci9LY29uZmlnOjMyODpjb25maWcgQVBNX0VNVUxBVElPTlxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTMyOS1cXHR0cmlzdGF0ZSBcXFwiQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCBFbXVsYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIzOjQzLjMzOTA3Nzg1M1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU3OTg4MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IGRlZXAgaW4ga2VybmVsIGRldmVsb3BtZW50OlxuXG4qKkZpbmRpbmcgdGhlIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoZSBgY29uZmlnIEFQYCBvcHRpb24gaXMgZGVmaW5lZC4gTWVtb3J5IHNlcnZlcywgdGhhdCdzIHNvbWV0aGluZyBzcGVjaWZpYyB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIE9rYXksIGxldCdzIGp1c3QgY29uZmlybS4gTGluZSA3OTYgb2YgYGFyY2gvczM5MC9LY29uZmlnYOKApiBzb3VuZHMgYWJvdXQgcmlnaHQuXG5cbkxldCdzIHB1bGwgdXAgdGhhdCBgS2NvbmZpZ2AgZmlsZSBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIHRoYXQgbGluZSBudW1iZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBvcHRpb24gZG9lcywgaXRzIGRlcGVuZGVuY2llcywgaXRzIGRlZmF1bHQgdmFsdWUsIGFuZCBwZXJoYXBzIGFueSBoZWxwIHRleHQgYXNzb2NpYXRlZCB3aXRoIGl0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI4MTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMzo0Ny4wOTcwNjg5NThaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzkwOlxcdFxcdCAgVGhpcyBkcml2ZXIgYWxsb3dzIHVzYWdlIG9mIEVBRE0gc3ViY2hhbm5lbHMuIEVBRE0gc3ViY2hhbm5lbHMgYWN0XFxuIDc5MTpcXHRcXHQgIGFzIGEgY29tbXVuaWNhdGlvbiB2ZWhpY2xlIGZvciBTQ00gaW5jcmVtZW50cy5cXG4gNzkyOlxcdFxcbiA3OTM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNzk0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVhZG1fc2NoLlxcbiA3OTU6XFx0XFxuIDc5NjpcXHRjb25maWcgQVBcXG4gNzk3OlxcdFxcdGRlZl90cmlzdGF0ZSB5XFxuIDc5ODpcXHRcXHRwcm9tcHQgXFxcIlN1cHBvcnQgZm9yIEFkanVuY3QgUHJvY2Vzc29ycyAoYXApXFxcIlxcbiA3OTk6XFx0XFx0aGVscFxcbiA4MDA6XFx0XFx0ICBUaGlzIGRyaXZlciBhbGxvd3MgdXNhZ2UgdG8gQWRqdW5jdCBQcm9jZXNzb3IgKEFQKSBkZXZpY2VzIHZpYVxcbiA4MDE6XFx0XFx0ICB0aGUgYXAgYnVzLCBjYXJkcyBhbmQgcXVldWVzLiBTdXBwb3J0ZWQgQWRqdW5jdCBQcm9jZXNzb3JzIGFyZVxcbiA4MDI6XFx0XFx0ICB0aGUgQ3J5cHRvRXhwcmVzcyBDYXJkcyAoQ0VYKS5cXG4gODAzOlxcdFxcbiA4MDQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gODA1OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFwLlxcbiA4MDY6XFx0XFxuIDgwNzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkgKGRlZmF1bHQpLlxcbiA4MDg6XFx0XFxuIDgwOTpcXHRjb25maWcgQVBfREVCVUdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjM6NDcuMDk3MTY1MDY4WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzAxNDIwMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFZGSU9fQVAgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIGJyZWFraW5nIHRoaXMgZG93biBzdGVwIGJ5IHN0ZXAuIEZpcnN0LCBsZXQncyBuYWlsIGRvd24gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBgVkZJT19BUGAgY29uZmlndXJhdGlvbi4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgVkZJT19BUGAgaGluZ2VzIG9uIGBLVk1gLCBgVkZJT2AsIGFuZCBgQVBgLiBGb3J0dW5hdGVseSwgYEFQYCBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSB0cmlzdGF0ZSAneScsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBHaXZlbiB0aGF0IGBWRklPYCBhbmQgYEtWTWAgYXJlIHN0YW5kYXJkLCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWdzIGFyZSBlc3NlbnRpYWxseSBgVkZJT19BUGAsIGBLVk1gLCBgVkZJT2AsIGFuZCBgQVBgLiBXYWl0LCBob2xkIG9uIOKAkyBgVkZJT19BUGAgKmltcGxpY2l0bHkqIGNvdmVycyBgS1ZNYCwgYFZGSU9gLCBhbmQgYEFQYCBkdWUgdG8gdGhlIGRlcGVuZGVuY2llcywgc28gd2UgY2FuIGp1c3Qgc3BlY2lmeSBgRW5hYmxlQ29uZmlnczogW1wiVkZJT19BUFwiXWAuIFRoYXQncyBjbGVhbmVyLlxuXG5Ob3csIGxldCdzIG1vdmUgb24gdG8gZnV6emluZyB0YXJnZXRzLiBUaGUgb2JqZWN0aXZlIGlzIHRvIGlkZW50aWZ5IG1vZGlmaWVkIGZ1bmN0aW9ucyB0aGF0IGFyZW4ndCBvbiBoZWF2aWx5IHRyYXZlbGVkIHBhdGhzLiBNeSBpbml0aWFsIGxpc3QgaW5jbHVkZXM6XG5cbiogICBgdmZpb19hcF9tZGV2X3Byb2JlYFxuKiAgIGB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWVgXG4qICAgYHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWVgXG4qICAgYHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZ2BcbiogICBgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmVgXG4qICAgYHZmaW9fYXBfbWRldl9jZmdfYWRkYFxuKiAgIGB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnYFxuKiAgIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgXG5cbkkgbmVlZCB0byBjb25maXJtIHdoaWNoIG9uZXMgYXJlIGV4dGVybmFsbHkgYWNjZXNzaWJsZSwgb3IgYXQgbGVhc3Qgbm90IHN0YXRpYy4gSSd2ZSBjaGVja2VkIGFuZCBub3RlZCB0aGF0IGB2ZmlvX2FwX21kZXZfcHJvYmVgIGlzIHN0YXRpYywgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWAsIGB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlYCwgYW5kIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgIGFyZSBub3QsIHdoaWxlIHRoZSBvdGhlcnMgYXJlLlxuXG5Ob3csIHJlbWVtYmVyaW5nIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMg4oCTIHdoaWNoIGFyZSBkaXN0aW5jdCBmcm9tIHN0YXRpYyBoZWxwZXJzIHdoaWNoIHRoZSBjb21waWxlciB3aWxsIGlubGluZSDigJMgSSBuZWVkIHRvIHJlY29uc2lkZXIgdGhpcyBsaXN0LiBFdmVuIHRob3VnaCBpdCdzIHN0YXRpYywgSSBiZWxpZXZlIGB2ZmlvX2FwX21kZXZfcHJvYmVgIGlzIGEgZ29vZCBjYW5kaWRhdGUsIGJlY2F1c2UgaXQgaXMgYW4gbWRldiBwcm9iZSBBUEkgZW50cnlwb2ludCwgYW5kIGdpdmVuIGl0cyB1c2FnZSBpbiBgdmZpb19hcF9tYXRyaXhfZHJpdmVyYCwgaXQgbGlrZWx5ICppc24ndCogaW5saW5lZC4gU28sIG15IHJlZmluZWQgdGFyZ2V0IGxpc3QgbG9va3MgbGlrZTpcblxuKiAgIGB2ZmlvX2FwX21kZXZfcHJvYmVgXG4qICAgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWBcbiogICBgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZWBcbiogICBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYFxuKiAgIGB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZGAgLSBXYWl0LCB0aGUgZnVuY3Rpb24gd2hpY2ggd2FzIG1vZGlmaWVkIGlzIGB2ZmlvX2FwX21kZXZfY2ZnX2FkZGAgd2hpY2gsIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZGAuIFdlIG5lZWQgdG8gc2VlIGlmIGB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZGAgaXMgbm9uLXN0YXRpYyBvciBub3QgdG8gc2VlIGlmIHRoaXMgaXMgYSBzdWl0YWJsZSB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzQ1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjM6NTkuMzk4NTg5MzY4WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTk4NTczMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19hcF9tZGV2X29uX2NmZ19hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI3NjM9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19hZGQodW5zaWduZWQgbG9uZyAqYXBtX2FkZCwgdW5zaWduZWQgbG9uZyAqYXFtX2FkZCxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNzkxLS8qKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzkyOiAqIHZmaW9fYXBfbWRldl9vbl9jZmdfYWRkIC0gcmVzcG9uZHMgdG8gdGhlIGFkZGl0aW9uIG9mIGFkYXB0ZXJzLCBkb21haW5zIGFuZFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNzkzLSAqXFx0XFx0XFx0ICAgICBjb250cm9sIGRvbWFpbnMgdG8gdGhlIGhvc3QgQVAgY29uZmlndXJhdGlvblxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MDEtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4MDI6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X29uX2NmZ19hZGQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY29uZmlnX2luZm8sXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MDMtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBhcF9jb25maWdfaW5mbyAqcHJldl9jb25maWdfaW5mbylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yODM0PXZvaWQgdmZpb19hcF9vbl9jZmdfY2hhbmdlZChzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jZmdfaW5mbyxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yODQyLVxcdHZmaW9fYXBfbWRldl9vbl9jZmdfcmVtb3ZlKGN1cl9jZmdfaW5mbywgcHJldl9jZmdfaW5mbyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4NDM6XFx0dmZpb19hcF9tZGV2X29uX2NmZ19hZGQoY3VyX2NmZ19pbmZvLCBwcmV2X2NmZ19pbmZvKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjg0NC1cXHRtZW1jcHkoXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWluZm8sIGN1cl9jZmdfaW5mbywgc2l6ZW9mKCpjdXJfY2ZnX2luZm8pKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjM6NTkuNzU4NDUyOTk3WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1MzU3MDc0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJlYWNoYWJpbGl0eSBvZiBWRklPIEFQIENvZGUgaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHNwZWNpZmljIGNvZGUgcGF0aHMgcmVsYXRlZCB0byBWRklPIEFQIChBY2Nlc3MgUHJvdGVjdGlvbikgYXJlIHJlYWNoYWJsZSBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQsIHNwZWNpZmljYWxseSB0aG9zZSB1c2VkIGJ5IHN5emthbGxlci4gIEkndmUgaWRlbnRpZmllZCB0aGUga2V5IGVudHJ5IHBvaW50czogYHZmaW9fYXBfbWRldl9wcm9iZWAsIGB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWVgLCBgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZWAsIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgLCBhbmQgY3J1Y2lhbGx5LCBgdmZpb19hcF9vbl9jZmdfY2hhbmdlZGAuIFRoZSBsYXN0IG9uZSBpcyAqbm90KiBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIGl0IGludGVyZXN0aW5nIGZvciBvdXIgYW5hbHlzaXMuIEkgYWxzbyBub3RlZCBgc3RhdHVzX3Nob3dgLCB0aG91Z2ggSSdtIG5vdCBnb2luZyB0byBsZWFuIG9uIHRoYXQgYmVjYXVzZSwgYXMgSSBzdXNwZWN0ZWQsIGl0IGlzIHRvbyBnZW5lcmljYWxseSBuYW1lZCBhbmQgaGVhdmlseSBkdXBsaWNhdGVkLlxuXG5UaGUgY3JpdGljYWwgcGllY2UgaXMgdGhlIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgIGNoZWNrLiAgVGhpcyBmdW5jdGlvbiwgYXMgSSB1bmRlcnN0YW5kLCBvbmx5IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBob3N0IHN5c3RlbSAqYWN0dWFsbHkqIGhhcyBBY2Nlc3MgUHJvdGVjdGlvbiBpbnN0cnVjdGlvbnMgYXZhaWxhYmxlLCB3aGljaCBpcyBhIGNoYXJhY3RlcmlzdGljIG9mIHMzOTB4IG1haW5mcmFtZXMuICBOb3csIHRoZSBwcm9tcHQgc3RhdGVkIFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gcXVlc3Rpb24gd2hldGhlciB0aGlzIGNvZGUgY291bGQgYmUgaGl0IGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCwgYnV0IEkgcXVpY2tseSByZWFsaXplZCB0aGF0IHN5emthbGxlciBydW5zIHMzOTB4IGluc3RhbmNlcywgYW5kIG9uICpyZWFsKiBtYWluZnJhbWVzIChvciBWTXMgcHJvdmlkZWQgYnkgSUJNKSDigJMgdGhlIEFQIGluc3RydWN0aW9ucyAqYXJlKiBhdmFpbGFibGUgaW4gdGhhdCBjb250ZXh0LiAgVGh1cywgdGhlIGNvZGUgKmlzKiByZWFjaGFibGUgdXNpbmcgdGhlIHN5emthbGxlciBzZXR1cC5cblxuVGhlIHByb21wdCwgSSBzZWUgbm93LCBzcGVjaWZpY2FsbHkgc3RhdGVzIFwidmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzICpsaWtlKiBHQ0Ugb3IgUUVNVVwiIOKAkyBpdCdzIG5vdCBzYXlpbmcgc3RhbmRhcmQgeDg2IFFFTVUuICBTaW5jZSBzeXprYWxsZXIgKmRvZXMqIHVzZSBRRU1VL0tWTSBvbiBzMzkweCBoYXJkd2FyZSBmb3IgczM5MHggZnV6emluZywgYW5kIEFQIGluc3RydWN0aW9ucyBhcmUgcHJlc2VudCBpbiB0aGF0IGVudmlyb25tZW50LCB0aGlzIGNvZGUgKmlzKiBpbmRlZWQgcmVhY2hhYmxlLiBTbywgV29ydGhGdXp6aW5nID0gVHJ1ZS5cblxuSSBicmllZmx5IGNoZWNrZWQgb24gYHN0YXR1c19zaG93YC4gSSBpbW1lZGlhdGVseSBzYXcgdGhhdCBgc3RhdHVzX3Nob3dgIGlzIGEgYmFkIGNhbmRpZGF0ZSwgZ2l2ZW4gaXRzIHN0YXRpYyBuYXR1cmUgYW5kIGV4dHJlbWVseSBnZW5lcmljIG5hbWUsIHdoaWNoIGlzIHVzZWQgaHVuZHJlZHMgb2YgdGltZXMgaW4gdGhlIGtlcm5lbC4gYHZmaW9fYXBfbWRldl9wcm9iZWAgaXMgc3RhdGljLCBidXQgaXMgaXQgdW5pcXVlIGVub3VnaD8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MjQwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjI0OjA5LjI5NDE2MzY5M1oiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MjA0ODA2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX2FwX21kZXZfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTU4PXN0YXRpYyBzdHJ1Y3QgYXBfZHJpdmVyIHZmaW9fYXBfZHJ2ID0ge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo1OTpcXHQucHJvYmUgPSB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTYwLVxcdC5yZW1vdmUgPSB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTc3Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWRldl9pbml0X2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzg5LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo3OTA6c3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03OTEte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNzg9c3RhdGljIHN0cnVjdCBtZGV2X2RyaXZlciB2ZmlvX2FwX21hdHJpeF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM4Ni1cXHR9LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMzg3OlxcdC5wcm9iZSA9IHZmaW9fYXBfbWRldl9wcm9iZSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM4OC1cXHQucmVtb3ZlID0gdmZpb19hcF9tZGV2X3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNDE0PXZvaWQgdmZpb19hcF9tZGV2X3VucmVnaXN0ZXIodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDE5LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNDIwOmludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0MjEte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaD0xNTY9dm9pZCB2ZmlvX2FwX21kZXZfdW5yZWdpc3Rlcih2b2lkKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE1Ny1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE1ODppbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKnF1ZXVlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE1OS12b2lkIHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqcXVldWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyNDoxMC44ODYyMTczODRaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc2NDA3MTkxOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVkZJTy1BUCBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBgdmZpb19hcF9tZGV2X3Byb2JlYCDigJMgdGhhdCdzIHRoZSBrZXkgc3RhcnRpbmcgcG9pbnQsIHRoZSB1bmlxdWUgb25lIGluIHRoaXMgY29udGV4dC4gTGV0J3MgbWFrZSBzdXJlIEkndmUgZ290IHRoaXMgc3RyYWlnaHQuIFRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBJIG5lZWQgdG8gc2NydXRpbml6ZSBhcmU6IGB2ZmlvX2FwX21kZXZfcHJvYmVgLCBgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlYCwgYHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWVgLCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCwgYW5kIGB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkYC5cblxuUmlnaHQsIGxldCBtZSByZXZpc2l0IHRoYXQgbGlzdCBvZiBjaGFuZ2VzLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gT2theSwgaGVyZSB3ZSBnbzogYHZmaW9fYXBfbWRldl9wcm9iZWAsIHRoZW4gYHZmaW9fYXBfbWRldl9mb3JfcXVldWVgLCB3aGljaCwgZXZlbiB0aG91Z2ggaXQncyBzdGF0aWMsIGdldHMgY2FsbGVkIGJ5IGEgZmV3IGZ1bmN0aW9ucyBsaWtlIGBzdGF0dXNfc2hvd2AsIHRoYXQncyBwb3RlbnRpYWxseSBpbXBvcnRhbnQuIFRoZW4gdGhlcmUncyBgc3RhdHVzX3Nob3dgLCBgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlYCwgYHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWVgLCBhbmQgc29tZSBtb3JlIHN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfY2ZnYCB0aGF0J3MgY2FsbGVkIGJ5IGB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZWAgYW5kIHNpbWlsYXJseSwgYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCBjYWxsZWQgYnkgYHZmaW9fYXBfbWRldl9vbl9jZmdfcmVtb3ZlYC4gQWxzbyBgdmZpb19hcF9tZGV2X2NmZ19hZGRgIHdoaWNoIGlzIGNhbGxlZCBieSBgdmZpb19hcF9tZGV2X29uX2NmZ19hZGRgIGFuZCBgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZ2Agd2hpY2ggaXMgY2FsbGVkIGJ5IGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgLCBhbmQgZmluYWxseSBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYC5cblxuU28sIHRoaW5raW5nIGFib3V0IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cy4uLiBJdCBsb29rcyBsaWtlIGl0IGJvaWxzIGRvd24gdG86IGB2ZmlvX2FwX21kZXZfcHJvYmVgLCBgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlYCwgYHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWVgLCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCwgYW5kLCBpbXBvcnRhbnRseSwgYHZmaW9fYXBfb25fY2ZnX2NoYW5nZWRgIOKAkyBzaW5jZSBpdCB0cmlnZ2VycyBjYWxscyB0byBgdmZpb19hcF9tZGV2X29uX2NmZ19hZGRgIGFuZCBgdmZpb19hcF9tZGV2X29uX2NmZ19yZW1vdmVgLlxuXG5Ob3csIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgc2VydmUgYXMgZW50cnkgcG9pbnRzPyBIbW1tLCBgdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZWAgaXMgY2FsbGVkIGJ5IGBzdGF0dXNfc2hvd2AsIGBpbl91c2Vfc2hvd2AsIGB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWVgIGFuZCBgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZWAuIFRoYXQgbWVhbnMgYHN0YXR1c19zaG93YCBhbmQgYGluX3VzZV9zaG93YCBhcmUgYWxzbyBlbnRyeXBvaW50cyBpbiBhIHdheSwgdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBUaG91Z2ggdGhlc2Ugc3lzZnMgYXR0cmlidXRlcywgd2l0aCB0aGUgYCpfc2hvd2AgYW5kIGAqX3N0b3JlYCBuYW1pbmcgY29udmVudGlvbiwgYXJlIHByZXR0eSBzdGFuZGFyZC4gRm9yIG5vdywgSSdsbCBrZWVwIHRoZSBmb2N1cyBvbiB0aG9zZSBrZXkgc3RhcnRpbmcgZnVuY3Rpb25zLlxuXG5KdXN0IGRvaW5nIGEgcXVpY2sgZG91YmxlLWNoZWNrLi4uIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUgbmFtZSBgdmZpb19hcF9vbl9jZmdfY2hhbmdlZGAgcmlnaHQsIHRoYXQgaXQncyB0aGUgcmlnaHQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDczLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjI1OjE4LjUyNjk0MTI1WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTYxMDEyMjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fYXBfb25fY2ZnX2NoYW5nZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTU4PXN0YXRpYyBzdHJ1Y3QgYXBfZHJpdmVyIHZmaW9fYXBfZHJ2ID0ge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTYxLVxcdC5pbl91c2UgPSB2ZmlvX2FwX21kZXZfcmVzb3VyY2VfaW5fdXNlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo2MjpcXHQub25fY29uZmlnX2NoYW5nZWQgPSB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy02My1cXHQub25fc2Nhbl9jb21wbGV0ZSA9IHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yODAyPXN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9vbl9jZmdfYWRkKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqY3VyX2NvbmZpZ19pbmZvLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MjctLyoqXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4Mjg6ICogdmZpb19hcF9vbl9jZmdfY2hhbmdlZCAtIGhhbmRsZXMgbm90aWZpY2F0aW9uIG9mIGNoYW5nZXMgdG8gdGhlIGhvc3QgQVBcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjgyOS0gKlxcdFxcdFxcdCAgICBjb25maWd1cmF0aW9uLlxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MzMtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4MzQ6dm9pZCB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqY3VyX2NmZ19pbmZvLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yODM1LVxcdFxcdFxcdCAgICBzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKnByZXZfY2ZnX2luZm8pXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE2MT1pbnQgdmZpb19hcF9tZGV2X3Jlc291cmNlX2luX3VzZSh1bnNpZ25lZCBsb25nICphcG0sIHVuc2lnbmVkIGxvbmcgKmFxbSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNjItXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoxNjM6dm9pZCB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtMTY0LVxcdFxcdFxcdCAgICBzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm9sZF9jb25maWdfaW5mbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjI1OjIwLjQ4Nzk2MDY4OVoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDA4OTE3Njc2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBWRklPIEFQIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIFZGSU8gQVAgZHJpdmVyIHBhdGNoLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkYCwgYHZmaW9fYXBfbWRldl9wcm9iZWAsIGB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWVgLCBgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZWAsIGFuZCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCBhcmUgYWxsIGNvcnJlY3QuIEV4Y2VsbGVudC4gVGhleSBhcmUgYWxzbyBlbnRyeSBwb2ludHMgLSBzcGVjaWZpY2FsbHkgY2FsbGJhY2tzIGZvciB0aGUgbWRldiBhbmQgQVAgZHJpdmVycy4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhlIG1haW4gZm9jdXMgYXJlYXMuXG5cbkkndmUgYWxzbyBub3RlZCBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnM6IGB2ZmlvX2FwX21kZXZfZm9yX3F1ZXVlYCwgYHN0YXR1c19zaG93YCwgYHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZ2AsIGB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZWAsIGB2ZmlvX2FwX21kZXZfY2ZnX2FkZGAsIGFuZCBgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZ2AuIFdoaWxlIHRoZXNlIGFyZSBpbXBvcnRhbnQsIHRoZXkncmUgbm90IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBidXQgcmF0aGVyIGhlbHBlcnMgYW5kIHN5c2ZzIGF0dHJpYnV0ZXMsIHNvIHRoZSBpbml0aWFsIGZvY3VzIHN5bWJvbCBsaXN0IGlzIHNvbGlkLlxuXG5UaGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIHBhdGNoIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyByZWxhdGVkIHRvIHRoZSBWRklPIEFQIGRyaXZlciBmb3IgczM5MCwgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgbG9jayBvcmRlcmluZyBpc3N1ZXMgYW5kIHJlbGF0ZWQgc3BsYXRzLiBUaGlzIGFmZmVjdHMgaG93IHRoZSBtZGV2IGFuZCBBUCBidXMgaW50ZXJhY3QgYW5kIHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gbWRldiBkZXZpY2VzIGFyZSBjcmVhdGVkIG9yIHRoZSBBUCBidXMgc2NhbnMgZm9yIGRldmljZXMsIGVzcGVjaWFsbHkgaW4gYSBzMzkweCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCBzeXprYWxsZXIgd291bGQgbGlrZWx5IHRyaWdnZXIuXG5cbk5vdyBmb3IgdGhlIGNvbmZpZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGlzIHJpZ2h0LiBUaGUgcHJpbWFyeSBjb25maWcgaXMgYFZGSU9fQVBgLCB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gZXhwbGljaXRseSBpbmNsdWRlPyBgVkZJT19BUGAgZGVwZW5kcyBvbiBgS1ZNYCwgYFZGSU9gLCBhbmQgYEFQYC4gU2luY2UgYEFQYCBpcyBgZGVmX3RyaXN0YXRlIHlgLCBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdC4gYEtWTWAgYW5kIGBWRklPYCBhcmUgYWxzbyBvZnRlbiBlbmFibGVkLiBIb3dldmVyLCB0byBiZSBzYWZlIGFuZCBlbnN1cmUgdGhlIGNvZGUgY29tcGlsZXMgc3RhdGljYWxseSBJIHNob3VsZCBpbmNsdWRlIGFsbCBmb3VyOiBgVkZJT19BUGAsIGBWRklPYCwgYEtWTWAsIGFuZCBgQVBgLiBNeSB0aGlua2luZyBpcyB0aGF0IHRoZSBLYnVpbGQgc3lzdGVtIG5lZWRzIHRvIGhhdmUgdGhlc2UgY29uZmlncyBleHBsaWNpdGx5IGRlY2xhcmVkLiBJJ3ZlIGRvdWJsZS1jaGVja2VkIHRoZSBwYXRjaCBhbmQgdGhlIG1vZGlmaWVkIGZpbGUsIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgLCBpcyBjb21waWxlZCB1bmRlciB0aGUgYENPTkZJR19WRklPX0FQYCBmbGFnLiBUaGVyZSdzIG5vIG90aGVyIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGludm9sdmVkLiBTbywgYmFzZWQgb24gdGhlIGBkZXBlbmRzIG9uYCBsb2dpYywgbXkgZmluYWwgYW5zd2VyIHNob3VsZCBiZTpcbmBFbmFibGVDb25maWdzOiBbXCJWRklPX0FQXCIsIFwiVkZJT1wiLCBcIktWTVwiLCBcIkFQXCJdYC5cbk5vdyBJJ20gY29uZmlkZW50IGluIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODk3NywiT3V0cHV0VG9rZW5zIjoyNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjI1OjQwLjU3NzE0MjA5M1oiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczOTE3MDI4LCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBWRklPX0FQLCBBUCIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWRklPX0FQXCIsXG4gICAgXCJWRklPXCIsXG4gICAgXCJLVk1cIixcbiAgICBcIkFQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19hcF9tZGV2X3Byb2JlXCIsXG4gICAgXCJ2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWVcIixcbiAgICBcInZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWVcIixcbiAgICBcInZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZVwiLFxuICAgIFwidmZpb19hcF9vbl9jZmdfY2hhbmdlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkwIGFyY2hpdGVjdHVyZSwgZml4aW5nIGxvY2sgb3JkZXJpbmcgYW5kIGxvY2tkZXAgc3BsYXRzIGluIHZhcmlvdXMgbWRldiBhbmQgQVAgYnVzIGNhbGxiYWNrcyAoZS5nLiwgdmZpb19hcF9tZGV2X3Byb2JlLCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB3aGVuIHRoZSB2ZmlvX2FwIGRyaXZlciBpcyBsb2FkZWQgYW5kIG1kZXYgZGV2aWNlcyBhcmUgY3JlYXRlZCB2aWEgc3lzZnMsIG9yIHdoZW4gdGhlIEFQIGJ1cyBwZXJpb2RpY2FsbHkgc2NhbnMgZm9yIGRldmljZXMuIFN5emthbGxlciBjYW4gdHJpZ2dlciB0aGVzZSBwYXRocyBpbiBzMzkweCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IEFQIGluc3RydWN0aW9ucyAoZS5nLiwgS1ZNIG9uIHMzOTB4IG1haW5mcmFtZXMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBWRklPX0FQLCBBUFwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyNTo0MC42NTEwNjkzODFaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1MTgzNjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBNaXNzaW5nIFZGSU9fQVAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGl0IHNlZW1zIGxpa2UgYFZGSU9fQVBgIGFuZCBzaW1wbHkgYEFQYCBhcmUgYmVpbmcgZmxhZ2dlZCBhcyBub24tZXhpc3RlbnQuIFRoYXQncyBvZGQsIEkgY291bGQgaGF2ZSBzd29ybiBJIHNhdyB0aGVtIGRlZmluZWQgc29tZXdoZXJlLCBlc3BlY2lhbGx5IHNpbmNlIEkndmUgYmVlbiB3b3JraW5nIHdpdGggdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBBaCwgdGhhdCdzIHJpZ2h0LCB0aGV5J3JlIGluIGBhcmNoL3MzOTAvS2NvbmZpZ2AhIFRoYXTigJlzIHdoZXJlIEkgd2FzIHByZXR0eSBzdXJlIEkgc2F3IHRoZW0uXG5cblRoZSBwcm9ibGVtIG11c3QgYmUgdGhhdCB0aGUgdG9vbGluZyBpcyBjaGVja2luZyB0aGUgd3JvbmcgYXJjaGl0ZWN0dXJlLiBQZXJoYXBzIGl0J3MgZGVmYXVsdGluZyB0byBjaGVja2luZyBhZ2FpbnN0IHg4NiBjb25maWd1cmF0aW9ucyBzaW5jZSBpdCBpc27igJl0IGF3YXJlIG9mIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSXQncyBsaWtlbHkgdHJ5aW5nIHRvIHZhbGlkYXRlIHRoaW5ncyBhZ2FpbnN0IGFuIHg4Ni1jZW50cmljIHZpZXcuIEhtbSwgbGV0IG1lIGp1c3QgY29uZmlybS4gWWVwLCBgVkZJT19BUGAgaXMgZGVmaW5pdGVseSBpbiBgYXJjaC9zMzkwL0tjb25maWdgLiBTbyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGJlZm9yZSBkaXZpbmcgZGVlcGVyLCBpcyB0byBjb25maXJtIHRoYXQgYENPTkZJR19WRklPX0FQYCBpcyBhY3R1YWxseSBkZWNsYXJlZC4gTGV0J3MgbWFrZSBzdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGl0c2VsZiBleGlzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMDM0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOlsic2V0LXJlc3VsdHMiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyNTo0NS4yMDI5MDc4OFoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNzQyNTc0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT19BUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvS2NvbmZpZz04MjM9Y29uZmlnIFZGSU9fQ0NXXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04MzMtXFxuYXJjaC9zMzkwL0tjb25maWc6ODM0OmNvbmZpZyBWRklPX0FQXFxuYXJjaC9zMzkwL0tjb25maWctODM1LVxcdGRlZl90cmlzdGF0ZSBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjI1OjQ2Ljc0MDMzODU4MloiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODI4MTQ2OTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIHNlZWluZyB0aGVzZSBjb25maWd1cmF0aW9ucyDigJMgc3BlY2lmaWNhbGx5IGluIGBhcmNoL3MzOTAvS2NvbmZpZ2AuIEkga25vdyB0aGV5J3JlIHRoZXJlLCB0aGF0J3MgY2VydGFpbi4gU28sIHdoeSBkaWQgdGhpcyBgc2V0LXJlc3VsdHNgIHRvb2wgdGVsbCBtZSB0aGV5IGRvbid0IGV4aXN0PyBBaCwgSSB0aGluayBJJ3ZlIGdvdCBpdC4gVGhpcyB0b29sIGlzIGxpa2VseSBjaGVja2luZyBhZ2FpbnN0IHRoZSB4ODYgYEtjb25maWdgLCBvciBtYXliZSBldmVuIHJ1bm5pbmcgYSBnZW5lcmljIGBtYWtlIGFsbHllc2NvbmZpZ2Agb24gYW4geDg2IGJ1aWxkLiBNYWtlcyBzZW5zZS4gVGhlc2UgY29uZmlncyBhcmUgZm9yIGFuIHMzOTAgc3BlY2lmaWMgZHJpdmVyLCB3aGljaCBtZWFucyB0aGV5J3JlIG9ubHkgZ29pbmcgdG8gYmUgYXZhaWxhYmxlIHdoZW4gdGhlIGFyY2hpdGVjdHVyZSBpcyBzZXQgdG8gYEFSQ0g9czM5MGAuXG5cbklmIHRoZSB0b29sIGlzIG91dHJpZ2h0IHJlamVjdGluZyB0aGVtLCBJJ20gZ29pbmcgdG8gaGF2ZSB0byBtYWtlIGEgY2hvaWNlLiBJIGNvdWxkIGp1c3Qgb21pdCB0aGVtIGVudGlyZWx5LiBPciwgbWF5YmUgb25seSBpbmNsdWRlIHRoZSBjb25maWdzIHRoYXQgZXhpc3Qgb24geDg2LCBsaWtlIGBWRklPYCBhbmQgYEtWTWAuIEJ1dCB3YWl0Li4uIGlmIEkgb21pdCB0aG9zZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlncywgYW0gSSBnb2luZyB0byBwcmV2ZW50IHN5emthbGxlciBmcm9tIGV2ZW4gZW5hYmxpbmcgdGhlbSBvbiBzMzkwPyBUaGF0IHdvdWxkIGRlZmVhdCB0aGUgcHVycG9zZS4gU3RpbGwsIGlmIHRoZSB0b29sIGFic29sdXRlbHkgcmVqZWN0cyB0aGVtLCBJIGRvbid0IGhhdmUgbXVjaCBvZiBhIGNob2ljZSwgZG8gST9cblxuQWxyaWdodCwgbGV0IG1lIHRyeSBzZXR0aW5nIGBFbmFibGVDb25maWdzOiBbXCJWRklPXCIsIFwiS1ZNXCJdYC4gVGhhdCBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTQ4OCwiT3V0cHV0VG9rZW5zIjoyMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjU6NTMuNTY4NDg4ODQ0WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU0MDIyOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZGSU9cIixcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmaW9fYXBfbWRldl9wcm9iZVwiLFxuICAgIFwidmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlXCIsXG4gICAgXCJ2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlXCIsXG4gICAgXCJ2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVcIixcbiAgICBcInZmaW9fYXBfb25fY2ZnX2NoYW5nZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBmb3IgczM5MCBhcmNoaXRlY3R1cmUsIGZpeGluZyBsb2NrIG9yZGVyaW5nIGFuZCBsb2NrZGVwIHNwbGF0cyBpbiB2YXJpb3VzIG1kZXYgYW5kIEFQIGJ1cyBjYWxsYmFja3MgKGUuZy4sIHZmaW9fYXBfbWRldl9wcm9iZSwgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgd2hlbiB0aGUgdmZpb19hcCBkcml2ZXIgaXMgbG9hZGVkIGFuZCBtZGV2IGRldmljZXMgYXJlIGNyZWF0ZWQgdmlhIHN5c2ZzLCBvciB3aGVuIHRoZSBBUCBidXMgcGVyaW9kaWNhbGx5IHNjYW5zIGZvciBkZXZpY2VzLiBTeXprYWxsZXIgY2FuIHRyaWdnZXIgdGhlc2UgcGF0aHMgaW4gczM5MHggdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBBUCBpbnN0cnVjdGlvbnMgKGUuZy4sIEtWTSBvbiBzMzkweCBtYWluZnJhbWVzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWRklPXCIsXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZmlvX2FwX21kZXZfcHJvYmVcIixcbiAgICBcInZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZVwiLFxuICAgIFwidmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZVwiLFxuICAgIFwidmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlXCIsXG4gICAgXCJ2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBkcml2ZXIgZm9yIHMzOTAgYXJjaGl0ZWN0dXJlLCBmaXhpbmcgbG9jayBvcmRlcmluZyBhbmQgbG9ja2RlcCBzcGxhdHMgaW4gdmFyaW91cyBtZGV2IGFuZCBBUCBidXMgY2FsbGJhY2tzIChlLmcuLCB2ZmlvX2FwX21kZXZfcHJvYmUsIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZSkuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHdoZW4gdGhlIHZmaW9fYXAgZHJpdmVyIGlzIGxvYWRlZCBhbmQgbWRldiBkZXZpY2VzIGFyZSBjcmVhdGVkIHZpYSBzeXNmcywgb3Igd2hlbiB0aGUgQVAgYnVzIHBlcmlvZGljYWxseSBzY2FucyBmb3IgZGV2aWNlcy4gU3l6a2FsbGVyIGNhbiB0cmlnZ2VyIHRoZXNlIHBhdGhzIGluIHMzOTB4IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgQVAgaW5zdHJ1Y3Rpb25zIChlLmcuLCBLVk0gb24gczM5MHggbWFpbmZyYW1lcykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjI1OjUzLjY0Mzg5ODAyMloiLCJTZXEiOjYxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExMzY4NzQxOTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjU6NTMuNjQ0NDA4MjgyWiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUxMTM2ODIyNjQyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcHJpbWFyaWx5IGFkZHJlc3NlcyBsb2NraW5nIGlzc3VlcyAoZS5nLiwgY2hhbmdpbmcgbWRldnNfbG9jayB0byBndWVzdHNfbG9jaywgZml4aW5nIGxvY2sgb3JkZXJpbmcgdG8gcHJldmVudCBsb2NrZGVwIHNwbGF0cyksIGZpeGVzIG1lbW9yeSBsZWFrcy9yZXNvdXJjZSBjbGVhbnVwIGluIGVycm9yIHBhdGhzLCBhbmQgY29ycmVjdHMgbG9naWMgYnVncyBpbnZvbHZpbmcgYml0bWFwIG9wZXJhdGlvbnMgKGJpdG1hcF9hbmRub3QgdnMgYml0bWFwX2ludGVyc2VjdHMpLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCBvciBtYW5pcHVsYXRlZC4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSByZWdyZXNzaW9ucyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGM5NjI4YjlkNWFiMjc5YjMxMDBhNWUwYzBiMGQwY2Q4YmU4MjA1YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDEyOjIxOjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG5pbmRleCA0NGIzYTFkY2MxYjM2Li5mYWFiNWU5MTc5ZmYxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG4rKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbkBAIC04MDMsOSArODAzLDkgQEAgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KVxuIFx0bWF0cml4X21kZXYtXHUwMDNlcmVxX3RyaWdnZXIgPSBOVUxMO1xuIFx0bWF0cml4X21kZXYtXHUwMDNlY2ZnX2NoZ190cmlnZ2VyID0gTlVMTDtcbiBcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZtZGV2LVx1MDAzZWRldiwgbWF0cml4X21kZXYpO1xuLVx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiBcdGxpc3RfYWRkKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZW5vZGUsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0KTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2spO1xuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX3B1dF92ZGV2OlxuQEAgLTIyOTcsNiArMjI5Nyw4IEBAIHN0YXRpYyBzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKnZmaW9fYXBfbWRldl9mb3JfcXVldWUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4gXHR1bnNpZ25lZCBsb25nIGFwaWQgPSBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pO1xuIFx0dW5zaWduZWQgbG9uZyBhcHFpID0gQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbik7XG4gXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2spO1xuK1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2X2xpc3QsIG5vZGUpIHtcbiBcdFx0aWYgKHRlc3RfYml0X2ludihhcGlkLCBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXBtKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHRlc3RfYml0X2ludihhcHFpLCBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXFtKSlcbkBAIC0yMzE2LDYgKzIzMTgsNyBAQCBzdGF0aWMgc3NpemVfdCBzdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuIFx0c3RydWN0IGFwX2RldmljZSAqYXBkZXYgPSB0b19hcF9kZXYoZGV2KTtcbiBcbitcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4gXHRxID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNmFwZGV2LVx1MDAzZWRldmljZSk7XG4gXHRtYXRyaXhfbWRldiA9IHZmaW9fYXBfbWRldl9mb3JfcXVldWUocSk7XG5AQCAtMjM0Myw2ICsyMzQ2LDcgQEAgc3RhdGljIHNzaXplX3Qgc3RhdHVzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXG4gXHRyZXR1cm4gbmNoYXJzO1xuIH1cbkBAIC0yNDE1LDE0ICsyNDE5LDE3IEBAIHZvaWQgdmZpb19hcF9tZGV2X3VucmVnaXN0ZXIodm9pZClcbiBcbiBpbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuIHtcbi1cdGludCByZXQ7XG4rXHRpbnQgcmV0LCBhcHFuO1xuIFx0c3RydWN0IHZmaW9fYXBfcXVldWUgKnE7XG4gXHRERUNMQVJFX0JJVE1BUChhcG1fZmlsdGVyZWQsIEFQX0RFVklDRVMpO1xuIFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcbiBcbitcdGFwcW4gPSB0b19hcF9xdWV1ZShcdTAwMjZhcGRldi1cdTAwM2VkZXZpY2UpLVx1MDAzZXFpZDtcbitcdG1hdHJpeF9tZGV2ID0gZ2V0X3VwZGF0ZV9sb2Nrc19ieV9hcHFuKGFwcW4pO1xuK1xuIFx0cmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKFx1MDAyNmFwZGV2LVx1MDAzZWRldmljZS5rb2JqLCBcdTAwMjZ2ZmlvX3F1ZXVlX2F0dHJfZ3JvdXApO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBlcnJfcmVsZWFzZV9sb2NrcztcbiBcbiBcdHEgPSBremFsbG9jX29iaigqcSk7XG4gXHRpZiAoIXEpIHtcbkBAIC0yNDMwLDExICsyNDM3LDEwIEBAIGludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXG4gXHRcdGdvdG8gZXJyX3JlbW92ZV9ncm91cDtcbiBcdH1cbiBcbi1cdHEtXHUwMDNlYXBxbiA9IHRvX2FwX3F1ZXVlKFx1MDAyNmFwZGV2LVx1MDAzZWRldmljZSktXHUwMDNlcWlkO1xuK1x0cS1cdTAwM2VhcHFuID0gYXBxbjtcbiBcdHEtXHUwMDNlc2F2ZWRfaXNjID0gVkZJT19BUF9JU0NfSU5WQUxJRDtcbiBcdG1lbXNldChcdTAwMjZxLVx1MDAzZXJlc2V0X3N0YXR1cywgMCwgc2l6ZW9mKHEtXHUwMDNlcmVzZXRfc3RhdHVzKSk7XG4gXHRJTklUX1dPUksoXHUwMDI2cS1cdTAwM2VyZXNldF93b3JrLCBhcHFfcmVzZXRfY2hlY2spO1xuLVx0bWF0cml4X21kZXYgPSBnZXRfdXBkYXRlX2xvY2tzX2J5X2FwcW4ocS1cdTAwM2VhcHFuKTtcbiBcbiBcdGlmIChtYXRyaXhfbWRldikge1xuIFx0XHR2ZmlvX2FwX21kZXZfbGlua19xdWV1ZShtYXRyaXhfbWRldiwgcSk7XG5AQCAtMjQ2NCw2ICsyNDcwLDggQEAgaW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcbiBcbiBlcnJfcmVtb3ZlX2dyb3VwOlxuIFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFx1MDAyNmFwZGV2LVx1MDAzZWRldmljZS5rb2JqLCBcdTAwMjZ2ZmlvX3F1ZXVlX2F0dHJfZ3JvdXApO1xuK2Vycl9yZWxlYXNlX2xvY2tzOlxuK1x0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX21kZXYobWF0cml4X21kZXYpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMjQ5OSwxMiArMjUwNywxNSBAQCB2b2lkIHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXG4gXHQvKlxuIFx0ICogSWYgdGhlIHF1ZXVlIGlzIG5vdCBpbiB0aGUgaG9zdCdzIEFQIGNvbmZpZ3VyYXRpb24sIHRoZW4gcmVzZXR0aW5nXG4gXHQgKiBpdCB3aWxsIGZhaWwgd2l0aCByZXNwb25zZSBjb2RlIDAxLCAoQVBRTiBub3QgdmFsaWQpOyBzbywgbGV0J3MgbWFrZVxuLVx0ICogc3VyZSBpdCBpcyBpbiB0aGUgaG9zdCdzIGNvbmZpZy5cbitcdCAqIHN1cmUgaXQgaXMgaW4gdGhlIGhvc3QncyBjb25maWcuIElmIGl0IGlzIG5vdCwgdGhlbiBmcmVlIHRoZSBLVk0gR0lTQ1xuK1x0ICogcmVzb3VyY2VzLlxuIFx0ICovXG4gXHRpZiAodGVzdF9iaXRfaW52KGFwaWQsICh1bnNpZ25lZCBsb25nICopbWF0cml4X2Rldi1cdTAwM2VpbmZvLmFwbSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgdGVzdF9iaXRfaW52KGFwcWksICh1bnNpZ25lZCBsb25nICopbWF0cml4X2Rldi1cdTAwM2VpbmZvLmFxbSkpIHtcbiBcdFx0dmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHEpO1xuIFx0XHRmbHVzaF93b3JrKFx1MDAyNnEtXHUwMDNlcmVzZXRfd29yayk7XG4rXHR9IGVsc2Uge1xuK1x0XHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XG4gXHR9XG4gXG4gZG9uZTpcbkBAIC0yNTU5LDI0ICsyNTcwLDI4IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICphcXJlbSxcbiBcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqY2RyZW0pXG4ge1xuLVx0aW50IGRvX2hvdHBsdWcgPSAwO1xuK1x0Ym9vbCBkb19ob3RwbHVnID0gZmFsc2U7XG4gXG4tXHRpZiAoIWJpdG1hcF9lbXB0eShhcHJlbSwgQVBfREVWSUNFUykpIHtcbi1cdFx0ZG9faG90cGx1ZyB8PSBiaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFwbSxcbi1cdFx0XHRcdFx0ICAgIG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFwbSxcbi1cdFx0XHRcdFx0ICAgIGFwcmVtLCBBUF9ERVZJQ0VTKTtcbitcdGlmIChiaXRtYXBfaW50ZXJzZWN0cyhtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hcG0sIGFwcmVtLCBBUF9ERVZJQ0VTKSkge1xuK1x0XHRiaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFwbSxcbitcdFx0XHQgICAgICBtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hcG0sXG4rXHRcdFx0ICAgICAgYXByZW0sIEFQX0RFVklDRVMpO1xuK1x0XHRkb19ob3RwbHVnID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdGlmICghYml0bWFwX2VtcHR5KGFxcmVtLCBBUF9ET01BSU5TKSkge1xuLVx0XHRkb19ob3RwbHVnIHw9IGJpdG1hcF9hbmRub3QobWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXFtLFxuLVx0XHRcdFx0XHQgICAgbWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXFtLFxuLVx0XHRcdFx0XHQgICAgYXFyZW0sIEFQX0RFVklDRVMpO1xuK1x0aWYgKGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFxbSwgYXFyZW0sIEFQX0RPTUFJTlMpKSB7XG4rXHRcdGJpdG1hcF9hbmRub3QobWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXFtLFxuK1x0XHRcdCAgICAgIG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFxbSxcbitcdFx0XHQgICAgICBhcXJlbSwgQVBfRE9NQUlOUyk7XG4rXHRcdGRvX2hvdHBsdWcgPSB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKCFiaXRtYXBfZW1wdHkoY2RyZW0sIEFQX0RPTUFJTlMpKVxuLVx0XHRkb19ob3RwbHVnIHw9IGJpdG1hcF9hbmRub3QobWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYWRtLFxuLVx0XHRcdFx0XHQgICAgbWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYWRtLFxuLVx0XHRcdFx0XHQgICAgY2RyZW0sIEFQX0RPTUFJTlMpO1xuK1x0aWYgKGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFkbSwgY2RyZW0sIEFQX0RPTUFJTlMpKSB7XG4rXHRcdGJpdG1hcF9hbmRub3QobWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYWRtLFxuK1x0XHRcdCAgICAgIG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFkbSxcbitcdFx0XHQgICAgICBjZHJlbSwgQVBfRE9NQUlOUyk7XG4rXHRcdGRvX2hvdHBsdWcgPSB0cnVlO1xuK1x0fVxuIFxuIFx0aWYgKGRvX2hvdHBsdWcpXG4gXHRcdHZmaW9fYXBfbWRldl91cGRhdGVfZ3Vlc3RfYXBjYihtYXRyaXhfbWRldik7XG5AQCAtMjYwMywyOCArMjYxOCwzNSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZSh1bnNpZ25lZCBsb25nICphcF9yZW1vdmUsXG4gXHRERUNMQVJFX0JJVE1BUChhcHJlbSwgQVBfREVWSUNFUyk7XG4gXHRERUNMQVJFX0JJVE1BUChhcXJlbSwgQVBfRE9NQUlOUyk7XG4gXHRERUNMQVJFX0JJVE1BUChjZHJlbSwgQVBfRE9NQUlOUyk7XG4tXHRpbnQgZG9fcmVtb3ZlID0gMDtcbitcdGludCBkb19yZW1vdmU7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbitcdFx0LypcbitcdFx0ICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIHRvIGFjY2VzcyBmaWVsZHMgd2l0aGluIG1hdHJpeF9tZGV2LFxuK1x0XHQgKiBhbmQga3ZtLVx1MDAzZWxvY2sgbXVzdCBiZSB0YWtlbiBiZWZvcmUgbWRldnNfbG9jayB0byBzYXRpc2Z5IHRoZSBsb2NrXG4rXHRcdCAqIG9yZGVyaW5nIHJlcXVpcmVtZW50IGFuZCBwcmV2ZW50IGEgbG9ja2RlcCBzcGxhdC5cbitcdFx0ICovXG4rXHRcdGlmIChtYXRyaXhfbWRldi1cdTAwM2Vrdm0pXG4rXHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiBcbi1cdFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoYXByZW0sIGFwX3JlbW92ZSxcbi1cdFx0XHRcdFx0ICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXBtLFxuLVx0XHRcdFx0XHQgIEFQX0RFVklDRVMpO1xuK1x0XHRkb19yZW1vdmUgPSBiaXRtYXBfYW5kKGFwcmVtLCBhcF9yZW1vdmUsXG4rXHRcdFx0XHQgICAgICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFwbSxcbitcdFx0XHRcdCAgICAgICBBUF9ERVZJQ0VTKTtcbiBcdFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoYXFyZW0sIGFxX3JlbW92ZSxcbiBcdFx0XHRcdFx0ICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXFtLFxuIFx0XHRcdFx0XHQgIEFQX0RPTUFJTlMpO1xuLVx0XHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChjZHJlbSwgY2RfcmVtb3ZlLFxuLVx0XHRcdFx0XHQgICAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hZG0sXG4tXHRcdFx0XHRcdCAgICAgQVBfRE9NQUlOUyk7XG4rXHRcdGRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kKGNkcmVtLCBjZF9yZW1vdmUsXG4rXHRcdFx0XHRcdG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hZG0sXG4rXHRcdFx0XHRcdEFQX0RPTUFJTlMpO1xuIFxuIFx0XHRpZiAoZG9fcmVtb3ZlKVxuIFx0XHRcdHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZyhtYXRyaXhfbWRldiwgYXByZW0sIGFxcmVtLFxuIFx0XHRcdFx0XHRcdCAgICBjZHJlbSk7XG4gXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuK1x0XHRpZiAobWF0cml4X21kZXYtXHUwMDNla3ZtKVxuK1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4gXHR9XG4gfVxuIFxuQEAgLTI3NDksMTIgKzI3NzEsMjAgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19hZGQodW5zaWduZWQgbG9uZyAqYXBtX2FkZCwgdW5zaWduZWQgbG9uZyAqYXFtX2FkZCxcbiBcdHZmaW9fYXBfZmlsdGVyX2FwaWRfYnlfcXR5cGUoYXBtX2FkZCwgYXFtX2FkZCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgbWRldnNfbG9jayBtdXN0IGJlIGhlbGQgaW4gb3JkZXIgdG8gYWNjZXNzIGZpZWxkc1xuK1x0XHQgKiB3aXRoaW4gbWF0cml4X21kZXZcbitcdFx0ICovXG4rXHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbitcbiBcdFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cdTAwM2VhcG1fYWRkLFxuIFx0XHRcdCAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcG0sIGFwbV9hZGQsIEFQX0RFVklDRVMpO1xuIFx0XHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVx1MDAzZWFxbV9hZGQsXG4gXHRcdFx0ICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFxbSwgYXFtX2FkZCwgQVBfRE9NQUlOUyk7XG4gXHRcdGJpdG1hcF9hbmQobWF0cml4X21kZXYtXHUwMDNlYWRtX2FkZCxcbiBcdFx0XHQgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYWRtLCBhZG1fYWRkLCBBUF9ERVZJQ0VTKTtcbitcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4gXHR9XG4gfVxuIFxuQEAgLTI4MjEsOCArMjg1MSw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbiBcdERFQ0xBUkVfQklUTUFQKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XG4gXHRib29sIGZpbHRlcl9kb21haW5zLCBmaWx0ZXJfYWRhcHRlcnMsIGZpbHRlcl9jZG9tcywgZG9faG90cGx1ZyA9IGZhbHNlO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4tXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4rXHRiaXRtYXBfemVybyhhcG1fZmlsdGVyZWQsIEFQX0RFVklDRVMpO1xuIFxuIFx0ZmlsdGVyX2FkYXB0ZXJzID0gYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFwbSxcbiBcdFx0XHRcdFx0ICAgIG1hdHJpeF9tZGV2LVx1MDAzZWFwbV9hZGQsIEFQX0RFVklDRVMpO1xuQEAgLTI4NDEsOSArMjg3MCw2IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbiBcdFx0dmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTtcbiBcbiBcdHJlc2V0X3F1ZXVlc19mb3JfYXBpZHMobWF0cml4X21kZXYsIGFwbV9maWx0ZXJlZCk7XG4tXG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4gfVxuIFxuIHZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxuQEAgLTI4NTQsMTUgKzI4ODAsMjkgQEAgdm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXG4gXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2spO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2X2xpc3QsIG5vZGUpIHtcbitcdFx0LypcbitcdFx0ICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIHRvIGFjY2VzcyBmaWVsZHMgd2l0aGluIG1hdHJpeF9tZGV2LFxuK1x0XHQgKiBhbmQga3ZtLVx1MDAzZWxvY2sgbXVzdCBiZSB0YWtlbiBiZWZvcmUgbWRldnNfbG9jayB0byBzYXRpc2Z5IHRoZSBsb2NrXG4rXHRcdCAqIG9yZGVyaW5nIHJlcXVpcmVtZW50IGFuZCBwcmV2ZW50IGEgbG9ja2RlcCBzcGxhdC5cbitcdFx0ICovXG4rXHRcdGlmIChtYXRyaXhfbWRldi1cdTAwM2Vrdm0pXG4rXHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbitcbiBcdFx0aWYgKGJpdG1hcF9lbXB0eShtYXRyaXhfbWRldi1cdTAwM2VhcG1fYWRkLCBBUF9ERVZJQ0VTKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGJpdG1hcF9lbXB0eShtYXRyaXhfbWRldi1cdTAwM2VhcW1fYWRkLCBBUF9ET01BSU5TKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGJpdG1hcF9lbXB0eShtYXRyaXhfbWRldi1cdTAwM2VhZG1fYWRkLCBBUF9ET01BSU5TKSlcbi1cdFx0XHRjb250aW51ZTtcbitcdFx0XHRnb3RvIGRvX3VubG9jaztcbiBcbiBcdFx0dmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhtYXRyaXhfbWRldik7XG4gXHRcdGJpdG1hcF9jbGVhcihtYXRyaXhfbWRldi1cdTAwM2VhcG1fYWRkLCAwLCBBUF9ERVZJQ0VTKTtcbiBcdFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVx1MDAzZWFxbV9hZGQsIDAsIEFQX0RPTUFJTlMpO1xuIFx0XHRiaXRtYXBfY2xlYXIobWF0cml4X21kZXYtXHUwMDNlYWRtX2FkZCwgMCwgQVBfRE9NQUlOUyk7XG4rXG4rZG9fdW5sb2NrOlxuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbitcdFx0aWYgKG1hdHJpeF9tZGV2LVx1MDAzZWt2bSlcbitcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuIFx0fVxuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2spO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjU6NTMuNjQ0NDA5MDMyWiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMTM2ODE5NjAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjU2MzUsIk91dHB1dFRva2VucyI6MTI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI5MTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjozNDoyNS4wMTI2MDg1NjVaIiwiU2VxIjo2NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDIxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByaW1hcmlseSBhZGRyZXNzZXMgbG9ja2luZyBpc3N1ZXMgKGUuZy4sIGNoYW5naW5nIG1kZXZzX2xvY2sgdG8gZ3Vlc3RzX2xvY2ssIGZpeGluZyBsb2NrIG9yZGVyaW5nIHRvIHByZXZlbnQgbG9ja2RlcCBzcGxhdHMpLCBmaXhlcyBtZW1vcnkgbGVha3MvcmVzb3VyY2UgY2xlYW51cCBpbiBlcnJvciBwYXRocywgYW5kIGNvcnJlY3RzIGxvZ2ljIGJ1Z3MgaW52b2x2aW5nIGJpdG1hcCBvcGVyYXRpb25zIChiaXRtYXBfYW5kbm90IHZzIGJpdG1hcF9pbnRlcnNlY3RzKS4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgb3IgbWFuaXB1bGF0ZWQuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbnMgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByaW1hcmlseSBhZGRyZXNzZXMgbG9ja2luZyBpc3N1ZXMgKGUuZy4sIGNoYW5naW5nIG1kZXZzX2xvY2sgdG8gZ3Vlc3RzX2xvY2ssIGZpeGluZyBsb2NrIG9yZGVyaW5nIHRvIHByZXZlbnQgbG9ja2RlcCBzcGxhdHMpLCBmaXhlcyBtZW1vcnkgbGVha3MvcmVzb3VyY2UgY2xlYW51cCBpbiBlcnJvciBwYXRocywgYW5kIGNvcnJlY3RzIGxvZ2ljIGJ1Z3MgaW52b2x2aW5nIGJpdG1hcCBvcGVyYXRpb25zIChiaXRtYXBfYW5kbm90IHZzIGJpdG1hcF9pbnRlcnNlY3RzKS4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgb3IgbWFuaXB1bGF0ZWQuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbnMgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfz4vq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 11:57:57 +0000 UTC FinishedAt: 2026-08-12 12:34: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": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VFIO", "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VFIO", "KVM" ], "series_id": "c5938596-df92-4cde-b647-64f2f6126a51" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vfio_ap_mdev_probe", "vfio_ap_mdev_probe_queue", "vfio_ap_mdev_remove_queue", "vfio_ap_on_scan_complete", "vfio_ap_on_cfg_changed" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fYXBfbWRldl9wcm9iZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUmIzM0OywKICAgICYjMzQ7dmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUmIzM0OywKICAgICYjMzQ7dmZpb19hcF9vbl9jZmdfY2hhbmdlZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByaW1hcmlseSBhZGRyZXNzZXMgbG9ja2luZyBpc3N1ZXMgKGUuZy4sIGNoYW5naW5nIG1kZXZzX2xvY2sgdG8gZ3Vlc3RzX2xvY2ssIGZpeGluZyBsb2NrIG9yZGVyaW5nIHRvIHByZXZlbnQgbG9ja2RlcCBzcGxhdHMpLCBmaXhlcyBtZW1vcnkgbGVha3MvcmVzb3VyY2UgY2xlYW51cCBpbiBlcnJvciBwYXRocywgYW5kIGNvcnJlY3RzIGxvZ2ljIGJ1Z3MgaW52b2x2aW5nIGJpdG1hcCBvcGVyYXRpb25zIChiaXRtYXBfYW5kbm90IHZzIGJpdG1hcF9pbnRlcnNlY3RzKS4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgb3IgbWFuaXB1bGF0ZWQuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbnMgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBmb3IgczM5MCBhcmNoaXRlY3R1cmUsIGZpeGluZyBsb2NrIG9yZGVyaW5nIGFuZCBsb2NrZGVwIHNwbGF0cyBpbiB2YXJpb3VzIG1kZXYgYW5kIEFQIGJ1cyBjYWxsYmFja3MgKGUuZy4sIHZmaW9fYXBfbWRldl9wcm9iZSwgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgd2hlbiB0aGUgdmZpb19hcCBkcml2ZXIgaXMgbG9hZGVkIGFuZCBtZGV2IGRldmljZXMgYXJlIGNyZWF0ZWQgdmlhIHN5c2ZzLCBvciB3aGVuIHRoZSBBUCBidXMgcGVyaW9kaWNhbGx5IHNjYW5zIGZvciBkZXZpY2VzLiBTeXprYWxsZXIgY2FuIHRyaWdnZXIgdGhlc2UgcGF0aHMgaW4gczM5MHggdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBBUCBpbnN0cnVjdGlvbnMgKGUuZy4sIEtWTSBvbiBzMzkweCBtYWluZnJhbWVzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRjOTYyOGI5ZDVhYjI3OWIzMTAwYTVlMGMwYjBkMGNkOGJlODIwNWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxMjoyMToyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbmluZGV4IDQ0YjNhMWRjYzFiMzYuLmZhYWI1ZTkxNzlmZjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuQEAgLTgwMyw5ICYjNDM7ODAzLDkgQEAgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KVxuIFx0bWF0cml4X21kZXYtXHUwMDNlcmVxX3RyaWdnZXIgPSBOVUxMO1xuIFx0bWF0cml4X21kZXYtXHUwMDNlY2ZnX2NoZ190cmlnZ2VyID0gTlVMTDtcbiBcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZtZGV2LVx1MDAzZWRldiwgbWF0cml4X21kZXYpO1xuLVx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXHRsaXN0X2FkZChcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vub2RlLCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJfcHV0X3ZkZXY6XG5AQCAtMjI5Nyw2ICYjNDM7MjI5Nyw4IEBAIHN0YXRpYyBzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKnZmaW9fYXBfbWRldl9mb3JfcXVldWUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4gXHR1bnNpZ25lZCBsb25nIGFwaWQgPSBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pO1xuIFx0dW5zaWduZWQgbG9uZyBhcHFpID0gQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbik7XG4gXG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiYjNDM7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuIFx0XHRpZiAodGVzdF9iaXRfaW52KGFwaWQsIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcG0pIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgdGVzdF9iaXRfaW52KGFwcWksIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcW0pKVxuQEAgLTIzMTYsNiAmIzQzOzIzMTgsNyBAQCBzdGF0aWMgc3NpemVfdCBzdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuIFx0c3RydWN0IGFwX2RldmljZSAqYXBkZXYgPSB0b19hcF9kZXYoZGV2KTtcbiBcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2spO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuIFx0cSA9IGRldl9nZXRfZHJ2ZGF0YShcdTAwMjZhcGRldi1cdTAwM2VkZXZpY2UpO1xuIFx0bWF0cml4X21kZXYgPSB2ZmlvX2FwX21kZXZfZm9yX3F1ZXVlKHEpO1xuQEAgLTIzNDMsNiAmIzQzOzIzNDYsNyBAQCBzdGF0aWMgc3NpemVfdCBzdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHR9XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXG4gXHRyZXR1cm4gbmNoYXJzO1xuIH1cbkBAIC0yNDE1LDE0ICYjNDM7MjQxOSwxNyBAQCB2b2lkIHZmaW9fYXBfbWRldl91bnJlZ2lzdGVyKHZvaWQpXG4gXG4gaW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcbiB7XG4tXHRpbnQgcmV0O1xuJiM0MztcdGludCByZXQsIGFwcW47XG4gXHRzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcTtcbiBcdERFQ0xBUkVfQklUTUFQKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XG4gXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuIFxuJiM0MztcdGFwcW4gPSB0b19hcF9xdWV1ZShcdTAwMjZhcGRldi1cdTAwM2VkZXZpY2UpLVx1MDAzZXFpZDtcbiYjNDM7XHRtYXRyaXhfbWRldiA9IGdldF91cGRhdGVfbG9ja3NfYnlfYXBxbihhcHFuKTtcbiYjNDM7XG4gXHRyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoXHUwMDI2YXBkZXYtXHUwMDNlZGV2aWNlLmtvYmosIFx1MDAyNnZmaW9fcXVldWVfYXR0cl9ncm91cCk7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Z290byBlcnJfcmVsZWFzZV9sb2NrcztcbiBcbiBcdHEgPSBremFsbG9jX29iaigqcSk7XG4gXHRpZiAoIXEpIHtcbkBAIC0yNDMwLDExICYjNDM7MjQzNywxMCBAQCBpbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuIFx0XHRnb3RvIGVycl9yZW1vdmVfZ3JvdXA7XG4gXHR9XG4gXG4tXHRxLVx1MDAzZWFwcW4gPSB0b19hcF9xdWV1ZShcdTAwMjZhcGRldi1cdTAwM2VkZXZpY2UpLVx1MDAzZXFpZDtcbiYjNDM7XHRxLVx1MDAzZWFwcW4gPSBhcHFuO1xuIFx0cS1cdTAwM2VzYXZlZF9pc2MgPSBWRklPX0FQX0lTQ19JTlZBTElEO1xuIFx0bWVtc2V0KFx1MDAyNnEtXHUwMDNlcmVzZXRfc3RhdHVzLCAwLCBzaXplb2YocS1cdTAwM2VyZXNldF9zdGF0dXMpKTtcbiBcdElOSVRfV09SSyhcdTAwMjZxLVx1MDAzZXJlc2V0X3dvcmssIGFwcV9yZXNldF9jaGVjayk7XG4tXHRtYXRyaXhfbWRldiA9IGdldF91cGRhdGVfbG9ja3NfYnlfYXBxbihxLVx1MDAzZWFwcW4pO1xuIFxuIFx0aWYgKG1hdHJpeF9tZGV2KSB7XG4gXHRcdHZmaW9fYXBfbWRldl9saW5rX3F1ZXVlKG1hdHJpeF9tZGV2LCBxKTtcbkBAIC0yNDY0LDYgJiM0MzsyNDcwLDggQEAgaW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcbiBcbiBlcnJfcmVtb3ZlX2dyb3VwOlxuIFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFx1MDAyNmFwZGV2LVx1MDAzZWRldmljZS5rb2JqLCBcdTAwMjZ2ZmlvX3F1ZXVlX2F0dHJfZ3JvdXApO1xuJiM0MztlcnJfcmVsZWFzZV9sb2NrczpcbiYjNDM7XHRyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3JfbWRldihtYXRyaXhfbWRldik7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0yNDk5LDEyICYjNDM7MjUwNywxNSBAQCB2b2lkIHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXG4gXHQvKlxuIFx0ICogSWYgdGhlIHF1ZXVlIGlzIG5vdCBpbiB0aGUgaG9zdCYjMzk7cyBBUCBjb25maWd1cmF0aW9uLCB0aGVuIHJlc2V0dGluZ1xuIFx0ICogaXQgd2lsbCBmYWlsIHdpdGggcmVzcG9uc2UgY29kZSAwMSwgKEFQUU4gbm90IHZhbGlkKTsgc28sIGxldCYjMzk7cyBtYWtlXG4tXHQgKiBzdXJlIGl0IGlzIGluIHRoZSBob3N0JiMzOTtzIGNvbmZpZy5cbiYjNDM7XHQgKiBzdXJlIGl0IGlzIGluIHRoZSBob3N0JiMzOTtzIGNvbmZpZy4gSWYgaXQgaXMgbm90LCB0aGVuIGZyZWUgdGhlIEtWTSBHSVNDXG4mIzQzO1x0ICogcmVzb3VyY2VzLlxuIFx0ICovXG4gXHRpZiAodGVzdF9iaXRfaW52KGFwaWQsICh1bnNpZ25lZCBsb25nICopbWF0cml4X2Rldi1cdTAwM2VpbmZvLmFwbSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgdGVzdF9iaXRfaW52KGFwcWksICh1bnNpZ25lZCBsb25nICopbWF0cml4X2Rldi1cdTAwM2VpbmZvLmFxbSkpIHtcbiBcdFx0dmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHEpO1xuIFx0XHRmbHVzaF93b3JrKFx1MDAyNnEtXHUwMDNlcmVzZXRfd29yayk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcbiBcdH1cbiBcbiBkb25lOlxuQEAgLTI1NTksMjQgJiM0MzsyNTcwLDI4IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICphcXJlbSxcbiBcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqY2RyZW0pXG4ge1xuLVx0aW50IGRvX2hvdHBsdWcgPSAwO1xuJiM0MztcdGJvb2wgZG9faG90cGx1ZyA9IGZhbHNlO1xuIFxuLVx0aWYgKCFiaXRtYXBfZW1wdHkoYXByZW0sIEFQX0RFVklDRVMpKSB7XG4tXHRcdGRvX2hvdHBsdWcgfD0gYml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hcG0sXG4tXHRcdFx0XHRcdCAgICBtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hcG0sXG4tXHRcdFx0XHRcdCAgICBhcHJlbSwgQVBfREVWSUNFUyk7XG4mIzQzO1x0aWYgKGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFwbSwgYXByZW0sIEFQX0RFVklDRVMpKSB7XG4mIzQzO1x0XHRiaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFwbSxcbiYjNDM7XHRcdFx0ICAgICAgbWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXBtLFxuJiM0MztcdFx0XHQgICAgICBhcHJlbSwgQVBfREVWSUNFUyk7XG4mIzQzO1x0XHRkb19ob3RwbHVnID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdGlmICghYml0bWFwX2VtcHR5KGFxcmVtLCBBUF9ET01BSU5TKSkge1xuLVx0XHRkb19ob3RwbHVnIHw9IGJpdG1hcF9hbmRub3QobWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXFtLFxuLVx0XHRcdFx0XHQgICAgbWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXFtLFxuLVx0XHRcdFx0XHQgICAgYXFyZW0sIEFQX0RFVklDRVMpO1xuJiM0MztcdGlmIChiaXRtYXBfaW50ZXJzZWN0cyhtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hcW0sIGFxcmVtLCBBUF9ET01BSU5TKSkge1xuJiM0MztcdFx0Yml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hcW0sXG4mIzQzO1x0XHRcdCAgICAgIG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFxbSxcbiYjNDM7XHRcdFx0ICAgICAgYXFyZW0sIEFQX0RPTUFJTlMpO1xuJiM0MztcdFx0ZG9faG90cGx1ZyA9IHRydWU7XG4gXHR9XG4gXG4tXHRpZiAoIWJpdG1hcF9lbXB0eShjZHJlbSwgQVBfRE9NQUlOUykpXG4tXHRcdGRvX2hvdHBsdWcgfD0gYml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hZG0sXG4tXHRcdFx0XHRcdCAgICBtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hZG0sXG4tXHRcdFx0XHRcdCAgICBjZHJlbSwgQVBfRE9NQUlOUyk7XG4mIzQzO1x0aWYgKGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFkbSwgY2RyZW0sIEFQX0RPTUFJTlMpKSB7XG4mIzQzO1x0XHRiaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFkbSxcbiYjNDM7XHRcdFx0ICAgICAgbWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYWRtLFxuJiM0MztcdFx0XHQgICAgICBjZHJlbSwgQVBfRE9NQUlOUyk7XG4mIzQzO1x0XHRkb19ob3RwbHVnID0gdHJ1ZTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoZG9faG90cGx1ZylcbiBcdFx0dmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTtcbkBAIC0yNjAzLDI4ICYjNDM7MjYxOCwzNSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZSh1bnNpZ25lZCBsb25nICphcF9yZW1vdmUsXG4gXHRERUNMQVJFX0JJVE1BUChhcHJlbSwgQVBfREVWSUNFUyk7XG4gXHRERUNMQVJFX0JJVE1BUChhcXJlbSwgQVBfRE9NQUlOUyk7XG4gXHRERUNMQVJFX0JJVE1BUChjZHJlbSwgQVBfRE9NQUlOUyk7XG4tXHRpbnQgZG9fcmVtb3ZlID0gMDtcbiYjNDM7XHRpbnQgZG9fcmVtb3ZlO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2X2xpc3QsIG5vZGUpIHtcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIHRvIGFjY2VzcyBmaWVsZHMgd2l0aGluIG1hdHJpeF9tZGV2LFxuJiM0MztcdFx0ICogYW5kIGt2bS1cdTAwM2Vsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIG1kZXZzX2xvY2sgdG8gc2F0aXNmeSB0aGUgbG9ja1xuJiM0MztcdFx0ICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAobWF0cml4X21kZXYtXHUwMDNla3ZtKVxuJiM0MztcdFx0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuIFxuLVx0XHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZChhcHJlbSwgYXBfcmVtb3ZlLFxuLVx0XHRcdFx0XHQgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcG0sXG4tXHRcdFx0XHRcdCAgQVBfREVWSUNFUyk7XG4mIzQzO1x0XHRkb19yZW1vdmUgPSBiaXRtYXBfYW5kKGFwcmVtLCBhcF9yZW1vdmUsXG4mIzQzO1x0XHRcdFx0ICAgICAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcG0sXG4mIzQzO1x0XHRcdFx0ICAgICAgIEFQX0RFVklDRVMpO1xuIFx0XHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZChhcXJlbSwgYXFfcmVtb3ZlLFxuIFx0XHRcdFx0XHQgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcW0sXG4gXHRcdFx0XHRcdCAgQVBfRE9NQUlOUyk7XG4tXHRcdGRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kbm90KGNkcmVtLCBjZF9yZW1vdmUsXG4tXHRcdFx0XHRcdCAgICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFkbSxcbi1cdFx0XHRcdFx0ICAgICBBUF9ET01BSU5TKTtcbiYjNDM7XHRcdGRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kKGNkcmVtLCBjZF9yZW1vdmUsXG4mIzQzO1x0XHRcdFx0XHRtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYWRtLFxuJiM0MztcdFx0XHRcdFx0QVBfRE9NQUlOUyk7XG4gXG4gXHRcdGlmIChkb19yZW1vdmUpXG4gXHRcdFx0dmZpb19hcF9tZGV2X2hvdF91bnBsdWdfY2ZnKG1hdHJpeF9tZGV2LCBhcHJlbSwgYXFyZW0sXG4gXHRcdFx0XHRcdFx0ICAgIGNkcmVtKTtcbiBcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRpZiAobWF0cml4X21kZXYtXHUwMDNla3ZtKVxuJiM0MztcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuIFx0fVxuIH1cbiBcbkBAIC0yNzQ5LDEyICYjNDM7Mjc3MSwyMCBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX2FkZCh1bnNpZ25lZCBsb25nICphcG1fYWRkLCB1bnNpZ25lZCBsb25nICphcW1fYWRkLFxuIFx0dmZpb19hcF9maWx0ZXJfYXBpZF9ieV9xdHlwZShhcG1fYWRkLCBhcW1fYWRkKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIGluIG9yZGVyIHRvIGFjY2VzcyBmaWVsZHNcbiYjNDM7XHRcdCAqIHdpdGhpbiBtYXRyaXhfbWRldlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4mIzQzO1xuIFx0XHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVx1MDAzZWFwbV9hZGQsXG4gXHRcdFx0ICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFwbSwgYXBtX2FkZCwgQVBfREVWSUNFUyk7XG4gXHRcdGJpdG1hcF9hbmQobWF0cml4X21kZXYtXHUwMDNlYXFtX2FkZCxcbiBcdFx0XHQgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXFtLCBhcW1fYWRkLCBBUF9ET01BSU5TKTtcbiBcdFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cdTAwM2VhZG1fYWRkLFxuIFx0XHRcdCAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hZG0sIGFkbV9hZGQsIEFQX0RFVklDRVMpO1xuJiM0MztcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuIFx0fVxuIH1cbiBcbkBAIC0yODIxLDggJiM0MzsyODUxLDcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuIFx0REVDTEFSRV9CSVRNQVAoYXBtX2ZpbHRlcmVkLCBBUF9ERVZJQ0VTKTtcbiBcdGJvb2wgZmlsdGVyX2RvbWFpbnMsIGZpbHRlcl9hZGFwdGVycywgZmlsdGVyX2Nkb21zLCBkb19ob3RwbHVnID0gZmFsc2U7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbi1cdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiYjNDM7XHRiaXRtYXBfemVybyhhcG1fZmlsdGVyZWQsIEFQX0RFVklDRVMpO1xuIFxuIFx0ZmlsdGVyX2FkYXB0ZXJzID0gYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFwbSxcbiBcdFx0XHRcdFx0ICAgIG1hdHJpeF9tZGV2LVx1MDAzZWFwbV9hZGQsIEFQX0RFVklDRVMpO1xuQEAgLTI4NDEsOSAmIzQzOzI4NzAsNiBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXG4gXHRcdHZmaW9fYXBfbWRldl91cGRhdGVfZ3Vlc3RfYXBjYihtYXRyaXhfbWRldik7XG4gXG4gXHRyZXNldF9xdWV1ZXNfZm9yX2FwaWRzKG1hdHJpeF9tZGV2LCBhcG1fZmlsdGVyZWQpO1xuLVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuIH1cbiBcbiB2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbyxcbkBAIC0yODU0LDE1ICYjNDM7Mjg4MCwyOSBAQCB2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbyxcbiBcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiBtYXRyaXhfbWRldixcbiYjNDM7XHRcdCAqIGFuZCBrdm0tXHUwMDNlbG9jayBtdXN0IGJlIHRha2VuIGJlZm9yZSBtZGV2c19sb2NrIHRvIHNhdGlzZnkgdGhlIGxvY2tcbiYjNDM7XHRcdCAqIG9yZGVyaW5nIHJlcXVpcmVtZW50IGFuZCBwcmV2ZW50IGEgbG9ja2RlcCBzcGxhdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKG1hdHJpeF9tZGV2LVx1MDAzZWt2bSlcbiYjNDM7XHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4mIzQzO1xuIFx0XHRpZiAoYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LVx1MDAzZWFwbV9hZGQsIEFQX0RFVklDRVMpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LVx1MDAzZWFxbV9hZGQsIEFQX0RPTUFJTlMpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LVx1MDAzZWFkbV9hZGQsIEFQX0RPTUFJTlMpKVxuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRnb3RvIGRvX3VubG9jaztcbiBcbiBcdFx0dmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhtYXRyaXhfbWRldik7XG4gXHRcdGJpdG1hcF9jbGVhcihtYXRyaXhfbWRldi1cdTAwM2VhcG1fYWRkLCAwLCBBUF9ERVZJQ0VTKTtcbiBcdFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVx1MDAzZWFxbV9hZGQsIDAsIEFQX0RPTUFJTlMpO1xuIFx0XHRiaXRtYXBfY2xlYXIobWF0cml4X21kZXYtXHUwMDNlYWRtX2FkZCwgMCwgQVBfRE9NQUlOUyk7XG4mIzQzO1xuJiM0Mztkb191bmxvY2s6XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiYjNDM7XHRcdGlmIChtYXRyaXhfbWRldi1cdTAwM2Vrdm0pXG4mIzQzO1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4gXHR9XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZGSU8mIzM0OywKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZpb19hcF9tZGV2X3Byb2JlJiMzNDssCiAgICAmIzM0O3ZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlJiMzNDssCiAgICAmIzM0O3ZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkwIGFyY2hpdGVjdHVyZSwgZml4aW5nIGxvY2sgb3JkZXJpbmcgYW5kIGxvY2tkZXAgc3BsYXRzIGluIHZhcmlvdXMgbWRldiBhbmQgQVAgYnVzIGNhbGxiYWNrcyAoZS5nLiwgdmZpb19hcF9tZGV2X3Byb2JlLCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB3aGVuIHRoZSB2ZmlvX2FwIGRyaXZlciBpcyBsb2FkZWQgYW5kIG1kZXYgZGV2aWNlcyBhcmUgY3JlYXRlZCB2aWEgc3lzZnMsIG9yIHdoZW4gdGhlIEFQIGJ1cyBwZXJpb2RpY2FsbHkgc2NhbnMgZm9yIGRldmljZXMuIFN5emthbGxlciBjYW4gdHJpZ2dlciB0aGVzZSBwYXRocyBpbiBzMzkweCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IEFQIGluc3RydWN0aW9ucyAoZS5nLiwgS1ZNIG9uIHMzOTB4IG1haW5mcmFtZXMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGM5NjI4YjlkNWFiMjc5YjMxMDBhNWUwYzBiMGQwY2Q4YmU4MjA1YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDEyOjIxOjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCmluZGV4IDQ0YjNhMWRjYzFiMzYuLmZhYWI1ZTkxNzlmZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMKQEAgLTgwMyw5ICYjNDM7ODAzLDkgQEAgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQogCW1hdHJpeF9tZGV2LSZndDtyZXFfdHJpZ2dlciA9IE5VTEw7CiAJbWF0cml4X21kZXYtJmd0O2NmZ19jaGdfdHJpZ2dlciA9IE5VTEw7CiAJZGV2X3NldF9kcnZkYXRhKCZhbXA7bWRldi0mZ3Q7ZGV2LCBtYXRyaXhfbWRldik7Ci0JbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7Z3Vlc3RzX2xvY2spOwogCWxpc3RfYWRkKCZhbXA7bWF0cml4X21kZXYtJmd0O25vZGUsICZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldl9saXN0KTsKLQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7Z3Vlc3RzX2xvY2spOwogCXJldHVybiAwOwogCiBlcnJfcHV0X3ZkZXY6CkBAIC0yMjk3LDYgJiM0MzsyMjk3LDggQEAgc3RhdGljIHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSkKIAl1bnNpZ25lZCBsb25nIGFwaWQgPSBBUF9RSURfQ0FSRChxLSZndDthcHFuKTsKIAl1bnNpZ25lZCBsb25nIGFwcWkgPSBBUF9RSURfUVVFVUUocS0mZ3Q7YXBxbik7CiAKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKJiM0MzsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCAmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZfbGlzdCwgbm9kZSkgewogCQlpZiAodGVzdF9iaXRfaW52KGFwaWQsIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYXBtKSAmYW1wOyZhbXA7CiAJCSAgICB0ZXN0X2JpdF9pbnYoYXBxaSwgbWF0cml4X21kZXYtJmd0O21hdHJpeC5hcW0pKQpAQCAtMjMxNiw2ICYjNDM7MjMxOCw3IEBAIHN0YXRpYyBzc2l6ZV90IHN0YXR1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2OwogCXN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2ID0gdG9fYXBfZGV2KGRldik7CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKIAltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiAJcSA9IGRldl9nZXRfZHJ2ZGF0YSgmYW1wO2FwZGV2LSZndDtkZXZpY2UpOwogCW1hdHJpeF9tZGV2ID0gdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZShxKTsKQEAgLTIzNDMsNiAmIzQzOzIzNDYsNyBAQCBzdGF0aWMgc3NpemVfdCBzdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKIAogCXJldHVybiBuY2hhcnM7CiB9CkBAIC0yNDE1LDE0ICYjNDM7MjQxOSwxNyBAQCB2b2lkIHZmaW9fYXBfbWRldl91bnJlZ2lzdGVyKHZvaWQpCiAKIGludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpCiB7Ci0JaW50IHJldDsKJiM0MzsJaW50IHJldCwgYXBxbjsKIAlzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcTsKIAlERUNMQVJFX0JJVE1BUChhcG1fZmlsdGVyZWQsIEFQX0RFVklDRVMpOwogCXN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7CiAKJiM0MzsJYXBxbiA9IHRvX2FwX3F1ZXVlKCZhbXA7YXBkZXYtJmd0O2RldmljZSktJmd0O3FpZDsKJiM0MzsJbWF0cml4X21kZXYgPSBnZXRfdXBkYXRlX2xvY2tzX2J5X2FwcW4oYXBxbik7CiYjNDM7CiAJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZhbXA7YXBkZXYtJmd0O2RldmljZS5rb2JqLCAmYW1wO3ZmaW9fcXVldWVfYXR0cl9ncm91cCk7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKJiM0MzsJCWdvdG8gZXJyX3JlbGVhc2VfbG9ja3M7CiAKIAlxID0ga3phbGxvY19vYmooKnEpOwogCWlmICghcSkgewpAQCAtMjQzMCwxMSAmIzQzOzI0MzcsMTAgQEAgaW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldikKIAkJZ290byBlcnJfcmVtb3ZlX2dyb3VwOwogCX0KIAotCXEtJmd0O2FwcW4gPSB0b19hcF9xdWV1ZSgmYW1wO2FwZGV2LSZndDtkZXZpY2UpLSZndDtxaWQ7CiYjNDM7CXEtJmd0O2FwcW4gPSBhcHFuOwogCXEtJmd0O3NhdmVkX2lzYyA9IFZGSU9fQVBfSVNDX0lOVkFMSUQ7CiAJbWVtc2V0KCZhbXA7cS0mZ3Q7cmVzZXRfc3RhdHVzLCAwLCBzaXplb2YocS0mZ3Q7cmVzZXRfc3RhdHVzKSk7CiAJSU5JVF9XT1JLKCZhbXA7cS0mZ3Q7cmVzZXRfd29yaywgYXBxX3Jlc2V0X2NoZWNrKTsKLQltYXRyaXhfbWRldiA9IGdldF91cGRhdGVfbG9ja3NfYnlfYXBxbihxLSZndDthcHFuKTsKIAogCWlmIChtYXRyaXhfbWRldikgewogCQl2ZmlvX2FwX21kZXZfbGlua19xdWV1ZShtYXRyaXhfbWRldiwgcSk7CkBAIC0yNDY0LDYgJiM0MzsyNDcwLDggQEAgaW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldikKIAogZXJyX3JlbW92ZV9ncm91cDoKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmFtcDthcGRldi0mZ3Q7ZGV2aWNlLmtvYmosICZhbXA7dmZpb19xdWV1ZV9hdHRyX2dyb3VwKTsKJiM0MztlcnJfcmVsZWFzZV9sb2NrczoKJiM0MzsJcmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX21kZXYobWF0cml4X21kZXYpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI0OTksMTIgJiM0MzsyNTA3LDE1IEBAIHZvaWQgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldikKIAkvKgogCSAqIElmIHRoZSBxdWV1ZSBpcyBub3QgaW4gdGhlIGhvc3QmIzM5O3MgQVAgY29uZmlndXJhdGlvbiwgdGhlbiByZXNldHRpbmcKIAkgKiBpdCB3aWxsIGZhaWwgd2l0aCByZXNwb25zZSBjb2RlIDAxLCAoQVBRTiBub3QgdmFsaWQpOyBzbywgbGV0JiMzOTtzIG1ha2UKLQkgKiBzdXJlIGl0IGlzIGluIHRoZSBob3N0JiMzOTtzIGNvbmZpZy4KJiM0MzsJICogc3VyZSBpdCBpcyBpbiB0aGUgaG9zdCYjMzk7cyBjb25maWcuIElmIGl0IGlzIG5vdCwgdGhlbiBmcmVlIHRoZSBLVk0gR0lTQwomIzQzOwkgKiByZXNvdXJjZXMuCiAJICovCiAJaWYgKHRlc3RfYml0X2ludihhcGlkLCAodW5zaWduZWQgbG9uZyAqKW1hdHJpeF9kZXYtJmd0O2luZm8uYXBtKSAmYW1wOyZhbXA7CiAJICAgIHRlc3RfYml0X2ludihhcHFpLCAodW5zaWduZWQgbG9uZyAqKW1hdHJpeF9kZXYtJmd0O2luZm8uYXFtKSkgewogCQl2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUocSk7CiAJCWZsdXNoX3dvcmsoJmFtcDtxLSZndDtyZXNldF93b3JrKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTsKIAl9CiAKIGRvbmU6CkBAIC0yNTU5LDI0ICYjNDM7MjU3MCwyOCBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiwKIAkJCQkJdW5zaWduZWQgbG9uZyAqYXFyZW0sCiAJCQkJCXVuc2lnbmVkIGxvbmcgKmNkcmVtKQogewotCWludCBkb19ob3RwbHVnID0gMDsKJiM0MzsJYm9vbCBkb19ob3RwbHVnID0gZmFsc2U7CiAKLQlpZiAoIWJpdG1hcF9lbXB0eShhcHJlbSwgQVBfREVWSUNFUykpIHsKLQkJZG9faG90cGx1ZyB8PSBiaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hcG0sCi0JCQkJCSAgICBtYXRyaXhfbWRldi0mZ3Q7c2hhZG93X2FwY2IuYXBtLAotCQkJCQkgICAgYXByZW0sIEFQX0RFVklDRVMpOwomIzQzOwlpZiAoYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtJmd0O3NoYWRvd19hcGNiLmFwbSwgYXByZW0sIEFQX0RFVklDRVMpKSB7CiYjNDM7CQliaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hcG0sCiYjNDM7CQkJICAgICAgbWF0cml4X21kZXYtJmd0O3NoYWRvd19hcGNiLmFwbSwKJiM0MzsJCQkgICAgICBhcHJlbSwgQVBfREVWSUNFUyk7CiYjNDM7CQlkb19ob3RwbHVnID0gdHJ1ZTsKIAl9CiAKLQlpZiAoIWJpdG1hcF9lbXB0eShhcXJlbSwgQVBfRE9NQUlOUykpIHsKLQkJZG9faG90cGx1ZyB8PSBiaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hcW0sCi0JCQkJCSAgICBtYXRyaXhfbWRldi0mZ3Q7c2hhZG93X2FwY2IuYXFtLAotCQkJCQkgICAgYXFyZW0sIEFQX0RFVklDRVMpOwomIzQzOwlpZiAoYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtJmd0O3NoYWRvd19hcGNiLmFxbSwgYXFyZW0sIEFQX0RPTUFJTlMpKSB7CiYjNDM7CQliaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hcW0sCiYjNDM7CQkJICAgICAgbWF0cml4X21kZXYtJmd0O3NoYWRvd19hcGNiLmFxbSwKJiM0MzsJCQkgICAgICBhcXJlbSwgQVBfRE9NQUlOUyk7CiYjNDM7CQlkb19ob3RwbHVnID0gdHJ1ZTsKIAl9CiAKLQlpZiAoIWJpdG1hcF9lbXB0eShjZHJlbSwgQVBfRE9NQUlOUykpCi0JCWRvX2hvdHBsdWcgfD0gYml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi0mZ3Q7c2hhZG93X2FwY2IuYWRtLAotCQkJCQkgICAgbWF0cml4X21kZXYtJmd0O3NoYWRvd19hcGNiLmFkbSwKLQkJCQkJICAgIGNkcmVtLCBBUF9ET01BSU5TKTsKJiM0MzsJaWYgKGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hZG0sIGNkcmVtLCBBUF9ET01BSU5TKSkgewomIzQzOwkJYml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi0mZ3Q7c2hhZG93X2FwY2IuYWRtLAomIzQzOwkJCSAgICAgIG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hZG0sCiYjNDM7CQkJICAgICAgY2RyZW0sIEFQX0RPTUFJTlMpOwomIzQzOwkJZG9faG90cGx1ZyA9IHRydWU7CiYjNDM7CX0KIAogCWlmIChkb19ob3RwbHVnKQogCQl2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpOwpAQCAtMjYwMywyOCAmIzQzOzI2MTgsMzUgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmUodW5zaWduZWQgbG9uZyAqYXBfcmVtb3ZlLAogCURFQ0xBUkVfQklUTUFQKGFwcmVtLCBBUF9ERVZJQ0VTKTsKIAlERUNMQVJFX0JJVE1BUChhcXJlbSwgQVBfRE9NQUlOUyk7CiAJREVDTEFSRV9CSVRNQVAoY2RyZW0sIEFQX0RPTUFJTlMpOwotCWludCBkb19yZW1vdmUgPSAwOwomIzQzOwlpbnQgZG9fcmVtb3ZlOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgJmFtcDttYXRyaXhfZGV2LSZndDttZGV2X2xpc3QsIG5vZGUpIHsKLQkJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9tZGV2LSZndDtrdm0tJmd0O2xvY2spOwomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiBtYXRyaXhfbWRldiwKJiM0MzsJCSAqIGFuZCBrdm0tJmd0O2xvY2sgbXVzdCBiZSB0YWtlbiBiZWZvcmUgbWRldnNfbG9jayB0byBzYXRpc2Z5IHRoZSBsb2NrCiYjNDM7CQkgKiBvcmRlcmluZyByZXF1aXJlbWVudCBhbmQgcHJldmVudCBhIGxvY2tkZXAgc3BsYXQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChtYXRyaXhfbWRldi0mZ3Q7a3ZtKQomIzQzOwkJCW11dGV4X2xvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKIAkJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwogCi0JCWRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kKGFwcmVtLCBhcF9yZW1vdmUsCi0JCQkJCSAgbWF0cml4X21kZXYtJmd0O21hdHJpeC5hcG0sCi0JCQkJCSAgQVBfREVWSUNFUyk7CiYjNDM7CQlkb19yZW1vdmUgPSBiaXRtYXBfYW5kKGFwcmVtLCBhcF9yZW1vdmUsCiYjNDM7CQkJCSAgICAgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFwbSwKJiM0MzsJCQkJICAgICAgIEFQX0RFVklDRVMpOwogCQlkb19yZW1vdmUgfD0gYml0bWFwX2FuZChhcXJlbSwgYXFfcmVtb3ZlLAogCQkJCQkgIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYXFtLAogCQkJCQkgIEFQX0RPTUFJTlMpOwotCQlkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChjZHJlbSwgY2RfcmVtb3ZlLAotCQkJCQkgICAgIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYWRtLAotCQkJCQkgICAgIEFQX0RPTUFJTlMpOwomIzQzOwkJZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoY2RyZW0sIGNkX3JlbW92ZSwKJiM0MzsJCQkJCW1hdHJpeF9tZGV2LSZndDttYXRyaXguYWRtLAomIzQzOwkJCQkJQVBfRE9NQUlOUyk7CiAKIAkJaWYgKGRvX3JlbW92ZSkKIAkJCXZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZyhtYXRyaXhfbWRldiwgYXByZW0sIGFxcmVtLAogCQkJCQkJICAgIGNkcmVtKTsKIAogCQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9jayk7CiYjNDM7CQlpZiAobWF0cml4X21kZXYtJmd0O2t2bSkKJiM0MzsJCQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKIAl9CiB9CiAKQEAgLTI3NDksMTIgJiM0MzsyNzcxLDIwIEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfYWRkKHVuc2lnbmVkIGxvbmcgKmFwbV9hZGQsIHVuc2lnbmVkIGxvbmcgKmFxbV9hZGQsCiAJdmZpb19hcF9maWx0ZXJfYXBpZF9ieV9xdHlwZShhcG1fYWRkLCBhcW1fYWRkKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsICZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldl9saXN0LCBub2RlKSB7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIGluIG9yZGVyIHRvIGFjY2VzcyBmaWVsZHMKJiM0MzsJCSAqIHdpdGhpbiBtYXRyaXhfbWRldgomIzQzOwkJICovCiYjNDM7CQltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiYjNDM7CiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FwbV9hZGQsCiAJCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFwbSwgYXBtX2FkZCwgQVBfREVWSUNFUyk7CiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FxbV9hZGQsCiAJCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFxbSwgYXFtX2FkZCwgQVBfRE9NQUlOUyk7CiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FkbV9hZGQsCiAJCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFkbSwgYWRtX2FkZCwgQVBfREVWSUNFUyk7CiYjNDM7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKIAl9CiB9CiAKQEAgLTI4MjEsOCAmIzQzOzI4NTEsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpCiAJREVDTEFSRV9CSVRNQVAoYXBtX2ZpbHRlcmVkLCBBUF9ERVZJQ0VTKTsKIAlib29sIGZpbHRlcl9kb21haW5zLCBmaWx0ZXJfYWRhcHRlcnMsIGZpbHRlcl9jZG9tcywgZG9faG90cGx1ZyA9IGZhbHNlOwogCi0JbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9tZGV2LSZndDtrdm0tJmd0O2xvY2spOwotCW11dGV4X2xvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKJiM0MzsJYml0bWFwX3plcm8oYXBtX2ZpbHRlcmVkLCBBUF9ERVZJQ0VTKTsKIAogCWZpbHRlcl9hZGFwdGVycyA9IGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LSZndDttYXRyaXguYXBtLAogCQkJCQkgICAgbWF0cml4X21kZXYtJmd0O2FwbV9hZGQsIEFQX0RFVklDRVMpOwpAQCAtMjg0MSw5ICYjNDM7Mjg3MCw2IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldikKIAkJdmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTsKIAogCXJlc2V0X3F1ZXVlc19mb3JfYXBpZHMobWF0cml4X21kZXYsIGFwbV9maWx0ZXJlZCk7Ci0KLQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKLQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKIH0KIAogdm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sCkBAIC0yODU0LDE1ICYjNDM7Mjg4MCwyOSBAQCB2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbywKIAltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7Z3Vlc3RzX2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgJmFtcDttYXRyaXhfZGV2LSZndDttZGV2X2xpc3QsIG5vZGUpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgbWRldnNfbG9jayBtdXN0IGJlIGhlbGQgdG8gYWNjZXNzIGZpZWxkcyB3aXRoaW4gbWF0cml4X21kZXYsCiYjNDM7CQkgKiBhbmQga3ZtLSZndDtsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIG1kZXZzX2xvY2sgdG8gc2F0aXNmeSB0aGUgbG9jawomIzQzOwkJICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LgomIzQzOwkJICovCiYjNDM7CQlpZiAobWF0cml4X21kZXYtJmd0O2t2bSkKJiM0MzsJCQltdXRleF9sb2NrKCZhbXA7bWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9jayk7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiYjNDM7CiAJCWlmIChiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtJmd0O2FwbV9hZGQsIEFQX0RFVklDRVMpICZhbXA7JmFtcDsKIAkJICAgIGJpdG1hcF9lbXB0eShtYXRyaXhfbWRldi0mZ3Q7YXFtX2FkZCwgQVBfRE9NQUlOUykgJmFtcDsmYW1wOwogCQkgICAgYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LSZndDthZG1fYWRkLCBBUF9ET01BSU5TKSkKLQkJCWNvbnRpbnVlOwomIzQzOwkJCWdvdG8gZG9fdW5sb2NrOwogCiAJCXZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcobWF0cml4X21kZXYpOwogCQliaXRtYXBfY2xlYXIobWF0cml4X21kZXYtJmd0O2FwbV9hZGQsIDAsIEFQX0RFVklDRVMpOwogCQliaXRtYXBfY2xlYXIobWF0cml4X21kZXYtJmd0O2FxbV9hZGQsIDAsIEFQX0RPTUFJTlMpOwogCQliaXRtYXBfY2xlYXIobWF0cml4X21kZXYtJmd0O2FkbV9hZGQsIDAsIEFQX0RPTUFJTlMpOwomIzQzOwomIzQzO2RvX3VubG9jazoKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwomIzQzOwkJaWYgKG1hdHJpeF9tZGV2LSZndDtrdm0pCiYjNDM7CQkJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9jayk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7Z3Vlc3RzX2xvY2spOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjM4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNzUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlZGSU8gQVAgRHJpdmVyIFVwZGF0ZSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AuIFRoaXMgaXMgdGhlIFZGSU8gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlJiMzOTtzIEFkanVuY3QgUHJvY2Vzc29yIChBUCkuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggbG9ja2luZyBjaGFuZ2VzLiBUaGV5JiMzOTtyZSByZW5hbWluZyBgbWRldnNfbG9ja2AgdG8gYGd1ZXN0c19sb2NrYCBpbiBgdmZpb19hcF9tZGV2X3Byb2JlYCwgYWRkaW5nIGxvY2tkZXAgYXNzZXJ0aW9ucywgYW5kIHVwZGF0aW5nIGxvY2sgdXNhZ2UgaW4gc2V2ZXJhbCBmdW5jdGlvbnMgbGlrZSBgc3RhdHVzX3Nob3dgLCBgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlYCwgYW5kIGB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlYC4gVGhlcmUgYXJlIGFsc28gbW9kaWZpY2F0aW9ucyB0byBoYW5kbGUgaG90cGx1Zy91bnBsdWcgY29uZmlndXJhdGlvbnMgKGB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19jZmdgLCBgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmVgLCBgdmZpb19hcF9tZGV2X2NmZ19hZGRgLCBgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZ2ApIGFuZCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCB3aXRoIGNhcmVmdWwgbG9ja2luZyBjb25zaWRlcmF0aW9ucywgd2hpY2ggaXMgZ29vZC4gVGhleSYjMzk7cmUgbWFraW5nIGEgbG90IG9mIGNoYW5nZXMgdG8gZW5zdXJlIHByb3BlciBsb2NraW5nLgoKQnV0IHRoaXMgcmFpc2VzIGEgcXVlc3Rpb246IGlzIHRoaXMgZHJpdmVyIHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50PyBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9uZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuIEl0JiMzOTtzIGFuIHMzOTAtc3BlY2lmaWMgZHJpdmVyLCBzbyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaWYgdGhlIEFQIGhhcmR3YXJlIGlzIGVtdWxhdGVkLiBUaGUgY29kZSBwYXRoIGlzIGluIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGl0JiMzOTtzIGZ1enplZCBpbiBzdGFuZGFyZCBRRU1VLiBTeXprYWxsZXIgc3VwcG9ydHMgczM5MHgsIHNvIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBIb3dldmVyLCB0aGUgcHJvbXB0IGlzIHRlbGxpbmcgbWUgdG8gY29uc2lkZXIgaWYgdGhlIGRyaXZlciBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRG9lcyBRRU1VIGVtdWxhdGUgdGhlIHMzOTB4IEFQIGhhcmR3YXJlIGl0c2VsZj8gVGhpcyBkcml2ZXIgaXMgYHZmaW8tYXBgLCB3aGljaCBpcyBwYXNzLXRocm91Z2guIElzIHRoZSBBUCBoYXJkd2FyZSBlbXVsYXRlZD8gSSBuZWVkIHRvIGtub3cgaWYgUUVNVSBzdXBwb3J0cyBWRklPIEFQICplbXVsYXRpb24qIG9yIGp1c3QgcGFzcy10aHJvdWdoLiBJIG5lZWQgdG8gc2VhcmNoIGZvciBgdmZpb19hcF9tZGV2X3Byb2JlYCBvciBleGFtaW5lIGB2ZmlvX2FwX29wcy5jYCBhbmQgYHZmaW9fYXBfZHJ2LmNgIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIFZGSU8gQVAgaXMgbWVhbnQgZm9yIHRoZSAqaG9zdCosIGJ1dCBpdOKAmXMgYW4gbWRldiBkcml2ZXIsIHNvIHRoZSByZWFsIHF1ZXN0aW9uIGlzIGhvdyB0byBjcmVhdGUgbWRldiBkZXZpY2VzIHdpdGhvdXQgcGh5c2ljYWwgQVAgaGFyZHdhcmUuIFRoaXMgaXMga2V5LiBUaGUgbG9ja2luZyBjaGFuZ2VzIGFyZSBpbXBvcnRhbnQsIGJ1dCBpZiB0aGUgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlLCB0aGVuIHRoZSBsb2NraW5nIGJlY29tZXMgbW9vdC4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB3ZSBjYW4gcmVhY2ggdGhhdCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fYXBfbWRldl9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9NTg9c3RhdGljIHN0cnVjdCBhcF9kcml2ZXIgdmZpb19hcF9kcnYgPSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6NTk6XHQucHJvYmUgPSB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtNjAtXHQucmVtb3ZlID0gdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9Nzc2PXN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X2luaXRfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldilcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzg5LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjc5MDpzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9wcm9iZShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzkxLXtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjM3OD1zdGF0aWMgc3RydWN0IG1kZXZfZHJpdmVyIHZmaW9fYXBfbWF0cml4X2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM4Ni1cdH0sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjM4NzpcdC5wcm9iZSA9IHZmaW9fYXBfbWRldl9wcm9iZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzg4LVx0LnJlbW92ZSA9IHZmaW9fYXBfbWRldl9yZW1vdmUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI0MTQ9dm9pZCB2ZmlvX2FwX21kZXZfdW5yZWdpc3Rlcih2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDE5LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI0MjA6aW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDIxLXtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE1Nj12b2lkIHZmaW9fYXBfbWRldl91bnJlZ2lzdGVyKHZvaWQpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNTctXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE1ODppbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKnF1ZXVlKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtMTU5LXZvaWQgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICpxdWV1ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY3MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIHZmaW9fYXAgYW5kIG1kZXYgSW50ZWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGB2ZmlvX2FwYCBhbmQgbWRldiBhcmUgaW50ZXJhY3RpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBkcml2ZXIgbXVzdCByZWdpc3RlciBpdHNlbGYgc29tZWhvdyBhcyBhbiBtZGV2IGRyaXZlci4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvZiB0aGUgbWRldi1yZWxhdGVkIG9wZXJhdGlvbnMgbXVzdCBiZSBoYW5kbGVkIHdpdGhpbiB0aGUgYHZmaW9fYXBfbWRldl9wcm9iZWAgZnVuY3Rpb24sIHRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZSwgZXNwZWNpYWxseSBhcyB0aGF0JiMzOTtzIHdoYXQmIzM5O3MgY2FsbGVkIHdoZW4gYW4gbWRldiBkZXZpY2UgaXMgY3JlYXRlZC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBjYW4gd2UgYWN0dWFsbHkgKmNyZWF0ZSogYW4gbWRldiBkZXZpY2UgZm9yIHRoZSBgdmZpb19hcGAgZHJpdmVyPyBUaGF0JiMzOTtzIHRoZSByZWFsIGNydXggb2YgdGhlIGlzc3VlIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBUbyBnZXQgdGhlIGRldGFpbHMsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmNgIGFuZCBzZWUgZXhhY3RseSBob3cgdGhleSYjMzk7cmUgcmVnaXN0ZXJpbmcgdGhlIG1kZXYgcGFyZW50LiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIHBvdGVudGlhbCBwcm9ibGVtKSBsaWtlbHkgcmVzaWRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHRob3JvdWdobHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRldl9yZWdpc3Rlcl9wYXJlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjM5MT1pbnQgdmZpb19hcF9tZGV2X3JlZ2lzdGVyKHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0MDEtXHRtYXRyaXhfZGV2LVx1MDAzZW1kZXZfdHlwZXMgPSBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfdHlwZTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNDAyOlx0cmV0ID0gbWRldl9yZWdpc3Rlcl9wYXJlbnQoXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VwYXJlbnQsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZGV2aWNlLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0MDMtXHRcdFx0XHQgICBcdTAwMjZ2ZmlvX2FwX21hdHJpeF9kcml2ZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE3NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRpZ2dpbmcgaW50byBWRklPLUFQIERldmljZSBSZWdpc3RyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGB2ZmlvX2FwX21kZXZfcmVnaXN0ZXJgIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGhlcmUsIGFuZCBpdCYjMzk7cyBjYWxsaW5nIGBtZGV2X3JlZ2lzdGVyX3BhcmVudGAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgcmVnaXN0cmF0aW9uIHByb2Nlc3MsIHJpZ2h0PyBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0cmlnZ2VyLiBJcyBgdmZpb19hcF9tZGV2X3JlZ2lzdGVyYCBleGVjdXRlZCBhdXRvbWF0aWNhbGx5IHdoZW5ldmVyIHRoZSBtb2R1bGUgbG9hZHMsIG9yIGlzIHRoZXJlIGEgZGVwZW5kZW5jeSBvbiB0aGUgYWN0dWFsIHByZXNlbmNlIG9mIEFQIGhhcmR3YXJlPyBUaGUgZGlzdGluY3Rpb24gaXMgY3JpdGljYWwgZm9yIGhvdyBJIGFyY2hpdGVjdCBteSBpbml0aWFsaXphdGlvbiBhbmQgZXJyb3ItaGFuZGxpbmcgc3RyYXRlZ2llcy4gVGhpcyBkZXRlcm1pbmVzIGlmIEkgY2FuIHJlbHkgb24gaXRzIHByZXNlbmNlLiBJZiBpdCBpcyBvbmx5IGNhbGxlZCBvbiB0aGUgcHJlc2VuY2Ugb2YgdGhlIEFQIGhhcmR3YXJlLCB0aGVuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBoYW5kbGUgdGhlIGVkZ2UgY2FzZSB3aGVyZSB0aGUgbW9kdWxlIGxvYWRzIGJ1dCB0aGUgaGFyZHdhcmUgaXMgbm90IHByZXNlbnQuIEFuZCBjb252ZXJzZWx5LCBpZiBpdCBpcyB1bmNvbmRpdGlvbmFsLCBob3cgY2FuIEkgZGV0ZWN0IHRoYXQgdGhlIGhhcmR3YXJlICppcyogcHJlc2VudCwgaWYgbmVjZXNzYXJ5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gcHJlcGFyZWQgZm9yIGFsbCBzY2VuYXJpb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19hcF9tZGV2X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTE2Nz1zdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTg4LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjE4OTpcdHJldCA9IHZmaW9fYXBfbWRldl9yZWdpc3RlcigpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE5MC1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjM3OD1zdGF0aWMgc3RydWN0IG1kZXZfZHJpdmVyIHZmaW9fYXBfbWF0cml4X2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM5MC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMzkxOmludCB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIodm9pZClcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzkyLXtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE0Mz1zdHJ1Y3QgdmZpb19hcF9xdWV1ZSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNTQtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE1NTppbnQgdmZpb19hcF9tZGV2X3JlZ2lzdGVyKHZvaWQpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNTYtdm9pZCB2ZmlvX2FwX21kZXZfdW5yZWdpc3Rlcih2b2lkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODc4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIHRoZSBWRklPLUFQIERyaXZlciBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBWRklPLUFQIGRyaXZlci4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYHZmaW9fYXBfaW5pdGAsIHdoaWNoIEkga25vdyByZXNpZGVzIGluIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBob29rcyBpdHNlbGYgaW50byB0aGUgc3lzdGVtLCByZWdpc3RlcnMgd2l0aCB0aGUgVkZJTyBjb3JlLCBhbmQgc3BlY2lmaWNhbGx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgQVAgKEFjY2VsZXJhdG9yIFByb2Nlc3MpIGhhcmR3YXJlIG9uIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgdGhlIGRldmljZSBwcm9iaW5nLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgYW55IHBvdGVudGlhbCBwb3dlciBtYW5hZ2VtZW50IHJlbGF0ZWQgaW5pdGlhbGlzYXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBkcml2ZXIgc2V0cyB1cCB0aGUgbmVjZXNzYXJ5IHN0cnVjdHVyZXMgZm9yIG1hbmFnaW5nIHRoZSBBUCBkZXZpY2VzIGFuZCB0aGVpciBhc3NvY2lhdGVkIERNQSBtYXBwaW5ncyBmb3IgSU9NTVVzLiBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyBpdCBoYW5kbGVzIGVycm9yIGNvbmRpdGlvbnMgYW5kIGhvdHBsdWcgc2NlbmFyaW9zIGR1cmluZyBpbml0aWFsaXphdGlvbi4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgaGFuZGxlZCB0aGUgY29tcGxleGl0aWVzIG9mIEFQIGRldmljZSBhY2Nlc3MgYW5kIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLiBUaGlzIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBWRklPLUFQIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBjcnlwdG8gaGFyZHdhcmUgYW5kIGVuYWJsZXMgdXNlcnNwYWNlIGFjY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2MDpcdFxuIDE2MTpcdFx0ZGVidWdfcmVnaXN0ZXJfdmlldyh2ZmlvX2FwX2RiZl9pbmZvLCBcdTAwMjZkZWJ1Z19zcHJpbnRmX3ZpZXcpO1xuIDE2MjpcdFx0ZGVidWdfc2V0X2xldmVsKHZmaW9fYXBfZGJmX2luZm8sIERCRl9XQVJOKTtcbiAxNjM6XHRcbiAxNjQ6XHRcdHJldHVybiAwO1xuIDE2NTpcdH1cbiAxNjY6XHRcbiAxNjc6XHRzdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcbiAxNjg6XHR7XG4gMTY5Olx0XHRpbnQgcmV0O1xuIDE3MDpcdFxuIDE3MTpcdFx0cmV0ID0gdmZpb19hcF9kYmZfaW5mb19pbml0KCk7XG4gMTcyOlx0XHRpZiAocmV0KVxuIDE3MzpcdFx0XHRyZXR1cm4gcmV0O1xuIDE3NDpcdFxuIDE3NTpcdFx0LyogSWYgdGhlcmUgYXJlIG5vIEFQIGluc3RydWN0aW9ucywgdGhlcmUgaXMgbm90aGluZyB0byBwYXNzIHRocm91Z2guICovXG4gMTc2Olx0XHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSlcbiAxNzc6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gMTc4Olx0XG4gMTc5Olx0XHRyZXQgPSB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlKCk7XG4gMTgwOlx0XHRpZiAocmV0KVxuIDE4MTpcdFx0XHRyZXR1cm4gcmV0O1xuIDE4MjpcdFxuIDE4MzpcdFx0cmV0ID0gYXBfZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNnZmaW9fYXBfZHJ2LCBUSElTX01PRFVMRSwgVkZJT19BUF9EUlZfTkFNRSk7XG4gMTg0Olx0XHRpZiAocmV0KSB7XG4gMTg1Olx0XHRcdHZmaW9fYXBfbWF0cml4X2Rldl9kZXN0cm95KCk7XG4gMTg2Olx0XHRcdHJldHVybiByZXQ7XG4gMTg3Olx0XHR9XG4gMTg4Olx0XG4gMTg5Olx0XHRyZXQgPSB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIoKTtcbiAxOTA6XHRcdGlmIChyZXQpIHtcbiAxOTE6XHRcdFx0YXBfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2dmZpb19hcF9kcnYpO1xuIDE5MjpcdFx0XHR2ZmlvX2FwX21hdHJpeF9kZXZfZGVzdHJveSgpO1xuIDE5MzpcdFxuIDE5NDpcdFx0XHRyZXR1cm4gcmV0O1xuIDE5NTpcdFx0fVxuIDE5NjpcdFxuIDE5NzpcdFx0cmV0dXJuIDA7XG4gMTk4Olx0fVxuIDE5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzQ4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgSGFyZHdhcmUgQ29tcGF0aWJpbGl0eSBJc3N1ZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYml0IG9mIGNvZGU6IGBpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkgcmV0dXJuIC1FTk9ERVY7YCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0htbSwgdGhpcyBsb29rcyBsaWtlIGEgY2hlY2sgZm9yIHNwZWNpZmljIGhhcmR3YXJlIGF2YWlsYWJpbGl0eS4mIzM0OyBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGd1YXJkaW5nIGFnYWluc3QgYXR0ZW1wdGluZyB0byBleGVjdXRlIGluc3RydWN0aW9ucyB0aGF0IG1pZ2h0IG5vdCBiZSBzdXBwb3J0ZWQuIFRoZSBxdWljayBleGl0IHdpdGggYC1FTk9ERVZgIChEZXZpY2UgTm90IEZvdW5kKSBpcyBhIGdvb2QgaW5kaWNhdGlvbiBvZiB0aGF0LgoKTm93LCBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgIGZ1bmN0aW9uIHdpbGwgYWN0dWFsbHkgKnJldHVybiB0cnVlKiBpbiBteSBRRU1VIGVudmlyb25tZW50LiBRRU1VJiMzOTtzIGVtdWxhdGVkIGhhcmR3YXJlIGlzbiYjMzk7dCBhbHdheXMgYSBwZXJmZWN0IG1hdGNoIGZvciByZWFsIGhhcmR3YXJlLCBhbmQgdGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBxdWVzdGlvbi4gSSBuZWVkIHRvIGRpZyBpbnRvIHdoYXQgZXhhY3RseSBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCBpcyAqZG9pbmcqIHVuZGVyIHRoZSBob29kLiBEb2VzIGl0IGNoZWNrIGZvciBhIHNwZWNpZmljIENQVSBmZWF0dXJlIGZsYWc/IElzIGl0IHJlYWRpbmcgc29tZSBtb2RlbC1zcGVjaWZpYyByZWdpc3Rlcj8gSXMgaXQgcHJvYmluZyBmb3IgYSBjZXJ0YWluIGluc3RydWN0aW9uIG9wY29kZT8gVW5kZXJzdGFuZGluZyAqaG93KiB0aGlzIGNoZWNrIHdvcmtzIGlzIGFic29sdXRlbHkgY3JpdGljYWwgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBjb2RlIHdpbGwgcnVuIGNvcnJlY3RseSB3aXRoaW4gdGhlIGVtdWxhdGVkIGNvbnRleHQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oPTcyPXVuaW9uIGFwX3F1ZXVlX3N0YXR1c19yZWcge1xuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oLTgwLS8qKlxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmg6ODE6ICogYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIC0gVGVzdCBpZiBBUCBpbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZS5cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oLTgyLSAqXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODQtICovXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaDo4NTpzdGF0aWMgaW5saW5lIGJvb2wgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSh2b2lkKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgtODYte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMTA1PXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X2NyeXB0byhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNTEtXHRjYXNlIEtWTV9TMzkwX1ZNX0NSWVBUT19FTkFCTEVfQVBJRTpcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTUyOlx0XHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNTMtXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE1OC1cdGNhc2UgS1ZNX1MzOTBfVk1fQ1JZUFRPX0RJU0FCTEVfQVBJRTpcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTU5Olx0XHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNjAtXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjEwMD1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX2hhc19hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjE1Ni1cdFx0Y2FzZSBLVk1fUzM5MF9WTV9DUllQVE9fRElTQUJMRV9BUElFOlxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjIxNTc6XHRcdFx0cmV0ID0gYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpID8gMCA6IC1FTlhJTztcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMTU4LVx0XHRcdGJyZWFrO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zMTAxPXN0YXRpYyBpbnQga3ZtX3MzOTBfYXB4YV9pbnN0YWxsZWQodm9pZClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEwNC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTA1Olx0aWYgKGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxMDYtXHRcdGlmIChhcF9xY2koXHUwMDI2aW5mbykgPT0gMClcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz01OTI9c3RhdGljIGludCBoYW5kbGVfcHFhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNjAwLVx0LyogVmVyaWZ5IHRoYXQgdGhlIEFQIGluc3RydWN0aW9uIGFyZSBhdmFpbGFibGUgKi9cbmFyY2gvczM5MC9rdm0vcHJpdi5jOjYwMTpcdGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNjAyLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0yNTc4PXN0YXRpYyBpbnQgX19pbml0IGFwX21vZHVsZV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNTgxLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNTgyOlx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjU4My1cdFx0cHJfd2FybihcJiMzNDtUaGUgaGFyZHdhcmUgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgQVAgaW5zdHJ1Y3Rpb25zXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9MTY3PXN0YXRpYyBpbnQgX19pbml0IHZmaW9fYXBfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xNzUtXHQvKiBJZiB0aGVyZSBhcmUgbm8gQVAgaW5zdHJ1Y3Rpb25zLCB0aGVyZSBpcyBub3RoaW5nIHRvIHBhc3MgdGhyb3VnaC4gKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxNzY6XHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSlcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xNzctXHRcdHJldHVybiAtRU5PREVWO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI2OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlYCB0aGluZy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cyB3aXRoIFMvMzkwIGFyY2hpdGVjdHVyZSBzcGVjaWZpY3MsIGlzIHRvIGNoZWNrIHRoZSBoZWFkZXIgZmlsZXMuIEkgZmlndXJlIGl0JiMzOTtzIGxpa2VseSBkZWZpbmVkIHdpdGhpbiB0aGUgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oYCBkaXJlY3Rvcnkg4oCTIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFyY2hpdGVjdHVyYWwgc3BlY2lmaWNzIGZvciB0aGUgQWNjZXNzIFBhdGggZnVuY3Rpb25zIGFyZSB1c3VhbGx5IGRlY2xhcmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbWFjcm8sIGZ1bmN0aW9uLCBvciB2YXJpYWJsZSBtZWFucy4gSXMgaXQgYSBjb21waWxlLXRpbWUgY2hlY2s/IEEgcnVudGltZSBjYXBhYmlsaXR5IHRlc3Q/IFdoYXQga2luZCBvZiBBUCBpbnN0cnVjdGlvbnMgaXMgdGhpcyBtYWNybyBjb25jZXJuZWQgYWJvdXQ/IEtub3dpbmcgdGhpcyBpcyBpbXBvcnRhbnQgZm9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzIGFuZCBmb3IgdW5kZXJzdGFuZGluZyBhdmFpbGFibGUgaW5zdHJ1Y3Rpb25zLiBUaW1lIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgdG8gdGhlIGJvdHRvbSBvZiBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0LyoqXG4gIDgxOlx0ICogYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpIC0gVGVzdCBpZiBBUCBpbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZS5cbiAgODI6XHQgKlxuICA4MzpcdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgQVAgaW5zdHJ1Y3Rpb25zIGFyZSBpbnN0YWxsZWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgODQ6XHQgKi9cbiAgODU6XHRzdGF0aWMgaW5saW5lIGJvb2wgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSh2b2lkKVxuICA4NjpcdHtcbiAgODc6XHRcdHVuc2lnbmVkIGxvbmcgcmVnMCA9IEFQX01LUUlEKDAsIDApO1xuICA4ODpcdFx0dW5zaWduZWQgbG9uZyByZWcxID0gMDtcbiAgODk6XHRcbiAgOTA6XHRcdGFzbSB2b2xhdGlsZShcbiAgOTE6XHRcdFx0XCYjMzQ7XHRsZ3JcdDAsJVtyZWcwXVxcblwmIzM0O1x0XHQvKiBxaWQgaW50byBncjAgKi9cbiAgOTI6XHRcdFx0XCYjMzQ7XHRsZ2hpXHQxLDBcXG5cJiMzNDtcdFx0XHQvKiAwIGludG8gZ3IxICovXG4gIDkzOlx0XHRcdFwmIzM0O1x0bGdoaVx0MiwwXFxuXCYjMzQ7XHRcdFx0LyogMCBpbnRvIGdyMiAqL1xuICA5NDpcdFx0XHRcJiMzNDtcdC5pbnNuXHRycmUsMHhiMmFmMDAwMCwwLDBcXG5cJiMzNDtcdC8qIFBRQVAoVEFQUSkgKi9cbiAgOTU6XHRcdFx0XCYjMzQ7MDpcdGxhXHQlW3JlZzFdLDFcXG5cJiMzNDtcdFx0LyogMSBpbnRvIHJlZzEgKi9cbiAgOTY6XHRcdFx0XCYjMzQ7MTpcXG5cJiMzNDtcbiAgOTc6XHRcdFx0RVhfVEFCTEUoMGIsIDFiKVxuICA5ODpcdFx0XHQ6IFtyZWcxXSBcJiMzNDsmIzQzO1x1MDAyNmRcJiMzNDsgKHJlZzEpXG4gIDk5Olx0XHRcdDogW3JlZzBdIFwmIzM0O2RcJiMzNDsgKHJlZzApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODg3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmVhc2liaWxpdHkgb2YgRnV6emluZyB0aGUgYHZmaW9fYXBgIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHBvc3NpYmxlIHRvIHJlYWNoIGNlcnRhaW4gY29kZSBwYXRocyB3aXRoaW4gdGhlIGB2ZmlvX2FwYCBkcml2ZXIgdXNpbmcgc3l6a2FsbGVyLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBzMzkweCBhcmNoaXRlY3R1cmUuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHJldm9sdmVzIGFyb3VuZCB3aGV0aGVyIHRoZSBBUCAoQWR2YW5jZWQgUHJvY2Vzc29yKSBpbnN0cnVjdGlvbnMgYXJlIGFjdHVhbGx5ICphdmFpbGFibGUqIGluIHRoZSBlbnZpcm9ubWVudHMgd2hlcmUgc3l6a2FsbGVyIGlzIHR5cGljYWxseSBkZXBsb3llZC4KCkZpcnN0LCBJIG5lZWQgdG8ga25vdyBpZiB0aGUgYFBRQVBgIGluc3RydWN0aW9uLCB3aGljaCBpcyBjb3JlIHRvIEFQIGZ1bmN0aW9uYWxpdHksIGlzIGV2ZW4gZW11bGF0ZWQgYnkgUUVNVSBmb3IgczM5MHggZ3Vlc3RzLiBRRU1VICptaWdodCogZW11bGF0ZSBpdCBpZiBpdCYjMzk7cyBydW5uaW5nIHdpdGggS1ZNIG9uIGFuIHMzOTB4IGhvc3QuIEJ1dCBpZiBpdCYjMzk7cyBpbiBUQ0cgbW9kZSAocHVyZSBlbXVsYXRpb24pLCBwcm9iYWJseSBub3QuIEkga25vdyB0aGF0IHN5emthbGxlciBydW5zIHMzOTB4IGluIFFFTVUgVENHIG9uIHg4Nl82NCBob3N0cyBhbmQgS1ZNIG9uIHMzOTB4IGhvc3RzLgoKU2luY2UgdGhlIHByb21wdCBleHBsaWNpdGx5IG1lbnRpb25zIHNjZW5hcmlvcyB0aGF0IGFyZSAqaW1wb3NzaWJsZSogdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBJJiMzOTttIG5vdyBob25pbmcgaW4gb24gQVAgaGFyZHdhcmUgZW11bGF0aW9uIGluIFFFTVUgVENHIHNwZWNpZmljYWxseS4gVGhlIG1vcmUgSSB0aGluayBhYm91dCBpdCwgaXQmIzM5O3MgdmVyeSB1bmxpa2VseSB0aGF0IFFFTVUgVENHIGVtdWxhdGVzIEFQIGhhcmR3YXJlLCBzaW5jZSB0aG9zZSBhcmUgc3BlY2lhbGl6ZWQgbWFpbmZyYW1lIGNyeXB0byBjYXJkcy4KCkkgY2FuJiMzOTt0IGNoZWNrIFFFTVUgc291cmNlIHJpZ2h0IG5vdywgc28gbGV0IG1lIHBpdm90IGFuZCBzZWUgaWYgdGhlIGtlcm5lbCBpdHNlbGYgaGFzIHNvZnR3YXJlIGVtdWxhdG9ycyBmb3IgQVAuIE5vcGUsIHRoYXQmIzM5O3MgYSBkZWFkIGVuZC4gQVAgaXMgYSB0cnVlIGhhcmR3YXJlIGZlYXR1cmUgb2YgSUJNIFogbWFpbmZyYW1lcy4gVGhlbiBJIHJlbWVtYmVyIGB2ZmlvX2FwYCwgd2hpY2ggaXMgKmZvciogcGFzc2luZyB0aHJvdWdoIEFQIGRldmljZXMgdG8gS1ZNIGd1ZXN0cy4gSXQgcmVnaXN0ZXJzIGFzIGFuIG1kZXYgZHJpdmVyIGlmIGl0JiMzOTtzIGxvYWRlZC4KClRoZSBjcml0aWNhbCBwaWVjZSBoZXJlOiBjYW4gd2UgKmV2ZW4qIGNyZWF0ZSBhbiBtZGV2IGRldmljZSBmb3IgYHZmaW9fYXBgIGlmIHRoZXJlJiMzOTtzIG5vIEFQIGhhcmR3YXJlPyBObywgYmVjYXVzZSBgdmZpb19hcF9pbml0YCByZXR1cm5zIGAtRU5PREVWYCBpZiBgIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKWAuIFRoZSBtb2R1bGUgd291bGRuJiMzOTt0IGV2ZW4gbG9hZC4gU28sIGRlZmluaXRlbHkgbm8gQVAgaW5zdHJ1Y3Rpb25zIGluIFFFTVUgVENHLiBBUCBpcyAqb25seSogYWNjZXNzaWJsZSB2aWEgS1ZNIHdoZW4gdGhlIGhvc3QgaGFzIHRoZSBoYXJkd2FyZSBhbmQgeW91IHVzZSBgdmZpb19hcGAgKG9yIGlmIHRoZSBob3N0IGtlcm5lbCBvZmZlcnMgQVAgdG8gdGhlIGd1ZXN0KS4gVGhvdWdoLCBzb21ldGltZXMgc3l6a2FsbGVyICpkb2VzKiBydW4gczM5MHggS1ZNIG9uIGFjdHVhbCBtYWluZnJhbWVzLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcG90ZW50aWFsIHJlYWNoYWJpbGl0eSwgaWYgaXQgd2VyZSB0byBydW4gb24gYSBzMzkweCBMUEFSIG9yIHovVk0gZ3Vlc3QgKGFjdGluZyBhcyB0aGUgaG9zdCBmb3IgS1ZNKS4gVGhvc2UgbWlnaHQgaGF2ZSByZWFsIEFQIGRldmljZXMuIFNvLCBpcyBgdmZpb19hcGAgZnV6emFibGU/IExldCYjMzk7cyBjaGVjayB0aGUgY29kZSBjaGFuZ2VzLiBJJiMzOTttIGxvb2tpbmcgYXQgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AuCgpPa2F5LCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBhbGwgZGVlcGx5IGludm9sdmVkIGluIHRoZSBtZGV2IGxpZmVjeWNsZSBhbmQgQVAgYnVzIGNhbGxiYWNrczogYHZmaW9fYXBfbWRldl9wcm9iZWAsIGB2ZmlvX2FwX21kZXZfZm9yX3F1ZXVlYCwgYHN0YXR1c19zaG93YCwgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWAsIGB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlYCwgYHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZ2AsIGB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZWAsIGB2ZmlvX2FwX21kZXZfY2ZnX2FkZGAsIGB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnYCwgYW5kIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgLgoKQ2FuIHN5emthbGxlciB0cmlnZ2VyIHRoZXNlPyBEZWZpbml0ZWx5LCBieSBpbnRlcmFjdGluZyB3aXRoIHN5c2ZzIHRvIGNyZWF0ZSBtZGV2IGRldmljZXMsIGFuZCBBUCBidXMgc2Nhbm5pbmcgKHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgb3IgaGFwcGVucyBhdXRvbWF0aWNhbGx5KS4gV2FpdCwgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWAgaXMgY2FsbGVkIHdoZW4gYW4gQVAgcXVldWUgZGV2aWNlIGlzIGJvdW5kIHRvIHRoZSBgdmZpb19hcGAgZHJpdmVyLiBUaGlzIHJlcXVpcmVzIGEgcXVldWUgZGV2aWNlLiBOb3csIGlzIGl0IHBvc3NpYmxlIHRvIGNyZWF0ZSBzdWNoIGEgZGV2aWNlIHZpYSBzb2Z0d2FyZT8gTGV0JiMzOTtzIGNoZWNrIGBkcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZpY2VfcmVnaXN0ZXIuKmFwXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBwcm9tcHQsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIEFQIERldmljZSBDcmVhdGlvbiBQcm9jZXNzZXMqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBBY2Nlc3MgUG9pbnQgKEFQKSBkZXZpY2VzIGFyZSBhY3R1YWxseSAqbWFkZSouIEl04oCZcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBxdWVzdGlvbiwgZXNwZWNpYWxseSB3aGVuIHlvdSBjb25zaWRlciB0aGUgbnVhbmNlcyBvZiBkaWZmZXJlbnQgbWFudWZhY3R1cmVycyBhbmQgdGhlIHZhcmlvdXMgY2hpcHNldHMgYW5kIGZpcm13YXJlIGludm9sdmVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBsZXZlbCBvZiBkZXRhaWwgYW0gSSBhaW1pbmcgZm9yIGhlcmU/IElzIHRoaXMgYSBoaWdoLWxldmVsIG92ZXJ2aWV3IG9mIHRoZSBtYW51ZmFjdHVyaW5nIHBpcGVsaW5lLCBvciBhcmUgd2UgZ2V0dGluZyBkb3duIGluIHRoZSB3ZWVkcyB3aXRoIHNwZWNpZmljIGNvbXBvbmVudCBzb3VyY2luZyBhbmQgdmFsaWRhdGlvbj8gCgpJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIHRoaXMuIFRoaW5raW5nIG1vcmUsIGl04oCZcyBub3QganVzdCBhYm91dCB0aGUgKnBoeXNpY2FsKiBjcmVhdGlvbiwgZWl0aGVyLiBJdOKAmXMgYWxzbyB0aGUgbG9naWNhbCBidWlsZCBwcm9jZXNzLiBUaGUgZmlybXdhcmUgZmxhc2hpbmcsIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24sIHRoZSB0ZXN0aW5nLi4uIFRoYXQgd2hvbGUgbGlmZWN5Y2xlIGZyb20gcmF3IHNpbGljb24gdG8gYSBmdW5jdGlvbmFsLCBuZXR3b3JrLXJlYWR5IGRldmljZS4gV2UgY291bGQgZ2V0IGludG8gcXVlc3Rpb25zIGFyb3VuZCBzdXBwbHkgY2hhaW4gc2VjdXJpdHksIHRvbyDigJMgbWFraW5nIHN1cmUgdGhlcmUgYXJlbuKAmXQgYW55IG1hbGljaW91cyBjb21wb25lbnRzIG9yIGJhY2tkb29ycyBpbnRyb2R1Y2VkIGR1cmluZyBwcm9kdWN0aW9uLgoKT2theSwgbXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIHRoZSBpbnF1aXJ5LiBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiBvbiB3aHkgdGhlIHByb21wdCBpcyBuZWVkZWQuIElzIHRoaXMgYSByZXNlYXJjaCBwcm9qZWN0PyBBbiBpbnZlc3RpZ2F0aW9uPyBBIGdlbmVyYWwgaW50ZXJlc3Q/IFJlZ2FyZGxlc3MsIGl0JiMzOTtzIGNsZWFyIHRoZSBwcm9tcHQgcmVxdWlyZXMgdGhhdCBJIGdhdGhlciBkYXRhIG9uIEFQIGRldmljZSBwcm9kdWN0aW9uIG1ldGhvZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXBfZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDExMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHJldmlld2luZyB0aGUgY29kZToKCioqQ2hlY2tpbmcgRGV2aWNlIENyZWF0aW9uIGluIGFwX2J1cy5jKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCBvcmRlciBvZiBidXNpbmVzczogSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgZGV2aWNlIGlzIGluaXRpYWxpemVkLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgYXBfYnVzLmNgLCBiZWNhdXNlIHRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBkZXZpY2UgY3JlYXRpb24gYW5kIGJ1cy1zcGVjaWZpYyBzZXR1cCBoYXBwZW5zLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBpbnN0YW50aWF0aW9uIGxvZ2ljLCBhbnkgYXNzb2NpYXRlZCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQsIGNydWNpYWxseSwgaG93IHRoZSBkZXZpY2UgZ2V0cyByZWdpc3RlcmVkIHdpdGggdGhlIHN5c3RlbS4gSSBleHBlY3QgdG8gZmluZCBhIHdlbGwtZGVmaW5lZCBmdW5jdGlvbiBvciBzZXQgb2YgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBhbGwgb2YgdGhpcy4gSSYjMzk7bGwgYmUgc2NydXRpbml6aW5nIHRoZSBjb2RlIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBpbmNvcnJlY3QgcmVzb3VyY2UgaGFuZGxpbmcgKG1lbW9yeSBsZWFrcyBhcmUgYSBodWdlIG5vLW5vISksIGFuZCBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgZnJhZ2lsZSBvciBwb29ybHkgZG9jdW1lbnRlZC4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGJ1cy1zcGVjaWZpYyBxdWlya3MgYW5kIGFueSBjdXN0b20gY29uZmlndXJhdGlvbnMsIGlmIHRoZXkgZXhpc3QsIHRvIGNvbXBhcmUgdGhlbSB3aXRoIHRoZSBzdGFuZGFyZCBhcmNoaXRlY3R1cmUuIEFueSBub24tc3RhbmRhcmQgY29uZmlndXJhdGlvbnMgYXJlIGFsd2F5cyBhIHBvaW50IG9mIGludGVyZXN0LCBhcyB0aG9zZSBjYW4gb2Z0ZW4gYmUgdGhlIHNvdXJjZSBvZiBpc3N1ZXMgZG93biB0aGUgbGluZS4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBkZXZpY2UgY3JlYXRpb24gcHJvY2Vzcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2VsbC1kZWZpbmVkIGVycm9yIGNvZGVzIGFuZCBhbnkgc3BlY2lmaWMgc3RlcHMgdGhlIGNvZGUgdGFrZXMgdG8gY2xlYW4gdXAgcGFydGlhbGx5IGNyZWF0ZWQgZGV2aWNlcyBpbiBjYXNlIG9mIGZhaWx1cmUuIEkgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBkZXZpY2UgY3JlYXRpb24gaXMgdGhyZWFkLXNhZmUuIE92ZXJhbGwsIEkgd2FudCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBkZXZpY2UmIzM5O3MgbGlmZWN5Y2xlIGZyb20gYmlydGggdG8gcmVnaXN0cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZpY2VfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jPTE5ODI9c3RhdGljIGlubGluZSB2b2lkIGFwX3NjYW5fZG9tYWlucyhzdHJ1Y3QgYXBfY2FyZCAqYWMpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yMDQxLVx0XHRcdC8qIHJlZ2lzdGVyIHF1ZXVlIGRldmljZSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyMDQyOlx0XHRcdHJjID0gZGV2aWNlX3JlZ2lzdGVyKGRldik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTIwNDMtXHRcdFx0aWYgKHJjKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjIwNDQ6XHRcdFx0XHRBUF9EQkZfV0FSTihcJiMzNDslcyglZCwlZCkgZGV2aWNlX3JlZ2lzdGVyKCkgZmFpbGVkXFxuXCYjMzQ7LFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yMDQ1LVx0XHRcdFx0XHQgICAgX19mdW5jX18sIGFjLVx1MDAzZWlkLCBkb20pO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MjEzOT1zdGF0aWMgaW5saW5lIHZvaWQgYXBfc2Nhbl9hZGFwdGVyKGludCBhcClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTIyNzMtXHRcdC8qIFJlZ2lzdGVyIHRoZSBuZXcgY2FyZCBkZXZpY2Ugd2l0aCBBUCBidXMgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjI3NDpcdFx0cmMgPSBkZXZpY2VfcmVnaXN0ZXIoZGV2KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjI3NS1cdFx0aWYgKHJjKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjIyNzY6XHRcdFx0QVBfREJGX1dBUk4oXCYjMzQ7JXMoJWQpIGRldmljZV9yZWdpc3RlcigpIGZhaWxlZFxcblwmIzM0OyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjI3Ny1cdFx0XHRcdCAgICBfX2Z1bmNfXywgYXApO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MjU3OD1zdGF0aWMgaW50IF9faW5pdCBhcF9tb2R1bGVfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjYyMi1cdC8qIENyZWF0ZSAvc3lzL2RldmljZXMvYXAuICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI2MjM6XHRhcF9yb290X2RldmljZSA9IHJvb3RfZGV2aWNlX3JlZ2lzdGVyKFwmIzM0O2FwXCYjMzQ7KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjYyNC1cdHJjID0gUFRSX0VSUl9PUl9aRVJPKGFwX3Jvb3RfZGV2aWNlKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9ODY9c3RhdGljIGludCB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlKHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTkwLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjkxOlx0cm9vdF9kZXZpY2UgPSByb290X2RldmljZV9yZWdpc3RlcihWRklPX0FQX1JPT1RfTkFNRSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtOTItXHRpZiAoSVNfRVJSKHJvb3RfZGV2aWNlKSlcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTIxLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjEyMjpcdHJldCA9IGRldmljZV9yZWdpc3RlcihcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWRldmljZSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTIzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYz0zNjY9c3RhdGljIGludCB6Y2RuX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jLTQxNi1cdH1cbmRyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jOjQxNzpcdHJjID0gZGV2aWNlX3JlZ2lzdGVyKFx1MDAyNnpjZG5kZXYtXHUwMDNlZGV2aWNlKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jLTQxOC1cdGlmIChyYykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM2MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgQWNjZXNzIFBvaW50IERldmljZSBDcmVhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGVzZSBBY2Nlc3MgUG9pbnQgKEFQKSBkZXZpY2VzIGFyZSBhY3R1YWxseSBjcmVhdGVkLiBGcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLCBpdCBsb29rcyBsaWtlIGBhcF9zY2FuX2RvbWFpbnNgIGFuZCBgYXBfc2Nhbl9hZGFwdGVyYCBhcmUgdGhlIGtleSBjb21wb25lbnRzIGhlcmUsIGVzc2VudGlhbGx5IHNjYW5uaW5nIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHRvIGlkZW50aWZ5IGFuZCBicmluZyB0aGVzZSBBUCBkZXZpY2VzIGludG8gYmVpbmcuIAoKQnV0IGhlcmUmIzM5O3MgYSB0aG91Z2h0OiBDYW4gd2UgYnlwYXNzIHRoYXQgaGFyZHdhcmUgZGV0ZWN0aW9uIGFuZCAqaW5qZWN0KiBhbiBBUCBkZXZpY2UgZGlyZWN0bHkgdGhyb3VnaCBzb2Z0d2FyZT8gSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEkmIzM5O20gZ29pbmcgdG8gaW52ZXN0aWdhdGUgd2hldGhlciB0aGVyZSYjMzk7cyBhbnkgbWVjaGFuaXNtIGZvciBzb2Z0d2FyZS1iYXNlZCBgYXBfZGV2aWNlYCBpbmplY3Rpb24gYXQgYWxsLiBJcyBpdCBwdXJlbHkgYSBoYXJkd2FyZS1kcml2ZW4gcHJvY2Vzcywgb3IgYXJlIHRoZXJlIGhvb2tzIG9yIHZ1bG5lcmFiaWxpdGllcyB3ZSBjb3VsZCBwb3RlbnRpYWxseSBsZXZlcmFnZT8gVGhhdCYjMzk7cyB0aGUgcXVlc3Rpb24gSSBuZWVkIHRvIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXBfc2Nhbl9hZGFwdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0xOTgyPXN0YXRpYyBpbmxpbmUgdm9pZCBhcF9zY2FuX2RvbWFpbnMoc3RydWN0IGFwX2NhcmQgKmFjKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjEzOC0gKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjEzOTpzdGF0aWMgaW5saW5lIHZvaWQgYXBfc2Nhbl9hZGFwdGVyKGludCBhcClcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjE0MC17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0yMzczPXN0YXRpYyBib29sIGFwX3NjYW5fYnVzKHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yMzk4LVx0Zm9yIChhcCA9IDA7IGFwIFx1MDAzYz0gYXBfbWF4X2FkYXB0ZXJfaWQ7IGFwJiM0MzsmIzQzOylcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjM5OTpcdFx0YXBfc2Nhbl9hZGFwdGVyKGFwKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQwMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NzAKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBBUCBEZXZpY2UgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIEFQIGRldmljZXMsIGFuZCBoZXJlJiMzOTtzIG15IHRyYWluIG9mIHRob3VnaHQuIFdlIHN0YXJ0IHdpdGggYGFwX3NjYW5fYnVzYC4gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBzdXBwb3NlZCB0byB1c2UgdGhvc2UgQVAgaW5zdHJ1Y3Rpb25zIOKAkyBgYXBfcWNpYCwgYGFwX3RhcHFgLCB0aGUgd2hvbGUgc2hlYmFuZyDigJMgdG8gYWN0dWFsbHkgZmluZCBhbmQgaWRlbnRpZnkgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIG9uIHRoZSBidXMuIE1ha2VzIHNlbnNlIHNvIGZhci4gSWYgdGhlcmUgKmlzbiYjMzk7dCogYW55IGhhcmR3YXJlIHByZXNlbnQsIHRoZW4gbmF0dXJhbGx5LCBgYXBfc2Nhbl9idXNgIGlzbiYjMzk7dCBnb2luZyB0byBkZXRlY3QgYW55dGhpbmcuIFRoZXJlZm9yZSwgd2Ugd291bGQgZXhwZWN0IHRoYXQgaWYgaXQgZmluZHMgbm90aGluZywgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWAgd2lsbCBuZXZlciBnZXQgY2FsbGVkIGJlY2F1c2UgdGhlIGhhcmR3YXJlIGhhcyBub3QgYmVlbiBlbnVtZXJhdGVkLgoKQnV0IHRoZW4sIGEgc2xpZ2h0IHdyaW5rbGUgZW50ZXJzIHRoZSBwaWN0dXJlLiBJIG5lZWQgdG8gYmUgc3VyZTsgbXkgcmVjYWxsIGlzIHNvbWV0aW1lcyBmYXVsdHkuICpXYWl0KiwgYHZmaW9fYXBfbWRldl9wcm9iZWAgZ2V0cyBjYWxsZWQgd2hlbiBhbiBtZGV2IGlzICpjcmVhdGVkKiwgbm90IG9ubHkgd2hlbiB0aGUgaGFyZHdhcmUgaXMgZW51bWVyYXRlZC4gVGhpcyBtZWFucyB0aGF0IGFuIG1kZXYgY2FuIGJlIGluc3RhbnRpYXRlZCBwcmlvciB0byB0aGUgcGh5c2ljYWwgYnVzIGJlaW5nIHNjYW5uZWQuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMuLi4gY2FuIGFuIG1kZXYgYmUgY3JlYXRlZCBldmVuIGlmIHRoZXJlIGFyZSAqbm8qIEFQIGRldmljZXMgdG8gYWN0dWFsbHkgYmFjayBpdD8gSWYgaXQgY2FuLCB3ZSYjMzk7dmUgZ290IGEgcG90ZW50aWFsIGlzc3VlIHdpdGggaG93IHRoaW5ncyBhcmUgYmVpbmcgaGFuZGxlZC4gSSB0aGluayBJIG5lZWQgdG8gZGlnIGludG8gYHZmaW9fYXBfbWRldl9wcm9iZWAgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIHZhbGlkYXRpb24gdGhhdCBpcyBkb25lLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyB0aGF0IHJvdXRpbmUgaGFuZGxlcyB0aGUgc2NlbmFyaW8gd2hlcmUgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZG9lc24mIzM5O3QgZXhpc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3OTA6XHRzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9wcm9iZShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpXG4gNzkxOlx0e1xuIDc5MjpcdFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcbiA3OTM6XHRcdGludCByZXQ7XG4gNzk0Olx0XG4gNzk1Olx0XHRtYXRyaXhfbWRldiA9IHZmaW9fYWxsb2NfZGV2aWNlKGFwX21hdHJpeF9tZGV2LCB2ZGV2LCBcdTAwMjZtZGV2LVx1MDAzZWRldixcbiA3OTY6XHRcdFx0XHRcdFx0XHUwMDI2dmZpb19hcF9tYXRyaXhfZGV2X29wcyk7XG4gNzk3Olx0XHRpZiAoSVNfRVJSKG1hdHJpeF9tZGV2KSlcbiA3OTg6XHRcdFx0cmV0dXJuIFBUUl9FUlIobWF0cml4X21kZXYpO1xuIDc5OTpcdFxuIDgwMDpcdFx0cmV0ID0gdmZpb19yZWdpc3Rlcl9lbXVsYXRlZF9pb21tdV9kZXYoXHUwMDI2bWF0cml4X21kZXYtXHUwMDNldmRldik7XG4gODAxOlx0XHRpZiAocmV0KVxuIDgwMjpcdFx0XHRnb3RvIGVycl9wdXRfdmRldjtcbiA4MDM6XHRcdG1hdHJpeF9tZGV2LVx1MDAzZXJlcV90cmlnZ2VyID0gTlVMTDtcbiA4MDQ6XHRcdG1hdHJpeF9tZGV2LVx1MDAzZWNmZ19jaGdfdHJpZ2dlciA9IE5VTEw7XG4gODA1Olx0XHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2bWRldi1cdTAwM2VkZXYsIG1hdHJpeF9tZGV2KTtcbiA4MDY6XHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gODA3Olx0XHRsaXN0X2FkZChcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vub2RlLCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCk7XG4gODA4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gODA5Olx0XHRyZXR1cm4gMDtcbiA4MTA6XHRcbiA4MTE6XHRlcnJfcHV0X3ZkZXY6XG4gODEyOlx0XHR2ZmlvX3B1dF9kZXZpY2UoXHUwMDI2bWF0cml4X21kZXYtXHUwMDNldmRldik7XG4gODEzOlx0XHRyZXR1cm4gcmV0O1xuIDgxNDpcdH1cbiA4MTU6XHRcbiA4MTY6XHRzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfbGlua19xdWV1ZShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuIDgxNzpcdFx0XHRcdFx0ICAgIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxuIDgxODpcdHtcbiA4MTk6XHRcdGlmICghcSB8fCB2ZmlvX2FwX21kZXZfZ2V0X3F1ZXVlKG1hdHJpeF9tZGV2LCBxLVx1MDAzZWFwcW4pKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkwNAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDUwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdmZpby1hcCBhbmQgaXRzIEludGVyYWN0aW9uIHdpdGggc3l6a2FsbGVyKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGB2ZmlvX2FwYCBtb2R1bGUgYW5kIGhvdyBzeXprYWxsZXIgbWlnaHQgaW50ZXJhY3Qgd2l0aCBpdC4gSSYjMzk7dmUgZ290IGl0LCBgdmZpb19hcF9tZGV2X3Byb2JlYCAqY2FuKiBiZSBjYWxsZWQgd2hlbiBhbiBtZGV2IGlzIGNyZWF0ZWQgdGhyb3VnaCBzeXNmcywgdGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgaGFuZyBvbiwgYHZmaW9fYXBfbWRldl9yZWdpc3RlcmAgaXMgb25seSBjYWxsZWQgaWYgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKWAgcmV0dXJucyB0cnVlLiBOb3csIGlmIHRoYXQgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSwgdGhlIG1vZHVsZSBsb2FkaW5nIGZhaWxzIHdpdGggYW4gYC1FTk9ERVZgIGVycm9yLiBTbywgYmFzaWNhbGx5LCBJIGNhbiYjMzk7dCBldmVuIGdldCB0aGUgbW9kdWxlIGxvYWRlZCBpbiBhIFFFTVUgVENHIGVudmlyb25tZW50LCB3aGljaCBtYWtlcyBpdCB1c2VsZXNzIHRvIGV2ZW4gY29uc2lkZXIuCgpCdXQsIHN5emthbGxlciBydW5zIG9uIHMzOTB4IEtWTSwgcmlnaHQ/IEFuZCBvbiBhY3R1YWwgbWFpbmZyYW1lcywgeWVzPyBJZiBzeXprYWxsZXIgcnVucyBvbiBzMzkweCBLVk0sIHRoZW4gaXQgd291bGQgKmhhdmUqIHRvIGhhdmUgQVAgaW5zdHJ1Y3Rpb25zIGF2YWlsYWJsZSwgaWYgdGhlIGhvc3QgbWFjaGluZSBoYXMgQVAgaGFyZHdhcmUgYW5kIEtWTSBlbmFibGVzIGl0LiBUaGUgdGhpbmcgaXMsIHN5emthbGxlciBpcyBmdXp6aW5nIHRoZSAqaG9zdCoga2VybmVsLCBvciBtYXliZSBhIGd1ZXN0IGtlcm5lbCBhY3RpbmcgYXMgdGhlIHN5c3RlbSB1bmRlciB0ZXN0LiBUeXBpY2FsbHksIGl04oCZcyBmdXp6aW5nIGEgZ3Vlc3QsIHNvIGRvZXMgdGhlIGd1ZXN0IGtlcm5lbCBoYXZlIEFQIGluc3RydWN0aW9ucyBpZiBpdCYjMzk7cyBydW5uaW5nIG9uIEtWTT8gSXQgZG9lcywgaWYgdGhlIGhvc3QgcGFzc2VzIHRoZW0gdGhyb3VnaC4KCkJ1dCBkb2VzIHRoZSBndWVzdCBoYXZlICphY3R1YWwqIEFQIGRldmljZXM/IE9ubHkgaWYgdGhlIGhvc3QgcGFzc2VzIHRoZW0gdGhyb3VnaC4gSG93ZXZlciwgc3l6a2FsbGVyIHR5cGljYWxseSBydW5zIGluIGEgZ2VuZXJpYyBWTSwgc28gdGhlcmUmIzM5O3MgdXN1YWxseSBubyBzcGVjaWZpYyBoYXJkd2FyZSBwYXNzZWQgdGhyb3VnaC4gQnV0IGV2ZW4gd2l0aG91dCBzcGVjaWZpYyBkZXZpY2VzLCBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCBtaWdodCBzdGlsbCBiZSB0cnVlIGlmIHRoZSBob3N0IGVuYWJsZXMgQVAgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgZ3Vlc3QsIHdoaWNoIGl0IGRvZXMgYnkgZGVmYXVsdCBpZiB0aGUgaG9zdCBoYXMgdGhlbS4KCklmIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgIGlzIHRydWUsIHRoZSBgdmZpb19hcGAgbW9kdWxlIHdpbGwgbG9hZC4gQW5kIHRoZW4sIHN5emthbGxlciAqY2FuKiBjcmVhdGUgbWRldiBkZXZpY2VzIHZpYSBzeXNmcywgYW5kIGB2ZmlvX2FwX21kZXZfcHJvYmVgIGJlY29tZXMgcmVhY2hhYmxlLiBXaGF0IGFib3V0IGB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWVgPyBUaGF0IHJlcXVpcmVzIGFuIGFjdHVhbCBBUCBxdWV1ZSBkZXZpY2UgdG8gYmUgYm91bmQgdG8gdGhlIGB2ZmlvX2FwYCBkcml2ZXIuIElmIHRoZXJlIGFyZSBubyBBUCBkZXZpY2VzLCBgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlYCB3b24mIzM5O3QgYmUgcmVhY2hlZC4gQnV0LCBgdmZpb19hcF9tZGV2X3Byb2JlYCwgYXMgd2VsbCBhcyBgdmZpb19hcF9tZGV2X2NmZ19hZGRgIGFuZCBgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmVgLCBjYW4gYmUgcmVhY2hlZCB2aWEgc3lzZnMgYXR0cmlidXRlcyBvZiB0aGUgbWRldiBkZXZpY2UuIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgaWYgYHZmaW9fYXBfbWRldl9jZmdfYWRkYCBjYW4gYmUgcmVhY2hlZCB2aWEgc3lzZnMgbmV4dCwganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZmlvX2FwX21kZXZfY2ZnX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNjkyPXN0YXRpYyB2b2lkIHZmaW9fYXBfZmlsdGVyX2FwaWRfYnlfcXR5cGUodW5zaWduZWQgbG9uZyAqYXBtLCB1bnNpZ25lZCBsb25nICphcW0pXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI3NTAtLyoqXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Mjc1MTogKiB2ZmlvX2FwX21kZXZfY2ZnX2FkZCAtIHN0b3JlIGJpdG1hcHMgc3BlY2lmeWluZyB0aGUgYWRhcHRlcnMsIGRvbWFpbnMgYW5kXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjc1Mi0gKlx0XHRcdCAgY29udHJvbCBkb21haW5zIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBob3N0JiMzOTtzXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI3NjItICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Mjc2MzpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX2FkZCh1bnNpZ25lZCBsb25nICphcG1fYWRkLCB1bnNpZ25lZCBsb25nICphcW1fYWRkLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI3NjQtXHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqYWRtX2FkZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjgwMj1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZChzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jb25maWdfaW5mbyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjgyMy1cdGlmIChkb19hZGQpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjgyNDpcdFx0dmZpb19hcF9tZGV2X2NmZ19hZGQoYXBtX2FkZCwgYXFtX2FkZCwgYWRtX2FkZCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjgyNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDc3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOgoKKipUcmFjaW5nIHRoZSBEZXZpY2UgQWRkaXRpb24gRmxvdyBpbiBWRklPLUFQKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2tpbmcgZG93biBob3cgYSBtZWRpYXRlZCBkZXZpY2UgKG1kZXYpIGdldHMgY29uZmlndXJlZCB3aXRoaW4gdGhlIFZGSU8tQVAgZnJhbWV3b3JrLiBJdCBsb29rcyBsaWtlIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyBjb25maWd1cmF0aW9uIHByb2Nlc3MgaXMgYHZmaW9fYXBfbWRldl9jZmdfYWRkYC4gTm93LCBJIHJlY2FsbCB0aGF0IGZ1bmN0aW9uIGlzIGRpcmVjdGx5IGNhbGxlZCBieSBgdmZpb19hcF9tZGV2X29uX2NmZ19hZGRgLCB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhpcywgaW4gdHVybiwgaXMgaW52b2tlZCBmcm9tIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYC4KClJpZ2h0LCB0aGF0IGNhbGxiYWNrLCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCwgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBBUCBidXMgaXRzZWxmLiBUaGF0IG1lYW5zIHdoZW5ldmVyIHRoZSBidXMgY29tcGxldGVzIGEgc2NhbiwgdGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQuIFRoaXMgaW1wbGllcyB0aGF0IHRoZSBjb21wbGV0ZSBmbG93IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSBidXMgZmluaXNoZXMgdGhlIHNjYW4uIFRoZXJlZm9yZSwgdG8gdW5kZXJzdGFuZCB0aGUgd2hvbGUgcHJvY2VzcywgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGNsb3NlciBsb29rIGF0IGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgIGFuZCBzZWUgd2hhdCBpdCBkb2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGJ1cyBzY2FuIHRyaWdnZXJzIHRoZSB3aG9sZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9NTg9c3RhdGljIHN0cnVjdCBhcF9kcml2ZXIgdmZpb19hcF9kcnYgPSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTYyLVx0Lm9uX2NvbmZpZ19jaGFuZ2VkID0gdmZpb19hcF9vbl9jZmdfY2hhbmdlZCxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo2MzpcdC5vbl9zY2FuX2NvbXBsZXRlID0gdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTY0LVx0LmlkcyA9IGFwX3F1ZXVlX2lkcyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9Mjc2Mz1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX2FkZCh1bnNpZ25lZCBsb25nICphcG1fYWRkLCB1bnNpZ25lZCBsb25nICphcW1fYWRkLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNzk2LSAqXHRcdFx0ICAgICBjYW4gYmUgaG90IHBsdWdnZWQgaW50byB0aGUgZ3Vlc3Qgd2hlbiB0aGUgQVAgYnVzXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Mjc5NzogKlx0XHRcdCAgICAgc2NhbiBjb21wbGV0ZXMgKHNlZSB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNzk4LSAqXHRcdFx0ICAgICBmdW5jdGlvbikuXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI4NDk9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yODc0LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4NzU6dm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjg3Ni1cdFx0XHQgICAgICBzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm9sZF9jb25maWdfaW5mbylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE2Mz12b2lkIHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE2NC1cdFx0XHQgICAgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpvbGRfY29uZmlnX2luZm8pO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoxNjU6dm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE2Ni1cdFx0XHQgICAgICBzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm9sZF9jb25maWdfaW5mbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTEwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IG1lbnRhbCBnZWFycyBhcmUgdHVybmluZy4uLgoKKipBbmFseXppbmcgVkZJTy1BUCBTY2FuIENvbXBsZXRpb24qKgoKQWxyaWdodCwgc28gYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgb25jZSB0aGUgQVAgYnVzIGhhcyBmaW5pc2hlZCBhIHNjYW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gSSwgd2l0aCB0aGUgaGVscCBvZiBzeXprYWxsZXIsIHNvbWVob3cgdHJpZ2dlciB0aGF0IEFQIGJ1cyBzY2FuPyBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRvIGluZmx1ZW5jZSBpdHMgZXhlY3V0aW9uIGlzIGNyaXRpY2FsLiBMZXQmIzM5O3Mgc2VlLi4uIEFoLCB5ZXMsIEkgcmVjYWxsIG5vdy4gVGhlcmUmIzM5O3MgdGhhdCBzeXNmcyBhdHRyaWJ1dGUsIHNvbWV0aGluZyBsaWtlIGAvc3lzL2J1cy9hcC9zY2Fuc2AuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBleGFjdCBwYXRoLCBvZiBjb3Vyc2UsIGJ1dCB0aGF0JiMzOTtzIGxpa2VseSB0aGUgbWVjaGFuaXNtIEkgbmVlZCB0byBtYW5pcHVsYXRlLiBOb3cgbGV0JiMzOTtzIGdvIGNoZWNrIHRoZSBmaWxlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FwX3NjYW5fYnVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0xMzU9TU9EVUxFX1BBUk1fREVTQyhtc2dwb29sX21pbl9pdGVtcywgXCYjMzQ7QVAgbWVzc2FnZSBwb29sIG1pbmltYWwgaXRlbXNcJiMzNDspO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTM5LSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxNDA6c3RhdGljIGJvb2wgYXBfc2Nhbl9idXModm9pZCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE0MTpzdGF0aWMgYm9vbCBhcF9zY2FuX2J1c19yZXN1bHQ7IC8qIHJlc3VsdCBvZiBsYXN0IGFwX3NjYW5fYnVzKCkgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTQyOnN0YXRpYyBERUZJTkVfTVVURVgoYXBfc2Nhbl9idXNfbXV0ZXgpOyAvKiBtdXRleCBhcF9zY2FuX2J1cygpIGludm9jYXRpb25zICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE0MzpzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICphcF9zY2FuX2J1c190YXNrOyAvKiB0aHJlYWQgaG9sZGluZyB0aGUgc2NhbiBtdXRleCAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxNDQ6c3RhdGljIGF0b21pYzY0X3QgYXBfc2Nhbl9idXNfY291bnQ7IC8qIGNvdW50ZXIgYXBfc2Nhbl9idXMoKSBpbnZvY2F0aW9ucyAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxNDU6c3RhdGljIGludCBhcF9zY2FuX2J1c190aW1lID0gQVBfQ09ORklHX1RJTUU7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE0NjpzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgYXBfc2Nhbl9idXNfdGltZXI7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE0NzpzdGF0aWMgdm9pZCBhcF9zY2FuX2J1c193cV9jYWxsYmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE0ODpzdGF0aWMgREVDTEFSRV9XT1JLKGFwX3NjYW5fYnVzX3dvcmssIGFwX3NjYW5fYnVzX3dxX2NhbGxiYWNrKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTQ5LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9ODAyPXN0YXRpYyB2b2lkIGFwX2NoZWNrX2JpbmRpbmdzX2NvbXBsZXRlKHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy04MDUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjgwNjpcdGlmIChhdG9taWM2NF9yZWFkKFx1MDAyNmFwX3NjYW5fYnVzX2NvdW50KSBcdTAwM2U9IDEpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtODA3LVx0XHRhcF9jYWxjX2JvdW5kX2FwcW5zKFx1MDAyNmFwcW5zLCBcdTAwMjZib3VuZCk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0xMTE5PWJvb2wgYXBfYnVzX2ZvcmNlX3Jlc2Nhbih2b2lkKVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xMTIwLXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTEyMTpcdHVuc2lnbmVkIGxvbmcgc2Nhbl9jb3VudGVyID0gYXRvbWljNjRfcmVhZChcdTAwMjZhcF9zY2FuX2J1c19jb3VudCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTExMjItXHRib29sIHJjID0gZmFsc2U7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xMTM2LVx0ICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjExMzc6XHRpZiAobXV0ZXhfaXNfbG9ja2VkKFx1MDAyNmFwX3NjYW5fYnVzX211dGV4KSkge1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxMTM4Olx0XHRpZiAoYXBfc2Nhbl9idXNfdGFzayA9PSBjdXJyZW50KVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xMTM5LVx0XHRcdGdvdG8gb3V0O1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTE0Mi1cdC8qIFRyeSB0byBhY3F1aXJlIHRoZSBBUCBzY2FuIGJ1cyBtdXRleCAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxMTQzOlx0aWYgKG11dGV4X3RyeWxvY2soXHUwMDI2YXBfc2Nhbl9idXNfbXV0ZXgpKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTExNDQtXHRcdC8qIG11dGV4IGFjcXVpcmVkLCBydW4gdGhlIEFQIGJ1cyBzY2FuICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjExNDU6XHRcdGFwX3NjYW5fYnVzX3Rhc2sgPSBjdXJyZW50O1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxMTQ2Olx0XHRhcF9zY2FuX2J1c19yZXN1bHQgPSBhcF9zY2FuX2J1cygpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxMTQ3Olx0XHRyYyA9IGFwX3NjYW5fYnVzX3Jlc3VsdDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTE0ODpcdFx0YXBfc2Nhbl9idXNfdGFzayA9IE5VTEw7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjExNDk6XHRcdG11dGV4X3VubG9jayhcdTAwMjZhcF9zY2FuX2J1c19tdXRleCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTExNTAtXHRcdGdvdG8gb3V0O1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTE1Ni1cdCAqIGZvciB0aGUgbG9jayB3aGljaCBtZWFucyB0aGUgb3RoZXIgdGFzayBoYXMgZmluaXNoZWQgYW5kXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjExNTc6XHQgKiBzdG9yZWQgdGhlIHJlc3VsdCBpbiBhcF9zY2FuX2J1c19yZXN1bHQuXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTExNTgtXHQgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTE1OTpcdGlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoXHUwMDI2YXBfc2Nhbl9idXNfbXV0ZXgpKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTExNjAtXHRcdC8qIHNvbWUgZXJyb3Igb2NjdXJyZWQsIGlnbm9yZSBhbmQgZ28gb3V0ICovXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xMTYyLVx0fVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxMTYzOlx0cmMgPSBhcF9zY2FuX2J1c19yZXN1bHQ7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjExNjQ6XHRtdXRleF91bmxvY2soXHUwMDI2YXBfc2Nhbl9idXNfbXV0ZXgpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xMTY1LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MTM5OD1zdGF0aWMgc3NpemVfdCBjb25maWdfdGltZV9zaG93KGNvbnN0IHN0cnVjdCBidXNfdHlwZSAqYnVzLCBjaGFyICpidWYpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTEzOTkte1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxNDAwOlx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslZFxcblwmIzM0OywgYXBfc2Nhbl9idXNfdGltZSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTE0MDEtfVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MTQwMz1zdGF0aWMgc3NpemVfdCBjb25maWdfdGltZV9zdG9yZShjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgKmJ1cyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTE0MDktXHRcdHJldHVybiAtRUlOVkFMO1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxNDEwOlx0YXBfc2Nhbl9idXNfdGltZSA9IHRpbWU7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE0MTE6XHRtb2RfdGltZXIoXHUwMDI2YXBfc2Nhbl9idXNfdGltZXIsIGppZmZpZXMgJiM0MzsgYXBfc2Nhbl9idXNfdGltZSAqIEhaKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTQxMi1cdHJldHVybiBjb3VudDtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jPTE3MDU9c3RhdGljIHNzaXplX3Qgc2NhbnNfc2hvdyhjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywgY2hhciAqYnVmKVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xNzA2LXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTcwNzpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWxsdVxcblwmIzM0OywgYXRvbWljNjRfcmVhZChcdTAwMjZhcF9zY2FuX2J1c19jb3VudCkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xNzA4LX1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jPTE3MjI9c3RhdGljIHNzaXplX3QgYmluZGluZ3Nfc2hvdyhjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywgY2hhciAqYnVmKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTcyNy1cdGFwX2NhbGNfYm91bmRfYXBxbnMoXHUwMDI2YXBxbnMsIFx1MDAyNm4pO1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxNzI4Olx0aWYgKGF0b21pYzY0X3JlYWQoXHUwMDI2YXBfc2Nhbl9idXNfY291bnQpIFx1MDAzZT0gMSBcdTAwMjZcdTAwMjYgbiA9PSBhcHFucylcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTcyOS1cdFx0cmMgPSBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXUvJXUgKGNvbXBsZXRlKVxcblwmIzM0OywgbiwgYXBxbnMpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MTk1OT1zdGF0aWMgaW5saW5lIHZvaWQgbm90aWZ5X3NjYW5fY29tcGxldGUodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTE5NjUtLypcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTk2NjogKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGFwX3NjYW5fYnVzKCkuXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTE5NjctICogUmVtb3ZlIGNhcmQgZGV2aWNlIGFuZCBhc3NvY2lhdGVkIHF1ZXVlIGRldmljZXMuXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0xOTY5PXN0YXRpYyBpbmxpbmUgdm9pZCBhcF9zY2FuX3JtX2NhcmRfZGV2X2FuZF9xdWV1ZV9kZXZzKHN0cnVjdCBhcF9jYXJkICphYylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTE5NzctLypcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTk3ODogKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGFwX3NjYW5fYnVzKCkuXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTE5NzktICogRG9lcyB0aGUgc2NhbiBidXMgam9iIGZvciBhbGwgdGhlIGRvbWFpbnMgd2l0aGluXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0xOTgyPXN0YXRpYyBpbmxpbmUgdm9pZCBhcF9zY2FuX2RvbWFpbnMoc3RydWN0IGFwX2NhcmQgKmFjKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjEzNS0vKlxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyMTM2OiAqIEhlbHBlciBmdW5jdGlvbiBmb3IgYXBfc2Nhbl9idXMoKS5cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjEzNy0gKiBEb2VzIHRoZSBzY2FuIGJ1cyBqb2IgZm9yIHRoZSBnaXZlbiBhZGFwdGVyIGlkLlxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MjM1MT1zdGF0aWMgYm9vbCBhcF9jb25maWdfaGFzX25ld19kb21zKHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yMzY2LS8qKlxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyMzY3OiAqIGFwX3NjYW5fYnVzKCk6IFNjYW4gdGhlIEFQIGJ1cyBmb3IgbmV3IGRldmljZXNcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjM2ODogKiBBbHdheXMgcnVuIHVuZGVyIG11dGV4IGFwX3NjYW5fYnVzX211dGV4IHByb3RlY3Rpb25cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjM2OS0gKiB3aGljaCBuZWVkcyB0byBnZXQgbG9ja2VkL3VubG9ja2VkIGJ5IHRoZSBjYWxsZXIhXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yMzcyLSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyMzczOnN0YXRpYyBib29sIGFwX3NjYW5fYnVzKHZvaWQpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTIzNzQte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQxNy1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQxODpcdGlmIChhdG9taWM2NF9pbmNfcmV0dXJuKFx1MDAyNmFwX3NjYW5fYnVzX2NvdW50KSA9PSAxKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0MTktXHRcdHByX2RlYnVnKFwmIzM0O2luaXQgc2NhbiBjb21wbGV0ZVxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDI0LVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDI1Olx0bW9kX3RpbWVyKFx1MDAyNmFwX3NjYW5fYnVzX3RpbWVyLCBqaWZmaWVzICYjNDM7IGFwX3NjYW5fYnVzX3RpbWUgKiBIWik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0MjYtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDMyLS8qXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0MzM6ICogQ2FsbGJhY2sgZm9yIHRoZSBhcF9zY2FuX2J1c190aW1lclxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDM0OiAqIFJ1bnMgcGVyaW9kaWNhbGx5LCB3b3JrcXVldWUgdGltZXIgKGFwX3NjYW5fYnVzX3RpbWUpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0MzUtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0MzY6c3RhdGljIHZvaWQgYXBfc2Nhbl9idXNfdGltZXJfY2FsbGJhY2soc3RydWN0IHRpbWVyX2xpc3QgKnVudXNlZClcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQzNy17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDQxLVx0ICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0NDI6XHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZhcF9zY2FuX2J1c193b3JrKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQ0My19XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDQ1LS8qXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0NDY6ICogQ2FsbGJhY2sgZm9yIHRoZSBhcF9zY2FuX2J1c193b3JrXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NDctICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0NDg6c3RhdGljIHZvaWQgYXBfc2Nhbl9idXNfd3FfY2FsbGJhY2soc3RydWN0IHdvcmtfc3RydWN0ICp1bnVzZWQpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NDkte1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDUwLVx0LypcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQ1MTpcdCAqIFRyeSB0byBpbnZva2UgYW4gYXBfc2Nhbl9idXMoKS4gSWYgdGhlIG11dGV4IGFjcXVpc2l0aW9uXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NTItXHQgKiBmYWlscyB0aGVyZSBpcyBjdXJyZW50bHkgYW5vdGhlciB0YXNrIGFscmVhZHkgcnVubmluZyB0aGVcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NTUtXHQgKiB0aGUgQVAgc2NhbiBidXMgdGltZXIgaXMgcmUtYXJtZWQgd2hpY2ggdHJpZ2dlcnMgdGhlbiB0aGVcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQ1NjpcdCAqIGFwX3NjYW5fYnVzX3RpbWVyX2NhbGxiYWNrIHdoaWNoIGVucXVldWVzIGEgd29yayBpbnRvIHRoZVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDU3LVx0ICogc3lzdGVtX2xvbmdfd3Egd2hpY2ggaW52b2tlcyB0aGlzIGZ1bmN0aW9uIGhlcmUgYWdhaW4uXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NTgtXHQgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQ1OTpcdGlmIChtdXRleF90cnlsb2NrKFx1MDAyNmFwX3NjYW5fYnVzX211dGV4KSkge1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDYwOlx0XHRhcF9zY2FuX2J1c190YXNrID0gY3VycmVudDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQ2MTpcdFx0YXBfc2Nhbl9idXNfcmVzdWx0ID0gYXBfc2Nhbl9idXMoKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQ2MjpcdFx0YXBfc2Nhbl9idXNfdGFzayA9IE5VTEw7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0NjM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZhcF9zY2FuX2J1c19tdXRleCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NjQtXHR9XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0yNDY3PXN0YXRpYyBpbmxpbmUgdm9pZCBfX2V4aXQgYXBfYXN5bmNfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQ3MS1cdGNoc2Nfbm90aWZpZXJfdW5yZWdpc3RlcihcdTAwMjZhcF9idXNfbmIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDcyOlx0Y2FuY2VsX3dvcmsoXHUwMDI2YXBfc2Nhbl9idXNfd29yayk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NzMtXHRocnRpbWVyX2NhbmNlbChcdTAwMjZhcF9wb2xsX3RpbWVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQ3NDpcdHRpbWVyX2RlbGV0ZShcdTAwMjZhcF9zY2FuX2J1c190aW1lcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NzUtfVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MjQ3Nz1zdGF0aWMgaW5saW5lIGludCBfX2luaXQgYXBfYXN5bmNfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQ4MS1cdC8qIFNldHVwIHRoZSBBUCBidXMgcmVzY2FuIHRpbWVyLiAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDgyOlx0dGltZXJfc2V0dXAoXHUwMDI2YXBfc2Nhbl9idXNfdGltZXIsIGFwX3NjYW5fYnVzX3RpbWVyX2NhbGxiYWNrLCAwKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQ4My1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0OTEtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0OTI6XHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZhcF9zY2FuX2J1c193b3JrKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQ5My1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI1MTAtb3V0OlxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNTExOlx0Y2FuY2VsX3dvcmsoXHUwMDI2YXBfc2Nhbl9idXNfd29yayk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI1MTItXHRocnRpbWVyX2NhbmNlbChcdTAwMjZhcF9wb2xsX3RpbWVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjUxMzpcdHRpbWVyX2RlbGV0ZShcdTAwMjZhcF9zY2FuX2J1c190aW1lcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI1MTQtXHRyZXR1cm4gcmM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDA3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBGdXp6YWJsZSBDb2RlKioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiBob3cgdGhpcyBtb2RpZmllZCBjb2RlIGluIGB2ZmlvX2FwYCBpcyBnb2luZyB0byBnZXQgZXhlY3V0ZWQsIGFuZCBob3cgd2UgY2FuIGVmZmVjdGl2ZWx5IHRhcmdldCBpdCB3aXRoIGZ1enppbmcuIGBhcF9zY2FuX2J1c2AgaXMgdGhlIGNvcmUgbWVjaGFuaXNtIGhlcmUuIEl0JiMzOTtzIHRyaWdnZXJlZCBwZXJpb2RpY2FsbHkgYnkgYSB0aW1lciAoYGFwX3NjYW5fYnVzX3RpbWVyYCkgYW5kLCBpbXBvcnRhbnRseSwgY2FuIGJlIGZvcmNlZCB2aWEgYGFwX2J1c19mb3JjZV9yZXNjYW4oKWAuIFdoZW4gdGhhdCBzY2FuIGNvbXBsZXRlcywgYG5vdGlmeV9zY2FuX2NvbXBsZXRlKClgIGdldHMgY2FsbGVkLCB3aGljaCB0aGVuIGludm9rZXMgdGhlIGBvbl9zY2FuX2NvbXBsZXRlYCBjYWxsYmFjayBmb3IgZXZlcnkgcmVnaXN0ZXJlZCBBUCBkcml2ZXIuIFRoaXMgbWVhbnMgb3VyIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHBlcmlvZGljYWxseSDigJMgcGVyZmVjdCBmb3IgZnV6emluZyEKCkluc2lkZSBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCwgdGhlIGNvZGUgaXRlcmF0ZXMgdGhyb3VnaCBgbWF0cml4X2Rldi0mZ3Q7bWRldl9saXN0YC4gVGhlIGtleSByZWFsaXphdGlvbiBpcyB0aGF0IGlmIHN5emthbGxlciBjcmVhdGVzIGFuIG1kZXYgZGV2aWNlIGZvciBgdmZpb19hcGAsIGl0JiMzOTtsbCBiZSBwcmVzZW50IGluIHRoaXMgbGlzdC4gVGhlIGltcGxpY2F0aW9ucyBhcmUgc2lnbmlmaWNhbnQ6IGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgIHdpbGwgcHJvY2VzcyB0aGF0IG1kZXYgZGV2aWNlIGFuZCBzdWJzZXF1ZW50bHkgY2FsbCBgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZ2AuIFRoaXMgZGlyZWN0IGNvbm5lY3Rpb24gbWVhbnMgdGhlIG1vZGlmaWVkIGNvZGUgaW4gYm90aCB0aG9zZSBmdW5jdGlvbnMgaXMgZ3VhcmFudGVlZCB0byBiZSBleGVjdXRlZCBwZXJpb2RpY2FsbHkgYXMgbG9uZyBhcyBhbiBtZGV2IGRldmljZSBpcyBhY3RpdmUhCgpBbmQgY3JlYXRpbmcgYW4gbWRldiBkZXZpY2U/IERlYWQgc2ltcGxlLiBJdCYjMzk7cyBqdXN0IGEgbWF0dGVyIG9mIHdyaXRpbmcgdG8gdGhlIHN5c2ZzIGZpbGUgYC9zeXMvY2xhc3MvbWRldl9idXMvLi4uL21kZXZfc3VwcG9ydGVkX3R5cGVzL3ZmaW9fYXAtcGFzc3Rocm91Z2gvY3JlYXRlYC4gVGhlIHJlYWwgYmVhdXR5IGlzIHRoYXQgc3l6a2FsbGVyIGFscmVhZHkgdW5kZXJzdGFuZHMgaG93IHRvIGRvIHRoaXMuIEl0IGhhcyBkZXNjcmlwdGlvbnMgZm9yIG1kZXYgZGV2aWNlcywgc28gY3JlYXRpbmcgYW5kIHJlbW92aW5nIHRoZW0gaXMgdHJpdmlhbCBmb3IgdGhlIGZ1enplci4gU28sIHRoaXMgY29kZSBwYXRoIGlzIG5vdCBvbmx5IHJlYWNoYWJsZSBidXQgKmhpZ2hseSogcmVhY2hhYmxlIGFuZCBlYXNpbHkgZnV6emFibGUhCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB3ZSB1bmRlcnN0YW5kIHRoZSByZWFjaGFiaWxpdHkgb2YgdGhlIG90aGVycy4gVGhlIGNvZGUgaW4gYHZmaW9fYXBfbWRldl9jZmdfYWRkYCBhbmQgYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCBhcmUgYWxzbyB3b3J0aCBmdXp6aW5nLiBUaGV5JiMzOTtyZSBjYWxsZWQgZnJvbSBgdmZpb19hcF9tZGV2X29uX2NmZ19hZGRgIGFuZCBgdmZpb19hcF9tZGV2X29uX2NmZ19yZW1vdmVgLCByZXNwZWN0aXZlbHkuIFRoZXNlLCBpbiB0dXJuLCBhcmUgY2FsbGVkIGZyb20gYHZmaW9fYXBfb25fY2ZnX2NoYW5nZWRgLiBIb3dldmVyLCBgdmZpb19hcF9vbl9jZmdfY2hhbmdlZGAgaXMgdHJpZ2dlcmVkIGJ5IEFQIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4gV2hpbGUgcG9zc2libGUgdGhhdCBzeXprYWxsZXIgY291bGQgdHJpZ2dlciBBUCBjb25maWcgY2hhbmdlcyBpdCBzZWVtcyBsaWtlIHRoYXQgd291bGQgYmUgZGlmZmljdWx0IHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUuIFRoZSBwZXJpb2RpYyBzY2FuIHdpdGggbWRldiBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gYXJlIG91ciBwcmltZSB0YXJnZXRzLgoKRmluYWxseSwgdGhlcmUmIzM5O3MgYHN0YXR1c19zaG93YC4gSXQmIzM5O3MgYSBzeXNmcyBhdHRyaWJ1dGUgb24gdGhlIEFQIGRldmljZS4gSWYgdGhlcmUgYXJlIG5vIEFQIGRldmljZXMsIHdlIG1pZ2h0IG5vdCBnZXQgdG8gaXQuIEhvd2V2ZXIsIG5vdyBJIHJlbWVtYmVyIHRoYXQgYHN0YXR1c19zaG93YCBpcyBhbiBhdHRyaWJ1dGUgb2YgdGhlIG1kZXYgZGV2aWNlIGl0c2VsZi4gVGhhdCYjMzk7cyBnb29kLCBub3csIGxldCYjMzk7cyBqdXN0IGNoZWNrIHdoZXJlIGl0JiMzOTtzIHJlZ2lzdGVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXR1c19zaG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIyOTQ9c3RhdGljIHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjMxMC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMzExOnN0YXRpYyBzc2l6ZV90IHN0YXR1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzEyLVx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM3MAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipBbmFseXppbmcgdGhlIGBzdGF0dXNfc2hvd2AgQ29udGV4dCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgc3RhdHVzX3Nob3dgIGZ1bmN0aW9uIG9yIG1ldGhvZCBpcyBhY3R1YWxseSBkb2luZy4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHRoZSBuYW1lIHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgcHJlc2VudGluZyBzb21lIGtpbmQgb2Ygc3lzdGVtIG9yIHByb2Nlc3Mgc3RhdHVzIGluZm9ybWF0aW9uLiBCdXQsIEkgY2FuJiMzOTt0IGp1c3QganVtcCB0byBjb25jbHVzaW9ucywgSSBuZWVkIHRoZSBjb250ZXh0LiBXaGF0JiMzOTtzIHRoZSBzdXJyb3VuZGluZyBjb2RlPyBBcmUgdGhlcmUgYW55IGNvbW1lbnRzPyBXaGF0IG90aGVyIGZ1bmN0aW9ucyBvciBjbGFzc2VzIGRvZXMgaXQgaW50ZXJhY3Qgd2l0aD8gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHN0YWNrIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBhcHBsaWNhdGlvbi4gSXMgaXQgZGlzcGxheWluZyBkYXRhIGZyb20gYSBkYXRhYmFzZT8gQSBjb25maWd1cmF0aW9uIGZpbGU/IFN5c3RlbSBjYWxscz8gT3IgbWF5YmUgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCBzb21lIHNvcnQgb2YgbW9uaXRvcmluZyBzZXJ2aWNlPyBLbm93aW5nIHRoZSBkYXRhIHNvdXJjZSBpcyB0aGUgZmlyc3Qga2V5IHN0ZXAuIFRoZW4sIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBvdXRwdXQuIElzIGl0IGp1c3QgZm9ybWF0dGVkIHRleHQ/IERvZXMgaXQgZ2VuZXJhdGUgYSBHVUkgZWxlbWVudD8gRG9lcyBpdCB3cml0ZSB0byBhIGxvZyBmaWxlPyBPbmNlIEkgdW5kZXJzdGFuZCB0aGUgaW5wdXQgYW5kIG91dHB1dCwgSSBjYW4gZGV0ZXJtaW5lIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZGVidWcsIG1vZGlmeSwgb3IgZW5oYW5jZSB0aGUgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIGFsbCBhYm91dCBjb250ZXh0IGFuZCBob3cgdGhlIGBzdGF0dXNfc2hvd2AgaXMgdXNlZCBhbmQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzExLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzMTE6XHRzdGF0aWMgc3NpemVfdCBzdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4yMzEyOlx0XHRcdFx0ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4yMzEzOlx0XHRcdFx0ICAgY2hhciAqYnVmKVxuMjMxNDpcdHtcbjIzMTU6XHRcdHNzaXplX3QgbmNoYXJzID0gMDtcbjIzMTY6XHRcdHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxO1xuMjMxNzpcdFx0dW5zaWduZWQgbG9uZyBhcGlkLCBhcHFpO1xuMjMxODpcdFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcbjIzMTk6XHRcdHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2ID0gdG9fYXBfZGV2KGRldik7XG4yMzIwOlx0XG4yMzIxOlx0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2spO1xuMjMyMjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuMjMyMzpcdFx0cSA9IGRldl9nZXRfZHJ2ZGF0YShcdTAwMjZhcGRldi1cdTAwM2VkZXZpY2UpO1xuMjMyNDpcdFx0bWF0cml4X21kZXYgPSB2ZmlvX2FwX21kZXZfZm9yX3F1ZXVlKHEpO1xuMjMyNTpcdFxuMjMyNjpcdFx0LyogSWYgdGhlIHF1ZXVlIGlzIGFzc2lnbmVkIHRvIHRoZSBtYXRyaXggbWVkaWF0ZWQgZGV2aWNlLCB0aGVuXG4yMzI3Olx0XHQgKiBkZXRlcm1pbmUgd2hldGhlciBpdCBpcyBwYXNzZWQgdGhyb3VnaCB0byBhIGd1ZXN0OyBvdGhlcndpc2UsXG4yMzI4Olx0XHQgKiBpbmRpY2F0ZSB0aGF0IGl0IGlzIHVuYXNzaWduZWQuXG4yMzI5Olx0XHQgKi9cbjIzMzA6XHRcdGlmIChtYXRyaXhfbWRldikge1xuMjMzMTpcdFx0XHRhcGlkID0gQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKTtcbjIzMzI6XHRcdFx0YXBxaSA9IEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pO1xuMjMzMzpcdFx0XHQvKlxuMjMzNDpcdFx0XHQgKiBJZiB0aGUgcXVldWUgaXMgcGFzc2VkIHRocm91Z2ggdG8gdGhlIGd1ZXN0LCB0aGVuIGluZGljYXRlXG4yMzM1Olx0XHRcdCAqIHRoYXQgaXQgaXMgaW4gdXNlOyBvdGhlcndpc2UsIGluZGljYXRlIHRoYXQgaXQgaXNcbjIzMzY6XHRcdFx0ICogbWVyZWx5IGFzc2lnbmVkIHRvIGEgbWF0cml4IG1lZGlhdGVkIGRldmljZS5cbjIzMzc6XHRcdFx0ICovXG4yMzM4Olx0XHRcdGlmIChtYXRyaXhfbWRldi1cdTAwM2Vrdm0gXHUwMDI2XHUwMDI2XG4yMzM5Olx0XHRcdCAgICB0ZXN0X2JpdF9pbnYoYXBpZCwgbWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXBtKSBcdTAwMjZcdTAwMjZcbjIzNDA6XHRcdFx0ICAgIHRlc3RfYml0X2ludihhcHFpLCBtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hcW0pKVxuMjM0MTpcdFx0XHRcdG5jaGFycyA9IHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslc1xcblwmIzM0OywgQVBfUVVFVUVfSU5fVVNFKTtcbjIzNDI6XHRcdFx0ZWxzZVxuMjM0MzpcdFx0XHRcdG5jaGFycyA9IHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslc1xcblwmIzM0OywgQVBfUVVFVUVfQVNTSUdORUQpO1xuMjM0NDpcdFx0fSBlbHNlIHtcbjIzNDU6XHRcdFx0bmNoYXJzID0gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVzXFxuXCYjMzQ7LCBBUF9RVUVVRV9VTkFTU0lHTkVEKTtcbjIzNDY6XHRcdH1cbjIzNDc6XHRcbjIzNDg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuMjM0OTpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2spO1xuMjM1MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjM5NAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDIyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQVAgUXVldWUgRGV2aWNlIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gdHJhY2UgdGhlIGZsb3cuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBzdGF0dXNfc2hvd2AgaXMgZGVmaW5pdGVseSBhc3NvY2lhdGVkIHdpdGggdGhlIEFQIHF1ZXVlIGRldmljZSwgYGFwZGV2LSZndDtkZXZpY2VgLiBNYWtlcyBzZW5zZS4gSWYgdGhlcmUgKmlzbiYjMzk7dCogYW4gQVAgcXVldWUgZGV2aWNlLCB0aGF0IHBhdGggaXMgY2xlYXJseSBkZWFkLiBCdXQgdGhlbiB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJIHNlZSB0aGF0IGB2ZmlvX2FwX21kZXZfcHJvYmVgIGlzIHJlYWNoYWJsZSByZWdhcmRsZXNzLiBUaGF0IG1ha2VzIHNlbnNlLCBJIHN1cHBvc2UsIGJlY2F1c2UgaXQgbWlnaHQgYmUgdGhlIHN0YXJ0aW5nIHBvaW50LgoKVGhlbiBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCBpcyBhbHNvIHJlYWNoYWJsZS4gT2theSwgdGhhdCYjMzk7cyBhbm90aGVyIGVudHJ5IHBvaW50LiBBbmQgYHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmdgLCB0aGF0JiMzOTtzIGFjY2Vzc2libGUgdG9vLCB3aGljaCBpbXBsaWVzIGFuIGFsdGVybmF0aXZlIHBhdGh3YXkuCgpOb3csIGB2ZmlvX2FwX21kZXZfY2ZnX2FkZGAgZ2V0cyBjYWxsZWQgaWYgYW5kIG9ubHkgaWYgYHZmaW9fYXBfbWRldl9vbl9jZmdfYWRkYCBpcyBpbnZva2VkLiBXYWl0LCBJJiMzOTttIHRyYWNpbmcgYmFja3dhcmQuLi4gYHZmaW9fYXBfbWRldl9jZmdfYWRkYCBpcyAqYWN0dWFsbHkqIGNhbGxlZCBmcm9tIGB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZGAuIEFuZCBgdmZpb19hcF9tZGV2X29uX2NmZ19hZGRgIGlzIHRyaWdnZXJlZCBieSBgdmZpb19hcF9vbl9jZmdfY2hhbmdlZGAuIE9rYXksIHRoYXQmIzM5O3Mgb25lIGxvZ2ljYWwgY2hhaW4uCgpIb2xkIG9uLCBJIHNlZSBzb21ldGhpbmcgZWxzZS4gSSYjMzk7bSByZW1pbmRlZCB0aGF0IGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgIGFsc28gbWFrZXMgYSBjYWxsIHRvIGB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnYCwgYW5kIHdhc24mIzM5O3QgdGhhdCBtb2RpZmllZCByZWNlbnRseT8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGludGVyYWN0aW9uLiBTbywgYmVmb3JlIEkgY29udGludWUsIEkgdGhpbmsgSSYjMzk7bGwgc3RhcnQgd2l0aCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiB0aGlzIGRlZXAgZGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4NzU6XHR2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbyxcbjI4NzY6XHRcdFx0XHQgICAgICBzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm9sZF9jb25maWdfaW5mbylcbjI4Nzc6XHR7XG4yODc4Olx0XHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuMjg3OTpcdFxuMjg4MDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbjI4ODE6XHRcbjI4ODI6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4yODgzOlx0XHRcdC8qXG4yODg0Olx0XHRcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiBtYXRyaXhfbWRldixcbjI4ODU6XHRcdFx0ICogYW5kIGt2bS1cdTAwM2Vsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIG1kZXZzX2xvY2sgdG8gc2F0aXNmeSB0aGUgbG9ja1xuMjg4NjpcdFx0XHQgKiBvcmRlcmluZyByZXF1aXJlbWVudCBhbmQgcHJldmVudCBhIGxvY2tkZXAgc3BsYXQuXG4yODg3Olx0XHRcdCAqL1xuMjg4ODpcdFx0XHRpZiAobWF0cml4X21kZXYtXHUwMDNla3ZtKVxuMjg4OTpcdFx0XHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuMjg5MDpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4yODkxOlx0XG4yODkyOlx0XHRcdGlmIChiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXHUwMDNlYXBtX2FkZCwgQVBfREVWSUNFUykgXHUwMDI2XHUwMDI2XG4yODkzOlx0XHRcdCAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXHUwMDNlYXFtX2FkZCwgQVBfRE9NQUlOUykgXHUwMDI2XHUwMDI2XG4yODk0Olx0XHRcdCAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXHUwMDNlYWRtX2FkZCwgQVBfRE9NQUlOUykpXG4yODk1Olx0XHRcdFx0Z290byBkb191bmxvY2s7XG4yODk2Olx0XG4yODk3Olx0XHRcdHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcobWF0cml4X21kZXYpO1xuMjg5ODpcdFx0XHRiaXRtYXBfY2xlYXIobWF0cml4X21kZXYtXHUwMDNlYXBtX2FkZCwgMCwgQVBfREVWSUNFUyk7XG4yODk5Olx0XHRcdGJpdG1hcF9jbGVhcihtYXRyaXhfbWRldi1cdTAwM2VhcW1fYWRkLCAwLCBBUF9ET01BSU5TKTtcbjI5MDA6XHRcdFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVx1MDAzZWFkbV9hZGQsIDAsIEFQX0RPTUFJTlMpO1xuMjkwMTpcdFxuMjkwMjpcdGRvX3VubG9jazpcbjI5MDM6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4yOTA0Olx0XHRcdGlmIChtYXRyaXhfbWRldi1cdTAwM2Vrdm0pXG4yOTA1Olx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbjI5MDY6XHRcdH1cbjI5MDc6XHRcbjI5MDg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbjI5MDk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3Njk5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVkZJTy1BUCBMb2NrIE9yZGVyaW5nIEZpeCBDb25maXJtYXRpb24gYW5kIENvbmZpZ3VyYXRpb24gSW5xdWlyeSoqCgpPa2F5LCBzbyBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCBpcyBpbmRlZWQgcmVhY2hhYmxlLCBhbmQgdGhlIHJlY2VudCBtb2RpZmljYXRpb25zIHRvIHByb3Blcmx5IGltcGxlbWVudCBsb2NraW5nIGluIHRoaXMgYXJlYSBhcmUgY29uZmlybWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcmVhbCBmaXggYWRkcmVzc2luZyB0aGUgbG9jayBvcmRlcmluZyBpc3N1ZXMgYW5kIHRoZSBgbG9ja2RlcGAgc3BsYXRzIHdlIHdlcmUgc2VlaW5nLiBUaGUgZHJpdmVyIGluIHF1ZXN0aW9uIGlzLCBvZiBjb3Vyc2UsIHRoZSBgVkZJT19BUGAgZHJpdmVyLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIGFib3V0IGNvbmZpZ3VyYXRpb24uIFdoYXQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgY2hhbmdlIHRvIGJlIGVmZmVjdGl2ZSwgb3IgdG8gZXZlbiBiZSBjb21waWxlZD8gTGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBgZHJpdmVycy9zMzkwL2NyeXB0by9LY29uZmlnYCBmaWxlIGFuZCBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGVwZW5kZW5jaWVzIHRoaXMgbmV3IGxvY2sgYmVoYXZpb3IgaGFzIG9uIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJT19BUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc5OTUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqVHJhY2luZyB0aGUgQ29uZmlndXJhdGlvbiBvZiBgdmZpb19hcGAqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGB2ZmlvX2FwYCBjb21wb25lbnQgaXMgYWN0dWFsbHkgY29uZmlndXJlZC4gVGhhdCYjMzk7cyB0aGUgZmlyc3Qgc3RlcC4gSXMgaXQgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBjb25maWd1cmF0aW9uIChgLmNvbmZpZ2ApPyBQZXJoYXBzIGluIGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUgZmlsZSwgb3IgbWF5YmUgaXQmIzM5O3MgY29udHJvbGxlZCB2aWEgc29tZSBzb3J0IG9mIG1vZHVsZSBwYXJhbWV0ZXI/IEkmIzM5O2xsIG5lZWQgdG8gc3RhcnQgYnkgc2VhcmNoaW5nIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIGxvb2tpbmcgZm9yIHJlZmVyZW5jZXMgdG8gYHZmaW9fYXBgLiBJJiMzOTtsbCB0cnkgdXNpbmcgYGdyZXBgIG9yIGBmaW5kYCBpbml0aWFsbHksIGxvb2tpbmcgZm9yIGJvdGggdGhlIG1vZHVsZSBuYW1lIGRpcmVjdGx5IGFuZCBhbnkgYXNzb2NpYXRlZCBzeW1ib2xzIG9yIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiBUaGVuIEkmIzM5O2xsIGNoZWNrIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uIG9yIHRoZSBgS2NvbmZpZ2AgZmlsZXMgZm9yIHRoYXQgc3Vic3lzdGVtIHRvIHVuZGVyc3RhbmQgdGhlIHZhcmlvdXMgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBNeSBmb2N1cyBoZXJlIHdpbGwgYmUgb24gdW5kZXJzdGFuZGluZyB0aGUgdmFyaW91cyB3YXlzIHRoYXQgaXQgaXMgdHVybmVkIG9uIGFuZCBvZmYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vTWFrZWZpbGU9MzQ9b2JqLSQoQ09ORklHX1BLRVlfVVYpICYjNDM7PSBwa2V5LXV2Lm9cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL01ha2VmaWxlLTM2LSMgYWRqdW5jdCBwcm9jZXNzb3IgbWF0cml4XG5kcml2ZXJzL3MzOTAvY3J5cHRvL01ha2VmaWxlOjM3OnZmaW9fYXAtb2JqcyA6PSB2ZmlvX2FwX2Rydi5vIHZmaW9fYXBfb3BzLm9cbmRyaXZlcnMvczM5MC9jcnlwdG8vTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX1ZGSU9fQVApICYjNDM7PSB2ZmlvX2FwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgzNjUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBWRklPLUFQIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYENPTkZJR19WRklPX0FQYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyBkcmlsbCBkb3duIGFuZCBzZWUgd2hlcmUgdGhpcyBgVkZJT19BUGAgaXMgZGVmaW5lZCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuIEdpdmVuIHRoYXQgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBoYXJkd2FyZS1hc3Npc3RlZCBjcnlwdG9ncmFwaHkgb3IgYWNjZWxlcmF0aW9uLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgUy8zOTAgYXJjaGl0ZWN0dXJlJiMzOTtzIGNyeXB0by1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGxvb2sgYXQgYGRyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBmaW5kIHRoZSBgVkZJT19BUGAgb3B0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2UgdG8gZ28gb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRklPX0FQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9LY29uZmlnPTgyMz1jb25maWcgVkZJT19DQ1dcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy04MzMtXG5hcmNoL3MzOTAvS2NvbmZpZzo4MzQ6Y29uZmlnIFZGSU9fQVBcbmFyY2gvczM5MC9LY29uZmlnLTgzNS1cdGRlZl90cmlzdGF0ZSBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjkxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipEaXZpbmcgaW50byB0aGUgczM5MCBBcmNoaXRlY3R1cmUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgYGFyY2gvczM5MC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgODM0LiBJJiMzOTttIGdvaW5nIHRvIGFzc3VtZSB0aGlzIHNlY3Rpb24gbGlrZWx5IHJlbGF0ZXMgdG8gc29tZSBmZWF0dXJlIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdpdGhpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIEdpdmVuIHRoZSBjb250ZXh0IG9mIGEgS2NvbmZpZyBmaWxlLCBpdCYjMzk7cyBwcm9iYWJseSBkZWZpbmluZyBhIGNvbmRpdGlvbmFsIGJ1aWxkIG9wdGlvbiwgYSBoYXJkd2FyZSBmZWF0dXJlIHNldHRpbmcsIG9yIG1heWJlIGV2ZW4gYSBkcml2ZXIgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHRoZSBJQk0gbWFpbmZyYW1lIGFyY2hpdGVjdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaXRlbS4gSXQgY291bGQgYmUgc29tZXRoaW5nIHN0cmFpZ2h0Zm9yd2FyZCwgb3IgaXQgbWlnaHQgcmVxdWlyZSBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMsIGZpcm13YXJlIGludGVyYWN0aW9ucywgb3Igc3BlY2lmaWMga2VybmVsIHN1YnN5c3RlbXMgd2l0aGluIHRoZSBzMzkwIGVudmlyb25tZW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgzMDpcdFxuIDgzMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA4MzI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZmaW9fY2N3LlxuIDgzMzpcdFxuIDgzNDpcdGNvbmZpZyBWRklPX0FQXG4gODM1Olx0XHRkZWZfdHJpc3RhdGUgblxuIDgzNjpcdFx0cHJvbXB0IFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgQVAgZGV2aWNlc1wmIzM0O1xuIDgzNzpcdFx0ZGVwZW5kcyBvbiBLVk1cbiA4Mzg6XHRcdGRlcGVuZHMgb24gVkZJT1xuIDgzOTpcdFx0ZGVwZW5kcyBvbiBBUFxuIDg0MDpcdFx0c2VsZWN0IFZGSU9fTURFVlxuIDg0MTpcdFx0aGVscFxuIDg0MjpcdFx0ICBUaGlzIGRyaXZlciBncmFudHMgYWNjZXNzIHRvIEFkanVuY3QgUHJvY2Vzc29yIChBUCkgZGV2aWNlc1xuIDg0MzpcdFx0ICB2aWEgdGhlIFZGSU8gbWVkaWF0ZWQgZGV2aWNlIGludGVyZmFjZS5cbiA4NDQ6XHRcbiA4NDU6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDg0NjpcdFx0ICB3aWxsIGJlIGNhbGxlZCB2ZmlvX2FwLlxuIDg0NzpcdFxuIDg0ODpcdGVuZG1lbnVcbiA4NDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyMDkKCQkJCQkJCW91dHB1dDogMTYKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgY29udGV4dCBpcyBteSBhcmVhIG9mIGV4cGVydGlzZToKCioqRGlzc2VjdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIFZGSU9fQVAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gZ2F0aGVyaW5nLCB0aGlzIGBWRklPX0FQYCB0aGluZyBpcyBidWlsdCBvbiB0b3Agb2YgYEtWTWAsIGBWRklPYCwgYW5kIGBBUGAuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgbGF5ZXJpbmcgYXBwcm9hY2gsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB3aGF0IGVhY2ggY29tcG9uZW50IGJyaW5ncyB0byB0aGUgdGFibGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgQVBgIGlzLiBUaGUgdGVybSBpdHNlbGYgaXMgcmluZ2luZyBhIGJlbGwgLSBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgJiMzNDtBUCYjMzQ7IGlzIGxpa2VseSByZWxhdGVkIHRvIGBaQ1JZUFRgLCBidXQgSSBzaG91bGQgdmVyaWZ5IHRoaXMgc28gSSBkb24mIzM5O3QgY29uZnVzZSBzaW1pbGFyIGNvbXBvbmVudHMsIGFuZCBtaXN1bmRlcnN0YW5kIGhvdyB0aGlzIGVudGlyZSBzeXN0ZW0gd29ya3MuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGBBUGAgY29tcG9uZW50LCBqdXN0IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjayBiZWZvcmUgZGl2aW5nIGludG8gdGhlIG1vcmUgY29tcGxleCBpbnRlcmFjdGlvbnMuIEkgbmVlZCB0byBiZSBleGFjdCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdD0yODc9dG8gaW5pdHJkIGltYWdlLCB1c2VyIGNhbiBub3RpY2UgaXQgYmVmb3JlIGJvb3QuXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdC0yODktXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0OjI5MDpCb290Y29uZmlnIEFQSXNcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3QtMjkxLT09PT09PT09PT09PT09PVxuLS1cbmFyY2gvbTY4ay9LY29uZmlnLm1hY2hpbmU9Mjk9Y29uZmlnIE1BQ1xuLS1cbmFyY2gvbTY4ay9LY29uZmlnLm1hY2hpbmUtNDAtXG5hcmNoL202OGsvS2NvbmZpZy5tYWNoaW5lOjQxOmNvbmZpZyBBUE9MTE9cbmFyY2gvbTY4ay9LY29uZmlnLm1hY2hpbmUtNDItXHRib29sIFwmIzM0O0Fwb2xsbyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZz0yOTE9Y29uZmlnIDQ3NkZQRVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWctMjk0LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZzoyOTU6Y29uZmlnIEFQTTgyMXh4XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnLTI5Ni1cdGJvb2xcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz03ODU9Y29uZmlnIEVBRE1fU0NIXG4tLVxuYXJjaC9zMzkwL0tjb25maWctNzk1LVxuYXJjaC9zMzkwL0tjb25maWc6Nzk2OmNvbmZpZyBBUFxuYXJjaC9zMzkwL0tjb25maWctNzk3LVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy04MDgtXG5hcmNoL3MzOTAvS2NvbmZpZzo4MDk6Y29uZmlnIEFQX0RFQlVHXG5hcmNoL3MzOTAvS2NvbmZpZy04MTAtXHRkZWZfYm9vbCBuXG4tLVxuYXJjaC9zMzkwL0tjb25maWc9ODg1PWNvbmZpZyBDTU1fSVVDVlxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTg5Mi1cbmFyY2gvczM5MC9LY29uZmlnOjg5Mzpjb25maWcgQVBQTERBVEFfQkFTRVxuYXJjaC9zMzkwL0tjb25maWctODk0LVx0ZGVmX2Jvb2wgblxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTkwOC1cbmFyY2gvczM5MC9LY29uZmlnOjkwOTpjb25maWcgQVBQTERBVEFfTUVNXG5hcmNoL3MzOTAvS2NvbmZpZy05MTAtXHRkZWZfdHJpc3RhdGUgbVxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTkyNS1cbmFyY2gvczM5MC9LY29uZmlnOjkyNjpjb25maWcgQVBQTERBVEFfT1NcbmFyY2gvczM5MC9LY29uZmlnLTkyNy1cdGRlZl90cmlzdGF0ZSBtXG4tLVxuYXJjaC9zMzkwL0tjb25maWctOTQwLVxuYXJjaC9zMzkwL0tjb25maWc6OTQxOmNvbmZpZyBBUFBMREFUQV9ORVRfU1VNXG5hcmNoL3MzOTAvS2NvbmZpZy05NDItXHRkZWZfdHJpc3RhdGUgbVxuLS1cbmFyY2gveDg2L0tjb25maWc9Mjc0MT1jb25maWcgWDg2X0FQTV9CT09UXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yNzQ0LVxuYXJjaC94ODYvS2NvbmZpZzoyNzQ1Om1lbnVjb25maWcgQVBNXG5hcmNoL3g4Ni9LY29uZmlnLTI3NDYtXHR0cmlzdGF0ZSBcJiMzNDtBUE0gKEFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQpIEJJT1Mgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWc9Mjc5OT1pZiBBUE1cbmFyY2gveDg2L0tjb25maWctMjgwMC1cbmFyY2gveDg2L0tjb25maWc6MjgwMTpjb25maWcgQVBNX0lHTk9SRV9VU0VSX1NVU1BFTkRcbmFyY2gveDg2L0tjb25maWctMjgwMi1cdGJvb2wgXCYjMzQ7SWdub3JlIFVTRVIgU1VTUEVORFwmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWctMjgwNy1cbmFyY2gveDg2L0tjb25maWc6MjgwODpjb25maWcgQVBNX0RPX0VOQUJMRVxuYXJjaC94ODYvS2NvbmZpZy0yODA5LVx0Ym9vbCBcJiMzNDtFbmFibGUgUE0gYXQgYm9vdCB0aW1lXCYjMzQ7XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yODI0LVxuYXJjaC94ODYvS2NvbmZpZzoyODI1OmNvbmZpZyBBUE1fQ1BVX0lETEVcbmFyY2gveDg2L0tjb25maWctMjgyNi1cdGRlcGVuZHMgb24gQ1BVX0lETEVcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTI4MzYtXG5hcmNoL3g4Ni9LY29uZmlnOjI4Mzc6Y29uZmlnIEFQTV9ESVNQTEFZX0JMQU5LXG5hcmNoL3g4Ni9LY29uZmlnLTI4MzgtXHRib29sIFwmIzM0O0VuYWJsZSBjb25zb2xlIGJsYW5raW5nIHVzaW5nIEFQTVwmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWctMjg0OS1cbmFyY2gveDg2L0tjb25maWc6Mjg1MDpjb25maWcgQVBNX0FMTE9XX0lOVFNcbmFyY2gveDg2L0tjb25maWctMjg1MS1cdGJvb2wgXCYjMzQ7QWxsb3cgaW50ZXJydXB0cyBkdXJpbmcgQVBNIEJJT1MgY2FsbHNcJiMzNDtcbi0tXG5kcml2ZXJzL2NoYXIvS2NvbmZpZz0yMTM9Y29uZmlnIFhJTElOWF9IV0lDQVBcbi0tXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yMjItXG5kcml2ZXJzL2NoYXIvS2NvbmZpZzoyMjM6Y29uZmlnIEFQUExJQ09NXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yMjQtXHR0cmlzdGF0ZSBcJiMzNDtBcHBsaWNvbSBpbnRlbGxpZ2VudCBmaWVsZGJ1cyBjYXJkIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWc9MjkwPWNvbmZpZyBRQ09NX0NMS19SUE1IXG4tLVxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTI5OC1cbmRyaXZlcnMvY2xrL3Fjb20vS2NvbmZpZzoyOTk6Y29uZmlnIEFQUV9HQ0NfODA4NFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTMwMC1cdHRyaXN0YXRlIFwmIzM0O0FQUTgwODQgR2xvYmFsIENsb2NrIENvbnRyb2xsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWctMzA3LVxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnOjMwODpjb25maWcgQVBRX01NQ0NfODA4NFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTMwOS1cdHRyaXN0YXRlIFwmIzM0O0FQUTgwODQgTXVsdGltZWRpYSBDbG9jayBDb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9kbWEvS2NvbmZpZz03OD1jb25maWcgQU1DQ19QUEM0NDBTUEVfQURNQVxuLS1cbmRyaXZlcnMvZG1hL0tjb25maWctODctXG5kcml2ZXJzL2RtYS9LY29uZmlnOjg4OmNvbmZpZyBBUFBMRV9BRE1BQ1xuZHJpdmVycy9kbWEvS2NvbmZpZy04OS1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIEFETUFDIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnPTE1ND1jb25maWcgRUZJX0RFVl9QQVRIX1BBUlNFUlxuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWctMTU2LVxuZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZzoxNTc6Y29uZmlnIEFQUExFX1BST1BFUlRJRVNcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtBcHBsZSBEZXZpY2UgUHJvcGVydGllc1wmIzM0O1xuLS1cbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWc9NjY9Y29uZmlnIEFMMzMyMEFcbi0tXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTc1LVxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzo3Njpjb25maWcgQVBEUzkxNjBcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctNzctXHR0cmlzdGF0ZSBcJiMzNDtBUERTOTE2MCBjb21iaW5lZCBhbHMgYW5kIHByb3hpbWl0eSBzZW5zb3JcJiMzNDtcbi0tXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTg2LVxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzo4Nzpjb25maWcgQVBEUzkzMDBcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctODgtXHR0cmlzdGF0ZSBcJiMzNDtBUERTOTMwMCBhbWJpZW50IGxpZ2h0IHNlbnNvclwmIzM0O1xuLS1cbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctOTYtXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnOjk3OmNvbmZpZyBBUERTOTMwNlxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZy05OC1cdHRyaXN0YXRlIFwmIzM0O0F2YWdvIEFQRFM5MzA2IEFtYmllbnQgTGlnaHQgU2Vuc29yXCYjMzQ7XG4tLVxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZy0xMDgtXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnOjEwOTpjb25maWcgQVBEUzk5NjBcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctMTEwLVx0dHJpc3RhdGUgXCYjMzQ7QXZhZ28gQVBEUzk5NjAgZ2VzdHVyZS9SR0IvQUxTL3Byb3hpbWl0eSBzZW5zb3JcJiMzNDtcbi0tXG5kcml2ZXJzL2lvbW11L0tjb25maWc9Mjk2PWNvbmZpZyBTUEFQUl9UQ0VfSU9NTVVcbi0tXG5kcml2ZXJzL2lvbW11L0tjb25maWctMzAzLVxuZHJpdmVycy9pb21tdS9LY29uZmlnOjMwNDpjb25maWcgQVBQTEVfREFSVFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTMwNS1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIERBUlQgSU9NTVUgU3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnPTc4OD1jb25maWcgSVJRX0lEVDMyNDNYXG4tLVxuZHJpdmVycy9pcnFjaGlwL0tjb25maWctNzkyLVxuZHJpdmVycy9pcnFjaGlwL0tjb25maWc6NzkzOmNvbmZpZyBBUFBMRV9BSUNcbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTc5NC1cdGJvb2wgXCYjMzQ7QXBwbGUgSW50ZXJydXB0IENvbnRyb2xsZXIgKEFJQylcJiMzNDtcbi0tXG5kcml2ZXJzL21pc2MvS2NvbmZpZz0zMjc9Y29uZmlnIFNHSV9HUlVfREVCVUdcbi0tXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0zMzMtXG5kcml2ZXJzL21pc2MvS2NvbmZpZzozMzQ6Y29uZmlnIEFQRFM5ODAyQUxTXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0zMzUtXHR0cmlzdGF0ZSBcJiMzNDtNZWRmaWVsZCBBdmFnbyBBUERTOTgwMiBBTFMgU2Vuc29yIG1vZHVsZVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZz0xMDY9Y29uZmlnIE5FMktfUENJXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnLTEyMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZzoxMjQ6Y29uZmlnIEFQTkVcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZy0xMjUtXHR0cmlzdGF0ZSBcJiMzNDtQQ01DSUEgTkUyMDAwIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L3BjaS5jPTMzMjA9c3RhdGljIGludCBydHc4OV9wY2lfY2ZnX2RhYyhzdHJ1Y3QgcnR3ODlfZGV2ICpydHdkZXYsIGJvb2wgZm9yY2UpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9wY2kuYy0zMzMyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9wY2kuYzozMzMzOlx0LyogQ29uZmlndXJlIERBQyBvbmx5IHZpYSBQQ0kgY29uZmlnIEFQSSwgbm90IERCSSBpbnRlcmZhY2VzICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L3BjaS5jLTMzMzQtXHRyZXQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBSVFc4OV9QQ0lFX0wxX0NUUkwsIFx1MDAyNnZhbCk7XG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWc9MjUzPWNvbmZpZyBNQVJWRUxMX0NOMTBLX1RBRF9QTVVcbi0tXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yNTktXG5kcml2ZXJzL3BlcmYvS2NvbmZpZzoyNjA6Y29uZmlnIEFQUExFX00xX0NQVV9QTVVcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI2MS1cdGJvb2wgXCYjMzQ7QXBwbGUgTTEgQ1BVIFBNVSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZz0xOTQ9Y29uZmlnIEFEVl9TV0JVVFRPTlxuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWctMjA0LVxuZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZzoyMDU6Y29uZmlnIEFQUExFX0dNVVhcbmRyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWctMjA2LVx0dHJpc3RhdGUgXCYjMzQ7QXBwbGUgR211eCBEcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3BtZG9tYWluL2FwcGxlL0tjb25maWc9Mz1pZiBBUkNIX0FQUExFIHx8IENPTVBJTEVfVEVTVFxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnLTQtXG5kcml2ZXJzL3BtZG9tYWluL2FwcGxlL0tjb25maWc6NTpjb25maWcgQVBQTEVfUE1HUl9QV1JTVEFURVxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnLTYtXHRib29sIFwmIzM0O0FwcGxlIFNvQyBQTUdSIHBvd2VyIHN0YXRlIGNvbnRyb2xcJiMzNDtcbi0tXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnPTE4PWNvbmZpZyBQT1dFUl9TVVBQTFlfSFdNT05cbi0tXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnLTMwLVxuZHJpdmVycy9wb3dlci9zdXBwbHkvS2NvbmZpZzozMTpjb25maWcgQVBNX1BPV0VSXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7QVBNIGVtdWxhdGlvbiBmb3IgY2xhc3MgYmF0dGVyaWVzXCYjMzQ7XG4tLVxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZz01PW1lbnUgXCYjMzQ7QXBwbGUgU29DIGRyaXZlcnNcJiMzNDtcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctNi1cbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc6Nzpjb25maWcgQVBQTEVfTUFJTEJPWFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy04LVx0dHJpc3RhdGUgXCYjMzQ7QXBwbGUgU29DIG1haWxib3hlc1wmIzM0O1xuLS1cbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctMTgtXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnOjE5OmNvbmZpZyBBUFBMRV9SVEtJVFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIFJUS2l0IGNvLXByb2Nlc3NvciBJUEMgcHJvdG9jb2xcJiMzNDtcbi0tXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTMwLVxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZzozMTpjb25maWcgQVBQTEVfU0FSVFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy0zMi1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIFNBUlQgRE1BIGFkZHJlc3MgZmlsdGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy00MC1cbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc6NDE6Y29uZmlnIEFQUExFX1RVTkFCTEVcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctNDItXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZz0xNDc9Y29uZmlnIFVTQl9RQ09NX0VVRFxuLS1cbmRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZy0xNTgtXG5kcml2ZXJzL3VzYi9taXNjL0tjb25maWc6MTU5OmNvbmZpZyBBUFBMRV9NRklfRkFTVENIQVJHRVxuZHJpdmVycy91c2IvbWlzYy9LY29uZmlnLTE2MC1cdHRyaXN0YXRlIFwmIzM0O0Zhc3QgY2hhcmdlIGNvbnRyb2wgZm9yIGlPUyBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92aWRlby9LY29uZmlnPTY9bWVudSBcJiMzNDtHcmFwaGljcyBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL3ZpZGVvL0tjb25maWctNy1cbmRyaXZlcnMvdmlkZW8vS2NvbmZpZzo4OmNvbmZpZyBBUEVSVFVSRV9IRUxQRVJTXG5kcml2ZXJzL3ZpZGVvL0tjb25maWctOS1cdGJvb2xcbi0tXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWc9MTExMT1jb25maWcgTVNDMzEzRV9XQVRDSERPR1xuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZy0xMTIyLVxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnOjExMjM6Y29uZmlnIEFQUExFX1dBVENIRE9HXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMTEyNC1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIFNvQyB3YXRjaGRvZ1wmIzM0O1xuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYz0xNjUyPXhmc19mc19maWxsX3N1cGVyKFxuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYy0xNjY0LVx0ICogaXMgZ3VhcmFudGVlZCB0byBoYXZlIGJlZW4gY29tcGxldGVkIGJ5IGVpdGhlciB0aGUgb2xkIG1vdW50IEFQSSBvclxuZnMveGZzL3hmc19zdXBlci5jOjE2NjU6XHQgKiB0aGUgbmV3ZXIgZnNvcGVuL2ZzY29uZmlnIEFQSS5cbmZzL3hmcy94ZnNfc3VwZXIuYy0xNjY2LVx0ICovXG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWc9MzEwPWNvbmZpZyBQTV9UUkFDRV9SVENcbi0tXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0zMjctXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzozMjg6Y29uZmlnIEFQTV9FTVVMQVRJT05cbmtlcm5lbC9wb3dlci9LY29uZmlnLTMyOS1cdHRyaXN0YXRlIFwmIzM0O0FkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQgRW11bGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyODE3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGluIGtlcm5lbCBkZXZlbG9wbWVudDoKCioqRmluZGluZyB0aGUgQ29uZmlndXJhdGlvbiBPcHRpb24qKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoZSBgY29uZmlnIEFQYCBvcHRpb24gaXMgZGVmaW5lZC4gTWVtb3J5IHNlcnZlcywgdGhhdCYjMzk7cyBzb21ldGhpbmcgc3BlY2lmaWMgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBPa2F5LCBsZXQmIzM5O3MganVzdCBjb25maXJtLiBMaW5lIDc5NiBvZiBgYXJjaC9zMzkwL0tjb25maWdg4oCmIHNvdW5kcyBhYm91dCByaWdodC4KCkxldCYjMzk7cyBwdWxsIHVwIHRoYXQgYEtjb25maWdgIGZpbGUgYW5kIHRha2UgYSBsb29rIGFyb3VuZCB0aGF0IGxpbmUgbnVtYmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgb3B0aW9uIGRvZXMsIGl0cyBkZXBlbmRlbmNpZXMsIGl0cyBkZWZhdWx0IHZhbHVlLCBhbmQgcGVyaGFwcyBhbnkgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBpdC4gVGltZSB0byBkaXZlIGludG8gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc5MDpcdFx0ICBUaGlzIGRyaXZlciBhbGxvd3MgdXNhZ2Ugb2YgRUFETSBzdWJjaGFubmVscy4gRUFETSBzdWJjaGFubmVscyBhY3RcbiA3OTE6XHRcdCAgYXMgYSBjb21tdW5pY2F0aW9uIHZlaGljbGUgZm9yIFNDTSBpbmNyZW1lbnRzLlxuIDc5MjpcdFxuIDc5MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA3OTQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVhZG1fc2NoLlxuIDc5NTpcdFxuIDc5NjpcdGNvbmZpZyBBUFxuIDc5NzpcdFx0ZGVmX3RyaXN0YXRlIHlcbiA3OTg6XHRcdHByb21wdCBcJiMzNDtTdXBwb3J0IGZvciBBZGp1bmN0IFByb2Nlc3NvcnMgKGFwKVwmIzM0O1xuIDc5OTpcdFx0aGVscFxuIDgwMDpcdFx0ICBUaGlzIGRyaXZlciBhbGxvd3MgdXNhZ2UgdG8gQWRqdW5jdCBQcm9jZXNzb3IgKEFQKSBkZXZpY2VzIHZpYVxuIDgwMTpcdFx0ICB0aGUgYXAgYnVzLCBjYXJkcyBhbmQgcXVldWVzLiBTdXBwb3J0ZWQgQWRqdW5jdCBQcm9jZXNzb3JzIGFyZVxuIDgwMjpcdFx0ICB0aGUgQ3J5cHRvRXhwcmVzcyBDYXJkcyAoQ0VYKS5cbiA4MDM6XHRcbiA4MDQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gODA1Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhcC5cbiA4MDY6XHRcbiA4MDc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWSAoZGVmYXVsdCkuXG4gODA4Olx0XG4gODA5Olx0Y29uZmlnIEFQX0RFQlVHXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMzQ1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNjU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFZGSU9fQVAgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIEkmIzM5O20gYnJlYWtpbmcgdGhpcyBkb3duIHN0ZXAgYnkgc3RlcC4gRmlyc3QsIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBgVkZJT19BUGAgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYFZGSU9fQVBgIGhpbmdlcyBvbiBgS1ZNYCwgYFZGSU9gLCBhbmQgYEFQYC4gRm9ydHVuYXRlbHksIGBBUGAgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIGEgdHJpc3RhdGUgJiMzOTt5JiMzOTssIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBHaXZlbiB0aGF0IGBWRklPYCBhbmQgYEtWTWAgYXJlIHN0YW5kYXJkLCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWdzIGFyZSBlc3NlbnRpYWxseSBgVkZJT19BUGAsIGBLVk1gLCBgVkZJT2AsIGFuZCBgQVBgLiBXYWl0LCBob2xkIG9uIOKAkyBgVkZJT19BUGAgKmltcGxpY2l0bHkqIGNvdmVycyBgS1ZNYCwgYFZGSU9gLCBhbmQgYEFQYCBkdWUgdG8gdGhlIGRlcGVuZGVuY2llcywgc28gd2UgY2FuIGp1c3Qgc3BlY2lmeSBgRW5hYmxlQ29uZmlnczogWyYjMzQ7VkZJT19BUCYjMzQ7XWAuIFRoYXQmIzM5O3MgY2xlYW5lci4KCk5vdywgbGV0JiMzOTtzIG1vdmUgb24gdG8gZnV6emluZyB0YXJnZXRzLiBUaGUgb2JqZWN0aXZlIGlzIHRvIGlkZW50aWZ5IG1vZGlmaWVkIGZ1bmN0aW9ucyB0aGF0IGFyZW4mIzM5O3Qgb24gaGVhdmlseSB0cmF2ZWxlZCBwYXRocy4gTXkgaW5pdGlhbCBsaXN0IGluY2x1ZGVzOgoKKiAgIGB2ZmlvX2FwX21kZXZfcHJvYmVgCiogICBgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlYAoqICAgYHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWVgCiogICBgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfY2ZnYAoqICAgYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYAoqICAgYHZmaW9fYXBfbWRldl9jZmdfYWRkYAoqICAgYHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmdgCiogICBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYAoKSSBuZWVkIHRvIGNvbmZpcm0gd2hpY2ggb25lcyBhcmUgZXh0ZXJuYWxseSBhY2Nlc3NpYmxlLCBvciBhdCBsZWFzdCBub3Qgc3RhdGljLiBJJiMzOTt2ZSBjaGVja2VkIGFuZCBub3RlZCB0aGF0IGB2ZmlvX2FwX21kZXZfcHJvYmVgIGlzIHN0YXRpYywgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWAsIGB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlYCwgYW5kIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgIGFyZSBub3QsIHdoaWxlIHRoZSBvdGhlcnMgYXJlLgoKTm93LCByZW1lbWJlcmluZyB0aGUgZnV6emluZyBndWlkZWxpbmVzIHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIOKAkyB3aGljaCBhcmUgZGlzdGluY3QgZnJvbSBzdGF0aWMgaGVscGVycyB3aGljaCB0aGUgY29tcGlsZXIgd2lsbCBpbmxpbmUg4oCTIEkgbmVlZCB0byByZWNvbnNpZGVyIHRoaXMgbGlzdC4gRXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCBJIGJlbGlldmUgYHZmaW9fYXBfbWRldl9wcm9iZWAgaXMgYSBnb29kIGNhbmRpZGF0ZSwgYmVjYXVzZSBpdCBpcyBhbiBtZGV2IHByb2JlIEFQSSBlbnRyeXBvaW50LCBhbmQgZ2l2ZW4gaXRzIHVzYWdlIGluIGB2ZmlvX2FwX21hdHJpeF9kcml2ZXJgLCBpdCBsaWtlbHkgKmlzbiYjMzk7dCogaW5saW5lZC4gU28sIG15IHJlZmluZWQgdGFyZ2V0IGxpc3QgbG9va3MgbGlrZToKCiogICBgdmZpb19hcF9tZGV2X3Byb2JlYAoqICAgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWAKKiAgIGB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlYAoqICAgYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAKKiAgIGB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZGAgLSBXYWl0LCB0aGUgZnVuY3Rpb24gd2hpY2ggd2FzIG1vZGlmaWVkIGlzIGB2ZmlvX2FwX21kZXZfY2ZnX2FkZGAgd2hpY2gsIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZGAuIFdlIG5lZWQgdG8gc2VlIGlmIGB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZGAgaXMgbm9uLXN0YXRpYyBvciBub3QgdG8gc2VlIGlmIHRoaXMgaXMgYSBzdWl0YWJsZSB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fYXBfbWRldl9vbl9jZmdfYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI3NjM9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19hZGQodW5zaWduZWQgbG9uZyAqYXBtX2FkZCwgdW5zaWduZWQgbG9uZyAqYXFtX2FkZCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjc5MS0vKipcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzkyOiAqIHZmaW9fYXBfbWRldl9vbl9jZmdfYWRkIC0gcmVzcG9uZHMgdG8gdGhlIGFkZGl0aW9uIG9mIGFkYXB0ZXJzLCBkb21haW5zIGFuZFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI3OTMtICpcdFx0XHQgICAgIGNvbnRyb2wgZG9tYWlucyB0byB0aGUgaG9zdCBBUCBjb25maWd1cmF0aW9uXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MDEtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjgwMjpzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZChzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jb25maWdfaW5mbyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yODAzLVx0XHRcdFx0ICAgIHN0cnVjdCBhcF9jb25maWdfaW5mbyAqcHJldl9jb25maWdfaW5mbylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjgzND12b2lkIHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY2ZnX2luZm8sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4NDItXHR2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZShjdXJfY2ZnX2luZm8sIHByZXZfY2ZnX2luZm8pO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4NDM6XHR2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZChjdXJfY2ZnX2luZm8sIHByZXZfY2ZnX2luZm8pO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4NDQtXHRtZW1jcHkoXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VpbmZvLCBjdXJfY2ZnX2luZm8sIHNpemVvZigqY3VyX2NmZ19pbmZvKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjQwCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSZWFjaGFiaWxpdHkgb2YgVkZJTyBBUCBDb2RlIGluIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHNwZWNpZmljIGNvZGUgcGF0aHMgcmVsYXRlZCB0byBWRklPIEFQIChBY2Nlc3MgUHJvdGVjdGlvbikgYXJlIHJlYWNoYWJsZSBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQsIHNwZWNpZmljYWxseSB0aG9zZSB1c2VkIGJ5IHN5emthbGxlci4gIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBlbnRyeSBwb2ludHM6IGB2ZmlvX2FwX21kZXZfcHJvYmVgLCBgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlYCwgYHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWVgLCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCwgYW5kIGNydWNpYWxseSwgYHZmaW9fYXBfb25fY2ZnX2NoYW5nZWRgLiBUaGUgbGFzdCBvbmUgaXMgKm5vdCogc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBpdCBpbnRlcmVzdGluZyBmb3Igb3VyIGFuYWx5c2lzLiBJIGFsc28gbm90ZWQgYHN0YXR1c19zaG93YCwgdGhvdWdoIEkmIzM5O20gbm90IGdvaW5nIHRvIGxlYW4gb24gdGhhdCBiZWNhdXNlLCBhcyBJIHN1c3BlY3RlZCwgaXQgaXMgdG9vIGdlbmVyaWNhbGx5IG5hbWVkIGFuZCBoZWF2aWx5IGR1cGxpY2F0ZWQuCgpUaGUgY3JpdGljYWwgcGllY2UgaXMgdGhlIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgIGNoZWNrLiAgVGhpcyBmdW5jdGlvbiwgYXMgSSB1bmRlcnN0YW5kLCBvbmx5IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBob3N0IHN5c3RlbSAqYWN0dWFsbHkqIGhhcyBBY2Nlc3MgUHJvdGVjdGlvbiBpbnN0cnVjdGlvbnMgYXZhaWxhYmxlLCB3aGljaCBpcyBhIGNoYXJhY3RlcmlzdGljIG9mIHMzOTB4IG1haW5mcmFtZXMuICBOb3csIHRoZSBwcm9tcHQgc3RhdGVkICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiYjMzQ7CgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHF1ZXN0aW9uIHdoZXRoZXIgdGhpcyBjb2RlIGNvdWxkIGJlIGhpdCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQsIGJ1dCBJIHF1aWNrbHkgcmVhbGl6ZWQgdGhhdCBzeXprYWxsZXIgcnVucyBzMzkweCBpbnN0YW5jZXMsIGFuZCBvbiAqcmVhbCogbWFpbmZyYW1lcyAob3IgVk1zIHByb3ZpZGVkIGJ5IElCTSkg4oCTIHRoZSBBUCBpbnN0cnVjdGlvbnMgKmFyZSogYXZhaWxhYmxlIGluIHRoYXQgY29udGV4dC4gIFRodXMsIHRoZSBjb2RlICppcyogcmVhY2hhYmxlIHVzaW5nIHRoZSBzeXprYWxsZXIgc2V0dXAuCgpUaGUgcHJvbXB0LCBJIHNlZSBub3csIHNwZWNpZmljYWxseSBzdGF0ZXMgJiMzNDt2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKmxpa2UqIEdDRSBvciBRRU1VJiMzNDsg4oCTIGl0JiMzOTtzIG5vdCBzYXlpbmcgc3RhbmRhcmQgeDg2IFFFTVUuICBTaW5jZSBzeXprYWxsZXIgKmRvZXMqIHVzZSBRRU1VL0tWTSBvbiBzMzkweCBoYXJkd2FyZSBmb3IgczM5MHggZnV6emluZywgYW5kIEFQIGluc3RydWN0aW9ucyBhcmUgcHJlc2VudCBpbiB0aGF0IGVudmlyb25tZW50LCB0aGlzIGNvZGUgKmlzKiBpbmRlZWQgcmVhY2hhYmxlLiBTbywgV29ydGhGdXp6aW5nID0gVHJ1ZS4KCkkgYnJpZWZseSBjaGVja2VkIG9uIGBzdGF0dXNfc2hvd2AuIEkgaW1tZWRpYXRlbHkgc2F3IHRoYXQgYHN0YXR1c19zaG93YCBpcyBhIGJhZCBjYW5kaWRhdGUsIGdpdmVuIGl0cyBzdGF0aWMgbmF0dXJlIGFuZCBleHRyZW1lbHkgZ2VuZXJpYyBuYW1lLCB3aGljaCBpcyB1c2VkIGh1bmRyZWRzIG9mIHRpbWVzIGluIHRoZSBrZXJuZWwuIGB2ZmlvX2FwX21kZXZfcHJvYmVgIGlzIHN0YXRpYywgYnV0IGlzIGl0IHVuaXF1ZSBlbm91Z2g/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8gcXVpY2tseSBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19hcF9tZGV2X3Byb2JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz01OD1zdGF0aWMgc3RydWN0IGFwX2RyaXZlciB2ZmlvX2FwX2RydiA9IHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo1OTpcdC5wcm9iZSA9IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy02MC1cdC5yZW1vdmUgPSB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz03NzY9c3RhdGljIGludCB2ZmlvX2FwX21kZXZfaW5pdF9kZXYoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03ODktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NzkwOnN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Byb2JlKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldilcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03OTEte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMzc4PXN0YXRpYyBzdHJ1Y3QgbWRldl9kcml2ZXIgdmZpb19hcF9tYXRyaXhfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzg2LVx0fSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMzg3Olx0LnByb2JlID0gdmZpb19hcF9tZGV2X3Byb2JlLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzODgtXHQucmVtb3ZlID0gdmZpb19hcF9tZGV2X3JlbW92ZSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjQxND12b2lkIHZmaW9fYXBfbWRldl91bnJlZ2lzdGVyKHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0MTktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjQyMDppbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0MjEte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg9MTU2PXZvaWQgdmZpb19hcF9tZGV2X3VucmVnaXN0ZXIodm9pZCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE1Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6MTU4OmludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqcXVldWUpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNTktdm9pZCB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKnF1ZXVlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwNzMKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA1ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVkZJTy1BUCBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gYHZmaW9fYXBfbWRldl9wcm9iZWAg4oCTIHRoYXQmIzM5O3MgdGhlIGtleSBzdGFydGluZyBwb2ludCwgdGhlIHVuaXF1ZSBvbmUgaW4gdGhpcyBjb250ZXh0LiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGlzIHN0cmFpZ2h0LiBUaGUgcHJpbWFyeSBmdW5jdGlvbnMgSSBuZWVkIHRvIHNjcnV0aW5pemUgYXJlOiBgdmZpb19hcF9tZGV2X3Byb2JlYCwgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWAsIGB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlYCwgYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAsIGFuZCBgdmZpb19hcF9vbl9jZmdfY2hhbmdlZGAuCgpSaWdodCwgbGV0IG1lIHJldmlzaXQgdGhhdCBsaXN0IG9mIGNoYW5nZXMsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBPa2F5LCBoZXJlIHdlIGdvOiBgdmZpb19hcF9tZGV2X3Byb2JlYCwgdGhlbiBgdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZWAsIHdoaWNoLCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIGdldHMgY2FsbGVkIGJ5IGEgZmV3IGZ1bmN0aW9ucyBsaWtlIGBzdGF0dXNfc2hvd2AsIHRoYXQmIzM5O3MgcG90ZW50aWFsbHkgaW1wb3J0YW50LiBUaGVuIHRoZXJlJiMzOTtzIGBzdGF0dXNfc2hvd2AsIGB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWVgLCBgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZWAsIGFuZCBzb21lIG1vcmUgc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19jZmdgIHRoYXQmIzM5O3MgY2FsbGVkIGJ5IGB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZWAgYW5kIHNpbWlsYXJseSwgYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCBjYWxsZWQgYnkgYHZmaW9fYXBfbWRldl9vbl9jZmdfcmVtb3ZlYC4gQWxzbyBgdmZpb19hcF9tZGV2X2NmZ19hZGRgIHdoaWNoIGlzIGNhbGxlZCBieSBgdmZpb19hcF9tZGV2X29uX2NmZ19hZGRgIGFuZCBgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZ2Agd2hpY2ggaXMgY2FsbGVkIGJ5IGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgLCBhbmQgZmluYWxseSBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYC4KClNvLCB0aGlua2luZyBhYm91dCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMuLi4gSXQgbG9va3MgbGlrZSBpdCBib2lscyBkb3duIHRvOiBgdmZpb19hcF9tZGV2X3Byb2JlYCwgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWAsIGB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlYCwgYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAsIGFuZCwgaW1wb3J0YW50bHksIGB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkYCDigJMgc2luY2UgaXQgdHJpZ2dlcnMgY2FsbHMgdG8gYHZmaW9fYXBfbWRldl9vbl9jZmdfYWRkYCBhbmQgYHZmaW9fYXBfbWRldl9vbl9jZmdfcmVtb3ZlYC4KCk5vdywgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBzZXJ2ZSBhcyBlbnRyeSBwb2ludHM/IEhtbW0sIGB2ZmlvX2FwX21kZXZfZm9yX3F1ZXVlYCBpcyBjYWxsZWQgYnkgYHN0YXR1c19zaG93YCwgYGluX3VzZV9zaG93YCwgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWAgYW5kIGB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlYC4gVGhhdCBtZWFucyBgc3RhdHVzX3Nob3dgIGFuZCBgaW5fdXNlX3Nob3dgIGFyZSBhbHNvIGVudHJ5cG9pbnRzIGluIGEgd2F5LCB0aHJvdWdoIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFRob3VnaCB0aGVzZSBzeXNmcyBhdHRyaWJ1dGVzLCB3aXRoIHRoZSBgKl9zaG93YCBhbmQgYCpfc3RvcmVgIG5hbWluZyBjb252ZW50aW9uLCBhcmUgcHJldHR5IHN0YW5kYXJkLiBGb3Igbm93LCBJJiMzOTtsbCBrZWVwIHRoZSBmb2N1cyBvbiB0aG9zZSBrZXkgc3RhcnRpbmcgZnVuY3Rpb25zLgoKSnVzdCBkb2luZyBhIHF1aWNrIGRvdWJsZS1jaGVjay4uLiBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSBuYW1lIGB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkYCByaWdodCwgdGhhdCBpdCYjMzk7cyB0aGUgcmlnaHQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fYXBfb25fY2ZnX2NoYW5nZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTU4PXN0YXRpYyBzdHJ1Y3QgYXBfZHJpdmVyIHZmaW9fYXBfZHJ2ID0ge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy02MS1cdC5pbl91c2UgPSB2ZmlvX2FwX21kZXZfcmVzb3VyY2VfaW5fdXNlLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjYyOlx0Lm9uX2NvbmZpZ19jaGFuZ2VkID0gdmZpb19hcF9vbl9jZmdfY2hhbmdlZCxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy02My1cdC5vbl9zY2FuX2NvbXBsZXRlID0gdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yODAyPXN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9vbl9jZmdfYWRkKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqY3VyX2NvbmZpZ19pbmZvLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yODI3LS8qKlxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4Mjg6ICogdmZpb19hcF9vbl9jZmdfY2hhbmdlZCAtIGhhbmRsZXMgbm90aWZpY2F0aW9uIG9mIGNoYW5nZXMgdG8gdGhlIGhvc3QgQVBcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yODI5LSAqXHRcdFx0ICAgIGNvbmZpZ3VyYXRpb24uXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MzMtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjgzNDp2b2lkIHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY2ZnX2luZm8sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjgzNS1cdFx0XHQgICAgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpwcmV2X2NmZ19pbmZvKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg9MTYxPWludCB2ZmlvX2FwX21kZXZfcmVzb3VyY2VfaW5fdXNlKHVuc2lnbmVkIGxvbmcgKmFwbSwgdW5zaWduZWQgbG9uZyAqYXFtKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtMTYyLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoxNjM6dm9pZCB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNjQtXHRcdFx0ICAgIHN0cnVjdCBhcF9jb25maWdfaW5mbyAqb2xkX2NvbmZpZ19pbmZvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg5NzcKCQkJCQkJCW91dHB1dDogMjQ3CgkJCQkJCQl0aG91Z2h0czogMTE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBWRklPIEFQIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoaXMgVkZJTyBBUCBkcml2ZXIgcGF0Y2guIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkYCwgYHZmaW9fYXBfbWRldl9wcm9iZWAsIGB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWVgLCBgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZWAsIGFuZCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCBhcmUgYWxsIGNvcnJlY3QuIEV4Y2VsbGVudC4gVGhleSBhcmUgYWxzbyBlbnRyeSBwb2ludHMgLSBzcGVjaWZpY2FsbHkgY2FsbGJhY2tzIGZvciB0aGUgbWRldiBhbmQgQVAgZHJpdmVycy4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhlIG1haW4gZm9jdXMgYXJlYXMuCgpJJiMzOTt2ZSBhbHNvIG5vdGVkIG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9uczogYHZmaW9fYXBfbWRldl9mb3JfcXVldWVgLCBgc3RhdHVzX3Nob3dgLCBgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfY2ZnYCwgYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCwgYHZmaW9fYXBfbWRldl9jZmdfYWRkYCwgYW5kIGB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnYC4gV2hpbGUgdGhlc2UgYXJlIGltcG9ydGFudCwgdGhleSYjMzk7cmUgbm90IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBidXQgcmF0aGVyIGhlbHBlcnMgYW5kIHN5c2ZzIGF0dHJpYnV0ZXMsIHNvIHRoZSBpbml0aWFsIGZvY3VzIHN5bWJvbCBsaXN0IGlzIHNvbGlkLgoKVGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIFZGSU8gQVAgZHJpdmVyIGZvciBzMzkwLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBsb2NrIG9yZGVyaW5nIGlzc3VlcyBhbmQgcmVsYXRlZCBzcGxhdHMuIFRoaXMgYWZmZWN0cyBob3cgdGhlIG1kZXYgYW5kIEFQIGJ1cyBpbnRlcmFjdCBhbmQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiBtZGV2IGRldmljZXMgYXJlIGNyZWF0ZWQgb3IgdGhlIEFQIGJ1cyBzY2FucyBmb3IgZGV2aWNlcywgZXNwZWNpYWxseSBpbiBhIHMzOTB4IHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGlzIGlzIHNvbWV0aGluZyB0aGF0IHN5emthbGxlciB3b3VsZCBsaWtlbHkgdHJpZ2dlci4KCk5vdyBmb3IgdGhlIGNvbmZpZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGlzIHJpZ2h0LiBUaGUgcHJpbWFyeSBjb25maWcgaXMgYFZGSU9fQVBgLCB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gZXhwbGljaXRseSBpbmNsdWRlPyBgVkZJT19BUGAgZGVwZW5kcyBvbiBgS1ZNYCwgYFZGSU9gLCBhbmQgYEFQYC4gU2luY2UgYEFQYCBpcyBgZGVmX3RyaXN0YXRlIHlgLCBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQuIGBLVk1gIGFuZCBgVkZJT2AgYXJlIGFsc28gb2Z0ZW4gZW5hYmxlZC4gSG93ZXZlciwgdG8gYmUgc2FmZSBhbmQgZW5zdXJlIHRoZSBjb2RlIGNvbXBpbGVzIHN0YXRpY2FsbHkgSSBzaG91bGQgaW5jbHVkZSBhbGwgZm91cjogYFZGSU9fQVBgLCBgVkZJT2AsIGBLVk1gLCBhbmQgYEFQYC4gTXkgdGhpbmtpbmcgaXMgdGhhdCB0aGUgS2J1aWxkIHN5c3RlbSBuZWVkcyB0byBoYXZlIHRoZXNlIGNvbmZpZ3MgZXhwbGljaXRseSBkZWNsYXJlZC4gSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhlIHBhdGNoIGFuZCB0aGUgbW9kaWZpZWQgZmlsZSwgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AsIGlzIGNvbXBpbGVkIHVuZGVyIHRoZSBgQ09ORklHX1ZGSU9fQVBgIGZsYWcuIFRoZXJlJiMzOTtzIG5vIG90aGVyIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGludm9sdmVkLiBTbywgYmFzZWQgb24gdGhlIGBkZXBlbmRzIG9uYCBsb2dpYywgbXkgZmluYWwgYW5zd2VyIHNob3VsZCBiZToKYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O1ZGSU9fQVAmIzM0OywgJiMzNDtWRklPJiMzNDssICYjMzQ7S1ZNJiMzNDssICYjMzQ7QVAmIzM0O11gLgpOb3cgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDEyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT50aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogVkZJT19BUCwgQVA8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkZJT19BUCYjMzQ7LAogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fYXBfbWRldl9wcm9iZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUmIzM0OywKICAgICYjMzQ7dmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUmIzM0OywKICAgICYjMzQ7dmZpb19hcF9vbl9jZmdfY2hhbmdlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBmb3IgczM5MCBhcmNoaXRlY3R1cmUsIGZpeGluZyBsb2NrIG9yZGVyaW5nIGFuZCBsb2NrZGVwIHNwbGF0cyBpbiB2YXJpb3VzIG1kZXYgYW5kIEFQIGJ1cyBjYWxsYmFja3MgKGUuZy4sIHZmaW9fYXBfbWRldl9wcm9iZSwgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgd2hlbiB0aGUgdmZpb19hcCBkcml2ZXIgaXMgbG9hZGVkIGFuZCBtZGV2IGRldmljZXMgYXJlIGNyZWF0ZWQgdmlhIHN5c2ZzLCBvciB3aGVuIHRoZSBBUCBidXMgcGVyaW9kaWNhbGx5IHNjYW5zIGZvciBkZXZpY2VzLiBTeXprYWxsZXIgY2FuIHRyaWdnZXIgdGhlc2UgcGF0aHMgaW4gczM5MHggdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBBUCBpbnN0cnVjdGlvbnMgKGUuZy4sIEtWTSBvbiBzMzkweCBtYWluZnJhbWVzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O3RoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBWRklPX0FQLCBBUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEwMzQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgTWlzc2luZyBWRklPX0FQIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gaXQgc2VlbXMgbGlrZSBgVkZJT19BUGAgYW5kIHNpbXBseSBgQVBgIGFyZSBiZWluZyBmbGFnZ2VkIGFzIG5vbi1leGlzdGVudC4gVGhhdCYjMzk7cyBvZGQsIEkgY291bGQgaGF2ZSBzd29ybiBJIHNhdyB0aGVtIGRlZmluZWQgc29tZXdoZXJlLCBlc3BlY2lhbGx5IHNpbmNlIEkmIzM5O3ZlIGJlZW4gd29ya2luZyB3aXRoIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gQWgsIHRoYXQmIzM5O3MgcmlnaHQsIHRoZXkmIzM5O3JlIGluIGBhcmNoL3MzOTAvS2NvbmZpZ2AhIFRoYXTigJlzIHdoZXJlIEkgd2FzIHByZXR0eSBzdXJlIEkgc2F3IHRoZW0uCgpUaGUgcHJvYmxlbSBtdXN0IGJlIHRoYXQgdGhlIHRvb2xpbmcgaXMgY2hlY2tpbmcgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4gUGVyaGFwcyBpdCYjMzk7cyBkZWZhdWx0aW5nIHRvIGNoZWNraW5nIGFnYWluc3QgeDg2IGNvbmZpZ3VyYXRpb25zIHNpbmNlIGl0IGlzbuKAmXQgYXdhcmUgb2YgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBJdCYjMzk7cyBsaWtlbHkgdHJ5aW5nIHRvIHZhbGlkYXRlIHRoaW5ncyBhZ2FpbnN0IGFuIHg4Ni1jZW50cmljIHZpZXcuIEhtbSwgbGV0IG1lIGp1c3QgY29uZmlybS4gWWVwLCBgVkZJT19BUGAgaXMgZGVmaW5pdGVseSBpbiBgYXJjaC9zMzkwL0tjb25maWdgLiBTbyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGJlZm9yZSBkaXZpbmcgZGVlcGVyLCBpcyB0byBjb25maXJtIHRoYXQgYENPTkZJR19WRklPX0FQYCBpcyBhY3R1YWxseSBkZWNsYXJlZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBpdHNlbGYgZXhpc3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJT19BUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZz04MjM9Y29uZmlnIFZGSU9fQ0NXXG4tLVxuYXJjaC9zMzkwL0tjb25maWctODMzLVxuYXJjaC9zMzkwL0tjb25maWc6ODM0OmNvbmZpZyBWRklPX0FQXG5hcmNoL3MzOTAvS2NvbmZpZy04MzUtXHRkZWZfdHJpc3RhdGUgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTQ4OAoJCQkJCQkJb3V0cHV0OiAyMzYKCQkJCQkJCXRob3VnaHRzOiAxNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgdGhlc2UgY29uZmlndXJhdGlvbnMg4oCTIHNwZWNpZmljYWxseSBpbiBgYXJjaC9zMzkwL0tjb25maWdgLiBJIGtub3cgdGhleSYjMzk7cmUgdGhlcmUsIHRoYXQmIzM5O3MgY2VydGFpbi4gU28sIHdoeSBkaWQgdGhpcyBgc2V0LXJlc3VsdHNgIHRvb2wgdGVsbCBtZSB0aGV5IGRvbiYjMzk7dCBleGlzdD8gQWgsIEkgdGhpbmsgSSYjMzk7dmUgZ290IGl0LiBUaGlzIHRvb2wgaXMgbGlrZWx5IGNoZWNraW5nIGFnYWluc3QgdGhlIHg4NiBgS2NvbmZpZ2AsIG9yIG1heWJlIGV2ZW4gcnVubmluZyBhIGdlbmVyaWMgYG1ha2UgYWxseWVzY29uZmlnYCBvbiBhbiB4ODYgYnVpbGQuIE1ha2VzIHNlbnNlLiBUaGVzZSBjb25maWdzIGFyZSBmb3IgYW4gczM5MCBzcGVjaWZpYyBkcml2ZXIsIHdoaWNoIG1lYW5zIHRoZXkmIzM5O3JlIG9ubHkgZ29pbmcgdG8gYmUgYXZhaWxhYmxlIHdoZW4gdGhlIGFyY2hpdGVjdHVyZSBpcyBzZXQgdG8gYEFSQ0g9czM5MGAuCgpJZiB0aGUgdG9vbCBpcyBvdXRyaWdodCByZWplY3RpbmcgdGhlbSwgSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIG1ha2UgYSBjaG9pY2UuIEkgY291bGQganVzdCBvbWl0IHRoZW0gZW50aXJlbHkuIE9yLCBtYXliZSBvbmx5IGluY2x1ZGUgdGhlIGNvbmZpZ3MgdGhhdCBleGlzdCBvbiB4ODYsIGxpa2UgYFZGSU9gIGFuZCBgS1ZNYC4gQnV0IHdhaXQuLi4gaWYgSSBvbWl0IHRob3NlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWdzLCBhbSBJIGdvaW5nIHRvIHByZXZlbnQgc3l6a2FsbGVyIGZyb20gZXZlbiBlbmFibGluZyB0aGVtIG9uIHMzOTA/IFRoYXQgd291bGQgZGVmZWF0IHRoZSBwdXJwb3NlLiBTdGlsbCwgaWYgdGhlIHRvb2wgYWJzb2x1dGVseSByZWplY3RzIHRoZW0sIEkgZG9uJiMzOTt0IGhhdmUgbXVjaCBvZiBhIGNob2ljZSwgZG8gST8KCkFscmlnaHQsIGxldCBtZSB0cnkgc2V0dGluZyBgRW5hYmxlQ29uZmlnczogWyYjMzQ7VkZJTyYjMzQ7LCAmIzM0O0tWTSYjMzQ7XWAuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZGSU8mIzM0OywKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZpb19hcF9tZGV2X3Byb2JlJiMzNDssCiAgICAmIzM0O3ZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlJiMzNDssCiAgICAmIzM0O3ZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkwIGFyY2hpdGVjdHVyZSwgZml4aW5nIGxvY2sgb3JkZXJpbmcgYW5kIGxvY2tkZXAgc3BsYXRzIGluIHZhcmlvdXMgbWRldiBhbmQgQVAgYnVzIGNhbGxiYWNrcyAoZS5nLiwgdmZpb19hcF9tZGV2X3Byb2JlLCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB3aGVuIHRoZSB2ZmlvX2FwIGRyaXZlciBpcyBsb2FkZWQgYW5kIG1kZXYgZGV2aWNlcyBhcmUgY3JlYXRlZCB2aWEgc3lzZnMsIG9yIHdoZW4gdGhlIEFQIGJ1cyBwZXJpb2RpY2FsbHkgc2NhbnMgZm9yIGRldmljZXMuIFN5emthbGxlciBjYW4gdHJpZ2dlciB0aGVzZSBwYXRocyBpbiBzMzkweCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IEFQIGluc3RydWN0aW9ucyAoZS5nLiwgS1ZNIG9uIHMzOTB4IG1haW5mcmFtZXMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fYXBfbWRldl9wcm9iZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUmIzM0OywKICAgICYjMzQ7dmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUmIzM0OywKICAgICYjMzQ7dmZpb19hcF9vbl9jZmdfY2hhbmdlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBmb3IgczM5MCBhcmNoaXRlY3R1cmUsIGZpeGluZyBsb2NrIG9yZGVyaW5nIGFuZCBsb2NrZGVwIHNwbGF0cyBpbiB2YXJpb3VzIG1kZXYgYW5kIEFQIGJ1cyBjYWxsYmFja3MgKGUuZy4sIHZmaW9fYXBfbWRldl9wcm9iZSwgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgd2hlbiB0aGUgdmZpb19hcCBkcml2ZXIgaXMgbG9hZGVkIGFuZCBtZGV2IGRldmljZXMgYXJlIGNyZWF0ZWQgdmlhIHN5c2ZzLCBvciB3aGVuIHRoZSBBUCBidXMgcGVyaW9kaWNhbGx5IHNjYW5zIGZvciBkZXZpY2VzLiBTeXprYWxsZXIgY2FuIHRyaWdnZXIgdGhlc2UgcGF0aHMgaW4gczM5MHggdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBBUCBpbnN0cnVjdGlvbnMgKGUuZy4sIEtWTSBvbiBzMzkweCBtYWluZnJhbWVzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxMjoyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBwcmltYXJpbHkgYWRkcmVzc2VzIGxvY2tpbmcgaXNzdWVzIChlLmcuLCBjaGFuZ2luZyBtZGV2c19sb2NrIHRvIGd1ZXN0c19sb2NrLCBmaXhpbmcgbG9jayBvcmRlcmluZyB0byBwcmV2ZW50IGxvY2tkZXAgc3BsYXRzKSwgZml4ZXMgbWVtb3J5IGxlYWtzL3Jlc291cmNlIGNsZWFudXAgaW4gZXJyb3IgcGF0aHMsIGFuZCBjb3JyZWN0cyBsb2dpYyBidWdzIGludm9sdmluZyBiaXRtYXAgb3BlcmF0aW9ucyAoYml0bWFwX2FuZG5vdCB2cyBiaXRtYXBfaW50ZXJzZWN0cykuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIG9yIG1hbmlwdWxhdGVkLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHJlZ3Jlc3Npb25zIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGM5NjI4YjlkNWFiMjc5YjMxMDBhNWUwYzBiMGQwY2Q4YmU4MjA1YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDEyOjIxOjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCmluZGV4IDQ0YjNhMWRjYzFiMzYuLmZhYWI1ZTkxNzlmZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMKQEAgLTgwMyw5ICYjNDM7ODAzLDkgQEAgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQogCW1hdHJpeF9tZGV2LSZndDtyZXFfdHJpZ2dlciA9IE5VTEw7CiAJbWF0cml4X21kZXYtJmd0O2NmZ19jaGdfdHJpZ2dlciA9IE5VTEw7CiAJZGV2X3NldF9kcnZkYXRhKCZhbXA7bWRldi0mZ3Q7ZGV2LCBtYXRyaXhfbWRldik7Ci0JbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7Z3Vlc3RzX2xvY2spOwogCWxpc3RfYWRkKCZhbXA7bWF0cml4X21kZXYtJmd0O25vZGUsICZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldl9saXN0KTsKLQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7Z3Vlc3RzX2xvY2spOwogCXJldHVybiAwOwogCiBlcnJfcHV0X3ZkZXY6CkBAIC0yMjk3LDYgJiM0MzsyMjk3LDggQEAgc3RhdGljIHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSkKIAl1bnNpZ25lZCBsb25nIGFwaWQgPSBBUF9RSURfQ0FSRChxLSZndDthcHFuKTsKIAl1bnNpZ25lZCBsb25nIGFwcWkgPSBBUF9RSURfUVVFVUUocS0mZ3Q7YXBxbik7CiAKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKJiM0MzsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCAmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZfbGlzdCwgbm9kZSkgewogCQlpZiAodGVzdF9iaXRfaW52KGFwaWQsIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYXBtKSAmYW1wOyZhbXA7CiAJCSAgICB0ZXN0X2JpdF9pbnYoYXBxaSwgbWF0cml4X21kZXYtJmd0O21hdHJpeC5hcW0pKQpAQCAtMjMxNiw2ICYjNDM7MjMxOCw3IEBAIHN0YXRpYyBzc2l6ZV90IHN0YXR1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2OwogCXN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2ID0gdG9fYXBfZGV2KGRldik7CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKIAltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiAJcSA9IGRldl9nZXRfZHJ2ZGF0YSgmYW1wO2FwZGV2LSZndDtkZXZpY2UpOwogCW1hdHJpeF9tZGV2ID0gdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZShxKTsKQEAgLTIzNDMsNiAmIzQzOzIzNDYsNyBAQCBzdGF0aWMgc3NpemVfdCBzdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKIAogCXJldHVybiBuY2hhcnM7CiB9CkBAIC0yNDE1LDE0ICYjNDM7MjQxOSwxNyBAQCB2b2lkIHZmaW9fYXBfbWRldl91bnJlZ2lzdGVyKHZvaWQpCiAKIGludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpCiB7Ci0JaW50IHJldDsKJiM0MzsJaW50IHJldCwgYXBxbjsKIAlzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcTsKIAlERUNMQVJFX0JJVE1BUChhcG1fZmlsdGVyZWQsIEFQX0RFVklDRVMpOwogCXN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7CiAKJiM0MzsJYXBxbiA9IHRvX2FwX3F1ZXVlKCZhbXA7YXBkZXYtJmd0O2RldmljZSktJmd0O3FpZDsKJiM0MzsJbWF0cml4X21kZXYgPSBnZXRfdXBkYXRlX2xvY2tzX2J5X2FwcW4oYXBxbik7CiYjNDM7CiAJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZhbXA7YXBkZXYtJmd0O2RldmljZS5rb2JqLCAmYW1wO3ZmaW9fcXVldWVfYXR0cl9ncm91cCk7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKJiM0MzsJCWdvdG8gZXJyX3JlbGVhc2VfbG9ja3M7CiAKIAlxID0ga3phbGxvY19vYmooKnEpOwogCWlmICghcSkgewpAQCAtMjQzMCwxMSAmIzQzOzI0MzcsMTAgQEAgaW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldikKIAkJZ290byBlcnJfcmVtb3ZlX2dyb3VwOwogCX0KIAotCXEtJmd0O2FwcW4gPSB0b19hcF9xdWV1ZSgmYW1wO2FwZGV2LSZndDtkZXZpY2UpLSZndDtxaWQ7CiYjNDM7CXEtJmd0O2FwcW4gPSBhcHFuOwogCXEtJmd0O3NhdmVkX2lzYyA9IFZGSU9fQVBfSVNDX0lOVkFMSUQ7CiAJbWVtc2V0KCZhbXA7cS0mZ3Q7cmVzZXRfc3RhdHVzLCAwLCBzaXplb2YocS0mZ3Q7cmVzZXRfc3RhdHVzKSk7CiAJSU5JVF9XT1JLKCZhbXA7cS0mZ3Q7cmVzZXRfd29yaywgYXBxX3Jlc2V0X2NoZWNrKTsKLQltYXRyaXhfbWRldiA9IGdldF91cGRhdGVfbG9ja3NfYnlfYXBxbihxLSZndDthcHFuKTsKIAogCWlmIChtYXRyaXhfbWRldikgewogCQl2ZmlvX2FwX21kZXZfbGlua19xdWV1ZShtYXRyaXhfbWRldiwgcSk7CkBAIC0yNDY0LDYgJiM0MzsyNDcwLDggQEAgaW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldikKIAogZXJyX3JlbW92ZV9ncm91cDoKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmFtcDthcGRldi0mZ3Q7ZGV2aWNlLmtvYmosICZhbXA7dmZpb19xdWV1ZV9hdHRyX2dyb3VwKTsKJiM0MztlcnJfcmVsZWFzZV9sb2NrczoKJiM0MzsJcmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX21kZXYobWF0cml4X21kZXYpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI0OTksMTIgJiM0MzsyNTA3LDE1IEBAIHZvaWQgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldikKIAkvKgogCSAqIElmIHRoZSBxdWV1ZSBpcyBub3QgaW4gdGhlIGhvc3QmIzM5O3MgQVAgY29uZmlndXJhdGlvbiwgdGhlbiByZXNldHRpbmcKIAkgKiBpdCB3aWxsIGZhaWwgd2l0aCByZXNwb25zZSBjb2RlIDAxLCAoQVBRTiBub3QgdmFsaWQpOyBzbywgbGV0JiMzOTtzIG1ha2UKLQkgKiBzdXJlIGl0IGlzIGluIHRoZSBob3N0JiMzOTtzIGNvbmZpZy4KJiM0MzsJICogc3VyZSBpdCBpcyBpbiB0aGUgaG9zdCYjMzk7cyBjb25maWcuIElmIGl0IGlzIG5vdCwgdGhlbiBmcmVlIHRoZSBLVk0gR0lTQwomIzQzOwkgKiByZXNvdXJjZXMuCiAJICovCiAJaWYgKHRlc3RfYml0X2ludihhcGlkLCAodW5zaWduZWQgbG9uZyAqKW1hdHJpeF9kZXYtJmd0O2luZm8uYXBtKSAmYW1wOyZhbXA7CiAJICAgIHRlc3RfYml0X2ludihhcHFpLCAodW5zaWduZWQgbG9uZyAqKW1hdHJpeF9kZXYtJmd0O2luZm8uYXFtKSkgewogCQl2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUocSk7CiAJCWZsdXNoX3dvcmsoJmFtcDtxLSZndDtyZXNldF93b3JrKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTsKIAl9CiAKIGRvbmU6CkBAIC0yNTU5LDI0ICYjNDM7MjU3MCwyOCBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiwKIAkJCQkJdW5zaWduZWQgbG9uZyAqYXFyZW0sCiAJCQkJCXVuc2lnbmVkIGxvbmcgKmNkcmVtKQogewotCWludCBkb19ob3RwbHVnID0gMDsKJiM0MzsJYm9vbCBkb19ob3RwbHVnID0gZmFsc2U7CiAKLQlpZiAoIWJpdG1hcF9lbXB0eShhcHJlbSwgQVBfREVWSUNFUykpIHsKLQkJZG9faG90cGx1ZyB8PSBiaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hcG0sCi0JCQkJCSAgICBtYXRyaXhfbWRldi0mZ3Q7c2hhZG93X2FwY2IuYXBtLAotCQkJCQkgICAgYXByZW0sIEFQX0RFVklDRVMpOwomIzQzOwlpZiAoYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtJmd0O3NoYWRvd19hcGNiLmFwbSwgYXByZW0sIEFQX0RFVklDRVMpKSB7CiYjNDM7CQliaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hcG0sCiYjNDM7CQkJICAgICAgbWF0cml4X21kZXYtJmd0O3NoYWRvd19hcGNiLmFwbSwKJiM0MzsJCQkgICAgICBhcHJlbSwgQVBfREVWSUNFUyk7CiYjNDM7CQlkb19ob3RwbHVnID0gdHJ1ZTsKIAl9CiAKLQlpZiAoIWJpdG1hcF9lbXB0eShhcXJlbSwgQVBfRE9NQUlOUykpIHsKLQkJZG9faG90cGx1ZyB8PSBiaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hcW0sCi0JCQkJCSAgICBtYXRyaXhfbWRldi0mZ3Q7c2hhZG93X2FwY2IuYXFtLAotCQkJCQkgICAgYXFyZW0sIEFQX0RFVklDRVMpOwomIzQzOwlpZiAoYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtJmd0O3NoYWRvd19hcGNiLmFxbSwgYXFyZW0sIEFQX0RPTUFJTlMpKSB7CiYjNDM7CQliaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hcW0sCiYjNDM7CQkJICAgICAgbWF0cml4X21kZXYtJmd0O3NoYWRvd19hcGNiLmFxbSwKJiM0MzsJCQkgICAgICBhcXJlbSwgQVBfRE9NQUlOUyk7CiYjNDM7CQlkb19ob3RwbHVnID0gdHJ1ZTsKIAl9CiAKLQlpZiAoIWJpdG1hcF9lbXB0eShjZHJlbSwgQVBfRE9NQUlOUykpCi0JCWRvX2hvdHBsdWcgfD0gYml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi0mZ3Q7c2hhZG93X2FwY2IuYWRtLAotCQkJCQkgICAgbWF0cml4X21kZXYtJmd0O3NoYWRvd19hcGNiLmFkbSwKLQkJCQkJICAgIGNkcmVtLCBBUF9ET01BSU5TKTsKJiM0MzsJaWYgKGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hZG0sIGNkcmVtLCBBUF9ET01BSU5TKSkgewomIzQzOwkJYml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi0mZ3Q7c2hhZG93X2FwY2IuYWRtLAomIzQzOwkJCSAgICAgIG1hdHJpeF9tZGV2LSZndDtzaGFkb3dfYXBjYi5hZG0sCiYjNDM7CQkJICAgICAgY2RyZW0sIEFQX0RPTUFJTlMpOwomIzQzOwkJZG9faG90cGx1ZyA9IHRydWU7CiYjNDM7CX0KIAogCWlmIChkb19ob3RwbHVnKQogCQl2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpOwpAQCAtMjYwMywyOCAmIzQzOzI2MTgsMzUgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmUodW5zaWduZWQgbG9uZyAqYXBfcmVtb3ZlLAogCURFQ0xBUkVfQklUTUFQKGFwcmVtLCBBUF9ERVZJQ0VTKTsKIAlERUNMQVJFX0JJVE1BUChhcXJlbSwgQVBfRE9NQUlOUyk7CiAJREVDTEFSRV9CSVRNQVAoY2RyZW0sIEFQX0RPTUFJTlMpOwotCWludCBkb19yZW1vdmUgPSAwOwomIzQzOwlpbnQgZG9fcmVtb3ZlOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgJmFtcDttYXRyaXhfZGV2LSZndDttZGV2X2xpc3QsIG5vZGUpIHsKLQkJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9tZGV2LSZndDtrdm0tJmd0O2xvY2spOwomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiBtYXRyaXhfbWRldiwKJiM0MzsJCSAqIGFuZCBrdm0tJmd0O2xvY2sgbXVzdCBiZSB0YWtlbiBiZWZvcmUgbWRldnNfbG9jayB0byBzYXRpc2Z5IHRoZSBsb2NrCiYjNDM7CQkgKiBvcmRlcmluZyByZXF1aXJlbWVudCBhbmQgcHJldmVudCBhIGxvY2tkZXAgc3BsYXQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChtYXRyaXhfbWRldi0mZ3Q7a3ZtKQomIzQzOwkJCW11dGV4X2xvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKIAkJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwogCi0JCWRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kKGFwcmVtLCBhcF9yZW1vdmUsCi0JCQkJCSAgbWF0cml4X21kZXYtJmd0O21hdHJpeC5hcG0sCi0JCQkJCSAgQVBfREVWSUNFUyk7CiYjNDM7CQlkb19yZW1vdmUgPSBiaXRtYXBfYW5kKGFwcmVtLCBhcF9yZW1vdmUsCiYjNDM7CQkJCSAgICAgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFwbSwKJiM0MzsJCQkJICAgICAgIEFQX0RFVklDRVMpOwogCQlkb19yZW1vdmUgfD0gYml0bWFwX2FuZChhcXJlbSwgYXFfcmVtb3ZlLAogCQkJCQkgIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYXFtLAogCQkJCQkgIEFQX0RPTUFJTlMpOwotCQlkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChjZHJlbSwgY2RfcmVtb3ZlLAotCQkJCQkgICAgIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYWRtLAotCQkJCQkgICAgIEFQX0RPTUFJTlMpOwomIzQzOwkJZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoY2RyZW0sIGNkX3JlbW92ZSwKJiM0MzsJCQkJCW1hdHJpeF9tZGV2LSZndDttYXRyaXguYWRtLAomIzQzOwkJCQkJQVBfRE9NQUlOUyk7CiAKIAkJaWYgKGRvX3JlbW92ZSkKIAkJCXZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZyhtYXRyaXhfbWRldiwgYXByZW0sIGFxcmVtLAogCQkJCQkJICAgIGNkcmVtKTsKIAogCQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9jayk7CiYjNDM7CQlpZiAobWF0cml4X21kZXYtJmd0O2t2bSkKJiM0MzsJCQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKIAl9CiB9CiAKQEAgLTI3NDksMTIgJiM0MzsyNzcxLDIwIEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfYWRkKHVuc2lnbmVkIGxvbmcgKmFwbV9hZGQsIHVuc2lnbmVkIGxvbmcgKmFxbV9hZGQsCiAJdmZpb19hcF9maWx0ZXJfYXBpZF9ieV9xdHlwZShhcG1fYWRkLCBhcW1fYWRkKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsICZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldl9saXN0LCBub2RlKSB7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIGluIG9yZGVyIHRvIGFjY2VzcyBmaWVsZHMKJiM0MzsJCSAqIHdpdGhpbiBtYXRyaXhfbWRldgomIzQzOwkJICovCiYjNDM7CQltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiYjNDM7CiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FwbV9hZGQsCiAJCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFwbSwgYXBtX2FkZCwgQVBfREVWSUNFUyk7CiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FxbV9hZGQsCiAJCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFxbSwgYXFtX2FkZCwgQVBfRE9NQUlOUyk7CiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FkbV9hZGQsCiAJCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFkbSwgYWRtX2FkZCwgQVBfREVWSUNFUyk7CiYjNDM7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKIAl9CiB9CiAKQEAgLTI4MjEsOCAmIzQzOzI4NTEsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpCiAJREVDTEFSRV9CSVRNQVAoYXBtX2ZpbHRlcmVkLCBBUF9ERVZJQ0VTKTsKIAlib29sIGZpbHRlcl9kb21haW5zLCBmaWx0ZXJfYWRhcHRlcnMsIGZpbHRlcl9jZG9tcywgZG9faG90cGx1ZyA9IGZhbHNlOwogCi0JbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9tZGV2LSZndDtrdm0tJmd0O2xvY2spOwotCW11dGV4X2xvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKJiM0MzsJYml0bWFwX3plcm8oYXBtX2ZpbHRlcmVkLCBBUF9ERVZJQ0VTKTsKIAogCWZpbHRlcl9hZGFwdGVycyA9IGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LSZndDttYXRyaXguYXBtLAogCQkJCQkgICAgbWF0cml4X21kZXYtJmd0O2FwbV9hZGQsIEFQX0RFVklDRVMpOwpAQCAtMjg0MSw5ICYjNDM7Mjg3MCw2IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldikKIAkJdmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTsKIAogCXJlc2V0X3F1ZXVlc19mb3JfYXBpZHMobWF0cml4X21kZXYsIGFwbV9maWx0ZXJlZCk7Ci0KLQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKLQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKIH0KIAogdm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sCkBAIC0yODU0LDE1ICYjNDM7Mjg4MCwyOSBAQCB2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbywKIAltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7Z3Vlc3RzX2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgJmFtcDttYXRyaXhfZGV2LSZndDttZGV2X2xpc3QsIG5vZGUpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgbWRldnNfbG9jayBtdXN0IGJlIGhlbGQgdG8gYWNjZXNzIGZpZWxkcyB3aXRoaW4gbWF0cml4X21kZXYsCiYjNDM7CQkgKiBhbmQga3ZtLSZndDtsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIG1kZXZzX2xvY2sgdG8gc2F0aXNmeSB0aGUgbG9jawomIzQzOwkJICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LgomIzQzOwkJICovCiYjNDM7CQlpZiAobWF0cml4X21kZXYtJmd0O2t2bSkKJiM0MzsJCQltdXRleF9sb2NrKCZhbXA7bWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9jayk7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiYjNDM7CiAJCWlmIChiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtJmd0O2FwbV9hZGQsIEFQX0RFVklDRVMpICZhbXA7JmFtcDsKIAkJICAgIGJpdG1hcF9lbXB0eShtYXRyaXhfbWRldi0mZ3Q7YXFtX2FkZCwgQVBfRE9NQUlOUykgJmFtcDsmYW1wOwogCQkgICAgYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LSZndDthZG1fYWRkLCBBUF9ET01BSU5TKSkKLQkJCWNvbnRpbnVlOwomIzQzOwkJCWdvdG8gZG9fdW5sb2NrOwogCiAJCXZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcobWF0cml4X21kZXYpOwogCQliaXRtYXBfY2xlYXIobWF0cml4X21kZXYtJmd0O2FwbV9hZGQsIDAsIEFQX0RFVklDRVMpOwogCQliaXRtYXBfY2xlYXIobWF0cml4X21kZXYtJmd0O2FxbV9hZGQsIDAsIEFQX0RPTUFJTlMpOwogCQliaXRtYXBfY2xlYXIobWF0cml4X21kZXYtJmd0O2FkbV9hZGQsIDAsIEFQX0RPTUFJTlMpOwomIzQzOwomIzQzO2RvX3VubG9jazoKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwomIzQzOwkJaWYgKG1hdHJpeF9tZGV2LSZndDtrdm0pCiYjNDM7CQkJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9jayk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7Z3Vlc3RzX2xvY2spOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjhtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYzNQoJCQkJCQkJb3V0cHV0OiAxMjUKCQkJCQkJCXRob3VnaHRzOiA2MjkxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcHJpbWFyaWx5IGFkZHJlc3NlcyBsb2NraW5nIGlzc3VlcyAoZS5nLiwgY2hhbmdpbmcgbWRldnNfbG9jayB0byBndWVzdHNfbG9jaywgZml4aW5nIGxvY2sgb3JkZXJpbmcgdG8gcHJldmVudCBsb2NrZGVwIHNwbGF0cyksIGZpeGVzIG1lbW9yeSBsZWFrcy9yZXNvdXJjZSBjbGVhbnVwIGluIGVycm9yIHBhdGhzLCBhbmQgY29ycmVjdHMgbG9naWMgYnVncyBpbnZvbHZpbmcgYml0bWFwIG9wZXJhdGlvbnMgKGJpdG1hcF9hbmRub3QgdnMgYml0bWFwX2ludGVyc2VjdHMpLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCBvciBtYW5pcHVsYXRlZC4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSByZWdyZXNzaW9ucyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBwcmltYXJpbHkgYWRkcmVzc2VzIGxvY2tpbmcgaXNzdWVzIChlLmcuLCBjaGFuZ2luZyBtZGV2c19sb2NrIHRvIGd1ZXN0c19sb2NrLCBmaXhpbmcgbG9jayBvcmRlcmluZyB0byBwcmV2ZW50IGxvY2tkZXAgc3BsYXRzKSwgZml4ZXMgbWVtb3J5IGxlYWtzL3Jlc291cmNlIGNsZWFudXAgaW4gZXJyb3IgcGF0aHMsIGFuZCBjb3JyZWN0cyBsb2dpYyBidWdzIGludm9sdmluZyBiaXRtYXAgb3BlcmF0aW9ucyAoYml0bWFwX2FuZG5vdCB2cyBiaXRtYXBfaW50ZXJzZWN0cykuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIG9yIG1hbmlwdWxhdGVkLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHJlZ3Jlc3Npb25zIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjE6MjcuNjcyODMzNTcxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc3MzM5ODIyMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZGSU9cIixcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmaW9fYXBfbWRldl9wcm9iZVwiLFxuICAgIFwidmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlXCIsXG4gICAgXCJ2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlXCIsXG4gICAgXCJ2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVcIixcbiAgICBcInZmaW9fYXBfb25fY2ZnX2NoYW5nZWRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByaW1hcmlseSBhZGRyZXNzZXMgbG9ja2luZyBpc3N1ZXMgKGUuZy4sIGNoYW5naW5nIG1kZXZzX2xvY2sgdG8gZ3Vlc3RzX2xvY2ssIGZpeGluZyBsb2NrIG9yZGVyaW5nIHRvIHByZXZlbnQgbG9ja2RlcCBzcGxhdHMpLCBmaXhlcyBtZW1vcnkgbGVha3MvcmVzb3VyY2UgY2xlYW51cCBpbiBlcnJvciBwYXRocywgYW5kIGNvcnJlY3RzIGxvZ2ljIGJ1Z3MgaW52b2x2aW5nIGJpdG1hcCBvcGVyYXRpb25zIChiaXRtYXBfYW5kbm90IHZzIGJpdG1hcF9pbnRlcnNlY3RzKS4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgb3IgbWFuaXB1bGF0ZWQuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbnMgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkwIGFyY2hpdGVjdHVyZSwgZml4aW5nIGxvY2sgb3JkZXJpbmcgYW5kIGxvY2tkZXAgc3BsYXRzIGluIHZhcmlvdXMgbWRldiBhbmQgQVAgYnVzIGNhbGxiYWNrcyAoZS5nLiwgdmZpb19hcF9tZGV2X3Byb2JlLCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB3aGVuIHRoZSB2ZmlvX2FwIGRyaXZlciBpcyBsb2FkZWQgYW5kIG1kZXYgZGV2aWNlcyBhcmUgY3JlYXRlZCB2aWEgc3lzZnMsIG9yIHdoZW4gdGhlIEFQIGJ1cyBwZXJpb2RpY2FsbHkgc2NhbnMgZm9yIGRldmljZXMuIFN5emthbGxlciBjYW4gdHJpZ2dlciB0aGVzZSBwYXRocyBpbiBzMzkweCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IEFQIGluc3RydWN0aW9ucyAoZS5nLiwgS1ZNIG9uIHMzOTB4IG1haW5mcmFtZXMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMToyNy42NzI4NDEwMzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODM0ODYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRjOTYyOGI5ZDVhYjI3OWIzMTAwYTVlMGMwYjBkMGNkOGJlODIwNWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTI6MjE6MjYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXFxuaW5kZXggNDRiM2ExZGNjMWIzNi4uZmFhYjVlOTE3OWZmMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcXG4rKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcXG5AQCAtODAzLDkgKzgwMyw5IEBAIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Byb2JlKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldilcXG4gXFx0bWF0cml4X21kZXYtXFx1MDAzZXJlcV90cmlnZ2VyID0gTlVMTDtcXG4gXFx0bWF0cml4X21kZXYtXFx1MDAzZWNmZ19jaGdfdHJpZ2dlciA9IE5VTEw7XFxuIFxcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2bWRldi1cXHUwMDNlZGV2LCBtYXRyaXhfbWRldik7XFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZzX2xvY2spO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VndWVzdHNfbG9jayk7XFxuIFxcdGxpc3RfYWRkKFxcdTAwMjZtYXRyaXhfbWRldi1cXHUwMDNlbm9kZSwgXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfbGlzdCk7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZ3Vlc3RzX2xvY2spO1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGVycl9wdXRfdmRldjpcXG5AQCAtMjI5Nyw2ICsyMjk3LDggQEAgc3RhdGljIHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcXG4gXFx0dW5zaWduZWQgbG9uZyBhcGlkID0gQVBfUUlEX0NBUkQocS1cXHUwMDNlYXBxbik7XFxuIFxcdHVuc2lnbmVkIGxvbmcgYXBxaSA9IEFQX1FJRF9RVUVVRShxLVxcdTAwM2VhcHFuKTtcXG4gXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWd1ZXN0c19sb2NrKTtcXG4rXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsIFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2X2xpc3QsIG5vZGUpIHtcXG4gXFx0XFx0aWYgKHRlc3RfYml0X2ludihhcGlkLCBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFwbSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIHRlc3RfYml0X2ludihhcHFpLCBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFxbSkpXFxuQEAgLTIzMTYsNiArMjMxOCw3IEBAIHN0YXRpYyBzc2l6ZV90IHN0YXR1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4gXFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcXG4gXFx0c3RydWN0IGFwX2RldmljZSAqYXBkZXYgPSB0b19hcF9kZXYoZGV2KTtcXG4gXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWd1ZXN0c19sb2NrKTtcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuIFxcdHEgPSBkZXZfZ2V0X2RydmRhdGEoXFx1MDAyNmFwZGV2LVxcdTAwM2VkZXZpY2UpO1xcbiBcXHRtYXRyaXhfbWRldiA9IHZmaW9fYXBfbWRldl9mb3JfcXVldWUocSk7XFxuQEAgLTIzNDMsNiArMjM0Niw3IEBAIHN0YXRpYyBzc2l6ZV90IHN0YXR1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4gXFx0fVxcbiBcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VndWVzdHNfbG9jayk7XFxuIFxcbiBcXHRyZXR1cm4gbmNoYXJzO1xcbiB9XFxuQEAgLTI0MTUsMTQgKzI0MTksMTcgQEAgdm9pZCB2ZmlvX2FwX21kZXZfdW5yZWdpc3Rlcih2b2lkKVxcbiBcXG4gaW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcXG4ge1xcbi1cXHRpbnQgcmV0O1xcbitcXHRpbnQgcmV0LCBhcHFuO1xcbiBcXHRzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcTtcXG4gXFx0REVDTEFSRV9CSVRNQVAoYXBtX2ZpbHRlcmVkLCBBUF9ERVZJQ0VTKTtcXG4gXFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcXG4gXFxuK1xcdGFwcW4gPSB0b19hcF9xdWV1ZShcXHUwMDI2YXBkZXYtXFx1MDAzZWRldmljZSktXFx1MDAzZXFpZDtcXG4rXFx0bWF0cml4X21kZXYgPSBnZXRfdXBkYXRlX2xvY2tzX2J5X2FwcW4oYXBxbik7XFxuK1xcbiBcXHRyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoXFx1MDAyNmFwZGV2LVxcdTAwM2VkZXZpY2Uua29iaiwgXFx1MDAyNnZmaW9fcXVldWVfYXR0cl9ncm91cCk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGdvdG8gZXJyX3JlbGVhc2VfbG9ja3M7XFxuIFxcbiBcXHRxID0ga3phbGxvY19vYmooKnEpO1xcbiBcXHRpZiAoIXEpIHtcXG5AQCAtMjQzMCwxMSArMjQzNywxMCBAQCBpbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxcbiBcXHRcXHRnb3RvIGVycl9yZW1vdmVfZ3JvdXA7XFxuIFxcdH1cXG4gXFxuLVxcdHEtXFx1MDAzZWFwcW4gPSB0b19hcF9xdWV1ZShcXHUwMDI2YXBkZXYtXFx1MDAzZWRldmljZSktXFx1MDAzZXFpZDtcXG4rXFx0cS1cXHUwMDNlYXBxbiA9IGFwcW47XFxuIFxcdHEtXFx1MDAzZXNhdmVkX2lzYyA9IFZGSU9fQVBfSVNDX0lOVkFMSUQ7XFxuIFxcdG1lbXNldChcXHUwMDI2cS1cXHUwMDNlcmVzZXRfc3RhdHVzLCAwLCBzaXplb2YocS1cXHUwMDNlcmVzZXRfc3RhdHVzKSk7XFxuIFxcdElOSVRfV09SSyhcXHUwMDI2cS1cXHUwMDNlcmVzZXRfd29yaywgYXBxX3Jlc2V0X2NoZWNrKTtcXG4tXFx0bWF0cml4X21kZXYgPSBnZXRfdXBkYXRlX2xvY2tzX2J5X2FwcW4ocS1cXHUwMDNlYXBxbik7XFxuIFxcbiBcXHRpZiAobWF0cml4X21kZXYpIHtcXG4gXFx0XFx0dmZpb19hcF9tZGV2X2xpbmtfcXVldWUobWF0cml4X21kZXYsIHEpO1xcbkBAIC0yNDY0LDYgKzI0NzAsOCBAQCBpbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxcbiBcXG4gZXJyX3JlbW92ZV9ncm91cDpcXG4gXFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFxcdTAwMjZhcGRldi1cXHUwMDNlZGV2aWNlLmtvYmosIFxcdTAwMjZ2ZmlvX3F1ZXVlX2F0dHJfZ3JvdXApO1xcbitlcnJfcmVsZWFzZV9sb2NrczpcXG4rXFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX21kZXYobWF0cml4X21kZXYpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbkBAIC0yNDk5LDEyICsyNTA3LDE1IEBAIHZvaWQgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcXG4gXFx0LypcXG4gXFx0ICogSWYgdGhlIHF1ZXVlIGlzIG5vdCBpbiB0aGUgaG9zdCdzIEFQIGNvbmZpZ3VyYXRpb24sIHRoZW4gcmVzZXR0aW5nXFxuIFxcdCAqIGl0IHdpbGwgZmFpbCB3aXRoIHJlc3BvbnNlIGNvZGUgMDEsIChBUFFOIG5vdCB2YWxpZCk7IHNvLCBsZXQncyBtYWtlXFxuLVxcdCAqIHN1cmUgaXQgaXMgaW4gdGhlIGhvc3QncyBjb25maWcuXFxuK1xcdCAqIHN1cmUgaXQgaXMgaW4gdGhlIGhvc3QncyBjb25maWcuIElmIGl0IGlzIG5vdCwgdGhlbiBmcmVlIHRoZSBLVk0gR0lTQ1xcbitcXHQgKiByZXNvdXJjZXMuXFxuIFxcdCAqL1xcbiBcXHRpZiAodGVzdF9iaXRfaW52KGFwaWQsICh1bnNpZ25lZCBsb25nICopbWF0cml4X2Rldi1cXHUwMDNlaW5mby5hcG0pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICB0ZXN0X2JpdF9pbnYoYXBxaSwgKHVuc2lnbmVkIGxvbmcgKiltYXRyaXhfZGV2LVxcdTAwM2VpbmZvLmFxbSkpIHtcXG4gXFx0XFx0dmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHEpO1xcbiBcXHRcXHRmbHVzaF93b3JrKFxcdTAwMjZxLVxcdTAwM2VyZXNldF93b3JrKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xcbiBcXHR9XFxuIFxcbiBkb25lOlxcbkBAIC0yNTU5LDI0ICsyNTcwLDI4IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICphcXJlbSxcXG4gXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqY2RyZW0pXFxuIHtcXG4tXFx0aW50IGRvX2hvdHBsdWcgPSAwO1xcbitcXHRib29sIGRvX2hvdHBsdWcgPSBmYWxzZTtcXG4gXFxuLVxcdGlmICghYml0bWFwX2VtcHR5KGFwcmVtLCBBUF9ERVZJQ0VTKSkge1xcbi1cXHRcXHRkb19ob3RwbHVnIHw9IGJpdG1hcF9hbmRub3QobWF0cml4X21kZXYtXFx1MDAzZXNoYWRvd19hcGNiLmFwbSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIG1hdHJpeF9tZGV2LVxcdTAwM2VzaGFkb3dfYXBjYi5hcG0sXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBhcHJlbSwgQVBfREVWSUNFUyk7XFxuK1xcdGlmIChiaXRtYXBfaW50ZXJzZWN0cyhtYXRyaXhfbWRldi1cXHUwMDNlc2hhZG93X2FwY2IuYXBtLCBhcHJlbSwgQVBfREVWSUNFUykpIHtcXG4rXFx0XFx0Yml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi1cXHUwMDNlc2hhZG93X2FwY2IuYXBtLFxcbitcXHRcXHRcXHQgICAgICBtYXRyaXhfbWRldi1cXHUwMDNlc2hhZG93X2FwY2IuYXBtLFxcbitcXHRcXHRcXHQgICAgICBhcHJlbSwgQVBfREVWSUNFUyk7XFxuK1xcdFxcdGRvX2hvdHBsdWcgPSB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIWJpdG1hcF9lbXB0eShhcXJlbSwgQVBfRE9NQUlOUykpIHtcXG4tXFx0XFx0ZG9faG90cGx1ZyB8PSBiaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LVxcdTAwM2VzaGFkb3dfYXBjYi5hcW0sXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBtYXRyaXhfbWRldi1cXHUwMDNlc2hhZG93X2FwY2IuYXFtLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgYXFyZW0sIEFQX0RFVklDRVMpO1xcbitcXHRpZiAoYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtXFx1MDAzZXNoYWRvd19hcGNiLmFxbSwgYXFyZW0sIEFQX0RPTUFJTlMpKSB7XFxuK1xcdFxcdGJpdG1hcF9hbmRub3QobWF0cml4X21kZXYtXFx1MDAzZXNoYWRvd19hcGNiLmFxbSxcXG4rXFx0XFx0XFx0ICAgICAgbWF0cml4X21kZXYtXFx1MDAzZXNoYWRvd19hcGNiLmFxbSxcXG4rXFx0XFx0XFx0ICAgICAgYXFyZW0sIEFQX0RPTUFJTlMpO1xcbitcXHRcXHRkb19ob3RwbHVnID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFiaXRtYXBfZW1wdHkoY2RyZW0sIEFQX0RPTUFJTlMpKVxcbi1cXHRcXHRkb19ob3RwbHVnIHw9IGJpdG1hcF9hbmRub3QobWF0cml4X21kZXYtXFx1MDAzZXNoYWRvd19hcGNiLmFkbSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIG1hdHJpeF9tZGV2LVxcdTAwM2VzaGFkb3dfYXBjYi5hZG0sXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBjZHJlbSwgQVBfRE9NQUlOUyk7XFxuK1xcdGlmIChiaXRtYXBfaW50ZXJzZWN0cyhtYXRyaXhfbWRldi1cXHUwMDNlc2hhZG93X2FwY2IuYWRtLCBjZHJlbSwgQVBfRE9NQUlOUykpIHtcXG4rXFx0XFx0Yml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi1cXHUwMDNlc2hhZG93X2FwY2IuYWRtLFxcbitcXHRcXHRcXHQgICAgICBtYXRyaXhfbWRldi1cXHUwMDNlc2hhZG93X2FwY2IuYWRtLFxcbitcXHRcXHRcXHQgICAgICBjZHJlbSwgQVBfRE9NQUlOUyk7XFxuK1xcdFxcdGRvX2hvdHBsdWcgPSB0cnVlO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoZG9faG90cGx1ZylcXG4gXFx0XFx0dmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTtcXG5AQCAtMjYwMywyOCArMjYxOCwzNSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZSh1bnNpZ25lZCBsb25nICphcF9yZW1vdmUsXFxuIFxcdERFQ0xBUkVfQklUTUFQKGFwcmVtLCBBUF9ERVZJQ0VTKTtcXG4gXFx0REVDTEFSRV9CSVRNQVAoYXFyZW0sIEFQX0RPTUFJTlMpO1xcbiBcXHRERUNMQVJFX0JJVE1BUChjZHJlbSwgQVBfRE9NQUlOUyk7XFxuLVxcdGludCBkb19yZW1vdmUgPSAwO1xcbitcXHRpbnQgZG9fcmVtb3ZlO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfbWRldi1cXHUwMDNla3ZtLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIHRvIGFjY2VzcyBmaWVsZHMgd2l0aGluIG1hdHJpeF9tZGV2LFxcbitcXHRcXHQgKiBhbmQga3ZtLVxcdTAwM2Vsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIG1kZXZzX2xvY2sgdG8gc2F0aXNmeSB0aGUgbG9ja1xcbitcXHRcXHQgKiBvcmRlcmluZyByZXF1aXJlbWVudCBhbmQgcHJldmVudCBhIGxvY2tkZXAgc3BsYXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobWF0cml4X21kZXYtXFx1MDAzZWt2bSlcXG4rXFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bWF0cml4X21kZXYtXFx1MDAzZWt2bS1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZzX2xvY2spO1xcbiBcXG4tXFx0XFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoYXByZW0sIGFwX3JlbW92ZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFwbSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBBUF9ERVZJQ0VTKTtcXG4rXFx0XFx0ZG9fcmVtb3ZlID0gYml0bWFwX2FuZChhcHJlbSwgYXBfcmVtb3ZlLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbWF0cml4X21kZXYtXFx1MDAzZW1hdHJpeC5hcG0sXFxuK1xcdFxcdFxcdFxcdCAgICAgICBBUF9ERVZJQ0VTKTtcXG4gXFx0XFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoYXFyZW0sIGFxX3JlbW92ZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFxbSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBBUF9ET01BSU5TKTtcXG4tXFx0XFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmRub3QoY2RyZW0sIGNkX3JlbW92ZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFkbSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBBUF9ET01BSU5TKTtcXG4rXFx0XFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoY2RyZW0sIGNkX3JlbW92ZSxcXG4rXFx0XFx0XFx0XFx0XFx0bWF0cml4X21kZXYtXFx1MDAzZW1hdHJpeC5hZG0sXFxuK1xcdFxcdFxcdFxcdFxcdEFQX0RPTUFJTlMpO1xcbiBcXG4gXFx0XFx0aWYgKGRvX3JlbW92ZSlcXG4gXFx0XFx0XFx0dmZpb19hcF9tZGV2X2hvdF91bnBsdWdfY2ZnKG1hdHJpeF9tZGV2LCBhcHJlbSwgYXFyZW0sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBjZHJlbSk7XFxuIFxcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZzX2xvY2spO1xcbi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0tXFx1MDAzZWxvY2spO1xcbitcXHRcXHRpZiAobWF0cml4X21kZXYtXFx1MDAzZWt2bSlcXG4rXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfbWRldi1cXHUwMDNla3ZtLVxcdTAwM2Vsb2NrKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0yNzQ5LDEyICsyNzcxLDIwIEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfYWRkKHVuc2lnbmVkIGxvbmcgKmFwbV9hZGQsIHVuc2lnbmVkIGxvbmcgKmFxbV9hZGQsXFxuIFxcdHZmaW9fYXBfZmlsdGVyX2FwaWRfYnlfcXR5cGUoYXBtX2FkZCwgYXFtX2FkZCk7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCBpbiBvcmRlciB0byBhY2Nlc3MgZmllbGRzXFxuK1xcdFxcdCAqIHdpdGhpbiBtYXRyaXhfbWRldlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuK1xcbiBcXHRcXHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVxcdTAwM2VhcG1fYWRkLFxcbiBcXHRcXHRcXHQgICBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFwbSwgYXBtX2FkZCwgQVBfREVWSUNFUyk7XFxuIFxcdFxcdGJpdG1hcF9hbmQobWF0cml4X21kZXYtXFx1MDAzZWFxbV9hZGQsXFxuIFxcdFxcdFxcdCAgIG1hdHJpeF9tZGV2LVxcdTAwM2VtYXRyaXguYXFtLCBhcW1fYWRkLCBBUF9ET01BSU5TKTtcXG4gXFx0XFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cXHUwMDNlYWRtX2FkZCxcXG4gXFx0XFx0XFx0ICAgbWF0cml4X21kZXYtXFx1MDAzZW1hdHJpeC5hZG0sIGFkbV9hZGQsIEFQX0RFVklDRVMpO1xcbitcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0yODIxLDggKzI4NTEsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXFxuIFxcdERFQ0xBUkVfQklUTUFQKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XFxuIFxcdGJvb2wgZmlsdGVyX2RvbWFpbnMsIGZpbHRlcl9hZGFwdGVycywgZmlsdGVyX2Nkb21zLCBkb19ob3RwbHVnID0gZmFsc2U7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfbWRldi1cXHUwMDNla3ZtLVxcdTAwM2Vsb2NrKTtcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuK1xcdGJpdG1hcF96ZXJvKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XFxuIFxcbiBcXHRmaWx0ZXJfYWRhcHRlcnMgPSBiaXRtYXBfaW50ZXJzZWN0cyhtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFwbSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIG1hdHJpeF9tZGV2LVxcdTAwM2VhcG1fYWRkLCBBUF9ERVZJQ0VTKTtcXG5AQCAtMjg0MSw5ICsyODcwLDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxcbiBcXHRcXHR2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpO1xcbiBcXG4gXFx0cmVzZXRfcXVldWVzX2Zvcl9hcGlkcyhtYXRyaXhfbWRldiwgYXBtX2ZpbHRlcmVkKTtcXG4tXFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X21kZXYtXFx1MDAzZWt2bS1cXHUwMDNlbG9jayk7XFxuIH1cXG4gXFxuIHZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxcbkBAIC0yODU0LDE1ICsyODgwLDI5IEBAIHZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VndWVzdHNfbG9jayk7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiBtYXRyaXhfbWRldixcXG4rXFx0XFx0ICogYW5kIGt2bS1cXHUwMDNlbG9jayBtdXN0IGJlIHRha2VuIGJlZm9yZSBtZGV2c19sb2NrIHRvIHNhdGlzZnkgdGhlIGxvY2tcXG4rXFx0XFx0ICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKG1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0pXFxuK1xcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0tXFx1MDAzZWxvY2spO1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4rXFxuIFxcdFxcdGlmIChiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXFx1MDAzZWFwbV9hZGQsIEFQX0RFVklDRVMpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXFx1MDAzZWFxbV9hZGQsIEFQX0RPTUFJTlMpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXFx1MDAzZWFkbV9hZGQsIEFQX0RPTUFJTlMpKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0Z290byBkb191bmxvY2s7XFxuIFxcbiBcXHRcXHR2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKG1hdHJpeF9tZGV2KTtcXG4gXFx0XFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVxcdTAwM2VhcG1fYWRkLCAwLCBBUF9ERVZJQ0VTKTtcXG4gXFx0XFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVxcdTAwM2VhcW1fYWRkLCAwLCBBUF9ET01BSU5TKTtcXG4gXFx0XFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVxcdTAwM2VhZG1fYWRkLCAwLCBBUF9ET01BSU5TKTtcXG4rXFxuK2RvX3VubG9jazpcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4rXFx0XFx0aWYgKG1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0pXFxuK1xcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X21kZXYtXFx1MDAzZWt2bS1cXHUwMDNlbG9jayk7XFxuIFxcdH1cXG4gXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZ3Vlc3RzX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMToyOC4xMzI2ODg1NTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNjU1MTEyMDUzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkZJT1wiLFxuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19hcF9tZGV2X3Byb2JlXCIsXG4gICAgXCJ2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWVcIixcbiAgICBcInZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWVcIixcbiAgICBcInZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZVwiLFxuICAgIFwidmZpb19hcF9vbl9jZmdfY2hhbmdlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkwIGFyY2hpdGVjdHVyZSwgZml4aW5nIGxvY2sgb3JkZXJpbmcgYW5kIGxvY2tkZXAgc3BsYXRzIGluIHZhcmlvdXMgbWRldiBhbmQgQVAgYnVzIGNhbGxiYWNrcyAoZS5nLiwgdmZpb19hcF9tZGV2X3Byb2JlLCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB3aGVuIHRoZSB2ZmlvX2FwIGRyaXZlciBpcyBsb2FkZWQgYW5kIG1kZXYgZGV2aWNlcyBhcmUgY3JlYXRlZCB2aWEgc3lzZnMsIG9yIHdoZW4gdGhlIEFQIGJ1cyBwZXJpb2RpY2FsbHkgc2NhbnMgZm9yIGRldmljZXMuIFN5emthbGxlciBjYW4gdHJpZ2dlciB0aGVzZSBwYXRocyBpbiBzMzkweCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IEFQIGluc3RydWN0aW9ucyAoZS5nLiwgS1ZNIG9uIHMzOTB4IG1haW5mcmFtZXMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYzk2MjhiOWQ1YWIyNzliMzEwMGE1ZTBjMGIwZDBjZDhiZTgyMDViXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTI6MjE6MjYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbmluZGV4IDQ0YjNhMWRjYzFiMzYuLmZhYWI1ZTkxNzlmZjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuQEAgLTgwMyw5ICs4MDMsOSBAQCBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9wcm9iZShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpXG4gXHRtYXRyaXhfbWRldi1cdTAwM2VyZXFfdHJpZ2dlciA9IE5VTEw7XG4gXHRtYXRyaXhfbWRldi1cdTAwM2VjZmdfY2hnX3RyaWdnZXIgPSBOVUxMO1xuIFx0ZGV2X3NldF9kcnZkYXRhKFx1MDAyNm1kZXYtXHUwMDNlZGV2LCBtYXRyaXhfbWRldik7XG4tXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4rXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2spO1xuIFx0bGlzdF9hZGQoXHUwMDI2bWF0cml4X21kZXYtXHUwMDNlbm9kZSwgXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2X2xpc3QpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJfcHV0X3ZkZXY6XG5AQCAtMjI5Nyw2ICsyMjk3LDggQEAgc3RhdGljIHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcbiBcdHVuc2lnbmVkIGxvbmcgYXBpZCA9IEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbik7XG4gXHR1bnNpZ25lZCBsb25nIGFwcWkgPSBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKTtcbiBcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4rXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuIFx0XHRpZiAodGVzdF9iaXRfaW52KGFwaWQsIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcG0pIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgdGVzdF9iaXRfaW52KGFwcWksIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcW0pKVxuQEAgLTIzMTYsNiArMjMxOCw3IEBAIHN0YXRpYyBzc2l6ZV90IHN0YXR1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XG4gXHRzdHJ1Y3QgYXBfZGV2aWNlICphcGRldiA9IHRvX2FwX2RldihkZXYpO1xuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiBcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiBcdHEgPSBkZXZfZ2V0X2RydmRhdGEoXHUwMDI2YXBkZXYtXHUwMDNlZGV2aWNlKTtcbiBcdG1hdHJpeF9tZGV2ID0gdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZShxKTtcbkBAIC0yMzQzLDYgKzIzNDYsNyBAQCBzdGF0aWMgc3NpemVfdCBzdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHR9XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiBcbiBcdHJldHVybiBuY2hhcnM7XG4gfVxuQEAgLTI0MTUsMTQgKzI0MTksMTcgQEAgdm9pZCB2ZmlvX2FwX21kZXZfdW5yZWdpc3Rlcih2b2lkKVxuIFxuIGludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXG4ge1xuLVx0aW50IHJldDtcbitcdGludCByZXQsIGFwcW47XG4gXHRzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcTtcbiBcdERFQ0xBUkVfQklUTUFQKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XG4gXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuIFxuK1x0YXBxbiA9IHRvX2FwX3F1ZXVlKFx1MDAyNmFwZGV2LVx1MDAzZWRldmljZSktXHUwMDNlcWlkO1xuK1x0bWF0cml4X21kZXYgPSBnZXRfdXBkYXRlX2xvY2tzX2J5X2FwcW4oYXBxbik7XG4rXG4gXHRyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoXHUwMDI2YXBkZXYtXHUwMDNlZGV2aWNlLmtvYmosIFx1MDAyNnZmaW9fcXVldWVfYXR0cl9ncm91cCk7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHRnb3RvIGVycl9yZWxlYXNlX2xvY2tzO1xuIFxuIFx0cSA9IGt6YWxsb2Nfb2JqKCpxKTtcbiBcdGlmICghcSkge1xuQEAgLTI0MzAsMTEgKzI0MzcsMTAgQEAgaW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcbiBcdFx0Z290byBlcnJfcmVtb3ZlX2dyb3VwO1xuIFx0fVxuIFxuLVx0cS1cdTAwM2VhcHFuID0gdG9fYXBfcXVldWUoXHUwMDI2YXBkZXYtXHUwMDNlZGV2aWNlKS1cdTAwM2VxaWQ7XG4rXHRxLVx1MDAzZWFwcW4gPSBhcHFuO1xuIFx0cS1cdTAwM2VzYXZlZF9pc2MgPSBWRklPX0FQX0lTQ19JTlZBTElEO1xuIFx0bWVtc2V0KFx1MDAyNnEtXHUwMDNlcmVzZXRfc3RhdHVzLCAwLCBzaXplb2YocS1cdTAwM2VyZXNldF9zdGF0dXMpKTtcbiBcdElOSVRfV09SSyhcdTAwMjZxLVx1MDAzZXJlc2V0X3dvcmssIGFwcV9yZXNldF9jaGVjayk7XG4tXHRtYXRyaXhfbWRldiA9IGdldF91cGRhdGVfbG9ja3NfYnlfYXBxbihxLVx1MDAzZWFwcW4pO1xuIFxuIFx0aWYgKG1hdHJpeF9tZGV2KSB7XG4gXHRcdHZmaW9fYXBfbWRldl9saW5rX3F1ZXVlKG1hdHJpeF9tZGV2LCBxKTtcbkBAIC0yNDY0LDYgKzI0NzAsOCBAQCBpbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuIFxuIGVycl9yZW1vdmVfZ3JvdXA6XG4gXHRzeXNmc19yZW1vdmVfZ3JvdXAoXHUwMDI2YXBkZXYtXHUwMDNlZGV2aWNlLmtvYmosIFx1MDAyNnZmaW9fcXVldWVfYXR0cl9ncm91cCk7XG4rZXJyX3JlbGVhc2VfbG9ja3M6XG4rXHRyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3JfbWRldihtYXRyaXhfbWRldik7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0yNDk5LDEyICsyNTA3LDE1IEBAIHZvaWQgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcbiBcdC8qXG4gXHQgKiBJZiB0aGUgcXVldWUgaXMgbm90IGluIHRoZSBob3N0J3MgQVAgY29uZmlndXJhdGlvbiwgdGhlbiByZXNldHRpbmdcbiBcdCAqIGl0IHdpbGwgZmFpbCB3aXRoIHJlc3BvbnNlIGNvZGUgMDEsIChBUFFOIG5vdCB2YWxpZCk7IHNvLCBsZXQncyBtYWtlXG4tXHQgKiBzdXJlIGl0IGlzIGluIHRoZSBob3N0J3MgY29uZmlnLlxuK1x0ICogc3VyZSBpdCBpcyBpbiB0aGUgaG9zdCdzIGNvbmZpZy4gSWYgaXQgaXMgbm90LCB0aGVuIGZyZWUgdGhlIEtWTSBHSVNDXG4rXHQgKiByZXNvdXJjZXMuXG4gXHQgKi9cbiBcdGlmICh0ZXN0X2JpdF9pbnYoYXBpZCwgKHVuc2lnbmVkIGxvbmcgKiltYXRyaXhfZGV2LVx1MDAzZWluZm8uYXBtKSBcdTAwMjZcdTAwMjZcbiBcdCAgICB0ZXN0X2JpdF9pbnYoYXBxaSwgKHVuc2lnbmVkIGxvbmcgKiltYXRyaXhfZGV2LVx1MDAzZWluZm8uYXFtKSkge1xuIFx0XHR2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUocSk7XG4gXHRcdGZsdXNoX3dvcmsoXHUwMDI2cS1cdTAwM2VyZXNldF93b3JrKTtcbitcdH0gZWxzZSB7XG4rXHRcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcbiBcdH1cbiBcbiBkb25lOlxuQEAgLTI1NTksMjQgKzI1NzAsMjggQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKmFxcmVtLFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICpjZHJlbSlcbiB7XG4tXHRpbnQgZG9faG90cGx1ZyA9IDA7XG4rXHRib29sIGRvX2hvdHBsdWcgPSBmYWxzZTtcbiBcbi1cdGlmICghYml0bWFwX2VtcHR5KGFwcmVtLCBBUF9ERVZJQ0VTKSkge1xuLVx0XHRkb19ob3RwbHVnIHw9IGJpdG1hcF9hbmRub3QobWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXBtLFxuLVx0XHRcdFx0XHQgICAgbWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXBtLFxuLVx0XHRcdFx0XHQgICAgYXByZW0sIEFQX0RFVklDRVMpO1xuK1x0aWYgKGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFwbSwgYXByZW0sIEFQX0RFVklDRVMpKSB7XG4rXHRcdGJpdG1hcF9hbmRub3QobWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXBtLFxuK1x0XHRcdCAgICAgIG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFwbSxcbitcdFx0XHQgICAgICBhcHJlbSwgQVBfREVWSUNFUyk7XG4rXHRcdGRvX2hvdHBsdWcgPSB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKCFiaXRtYXBfZW1wdHkoYXFyZW0sIEFQX0RPTUFJTlMpKSB7XG4tXHRcdGRvX2hvdHBsdWcgfD0gYml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hcW0sXG4tXHRcdFx0XHRcdCAgICBtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hcW0sXG4tXHRcdFx0XHRcdCAgICBhcXJlbSwgQVBfREVWSUNFUyk7XG4rXHRpZiAoYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXFtLCBhcXJlbSwgQVBfRE9NQUlOUykpIHtcbitcdFx0Yml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hcW0sXG4rXHRcdFx0ICAgICAgbWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXFtLFxuK1x0XHRcdCAgICAgIGFxcmVtLCBBUF9ET01BSU5TKTtcbitcdFx0ZG9faG90cGx1ZyA9IHRydWU7XG4gXHR9XG4gXG4tXHRpZiAoIWJpdG1hcF9lbXB0eShjZHJlbSwgQVBfRE9NQUlOUykpXG4tXHRcdGRvX2hvdHBsdWcgfD0gYml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hZG0sXG4tXHRcdFx0XHRcdCAgICBtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hZG0sXG4tXHRcdFx0XHRcdCAgICBjZHJlbSwgQVBfRE9NQUlOUyk7XG4rXHRpZiAoYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYWRtLCBjZHJlbSwgQVBfRE9NQUlOUykpIHtcbitcdFx0Yml0bWFwX2FuZG5vdChtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hZG0sXG4rXHRcdFx0ICAgICAgbWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYWRtLFxuK1x0XHRcdCAgICAgIGNkcmVtLCBBUF9ET01BSU5TKTtcbitcdFx0ZG9faG90cGx1ZyA9IHRydWU7XG4rXHR9XG4gXG4gXHRpZiAoZG9faG90cGx1ZylcbiBcdFx0dmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTtcbkBAIC0yNjAzLDI4ICsyNjE4LDM1IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlKHVuc2lnbmVkIGxvbmcgKmFwX3JlbW92ZSxcbiBcdERFQ0xBUkVfQklUTUFQKGFwcmVtLCBBUF9ERVZJQ0VTKTtcbiBcdERFQ0xBUkVfQklUTUFQKGFxcmVtLCBBUF9ET01BSU5TKTtcbiBcdERFQ0xBUkVfQklUTUFQKGNkcmVtLCBBUF9ET01BSU5TKTtcbi1cdGludCBkb19yZW1vdmUgPSAwO1xuK1x0aW50IGRvX3JlbW92ZTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4tXHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgbWRldnNfbG9jayBtdXN0IGJlIGhlbGQgdG8gYWNjZXNzIGZpZWxkcyB3aXRoaW4gbWF0cml4X21kZXYsXG4rXHRcdCAqIGFuZCBrdm0tXHUwMDNlbG9jayBtdXN0IGJlIHRha2VuIGJlZm9yZSBtZGV2c19sb2NrIHRvIHNhdGlzZnkgdGhlIGxvY2tcbitcdFx0ICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LlxuK1x0XHQgKi9cbitcdFx0aWYgKG1hdHJpeF9tZGV2LVx1MDAzZWt2bSlcbitcdFx0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuIFxuLVx0XHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZChhcHJlbSwgYXBfcmVtb3ZlLFxuLVx0XHRcdFx0XHQgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcG0sXG4tXHRcdFx0XHRcdCAgQVBfREVWSUNFUyk7XG4rXHRcdGRvX3JlbW92ZSA9IGJpdG1hcF9hbmQoYXByZW0sIGFwX3JlbW92ZSxcbitcdFx0XHRcdCAgICAgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXBtLFxuK1x0XHRcdFx0ICAgICAgIEFQX0RFVklDRVMpO1xuIFx0XHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZChhcXJlbSwgYXFfcmVtb3ZlLFxuIFx0XHRcdFx0XHQgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcW0sXG4gXHRcdFx0XHRcdCAgQVBfRE9NQUlOUyk7XG4tXHRcdGRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kbm90KGNkcmVtLCBjZF9yZW1vdmUsXG4tXHRcdFx0XHRcdCAgICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFkbSxcbi1cdFx0XHRcdFx0ICAgICBBUF9ET01BSU5TKTtcbitcdFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoY2RyZW0sIGNkX3JlbW92ZSxcbitcdFx0XHRcdFx0bWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFkbSxcbitcdFx0XHRcdFx0QVBfRE9NQUlOUyk7XG4gXG4gXHRcdGlmIChkb19yZW1vdmUpXG4gXHRcdFx0dmZpb19hcF9tZGV2X2hvdF91bnBsdWdfY2ZnKG1hdHJpeF9tZGV2LCBhcHJlbSwgYXFyZW0sXG4gXHRcdFx0XHRcdFx0ICAgIGNkcmVtKTtcbiBcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4rXHRcdGlmIChtYXRyaXhfbWRldi1cdTAwM2Vrdm0pXG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbiBcdH1cbiB9XG4gXG5AQCAtMjc0OSwxMiArMjc3MSwyMCBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX2FkZCh1bnNpZ25lZCBsb25nICphcG1fYWRkLCB1bnNpZ25lZCBsb25nICphcW1fYWRkLFxuIFx0dmZpb19hcF9maWx0ZXJfYXBpZF9ieV9xdHlwZShhcG1fYWRkLCBhcW1fYWRkKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCBpbiBvcmRlciB0byBhY2Nlc3MgZmllbGRzXG4rXHRcdCAqIHdpdGhpbiBtYXRyaXhfbWRldlxuK1x0XHQgKi9cbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuK1xuIFx0XHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVx1MDAzZWFwbV9hZGQsXG4gXHRcdFx0ICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFwbSwgYXBtX2FkZCwgQVBfREVWSUNFUyk7XG4gXHRcdGJpdG1hcF9hbmQobWF0cml4X21kZXYtXHUwMDNlYXFtX2FkZCxcbiBcdFx0XHQgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXFtLCBhcW1fYWRkLCBBUF9ET01BSU5TKTtcbiBcdFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cdTAwM2VhZG1fYWRkLFxuIFx0XHRcdCAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hZG0sIGFkbV9hZGQsIEFQX0RFVklDRVMpO1xuK1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiBcdH1cbiB9XG4gXG5AQCAtMjgyMSw4ICsyODUxLDcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuIFx0REVDTEFSRV9CSVRNQVAoYXBtX2ZpbHRlcmVkLCBBUF9ERVZJQ0VTKTtcbiBcdGJvb2wgZmlsdGVyX2RvbWFpbnMsIGZpbHRlcl9hZGFwdGVycywgZmlsdGVyX2Nkb21zLCBkb19ob3RwbHVnID0gZmFsc2U7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbi1cdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbitcdGJpdG1hcF96ZXJvKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XG4gXG4gXHRmaWx0ZXJfYWRhcHRlcnMgPSBiaXRtYXBfaW50ZXJzZWN0cyhtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXBtLFxuIFx0XHRcdFx0XHQgICAgbWF0cml4X21kZXYtXHUwMDNlYXBtX2FkZCwgQVBfREVWSUNFUyk7XG5AQCAtMjg0MSw5ICsyODcwLDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuIFx0XHR2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpO1xuIFxuIFx0cmVzZXRfcXVldWVzX2Zvcl9hcGlkcyhtYXRyaXhfbWRldiwgYXBtX2ZpbHRlcmVkKTtcbi1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbiB9XG4gXG4gdm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXG5AQCAtMjg1NCwxNSArMjg4MCwyOSBAQCB2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbyxcbiBcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgbWRldnNfbG9jayBtdXN0IGJlIGhlbGQgdG8gYWNjZXNzIGZpZWxkcyB3aXRoaW4gbWF0cml4X21kZXYsXG4rXHRcdCAqIGFuZCBrdm0tXHUwMDNlbG9jayBtdXN0IGJlIHRha2VuIGJlZm9yZSBtZGV2c19sb2NrIHRvIHNhdGlzZnkgdGhlIGxvY2tcbitcdFx0ICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LlxuK1x0XHQgKi9cbitcdFx0aWYgKG1hdHJpeF9tZGV2LVx1MDAzZWt2bSlcbitcdFx0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuK1xuIFx0XHRpZiAoYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LVx1MDAzZWFwbV9hZGQsIEFQX0RFVklDRVMpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LVx1MDAzZWFxbV9hZGQsIEFQX0RPTUFJTlMpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LVx1MDAzZWFkbV9hZGQsIEFQX0RPTUFJTlMpKVxuLVx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdGdvdG8gZG9fdW5sb2NrO1xuIFxuIFx0XHR2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKG1hdHJpeF9tZGV2KTtcbiBcdFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVx1MDAzZWFwbV9hZGQsIDAsIEFQX0RFVklDRVMpO1xuIFx0XHRiaXRtYXBfY2xlYXIobWF0cml4X21kZXYtXHUwMDNlYXFtX2FkZCwgMCwgQVBfRE9NQUlOUyk7XG4gXHRcdGJpdG1hcF9jbGVhcihtYXRyaXhfbWRldi1cdTAwM2VhZG1fYWRkLCAwLCBBUF9ET01BSU5TKTtcbitcbitkb191bmxvY2s6XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuK1x0XHRpZiAobWF0cml4X21kZXYtXHUwMDNla3ZtKVxuK1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4gXHR9XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMToyOC4xMzI2OTAzMDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDA4Nzc2MzUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipWRklPIEFQIERyaXZlciBVcGRhdGUgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGZvciBgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jYC4gVGhpcyBpcyB0aGUgVkZJTyBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUncyBBZGp1bmN0IFByb2Nlc3NvciAoQVApLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQncyBkZWFsaW5nIHdpdGggbG9ja2luZyBjaGFuZ2VzLiBUaGV5J3JlIHJlbmFtaW5nIGBtZGV2c19sb2NrYCB0byBgZ3Vlc3RzX2xvY2tgIGluIGB2ZmlvX2FwX21kZXZfcHJvYmVgLCBhZGRpbmcgbG9ja2RlcCBhc3NlcnRpb25zLCBhbmQgdXBkYXRpbmcgbG9jayB1c2FnZSBpbiBzZXZlcmFsIGZ1bmN0aW9ucyBsaWtlIGBzdGF0dXNfc2hvd2AsIGB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWVgLCBhbmQgYHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWVgLiBUaGVyZSBhcmUgYWxzbyBtb2RpZmljYXRpb25zIHRvIGhhbmRsZSBob3RwbHVnL3VucGx1ZyBjb25maWd1cmF0aW9ucyAoYHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZ2AsIGB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZWAsIGB2ZmlvX2FwX21kZXZfY2ZnX2FkZGAsIGB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnYCkgYW5kIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgIHdpdGggY2FyZWZ1bCBsb2NraW5nIGNvbnNpZGVyYXRpb25zLCB3aGljaCBpcyBnb29kLiBUaGV5J3JlIG1ha2luZyBhIGxvdCBvZiBjaGFuZ2VzIHRvIGVuc3VyZSBwcm9wZXIgbG9ja2luZy5cblxuQnV0IHRoaXMgcmFpc2VzIGEgcXVlc3Rpb246IGlzIHRoaXMgZHJpdmVyIHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50PyBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9uZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuIEl0J3MgYW4gczM5MC1zcGVjaWZpYyBkcml2ZXIsIHNvIEkgbmVlZCB0byB0aGluayBhYm91dCBpZiB0aGUgQVAgaGFyZHdhcmUgaXMgZW11bGF0ZWQuIFRoZSBjb2RlIHBhdGggaXMgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBpZiBpdCdzIGZ1enplZCBpbiBzdGFuZGFyZCBRRU1VLiBTeXprYWxsZXIgc3VwcG9ydHMgczM5MHgsIHNvIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgaXMgdGVsbGluZyBtZSB0byBjb25zaWRlciBpZiB0aGUgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBEb2VzIFFFTVUgZW11bGF0ZSB0aGUgczM5MHggQVAgaGFyZHdhcmUgaXRzZWxmPyBUaGlzIGRyaXZlciBpcyBgdmZpby1hcGAsIHdoaWNoIGlzIHBhc3MtdGhyb3VnaC4gSXMgdGhlIEFQIGhhcmR3YXJlIGVtdWxhdGVkPyBJIG5lZWQgdG8ga25vdyBpZiBRRU1VIHN1cHBvcnRzIFZGSU8gQVAgKmVtdWxhdGlvbiogb3IganVzdCBwYXNzLXRocm91Z2guIEkgbmVlZCB0byBzZWFyY2ggZm9yIGB2ZmlvX2FwX21kZXZfcHJvYmVgIG9yIGV4YW1pbmUgYHZmaW9fYXBfb3BzLmNgIGFuZCBgdmZpb19hcF9kcnYuY2AgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gVkZJTyBBUCBpcyBtZWFudCBmb3IgdGhlICpob3N0KiwgYnV0IGl04oCZcyBhbiBtZGV2IGRyaXZlciwgc28gdGhlIHJlYWwgcXVlc3Rpb24gaXMgaG93IHRvIGNyZWF0ZSBtZGV2IGRldmljZXMgd2l0aG91dCBwaHlzaWNhbCBBUCBoYXJkd2FyZS4gVGhpcyBpcyBrZXkuIFRoZSBsb2NraW5nIGNoYW5nZXMgYXJlIGltcG9ydGFudCwgYnV0IGlmIHRoZSBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUsIHRoZW4gdGhlIGxvY2tpbmcgYmVjb21lcyBtb290LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiByZWFjaCB0aGF0IGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MzgsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMTozOC4yMjA0NTcyODRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2OTAzMTcyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX2FwX21kZXZfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTU4PXN0YXRpYyBzdHJ1Y3QgYXBfZHJpdmVyIHZmaW9fYXBfZHJ2ID0ge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo1OTpcXHQucHJvYmUgPSB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTYwLVxcdC5yZW1vdmUgPSB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTc3Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWRldl9pbml0X2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzg5LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo3OTA6c3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03OTEte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNzg9c3RhdGljIHN0cnVjdCBtZGV2X2RyaXZlciB2ZmlvX2FwX21hdHJpeF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM4Ni1cXHR9LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMzg3OlxcdC5wcm9iZSA9IHZmaW9fYXBfbWRldl9wcm9iZSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM4OC1cXHQucmVtb3ZlID0gdmZpb19hcF9tZGV2X3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNDE0PXZvaWQgdmZpb19hcF9tZGV2X3VucmVnaXN0ZXIodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDE5LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNDIwOmludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0MjEte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaD0xNTY9dm9pZCB2ZmlvX2FwX21kZXZfdW5yZWdpc3Rlcih2b2lkKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE1Ny1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE1ODppbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKnF1ZXVlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE1OS12b2lkIHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqcXVldWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMTo0MC4xODk0OTQ3MjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDk1MDM1Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIHZmaW9fYXAgYW5kIG1kZXYgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBgdmZpb19hcGAgYW5kIG1kZXYgYXJlIGludGVyYWN0aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgZHJpdmVyIG11c3QgcmVnaXN0ZXIgaXRzZWxmIHNvbWVob3cgYXMgYW4gbWRldiBkcml2ZXIuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIG1kZXYtcmVsYXRlZCBvcGVyYXRpb25zIG11c3QgYmUgaGFuZGxlZCB3aXRoaW4gdGhlIGB2ZmlvX2FwX21kZXZfcHJvYmVgIGZ1bmN0aW9uLCB0aGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UsIGVzcGVjaWFsbHkgYXMgdGhhdCdzIHdoYXQncyBjYWxsZWQgd2hlbiBhbiBtZGV2IGRldmljZSBpcyBjcmVhdGVkLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSAqY3JlYXRlKiBhbiBtZGV2IGRldmljZSBmb3IgdGhlIGB2ZmlvX2FwYCBkcml2ZXI/IFRoYXQncyB0aGUgcmVhbCBjcnV4IG9mIHRoZSBpc3N1ZSBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gVG8gZ2V0IHRoZSBkZXRhaWxzLCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmNgIGFuZCBzZWUgZXhhY3RseSBob3cgdGhleSdyZSByZWdpc3RlcmluZyB0aGUgbWRldiBwYXJlbnQuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgcG90ZW50aWFsIHByb2JsZW0pIGxpa2VseSByZXNpZGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY3MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIxOjQ2LjY4NDUzNDMyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDE5MTYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGV2X3JlZ2lzdGVyX3BhcmVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjM5MT1pbnQgdmZpb19hcF9tZGV2X3JlZ2lzdGVyKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQwMS1cXHRtYXRyaXhfZGV2LVxcdTAwM2VtZGV2X3R5cGVzID0gXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfdHlwZTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjQwMjpcXHRyZXQgPSBtZGV2X3JlZ2lzdGVyX3BhcmVudChcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlcGFyZW50LCBcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZGV2aWNlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDAzLVxcdFxcdFxcdFxcdCAgIFxcdTAwMjZ2ZmlvX2FwX21hdHJpeF9kcml2ZXIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIxOjQ2LjczNDczMTYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxMzU3MTQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIFZGSU8tQVAgRGV2aWNlIFJlZ2lzdHJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGB2ZmlvX2FwX21kZXZfcmVnaXN0ZXJgIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGhlcmUsIGFuZCBpdCdzIGNhbGxpbmcgYG1kZXZfcmVnaXN0ZXJfcGFyZW50YC4gVGhhdCdzIHRoZSBjb3JlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLCByaWdodD8gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdHJpZ2dlci4gSXMgYHZmaW9fYXBfbWRldl9yZWdpc3RlcmAgZXhlY3V0ZWQgYXV0b21hdGljYWxseSB3aGVuZXZlciB0aGUgbW9kdWxlIGxvYWRzLCBvciBpcyB0aGVyZSBhIGRlcGVuZGVuY3kgb24gdGhlIGFjdHVhbCBwcmVzZW5jZSBvZiBBUCBoYXJkd2FyZT8gVGhlIGRpc3RpbmN0aW9uIGlzIGNyaXRpY2FsIGZvciBob3cgSSBhcmNoaXRlY3QgbXkgaW5pdGlhbGl6YXRpb24gYW5kIGVycm9yLWhhbmRsaW5nIHN0cmF0ZWdpZXMuIFRoaXMgZGV0ZXJtaW5lcyBpZiBJIGNhbiByZWx5IG9uIGl0cyBwcmVzZW5jZS4gSWYgaXQgaXMgb25seSBjYWxsZWQgb24gdGhlIHByZXNlbmNlIG9mIHRoZSBBUCBoYXJkd2FyZSwgdGhlbiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gaGFuZGxlIHRoZSBlZGdlIGNhc2Ugd2hlcmUgdGhlIG1vZHVsZSBsb2FkcyBidXQgdGhlIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50LiBBbmQgY29udmVyc2VseSwgaWYgaXQgaXMgdW5jb25kaXRpb25hbCwgaG93IGNhbiBJIGRldGVjdCB0aGF0IHRoZSBoYXJkd2FyZSAqaXMqIHByZXNlbnQsIGlmIG5lY2Vzc2FyeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIHByZXBhcmVkIGZvciBhbGwgc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTc1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjE6NTAuNjQ4MzA1OTY5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjEwODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fYXBfbWRldl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9MTY3PXN0YXRpYyBpbnQgX19pbml0IHZmaW9fYXBfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE4OC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTg5OlxcdHJldCA9IHZmaW9fYXBfbWRldl9yZWdpc3RlcigpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xOTAtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNzg9c3RhdGljIHN0cnVjdCBtZGV2X2RyaXZlciB2ZmlvX2FwX21hdHJpeF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM5MC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjM5MTppbnQgdmZpb19hcF9tZGV2X3JlZ2lzdGVyKHZvaWQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzOTIte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaD0xNDM9c3RydWN0IHZmaW9fYXBfcXVldWUge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNTQtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoxNTU6aW50IHZmaW9fYXBfbWRldl9yZWdpc3Rlcih2b2lkKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE1Ni12b2lkIHZmaW9fYXBfbWRldl91bnJlZ2lzdGVyKHZvaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMTo1MC42OTc1MjE5MDdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDAxOTAwOTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIFZGSU8tQVAgRHJpdmVyIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBWRklPLUFQIGRyaXZlci4gTGV0J3Mgc3RhcnQgd2l0aCBgdmZpb19hcF9pbml0YCwgd2hpY2ggSSBrbm93IHJlc2lkZXMgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGhvb2tzIGl0c2VsZiBpbnRvIHRoZSBzeXN0ZW0sIHJlZ2lzdGVycyB3aXRoIHRoZSBWRklPIGNvcmUsIGFuZCBzcGVjaWZpY2FsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBBUCAoQWNjZWxlcmF0b3IgUHJvY2VzcykgaGFyZHdhcmUgb24gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIHRoZSBkZXZpY2UgcHJvYmluZywgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kIGFueSBwb3RlbnRpYWwgcG93ZXIgbWFuYWdlbWVudCByZWxhdGVkIGluaXRpYWxpc2F0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBkcml2ZXIgc2V0cyB1cCB0aGUgbmVjZXNzYXJ5IHN0cnVjdHVyZXMgZm9yIG1hbmFnaW5nIHRoZSBBUCBkZXZpY2VzIGFuZCB0aGVpciBhc3NvY2lhdGVkIERNQSBtYXBwaW5ncyBmb3IgSU9NTVVzLiBJJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IGl0IGhhbmRsZXMgZXJyb3IgY29uZGl0aW9ucyBhbmQgaG90cGx1ZyBzY2VuYXJpb3MgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBMZXQncyBzZWUgaG93IHRoZXkndmUgaGFuZGxlZCB0aGUgY29tcGxleGl0aWVzIG9mIEFQIGRldmljZSBhY2Nlc3MgYW5kIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLiBUaGlzIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBWRklPLUFQIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBjcnlwdG8gaGFyZHdhcmUgYW5kIGVuYWJsZXMgdXNlcnNwYWNlIGFjY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg3OCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIxOjU0LjY5OTQyNTgzNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzM2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYwOlxcdFxcbiAxNjE6XFx0XFx0ZGVidWdfcmVnaXN0ZXJfdmlldyh2ZmlvX2FwX2RiZl9pbmZvLCBcXHUwMDI2ZGVidWdfc3ByaW50Zl92aWV3KTtcXG4gMTYyOlxcdFxcdGRlYnVnX3NldF9sZXZlbCh2ZmlvX2FwX2RiZl9pbmZvLCBEQkZfV0FSTik7XFxuIDE2MzpcXHRcXG4gMTY0OlxcdFxcdHJldHVybiAwO1xcbiAxNjU6XFx0fVxcbiAxNjY6XFx0XFxuIDE2NzpcXHRzdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcXG4gMTY4OlxcdHtcXG4gMTY5OlxcdFxcdGludCByZXQ7XFxuIDE3MDpcXHRcXG4gMTcxOlxcdFxcdHJldCA9IHZmaW9fYXBfZGJmX2luZm9faW5pdCgpO1xcbiAxNzI6XFx0XFx0aWYgKHJldClcXG4gMTczOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdC8qIElmIHRoZXJlIGFyZSBubyBBUCBpbnN0cnVjdGlvbnMsIHRoZXJlIGlzIG5vdGhpbmcgdG8gcGFzcyB0aHJvdWdoLiAqL1xcbiAxNzY6XFx0XFx0aWYgKCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkpXFxuIDE3NzpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMTc4OlxcdFxcbiAxNzk6XFx0XFx0cmV0ID0gdmZpb19hcF9tYXRyaXhfZGV2X2NyZWF0ZSgpO1xcbiAxODA6XFx0XFx0aWYgKHJldClcXG4gMTgxOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE4MjpcXHRcXG4gMTgzOlxcdFxcdHJldCA9IGFwX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2dmZpb19hcF9kcnYsIFRISVNfTU9EVUxFLCBWRklPX0FQX0RSVl9OQU1FKTtcXG4gMTg0OlxcdFxcdGlmIChyZXQpIHtcXG4gMTg1OlxcdFxcdFxcdHZmaW9fYXBfbWF0cml4X2Rldl9kZXN0cm95KCk7XFxuIDE4NjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxODc6XFx0XFx0fVxcbiAxODg6XFx0XFxuIDE4OTpcXHRcXHRyZXQgPSB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIoKTtcXG4gMTkwOlxcdFxcdGlmIChyZXQpIHtcXG4gMTkxOlxcdFxcdFxcdGFwX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZ2ZmlvX2FwX2Rydik7XFxuIDE5MjpcXHRcXHRcXHR2ZmlvX2FwX21hdHJpeF9kZXZfZGVzdHJveSgpO1xcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxOTU6XFx0XFx0fVxcbiAxOTY6XFx0XFxuIDE5NzpcXHRcXHRyZXR1cm4gMDtcXG4gMTk4OlxcdH1cXG4gMTk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMTo1NC42OTk0OTY0MDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNTExNDE4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBIYXJkd2FyZSBDb21wYXRpYmlsaXR5IElzc3VlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYml0IG9mIGNvZGU6IGBpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkgcmV0dXJuIC1FTk9ERVY7YCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkhtbSwgdGhpcyBsb29rcyBsaWtlIGEgY2hlY2sgZm9yIHNwZWNpZmljIGhhcmR3YXJlIGF2YWlsYWJpbGl0eS5cIiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGd1YXJkaW5nIGFnYWluc3QgYXR0ZW1wdGluZyB0byBleGVjdXRlIGluc3RydWN0aW9ucyB0aGF0IG1pZ2h0IG5vdCBiZSBzdXBwb3J0ZWQuIFRoZSBxdWljayBleGl0IHdpdGggYC1FTk9ERVZgIChEZXZpY2UgTm90IEZvdW5kKSBpcyBhIGdvb2QgaW5kaWNhdGlvbiBvZiB0aGF0LlxuXG5Ob3csIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKWAgZnVuY3Rpb24gd2lsbCBhY3R1YWxseSAqcmV0dXJuIHRydWUqIGluIG15IFFFTVUgZW52aXJvbm1lbnQuIFFFTVUncyBlbXVsYXRlZCBoYXJkd2FyZSBpc24ndCBhbHdheXMgYSBwZXJmZWN0IG1hdGNoIGZvciByZWFsIGhhcmR3YXJlLCBhbmQgdGhhdCdzIHRoZSBjcnVjaWFsIHF1ZXN0aW9uLiBJIG5lZWQgdG8gZGlnIGludG8gd2hhdCBleGFjdGx5IGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgIGlzICpkb2luZyogdW5kZXIgdGhlIGhvb2QuIERvZXMgaXQgY2hlY2sgZm9yIGEgc3BlY2lmaWMgQ1BVIGZlYXR1cmUgZmxhZz8gSXMgaXQgcmVhZGluZyBzb21lIG1vZGVsLXNwZWNpZmljIHJlZ2lzdGVyPyBJcyBpdCBwcm9iaW5nIGZvciBhIGNlcnRhaW4gaW5zdHJ1Y3Rpb24gb3Bjb2RlPyBVbmRlcnN0YW5kaW5nICpob3cqIHRoaXMgY2hlY2sgd29ya3MgaXMgYWJzb2x1dGVseSBjcml0aWNhbCB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIGNvZGUgd2lsbCBydW4gY29ycmVjdGx5IHdpdGhpbiB0aGUgZW11bGF0ZWQgY29udGV4dC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZnVuY3Rpb24gYW5kIHNlZSB3aGF0J3MgcmVhbGx5IGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc0OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjE6NTguMzM0NjEzNjEyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzUyNDI5NTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFwX2luc3RydWN0aW9uc19hdmFpbGFibGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmg9NzI9dW5pb24gYXBfcXVldWVfc3RhdHVzX3JlZyB7XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaC04MC0vKipcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaDo4MTogKiBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkgLSBUZXN0IGlmIEFQIGluc3RydWN0aW9ucyBhcmUgYXZhaWxhYmxlLlxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oLTgyLSAqXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaC04NC0gKi9cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaDo4NTpzdGF0aWMgaW5saW5lIGJvb2wgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSh2b2lkKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcC5oLTg2LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMTA1PXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X2NyeXB0byhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE1MS1cXHRjYXNlIEtWTV9TMzkwX1ZNX0NSWVBUT19FTkFCTEVfQVBJRTpcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTE1MjpcXHRcXHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTUzLVxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTU4LVxcdGNhc2UgS1ZNX1MzOTBfVk1fQ1JZUFRPX0RJU0FCTEVfQVBJRTpcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTE1OTpcXHRcXHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSkge1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTYwLVxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yMTAwPXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1faGFzX2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIxNTYtXFx0XFx0Y2FzZSBLVk1fUzM5MF9WTV9DUllQVE9fRElTQUJMRV9BUElFOlxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMTU3OlxcdFxcdFxcdHJldCA9IGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSA/IDAgOiAtRU5YSU87XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIxNTgtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzEwMT1zdGF0aWMgaW50IGt2bV9zMzkwX2FweGFfaW5zdGFsbGVkKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEwNC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzEwNTpcXHRpZiAoYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKSB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxMDYtXFx0XFx0aWYgKGFwX3FjaShcXHUwMDI2aW5mbykgPT0gMClcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jPTU5Mj1zdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTYwMC1cXHQvKiBWZXJpZnkgdGhhdCB0aGUgQVAgaW5zdHJ1Y3Rpb24gYXJlIGF2YWlsYWJsZSAqL1xcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjYwMTpcXHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSlcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy02MDItXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0yNTc4PXN0YXRpYyBpbnQgX19pbml0IGFwX21vZHVsZV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI1ODEtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNTgyOlxcdGlmICghYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNTgzLVxcdFxcdHByX3dhcm4oXFxcIlRoZSBoYXJkd2FyZSBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBBUCBpbnN0cnVjdGlvbnNcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTE2Nz1zdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xNzUtXFx0LyogSWYgdGhlcmUgYXJlIG5vIEFQIGluc3RydWN0aW9ucywgdGhlcmUgaXMgbm90aGluZyB0byBwYXNzIHRocm91Z2guICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjE3NjpcXHRpZiAoIWFwX2luc3RydWN0aW9uc19hdmFpbGFibGUoKSlcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTc3LVxcdFxcdHJldHVybiAtRU5PREVWO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMjowMC4wODcwNDkwNDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NTExMTQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZWAqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGFwX2luc3RydWN0aW9uc19hdmFpbGFibGVgIHRoaW5nLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzIHdpdGggUy8zOTAgYXJjaGl0ZWN0dXJlIHNwZWNpZmljcywgaXMgdG8gY2hlY2sgdGhlIGhlYWRlciBmaWxlcy4gSSBmaWd1cmUgaXQncyBsaWtlbHkgZGVmaW5lZCB3aXRoaW4gdGhlIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vYXAuaGAgZGlyZWN0b3J5IOKAkyB0aGF0J3Mgd2hlcmUgdGhlIGFyY2hpdGVjdHVyYWwgc3BlY2lmaWNzIGZvciB0aGUgQWNjZXNzIFBhdGggZnVuY3Rpb25zIGFyZSB1c3VhbGx5IGRlY2xhcmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbWFjcm8sIGZ1bmN0aW9uLCBvciB2YXJpYWJsZSBtZWFucy4gSXMgaXQgYSBjb21waWxlLXRpbWUgY2hlY2s/IEEgcnVudGltZSBjYXBhYmlsaXR5IHRlc3Q/IFdoYXQga2luZCBvZiBBUCBpbnN0cnVjdGlvbnMgaXMgdGhpcyBtYWNybyBjb25jZXJuZWQgYWJvdXQ/IEtub3dpbmcgdGhpcyBpcyBpbXBvcnRhbnQgZm9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzIGFuZCBmb3IgdW5kZXJzdGFuZGluZyBhdmFpbGFibGUgaW5zdHJ1Y3Rpb25zLiBUaW1lIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgdG8gdGhlIGJvdHRvbSBvZiBpdC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNjksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMjowNC4yNTIxNjM4ODhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODA6XFx0LyoqXFxuICA4MTpcXHQgKiBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKCkgLSBUZXN0IGlmIEFQIGluc3RydWN0aW9ucyBhcmUgYXZhaWxhYmxlLlxcbiAgODI6XFx0ICpcXG4gIDgzOlxcdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgQVAgaW5zdHJ1Y3Rpb25zIGFyZSBpbnN0YWxsZWQsIG90aGVyd2lzZSBmYWxzZS5cXG4gIDg0OlxcdCAqL1xcbiAgODU6XFx0c3RhdGljIGlubGluZSBib29sIGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUodm9pZClcXG4gIDg2OlxcdHtcXG4gIDg3OlxcdFxcdHVuc2lnbmVkIGxvbmcgcmVnMCA9IEFQX01LUUlEKDAsIDApO1xcbiAgODg6XFx0XFx0dW5zaWduZWQgbG9uZyByZWcxID0gMDtcXG4gIDg5OlxcdFxcbiAgOTA6XFx0XFx0YXNtIHZvbGF0aWxlKFxcbiAgOTE6XFx0XFx0XFx0XFxcIlxcdGxnclxcdDAsJVtyZWcwXVxcXFxuXFxcIlxcdFxcdC8qIHFpZCBpbnRvIGdyMCAqL1xcbiAgOTI6XFx0XFx0XFx0XFxcIlxcdGxnaGlcXHQxLDBcXFxcblxcXCJcXHRcXHRcXHQvKiAwIGludG8gZ3IxICovXFxuICA5MzpcXHRcXHRcXHRcXFwiXFx0bGdoaVxcdDIsMFxcXFxuXFxcIlxcdFxcdFxcdC8qIDAgaW50byBncjIgKi9cXG4gIDk0OlxcdFxcdFxcdFxcXCJcXHQuaW5zblxcdHJyZSwweGIyYWYwMDAwLDAsMFxcXFxuXFxcIlxcdC8qIFBRQVAoVEFQUSkgKi9cXG4gIDk1OlxcdFxcdFxcdFxcXCIwOlxcdGxhXFx0JVtyZWcxXSwxXFxcXG5cXFwiXFx0XFx0LyogMSBpbnRvIHJlZzEgKi9cXG4gIDk2OlxcdFxcdFxcdFxcXCIxOlxcXFxuXFxcIlxcbiAgOTc6XFx0XFx0XFx0RVhfVEFCTEUoMGIsIDFiKVxcbiAgOTg6XFx0XFx0XFx0OiBbcmVnMV0gXFxcIitcXHUwMDI2ZFxcXCIgKHJlZzEpXFxuICA5OTpcXHRcXHRcXHQ6IFtyZWcwXSBcXFwiZFxcXCIgKHJlZzApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIyOjA0LjI1MjI1OTE1OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDEwMTUxOTk4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZlYXNpYmlsaXR5IG9mIEZ1enppbmcgdGhlIGB2ZmlvX2FwYCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBwb3NzaWJsZSB0byByZWFjaCBjZXJ0YWluIGNvZGUgcGF0aHMgd2l0aGluIHRoZSBgdmZpb19hcGAgZHJpdmVyIHVzaW5nIHN5emthbGxlciwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiB0aGUgczM5MHggYXJjaGl0ZWN0dXJlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyByZXZvbHZlcyBhcm91bmQgd2hldGhlciB0aGUgQVAgKEFkdmFuY2VkIFByb2Nlc3NvcikgaW5zdHJ1Y3Rpb25zIGFyZSBhY3R1YWxseSAqYXZhaWxhYmxlKiBpbiB0aGUgZW52aXJvbm1lbnRzIHdoZXJlIHN5emthbGxlciBpcyB0eXBpY2FsbHkgZGVwbG95ZWQuXG5cbkZpcnN0LCBJIG5lZWQgdG8ga25vdyBpZiB0aGUgYFBRQVBgIGluc3RydWN0aW9uLCB3aGljaCBpcyBjb3JlIHRvIEFQIGZ1bmN0aW9uYWxpdHksIGlzIGV2ZW4gZW11bGF0ZWQgYnkgUUVNVSBmb3IgczM5MHggZ3Vlc3RzLiBRRU1VICptaWdodCogZW11bGF0ZSBpdCBpZiBpdCdzIHJ1bm5pbmcgd2l0aCBLVk0gb24gYW4gczM5MHggaG9zdC4gQnV0IGlmIGl0J3MgaW4gVENHIG1vZGUgKHB1cmUgZW11bGF0aW9uKSwgcHJvYmFibHkgbm90LiBJIGtub3cgdGhhdCBzeXprYWxsZXIgcnVucyBzMzkweCBpbiBRRU1VIFRDRyBvbiB4ODZfNjQgaG9zdHMgYW5kIEtWTSBvbiBzMzkweCBob3N0cy5cblxuU2luY2UgdGhlIHByb21wdCBleHBsaWNpdGx5IG1lbnRpb25zIHNjZW5hcmlvcyB0aGF0IGFyZSAqaW1wb3NzaWJsZSogdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBJJ20gbm93IGhvbmluZyBpbiBvbiBBUCBoYXJkd2FyZSBlbXVsYXRpb24gaW4gUUVNVSBUQ0cgc3BlY2lmaWNhbGx5LiBUaGUgbW9yZSBJIHRoaW5rIGFib3V0IGl0LCBpdCdzIHZlcnkgdW5saWtlbHkgdGhhdCBRRU1VIFRDRyBlbXVsYXRlcyBBUCBoYXJkd2FyZSwgc2luY2UgdGhvc2UgYXJlIHNwZWNpYWxpemVkIG1haW5mcmFtZSBjcnlwdG8gY2FyZHMuXG5cbkkgY2FuJ3QgY2hlY2sgUUVNVSBzb3VyY2UgcmlnaHQgbm93LCBzbyBsZXQgbWUgcGl2b3QgYW5kIHNlZSBpZiB0aGUga2VybmVsIGl0c2VsZiBoYXMgc29mdHdhcmUgZW11bGF0b3JzIGZvciBBUC4gTm9wZSwgdGhhdCdzIGEgZGVhZCBlbmQuIEFQIGlzIGEgdHJ1ZSBoYXJkd2FyZSBmZWF0dXJlIG9mIElCTSBaIG1haW5mcmFtZXMuIFRoZW4gSSByZW1lbWJlciBgdmZpb19hcGAsIHdoaWNoIGlzICpmb3IqIHBhc3NpbmcgdGhyb3VnaCBBUCBkZXZpY2VzIHRvIEtWTSBndWVzdHMuIEl0IHJlZ2lzdGVycyBhcyBhbiBtZGV2IGRyaXZlciBpZiBpdCdzIGxvYWRlZC5cblxuVGhlIGNyaXRpY2FsIHBpZWNlIGhlcmU6IGNhbiB3ZSAqZXZlbiogY3JlYXRlIGFuIG1kZXYgZGV2aWNlIGZvciBgdmZpb19hcGAgaWYgdGhlcmUncyBubyBBUCBoYXJkd2FyZT8gTm8sIGJlY2F1c2UgYHZmaW9fYXBfaW5pdGAgcmV0dXJucyBgLUVOT0RFVmAgaWYgYCFhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgLiBUaGUgbW9kdWxlIHdvdWxkbid0IGV2ZW4gbG9hZC4gU28sIGRlZmluaXRlbHkgbm8gQVAgaW5zdHJ1Y3Rpb25zIGluIFFFTVUgVENHLiBBUCBpcyAqb25seSogYWNjZXNzaWJsZSB2aWEgS1ZNIHdoZW4gdGhlIGhvc3QgaGFzIHRoZSBoYXJkd2FyZSBhbmQgeW91IHVzZSBgdmZpb19hcGAgKG9yIGlmIHRoZSBob3N0IGtlcm5lbCBvZmZlcnMgQVAgdG8gdGhlIGd1ZXN0KS4gVGhvdWdoLCBzb21ldGltZXMgc3l6a2FsbGVyICpkb2VzKiBydW4gczM5MHggS1ZNIG9uIGFjdHVhbCBtYWluZnJhbWVzLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCByZWFjaGFiaWxpdHksIGlmIGl0IHdlcmUgdG8gcnVuIG9uIGEgczM5MHggTFBBUiBvciB6L1ZNIGd1ZXN0IChhY3RpbmcgYXMgdGhlIGhvc3QgZm9yIEtWTSkuIFRob3NlIG1pZ2h0IGhhdmUgcmVhbCBBUCBkZXZpY2VzLiBTbywgaXMgYHZmaW9fYXBgIGZ1enphYmxlPyBMZXQncyBjaGVjayB0aGUgY29kZSBjaGFuZ2VzLiBJJ20gbG9va2luZyBhdCBgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jYC5cblxuT2theSwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgYWxsIGRlZXBseSBpbnZvbHZlZCBpbiB0aGUgbWRldiBsaWZlY3ljbGUgYW5kIEFQIGJ1cyBjYWxsYmFja3M6IGB2ZmlvX2FwX21kZXZfcHJvYmVgLCBgdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZWAsIGBzdGF0dXNfc2hvd2AsIGB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWVgLCBgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZWAsIGB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19jZmdgLCBgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmVgLCBgdmZpb19hcF9tZGV2X2NmZ19hZGRgLCBgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZ2AsIGFuZCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYC5cblxuQ2FuIHN5emthbGxlciB0cmlnZ2VyIHRoZXNlPyBEZWZpbml0ZWx5LCBieSBpbnRlcmFjdGluZyB3aXRoIHN5c2ZzIHRvIGNyZWF0ZSBtZGV2IGRldmljZXMsIGFuZCBBUCBidXMgc2Nhbm5pbmcgKHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgb3IgaGFwcGVucyBhdXRvbWF0aWNhbGx5KS4gV2FpdCwgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWAgaXMgY2FsbGVkIHdoZW4gYW4gQVAgcXVldWUgZGV2aWNlIGlzIGJvdW5kIHRvIHRoZSBgdmZpb19hcGAgZHJpdmVyLiBUaGlzIHJlcXVpcmVzIGEgcXVldWUgZGV2aWNlLiBOb3csIGlzIGl0IHBvc3NpYmxlIHRvIGNyZWF0ZSBzdWNoIGEgZGV2aWNlIHZpYSBzb2Z0d2FyZT8gTGV0J3MgY2hlY2sgYGRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg4NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIyOjE4LjM1Mzc4MjU5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc2ODM1NzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmljZV9yZWdpc3Rlci4qYXBfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMjoxOC40MTE0ODg3M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDUyNTc2NTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdCwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBBUCBEZXZpY2UgQ3JlYXRpb24gUHJvY2Vzc2VzKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBBY2Nlc3MgUG9pbnQgKEFQKSBkZXZpY2VzIGFyZSBhY3R1YWxseSAqbWFkZSouIEl04oCZcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBxdWVzdGlvbiwgZXNwZWNpYWxseSB3aGVuIHlvdSBjb25zaWRlciB0aGUgbnVhbmNlcyBvZiBkaWZmZXJlbnQgbWFudWZhY3R1cmVycyBhbmQgdGhlIHZhcmlvdXMgY2hpcHNldHMgYW5kIGZpcm13YXJlIGludm9sdmVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBsZXZlbCBvZiBkZXRhaWwgYW0gSSBhaW1pbmcgZm9yIGhlcmU/IElzIHRoaXMgYSBoaWdoLWxldmVsIG92ZXJ2aWV3IG9mIHRoZSBtYW51ZmFjdHVyaW5nIHBpcGVsaW5lLCBvciBhcmUgd2UgZ2V0dGluZyBkb3duIGluIHRoZSB3ZWVkcyB3aXRoIHNwZWNpZmljIGNvbXBvbmVudCBzb3VyY2luZyBhbmQgdmFsaWRhdGlvbj8gXG5cbkknbGwgbmVlZCB0byBjb25zaWRlciB0aGlzLiBUaGlua2luZyBtb3JlLCBpdOKAmXMgbm90IGp1c3QgYWJvdXQgdGhlICpwaHlzaWNhbCogY3JlYXRpb24sIGVpdGhlci4gSXTigJlzIGFsc28gdGhlIGxvZ2ljYWwgYnVpbGQgcHJvY2Vzcy4gVGhlIGZpcm13YXJlIGZsYXNoaW5nLCB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uLCB0aGUgdGVzdGluZy4uLiBUaGF0IHdob2xlIGxpZmVjeWNsZSBmcm9tIHJhdyBzaWxpY29uIHRvIGEgZnVuY3Rpb25hbCwgbmV0d29yay1yZWFkeSBkZXZpY2UuIFdlIGNvdWxkIGdldCBpbnRvIHF1ZXN0aW9ucyBhcm91bmQgc3VwcGx5IGNoYWluIHNlY3VyaXR5LCB0b28g4oCTIG1ha2luZyBzdXJlIHRoZXJlIGFyZW7igJl0IGFueSBtYWxpY2lvdXMgY29tcG9uZW50cyBvciBiYWNrZG9vcnMgaW50cm9kdWNlZCBkdXJpbmcgcHJvZHVjdGlvbi5cblxuT2theSwgbXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIHRoZSBpbnF1aXJ5LiBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiBvbiB3aHkgdGhlIHByb21wdCBpcyBuZWVkZWQuIElzIHRoaXMgYSByZXNlYXJjaCBwcm9qZWN0PyBBbiBpbnZlc3RpZ2F0aW9uPyBBIGdlbmVyYWwgaW50ZXJlc3Q/IFJlZ2FyZGxlc3MsIGl0J3MgY2xlYXIgdGhlIHByb21wdCByZXF1aXJlcyB0aGF0IEkgZ2F0aGVyIGRhdGEgb24gQVAgZGV2aWNlIHByb2R1Y3Rpb24gbWV0aG9kcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMjoyMi40NjQwNjkwODVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTIyMTE5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcF9kZXZpY2VfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIyOjIyLjUwODE5OTU0M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjE5NzM2NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRoZSBjb2RlOlxuXG4qKkNoZWNraW5nIERldmljZSBDcmVhdGlvbiBpbiBhcF9idXMuYyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzOiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgcGFydGljdWxhciBkZXZpY2UgaXMgaW5pdGlhbGl6ZWQuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGFwX2J1cy5jYCwgYmVjYXVzZSB0aGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBkZXZpY2UgY3JlYXRpb24gYW5kIGJ1cy1zcGVjaWZpYyBzZXR1cCBoYXBwZW5zLiBJJ20gbG9va2luZyBmb3IgdGhlIGluc3RhbnRpYXRpb24gbG9naWMsIGFueSBhc3NvY2lhdGVkIHJlc291cmNlIGFsbG9jYXRpb24sIGFuZCwgY3J1Y2lhbGx5LCBob3cgdGhlIGRldmljZSBnZXRzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgc3lzdGVtLiBJIGV4cGVjdCB0byBmaW5kIGEgd2VsbC1kZWZpbmVkIGZ1bmN0aW9uIG9yIHNldCBvZiBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGFsbCBvZiB0aGlzLiBJJ2xsIGJlIHNjcnV0aW5pemluZyB0aGUgY29kZSBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgaW5jb3JyZWN0IHJlc291cmNlIGhhbmRsaW5nIChtZW1vcnkgbGVha3MgYXJlIGEgaHVnZSBuby1ubyEpLCBhbmQgYW55IGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIGZyYWdpbGUgb3IgcG9vcmx5IGRvY3VtZW50ZWQuIEknbGwgYWxzbyB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGJ1cy1zcGVjaWZpYyBxdWlya3MgYW5kIGFueSBjdXN0b20gY29uZmlndXJhdGlvbnMsIGlmIHRoZXkgZXhpc3QsIHRvIGNvbXBhcmUgdGhlbSB3aXRoIHRoZSBzdGFuZGFyZCBhcmNoaXRlY3R1cmUuIEFueSBub24tc3RhbmRhcmQgY29uZmlndXJhdGlvbnMgYXJlIGFsd2F5cyBhIHBvaW50IG9mIGludGVyZXN0LCBhcyB0aG9zZSBjYW4gb2Z0ZW4gYmUgdGhlIHNvdXJjZSBvZiBpc3N1ZXMgZG93biB0aGUgbGluZS4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIGRldmljZSBjcmVhdGlvbiBwcm9jZXNzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHdlbGwtZGVmaW5lZCBlcnJvciBjb2RlcyBhbmQgYW55IHNwZWNpZmljIHN0ZXBzIHRoZSBjb2RlIHRha2VzIHRvIGNsZWFuIHVwIHBhcnRpYWxseSBjcmVhdGVkIGRldmljZXMgaW4gY2FzZSBvZiBmYWlsdXJlLiBJIGFsc28gbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZGV2aWNlIGNyZWF0aW9uIGlzIHRocmVhZC1zYWZlLiBPdmVyYWxsLCBJIHdhbnQgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZGV2aWNlJ3MgbGlmZWN5Y2xlIGZyb20gYmlydGggdG8gcmVnaXN0cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDExMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIyOjI2LjcyNzkzOTE3M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc1MDg3OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2aWNlX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MTk4Mj1zdGF0aWMgaW5saW5lIHZvaWQgYXBfc2Nhbl9kb21haW5zKHN0cnVjdCBhcF9jYXJkICphYylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjA0MS1cXHRcXHRcXHQvKiByZWdpc3RlciBxdWV1ZSBkZXZpY2UgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjIwNDI6XFx0XFx0XFx0cmMgPSBkZXZpY2VfcmVnaXN0ZXIoZGV2KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTIwNDMtXFx0XFx0XFx0aWYgKHJjKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyMDQ0OlxcdFxcdFxcdFxcdEFQX0RCRl9XQVJOKFxcXCIlcyglZCwlZCkgZGV2aWNlX3JlZ2lzdGVyKCkgZmFpbGVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjA0NS1cXHRcXHRcXHRcXHRcXHQgICAgX19mdW5jX18sIGFjLVxcdTAwM2VpZCwgZG9tKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MjEzOT1zdGF0aWMgaW5saW5lIHZvaWQgYXBfc2Nhbl9hZGFwdGVyKGludCBhcClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjI3My1cXHRcXHQvKiBSZWdpc3RlciB0aGUgbmV3IGNhcmQgZGV2aWNlIHdpdGggQVAgYnVzICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyMjc0OlxcdFxcdHJjID0gZGV2aWNlX3JlZ2lzdGVyKGRldik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yMjc1LVxcdFxcdGlmIChyYykge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjI3NjpcXHRcXHRcXHRBUF9EQkZfV0FSTihcXFwiJXMoJWQpIGRldmljZV9yZWdpc3RlcigpIGZhaWxlZFxcXFxuXFxcIixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTIyNzctXFx0XFx0XFx0XFx0ICAgIF9fZnVuY19fLCBhcCk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jPTI1Nzg9c3RhdGljIGludCBfX2luaXQgYXBfbW9kdWxlX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjYyMi1cXHQvKiBDcmVhdGUgL3N5cy9kZXZpY2VzL2FwLiAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjYyMzpcXHRhcF9yb290X2RldmljZSA9IHJvb3RfZGV2aWNlX3JlZ2lzdGVyKFxcXCJhcFxcXCIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjYyNC1cXHRyYyA9IFBUUl9FUlJfT1JfWkVSTyhhcF9yb290X2RldmljZSk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9ODY9c3RhdGljIGludCB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtOTAtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjkxOlxcdHJvb3RfZGV2aWNlID0gcm9vdF9kZXZpY2VfcmVnaXN0ZXIoVkZJT19BUF9ST09UX05BTUUpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy05Mi1cXHRpZiAoSVNfRVJSKHJvb3RfZGV2aWNlKSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMjEtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjEyMjpcXHRyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWRldmljZSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTEyMy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmM9MzY2PXN0YXRpYyBpbnQgemNkbl9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jLTQxNi1cXHR9XFxuZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmM6NDE3OlxcdHJjID0gZGV2aWNlX3JlZ2lzdGVyKFxcdTAwMjZ6Y2RuZGV2LVxcdTAwM2VkZXZpY2UpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jLTQxOC1cXHRpZiAocmMpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjI6MjYuNzg1NDUzMDMxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTQ2MDA3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBBY2Nlc3MgUG9pbnQgRGV2aWNlIENyZWF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGVzZSBBY2Nlc3MgUG9pbnQgKEFQKSBkZXZpY2VzIGFyZSBhY3R1YWxseSBjcmVhdGVkLiBGcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLCBpdCBsb29rcyBsaWtlIGBhcF9zY2FuX2RvbWFpbnNgIGFuZCBgYXBfc2Nhbl9hZGFwdGVyYCBhcmUgdGhlIGtleSBjb21wb25lbnRzIGhlcmUsIGVzc2VudGlhbGx5IHNjYW5uaW5nIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHRvIGlkZW50aWZ5IGFuZCBicmluZyB0aGVzZSBBUCBkZXZpY2VzIGludG8gYmVpbmcuIFxuXG5CdXQgaGVyZSdzIGEgdGhvdWdodDogQ2FuIHdlIGJ5cGFzcyB0aGF0IGhhcmR3YXJlIGRldGVjdGlvbiBhbmQgKmluamVjdCogYW4gQVAgZGV2aWNlIGRpcmVjdGx5IHRocm91Z2ggc29mdHdhcmU/IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJ20gZ29pbmcgdG8gaW52ZXN0aWdhdGUgd2hldGhlciB0aGVyZSdzIGFueSBtZWNoYW5pc20gZm9yIHNvZnR3YXJlLWJhc2VkIGBhcF9kZXZpY2VgIGluamVjdGlvbiBhdCBhbGwuIElzIGl0IHB1cmVseSBhIGhhcmR3YXJlLWRyaXZlbiBwcm9jZXNzLCBvciBhcmUgdGhlcmUgaG9va3Mgb3IgdnVsbmVyYWJpbGl0aWVzIHdlIGNvdWxkIHBvdGVudGlhbGx5IGxldmVyYWdlPyBUaGF0J3MgdGhlIHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzYxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjI6MzEuMTgwMDU2OTk1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTk3OTQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcF9zY2FuX2FkYXB0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0xOTgyPXN0YXRpYyBpbmxpbmUgdm9pZCBhcF9zY2FuX2RvbWFpbnMoc3RydWN0IGFwX2NhcmQgKmFjKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yMTM4LSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjEzOTpzdGF0aWMgaW5saW5lIHZvaWQgYXBfc2Nhbl9hZGFwdGVyKGludCBhcClcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTIxNDAte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0yMzczPXN0YXRpYyBib29sIGFwX3NjYW5fYnVzKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTIzOTgtXFx0Zm9yIChhcCA9IDA7IGFwIFxcdTAwM2M9IGFwX21heF9hZGFwdGVyX2lkOyBhcCsrKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjM5OTpcXHRcXHRhcF9zY2FuX2FkYXB0ZXIoYXApO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQwMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjI6MzEuMjQwMDQyMjkzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5OTE1MTkxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBBUCBEZXZpY2UgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBBUCBkZXZpY2VzLCBhbmQgaGVyZSdzIG15IHRyYWluIG9mIHRob3VnaHQuIFdlIHN0YXJ0IHdpdGggYGFwX3NjYW5fYnVzYC4gVGhhdCdzIHRoZSBmdW5jdGlvbiB0aGF0J3Mgc3VwcG9zZWQgdG8gdXNlIHRob3NlIEFQIGluc3RydWN0aW9ucyDigJMgYGFwX3FjaWAsIGBhcF90YXBxYCwgdGhlIHdob2xlIHNoZWJhbmcg4oCTIHRvIGFjdHVhbGx5IGZpbmQgYW5kIGlkZW50aWZ5IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBvbiB0aGUgYnVzLiBNYWtlcyBzZW5zZSBzbyBmYXIuIElmIHRoZXJlICppc24ndCogYW55IGhhcmR3YXJlIHByZXNlbnQsIHRoZW4gbmF0dXJhbGx5LCBgYXBfc2Nhbl9idXNgIGlzbid0IGdvaW5nIHRvIGRldGVjdCBhbnl0aGluZy4gVGhlcmVmb3JlLCB3ZSB3b3VsZCBleHBlY3QgdGhhdCBpZiBpdCBmaW5kcyBub3RoaW5nLCBgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlYCB3aWxsIG5ldmVyIGdldCBjYWxsZWQgYmVjYXVzZSB0aGUgaGFyZHdhcmUgaGFzIG5vdCBiZWVuIGVudW1lcmF0ZWQuXG5cbkJ1dCB0aGVuLCBhIHNsaWdodCB3cmlua2xlIGVudGVycyB0aGUgcGljdHVyZS4gSSBuZWVkIHRvIGJlIHN1cmU7IG15IHJlY2FsbCBpcyBzb21ldGltZXMgZmF1bHR5LiAqV2FpdCosIGB2ZmlvX2FwX21kZXZfcHJvYmVgIGdldHMgY2FsbGVkIHdoZW4gYW4gbWRldiBpcyAqY3JlYXRlZCosIG5vdCBvbmx5IHdoZW4gdGhlIGhhcmR3YXJlIGlzIGVudW1lcmF0ZWQuIFRoaXMgbWVhbnMgdGhhdCBhbiBtZGV2IGNhbiBiZSBpbnN0YW50aWF0ZWQgcHJpb3IgdG8gdGhlIHBoeXNpY2FsIGJ1cyBiZWluZyBzY2FubmVkLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLi4uIGNhbiBhbiBtZGV2IGJlIGNyZWF0ZWQgZXZlbiBpZiB0aGVyZSBhcmUgKm5vKiBBUCBkZXZpY2VzIHRvIGFjdHVhbGx5IGJhY2sgaXQ/IElmIGl0IGNhbiwgd2UndmUgZ290IGEgcG90ZW50aWFsIGlzc3VlIHdpdGggaG93IHRoaW5ncyBhcmUgYmVpbmcgaGFuZGxlZC4gSSB0aGluayBJIG5lZWQgdG8gZGlnIGludG8gYHZmaW9fYXBfbWRldl9wcm9iZWAgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIHZhbGlkYXRpb24gdGhhdCBpcyBkb25lLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoYXQgcm91dGluZSBoYW5kbGVzIHRoZSBzY2VuYXJpbyB3aGVyZSB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBkb2Vzbid0IGV4aXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg3MCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMjozNy4yMzE1NjQxMjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3OTA6XFx0c3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KVxcbiA3OTE6XFx0e1xcbiA3OTI6XFx0XFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcXG4gNzkzOlxcdFxcdGludCByZXQ7XFxuIDc5NDpcXHRcXG4gNzk1OlxcdFxcdG1hdHJpeF9tZGV2ID0gdmZpb19hbGxvY19kZXZpY2UoYXBfbWF0cml4X21kZXYsIHZkZXYsIFxcdTAwMjZtZGV2LVxcdTAwM2VkZXYsXFxuIDc5NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dmZpb19hcF9tYXRyaXhfZGV2X29wcyk7XFxuIDc5NzpcXHRcXHRpZiAoSVNfRVJSKG1hdHJpeF9tZGV2KSlcXG4gNzk4OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKG1hdHJpeF9tZGV2KTtcXG4gNzk5OlxcdFxcbiA4MDA6XFx0XFx0cmV0ID0gdmZpb19yZWdpc3Rlcl9lbXVsYXRlZF9pb21tdV9kZXYoXFx1MDAyNm1hdHJpeF9tZGV2LVxcdTAwM2V2ZGV2KTtcXG4gODAxOlxcdFxcdGlmIChyZXQpXFxuIDgwMjpcXHRcXHRcXHRnb3RvIGVycl9wdXRfdmRldjtcXG4gODAzOlxcdFxcdG1hdHJpeF9tZGV2LVxcdTAwM2VyZXFfdHJpZ2dlciA9IE5VTEw7XFxuIDgwNDpcXHRcXHRtYXRyaXhfbWRldi1cXHUwMDNlY2ZnX2NoZ190cmlnZ2VyID0gTlVMTDtcXG4gODA1OlxcdFxcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2bWRldi1cXHUwMDNlZGV2LCBtYXRyaXhfbWRldik7XFxuIDgwNjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VndWVzdHNfbG9jayk7XFxuIDgwNzpcXHRcXHRsaXN0X2FkZChcXHUwMDI2bWF0cml4X21kZXYtXFx1MDAzZW5vZGUsIFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2X2xpc3QpO1xcbiA4MDg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VndWVzdHNfbG9jayk7XFxuIDgwOTpcXHRcXHRyZXR1cm4gMDtcXG4gODEwOlxcdFxcbiA4MTE6XFx0ZXJyX3B1dF92ZGV2OlxcbiA4MTI6XFx0XFx0dmZpb19wdXRfZGV2aWNlKFxcdTAwMjZtYXRyaXhfbWRldi1cXHUwMDNldmRldik7XFxuIDgxMzpcXHRcXHRyZXR1cm4gcmV0O1xcbiA4MTQ6XFx0fVxcbiA4MTU6XFx0XFxuIDgxNjpcXHRzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfbGlua19xdWV1ZShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxcbiA4MTc6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxcbiA4MTg6XFx0e1xcbiA4MTk6XFx0XFx0aWYgKCFxIHx8IHZmaW9fYXBfbWRldl9nZXRfcXVldWUobWF0cml4X21kZXYsIHEtXFx1MDAzZWFwcW4pKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMjozNy4yMzE3MTM5NjhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE3NzE5Mjg4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHZmaW8tYXAgYW5kIGl0cyBJbnRlcmFjdGlvbiB3aXRoIHN5emthbGxlcioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgYHZmaW9fYXBgIG1vZHVsZSBhbmQgaG93IHN5emthbGxlciBtaWdodCBpbnRlcmFjdCB3aXRoIGl0LiBJJ3ZlIGdvdCBpdCwgYHZmaW9fYXBfbWRldl9wcm9iZWAgKmNhbiogYmUgY2FsbGVkIHdoZW4gYW4gbWRldiBpcyBjcmVhdGVkIHRocm91Z2ggc3lzZnMsIHRoYXQgbXVjaCBpcyBjbGVhci4gQnV0IGhhbmcgb24sIGB2ZmlvX2FwX21kZXZfcmVnaXN0ZXJgIGlzIG9ubHkgY2FsbGVkIGlmIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgIHJldHVybnMgdHJ1ZS4gTm93LCBpZiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgZmFsc2UsIHRoZSBtb2R1bGUgbG9hZGluZyBmYWlscyB3aXRoIGFuIGAtRU5PREVWYCBlcnJvci4gU28sIGJhc2ljYWxseSwgSSBjYW4ndCBldmVuIGdldCB0aGUgbW9kdWxlIGxvYWRlZCBpbiBhIFFFTVUgVENHIGVudmlyb25tZW50LCB3aGljaCBtYWtlcyBpdCB1c2VsZXNzIHRvIGV2ZW4gY29uc2lkZXIuXG5cbkJ1dCwgc3l6a2FsbGVyIHJ1bnMgb24gczM5MHggS1ZNLCByaWdodD8gQW5kIG9uIGFjdHVhbCBtYWluZnJhbWVzLCB5ZXM/IElmIHN5emthbGxlciBydW5zIG9uIHMzOTB4IEtWTSwgdGhlbiBpdCB3b3VsZCAqaGF2ZSogdG8gaGF2ZSBBUCBpbnN0cnVjdGlvbnMgYXZhaWxhYmxlLCBpZiB0aGUgaG9zdCBtYWNoaW5lIGhhcyBBUCBoYXJkd2FyZSBhbmQgS1ZNIGVuYWJsZXMgaXQuIFRoZSB0aGluZyBpcywgc3l6a2FsbGVyIGlzIGZ1enppbmcgdGhlICpob3N0KiBrZXJuZWwsIG9yIG1heWJlIGEgZ3Vlc3Qga2VybmVsIGFjdGluZyBhcyB0aGUgc3lzdGVtIHVuZGVyIHRlc3QuIFR5cGljYWxseSwgaXTigJlzIGZ1enppbmcgYSBndWVzdCwgc28gZG9lcyB0aGUgZ3Vlc3Qga2VybmVsIGhhdmUgQVAgaW5zdHJ1Y3Rpb25zIGlmIGl0J3MgcnVubmluZyBvbiBLVk0/IEl0IGRvZXMsIGlmIHRoZSBob3N0IHBhc3NlcyB0aGVtIHRocm91Z2guXG5cbkJ1dCBkb2VzIHRoZSBndWVzdCBoYXZlICphY3R1YWwqIEFQIGRldmljZXM/IE9ubHkgaWYgdGhlIGhvc3QgcGFzc2VzIHRoZW0gdGhyb3VnaC4gSG93ZXZlciwgc3l6a2FsbGVyIHR5cGljYWxseSBydW5zIGluIGEgZ2VuZXJpYyBWTSwgc28gdGhlcmUncyB1c3VhbGx5IG5vIHNwZWNpZmljIGhhcmR3YXJlIHBhc3NlZCB0aHJvdWdoLiBCdXQgZXZlbiB3aXRob3V0IHNwZWNpZmljIGRldmljZXMsIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgIG1pZ2h0IHN0aWxsIGJlIHRydWUgaWYgdGhlIGhvc3QgZW5hYmxlcyBBUCBpbnN0cnVjdGlvbnMgZm9yIHRoZSBndWVzdCwgd2hpY2ggaXQgZG9lcyBieSBkZWZhdWx0IGlmIHRoZSBob3N0IGhhcyB0aGVtLlxuXG5JZiBgYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpYCBpcyB0cnVlLCB0aGUgYHZmaW9fYXBgIG1vZHVsZSB3aWxsIGxvYWQuIEFuZCB0aGVuLCBzeXprYWxsZXIgKmNhbiogY3JlYXRlIG1kZXYgZGV2aWNlcyB2aWEgc3lzZnMsIGFuZCBgdmZpb19hcF9tZGV2X3Byb2JlYCBiZWNvbWVzIHJlYWNoYWJsZS4gV2hhdCBhYm91dCBgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlYD8gVGhhdCByZXF1aXJlcyBhbiBhY3R1YWwgQVAgcXVldWUgZGV2aWNlIHRvIGJlIGJvdW5kIHRvIHRoZSBgdmZpb19hcGAgZHJpdmVyLiBJZiB0aGVyZSBhcmUgbm8gQVAgZGV2aWNlcywgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWAgd29uJ3QgYmUgcmVhY2hlZC4gQnV0LCBgdmZpb19hcF9tZGV2X3Byb2JlYCwgYXMgd2VsbCBhcyBgdmZpb19hcF9tZGV2X2NmZ19hZGRgIGFuZCBgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmVgLCBjYW4gYmUgcmVhY2hlZCB2aWEgc3lzZnMgYXR0cmlidXRlcyBvZiB0aGUgbWRldiBkZXZpY2UuIEknbSBnb2luZyB0byBjaGVjayBpZiBgdmZpb19hcF9tZGV2X2NmZ19hZGRgIGNhbiBiZSByZWFjaGVkIHZpYSBzeXNmcyBuZXh0LCBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTA0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjI6NDkuMDAzNjQ2MTkzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTkwNjIyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19hcF9tZGV2X2NmZ19hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI2OTI9c3RhdGljIHZvaWQgdmZpb19hcF9maWx0ZXJfYXBpZF9ieV9xdHlwZSh1bnNpZ25lZCBsb25nICphcG0sIHVuc2lnbmVkIGxvbmcgKmFxbSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNzUwLS8qKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzUxOiAqIHZmaW9fYXBfbWRldl9jZmdfYWRkIC0gc3RvcmUgYml0bWFwcyBzcGVjaWZ5aW5nIHRoZSBhZGFwdGVycywgZG9tYWlucyBhbmRcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjc1Mi0gKlxcdFxcdFxcdCAgY29udHJvbCBkb21haW5zIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBob3N0J3NcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNzYyLSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzYzOnN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfYWRkKHVuc2lnbmVkIGxvbmcgKmFwbV9hZGQsIHVuc2lnbmVkIGxvbmcgKmFxbV9hZGQsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI3NjQtXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgKmFkbV9hZGQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjgwMj1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZChzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jb25maWdfaW5mbyxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yODIzLVxcdGlmIChkb19hZGQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4MjQ6XFx0XFx0dmZpb19hcF9tZGV2X2NmZ19hZGQoYXBtX2FkZCwgYXFtX2FkZCwgYWRtX2FkZCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MjUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMjo0OS4zNjI3MTQ0NDJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIyNzEzNzc1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYTpcblxuKipUcmFjaW5nIHRoZSBEZXZpY2UgQWRkaXRpb24gRmxvdyBpbiBWRklPLUFQKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIGRvd24gaG93IGEgbWVkaWF0ZWQgZGV2aWNlIChtZGV2KSBnZXRzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBWRklPLUFQIGZyYW1ld29yay4gSXQgbG9va3MgbGlrZSB0aGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgY29uZmlndXJhdGlvbiBwcm9jZXNzIGlzIGB2ZmlvX2FwX21kZXZfY2ZnX2FkZGAuIE5vdywgSSByZWNhbGwgdGhhdCBmdW5jdGlvbiBpcyBkaXJlY3RseSBjYWxsZWQgYnkgYHZmaW9fYXBfbWRldl9vbl9jZmdfYWRkYCwgdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhpcywgaW4gdHVybiwgaXMgaW52b2tlZCBmcm9tIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYC5cblxuUmlnaHQsIHRoYXQgY2FsbGJhY2ssIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgLCBpcyByZWdpc3RlcmVkIHdpdGggdGhlIEFQIGJ1cyBpdHNlbGYuIFRoYXQgbWVhbnMgd2hlbmV2ZXIgdGhlIGJ1cyBjb21wbGV0ZXMgYSBzY2FuLCB0aGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZC4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIGNvbXBsZXRlIGZsb3cgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIGJ1cyBmaW5pc2hlcyB0aGUgc2Nhbi4gVGhlcmVmb3JlLCB0byB1bmRlcnN0YW5kIHRoZSB3aG9sZSBwcm9jZXNzLCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAgYW5kIHNlZSB3aGF0IGl0IGRvZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVzIHNjYW4gdHJpZ2dlcnMgdGhlIHdob2xlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDc3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjI6NTMuNTg5ODU0OTJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDE0Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9NTg9c3RhdGljIHN0cnVjdCBhcF9kcml2ZXIgdmZpb19hcF9kcnYgPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtNjItXFx0Lm9uX2NvbmZpZ19jaGFuZ2VkID0gdmZpb19hcF9vbl9jZmdfY2hhbmdlZCxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6NjM6XFx0Lm9uX3NjYW5fY29tcGxldGUgPSB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTY0LVxcdC5pZHMgPSBhcF9xdWV1ZV9pZHMsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9Mjc2Mz1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX2FkZCh1bnNpZ25lZCBsb25nICphcG1fYWRkLCB1bnNpZ25lZCBsb25nICphcW1fYWRkLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI3OTYtICpcXHRcXHRcXHQgICAgIGNhbiBiZSBob3QgcGx1Z2dlZCBpbnRvIHRoZSBndWVzdCB3aGVuIHRoZSBBUCBidXNcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Mjc5NzogKlxcdFxcdFxcdCAgICAgc2NhbiBjb21wbGV0ZXMgKHNlZSB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjc5OC0gKlxcdFxcdFxcdCAgICAgZnVuY3Rpb24pLlxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI4NDk9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4NzQtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4NzU6dm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4NzYtXFx0XFx0XFx0ICAgICAgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpvbGRfY29uZmlnX2luZm8pXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE2Mz12b2lkIHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNjQtXFx0XFx0XFx0ICAgIHN0cnVjdCBhcF9jb25maWdfaW5mbyAqb2xkX2NvbmZpZ19pbmZvKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE2NTp2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE2Ni1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm9sZF9jb25maWdfaW5mbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIyOjUzLjYzNzI3Mzc0OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjQ2NDI0NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IG1lbnRhbCBnZWFycyBhcmUgdHVybmluZy4uLlxuXG4qKkFuYWx5emluZyBWRklPLUFQIFNjYW4gQ29tcGxldGlvbioqXG5cbkFscmlnaHQsIHNvIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIG9uY2UgdGhlIEFQIGJ1cyBoYXMgZmluaXNoZWQgYSBzY2FuLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIEksIHdpdGggdGhlIGhlbHAgb2Ygc3l6a2FsbGVyLCBzb21laG93IHRyaWdnZXIgdGhhdCBBUCBidXMgc2Nhbj8gSXQncyBhIGtleSBmdW5jdGlvbiwgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRvIGluZmx1ZW5jZSBpdHMgZXhlY3V0aW9uIGlzIGNyaXRpY2FsLiBMZXQncyBzZWUuLi4gQWgsIHllcywgSSByZWNhbGwgbm93LiBUaGVyZSdzIHRoYXQgc3lzZnMgYXR0cmlidXRlLCBzb21ldGhpbmcgbGlrZSBgL3N5cy9idXMvYXAvc2NhbnNgLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBleGFjdCBwYXRoLCBvZiBjb3Vyc2UsIGJ1dCB0aGF0J3MgbGlrZWx5IHRoZSBtZWNoYW5pc20gSSBuZWVkIHRvIG1hbmlwdWxhdGUuIE5vdyBsZXQncyBnbyBjaGVjayB0aGUgZmlsZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTUxMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIyOjU5Ljg4MzcwMTYyNloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM0OTEyMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXBfc2Nhbl9idXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0xMzU9TU9EVUxFX1BBUk1fREVTQyhtc2dwb29sX21pbl9pdGVtcywgXFxcIkFQIG1lc3NhZ2UgcG9vbCBtaW5pbWFsIGl0ZW1zXFxcIik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTEzOS0gKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE0MDpzdGF0aWMgYm9vbCBhcF9zY2FuX2J1cyh2b2lkKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE0MTpzdGF0aWMgYm9vbCBhcF9zY2FuX2J1c19yZXN1bHQ7IC8qIHJlc3VsdCBvZiBsYXN0IGFwX3NjYW5fYnVzKCkgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE0MjpzdGF0aWMgREVGSU5FX01VVEVYKGFwX3NjYW5fYnVzX211dGV4KTsgLyogbXV0ZXggYXBfc2Nhbl9idXMoKSBpbnZvY2F0aW9ucyAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTQzOnN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmFwX3NjYW5fYnVzX3Rhc2s7IC8qIHRocmVhZCBob2xkaW5nIHRoZSBzY2FuIG11dGV4ICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxNDQ6c3RhdGljIGF0b21pYzY0X3QgYXBfc2Nhbl9idXNfY291bnQ7IC8qIGNvdW50ZXIgYXBfc2Nhbl9idXMoKSBpbnZvY2F0aW9ucyAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTQ1OnN0YXRpYyBpbnQgYXBfc2Nhbl9idXNfdGltZSA9IEFQX0NPTkZJR19USU1FO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTQ2OnN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBhcF9zY2FuX2J1c190aW1lcjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE0NzpzdGF0aWMgdm9pZCBhcF9zY2FuX2J1c193cV9jYWxsYmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxNDg6c3RhdGljIERFQ0xBUkVfV09SSyhhcF9zY2FuX2J1c193b3JrLCBhcF9zY2FuX2J1c193cV9jYWxsYmFjayk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xNDktXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jPTgwMj1zdGF0aWMgdm9pZCBhcF9jaGVja19iaW5kaW5nc19jb21wbGV0ZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy04MDUtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzo4MDY6XFx0aWYgKGF0b21pYzY0X3JlYWQoXFx1MDAyNmFwX3NjYW5fYnVzX2NvdW50KSBcXHUwMDNlPSAxKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy04MDctXFx0XFx0YXBfY2FsY19ib3VuZF9hcHFucyhcXHUwMDI2YXBxbnMsIFxcdTAwMjZib3VuZCk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jPTExMTk9Ym9vbCBhcF9idXNfZm9yY2VfcmVzY2FuKHZvaWQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xMTIwLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjExMjE6XFx0dW5zaWduZWQgbG9uZyBzY2FuX2NvdW50ZXIgPSBhdG9taWM2NF9yZWFkKFxcdTAwMjZhcF9zY2FuX2J1c19jb3VudCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xMTIyLVxcdGJvb2wgcmMgPSBmYWxzZTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTEzNi1cXHQgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjExMzc6XFx0aWYgKG11dGV4X2lzX2xvY2tlZChcXHUwMDI2YXBfc2Nhbl9idXNfbXV0ZXgpKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxMTM4OlxcdFxcdGlmIChhcF9zY2FuX2J1c190YXNrID09IGN1cnJlbnQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xMTM5LVxcdFxcdFxcdGdvdG8gb3V0O1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xMTQyLVxcdC8qIFRyeSB0byBhY3F1aXJlIHRoZSBBUCBzY2FuIGJ1cyBtdXRleCAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTE0MzpcXHRpZiAobXV0ZXhfdHJ5bG9jayhcXHUwMDI2YXBfc2Nhbl9idXNfbXV0ZXgpKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xMTQ0LVxcdFxcdC8qIG11dGV4IGFjcXVpcmVkLCBydW4gdGhlIEFQIGJ1cyBzY2FuICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxMTQ1OlxcdFxcdGFwX3NjYW5fYnVzX3Rhc2sgPSBjdXJyZW50O1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTE0NjpcXHRcXHRhcF9zY2FuX2J1c19yZXN1bHQgPSBhcF9zY2FuX2J1cygpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTE0NzpcXHRcXHRyYyA9IGFwX3NjYW5fYnVzX3Jlc3VsdDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjExNDg6XFx0XFx0YXBfc2Nhbl9idXNfdGFzayA9IE5VTEw7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxMTQ5OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2YXBfc2Nhbl9idXNfbXV0ZXgpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTE1MC1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTE1Ni1cXHQgKiBmb3IgdGhlIGxvY2sgd2hpY2ggbWVhbnMgdGhlIG90aGVyIHRhc2sgaGFzIGZpbmlzaGVkIGFuZFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTE1NzpcXHQgKiBzdG9yZWQgdGhlIHJlc3VsdCBpbiBhcF9zY2FuX2J1c19yZXN1bHQuXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xMTU4LVxcdCAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTE1OTpcXHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFxcdTAwMjZhcF9zY2FuX2J1c19tdXRleCkpIHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTExNjAtXFx0XFx0Lyogc29tZSBlcnJvciBvY2N1cnJlZCwgaWdub3JlIGFuZCBnbyBvdXQgKi9cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTE2Mi1cXHR9XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxMTYzOlxcdHJjID0gYXBfc2Nhbl9idXNfcmVzdWx0O1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTE2NDpcXHRtdXRleF91bmxvY2soXFx1MDAyNmFwX3NjYW5fYnVzX211dGV4KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTExNjUtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jPTEzOTg9c3RhdGljIHNzaXplX3QgY29uZmlnX3RpbWVfc2hvdyhjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywgY2hhciAqYnVmKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTM5OS17XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoxNDAwOlxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVkXFxcXG5cXFwiLCBhcF9zY2FuX2J1c190aW1lKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTE0MDEtfVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0xNDAzPXN0YXRpYyBzc2l6ZV90IGNvbmZpZ190aW1lX3N0b3JlKGNvbnN0IHN0cnVjdCBidXNfdHlwZSAqYnVzLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xNDA5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTQxMDpcXHRhcF9zY2FuX2J1c190aW1lID0gdGltZTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE0MTE6XFx0bW9kX3RpbWVyKFxcdTAwMjZhcF9zY2FuX2J1c190aW1lciwgamlmZmllcyArIGFwX3NjYW5fYnVzX3RpbWUgKiBIWik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xNDEyLVxcdHJldHVybiBjb3VudDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MTcwNT1zdGF0aWMgc3NpemVfdCBzY2Fuc19zaG93KGNvbnN0IHN0cnVjdCBidXNfdHlwZSAqYnVzLCBjaGFyICpidWYpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xNzA2LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjE3MDc6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWxsdVxcXFxuXFxcIiwgYXRvbWljNjRfcmVhZChcXHUwMDI2YXBfc2Nhbl9idXNfY291bnQpKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTE3MDgtfVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0xNzIyPXN0YXRpYyBzc2l6ZV90IGJpbmRpbmdzX3Nob3coY29uc3Qgc3RydWN0IGJ1c190eXBlICpidXMsIGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTcyNy1cXHRhcF9jYWxjX2JvdW5kX2FwcW5zKFxcdTAwMjZhcHFucywgXFx1MDAyNm4pO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTcyODpcXHRpZiAoYXRvbWljNjRfcmVhZChcXHUwMDI2YXBfc2Nhbl9idXNfY291bnQpIFxcdTAwM2U9IDEgXFx1MDAyNlxcdTAwMjYgbiA9PSBhcHFucylcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTE3MjktXFx0XFx0cmMgPSBzeXNmc19lbWl0KGJ1ZiwgXFxcIiV1LyV1IChjb21wbGV0ZSlcXFxcblxcXCIsIG4sIGFwcW5zKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MTk1OT1zdGF0aWMgaW5saW5lIHZvaWQgbm90aWZ5X3NjYW5fY29tcGxldGUodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTk2NS0vKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTk2NjogKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGFwX3NjYW5fYnVzKCkuXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xOTY3LSAqIFJlbW92ZSBjYXJkIGRldmljZSBhbmQgYXNzb2NpYXRlZCBxdWV1ZSBkZXZpY2VzLlxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0xOTY5PXN0YXRpYyBpbmxpbmUgdm9pZCBhcF9zY2FuX3JtX2NhcmRfZGV2X2FuZF9xdWV1ZV9kZXZzKHN0cnVjdCBhcF9jYXJkICphYylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMTk3Ny0vKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MTk3ODogKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGFwX3NjYW5fYnVzKCkuXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0xOTc5LSAqIERvZXMgdGhlIHNjYW4gYnVzIGpvYiBmb3IgYWxsIHRoZSBkb21haW5zIHdpdGhpblxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0xOTgyPXN0YXRpYyBpbmxpbmUgdm9pZCBhcF9zY2FuX2RvbWFpbnMoc3RydWN0IGFwX2NhcmQgKmFjKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yMTM1LS8qXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyMTM2OiAqIEhlbHBlciBmdW5jdGlvbiBmb3IgYXBfc2Nhbl9idXMoKS5cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTIxMzctICogRG9lcyB0aGUgc2NhbiBidXMgam9iIGZvciB0aGUgZ2l2ZW4gYWRhcHRlciBpZC5cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MjM1MT1zdGF0aWMgYm9vbCBhcF9jb25maWdfaGFzX25ld19kb21zKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTIzNjYtLyoqXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyMzY3OiAqIGFwX3NjYW5fYnVzKCk6IFNjYW4gdGhlIEFQIGJ1cyBmb3IgbmV3IGRldmljZXNcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjIzNjg6ICogQWx3YXlzIHJ1biB1bmRlciBtdXRleCBhcF9zY2FuX2J1c19tdXRleCBwcm90ZWN0aW9uXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yMzY5LSAqIHdoaWNoIG5lZWRzIHRvIGdldCBsb2NrZWQvdW5sb2NrZWQgYnkgdGhlIGNhbGxlciFcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjM3Mi0gKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjIzNzM6c3RhdGljIGJvb2wgYXBfc2Nhbl9idXModm9pZClcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTIzNzQte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDE3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQxODpcXHRpZiAoYXRvbWljNjRfaW5jX3JldHVybihcXHUwMDI2YXBfc2Nhbl9idXNfY291bnQpID09IDEpIHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0MTktXFx0XFx0cHJfZGVidWcoXFxcImluaXQgc2NhbiBjb21wbGV0ZVxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0MjQtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDI1OlxcdG1vZF90aW1lcihcXHUwMDI2YXBfc2Nhbl9idXNfdGltZXIsIGppZmZpZXMgKyBhcF9zY2FuX2J1c190aW1lICogSFopO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQyNi1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQzMi0vKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQzMzogKiBDYWxsYmFjayBmb3IgdGhlIGFwX3NjYW5fYnVzX3RpbWVyXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDM0OiAqIFJ1bnMgcGVyaW9kaWNhbGx5LCB3b3JrcXVldWUgdGltZXIgKGFwX3NjYW5fYnVzX3RpbWUpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDM1LSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQzNjpzdGF0aWMgdm9pZCBhcF9zY2FuX2J1c190aW1lcl9jYWxsYmFjayhzdHJ1Y3QgdGltZXJfbGlzdCAqdW51c2VkKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQzNy17XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NDEtXFx0ICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDQyOlxcdHF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFxcdTAwMjZhcF9zY2FuX2J1c193b3JrKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NDMtfVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDQ1LS8qXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDQ2OiAqIENhbGxiYWNrIGZvciB0aGUgYXBfc2Nhbl9idXNfd29ya1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQ0Ny0gKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0NDg6c3RhdGljIHZvaWQgYXBfc2Nhbl9idXNfd3FfY2FsbGJhY2soc3RydWN0IHdvcmtfc3RydWN0ICp1bnVzZWQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDQ5LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NTAtXFx0LypcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0NTE6XFx0ICogVHJ5IHRvIGludm9rZSBhbiBhcF9zY2FuX2J1cygpLiBJZiB0aGUgbXV0ZXggYWNxdWlzaXRpb25cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NTItXFx0ICogZmFpbHMgdGhlcmUgaXMgY3VycmVudGx5IGFub3RoZXIgdGFzayBhbHJlYWR5IHJ1bm5pbmcgdGhlXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NTUtXFx0ICogdGhlIEFQIHNjYW4gYnVzIHRpbWVyIGlzIHJlLWFybWVkIHdoaWNoIHRyaWdnZXJzIHRoZW4gdGhlXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDU2OlxcdCAqIGFwX3NjYW5fYnVzX3RpbWVyX2NhbGxiYWNrIHdoaWNoIGVucXVldWVzIGEgd29yayBpbnRvIHRoZVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQ1Ny1cXHQgKiBzeXN0ZW1fbG9uZ193cSB3aGljaCBpbnZva2VzIHRoaXMgZnVuY3Rpb24gaGVyZSBhZ2Fpbi5cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NTgtXFx0ICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDU5OlxcdGlmIChtdXRleF90cnlsb2NrKFxcdTAwMjZhcF9zY2FuX2J1c19tdXRleCkpIHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0NjA6XFx0XFx0YXBfc2Nhbl9idXNfdGFzayA9IGN1cnJlbnQ7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDYxOlxcdFxcdGFwX3NjYW5fYnVzX3Jlc3VsdCA9IGFwX3NjYW5fYnVzKCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDYyOlxcdFxcdGFwX3NjYW5fYnVzX3Rhc2sgPSBOVUxMO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQ2MzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmFwX3NjYW5fYnVzX211dGV4KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI0NjQtXFx0fVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYz0yNDY3PXN0YXRpYyBpbmxpbmUgdm9pZCBfX2V4aXQgYXBfYXN5bmNfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDcxLVxcdGNoc2Nfbm90aWZpZXJfdW5yZWdpc3RlcihcXHUwMDI2YXBfYnVzX25iKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0NzI6XFx0Y2FuY2VsX3dvcmsoXFx1MDAyNmFwX3NjYW5fYnVzX3dvcmspO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQ3My1cXHRocnRpbWVyX2NhbmNlbChcXHUwMDI2YXBfcG9sbF90aW1lcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNDc0OlxcdHRpbWVyX2RlbGV0ZShcXHUwMDI2YXBfc2Nhbl9idXNfdGltZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQ3NS19XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jPTI0Nzc9c3RhdGljIGlubGluZSBpbnQgX19pbml0IGFwX2FzeW5jX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjQ4MS1cXHQvKiBTZXR1cCB0aGUgQVAgYnVzIHJlc2NhbiB0aW1lci4gKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI0ODI6XFx0dGltZXJfc2V0dXAoXFx1MDAyNmFwX3NjYW5fYnVzX3RpbWVyLCBhcF9zY2FuX2J1c190aW1lcl9jYWxsYmFjaywgMCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDgzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDkxLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM6MjQ5MjpcXHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcXHUwMDI2YXBfc2Nhbl9idXNfd29yayk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNDkzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYy0yNTEwLW91dDpcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI1MTE6XFx0Y2FuY2VsX3dvcmsoXFx1MDAyNmFwX3NjYW5fYnVzX3dvcmspO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjUxMi1cXHRocnRpbWVyX2NhbmNlbChcXHUwMDI2YXBfcG9sbF90aW1lcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNTEzOlxcdHRpbWVyX2RlbGV0ZShcXHUwMDI2YXBfc2Nhbl9idXNfdGltZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjUxNC1cXHRyZXR1cm4gcmM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIyOjU5Ljk2NzE5NzcyM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDYyNjQ5MDEwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgRnV6emFibGUgQ29kZSoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIGhvdyB0aGlzIG1vZGlmaWVkIGNvZGUgaW4gYHZmaW9fYXBgIGlzIGdvaW5nIHRvIGdldCBleGVjdXRlZCwgYW5kIGhvdyB3ZSBjYW4gZWZmZWN0aXZlbHkgdGFyZ2V0IGl0IHdpdGggZnV6emluZy4gYGFwX3NjYW5fYnVzYCBpcyB0aGUgY29yZSBtZWNoYW5pc20gaGVyZS4gSXQncyB0cmlnZ2VyZWQgcGVyaW9kaWNhbGx5IGJ5IGEgdGltZXIgKGBhcF9zY2FuX2J1c190aW1lcmApIGFuZCwgaW1wb3J0YW50bHksIGNhbiBiZSBmb3JjZWQgdmlhIGBhcF9idXNfZm9yY2VfcmVzY2FuKClgLiBXaGVuIHRoYXQgc2NhbiBjb21wbGV0ZXMsIGBub3RpZnlfc2Nhbl9jb21wbGV0ZSgpYCBnZXRzIGNhbGxlZCwgd2hpY2ggdGhlbiBpbnZva2VzIHRoZSBgb25fc2Nhbl9jb21wbGV0ZWAgY2FsbGJhY2sgZm9yIGV2ZXJ5IHJlZ2lzdGVyZWQgQVAgZHJpdmVyLiBUaGlzIG1lYW5zIG91ciBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBwZXJpb2RpY2FsbHkg4oCTIHBlcmZlY3QgZm9yIGZ1enppbmchXG5cbkluc2lkZSBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCwgdGhlIGNvZGUgaXRlcmF0ZXMgdGhyb3VnaCBgbWF0cml4X2Rldi1cdTAwM2VtZGV2X2xpc3RgLiBUaGUga2V5IHJlYWxpemF0aW9uIGlzIHRoYXQgaWYgc3l6a2FsbGVyIGNyZWF0ZXMgYW4gbWRldiBkZXZpY2UgZm9yIGB2ZmlvX2FwYCwgaXQnbGwgYmUgcHJlc2VudCBpbiB0aGlzIGxpc3QuIFRoZSBpbXBsaWNhdGlvbnMgYXJlIHNpZ25pZmljYW50OiBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCB3aWxsIHByb2Nlc3MgdGhhdCBtZGV2IGRldmljZSBhbmQgc3Vic2VxdWVudGx5IGNhbGwgYHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmdgLiBUaGlzIGRpcmVjdCBjb25uZWN0aW9uIG1lYW5zIHRoZSBtb2RpZmllZCBjb2RlIGluIGJvdGggdGhvc2UgZnVuY3Rpb25zIGlzIGd1YXJhbnRlZWQgdG8gYmUgZXhlY3V0ZWQgcGVyaW9kaWNhbGx5IGFzIGxvbmcgYXMgYW4gbWRldiBkZXZpY2UgaXMgYWN0aXZlIVxuXG5BbmQgY3JlYXRpbmcgYW4gbWRldiBkZXZpY2U/IERlYWQgc2ltcGxlLiBJdCdzIGp1c3QgYSBtYXR0ZXIgb2Ygd3JpdGluZyB0byB0aGUgc3lzZnMgZmlsZSBgL3N5cy9jbGFzcy9tZGV2X2J1cy8uLi4vbWRldl9zdXBwb3J0ZWRfdHlwZXMvdmZpb19hcC1wYXNzdGhyb3VnaC9jcmVhdGVgLiBUaGUgcmVhbCBiZWF1dHkgaXMgdGhhdCBzeXprYWxsZXIgYWxyZWFkeSB1bmRlcnN0YW5kcyBob3cgdG8gZG8gdGhpcy4gSXQgaGFzIGRlc2NyaXB0aW9ucyBmb3IgbWRldiBkZXZpY2VzLCBzbyBjcmVhdGluZyBhbmQgcmVtb3ZpbmcgdGhlbSBpcyB0cml2aWFsIGZvciB0aGUgZnV6emVyLiBTbywgdGhpcyBjb2RlIHBhdGggaXMgbm90IG9ubHkgcmVhY2hhYmxlIGJ1dCAqaGlnaGx5KiByZWFjaGFibGUgYW5kIGVhc2lseSBmdXp6YWJsZSFcblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB3ZSB1bmRlcnN0YW5kIHRoZSByZWFjaGFiaWxpdHkgb2YgdGhlIG90aGVycy4gVGhlIGNvZGUgaW4gYHZmaW9fYXBfbWRldl9jZmdfYWRkYCBhbmQgYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCBhcmUgYWxzbyB3b3J0aCBmdXp6aW5nLiBUaGV5J3JlIGNhbGxlZCBmcm9tIGB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZGAgYW5kIGB2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZWAsIHJlc3BlY3RpdmVseS4gVGhlc2UsIGluIHR1cm4sIGFyZSBjYWxsZWQgZnJvbSBgdmZpb19hcF9vbl9jZmdfY2hhbmdlZGAuIEhvd2V2ZXIsIGB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkYCBpcyB0cmlnZ2VyZWQgYnkgQVAgY29uZmlndXJhdGlvbiBjaGFuZ2VzLiBXaGlsZSBwb3NzaWJsZSB0aGF0IHN5emthbGxlciBjb3VsZCB0cmlnZ2VyIEFQIGNvbmZpZyBjaGFuZ2VzIGl0IHNlZW1zIGxpa2UgdGhhdCB3b3VsZCBiZSBkaWZmaWN1bHQgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZS4gVGhlIHBlcmlvZGljIHNjYW4gd2l0aCBtZGV2IGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiBhcmUgb3VyIHByaW1lIHRhcmdldHMuXG5cbkZpbmFsbHksIHRoZXJlJ3MgYHN0YXR1c19zaG93YC4gSXQncyBhIHN5c2ZzIGF0dHJpYnV0ZSBvbiB0aGUgQVAgZGV2aWNlLiBJZiB0aGVyZSBhcmUgbm8gQVAgZGV2aWNlcywgd2UgbWlnaHQgbm90IGdldCB0byBpdC4gSG93ZXZlciwgbm93IEkgcmVtZW1iZXIgdGhhdCBgc3RhdHVzX3Nob3dgIGlzIGFuIGF0dHJpYnV0ZSBvZiB0aGUgbWRldiBkZXZpY2UgaXRzZWxmLiBUaGF0J3MgZ29vZCwgbm93LCBsZXQncyBqdXN0IGNoZWNrIHdoZXJlIGl0J3MgcmVnaXN0ZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwMDcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjM6MTAuNTkzNjkyMDQ1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY1MDQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0dXNfc2hvd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjI5ND1zdGF0aWMgc3RydWN0IGFwX21hdHJpeF9tZGV2ICp2ZmlvX2FwX21kZXZfZm9yX3F1ZXVlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzMTAtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzMTE6c3RhdGljIHNzaXplX3Qgc3RhdHVzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzEyLVxcdFxcdFxcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMzoxMC42MzkzNDc4MjNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4MzM3ODY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkFuYWx5emluZyB0aGUgYHN0YXR1c19zaG93YCBDb250ZXh0KipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgc3RhdHVzX3Nob3dgIGZ1bmN0aW9uIG9yIG1ldGhvZCBpcyBhY3R1YWxseSBkb2luZy4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHRoZSBuYW1lIHN1Z2dlc3RzIGl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBwcmVzZW50aW5nIHNvbWUga2luZCBvZiBzeXN0ZW0gb3IgcHJvY2VzcyBzdGF0dXMgaW5mb3JtYXRpb24uIEJ1dCwgSSBjYW4ndCBqdXN0IGp1bXAgdG8gY29uY2x1c2lvbnMsIEkgbmVlZCB0aGUgY29udGV4dC4gV2hhdCdzIHRoZSBzdXJyb3VuZGluZyBjb2RlPyBBcmUgdGhlcmUgYW55IGNvbW1lbnRzPyBXaGF0IG90aGVyIGZ1bmN0aW9ucyBvciBjbGFzc2VzIGRvZXMgaXQgaW50ZXJhY3Qgd2l0aD8gSSdtIHRoaW5raW5nIEknbGwgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzdGFjayB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgYXBwbGljYXRpb24uIElzIGl0IGRpc3BsYXlpbmcgZGF0YSBmcm9tIGEgZGF0YWJhc2U/IEEgY29uZmlndXJhdGlvbiBmaWxlPyBTeXN0ZW0gY2FsbHM/IE9yIG1heWJlIGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCBzb21lIHNvcnQgb2YgbW9uaXRvcmluZyBzZXJ2aWNlPyBLbm93aW5nIHRoZSBkYXRhIHNvdXJjZSBpcyB0aGUgZmlyc3Qga2V5IHN0ZXAuIFRoZW4sIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBvdXRwdXQuIElzIGl0IGp1c3QgZm9ybWF0dGVkIHRleHQ/IERvZXMgaXQgZ2VuZXJhdGUgYSBHVUkgZWxlbWVudD8gRG9lcyBpdCB3cml0ZSB0byBhIGxvZyBmaWxlPyBPbmNlIEkgdW5kZXJzdGFuZCB0aGUgaW5wdXQgYW5kIG91dHB1dCwgSSBjYW4gZGV0ZXJtaW5lIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZGVidWcsIG1vZGlmeSwgb3IgZW5oYW5jZSB0aGUgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24uIEl0J3MgYWxsIGFib3V0IGNvbnRleHQgYW5kIGhvdyB0aGUgYHN0YXR1c19zaG93YCBpcyB1c2VkIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM3MCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIzOjE0LjQyMjczMDQxNloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMTEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIzMTE6XFx0c3RhdGljIHNzaXplX3Qgc3RhdHVzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbjIzMTI6XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuMjMxMzpcXHRcXHRcXHRcXHQgICBjaGFyICpidWYpXFxuMjMxNDpcXHR7XFxuMjMxNTpcXHRcXHRzc2l6ZV90IG5jaGFycyA9IDA7XFxuMjMxNjpcXHRcXHRzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcTtcXG4yMzE3OlxcdFxcdHVuc2lnbmVkIGxvbmcgYXBpZCwgYXBxaTtcXG4yMzE4OlxcdFxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XFxuMjMxOTpcXHRcXHRzdHJ1Y3QgYXBfZGV2aWNlICphcGRldiA9IHRvX2FwX2RldihkZXYpO1xcbjIzMjA6XFx0XFxuMjMyMTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VndWVzdHNfbG9jayk7XFxuMjMyMjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4yMzIzOlxcdFxcdHEgPSBkZXZfZ2V0X2RydmRhdGEoXFx1MDAyNmFwZGV2LVxcdTAwM2VkZXZpY2UpO1xcbjIzMjQ6XFx0XFx0bWF0cml4X21kZXYgPSB2ZmlvX2FwX21kZXZfZm9yX3F1ZXVlKHEpO1xcbjIzMjU6XFx0XFxuMjMyNjpcXHRcXHQvKiBJZiB0aGUgcXVldWUgaXMgYXNzaWduZWQgdG8gdGhlIG1hdHJpeCBtZWRpYXRlZCBkZXZpY2UsIHRoZW5cXG4yMzI3OlxcdFxcdCAqIGRldGVybWluZSB3aGV0aGVyIGl0IGlzIHBhc3NlZCB0aHJvdWdoIHRvIGEgZ3Vlc3Q7IG90aGVyd2lzZSxcXG4yMzI4OlxcdFxcdCAqIGluZGljYXRlIHRoYXQgaXQgaXMgdW5hc3NpZ25lZC5cXG4yMzI5OlxcdFxcdCAqL1xcbjIzMzA6XFx0XFx0aWYgKG1hdHJpeF9tZGV2KSB7XFxuMjMzMTpcXHRcXHRcXHRhcGlkID0gQVBfUUlEX0NBUkQocS1cXHUwMDNlYXBxbik7XFxuMjMzMjpcXHRcXHRcXHRhcHFpID0gQVBfUUlEX1FVRVVFKHEtXFx1MDAzZWFwcW4pO1xcbjIzMzM6XFx0XFx0XFx0LypcXG4yMzM0OlxcdFxcdFxcdCAqIElmIHRoZSBxdWV1ZSBpcyBwYXNzZWQgdGhyb3VnaCB0byB0aGUgZ3Vlc3QsIHRoZW4gaW5kaWNhdGVcXG4yMzM1OlxcdFxcdFxcdCAqIHRoYXQgaXQgaXMgaW4gdXNlOyBvdGhlcndpc2UsIGluZGljYXRlIHRoYXQgaXQgaXNcXG4yMzM2OlxcdFxcdFxcdCAqIG1lcmVseSBhc3NpZ25lZCB0byBhIG1hdHJpeCBtZWRpYXRlZCBkZXZpY2UuXFxuMjMzNzpcXHRcXHRcXHQgKi9cXG4yMzM4OlxcdFxcdFxcdGlmIChtYXRyaXhfbWRldi1cXHUwMDNla3ZtIFxcdTAwMjZcXHUwMDI2XFxuMjMzOTpcXHRcXHRcXHQgICAgdGVzdF9iaXRfaW52KGFwaWQsIG1hdHJpeF9tZGV2LVxcdTAwM2VzaGFkb3dfYXBjYi5hcG0pIFxcdTAwMjZcXHUwMDI2XFxuMjM0MDpcXHRcXHRcXHQgICAgdGVzdF9iaXRfaW52KGFwcWksIG1hdHJpeF9tZGV2LVxcdTAwM2VzaGFkb3dfYXBjYi5hcW0pKVxcbjIzNDE6XFx0XFx0XFx0XFx0bmNoYXJzID0gc3lzZnNfZW1pdChidWYsIFxcXCIlc1xcXFxuXFxcIiwgQVBfUVVFVUVfSU5fVVNFKTtcXG4yMzQyOlxcdFxcdFxcdGVsc2VcXG4yMzQzOlxcdFxcdFxcdFxcdG5jaGFycyA9IHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXNcXFxcblxcXCIsIEFQX1FVRVVFX0FTU0lHTkVEKTtcXG4yMzQ0OlxcdFxcdH0gZWxzZSB7XFxuMjM0NTpcXHRcXHRcXHRuY2hhcnMgPSBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVzXFxcXG5cXFwiLCBBUF9RVUVVRV9VTkFTU0lHTkVEKTtcXG4yMzQ2OlxcdFxcdH1cXG4yMzQ3OlxcdFxcbjIzNDg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4yMzQ5OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZ3Vlc3RzX2xvY2spO1xcbjIzNTA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIzOjE0LjQyMjkzODA0NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzIzOTg5ODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBBUCBRdWV1ZSBEZXZpY2UgUmVhY2hhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gdHJhY2UgdGhlIGZsb3cuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBzdGF0dXNfc2hvd2AgaXMgZGVmaW5pdGVseSBhc3NvY2lhdGVkIHdpdGggdGhlIEFQIHF1ZXVlIGRldmljZSwgYGFwZGV2LVx1MDAzZWRldmljZWAuIE1ha2VzIHNlbnNlLiBJZiB0aGVyZSAqaXNuJ3QqIGFuIEFQIHF1ZXVlIGRldmljZSwgdGhhdCBwYXRoIGlzIGNsZWFybHkgZGVhZC4gQnV0IHRoZW4gdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSSBzZWUgdGhhdCBgdmZpb19hcF9tZGV2X3Byb2JlYCBpcyByZWFjaGFibGUgcmVnYXJkbGVzcy4gVGhhdCBtYWtlcyBzZW5zZSwgSSBzdXBwb3NlLCBiZWNhdXNlIGl0IG1pZ2h0IGJlIHRoZSBzdGFydGluZyBwb2ludC5cblxuVGhlbiBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCBpcyBhbHNvIHJlYWNoYWJsZS4gT2theSwgdGhhdCdzIGFub3RoZXIgZW50cnkgcG9pbnQuIEFuZCBgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZ2AsIHRoYXQncyBhY2Nlc3NpYmxlIHRvbywgd2hpY2ggaW1wbGllcyBhbiBhbHRlcm5hdGl2ZSBwYXRod2F5LlxuXG5Ob3csIGB2ZmlvX2FwX21kZXZfY2ZnX2FkZGAgZ2V0cyBjYWxsZWQgaWYgYW5kIG9ubHkgaWYgYHZmaW9fYXBfbWRldl9vbl9jZmdfYWRkYCBpcyBpbnZva2VkLiBXYWl0LCBJJ20gdHJhY2luZyBiYWNrd2FyZC4uLiBgdmZpb19hcF9tZGV2X2NmZ19hZGRgIGlzICphY3R1YWxseSogY2FsbGVkIGZyb20gYHZmaW9fYXBfbWRldl9vbl9jZmdfYWRkYC4gQW5kIGB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZGAgaXMgdHJpZ2dlcmVkIGJ5IGB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkYC4gT2theSwgdGhhdCdzIG9uZSBsb2dpY2FsIGNoYWluLlxuXG5Ib2xkIG9uLCBJIHNlZSBzb21ldGhpbmcgZWxzZS4gSSdtIHJlbWluZGVkIHRoYXQgYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAgYWxzbyBtYWtlcyBhIGNhbGwgdG8gYHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmdgLCBhbmQgd2Fzbid0IHRoYXQgbW9kaWZpZWQgcmVjZW50bHk/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBpbnRlcmFjdGlvbi4gU28sIGJlZm9yZSBJIGNvbnRpbnVlLCBJIHRoaW5rIEknbGwgc3RhcnQgd2l0aCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiB0aGlzIGRlZXAgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzOTQsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMzoyMC43NDY5MzE3MjFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODc1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODc1OlxcdHZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxcbjI4NzY6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpvbGRfY29uZmlnX2luZm8pXFxuMjg3NzpcXHR7XFxuMjg3ODpcXHRcXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xcbjI4Nzk6XFx0XFxuMjg4MDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VndWVzdHNfbG9jayk7XFxuMjg4MTpcXHRcXG4yODgyOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsIFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2X2xpc3QsIG5vZGUpIHtcXG4yODgzOlxcdFxcdFxcdC8qXFxuMjg4NDpcXHRcXHRcXHQgKiBUaGUgbWRldnNfbG9jayBtdXN0IGJlIGhlbGQgdG8gYWNjZXNzIGZpZWxkcyB3aXRoaW4gbWF0cml4X21kZXYsXFxuMjg4NTpcXHRcXHRcXHQgKiBhbmQga3ZtLVxcdTAwM2Vsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIG1kZXZzX2xvY2sgdG8gc2F0aXNmeSB0aGUgbG9ja1xcbjI4ODY6XFx0XFx0XFx0ICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LlxcbjI4ODc6XFx0XFx0XFx0ICovXFxuMjg4ODpcXHRcXHRcXHRpZiAobWF0cml4X21kZXYtXFx1MDAzZWt2bSlcXG4yODg5OlxcdFxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0tXFx1MDAzZWxvY2spO1xcbjI4OTA6XFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuMjg5MTpcXHRcXG4yODkyOlxcdFxcdFxcdGlmIChiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXFx1MDAzZWFwbV9hZGQsIEFQX0RFVklDRVMpIFxcdTAwMjZcXHUwMDI2XFxuMjg5MzpcXHRcXHRcXHQgICAgYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LVxcdTAwM2VhcW1fYWRkLCBBUF9ET01BSU5TKSBcXHUwMDI2XFx1MDAyNlxcbjI4OTQ6XFx0XFx0XFx0ICAgIGJpdG1hcF9lbXB0eShtYXRyaXhfbWRldi1cXHUwMDNlYWRtX2FkZCwgQVBfRE9NQUlOUykpXFxuMjg5NTpcXHRcXHRcXHRcXHRnb3RvIGRvX3VubG9jaztcXG4yODk2OlxcdFxcbjI4OTc6XFx0XFx0XFx0dmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhtYXRyaXhfbWRldik7XFxuMjg5ODpcXHRcXHRcXHRiaXRtYXBfY2xlYXIobWF0cml4X21kZXYtXFx1MDAzZWFwbV9hZGQsIDAsIEFQX0RFVklDRVMpO1xcbjI4OTk6XFx0XFx0XFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVxcdTAwM2VhcW1fYWRkLCAwLCBBUF9ET01BSU5TKTtcXG4yOTAwOlxcdFxcdFxcdGJpdG1hcF9jbGVhcihtYXRyaXhfbWRldi1cXHUwMDNlYWRtX2FkZCwgMCwgQVBfRE9NQUlOUyk7XFxuMjkwMTpcXHRcXG4yOTAyOlxcdGRvX3VubG9jazpcXG4yOTAzOlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuMjkwNDpcXHRcXHRcXHRpZiAobWF0cml4X21kZXYtXFx1MDAzZWt2bSlcXG4yOTA1OlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X21kZXYtXFx1MDAzZWt2bS1cXHUwMDNlbG9jayk7XFxuMjkwNjpcXHRcXHR9XFxuMjkwNzpcXHRcXG4yOTA4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZ3Vlc3RzX2xvY2spO1xcbjI5MDk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMzoyMC43NDcxMzUyMjFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY0OTA0MjEyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipWRklPLUFQIExvY2sgT3JkZXJpbmcgRml4IENvbmZpcm1hdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBJbnF1aXJ5KipcblxuT2theSwgc28gYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAgaXMgaW5kZWVkIHJlYWNoYWJsZSwgYW5kIHRoZSByZWNlbnQgbW9kaWZpY2F0aW9ucyB0byBwcm9wZXJseSBpbXBsZW1lbnQgbG9ja2luZyBpbiB0aGlzIGFyZWEgYXJlIGNvbmZpcm1lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHJlYWwgZml4IGFkZHJlc3NpbmcgdGhlIGxvY2sgb3JkZXJpbmcgaXNzdWVzIGFuZCB0aGUgYGxvY2tkZXBgIHNwbGF0cyB3ZSB3ZXJlIHNlZWluZy4gVGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpcywgb2YgY291cnNlLCB0aGUgYFZGSU9fQVBgIGRyaXZlci4gTm93LCB0aGUgbmV4dCBxdWVzdGlvbiBpcyBhYm91dCBjb25maWd1cmF0aW9uLiBXaGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlcXVpcmVkIGZvciB0aGlzIGNoYW5nZSB0byBiZSBlZmZlY3RpdmUsIG9yIHRvIGV2ZW4gYmUgY29tcGlsZWQ/IExldCdzIHRha2UgYSBsb29rIGF0IHRoZSBgZHJpdmVycy9zMzkwL2NyeXB0by9LY29uZmlnYCBmaWxlIGFuZCBzZWUgd2hhdCdzIGluIHRoZXJlLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRlcGVuZGVuY2llcyB0aGlzIG5ldyBsb2NrIGJlaGF2aW9yIGhhcyBvbiBleGlzdGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3Njk5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMzoyNS4zOTYxODA0NThaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTk1MTU4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT19BUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjM6MjUuNDU2MTgyNzU2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjg1NDcyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipUcmFjaW5nIHRoZSBDb25maWd1cmF0aW9uIG9mIGB2ZmlvX2FwYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgdmZpb19hcGAgY29tcG9uZW50IGlzIGFjdHVhbGx5IGNvbmZpZ3VyZWQuIFRoYXQncyB0aGUgZmlyc3Qgc3RlcC4gSXMgaXQgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBjb25maWd1cmF0aW9uIChgLmNvbmZpZ2ApPyBQZXJoYXBzIGluIGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUgZmlsZSwgb3IgbWF5YmUgaXQncyBjb250cm9sbGVkIHZpYSBzb21lIHNvcnQgb2YgbW9kdWxlIHBhcmFtZXRlcj8gSSdsbCBuZWVkIHRvIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUga2VybmVsIHNvdXJjZSB0cmVlLCBsb29raW5nIGZvciByZWZlcmVuY2VzIHRvIGB2ZmlvX2FwYC4gSSdsbCB0cnkgdXNpbmcgYGdyZXBgIG9yIGBmaW5kYCBpbml0aWFsbHksIGxvb2tpbmcgZm9yIGJvdGggdGhlIG1vZHVsZSBuYW1lIGRpcmVjdGx5IGFuZCBhbnkgYXNzb2NpYXRlZCBzeW1ib2xzIG9yIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiBUaGVuIEknbGwgY2hlY2sgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24gb3IgdGhlIGBLY29uZmlnYCBmaWxlcyBmb3IgdGhhdCBzdWJzeXN0ZW0gdG8gdW5kZXJzdGFuZCB0aGUgdmFyaW91cyBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIE15IGZvY3VzIGhlcmUgd2lsbCBiZSBvbiB1bmRlcnN0YW5kaW5nIHRoZSB2YXJpb3VzIHdheXMgdGhhdCBpdCBpcyB0dXJuZWQgb24gYW5kIG9mZi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5OTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMzoyOS41MjQ3MzMwN1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzMzY3MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vTWFrZWZpbGU9MzQ9b2JqLSQoQ09ORklHX1BLRVlfVVYpICs9IHBrZXktdXYub1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9NYWtlZmlsZS0zNi0jIGFkanVuY3QgcHJvY2Vzc29yIG1hdHJpeFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vTWFrZWZpbGU6Mzc6dmZpb19hcC1vYmpzIDo9IHZmaW9fYXBfZHJ2Lm8gdmZpb19hcF9vcHMub1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX1ZGSU9fQVApICs9IHZmaW9fYXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMzoyOS41ODQwNzgwNzhaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxNzgxODExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBWRklPLUFQIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIGBDT05GSUdfVkZJT19BUGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBkcmlsbCBkb3duIGFuZCBzZWUgd2hlcmUgdGhpcyBgVkZJT19BUGAgaXMgZGVmaW5lZCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIHdoZXJlIGl0J3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbC4gR2l2ZW4gdGhhdCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIGhhcmR3YXJlLWFzc2lzdGVkIGNyeXB0b2dyYXBoeSBvciBhY2NlbGVyYXRpb24sIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBTLzM5MCBhcmNoaXRlY3R1cmUncyBjcnlwdG8tcmVsYXRlZCBjb25maWd1cmF0aW9uIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBsb29rIGF0IGBkcml2ZXJzL3MzOTAvY3J5cHRvL0tjb25maWdgLiBUaGF0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBmaW5kIHRoZSBgVkZJT19BUGAgb3B0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2UgdG8gZ28gb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzY1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjM6MzMuMzAxODk5MTUzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg0MDk1NjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPX0FQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9LY29uZmlnPTgyMz1jb25maWcgVkZJT19DQ1dcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTgzMy1cXG5hcmNoL3MzOTAvS2NvbmZpZzo4MzQ6Y29uZmlnIFZGSU9fQVBcXG5hcmNoL3MzOTAvS2NvbmZpZy04MzUtXFx0ZGVmX3RyaXN0YXRlIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjM6MzQuODg2MDAyMzc1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTMxODM2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqRGl2aW5nIGludG8gdGhlIHMzOTAgQXJjaGl0ZWN0dXJlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHRoZSBgYXJjaC9zMzkwL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA4MzQuIEknbSBnb2luZyB0byBhc3N1bWUgdGhpcyBzZWN0aW9uIGxpa2VseSByZWxhdGVzIHRvIHNvbWUgZmVhdHVyZSBvciBjb25maWd1cmF0aW9uIG9wdGlvbiB3aXRoaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBHaXZlbiB0aGUgY29udGV4dCBvZiBhIEtjb25maWcgZmlsZSwgaXQncyBwcm9iYWJseSBkZWZpbmluZyBhIGNvbmRpdGlvbmFsIGJ1aWxkIG9wdGlvbiwgYSBoYXJkd2FyZSBmZWF0dXJlIHNldHRpbmcsIG9yIG1heWJlIGV2ZW4gYSBkcml2ZXIgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHRoZSBJQk0gbWFpbmZyYW1lIGFyY2hpdGVjdHVyZS4gSSdsbCBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBoZWxwIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpdGVtLiBJdCBjb3VsZCBiZSBzb21ldGhpbmcgc3RyYWlnaHRmb3J3YXJkLCBvciBpdCBtaWdodCByZXF1aXJlIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcywgZmlybXdhcmUgaW50ZXJhY3Rpb25zLCBvciBzcGVjaWZpYyBrZXJuZWwgc3Vic3lzdGVtcyB3aXRoaW4gdGhlIHMzOTAgZW52aXJvbm1lbnQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY5MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIzOjM4LjM3OTE4OTI4N1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MzA6XFx0XFxuIDgzMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA4MzI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdmZpb19jY3cuXFxuIDgzMzpcXHRcXG4gODM0OlxcdGNvbmZpZyBWRklPX0FQXFxuIDgzNTpcXHRcXHRkZWZfdHJpc3RhdGUgblxcbiA4MzY6XFx0XFx0cHJvbXB0IFxcXCJWRklPIHN1cHBvcnQgZm9yIEFQIGRldmljZXNcXFwiXFxuIDgzNzpcXHRcXHRkZXBlbmRzIG9uIEtWTVxcbiA4Mzg6XFx0XFx0ZGVwZW5kcyBvbiBWRklPXFxuIDgzOTpcXHRcXHRkZXBlbmRzIG9uIEFQXFxuIDg0MDpcXHRcXHRzZWxlY3QgVkZJT19NREVWXFxuIDg0MTpcXHRcXHRoZWxwXFxuIDg0MjpcXHRcXHQgIFRoaXMgZHJpdmVyIGdyYW50cyBhY2Nlc3MgdG8gQWRqdW5jdCBQcm9jZXNzb3IgKEFQKSBkZXZpY2VzXFxuIDg0MzpcXHRcXHQgIHZpYSB0aGUgVkZJTyBtZWRpYXRlZCBkZXZpY2UgaW50ZXJmYWNlLlxcbiA4NDQ6XFx0XFxuIDg0NTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gODQ2OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgdmZpb19hcC5cXG4gODQ3OlxcdFxcbiA4NDg6XFx0ZW5kbWVudVxcbiA4NDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIzOjM4LjM3OTI4NDM1NloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIxMTYyMjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIGNvbnRleHQgaXMgbXkgYXJlYSBvZiBleHBlcnRpc2U6XG5cbioqRGlzc2VjdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIFZGSU9fQVAqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gZ2F0aGVyaW5nLCB0aGlzIGBWRklPX0FQYCB0aGluZyBpcyBidWlsdCBvbiB0b3Agb2YgYEtWTWAsIGBWRklPYCwgYW5kIGBBUGAuIFRoYXQncyBhIHByZXR0eSBzdGFuZGFyZCBsYXllcmluZyBhcHByb2FjaCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHdoYXQgZWFjaCBjb21wb25lbnQgYnJpbmdzIHRvIHRoZSB0YWJsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBBUGAgaXMuIFRoZSB0ZXJtIGl0c2VsZiBpcyByaW5naW5nIGEgYmVsbCAtIEkgc2VlbSB0byByZWNhbGwgdGhhdCBcIkFQXCIgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gYFpDUllQVGAsIGJ1dCBJIHNob3VsZCB2ZXJpZnkgdGhpcyBzbyBJIGRvbid0IGNvbmZ1c2Ugc2ltaWxhciBjb21wb25lbnRzLCBhbmQgbWlzdW5kZXJzdGFuZCBob3cgdGhpcyBlbnRpcmUgc3lzdGVtIHdvcmtzLiBMZXQncyBkaWcgaW50byB0aGF0IGBBUGAgY29tcG9uZW50LCBqdXN0IHRvIG1ha2Ugc3VyZSBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgbW9yZSBjb21wbGV4IGludGVyYWN0aW9ucy4gSSBuZWVkIHRvIGJlIGV4YWN0IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjA5LCJPdXRwdXRUb2tlbnMiOjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMzo0MS44MDA0NTAyMDFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mzg2MTkxMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3Q9Mjg3PXRvIGluaXRyZCBpbWFnZSwgdXNlciBjYW4gbm90aWNlIGl0IGJlZm9yZSBib290Llxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdC0yODktXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdDoyOTA6Qm9vdGNvbmZpZyBBUElzXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdC0yOTEtPT09PT09PT09PT09PT09XFxuLS1cXG5hcmNoL202OGsvS2NvbmZpZy5tYWNoaW5lPTI5PWNvbmZpZyBNQUNcXG4tLVxcbmFyY2gvbTY4ay9LY29uZmlnLm1hY2hpbmUtNDAtXFxuYXJjaC9tNjhrL0tjb25maWcubWFjaGluZTo0MTpjb25maWcgQVBPTExPXFxuYXJjaC9tNjhrL0tjb25maWcubWFjaGluZS00Mi1cXHRib29sIFxcXCJBcG9sbG8gc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWc9MjkxPWNvbmZpZyA0NzZGUEVcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWctMjk0LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWc6Mjk1OmNvbmZpZyBBUE04MjF4eFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWctMjk2LVxcdGJvb2xcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTc4NT1jb25maWcgRUFETV9TQ0hcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTc5NS1cXG5hcmNoL3MzOTAvS2NvbmZpZzo3OTY6Y29uZmlnIEFQXFxuYXJjaC9zMzkwL0tjb25maWctNzk3LVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04MDgtXFxuYXJjaC9zMzkwL0tjb25maWc6ODA5OmNvbmZpZyBBUF9ERUJVR1xcbmFyY2gvczM5MC9LY29uZmlnLTgxMC1cXHRkZWZfYm9vbCBuXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZz04ODU9Y29uZmlnIENNTV9JVUNWXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04OTItXFxuYXJjaC9zMzkwL0tjb25maWc6ODkzOmNvbmZpZyBBUFBMREFUQV9CQVNFXFxuYXJjaC9zMzkwL0tjb25maWctODk0LVxcdGRlZl9ib29sIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTkwOC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo5MDk6Y29uZmlnIEFQUExEQVRBX01FTVxcbmFyY2gvczM5MC9LY29uZmlnLTkxMC1cXHRkZWZfdHJpc3RhdGUgbVxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctOTI1LVxcbmFyY2gvczM5MC9LY29uZmlnOjkyNjpjb25maWcgQVBQTERBVEFfT1NcXG5hcmNoL3MzOTAvS2NvbmZpZy05MjctXFx0ZGVmX3RyaXN0YXRlIG1cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTk0MC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo5NDE6Y29uZmlnIEFQUExEQVRBX05FVF9TVU1cXG5hcmNoL3MzOTAvS2NvbmZpZy05NDItXFx0ZGVmX3RyaXN0YXRlIG1cXG4tLVxcbmFyY2gveDg2L0tjb25maWc9Mjc0MT1jb25maWcgWDg2X0FQTV9CT09UXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTI3NDQtXFxuYXJjaC94ODYvS2NvbmZpZzoyNzQ1Om1lbnVjb25maWcgQVBNXFxuYXJjaC94ODYvS2NvbmZpZy0yNzQ2LVxcdHRyaXN0YXRlIFxcXCJBUE0gKEFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQpIEJJT1Mgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9Mjc5OT1pZiBBUE1cXG5hcmNoL3g4Ni9LY29uZmlnLTI4MDAtXFxuYXJjaC94ODYvS2NvbmZpZzoyODAxOmNvbmZpZyBBUE1fSUdOT1JFX1VTRVJfU1VTUEVORFxcbmFyY2gveDg2L0tjb25maWctMjgwMi1cXHRib29sIFxcXCJJZ25vcmUgVVNFUiBTVVNQRU5EXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yODA3LVxcbmFyY2gveDg2L0tjb25maWc6MjgwODpjb25maWcgQVBNX0RPX0VOQUJMRVxcbmFyY2gveDg2L0tjb25maWctMjgwOS1cXHRib29sIFxcXCJFbmFibGUgUE0gYXQgYm9vdCB0aW1lXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yODI0LVxcbmFyY2gveDg2L0tjb25maWc6MjgyNTpjb25maWcgQVBNX0NQVV9JRExFXFxuYXJjaC94ODYvS2NvbmZpZy0yODI2LVxcdGRlcGVuZHMgb24gQ1BVX0lETEVcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjgzNi1cXG5hcmNoL3g4Ni9LY29uZmlnOjI4Mzc6Y29uZmlnIEFQTV9ESVNQTEFZX0JMQU5LXFxuYXJjaC94ODYvS2NvbmZpZy0yODM4LVxcdGJvb2wgXFxcIkVuYWJsZSBjb25zb2xlIGJsYW5raW5nIHVzaW5nIEFQTVxcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjg0OS1cXG5hcmNoL3g4Ni9LY29uZmlnOjI4NTA6Y29uZmlnIEFQTV9BTExPV19JTlRTXFxuYXJjaC94ODYvS2NvbmZpZy0yODUxLVxcdGJvb2wgXFxcIkFsbG93IGludGVycnVwdHMgZHVyaW5nIEFQTSBCSU9TIGNhbGxzXFxcIlxcbi0tXFxuZHJpdmVycy9jaGFyL0tjb25maWc9MjEzPWNvbmZpZyBYSUxJTlhfSFdJQ0FQXFxuLS1cXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yMjItXFxuZHJpdmVycy9jaGFyL0tjb25maWc6MjIzOmNvbmZpZyBBUFBMSUNPTVxcbmRyaXZlcnMvY2hhci9LY29uZmlnLTIyNC1cXHR0cmlzdGF0ZSBcXFwiQXBwbGljb20gaW50ZWxsaWdlbnQgZmllbGRidXMgY2FyZCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnPTI5MD1jb25maWcgUUNPTV9DTEtfUlBNSFxcbi0tXFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTI5OC1cXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWc6Mjk5OmNvbmZpZyBBUFFfR0NDXzgwODRcXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWctMzAwLVxcdHRyaXN0YXRlIFxcXCJBUFE4MDg0IEdsb2JhbCBDbG9jayBDb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTMwNy1cXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWc6MzA4OmNvbmZpZyBBUFFfTU1DQ184MDg0XFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTMwOS1cXHR0cmlzdGF0ZSBcXFwiQVBRODA4NCBNdWx0aW1lZGlhIENsb2NrIENvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2RtYS9LY29uZmlnPTc4PWNvbmZpZyBBTUNDX1BQQzQ0MFNQRV9BRE1BXFxuLS1cXG5kcml2ZXJzL2RtYS9LY29uZmlnLTg3LVxcbmRyaXZlcnMvZG1hL0tjb25maWc6ODg6Y29uZmlnIEFQUExFX0FETUFDXFxuZHJpdmVycy9kbWEvS2NvbmZpZy04OS1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgQURNQUMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWc9MTU0PWNvbmZpZyBFRklfREVWX1BBVEhfUEFSU0VSXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnLTE1Ni1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnOjE1Nzpjb25maWcgQVBQTEVfUFJPUEVSVElFU1xcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWctMTU4LVxcdGJvb2wgXFxcIkFwcGxlIERldmljZSBQcm9wZXJ0aWVzXFxcIlxcbi0tXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZz02Nj1jb25maWcgQUwzMzIwQVxcbi0tXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZy03NS1cXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnOjc2OmNvbmZpZyBBUERTOTE2MFxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctNzctXFx0dHJpc3RhdGUgXFxcIkFQRFM5MTYwIGNvbWJpbmVkIGFscyBhbmQgcHJveGltaXR5IHNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctODYtXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzo4Nzpjb25maWcgQVBEUzkzMDBcXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTg4LVxcdHRyaXN0YXRlIFxcXCJBUERTOTMwMCBhbWJpZW50IGxpZ2h0IHNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctOTYtXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzo5Nzpjb25maWcgQVBEUzkzMDZcXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTk4LVxcdHRyaXN0YXRlIFxcXCJBdmFnbyBBUERTOTMwNiBBbWJpZW50IExpZ2h0IFNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctMTA4LVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWc6MTA5OmNvbmZpZyBBUERTOTk2MFxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctMTEwLVxcdHRyaXN0YXRlIFxcXCJBdmFnbyBBUERTOTk2MCBnZXN0dXJlL1JHQi9BTFMvcHJveGltaXR5IHNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZz0yOTY9Y29uZmlnIFNQQVBSX1RDRV9JT01NVVxcbi0tXFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTMwMy1cXG5kcml2ZXJzL2lvbW11L0tjb25maWc6MzA0OmNvbmZpZyBBUFBMRV9EQVJUXFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTMwNS1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgREFSVCBJT01NVSBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pcnFjaGlwL0tjb25maWc9Nzg4PWNvbmZpZyBJUlFfSURUMzI0M1hcXG4tLVxcbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTc5Mi1cXG5kcml2ZXJzL2lycWNoaXAvS2NvbmZpZzo3OTM6Y29uZmlnIEFQUExFX0FJQ1xcbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTc5NC1cXHRib29sIFxcXCJBcHBsZSBJbnRlcnJ1cHQgQ29udHJvbGxlciAoQUlDKVxcXCJcXG4tLVxcbmRyaXZlcnMvbWlzYy9LY29uZmlnPTMyNz1jb25maWcgU0dJX0dSVV9ERUJVR1xcbi0tXFxuZHJpdmVycy9taXNjL0tjb25maWctMzMzLVxcbmRyaXZlcnMvbWlzYy9LY29uZmlnOjMzNDpjb25maWcgQVBEUzk4MDJBTFNcXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0zMzUtXFx0dHJpc3RhdGUgXFxcIk1lZGZpZWxkIEF2YWdvIEFQRFM5ODAyIEFMUyBTZW5zb3IgbW9kdWxlXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnPTEwNj1jb25maWcgTkUyS19QQ0lcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZy0xMjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnOjEyNDpjb25maWcgQVBORVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZy0xMjUtXFx0dHJpc3RhdGUgXFxcIlBDTUNJQSBORTIwMDAgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvcGNpLmM9MzMyMD1zdGF0aWMgaW50IHJ0dzg5X3BjaV9jZmdfZGFjKHN0cnVjdCBydHc4OV9kZXYgKnJ0d2RldiwgYm9vbCBmb3JjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvcGNpLmMtMzMzMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L3BjaS5jOjMzMzM6XFx0LyogQ29uZmlndXJlIERBQyBvbmx5IHZpYSBQQ0kgY29uZmlnIEFQSSwgbm90IERCSSBpbnRlcmZhY2VzICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9wY2kuYy0zMzM0LVxcdHJldCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFJUVzg5X1BDSUVfTDFfQ1RSTCwgXFx1MDAyNnZhbCk7XFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0yNTM9Y29uZmlnIE1BUlZFTExfQ04xMEtfVEFEX1BNVVxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjU5LVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjI2MDpjb25maWcgQVBQTEVfTTFfQ1BVX1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI2MS1cXHRib29sIFxcXCJBcHBsZSBNMSBDUFUgUE1VIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnPTE5ND1jb25maWcgQURWX1NXQlVUVE9OXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnLTIwNC1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnOjIwNTpjb25maWcgQVBQTEVfR01VWFxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWctMjA2LVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBHbXV4IERyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvcG1kb21haW4vYXBwbGUvS2NvbmZpZz0zPWlmIEFSQ0hfQVBQTEUgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnLTQtXFxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnOjU6Y29uZmlnIEFQUExFX1BNR1JfUFdSU1RBVEVcXG5kcml2ZXJzL3BtZG9tYWluL2FwcGxlL0tjb25maWctNi1cXHRib29sIFxcXCJBcHBsZSBTb0MgUE1HUiBwb3dlciBzdGF0ZSBjb250cm9sXFxcIlxcbi0tXFxuZHJpdmVycy9wb3dlci9zdXBwbHkvS2NvbmZpZz0xOD1jb25maWcgUE9XRVJfU1VQUExZX0hXTU9OXFxuLS1cXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnLTMwLVxcbmRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWc6MzE6Y29uZmlnIEFQTV9QT1dFUlxcbmRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIkFQTSBlbXVsYXRpb24gZm9yIGNsYXNzIGJhdHRlcmllc1xcXCJcXG4tLVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc9NT1tZW51IFxcXCJBcHBsZSBTb0MgZHJpdmVyc1xcXCJcXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTYtXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZzo3OmNvbmZpZyBBUFBMRV9NQUlMQk9YXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy04LVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBTb0MgbWFpbGJveGVzXFxcIlxcbi0tXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy0xOC1cXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnOjE5OmNvbmZpZyBBUFBMRV9SVEtJVFxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctMjAtXFx0dHJpc3RhdGUgXFxcIkFwcGxlIFJUS2l0IGNvLXByb2Nlc3NvciBJUEMgcHJvdG9jb2xcXFwiXFxuLS1cXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTMwLVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc6MzE6Y29uZmlnIEFQUExFX1NBUlRcXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBTQVJUIERNQSBhZGRyZXNzIGZpbHRlclxcXCJcXG4tLVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctNDAtXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZzo0MTpjb25maWcgQVBQTEVfVFVOQUJMRVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctNDItXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZz0xNDc9Y29uZmlnIFVTQl9RQ09NX0VVRFxcbi0tXFxuZHJpdmVycy91c2IvbWlzYy9LY29uZmlnLTE1OC1cXG5kcml2ZXJzL3VzYi9taXNjL0tjb25maWc6MTU5OmNvbmZpZyBBUFBMRV9NRklfRkFTVENIQVJHRVxcbmRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZy0xNjAtXFx0dHJpc3RhdGUgXFxcIkZhc3QgY2hhcmdlIGNvbnRyb2wgZm9yIGlPUyBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92aWRlby9LY29uZmlnPTY9bWVudSBcXFwiR3JhcGhpY3Mgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL3ZpZGVvL0tjb25maWctNy1cXG5kcml2ZXJzL3ZpZGVvL0tjb25maWc6ODpjb25maWcgQVBFUlRVUkVfSEVMUEVSU1xcbmRyaXZlcnMvdmlkZW8vS2NvbmZpZy05LVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZz0xMTExPWNvbmZpZyBNU0MzMTNFX1dBVENIRE9HXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMTEyMi1cXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWc6MTEyMzpjb25maWcgQVBQTEVfV0FUQ0hET0dcXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMTEyNC1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgU29DIHdhdGNoZG9nXFxcIlxcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jPTE2NTI9eGZzX2ZzX2ZpbGxfc3VwZXIoXFxuLS1cXG5mcy94ZnMveGZzX3N1cGVyLmMtMTY2NC1cXHQgKiBpcyBndWFyYW50ZWVkIHRvIGhhdmUgYmVlbiBjb21wbGV0ZWQgYnkgZWl0aGVyIHRoZSBvbGQgbW91bnQgQVBJIG9yXFxuZnMveGZzL3hmc19zdXBlci5jOjE2NjU6XFx0ICogdGhlIG5ld2VyIGZzb3Blbi9mc2NvbmZpZyBBUEkuXFxuZnMveGZzL3hmc19zdXBlci5jLTE2NjYtXFx0ICovXFxuLS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZz0zMTA9Y29uZmlnIFBNX1RSQUNFX1JUQ1xcbi0tXFxua2VybmVsL3Bvd2VyL0tjb25maWctMzI3LVxcbmtlcm5lbC9wb3dlci9LY29uZmlnOjMyODpjb25maWcgQVBNX0VNVUxBVElPTlxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTMyOS1cXHR0cmlzdGF0ZSBcXFwiQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCBFbXVsYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjIzOjQzLjMzOTA3Nzg1M1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU3OTg4MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IGRlZXAgaW4ga2VybmVsIGRldmVsb3BtZW50OlxuXG4qKkZpbmRpbmcgdGhlIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoZSBgY29uZmlnIEFQYCBvcHRpb24gaXMgZGVmaW5lZC4gTWVtb3J5IHNlcnZlcywgdGhhdCdzIHNvbWV0aGluZyBzcGVjaWZpYyB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIE9rYXksIGxldCdzIGp1c3QgY29uZmlybS4gTGluZSA3OTYgb2YgYGFyY2gvczM5MC9LY29uZmlnYOKApiBzb3VuZHMgYWJvdXQgcmlnaHQuXG5cbkxldCdzIHB1bGwgdXAgdGhhdCBgS2NvbmZpZ2AgZmlsZSBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIHRoYXQgbGluZSBudW1iZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBvcHRpb24gZG9lcywgaXRzIGRlcGVuZGVuY2llcywgaXRzIGRlZmF1bHQgdmFsdWUsIGFuZCBwZXJoYXBzIGFueSBoZWxwIHRleHQgYXNzb2NpYXRlZCB3aXRoIGl0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI4MTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyMzo0Ny4wOTcwNjg5NThaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzkwOlxcdFxcdCAgVGhpcyBkcml2ZXIgYWxsb3dzIHVzYWdlIG9mIEVBRE0gc3ViY2hhbm5lbHMuIEVBRE0gc3ViY2hhbm5lbHMgYWN0XFxuIDc5MTpcXHRcXHQgIGFzIGEgY29tbXVuaWNhdGlvbiB2ZWhpY2xlIGZvciBTQ00gaW5jcmVtZW50cy5cXG4gNzkyOlxcdFxcbiA3OTM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNzk0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVhZG1fc2NoLlxcbiA3OTU6XFx0XFxuIDc5NjpcXHRjb25maWcgQVBcXG4gNzk3OlxcdFxcdGRlZl90cmlzdGF0ZSB5XFxuIDc5ODpcXHRcXHRwcm9tcHQgXFxcIlN1cHBvcnQgZm9yIEFkanVuY3QgUHJvY2Vzc29ycyAoYXApXFxcIlxcbiA3OTk6XFx0XFx0aGVscFxcbiA4MDA6XFx0XFx0ICBUaGlzIGRyaXZlciBhbGxvd3MgdXNhZ2UgdG8gQWRqdW5jdCBQcm9jZXNzb3IgKEFQKSBkZXZpY2VzIHZpYVxcbiA4MDE6XFx0XFx0ICB0aGUgYXAgYnVzLCBjYXJkcyBhbmQgcXVldWVzLiBTdXBwb3J0ZWQgQWRqdW5jdCBQcm9jZXNzb3JzIGFyZVxcbiA4MDI6XFx0XFx0ICB0aGUgQ3J5cHRvRXhwcmVzcyBDYXJkcyAoQ0VYKS5cXG4gODAzOlxcdFxcbiA4MDQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gODA1OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFwLlxcbiA4MDY6XFx0XFxuIDgwNzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkgKGRlZmF1bHQpLlxcbiA4MDg6XFx0XFxuIDgwOTpcXHRjb25maWcgQVBfREVCVUdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjM6NDcuMDk3MTY1MDY4WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzAxNDIwMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFZGSU9fQVAgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIGJyZWFraW5nIHRoaXMgZG93biBzdGVwIGJ5IHN0ZXAuIEZpcnN0LCBsZXQncyBuYWlsIGRvd24gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBgVkZJT19BUGAgY29uZmlndXJhdGlvbi4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgVkZJT19BUGAgaGluZ2VzIG9uIGBLVk1gLCBgVkZJT2AsIGFuZCBgQVBgLiBGb3J0dW5hdGVseSwgYEFQYCBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSB0cmlzdGF0ZSAneScsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBHaXZlbiB0aGF0IGBWRklPYCBhbmQgYEtWTWAgYXJlIHN0YW5kYXJkLCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWdzIGFyZSBlc3NlbnRpYWxseSBgVkZJT19BUGAsIGBLVk1gLCBgVkZJT2AsIGFuZCBgQVBgLiBXYWl0LCBob2xkIG9uIOKAkyBgVkZJT19BUGAgKmltcGxpY2l0bHkqIGNvdmVycyBgS1ZNYCwgYFZGSU9gLCBhbmQgYEFQYCBkdWUgdG8gdGhlIGRlcGVuZGVuY2llcywgc28gd2UgY2FuIGp1c3Qgc3BlY2lmeSBgRW5hYmxlQ29uZmlnczogW1wiVkZJT19BUFwiXWAuIFRoYXQncyBjbGVhbmVyLlxuXG5Ob3csIGxldCdzIG1vdmUgb24gdG8gZnV6emluZyB0YXJnZXRzLiBUaGUgb2JqZWN0aXZlIGlzIHRvIGlkZW50aWZ5IG1vZGlmaWVkIGZ1bmN0aW9ucyB0aGF0IGFyZW4ndCBvbiBoZWF2aWx5IHRyYXZlbGVkIHBhdGhzLiBNeSBpbml0aWFsIGxpc3QgaW5jbHVkZXM6XG5cbiogICBgdmZpb19hcF9tZGV2X3Byb2JlYFxuKiAgIGB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWVgXG4qICAgYHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWVgXG4qICAgYHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZ2BcbiogICBgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmVgXG4qICAgYHZmaW9fYXBfbWRldl9jZmdfYWRkYFxuKiAgIGB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnYFxuKiAgIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgXG5cbkkgbmVlZCB0byBjb25maXJtIHdoaWNoIG9uZXMgYXJlIGV4dGVybmFsbHkgYWNjZXNzaWJsZSwgb3IgYXQgbGVhc3Qgbm90IHN0YXRpYy4gSSd2ZSBjaGVja2VkIGFuZCBub3RlZCB0aGF0IGB2ZmlvX2FwX21kZXZfcHJvYmVgIGlzIHN0YXRpYywgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWAsIGB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlYCwgYW5kIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgIGFyZSBub3QsIHdoaWxlIHRoZSBvdGhlcnMgYXJlLlxuXG5Ob3csIHJlbWVtYmVyaW5nIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMg4oCTIHdoaWNoIGFyZSBkaXN0aW5jdCBmcm9tIHN0YXRpYyBoZWxwZXJzIHdoaWNoIHRoZSBjb21waWxlciB3aWxsIGlubGluZSDigJMgSSBuZWVkIHRvIHJlY29uc2lkZXIgdGhpcyBsaXN0LiBFdmVuIHRob3VnaCBpdCdzIHN0YXRpYywgSSBiZWxpZXZlIGB2ZmlvX2FwX21kZXZfcHJvYmVgIGlzIGEgZ29vZCBjYW5kaWRhdGUsIGJlY2F1c2UgaXQgaXMgYW4gbWRldiBwcm9iZSBBUEkgZW50cnlwb2ludCwgYW5kIGdpdmVuIGl0cyB1c2FnZSBpbiBgdmZpb19hcF9tYXRyaXhfZHJpdmVyYCwgaXQgbGlrZWx5ICppc24ndCogaW5saW5lZC4gU28sIG15IHJlZmluZWQgdGFyZ2V0IGxpc3QgbG9va3MgbGlrZTpcblxuKiAgIGB2ZmlvX2FwX21kZXZfcHJvYmVgXG4qICAgYHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZWBcbiogICBgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZWBcbiogICBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYFxuKiAgIGB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZGAgLSBXYWl0LCB0aGUgZnVuY3Rpb24gd2hpY2ggd2FzIG1vZGlmaWVkIGlzIGB2ZmlvX2FwX21kZXZfY2ZnX2FkZGAgd2hpY2gsIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZGAuIFdlIG5lZWQgdG8gc2VlIGlmIGB2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZGAgaXMgbm9uLXN0YXRpYyBvciBub3QgdG8gc2VlIGlmIHRoaXMgaXMgYSBzdWl0YWJsZSB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzQ1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjM6NTkuMzk4NTg5MzY4WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTk4NTczMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19hcF9tZGV2X29uX2NmZ19hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI3NjM9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19hZGQodW5zaWduZWQgbG9uZyAqYXBtX2FkZCwgdW5zaWduZWQgbG9uZyAqYXFtX2FkZCxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNzkxLS8qKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzkyOiAqIHZmaW9fYXBfbWRldl9vbl9jZmdfYWRkIC0gcmVzcG9uZHMgdG8gdGhlIGFkZGl0aW9uIG9mIGFkYXB0ZXJzLCBkb21haW5zIGFuZFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNzkzLSAqXFx0XFx0XFx0ICAgICBjb250cm9sIGRvbWFpbnMgdG8gdGhlIGhvc3QgQVAgY29uZmlndXJhdGlvblxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MDEtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4MDI6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X29uX2NmZ19hZGQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY29uZmlnX2luZm8sXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MDMtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBhcF9jb25maWdfaW5mbyAqcHJldl9jb25maWdfaW5mbylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yODM0PXZvaWQgdmZpb19hcF9vbl9jZmdfY2hhbmdlZChzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jZmdfaW5mbyxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yODQyLVxcdHZmaW9fYXBfbWRldl9vbl9jZmdfcmVtb3ZlKGN1cl9jZmdfaW5mbywgcHJldl9jZmdfaW5mbyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4NDM6XFx0dmZpb19hcF9tZGV2X29uX2NmZ19hZGQoY3VyX2NmZ19pbmZvLCBwcmV2X2NmZ19pbmZvKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjg0NC1cXHRtZW1jcHkoXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWluZm8sIGN1cl9jZmdfaW5mbywgc2l6ZW9mKCpjdXJfY2ZnX2luZm8pKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjM6NTkuNzU4NDUyOTk3WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1MzU3MDc0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJlYWNoYWJpbGl0eSBvZiBWRklPIEFQIENvZGUgaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHNwZWNpZmljIGNvZGUgcGF0aHMgcmVsYXRlZCB0byBWRklPIEFQIChBY2Nlc3MgUHJvdGVjdGlvbikgYXJlIHJlYWNoYWJsZSBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQsIHNwZWNpZmljYWxseSB0aG9zZSB1c2VkIGJ5IHN5emthbGxlci4gIEkndmUgaWRlbnRpZmllZCB0aGUga2V5IGVudHJ5IHBvaW50czogYHZmaW9fYXBfbWRldl9wcm9iZWAsIGB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWVgLCBgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZWAsIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgLCBhbmQgY3J1Y2lhbGx5LCBgdmZpb19hcF9vbl9jZmdfY2hhbmdlZGAuIFRoZSBsYXN0IG9uZSBpcyAqbm90KiBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIGl0IGludGVyZXN0aW5nIGZvciBvdXIgYW5hbHlzaXMuIEkgYWxzbyBub3RlZCBgc3RhdHVzX3Nob3dgLCB0aG91Z2ggSSdtIG5vdCBnb2luZyB0byBsZWFuIG9uIHRoYXQgYmVjYXVzZSwgYXMgSSBzdXNwZWN0ZWQsIGl0IGlzIHRvbyBnZW5lcmljYWxseSBuYW1lZCBhbmQgaGVhdmlseSBkdXBsaWNhdGVkLlxuXG5UaGUgY3JpdGljYWwgcGllY2UgaXMgdGhlIGBhcF9pbnN0cnVjdGlvbnNfYXZhaWxhYmxlKClgIGNoZWNrLiAgVGhpcyBmdW5jdGlvbiwgYXMgSSB1bmRlcnN0YW5kLCBvbmx5IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBob3N0IHN5c3RlbSAqYWN0dWFsbHkqIGhhcyBBY2Nlc3MgUHJvdGVjdGlvbiBpbnN0cnVjdGlvbnMgYXZhaWxhYmxlLCB3aGljaCBpcyBhIGNoYXJhY3RlcmlzdGljIG9mIHMzOTB4IG1haW5mcmFtZXMuICBOb3csIHRoZSBwcm9tcHQgc3RhdGVkIFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gcXVlc3Rpb24gd2hldGhlciB0aGlzIGNvZGUgY291bGQgYmUgaGl0IGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCwgYnV0IEkgcXVpY2tseSByZWFsaXplZCB0aGF0IHN5emthbGxlciBydW5zIHMzOTB4IGluc3RhbmNlcywgYW5kIG9uICpyZWFsKiBtYWluZnJhbWVzIChvciBWTXMgcHJvdmlkZWQgYnkgSUJNKSDigJMgdGhlIEFQIGluc3RydWN0aW9ucyAqYXJlKiBhdmFpbGFibGUgaW4gdGhhdCBjb250ZXh0LiAgVGh1cywgdGhlIGNvZGUgKmlzKiByZWFjaGFibGUgdXNpbmcgdGhlIHN5emthbGxlciBzZXR1cC5cblxuVGhlIHByb21wdCwgSSBzZWUgbm93LCBzcGVjaWZpY2FsbHkgc3RhdGVzIFwidmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzICpsaWtlKiBHQ0Ugb3IgUUVNVVwiIOKAkyBpdCdzIG5vdCBzYXlpbmcgc3RhbmRhcmQgeDg2IFFFTVUuICBTaW5jZSBzeXprYWxsZXIgKmRvZXMqIHVzZSBRRU1VL0tWTSBvbiBzMzkweCBoYXJkd2FyZSBmb3IgczM5MHggZnV6emluZywgYW5kIEFQIGluc3RydWN0aW9ucyBhcmUgcHJlc2VudCBpbiB0aGF0IGVudmlyb25tZW50LCB0aGlzIGNvZGUgKmlzKiBpbmRlZWQgcmVhY2hhYmxlLiBTbywgV29ydGhGdXp6aW5nID0gVHJ1ZS5cblxuSSBicmllZmx5IGNoZWNrZWQgb24gYHN0YXR1c19zaG93YC4gSSBpbW1lZGlhdGVseSBzYXcgdGhhdCBgc3RhdHVzX3Nob3dgIGlzIGEgYmFkIGNhbmRpZGF0ZSwgZ2l2ZW4gaXRzIHN0YXRpYyBuYXR1cmUgYW5kIGV4dHJlbWVseSBnZW5lcmljIG5hbWUsIHdoaWNoIGlzIHVzZWQgaHVuZHJlZHMgb2YgdGltZXMgaW4gdGhlIGtlcm5lbC4gYHZmaW9fYXBfbWRldl9wcm9iZWAgaXMgc3RhdGljLCBidXQgaXMgaXQgdW5pcXVlIGVub3VnaD8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MjQwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjI0OjA5LjI5NDE2MzY5M1oiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MjA0ODA2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX2FwX21kZXZfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTU4PXN0YXRpYyBzdHJ1Y3QgYXBfZHJpdmVyIHZmaW9fYXBfZHJ2ID0ge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo1OTpcXHQucHJvYmUgPSB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTYwLVxcdC5yZW1vdmUgPSB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTc3Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWRldl9pbml0X2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzg5LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo3OTA6c3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03OTEte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNzg9c3RhdGljIHN0cnVjdCBtZGV2X2RyaXZlciB2ZmlvX2FwX21hdHJpeF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM4Ni1cXHR9LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMzg3OlxcdC5wcm9iZSA9IHZmaW9fYXBfbWRldl9wcm9iZSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM4OC1cXHQucmVtb3ZlID0gdmZpb19hcF9tZGV2X3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNDE0PXZvaWQgdmZpb19hcF9tZGV2X3VucmVnaXN0ZXIodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDE5LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNDIwOmludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0MjEte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaD0xNTY9dm9pZCB2ZmlvX2FwX21kZXZfdW5yZWdpc3Rlcih2b2lkKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE1Ny1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE1ODppbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKnF1ZXVlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE1OS12b2lkIHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqcXVldWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyNDoxMC44ODYyMTczODRaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc2NDA3MTkxOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVkZJTy1BUCBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBgdmZpb19hcF9tZGV2X3Byb2JlYCDigJMgdGhhdCdzIHRoZSBrZXkgc3RhcnRpbmcgcG9pbnQsIHRoZSB1bmlxdWUgb25lIGluIHRoaXMgY29udGV4dC4gTGV0J3MgbWFrZSBzdXJlIEkndmUgZ290IHRoaXMgc3RyYWlnaHQuIFRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBJIG5lZWQgdG8gc2NydXRpbml6ZSBhcmU6IGB2ZmlvX2FwX21kZXZfcHJvYmVgLCBgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlYCwgYHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWVgLCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCwgYW5kIGB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkYC5cblxuUmlnaHQsIGxldCBtZSByZXZpc2l0IHRoYXQgbGlzdCBvZiBjaGFuZ2VzLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gT2theSwgaGVyZSB3ZSBnbzogYHZmaW9fYXBfbWRldl9wcm9iZWAsIHRoZW4gYHZmaW9fYXBfbWRldl9mb3JfcXVldWVgLCB3aGljaCwgZXZlbiB0aG91Z2ggaXQncyBzdGF0aWMsIGdldHMgY2FsbGVkIGJ5IGEgZmV3IGZ1bmN0aW9ucyBsaWtlIGBzdGF0dXNfc2hvd2AsIHRoYXQncyBwb3RlbnRpYWxseSBpbXBvcnRhbnQuIFRoZW4gdGhlcmUncyBgc3RhdHVzX3Nob3dgLCBgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlYCwgYHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWVgLCBhbmQgc29tZSBtb3JlIHN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfY2ZnYCB0aGF0J3MgY2FsbGVkIGJ5IGB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZWAgYW5kIHNpbWlsYXJseSwgYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCBjYWxsZWQgYnkgYHZmaW9fYXBfbWRldl9vbl9jZmdfcmVtb3ZlYC4gQWxzbyBgdmZpb19hcF9tZGV2X2NmZ19hZGRgIHdoaWNoIGlzIGNhbGxlZCBieSBgdmZpb19hcF9tZGV2X29uX2NmZ19hZGRgIGFuZCBgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZ2Agd2hpY2ggaXMgY2FsbGVkIGJ5IGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgLCBhbmQgZmluYWxseSBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYC5cblxuU28sIHRoaW5raW5nIGFib3V0IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cy4uLiBJdCBsb29rcyBsaWtlIGl0IGJvaWxzIGRvd24gdG86IGB2ZmlvX2FwX21kZXZfcHJvYmVgLCBgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlYCwgYHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWVgLCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCwgYW5kLCBpbXBvcnRhbnRseSwgYHZmaW9fYXBfb25fY2ZnX2NoYW5nZWRgIOKAkyBzaW5jZSBpdCB0cmlnZ2VycyBjYWxscyB0byBgdmZpb19hcF9tZGV2X29uX2NmZ19hZGRgIGFuZCBgdmZpb19hcF9tZGV2X29uX2NmZ19yZW1vdmVgLlxuXG5Ob3csIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgc2VydmUgYXMgZW50cnkgcG9pbnRzPyBIbW1tLCBgdmZpb19hcF9tZGV2X2Zvcl9xdWV1ZWAgaXMgY2FsbGVkIGJ5IGBzdGF0dXNfc2hvd2AsIGBpbl91c2Vfc2hvd2AsIGB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWVgIGFuZCBgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZWAuIFRoYXQgbWVhbnMgYHN0YXR1c19zaG93YCBhbmQgYGluX3VzZV9zaG93YCBhcmUgYWxzbyBlbnRyeXBvaW50cyBpbiBhIHdheSwgdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBUaG91Z2ggdGhlc2Ugc3lzZnMgYXR0cmlidXRlcywgd2l0aCB0aGUgYCpfc2hvd2AgYW5kIGAqX3N0b3JlYCBuYW1pbmcgY29udmVudGlvbiwgYXJlIHByZXR0eSBzdGFuZGFyZC4gRm9yIG5vdywgSSdsbCBrZWVwIHRoZSBmb2N1cyBvbiB0aG9zZSBrZXkgc3RhcnRpbmcgZnVuY3Rpb25zLlxuXG5KdXN0IGRvaW5nIGEgcXVpY2sgZG91YmxlLWNoZWNrLi4uIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUgbmFtZSBgdmZpb19hcF9vbl9jZmdfY2hhbmdlZGAgcmlnaHQsIHRoYXQgaXQncyB0aGUgcmlnaHQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDczLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjI1OjE4LjUyNjk0MTI1WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTYxMDEyMjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fYXBfb25fY2ZnX2NoYW5nZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTU4PXN0YXRpYyBzdHJ1Y3QgYXBfZHJpdmVyIHZmaW9fYXBfZHJ2ID0ge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTYxLVxcdC5pbl91c2UgPSB2ZmlvX2FwX21kZXZfcmVzb3VyY2VfaW5fdXNlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo2MjpcXHQub25fY29uZmlnX2NoYW5nZWQgPSB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy02My1cXHQub25fc2Nhbl9jb21wbGV0ZSA9IHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yODAyPXN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9vbl9jZmdfYWRkKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqY3VyX2NvbmZpZ19pbmZvLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MjctLyoqXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4Mjg6ICogdmZpb19hcF9vbl9jZmdfY2hhbmdlZCAtIGhhbmRsZXMgbm90aWZpY2F0aW9uIG9mIGNoYW5nZXMgdG8gdGhlIGhvc3QgQVBcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjgyOS0gKlxcdFxcdFxcdCAgICBjb25maWd1cmF0aW9uLlxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MzMtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4MzQ6dm9pZCB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqY3VyX2NmZ19pbmZvLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yODM1LVxcdFxcdFxcdCAgICBzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKnByZXZfY2ZnX2luZm8pXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE2MT1pbnQgdmZpb19hcF9tZGV2X3Jlc291cmNlX2luX3VzZSh1bnNpZ25lZCBsb25nICphcG0sIHVuc2lnbmVkIGxvbmcgKmFxbSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNjItXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoxNjM6dm9pZCB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtMTY0LVxcdFxcdFxcdCAgICBzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm9sZF9jb25maWdfaW5mbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjI1OjIwLjQ4Nzk2MDY4OVoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDA4OTE3Njc2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBWRklPIEFQIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIFZGSU8gQVAgZHJpdmVyIHBhdGNoLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkYCwgYHZmaW9fYXBfbWRldl9wcm9iZWAsIGB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWVgLCBgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZWAsIGFuZCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCBhcmUgYWxsIGNvcnJlY3QuIEV4Y2VsbGVudC4gVGhleSBhcmUgYWxzbyBlbnRyeSBwb2ludHMgLSBzcGVjaWZpY2FsbHkgY2FsbGJhY2tzIGZvciB0aGUgbWRldiBhbmQgQVAgZHJpdmVycy4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhlIG1haW4gZm9jdXMgYXJlYXMuXG5cbkkndmUgYWxzbyBub3RlZCBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnM6IGB2ZmlvX2FwX21kZXZfZm9yX3F1ZXVlYCwgYHN0YXR1c19zaG93YCwgYHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZ2AsIGB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZWAsIGB2ZmlvX2FwX21kZXZfY2ZnX2FkZGAsIGFuZCBgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZ2AuIFdoaWxlIHRoZXNlIGFyZSBpbXBvcnRhbnQsIHRoZXkncmUgbm90IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBidXQgcmF0aGVyIGhlbHBlcnMgYW5kIHN5c2ZzIGF0dHJpYnV0ZXMsIHNvIHRoZSBpbml0aWFsIGZvY3VzIHN5bWJvbCBsaXN0IGlzIHNvbGlkLlxuXG5UaGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIHBhdGNoIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyByZWxhdGVkIHRvIHRoZSBWRklPIEFQIGRyaXZlciBmb3IgczM5MCwgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgbG9jayBvcmRlcmluZyBpc3N1ZXMgYW5kIHJlbGF0ZWQgc3BsYXRzLiBUaGlzIGFmZmVjdHMgaG93IHRoZSBtZGV2IGFuZCBBUCBidXMgaW50ZXJhY3QgYW5kIHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gbWRldiBkZXZpY2VzIGFyZSBjcmVhdGVkIG9yIHRoZSBBUCBidXMgc2NhbnMgZm9yIGRldmljZXMsIGVzcGVjaWFsbHkgaW4gYSBzMzkweCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCBzeXprYWxsZXIgd291bGQgbGlrZWx5IHRyaWdnZXIuXG5cbk5vdyBmb3IgdGhlIGNvbmZpZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGlzIHJpZ2h0LiBUaGUgcHJpbWFyeSBjb25maWcgaXMgYFZGSU9fQVBgLCB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gZXhwbGljaXRseSBpbmNsdWRlPyBgVkZJT19BUGAgZGVwZW5kcyBvbiBgS1ZNYCwgYFZGSU9gLCBhbmQgYEFQYC4gU2luY2UgYEFQYCBpcyBgZGVmX3RyaXN0YXRlIHlgLCBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdC4gYEtWTWAgYW5kIGBWRklPYCBhcmUgYWxzbyBvZnRlbiBlbmFibGVkLiBIb3dldmVyLCB0byBiZSBzYWZlIGFuZCBlbnN1cmUgdGhlIGNvZGUgY29tcGlsZXMgc3RhdGljYWxseSBJIHNob3VsZCBpbmNsdWRlIGFsbCBmb3VyOiBgVkZJT19BUGAsIGBWRklPYCwgYEtWTWAsIGFuZCBgQVBgLiBNeSB0aGlua2luZyBpcyB0aGF0IHRoZSBLYnVpbGQgc3lzdGVtIG5lZWRzIHRvIGhhdmUgdGhlc2UgY29uZmlncyBleHBsaWNpdGx5IGRlY2xhcmVkLiBJJ3ZlIGRvdWJsZS1jaGVja2VkIHRoZSBwYXRjaCBhbmQgdGhlIG1vZGlmaWVkIGZpbGUsIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgLCBpcyBjb21waWxlZCB1bmRlciB0aGUgYENPTkZJR19WRklPX0FQYCBmbGFnLiBUaGVyZSdzIG5vIG90aGVyIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGludm9sdmVkLiBTbywgYmFzZWQgb24gdGhlIGBkZXBlbmRzIG9uYCBsb2dpYywgbXkgZmluYWwgYW5zd2VyIHNob3VsZCBiZTpcbmBFbmFibGVDb25maWdzOiBbXCJWRklPX0FQXCIsIFwiVkZJT1wiLCBcIktWTVwiLCBcIkFQXCJdYC5cbk5vdyBJJ20gY29uZmlkZW50IGluIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODk3NywiT3V0cHV0VG9rZW5zIjoyNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjI1OjQwLjU3NzE0MjA5M1oiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczOTE3MDI4LCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBWRklPX0FQLCBBUCIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWRklPX0FQXCIsXG4gICAgXCJWRklPXCIsXG4gICAgXCJLVk1cIixcbiAgICBcIkFQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19hcF9tZGV2X3Byb2JlXCIsXG4gICAgXCJ2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWVcIixcbiAgICBcInZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWVcIixcbiAgICBcInZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZVwiLFxuICAgIFwidmZpb19hcF9vbl9jZmdfY2hhbmdlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGZvciBzMzkwIGFyY2hpdGVjdHVyZSwgZml4aW5nIGxvY2sgb3JkZXJpbmcgYW5kIGxvY2tkZXAgc3BsYXRzIGluIHZhcmlvdXMgbWRldiBhbmQgQVAgYnVzIGNhbGxiYWNrcyAoZS5nLiwgdmZpb19hcF9tZGV2X3Byb2JlLCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB3aGVuIHRoZSB2ZmlvX2FwIGRyaXZlciBpcyBsb2FkZWQgYW5kIG1kZXYgZGV2aWNlcyBhcmUgY3JlYXRlZCB2aWEgc3lzZnMsIG9yIHdoZW4gdGhlIEFQIGJ1cyBwZXJpb2RpY2FsbHkgc2NhbnMgZm9yIGRldmljZXMuIFN5emthbGxlciBjYW4gdHJpZ2dlciB0aGVzZSBwYXRocyBpbiBzMzkweCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IEFQIGluc3RydWN0aW9ucyAoZS5nLiwgS1ZNIG9uIHMzOTB4IG1haW5mcmFtZXMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBWRklPX0FQLCBBUFwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyNTo0MC42NTEwNjkzODFaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1MTgzNjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBNaXNzaW5nIFZGSU9fQVAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGl0IHNlZW1zIGxpa2UgYFZGSU9fQVBgIGFuZCBzaW1wbHkgYEFQYCBhcmUgYmVpbmcgZmxhZ2dlZCBhcyBub24tZXhpc3RlbnQuIFRoYXQncyBvZGQsIEkgY291bGQgaGF2ZSBzd29ybiBJIHNhdyB0aGVtIGRlZmluZWQgc29tZXdoZXJlLCBlc3BlY2lhbGx5IHNpbmNlIEkndmUgYmVlbiB3b3JraW5nIHdpdGggdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBBaCwgdGhhdCdzIHJpZ2h0LCB0aGV5J3JlIGluIGBhcmNoL3MzOTAvS2NvbmZpZ2AhIFRoYXTigJlzIHdoZXJlIEkgd2FzIHByZXR0eSBzdXJlIEkgc2F3IHRoZW0uXG5cblRoZSBwcm9ibGVtIG11c3QgYmUgdGhhdCB0aGUgdG9vbGluZyBpcyBjaGVja2luZyB0aGUgd3JvbmcgYXJjaGl0ZWN0dXJlLiBQZXJoYXBzIGl0J3MgZGVmYXVsdGluZyB0byBjaGVja2luZyBhZ2FpbnN0IHg4NiBjb25maWd1cmF0aW9ucyBzaW5jZSBpdCBpc27igJl0IGF3YXJlIG9mIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSXQncyBsaWtlbHkgdHJ5aW5nIHRvIHZhbGlkYXRlIHRoaW5ncyBhZ2FpbnN0IGFuIHg4Ni1jZW50cmljIHZpZXcuIEhtbSwgbGV0IG1lIGp1c3QgY29uZmlybS4gWWVwLCBgVkZJT19BUGAgaXMgZGVmaW5pdGVseSBpbiBgYXJjaC9zMzkwL0tjb25maWdgLiBTbyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGJlZm9yZSBkaXZpbmcgZGVlcGVyLCBpcyB0byBjb25maXJtIHRoYXQgYENPTkZJR19WRklPX0FQYCBpcyBhY3R1YWxseSBkZWNsYXJlZC4gTGV0J3MgbWFrZSBzdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGl0c2VsZiBleGlzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMDM0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOlsic2V0LXJlc3VsdHMiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjoyNTo0NS4yMDI5MDc4OFoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNzQyNTc0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT19BUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvS2NvbmZpZz04MjM9Y29uZmlnIFZGSU9fQ0NXXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04MzMtXFxuYXJjaC9zMzkwL0tjb25maWc6ODM0OmNvbmZpZyBWRklPX0FQXFxuYXJjaC9zMzkwL0tjb25maWctODM1LVxcdGRlZl90cmlzdGF0ZSBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjI1OjQ2Ljc0MDMzODU4MloiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODI4MTQ2OTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIHNlZWluZyB0aGVzZSBjb25maWd1cmF0aW9ucyDigJMgc3BlY2lmaWNhbGx5IGluIGBhcmNoL3MzOTAvS2NvbmZpZ2AuIEkga25vdyB0aGV5J3JlIHRoZXJlLCB0aGF0J3MgY2VydGFpbi4gU28sIHdoeSBkaWQgdGhpcyBgc2V0LXJlc3VsdHNgIHRvb2wgdGVsbCBtZSB0aGV5IGRvbid0IGV4aXN0PyBBaCwgSSB0aGluayBJJ3ZlIGdvdCBpdC4gVGhpcyB0b29sIGlzIGxpa2VseSBjaGVja2luZyBhZ2FpbnN0IHRoZSB4ODYgYEtjb25maWdgLCBvciBtYXliZSBldmVuIHJ1bm5pbmcgYSBnZW5lcmljIGBtYWtlIGFsbHllc2NvbmZpZ2Agb24gYW4geDg2IGJ1aWxkLiBNYWtlcyBzZW5zZS4gVGhlc2UgY29uZmlncyBhcmUgZm9yIGFuIHMzOTAgc3BlY2lmaWMgZHJpdmVyLCB3aGljaCBtZWFucyB0aGV5J3JlIG9ubHkgZ29pbmcgdG8gYmUgYXZhaWxhYmxlIHdoZW4gdGhlIGFyY2hpdGVjdHVyZSBpcyBzZXQgdG8gYEFSQ0g9czM5MGAuXG5cbklmIHRoZSB0b29sIGlzIG91dHJpZ2h0IHJlamVjdGluZyB0aGVtLCBJJ20gZ29pbmcgdG8gaGF2ZSB0byBtYWtlIGEgY2hvaWNlLiBJIGNvdWxkIGp1c3Qgb21pdCB0aGVtIGVudGlyZWx5LiBPciwgbWF5YmUgb25seSBpbmNsdWRlIHRoZSBjb25maWdzIHRoYXQgZXhpc3Qgb24geDg2LCBsaWtlIGBWRklPYCBhbmQgYEtWTWAuIEJ1dCB3YWl0Li4uIGlmIEkgb21pdCB0aG9zZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlncywgYW0gSSBnb2luZyB0byBwcmV2ZW50IHN5emthbGxlciBmcm9tIGV2ZW4gZW5hYmxpbmcgdGhlbSBvbiBzMzkwPyBUaGF0IHdvdWxkIGRlZmVhdCB0aGUgcHVycG9zZS4gU3RpbGwsIGlmIHRoZSB0b29sIGFic29sdXRlbHkgcmVqZWN0cyB0aGVtLCBJIGRvbid0IGhhdmUgbXVjaCBvZiBhIGNob2ljZSwgZG8gST9cblxuQWxyaWdodCwgbGV0IG1lIHRyeSBzZXR0aW5nIGBFbmFibGVDb25maWdzOiBbXCJWRklPXCIsIFwiS1ZNXCJdYC4gVGhhdCBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTQ4OCwiT3V0cHV0VG9rZW5zIjoyMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjU6NTMuNTY4NDg4ODQ0WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU0MDIyOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZGSU9cIixcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmaW9fYXBfbWRldl9wcm9iZVwiLFxuICAgIFwidmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlXCIsXG4gICAgXCJ2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlXCIsXG4gICAgXCJ2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVcIixcbiAgICBcInZmaW9fYXBfb25fY2ZnX2NoYW5nZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBmb3IgczM5MCBhcmNoaXRlY3R1cmUsIGZpeGluZyBsb2NrIG9yZGVyaW5nIGFuZCBsb2NrZGVwIHNwbGF0cyBpbiB2YXJpb3VzIG1kZXYgYW5kIEFQIGJ1cyBjYWxsYmFja3MgKGUuZy4sIHZmaW9fYXBfbWRldl9wcm9iZSwgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgd2hlbiB0aGUgdmZpb19hcCBkcml2ZXIgaXMgbG9hZGVkIGFuZCBtZGV2IGRldmljZXMgYXJlIGNyZWF0ZWQgdmlhIHN5c2ZzLCBvciB3aGVuIHRoZSBBUCBidXMgcGVyaW9kaWNhbGx5IHNjYW5zIGZvciBkZXZpY2VzLiBTeXprYWxsZXIgY2FuIHRyaWdnZXIgdGhlc2UgcGF0aHMgaW4gczM5MHggdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBBUCBpbnN0cnVjdGlvbnMgKGUuZy4sIEtWTSBvbiBzMzkweCBtYWluZnJhbWVzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWRklPXCIsXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZmlvX2FwX21kZXZfcHJvYmVcIixcbiAgICBcInZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZVwiLFxuICAgIFwidmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZVwiLFxuICAgIFwidmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlXCIsXG4gICAgXCJ2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBkcml2ZXIgZm9yIHMzOTAgYXJjaGl0ZWN0dXJlLCBmaXhpbmcgbG9jayBvcmRlcmluZyBhbmQgbG9ja2RlcCBzcGxhdHMgaW4gdmFyaW91cyBtZGV2IGFuZCBBUCBidXMgY2FsbGJhY2tzIChlLmcuLCB2ZmlvX2FwX21kZXZfcHJvYmUsIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZSkuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHdoZW4gdGhlIHZmaW9fYXAgZHJpdmVyIGlzIGxvYWRlZCBhbmQgbWRldiBkZXZpY2VzIGFyZSBjcmVhdGVkIHZpYSBzeXNmcywgb3Igd2hlbiB0aGUgQVAgYnVzIHBlcmlvZGljYWxseSBzY2FucyBmb3IgZGV2aWNlcy4gU3l6a2FsbGVyIGNhbiB0cmlnZ2VyIHRoZXNlIHBhdGhzIGluIHMzOTB4IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgQVAgaW5zdHJ1Y3Rpb25zIChlLmcuLCBLVk0gb24gczM5MHggbWFpbmZyYW1lcykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDEyOjI1OjUzLjY0Mzg5ODAyMloiLCJTZXEiOjYxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExMzY4NzQxOTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjU6NTMuNjQ0NDA4MjgyWiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUxMTM2ODIyNjQyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcHJpbWFyaWx5IGFkZHJlc3NlcyBsb2NraW5nIGlzc3VlcyAoZS5nLiwgY2hhbmdpbmcgbWRldnNfbG9jayB0byBndWVzdHNfbG9jaywgZml4aW5nIGxvY2sgb3JkZXJpbmcgdG8gcHJldmVudCBsb2NrZGVwIHNwbGF0cyksIGZpeGVzIG1lbW9yeSBsZWFrcy9yZXNvdXJjZSBjbGVhbnVwIGluIGVycm9yIHBhdGhzLCBhbmQgY29ycmVjdHMgbG9naWMgYnVncyBpbnZvbHZpbmcgYml0bWFwIG9wZXJhdGlvbnMgKGJpdG1hcF9hbmRub3QgdnMgYml0bWFwX2ludGVyc2VjdHMpLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCBvciBtYW5pcHVsYXRlZC4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSByZWdyZXNzaW9ucyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGM5NjI4YjlkNWFiMjc5YjMxMDBhNWUwYzBiMGQwY2Q4YmU4MjA1YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDEyOjIxOjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG5pbmRleCA0NGIzYTFkY2MxYjM2Li5mYWFiNWU5MTc5ZmYxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG4rKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbkBAIC04MDMsOSArODAzLDkgQEAgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KVxuIFx0bWF0cml4X21kZXYtXHUwMDNlcmVxX3RyaWdnZXIgPSBOVUxMO1xuIFx0bWF0cml4X21kZXYtXHUwMDNlY2ZnX2NoZ190cmlnZ2VyID0gTlVMTDtcbiBcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZtZGV2LVx1MDAzZWRldiwgbWF0cml4X21kZXYpO1xuLVx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiBcdGxpc3RfYWRkKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZW5vZGUsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0KTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2spO1xuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX3B1dF92ZGV2OlxuQEAgLTIyOTcsNiArMjI5Nyw4IEBAIHN0YXRpYyBzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKnZmaW9fYXBfbWRldl9mb3JfcXVldWUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4gXHR1bnNpZ25lZCBsb25nIGFwaWQgPSBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pO1xuIFx0dW5zaWduZWQgbG9uZyBhcHFpID0gQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbik7XG4gXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2spO1xuK1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2X2xpc3QsIG5vZGUpIHtcbiBcdFx0aWYgKHRlc3RfYml0X2ludihhcGlkLCBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXBtKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHRlc3RfYml0X2ludihhcHFpLCBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXFtKSlcbkBAIC0yMzE2LDYgKzIzMTgsNyBAQCBzdGF0aWMgc3NpemVfdCBzdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuIFx0c3RydWN0IGFwX2RldmljZSAqYXBkZXYgPSB0b19hcF9kZXYoZGV2KTtcbiBcbitcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4gXHRxID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNmFwZGV2LVx1MDAzZWRldmljZSk7XG4gXHRtYXRyaXhfbWRldiA9IHZmaW9fYXBfbWRldl9mb3JfcXVldWUocSk7XG5AQCAtMjM0Myw2ICsyMzQ2LDcgQEAgc3RhdGljIHNzaXplX3Qgc3RhdHVzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXG4gXHRyZXR1cm4gbmNoYXJzO1xuIH1cbkBAIC0yNDE1LDE0ICsyNDE5LDE3IEBAIHZvaWQgdmZpb19hcF9tZGV2X3VucmVnaXN0ZXIodm9pZClcbiBcbiBpbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuIHtcbi1cdGludCByZXQ7XG4rXHRpbnQgcmV0LCBhcHFuO1xuIFx0c3RydWN0IHZmaW9fYXBfcXVldWUgKnE7XG4gXHRERUNMQVJFX0JJVE1BUChhcG1fZmlsdGVyZWQsIEFQX0RFVklDRVMpO1xuIFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjtcbiBcbitcdGFwcW4gPSB0b19hcF9xdWV1ZShcdTAwMjZhcGRldi1cdTAwM2VkZXZpY2UpLVx1MDAzZXFpZDtcbitcdG1hdHJpeF9tZGV2ID0gZ2V0X3VwZGF0ZV9sb2Nrc19ieV9hcHFuKGFwcW4pO1xuK1xuIFx0cmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKFx1MDAyNmFwZGV2LVx1MDAzZWRldmljZS5rb2JqLCBcdTAwMjZ2ZmlvX3F1ZXVlX2F0dHJfZ3JvdXApO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBlcnJfcmVsZWFzZV9sb2NrcztcbiBcbiBcdHEgPSBremFsbG9jX29iaigqcSk7XG4gXHRpZiAoIXEpIHtcbkBAIC0yNDMwLDExICsyNDM3LDEwIEBAIGludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXG4gXHRcdGdvdG8gZXJyX3JlbW92ZV9ncm91cDtcbiBcdH1cbiBcbi1cdHEtXHUwMDNlYXBxbiA9IHRvX2FwX3F1ZXVlKFx1MDAyNmFwZGV2LVx1MDAzZWRldmljZSktXHUwMDNlcWlkO1xuK1x0cS1cdTAwM2VhcHFuID0gYXBxbjtcbiBcdHEtXHUwMDNlc2F2ZWRfaXNjID0gVkZJT19BUF9JU0NfSU5WQUxJRDtcbiBcdG1lbXNldChcdTAwMjZxLVx1MDAzZXJlc2V0X3N0YXR1cywgMCwgc2l6ZW9mKHEtXHUwMDNlcmVzZXRfc3RhdHVzKSk7XG4gXHRJTklUX1dPUksoXHUwMDI2cS1cdTAwM2VyZXNldF93b3JrLCBhcHFfcmVzZXRfY2hlY2spO1xuLVx0bWF0cml4X21kZXYgPSBnZXRfdXBkYXRlX2xvY2tzX2J5X2FwcW4ocS1cdTAwM2VhcHFuKTtcbiBcbiBcdGlmIChtYXRyaXhfbWRldikge1xuIFx0XHR2ZmlvX2FwX21kZXZfbGlua19xdWV1ZShtYXRyaXhfbWRldiwgcSk7XG5AQCAtMjQ2NCw2ICsyNDcwLDggQEAgaW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcbiBcbiBlcnJfcmVtb3ZlX2dyb3VwOlxuIFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFx1MDAyNmFwZGV2LVx1MDAzZWRldmljZS5rb2JqLCBcdTAwMjZ2ZmlvX3F1ZXVlX2F0dHJfZ3JvdXApO1xuK2Vycl9yZWxlYXNlX2xvY2tzOlxuK1x0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX21kZXYobWF0cml4X21kZXYpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMjQ5OSwxMiArMjUwNywxNSBAQCB2b2lkIHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXG4gXHQvKlxuIFx0ICogSWYgdGhlIHF1ZXVlIGlzIG5vdCBpbiB0aGUgaG9zdCdzIEFQIGNvbmZpZ3VyYXRpb24sIHRoZW4gcmVzZXR0aW5nXG4gXHQgKiBpdCB3aWxsIGZhaWwgd2l0aCByZXNwb25zZSBjb2RlIDAxLCAoQVBRTiBub3QgdmFsaWQpOyBzbywgbGV0J3MgbWFrZVxuLVx0ICogc3VyZSBpdCBpcyBpbiB0aGUgaG9zdCdzIGNvbmZpZy5cbitcdCAqIHN1cmUgaXQgaXMgaW4gdGhlIGhvc3QncyBjb25maWcuIElmIGl0IGlzIG5vdCwgdGhlbiBmcmVlIHRoZSBLVk0gR0lTQ1xuK1x0ICogcmVzb3VyY2VzLlxuIFx0ICovXG4gXHRpZiAodGVzdF9iaXRfaW52KGFwaWQsICh1bnNpZ25lZCBsb25nICopbWF0cml4X2Rldi1cdTAwM2VpbmZvLmFwbSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgdGVzdF9iaXRfaW52KGFwcWksICh1bnNpZ25lZCBsb25nICopbWF0cml4X2Rldi1cdTAwM2VpbmZvLmFxbSkpIHtcbiBcdFx0dmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHEpO1xuIFx0XHRmbHVzaF93b3JrKFx1MDAyNnEtXHUwMDNlcmVzZXRfd29yayk7XG4rXHR9IGVsc2Uge1xuK1x0XHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XG4gXHR9XG4gXG4gZG9uZTpcbkBAIC0yNTU5LDI0ICsyNTcwLDI4IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICphcXJlbSxcbiBcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqY2RyZW0pXG4ge1xuLVx0aW50IGRvX2hvdHBsdWcgPSAwO1xuK1x0Ym9vbCBkb19ob3RwbHVnID0gZmFsc2U7XG4gXG4tXHRpZiAoIWJpdG1hcF9lbXB0eShhcHJlbSwgQVBfREVWSUNFUykpIHtcbi1cdFx0ZG9faG90cGx1ZyB8PSBiaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFwbSxcbi1cdFx0XHRcdFx0ICAgIG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFwbSxcbi1cdFx0XHRcdFx0ICAgIGFwcmVtLCBBUF9ERVZJQ0VTKTtcbitcdGlmIChiaXRtYXBfaW50ZXJzZWN0cyhtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hcG0sIGFwcmVtLCBBUF9ERVZJQ0VTKSkge1xuK1x0XHRiaXRtYXBfYW5kbm90KG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFwbSxcbitcdFx0XHQgICAgICBtYXRyaXhfbWRldi1cdTAwM2VzaGFkb3dfYXBjYi5hcG0sXG4rXHRcdFx0ICAgICAgYXByZW0sIEFQX0RFVklDRVMpO1xuK1x0XHRkb19ob3RwbHVnID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdGlmICghYml0bWFwX2VtcHR5KGFxcmVtLCBBUF9ET01BSU5TKSkge1xuLVx0XHRkb19ob3RwbHVnIHw9IGJpdG1hcF9hbmRub3QobWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXFtLFxuLVx0XHRcdFx0XHQgICAgbWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXFtLFxuLVx0XHRcdFx0XHQgICAgYXFyZW0sIEFQX0RFVklDRVMpO1xuK1x0aWYgKGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFxbSwgYXFyZW0sIEFQX0RPTUFJTlMpKSB7XG4rXHRcdGJpdG1hcF9hbmRub3QobWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYXFtLFxuK1x0XHRcdCAgICAgIG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFxbSxcbitcdFx0XHQgICAgICBhcXJlbSwgQVBfRE9NQUlOUyk7XG4rXHRcdGRvX2hvdHBsdWcgPSB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKCFiaXRtYXBfZW1wdHkoY2RyZW0sIEFQX0RPTUFJTlMpKVxuLVx0XHRkb19ob3RwbHVnIHw9IGJpdG1hcF9hbmRub3QobWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYWRtLFxuLVx0XHRcdFx0XHQgICAgbWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYWRtLFxuLVx0XHRcdFx0XHQgICAgY2RyZW0sIEFQX0RPTUFJTlMpO1xuK1x0aWYgKGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFkbSwgY2RyZW0sIEFQX0RPTUFJTlMpKSB7XG4rXHRcdGJpdG1hcF9hbmRub3QobWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IuYWRtLFxuK1x0XHRcdCAgICAgIG1hdHJpeF9tZGV2LVx1MDAzZXNoYWRvd19hcGNiLmFkbSxcbitcdFx0XHQgICAgICBjZHJlbSwgQVBfRE9NQUlOUyk7XG4rXHRcdGRvX2hvdHBsdWcgPSB0cnVlO1xuK1x0fVxuIFxuIFx0aWYgKGRvX2hvdHBsdWcpXG4gXHRcdHZmaW9fYXBfbWRldl91cGRhdGVfZ3Vlc3RfYXBjYihtYXRyaXhfbWRldik7XG5AQCAtMjYwMywyOCArMjYxOCwzNSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZSh1bnNpZ25lZCBsb25nICphcF9yZW1vdmUsXG4gXHRERUNMQVJFX0JJVE1BUChhcHJlbSwgQVBfREVWSUNFUyk7XG4gXHRERUNMQVJFX0JJVE1BUChhcXJlbSwgQVBfRE9NQUlOUyk7XG4gXHRERUNMQVJFX0JJVE1BUChjZHJlbSwgQVBfRE9NQUlOUyk7XG4tXHRpbnQgZG9fcmVtb3ZlID0gMDtcbitcdGludCBkb19yZW1vdmU7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbitcdFx0LypcbitcdFx0ICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIHRvIGFjY2VzcyBmaWVsZHMgd2l0aGluIG1hdHJpeF9tZGV2LFxuK1x0XHQgKiBhbmQga3ZtLVx1MDAzZWxvY2sgbXVzdCBiZSB0YWtlbiBiZWZvcmUgbWRldnNfbG9jayB0byBzYXRpc2Z5IHRoZSBsb2NrXG4rXHRcdCAqIG9yZGVyaW5nIHJlcXVpcmVtZW50IGFuZCBwcmV2ZW50IGEgbG9ja2RlcCBzcGxhdC5cbitcdFx0ICovXG4rXHRcdGlmIChtYXRyaXhfbWRldi1cdTAwM2Vrdm0pXG4rXHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiBcbi1cdFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoYXByZW0sIGFwX3JlbW92ZSxcbi1cdFx0XHRcdFx0ICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXBtLFxuLVx0XHRcdFx0XHQgIEFQX0RFVklDRVMpO1xuK1x0XHRkb19yZW1vdmUgPSBiaXRtYXBfYW5kKGFwcmVtLCBhcF9yZW1vdmUsXG4rXHRcdFx0XHQgICAgICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFwbSxcbitcdFx0XHRcdCAgICAgICBBUF9ERVZJQ0VTKTtcbiBcdFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoYXFyZW0sIGFxX3JlbW92ZSxcbiBcdFx0XHRcdFx0ICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXFtLFxuIFx0XHRcdFx0XHQgIEFQX0RPTUFJTlMpO1xuLVx0XHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChjZHJlbSwgY2RfcmVtb3ZlLFxuLVx0XHRcdFx0XHQgICAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hZG0sXG4tXHRcdFx0XHRcdCAgICAgQVBfRE9NQUlOUyk7XG4rXHRcdGRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kKGNkcmVtLCBjZF9yZW1vdmUsXG4rXHRcdFx0XHRcdG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hZG0sXG4rXHRcdFx0XHRcdEFQX0RPTUFJTlMpO1xuIFxuIFx0XHRpZiAoZG9fcmVtb3ZlKVxuIFx0XHRcdHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZyhtYXRyaXhfbWRldiwgYXByZW0sIGFxcmVtLFxuIFx0XHRcdFx0XHRcdCAgICBjZHJlbSk7XG4gXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuK1x0XHRpZiAobWF0cml4X21kZXYtXHUwMDNla3ZtKVxuK1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4gXHR9XG4gfVxuIFxuQEAgLTI3NDksMTIgKzI3NzEsMjAgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19hZGQodW5zaWduZWQgbG9uZyAqYXBtX2FkZCwgdW5zaWduZWQgbG9uZyAqYXFtX2FkZCxcbiBcdHZmaW9fYXBfZmlsdGVyX2FwaWRfYnlfcXR5cGUoYXBtX2FkZCwgYXFtX2FkZCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgbWRldnNfbG9jayBtdXN0IGJlIGhlbGQgaW4gb3JkZXIgdG8gYWNjZXNzIGZpZWxkc1xuK1x0XHQgKiB3aXRoaW4gbWF0cml4X21kZXZcbitcdFx0ICovXG4rXHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbitcbiBcdFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cdTAwM2VhcG1fYWRkLFxuIFx0XHRcdCAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcG0sIGFwbV9hZGQsIEFQX0RFVklDRVMpO1xuIFx0XHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVx1MDAzZWFxbV9hZGQsXG4gXHRcdFx0ICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFxbSwgYXFtX2FkZCwgQVBfRE9NQUlOUyk7XG4gXHRcdGJpdG1hcF9hbmQobWF0cml4X21kZXYtXHUwMDNlYWRtX2FkZCxcbiBcdFx0XHQgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYWRtLCBhZG1fYWRkLCBBUF9ERVZJQ0VTKTtcbitcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4gXHR9XG4gfVxuIFxuQEAgLTI4MjEsOCArMjg1MSw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbiBcdERFQ0xBUkVfQklUTUFQKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XG4gXHRib29sIGZpbHRlcl9kb21haW5zLCBmaWx0ZXJfYWRhcHRlcnMsIGZpbHRlcl9jZG9tcywgZG9faG90cGx1ZyA9IGZhbHNlO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4tXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4rXHRiaXRtYXBfemVybyhhcG1fZmlsdGVyZWQsIEFQX0RFVklDRVMpO1xuIFxuIFx0ZmlsdGVyX2FkYXB0ZXJzID0gYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFwbSxcbiBcdFx0XHRcdFx0ICAgIG1hdHJpeF9tZGV2LVx1MDAzZWFwbV9hZGQsIEFQX0RFVklDRVMpO1xuQEAgLTI4NDEsOSArMjg3MCw2IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbiBcdFx0dmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTtcbiBcbiBcdHJlc2V0X3F1ZXVlc19mb3JfYXBpZHMobWF0cml4X21kZXYsIGFwbV9maWx0ZXJlZCk7XG4tXG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4gfVxuIFxuIHZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxuQEAgLTI4NTQsMTUgKzI4ODAsMjkgQEAgdm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXG4gXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2spO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2X2xpc3QsIG5vZGUpIHtcbitcdFx0LypcbitcdFx0ICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIHRvIGFjY2VzcyBmaWVsZHMgd2l0aGluIG1hdHJpeF9tZGV2LFxuK1x0XHQgKiBhbmQga3ZtLVx1MDAzZWxvY2sgbXVzdCBiZSB0YWtlbiBiZWZvcmUgbWRldnNfbG9jayB0byBzYXRpc2Z5IHRoZSBsb2NrXG4rXHRcdCAqIG9yZGVyaW5nIHJlcXVpcmVtZW50IGFuZCBwcmV2ZW50IGEgbG9ja2RlcCBzcGxhdC5cbitcdFx0ICovXG4rXHRcdGlmIChtYXRyaXhfbWRldi1cdTAwM2Vrdm0pXG4rXHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbitcbiBcdFx0aWYgKGJpdG1hcF9lbXB0eShtYXRyaXhfbWRldi1cdTAwM2VhcG1fYWRkLCBBUF9ERVZJQ0VTKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGJpdG1hcF9lbXB0eShtYXRyaXhfbWRldi1cdTAwM2VhcW1fYWRkLCBBUF9ET01BSU5TKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGJpdG1hcF9lbXB0eShtYXRyaXhfbWRldi1cdTAwM2VhZG1fYWRkLCBBUF9ET01BSU5TKSlcbi1cdFx0XHRjb250aW51ZTtcbitcdFx0XHRnb3RvIGRvX3VubG9jaztcbiBcbiBcdFx0dmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhtYXRyaXhfbWRldik7XG4gXHRcdGJpdG1hcF9jbGVhcihtYXRyaXhfbWRldi1cdTAwM2VhcG1fYWRkLCAwLCBBUF9ERVZJQ0VTKTtcbiBcdFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVx1MDAzZWFxbV9hZGQsIDAsIEFQX0RPTUFJTlMpO1xuIFx0XHRiaXRtYXBfY2xlYXIobWF0cml4X21kZXYtXHUwMDNlYWRtX2FkZCwgMCwgQVBfRE9NQUlOUyk7XG4rXG4rZG9fdW5sb2NrOlxuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbitcdFx0aWYgKG1hdHJpeF9tZGV2LVx1MDAzZWt2bSlcbitcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuIFx0fVxuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2spO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTI6MjU6NTMuNjQ0NDA5MDMyWiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMTM2ODE5NjAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjU2MzUsIk91dHB1dFRva2VucyI6MTI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI5MTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxMjozNDoyNS4wMTI2MDg1NjVaIiwiU2VxIjo2NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDIxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByaW1hcmlseSBhZGRyZXNzZXMgbG9ja2luZyBpc3N1ZXMgKGUuZy4sIGNoYW5naW5nIG1kZXZzX2xvY2sgdG8gZ3Vlc3RzX2xvY2ssIGZpeGluZyBsb2NrIG9yZGVyaW5nIHRvIHByZXZlbnQgbG9ja2RlcCBzcGxhdHMpLCBmaXhlcyBtZW1vcnkgbGVha3MvcmVzb3VyY2UgY2xlYW51cCBpbiBlcnJvciBwYXRocywgYW5kIGNvcnJlY3RzIGxvZ2ljIGJ1Z3MgaW52b2x2aW5nIGJpdG1hcCBvcGVyYXRpb25zIChiaXRtYXBfYW5kbm90IHZzIGJpdG1hcF9pbnRlcnNlY3RzKS4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgb3IgbWFuaXB1bGF0ZWQuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbnMgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByaW1hcmlseSBhZGRyZXNzZXMgbG9ja2luZyBpc3N1ZXMgKGUuZy4sIGNoYW5naW5nIG1kZXZzX2xvY2sgdG8gZ3Vlc3RzX2xvY2ssIGZpeGluZyBsb2NrIG9yZGVyaW5nIHRvIHByZXZlbnQgbG9ja2RlcCBzcGxhdHMpLCBmaXhlcyBtZW1vcnkgbGVha3MvcmVzb3VyY2UgY2xlYW51cCBpbiBlcnJvciBwYXRocywgYW5kIGNvcnJlY3RzIGxvZ2ljIGJ1Z3MgaW52b2x2aW5nIGJpdG1hcCBvcGVyYXRpb25zIChiaXRtYXBfYW5kbm90IHZzIGJpdG1hcF9pbnRlcnNlY3RzKS4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgb3IgbWFuaXB1bGF0ZWQuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbnMgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfz4vq[1] Phase: Succeeded StartedAt: 2026-08-12 12:34:36 +0000 UTC FinishedAt: 2026-08-12 12:34:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 12:34:36 +0000 UTC FinishedAt: 2026-08-12 12:34:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[2] Phase: Succeeded StartedAt: 2026-08-12 12:34:36 +0000 UTC FinishedAt: 2026-08-12 13:18:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 12:34:36 +0000 UTC FinishedAt: 2026-08-12 13:18:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 12:34:36 +0000 UTC FinishedAt: 2026-08-12 12:34:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 12:34:36 +0000 UTC FinishedAt: 2026-08-12 12:34:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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-workflowfz4vq/series-workflowfz4vq-convert-artifact-471598004/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 12:34:46 +0000 UTC FinishedAt: 2026-08-12 12:52:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 12:34:46 +0000 UTC FinishedAt: 2026-08-12 12:52:30 +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:*b6493a46-8d70-451c-b6b5-1a86f4b4ecaa,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-workflowfz4vq/series-workflowfz4vq-convert-artifact-471598004/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": "b5d0c4ad-ac1d-4f5f-ae1f-02d918de29d0", "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-workflowfz4vq/series-workflowfz4vq-build-action-2021636530/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 12:34:46 +0000 UTC FinishedAt: 2026-08-12 12:52:20 +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:*b6493a46-8d70-451c-b6b5-1a86f4b4ecaa,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-workflowfz4vq/series-workflowfz4vq-convert-artifact-471598004/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": "b5d0c4ad-ac1d-4f5f-ae1f-02d918de29d0", "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-workflowfz4vq/series-workflowfz4vq-build-action-2021636530/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 12:52:30 +0000 UTC FinishedAt: 2026-08-12 12:52:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 12:52:30 +0000 UTC FinishedAt: 2026-08-12 12:52:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 12:52:30 +0000 UTC FinishedAt: 2026-08-12 12:52:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 12:52:30 +0000 UTC FinishedAt: 2026-08-12 12:52:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-workflowfz4vq/series-workflowfz4vq-convert-artifact-1652014195/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 12:52:40 +0000 UTC FinishedAt: 2026-08-12 12:54:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 12:52:40 +0000 UTC FinishedAt: 2026-08-12 12:54:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b5d0c4ad-ac1d-4f5f-ae1f-02d918de29d0,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-workflowfz4vq/series-workflowfz4vq-build-action-2021636530/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-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 12:54:53 +0000 UTC FinishedAt: 2026-08-12 12:54:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 12:54:53 +0000 UTC FinishedAt: 2026-08-12 12:54:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 12:54:53 +0000 UTC FinishedAt: 2026-08-12 13:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 12:54:53 +0000 UTC FinishedAt: 2026-08-12 13:13: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:*b6493a46-8d70-451c-b6b5-1a86f4b4ecaa,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-workflowfz4vq/series-workflowfz4vq-convert-artifact-1652014195/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": "29f024bd-6171-4a93-9776-9e23494c9c0a", "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-workflowfz4vq/series-workflowfz4vq-build-action-3349050407/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 12:54:53 +0000 UTC FinishedAt: 2026-08-12 13:12: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:*b6493a46-8d70-451c-b6b5-1a86f4b4ecaa,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-workflowfz4vq/series-workflowfz4vq-convert-artifact-1652014195/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": "29f024bd-6171-4a93-9776-9e23494c9c0a", "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-workflowfz4vq/series-workflowfz4vq-build-action-3349050407/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 13:13:08 +0000 UTC FinishedAt: 2026-08-12 13:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 13:13:08 +0000 UTC FinishedAt: 2026-08-12 13:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 13:13:08 +0000 UTC FinishedAt: 2026-08-12 13:15:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 13:13:08 +0000 UTC FinishedAt: 2026-08-12 13:15:20 +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:*29f024bd-6171-4a93-9776-9e23494c9c0a,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-workflowfz4vq/series-workflowfz4vq-build-action-3349050407/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-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 13:15:29 +0000 UTC FinishedAt: 2026-08-12 13:18:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 13:15:29 +0000 UTC FinishedAt: 2026-08-12 13:18:38 +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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"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:*b5d0c4ad-ac1d-4f5f-ae1f-02d918de29d0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*29f024bd-6171-4a93-9776-9e23494c9c0a,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-workflowfz4vq/series-workflowfz4vq-build-action-2021636530/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-workflowfz4vq/series-workflowfz4vq-build-action-3349050407/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 13:15:29 +0000 UTC FinishedAt: 2026-08-12 13:15:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 13:15:29 +0000 UTC FinishedAt: 2026-08-12 13:15:35 +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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"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-workflowfz4vq/series-workflowfz4vq-convert-artifact-3834196076/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 13:15:29 +0000 UTC FinishedAt: 2026-08-12 13:15:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 13:15:29 +0000 UTC FinishedAt: 2026-08-12 13:15:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 13:15:29 +0000 UTC FinishedAt: 2026-08-12 13:15:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 13:15:40 +0000 UTC FinishedAt: 2026-08-12 13:18:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfz4vq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","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":["vfio_ap_mdev_probe","vfio_ap_mdev_probe_queue","vfio_ap_mdev_remove_queue","vfio_ap_on_scan_complete","vfio_ap_on_cfg_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO","KVM"],"series_id":"c5938596-df92-4cde-b647-64f2f6126a51","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-12 13:15:40 +0000 UTC FinishedAt: 2026-08-12 13:18:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b5d0c4ad-ac1d-4f5f-ae1f-02d918de29d0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*29f024bd-6171-4a93-9776-9e23494c9c0a,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-workflowfz4vq/series-workflowfz4vq-build-action-2021636530/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-workflowfz4vq/series-workflowfz4vq-build-action-3349050407/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-workflowfz4vq/series-workflowfz4vq-convert-artifact-3834196076/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,}