Name: series-workflowxbqqz Phase: Succeeded StartedAt: 2026-09-04 10:14:16 +0000 UTC FinishedAt: 2026-09-04 14:01:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[0] Phase: Succeeded StartedAt: 2026-09-04 10:14:16 +0000 UTC FinishedAt: 2026-09-04 10:17:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 10:14:16 +0000 UTC FinishedAt: 2026-09-04 10:17:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "940de590b839f71d6dc846160534bf202401b8b7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "VFIO", "VFIO_GROUP", "VFIO_CONTAINER", "VFIO_DEVICE_CDEV", "DRM_I915_GVT_KVMGT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "940de590b839f71d6dc846160534bf202401b8b7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "VFIO", "VFIO_GROUP", "VFIO_CONTAINER", "VFIO_DEVICE_CDEV", "DRM_I915_GVT_KVMGT" ], "series_id": "308ccf27-f252-4e8c-8e88-572275635063" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_vfio_file_add", "vfio_file_set_kvm", "vfio_group_set_kvm", "vfio_device_get_kvm_safe", "vfio_device_put_kvm", "file_to_kvm", "kvm_vm_release", "kvm_dev_ioctl_create_vm", "kvm_page_track_register_notifier", "kvm_page_track_unregister_notifier", "kvm_write_track_add_gfn", "kvm_write_track_remove_gfn" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O1ZGSU9fR1JPVVAmIzM0OywKICAgICYjMzQ7VkZJT19DT05UQUlORVImIzM0OywKICAgICYjMzQ7VkZJT19ERVZJQ0VfQ0RFViYjMzQ7LAogICAgJiMzNDtEUk1fSTkxNV9HVlRfS1ZNR1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdmZpb19maWxlX2FkZCYjMzQ7LAogICAgJiMzNDt2ZmlvX2ZpbGVfc2V0X2t2bSYjMzQ7LAogICAgJiMzNDt2ZmlvX2dyb3VwX3NldF9rdm0mIzM0OywKICAgICYjMzQ7dmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlJiMzNDssCiAgICAmIzM0O3ZmaW9fZGV2aWNlX3B1dF9rdm0mIzM0OywKICAgICYjMzQ7ZmlsZV90b19rdm0mIzM0OywKICAgICYjMzQ7a3ZtX3ZtX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7a3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm0mIzM0OywKICAgICYjMzQ7a3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXImIzM0OywKICAgICYjMzQ7a3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbiYjMzQ7LAogICAgJiMzNDtrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBpbnRlcmFjdGlvbiBiZXR3ZWVuIEtWTSBhbmQgVkZJTyAoYXMgd2VsbCBhcyB4ODYgcGFnZSB0cmFja2luZyBhbmQgczM5MCB2ZmlvLWFwKSBieSBwYXNzaW5nIGFuZCB0cmFja2luZyBgc3RydWN0IGZpbGUgKmAgaW5zdGVhZCBvZiByYXcgYHN0cnVjdCBrdm0gKmAgcG9pbnRlcnMuXG5cbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lcywgZmlsZS9LVk0gcmVmZXJlbmNlIGNvdW50aW5nLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBTdWNoIGlzc3VlcyBhcmUgbWVtb3J5IG1hbmFnZW1lbnQgYnVncyBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLlxuXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2sgb3IgaGVhcCBidWZmZXJzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgZGF0YSBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGludm9sdmUgY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSGVuY2UsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB3YXJyYW50aW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgdGhlIHJlZmVyZW5jZSBtYW5hZ2VtZW50IGJldHdlZW4gS1ZNIGFuZCBleHRlcm5hbCBzdWJzeXN0ZW1zIChwcmltYXJpbHkgVkZJTyBhbmQgS1ZNIHBhZ2UgdHJhY2tpbmcpLCBzd2l0Y2hpbmcgZnJvbSBob2xkaW5nIGRpcmVjdCAmIzM5O3N0cnVjdCBrdm0gKiYjMzk7IHBvaW50ZXJzIHRvIHVzaW5nICYjMzk7c3RydWN0IGZpbGUgKiYjMzk7IHJlZmVyZW5jZXMgdmlhIGdldF9maWxlKCkvZnB1dCgpIGFuZCBnZXRfZmlsZV9hY3RpdmUoKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGxpZmVjeWNsZSBwYXRocywgY29uY3VycmVuY3ksIGFuZCByZWZjb3VudGluZyBiZXR3ZWVuIEtWTSBWTSBmaWxlcyBhbmQgVkZJTyBkZXZpY2VzL2dyb3VwcyBkdXJpbmcgVk0gY3JlYXRpb24sIHJlbGVhc2UsIGFuZCBWRklPIGRldmljZSBhdHRhY2htZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjE2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTM4ZTI5NDU5NGQyZTlkZmFhNTRkYWFlNTRmMzlmY2IzNmY1ODVhNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTA6MTY6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhZ2VfdHJhY2suaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmhcbmluZGV4IDNkMDQwNzQxMDQ0YjQuLjA0NmEyNWM4ZmU0ZjggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFnZV90cmFjay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFnZV90cmFjay5oXG5AQCAtNDQsMTMgJiM0Mzs0NCwxMyBAQCBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSB7XG4gXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm5vZGUpO1xuIH07XG4gXG4taW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSxcbiYjNDM7aW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbik7XG4tdm9pZCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSxcbiYjNDM7dm9pZCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdFx0XHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbik7XG4gXG4taW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTtcbi1pbnQga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pO1xuJiM0MztpbnQga3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm4oc3RydWN0IGZpbGUgKmZpbGUsIGdmbl90IGdmbik7XG4mIzQzO2ludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3QgZmlsZSAqZmlsZSwgZ2ZuX3QgZ2ZuKTtcbiAjZWxzZVxuIC8qXG4gICogQWxsb3cgZGVmaW5pbmcgYSBub2RlIGluIGEgc3RydWN0dXJlIGV2ZW4gaWYgcGFnZSB0cmFja2luZyBpcyBkaXNhYmxlZCwgZS5nLlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZSBiL2FyY2gveDg2L2t2bS9NYWtlZmlsZVxuaW5kZXggMDQ3NDYwNGFiOGExNC4uOTZmODlkNmY3ZTZhOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL01ha2VmaWxlXG5AQCAtNjAsMTAgJiM0Mzs2MCw3IEBAIGV4cG9ydHNfZ3JlcF90cmFpbGVyIDo9IC0taW5jbHVkZT0mIzM5OyouW2NoXSYjMzk7IC1ucncgJChzcmN0cmVlKS92aXJ0L2t2bSAkKHNyY3RyZWUpL2FcbiBcdFx0XHRncmVwIC12IC1lIGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyIFxcXG4gXHRcdFx0XHQtZSBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyIFxcXG4gXHRcdFx0XHQtZSBrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbiBcXFxuLVx0XHRcdFx0LWUga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4gXFxcbi1cdFx0XHRcdC1lIGt2bV9nZXRfa3ZtIFxcXG4tXHRcdFx0XHQtZSBrdm1fZ2V0X2t2bV9zYWZlIFxcXG4tXHRcdFx0XHQtZSBrdm1fcHV0X2t2bVxuJiM0MztcdFx0XHRcdC1lIGt2bV93cml0ZV90cmFja19yZW1vdmVfZ2ZuXG4gXG4gIyBGb3JjZSBncmVwIHRvIGVtaXQgYSBnb29meSBncm91cCBzZXBhcmF0b3IgdGhhdCBjYW4gaW4gdHVybiBiZSByZXBsYWNlZCB3aXRoXG4gIyB0aGUgYWJvdmUgbmV3bGluZSBtYWNybyAobmV3bGluZXMgaW4gTWFrZSBhcmUgYSBuaWdodG1hcmUpLiAgTm90ZSwgZ3JlcCBvbmx5XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMgYi9hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suY1xuaW5kZXggN2U4MTk1YTMxMWJiMC4uOThmMTMzZTRmMGIzMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suY1xuQEAgLTIzNywxMCAmIzQzOzIzNywxMSBAQCBzdGF0aWMgaW50IGt2bV9lbmFibGVfZXh0ZXJuYWxfd3JpdGVfdHJhY2tpbmcoc3RydWN0IGt2bSAqa3ZtKVxuICAqIHJlZ2lzdGVyIHRoZSBub3RpZmllciBzbyB0aGF0IGV2ZW50IGludGVyY2VwdGlvbiBmb3IgdGhlIHRyYWNrZWQgZ3Vlc3RcbiAgKiBwYWdlcyBjYW4gYmUgcmVjZWl2ZWQuXG4gICovXG4taW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSxcbiYjNDM7aW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbilcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfaGVhZCAqaGVhZDtcbiYjNDM7XHRzdHJ1Y3Qga3ZtICprdm0gPSBmaWxlX3RvX2t2bShmaWxlKTtcbiBcdGludCByO1xuIFxuIFx0aWYgKCFrdm0gfHwga3ZtLVx1MDAzZW1tICE9IGN1cnJlbnQtXHUwMDNlbW0pXG5AQCAtMjUyLDcgJiM0MzsyNTMsNyBAQCBpbnQga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdHJldHVybiByO1xuIFx0fVxuIFxuLVx0a3ZtX2dldF9rdm0oa3ZtKTtcbiYjNDM7XHRnZXRfZmlsZShmaWxlKTtcbiBcbiBcdGhlYWQgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC50cmFja19ub3RpZmllcl9oZWFkO1xuIFxuQEAgLTI2NywxMCAmIzQzOzI2OCwxMSBAQCBFWFBPUlRfU1lNQk9MX0dQTChrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcik7XG4gICogc3RvcCByZWNlaXZpbmcgdGhlIGV2ZW50IGludGVyY2VwdGlvbi4gSXQgaXMgdGhlIG9wcG9zZWQgb3BlcmF0aW9uIG9mXG4gICoga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIoKS5cbiAgKi9cbi12b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLFxuJiM0Mzt2b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0XHRcdHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpuKVxuIHtcbiBcdHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9oZWFkICpoZWFkO1xuJiM0MztcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbGVfdG9fa3ZtKGZpbGUpO1xuIFxuIFx0aGVhZCA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLnRyYWNrX25vdGlmaWVyX2hlYWQ7XG4gXG5AQCAtMjc5LDcgJiM0MzsyODEsNyBAQCB2b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLFxuIFx0d3JpdGVfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXHRzeW5jaHJvbml6ZV9zcmN1KFx1MDAyNmhlYWQtXHUwMDNldHJhY2tfc3JjdSk7XG4gXG4tXHRrdm1fcHV0X2t2bShrdm0pO1xuJiM0MztcdGZwdXQoZmlsZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIpO1xuIFxuQEAgLTMzNiwxMSAmIzQzOzMzOCwxMiBAQCB2b2lkIGt2bV9wYWdlX3RyYWNrX2RlbGV0ZV9zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbiAgKiBhZGQgZ3Vlc3QgcGFnZSB0byB0aGUgdHJhY2tpbmcgcG9vbCBzbyB0aGF0IGNvcnJlc3BvbmRpbmcgYWNjZXNzIG9uIHRoYXRcbiAgKiBwYWdlIHdpbGwgYmUgaW50ZXJjZXB0ZWQuXG4gICpcbi0gKiBAa3ZtOiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uXG4mIzQzOyAqIEBmaWxlOiB0aGUgVk0gZmlsZSBvZiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uXG4gICogQGdmbjogdGhlIGd1ZXN0IHBhZ2UuXG4gICovXG4taW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKVxuJiM0MztpbnQga3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm4oc3RydWN0IGZpbGUgKmZpbGUsIGdmbl90IGdmbilcbiB7XG4mIzQzO1x0c3RydWN0IGt2bSAqa3ZtID0gZmlsZV90b19rdm0oZmlsZSk7XG4gXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xuIFx0aW50IGlkeDtcbiBcbkBAIC0zNjYsMTEgJiM0MzszNjksMTIgQEAgRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm4pO1xuICAqIHJlbW92ZSB0aGUgZ3Vlc3QgcGFnZSBmcm9tIHRoZSB0cmFja2luZyBwb29sIHdoaWNoIHN0b3BzIHRoZSBpbnRlcmNlcHRpb25cbiAgKiBvZiBjb3JyZXNwb25kaW5nIGFjY2VzcyBvbiB0aGF0IHBhZ2UuXG4gICpcbi0gKiBAa3ZtOiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uXG4mIzQzOyAqIEBmaWxlOiB0aGUgVk0gZmlsZSBvZiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uXG4gICogQGdmbjogdGhlIGd1ZXN0IHBhZ2UuXG4gICovXG4taW50IGt2bV93cml0ZV90cmFja19yZW1vdmVfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKVxuJiM0MztpbnQga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4oc3RydWN0IGZpbGUgKmZpbGUsIGdmbl90IGdmbilcbiB7XG4mIzQzO1x0c3RydWN0IGt2bSAqa3ZtID0gZmlsZV90b19rdm0oZmlsZSk7XG4gXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xuIFx0aW50IGlkeDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbmluZGV4IDk0MGMwZmY2NjhiZWUuLmYxNjBlMTk0NWZiY2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuQEAgLTE4MjIsMTcgJiM0MzsxODIyLDI3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICp2ZmlvX2FwX21kZXZfYXR0cl9ncm91cHNbXSA9IHtcbiBcbiAvKipcbiAgKiB2ZmlvX2FwX21kZXZfc2V0X2t2bSAtIHNldHMgYWxsIGRhdGEgZm9yIEBtYXRyaXhfbWRldiB0aGF0IGFyZSBuZWVkZWRcbi0gKiB0byBtYW5hZ2UgQVAgcmVzb3VyY2VzIGZvciB0aGUgZ3Vlc3Qgd2hvc2Ugc3RhdGUgaXMgcmVwcmVzZW50ZWQgYnkgQGt2bVxuJiM0MzsgKiB0byBtYW5hZ2UgQVAgcmVzb3VyY2VzIGZvciB0aGUgZ3Vlc3Qgd2hvc2Ugc3RhdGUgaXMgcmVwcmVzZW50ZWQgYnlcbiYjNDM7ICogQGt2bV9maWxlXG4gICpcbiAgKiBAbWF0cml4X21kZXY6IGEgbWVkaWF0ZWQgbWF0cml4IGRldmljZVxuLSAqIEBrdm06IHJlZmVyZW5jZSB0byBLVk0gaW5zdGFuY2VcbiYjNDM7ICogQGt2bV9maWxlOiB0aGUgS1ZNIFZNIGZpbGUgdGhpcyB2ZmlvIGRldmljZSBpcyBhc3NvY2lhdGVkIHdpdGhcbiAgKlxuLSAqIFJldHVybjogMCBpZiBubyBvdGhlciBtZWRpYXRlZCBtYXRyaXggZGV2aWNlIGhhcyBhIHJlZmVyZW5jZSB0byBAa3ZtO1xuJiM0MzsgKiBSZXR1cm46IDAgaWYgbm8gb3RoZXIgbWVkaWF0ZWQgbWF0cml4IGRldmljZSBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIFZNO1xuICAqIG90aGVyd2lzZSwgcmV0dXJucyBhbiAtRVBFUk0uXG4gICovXG4gc3RhdGljIGludCB2ZmlvX2FwX21kZXZfc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuLVx0XHRcdFx0c3RydWN0IGt2bSAqa3ZtKVxuJiM0MztcdFx0XHRcdHN0cnVjdCBmaWxlICprdm1fZmlsZSlcbiB7XG4mIzQzO1x0c3RydWN0IGt2bSAqa3ZtO1xuJiM0MztcbiYjNDM7XHRpZiAoIWt2bV9maWxlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1xuJiM0MztcdGt2bSA9IGt2bV9maWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XHRpZiAoIWt2bSlcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcbiBcdGlmIChrdm0tXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2JkKSB7XG4gXHRcdGdldF91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuIFx0XHRpZiAoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vaykge1xuQEAgLTE4NDEsNyAmIzQzOzE4NTEsNiBAQCBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9zZXRfa3ZtKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG4gXHRcdH1cbiBcdFx0a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vayA9IFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZXBxYXBfaG9vaztcbiBcbi1cdFx0a3ZtX2dldF9rdm0oa3ZtKTtcbiBcdFx0bWF0cml4X21kZXYtXHUwMDNla3ZtID0ga3ZtO1xuIFx0XHR2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpO1xuIFx0XHRyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7XG5AQCAtMTg5NCw3ICYjNDM7MTkwMyw2IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl91bnNldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbiBcdFx0bWF0cml4X21kZXYtXHUwMDNla3ZtID0gTlVMTDtcbiBcbiBcdFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuLVx0XHRrdm1fcHV0X2t2bShrdm0pO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vZ3JvdXAuYyBiL2RyaXZlcnMvdmZpby9ncm91cC5jXG5pbmRleCBiMjI5OWU1YmM2ZGYzLi41YmY4Y2JkZmYzNzdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL2dyb3VwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9ncm91cC5jXG5AQCAtODYwLDExICYjNDM7ODYwLDIwIEBAIGJvb2wgdmZpb19ncm91cF9lbmZvcmNlZF9jb2hlcmVudChzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXApXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi12b2lkIHZmaW9fZ3JvdXBfc2V0X2t2bShzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXAsIHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7dm9pZCB2ZmlvX2dyb3VwX3NldF9rdm0oc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgZmlsZSAqa3ZtKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqb2xkO1xuJiM0MztcbiYjNDM7XHRpZiAoa3ZtKVxuJiM0MztcdFx0Z2V0X2ZpbGUoa3ZtKTtcbiYjNDM7XG4gXHRzcGluX2xvY2soXHUwMDI2Z3JvdXAtXHUwMDNla3ZtX3JlZl9sb2NrKTtcbiYjNDM7XHRvbGQgPSBncm91cC1cdTAwM2Vrdm07XG4gXHRncm91cC1cdTAwM2Vrdm0gPSBrdm07XG4gXHRzcGluX3VubG9jayhcdTAwMjZncm91cC1cdTAwM2Vrdm1fcmVmX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAob2xkKVxuJiM0MztcdFx0ZnB1dChvbGQpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jXG5pbmRleCBmNDdmMzYzMTRhMWNjLi4wNDUxMzJlOTBiZmVlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jXG5AQCAtMTg0LDYgJiM0MzsxODQsNyBAQCBpbnQgdmZpb19wY2lfemRldl9mZWF0dXJlX2VycihzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxuIGludCB2ZmlvX3BjaV96ZGV2X29wZW5fZGV2aWNlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiB7XG4gXHRzdHJ1Y3QgenBjaV9kZXYgKnpkZXYgPSB0b196cGNpKHZkZXYtXHUwMDNlcGRldik7XG4mIzQzO1x0c3RydWN0IGt2bSAqa3ZtO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICghemRldilcbkBAIC0xOTUsOSAmIzQzOzE5NiwxNCBAQCBpbnQgdmZpb19wY2lfemRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cmV0ID0gLUVOT0VOVDtcbiYjNDM7XHRrdm0gPSB2ZGV2LVx1MDAzZXZkZXYua3ZtLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XHRpZiAoIWt2bSlcbiYjNDM7XHRcdGdvdG8gcmVjb3Zlcnk7XG4mIzQzO1xuIFx0aWYgKHpwY2lfa3ZtX2hvb2sua3ZtX3JlZ2lzdGVyKVxuLVx0XHRyZXQgPSB6cGNpX2t2bV9ob29rLmt2bV9yZWdpc3Rlcih6ZGV2LCB2ZGV2LVx1MDAzZXZkZXYua3ZtKTtcbiYjNDM7XHRcdHJldCA9IHpwY2lfa3ZtX2hvb2sua3ZtX3JlZ2lzdGVyKHpkZXYsIGt2bSk7XG4gXG4mIzQzO3JlY292ZXJ5OlxuIFx0aWYgKHJldClcbiBcdFx0enBjaV9zdG9wX21lZGlhdGVkX3JlY292ZXJ5KHpkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby92ZmlvLmggYi9kcml2ZXJzL3ZmaW8vdmZpby5oXG5pbmRleCA3NzI4YmM5OWI2M2QxLi45YjYxOTk1MWE1ZDBjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3ZmaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3ZmaW8uaFxuQEAgLTIzLDcgJiM0MzsyMyw3IEBAIHN0cnVjdCB2ZmlvX2RldmljZV9maWxlIHtcbiBcdHU4IGFjY2Vzc19ncmFudGVkO1xuIFx0dTMyIGRldmlkOyAvKiBvbmx5IHZhbGlkIHdoZW4gaW9tbXVmZCBpcyB2YWxpZCAqL1xuIFx0c3BpbmxvY2tfdCBrdm1fcmVmX2xvY2s7IC8qIHByb3RlY3Qga3ZtIGZpZWxkICovXG4tXHRzdHJ1Y3Qga3ZtICprdm07XG4mIzQzO1x0c3RydWN0IGZpbGUgKmt2bTtcbiBcdHN0cnVjdCBpb21tdWZkX2N0eCAqaW9tbXVmZDsgLyogcHJvdGVjdGVkIGJ5IHN0cnVjdCB2ZmlvX2RldmljZV9zZXQ6OmxvY2sgKi9cbiB9O1xuIFxuQEAgLTg4LDcgJiM0Mzs4OCw3IEBAIHN0cnVjdCB2ZmlvX2dyb3VwIHtcbiAjZW5kaWZcbiBcdGVudW0gdmZpb19ncm91cF90eXBlXHRcdHR5cGU7XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRncm91cF9sb2NrO1xuLVx0c3RydWN0IGt2bVx0XHRcdCprdm07XG4mIzQzO1x0c3RydWN0IGZpbGVcdFx0XHQqa3ZtO1xuIFx0c3RydWN0IGZpbGVcdFx0XHQqb3BlbmVkX2ZpbGU7XG4gXHRzdHJ1Y3QgaW9tbXVmZF9jdHhcdFx0KmlvbW11ZmQ7XG4gXHRzcGlubG9ja190XHRcdFx0a3ZtX3JlZl9sb2NrO1xuQEAgLTEwNyw3ICYjNDM7MTA3LDcgQEAgdm9pZCB2ZmlvX2RldmljZV9ncm91cF91bnVzZV9pb21tdShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSk7XG4gdm9pZCB2ZmlvX2RmX2dyb3VwX2Nsb3NlKHN0cnVjdCB2ZmlvX2RldmljZV9maWxlICpkZik7XG4gc3RydWN0IHZmaW9fZ3JvdXAgKnZmaW9fZ3JvdXBfZnJvbV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKTtcbiBib29sIHZmaW9fZ3JvdXBfZW5mb3JjZWRfY29oZXJlbnQoc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwKTtcbi12b2lkIHZmaW9fZ3JvdXBfc2V0X2t2bShzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXAsIHN0cnVjdCBrdm0gKmt2bSk7XG4mIzQzO3ZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGZpbGUgKmt2bSk7XG4gYm9vbCB2ZmlvX2RldmljZV9oYXNfY29udGFpbmVyKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKTtcbiBpbnQgX19pbml0IHZmaW9fZ3JvdXBfaW5pdCh2b2lkKTtcbiB2b2lkIHZmaW9fZ3JvdXBfY2xlYW51cCh2b2lkKTtcbkBAIC0xNjUsNyAmIzQzOzE2NSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX2dyb3VwX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGt2bSAqa3ZtKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGZpbGUgKmt2bSlcbiB7XG4gfVxuIFxuQEAgLTQyOSwxMSAmIzQzOzQyOSwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb192aXJxZmRfZXhpdCh2b2lkKVxuICNlbmRpZlxuIFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19LVk0pXG4tdm9pZCB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBrdm0gKmt2bSk7XG4mIzQzO3ZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZmlsZSAqa3ZtKTtcbiB2b2lkIHZmaW9fZGV2aWNlX3B1dF9rdm0oc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSxcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7XHRcdFx0XHRcdCAgICBzdHJ1Y3QgZmlsZSAqa3ZtKVxuIHtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jIGIvZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jXG5pbmRleCA0MjNlYWQ0OGFhZmUzLi5lZDk2YWNmYTg2MzU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmNcbkBAIC00NzIsMzYgJiM0Mzs0NzIsMTQgQEAgdm9pZCB2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKVxuIEVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fdW5yZWdpc3Rlcl9ncm91cF9kZXYpO1xuIFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19LVk0pXG4tdm9pZCB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7dm9pZCB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBmaWxlICprdm0pXG4ge1xuLVx0dm9pZCAoKnBmbikoc3RydWN0IGt2bSAqa3ZtKTtcbi1cdGJvb2wgKCpmbikoc3RydWN0IGt2bSAqa3ZtKTtcbi1cdGJvb2wgcmV0O1xuLVxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkZXZpY2UtXHUwMDNlZGV2X3NldC1cdTAwM2Vsb2NrKTtcbiBcbiBcdGlmICgha3ZtKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRwZm4gPSBzeW1ib2xfZ2V0KGt2bV9wdXRfa3ZtKTtcbi1cdGlmIChXQVJOX09OKCFwZm4pKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRmbiA9IHN5bWJvbF9nZXQoa3ZtX2dldF9rdm1fc2FmZSk7XG4tXHRpZiAoV0FSTl9PTighZm4pKSB7XG4tXHRcdHN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRyZXQgPSBmbihrdm0pO1xuLVx0c3ltYm9sX3B1dChrdm1fZ2V0X2t2bV9zYWZlKTtcbi1cdGlmICghcmV0KSB7XG4tXHRcdHN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRkZXZpY2UtXHUwMDNlcHV0X2t2bSA9IHBmbjtcbi1cdGRldmljZS1cdTAwM2Vrdm0gPSBrdm07XG4mIzQzO1x0ZGV2aWNlLVx1MDAzZWt2bSA9IGdldF9maWxlKGt2bSk7XG4gfVxuIFxuIHZvaWQgdmZpb19kZXZpY2VfcHV0X2t2bShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSlcbkBAIC01MTEsMTQgJiM0Mzs0ODksNyBAQCB2b2lkIHZmaW9fZGV2aWNlX3B1dF9rdm0oc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UpXG4gXHRpZiAoIWRldmljZS1cdTAwM2Vrdm0pXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmIChXQVJOX09OKCFkZXZpY2UtXHUwMDNlcHV0X2t2bSkpXG4tXHRcdGdvdG8gY2xlYXI7XG4tXG4tXHRkZXZpY2UtXHUwMDNlcHV0X2t2bShkZXZpY2UtXHUwMDNla3ZtKTtcbi1cdGRldmljZS1cdTAwM2VwdXRfa3ZtID0gTlVMTDtcbi1cdHN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pO1xuLVxuLWNsZWFyOlxuJiM0MztcdGZwdXQoZGV2aWNlLVx1MDAzZWt2bSk7XG4gXHRkZXZpY2UtXHUwMDNla3ZtID0gTlVMTDtcbiB9XG4gI2VuZGlmXG5AQCAtMTU0NCw5ICYjNDM7MTUxNSwxMyBAQCBib29sIHZmaW9fZmlsZV9lbmZvcmNlZF9jb2hlcmVudChzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmZpb19maWxlX2VuZm9yY2VkX2NvaGVyZW50KTtcbiBcbi1zdGF0aWMgdm9pZCB2ZmlvX2RldmljZV9maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7c3RhdGljIHZvaWQgdmZpb19kZXZpY2VfZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCB2ZmlvX2RldmljZV9maWxlICpkZiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuJiM0MztcdHN0cnVjdCBmaWxlICpvbGQ7XG4mIzQzO1xuJiM0MztcdGlmIChrdm0pXG4mIzQzO1x0XHRnZXRfZmlsZShrdm0pO1xuIFxuIFx0LypcbiBcdCAqIFRoZSBrdm0gaXMgZmlyc3QgcmVjb3JkZWQgaW4gdGhlIHZmaW9fZGV2aWNlX2ZpbGUsIGFuZCB3aWxsXG5AQCAtMTU1NCwyOCAmIzQzOzE1MjksMzIgQEAgc3RhdGljIHZvaWQgdmZpb19kZXZpY2VfZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHQgKiBpb21tdWZkIHN1Y2Nlc3NmdWxseSBpbiB0aGUgdmZpbyBkZXZpY2UgY2RldiBwYXRoLlxuIFx0ICovXG4gXHRzcGluX2xvY2soXHUwMDI2ZGYtXHUwMDNla3ZtX3JlZl9sb2NrKTtcbiYjNDM7XHRvbGQgPSBkZi1cdTAwM2Vrdm07XG4gXHRkZi1cdTAwM2Vrdm0gPSBrdm07XG4gXHRzcGluX3VubG9jayhcdTAwMjZkZi1cdTAwM2Vrdm1fcmVmX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAob2xkKVxuJiM0MztcdFx0ZnB1dChvbGQpO1xuIH1cbiBcbiAvKipcbiAgKiB2ZmlvX2ZpbGVfc2V0X2t2bSAtIExpbmsgYSBrdm0gd2l0aCBWRklPIGRyaXZlcnNcbi0gKiBAZmlsZTogVkZJTyBncm91cCBmaWxlIG9yIFZGSU8gZGV2aWNlIGZpbGVcbi0gKiBAa3ZtOiBLVk0gdG8gbGlua1xuJiM0MzsgKiBAdmZpb19maWxlOiBWRklPIGdyb3VwIGZpbGUgb3IgVkZJTyBkZXZpY2UgZmlsZVxuJiM0MzsgKiBAa3ZtOiBLVk0gZmlsZSB0byBsaW5rXG4gICpcbiAgKiBXaGVuIGEgVkZJTyBkZXZpY2UgaXMgZmlyc3Qgb3BlbmVkIHRoZSBLVk0gd2lsbCBiZSBhdmFpbGFibGUgaW5cbiAgKiBkZXZpY2UtXHUwMDNla3ZtIGlmIG9uZSB3YXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWxlLlxuICAqL1xuLXZvaWQgdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7dm9pZCB2ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqdmZpb19maWxlLCBzdHJ1Y3QgZmlsZSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cDtcbiBcbi1cdGdyb3VwID0gdmZpb19ncm91cF9mcm9tX2ZpbGUoZmlsZSk7XG4mIzQzO1x0Z3JvdXAgPSB2ZmlvX2dyb3VwX2Zyb21fZmlsZSh2ZmlvX2ZpbGUpO1xuIFx0aWYgKGdyb3VwKVxuIFx0XHR2ZmlvX2dyb3VwX3NldF9rdm0oZ3JvdXAsIGt2bSk7XG4gXG4tXHRpZiAodmZpb19kZXZpY2VfZnJvbV9maWxlKGZpbGUpKVxuLVx0XHR2ZmlvX2RldmljZV9maWxlX3NldF9rdm0oZmlsZSwga3ZtKTtcbiYjNDM7XHRpZiAodmZpb19kZXZpY2VfZnJvbV9maWxlKHZmaW9fZmlsZSkpXG4mIzQzO1x0XHR2ZmlvX2RldmljZV9maWxlX3NldF9rdm0odmZpb19maWxlLCBrdm0pO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX2ZpbGVfc2V0X2t2bSk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5pbmRleCAwM2JmYzkyODY0YjZlLi5iZmVjY2UxYjU5NTVhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbkBAIC03ODQsNiAmIzQzOzc4NCwxMyBAQCBzdHJ1Y3Qga3ZtIHtcbiBcdCAqIGt2bV9zd2FwX2FjdGl2ZV9tZW1zbG90cygpLlxuIFx0ICovXG4gXHRzdHJ1Y3QgbXV0ZXggc2xvdHNfYXJjaF9sb2NrO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQmFjay1yZWZlcmVuY2UgdG8gdGhlIFZNIGZpbGUgZm9yIHN1YnN5c3RlbXMgKGUuZy4sIFZGSU8pLiBIb2xkcyBub1xuJiM0MztcdCAqIHJlZmVyZW5jZSB0byBhdm9pZCBwaW5uaW5nIHRoZSBWTS4gQWNjZXNzIHZpYSBnZXRfZmlsZV9hY3RpdmUoXHUwMDI2a3ZtLVx1MDAzZWZpbGUpXG4mIzQzO1x0ICogb25seeKAlHNhZmUgYmVjYXVzZSBjbGVhcmVkIGluIGt2bV92bV9yZWxlYXNlKCkgYmVmb3JlIGZpbGUgZnJlZWQuIENhbGxlcnNcbiYjNDM7XHQgKiBzdG9yaW5nIHRoZSByZXN1bHQgbXVzdCB0YWtlIHRoZWlyIG93biByZWZlcmVuY2UgdmlhIGdldF9maWxlKClcbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tOyAvKiB1c2Vyc3BhY2UgdGllZCB0byB0aGlzIHZtICovXG4gXHR1bnNpZ25lZCBsb25nIG5yX21lbXNsb3RfcGFnZXM7XG4gXHQvKiBUaGUgdHdvIG1lbXNsb3Qgc2V0cyAtIGFjdGl2ZSBhbmQgaW5hY3RpdmUgKHBlciBhZGRyZXNzIHNwYWNlKSAqL1xuQEAgLTEwODIsNiAmIzQzOzEwODksNyBAQCB2b2lkIGt2bV9nZXRfa3ZtKHN0cnVjdCBrdm0gKmt2bSk7XG4gYm9vbCBrdm1fZ2V0X2t2bV9zYWZlKHN0cnVjdCBrdm0gKmt2bSk7XG4gdm9pZCBrdm1fcHV0X2t2bShzdHJ1Y3Qga3ZtICprdm0pO1xuIGJvb2wgZmlsZV9pc19rdm0oc3RydWN0IGZpbGUgKmZpbGUpO1xuJiM0MztzdHJ1Y3Qga3ZtICpmaWxlX3RvX2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSk7XG4gdm9pZCBrdm1fcHV0X2t2bV9ub19kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSk7XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21lbXNsb3RzICpfX2t2bV9tZW1zbG90cyhzdHJ1Y3Qga3ZtICprdm0sIGludCBhc19pZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvbGludXgvdmZpby5oXG5pbmRleCA0NWYwODk4NjM1OWU0Li4wY2M5MWM2Zjk2ZDJiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdmZpby5oXG5AQCAtNTQsNyAmIzQzOzU0LDcgQEAgc3RydWN0IHZmaW9fZGV2aWNlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZGV2X3NldF9saXN0O1xuIFx0dW5zaWduZWQgaW50IG1pZ3JhdGlvbl9mbGFncztcbiBcdHU4IHByZWNvcHlfaW5mb192Mjtcbi1cdHN0cnVjdCBrdm0gKmt2bTtcbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqa3ZtO1xuIFxuIFx0LyogTWVtYmVycyBiZWxvdyBoZXJlIGFyZSBwcml2YXRlLCBub3QgZm9yIGRyaXZlciB1c2UgKi9cbiBcdHVuc2lnbmVkIGludCBpbmRleDtcbkBAIC02Niw3ICYjNDM7NjYsNiBAQCBzdHJ1Y3QgdmZpb19kZXZpY2Uge1xuIFx0dW5zaWduZWQgaW50IG9wZW5fY291bnQ7XG4gXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xuIFx0c3RydWN0IGlvbW11ZmRfYWNjZXNzICppb21tdWZkX2FjY2Vzcztcbi1cdHZvaWQgKCpwdXRfa3ZtKShzdHJ1Y3Qga3ZtICprdm0pO1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU9NTVVGRClcbiBcdHN0cnVjdCBpb21tdWZkX2RldmljZSAqaW9tbXVmZF9kZXZpY2U7XG5AQCAtMzc4LDcgJiM0MzszNzcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdmZpb19maWxlX2hhc19kZXYoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aVxuICNlbmRpZlxuIGJvb2wgdmZpb19maWxlX2lzX3ZhbGlkKHN0cnVjdCBmaWxlICpmaWxlKTtcbiBib29sIHZmaW9fZmlsZV9lbmZvcmNlZF9jb2hlcmVudChzdHJ1Y3QgZmlsZSAqZmlsZSk7XG4tdm9pZCB2ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKTtcbiYjNDM7dm9pZCB2ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqdmZpb19maWxlLCBzdHJ1Y3QgZmlsZSAqa3ZtKTtcbiBcbiAjZGVmaW5lIFZGSU9fUElOX1BBR0VTX01BWF9FTlRSSUVTXHQoUEFHRV9TSVpFL3NpemVvZih1bnNpZ25lZCBsb25nKSlcbiBcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggNjVlYjI2YTA1MjBkOC4uMzRiNGM0MzkwOGIzYiAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbkBAIC0xMzE0LDcgJiM0MzsxMzE0LDcgQEAgdm9pZCBrdm1fZ2V0X2t2bShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0cmVmY291bnRfaW5jKFx1MDAyNmt2bS1cdTAwM2V1c2Vyc19jb3VudCk7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9nZXRfa3ZtKTtcbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9nZXRfa3ZtKTtcbiBcbiAvKlxuICAqIE1ha2Ugc3VyZSB0aGUgdm0gaXMgbm90IGR1cmluZyBkZXN0cnVjdGlvbiwgd2hpY2ggaXMgYSBzYWZlIHZlcnNpb24gb2ZcbkBAIC0xMzI0LDE0ICYjNDM7MTMyNCwxNCBAQCBib29sIGt2bV9nZXRfa3ZtX3NhZmUoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdHJldHVybiByZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2a3ZtLVx1MDAzZXVzZXJzX2NvdW50KTtcbiB9XG4tRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2dldF9rdm1fc2FmZSk7XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZ2V0X2t2bV9zYWZlKTtcbiBcbiB2b2lkIGt2bV9wdXRfa3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmt2bS1cdTAwM2V1c2Vyc19jb3VudCkpXG4gXHRcdGt2bV9kZXN0cm95X3ZtKGt2bSk7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9wdXRfa3ZtKTtcbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9wdXRfa3ZtKTtcbiBcbiAvKlxuICAqIFVzZWQgdG8gcHV0IGEgcmVmZXJlbmNlIHRoYXQgd2FzIHRha2VuIG9uIGJlaGFsZiBvZiBhbiBvYmplY3QgYXNzb2NpYXRlZFxuQEAgLTEzNTIsNiAmIzQzOzEzNTIsOCBAQCBzdGF0aWMgaW50IGt2bV92bV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxuIFxuIFx0a3ZtX2lycWZkX3JlbGVhc2Uoa3ZtKTtcbiBcbiYjNDM7XHRXUklURV9PTkNFKGt2bS1cdTAwM2VmaWxlLCBOVUxMKTtcbiYjNDM7XG4gXHRrdm1fcHV0X2t2bShrdm0pO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTU0OTYsNiAmIzQzOzU0OTgsMTUgQEAgYm9vbCBmaWxlX2lzX2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGZpbGVfaXNfa3ZtKTtcbiBcbiYjNDM7c3RydWN0IGt2bSAqZmlsZV90b19rdm0oc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWZpbGVfaXNfa3ZtKGZpbGUpKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoZmlsZV90b19rdm0pO1xuJiM0MztcbiBzdGF0aWMgaW50IGt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSlcbiB7XG4gXHRjaGFyIGZkbmFtZVtJVE9BX01BWF9MRU4gJiM0MzsgMV07XG5AQCAtNTUyNyw2ICYjNDM7NTUzOCw5IEBAIHN0YXRpYyBpbnQga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlKVxuIFx0ICogY2FzZXMgaXQgd2lsbCBiZSBjYWxsZWQgYnkgdGhlIGZpbmFsIGZwdXQoZmlsZSkgYW5kIHdpbGwgdGFrZVxuIFx0ICogY2FyZSBvZiBkb2luZyBrdm1fcHV0X2t2bShrdm0pLlxuIFx0ICovXG4mIzQzO1xuJiM0MztcdGt2bS1cdTAwM2VmaWxlID0gZmlsZTtcbiYjNDM7XG4gXHRrdm1fdWV2ZW50X25vdGlmeV9jaGFuZ2UoS1ZNX0VWRU5UX0NSRUFURV9WTSwga3ZtKTtcbiBcbiBcdGZkX2luc3RhbGwoZmQsIGZpbGUpO1xuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3ZmaW8uYyBiL3ZpcnQva3ZtL3ZmaW8uY1xuaW5kZXggNmNkYzRlOWEzMzNhMy4uMTk1NDhhNDMwOTQyNiAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL3ZmaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vdmZpby5jXG5AQCAtMzUsMTUgJiM0MzszNSwxNSBAQCBzdHJ1Y3Qga3ZtX3ZmaW8ge1xuIFx0Ym9vbCBub25jb2hlcmVudDtcbiB9O1xuIFxuLXN0YXRpYyB2b2lkIGt2bV92ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKVxuJiM0MztzdGF0aWMgdm9pZCBrdm1fdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSlcbiB7XG4tXHR2b2lkICgqZm4pKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pO1xuJiM0MztcdHZvaWQgKCpmbikoc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSk7XG4gXG4gXHRmbiA9IHN5bWJvbF9nZXQodmZpb19maWxlX3NldF9rdm0pO1xuIFx0aWYgKCFmbilcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Zm4oZmlsZSwga3ZtKTtcbiYjNDM7XHRmbih2ZmlvX2ZpbGUsIGt2bSk7XG4gXG4gXHRzeW1ib2xfcHV0KHZmaW9fZmlsZV9zZXRfa3ZtKTtcbiB9XG5AQCAtMTQ0LDYgJiM0MzsxNDQsNyBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZClcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZmaW8gKmt2ID0gZGV2LVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3Qga3ZtX3ZmaW9fZmlsZSAqa3ZmO1xuJiM0MztcdHN0cnVjdCBmaWxlICprdm1fZmlsZSBfX2ZyZWUoZnB1dCkgPSBOVUxMO1xuIFx0c3RydWN0IGZpbGUgKmZpbHAgX19mcmVlKGZwdXQpID0gTlVMTDtcbiBcbiBcdGZpbHAgPSBmZ2V0KGZkKTtcbkBAIC0xNTQsNiAmIzQzOzE1NSwxMCBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZClcbiBcdGlmICgha3ZtX3ZmaW9fZmlsZV9pc192YWxpZChmaWxwKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0a3ZtX2ZpbGUgPSBnZXRfZmlsZV9hY3RpdmUoXHUwMDI2ZGV2LVx1MDAzZWt2bS1cdTAwM2VmaWxlKTtcbiYjNDM7XHRpZiAoIWt2bV9maWxlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1xuIFx0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2LVx1MDAzZWxvY2spO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShrdmYsIFx1MDAyNmt2LVx1MDAzZWZpbGVfbGlzdCwgbm9kZSkge1xuQEAgLTE2OCw3ICYjNDM7MTczLDcgQEAgc3RhdGljIGludCBrdm1fdmZpb19maWxlX2FkZChzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmQpXG4gXHRrdmYtXHUwMDNlZmlsZSA9IGdldF9maWxlKGZpbHApO1xuIFx0bGlzdF9hZGRfdGFpbChcdTAwMjZrdmYtXHUwMDNlbm9kZSwgXHUwMDI2a3YtXHUwMDNlZmlsZV9saXN0KTtcbiBcbi1cdGt2bV92ZmlvX2ZpbGVfc2V0X2t2bShrdmYtXHUwMDNlZmlsZSwgZGV2LVx1MDAzZWt2bSk7XG4mIzQzO1x0a3ZtX3ZmaW9fZmlsZV9zZXRfa3ZtKGt2Zi1cdTAwM2VmaWxlLCBrdm1fZmlsZSk7XG4gXHRrdm1fdmZpb191cGRhdGVfY29oZXJlbmN5KGRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7VkZJTyYjMzQ7LAogICAgJiMzNDtWRklPX0dST1VQJiMzNDssCiAgICAmIzM0O1ZGSU9fQ09OVEFJTkVSJiMzNDssCiAgICAmIzM0O1ZGSU9fREVWSUNFX0NERVYmIzM0OywKICAgICYjMzQ7RFJNX0k5MTVfR1ZUX0tWTUdUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3ZmaW9fZmlsZV9hZGQmIzM0OywKICAgICYjMzQ7dmZpb19maWxlX3NldF9rdm0mIzM0OywKICAgICYjMzQ7dmZpb19ncm91cF9zZXRfa3ZtJiMzNDssCiAgICAmIzM0O3ZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2RldmljZV9wdXRfa3ZtJiMzNDssCiAgICAmIzM0O2ZpbGVfdG9fa3ZtJiMzNDssCiAgICAmIzM0O2t2bV92bV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2t2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtJiMzNDssCiAgICAmIzM0O2t2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyJiMzNDssCiAgICAmIzM0O2t2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXImIzM0OywKICAgICYjMzQ7a3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm4mIzM0OywKICAgICYjMzQ7a3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgcmVmZXJlbmNlIG1hbmFnZW1lbnQgYmV0d2VlbiBLVk0gYW5kIGV4dGVybmFsIHN1YnN5c3RlbXMgKHByaW1hcmlseSBWRklPIGFuZCBLVk0gcGFnZSB0cmFja2luZyksIHN3aXRjaGluZyBmcm9tIGhvbGRpbmcgZGlyZWN0ICYjMzk7c3RydWN0IGt2bSAqJiMzOTsgcG9pbnRlcnMgdG8gdXNpbmcgJiMzOTtzdHJ1Y3QgZmlsZSAqJiMzOTsgcmVmZXJlbmNlcyB2aWEgZ2V0X2ZpbGUoKS9mcHV0KCkgYW5kIGdldF9maWxlX2FjdGl2ZSgpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbGlmZWN5Y2xlIHBhdGhzLCBjb25jdXJyZW5jeSwgYW5kIHJlZmNvdW50aW5nIGJldHdlZW4gS1ZNIFZNIGZpbGVzIGFuZCBWRklPIGRldmljZXMvZ3JvdXBzIGR1cmluZyBWTSBjcmVhdGlvbiwgcmVsZWFzZSwgYW5kIFZGSU8gZGV2aWNlIGF0dGFjaG1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMzhlMjk0NTk0ZDJlOWRmYWE1NGRhYWU1NGYzOWZjYjM2ZjU4NWE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxMDoxNjowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFnZV90cmFjay5oCmluZGV4IDNkMDQwNzQxMDQ0YjQuLjA0NmEyNWM4ZmU0ZjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhZ2VfdHJhY2suaApAQCAtNDQsMTMgJiM0Mzs0NCwxMyBAQCBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSB7CiAJCQkJICAgIHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpub2RlKTsKIH07CiAKLWludCBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7aW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCSAgICAgc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm4pOwotdm9pZCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwKJiM0Mzt2b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJCXN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpuKTsKIAotaW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTsKLWludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7CiYjNDM7aW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBmaWxlICpmaWxlLCBnZm5fdCBnZm4pOwomIzQzO2ludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3QgZmlsZSAqZmlsZSwgZ2ZuX3QgZ2ZuKTsKICNlbHNlCiAvKgogICogQWxsb3cgZGVmaW5pbmcgYSBub2RlIGluIGEgc3RydWN0dXJlIGV2ZW4gaWYgcGFnZSB0cmFja2luZyBpcyBkaXNhYmxlZCwgZS5nLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL01ha2VmaWxlIGIvYXJjaC94ODYva3ZtL01ha2VmaWxlCmluZGV4IDA0NzQ2MDRhYjhhMTQuLjk2Zjg5ZDZmN2U2YTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vTWFrZWZpbGUKQEAgLTYwLDEwICYjNDM7NjAsNyBAQCBleHBvcnRzX2dyZXBfdHJhaWxlciA6PSAtLWluY2x1ZGU9JiMzOTsqLltjaF0mIzM5OyAtbnJ3ICQoc3JjdHJlZSkvdmlydC9rdm0gJChzcmN0cmVlKS9hCiAJCQlncmVwIC12IC1lIGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyIFwKIAkJCQktZSBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyIFwKIAkJCQktZSBrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbiBcCi0JCQkJLWUga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4gXAotCQkJCS1lIGt2bV9nZXRfa3ZtIFwKLQkJCQktZSBrdm1fZ2V0X2t2bV9zYWZlIFwKLQkJCQktZSBrdm1fcHV0X2t2bQomIzQzOwkJCQktZSBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbgogCiAjIEZvcmNlIGdyZXAgdG8gZW1pdCBhIGdvb2Z5IGdyb3VwIHNlcGFyYXRvciB0aGF0IGNhbiBpbiB0dXJuIGJlIHJlcGxhY2VkIHdpdGgKICMgdGhlIGFib3ZlIG5ld2xpbmUgbWFjcm8gKG5ld2xpbmVzIGluIE1ha2UgYXJlIGEgbmlnaHRtYXJlKS4gIE5vdGUsIGdyZXAgb25seQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMgYi9hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYwppbmRleCA3ZTgxOTVhMzExYmIwLi45OGYxMzNlNGYwYjMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYwpAQCAtMjM3LDEwICYjNDM7MjM3LDExIEBAIHN0YXRpYyBpbnQga3ZtX2VuYWJsZV9leHRlcm5hbF93cml0ZV90cmFja2luZyhzdHJ1Y3Qga3ZtICprdm0pCiAgKiByZWdpc3RlciB0aGUgbm90aWZpZXIgc28gdGhhdCBldmVudCBpbnRlcmNlcHRpb24gZm9yIHRoZSB0cmFja2VkIGd1ZXN0CiAgKiBwYWdlcyBjYW4gYmUgcmVjZWl2ZWQuCiAgKi8KLWludCBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7aW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCSAgICAgc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm4pCiB7CiAJc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX2hlYWQgKmhlYWQ7CiYjNDM7CXN0cnVjdCBrdm0gKmt2bSA9IGZpbGVfdG9fa3ZtKGZpbGUpOwogCWludCByOwogCiAJaWYgKCFrdm0gfHwga3ZtLSZndDttbSAhPSBjdXJyZW50LSZndDttbSkKQEAgLTI1Miw3ICYjNDM7MjUzLDcgQEAgaW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwKIAkJCXJldHVybiByOwogCX0KIAotCWt2bV9nZXRfa3ZtKGt2bSk7CiYjNDM7CWdldF9maWxlKGZpbGUpOwogCiAJaGVhZCA9ICZhbXA7a3ZtLSZndDthcmNoLnRyYWNrX25vdGlmaWVyX2hlYWQ7CiAKQEAgLTI2NywxMCAmIzQzOzI2OCwxMSBAQCBFWFBPUlRfU1lNQk9MX0dQTChrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcik7CiAgKiBzdG9wIHJlY2VpdmluZyB0aGUgZXZlbnQgaW50ZXJjZXB0aW9uLiBJdCBpcyB0aGUgb3Bwb3NlZCBvcGVyYXRpb24gb2YKICAqIGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKCkuCiAgKi8KLXZvaWQga3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7dm9pZCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCQlzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbikKIHsKIAlzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfaGVhZCAqaGVhZDsKJiM0MzsJc3RydWN0IGt2bSAqa3ZtID0gZmlsZV90b19rdm0oZmlsZSk7CiAKIAloZWFkID0gJmFtcDtrdm0tJmd0O2FyY2gudHJhY2tfbm90aWZpZXJfaGVhZDsKIApAQCAtMjc5LDcgJiM0MzsyODEsNyBAQCB2b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLAogCXdyaXRlX3VubG9jaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwogCXN5bmNocm9uaXplX3NyY3UoJmFtcDtoZWFkLSZndDt0cmFja19zcmN1KTsKIAotCWt2bV9wdXRfa3ZtKGt2bSk7CiYjNDM7CWZwdXQoZmlsZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKTsKIApAQCAtMzM2LDExICYjNDM7MzM4LDEyIEBAIHZvaWQga3ZtX3BhZ2VfdHJhY2tfZGVsZXRlX3Nsb3Qoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KQogICogYWRkIGd1ZXN0IHBhZ2UgdG8gdGhlIHRyYWNraW5nIHBvb2wgc28gdGhhdCBjb3JyZXNwb25kaW5nIGFjY2VzcyBvbiB0aGF0CiAgKiBwYWdlIHdpbGwgYmUgaW50ZXJjZXB0ZWQuCiAgKgotICogQGt2bTogdGhlIGd1ZXN0IGluc3RhbmNlIHdlIGFyZSBpbnRlcmVzdGVkIGluLgomIzQzOyAqIEBmaWxlOiB0aGUgVk0gZmlsZSBvZiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uCiAgKiBAZ2ZuOiB0aGUgZ3Vlc3QgcGFnZS4KICAqLwotaW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQomIzQzO2ludCBrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbihzdHJ1Y3QgZmlsZSAqZmlsZSwgZ2ZuX3QgZ2ZuKQogewomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSBmaWxlX3RvX2t2bShmaWxlKTsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OwogCWludCBpZHg7CiAKQEAgLTM2NiwxMSAmIzQzOzM2OSwxMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbik7CiAgKiByZW1vdmUgdGhlIGd1ZXN0IHBhZ2UgZnJvbSB0aGUgdHJhY2tpbmcgcG9vbCB3aGljaCBzdG9wcyB0aGUgaW50ZXJjZXB0aW9uCiAgKiBvZiBjb3JyZXNwb25kaW5nIGFjY2VzcyBvbiB0aGF0IHBhZ2UuCiAgKgotICogQGt2bTogdGhlIGd1ZXN0IGluc3RhbmNlIHdlIGFyZSBpbnRlcmVzdGVkIGluLgomIzQzOyAqIEBmaWxlOiB0aGUgVk0gZmlsZSBvZiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uCiAgKiBAZ2ZuOiB0aGUgZ3Vlc3QgcGFnZS4KICAqLwotaW50IGt2bV93cml0ZV90cmFja19yZW1vdmVfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQomIzQzO2ludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3QgZmlsZSAqZmlsZSwgZ2ZuX3QgZ2ZuKQogewomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSBmaWxlX3RvX2t2bShmaWxlKTsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OwogCWludCBpZHg7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwppbmRleCA5NDBjMGZmNjY4YmVlLi5mMTYwZTE5NDVmYmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCkBAIC0xODIyLDE3ICYjNDM7MTgyMiwyNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdmZpb19hcF9tZGV2X2F0dHJfZ3JvdXBzW10gPSB7CiAKIC8qKgogICogdmZpb19hcF9tZGV2X3NldF9rdm0gLSBzZXRzIGFsbCBkYXRhIGZvciBAbWF0cml4X21kZXYgdGhhdCBhcmUgbmVlZGVkCi0gKiB0byBtYW5hZ2UgQVAgcmVzb3VyY2VzIGZvciB0aGUgZ3Vlc3Qgd2hvc2Ugc3RhdGUgaXMgcmVwcmVzZW50ZWQgYnkgQGt2bQomIzQzOyAqIHRvIG1hbmFnZSBBUCByZXNvdXJjZXMgZm9yIHRoZSBndWVzdCB3aG9zZSBzdGF0ZSBpcyByZXByZXNlbnRlZCBieQomIzQzOyAqIEBrdm1fZmlsZQogICoKICAqIEBtYXRyaXhfbWRldjogYSBtZWRpYXRlZCBtYXRyaXggZGV2aWNlCi0gKiBAa3ZtOiByZWZlcmVuY2UgdG8gS1ZNIGluc3RhbmNlCiYjNDM7ICogQGt2bV9maWxlOiB0aGUgS1ZNIFZNIGZpbGUgdGhpcyB2ZmlvIGRldmljZSBpcyBhc3NvY2lhdGVkIHdpdGgKICAqCi0gKiBSZXR1cm46IDAgaWYgbm8gb3RoZXIgbWVkaWF0ZWQgbWF0cml4IGRldmljZSBoYXMgYSByZWZlcmVuY2UgdG8gQGt2bTsKJiM0MzsgKiBSZXR1cm46IDAgaWYgbm8gb3RoZXIgbWVkaWF0ZWQgbWF0cml4IGRldmljZSBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIFZNOwogICogb3RoZXJ3aXNlLCByZXR1cm5zIGFuIC1FUEVSTS4KICAqLwogc3RhdGljIGludCB2ZmlvX2FwX21kZXZfc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LAotCQkJCXN0cnVjdCBrdm0gKmt2bSkKJiM0MzsJCQkJc3RydWN0IGZpbGUgKmt2bV9maWxlKQogewomIzQzOwlzdHJ1Y3Qga3ZtICprdm07CiYjNDM7CiYjNDM7CWlmICgha3ZtX2ZpbGUpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKJiM0MzsJa3ZtID0ga3ZtX2ZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJaWYgKCFrdm0pCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKIAlpZiAoa3ZtLSZndDthcmNoLmNyeXB0by5jcnljYmQpIHsKIAkJZ2V0X3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7CiAJCWlmIChrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9vaykgewpAQCAtMTg0MSw3ICYjNDM7MTg1MSw2IEBAIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3NldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiwKIAkJfQogCQlrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9vayA9ICZhbXA7bWF0cml4X21kZXYtJmd0O3BxYXBfaG9vazsKIAotCQlrdm1fZ2V0X2t2bShrdm0pOwogCQltYXRyaXhfbWRldi0mZ3Q7a3ZtID0ga3ZtOwogCQl2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpOwogCQlyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7CkBAIC0xODk0LDcgJiM0MzsxOTAzLDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3Vuc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KQogCQltYXRyaXhfbWRldi0mZ3Q7a3ZtID0gTlVMTDsKIAogCQlyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7Ci0JCWt2bV9wdXRfa3ZtKGt2bSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vZ3JvdXAuYyBiL2RyaXZlcnMvdmZpby9ncm91cC5jCmluZGV4IGIyMjk5ZTViYzZkZjMuLjViZjhjYmRmZjM3N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9ncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9ncm91cC5jCkBAIC04NjAsMTEgJiM0Mzs4NjAsMjAgQEAgYm9vbCB2ZmlvX2dyb3VwX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCkKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIHZmaW9fZ3JvdXBfc2V0X2t2bShzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXAsIHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt2b2lkIHZmaW9fZ3JvdXBfc2V0X2t2bShzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXAsIHN0cnVjdCBmaWxlICprdm0pCiB7CiYjNDM7CXN0cnVjdCBmaWxlICpvbGQ7CiYjNDM7CiYjNDM7CWlmIChrdm0pCiYjNDM7CQlnZXRfZmlsZShrdm0pOwomIzQzOwogCXNwaW5fbG9jaygmYW1wO2dyb3VwLSZndDtrdm1fcmVmX2xvY2spOwomIzQzOwlvbGQgPSBncm91cC0mZ3Q7a3ZtOwogCWdyb3VwLSZndDtrdm0gPSBrdm07CiAJc3Bpbl91bmxvY2soJmFtcDtncm91cC0mZ3Q7a3ZtX3JlZl9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKG9sZCkKJiM0MzsJCWZwdXQob2xkKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jCmluZGV4IGY0N2YzNjMxNGExY2MuLjA0NTEzMmU5MGJmZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jCkBAIC0xODQsNiAmIzQzOzE4NCw3IEBAIGludCB2ZmlvX3BjaV96ZGV2X2ZlYXR1cmVfZXJyKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsCiBpbnQgdmZpb19wY2lfemRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiB7CiAJc3RydWN0IHpwY2lfZGV2ICp6ZGV2ID0gdG9fenBjaSh2ZGV2LSZndDtwZGV2KTsKJiM0MzsJc3RydWN0IGt2bSAqa3ZtOwogCWludCByZXQ7CiAKIAlpZiAoIXpkZXYpCkBAIC0xOTUsOSAmIzQzOzE5NiwxNCBAQCBpbnQgdmZpb19wY2lfemRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiAJCXJldHVybiAwOwogCiAJcmV0ID0gLUVOT0VOVDsKJiM0MzsJa3ZtID0gdmRldi0mZ3Q7dmRldi5rdm0tJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJaWYgKCFrdm0pCiYjNDM7CQlnb3RvIHJlY292ZXJ5OwomIzQzOwogCWlmICh6cGNpX2t2bV9ob29rLmt2bV9yZWdpc3RlcikKLQkJcmV0ID0genBjaV9rdm1faG9vay5rdm1fcmVnaXN0ZXIoemRldiwgdmRldi0mZ3Q7dmRldi5rdm0pOwomIzQzOwkJcmV0ID0genBjaV9rdm1faG9vay5rdm1fcmVnaXN0ZXIoemRldiwga3ZtKTsKIAomIzQzO3JlY292ZXJ5OgogCWlmIChyZXQpCiAJCXpwY2lfc3RvcF9tZWRpYXRlZF9yZWNvdmVyeSh6ZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3ZmaW8uaCBiL2RyaXZlcnMvdmZpby92ZmlvLmgKaW5kZXggNzcyOGJjOTliNjNkMS4uOWI2MTk5NTFhNWQwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3ZmaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vdmZpby5oCkBAIC0yMyw3ICYjNDM7MjMsNyBAQCBzdHJ1Y3QgdmZpb19kZXZpY2VfZmlsZSB7CiAJdTggYWNjZXNzX2dyYW50ZWQ7CiAJdTMyIGRldmlkOyAvKiBvbmx5IHZhbGlkIHdoZW4gaW9tbXVmZCBpcyB2YWxpZCAqLwogCXNwaW5sb2NrX3Qga3ZtX3JlZl9sb2NrOyAvKiBwcm90ZWN0IGt2bSBmaWVsZCAqLwotCXN0cnVjdCBrdm0gKmt2bTsKJiM0MzsJc3RydWN0IGZpbGUgKmt2bTsKIAlzdHJ1Y3QgaW9tbXVmZF9jdHggKmlvbW11ZmQ7IC8qIHByb3RlY3RlZCBieSBzdHJ1Y3QgdmZpb19kZXZpY2Vfc2V0Ojpsb2NrICovCiB9OwogCkBAIC04OCw3ICYjNDM7ODgsNyBAQCBzdHJ1Y3QgdmZpb19ncm91cCB7CiAjZW5kaWYKIAllbnVtIHZmaW9fZ3JvdXBfdHlwZQkJdHlwZTsKIAlzdHJ1Y3QgbXV0ZXgJCQlncm91cF9sb2NrOwotCXN0cnVjdCBrdm0JCQkqa3ZtOwomIzQzOwlzdHJ1Y3QgZmlsZQkJCSprdm07CiAJc3RydWN0IGZpbGUJCQkqb3BlbmVkX2ZpbGU7CiAJc3RydWN0IGlvbW11ZmRfY3R4CQkqaW9tbXVmZDsKIAlzcGlubG9ja190CQkJa3ZtX3JlZl9sb2NrOwpAQCAtMTA3LDcgJiM0MzsxMDcsNyBAQCB2b2lkIHZmaW9fZGV2aWNlX2dyb3VwX3VudXNlX2lvbW11KHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKTsKIHZvaWQgdmZpb19kZl9ncm91cF9jbG9zZShzdHJ1Y3QgdmZpb19kZXZpY2VfZmlsZSAqZGYpOwogc3RydWN0IHZmaW9fZ3JvdXAgKnZmaW9fZ3JvdXBfZnJvbV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKTsKIGJvb2wgdmZpb19ncm91cF9lbmZvcmNlZF9jb2hlcmVudChzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXApOwotdm9pZCB2ZmlvX2dyb3VwX3NldF9rdm0oc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwLCBzdHJ1Y3Qga3ZtICprdm0pOwomIzQzO3ZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGZpbGUgKmt2bSk7CiBib29sIHZmaW9fZGV2aWNlX2hhc19jb250YWluZXIoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UpOwogaW50IF9faW5pdCB2ZmlvX2dyb3VwX2luaXQodm9pZCk7CiB2b2lkIHZmaW9fZ3JvdXBfY2xlYW51cCh2b2lkKTsKQEAgLTE2NSw3ICYjNDM7MTY1LDcgQEAgc3RhdGljIGlubGluZSBib29sIHZmaW9fZ3JvdXBfZW5mb3JjZWRfY29oZXJlbnQoc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwKQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX2dyb3VwX3NldF9rdm0oc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgZmlsZSAqa3ZtKQogewogfQogCkBAIC00MjksMTEgJiM0Mzs0MjksMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fdmlycWZkX2V4aXQodm9pZCkKICNlbmRpZgogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfS1ZNKQotdm9pZCB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7dm9pZCB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBmaWxlICprdm0pOwogdm9pZCB2ZmlvX2RldmljZV9wdXRfa3ZtKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLAotCQkJCQkgICAgc3RydWN0IGt2bSAqa3ZtKQomIzQzOwkJCQkJICAgIHN0cnVjdCBmaWxlICprdm0pCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby92ZmlvX21haW4uYyBiL2RyaXZlcnMvdmZpby92ZmlvX21haW4uYwppbmRleCA0MjNlYWQ0OGFhZmUzLi5lZDk2YWNmYTg2MzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jCkBAIC00NzIsMzYgJiM0Mzs0NzIsMTQgQEAgdm9pZCB2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKQogRVhQT1JUX1NZTUJPTF9HUEwodmZpb191bnJlZ2lzdGVyX2dyb3VwX2Rldik7CiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19LVk0pCi12b2lkIHZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO3ZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZmlsZSAqa3ZtKQogewotCXZvaWQgKCpwZm4pKHN0cnVjdCBrdm0gKmt2bSk7Ci0JYm9vbCAoKmZuKShzdHJ1Y3Qga3ZtICprdm0pOwotCWJvb2wgcmV0OwotCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2RldmljZS0mZ3Q7ZGV2X3NldC0mZ3Q7bG9jayk7CiAKIAlpZiAoIWt2bSkKIAkJcmV0dXJuOwogCi0JcGZuID0gc3ltYm9sX2dldChrdm1fcHV0X2t2bSk7Ci0JaWYgKFdBUk5fT04oIXBmbikpCi0JCXJldHVybjsKLQotCWZuID0gc3ltYm9sX2dldChrdm1fZ2V0X2t2bV9zYWZlKTsKLQlpZiAoV0FSTl9PTighZm4pKSB7Ci0JCXN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pOwotCQlyZXR1cm47Ci0JfQotCi0JcmV0ID0gZm4oa3ZtKTsKLQlzeW1ib2xfcHV0KGt2bV9nZXRfa3ZtX3NhZmUpOwotCWlmICghcmV0KSB7Ci0JCXN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pOwotCQlyZXR1cm47Ci0JfQotCi0JZGV2aWNlLSZndDtwdXRfa3ZtID0gcGZuOwotCWRldmljZS0mZ3Q7a3ZtID0ga3ZtOwomIzQzOwlkZXZpY2UtJmd0O2t2bSA9IGdldF9maWxlKGt2bSk7CiB9CiAKIHZvaWQgdmZpb19kZXZpY2VfcHV0X2t2bShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSkKQEAgLTUxMSwxNCAmIzQzOzQ4OSw3IEBAIHZvaWQgdmZpb19kZXZpY2VfcHV0X2t2bShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSkKIAlpZiAoIWRldmljZS0mZ3Q7a3ZtKQogCQlyZXR1cm47CiAKLQlpZiAoV0FSTl9PTighZGV2aWNlLSZndDtwdXRfa3ZtKSkKLQkJZ290byBjbGVhcjsKLQotCWRldmljZS0mZ3Q7cHV0X2t2bShkZXZpY2UtJmd0O2t2bSk7Ci0JZGV2aWNlLSZndDtwdXRfa3ZtID0gTlVMTDsKLQlzeW1ib2xfcHV0KGt2bV9wdXRfa3ZtKTsKLQotY2xlYXI6CiYjNDM7CWZwdXQoZGV2aWNlLSZndDtrdm0pOwogCWRldmljZS0mZ3Q7a3ZtID0gTlVMTDsKIH0KICNlbmRpZgpAQCAtMTU0NCw5ICYjNDM7MTUxNSwxMyBAQCBib29sIHZmaW9fZmlsZV9lbmZvcmNlZF9jb2hlcmVudChzdHJ1Y3QgZmlsZSAqZmlsZSkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fZmlsZV9lbmZvcmNlZF9jb2hlcmVudCk7CiAKLXN0YXRpYyB2b2lkIHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO3N0YXRpYyB2b2lkIHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGUgKmt2bSkKIHsKIAlzdHJ1Y3QgdmZpb19kZXZpY2VfZmlsZSAqZGYgPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CXN0cnVjdCBmaWxlICpvbGQ7CiYjNDM7CiYjNDM7CWlmIChrdm0pCiYjNDM7CQlnZXRfZmlsZShrdm0pOwogCiAJLyoKIAkgKiBUaGUga3ZtIGlzIGZpcnN0IHJlY29yZGVkIGluIHRoZSB2ZmlvX2RldmljZV9maWxlLCBhbmQgd2lsbApAQCAtMTU1NCwyOCAmIzQzOzE1MjksMzIgQEAgc3RhdGljIHZvaWQgdmZpb19kZXZpY2VfZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pCiAJICogaW9tbXVmZCBzdWNjZXNzZnVsbHkgaW4gdGhlIHZmaW8gZGV2aWNlIGNkZXYgcGF0aC4KIAkgKi8KIAlzcGluX2xvY2soJmFtcDtkZi0mZ3Q7a3ZtX3JlZl9sb2NrKTsKJiM0MzsJb2xkID0gZGYtJmd0O2t2bTsKIAlkZi0mZ3Q7a3ZtID0ga3ZtOwogCXNwaW5fdW5sb2NrKCZhbXA7ZGYtJmd0O2t2bV9yZWZfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChvbGQpCiYjNDM7CQlmcHV0KG9sZCk7CiB9CiAKIC8qKgogICogdmZpb19maWxlX3NldF9rdm0gLSBMaW5rIGEga3ZtIHdpdGggVkZJTyBkcml2ZXJzCi0gKiBAZmlsZTogVkZJTyBncm91cCBmaWxlIG9yIFZGSU8gZGV2aWNlIGZpbGUKLSAqIEBrdm06IEtWTSB0byBsaW5rCiYjNDM7ICogQHZmaW9fZmlsZTogVkZJTyBncm91cCBmaWxlIG9yIFZGSU8gZGV2aWNlIGZpbGUKJiM0MzsgKiBAa3ZtOiBLVk0gZmlsZSB0byBsaW5rCiAgKgogICogV2hlbiBhIFZGSU8gZGV2aWNlIGlzIGZpcnN0IG9wZW5lZCB0aGUgS1ZNIHdpbGwgYmUgYXZhaWxhYmxlIGluCiAgKiBkZXZpY2UtJmd0O2t2bSBpZiBvbmUgd2FzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsZS4KICAqLwotdm9pZCB2ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO3ZvaWQgdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSkKIHsKIAlzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXA7CiAKLQlncm91cCA9IHZmaW9fZ3JvdXBfZnJvbV9maWxlKGZpbGUpOwomIzQzOwlncm91cCA9IHZmaW9fZ3JvdXBfZnJvbV9maWxlKHZmaW9fZmlsZSk7CiAJaWYgKGdyb3VwKQogCQl2ZmlvX2dyb3VwX3NldF9rdm0oZ3JvdXAsIGt2bSk7CiAKLQlpZiAodmZpb19kZXZpY2VfZnJvbV9maWxlKGZpbGUpKQotCQl2ZmlvX2RldmljZV9maWxlX3NldF9rdm0oZmlsZSwga3ZtKTsKJiM0MzsJaWYgKHZmaW9fZGV2aWNlX2Zyb21fZmlsZSh2ZmlvX2ZpbGUpKQomIzQzOwkJdmZpb19kZXZpY2VfZmlsZV9zZXRfa3ZtKHZmaW9fZmlsZSwga3ZtKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fZmlsZV9zZXRfa3ZtKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IDAzYmZjOTI4NjRiNmUuLmJmZWNjZTFiNTk1NWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTc4NCw2ICYjNDM7Nzg0LDEzIEBAIHN0cnVjdCBrdm0gewogCSAqIGt2bV9zd2FwX2FjdGl2ZV9tZW1zbG90cygpLgogCSAqLwogCXN0cnVjdCBtdXRleCBzbG90c19hcmNoX2xvY2s7CiYjNDM7CS8qCiYjNDM7CSAqIEJhY2stcmVmZXJlbmNlIHRvIHRoZSBWTSBmaWxlIGZvciBzdWJzeXN0ZW1zIChlLmcuLCBWRklPKS4gSG9sZHMgbm8KJiM0MzsJICogcmVmZXJlbmNlIHRvIGF2b2lkIHBpbm5pbmcgdGhlIFZNLiBBY2Nlc3MgdmlhIGdldF9maWxlX2FjdGl2ZSgmYW1wO2t2bS0mZ3Q7ZmlsZSkKJiM0MzsJICogb25seeKAlHNhZmUgYmVjYXVzZSBjbGVhcmVkIGluIGt2bV92bV9yZWxlYXNlKCkgYmVmb3JlIGZpbGUgZnJlZWQuIENhbGxlcnMKJiM0MzsJICogc3RvcmluZyB0aGUgcmVzdWx0IG11c3QgdGFrZSB0aGVpciBvd24gcmVmZXJlbmNlIHZpYSBnZXRfZmlsZSgpCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgZmlsZSAqZmlsZTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsgLyogdXNlcnNwYWNlIHRpZWQgdG8gdGhpcyB2bSAqLwogCXVuc2lnbmVkIGxvbmcgbnJfbWVtc2xvdF9wYWdlczsKIAkvKiBUaGUgdHdvIG1lbXNsb3Qgc2V0cyAtIGFjdGl2ZSBhbmQgaW5hY3RpdmUgKHBlciBhZGRyZXNzIHNwYWNlKSAqLwpAQCAtMTA4Miw2ICYjNDM7MTA4OSw3IEBAIHZvaWQga3ZtX2dldF9rdm0oc3RydWN0IGt2bSAqa3ZtKTsKIGJvb2wga3ZtX2dldF9rdm1fc2FmZShzdHJ1Y3Qga3ZtICprdm0pOwogdm9pZCBrdm1fcHV0X2t2bShzdHJ1Y3Qga3ZtICprdm0pOwogYm9vbCBmaWxlX2lzX2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSk7CiYjNDM7c3RydWN0IGt2bSAqZmlsZV90b19rdm0oc3RydWN0IGZpbGUgKmZpbGUpOwogdm9pZCBrdm1fcHV0X2t2bV9ub19kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tZW1zbG90cyAqX19rdm1fbWVtc2xvdHMoc3RydWN0IGt2bSAqa3ZtLCBpbnQgYXNfaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvbGludXgvdmZpby5oCmluZGV4IDQ1ZjA4OTg2MzU5ZTQuLjBjYzkxYzZmOTZkMmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmZpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdmZpby5oCkBAIC01NCw3ICYjNDM7NTQsNyBAQCBzdHJ1Y3QgdmZpb19kZXZpY2UgewogCXN0cnVjdCBsaXN0X2hlYWQgZGV2X3NldF9saXN0OwogCXVuc2lnbmVkIGludCBtaWdyYXRpb25fZmxhZ3M7CiAJdTggcHJlY29weV9pbmZvX3YyOwotCXN0cnVjdCBrdm0gKmt2bTsKJiM0MzsJc3RydWN0IGZpbGUgKmt2bTsKIAogCS8qIE1lbWJlcnMgYmVsb3cgaGVyZSBhcmUgcHJpdmF0ZSwgbm90IGZvciBkcml2ZXIgdXNlICovCiAJdW5zaWduZWQgaW50IGluZGV4OwpAQCAtNjYsNyAmIzQzOzY2LDYgQEAgc3RydWN0IHZmaW9fZGV2aWNlIHsKIAl1bnNpZ25lZCBpbnQgb3Blbl9jb3VudDsKIAlzdHJ1Y3QgY29tcGxldGlvbiBjb21wOwogCXN0cnVjdCBpb21tdWZkX2FjY2VzcyAqaW9tbXVmZF9hY2Nlc3M7Ci0Jdm9pZCAoKnB1dF9rdm0pKHN0cnVjdCBrdm0gKmt2bSk7CiAJc3RydWN0IGlub2RlICppbm9kZTsKICNpZiBJU19FTkFCTEVEKENPTkZJR19JT01NVUZEKQogCXN0cnVjdCBpb21tdWZkX2RldmljZSAqaW9tbXVmZF9kZXZpY2U7CkBAIC0zNzgsNyAmIzQzOzM3Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX2ZpbGVfaGFzX2RldihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpCiAjZW5kaWYKIGJvb2wgdmZpb19maWxlX2lzX3ZhbGlkKHN0cnVjdCBmaWxlICpmaWxlKTsKIGJvb2wgdmZpb19maWxlX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCBmaWxlICpmaWxlKTsKLXZvaWQgdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7dm9pZCB2ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqdmZpb19maWxlLCBzdHJ1Y3QgZmlsZSAqa3ZtKTsKIAogI2RlZmluZSBWRklPX1BJTl9QQUdFU19NQVhfRU5UUklFUwkoUEFHRV9TSVpFL3NpemVvZih1bnNpZ25lZCBsb25nKSkKIApkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggNjVlYjI2YTA1MjBkOC4uMzRiNGM0MzkwOGIzYiAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC0xMzE0LDcgJiM0MzsxMzE0LDcgQEAgdm9pZCBrdm1fZ2V0X2t2bShzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJcmVmY291bnRfaW5jKCZhbXA7a3ZtLSZndDt1c2Vyc19jb3VudCk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChrdm1fZ2V0X2t2bSk7CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9nZXRfa3ZtKTsKIAogLyoKICAqIE1ha2Ugc3VyZSB0aGUgdm0gaXMgbm90IGR1cmluZyBkZXN0cnVjdGlvbiwgd2hpY2ggaXMgYSBzYWZlIHZlcnNpb24gb2YKQEAgLTEzMjQsMTQgJiM0MzsxMzI0LDE0IEBAIGJvb2wga3ZtX2dldF9rdm1fc2FmZShzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJcmV0dXJuIHJlZmNvdW50X2luY19ub3RfemVybygmYW1wO2t2bS0mZ3Q7dXNlcnNfY291bnQpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2dldF9rdm1fc2FmZSk7CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9nZXRfa3ZtX3NhZmUpOwogCiB2b2lkIGt2bV9wdXRfa3ZtKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7a3ZtLSZndDt1c2Vyc19jb3VudCkpCiAJCWt2bV9kZXN0cm95X3ZtKGt2bSk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChrdm1fcHV0X2t2bSk7CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9wdXRfa3ZtKTsKIAogLyoKICAqIFVzZWQgdG8gcHV0IGEgcmVmZXJlbmNlIHRoYXQgd2FzIHRha2VuIG9uIGJlaGFsZiBvZiBhbiBvYmplY3QgYXNzb2NpYXRlZApAQCAtMTM1Miw2ICYjNDM7MTM1Miw4IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiAKIAlrdm1faXJxZmRfcmVsZWFzZShrdm0pOwogCiYjNDM7CVdSSVRFX09OQ0Uoa3ZtLSZndDtmaWxlLCBOVUxMKTsKJiM0MzsKIAlrdm1fcHV0X2t2bShrdm0pOwogCXJldHVybiAwOwogfQpAQCAtNTQ5Niw2ICYjNDM7NTQ5OCwxNSBAQCBib29sIGZpbGVfaXNfa3ZtKHN0cnVjdCBmaWxlICpmaWxlKQogfQogRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGZpbGVfaXNfa3ZtKTsKIAomIzQzO3N0cnVjdCBrdm0gKmZpbGVfdG9fa3ZtKHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3sKJiM0MzsJaWYgKCFmaWxlX2lzX2t2bShmaWxlKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoZmlsZV90b19rdm0pOwomIzQzOwogc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUpCiB7CiAJY2hhciBmZG5hbWVbSVRPQV9NQVhfTEVOICYjNDM7IDFdOwpAQCAtNTUyNyw2ICYjNDM7NTUzOCw5IEBAIHN0YXRpYyBpbnQga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlKQogCSAqIGNhc2VzIGl0IHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBmaW5hbCBmcHV0KGZpbGUpIGFuZCB3aWxsIHRha2UKIAkgKiBjYXJlIG9mIGRvaW5nIGt2bV9wdXRfa3ZtKGt2bSkuCiAJICovCiYjNDM7CiYjNDM7CWt2bS0mZ3Q7ZmlsZSA9IGZpbGU7CiYjNDM7CiAJa3ZtX3VldmVudF9ub3RpZnlfY2hhbmdlKEtWTV9FVkVOVF9DUkVBVEVfVk0sIGt2bSk7CiAKIAlmZF9pbnN0YWxsKGZkLCBmaWxlKTsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3ZmaW8uYyBiL3ZpcnQva3ZtL3ZmaW8uYwppbmRleCA2Y2RjNGU5YTMzM2EzLi4xOTU0OGE0MzA5NDI2IDEwMDY0NAotLS0gYS92aXJ0L2t2bS92ZmlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vdmZpby5jCkBAIC0zNSwxNSAmIzQzOzM1LDE1IEBAIHN0cnVjdCBrdm1fdmZpbyB7CiAJYm9vbCBub25jb2hlcmVudDsKIH07CiAKLXN0YXRpYyB2b2lkIGt2bV92ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO3N0YXRpYyB2b2lkIGt2bV92ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqdmZpb19maWxlLCBzdHJ1Y3QgZmlsZSAqa3ZtKQogewotCXZvaWQgKCpmbikoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7CXZvaWQgKCpmbikoc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSk7CiAKIAlmbiA9IHN5bWJvbF9nZXQodmZpb19maWxlX3NldF9rdm0pOwogCWlmICghZm4pCiAJCXJldHVybjsKIAotCWZuKGZpbGUsIGt2bSk7CiYjNDM7CWZuKHZmaW9fZmlsZSwga3ZtKTsKIAogCXN5bWJvbF9wdXQodmZpb19maWxlX3NldF9rdm0pOwogfQpAQCAtMTQ0LDYgJiM0MzsxNDQsNyBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZCkKIHsKIAlzdHJ1Y3Qga3ZtX3ZmaW8gKmt2ID0gZGV2LSZndDtwcml2YXRlOwogCXN0cnVjdCBrdm1fdmZpb19maWxlICprdmY7CiYjNDM7CXN0cnVjdCBmaWxlICprdm1fZmlsZSBfX2ZyZWUoZnB1dCkgPSBOVUxMOwogCXN0cnVjdCBmaWxlICpmaWxwIF9fZnJlZShmcHV0KSA9IE5VTEw7CiAKIAlmaWxwID0gZmdldChmZCk7CkBAIC0xNTQsNiAmIzQzOzE1NSwxMCBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZCkKIAlpZiAoIWt2bV92ZmlvX2ZpbGVfaXNfdmFsaWQoZmlscCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CWt2bV9maWxlID0gZ2V0X2ZpbGVfYWN0aXZlKCZhbXA7ZGV2LSZndDtrdm0tJmd0O2ZpbGUpOwomIzQzOwlpZiAoIWt2bV9maWxlKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiAJZ3VhcmQobXV0ZXgpKCZhbXA7a3YtJmd0O2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShrdmYsICZhbXA7a3YtJmd0O2ZpbGVfbGlzdCwgbm9kZSkgewpAQCAtMTY4LDcgJiM0MzsxNzMsNyBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZCkKIAlrdmYtJmd0O2ZpbGUgPSBnZXRfZmlsZShmaWxwKTsKIAlsaXN0X2FkZF90YWlsKCZhbXA7a3ZmLSZndDtub2RlLCAmYW1wO2t2LSZndDtmaWxlX2xpc3QpOwogCi0Ja3ZtX3ZmaW9fZmlsZV9zZXRfa3ZtKGt2Zi0mZ3Q7ZmlsZSwgZGV2LSZndDtrdm0pOwomIzQzOwlrdm1fdmZpb19maWxlX3NldF9rdm0oa3ZmLSZndDtmaWxlLCBrdm1fZmlsZSk7CiAJa3ZtX3ZmaW9fdXBkYXRlX2NvaGVyZW5jeShkZXYpOwogCiAJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTYxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIHBhdGNoIGRvd24gYW5kIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgZnV6ei13b3J0aHksIGFuZCBpZiBzbywgaG93IHdlIHNob3VsZCBhcHByb2FjaCBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgd29ydGggYSBjbG9zZXIgbG9vaywgZ2l2ZW4gdGhhdCBLVk0gYW5kIFZGSU8gYXJlIGludm9sdmVkLgoKRmlyc3QsIEkgbmVlZCB0byBncmFzcCB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlaW5nIGNoYW5nZWQuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgaG93IEtWTSBhbmQgVkZJTyBpbnRlcmFjdCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHN0cnVjdCBrdm1gIGFuZCBgc3RydWN0IGZpbGVgIG9iamVjdHMuIFRoZSBwYXRjaCBpcyByZWZhY3RvcmluZyBob3cgdGhlc2UgYXJlIHBhc3NlZCBhbmQgc3RvcmVkIGFjcm9zcyBzZXZlcmFsIGtleSBmdW5jdGlvbnMgaW4gYHBhZ2VfdHJhY2suY2AsIGBrdm1fbWFpbi5jYCwgYW5kIGB2ZmlvLmNgLiBSZXBsYWNpbmcgYHN0cnVjdCBrdm0gKmt2bWAgd2l0aCBgc3RydWN0IGZpbGUgKmZpbGVgIGluIHNldmVyYWwgcGxhY2VzLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBmaWxlX3RvX2t2bSgpYCBhbmQgcmVsYXRlZCBjaGFuZ2VzLCBpcyB0aGUgY29yZSBvZiBpdC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY2hhbmdlcyBpbiBob3cgS1ZNcyBhcmUgY3JlYXRlZCwgYWNjZXNzZWQsIGFuZCByZWxlYXNlZCwgYWxvbmdzaWRlIFZGSU8gaW50ZXJhY3Rpb25zLiBUaGUgYEVYUE9SVF9TWU1CT0xfR1BMYCB2cy4gYEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTGAgY2hhbmdlcyBhcmUgYWxzbyBpbnRlcmVzdGluZyBhbmQgY291bGQgaGludCBhdCBhY2Nlc3MgY29udHJvbCBjaGFuZ2VzLCBhbmQgbWF5IGV4cG9zZSBzb21lIG5ldyBzdXJmYWNlLgoKVGhlIGtleSBmdW5jdGlvbnMgYXJlOgoKKiAgIGBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcmAsIGBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyYCwgYGt2bV93cml0ZV90cmFja19hZGRfZ2ZuYCwgYGt2bV93cml0ZV90cmFja19yZW1vdmVfZ2ZuYCAoaW4gYHBhZ2VfdHJhY2suY2ApCiogICBgdmZpb19ncm91cF9zZXRfa3ZtYCwgYHZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZWAsIGB2ZmlvX2RldmljZV9wdXRfa3ZtYCwgYHZmaW9fZmlsZV9zZXRfa3ZtYCwgYHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bWAgKFZGSU8gcmVsYXRlZCBjb2RlKQoqICAgYGt2bV9nZXRfa3ZtYCwgYGt2bV9nZXRfa3ZtX3NhZmVgLCBga3ZtX3B1dF9rdm1gIChpbiBga3ZtX21haW4uY2ApCiogICBga3ZtX3ZtX3JlbGVhc2VgCiogICBga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm1gCiogICBga3ZtX3ZmaW9fZmlsZV9zZXRfa3ZtYCBhbmQgYGt2bV92ZmlvX2ZpbGVfYWRkYCAoaW4gYHZmaW8uY2ApCgpOb3csIGlzIHRoaXMgZXZlbiByZWFjaGFibGUgb24geDg2XzY0LCBvciBpcyBpdCBpc29sYXRlZD8gVGhlIGFuc3dlciBpcyBjbGVhcmx5IHllcyEgS1ZNIGFuZCBWRklPIGFyZSBmb3VuZGF0aW9uYWwgdGVjaG5vbG9naWVzLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIEtWTSBpb2N0bHMsIHNwZWNpZmljYWxseSB0aG9zZSByZWxhdGVkIHRvIEtWTS1WRklPIGRldmljZSBjcmVhdGlvbiBhbmQgbWFuYWdlbWVudCwgYW5kIFZGSU8gaW9jdGxzL2ZpbGUgZGVzY3JpcHRvcnMgdGhhdCBpbnRlcmFjdCB3aXRoIEtWTS4gV2UgZGVmaW5pdGVseSBjYW4gZ2V0IHRvIHRoaXMuCgpUaGlua2luZyBhYm91dCB0aGUgZnV6emluZyBwb3RlbnRpYWwsIGxldCYjMzk7cyBzZWUgaG93IHRoaXMgYWxpZ25zIHdpdGggdGhlIGNyaXRlcmlhLiBUaGlzIHNlZW1zIHRvIGhpdCBvbiBzZXZlcmFsIHBvaW50cy4gVGhpcyBoYXMgcG90ZW50aWFsLCBpdCBmaXRzLgoKKiAgICoqQ29yZSBTdWJzeXN0ZW1zOioqIE1lbW9yeSBtYW5hZ2VtZW50LCBWRlMsIEtWTSwgVkZJTyBhcmUgdG91Y2hlZC4KKiAgICoqUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOioqIFllcywgd2UmIzM5O3JlIHNlZWluZyByZXN0cnVjdHVyaW5nIG9mIGRhdGEgc3RydWN0dXJlcyAoYGt2bWAgYW5kIGBmaWxlYCBzcGVjaWZpY2FsbHkpLCBhbmQgaG93IHRoZXNlIGFyZSBoYW5kbGVkLgoqICAgKipSdW50aW1lIGFzc2VydGlvbnMgYW5kIGRlZmVuc2l2ZSBjaGVja3M6KiogVGhlIGNoYW5nZXMgd2l0aCBgZ2V0X2ZpbGVfYWN0aXZlYCwgc3BpbmxvY2tzLCBhbmQgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBjaGFuZ2VzIGJldHdlZW4gYHN0cnVjdCBmaWxlYCBhbmQgYHN0cnVjdCBrdm1gIGxvb2sgcHJvbWlzaW5nIGZvciBleHBvc2luZyBzdWJ0bGUgYnVncy4gVGhpcyBpcyBhIHJlZmFjdG9yLCB0aGlzIGlzIGEgY2hhbmdlIHRvIHRoZSBmdW5kYW1lbnRhbCB3YXkgd2UmIzM5O3JlIGhhbmRsaW5nIGZpbGUgZGVzY3JpcHRvcnMsIGFuZCBLVk0gY29udGV4dHMuCgpTbywgdGhpcyBwYXRjaCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuIE5leHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIEtjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIG9yIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciBLVk0gYW5kIFZGSU8gdG8gZGV0ZXJtaW5lIHRoZSBuZWVkZWQgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgY29uZmlndXJhdGlvbnMgZm9yOgoKKiAgIEtWTSAob2J2aW91c2x5KS4KKiAgIFZGSU8sIGVzcGVjaWFsbHkgYW55dGhpbmcgcmVsYXRlZCB0byBkZXZpY2UgYXNzaWdubWVudCBhbmQgcGFzc3Rocm91Z2guCiogICBBbnl0aGluZyByZWxhdGluZyB0byB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHdlJiMzOTtyZSBsb29raW5nIGF0LCBqdXN0IGluIGNhc2UuCgpPbmNlIEkgaGF2ZSB0aGUgY29uZmlncyBuYWlsZWQgZG93biwgSSBjYW4gc3RhcnQgdGhpbmtpbmcgYWJvdXQgc3BlY2lmaWMgZnV6emluZyB0YXJnZXRzLiBUaGlzIGxvb2tzIHRvIGJlIHJpcGUgZm9yIGlucHV0IHRoYXQgdHJpZ2dlcnMgaW9jdGxzIHJlbGF0ZWQgdG8gS1ZNIGRldmljZSBjcmVhdGlvbi9tYW5hZ2VtZW50LCBhbmQgYW55dGhpbmcgdGhhdCBtYW5pcHVsYXRlcyBmaWxlIGRlc2NyaXB0b3JzIHJlbGF0ZWQgdG8gVkZJTyBhbmQgS1ZNLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mzpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5My1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDg6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTc6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOC1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzM6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNC1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzODYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBWRklPIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgVkZJTyBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIGRyaXZlciBvcHRpb25zIHJlc2lkZS4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gbmF2aWdhdGUgdG8gdGhlIGBkcml2ZXJzL3ZmaW8vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBkZWZpbml0aW9uIGZvciBhbGwgdGhpbmdzIHJlbGF0ZWQgdG8gVkZJTy4gVGhhdCBmaWxlIHNob3VsZCBkZWZpbmUgdGhlIHZhcmlvdXMga25vYnMgYW5kIHN3aXRjaGVzIHdlIGhhdmUgdG8gY29udHJvbCBpdHMgYmVoYXZpb3IsIHdoZXRoZXIgaXQgaXMgZW5hYmxlZCBhcyBhIG1vZHVsZSwgYnVpbHQgaW4gb3IgZGlzYWJsZWQuIEZyb20gdGhlcmUsIEkgY2FuIHVuZGVyc3RhbmQgd2hpY2ggZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSwgd2hpY2ggZGVwZW5kZW5jaWVzIGV4aXN0LCBhbmQgaG93IHRoZSB2YXJpb3VzIGNvbXBvbmVudHMgaW50ZXJhY3QgZnJvbSBhIGJ1aWxkIGNvbmZpZ3VyYXRpb24gcGVyc3BlY3RpdmUuIFRoaXMgaXMgYSBjcml0aWNhbCBzdGVwIGJlZm9yZSBhdHRlbXB0aW5nIGFueSBtb2RpZmljYXRpb25zIG9yIHRyb3VibGVzaG9vdGluZyBiZWNhdXNlIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGN1cnJlbnQgcGFyYW1ldGVycyBhbmQgaG93IHRoZXkgYXJlIGhhbmRsZWQuIFRoZSBLY29uZmlnIGZpbGUgc2hvdWxkIGdpdmUgbWUgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy92ZmlvL0tjb25maWc6MjptZW51Y29uZmlnIFZGSU9cbmRyaXZlcnMvdmZpby9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtWRklPIE5vbi1Qcml2aWxlZ2VkIHVzZXJzcGFjZSBkcml2ZXIgZnJhbWV3b3JrXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWc9MTY9aWYgVkZJT1xuZHJpdmVycy92ZmlvL0tjb25maWc6MTc6Y29uZmlnIFZGSU9fREVWSUNFX0NERVZcbmRyaXZlcnMvdmZpby9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciB0aGUgVkZJTyBjZGV2IC9kZXYvdmZpby9kZXZpY2VzL3ZmaW9YXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWctMjgtXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzoyOTpjb25maWcgVkZJT19HUk9VUFxuZHJpdmVycy92ZmlvL0tjb25maWctMzAtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRoZSBWRklPIGdyb3VwIC9kZXYvdmZpby8kZ3JvdXBfaWRcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0zOC1cbmRyaXZlcnMvdmZpby9LY29uZmlnOjM5OmNvbmZpZyBWRklPX0NPTlRBSU5FUlxuZHJpdmVycy92ZmlvL0tjb25maWctNDAtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRoZSBWRklPIGNvbnRhaW5lciAvZGV2L3ZmaW8vdmZpb1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnPTUxPWlmIFZGSU9fQ09OVEFJTkVSXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Mjpjb25maWcgVkZJT19JT01NVV9UWVBFMVxuZHJpdmVycy92ZmlvL0tjb25maWctNTMtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnLTU1LVxuZHJpdmVycy92ZmlvL0tjb25maWc6NTY6Y29uZmlnIFZGSU9fSU9NTVVfU1BBUFJfVENFXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01Ny1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWc9NjA9ZW5kaWZcbmRyaXZlcnMvdmZpby9LY29uZmlnLTYxLVxuZHJpdmVycy92ZmlvL0tjb25maWc6NjI6Y29uZmlnIFZGSU9fTk9JT01NVVxuZHJpdmVycy92ZmlvL0tjb25maWctNjMtXHRib29sIFwmIzM0O1ZGSU8gTm8tSU9NTVUgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnLTc4LVxuZHJpdmVycy92ZmlvL0tjb25maWc6Nzk6Y29uZmlnIFZGSU9fVklSUUZEXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy04MC1cdGJvb2xcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy04My1cbmRyaXZlcnMvdmZpby9LY29uZmlnOjg0OmNvbmZpZyBWRklPX0RFQlVHRlNcbmRyaXZlcnMvdmZpby9LY29uZmlnLTg1LVx0Ym9vbCBcJiMzNDtFeHBvcnQgVkZJTyBpbnRlcm5hbHMgaW4gRGVidWdGU1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9jZHgvS2NvbmZpZy03LVxuZHJpdmVycy92ZmlvL2NkeC9LY29uZmlnOjg6Y29uZmlnIFZGSU9fQ0RYXG5kcml2ZXJzL3ZmaW8vY2R4L0tjb25maWctOS1cdHRyaXN0YXRlIFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgQ0RYIGJ1cyBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnPTE9bWVudSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIEZTTF9NQyBidXMgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy0zLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnOjQ6Y29uZmlnIFZGSU9fRlNMX01DXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctNS1cdHRyaXN0YXRlIFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgUW9ySVEgRFBBQTIgZnNsLW1jIGJ1cyBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvS2NvbmZpZy0yLVxuZHJpdmVycy92ZmlvL21kZXYvS2NvbmZpZzozOmNvbmZpZyBWRklPX01ERVZcbmRyaXZlcnMvdmZpby9tZGV2L0tjb25maWctNC1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTI9bWVudSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTpjb25maWcgVkZJT19QQ0lfQ09SRVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTYtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy05LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BDSV9JTlRYXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTEtXHRkZWZfYm9vbCB5IGlmICFTMzkwXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTEzLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjE0OmNvbmZpZyBWRklPX1BDSVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBWRklPIHN1cHBvcnQgZm9yIGFueSBQQ0kgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTIzPWlmIFZGSU9fUENJXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MjQ6Y29uZmlnIFZGSU9fUENJX1ZHQVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTMzLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjM0OmNvbmZpZyBWRklPX1BDSV9JR0RcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zNS1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBleHRlbnNpb25zIGZvciBJbnRlbCBncmFwaGljcyAoR1ZULWQpXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTQ1PWVuZGlmXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDYtXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDc6Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDgtXHRib29sIFwmIzM0O1ZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01Ny1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo1ODpjb25maWcgVkZJT19QQ0lfRE1BQlVGXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTktXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXHUwMDI2XHUwMDI2IFBDSV9QMlBETUEgXHUwMDI2XHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXG4tLVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWc9Mj1tZW51IFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgcGxhdGZvcm0gZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnLTQtXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZzo1OmNvbmZpZyBWRklPX1BMQVRGT1JNX0JBU0VcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnLTYtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnLTgtXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZzo5OmNvbmZpZyBWRklPX1BMQVRGT1JNXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZy0xMC1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgcGxhdGZvcm0gZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctMTgtXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZzoxOTpjb25maWcgVkZJT19BTUJBXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgQU1CQSBkZXZpY2VzIChERVBSRUNBVEVEKVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnPTI9aWYgVkZJT19QTEFURk9STVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL3Jlc2V0L0tjb25maWc6Mzpjb25maWcgVkZJT19QTEFURk9STV9DQUxYRURBWEdNQUNfUkVTRVRcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIGNhbHhlZGEgeGdtYWMgcmVzZXQgKERFUFJFQ0FURUQpXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL3Jlc2V0L0tjb25maWctOS1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BMQVRGT1JNX0FNRFhHQkVfUkVTRVRcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTExLVx0dHJpc3RhdGUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBBTUQgWEdCRSByZXNldCAoREVQUkVDQVRFRClcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy0xNi1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnOjE3OmNvbmZpZyBWRklPX1BMQVRGT1JNX0JDTUZMRVhSTV9SRVNFVFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL3Jlc2V0L0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIEJyb2FkY29tIEZsZXhSTSByZXNldCAoREVQUkVDQVRFRClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM5NAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcywgdGhpbmtpbmcgb3V0IGxvdWQ6CgoqKkRpdmluZyBpbnRvIFZGSU8gYW5kIEtWTSBJbnRlcmFjdGlvbioqCgpSaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IFZGSU8gYW5kIEtWTSBhcmUgdGFsa2luZyB0byBlYWNoIG90aGVyLCBhbmQgd2hhdCB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIGFyZS4gSSYjMzk7bGwgc3RhcnQgYnkgZm9jdXNpbmcgb24gYHZpcnQva3ZtL3ZmaW8uY2AuIFRoYXQmIzM5O3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSBWRklPIHNpZGUgb2YgdGhpbmdzLgoKTXkgbmV4dCBtb3ZlIGlzIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgYHZpcnQva3ZtL3ZmaW8uY2AgZ2V0cyBidWlsdCBpbnRvIHRoZSBrZXJuZWwuIFRoZSBNYWtlZmlsZSB3aWxsIGJlIHRoZSBrZXkgdGhlcmUuIEkgbmVlZCB0byB0cmFjZSB0aGUgYnVpbGQgcHJvY2VzcyB0byBzZWUgaXRzIGRlcGVuZGVuY2llcyBhbmQgYW55IHJlbGV2YW50IGNvbXBpbGVyIGZsYWdzIG9yIGNvbmRpdGlvbnMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBtb2R1bGUgaXMgaW5jbHVkZWQgaW50byB0aGUgZ3JlYXRlciBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9NYWtlZmlsZS5rdm09OD1rdm0teSA6PSAkKEtWTSkva3ZtX21haW4ubyAkKEtWTSkvZXZlbnRmZC5vICQoS1ZNKS9iaW5hcnlfc3RhdHMub1xudmlydC9rdm0vTWFrZWZpbGUua3ZtOjk6a3ZtLSQoQ09ORklHX0tWTV9WRklPKSAmIzQzOz0gJChLVk0pL3ZmaW8ub1xudmlydC9rdm0vTWFrZWZpbGUua3ZtLTEwLWt2bS0kKENPTkZJR19LVk1fTU1JTykgJiM0Mzs9ICQoS1ZNKS9jb2FsZXNjZWRfbW1pby5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NzAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIENPTkZJR19LVk1fVkZJTyBEZWZpbml0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBDT05GSUdfS1ZNX1ZGSU9gLiBJdCYjMzk7cyBhIGtleSBzeW1ib2wsIHNvIGl0IHNob3VsZCBiZSB1c2VkIHByZXR0eSB3aWRlbHkuIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgd2hlcmUgYW5kIGhvdyB0aGUgVkZJTyBzdXBwb3J0IGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcuIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgbWF5YmUgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgc2VhcmNoIHRocm91Z2ggdGhlIGtlcm5lbCYjMzk7cyBzb3VyY2UgdHJlZSBhbmQgY29uZmlnIGZpbGVzLiBUaGUgZ29hbCBpcyB0byBlc3RhYmxpc2ggdGhlIGNvbXBsZXRlIGRlcGVuZGVuY3kgY2hhaW4gYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGxlYWQgdG8gaXRzIGFjdGl2YXRpb24gYW5kIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBLVk0gY29tcG9uZW50cy4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBpdHMgY29udGV4dCB3aXRoaW4gdGhlIGxhcmdlciBrZXJuZWwgZnJhbWV3b3JrLiBJJiMzOTttIHRoaW5raW5nIG9mIGBLY29uZmlnYCBmaWxlcyBhbmQgdGhlaXIgaW5jbHVzaW9uIGhpZXJhcmNoaWVzLiBUaW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9WRklPJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL0tjb25maWc9NTk9Y29uZmlnIEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTYxLVxudmlydC9rdm0vS2NvbmZpZzo2Mjpjb25maWcgS1ZNX1ZGSU9cbnZpcnQva3ZtL0tjb25maWctNjMtICAgICAgIGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwODYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBWRklPIFVzZXIgU2VsZWN0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgYSBjb25jaXNlIG9uZTogJiMzNDtMZXQmIzM5O3Mgc2VlIHdobyBzZWxlY3RzIEtWTV9WRklPLiYjMzQ7IEl0IGltbWVkaWF0ZWx5IGJyaW5ncyB0byBtaW5kIGEgc3BlY2lmaWMgc2NlbmFyaW8uIEkmIzM5O20gbGlrZWx5IHRoaW5raW5nIGFib3V0IG1vbml0b3JpbmcsIHBlcmhhcHMgYSBzeXN0ZW0gY29uZmlndXJhdGlvbiwgYSBkZXZlbG9wbWVudCBwcm9jZXNzLCBvciBtYXliZSBldmVuIGEgdXNlciBzdXJ2ZXkuIFRoZSB0cmlnZ2VyIGlzIHRoZSBtZW50aW9uIG9mIEtWTV9WRklPIHdoaWNoIGltbWVkaWF0ZWx5IHBsYWNlcyBtZSBpbiB0aGUgY29udGV4dCBvZiB2aXJ0dWFsaXphdGlvbiwgaGFyZHdhcmUgcGFzc3Rocm91Z2gsIGFuZCBJL08gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLgoKVGhlIGltcGxpZWQgcXVlc3Rpb24gaXMsICYjMzQ7V2hvIGlzIGxldmVyYWdpbmcgVkZJTyAoVmlydHVhbCBGdW5jdGlvbiBJL08pIHdpdGhpbiBhIEtWTSAoS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSkgZW52aXJvbm1lbnQ/JiMzNDsgVGhpcyBpc24mIzM5O3QganVzdCBhIGNhc3VhbCBvYnNlcnZhdGlvbjsgaXQmIzM5O3MgYSBkYXRhLWdhdGhlcmluZyBleGVyY2lzZS4gSSYjMzk7bSB0cnlpbmcgdG8gaWRlbnRpZnkgYSBzcGVjaWZpYyBkZW1vZ3JhcGhpYyBvciB1c2VyIHByb2ZpbGUgcmVsYXRlZCB0byBhZHZhbmNlZCB2aXJ0dWFsaXphdGlvbiB0ZWNobmlxdWVzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBnYW1lcnMsIHJlc2VhcmNoZXJzIHdvcmtpbmcgd2l0aCBzcGVjaWFsaXplZCBoYXJkd2FyZSwgb3IgcGVyaGFwcyBlbnRlcnByaXNlIHVzZXJzIGNvbnNvbGlkYXRpbmcgd29ya2xvYWRzPwoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgbGlrZWx5IHRvIGlkZW50aWZ5IHRoZSB1c2UgY2FzZXMgYW5kIHRlY2huaWNhbCBrbm93bGVkZ2UgYmFzZSBzdXJyb3VuZGluZyB0aGUgcGVvcGxlIHRoYXQgYXJlIHVzaW5nIHRoZSBoYXJkd2FyZSBwYXNzLXRocm91Z2ggY2FwYWJpbGl0aWVzIG9mIEtWTV9WRklPLiBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIGFwcGxpY2F0aW9ucywgdW5kZXJseWluZyBoYXJkd2FyZSwgYW5kIGNvbmZpZ3VyYXRpb24gY2hvaWNlcyBiZWluZyBtYWRlLiBJdCBzdWdnZXN0cyB0aGF0IHRoZXJlIGlzIGEgZGVmaW5lZCBwcm9ibGVtIHRvIHNvbHZlIG9yIGEgZGF0YSBhbmFseXNpcyBwcm9qZWN0IHRvIHBlcmZvcm0uIFRoaXMgYWxzbyBtZWFucyB0aGF0IEkgYW0gcHJvYmFibHkgYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBpbXBsaWNhdGlvbnMgb2Ygc2VsZWN0aW5nIGFuZCBkZXBsb3lpbmcgVkZJTywgYXMgd2VsbCBhcyB0aGUgaW1wbGljYXRpb25zIG9mIG5vdCBkb2luZyBzby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEtWTV9WRklPJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9MjA9bWVudWNvbmZpZyBLVk1cbi0tXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTI3LVx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjI4Olx0c2VsZWN0IEtWTV9WRklPXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTI5LVx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIyLVx0c2VsZWN0IEtWTV9DT01NT05cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMzpcdHNlbGVjdCBLVk1fVkZJT1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI0LVx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1Ncbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWc9MTk9Y29uZmlnIEtWTVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0yOS1cdHNlbGVjdCBIQVZFX0tWTV9OT19QT0xMXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MzA6XHRzZWxlY3QgS1ZNX1ZGSU9cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0zMS1cdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNDQtXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo0NTpcdHNlbGVjdCBLVk1fVkZJT1xuYXJjaC94ODYva3ZtL0tjb25maWctNDYtXHRzZWxlY3QgSEFWRV9LVk1fUE1fTk9USUZJRVIgaWYgUE1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4NTgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBSZXZpZXcgZm9yIEtWTSBhbmQgVkZJTyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgeDg2IGtlcm5lbCBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gS1ZNIGFuZCBWRklPLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhhdCBgQ09ORklHX0tWTV9YODZgIGltcGxpZXMgYEtWTV9WRklPYCwgd2hpY2ggbWFrZXMgc2Vuc2U7IHRoZXkgb2Z0ZW4gZ28gaGFuZC1pbi1oYW5kIGluIGEgdmlydHVhbGl6YXRpb24gc2V0dXAuIEkmIzM5O20gbm90aW5nIHRoYXQgYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX1ZGSU9gIGFyZSB0aGUgY29yZSBjb25maWcgb3B0aW9ucyBoZXJlLgoKTm93LCBsZXQmIzM5O3MgYWxzbyBjaGVjayB0aGlzIGBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdgIG9wdGlvbiDigJMgdGhhdCYjMzk7cyBzb21ldGhpbmcgd29ydGggaW52ZXN0aWdhdGluZy4gSSYjMzk7bGwgbWFrZSBhIG1lbnRhbCBub3RlIHRvIGZpbmQgdGhhdCBpbiBgYXJjaC94ODYva3ZtL0tjb25maWdgIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyB0aGVyZS4gSSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuLi4gc28gSSBtdXN0IGNoZWNrIHdobyBzZWxlY3RzIGBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3IgZmVhdHVyZXMgcmVseSBvbiB0aGlzLiBUaGlzIGlzIGFsbCBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgS1ZNIGFuZCBWRklPIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZz0xMjU9Y29uZmlnIERSTV9JOTE1X0dWVF9LVk1HVFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWctMTMxLVx0c2VsZWN0IERSTV9JOTE1X0dWVFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZzoxMzI6XHRzZWxlY3QgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmlnLTEzMy1cdHNlbGVjdCBWRklPX01ERVZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczMTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBLVk0gUGFnZSBUcmFja2luZyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXJgIGlzIGFjdHVhbGx5IGNvbXBpbGVkIHdpdGhpbiB0aGUgeDg2IEtWTSBjb2RlLiBUaGlzIGZ1bmN0aW9uIGlzIHByZXR0eSBjcml0aWNhbCBmb3IgdHJhY2tpbmcgcGFnZSBtb2RpZmljYXRpb25zLCBzbyBrbm93aW5nIGl0cyBidWlsZCBsb2NhdGlvbiB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgS1ZNIGFyY2hpdGVjdHVyZS4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgLiBUaGF0IGZpbGUgc2hvdWxkIG9yY2hlc3RyYXRlIHRoZSBidWlsZCBvZiBhbGwgdGhlIHJlbGV2YW50IEtWTSBjb21wb25lbnRzIGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gVGltZSB0byBkaXZlIGluIGFuZCBzZWUgd2hlcmUgdGhhdCBub3RpZmllciByZWdpc3RyYXRpb24gaXMgYWN0dWFsbHkgYnJvdWdodCBpbnRvIHRoZSBwaWN0dXJlLiBGaW5kaW5nIGl0JiMzOTtzIGJ1aWxkIHJ1bGUgc2hvdWxkIGlsbHVtaW5hdGUgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgcmVzdCBvZiB0aGUgS1ZNIGluZnJhc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX3RyYWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9NYWtlZmlsZT04PWt2bS15XHRcdFx0JiM0Mzs9IHg4Ni5vIGVtdWxhdGUubyBpcnEubyBsYXBpYy5vIGNwdWlkLm8gbXNycy5vIHBtdS5vIHJlZ3MubyBcXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjk6XHRcdFx0ICAgbXRyci5vIGRlYnVnZnMubyBtbXUvbW11Lm8gbW11L3BhZ2VfdHJhY2subyBtbXUvc3B0ZS5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMTAtXG4tLVxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTU5PWV4cG9ydHNfZ3JlcF90cmFpbGVyIDo9IC0taW5jbHVkZT0mIzM5OyouW2NoXSYjMzk7IC1ucncgJChzcmN0cmVlKS92aXJ0L2t2bSAkKHNyY3RyZWUpL2FyY2gveDg2L2t2bSB8IFxcXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6NjA6XHRcdFx0Z3JlcCAtdiAtZSBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllciBcXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjYxOlx0XHRcdFx0LWUga3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllciBcXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTYyLVx0XHRcdFx0LWUga3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm4gXFxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTI3LSNpbmNsdWRlIFwmIzM0O2t2bV9lbXVsYXRlLmhcJiMzNDtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Mjg6I2luY2x1ZGUgXCYjMzQ7cGFnZV90cmFjay5oXCYjMzQ7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTI5LSNpbmNsdWRlIFwmIzM0O2NwdWlkLmhcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQwNjA9c3RhdGljIGludCBtbXVfZmlyc3Rfc2hhZG93X3Jvb3RfYWxsb2Moc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDA4Ny1cdGlmIChrdm1fbWVtc2xvdHNfaGF2ZV9ybWFwcyhrdm0pIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0MDg4Olx0ICAgIGt2bV9wYWdlX3RyYWNrX3dyaXRlX3RyYWNraW5nX2VuYWJsZWQoa3ZtKSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDA4OS1cdFx0Z290byBvdXRfc3VjY2Vzcztcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQxMDYtXHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQxMDc6XHRcdFx0ciA9IGt2bV9wYWdlX3RyYWNrX3dyaXRlX3RyYWNraW5nX2FsbG9jKHNsb3QpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00MTA4LVx0XHRcdGlmIChyKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDUyMD1zdGF0aWMgaW50IGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwgYm9vbCBkaXJlY3QpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTUzLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NTU0OnN0YXRpYyBib29sIHBhZ2VfZmF1bHRfaGFuZGxlX3BhZ2VfdHJhY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTU1LVx0XHRcdFx0XHQgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ4NDA9c3RhdGljIGludCBkaXJlY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00ODQ3LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0ODQ4Olx0aWYgKHBhZ2VfZmF1bHRfaGFuZGxlX3BhZ2VfdHJhY2sodmNwdSwgZmF1bHQpKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00ODQ5LVx0XHRyZXR1cm4gUkVUX1BGX1dSSVRFX1BST1RFQ1RFRDtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ5MzU9c3RhdGljIGludCBrdm1fdGRwX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ5MzktXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ5NDA6XHRpZiAocGFnZV9mYXVsdF9oYW5kbGVfcGFnZV90cmFjayh2Y3B1LCBmYXVsdCkpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ5NDEtXHRcdHJldHVybiBSRVRfUEZfV1JJVEVfUFJPVEVDVEVEO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTIwLSNpbmNsdWRlIFwmIzM0O21tdV9pbnRlcm5hbC5oXCYjMzQ7XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoyMTojaW5jbHVkZSBcJiMzNDtwYWdlX3RyYWNrLmhcJiMzNDtcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTIyLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM9MjM9c3RhdGljIGJvb2wga3ZtX2V4dGVybmFsX3dyaXRlX3RyYWNraW5nX2VuYWJsZWQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTI3LVx0ICogUmVhZCBleHRlcm5hbF93cml0ZV90cmFja2luZ19lbmFibGVkIGJlZm9yZSByZWxhdGVkIHBvaW50ZXJzLiAgUGFpcnNcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI4Olx0ICogd2l0aCB0aGUgc21wX3N0b3JlX3JlbGVhc2UgaW4ga3ZtX3BhZ2VfdHJhY2tfd3JpdGVfdHJhY2tpbmdfZW5hYmxlKCkuXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yOS1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTM1LVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MzY6Ym9vbCBrdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19lbmFibGVkKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTM3LXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy00MS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjQyOnZvaWQga3ZtX3BhZ2VfdHJhY2tfZnJlZV9tZW1zbG90KHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy00My17XG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtNDctXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzo0ODpzdGF0aWMgaW50IF9fa3ZtX3BhZ2VfdHJhY2tfd3JpdGVfdHJhY2tpbmdfYWxsb2Moc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTQ5LVx0XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIG5wYWdlcylcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy01OS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjYwOmludCBrdm1fcGFnZV90cmFja19jcmVhdGVfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy02MS1cdFx0XHRcdCAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy02My17XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzo2NDpcdGlmICgha3ZtX3BhZ2VfdHJhY2tfd3JpdGVfdHJhY2tpbmdfZW5hYmxlZChrdm0pKVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtNjUtXHRcdHJldHVybiAwO1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtNjYtXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzo2NzpcdHJldHVybiBfX2t2bV9wYWdlX3RyYWNrX3dyaXRlX3RyYWNraW5nX2FsbG9jKHNsb3QsIG5wYWdlcyk7XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy02OC19XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy02OS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjcwOmludCBrdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19hbGxvYyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtNzEte1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6NzI6XHRyZXR1cm4gX19rdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19hbGxvYyhzbG90LCBzbG90LVx1MDAzZW5wYWdlcyk7XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy03My19XG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM9OTA9dm9pZCBfX2t2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy05Ny1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjk4Olx0aWYgKEtWTV9CVUdfT04oIWt2bV9wYWdlX3RyYWNrX3dyaXRlX3RyYWNraW5nX2VuYWJsZWQoa3ZtKSwga3ZtKSlcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTk5LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM9MTEzPXZvaWQgX19rdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTIwLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MTIxOlx0aWYgKEtWTV9CVUdfT04oIWt2bV9wYWdlX3RyYWNrX3dyaXRlX3RyYWNraW5nX2VuYWJsZWQoa3ZtKSwga3ZtKSlcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTEyMi1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jPTE0Nj1ib29sIGt2bV9nZm5faXNfd3JpdGVfdHJhY2tlZChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTUzLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MTU0Olx0aWYgKCFrdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19lbmFibGVkKGt2bSkpXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0xNTUtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0xNzEtI2lmZGVmIENPTkZJR19LVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjE3Mjp2b2lkIGt2bV9wYWdlX3RyYWNrX2NsZWFudXAoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTczLXtcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjE3NDpcdHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9oZWFkICpoZWFkO1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTc1LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTE3OS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjE4MDppbnQga3ZtX3BhZ2VfdHJhY2tfaW5pdChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0xODEte1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MTgyOlx0c3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX2hlYWQgKmhlYWQ7XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0xODMtXG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM9MTg5PXN0YXRpYyBpbnQga3ZtX2VuYWJsZV9leHRlcm5hbF93cml0ZV90cmFja2luZyhzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMjA0LVx0ICovXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoyMDU6XHRpZiAoa3ZtX3BhZ2VfdHJhY2tfd3JpdGVfdHJhY2tpbmdfZW5hYmxlZChrdm0pKVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMjA2LVx0XHRnb3RvIG91dF9zdWNjZXNzO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTIxOC1cdFx0XHQgKi9cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjIxOTpcdFx0XHRyID0ga3ZtX3BhZ2VfdHJhY2tfd3JpdGVfdHJhY2tpbmdfYWxsb2Moc2xvdCk7XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yMjAtXHRcdFx0aWYgKHIpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMjM5LSAqL1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MjQwOmludCBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3QgZmlsZSAqZmlsZSxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI0MTpcdFx0XHRcdCAgICAgc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm4pXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yNDIte1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MjQzOlx0c3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX2hlYWQgKmhlYWQ7XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yNDQtXHRzdHJ1Y3Qga3ZtICprdm0gPSBmaWxlX3RvX2t2bShmaWxlKTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yNjQtfVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MjY1OkVYUE9SVF9TWU1CT0xfR1BMKGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKTtcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTI2Ni1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yNjgtICogc3RvcCByZWNlaXZpbmcgdGhlIGV2ZW50IGludGVyY2VwdGlvbi4gSXQgaXMgdGhlIG9wcG9zZWQgb3BlcmF0aW9uIG9mXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoyNjk6ICoga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIoKS5cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTI3MC0gKi9cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI3MTp2b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGZpbGUgKmZpbGUsXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoyNzI6XHRcdFx0XHRcdHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpuKVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMjczLXtcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI3NDpcdHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9oZWFkICpoZWFkO1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMjc1LVx0c3RydWN0IGt2bSAqa3ZtID0gZmlsZV90b19rdm0oZmlsZSk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMjg1LX1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI4NjpFWFBPUlRfU1lNQk9MX0dQTChrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKTtcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTI4Ny1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yOTQtICovXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoyOTU6dm9pZCBfX2t2bV9wYWdlX3RyYWNrX3dyaXRlKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCBjb25zdCB1OCAqbmV3LCBpbnQgYnl0ZXMpXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yOTYte1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6Mjk3Olx0c3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX2hlYWQgKmhlYWQ7XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoyOTg6XHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbjtcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTI5OS1cdGludCBpZHg7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMzE3LSAqL1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MzE4OnZvaWQga3ZtX3BhZ2VfdHJhY2tfZGVsZXRlX3Nsb3Qoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMzE5LXtcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjMyMDpcdHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9oZWFkICpoZWFkO1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MzIxOlx0c3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm47XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0zMjItXHRpbnQgaWR4O1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTYtXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaDo3OiNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGFnZV90cmFjay5oXHUwMDNlXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaC04LVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtOS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oOjEwOmJvb2wga3ZtX3BhZ2VfdHJhY2tfd3JpdGVfdHJhY2tpbmdfZW5hYmxlZChzdHJ1Y3Qga3ZtICprdm0pO1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6MTE6aW50IGt2bV9wYWdlX3RyYWNrX3dyaXRlX3RyYWNraW5nX2FsbG9jKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpO1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtMTItXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaDoxMzp2b2lkIGt2bV9wYWdlX3RyYWNrX2ZyZWVfbWVtc2xvdChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KTtcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oOjE0OmludCBrdm1fcGFnZV90cmFja19jcmVhdGVfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaC0xNS1cdFx0XHRcdCAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaD0yMz1ib29sIGt2bV9nZm5faXNfd3JpdGVfdHJhY2tlZChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtMjYtI2lmZGVmIENPTkZJR19LVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oOjI3OmludCBrdm1fcGFnZV90cmFja19pbml0KHN0cnVjdCBrdm0gKmt2bSk7XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaDoyODp2b2lkIGt2bV9wYWdlX3RyYWNrX2NsZWFudXAoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTI5LVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6MzA6dm9pZCBfX2t2bV9wYWdlX3RyYWNrX3dyaXRlKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCBjb25zdCB1OCAqbmV3LCBpbnQgYnl0ZXMpO1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6MzE6dm9pZCBrdm1fcGFnZV90cmFja19kZWxldGVfc2xvdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpO1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtMzItXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaDozMzpzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3BhZ2VfdHJhY2tfaGFzX2V4dGVybmFsX3VzZXIoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtMzQte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTM3LSNlbHNlXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaDozODpzdGF0aWMgaW5saW5lIGludCBrdm1fcGFnZV90cmFja19pbml0KHN0cnVjdCBrdm0gKmt2bSkgeyByZXR1cm4gMDsgfVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6Mzk6c3RhdGljIGlubGluZSB2b2lkIGt2bV9wYWdlX3RyYWNrX2NsZWFudXAoc3RydWN0IGt2bSAqa3ZtKSB7IH1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTQwLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6NDE6c3RhdGljIGlubGluZSB2b2lkIF9fa3ZtX3BhZ2VfdHJhY2tfd3JpdGUoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaC00Mi1cdFx0XHRcdFx0ICBjb25zdCB1OCAqbmV3LCBpbnQgYnl0ZXMpIHsgfVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6NDM6c3RhdGljIGlubGluZSB2b2lkIGt2bV9wYWdlX3RyYWNrX2RlbGV0ZV9zbG90KHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTQ0LVx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KSB7IH1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTQ1LVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6NDY6c3RhdGljIGlubGluZSBib29sIGt2bV9wYWdlX3RyYWNrX2hhc19leHRlcm5hbF91c2VyKHN0cnVjdCBrdm0gKmt2bSkgeyByZXR1cm4gZmFsc2U7IH1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTQ3LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTQ5LVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6NTA6c3RhdGljIGlubGluZSB2b2lkIGt2bV9wYWdlX3RyYWNrX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtNTEtXHRcdFx0XHRcdGNvbnN0IHU4ICpuZXcsIGludCBieXRlcylcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTUyLXtcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oOjUzOlx0X19rdm1fcGFnZV90cmFja193cml0ZSh2Y3B1LVx1MDAzZWt2bSwgZ3BhLCBuZXcsIGJ5dGVzKTtcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTU0LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaD04MDQ9c3RhdGljIGludCBGTkFNRShwYWdlX2ZhdWx0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oLTgzMi1cbmFyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaDo4MzM6XHRpZiAocGFnZV9mYXVsdF9oYW5kbGVfcGFnZV90cmFjayh2Y3B1LCBmYXVsdCkpIHtcbmFyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaC04MzQtXHRcdHNoYWRvd19wYWdlX3RhYmxlX2NsZWFyX2Zsb29kKHZjcHUsIGZhdWx0LVx1MDAzZWFkZHIpO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0yNy0jaW5jbHVkZSBcJiMzNDtrdm1fZW11bGF0ZS5oXCYjMzQ7XG5hcmNoL3g4Ni9rdm0veDg2LmM6Mjg6I2luY2x1ZGUgXCYjMzQ7bW11L3BhZ2VfdHJhY2suaFwmIzM0O1xuYXJjaC94ODYva3ZtL3g4Ni5jLTI5LSNpbmNsdWRlIFwmIzM0O3g4Ni5oXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTUwNjE9c3RhdGljIGludCBlbXVsYXRvcl93cml0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTA2OC1cdFx0cmV0dXJuIDA7XG5hcmNoL3g4Ni9rdm0veDg2LmM6NTA2OTpcdGt2bV9wYWdlX3RyYWNrX3dyaXRlKHZjcHUsIGdwYSwgdmFsLCBieXRlcyk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNTA3MC1cdHJldHVybiAxO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz01MjYwPXN0YXRpYyBpbnQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTMzMi1cbmFyY2gveDg2L2t2bS94ODYuYzo1MzMzOlx0a3ZtX3BhZ2VfdHJhY2tfd3JpdGUodmNwdSwgZ3BhLCBuZXcsIGJ5dGVzKTtcbmFyY2gveDg2L2t2bS94ODYuYy01MzM0LVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz05ODQzPWludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05ODU4LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjk4NTk6XHRyZXQgPSBrdm1fcGFnZV90cmFja19pbml0KGt2bSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTg2MC1cdGlmIChyZXQpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTk4NjQtXHRpZiAocmV0KVxuYXJjaC94ODYva3ZtL3g4Ni5jOjk4NjU6XHRcdGdvdG8gb3V0X2NsZWFudXBfcGFnZV90cmFjaztcbmFyY2gveDg2L2t2bS94ODYuYy05ODY2LVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05OTA5LVx0a3ZtX21tdV91bmluaXRfdm0oa3ZtKTtcbmFyY2gveDg2L2t2bS94ODYuYzo5OTEwOm91dF9jbGVhbnVwX3BhZ2VfdHJhY2s6XG5hcmNoL3g4Ni9rdm0veDg2LmM6OTkxMTpcdGt2bV9wYWdlX3RyYWNrX2NsZWFudXAoa3ZtKTtcbmFyY2gveDg2L2t2bS94ODYuYy05OTEyLW91dDpcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTAwMTQ9dm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwNDAtXHRrdm1fbW11X3VuaW5pdF92bShrdm0pO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMDQxOlx0a3ZtX3BhZ2VfdHJhY2tfY2xlYW51cChrdm0pO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDQyLVx0a3ZtX3hlbl9kZXN0cm95X3ZtKGt2bSk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwMDU3PXZvaWQga3ZtX2FyY2hfZnJlZV9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwNjctXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwNjg6XHRrdm1fcGFnZV90cmFja19mcmVlX21lbXNsb3Qoc2xvdCk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwNjktfVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMDA5Mz1zdGF0aWMgaW50IGt2bV9hbGxvY19tZW1zbG90X21ldGFkYXRhKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxNDYtXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAxNDc6XHRpZiAoa3ZtX3BhZ2VfdHJhY2tfY3JlYXRlX21lbXNsb3Qoa3ZtLCBzbG90LCBucGFnZXMpKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMTQ4LVx0XHRnb3RvIG91dF9mcmVlO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMDE3OD1pbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxODYtXHQgKi9cbmFyY2gveDg2L2t2bS94ODYuYzoxMDE4NzpcdGlmIChjaGFuZ2UgPT0gS1ZNX01SX01PVkUgXHUwMDI2XHUwMDI2IGt2bV9wYWdlX3RyYWNrX2hhc19leHRlcm5hbF91c2VyKGt2bSkpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxODgtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMDMzOD12b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAzNDMtXHRpZiAoY2hhbmdlID09IEtWTV9NUl9ERUxFVEUpXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAzNDQ6XHRcdGt2bV9wYWdlX3RyYWNrX2RlbGV0ZV9zbG90KGt2bSwgb2xkKTtcbmFyY2gveDg2L2t2bS94ODYuYy0xMDM0NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1MjQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTS1WRklPIEludGVncmF0aW9uOiBBIENvbmN1cnJlbmN5IERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyB0b3VjaGVzIEtWTSBhbmQgVkZJTywgYW5kIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGhvdyBLVk0gVk1zIGFuZCBWRklPIGRldmljZXMgYXJlIGxpbmtlZCBhdCB0aGUgZmlsZSBkZXNjcmlwdG9yIGxldmVsLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIHNwZWNpZmljYWxseSwgZ2l2ZW4gdGhlIGluaXRpYWwgY29udGV4dCBvZiBgcGFnZV90cmFjay5jYC4KCkZpcnN0LCBJIHNlZSB0aGUgYHBhZ2VfdHJhY2suY2AgY2hhbmdlcyBpbnRyb2R1Y2UgZmlsZS1iYXNlZCBub3RpZmllciByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQgbWVhbnMgdGhlIG9sZCBLVk0gc3RydWN0IGlzIG5vIGxvbmdlciBiZWluZyB1c2VkLiBUaGlzIHNpZ25hbHMgYSBzaGlmdCB0b3dhcmRzIGZpbGUtZGVzY3JpcHRvci1iYXNlZCBvcGVyYXRpb25zLgoKRGl2aW5nIGludG8gdGhlIGRpZmYsIEkgbm90ZSB0aGUgcGVydmFzaXZlIGNoYW5nZSBmcm9tIHVzaW5nIGBzdHJ1Y3Qga3ZtICpgIGZvciByZXByZXNlbnRpbmcgdGhlIEtWTSB0byB1c2luZyBgc3RydWN0IGZpbGUgKmAsIHRocm91Z2hvdXQgdGhlIFZGSU8gYW5kIEtWTSBjb2RlLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgYXJjaGl0ZWN0dXJhbCBzaGlmdC4gS2V5IGZ1bmN0aW9ucyBsaWtlIGBrdm1fcGFnZV90cmFja18qYCwgYHZmaW9fZ3JvdXBfc2V0X2t2bWAsIGFuZCBzZXZlcmFsIFZGSU8gZGV2aWNlL2dyb3VwIG9wZXJhdGlvbnMgYXJlIGFsbCByZWZhY3RvcmVkIHRvIHdvcmsgd2l0aCBgc3RydWN0IGZpbGUgKmAgYW5kIHVzZSBmaWxlIG9wZXJhdGlvbnMuIFRoZSB1c2FnZSBvZiBgZ2V0X2ZpbGVgIGFuZCBgZnB1dGAgaW4gcGxhY2Ugb2YgYGt2bV9nZXRfa3ZtYCBhbmQgYGt2bV9wdXRfa3ZtYCBpcyB0aGUgY3JpdGljYWwgcGllY2UgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgY29uY3VycmVuY3kgaW1wbGljYXRpb25zLiBLVk0tVkZJTyBpcyBhIGNsYXNzaWMgZXhhbXBsZSBvZiBjb21wbGV4IHJlc291cmNlIG1hbmFnZW1lbnQgaW52b2x2aW5nIHJlZmNvdW50aW5nLiBUaGUgY29kZSBub3cgbGlua3MgYSBWRklPIGRldmljZS9ncm91cCB0byBhIEtWTSBmaWxlIHRocm91Z2ggYGdldF9maWxlYCBhbmQgYGZwdXRgLiBUaGlzIHN1Z2dlc3RzIGEgcmFjZSBjb25kaXRpb24gaXMgcG9zc2libGUgYmV0d2VlbiB0aGUgY2xvc3VyZSBvZiB0aGUgVk0gZmlsZSBhbmQgdGhlIFZGSU8gb3BlcmF0aW9ucyBvciBga3ZtX3ZmaW9fZmlsZV9hZGRgLiBJIHNlZSBpbiBga3ZtX2hvc3QuaGAgYSBjb21tZW50IHRoYXQgZGVzY3JpYmVzIGEgbWVjaGFuaXNtIHZpYSBgZ2V0X2ZpbGVfYWN0aXZlYCB0byBwcmV2ZW50IHBpbm5pbmcgb2YgdGhlIFZNLCB3aGljaCBzdXBwb3J0cyBteSBjdXJyZW50IHN1c3BpY2lvbiB0aGF0IHRoaXMgYXJlYSBpcyBwcm9uZSB0byB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBUaGVzZSBhcmUgdGV4dGJvb2sgaW5kaWNhdG9ycyBvZiBwb3NzaWJsZSBjb25jdXJyZW5jeSBidWdzLCByZWZjb3VudCBpbmNvbnNpc3RlbmNpZXMsIGFuZCBwb3RlbnRpYWwgZGVhZGxvY2tzLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCB0byBmdXp6aW5nIQoKTm93LCB0aGUgc3ltYm9sIHNlbGVjdGlvbiBmb3IgZGVlcGVyIHRlc3RpbmcuIEkgbmVlZCB0byBiZSBwcmVjaXNlIGhlcmUuCgpIZXJlJiMzOTtzIG15IHJlZmluZWQgbGlzdCBvZiBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZnJvbSB0aGUgZGlmZjoKKiAgIGBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bWAgKGJlY2F1c2UgaXQmIzM5O3MgdGhlIHN0YXJ0IHBvaW50KQoqICAgYGt2bV92bV9yZWxlYXNlYCAoY3JpdGljYWwgZW5kcG9pbnQgZm9yIHJlc291cmNlIGNsZWFudXApCiogICBgZmlsZV90b19rdm1gIChhIGNyaXRpY2FsIGJhY2tsaW5rISkKKiAgIGBrdm1fdmZpb19maWxlX2FkZGAgYW5kIGBrdm1fdmZpb19maWxlX3NldF9rdm1gIChWRklPIGludGVncmF0aW9uIGVudHJ5KQoqICAgYHZmaW9fZmlsZV9zZXRfa3ZtYCAoY29yZSBWRklPIGRldmljZSBsaW5rIHRvIEtWTSkKKiAgIGB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmVgIGFuZCBgdmZpb19kZXZpY2VfcHV0X2t2bWAgKFZGSU8gZGV2aWNlIGZ1bmN0aW9ucykKKiAgIGB2ZmlvX2dyb3VwX3NldF9rdm1gIChWRklPIGdyb3VwIGxpbmtpbmcpCiogICBga3ZtX3BhZ2VfdHJhY2tfKmAgKHg4NiBzcGVjaWZpYykKCkl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGZpbGUtZGVzY3JpcHRvciBoYW5kbGluZyBmdW5jdGlvbnMgYXJlIHRoZSBtb3N0IGltcG9ydGFudC4gVGhlIHVzYWdlIG9mIGBmaWxlX3RvX2t2bWAgbWFrZXMgaXQgYSBjcml0aWNhbCBzeW1ib2wgZm9yIGFueSBhbmFseXNpcy4KCk9uIGNvbmZpZ3VyYXRpb24sIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgS1ZNYCwgYFZGSU9gLCBgVkZJT19HUk9VUGAsIGBWRklPX0RFVklDRV9DREVWYCwgYFZGSU9fQ09OVEFJTkVSYCwgYEtWTV9WRklPYCwgYW5kIGBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdgIGFyZSBzZXQuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBgZHJpdmVycy92ZmlvL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4KCk15IG92ZXJhbGwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2hzZXQgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgZHVlIHRvIHRoZSBmaWxlIHJlZmNvdW50aW5nIGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gS1ZNIGFuZCBWRklPLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0bWVudWNvbmZpZyBWRklPXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtWRklPIE5vbi1Qcml2aWxlZ2VkIHVzZXJzcGFjZSBkcml2ZXIgZnJhbWV3b3JrXCYjMzQ7XG4gICA0Olx0XHRzZWxlY3QgSU9NTVVfQVBJXG4gICA1Olx0XHRkZXBlbmRzIG9uIElPTU1VRkQgfHwgIUlPTU1VRkRcbiAgIDY6XHRcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXG4gICA3Olx0XHRzZWxlY3QgVkZJT19HUk9VUCBpZiBTUEFQUl9UQ0VfSU9NTVUgfHwgSU9NTVVGRD1uXG4gICA4Olx0XHRzZWxlY3QgVkZJT19ERVZJQ0VfQ0RFViBpZiAhVkZJT19HUk9VUFxuICAgOTpcdFx0c2VsZWN0IFZGSU9fQ09OVEFJTkVSIGlmIElPTU1VRkQ9blxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBWRklPIHByb3ZpZGVzIGEgZnJhbWV3b3JrIGZvciBzZWN1cmUgdXNlcnNwYWNlIGRldmljZSBkcml2ZXJzLlxuICAxMjpcdFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3ZmaW8ucnN0IGZvciBtb3JlIGRldGFpbHMuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIElmIHlvdSBkb24mIzM5O3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLlxuICAxNTpcdFxuICAxNjpcdGlmIFZGSU9cbiAgMTc6XHRjb25maWcgVkZJT19ERVZJQ0VfQ0RFVlxuICAxODpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciB0aGUgVkZJTyBjZGV2IC9kZXYvdmZpby9kZXZpY2VzL3ZmaW9YXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIElPTU1VRkQgXHUwMDI2XHUwMDI2ICFTUEFQUl9UQ0VfSU9NTVVcbiAgMjA6XHRcdGRlZmF1bHQgIVZGSU9fR1JPVVBcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgVGhlIFZGSU8gZGV2aWNlIGNkZXYgaXMgYW5vdGhlciB3YXkgZm9yIHVzZXJzcGFjZSB0byBnZXQgZGV2aWNlXG4gIDIzOlx0XHQgIGFjY2Vzcy4gVXNlcnNwYWNlIGdldHMgZGV2aWNlIGZkIGJ5IG9wZW5pbmcgZGV2aWNlIGNkZXYgdW5kZXJcbiAgMjQ6XHRcdCAgL2Rldi92ZmlvL2RldmljZXMvdmZpb1gsIGFuZCB0aGVuIGJpbmQgdGhlIGRldmljZSBmZCB3aXRoIGFuIGlvbW11ZmRcbiAgMjU6XHRcdCAgdG8gc2V0IHVwIHNlY3VyZSBETUEgY29udGV4dCBmb3IgZGV2aWNlIGFjY2Vzcy5cbiAgMjY6XHRcbiAgMjc6XHRcdCAgSWYgeW91IGRvbiYjMzk7dCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IE4uXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIFZGSU9fR1JPVVBcbiAgMzA6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgdGhlIFZGSU8gZ3JvdXAgL2Rldi92ZmlvLyRncm91cF9pZFwmIzM0O1xuICAzMTpcdFx0ZGVmYXVsdCB5XG4gIDMyOlx0XHRoZWxwXG4gIDMzOlx0XHQgICBWRklPIGdyb3VwIHN1cHBvcnQgcHJvdmlkZXMgdGhlIHRyYWRpdGlvbmFsIG1vZGVsIGZvciBhY2Nlc3NpbmdcbiAgMzQ6XHRcdCAgIGRldmljZXMgdGhyb3VnaCBWRklPIGFuZCBpcyB1c2VkIGJ5IHRoZSBtYWpvcml0eSBvZiB1c2Vyc3BhY2VcbiAgMzU6XHRcdCAgIGFwcGxpY2F0aW9ucyBhbmQgZHJpdmVycyBtYWtpbmcgdXNlIG9mIFZGSU8uXG4gIDM2Olx0XG4gIDM3Olx0XHQgICBJZiB5b3UgZG9uJiMzOTt0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgWS5cbiAgMzg6XHRcbiAgMzk6XHRjb25maWcgVkZJT19DT05UQUlORVJcbiAgNDA6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgdGhlIFZGSU8gY29udGFpbmVyIC9kZXYvdmZpby92ZmlvXCYjMzQ7XG4gIDQxOlx0XHRzZWxlY3QgVkZJT19JT01NVV9UWVBFMSBpZiBNTVUgXHUwMDI2XHUwMDI2IChYODYgfHwgUzM5MCB8fCBBUk0gfHwgQVJNNjQpXG4gIDQyOlx0XHRkZXBlbmRzIG9uIFZGSU9fR1JPVVBcbiAgNDM6XHRcdGRlZmF1bHQgeVxuICA0NDpcdFx0aGVscFxuICA0NTpcdFx0ICBUaGUgVkZJTyBjb250YWluZXIgaXMgdGhlIGNsYXNzaWMgaW50ZXJmYWNlIHRvIFZGSU8gZm9yIGVzdGFibGlzaGluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODE1OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkludmVzdGlnYXRpbmcgS1ZNIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGFuZCwgbW9yZSBwcmVjaXNlbHksIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIGBhcmNoL3g4Ni9rdm1gIGRpcmVjdG9yeS4gSSB3YW50IHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiBLVk0gYmVoYXZpb3IuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgS1ZNIGdlbmVyYWxseSwgb2YgY291cnNlLCBidXQgcGFydGljdWxhcmx5IEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJwbGF5IGFuZCBzcGVjaWZpYyBzZXR0aW5ncyBhcm91bmQgYEtWTV9JTlRFTGAgYW5kIGBLVk1fQU1EYC4gVGhlc2UgYXJlIHRoZSBrZXkgdG9nZ2xlcyBmb3IgSW50ZWwgYW5kIEFNRCBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0IHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgc3RydWN0dXJlZCwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QgYmV0d2VlbiB0aGVtLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBicm9hZGVyIEtWTSBmZWF0dXJlIHNldC4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBhIHNwZWNpZmljIGRldGFpbCBJIGFtIGxvb2tpbmcgZm9yIHJlZ2FyZGluZyBhIHNwZWNpZmljIGZlYXR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE4Olx0aWYgVklSVFVBTElaQVRJT05cbiAgMTk6XHRcbiAgMjA6XHRjb25maWcgS1ZNX1g4NlxuICAyMTpcdFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuICAyMjpcdFx0c2VsZWN0IEtWTV9DT01NT05cbiAgMjM6XHRcdHNlbGVjdCBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXG4gIDI0Olx0XHRzZWxlY3QgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xuICAyNTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcbiAgMjY6XHRcdHNlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRVxuICAyNzpcdFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfVFNPXG4gIDI4Olx0XHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXG4gIDI5Olx0XHRzZWxlY3QgSEFWRV9LVk1fSVJRX0JZUEFTU1xuICAzMDpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9ST1VUSU5HXG4gIDMxOlx0XHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXG4gIDMyOlx0XHRzZWxlY3QgVkhPU1RfVEFTS1xuICAzMzpcdFx0c2VsZWN0IEtWTV9BU1lOQ19QRlxuICAzNDpcdFx0c2VsZWN0IFVTRVJfUkVUVVJOX05PVElGSUVSXG4gIDM1Olx0XHRzZWxlY3QgS1ZNX01NSU9cbiAgMzY6XHRcdHNlbGVjdCBTQ0hFRF9JTkZPXG4gIDM3Olx0XHRzZWxlY3QgUEVSRl9FVkVOVFNcbiAgMzg6XHRcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UU1xuICAzOTpcdFx0c2VsZWN0IFBFUkZfR1VFU1RfTUVESUFURURfUE1VXG4gIDQwOlx0XHRzZWxlY3QgSEFWRV9LVk1fTVNJXG4gIDQxOlx0XHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxuICA0MjpcdFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcbiAgNDM6XHRcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuICA0NDpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuICA0NTpcdFx0c2VsZWN0IEtWTV9WRklPXG4gIDQ2Olx0XHRzZWxlY3QgSEFWRV9LVk1fUE1fTk9USUZJRVIgaWYgUE1cbiAgNDc6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xuICA0ODpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbiAgNDk6XHRcdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxuICA1MDpcdFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCBpZiBYODZfNjRcbiAgNTE6XHRcbiAgNTI6XHRjb25maWcgS1ZNXG4gIDUzOlx0XHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbiAgNTQ6XHRcdGRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUNcbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgU3VwcG9ydCBob3N0aW5nIGZ1bGx5IHZpcnR1YWxpemVkIGd1ZXN0IG1hY2hpbmVzIHVzaW5nIGhhcmR3YXJlXG4gIDU3Olx0XHQgIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuICBZb3Ugd2lsbCBuZWVkIGEgZmFpcmx5IHJlY2VudFxuICA1ODpcdFx0ICBwcm9jZXNzb3IgZXF1aXBwZWQgd2l0aCB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiBZb3Ugd2lsbCBhbHNvXG4gIDU5Olx0XHQgIG5lZWQgdG8gc2VsZWN0IG9uZSBvciBtb3JlIG9mIHRoZSBwcm9jZXNzb3IgbW9kdWxlcyBiZWxvdy5cbiAgNjA6XHRcbiAgNjE6XHRcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgdGhyb3VnaFxuICA2MjpcdFx0ICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS5cbiAgNjM6XHRcbiAgNjQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDY1Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGt2bS5cbiAgNjY6XHRcbiAgNjc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjg6XHRcbiAgNjk6XHRjb25maWcgS1ZNX1dFUlJPUlxuICA3MDpcdFx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbiAgNzE6XHRcdCMgRGlzYWxsb3cgS1ZNJiMzOTtzIC1XZXJyb3IgaWYgS0FTQU4gaXMgZW5hYmxlZCwgZS5nLiB0byBndWFyZCBhZ2FpbnN0XG4gIDcyOlx0XHQjIHJhbmRvbWl6ZWQgY29uZmlncyBmcm9tIHNlbGVjdGluZyBLVk1fV0VSUk9SPXksIHdoaWNoIGRvZXNuJiMzOTt0IHBsYXlcbiAgNzM6XHRcdCMgbmljZSB3aXRoIEtBU0FOLiAgS0FTQU4gYnVpbGRzIGdlbmVyYXRlcyB3YXJuaW5ncyBmb3IgdGhlIGRlZmF1bHRcbiAgNzQ6XHRcdCMgRlJBTUVfV0FSTiwgaS5lLiBLVk1fV0VSUk9SPXkgd2l0aCBLQVNBTj15IHJlcXVpcmVzIHNwZWNpYWwgdHVuaW5nLlxuICA3NTpcdFx0IyBCdWlsZGluZyBLVk0gd2l0aCAtV2Vycm9yIGFuZCBLQVNBTiBpcyBzdGlsbCBkb2FibGUgdmlhIGVuYWJsaW5nXG4gIDc2Olx0XHQjIHRoZSBrZXJuZWwtd2lkZSBXRVJST1I9eS5cbiAgNzc6XHRcdGRlcGVuZHMgb24gS1ZNX1g4NiBcdTAwMjZcdTAwMjYgKChFWFBFUlQgXHUwMDI2XHUwMDI2ICFLQVNBTikgfHwgV0VSUk9SKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTM5MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gbXkgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgRXh0ZXJuYWwgV3JpdGUgVHJhY2tpbmcgaW4gS1ZNKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYENPTkZJR19LVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0LiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uYWxpdHkgZW5hYmxlZD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiBpdCYjMzk7cyBvbiBvciBvZmY/IExldCBtZSBxdWlja2x5IHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nLCBhbmQgdHJhY2tpbmcgZXh0ZXJuYWwgd3JpdGVzIHRvIFZNIG1lbW9yeSwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gSSYjMzk7bGwgZm9jdXMgb24gaG93IHRoaXMgY29uZmlnIG9wdGlvbiBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBJcyBpdCBwZXJmb3JtYW5jZS1yZWxhdGVkPyBTZWN1cml0eS1yZWxhdGVkPyBCb3RoPyBMZXQmIzM5O3MgdHJhY2UgaXQgYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG1vcmUgZ2VuZXJhbCBLVk0gbWVjaGFuaXNtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjI1Olx0XHQgIGdhdGVzIGNvZGUgdGhhdCB2ZXJpZmllcyBhIHRvLWJlLWZyZWVkIHBhZ2UgdGFibGUgZG9lc24mIzM5O3QgaGF2ZSBhbnlcbiAyMjY6XHRcdCAgcHJlc2VudCBTUFRFcy5cbiAyMjc6XHRcbiAyMjg6XHRcdCAgSWYgaW4gZG91YnQsIHNheSBcJiMzNDtOXCYjMzQ7LlxuIDIyOTpcdFxuIDIzMDpcdGNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbiAyMzE6XHRcdGJvb2xcbiAyMzI6XHRcbiAyMzM6XHRjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuIDIzNDpcdFx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiAyMzU6XHRcdGRlcGVuZHMgb24gS1ZNX1g4NlxuIDIzNjpcdFx0cmFuZ2UgMTAyNCA0MDk2XG4gMjM3Olx0XHRkZWZhdWx0IDQwOTYgaWYgTUFYU01QXG4gMjM4Olx0XHRkZWZhdWx0IDEwMjRcbiAyMzk6XHRcdGhlbHBcbiAyNDA6XHRcdCAgU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0LiBMYXJnZXIgdmFsdWVzIHdpbGwgaW5jcmVhc2VcbiAyNDE6XHRcdCAgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgZWFjaCBLVk0gZ3Vlc3QsIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgdkNQVXMgYXJlXG4gMjQyOlx0XHQgIGNyZWF0ZWQgZm9yIGEgZ2l2ZW4gVk0uXG4gMjQzOlx0XG4gMjQ0Olx0ZW5kaWYgIyBWSVJUVUFMSVpBVElPTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTkxMAoJCQkJCQkJb3V0cHV0OiAzMzYKCQkJCQkJCXRob3VnaHRzOiAxMTgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gYW5kIFZGSU8gSW50ZWdyYXRpb24gQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IGFjdHVhbGx5IHRyaWdnZXJzIGBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdgLiBMb29rcyBsaWtlIGBEUk1fSTkxNV9HVlRfS1ZNR1RgIGlzIHRoZSBwcmltZSBzdXNwZWN0LCBhbmQgYSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0JiMzOTtzIHRoZSBvbmx5IG9uZS4gR2l2ZW4gdGhhdCwgSSBzaG91bGQgc2VlIGlmIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCBhcmUgYWxzbyBpbnZvbHZlZCBiZWNhdXNlIHRoZXkgZW5hYmxlIEtWTSBvbiB4ODYsIGFsb25nIHdpdGggdGhlIHN0YW5kYXJkIGBLVk1gLCBgVkZJT2AsIGFuZCByZWxhdGVkIFZGSU8gY29uZmlndXJhdGlvbnMuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgbW9kaWZpY2F0aW9ucy4gSSYjMzk7dmUgaWRlbnRpZmllZCBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGF0OgoxLiAgKipLVk0gUGFnZSBUcmFja2luZzoqKiBga3ZtX3BhZ2VfdHJhY2tfKmAgZnVuY3Rpb25zLCBoYW5kbGluZyBub3RpZmllciByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uLCBhbG9uZyB3aXRoIGFkZGluZyBhbmQgcmVtb3ZpbmcgR3Vlc3QgRnJhbWUgTnVtYmVycyAoR0ZOcykgZm9yIHdyaXRlIHRyYWNraW5nLgoyLiAgKipWRklPL0tWTSBJbnRlcmFjdGlvbjoqKiBGdW5jdGlvbnMgc3VjaCBhcyBgdmZpb19ncm91cF9zZXRfa3ZtYCwgYHZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZWAsIGB2ZmlvX2RldmljZV9wdXRfa3ZtYCwgYHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bWAgKGFuZCB0aGUgbm9uLXN0YXRpYyBgdmZpb19maWxlX3NldF9rdm1gKSwgYW5kIGBrdm1fdmZpb19maWxlXypgIGZ1bmN0aW9ucyB3aGljaCBkZWFsIHdpdGggZmlsZSBwb2ludGVycyBhbmQgS1ZNIGludGVncmF0aW9uLgozLiAgKipLVk0gVk0gTGlmZWN5Y2xlOioqIGBmaWxlX3RvX2t2bWAsIGBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bWAsIGFuZCBga3ZtX3ZtX3JlbGVhc2VgLgoKSSYjMzk7bGwgdmVyaWZ5IHdoZXRoZXIgYHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bWAgb3IgYGt2bV92ZmlvX2ZpbGVfc2V0X2t2bWAgYXJlIHN0YXRpYyBvciBpbmxpbmVkLCBzaW5jZSBgdmZpb19maWxlX3NldF9rdm1gIGNhbGxzIHRoZSBmb3JtZXIgYW5kIGBrdm1fdmZpb19maWxlX2FkZGAgY2FsbHMgdGhlIGxhdHRlci4KCkkgbmVlZCB0byBjb25maXJtIHRoZXNlIGFyZW4mIzM5O3QgcGFydCBvZiBhbnkgZ2VuZXJpYyBrZXJuZWwgaW5mcmFzdHJ1Y3R1cmUsIGxpa2UgbWVtb3J5IGFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRzIG9yIGxvY2tzIHdoaWNoIGNhbiBiZSBjb21tb24gaW4gdGhlIGtlcm5lbC4gVGhlIGZvY3VzIGlzIGRlZmluaXRlbHkgb24gS1ZNIFZNIGxpZmVjeWNsZSwgdGhlIEtWTS1WRklPIGF0dGFjaG1lbnQgbWVjaGFuaXNtLCBhbmQgdGhlIEtWTSBwYWdlIHRyYWNraW5nLgoKVGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWcgb3B0aW9ucyBJIHNob3VsZCBiZSBjb25zaWRlcmluZyBhcmU6IGBLVk1gLCBgS1ZNX0lOVEVMYCwgYEtWTV9BTURgLCBgVkZJT2AsIGBWRklPX0dST1VQYCwgYFZGSU9fQ09OVEFJTkVSYCwgYFZGSU9fREVWSUNFX0NERVZgLCBhbmQgdGhlIGltcG9ydGFudCBgRFJNX0k5MTVfR1ZUX0tWTUdUYC4KCkluIGVzc2VuY2UsIHdoYXQgdGhpcyBwYXRjaCBzZXJpZXMgZG9lcyBpcyByZWZhY3RvciB0aGUgS1ZNIGFuZCBWRklPIGludGVyYWN0aW9uLCBhbmQgYnkgcHJveHkgS1ZNIHBhZ2UgdHJhY2tpbmcsIHJlcGxhY2luZyByYXcgYHN0cnVjdCBrdm0gKmAgcG9pbnRlcnMgd2l0aCBgc3RydWN0IGZpbGUgKmAgcG9pbnRlcnMgdG8gS1ZNIFZNIGZpbGVzLiBUaGlzIGNoYW5nZSBpcyBpbnRlbmRlZCB0byBpbXByb3ZlIGxpZmV0aW1lIG1hbmFnZW1lbnQgYnkgZGVjb3VwbGluZyBpdC4gVGhpcyBpcyBkb25lIHZpYSBgZ2V0X2ZpbGUoKWAgYW5kIGBmcHV0KClgIHRvIG1hbmFnZSB0aGUgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGUgY2hhbmdlcyBhZmZlY3QgZmlsZSBsaWZlY3ljbGUgaGFuZGxpbmcsIHdoaWNoIGluY2x1ZGVzIHRoZSBga3ZtX3ZtX3JlbGVhc2VgIGZ1bmN0aW9uLCBhcyB3ZWxsIGFzIGRldmljZSBhdHRhY2htZW50IHdoaWNoIGlzIGhhbmRsZWQgYnkgYGt2bV92ZmlvX2ZpbGVfYWRkYCBhbmQgYHZmaW9fZmlsZV9zZXRfa3ZtYCBmdW5jdGlvbnMuIFRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBmaWxlIGxpZmVjeWNsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYWNjZXNzaWJsZSB2aWEgS1ZNIGFuZCBWRklPIGlvY3Rscy4KCkxldCYjMzk7cyBsb2cgdGhvc2UgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7VkZJTyYjMzQ7LAogICAgJiMzNDtWRklPX0dST1VQJiMzNDssCiAgICAmIzM0O1ZGSU9fQ09OVEFJTkVSJiMzNDssCiAgICAmIzM0O1ZGSU9fREVWSUNFX0NERVYmIzM0OywKICAgICYjMzQ7RFJNX0k5MTVfR1ZUX0tWTUdUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3ZmaW9fZmlsZV9hZGQmIzM0OywKICAgICYjMzQ7dmZpb19maWxlX3NldF9rdm0mIzM0OywKICAgICYjMzQ7dmZpb19ncm91cF9zZXRfa3ZtJiMzNDssCiAgICAmIzM0O3ZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2RldmljZV9wdXRfa3ZtJiMzNDssCiAgICAmIzM0O2ZpbGVfdG9fa3ZtJiMzNDssCiAgICAmIzM0O2t2bV92bV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2t2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtJiMzNDssCiAgICAmIzM0O2t2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyJiMzNDssCiAgICAmIzM0O2t2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXImIzM0OywKICAgICYjMzQ7a3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm4mIzM0OywKICAgICYjMzQ7a3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgcmVmZXJlbmNlIG1hbmFnZW1lbnQgYmV0d2VlbiBLVk0gYW5kIGV4dGVybmFsIHN1YnN5c3RlbXMgKHByaW1hcmlseSBWRklPIGFuZCBLVk0gcGFnZSB0cmFja2luZyksIHN3aXRjaGluZyBmcm9tIGhvbGRpbmcgZGlyZWN0ICYjMzk7c3RydWN0IGt2bSAqJiMzOTsgcG9pbnRlcnMgdG8gdXNpbmcgJiMzOTtzdHJ1Y3QgZmlsZSAqJiMzOTsgcmVmZXJlbmNlcyB2aWEgZ2V0X2ZpbGUoKS9mcHV0KCkgYW5kIGdldF9maWxlX2FjdGl2ZSgpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbGlmZWN5Y2xlIHBhdGhzLCBjb25jdXJyZW5jeSwgYW5kIHJlZmNvdW50aW5nIGJldHdlZW4gS1ZNIFZNIGZpbGVzIGFuZCBWRklPIGRldmljZXMvZ3JvdXBzIGR1cmluZyBWTSBjcmVhdGlvbiwgcmVsZWFzZSwgYW5kIFZGSU8gZGV2aWNlIGF0dGFjaG1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O1ZGSU9fR1JPVVAmIzM0OywKICAgICYjMzQ7VkZJT19DT05UQUlORVImIzM0OywKICAgICYjMzQ7VkZJT19ERVZJQ0VfQ0RFViYjMzQ7LAogICAgJiMzNDtEUk1fSTkxNV9HVlRfS1ZNR1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdmZpb19maWxlX2FkZCYjMzQ7LAogICAgJiMzNDt2ZmlvX2ZpbGVfc2V0X2t2bSYjMzQ7LAogICAgJiMzNDt2ZmlvX2dyb3VwX3NldF9rdm0mIzM0OywKICAgICYjMzQ7dmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlJiMzNDssCiAgICAmIzM0O3ZmaW9fZGV2aWNlX3B1dF9rdm0mIzM0OywKICAgICYjMzQ7ZmlsZV90b19rdm0mIzM0OywKICAgICYjMzQ7a3ZtX3ZtX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7a3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm0mIzM0OywKICAgICYjMzQ7a3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXImIzM0OywKICAgICYjMzQ7a3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbiYjMzQ7LAogICAgJiMzNDtrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSByZWZlcmVuY2UgbWFuYWdlbWVudCBiZXR3ZWVuIEtWTSBhbmQgZXh0ZXJuYWwgc3Vic3lzdGVtcyAocHJpbWFyaWx5IFZGSU8gYW5kIEtWTSBwYWdlIHRyYWNraW5nKSwgc3dpdGNoaW5nIGZyb20gaG9sZGluZyBkaXJlY3QgJiMzOTtzdHJ1Y3Qga3ZtIComIzM5OyBwb2ludGVycyB0byB1c2luZyAmIzM5O3N0cnVjdCBmaWxlIComIzM5OyByZWZlcmVuY2VzIHZpYSBnZXRfZmlsZSgpL2ZwdXQoKSBhbmQgZ2V0X2ZpbGVfYWN0aXZlKCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBsaWZlY3ljbGUgcGF0aHMsIGNvbmN1cnJlbmN5LCBhbmQgcmVmY291bnRpbmcgYmV0d2VlbiBLVk0gVk0gZmlsZXMgYW5kIFZGSU8gZGV2aWNlcy9ncm91cHMgZHVyaW5nIFZNIGNyZWF0aW9uLCByZWxlYXNlLCBhbmQgVkZJTyBkZXZpY2UgYXR0YWNobWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBpbnRlcmFjdGlvbiBiZXR3ZWVuIEtWTSBhbmQgVkZJTyAoYXMgd2VsbCBhcyB4ODYgcGFnZSB0cmFja2luZyBhbmQgczM5MCB2ZmlvLWFwKSBieSBwYXNzaW5nIGFuZCB0cmFja2luZyBgc3RydWN0IGZpbGUgKmAgaW5zdGVhZCBvZiByYXcgYHN0cnVjdCBrdm0gKmAgcG9pbnRlcnMuXG5cbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lcywgZmlsZS9LVk0gcmVmZXJlbmNlIGNvdW50aW5nLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBTdWNoIGlzc3VlcyBhcmUgbWVtb3J5IG1hbmFnZW1lbnQgYnVncyBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLlxuXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2sgb3IgaGVhcCBidWZmZXJzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgZGF0YSBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGludm9sdmUgY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSGVuY2UsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB3YXJyYW50aW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMzhlMjk0NTk0ZDJlOWRmYWE1NGRhYWU1NGYzOWZjYjM2ZjU4NWE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxMDoxNjowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFnZV90cmFjay5oCmluZGV4IDNkMDQwNzQxMDQ0YjQuLjA0NmEyNWM4ZmU0ZjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhZ2VfdHJhY2suaApAQCAtNDQsMTMgJiM0Mzs0NCwxMyBAQCBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSB7CiAJCQkJICAgIHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpub2RlKTsKIH07CiAKLWludCBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7aW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCSAgICAgc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm4pOwotdm9pZCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwKJiM0Mzt2b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJCXN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpuKTsKIAotaW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTsKLWludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7CiYjNDM7aW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBmaWxlICpmaWxlLCBnZm5fdCBnZm4pOwomIzQzO2ludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3QgZmlsZSAqZmlsZSwgZ2ZuX3QgZ2ZuKTsKICNlbHNlCiAvKgogICogQWxsb3cgZGVmaW5pbmcgYSBub2RlIGluIGEgc3RydWN0dXJlIGV2ZW4gaWYgcGFnZSB0cmFja2luZyBpcyBkaXNhYmxlZCwgZS5nLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL01ha2VmaWxlIGIvYXJjaC94ODYva3ZtL01ha2VmaWxlCmluZGV4IDA0NzQ2MDRhYjhhMTQuLjk2Zjg5ZDZmN2U2YTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vTWFrZWZpbGUKQEAgLTYwLDEwICYjNDM7NjAsNyBAQCBleHBvcnRzX2dyZXBfdHJhaWxlciA6PSAtLWluY2x1ZGU9JiMzOTsqLltjaF0mIzM5OyAtbnJ3ICQoc3JjdHJlZSkvdmlydC9rdm0gJChzcmN0cmVlKS9hCiAJCQlncmVwIC12IC1lIGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyIFwKIAkJCQktZSBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyIFwKIAkJCQktZSBrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbiBcCi0JCQkJLWUga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4gXAotCQkJCS1lIGt2bV9nZXRfa3ZtIFwKLQkJCQktZSBrdm1fZ2V0X2t2bV9zYWZlIFwKLQkJCQktZSBrdm1fcHV0X2t2bQomIzQzOwkJCQktZSBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbgogCiAjIEZvcmNlIGdyZXAgdG8gZW1pdCBhIGdvb2Z5IGdyb3VwIHNlcGFyYXRvciB0aGF0IGNhbiBpbiB0dXJuIGJlIHJlcGxhY2VkIHdpdGgKICMgdGhlIGFib3ZlIG5ld2xpbmUgbWFjcm8gKG5ld2xpbmVzIGluIE1ha2UgYXJlIGEgbmlnaHRtYXJlKS4gIE5vdGUsIGdyZXAgb25seQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMgYi9hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYwppbmRleCA3ZTgxOTVhMzExYmIwLi45OGYxMzNlNGYwYjMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYwpAQCAtMjM3LDEwICYjNDM7MjM3LDExIEBAIHN0YXRpYyBpbnQga3ZtX2VuYWJsZV9leHRlcm5hbF93cml0ZV90cmFja2luZyhzdHJ1Y3Qga3ZtICprdm0pCiAgKiByZWdpc3RlciB0aGUgbm90aWZpZXIgc28gdGhhdCBldmVudCBpbnRlcmNlcHRpb24gZm9yIHRoZSB0cmFja2VkIGd1ZXN0CiAgKiBwYWdlcyBjYW4gYmUgcmVjZWl2ZWQuCiAgKi8KLWludCBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7aW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCSAgICAgc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm4pCiB7CiAJc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX2hlYWQgKmhlYWQ7CiYjNDM7CXN0cnVjdCBrdm0gKmt2bSA9IGZpbGVfdG9fa3ZtKGZpbGUpOwogCWludCByOwogCiAJaWYgKCFrdm0gfHwga3ZtLSZndDttbSAhPSBjdXJyZW50LSZndDttbSkKQEAgLTI1Miw3ICYjNDM7MjUzLDcgQEAgaW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwKIAkJCXJldHVybiByOwogCX0KIAotCWt2bV9nZXRfa3ZtKGt2bSk7CiYjNDM7CWdldF9maWxlKGZpbGUpOwogCiAJaGVhZCA9ICZhbXA7a3ZtLSZndDthcmNoLnRyYWNrX25vdGlmaWVyX2hlYWQ7CiAKQEAgLTI2NywxMCAmIzQzOzI2OCwxMSBAQCBFWFBPUlRfU1lNQk9MX0dQTChrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcik7CiAgKiBzdG9wIHJlY2VpdmluZyB0aGUgZXZlbnQgaW50ZXJjZXB0aW9uLiBJdCBpcyB0aGUgb3Bwb3NlZCBvcGVyYXRpb24gb2YKICAqIGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKCkuCiAgKi8KLXZvaWQga3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7dm9pZCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCQlzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbikKIHsKIAlzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfaGVhZCAqaGVhZDsKJiM0MzsJc3RydWN0IGt2bSAqa3ZtID0gZmlsZV90b19rdm0oZmlsZSk7CiAKIAloZWFkID0gJmFtcDtrdm0tJmd0O2FyY2gudHJhY2tfbm90aWZpZXJfaGVhZDsKIApAQCAtMjc5LDcgJiM0MzsyODEsNyBAQCB2b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLAogCXdyaXRlX3VubG9jaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwogCXN5bmNocm9uaXplX3NyY3UoJmFtcDtoZWFkLSZndDt0cmFja19zcmN1KTsKIAotCWt2bV9wdXRfa3ZtKGt2bSk7CiYjNDM7CWZwdXQoZmlsZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKTsKIApAQCAtMzM2LDExICYjNDM7MzM4LDEyIEBAIHZvaWQga3ZtX3BhZ2VfdHJhY2tfZGVsZXRlX3Nsb3Qoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KQogICogYWRkIGd1ZXN0IHBhZ2UgdG8gdGhlIHRyYWNraW5nIHBvb2wgc28gdGhhdCBjb3JyZXNwb25kaW5nIGFjY2VzcyBvbiB0aGF0CiAgKiBwYWdlIHdpbGwgYmUgaW50ZXJjZXB0ZWQuCiAgKgotICogQGt2bTogdGhlIGd1ZXN0IGluc3RhbmNlIHdlIGFyZSBpbnRlcmVzdGVkIGluLgomIzQzOyAqIEBmaWxlOiB0aGUgVk0gZmlsZSBvZiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uCiAgKiBAZ2ZuOiB0aGUgZ3Vlc3QgcGFnZS4KICAqLwotaW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQomIzQzO2ludCBrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbihzdHJ1Y3QgZmlsZSAqZmlsZSwgZ2ZuX3QgZ2ZuKQogewomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSBmaWxlX3RvX2t2bShmaWxlKTsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OwogCWludCBpZHg7CiAKQEAgLTM2NiwxMSAmIzQzOzM2OSwxMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbik7CiAgKiByZW1vdmUgdGhlIGd1ZXN0IHBhZ2UgZnJvbSB0aGUgdHJhY2tpbmcgcG9vbCB3aGljaCBzdG9wcyB0aGUgaW50ZXJjZXB0aW9uCiAgKiBvZiBjb3JyZXNwb25kaW5nIGFjY2VzcyBvbiB0aGF0IHBhZ2UuCiAgKgotICogQGt2bTogdGhlIGd1ZXN0IGluc3RhbmNlIHdlIGFyZSBpbnRlcmVzdGVkIGluLgomIzQzOyAqIEBmaWxlOiB0aGUgVk0gZmlsZSBvZiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uCiAgKiBAZ2ZuOiB0aGUgZ3Vlc3QgcGFnZS4KICAqLwotaW50IGt2bV93cml0ZV90cmFja19yZW1vdmVfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQomIzQzO2ludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3QgZmlsZSAqZmlsZSwgZ2ZuX3QgZ2ZuKQogewomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSBmaWxlX3RvX2t2bShmaWxlKTsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OwogCWludCBpZHg7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwppbmRleCA5NDBjMGZmNjY4YmVlLi5mMTYwZTE5NDVmYmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCkBAIC0xODIyLDE3ICYjNDM7MTgyMiwyNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdmZpb19hcF9tZGV2X2F0dHJfZ3JvdXBzW10gPSB7CiAKIC8qKgogICogdmZpb19hcF9tZGV2X3NldF9rdm0gLSBzZXRzIGFsbCBkYXRhIGZvciBAbWF0cml4X21kZXYgdGhhdCBhcmUgbmVlZGVkCi0gKiB0byBtYW5hZ2UgQVAgcmVzb3VyY2VzIGZvciB0aGUgZ3Vlc3Qgd2hvc2Ugc3RhdGUgaXMgcmVwcmVzZW50ZWQgYnkgQGt2bQomIzQzOyAqIHRvIG1hbmFnZSBBUCByZXNvdXJjZXMgZm9yIHRoZSBndWVzdCB3aG9zZSBzdGF0ZSBpcyByZXByZXNlbnRlZCBieQomIzQzOyAqIEBrdm1fZmlsZQogICoKICAqIEBtYXRyaXhfbWRldjogYSBtZWRpYXRlZCBtYXRyaXggZGV2aWNlCi0gKiBAa3ZtOiByZWZlcmVuY2UgdG8gS1ZNIGluc3RhbmNlCiYjNDM7ICogQGt2bV9maWxlOiB0aGUgS1ZNIFZNIGZpbGUgdGhpcyB2ZmlvIGRldmljZSBpcyBhc3NvY2lhdGVkIHdpdGgKICAqCi0gKiBSZXR1cm46IDAgaWYgbm8gb3RoZXIgbWVkaWF0ZWQgbWF0cml4IGRldmljZSBoYXMgYSByZWZlcmVuY2UgdG8gQGt2bTsKJiM0MzsgKiBSZXR1cm46IDAgaWYgbm8gb3RoZXIgbWVkaWF0ZWQgbWF0cml4IGRldmljZSBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIFZNOwogICogb3RoZXJ3aXNlLCByZXR1cm5zIGFuIC1FUEVSTS4KICAqLwogc3RhdGljIGludCB2ZmlvX2FwX21kZXZfc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LAotCQkJCXN0cnVjdCBrdm0gKmt2bSkKJiM0MzsJCQkJc3RydWN0IGZpbGUgKmt2bV9maWxlKQogewomIzQzOwlzdHJ1Y3Qga3ZtICprdm07CiYjNDM7CiYjNDM7CWlmICgha3ZtX2ZpbGUpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKJiM0MzsJa3ZtID0ga3ZtX2ZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJaWYgKCFrdm0pCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKIAlpZiAoa3ZtLSZndDthcmNoLmNyeXB0by5jcnljYmQpIHsKIAkJZ2V0X3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7CiAJCWlmIChrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9vaykgewpAQCAtMTg0MSw3ICYjNDM7MTg1MSw2IEBAIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3NldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiwKIAkJfQogCQlrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9vayA9ICZhbXA7bWF0cml4X21kZXYtJmd0O3BxYXBfaG9vazsKIAotCQlrdm1fZ2V0X2t2bShrdm0pOwogCQltYXRyaXhfbWRldi0mZ3Q7a3ZtID0ga3ZtOwogCQl2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpOwogCQlyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7CkBAIC0xODk0LDcgJiM0MzsxOTAzLDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3Vuc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KQogCQltYXRyaXhfbWRldi0mZ3Q7a3ZtID0gTlVMTDsKIAogCQlyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7Ci0JCWt2bV9wdXRfa3ZtKGt2bSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vZ3JvdXAuYyBiL2RyaXZlcnMvdmZpby9ncm91cC5jCmluZGV4IGIyMjk5ZTViYzZkZjMuLjViZjhjYmRmZjM3N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9ncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9ncm91cC5jCkBAIC04NjAsMTEgJiM0Mzs4NjAsMjAgQEAgYm9vbCB2ZmlvX2dyb3VwX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCkKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIHZmaW9fZ3JvdXBfc2V0X2t2bShzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXAsIHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt2b2lkIHZmaW9fZ3JvdXBfc2V0X2t2bShzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXAsIHN0cnVjdCBmaWxlICprdm0pCiB7CiYjNDM7CXN0cnVjdCBmaWxlICpvbGQ7CiYjNDM7CiYjNDM7CWlmIChrdm0pCiYjNDM7CQlnZXRfZmlsZShrdm0pOwomIzQzOwogCXNwaW5fbG9jaygmYW1wO2dyb3VwLSZndDtrdm1fcmVmX2xvY2spOwomIzQzOwlvbGQgPSBncm91cC0mZ3Q7a3ZtOwogCWdyb3VwLSZndDtrdm0gPSBrdm07CiAJc3Bpbl91bmxvY2soJmFtcDtncm91cC0mZ3Q7a3ZtX3JlZl9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKG9sZCkKJiM0MzsJCWZwdXQob2xkKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jCmluZGV4IGY0N2YzNjMxNGExY2MuLjA0NTEzMmU5MGJmZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jCkBAIC0xODQsNiAmIzQzOzE4NCw3IEBAIGludCB2ZmlvX3BjaV96ZGV2X2ZlYXR1cmVfZXJyKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsCiBpbnQgdmZpb19wY2lfemRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiB7CiAJc3RydWN0IHpwY2lfZGV2ICp6ZGV2ID0gdG9fenBjaSh2ZGV2LSZndDtwZGV2KTsKJiM0MzsJc3RydWN0IGt2bSAqa3ZtOwogCWludCByZXQ7CiAKIAlpZiAoIXpkZXYpCkBAIC0xOTUsOSAmIzQzOzE5NiwxNCBAQCBpbnQgdmZpb19wY2lfemRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiAJCXJldHVybiAwOwogCiAJcmV0ID0gLUVOT0VOVDsKJiM0MzsJa3ZtID0gdmRldi0mZ3Q7dmRldi5rdm0tJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJaWYgKCFrdm0pCiYjNDM7CQlnb3RvIHJlY292ZXJ5OwomIzQzOwogCWlmICh6cGNpX2t2bV9ob29rLmt2bV9yZWdpc3RlcikKLQkJcmV0ID0genBjaV9rdm1faG9vay5rdm1fcmVnaXN0ZXIoemRldiwgdmRldi0mZ3Q7dmRldi5rdm0pOwomIzQzOwkJcmV0ID0genBjaV9rdm1faG9vay5rdm1fcmVnaXN0ZXIoemRldiwga3ZtKTsKIAomIzQzO3JlY292ZXJ5OgogCWlmIChyZXQpCiAJCXpwY2lfc3RvcF9tZWRpYXRlZF9yZWNvdmVyeSh6ZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3ZmaW8uaCBiL2RyaXZlcnMvdmZpby92ZmlvLmgKaW5kZXggNzcyOGJjOTliNjNkMS4uOWI2MTk5NTFhNWQwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3ZmaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vdmZpby5oCkBAIC0yMyw3ICYjNDM7MjMsNyBAQCBzdHJ1Y3QgdmZpb19kZXZpY2VfZmlsZSB7CiAJdTggYWNjZXNzX2dyYW50ZWQ7CiAJdTMyIGRldmlkOyAvKiBvbmx5IHZhbGlkIHdoZW4gaW9tbXVmZCBpcyB2YWxpZCAqLwogCXNwaW5sb2NrX3Qga3ZtX3JlZl9sb2NrOyAvKiBwcm90ZWN0IGt2bSBmaWVsZCAqLwotCXN0cnVjdCBrdm0gKmt2bTsKJiM0MzsJc3RydWN0IGZpbGUgKmt2bTsKIAlzdHJ1Y3QgaW9tbXVmZF9jdHggKmlvbW11ZmQ7IC8qIHByb3RlY3RlZCBieSBzdHJ1Y3QgdmZpb19kZXZpY2Vfc2V0Ojpsb2NrICovCiB9OwogCkBAIC04OCw3ICYjNDM7ODgsNyBAQCBzdHJ1Y3QgdmZpb19ncm91cCB7CiAjZW5kaWYKIAllbnVtIHZmaW9fZ3JvdXBfdHlwZQkJdHlwZTsKIAlzdHJ1Y3QgbXV0ZXgJCQlncm91cF9sb2NrOwotCXN0cnVjdCBrdm0JCQkqa3ZtOwomIzQzOwlzdHJ1Y3QgZmlsZQkJCSprdm07CiAJc3RydWN0IGZpbGUJCQkqb3BlbmVkX2ZpbGU7CiAJc3RydWN0IGlvbW11ZmRfY3R4CQkqaW9tbXVmZDsKIAlzcGlubG9ja190CQkJa3ZtX3JlZl9sb2NrOwpAQCAtMTA3LDcgJiM0MzsxMDcsNyBAQCB2b2lkIHZmaW9fZGV2aWNlX2dyb3VwX3VudXNlX2lvbW11KHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKTsKIHZvaWQgdmZpb19kZl9ncm91cF9jbG9zZShzdHJ1Y3QgdmZpb19kZXZpY2VfZmlsZSAqZGYpOwogc3RydWN0IHZmaW9fZ3JvdXAgKnZmaW9fZ3JvdXBfZnJvbV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKTsKIGJvb2wgdmZpb19ncm91cF9lbmZvcmNlZF9jb2hlcmVudChzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXApOwotdm9pZCB2ZmlvX2dyb3VwX3NldF9rdm0oc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwLCBzdHJ1Y3Qga3ZtICprdm0pOwomIzQzO3ZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGZpbGUgKmt2bSk7CiBib29sIHZmaW9fZGV2aWNlX2hhc19jb250YWluZXIoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UpOwogaW50IF9faW5pdCB2ZmlvX2dyb3VwX2luaXQodm9pZCk7CiB2b2lkIHZmaW9fZ3JvdXBfY2xlYW51cCh2b2lkKTsKQEAgLTE2NSw3ICYjNDM7MTY1LDcgQEAgc3RhdGljIGlubGluZSBib29sIHZmaW9fZ3JvdXBfZW5mb3JjZWRfY29oZXJlbnQoc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwKQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX2dyb3VwX3NldF9rdm0oc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgZmlsZSAqa3ZtKQogewogfQogCkBAIC00MjksMTEgJiM0Mzs0MjksMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fdmlycWZkX2V4aXQodm9pZCkKICNlbmRpZgogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfS1ZNKQotdm9pZCB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7dm9pZCB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBmaWxlICprdm0pOwogdm9pZCB2ZmlvX2RldmljZV9wdXRfa3ZtKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLAotCQkJCQkgICAgc3RydWN0IGt2bSAqa3ZtKQomIzQzOwkJCQkJICAgIHN0cnVjdCBmaWxlICprdm0pCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby92ZmlvX21haW4uYyBiL2RyaXZlcnMvdmZpby92ZmlvX21haW4uYwppbmRleCA0MjNlYWQ0OGFhZmUzLi5lZDk2YWNmYTg2MzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jCkBAIC00NzIsMzYgJiM0Mzs0NzIsMTQgQEAgdm9pZCB2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKQogRVhQT1JUX1NZTUJPTF9HUEwodmZpb191bnJlZ2lzdGVyX2dyb3VwX2Rldik7CiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19LVk0pCi12b2lkIHZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO3ZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZmlsZSAqa3ZtKQogewotCXZvaWQgKCpwZm4pKHN0cnVjdCBrdm0gKmt2bSk7Ci0JYm9vbCAoKmZuKShzdHJ1Y3Qga3ZtICprdm0pOwotCWJvb2wgcmV0OwotCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2RldmljZS0mZ3Q7ZGV2X3NldC0mZ3Q7bG9jayk7CiAKIAlpZiAoIWt2bSkKIAkJcmV0dXJuOwogCi0JcGZuID0gc3ltYm9sX2dldChrdm1fcHV0X2t2bSk7Ci0JaWYgKFdBUk5fT04oIXBmbikpCi0JCXJldHVybjsKLQotCWZuID0gc3ltYm9sX2dldChrdm1fZ2V0X2t2bV9zYWZlKTsKLQlpZiAoV0FSTl9PTighZm4pKSB7Ci0JCXN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pOwotCQlyZXR1cm47Ci0JfQotCi0JcmV0ID0gZm4oa3ZtKTsKLQlzeW1ib2xfcHV0KGt2bV9nZXRfa3ZtX3NhZmUpOwotCWlmICghcmV0KSB7Ci0JCXN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pOwotCQlyZXR1cm47Ci0JfQotCi0JZGV2aWNlLSZndDtwdXRfa3ZtID0gcGZuOwotCWRldmljZS0mZ3Q7a3ZtID0ga3ZtOwomIzQzOwlkZXZpY2UtJmd0O2t2bSA9IGdldF9maWxlKGt2bSk7CiB9CiAKIHZvaWQgdmZpb19kZXZpY2VfcHV0X2t2bShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSkKQEAgLTUxMSwxNCAmIzQzOzQ4OSw3IEBAIHZvaWQgdmZpb19kZXZpY2VfcHV0X2t2bShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSkKIAlpZiAoIWRldmljZS0mZ3Q7a3ZtKQogCQlyZXR1cm47CiAKLQlpZiAoV0FSTl9PTighZGV2aWNlLSZndDtwdXRfa3ZtKSkKLQkJZ290byBjbGVhcjsKLQotCWRldmljZS0mZ3Q7cHV0X2t2bShkZXZpY2UtJmd0O2t2bSk7Ci0JZGV2aWNlLSZndDtwdXRfa3ZtID0gTlVMTDsKLQlzeW1ib2xfcHV0KGt2bV9wdXRfa3ZtKTsKLQotY2xlYXI6CiYjNDM7CWZwdXQoZGV2aWNlLSZndDtrdm0pOwogCWRldmljZS0mZ3Q7a3ZtID0gTlVMTDsKIH0KICNlbmRpZgpAQCAtMTU0NCw5ICYjNDM7MTUxNSwxMyBAQCBib29sIHZmaW9fZmlsZV9lbmZvcmNlZF9jb2hlcmVudChzdHJ1Y3QgZmlsZSAqZmlsZSkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fZmlsZV9lbmZvcmNlZF9jb2hlcmVudCk7CiAKLXN0YXRpYyB2b2lkIHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO3N0YXRpYyB2b2lkIHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGUgKmt2bSkKIHsKIAlzdHJ1Y3QgdmZpb19kZXZpY2VfZmlsZSAqZGYgPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CXN0cnVjdCBmaWxlICpvbGQ7CiYjNDM7CiYjNDM7CWlmIChrdm0pCiYjNDM7CQlnZXRfZmlsZShrdm0pOwogCiAJLyoKIAkgKiBUaGUga3ZtIGlzIGZpcnN0IHJlY29yZGVkIGluIHRoZSB2ZmlvX2RldmljZV9maWxlLCBhbmQgd2lsbApAQCAtMTU1NCwyOCAmIzQzOzE1MjksMzIgQEAgc3RhdGljIHZvaWQgdmZpb19kZXZpY2VfZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pCiAJICogaW9tbXVmZCBzdWNjZXNzZnVsbHkgaW4gdGhlIHZmaW8gZGV2aWNlIGNkZXYgcGF0aC4KIAkgKi8KIAlzcGluX2xvY2soJmFtcDtkZi0mZ3Q7a3ZtX3JlZl9sb2NrKTsKJiM0MzsJb2xkID0gZGYtJmd0O2t2bTsKIAlkZi0mZ3Q7a3ZtID0ga3ZtOwogCXNwaW5fdW5sb2NrKCZhbXA7ZGYtJmd0O2t2bV9yZWZfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChvbGQpCiYjNDM7CQlmcHV0KG9sZCk7CiB9CiAKIC8qKgogICogdmZpb19maWxlX3NldF9rdm0gLSBMaW5rIGEga3ZtIHdpdGggVkZJTyBkcml2ZXJzCi0gKiBAZmlsZTogVkZJTyBncm91cCBmaWxlIG9yIFZGSU8gZGV2aWNlIGZpbGUKLSAqIEBrdm06IEtWTSB0byBsaW5rCiYjNDM7ICogQHZmaW9fZmlsZTogVkZJTyBncm91cCBmaWxlIG9yIFZGSU8gZGV2aWNlIGZpbGUKJiM0MzsgKiBAa3ZtOiBLVk0gZmlsZSB0byBsaW5rCiAgKgogICogV2hlbiBhIFZGSU8gZGV2aWNlIGlzIGZpcnN0IG9wZW5lZCB0aGUgS1ZNIHdpbGwgYmUgYXZhaWxhYmxlIGluCiAgKiBkZXZpY2UtJmd0O2t2bSBpZiBvbmUgd2FzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsZS4KICAqLwotdm9pZCB2ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO3ZvaWQgdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSkKIHsKIAlzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXA7CiAKLQlncm91cCA9IHZmaW9fZ3JvdXBfZnJvbV9maWxlKGZpbGUpOwomIzQzOwlncm91cCA9IHZmaW9fZ3JvdXBfZnJvbV9maWxlKHZmaW9fZmlsZSk7CiAJaWYgKGdyb3VwKQogCQl2ZmlvX2dyb3VwX3NldF9rdm0oZ3JvdXAsIGt2bSk7CiAKLQlpZiAodmZpb19kZXZpY2VfZnJvbV9maWxlKGZpbGUpKQotCQl2ZmlvX2RldmljZV9maWxlX3NldF9rdm0oZmlsZSwga3ZtKTsKJiM0MzsJaWYgKHZmaW9fZGV2aWNlX2Zyb21fZmlsZSh2ZmlvX2ZpbGUpKQomIzQzOwkJdmZpb19kZXZpY2VfZmlsZV9zZXRfa3ZtKHZmaW9fZmlsZSwga3ZtKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fZmlsZV9zZXRfa3ZtKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IDAzYmZjOTI4NjRiNmUuLmJmZWNjZTFiNTk1NWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTc4NCw2ICYjNDM7Nzg0LDEzIEBAIHN0cnVjdCBrdm0gewogCSAqIGt2bV9zd2FwX2FjdGl2ZV9tZW1zbG90cygpLgogCSAqLwogCXN0cnVjdCBtdXRleCBzbG90c19hcmNoX2xvY2s7CiYjNDM7CS8qCiYjNDM7CSAqIEJhY2stcmVmZXJlbmNlIHRvIHRoZSBWTSBmaWxlIGZvciBzdWJzeXN0ZW1zIChlLmcuLCBWRklPKS4gSG9sZHMgbm8KJiM0MzsJICogcmVmZXJlbmNlIHRvIGF2b2lkIHBpbm5pbmcgdGhlIFZNLiBBY2Nlc3MgdmlhIGdldF9maWxlX2FjdGl2ZSgmYW1wO2t2bS0mZ3Q7ZmlsZSkKJiM0MzsJICogb25seeKAlHNhZmUgYmVjYXVzZSBjbGVhcmVkIGluIGt2bV92bV9yZWxlYXNlKCkgYmVmb3JlIGZpbGUgZnJlZWQuIENhbGxlcnMKJiM0MzsJICogc3RvcmluZyB0aGUgcmVzdWx0IG11c3QgdGFrZSB0aGVpciBvd24gcmVmZXJlbmNlIHZpYSBnZXRfZmlsZSgpCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgZmlsZSAqZmlsZTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsgLyogdXNlcnNwYWNlIHRpZWQgdG8gdGhpcyB2bSAqLwogCXVuc2lnbmVkIGxvbmcgbnJfbWVtc2xvdF9wYWdlczsKIAkvKiBUaGUgdHdvIG1lbXNsb3Qgc2V0cyAtIGFjdGl2ZSBhbmQgaW5hY3RpdmUgKHBlciBhZGRyZXNzIHNwYWNlKSAqLwpAQCAtMTA4Miw2ICYjNDM7MTA4OSw3IEBAIHZvaWQga3ZtX2dldF9rdm0oc3RydWN0IGt2bSAqa3ZtKTsKIGJvb2wga3ZtX2dldF9rdm1fc2FmZShzdHJ1Y3Qga3ZtICprdm0pOwogdm9pZCBrdm1fcHV0X2t2bShzdHJ1Y3Qga3ZtICprdm0pOwogYm9vbCBmaWxlX2lzX2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSk7CiYjNDM7c3RydWN0IGt2bSAqZmlsZV90b19rdm0oc3RydWN0IGZpbGUgKmZpbGUpOwogdm9pZCBrdm1fcHV0X2t2bV9ub19kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tZW1zbG90cyAqX19rdm1fbWVtc2xvdHMoc3RydWN0IGt2bSAqa3ZtLCBpbnQgYXNfaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvbGludXgvdmZpby5oCmluZGV4IDQ1ZjA4OTg2MzU5ZTQuLjBjYzkxYzZmOTZkMmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmZpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdmZpby5oCkBAIC01NCw3ICYjNDM7NTQsNyBAQCBzdHJ1Y3QgdmZpb19kZXZpY2UgewogCXN0cnVjdCBsaXN0X2hlYWQgZGV2X3NldF9saXN0OwogCXVuc2lnbmVkIGludCBtaWdyYXRpb25fZmxhZ3M7CiAJdTggcHJlY29weV9pbmZvX3YyOwotCXN0cnVjdCBrdm0gKmt2bTsKJiM0MzsJc3RydWN0IGZpbGUgKmt2bTsKIAogCS8qIE1lbWJlcnMgYmVsb3cgaGVyZSBhcmUgcHJpdmF0ZSwgbm90IGZvciBkcml2ZXIgdXNlICovCiAJdW5zaWduZWQgaW50IGluZGV4OwpAQCAtNjYsNyAmIzQzOzY2LDYgQEAgc3RydWN0IHZmaW9fZGV2aWNlIHsKIAl1bnNpZ25lZCBpbnQgb3Blbl9jb3VudDsKIAlzdHJ1Y3QgY29tcGxldGlvbiBjb21wOwogCXN0cnVjdCBpb21tdWZkX2FjY2VzcyAqaW9tbXVmZF9hY2Nlc3M7Ci0Jdm9pZCAoKnB1dF9rdm0pKHN0cnVjdCBrdm0gKmt2bSk7CiAJc3RydWN0IGlub2RlICppbm9kZTsKICNpZiBJU19FTkFCTEVEKENPTkZJR19JT01NVUZEKQogCXN0cnVjdCBpb21tdWZkX2RldmljZSAqaW9tbXVmZF9kZXZpY2U7CkBAIC0zNzgsNyAmIzQzOzM3Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX2ZpbGVfaGFzX2RldihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpCiAjZW5kaWYKIGJvb2wgdmZpb19maWxlX2lzX3ZhbGlkKHN0cnVjdCBmaWxlICpmaWxlKTsKIGJvb2wgdmZpb19maWxlX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCBmaWxlICpmaWxlKTsKLXZvaWQgdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7dm9pZCB2ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqdmZpb19maWxlLCBzdHJ1Y3QgZmlsZSAqa3ZtKTsKIAogI2RlZmluZSBWRklPX1BJTl9QQUdFU19NQVhfRU5UUklFUwkoUEFHRV9TSVpFL3NpemVvZih1bnNpZ25lZCBsb25nKSkKIApkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggNjVlYjI2YTA1MjBkOC4uMzRiNGM0MzkwOGIzYiAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC0xMzE0LDcgJiM0MzsxMzE0LDcgQEAgdm9pZCBrdm1fZ2V0X2t2bShzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJcmVmY291bnRfaW5jKCZhbXA7a3ZtLSZndDt1c2Vyc19jb3VudCk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChrdm1fZ2V0X2t2bSk7CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9nZXRfa3ZtKTsKIAogLyoKICAqIE1ha2Ugc3VyZSB0aGUgdm0gaXMgbm90IGR1cmluZyBkZXN0cnVjdGlvbiwgd2hpY2ggaXMgYSBzYWZlIHZlcnNpb24gb2YKQEAgLTEzMjQsMTQgJiM0MzsxMzI0LDE0IEBAIGJvb2wga3ZtX2dldF9rdm1fc2FmZShzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJcmV0dXJuIHJlZmNvdW50X2luY19ub3RfemVybygmYW1wO2t2bS0mZ3Q7dXNlcnNfY291bnQpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2dldF9rdm1fc2FmZSk7CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9nZXRfa3ZtX3NhZmUpOwogCiB2b2lkIGt2bV9wdXRfa3ZtKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7a3ZtLSZndDt1c2Vyc19jb3VudCkpCiAJCWt2bV9kZXN0cm95X3ZtKGt2bSk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChrdm1fcHV0X2t2bSk7CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9wdXRfa3ZtKTsKIAogLyoKICAqIFVzZWQgdG8gcHV0IGEgcmVmZXJlbmNlIHRoYXQgd2FzIHRha2VuIG9uIGJlaGFsZiBvZiBhbiBvYmplY3QgYXNzb2NpYXRlZApAQCAtMTM1Miw2ICYjNDM7MTM1Miw4IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiAKIAlrdm1faXJxZmRfcmVsZWFzZShrdm0pOwogCiYjNDM7CVdSSVRFX09OQ0Uoa3ZtLSZndDtmaWxlLCBOVUxMKTsKJiM0MzsKIAlrdm1fcHV0X2t2bShrdm0pOwogCXJldHVybiAwOwogfQpAQCAtNTQ5Niw2ICYjNDM7NTQ5OCwxNSBAQCBib29sIGZpbGVfaXNfa3ZtKHN0cnVjdCBmaWxlICpmaWxlKQogfQogRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGZpbGVfaXNfa3ZtKTsKIAomIzQzO3N0cnVjdCBrdm0gKmZpbGVfdG9fa3ZtKHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3sKJiM0MzsJaWYgKCFmaWxlX2lzX2t2bShmaWxlKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoZmlsZV90b19rdm0pOwomIzQzOwogc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUpCiB7CiAJY2hhciBmZG5hbWVbSVRPQV9NQVhfTEVOICYjNDM7IDFdOwpAQCAtNTUyNyw2ICYjNDM7NTUzOCw5IEBAIHN0YXRpYyBpbnQga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlKQogCSAqIGNhc2VzIGl0IHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBmaW5hbCBmcHV0KGZpbGUpIGFuZCB3aWxsIHRha2UKIAkgKiBjYXJlIG9mIGRvaW5nIGt2bV9wdXRfa3ZtKGt2bSkuCiAJICovCiYjNDM7CiYjNDM7CWt2bS0mZ3Q7ZmlsZSA9IGZpbGU7CiYjNDM7CiAJa3ZtX3VldmVudF9ub3RpZnlfY2hhbmdlKEtWTV9FVkVOVF9DUkVBVEVfVk0sIGt2bSk7CiAKIAlmZF9pbnN0YWxsKGZkLCBmaWxlKTsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3ZmaW8uYyBiL3ZpcnQva3ZtL3ZmaW8uYwppbmRleCA2Y2RjNGU5YTMzM2EzLi4xOTU0OGE0MzA5NDI2IDEwMDY0NAotLS0gYS92aXJ0L2t2bS92ZmlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vdmZpby5jCkBAIC0zNSwxNSAmIzQzOzM1LDE1IEBAIHN0cnVjdCBrdm1fdmZpbyB7CiAJYm9vbCBub25jb2hlcmVudDsKIH07CiAKLXN0YXRpYyB2b2lkIGt2bV92ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO3N0YXRpYyB2b2lkIGt2bV92ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqdmZpb19maWxlLCBzdHJ1Y3QgZmlsZSAqa3ZtKQogewotCXZvaWQgKCpmbikoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7CXZvaWQgKCpmbikoc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSk7CiAKIAlmbiA9IHN5bWJvbF9nZXQodmZpb19maWxlX3NldF9rdm0pOwogCWlmICghZm4pCiAJCXJldHVybjsKIAotCWZuKGZpbGUsIGt2bSk7CiYjNDM7CWZuKHZmaW9fZmlsZSwga3ZtKTsKIAogCXN5bWJvbF9wdXQodmZpb19maWxlX3NldF9rdm0pOwogfQpAQCAtMTQ0LDYgJiM0MzsxNDQsNyBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZCkKIHsKIAlzdHJ1Y3Qga3ZtX3ZmaW8gKmt2ID0gZGV2LSZndDtwcml2YXRlOwogCXN0cnVjdCBrdm1fdmZpb19maWxlICprdmY7CiYjNDM7CXN0cnVjdCBmaWxlICprdm1fZmlsZSBfX2ZyZWUoZnB1dCkgPSBOVUxMOwogCXN0cnVjdCBmaWxlICpmaWxwIF9fZnJlZShmcHV0KSA9IE5VTEw7CiAKIAlmaWxwID0gZmdldChmZCk7CkBAIC0xNTQsNiAmIzQzOzE1NSwxMCBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZCkKIAlpZiAoIWt2bV92ZmlvX2ZpbGVfaXNfdmFsaWQoZmlscCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CWt2bV9maWxlID0gZ2V0X2ZpbGVfYWN0aXZlKCZhbXA7ZGV2LSZndDtrdm0tJmd0O2ZpbGUpOwomIzQzOwlpZiAoIWt2bV9maWxlKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiAJZ3VhcmQobXV0ZXgpKCZhbXA7a3YtJmd0O2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShrdmYsICZhbXA7a3YtJmd0O2ZpbGVfbGlzdCwgbm9kZSkgewpAQCAtMTY4LDcgJiM0MzsxNzMsNyBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZCkKIAlrdmYtJmd0O2ZpbGUgPSBnZXRfZmlsZShmaWxwKTsKIAlsaXN0X2FkZF90YWlsKCZhbXA7a3ZmLSZndDtub2RlLCAmYW1wO2t2LSZndDtmaWxlX2xpc3QpOwogCi0Ja3ZtX3ZmaW9fZmlsZV9zZXRfa3ZtKGt2Zi0mZ3Q7ZmlsZSwgZGV2LSZndDtrdm0pOwomIzQzOwlrdm1fdmZpb19maWxlX3NldF9rdm0oa3ZmLSZndDtmaWxlLCBrdm1fZmlsZSk7CiAJa3ZtX3ZmaW9fdXBkYXRlX2NvaGVyZW5jeShkZXYpOwogCiAJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzczCgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDE1MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBBc3Nlc3NtZW50IG9mIEtWTS9WRklPIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2gsIHdoaWNoIHJlZmFjdG9ycyBLVk0vVkZJTyBpbnRlcmFjdGlvbiB0byB1c2UgYHN0cnVjdCBmaWxlICpgIGZvciBwYWdlIHRyYWNraW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcsIGxpa2VseSAqZG9lc24mIzM5O3QqIHdhcnJhbnQgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCYjMzk7cyBzZWUgaWYgdGhhdCBob2xkcyB1cC4KCkZpcnN0LCB0aGUgcGF0Y2gmIzM5O3MgaW50ZW50IGlzIGNsZWFyOiBtb2Rlcm5pemUgdGhlIEtWTSBhbmQgVkZJTyBpbnRlcmFjdGlvbiwgc3dpdGNoaW5nIHRvIHRoZSBgc3RydWN0IGZpbGVgIHJlZmVyZW5jZSBjb3VudC4gV2UmIzM5O3JlIG1vdmluZyBhd2F5IGZyb20gZGlyZWN0IGBrdm1fZ2V0X2t2bWAvYGt2bV9wdXRfa3ZtYCBjYWxscyBpbiBmYXZvciBvZiBgZ2V0X2ZpbGVgL2BmcHV0YCwgd2hpY2ggaXMgYSBnb29kIG1vdmUgZm9yIGdlbmVyYWwga2VybmVsIG9iamVjdCBtYW5hZ2VtZW50LgoKSSYjMzk7dmUgZ29uZSBvdmVyIHRoZSBkaWZmIG1ldGljdWxvdXNseS4gSXQgdG91Y2hlcyBhIGdvb2QgbnVtYmVyIG9mIGZpbGVzLCBmcm9tIHBhZ2UgdHJhY2tpbmcgdG8gVkZJTyBkZXZpY2UgbWFuYWdlbWVudCwgYnV0IGl0JiMzOTtzIGZ1bmRhbWVudGFsbHkgYWJvdXQgcG9pbnRlciBjaGFuZ2VzIGFuZCByZWZlcmVuY2UgY291bnRpbmcuIFRoZSBrZXkgZnVuY3Rpb25zIOKAkyBga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXJgLCBga3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm5gLCBhbmQgdGhlaXIgY291bnRlcnBhcnRzIOKAkyBhcmUgdXBkYXRlZCB0byB0YWtlIGBzdHJ1Y3QgZmlsZSAqYCBpbnN0ZWFkIG9mIGBzdHJ1Y3Qga3ZtICpgLiBJbXBvcnRhbnRseSwgaXQgc2VlbXMgbGlrZSB0aGVzZSBjaGFuZ2VzIGFyZSBiZWluZyBwcm9wYWdhdGVkIHRocm91Z2hvdXQgdGhlIFZGSU8gc3Vic3lzdGVtIGFzIHdlbGwsIHJlcGxhY2luZyBga3ZtX2dldF9rdm1gL2Brdm1fcHV0X2t2bWAgY2FsbHMgd2l0aCBgZ2V0X2ZpbGVgIGFuZCBgZnB1dGAgaW4gdmFyaW91cyBjb250ZXh0cywgbGlrZSBgdmZpb19hcF9tZGV2X3NldF9rdm1gIGFuZCBgdmZpb19ncm91cF9zZXRfa3ZtYC4KCkkmIzM5O3ZlIGNoZWNrZWQgZm9yIHRoZSBjb21tb24gbWVtb3J5IHNhZmV0eSBidWdzLCB0aGF0IHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzOgoqICAgKipPYmplY3QgbGlmZXRpbWUvcmVmY291bnRpbmcgYnVnczoqKiBVc2UtYWZ0ZXItZnJlZSwgZG91YmxlIGBmcHV0YCwgZGFuZ2xpbmcgcG9pbnRlcnMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHJhY2UgY29uZGl0aW9ucyBvbiByZWZjb3VudHMuIEkgKmRvbiYjMzk7dCogc2VlIGFueSBvYnZpb3VzIHJlZCBmbGFncyBvbiBhIHF1aWNrIHJlYWQuIE5vIG5ldyBhbGxvY2F0aW9ucywgbm8gb2J2aW91cyBkb3VibGUgcHV0cywgYW5kIHRoZSByZWZjb3VudCBsb2dpYyBzZWVtcyBzb3VuZC4gVGhlc2Uga2luZHMgb2YgaXNzdWVzIGFyZSBleGFjdGx5IHdoYXQgS0FTQU4gYW5kIGxvY2tkZXAgYXJlIGdvb2QgYXQgY2F0Y2hpbmcuCgpOb3csIGxldCYjMzk7cyBmb2N1cyBvbiB0aGUgS01TQU4gYW5nbGU6IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGlzIGlzIHdoZXJlIHdlIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsLgoqICAgKipOZXcgYWxsb2NhdGlvbnM/KiogTm8uIE5vdGhpbmcgbmV3IGlzIGJlaW5nIGFsbG9jYXRlZCBoZXJlLgoqICAgKipEYXRhIGNvcGllZCB0byB1c2Vyc3BhY2U/KiogTm8uIE5vIGBjb3B5X3RvX3VzZXJgIGNhbGxzIG9yIGFueXRoaW5nIG9mIHRoYXQgc29ydCB0aGF0IHdvdWxkIGluZGljYXRlIGluZm9ybWF0aW9uIGxlYWthZ2UuCiogICAqKkNvbmRpdGlvbmFsIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBpbnN0YW5jZXMgb2YgdGhpcy4KKiAgICoqU3RydWN0IHBhZGRpbmcgY2hhbmdlcz8qKiBOb3BlLCBubyBjaGFuZ2VzIHRvIHN0cnVjdCBwYWRkaW5nLCBzZXJpYWxpemF0aW9uLCBvciBkZXNlcmlhbGl6YXRpb24uCgpUaGUgY29yZSBvZiBLTVNBTiBpcyB0byBkZXRlY3QgaWYgYSBtZW1vcnkgcmVhZCBvY2N1cnMgYmVmb3JlIHRoZSBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQuIFdlIG5lZWQgdG8gYXNzZXNzIGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJpc2tzIHdoZXJlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQuCgpMb29raW5nIGJhY2ssIHRoZXJlIGFyZSBubyBzdWNoIHJpc2tzIEkgc2VlOyB0aGUgb25seSBjaGFuZ2VzIGFyZSB0byB0eXBlIGluZm9ybWF0aW9uLCBzbyBubyBLTVNBTiBpcyBuZWVkZWQuCgpJJiMzOTt2ZSByZS1leGFtaW5lZCB0aGUgY29kZS4gSSBhbSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudC4gVGhpcyBwYXRjaCBmb2N1c2VzIG9uIHBvaW50ZXIgcmUtdHlwaW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcgdXNpbmcga2VybmVsIHByaW1pdGl2ZXMsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgS01TQU4gd291bGQgZGV0ZWN0LiBLQVNBTiBhbmQgbG9ja2RlcCBzaG91bGQgYmUgbW9yZSB0aGFuIHN1ZmZpY2llbnQgdG8gY2F0Y2ggcG90ZW50aWFsIGVycm9ycyBoZXJlLgoKKipUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLioqIEkmIzM5O20gc2V0dGluZyB0aGUgcmVzdWx0cyBhbmQgbW92aW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgaW50ZXJhY3Rpb24gYmV0d2VlbiBLVk0gYW5kIFZGSU8gKGFzIHdlbGwgYXMgeDg2IHBhZ2UgdHJhY2tpbmcgYW5kIHMzOTAgdmZpby1hcCkgYnkgcGFzc2luZyBhbmQgdHJhY2tpbmcgYHN0cnVjdCBmaWxlICpgIGluc3RlYWQgb2YgcmF3IGBzdHJ1Y3Qga3ZtICpgIHBvaW50ZXJzLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZXMsIGZpbGUvS1ZNIHJlZmVyZW5jZSBjb3VudGluZywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gU3VjaCBpc3N1ZXMgYXJlIG1lbW9yeSBtYW5hZ2VtZW50IGJ1Z3MgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy5cblxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgYnVmZmVycyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGRhdGEgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEhlbmNlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgd2FycmFudGluZyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGludGVyYWN0aW9uIGJldHdlZW4gS1ZNIGFuZCBWRklPIChhcyB3ZWxsIGFzIHg4NiBwYWdlIHRyYWNraW5nIGFuZCBzMzkwIHZmaW8tYXApIGJ5IHBhc3NpbmcgYW5kIHRyYWNraW5nIGBzdHJ1Y3QgZmlsZSAqYCBpbnN0ZWFkIG9mIHJhdyBgc3RydWN0IGt2bSAqYCBwb2ludGVycy5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzLCBmaWxlL0tWTSByZWZlcmVuY2UgY291bnRpbmcsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFN1Y2ggaXNzdWVzIGFyZSBtZW1vcnkgbWFuYWdlbWVudCBidWdzIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgY29waWVkIHRvIHVzZXJzcGFjZSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBkYXRhIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgaW52b2x2ZSBjb25kaXRpb25hbCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBIZW5jZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHdhcnJhbnRpbmcgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MTY6MDIuNzcxMDcwMDA4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU4OTUwODkxMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIlZGSU9cIixcbiAgICBcIlZGSU9fR1JPVVBcIixcbiAgICBcIlZGSU9fQ09OVEFJTkVSXCIsXG4gICAgXCJWRklPX0RFVklDRV9DREVWXCIsXG4gICAgXCJEUk1fSTkxNV9HVlRfS1ZNR1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdmZpb19maWxlX2FkZFwiLFxuICAgIFwidmZpb19maWxlX3NldF9rdm1cIixcbiAgICBcInZmaW9fZ3JvdXBfc2V0X2t2bVwiLFxuICAgIFwidmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlXCIsXG4gICAgXCJ2ZmlvX2RldmljZV9wdXRfa3ZtXCIsXG4gICAgXCJmaWxlX3RvX2t2bVwiLFxuICAgIFwia3ZtX3ZtX3JlbGVhc2VcIixcbiAgICBcImt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtXCIsXG4gICAgXCJrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllclwiLFxuICAgIFwia3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllclwiLFxuICAgIFwia3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm5cIixcbiAgICBcImt2bV93cml0ZV90cmFja19yZW1vdmVfZ2ZuXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgaW50ZXJhY3Rpb24gYmV0d2VlbiBLVk0gYW5kIFZGSU8gKGFzIHdlbGwgYXMgeDg2IHBhZ2UgdHJhY2tpbmcgYW5kIHMzOTAgdmZpby1hcCkgYnkgcGFzc2luZyBhbmQgdHJhY2tpbmcgYHN0cnVjdCBmaWxlICpgIGluc3RlYWQgb2YgcmF3IGBzdHJ1Y3Qga3ZtICpgIHBvaW50ZXJzLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lcywgZmlsZS9LVk0gcmVmZXJlbmNlIGNvdW50aW5nLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBTdWNoIGlzc3VlcyBhcmUgbWVtb3J5IG1hbmFnZW1lbnQgYnVncyBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgY29waWVkIHRvIHVzZXJzcGFjZSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBkYXRhIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgaW52b2x2ZSBjb25kaXRpb25hbCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBIZW5jZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHdhcnJhbnRpbmcgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSByZWZlcmVuY2UgbWFuYWdlbWVudCBiZXR3ZWVuIEtWTSBhbmQgZXh0ZXJuYWwgc3Vic3lzdGVtcyAocHJpbWFyaWx5IFZGSU8gYW5kIEtWTSBwYWdlIHRyYWNraW5nKSwgc3dpdGNoaW5nIGZyb20gaG9sZGluZyBkaXJlY3QgJ3N0cnVjdCBrdm0gKicgcG9pbnRlcnMgdG8gdXNpbmcgJ3N0cnVjdCBmaWxlIConIHJlZmVyZW5jZXMgdmlhIGdldF9maWxlKCkvZnB1dCgpIGFuZCBnZXRfZmlsZV9hY3RpdmUoKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGxpZmVjeWNsZSBwYXRocywgY29uY3VycmVuY3ksIGFuZCByZWZjb3VudGluZyBiZXR3ZWVuIEtWTSBWTSBmaWxlcyBhbmQgVkZJTyBkZXZpY2VzL2dyb3VwcyBkdXJpbmcgVk0gY3JlYXRpb24sIHJlbGVhc2UsIGFuZCBWRklPIGRldmljZSBhdHRhY2htZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDoxNjowMi43NzEwNzU5MThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODkxNjIyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlMzhlMjk0NTk0ZDJlOWRmYWE1NGRhYWU1NGYzOWZjYjM2ZjU4NWE1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMTA6MTY6MDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhZ2VfdHJhY2suaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmhcXG5pbmRleCAzZDA0MDc0MTA0NGI0Li4wNDZhMjVjOGZlNGY4IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFnZV90cmFjay5oXFxuQEAgLTQ0LDEzICs0NCwxMyBAQCBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSB7XFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbm9kZSk7XFxuIH07XFxuIFxcbi1pbnQga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLFxcbitpbnQga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm4pO1xcbi12b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLFxcbit2b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpuKTtcXG4gXFxuLWludCBrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7XFxuLWludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7XFxuK2ludCBrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbihzdHJ1Y3QgZmlsZSAqZmlsZSwgZ2ZuX3QgZ2ZuKTtcXG4raW50IGt2bV93cml0ZV90cmFja19yZW1vdmVfZ2ZuKHN0cnVjdCBmaWxlICpmaWxlLCBnZm5fdCBnZm4pO1xcbiAjZWxzZVxcbiAvKlxcbiAgKiBBbGxvdyBkZWZpbmluZyBhIG5vZGUgaW4gYSBzdHJ1Y3R1cmUgZXZlbiBpZiBwYWdlIHRyYWNraW5nIGlzIGRpc2FibGVkLCBlLmcuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZSBiL2FyY2gveDg2L2t2bS9NYWtlZmlsZVxcbmluZGV4IDA0NzQ2MDRhYjhhMTQuLjk2Zjg5ZDZmN2U2YTggMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL01ha2VmaWxlXFxuKysrIGIvYXJjaC94ODYva3ZtL01ha2VmaWxlXFxuQEAgLTYwLDEwICs2MCw3IEBAIGV4cG9ydHNfZ3JlcF90cmFpbGVyIDo9IC0taW5jbHVkZT0nKi5bY2hdJyAtbnJ3ICQoc3JjdHJlZSkvdmlydC9rdm0gJChzcmN0cmVlKS9hXFxuIFxcdFxcdFxcdGdyZXAgLXYgLWUga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIgXFxcXFxcbiBcXHRcXHRcXHRcXHQtZSBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyIFxcXFxcXG4gXFx0XFx0XFx0XFx0LWUga3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm4gXFxcXFxcbi1cXHRcXHRcXHRcXHQtZSBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbiBcXFxcXFxuLVxcdFxcdFxcdFxcdC1lIGt2bV9nZXRfa3ZtIFxcXFxcXG4tXFx0XFx0XFx0XFx0LWUga3ZtX2dldF9rdm1fc2FmZSBcXFxcXFxuLVxcdFxcdFxcdFxcdC1lIGt2bV9wdXRfa3ZtXFxuK1xcdFxcdFxcdFxcdC1lIGt2bV93cml0ZV90cmFja19yZW1vdmVfZ2ZuXFxuIFxcbiAjIEZvcmNlIGdyZXAgdG8gZW1pdCBhIGdvb2Z5IGdyb3VwIHNlcGFyYXRvciB0aGF0IGNhbiBpbiB0dXJuIGJlIHJlcGxhY2VkIHdpdGhcXG4gIyB0aGUgYWJvdmUgbmV3bGluZSBtYWNybyAobmV3bGluZXMgaW4gTWFrZSBhcmUgYSBuaWdodG1hcmUpLiAgTm90ZSwgZ3JlcCBvbmx5XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jIGIvYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmNcXG5pbmRleCA3ZTgxOTVhMzExYmIwLi45OGYxMzNlNGYwYjMyIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jXFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmNcXG5AQCAtMjM3LDEwICsyMzcsMTEgQEAgc3RhdGljIGludCBrdm1fZW5hYmxlX2V4dGVybmFsX3dyaXRlX3RyYWNraW5nKHN0cnVjdCBrdm0gKmt2bSlcXG4gICogcmVnaXN0ZXIgdGhlIG5vdGlmaWVyIHNvIHRoYXQgZXZlbnQgaW50ZXJjZXB0aW9uIGZvciB0aGUgdHJhY2tlZCBndWVzdFxcbiAgKiBwYWdlcyBjYW4gYmUgcmVjZWl2ZWQuXFxuICAqL1xcbi1pbnQga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLFxcbitpbnQga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm4pXFxuIHtcXG4gXFx0c3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX2hlYWQgKmhlYWQ7XFxuK1xcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbGVfdG9fa3ZtKGZpbGUpO1xcbiBcXHRpbnQgcjtcXG4gXFxuIFxcdGlmICgha3ZtIHx8IGt2bS1cXHUwMDNlbW0gIT0gY3VycmVudC1cXHUwMDNlbW0pXFxuQEAgLTI1Miw3ICsyNTMsNyBAQCBpbnQga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRcXHRyZXR1cm4gcjtcXG4gXFx0fVxcbiBcXG4tXFx0a3ZtX2dldF9rdm0oa3ZtKTtcXG4rXFx0Z2V0X2ZpbGUoZmlsZSk7XFxuIFxcbiBcXHRoZWFkID0gXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC50cmFja19ub3RpZmllcl9oZWFkO1xcbiBcXG5AQCAtMjY3LDEwICsyNjgsMTEgQEAgRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIpO1xcbiAgKiBzdG9wIHJlY2VpdmluZyB0aGUgZXZlbnQgaW50ZXJjZXB0aW9uLiBJdCBpcyB0aGUgb3Bwb3NlZCBvcGVyYXRpb24gb2ZcXG4gICoga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIoKS5cXG4gICovXFxuLXZvaWQga3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sXFxuK3ZvaWQga3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm4pXFxuIHtcXG4gXFx0c3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX2hlYWQgKmhlYWQ7XFxuK1xcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbGVfdG9fa3ZtKGZpbGUpO1xcbiBcXG4gXFx0aGVhZCA9IFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudHJhY2tfbm90aWZpZXJfaGVhZDtcXG4gXFxuQEAgLTI3OSw3ICsyODEsNyBAQCB2b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHR3cml0ZV91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbiBcXHRzeW5jaHJvbml6ZV9zcmN1KFxcdTAwMjZoZWFkLVxcdTAwM2V0cmFja19zcmN1KTtcXG4gXFxuLVxcdGt2bV9wdXRfa3ZtKGt2bSk7XFxuK1xcdGZwdXQoZmlsZSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllcik7XFxuIFxcbkBAIC0zMzYsMTEgKzMzOCwxMiBAQCB2b2lkIGt2bV9wYWdlX3RyYWNrX2RlbGV0ZV9zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG4gICogYWRkIGd1ZXN0IHBhZ2UgdG8gdGhlIHRyYWNraW5nIHBvb2wgc28gdGhhdCBjb3JyZXNwb25kaW5nIGFjY2VzcyBvbiB0aGF0XFxuICAqIHBhZ2Ugd2lsbCBiZSBpbnRlcmNlcHRlZC5cXG4gICpcXG4tICogQGt2bTogdGhlIGd1ZXN0IGluc3RhbmNlIHdlIGFyZSBpbnRlcmVzdGVkIGluLlxcbisgKiBAZmlsZTogdGhlIFZNIGZpbGUgb2YgdGhlIGd1ZXN0IGluc3RhbmNlIHdlIGFyZSBpbnRlcmVzdGVkIGluLlxcbiAgKiBAZ2ZuOiB0aGUgZ3Vlc3QgcGFnZS5cXG4gICovXFxuLWludCBrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbilcXG4raW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBmaWxlICpmaWxlLCBnZm5fdCBnZm4pXFxuIHtcXG4rXFx0c3RydWN0IGt2bSAqa3ZtID0gZmlsZV90b19rdm0oZmlsZSk7XFxuIFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XFxuIFxcdGludCBpZHg7XFxuIFxcbkBAIC0zNjYsMTEgKzM2OSwxMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbik7XFxuICAqIHJlbW92ZSB0aGUgZ3Vlc3QgcGFnZSBmcm9tIHRoZSB0cmFja2luZyBwb29sIHdoaWNoIHN0b3BzIHRoZSBpbnRlcmNlcHRpb25cXG4gICogb2YgY29ycmVzcG9uZGluZyBhY2Nlc3Mgb24gdGhhdCBwYWdlLlxcbiAgKlxcbi0gKiBAa3ZtOiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uXFxuKyAqIEBmaWxlOiB0aGUgVk0gZmlsZSBvZiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uXFxuICAqIEBnZm46IHRoZSBndWVzdCBwYWdlLlxcbiAgKi9cXG4taW50IGt2bV93cml0ZV90cmFja19yZW1vdmVfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKVxcbitpbnQga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4oc3RydWN0IGZpbGUgKmZpbGUsIGdmbl90IGdmbilcXG4ge1xcbitcXHRzdHJ1Y3Qga3ZtICprdm0gPSBmaWxlX3RvX2t2bShmaWxlKTtcXG4gXFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDtcXG4gXFx0aW50IGlkeDtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xcbmluZGV4IDk0MGMwZmY2NjhiZWUuLmYxNjBlMTk0NWZiY2UgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXFxuKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXFxuQEAgLTE4MjIsMTcgKzE4MjIsMjcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnZmaW9fYXBfbWRldl9hdHRyX2dyb3Vwc1tdID0ge1xcbiBcXG4gLyoqXFxuICAqIHZmaW9fYXBfbWRldl9zZXRfa3ZtIC0gc2V0cyBhbGwgZGF0YSBmb3IgQG1hdHJpeF9tZGV2IHRoYXQgYXJlIG5lZWRlZFxcbi0gKiB0byBtYW5hZ2UgQVAgcmVzb3VyY2VzIGZvciB0aGUgZ3Vlc3Qgd2hvc2Ugc3RhdGUgaXMgcmVwcmVzZW50ZWQgYnkgQGt2bVxcbisgKiB0byBtYW5hZ2UgQVAgcmVzb3VyY2VzIGZvciB0aGUgZ3Vlc3Qgd2hvc2Ugc3RhdGUgaXMgcmVwcmVzZW50ZWQgYnlcXG4rICogQGt2bV9maWxlXFxuICAqXFxuICAqIEBtYXRyaXhfbWRldjogYSBtZWRpYXRlZCBtYXRyaXggZGV2aWNlXFxuLSAqIEBrdm06IHJlZmVyZW5jZSB0byBLVk0gaW5zdGFuY2VcXG4rICogQGt2bV9maWxlOiB0aGUgS1ZNIFZNIGZpbGUgdGhpcyB2ZmlvIGRldmljZSBpcyBhc3NvY2lhdGVkIHdpdGhcXG4gICpcXG4tICogUmV0dXJuOiAwIGlmIG5vIG90aGVyIG1lZGlhdGVkIG1hdHJpeCBkZXZpY2UgaGFzIGEgcmVmZXJlbmNlIHRvIEBrdm07XFxuKyAqIFJldHVybjogMCBpZiBubyBvdGhlciBtZWRpYXRlZCBtYXRyaXggZGV2aWNlIGhhcyBhIHJlZmVyZW5jZSB0byB0aGUgVk07XFxuICAqIG90aGVyd2lzZSwgcmV0dXJucyBhbiAtRVBFUk0uXFxuICAqL1xcbiBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9zZXRfa3ZtKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBrdm0gKmt2bSlcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGZpbGUgKmt2bV9maWxlKVxcbiB7XFxuK1xcdHN0cnVjdCBrdm0gKmt2bTtcXG4rXFxuK1xcdGlmICgha3ZtX2ZpbGUpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4rXFx0a3ZtID0ga3ZtX2ZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0aWYgKCFrdm0pXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4gXFx0aWYgKGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2JkKSB7XFxuIFxcdFxcdGdldF91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xcbiBcXHRcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2spIHtcXG5AQCAtMTg0MSw3ICsxODUxLDYgQEAgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxcbiBcXHRcXHR9XFxuIFxcdFxcdGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rID0gXFx1MDAyNm1hdHJpeF9tZGV2LVxcdTAwM2VwcWFwX2hvb2s7XFxuIFxcbi1cXHRcXHRrdm1fZ2V0X2t2bShrdm0pO1xcbiBcXHRcXHRtYXRyaXhfbWRldi1cXHUwMDNla3ZtID0ga3ZtO1xcbiBcXHRcXHR2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpO1xcbiBcXHRcXHRyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7XFxuQEAgLTE4OTQsNyArMTkwMyw2IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl91bnNldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcXG4gXFx0XFx0bWF0cml4X21kZXYtXFx1MDAzZWt2bSA9IE5VTEw7XFxuIFxcbiBcXHRcXHRyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7XFxuLVxcdFxcdGt2bV9wdXRfa3ZtKGt2bSk7XFxuIFxcdH1cXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL2dyb3VwLmMgYi9kcml2ZXJzL3ZmaW8vZ3JvdXAuY1xcbmluZGV4IGIyMjk5ZTViYzZkZjMuLjViZjhjYmRmZjM3N2MgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL2dyb3VwLmNcXG4rKysgYi9kcml2ZXJzL3ZmaW8vZ3JvdXAuY1xcbkBAIC04NjAsMTEgKzg2MCwyMCBAQCBib29sIHZmaW9fZ3JvdXBfZW5mb3JjZWRfY29oZXJlbnQoc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi12b2lkIHZmaW9fZ3JvdXBfc2V0X2t2bShzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXAsIHN0cnVjdCBrdm0gKmt2bSlcXG4rdm9pZCB2ZmlvX2dyb3VwX3NldF9rdm0oc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgZmlsZSAqa3ZtKVxcbiB7XFxuK1xcdHN0cnVjdCBmaWxlICpvbGQ7XFxuK1xcbitcXHRpZiAoa3ZtKVxcbitcXHRcXHRnZXRfZmlsZShrdm0pO1xcbitcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZncm91cC1cXHUwMDNla3ZtX3JlZl9sb2NrKTtcXG4rXFx0b2xkID0gZ3JvdXAtXFx1MDAzZWt2bTtcXG4gXFx0Z3JvdXAtXFx1MDAzZWt2bSA9IGt2bTtcXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNmdyb3VwLVxcdTAwM2Vrdm1fcmVmX2xvY2spO1xcbitcXG4rXFx0aWYgKG9sZClcXG4rXFx0XFx0ZnB1dChvbGQpO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuY1xcbmluZGV4IGY0N2YzNjMxNGExY2MuLjA0NTEzMmU5MGJmZWUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmNcXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuY1xcbkBAIC0xODQsNiArMTg0LDcgQEAgaW50IHZmaW9fcGNpX3pkZXZfZmVhdHVyZV9lcnIoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcXG4gaW50IHZmaW9fcGNpX3pkZXZfb3Blbl9kZXZpY2Uoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCB6cGNpX2RldiAqemRldiA9IHRvX3pwY2kodmRldi1cXHUwMDNlcGRldik7XFxuK1xcdHN0cnVjdCBrdm0gKmt2bTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmICghemRldilcXG5AQCAtMTk1LDkgKzE5NiwxNCBAQCBpbnQgdmZpb19wY2lfemRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0cmV0ID0gLUVOT0VOVDtcXG4rXFx0a3ZtID0gdmRldi1cXHUwMDNldmRldi5rdm0tXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0aWYgKCFrdm0pXFxuK1xcdFxcdGdvdG8gcmVjb3Zlcnk7XFxuK1xcbiBcXHRpZiAoenBjaV9rdm1faG9vay5rdm1fcmVnaXN0ZXIpXFxuLVxcdFxcdHJldCA9IHpwY2lfa3ZtX2hvb2sua3ZtX3JlZ2lzdGVyKHpkZXYsIHZkZXYtXFx1MDAzZXZkZXYua3ZtKTtcXG4rXFx0XFx0cmV0ID0genBjaV9rdm1faG9vay5rdm1fcmVnaXN0ZXIoemRldiwga3ZtKTtcXG4gXFxuK3JlY292ZXJ5OlxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHR6cGNpX3N0b3BfbWVkaWF0ZWRfcmVjb3ZlcnkoemRldik7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vdmZpby5oIGIvZHJpdmVycy92ZmlvL3ZmaW8uaFxcbmluZGV4IDc3MjhiYzk5YjYzZDEuLjliNjE5OTUxYTVkMGMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL3ZmaW8uaFxcbisrKyBiL2RyaXZlcnMvdmZpby92ZmlvLmhcXG5AQCAtMjMsNyArMjMsNyBAQCBzdHJ1Y3QgdmZpb19kZXZpY2VfZmlsZSB7XFxuIFxcdHU4IGFjY2Vzc19ncmFudGVkO1xcbiBcXHR1MzIgZGV2aWQ7IC8qIG9ubHkgdmFsaWQgd2hlbiBpb21tdWZkIGlzIHZhbGlkICovXFxuIFxcdHNwaW5sb2NrX3Qga3ZtX3JlZl9sb2NrOyAvKiBwcm90ZWN0IGt2bSBmaWVsZCAqL1xcbi1cXHRzdHJ1Y3Qga3ZtICprdm07XFxuK1xcdHN0cnVjdCBmaWxlICprdm07XFxuIFxcdHN0cnVjdCBpb21tdWZkX2N0eCAqaW9tbXVmZDsgLyogcHJvdGVjdGVkIGJ5IHN0cnVjdCB2ZmlvX2RldmljZV9zZXQ6OmxvY2sgKi9cXG4gfTtcXG4gXFxuQEAgLTg4LDcgKzg4LDcgQEAgc3RydWN0IHZmaW9fZ3JvdXAge1xcbiAjZW5kaWZcXG4gXFx0ZW51bSB2ZmlvX2dyb3VwX3R5cGVcXHRcXHR0eXBlO1xcbiBcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRcXHRncm91cF9sb2NrO1xcbi1cXHRzdHJ1Y3Qga3ZtXFx0XFx0XFx0Kmt2bTtcXG4rXFx0c3RydWN0IGZpbGVcXHRcXHRcXHQqa3ZtO1xcbiBcXHRzdHJ1Y3QgZmlsZVxcdFxcdFxcdCpvcGVuZWRfZmlsZTtcXG4gXFx0c3RydWN0IGlvbW11ZmRfY3R4XFx0XFx0KmlvbW11ZmQ7XFxuIFxcdHNwaW5sb2NrX3RcXHRcXHRcXHRrdm1fcmVmX2xvY2s7XFxuQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIHZmaW9fZGV2aWNlX2dyb3VwX3VudXNlX2lvbW11KHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKTtcXG4gdm9pZCB2ZmlvX2RmX2dyb3VwX2Nsb3NlKHN0cnVjdCB2ZmlvX2RldmljZV9maWxlICpkZik7XFxuIHN0cnVjdCB2ZmlvX2dyb3VwICp2ZmlvX2dyb3VwX2Zyb21fZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSk7XFxuIGJvb2wgdmZpb19ncm91cF9lbmZvcmNlZF9jb2hlcmVudChzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXApO1xcbi12b2lkIHZmaW9fZ3JvdXBfc2V0X2t2bShzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXAsIHN0cnVjdCBrdm0gKmt2bSk7XFxuK3ZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGZpbGUgKmt2bSk7XFxuIGJvb2wgdmZpb19kZXZpY2VfaGFzX2NvbnRhaW5lcihzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSk7XFxuIGludCBfX2luaXQgdmZpb19ncm91cF9pbml0KHZvaWQpO1xcbiB2b2lkIHZmaW9fZ3JvdXBfY2xlYW51cCh2b2lkKTtcXG5AQCAtMTY1LDcgKzE2NSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX2dyb3VwX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cClcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX2dyb3VwX3NldF9rdm0oc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwLCBzdHJ1Y3Qga3ZtICprdm0pXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX2dyb3VwX3NldF9rdm0oc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgZmlsZSAqa3ZtKVxcbiB7XFxuIH1cXG4gXFxuQEAgLTQyOSwxMSArNDI5LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3ZpcnFmZF9leGl0KHZvaWQpXFxuICNlbmRpZlxcbiBcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0tWTSlcXG4tdm9pZCB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBrdm0gKmt2bSk7XFxuK3ZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZmlsZSAqa3ZtKTtcXG4gdm9pZCB2ZmlvX2RldmljZV9wdXRfa3ZtKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm0gKmt2bSlcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBmaWxlICprdm0pXFxuIHtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jIGIvZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jXFxuaW5kZXggNDIzZWFkNDhhYWZlMy4uZWQ5NmFjZmE4NjM1OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmNcXG4rKysgYi9kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmNcXG5AQCAtNDcyLDM2ICs0NzIsMTQgQEAgdm9pZCB2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKVxcbiBFWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KTtcXG4gXFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19LVk0pXFxuLXZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3Qga3ZtICprdm0pXFxuK3ZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZmlsZSAqa3ZtKVxcbiB7XFxuLVxcdHZvaWQgKCpwZm4pKHN0cnVjdCBrdm0gKmt2bSk7XFxuLVxcdGJvb2wgKCpmbikoc3RydWN0IGt2bSAqa3ZtKTtcXG4tXFx0Ym9vbCByZXQ7XFxuLVxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWRldl9zZXQtXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0aWYgKCFrdm0pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdHBmbiA9IHN5bWJvbF9nZXQoa3ZtX3B1dF9rdm0pO1xcbi1cXHRpZiAoV0FSTl9PTighcGZuKSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0Zm4gPSBzeW1ib2xfZ2V0KGt2bV9nZXRfa3ZtX3NhZmUpO1xcbi1cXHRpZiAoV0FSTl9PTighZm4pKSB7XFxuLVxcdFxcdHN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4tXFxuLVxcdHJldCA9IGZuKGt2bSk7XFxuLVxcdHN5bWJvbF9wdXQoa3ZtX2dldF9rdm1fc2FmZSk7XFxuLVxcdGlmICghcmV0KSB7XFxuLVxcdFxcdHN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4tXFxuLVxcdGRldmljZS1cXHUwMDNlcHV0X2t2bSA9IHBmbjtcXG4tXFx0ZGV2aWNlLVxcdTAwM2Vrdm0gPSBrdm07XFxuK1xcdGRldmljZS1cXHUwMDNla3ZtID0gZ2V0X2ZpbGUoa3ZtKTtcXG4gfVxcbiBcXG4gdm9pZCB2ZmlvX2RldmljZV9wdXRfa3ZtKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKVxcbkBAIC01MTEsMTQgKzQ4OSw3IEBAIHZvaWQgdmZpb19kZXZpY2VfcHV0X2t2bShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSlcXG4gXFx0aWYgKCFkZXZpY2UtXFx1MDAzZWt2bSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0aWYgKFdBUk5fT04oIWRldmljZS1cXHUwMDNlcHV0X2t2bSkpXFxuLVxcdFxcdGdvdG8gY2xlYXI7XFxuLVxcbi1cXHRkZXZpY2UtXFx1MDAzZXB1dF9rdm0oZGV2aWNlLVxcdTAwM2Vrdm0pO1xcbi1cXHRkZXZpY2UtXFx1MDAzZXB1dF9rdm0gPSBOVUxMO1xcbi1cXHRzeW1ib2xfcHV0KGt2bV9wdXRfa3ZtKTtcXG4tXFxuLWNsZWFyOlxcbitcXHRmcHV0KGRldmljZS1cXHUwMDNla3ZtKTtcXG4gXFx0ZGV2aWNlLVxcdTAwM2Vrdm0gPSBOVUxMO1xcbiB9XFxuICNlbmRpZlxcbkBAIC0xNTQ0LDkgKzE1MTUsMTMgQEAgYm9vbCB2ZmlvX2ZpbGVfZW5mb3JjZWRfY29oZXJlbnQoc3RydWN0IGZpbGUgKmZpbGUpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodmZpb19maWxlX2VuZm9yY2VkX2NvaGVyZW50KTtcXG4gXFxuLXN0YXRpYyB2b2lkIHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKVxcbitzdGF0aWMgdm9pZCB2ZmlvX2RldmljZV9maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlICprdm0pXFxuIHtcXG4gXFx0c3RydWN0IHZmaW9fZGV2aWNlX2ZpbGUgKmRmID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbitcXHRzdHJ1Y3QgZmlsZSAqb2xkO1xcbitcXG4rXFx0aWYgKGt2bSlcXG4rXFx0XFx0Z2V0X2ZpbGUoa3ZtKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBrdm0gaXMgZmlyc3QgcmVjb3JkZWQgaW4gdGhlIHZmaW9fZGV2aWNlX2ZpbGUsIGFuZCB3aWxsXFxuQEAgLTE1NTQsMjggKzE1MjksMzIgQEAgc3RhdGljIHZvaWQgdmZpb19kZXZpY2VfZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcdCAqIGlvbW11ZmQgc3VjY2Vzc2Z1bGx5IGluIHRoZSB2ZmlvIGRldmljZSBjZGV2IHBhdGguXFxuIFxcdCAqL1xcbiBcXHRzcGluX2xvY2soXFx1MDAyNmRmLVxcdTAwM2Vrdm1fcmVmX2xvY2spO1xcbitcXHRvbGQgPSBkZi1cXHUwMDNla3ZtO1xcbiBcXHRkZi1cXHUwMDNla3ZtID0ga3ZtO1xcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2ZGYtXFx1MDAzZWt2bV9yZWZfbG9jayk7XFxuK1xcbitcXHRpZiAob2xkKVxcbitcXHRcXHRmcHV0KG9sZCk7XFxuIH1cXG4gXFxuIC8qKlxcbiAgKiB2ZmlvX2ZpbGVfc2V0X2t2bSAtIExpbmsgYSBrdm0gd2l0aCBWRklPIGRyaXZlcnNcXG4tICogQGZpbGU6IFZGSU8gZ3JvdXAgZmlsZSBvciBWRklPIGRldmljZSBmaWxlXFxuLSAqIEBrdm06IEtWTSB0byBsaW5rXFxuKyAqIEB2ZmlvX2ZpbGU6IFZGSU8gZ3JvdXAgZmlsZSBvciBWRklPIGRldmljZSBmaWxlXFxuKyAqIEBrdm06IEtWTSBmaWxlIHRvIGxpbmtcXG4gICpcXG4gICogV2hlbiBhIFZGSU8gZGV2aWNlIGlzIGZpcnN0IG9wZW5lZCB0aGUgS1ZNIHdpbGwgYmUgYXZhaWxhYmxlIGluXFxuICAqIGRldmljZS1cXHUwMDNla3ZtIGlmIG9uZSB3YXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWxlLlxcbiAgKi9cXG4tdm9pZCB2ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKVxcbit2b2lkIHZmaW9fZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICp2ZmlvX2ZpbGUsIHN0cnVjdCBmaWxlICprdm0pXFxuIHtcXG4gXFx0c3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwO1xcbiBcXG4tXFx0Z3JvdXAgPSB2ZmlvX2dyb3VwX2Zyb21fZmlsZShmaWxlKTtcXG4rXFx0Z3JvdXAgPSB2ZmlvX2dyb3VwX2Zyb21fZmlsZSh2ZmlvX2ZpbGUpO1xcbiBcXHRpZiAoZ3JvdXApXFxuIFxcdFxcdHZmaW9fZ3JvdXBfc2V0X2t2bShncm91cCwga3ZtKTtcXG4gXFxuLVxcdGlmICh2ZmlvX2RldmljZV9mcm9tX2ZpbGUoZmlsZSkpXFxuLVxcdFxcdHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bShmaWxlLCBrdm0pO1xcbitcXHRpZiAodmZpb19kZXZpY2VfZnJvbV9maWxlKHZmaW9fZmlsZSkpXFxuK1xcdFxcdHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bSh2ZmlvX2ZpbGUsIGt2bSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodmZpb19maWxlX3NldF9rdm0pO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuaW5kZXggMDNiZmM5Mjg2NGI2ZS4uYmZlY2NlMWI1OTU1YSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5AQCAtNzg0LDYgKzc4NCwxMyBAQCBzdHJ1Y3Qga3ZtIHtcXG4gXFx0ICoga3ZtX3N3YXBfYWN0aXZlX21lbXNsb3RzKCkuXFxuIFxcdCAqL1xcbiBcXHRzdHJ1Y3QgbXV0ZXggc2xvdHNfYXJjaF9sb2NrO1xcbitcXHQvKlxcbitcXHQgKiBCYWNrLXJlZmVyZW5jZSB0byB0aGUgVk0gZmlsZSBmb3Igc3Vic3lzdGVtcyAoZS5nLiwgVkZJTykuIEhvbGRzIG5vXFxuK1xcdCAqIHJlZmVyZW5jZSB0byBhdm9pZCBwaW5uaW5nIHRoZSBWTS4gQWNjZXNzIHZpYSBnZXRfZmlsZV9hY3RpdmUoXFx1MDAyNmt2bS1cXHUwMDNlZmlsZSlcXG4rXFx0ICogb25seeKAlHNhZmUgYmVjYXVzZSBjbGVhcmVkIGluIGt2bV92bV9yZWxlYXNlKCkgYmVmb3JlIGZpbGUgZnJlZWQuIENhbGxlcnNcXG4rXFx0ICogc3RvcmluZyB0aGUgcmVzdWx0IG11c3QgdGFrZSB0aGVpciBvd24gcmVmZXJlbmNlIHZpYSBnZXRfZmlsZSgpXFxuK1xcdCAqL1xcbitcXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcXG4gXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07IC8qIHVzZXJzcGFjZSB0aWVkIHRvIHRoaXMgdm0gKi9cXG4gXFx0dW5zaWduZWQgbG9uZyBucl9tZW1zbG90X3BhZ2VzO1xcbiBcXHQvKiBUaGUgdHdvIG1lbXNsb3Qgc2V0cyAtIGFjdGl2ZSBhbmQgaW5hY3RpdmUgKHBlciBhZGRyZXNzIHNwYWNlKSAqL1xcbkBAIC0xMDgyLDYgKzEwODksNyBAQCB2b2lkIGt2bV9nZXRfa3ZtKHN0cnVjdCBrdm0gKmt2bSk7XFxuIGJvb2wga3ZtX2dldF9rdm1fc2FmZShzdHJ1Y3Qga3ZtICprdm0pO1xcbiB2b2lkIGt2bV9wdXRfa3ZtKHN0cnVjdCBrdm0gKmt2bSk7XFxuIGJvb2wgZmlsZV9pc19rdm0oc3RydWN0IGZpbGUgKmZpbGUpO1xcbitzdHJ1Y3Qga3ZtICpmaWxlX3RvX2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSk7XFxuIHZvaWQga3ZtX3B1dF9rdm1fbm9fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pO1xcbiBcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21lbXNsb3RzICpfX2t2bV9tZW1zbG90cyhzdHJ1Y3Qga3ZtICprdm0sIGludCBhc19pZClcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92ZmlvLmggYi9pbmNsdWRlL2xpbnV4L3ZmaW8uaFxcbmluZGV4IDQ1ZjA4OTg2MzU5ZTQuLjBjYzkxYzZmOTZkMmIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3ZmaW8uaFxcbkBAIC01NCw3ICs1NCw3IEBAIHN0cnVjdCB2ZmlvX2RldmljZSB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZGV2X3NldF9saXN0O1xcbiBcXHR1bnNpZ25lZCBpbnQgbWlncmF0aW9uX2ZsYWdzO1xcbiBcXHR1OCBwcmVjb3B5X2luZm9fdjI7XFxuLVxcdHN0cnVjdCBrdm0gKmt2bTtcXG4rXFx0c3RydWN0IGZpbGUgKmt2bTtcXG4gXFxuIFxcdC8qIE1lbWJlcnMgYmVsb3cgaGVyZSBhcmUgcHJpdmF0ZSwgbm90IGZvciBkcml2ZXIgdXNlICovXFxuIFxcdHVuc2lnbmVkIGludCBpbmRleDtcXG5AQCAtNjYsNyArNjYsNiBAQCBzdHJ1Y3QgdmZpb19kZXZpY2Uge1xcbiBcXHR1bnNpZ25lZCBpbnQgb3Blbl9jb3VudDtcXG4gXFx0c3RydWN0IGNvbXBsZXRpb24gY29tcDtcXG4gXFx0c3RydWN0IGlvbW11ZmRfYWNjZXNzICppb21tdWZkX2FjY2VzcztcXG4tXFx0dm9pZCAoKnB1dF9rdm0pKHN0cnVjdCBrdm0gKmt2bSk7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JT01NVUZEKVxcbiBcXHRzdHJ1Y3QgaW9tbXVmZF9kZXZpY2UgKmlvbW11ZmRfZGV2aWNlO1xcbkBAIC0zNzgsNyArMzc3LDcgQEAgc3RhdGljIGlubGluZSBib29sIHZmaW9fZmlsZV9oYXNfZGV2KHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmlcXG4gI2VuZGlmXFxuIGJvb2wgdmZpb19maWxlX2lzX3ZhbGlkKHN0cnVjdCBmaWxlICpmaWxlKTtcXG4gYm9vbCB2ZmlvX2ZpbGVfZW5mb3JjZWRfY29oZXJlbnQoc3RydWN0IGZpbGUgKmZpbGUpO1xcbi12b2lkIHZmaW9fZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pO1xcbit2b2lkIHZmaW9fZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICp2ZmlvX2ZpbGUsIHN0cnVjdCBmaWxlICprdm0pO1xcbiBcXG4gI2RlZmluZSBWRklPX1BJTl9QQUdFU19NQVhfRU5UUklFU1xcdChQQUdFX1NJWkUvc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKVxcbiBcXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG5pbmRleCA2NWViMjZhMDUyMGQ4Li4zNGI0YzQzOTA4YjNiIDEwMDY0NFxcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuQEAgLTEzMTQsNyArMTMxNCw3IEBAIHZvaWQga3ZtX2dldF9rdm0oc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuIFxcdHJlZmNvdW50X2luYyhcXHUwMDI2a3ZtLVxcdTAwM2V1c2Vyc19jb3VudCk7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2dldF9rdm0pO1xcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2dldF9rdm0pO1xcbiBcXG4gLypcXG4gICogTWFrZSBzdXJlIHRoZSB2bSBpcyBub3QgZHVyaW5nIGRlc3RydWN0aW9uLCB3aGljaCBpcyBhIHNhZmUgdmVyc2lvbiBvZlxcbkBAIC0xMzI0LDE0ICsxMzI0LDE0IEBAIGJvb2wga3ZtX2dldF9rdm1fc2FmZShzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4gXFx0cmV0dXJuIHJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2a3ZtLVxcdTAwM2V1c2Vyc19jb3VudCk7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2dldF9rdm1fc2FmZSk7XFxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZ2V0X2t2bV9zYWZlKTtcXG4gXFxuIHZvaWQga3ZtX3B1dF9rdm0oc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuIFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmt2bS1cXHUwMDNldXNlcnNfY291bnQpKVxcbiBcXHRcXHRrdm1fZGVzdHJveV92bShrdm0pO1xcbiB9XFxuLUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9wdXRfa3ZtKTtcXG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9wdXRfa3ZtKTtcXG4gXFxuIC8qXFxuICAqIFVzZWQgdG8gcHV0IGEgcmVmZXJlbmNlIHRoYXQgd2FzIHRha2VuIG9uIGJlaGFsZiBvZiBhbiBvYmplY3QgYXNzb2NpYXRlZFxcbkBAIC0xMzUyLDYgKzEzNTIsOCBAQCBzdGF0aWMgaW50IGt2bV92bV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxcbiBcXG4gXFx0a3ZtX2lycWZkX3JlbGVhc2Uoa3ZtKTtcXG4gXFxuK1xcdFdSSVRFX09OQ0Uoa3ZtLVxcdTAwM2VmaWxlLCBOVUxMKTtcXG4rXFxuIFxcdGt2bV9wdXRfa3ZtKGt2bSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTU0OTYsNiArNTQ5OCwxNSBAQCBib29sIGZpbGVfaXNfa3ZtKHN0cnVjdCBmaWxlICpmaWxlKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChmaWxlX2lzX2t2bSk7XFxuIFxcbitzdHJ1Y3Qga3ZtICpmaWxlX3RvX2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHRpZiAoIWZpbGVfaXNfa3ZtKGZpbGUpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHJldHVybiBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGZpbGVfdG9fa3ZtKTtcXG4rXFxuIHN0YXRpYyBpbnQga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlKVxcbiB7XFxuIFxcdGNoYXIgZmRuYW1lW0lUT0FfTUFYX0xFTiArIDFdO1xcbkBAIC01NTI3LDYgKzU1MzgsOSBAQCBzdGF0aWMgaW50IGt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSlcXG4gXFx0ICogY2FzZXMgaXQgd2lsbCBiZSBjYWxsZWQgYnkgdGhlIGZpbmFsIGZwdXQoZmlsZSkgYW5kIHdpbGwgdGFrZVxcbiBcXHQgKiBjYXJlIG9mIGRvaW5nIGt2bV9wdXRfa3ZtKGt2bSkuXFxuIFxcdCAqL1xcbitcXG4rXFx0a3ZtLVxcdTAwM2VmaWxlID0gZmlsZTtcXG4rXFxuIFxcdGt2bV91ZXZlbnRfbm90aWZ5X2NoYW5nZShLVk1fRVZFTlRfQ1JFQVRFX1ZNLCBrdm0pO1xcbiBcXG4gXFx0ZmRfaW5zdGFsbChmZCwgZmlsZSk7XFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3ZmaW8uYyBiL3ZpcnQva3ZtL3ZmaW8uY1xcbmluZGV4IDZjZGM0ZTlhMzMzYTMuLjE5NTQ4YTQzMDk0MjYgMTAwNjQ0XFxuLS0tIGEvdmlydC9rdm0vdmZpby5jXFxuKysrIGIvdmlydC9rdm0vdmZpby5jXFxuQEAgLTM1LDE1ICszNSwxNSBAQCBzdHJ1Y3Qga3ZtX3ZmaW8ge1xcbiBcXHRib29sIG5vbmNvaGVyZW50O1xcbiB9O1xcbiBcXG4tc3RhdGljIHZvaWQga3ZtX3ZmaW9fZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pXFxuK3N0YXRpYyB2b2lkIGt2bV92ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqdmZpb19maWxlLCBzdHJ1Y3QgZmlsZSAqa3ZtKVxcbiB7XFxuLVxcdHZvaWQgKCpmbikoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSk7XFxuK1xcdHZvaWQgKCpmbikoc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSk7XFxuIFxcbiBcXHRmbiA9IHN5bWJvbF9nZXQodmZpb19maWxlX3NldF9rdm0pO1xcbiBcXHRpZiAoIWZuKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRmbihmaWxlLCBrdm0pO1xcbitcXHRmbih2ZmlvX2ZpbGUsIGt2bSk7XFxuIFxcbiBcXHRzeW1ib2xfcHV0KHZmaW9fZmlsZV9zZXRfa3ZtKTtcXG4gfVxcbkBAIC0xNDQsNiArMTQ0LDcgQEAgc3RhdGljIGludCBrdm1fdmZpb19maWxlX2FkZChzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmQpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92ZmlvICprdiA9IGRldi1cXHUwMDNlcHJpdmF0ZTtcXG4gXFx0c3RydWN0IGt2bV92ZmlvX2ZpbGUgKmt2ZjtcXG4rXFx0c3RydWN0IGZpbGUgKmt2bV9maWxlIF9fZnJlZShmcHV0KSA9IE5VTEw7XFxuIFxcdHN0cnVjdCBmaWxlICpmaWxwIF9fZnJlZShmcHV0KSA9IE5VTEw7XFxuIFxcbiBcXHRmaWxwID0gZmdldChmZCk7XFxuQEAgLTE1NCw2ICsxNTUsMTAgQEAgc3RhdGljIGludCBrdm1fdmZpb19maWxlX2FkZChzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmQpXFxuIFxcdGlmICgha3ZtX3ZmaW9fZmlsZV9pc192YWxpZChmaWxwKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRrdm1fZmlsZSA9IGdldF9maWxlX2FjdGl2ZShcXHUwMDI2ZGV2LVxcdTAwM2Vrdm0tXFx1MDAzZWZpbGUpO1xcbitcXHRpZiAoIWt2bV9maWxlKVxcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFxuIFxcdGd1YXJkKG11dGV4KShcXHUwMDI2a3YtXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShrdmYsIFxcdTAwMjZrdi1cXHUwMDNlZmlsZV9saXN0LCBub2RlKSB7XFxuQEAgLTE2OCw3ICsxNzMsNyBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZClcXG4gXFx0a3ZmLVxcdTAwM2VmaWxlID0gZ2V0X2ZpbGUoZmlscCk7XFxuIFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmt2Zi1cXHUwMDNlbm9kZSwgXFx1MDAyNmt2LVxcdTAwM2VmaWxlX2xpc3QpO1xcbiBcXG4tXFx0a3ZtX3ZmaW9fZmlsZV9zZXRfa3ZtKGt2Zi1cXHUwMDNlZmlsZSwgZGV2LVxcdTAwM2Vrdm0pO1xcbitcXHRrdm1fdmZpb19maWxlX3NldF9rdm0oa3ZmLVxcdTAwM2VmaWxlLCBrdm1fZmlsZSk7XFxuIFxcdGt2bV92ZmlvX3VwZGF0ZV9jb2hlcmVuY3koZGV2KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDoxNjowNC41NjExODQ5MDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU1ODI4MjM1NTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJWRklPXCIsXG4gICAgXCJWRklPX0dST1VQXCIsXG4gICAgXCJWRklPX0NPTlRBSU5FUlwiLFxuICAgIFwiVkZJT19ERVZJQ0VfQ0RFVlwiLFxuICAgIFwiRFJNX0k5MTVfR1ZUX0tWTUdUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3ZmaW9fZmlsZV9hZGRcIixcbiAgICBcInZmaW9fZmlsZV9zZXRfa3ZtXCIsXG4gICAgXCJ2ZmlvX2dyb3VwX3NldF9rdm1cIixcbiAgICBcInZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZVwiLFxuICAgIFwidmZpb19kZXZpY2VfcHV0X2t2bVwiLFxuICAgIFwiZmlsZV90b19rdm1cIixcbiAgICBcImt2bV92bV9yZWxlYXNlXCIsXG4gICAgXCJrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bVwiLFxuICAgIFwia3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXJcIixcbiAgICBcImt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXJcIixcbiAgICBcImt2bV93cml0ZV90cmFja19hZGRfZ2ZuXCIsXG4gICAgXCJrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgdGhlIHJlZmVyZW5jZSBtYW5hZ2VtZW50IGJldHdlZW4gS1ZNIGFuZCBleHRlcm5hbCBzdWJzeXN0ZW1zIChwcmltYXJpbHkgVkZJTyBhbmQgS1ZNIHBhZ2UgdHJhY2tpbmcpLCBzd2l0Y2hpbmcgZnJvbSBob2xkaW5nIGRpcmVjdCAnc3RydWN0IGt2bSAqJyBwb2ludGVycyB0byB1c2luZyAnc3RydWN0IGZpbGUgKicgcmVmZXJlbmNlcyB2aWEgZ2V0X2ZpbGUoKS9mcHV0KCkgYW5kIGdldF9maWxlX2FjdGl2ZSgpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbGlmZWN5Y2xlIHBhdGhzLCBjb25jdXJyZW5jeSwgYW5kIHJlZmNvdW50aW5nIGJldHdlZW4gS1ZNIFZNIGZpbGVzIGFuZCBWRklPIGRldmljZXMvZ3JvdXBzIGR1cmluZyBWTSBjcmVhdGlvbiwgcmVsZWFzZSwgYW5kIFZGSU8gZGV2aWNlIGF0dGFjaG1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTM4ZTI5NDU5NGQyZTlkZmFhNTRkYWFlNTRmMzlmY2IzNmY1ODVhNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTA6MTY6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFnZV90cmFjay5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhZ2VfdHJhY2suaFxuaW5kZXggM2QwNDA3NDEwNDRiNC4uMDQ2YTI1YzhmZTRmOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmhcbkBAIC00NCwxMyArNDQsMTMgQEAgc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUge1xuIFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpub2RlKTtcbiB9O1xuIFxuLWludCBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sXG4raW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbik7XG4tdm9pZCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSxcbit2b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0XHRcdHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpuKTtcbiBcbi1pbnQga3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm4oc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pO1xuLWludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7XG4raW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBmaWxlICpmaWxlLCBnZm5fdCBnZm4pO1xuK2ludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3QgZmlsZSAqZmlsZSwgZ2ZuX3QgZ2ZuKTtcbiAjZWxzZVxuIC8qXG4gICogQWxsb3cgZGVmaW5pbmcgYSBub2RlIGluIGEgc3RydWN0dXJlIGV2ZW4gaWYgcGFnZSB0cmFja2luZyBpcyBkaXNhYmxlZCwgZS5nLlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZSBiL2FyY2gveDg2L2t2bS9NYWtlZmlsZVxuaW5kZXggMDQ3NDYwNGFiOGExNC4uOTZmODlkNmY3ZTZhOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZVxuKysrIGIvYXJjaC94ODYva3ZtL01ha2VmaWxlXG5AQCAtNjAsMTAgKzYwLDcgQEAgZXhwb3J0c19ncmVwX3RyYWlsZXIgOj0gLS1pbmNsdWRlPScqLltjaF0nIC1ucncgJChzcmN0cmVlKS92aXJ0L2t2bSAkKHNyY3RyZWUpL2FcbiBcdFx0XHRncmVwIC12IC1lIGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyIFxcXG4gXHRcdFx0XHQtZSBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyIFxcXG4gXHRcdFx0XHQtZSBrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbiBcXFxuLVx0XHRcdFx0LWUga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4gXFxcbi1cdFx0XHRcdC1lIGt2bV9nZXRfa3ZtIFxcXG4tXHRcdFx0XHQtZSBrdm1fZ2V0X2t2bV9zYWZlIFxcXG4tXHRcdFx0XHQtZSBrdm1fcHV0X2t2bVxuK1x0XHRcdFx0LWUga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm5cbiBcbiAjIEZvcmNlIGdyZXAgdG8gZW1pdCBhIGdvb2Z5IGdyb3VwIHNlcGFyYXRvciB0aGF0IGNhbiBpbiB0dXJuIGJlIHJlcGxhY2VkIHdpdGhcbiAjIHRoZSBhYm92ZSBuZXdsaW5lIG1hY3JvIChuZXdsaW5lcyBpbiBNYWtlIGFyZSBhIG5pZ2h0bWFyZSkuICBOb3RlLCBncmVwIG9ubHlcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYyBiL2FyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jXG5pbmRleCA3ZTgxOTVhMzExYmIwLi45OGYxMzNlNGYwYjMyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmNcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jXG5AQCAtMjM3LDEwICsyMzcsMTEgQEAgc3RhdGljIGludCBrdm1fZW5hYmxlX2V4dGVybmFsX3dyaXRlX3RyYWNraW5nKHN0cnVjdCBrdm0gKmt2bSlcbiAgKiByZWdpc3RlciB0aGUgbm90aWZpZXIgc28gdGhhdCBldmVudCBpbnRlcmNlcHRpb24gZm9yIHRoZSB0cmFja2VkIGd1ZXN0XG4gICogcGFnZXMgY2FuIGJlIHJlY2VpdmVkLlxuICAqL1xuLWludCBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sXG4raW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbilcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfaGVhZCAqaGVhZDtcbitcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbGVfdG9fa3ZtKGZpbGUpO1xuIFx0aW50IHI7XG4gXG4gXHRpZiAoIWt2bSB8fCBrdm0tXHUwMDNlbW0gIT0gY3VycmVudC1cdTAwM2VtbSlcbkBAIC0yNTIsNyArMjUzLDcgQEAgaW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRyZXR1cm4gcjtcbiBcdH1cbiBcbi1cdGt2bV9nZXRfa3ZtKGt2bSk7XG4rXHRnZXRfZmlsZShmaWxlKTtcbiBcbiBcdGhlYWQgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC50cmFja19ub3RpZmllcl9oZWFkO1xuIFxuQEAgLTI2NywxMCArMjY4LDExIEBAIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKTtcbiAgKiBzdG9wIHJlY2VpdmluZyB0aGUgZXZlbnQgaW50ZXJjZXB0aW9uLiBJdCBpcyB0aGUgb3Bwb3NlZCBvcGVyYXRpb24gb2ZcbiAgKiBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcigpLlxuICAqL1xuLXZvaWQga3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sXG4rdm9pZCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdFx0XHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbilcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfaGVhZCAqaGVhZDtcbitcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbGVfdG9fa3ZtKGZpbGUpO1xuIFxuIFx0aGVhZCA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLnRyYWNrX25vdGlmaWVyX2hlYWQ7XG4gXG5AQCAtMjc5LDcgKzI4MSw3IEBAIHZvaWQga3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sXG4gXHR3cml0ZV91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiBcdHN5bmNocm9uaXplX3NyY3UoXHUwMDI2aGVhZC1cdTAwM2V0cmFja19zcmN1KTtcbiBcbi1cdGt2bV9wdXRfa3ZtKGt2bSk7XG4rXHRmcHV0KGZpbGUpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKTtcbiBcbkBAIC0zMzYsMTEgKzMzOCwxMiBAQCB2b2lkIGt2bV9wYWdlX3RyYWNrX2RlbGV0ZV9zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbiAgKiBhZGQgZ3Vlc3QgcGFnZSB0byB0aGUgdHJhY2tpbmcgcG9vbCBzbyB0aGF0IGNvcnJlc3BvbmRpbmcgYWNjZXNzIG9uIHRoYXRcbiAgKiBwYWdlIHdpbGwgYmUgaW50ZXJjZXB0ZWQuXG4gICpcbi0gKiBAa3ZtOiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uXG4rICogQGZpbGU6IHRoZSBWTSBmaWxlIG9mIHRoZSBndWVzdCBpbnN0YW5jZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbi5cbiAgKiBAZ2ZuOiB0aGUgZ3Vlc3QgcGFnZS5cbiAgKi9cbi1pbnQga3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm4oc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pXG4raW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBmaWxlICpmaWxlLCBnZm5fdCBnZm4pXG4ge1xuK1x0c3RydWN0IGt2bSAqa3ZtID0gZmlsZV90b19rdm0oZmlsZSk7XG4gXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xuIFx0aW50IGlkeDtcbiBcbkBAIC0zNjYsMTEgKzM2OSwxMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbik7XG4gICogcmVtb3ZlIHRoZSBndWVzdCBwYWdlIGZyb20gdGhlIHRyYWNraW5nIHBvb2wgd2hpY2ggc3RvcHMgdGhlIGludGVyY2VwdGlvblxuICAqIG9mIGNvcnJlc3BvbmRpbmcgYWNjZXNzIG9uIHRoYXQgcGFnZS5cbiAgKlxuLSAqIEBrdm06IHRoZSBndWVzdCBpbnN0YW5jZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbi5cbisgKiBAZmlsZTogdGhlIFZNIGZpbGUgb2YgdGhlIGd1ZXN0IGluc3RhbmNlIHdlIGFyZSBpbnRlcmVzdGVkIGluLlxuICAqIEBnZm46IHRoZSBndWVzdCBwYWdlLlxuICAqL1xuLWludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbilcbitpbnQga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4oc3RydWN0IGZpbGUgKmZpbGUsIGdmbl90IGdmbilcbiB7XG4rXHRzdHJ1Y3Qga3ZtICprdm0gPSBmaWxlX3RvX2t2bShmaWxlKTtcbiBcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG4gXHRpbnQgaWR4O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuaW5kZXggOTQwYzBmZjY2OGJlZS4uZjE2MGUxOTQ1ZmJjZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG5AQCAtMTgyMiwxNyArMTgyMiwyNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdmZpb19hcF9tZGV2X2F0dHJfZ3JvdXBzW10gPSB7XG4gXG4gLyoqXG4gICogdmZpb19hcF9tZGV2X3NldF9rdm0gLSBzZXRzIGFsbCBkYXRhIGZvciBAbWF0cml4X21kZXYgdGhhdCBhcmUgbmVlZGVkXG4tICogdG8gbWFuYWdlIEFQIHJlc291cmNlcyBmb3IgdGhlIGd1ZXN0IHdob3NlIHN0YXRlIGlzIHJlcHJlc2VudGVkIGJ5IEBrdm1cbisgKiB0byBtYW5hZ2UgQVAgcmVzb3VyY2VzIGZvciB0aGUgZ3Vlc3Qgd2hvc2Ugc3RhdGUgaXMgcmVwcmVzZW50ZWQgYnlcbisgKiBAa3ZtX2ZpbGVcbiAgKlxuICAqIEBtYXRyaXhfbWRldjogYSBtZWRpYXRlZCBtYXRyaXggZGV2aWNlXG4tICogQGt2bTogcmVmZXJlbmNlIHRvIEtWTSBpbnN0YW5jZVxuKyAqIEBrdm1fZmlsZTogdGhlIEtWTSBWTSBmaWxlIHRoaXMgdmZpbyBkZXZpY2UgaXMgYXNzb2NpYXRlZCB3aXRoXG4gICpcbi0gKiBSZXR1cm46IDAgaWYgbm8gb3RoZXIgbWVkaWF0ZWQgbWF0cml4IGRldmljZSBoYXMgYSByZWZlcmVuY2UgdG8gQGt2bTtcbisgKiBSZXR1cm46IDAgaWYgbm8gb3RoZXIgbWVkaWF0ZWQgbWF0cml4IGRldmljZSBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIFZNO1xuICAqIG90aGVyd2lzZSwgcmV0dXJucyBhbiAtRVBFUk0uXG4gICovXG4gc3RhdGljIGludCB2ZmlvX2FwX21kZXZfc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuLVx0XHRcdFx0c3RydWN0IGt2bSAqa3ZtKVxuK1x0XHRcdFx0c3RydWN0IGZpbGUgKmt2bV9maWxlKVxuIHtcbitcdHN0cnVjdCBrdm0gKmt2bTtcbitcbitcdGlmICgha3ZtX2ZpbGUpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0a3ZtID0ga3ZtX2ZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1x0aWYgKCFrdm0pXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuIFx0aWYgKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYmQpIHtcbiBcdFx0Z2V0X3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7XG4gXHRcdGlmIChrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rKSB7XG5AQCAtMTg0MSw3ICsxODUxLDYgQEAgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuIFx0XHR9XG4gXHRcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2sgPSBcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2VwcWFwX2hvb2s7XG4gXG4tXHRcdGt2bV9nZXRfa3ZtKGt2bSk7XG4gXHRcdG1hdHJpeF9tZGV2LVx1MDAzZWt2bSA9IGt2bTtcbiBcdFx0dmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTtcbiBcdFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuQEAgLTE4OTQsNyArMTkwMyw2IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl91bnNldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbiBcdFx0bWF0cml4X21kZXYtXHUwMDNla3ZtID0gTlVMTDtcbiBcbiBcdFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuLVx0XHRrdm1fcHV0X2t2bShrdm0pO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vZ3JvdXAuYyBiL2RyaXZlcnMvdmZpby9ncm91cC5jXG5pbmRleCBiMjI5OWU1YmM2ZGYzLi41YmY4Y2JkZmYzNzdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL2dyb3VwLmNcbisrKyBiL2RyaXZlcnMvdmZpby9ncm91cC5jXG5AQCAtODYwLDExICs4NjAsMjAgQEAgYm9vbCB2ZmlvX2dyb3VwX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cClcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGt2bSAqa3ZtKVxuK3ZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGZpbGUgKmt2bSlcbiB7XG4rXHRzdHJ1Y3QgZmlsZSAqb2xkO1xuK1xuK1x0aWYgKGt2bSlcbitcdFx0Z2V0X2ZpbGUoa3ZtKTtcbitcbiBcdHNwaW5fbG9jayhcdTAwMjZncm91cC1cdTAwM2Vrdm1fcmVmX2xvY2spO1xuK1x0b2xkID0gZ3JvdXAtXHUwMDNla3ZtO1xuIFx0Z3JvdXAtXHUwMDNla3ZtID0ga3ZtO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2Z3JvdXAtXHUwMDNla3ZtX3JlZl9sb2NrKTtcbitcbitcdGlmIChvbGQpXG4rXHRcdGZwdXQob2xkKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuY1xuaW5kZXggZjQ3ZjM2MzE0YTFjYy4uMDQ1MTMyZTkwYmZlZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuY1xuQEAgLTE4NCw2ICsxODQsNyBAQCBpbnQgdmZpb19wY2lfemRldl9mZWF0dXJlX2VycihzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxuIGludCB2ZmlvX3BjaV96ZGV2X29wZW5fZGV2aWNlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiB7XG4gXHRzdHJ1Y3QgenBjaV9kZXYgKnpkZXYgPSB0b196cGNpKHZkZXYtXHUwMDNlcGRldik7XG4rXHRzdHJ1Y3Qga3ZtICprdm07XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCF6ZGV2KVxuQEAgLTE5NSw5ICsxOTYsMTQgQEAgaW50IHZmaW9fcGNpX3pkZXZfb3Blbl9kZXZpY2Uoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHJldCA9IC1FTk9FTlQ7XG4rXHRrdm0gPSB2ZGV2LVx1MDAzZXZkZXYua3ZtLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdGlmICgha3ZtKVxuK1x0XHRnb3RvIHJlY292ZXJ5O1xuK1xuIFx0aWYgKHpwY2lfa3ZtX2hvb2sua3ZtX3JlZ2lzdGVyKVxuLVx0XHRyZXQgPSB6cGNpX2t2bV9ob29rLmt2bV9yZWdpc3Rlcih6ZGV2LCB2ZGV2LVx1MDAzZXZkZXYua3ZtKTtcbitcdFx0cmV0ID0genBjaV9rdm1faG9vay5rdm1fcmVnaXN0ZXIoemRldiwga3ZtKTtcbiBcbityZWNvdmVyeTpcbiBcdGlmIChyZXQpXG4gXHRcdHpwY2lfc3RvcF9tZWRpYXRlZF9yZWNvdmVyeSh6ZGV2KTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vdmZpby5oIGIvZHJpdmVycy92ZmlvL3ZmaW8uaFxuaW5kZXggNzcyOGJjOTliNjNkMS4uOWI2MTk5NTFhNWQwYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby92ZmlvLmhcbisrKyBiL2RyaXZlcnMvdmZpby92ZmlvLmhcbkBAIC0yMyw3ICsyMyw3IEBAIHN0cnVjdCB2ZmlvX2RldmljZV9maWxlIHtcbiBcdHU4IGFjY2Vzc19ncmFudGVkO1xuIFx0dTMyIGRldmlkOyAvKiBvbmx5IHZhbGlkIHdoZW4gaW9tbXVmZCBpcyB2YWxpZCAqL1xuIFx0c3BpbmxvY2tfdCBrdm1fcmVmX2xvY2s7IC8qIHByb3RlY3Qga3ZtIGZpZWxkICovXG4tXHRzdHJ1Y3Qga3ZtICprdm07XG4rXHRzdHJ1Y3QgZmlsZSAqa3ZtO1xuIFx0c3RydWN0IGlvbW11ZmRfY3R4ICppb21tdWZkOyAvKiBwcm90ZWN0ZWQgYnkgc3RydWN0IHZmaW9fZGV2aWNlX3NldDo6bG9jayAqL1xuIH07XG4gXG5AQCAtODgsNyArODgsNyBAQCBzdHJ1Y3QgdmZpb19ncm91cCB7XG4gI2VuZGlmXG4gXHRlbnVtIHZmaW9fZ3JvdXBfdHlwZVx0XHR0eXBlO1xuIFx0c3RydWN0IG11dGV4XHRcdFx0Z3JvdXBfbG9jaztcbi1cdHN0cnVjdCBrdm1cdFx0XHQqa3ZtO1xuK1x0c3RydWN0IGZpbGVcdFx0XHQqa3ZtO1xuIFx0c3RydWN0IGZpbGVcdFx0XHQqb3BlbmVkX2ZpbGU7XG4gXHRzdHJ1Y3QgaW9tbXVmZF9jdHhcdFx0KmlvbW11ZmQ7XG4gXHRzcGlubG9ja190XHRcdFx0a3ZtX3JlZl9sb2NrO1xuQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIHZmaW9fZGV2aWNlX2dyb3VwX3VudXNlX2lvbW11KHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKTtcbiB2b2lkIHZmaW9fZGZfZ3JvdXBfY2xvc2Uoc3RydWN0IHZmaW9fZGV2aWNlX2ZpbGUgKmRmKTtcbiBzdHJ1Y3QgdmZpb19ncm91cCAqdmZpb19ncm91cF9mcm9tX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpO1xuIGJvb2wgdmZpb19ncm91cF9lbmZvcmNlZF9jb2hlcmVudChzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXApO1xuLXZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGt2bSAqa3ZtKTtcbit2b2lkIHZmaW9fZ3JvdXBfc2V0X2t2bShzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXAsIHN0cnVjdCBmaWxlICprdm0pO1xuIGJvb2wgdmZpb19kZXZpY2VfaGFzX2NvbnRhaW5lcihzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSk7XG4gaW50IF9faW5pdCB2ZmlvX2dyb3VwX2luaXQodm9pZCk7XG4gdm9pZCB2ZmlvX2dyb3VwX2NsZWFudXAodm9pZCk7XG5AQCAtMTY1LDcgKzE2NSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX2dyb3VwX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGt2bSAqa3ZtKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX2dyb3VwX3NldF9rdm0oc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgZmlsZSAqa3ZtKVxuIHtcbiB9XG4gXG5AQCAtNDI5LDExICs0MjksMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fdmlycWZkX2V4aXQodm9pZClcbiAjZW5kaWZcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfS1ZNKVxuLXZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3Qga3ZtICprdm0pO1xuK3ZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZmlsZSAqa3ZtKTtcbiB2b2lkIHZmaW9fZGV2aWNlX3B1dF9rdm0oc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSxcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBrdm0gKmt2bSlcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCBmaWxlICprdm0pXG4ge1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMgYi9kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmNcbmluZGV4IDQyM2VhZDQ4YWFmZTMuLmVkOTZhY2ZhODYzNTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmNcbisrKyBiL2RyaXZlcnMvdmZpby92ZmlvX21haW4uY1xuQEAgLTQ3MiwzNiArNDcyLDE0IEBAIHZvaWQgdmZpb191bnJlZ2lzdGVyX2dyb3VwX2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSlcbiBFWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KTtcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfS1ZNKVxuLXZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3Qga3ZtICprdm0pXG4rdm9pZCB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBmaWxlICprdm0pXG4ge1xuLVx0dm9pZCAoKnBmbikoc3RydWN0IGt2bSAqa3ZtKTtcbi1cdGJvb2wgKCpmbikoc3RydWN0IGt2bSAqa3ZtKTtcbi1cdGJvb2wgcmV0O1xuLVxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkZXZpY2UtXHUwMDNlZGV2X3NldC1cdTAwM2Vsb2NrKTtcbiBcbiBcdGlmICgha3ZtKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRwZm4gPSBzeW1ib2xfZ2V0KGt2bV9wdXRfa3ZtKTtcbi1cdGlmIChXQVJOX09OKCFwZm4pKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRmbiA9IHN5bWJvbF9nZXQoa3ZtX2dldF9rdm1fc2FmZSk7XG4tXHRpZiAoV0FSTl9PTighZm4pKSB7XG4tXHRcdHN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRyZXQgPSBmbihrdm0pO1xuLVx0c3ltYm9sX3B1dChrdm1fZ2V0X2t2bV9zYWZlKTtcbi1cdGlmICghcmV0KSB7XG4tXHRcdHN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRkZXZpY2UtXHUwMDNlcHV0X2t2bSA9IHBmbjtcbi1cdGRldmljZS1cdTAwM2Vrdm0gPSBrdm07XG4rXHRkZXZpY2UtXHUwMDNla3ZtID0gZ2V0X2ZpbGUoa3ZtKTtcbiB9XG4gXG4gdm9pZCB2ZmlvX2RldmljZV9wdXRfa3ZtKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKVxuQEAgLTUxMSwxNCArNDg5LDcgQEAgdm9pZCB2ZmlvX2RldmljZV9wdXRfa3ZtKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKVxuIFx0aWYgKCFkZXZpY2UtXHUwMDNla3ZtKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoV0FSTl9PTighZGV2aWNlLVx1MDAzZXB1dF9rdm0pKVxuLVx0XHRnb3RvIGNsZWFyO1xuLVxuLVx0ZGV2aWNlLVx1MDAzZXB1dF9rdm0oZGV2aWNlLVx1MDAzZWt2bSk7XG4tXHRkZXZpY2UtXHUwMDNlcHV0X2t2bSA9IE5VTEw7XG4tXHRzeW1ib2xfcHV0KGt2bV9wdXRfa3ZtKTtcbi1cbi1jbGVhcjpcbitcdGZwdXQoZGV2aWNlLVx1MDAzZWt2bSk7XG4gXHRkZXZpY2UtXHUwMDNla3ZtID0gTlVMTDtcbiB9XG4gI2VuZGlmXG5AQCAtMTU0NCw5ICsxNTE1LDEzIEBAIGJvb2wgdmZpb19maWxlX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCBmaWxlICpmaWxlKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX2ZpbGVfZW5mb3JjZWRfY29oZXJlbnQpO1xuIFxuLXN0YXRpYyB2b2lkIHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKVxuK3N0YXRpYyB2b2lkIHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGUgKmt2bSlcbiB7XG4gXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmlsZSAqZGYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdHN0cnVjdCBmaWxlICpvbGQ7XG4rXG4rXHRpZiAoa3ZtKVxuK1x0XHRnZXRfZmlsZShrdm0pO1xuIFxuIFx0LypcbiBcdCAqIFRoZSBrdm0gaXMgZmlyc3QgcmVjb3JkZWQgaW4gdGhlIHZmaW9fZGV2aWNlX2ZpbGUsIGFuZCB3aWxsXG5AQCAtMTU1NCwyOCArMTUyOSwzMiBAQCBzdGF0aWMgdm9pZCB2ZmlvX2RldmljZV9maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdCAqIGlvbW11ZmQgc3VjY2Vzc2Z1bGx5IGluIHRoZSB2ZmlvIGRldmljZSBjZGV2IHBhdGguXG4gXHQgKi9cbiBcdHNwaW5fbG9jayhcdTAwMjZkZi1cdTAwM2Vrdm1fcmVmX2xvY2spO1xuK1x0b2xkID0gZGYtXHUwMDNla3ZtO1xuIFx0ZGYtXHUwMDNla3ZtID0ga3ZtO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2ZGYtXHUwMDNla3ZtX3JlZl9sb2NrKTtcbitcbitcdGlmIChvbGQpXG4rXHRcdGZwdXQob2xkKTtcbiB9XG4gXG4gLyoqXG4gICogdmZpb19maWxlX3NldF9rdm0gLSBMaW5rIGEga3ZtIHdpdGggVkZJTyBkcml2ZXJzXG4tICogQGZpbGU6IFZGSU8gZ3JvdXAgZmlsZSBvciBWRklPIGRldmljZSBmaWxlXG4tICogQGt2bTogS1ZNIHRvIGxpbmtcbisgKiBAdmZpb19maWxlOiBWRklPIGdyb3VwIGZpbGUgb3IgVkZJTyBkZXZpY2UgZmlsZVxuKyAqIEBrdm06IEtWTSBmaWxlIHRvIGxpbmtcbiAgKlxuICAqIFdoZW4gYSBWRklPIGRldmljZSBpcyBmaXJzdCBvcGVuZWQgdGhlIEtWTSB3aWxsIGJlIGF2YWlsYWJsZSBpblxuICAqIGRldmljZS1cdTAwM2Vrdm0gaWYgb25lIHdhcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuXG4gICovXG4tdm9pZCB2ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKVxuK3ZvaWQgdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSlcbiB7XG4gXHRzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXA7XG4gXG4tXHRncm91cCA9IHZmaW9fZ3JvdXBfZnJvbV9maWxlKGZpbGUpO1xuK1x0Z3JvdXAgPSB2ZmlvX2dyb3VwX2Zyb21fZmlsZSh2ZmlvX2ZpbGUpO1xuIFx0aWYgKGdyb3VwKVxuIFx0XHR2ZmlvX2dyb3VwX3NldF9rdm0oZ3JvdXAsIGt2bSk7XG4gXG4tXHRpZiAodmZpb19kZXZpY2VfZnJvbV9maWxlKGZpbGUpKVxuLVx0XHR2ZmlvX2RldmljZV9maWxlX3NldF9rdm0oZmlsZSwga3ZtKTtcbitcdGlmICh2ZmlvX2RldmljZV9mcm9tX2ZpbGUodmZpb19maWxlKSlcbitcdFx0dmZpb19kZXZpY2VfZmlsZV9zZXRfa3ZtKHZmaW9fZmlsZSwga3ZtKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmZpb19maWxlX3NldF9rdm0pO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggMDNiZmM5Mjg2NGI2ZS4uYmZlY2NlMWI1OTU1YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtNzg0LDYgKzc4NCwxMyBAQCBzdHJ1Y3Qga3ZtIHtcbiBcdCAqIGt2bV9zd2FwX2FjdGl2ZV9tZW1zbG90cygpLlxuIFx0ICovXG4gXHRzdHJ1Y3QgbXV0ZXggc2xvdHNfYXJjaF9sb2NrO1xuK1x0LypcbitcdCAqIEJhY2stcmVmZXJlbmNlIHRvIHRoZSBWTSBmaWxlIGZvciBzdWJzeXN0ZW1zIChlLmcuLCBWRklPKS4gSG9sZHMgbm9cbitcdCAqIHJlZmVyZW5jZSB0byBhdm9pZCBwaW5uaW5nIHRoZSBWTS4gQWNjZXNzIHZpYSBnZXRfZmlsZV9hY3RpdmUoXHUwMDI2a3ZtLVx1MDAzZWZpbGUpXG4rXHQgKiBvbmx54oCUc2FmZSBiZWNhdXNlIGNsZWFyZWQgaW4ga3ZtX3ZtX3JlbGVhc2UoKSBiZWZvcmUgZmlsZSBmcmVlZC4gQ2FsbGVyc1xuK1x0ICogc3RvcmluZyB0aGUgcmVzdWx0IG11c3QgdGFrZSB0aGVpciBvd24gcmVmZXJlbmNlIHZpYSBnZXRfZmlsZSgpXG4rXHQgKi9cbitcdHN0cnVjdCBmaWxlICpmaWxlO1xuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW07IC8qIHVzZXJzcGFjZSB0aWVkIHRvIHRoaXMgdm0gKi9cbiBcdHVuc2lnbmVkIGxvbmcgbnJfbWVtc2xvdF9wYWdlcztcbiBcdC8qIFRoZSB0d28gbWVtc2xvdCBzZXRzIC0gYWN0aXZlIGFuZCBpbmFjdGl2ZSAocGVyIGFkZHJlc3Mgc3BhY2UpICovXG5AQCAtMTA4Miw2ICsxMDg5LDcgQEAgdm9pZCBrdm1fZ2V0X2t2bShzdHJ1Y3Qga3ZtICprdm0pO1xuIGJvb2wga3ZtX2dldF9rdm1fc2FmZShzdHJ1Y3Qga3ZtICprdm0pO1xuIHZvaWQga3ZtX3B1dF9rdm0oc3RydWN0IGt2bSAqa3ZtKTtcbiBib29sIGZpbGVfaXNfa3ZtKHN0cnVjdCBmaWxlICpmaWxlKTtcbitzdHJ1Y3Qga3ZtICpmaWxlX3RvX2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSk7XG4gdm9pZCBrdm1fcHV0X2t2bV9ub19kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSk7XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21lbXNsb3RzICpfX2t2bV9tZW1zbG90cyhzdHJ1Y3Qga3ZtICprdm0sIGludCBhc19pZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvbGludXgvdmZpby5oXG5pbmRleCA0NWYwODk4NjM1OWU0Li4wY2M5MWM2Zjk2ZDJiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvLmhcbisrKyBiL2luY2x1ZGUvbGludXgvdmZpby5oXG5AQCAtNTQsNyArNTQsNyBAQCBzdHJ1Y3QgdmZpb19kZXZpY2Uge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBkZXZfc2V0X2xpc3Q7XG4gXHR1bnNpZ25lZCBpbnQgbWlncmF0aW9uX2ZsYWdzO1xuIFx0dTggcHJlY29weV9pbmZvX3YyO1xuLVx0c3RydWN0IGt2bSAqa3ZtO1xuK1x0c3RydWN0IGZpbGUgKmt2bTtcbiBcbiBcdC8qIE1lbWJlcnMgYmVsb3cgaGVyZSBhcmUgcHJpdmF0ZSwgbm90IGZvciBkcml2ZXIgdXNlICovXG4gXHR1bnNpZ25lZCBpbnQgaW5kZXg7XG5AQCAtNjYsNyArNjYsNiBAQCBzdHJ1Y3QgdmZpb19kZXZpY2Uge1xuIFx0dW5zaWduZWQgaW50IG9wZW5fY291bnQ7XG4gXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xuIFx0c3RydWN0IGlvbW11ZmRfYWNjZXNzICppb21tdWZkX2FjY2Vzcztcbi1cdHZvaWQgKCpwdXRfa3ZtKShzdHJ1Y3Qga3ZtICprdm0pO1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU9NTVVGRClcbiBcdHN0cnVjdCBpb21tdWZkX2RldmljZSAqaW9tbXVmZF9kZXZpY2U7XG5AQCAtMzc4LDcgKzM3Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX2ZpbGVfaGFzX2RldihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpXG4gI2VuZGlmXG4gYm9vbCB2ZmlvX2ZpbGVfaXNfdmFsaWQoc3RydWN0IGZpbGUgKmZpbGUpO1xuIGJvb2wgdmZpb19maWxlX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCBmaWxlICpmaWxlKTtcbi12b2lkIHZmaW9fZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pO1xuK3ZvaWQgdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSk7XG4gXG4gI2RlZmluZSBWRklPX1BJTl9QQUdFU19NQVhfRU5UUklFU1x0KFBBR0VfU0laRS9zaXplb2YodW5zaWduZWQgbG9uZykpXG4gXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbmluZGV4IDY1ZWIyNmEwNTIwZDguLjM0YjRjNDM5MDhiM2IgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtMTMxNCw3ICsxMzE0LDcgQEAgdm9pZCBrdm1fZ2V0X2t2bShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0cmVmY291bnRfaW5jKFx1MDAyNmt2bS1cdTAwM2V1c2Vyc19jb3VudCk7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9nZXRfa3ZtKTtcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2dldF9rdm0pO1xuIFxuIC8qXG4gICogTWFrZSBzdXJlIHRoZSB2bSBpcyBub3QgZHVyaW5nIGRlc3RydWN0aW9uLCB3aGljaCBpcyBhIHNhZmUgdmVyc2lvbiBvZlxuQEAgLTEzMjQsMTQgKzEzMjQsMTQgQEAgYm9vbCBrdm1fZ2V0X2t2bV9zYWZlKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRyZXR1cm4gcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNmt2bS1cdTAwM2V1c2Vyc19jb3VudCk7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9nZXRfa3ZtX3NhZmUpO1xuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZ2V0X2t2bV9zYWZlKTtcbiBcbiB2b2lkIGt2bV9wdXRfa3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmt2bS1cdTAwM2V1c2Vyc19jb3VudCkpXG4gXHRcdGt2bV9kZXN0cm95X3ZtKGt2bSk7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9wdXRfa3ZtKTtcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3B1dF9rdm0pO1xuIFxuIC8qXG4gICogVXNlZCB0byBwdXQgYSByZWZlcmVuY2UgdGhhdCB3YXMgdGFrZW4gb24gYmVoYWxmIG9mIGFuIG9iamVjdCBhc3NvY2lhdGVkXG5AQCAtMTM1Miw2ICsxMzUyLDggQEAgc3RhdGljIGludCBrdm1fdm1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbiBcbiBcdGt2bV9pcnFmZF9yZWxlYXNlKGt2bSk7XG4gXG4rXHRXUklURV9PTkNFKGt2bS1cdTAwM2VmaWxlLCBOVUxMKTtcbitcbiBcdGt2bV9wdXRfa3ZtKGt2bSk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNTQ5Niw2ICs1NDk4LDE1IEBAIGJvb2wgZmlsZV9pc19rdm0oc3RydWN0IGZpbGUgKmZpbGUpXG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChmaWxlX2lzX2t2bSk7XG4gXG4rc3RydWN0IGt2bSAqZmlsZV90b19rdm0oc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0aWYgKCFmaWxlX2lzX2t2bShmaWxlKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXR1cm4gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChmaWxlX3RvX2t2bSk7XG4rXG4gc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUpXG4ge1xuIFx0Y2hhciBmZG5hbWVbSVRPQV9NQVhfTEVOICsgMV07XG5AQCAtNTUyNyw2ICs1NTM4LDkgQEAgc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUpXG4gXHQgKiBjYXNlcyBpdCB3aWxsIGJlIGNhbGxlZCBieSB0aGUgZmluYWwgZnB1dChmaWxlKSBhbmQgd2lsbCB0YWtlXG4gXHQgKiBjYXJlIG9mIGRvaW5nIGt2bV9wdXRfa3ZtKGt2bSkuXG4gXHQgKi9cbitcbitcdGt2bS1cdTAwM2VmaWxlID0gZmlsZTtcbitcbiBcdGt2bV91ZXZlbnRfbm90aWZ5X2NoYW5nZShLVk1fRVZFTlRfQ1JFQVRFX1ZNLCBrdm0pO1xuIFxuIFx0ZmRfaW5zdGFsbChmZCwgZmlsZSk7XG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vdmZpby5jIGIvdmlydC9rdm0vdmZpby5jXG5pbmRleCA2Y2RjNGU5YTMzM2EzLi4xOTU0OGE0MzA5NDI2IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vdmZpby5jXG4rKysgYi92aXJ0L2t2bS92ZmlvLmNcbkBAIC0zNSwxNSArMzUsMTUgQEAgc3RydWN0IGt2bV92ZmlvIHtcbiBcdGJvb2wgbm9uY29oZXJlbnQ7XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCBrdm1fdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSlcbitzdGF0aWMgdm9pZCBrdm1fdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSlcbiB7XG4tXHR2b2lkICgqZm4pKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pO1xuK1x0dm9pZCAoKmZuKShzdHJ1Y3QgZmlsZSAqdmZpb19maWxlLCBzdHJ1Y3QgZmlsZSAqa3ZtKTtcbiBcbiBcdGZuID0gc3ltYm9sX2dldCh2ZmlvX2ZpbGVfc2V0X2t2bSk7XG4gXHRpZiAoIWZuKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRmbihmaWxlLCBrdm0pO1xuK1x0Zm4odmZpb19maWxlLCBrdm0pO1xuIFxuIFx0c3ltYm9sX3B1dCh2ZmlvX2ZpbGVfc2V0X2t2bSk7XG4gfVxuQEAgLTE0NCw2ICsxNDQsNyBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZClcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZmaW8gKmt2ID0gZGV2LVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3Qga3ZtX3ZmaW9fZmlsZSAqa3ZmO1xuK1x0c3RydWN0IGZpbGUgKmt2bV9maWxlIF9fZnJlZShmcHV0KSA9IE5VTEw7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlscCBfX2ZyZWUoZnB1dCkgPSBOVUxMO1xuIFxuIFx0ZmlscCA9IGZnZXQoZmQpO1xuQEAgLTE1NCw2ICsxNTUsMTAgQEAgc3RhdGljIGludCBrdm1fdmZpb19maWxlX2FkZChzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmQpXG4gXHRpZiAoIWt2bV92ZmlvX2ZpbGVfaXNfdmFsaWQoZmlscCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0a3ZtX2ZpbGUgPSBnZXRfZmlsZV9hY3RpdmUoXHUwMDI2ZGV2LVx1MDAzZWt2bS1cdTAwM2VmaWxlKTtcbitcdGlmICgha3ZtX2ZpbGUpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuIFx0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2LVx1MDAzZWxvY2spO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShrdmYsIFx1MDAyNmt2LVx1MDAzZWZpbGVfbGlzdCwgbm9kZSkge1xuQEAgLTE2OCw3ICsxNzMsNyBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZClcbiBcdGt2Zi1cdTAwM2VmaWxlID0gZ2V0X2ZpbGUoZmlscCk7XG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNmt2Zi1cdTAwM2Vub2RlLCBcdTAwMjZrdi1cdTAwM2VmaWxlX2xpc3QpO1xuIFxuLVx0a3ZtX3ZmaW9fZmlsZV9zZXRfa3ZtKGt2Zi1cdTAwM2VmaWxlLCBkZXYtXHUwMDNla3ZtKTtcbitcdGt2bV92ZmlvX2ZpbGVfc2V0X2t2bShrdmYtXHUwMDNlZmlsZSwga3ZtX2ZpbGUpO1xuIFx0a3ZtX3ZmaW9fdXBkYXRlX2NvaGVyZW5jeShkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDoxNjowNC41NjExODY5MTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzA4NzA4MzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGFuZCBmaWd1cmUgb3V0IGlmIGl0J3MgZnV6ei13b3J0aHksIGFuZCBpZiBzbywgaG93IHdlIHNob3VsZCBhcHByb2FjaCBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgd29ydGggYSBjbG9zZXIgbG9vaywgZ2l2ZW4gdGhhdCBLVk0gYW5kIFZGSU8gYXJlIGludm9sdmVkLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGdyYXNwIHdoYXQncyBhY3R1YWxseSBiZWluZyBjaGFuZ2VkLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgaG93IEtWTSBhbmQgVkZJTyBpbnRlcmFjdCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHN0cnVjdCBrdm1gIGFuZCBgc3RydWN0IGZpbGVgIG9iamVjdHMuIFRoZSBwYXRjaCBpcyByZWZhY3RvcmluZyBob3cgdGhlc2UgYXJlIHBhc3NlZCBhbmQgc3RvcmVkIGFjcm9zcyBzZXZlcmFsIGtleSBmdW5jdGlvbnMgaW4gYHBhZ2VfdHJhY2suY2AsIGBrdm1fbWFpbi5jYCwgYW5kIGB2ZmlvLmNgLiBSZXBsYWNpbmcgYHN0cnVjdCBrdm0gKmt2bWAgd2l0aCBgc3RydWN0IGZpbGUgKmZpbGVgIGluIHNldmVyYWwgcGxhY2VzLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBmaWxlX3RvX2t2bSgpYCBhbmQgcmVsYXRlZCBjaGFuZ2VzLCBpcyB0aGUgY29yZSBvZiBpdC4gV2UncmUgdGFsa2luZyBhYm91dCBjaGFuZ2VzIGluIGhvdyBLVk1zIGFyZSBjcmVhdGVkLCBhY2Nlc3NlZCwgYW5kIHJlbGVhc2VkLCBhbG9uZ3NpZGUgVkZJTyBpbnRlcmFjdGlvbnMuIFRoZSBgRVhQT1JUX1NZTUJPTF9HUExgIHZzLiBgRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMYCBjaGFuZ2VzIGFyZSBhbHNvIGludGVyZXN0aW5nIGFuZCBjb3VsZCBoaW50IGF0IGFjY2VzcyBjb250cm9sIGNoYW5nZXMsIGFuZCBtYXkgZXhwb3NlIHNvbWUgbmV3IHN1cmZhY2UuXG5cblRoZSBrZXkgZnVuY3Rpb25zIGFyZTpcblxuKiAgIGBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcmAsIGBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyYCwgYGt2bV93cml0ZV90cmFja19hZGRfZ2ZuYCwgYGt2bV93cml0ZV90cmFja19yZW1vdmVfZ2ZuYCAoaW4gYHBhZ2VfdHJhY2suY2ApXG4qICAgYHZmaW9fZ3JvdXBfc2V0X2t2bWAsIGB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmVgLCBgdmZpb19kZXZpY2VfcHV0X2t2bWAsIGB2ZmlvX2ZpbGVfc2V0X2t2bWAsIGB2ZmlvX2RldmljZV9maWxlX3NldF9rdm1gIChWRklPIHJlbGF0ZWQgY29kZSlcbiogICBga3ZtX2dldF9rdm1gLCBga3ZtX2dldF9rdm1fc2FmZWAsIGBrdm1fcHV0X2t2bWAgKGluIGBrdm1fbWFpbi5jYClcbiogICBga3ZtX3ZtX3JlbGVhc2VgXG4qICAgYGt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtYFxuKiAgIGBrdm1fdmZpb19maWxlX3NldF9rdm1gIGFuZCBga3ZtX3ZmaW9fZmlsZV9hZGRgIChpbiBgdmZpby5jYClcblxuTm93LCBpcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIG9uIHg4Nl82NCwgb3IgaXMgaXQgaXNvbGF0ZWQ/IFRoZSBhbnN3ZXIgaXMgY2xlYXJseSB5ZXMhIEtWTSBhbmQgVkZJTyBhcmUgZm91bmRhdGlvbmFsIHRlY2hub2xvZ2llcy4gV2UncmUgZGVhbGluZyB3aXRoIEtWTSBpb2N0bHMsIHNwZWNpZmljYWxseSB0aG9zZSByZWxhdGVkIHRvIEtWTS1WRklPIGRldmljZSBjcmVhdGlvbiBhbmQgbWFuYWdlbWVudCwgYW5kIFZGSU8gaW9jdGxzL2ZpbGUgZGVzY3JpcHRvcnMgdGhhdCBpbnRlcmFjdCB3aXRoIEtWTS4gV2UgZGVmaW5pdGVseSBjYW4gZ2V0IHRvIHRoaXMuXG5cblRoaW5raW5nIGFib3V0IHRoZSBmdXp6aW5nIHBvdGVudGlhbCwgbGV0J3Mgc2VlIGhvdyB0aGlzIGFsaWducyB3aXRoIHRoZSBjcml0ZXJpYS4gVGhpcyBzZWVtcyB0byBoaXQgb24gc2V2ZXJhbCBwb2ludHMuIFRoaXMgaGFzIHBvdGVudGlhbCwgaXQgZml0cy5cblxuKiAgICoqQ29yZSBTdWJzeXN0ZW1zOioqIE1lbW9yeSBtYW5hZ2VtZW50LCBWRlMsIEtWTSwgVkZJTyBhcmUgdG91Y2hlZC5cbiogICAqKlJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoqKiBZZXMsIHdlJ3JlIHNlZWluZyByZXN0cnVjdHVyaW5nIG9mIGRhdGEgc3RydWN0dXJlcyAoYGt2bWAgYW5kIGBmaWxlYCBzcGVjaWZpY2FsbHkpLCBhbmQgaG93IHRoZXNlIGFyZSBoYW5kbGVkLlxuKiAgICoqUnVudGltZSBhc3NlcnRpb25zIGFuZCBkZWZlbnNpdmUgY2hlY2tzOioqIFRoZSBjaGFuZ2VzIHdpdGggYGdldF9maWxlX2FjdGl2ZWAsIHNwaW5sb2NrcywgYW5kIHRoZSByZWZlcmVuY2UgY291bnRpbmcgY2hhbmdlcyBiZXR3ZWVuIGBzdHJ1Y3QgZmlsZWAgYW5kIGBzdHJ1Y3Qga3ZtYCBsb29rIHByb21pc2luZyBmb3IgZXhwb3Npbmcgc3VidGxlIGJ1Z3MuIFRoaXMgaXMgYSByZWZhY3RvciwgdGhpcyBpcyBhIGNoYW5nZSB0byB0aGUgZnVuZGFtZW50YWwgd2F5IHdlJ3JlIGhhbmRsaW5nIGZpbGUgZGVzY3JpcHRvcnMsIGFuZCBLVk0gY29udGV4dHMuXG5cblNvLCB0aGlzIHBhdGNoIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZy4gTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggS2NvbmZpZyBvcHRpb25zIGFyZSByZXF1aXJlZCB0byBlbmFibGUgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIEknbGwgdXNlIGBncmVwcGVyYCBvciBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgS1ZNIGFuZCBWRklPIHRvIGRldGVybWluZSB0aGUgbmVlZGVkIGNvbmZpZ3VyYXRpb25zLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgY29uZmlndXJhdGlvbnMgZm9yOlxuXG4qICAgS1ZNIChvYnZpb3VzbHkpLlxuKiAgIFZGSU8sIGVzcGVjaWFsbHkgYW55dGhpbmcgcmVsYXRlZCB0byBkZXZpY2UgYXNzaWdubWVudCBhbmQgcGFzc3Rocm91Z2guXG4qICAgQW55dGhpbmcgcmVsYXRpbmcgdG8gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB3ZSdyZSBsb29raW5nIGF0LCBqdXN0IGluIGNhc2UuXG5cbk9uY2UgSSBoYXZlIHRoZSBjb25maWdzIG5haWxlZCBkb3duLCBJIGNhbiBzdGFydCB0aGlua2luZyBhYm91dCBzcGVjaWZpYyBmdXp6aW5nIHRhcmdldHMuIFRoaXMgbG9va3MgdG8gYmUgcmlwZSBmb3IgaW5wdXQgdGhhdCB0cmlnZ2VycyBpb2N0bHMgcmVsYXRlZCB0byBLVk0gZGV2aWNlIGNyZWF0aW9uL21hbmFnZW1lbnQsIGFuZCBhbnl0aGluZyB0aGF0IG1hbmlwdWxhdGVzIGZpbGUgZGVzY3JpcHRvcnMgcmVsYXRlZCB0byBWRklPIGFuZCBLVk0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTYxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MTY6MTEuMjY5ODk4NzIzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0ODI3MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiQ29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTczOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4NC1cXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5My1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTQ6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA3LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTc6Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTgtXFx0Ym9vbCBcXFwiUHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzA6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXHRib29sXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMzpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNC1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjE2OjExLjMzNDczMTcxMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyOTc2MDE5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFZGSU8gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIFZGSU8gY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBkcml2ZXIgb3B0aW9ucyByZXNpZGUuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIG5hdmlnYXRlIHRvIHRoZSBgZHJpdmVycy92ZmlvL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSXQncyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGRlZmluaXRpb24gZm9yIGFsbCB0aGluZ3MgcmVsYXRlZCB0byBWRklPLiBUaGF0IGZpbGUgc2hvdWxkIGRlZmluZSB0aGUgdmFyaW91cyBrbm9icyBhbmQgc3dpdGNoZXMgd2UgaGF2ZSB0byBjb250cm9sIGl0cyBiZWhhdmlvciwgd2hldGhlciBpdCBpcyBlbmFibGVkIGFzIGEgbW9kdWxlLCBidWlsdCBpbiBvciBkaXNhYmxlZC4gRnJvbSB0aGVyZSwgSSBjYW4gdW5kZXJzdGFuZCB3aGljaCBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLCB3aGljaCBkZXBlbmRlbmNpZXMgZXhpc3QsIGFuZCBob3cgdGhlIHZhcmlvdXMgY29tcG9uZW50cyBpbnRlcmFjdCBmcm9tIGEgYnVpbGQgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZS4gVGhpcyBpcyBhIGNyaXRpY2FsIHN0ZXAgYmVmb3JlIGF0dGVtcHRpbmcgYW55IG1vZGlmaWNhdGlvbnMgb3IgdHJvdWJsZXNob290aW5nIGJlY2F1c2UgSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY3VycmVudCBwYXJhbWV0ZXJzIGFuZCBob3cgdGhleSBhcmUgaGFuZGxlZC4gVGhlIEtjb25maWcgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM4NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjE2OjE3LjYzMjMzNjA3NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTE2NjMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZmaW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzoyOm1lbnVjb25maWcgVkZJT1xcbmRyaXZlcnMvdmZpby9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlZGSU8gTm9uLVByaXZpbGVnZWQgdXNlcnNwYWNlIGRyaXZlciBmcmFtZXdvcmtcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz0xNj1pZiBWRklPXFxuZHJpdmVycy92ZmlvL0tjb25maWc6MTc6Y29uZmlnIFZGSU9fREVWSUNFX0NERVZcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0xOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgVkZJTyBjZGV2IC9kZXYvdmZpby9kZXZpY2VzL3ZmaW9YXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctMjgtXFxuZHJpdmVycy92ZmlvL0tjb25maWc6Mjk6Y29uZmlnIFZGSU9fR1JPVVBcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0zMC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgVkZJTyBncm91cCAvZGV2L3ZmaW8vJGdyb3VwX2lkXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctMzgtXFxuZHJpdmVycy92ZmlvL0tjb25maWc6Mzk6Y29uZmlnIFZGSU9fQ09OVEFJTkVSXFxuZHJpdmVycy92ZmlvL0tjb25maWctNDAtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgdGhlIFZGSU8gY29udGFpbmVyIC9kZXYvdmZpby92ZmlvXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWc9NTE9aWYgVkZJT19DT05UQUlORVJcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Mjpjb25maWcgVkZJT19JT01NVV9UWVBFMVxcbmRyaXZlcnMvdmZpby9LY29uZmlnLTUzLVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01NS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Njpjb25maWcgVkZJT19JT01NVV9TUEFQUl9UQ0VcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01Ny1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWc9NjA9ZW5kaWZcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy02MS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo2Mjpjb25maWcgVkZJT19OT0lPTU1VXFxuZHJpdmVycy92ZmlvL0tjb25maWctNjMtXFx0Ym9vbCBcXFwiVkZJTyBOby1JT01NVSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctNzgtXFxuZHJpdmVycy92ZmlvL0tjb25maWc6Nzk6Y29uZmlnIFZGSU9fVklSUUZEXFxuZHJpdmVycy92ZmlvL0tjb25maWctODAtXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctODMtXFxuZHJpdmVycy92ZmlvL0tjb25maWc6ODQ6Y29uZmlnIFZGSU9fREVCVUdGU1xcbmRyaXZlcnMvdmZpby9LY29uZmlnLTg1LVxcdGJvb2wgXFxcIkV4cG9ydCBWRklPIGludGVybmFscyBpbiBEZWJ1Z0ZTXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL2NkeC9LY29uZmlnLTctXFxuZHJpdmVycy92ZmlvL2NkeC9LY29uZmlnOjg6Y29uZmlnIFZGSU9fQ0RYXFxuZHJpdmVycy92ZmlvL2NkeC9LY29uZmlnLTktXFx0dHJpc3RhdGUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgQ0RYIGJ1cyBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnPTE9bWVudSBcXFwiVkZJTyBzdXBwb3J0IGZvciBGU0xfTUMgYnVzIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctMy1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWc6NDpjb25maWcgVkZJT19GU0xfTUNcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctNS1cXHR0cmlzdGF0ZSBcXFwiVkZJTyBzdXBwb3J0IGZvciBRb3JJUSBEUEFBMiBmc2wtbWMgYnVzIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9LY29uZmlnLTItXFxuZHJpdmVycy92ZmlvL21kZXYvS2NvbmZpZzozOmNvbmZpZyBWRklPX01ERVZcXG5kcml2ZXJzL3ZmaW8vbWRldi9LY29uZmlnLTQtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yPW1lbnUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgUENJIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNC1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTpjb25maWcgVkZJT19QQ0lfQ09SRVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy02LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctOS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MTA6Y29uZmlnIFZGSU9fUENJX0lOVFhcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTEtXFx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTEzLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxNDpjb25maWcgVkZJT19QQ0lcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTUtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgUENJIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yMz1pZiBWRklPX1BDSVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoyNDpjb25maWcgVkZJT19QQ0lfVkdBXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIkdlbmVyaWMgVkZJTyBQQ0kgc3VwcG9ydCBmb3IgVkdBIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzMtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjM0OmNvbmZpZyBWRklPX1BDSV9JR0RcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzUtXFx0Ym9vbCBcXFwiR2VuZXJpYyBWRklPIFBDSSBleHRlbnNpb25zIGZvciBJbnRlbCBncmFwaGljcyAoR1ZULWQpXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTQ1PWVuZGlmXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ2LVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo0Nzpjb25maWcgVkZJT19QQ0lfWkRFVl9LVk1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgczM5MHggS1ZNIHBhc3N0aHJvdWdoXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU3LVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo1ODpjb25maWcgVkZJT19QQ0lfRE1BQlVGXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVxcdGRlZl9ib29sIHkgaWYgVkZJT19QQ0lfQ09SRSBcXHUwMDI2XFx1MDAyNiBQQ0lfUDJQRE1BIFxcdTAwMjZcXHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZz0yPW1lbnUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgcGxhdGZvcm0gZGV2aWNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnLTQtXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWc6NTpjb25maWcgVkZJT19QTEFURk9STV9CQVNFXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctNi1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctOC1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZzo5OmNvbmZpZyBWRklPX1BMQVRGT1JNXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctMTAtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgcGxhdGZvcm0gZGV2aWNlXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctMTgtXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWc6MTk6Y29uZmlnIFZGSU9fQU1CQVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnLTIwLVxcdHRyaXN0YXRlIFxcXCJWRklPIHN1cHBvcnQgZm9yIEFNQkEgZGV2aWNlcyAoREVQUkVDQVRFRClcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZz0yPWlmIFZGSU9fUExBVEZPUk1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZzozOmNvbmZpZyBWRklPX1BMQVRGT1JNX0NBTFhFREFYR01BQ19SRVNFVFxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgY2FseGVkYSB4Z21hYyByZXNldCAoREVQUkVDQVRFRClcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy05LVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BMQVRGT1JNX0FNRFhHQkVfUkVTRVRcXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy0xMS1cXHR0cmlzdGF0ZSBcXFwiVkZJTyBzdXBwb3J0IGZvciBBTUQgWEdCRSByZXNldCAoREVQUkVDQVRFRClcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy0xNi1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZzoxNzpjb25maWcgVkZJT19QTEFURk9STV9CQ01GTEVYUk1fUkVTRVRcXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiVkZJTyBzdXBwb3J0IGZvciBCcm9hZGNvbSBGbGV4Uk0gcmVzZXQgKERFUFJFQ0FURUQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDoxNjoxNy43MjM1MDY5OTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjE5MjI1NzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcywgdGhpbmtpbmcgb3V0IGxvdWQ6XG5cbioqRGl2aW5nIGludG8gVkZJTyBhbmQgS1ZNIEludGVyYWN0aW9uKipcblxuUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBWRklPIGFuZCBLVk0gYXJlIHRhbGtpbmcgdG8gZWFjaCBvdGhlciwgYW5kIHdoYXQgdGhlIGtleSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCBhcmUuIEknbGwgc3RhcnQgYnkgZm9jdXNpbmcgb24gYHZpcnQva3ZtL3ZmaW8uY2AuIFRoYXQncyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBmb3IgdGhlIFZGSU8gc2lkZSBvZiB0aGluZ3MuXG5cbk15IG5leHQgbW92ZSBpcyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IGB2aXJ0L2t2bS92ZmlvLmNgIGdldHMgYnVpbHQgaW50byB0aGUga2VybmVsLiBUaGUgTWFrZWZpbGUgd2lsbCBiZSB0aGUga2V5IHRoZXJlLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGJ1aWxkIHByb2Nlc3MgdG8gc2VlIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGFueSByZWxldmFudCBjb21waWxlciBmbGFncyBvciBjb25kaXRpb25zLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgbW9kdWxlIGlzIGluY2x1ZGVkIGludG8gdGhlIGdyZWF0ZXIga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM5NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjE2OjE5Ljk0MjczNjExNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjk5ODcyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL01ha2VmaWxlLmt2bT04PWt2bS15IDo9ICQoS1ZNKS9rdm1fbWFpbi5vICQoS1ZNKS9ldmVudGZkLm8gJChLVk0pL2JpbmFyeV9zdGF0cy5vXFxudmlydC9rdm0vTWFrZWZpbGUua3ZtOjk6a3ZtLSQoQ09ORklHX0tWTV9WRklPKSArPSAkKEtWTSkvdmZpby5vXFxudmlydC9rdm0vTWFrZWZpbGUua3ZtLTEwLWt2bS0kKENPTkZJR19LVk1fTU1JTykgKz0gJChLVk0pL2NvYWxlc2NlZF9tbWlvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MTY6MjAuMDI1NzQ1MDk1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2NzI0NjY2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBDT05GSUdfS1ZNX1ZGSU8gRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBDT05GSUdfS1ZNX1ZGSU9gLiBJdCdzIGEga2V5IHN5bWJvbCwgc28gaXQgc2hvdWxkIGJlIHVzZWQgcHJldHR5IHdpZGVseS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgaG93IGl0J3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgd2hlcmUgYW5kIGhvdyB0aGUgVkZJTyBzdXBwb3J0IGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcuIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGBncmVwYCBvciBtYXliZSBhIG1vcmUgc29waGlzdGljYXRlZCBzZWFyY2ggdGhyb3VnaCB0aGUga2VybmVsJ3Mgc291cmNlIHRyZWUgYW5kIGNvbmZpZyBmaWxlcy4gVGhlIGdvYWwgaXMgdG8gZXN0YWJsaXNoIHRoZSBjb21wbGV0ZSBkZXBlbmRlbmN5IGNoYWluIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBsZWFkIHRvIGl0cyBhY3RpdmF0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgS1ZNIGNvbXBvbmVudHMuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBsYXJnZXIga2VybmVsIGZyYW1ld29yay4gSSdtIHRoaW5raW5nIG9mIGBLY29uZmlnYCBmaWxlcyBhbmQgdGhlaXIgaW5jbHVzaW9uIGhpZXJhcmNoaWVzLiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NzAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDoxNjoyMi4zOTI5OTUzODZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTUyMTI2MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9WRklPXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL0tjb25maWc9NTk9Y29uZmlnIEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctNjEtXFxudmlydC9rdm0vS2NvbmZpZzo2Mjpjb25maWcgS1ZNX1ZGSU9cXG52aXJ0L2t2bS9LY29uZmlnLTYzLSAgICAgICBib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjE2OjI0LjU0ODIxOTgzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NDQ4NDcyMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IFZGSU8gVXNlciBTZWxlY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIGEgY29uY2lzZSBvbmU6IFwiTGV0J3Mgc2VlIHdobyBzZWxlY3RzIEtWTV9WRklPLlwiIEl0IGltbWVkaWF0ZWx5IGJyaW5ncyB0byBtaW5kIGEgc3BlY2lmaWMgc2NlbmFyaW8uIEknbSBsaWtlbHkgdGhpbmtpbmcgYWJvdXQgbW9uaXRvcmluZywgcGVyaGFwcyBhIHN5c3RlbSBjb25maWd1cmF0aW9uLCBhIGRldmVsb3BtZW50IHByb2Nlc3MsIG9yIG1heWJlIGV2ZW4gYSB1c2VyIHN1cnZleS4gVGhlIHRyaWdnZXIgaXMgdGhlIG1lbnRpb24gb2YgS1ZNX1ZGSU8gd2hpY2ggaW1tZWRpYXRlbHkgcGxhY2VzIG1lIGluIHRoZSBjb250ZXh0IG9mIHZpcnR1YWxpemF0aW9uLCBoYXJkd2FyZSBwYXNzdGhyb3VnaCwgYW5kIEkvTyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uXG5cblRoZSBpbXBsaWVkIHF1ZXN0aW9uIGlzLCBcIldobyBpcyBsZXZlcmFnaW5nIFZGSU8gKFZpcnR1YWwgRnVuY3Rpb24gSS9PKSB3aXRoaW4gYSBLVk0gKEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUpIGVudmlyb25tZW50P1wiIFRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBvYnNlcnZhdGlvbjsgaXQncyBhIGRhdGEtZ2F0aGVyaW5nIGV4ZXJjaXNlLiBJJ20gdHJ5aW5nIHRvIGlkZW50aWZ5IGEgc3BlY2lmaWMgZGVtb2dyYXBoaWMgb3IgdXNlciBwcm9maWxlIHJlbGF0ZWQgdG8gYWR2YW5jZWQgdmlydHVhbGl6YXRpb24gdGVjaG5pcXVlcy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZ2FtZXJzLCByZXNlYXJjaGVycyB3b3JraW5nIHdpdGggc3BlY2lhbGl6ZWQgaGFyZHdhcmUsIG9yIHBlcmhhcHMgZW50ZXJwcmlzZSB1c2VycyBjb25zb2xpZGF0aW5nIHdvcmtsb2Fkcz9cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgbGlrZWx5IHRvIGlkZW50aWZ5IHRoZSB1c2UgY2FzZXMgYW5kIHRlY2huaWNhbCBrbm93bGVkZ2UgYmFzZSBzdXJyb3VuZGluZyB0aGUgcGVvcGxlIHRoYXQgYXJlIHVzaW5nIHRoZSBoYXJkd2FyZSBwYXNzLXRocm91Z2ggY2FwYWJpbGl0aWVzIG9mIEtWTV9WRklPLiBJJ20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgYXBwbGljYXRpb25zLCB1bmRlcmx5aW5nIGhhcmR3YXJlLCBhbmQgY29uZmlndXJhdGlvbiBjaG9pY2VzIGJlaW5nIG1hZGUuIEl0IHN1Z2dlc3RzIHRoYXQgdGhlcmUgaXMgYSBkZWZpbmVkIHByb2JsZW0gdG8gc29sdmUgb3IgYSBkYXRhIGFuYWx5c2lzIHByb2plY3QgdG8gcGVyZm9ybS4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgSSBhbSBwcm9iYWJseSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlIGltcGxpY2F0aW9ucyBvZiBzZWxlY3RpbmcgYW5kIGRlcGxveWluZyBWRklPLCBhcyB3ZWxsIGFzIHRoZSBpbXBsaWNhdGlvbnMgb2Ygbm90IGRvaW5nIHNvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA4NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjE2OjI3LjA5MzA2OTg2OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5MTE1MTQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgS1ZNX1ZGSU9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz0yMD1tZW51Y29uZmlnIEtWTVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0yNy1cXHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjI4OlxcdHNlbGVjdCBLVk1fVkZJT1xcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMjktXFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMi1cXHRzZWxlY3QgS1ZNX0NPTU1PTlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMzpcXHRzZWxlY3QgS1ZNX1ZGSU9cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjQtXFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZz0xOT1jb25maWcgS1ZNXFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjktXFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MzA6XFx0c2VsZWN0IEtWTV9WRklPXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTMxLVxcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTQ0LVxcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo0NTpcXHRzZWxlY3QgS1ZNX1ZGSU9cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00Ni1cXHRzZWxlY3QgSEFWRV9LVk1fUE1fTk9USUZJRVIgaWYgUE1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MTY6MjkuNjg0MjI3NTg2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NDE4MDQ2NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gUmV2aWV3IGZvciBLVk0gYW5kIFZGSU8qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSB4ODYga2VybmVsIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBLVk0gYW5kIFZGSU8uIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGF0IGBDT05GSUdfS1ZNX1g4NmAgaW1wbGllcyBgS1ZNX1ZGSU9gLCB3aGljaCBtYWtlcyBzZW5zZTsgdGhleSBvZnRlbiBnbyBoYW5kLWluLWhhbmQgaW4gYSB2aXJ0dWFsaXphdGlvbiBzZXR1cC4gSSdtIG5vdGluZyB0aGF0IGBDT05GSUdfS1ZNYCBhbmQgYENPTkZJR19WRklPYCBhcmUgdGhlIGNvcmUgY29uZmlnIG9wdGlvbnMgaGVyZS5cblxuTm93LCBsZXQncyBhbHNvIGNoZWNrIHRoaXMgYEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR2Agb3B0aW9uIOKAkyB0aGF0J3Mgc29tZXRoaW5nIHdvcnRoIGludmVzdGlnYXRpbmcuIEknbGwgbWFrZSBhIG1lbnRhbCBub3RlIHRvIGZpbmQgdGhhdCBpbiBgYXJjaC94ODYva3ZtL0tjb25maWdgIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyB0aGVyZS4gSSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuLi4gc28gSSBtdXN0IGNoZWNrIHdobyBzZWxlY3RzIGBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3IgZmVhdHVyZXMgcmVseSBvbiB0aGlzLiBUaGlzIGlzIGFsbCBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgS1ZNIGFuZCBWRklPIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODU4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MTY6MzIuMjI2MDM0NjA1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ4OTM2Nzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZz0xMjU9Y29uZmlnIERSTV9JOTE1X0dWVF9LVk1HVFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZy0xMzEtXFx0c2VsZWN0IERSTV9JOTE1X0dWVFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWc6MTMyOlxcdHNlbGVjdCBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmlnLTEzMy1cXHRzZWxlY3QgVkZJT19NREVWXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjE2OjM0LjM3NDk3NjQ4OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjYyNDQ3OTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBLVk0gUGFnZSBUcmFja2luZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcmAgaXMgYWN0dWFsbHkgY29tcGlsZWQgd2l0aGluIHRoZSB4ODYgS1ZNIGNvZGUuIFRoaXMgZnVuY3Rpb24gaXMgcHJldHR5IGNyaXRpY2FsIGZvciB0cmFja2luZyBwYWdlIG1vZGlmaWNhdGlvbnMsIHNvIGtub3dpbmcgaXRzIGJ1aWxkIGxvY2F0aW9uIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGhvdyBpdCdzIGludGVncmF0ZWQgaW50byB0aGUgbGFyZ2VyIEtWTSBhcmNoaXRlY3R1cmUuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgYXJjaC94ODYva3ZtL01ha2VmaWxlYC4gVGhhdCBmaWxlIHNob3VsZCBvcmNoZXN0cmF0ZSB0aGUgYnVpbGQgb2YgYWxsIHRoZSByZWxldmFudCBLVk0gY29tcG9uZW50cyBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoZXJlIHRoYXQgbm90aWZpZXIgcmVnaXN0cmF0aW9uIGlzIGFjdHVhbGx5IGJyb3VnaHQgaW50byB0aGUgcGljdHVyZS4gRmluZGluZyBpdCdzIGJ1aWxkIHJ1bGUgc2hvdWxkIGlsbHVtaW5hdGUgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgcmVzdCBvZiB0aGUgS1ZNIGluZnJhc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzMxNywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjE2OjM2LjYzNzQyNjM0MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkxNjMzNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV90cmFja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL01ha2VmaWxlPTg9a3ZtLXlcXHRcXHRcXHQrPSB4ODYubyBlbXVsYXRlLm8gaXJxLm8gbGFwaWMubyBjcHVpZC5vIG1zcnMubyBwbXUubyByZWdzLm8gXFxcXFxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZTo5OlxcdFxcdFxcdCAgIG10cnIubyBkZWJ1Z2ZzLm8gbW11L21tdS5vIG1tdS9wYWdlX3RyYWNrLm8gbW11L3NwdGUub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xMC1cXG4tLVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZT01OT1leHBvcnRzX2dyZXBfdHJhaWxlciA6PSAtLWluY2x1ZGU9JyouW2NoXScgLW5ydyAkKHNyY3RyZWUpL3ZpcnQva3ZtICQoc3JjdHJlZSkvYXJjaC94ODYva3ZtIHwgXFxcXFxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZTo2MDpcXHRcXHRcXHRncmVwIC12IC1lIGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyIFxcXFxcXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6NjE6XFx0XFx0XFx0XFx0LWUga3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllciBcXFxcXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTYyLVxcdFxcdFxcdFxcdC1lIGt2bV93cml0ZV90cmFja19hZGRfZ2ZuIFxcXFxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMjctI2luY2x1ZGUgXFxcImt2bV9lbXVsYXRlLmhcXFwiXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoyODojaW5jbHVkZSBcXFwicGFnZV90cmFjay5oXFxcIlxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMjktI2luY2x1ZGUgXFxcImNwdWlkLmhcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQwNjA9c3RhdGljIGludCBtbXVfZmlyc3Rfc2hhZG93X3Jvb3RfYWxsb2Moc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00MDg3LVxcdGlmIChrdm1fbWVtc2xvdHNfaGF2ZV9ybWFwcyhrdm0pIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0MDg4OlxcdCAgICBrdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19lbmFibGVkKGt2bSkpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00MDg5LVxcdFxcdGdvdG8gb3V0X3N1Y2Nlc3M7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQxMDYtXFx0XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDEwNzpcXHRcXHRcXHRyID0ga3ZtX3BhZ2VfdHJhY2tfd3JpdGVfdHJhY2tpbmdfYWxsb2Moc2xvdCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00MTA4LVxcdFxcdFxcdGlmIChyKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NTIwPXN0YXRpYyBpbnQgaGFuZGxlX21taW9fcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBhZGRyLCBib29sIGRpcmVjdClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDU1My1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ1NTQ6c3RhdGljIGJvb2wgcGFnZV9mYXVsdF9oYW5kbGVfcGFnZV90cmFjayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTU1LVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00ODQwPXN0YXRpYyBpbnQgZGlyZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00ODQ3LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDg0ODpcXHRpZiAocGFnZV9mYXVsdF9oYW5kbGVfcGFnZV90cmFjayh2Y3B1LCBmYXVsdCkpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00ODQ5LVxcdFxcdHJldHVybiBSRVRfUEZfV1JJVEVfUFJPVEVDVEVEO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00OTM1PXN0YXRpYyBpbnQga3ZtX3RkcF9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ5MzktXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0OTQwOlxcdGlmIChwYWdlX2ZhdWx0X2hhbmRsZV9wYWdlX3RyYWNrKHZjcHUsIGZhdWx0KSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ5NDEtXFx0XFx0cmV0dXJuIFJFVF9QRl9XUklURV9QUk9URUNURUQ7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yMC0jaW5jbHVkZSBcXFwibW11X2ludGVybmFsLmhcXFwiXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MjE6I2luY2x1ZGUgXFxcInBhZ2VfdHJhY2suaFxcXCJcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yMi1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYz0yMz1zdGF0aWMgYm9vbCBrdm1fZXh0ZXJuYWxfd3JpdGVfdHJhY2tpbmdfZW5hYmxlZChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yNy1cXHQgKiBSZWFkIGV4dGVybmFsX3dyaXRlX3RyYWNraW5nX2VuYWJsZWQgYmVmb3JlIHJlbGF0ZWQgcG9pbnRlcnMuICBQYWlyc1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI4OlxcdCAqIHdpdGggdGhlIHNtcF9zdG9yZV9yZWxlYXNlIGluIGt2bV9wYWdlX3RyYWNrX3dyaXRlX3RyYWNraW5nX2VuYWJsZSgpLlxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTI5LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMzUtXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MzY6Ym9vbCBrdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19lbmFibGVkKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0zNy17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy00MS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzo0Mjp2b2lkIGt2bV9wYWdlX3RyYWNrX2ZyZWVfbWVtc2xvdChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTQzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTQ3LVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjQ4OnN0YXRpYyBpbnQgX19rdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19hbGxvYyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTQ5LVxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIG5wYWdlcylcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTU5LVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjYwOmludCBrdm1fcGFnZV90cmFja19jcmVhdGVfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtNjEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtNjMte1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjY0OlxcdGlmICgha3ZtX3BhZ2VfdHJhY2tfd3JpdGVfdHJhY2tpbmdfZW5hYmxlZChrdm0pKVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTY1LVxcdFxcdHJldHVybiAwO1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTY2LVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjY3OlxcdHJldHVybiBfX2t2bV9wYWdlX3RyYWNrX3dyaXRlX3RyYWNraW5nX2FsbG9jKHNsb3QsIG5wYWdlcyk7XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtNjgtfVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTY5LVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjcwOmludCBrdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19hbGxvYyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTcxLXtcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzo3MjpcXHRyZXR1cm4gX19rdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19hbGxvYyhzbG90LCBzbG90LVxcdTAwM2VucGFnZXMpO1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTczLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jPTkwPXZvaWQgX19rdm1fd3JpdGVfdHJhY2tfYWRkX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy05Ny1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzo5ODpcXHRpZiAoS1ZNX0JVR19PTigha3ZtX3BhZ2VfdHJhY2tfd3JpdGVfdHJhY2tpbmdfZW5hYmxlZChrdm0pLCBrdm0pKVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTk5LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jPTExMz12b2lkIF9fa3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4oc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTIwLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjEyMTpcXHRpZiAoS1ZNX0JVR19PTigha3ZtX3BhZ2VfdHJhY2tfd3JpdGVfdHJhY2tpbmdfZW5hYmxlZChrdm0pLCBrdm0pKVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTEyMi1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYz0xNDY9Ym9vbCBrdm1fZ2ZuX2lzX3dyaXRlX3RyYWNrZWQoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTUzLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjE1NDpcXHRpZiAoIWt2bV9wYWdlX3RyYWNrX3dyaXRlX3RyYWNraW5nX2VuYWJsZWQoa3ZtKSlcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0xNTUtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTcxLSNpZmRlZiBDT05GSUdfS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MTcyOnZvaWQga3ZtX3BhZ2VfdHJhY2tfY2xlYW51cChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTczLXtcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoxNzQ6XFx0c3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX2hlYWQgKmhlYWQ7XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTc1LVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTc5LVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjE4MDppbnQga3ZtX3BhZ2VfdHJhY2tfaW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTgxLXtcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoxODI6XFx0c3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX2hlYWQgKmhlYWQ7XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTgzLVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM9MTg5PXN0YXRpYyBpbnQga3ZtX2VuYWJsZV9leHRlcm5hbF93cml0ZV90cmFja2luZyhzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yMDQtXFx0ICovXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MjA1OlxcdGlmIChrdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19lbmFibGVkKGt2bSkpXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMjA2LVxcdFxcdGdvdG8gb3V0X3N1Y2Nlc3M7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yMTgtXFx0XFx0XFx0ICovXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MjE5OlxcdFxcdFxcdHIgPSBrdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19hbGxvYyhzbG90KTtcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yMjAtXFx0XFx0XFx0aWYgKHIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yMzktICovXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MjQwOmludCBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoyNDE6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbilcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yNDIte1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI0MzpcXHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfaGVhZCAqaGVhZDtcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yNDQtXFx0c3RydWN0IGt2bSAqa3ZtID0gZmlsZV90b19rdm0oZmlsZSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yNjQtfVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI2NTpFWFBPUlRfU1lNQk9MX0dQTChrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcik7XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMjY2LVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMjY4LSAqIHN0b3AgcmVjZWl2aW5nIHRoZSBldmVudCBpbnRlcmNlcHRpb24uIEl0IGlzIHRoZSBvcHBvc2VkIG9wZXJhdGlvbiBvZlxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI2OTogKiBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcigpLlxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTI3MC0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoyNzE6dm9pZCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLFxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI3MjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbilcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yNzMte1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI3NDpcXHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfaGVhZCAqaGVhZDtcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yNzUtXFx0c3RydWN0IGt2bSAqa3ZtID0gZmlsZV90b19rdm0oZmlsZSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yODUtfVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI4NjpFWFBPUlRfU1lNQk9MX0dQTChrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKTtcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yODctXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yOTQtICovXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6Mjk1OnZvaWQgX19rdm1fcGFnZV90cmFja193cml0ZShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgY29uc3QgdTggKm5ldywgaW50IGJ5dGVzKVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTI5Ni17XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6Mjk3OlxcdHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9oZWFkICpoZWFkO1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI5ODpcXHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbjtcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yOTktXFx0aW50IGlkeDtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTMxNy0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzozMTg6dm9pZCBrdm1fcGFnZV90cmFja19kZWxldGVfc2xvdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMzE5LXtcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzozMjA6XFx0c3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX2hlYWQgKmhlYWQ7XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MzIxOlxcdHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpuO1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTMyMi1cXHRpbnQgaWR4O1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtNi1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaDo3OiNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX3BhZ2VfdHJhY2suaFxcdTAwM2VcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaC04LVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTktXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6MTA6Ym9vbCBrdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19lbmFibGVkKHN0cnVjdCBrdm0gKmt2bSk7XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6MTE6aW50IGt2bV9wYWdlX3RyYWNrX3dyaXRlX3RyYWNraW5nX2FsbG9jKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpO1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTEyLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oOjEzOnZvaWQga3ZtX3BhZ2VfdHJhY2tfZnJlZV9tZW1zbG90KHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpO1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oOjE0OmludCBrdm1fcGFnZV90cmFja19jcmVhdGVfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtMTUtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg9MjM9Ym9vbCBrdm1fZ2ZuX2lzX3dyaXRlX3RyYWNrZWQoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtMjYtI2lmZGVmIENPTkZJR19LVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaDoyNzppbnQga3ZtX3BhZ2VfdHJhY2tfaW5pdChzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oOjI4OnZvaWQga3ZtX3BhZ2VfdHJhY2tfY2xlYW51cChzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTI5LVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oOjMwOnZvaWQgX19rdm1fcGFnZV90cmFja193cml0ZShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgY29uc3QgdTggKm5ldywgaW50IGJ5dGVzKTtcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaDozMTp2b2lkIGt2bV9wYWdlX3RyYWNrX2RlbGV0ZV9zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCk7XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtMzItXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6MzM6c3RhdGljIGlubGluZSBib29sIGt2bV9wYWdlX3RyYWNrX2hhc19leHRlcm5hbF91c2VyKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaC0zNC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaC0zNy0jZWxzZVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oOjM4OnN0YXRpYyBpbmxpbmUgaW50IGt2bV9wYWdlX3RyYWNrX2luaXQoc3RydWN0IGt2bSAqa3ZtKSB7IHJldHVybiAwOyB9XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6Mzk6c3RhdGljIGlubGluZSB2b2lkIGt2bV9wYWdlX3RyYWNrX2NsZWFudXAoc3RydWN0IGt2bSAqa3ZtKSB7IH1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaC00MC1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaDo0MTpzdGF0aWMgaW5saW5lIHZvaWQgX19rdm1fcGFnZV90cmFja193cml0ZShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSxcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaC00Mi1cXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHU4ICpuZXcsIGludCBieXRlcykgeyB9XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6NDM6c3RhdGljIGlubGluZSB2b2lkIGt2bV9wYWdlX3RyYWNrX2RlbGV0ZV9zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaC00NC1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KSB7IH1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaC00NS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaDo0NjpzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3BhZ2VfdHJhY2tfaGFzX2V4dGVybmFsX3VzZXIoc3RydWN0IGt2bSAqa3ZtKSB7IHJldHVybiBmYWxzZTsgfVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTQ3LVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtNDktXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6NTA6c3RhdGljIGlubGluZSB2b2lkIGt2bV9wYWdlX3RyYWNrX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTUxLVxcdFxcdFxcdFxcdFxcdGNvbnN0IHU4ICpuZXcsIGludCBieXRlcylcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaC01Mi17XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6NTM6XFx0X19rdm1fcGFnZV90cmFja193cml0ZSh2Y3B1LVxcdTAwM2Vrdm0sIGdwYSwgbmV3LCBieXRlcyk7XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtNTQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmg9ODA0PXN0YXRpYyBpbnQgRk5BTUUocGFnZV9mYXVsdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oLTgzMi1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmg6ODMzOlxcdGlmIChwYWdlX2ZhdWx0X2hhbmRsZV9wYWdlX3RyYWNrKHZjcHUsIGZhdWx0KSkge1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaC04MzQtXFx0XFx0c2hhZG93X3BhZ2VfdGFibGVfY2xlYXJfZmxvb2QodmNwdSwgZmF1bHQtXFx1MDAzZWFkZHIpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTI3LSNpbmNsdWRlIFxcXCJrdm1fZW11bGF0ZS5oXFxcIlxcbmFyY2gveDg2L2t2bS94ODYuYzoyODojaW5jbHVkZSBcXFwibW11L3BhZ2VfdHJhY2suaFxcXCJcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjktI2luY2x1ZGUgXFxcIng4Ni5oXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTUwNjE9c3RhdGljIGludCBlbXVsYXRvcl93cml0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01MDY4LVxcdFxcdHJldHVybiAwO1xcbmFyY2gveDg2L2t2bS94ODYuYzo1MDY5OlxcdGt2bV9wYWdlX3RyYWNrX3dyaXRlKHZjcHUsIGdwYSwgdmFsLCBieXRlcyk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUwNzAtXFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTI2MD1zdGF0aWMgaW50IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTMzMi1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTMzMzpcXHRrdm1fcGFnZV90cmFja193cml0ZSh2Y3B1LCBncGEsIG5ldywgYnl0ZXMpO1xcbmFyY2gveDg2L2t2bS94ODYuYy01MzM0LVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTk4NDM9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTg1OC1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTg1OTpcXHRyZXQgPSBrdm1fcGFnZV90cmFja19pbml0KGt2bSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk4NjAtXFx0aWYgKHJldClcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy05ODY0LVxcdGlmIChyZXQpXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjk4NjU6XFx0XFx0Z290byBvdXRfY2xlYW51cF9wYWdlX3RyYWNrO1xcbmFyY2gveDg2L2t2bS94ODYuYy05ODY2LVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MDktXFx0a3ZtX21tdV91bmluaXRfdm0oa3ZtKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTkxMDpvdXRfY2xlYW51cF9wYWdlX3RyYWNrOlxcbmFyY2gveDg2L2t2bS94ODYuYzo5OTExOlxcdGt2bV9wYWdlX3RyYWNrX2NsZWFudXAoa3ZtKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkxMi1vdXQ6XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTAwMTQ9dm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDA0MC1cXHRrdm1fbW11X3VuaW5pdF92bShrdm0pO1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMDA0MTpcXHRrdm1fcGFnZV90cmFja19jbGVhbnVwKGt2bSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDQyLVxcdGt2bV94ZW5fZGVzdHJveV92bShrdm0pO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwMDU3PXZvaWQga3ZtX2FyY2hfZnJlZV9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDA2Ny1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwNjg6XFx0a3ZtX3BhZ2VfdHJhY2tfZnJlZV9tZW1zbG90KHNsb3QpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMDA2OS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTAwOTM9c3RhdGljIGludCBrdm1fYWxsb2NfbWVtc2xvdF9tZXRhZGF0YShzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxNDYtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMTQ3OlxcdGlmIChrdm1fcGFnZV90cmFja19jcmVhdGVfbWVtc2xvdChrdm0sIHNsb3QsIG5wYWdlcykpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMTQ4LVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTAxNzg9aW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxODYtXFx0ICovXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMTg3OlxcdGlmIChjaGFuZ2UgPT0gS1ZNX01SX01PVkUgXFx1MDAyNlxcdTAwMjYga3ZtX3BhZ2VfdHJhY2tfaGFzX2V4dGVybmFsX3VzZXIoa3ZtKSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxODgtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTAzMzg9dm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAzNDMtXFx0aWYgKGNoYW5nZSA9PSBLVk1fTVJfREVMRVRFKVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMDM0NDpcXHRcXHRrdm1fcGFnZV90cmFja19kZWxldGVfc2xvdChrdm0sIG9sZCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMzQ1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDoxNjozNi43MTY1OTYxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNjYwNzM0Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTS1WRklPIEludGVncmF0aW9uOiBBIENvbmN1cnJlbmN5IERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgdG91Y2hlcyBLVk0gYW5kIFZGSU8sIGFuZCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBob3cgS1ZNIFZNcyBhbmQgVkZJTyBkZXZpY2VzIGFyZSBsaW5rZWQgYXQgdGhlIGZpbGUgZGVzY3JpcHRvciBsZXZlbC4gSSdtIGZvY3VzaW5nIG9uIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIHNwZWNpZmljYWxseSwgZ2l2ZW4gdGhlIGluaXRpYWwgY29udGV4dCBvZiBgcGFnZV90cmFjay5jYC5cblxuRmlyc3QsIEkgc2VlIHRoZSBgcGFnZV90cmFjay5jYCBjaGFuZ2VzIGludHJvZHVjZSBmaWxlLWJhc2VkIG5vdGlmaWVyIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhhdCBtZWFucyB0aGUgb2xkIEtWTSBzdHJ1Y3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHVzZWQuIFRoaXMgc2lnbmFscyBhIHNoaWZ0IHRvd2FyZHMgZmlsZS1kZXNjcmlwdG9yLWJhc2VkIG9wZXJhdGlvbnMuXG5cbkRpdmluZyBpbnRvIHRoZSBkaWZmLCBJIG5vdGUgdGhlIHBlcnZhc2l2ZSBjaGFuZ2UgZnJvbSB1c2luZyBgc3RydWN0IGt2bSAqYCBmb3IgcmVwcmVzZW50aW5nIHRoZSBLVk0gdG8gdXNpbmcgYHN0cnVjdCBmaWxlICpgLCB0aHJvdWdob3V0IHRoZSBWRklPIGFuZCBLVk0gY29kZS4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgc2hpZnQuIEtleSBmdW5jdGlvbnMgbGlrZSBga3ZtX3BhZ2VfdHJhY2tfKmAsIGB2ZmlvX2dyb3VwX3NldF9rdm1gLCBhbmQgc2V2ZXJhbCBWRklPIGRldmljZS9ncm91cCBvcGVyYXRpb25zIGFyZSBhbGwgcmVmYWN0b3JlZCB0byB3b3JrIHdpdGggYHN0cnVjdCBmaWxlICpgIGFuZCB1c2UgZmlsZSBvcGVyYXRpb25zLiBUaGUgdXNhZ2Ugb2YgYGdldF9maWxlYCBhbmQgYGZwdXRgIGluIHBsYWNlIG9mIGBrdm1fZ2V0X2t2bWAgYW5kIGBrdm1fcHV0X2t2bWAgaXMgdGhlIGNyaXRpY2FsIHBpZWNlIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgY29uY3VycmVuY3kgaW1wbGljYXRpb25zLiBLVk0tVkZJTyBpcyBhIGNsYXNzaWMgZXhhbXBsZSBvZiBjb21wbGV4IHJlc291cmNlIG1hbmFnZW1lbnQgaW52b2x2aW5nIHJlZmNvdW50aW5nLiBUaGUgY29kZSBub3cgbGlua3MgYSBWRklPIGRldmljZS9ncm91cCB0byBhIEtWTSBmaWxlIHRocm91Z2ggYGdldF9maWxlYCBhbmQgYGZwdXRgLiBUaGlzIHN1Z2dlc3RzIGEgcmFjZSBjb25kaXRpb24gaXMgcG9zc2libGUgYmV0d2VlbiB0aGUgY2xvc3VyZSBvZiB0aGUgVk0gZmlsZSBhbmQgdGhlIFZGSU8gb3BlcmF0aW9ucyBvciBga3ZtX3ZmaW9fZmlsZV9hZGRgLiBJIHNlZSBpbiBga3ZtX2hvc3QuaGAgYSBjb21tZW50IHRoYXQgZGVzY3JpYmVzIGEgbWVjaGFuaXNtIHZpYSBgZ2V0X2ZpbGVfYWN0aXZlYCB0byBwcmV2ZW50IHBpbm5pbmcgb2YgdGhlIFZNLCB3aGljaCBzdXBwb3J0cyBteSBjdXJyZW50IHN1c3BpY2lvbiB0aGF0IHRoaXMgYXJlYSBpcyBwcm9uZSB0byB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBUaGVzZSBhcmUgdGV4dGJvb2sgaW5kaWNhdG9ycyBvZiBwb3NzaWJsZSBjb25jdXJyZW5jeSBidWdzLCByZWZjb3VudCBpbmNvbnNpc3RlbmNpZXMsIGFuZCBwb3RlbnRpYWwgZGVhZGxvY2tzLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCB0byBmdXp6aW5nIVxuXG5Ob3csIHRoZSBzeW1ib2wgc2VsZWN0aW9uIGZvciBkZWVwZXIgdGVzdGluZy4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZS5cblxuSGVyZSdzIG15IHJlZmluZWQgbGlzdCBvZiBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZnJvbSB0aGUgZGlmZjpcbiogICBga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm1gIChiZWNhdXNlIGl0J3MgdGhlIHN0YXJ0IHBvaW50KVxuKiAgIGBrdm1fdm1fcmVsZWFzZWAgKGNyaXRpY2FsIGVuZHBvaW50IGZvciByZXNvdXJjZSBjbGVhbnVwKVxuKiAgIGBmaWxlX3RvX2t2bWAgKGEgY3JpdGljYWwgYmFja2xpbmshKVxuKiAgIGBrdm1fdmZpb19maWxlX2FkZGAgYW5kIGBrdm1fdmZpb19maWxlX3NldF9rdm1gIChWRklPIGludGVncmF0aW9uIGVudHJ5KVxuKiAgIGB2ZmlvX2ZpbGVfc2V0X2t2bWAgKGNvcmUgVkZJTyBkZXZpY2UgbGluayB0byBLVk0pXG4qICAgYHZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZWAgYW5kIGB2ZmlvX2RldmljZV9wdXRfa3ZtYCAoVkZJTyBkZXZpY2UgZnVuY3Rpb25zKVxuKiAgIGB2ZmlvX2dyb3VwX3NldF9rdm1gIChWRklPIGdyb3VwIGxpbmtpbmcpXG4qICAgYGt2bV9wYWdlX3RyYWNrXypgICh4ODYgc3BlY2lmaWMpXG5cbkl0J3MgY2xlYXIgdGhhdCB0aGUgZmlsZS1kZXNjcmlwdG9yIGhhbmRsaW5nIGZ1bmN0aW9ucyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50LiBUaGUgdXNhZ2Ugb2YgYGZpbGVfdG9fa3ZtYCBtYWtlcyBpdCBhIGNyaXRpY2FsIHN5bWJvbCBmb3IgYW55IGFuYWx5c2lzLlxuXG5PbiBjb25maWd1cmF0aW9uLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYEtWTWAsIGBWRklPYCwgYFZGSU9fR1JPVVBgLCBgVkZJT19ERVZJQ0VfQ0RFVmAsIGBWRklPX0NPTlRBSU5FUmAsIGBLVk1fVkZJT2AsIGFuZCBgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HYCBhcmUgc2V0LiBJJ2xsIGRvdWJsZS1jaGVjayBgZHJpdmVycy92ZmlvL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi5cblxuTXkgb3ZlcmFsbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaHNldCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyBkdWUgdG8gdGhlIGZpbGUgcmVmY291bnRpbmcgYW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBLVk0gYW5kIFZGSU8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTI0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDoxNjo0Ny4zNzczMzQxOTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmZpby9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51Y29uZmlnIFZGSU9cXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJWRklPIE5vbi1Qcml2aWxlZ2VkIHVzZXJzcGFjZSBkcml2ZXIgZnJhbWV3b3JrXFxcIlxcbiAgIDQ6XFx0XFx0c2VsZWN0IElPTU1VX0FQSVxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBJT01NVUZEIHx8ICFJT01NVUZEXFxuICAgNjpcXHRcXHRzZWxlY3QgSU5URVJWQUxfVFJFRVxcbiAgIDc6XFx0XFx0c2VsZWN0IFZGSU9fR1JPVVAgaWYgU1BBUFJfVENFX0lPTU1VIHx8IElPTU1VRkQ9blxcbiAgIDg6XFx0XFx0c2VsZWN0IFZGSU9fREVWSUNFX0NERVYgaWYgIVZGSU9fR1JPVVBcXG4gICA5OlxcdFxcdHNlbGVjdCBWRklPX0NPTlRBSU5FUiBpZiBJT01NVUZEPW5cXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgVkZJTyBwcm92aWRlcyBhIGZyYW1ld29yayBmb3Igc2VjdXJlIHVzZXJzcGFjZSBkZXZpY2UgZHJpdmVycy5cXG4gIDEyOlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vZHJpdmVyLWFwaS92ZmlvLnJzdCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IE4uXFxuICAxNTpcXHRcXG4gIDE2OlxcdGlmIFZGSU9cXG4gIDE3OlxcdGNvbmZpZyBWRklPX0RFVklDRV9DREVWXFxuICAxODpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgVkZJTyBjZGV2IC9kZXYvdmZpby9kZXZpY2VzL3ZmaW9YXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBJT01NVUZEIFxcdTAwMjZcXHUwMDI2ICFTUEFQUl9UQ0VfSU9NTVVcXG4gIDIwOlxcdFxcdGRlZmF1bHQgIVZGSU9fR1JPVVBcXG4gIDIxOlxcdFxcdGhlbHBcXG4gIDIyOlxcdFxcdCAgVGhlIFZGSU8gZGV2aWNlIGNkZXYgaXMgYW5vdGhlciB3YXkgZm9yIHVzZXJzcGFjZSB0byBnZXQgZGV2aWNlXFxuICAyMzpcXHRcXHQgIGFjY2Vzcy4gVXNlcnNwYWNlIGdldHMgZGV2aWNlIGZkIGJ5IG9wZW5pbmcgZGV2aWNlIGNkZXYgdW5kZXJcXG4gIDI0OlxcdFxcdCAgL2Rldi92ZmlvL2RldmljZXMvdmZpb1gsIGFuZCB0aGVuIGJpbmQgdGhlIGRldmljZSBmZCB3aXRoIGFuIGlvbW11ZmRcXG4gIDI1OlxcdFxcdCAgdG8gc2V0IHVwIHNlY3VyZSBETUEgY29udGV4dCBmb3IgZGV2aWNlIGFjY2Vzcy5cXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0ICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRjb25maWcgVkZJT19HUk9VUFxcbiAgMzA6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgdGhlIFZGSU8gZ3JvdXAgL2Rldi92ZmlvLyRncm91cF9pZFxcXCJcXG4gIDMxOlxcdFxcdGRlZmF1bHQgeVxcbiAgMzI6XFx0XFx0aGVscFxcbiAgMzM6XFx0XFx0ICAgVkZJTyBncm91cCBzdXBwb3J0IHByb3ZpZGVzIHRoZSB0cmFkaXRpb25hbCBtb2RlbCBmb3IgYWNjZXNzaW5nXFxuICAzNDpcXHRcXHQgICBkZXZpY2VzIHRocm91Z2ggVkZJTyBhbmQgaXMgdXNlZCBieSB0aGUgbWFqb3JpdHkgb2YgdXNlcnNwYWNlXFxuICAzNTpcXHRcXHQgICBhcHBsaWNhdGlvbnMgYW5kIGRyaXZlcnMgbWFraW5nIHVzZSBvZiBWRklPLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBZLlxcbiAgMzg6XFx0XFxuICAzOTpcXHRjb25maWcgVkZJT19DT05UQUlORVJcXG4gIDQwOlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHRoZSBWRklPIGNvbnRhaW5lciAvZGV2L3ZmaW8vdmZpb1xcXCJcXG4gIDQxOlxcdFxcdHNlbGVjdCBWRklPX0lPTU1VX1RZUEUxIGlmIE1NVSBcXHUwMDI2XFx1MDAyNiAoWDg2IHx8IFMzOTAgfHwgQVJNIHx8IEFSTTY0KVxcbiAgNDI6XFx0XFx0ZGVwZW5kcyBvbiBWRklPX0dST1VQXFxuICA0MzpcXHRcXHRkZWZhdWx0IHlcXG4gIDQ0OlxcdFxcdGhlbHBcXG4gIDQ1OlxcdFxcdCAgVGhlIFZGSU8gY29udGFpbmVyIGlzIHRoZSBjbGFzc2ljIGludGVyZmFjZSB0byBWRklPIGZvciBlc3RhYmxpc2hpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MTY6NDcuMzc3NDUyMTQ5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMzA3Mzk3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgS1ZNIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSBhbmQsIG1vcmUgcHJlY2lzZWx5LCB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBgYXJjaC94ODYva3ZtYCBkaXJlY3RvcnkuIEkgd2FudCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gS1ZNIGJlaGF2aW9yLiBJJ20gdGhpbmtpbmcgYWJvdXQgS1ZNIGdlbmVyYWxseSwgb2YgY291cnNlLCBidXQgcGFydGljdWxhcmx5IEknbSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcnBsYXkgYW5kIHNwZWNpZmljIHNldHRpbmdzIGFyb3VuZCBgS1ZNX0lOVEVMYCBhbmQgYEtWTV9BTURgLiBUaGVzZSBhcmUgdGhlIGtleSB0b2dnbGVzIGZvciBJbnRlbCBhbmQgQU1EIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCBiZXR3ZWVuIHRoZW0sIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJyb2FkZXIgS1ZNIGZlYXR1cmUgc2V0LiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIGEgc3BlY2lmaWMgZGV0YWlsIEkgYW0gbG9va2luZyBmb3IgcmVnYXJkaW5nIGEgc3BlY2lmaWMgZmVhdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgxNTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjE2OjQ5LjYwODE5NDY5MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxODpcXHRpZiBWSVJUVUFMSVpBVElPTlxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgS1ZNX1g4NlxcbiAgMjE6XFx0XFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbiAgMjI6XFx0XFx0c2VsZWN0IEtWTV9DT01NT05cXG4gIDIzOlxcdFxcdHNlbGVjdCBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXFxuICAyNDpcXHRcXHRzZWxlY3QgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xcbiAgMjU6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcXG4gIDI2OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRVxcbiAgMjc6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfVFNPXFxuICAyODpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXFxuICAyOTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fSVJRX0JZUEFTU1xcbiAgMzA6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9ST1VUSU5HXFxuICAzMTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXFxuICAzMjpcXHRcXHRzZWxlY3QgVkhPU1RfVEFTS1xcbiAgMzM6XFx0XFx0c2VsZWN0IEtWTV9BU1lOQ19QRlxcbiAgMzQ6XFx0XFx0c2VsZWN0IFVTRVJfUkVUVVJOX05PVElGSUVSXFxuICAzNTpcXHRcXHRzZWxlY3QgS1ZNX01NSU9cXG4gIDM2OlxcdFxcdHNlbGVjdCBTQ0hFRF9JTkZPXFxuICAzNzpcXHRcXHRzZWxlY3QgUEVSRl9FVkVOVFNcXG4gIDM4OlxcdFxcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UU1xcbiAgMzk6XFx0XFx0c2VsZWN0IFBFUkZfR1VFU1RfTUVESUFURURfUE1VXFxuICA0MDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fTVNJXFxuICA0MTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxcbiAgNDI6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcXG4gIDQzOlxcdFxcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xcbiAgNDQ6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxcbiAgNDU6XFx0XFx0c2VsZWN0IEtWTV9WRklPXFxuICA0NjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUE1fTk9USUZJRVIgaWYgUE1cXG4gIDQ3OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xcbiAgNDg6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG4gIDQ5OlxcdFxcdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxcbiAgNTA6XFx0XFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCBpZiBYODZfNjRcXG4gIDUxOlxcdFxcbiAgNTI6XFx0Y29uZmlnIEtWTVxcbiAgNTM6XFx0XFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4gIDU0OlxcdFxcdGRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUNcXG4gIDU1OlxcdFxcdGhlbHBcXG4gIDU2OlxcdFxcdCAgU3VwcG9ydCBob3N0aW5nIGZ1bGx5IHZpcnR1YWxpemVkIGd1ZXN0IG1hY2hpbmVzIHVzaW5nIGhhcmR3YXJlXFxuICA1NzpcXHRcXHQgIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuICBZb3Ugd2lsbCBuZWVkIGEgZmFpcmx5IHJlY2VudFxcbiAgNTg6XFx0XFx0ICBwcm9jZXNzb3IgZXF1aXBwZWQgd2l0aCB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiBZb3Ugd2lsbCBhbHNvXFxuICA1OTpcXHRcXHQgIG5lZWQgdG8gc2VsZWN0IG9uZSBvciBtb3JlIG9mIHRoZSBwcm9jZXNzb3IgbW9kdWxlcyBiZWxvdy5cXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0aHJvdWdoXFxuICA2MjpcXHRcXHQgIGEgY2hhcmFjdGVyIGRldmljZSBub2RlIG5hbWVkIC9kZXYva3ZtLlxcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgNjU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0uXFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDY4OlxcdFxcbiAgNjk6XFx0Y29uZmlnIEtWTV9XRVJST1JcXG4gIDcwOlxcdFxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4gIDcxOlxcdFxcdCMgRGlzYWxsb3cgS1ZNJ3MgLVdlcnJvciBpZiBLQVNBTiBpcyBlbmFibGVkLCBlLmcuIHRvIGd1YXJkIGFnYWluc3RcXG4gIDcyOlxcdFxcdCMgcmFuZG9taXplZCBjb25maWdzIGZyb20gc2VsZWN0aW5nIEtWTV9XRVJST1I9eSwgd2hpY2ggZG9lc24ndCBwbGF5XFxuICA3MzpcXHRcXHQjIG5pY2Ugd2l0aCBLQVNBTi4gIEtBU0FOIGJ1aWxkcyBnZW5lcmF0ZXMgd2FybmluZ3MgZm9yIHRoZSBkZWZhdWx0XFxuICA3NDpcXHRcXHQjIEZSQU1FX1dBUk4sIGkuZS4gS1ZNX1dFUlJPUj15IHdpdGggS0FTQU49eSByZXF1aXJlcyBzcGVjaWFsIHR1bmluZy5cXG4gIDc1OlxcdFxcdCMgQnVpbGRpbmcgS1ZNIHdpdGggLVdlcnJvciBhbmQgS0FTQU4gaXMgc3RpbGwgZG9hYmxlIHZpYSBlbmFibGluZ1xcbiAgNzY6XFx0XFx0IyB0aGUga2VybmVsLXdpZGUgV0VSUk9SPXkuXFxuICA3NzpcXHRcXHRkZXBlbmRzIG9uIEtWTV9YODYgXFx1MDAyNlxcdTAwMjYgKChFWFBFUlQgXFx1MDAyNlxcdTAwMjYgIUtBU0FOKSB8fCBXRVJST1IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjE2OjQ5LjYwODI3MDI1MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTQ5MTk3MjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEV4dGVybmFsIFdyaXRlIFRyYWNraW5nIGluIEtWTSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYENPTkZJR19LVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0LiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uYWxpdHkgZW5hYmxlZD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiBpdCdzIG9uIG9yIG9mZj8gTGV0IG1lIHF1aWNrbHkgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQncyByZWxhdGVkIHRvIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZywgYW5kIHRyYWNraW5nIGV4dGVybmFsIHdyaXRlcyB0byBWTSBtZW1vcnksIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIEknbGwgZm9jdXMgb24gaG93IHRoaXMgY29uZmlnIG9wdGlvbiBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBJcyBpdCBwZXJmb3JtYW5jZS1yZWxhdGVkPyBTZWN1cml0eS1yZWxhdGVkPyBCb3RoPyBMZXQncyB0cmFjZSBpdCBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbW9yZSBnZW5lcmFsIEtWTSBtZWNoYW5pc21zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTM5MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MTY6NTIuNzU3NDcyMDIzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMjU6XFx0XFx0ICBnYXRlcyBjb2RlIHRoYXQgdmVyaWZpZXMgYSB0by1iZS1mcmVlZCBwYWdlIHRhYmxlIGRvZXNuJ3QgaGF2ZSBhbnlcXG4gMjI2OlxcdFxcdCAgcHJlc2VudCBTUFRFcy5cXG4gMjI3OlxcdFxcbiAyMjg6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IFxcXCJOXFxcIi5cXG4gMjI5OlxcdFxcbiAyMzA6XFx0Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xcbiAyMzE6XFx0XFx0Ym9vbFxcbiAyMzI6XFx0XFxuIDIzMzpcXHRjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xcbiAyMzQ6XFx0XFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcbiAyMzU6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2XFxuIDIzNjpcXHRcXHRyYW5nZSAxMDI0IDQwOTZcXG4gMjM3OlxcdFxcdGRlZmF1bHQgNDA5NiBpZiBNQVhTTVBcXG4gMjM4OlxcdFxcdGRlZmF1bHQgMTAyNFxcbiAyMzk6XFx0XFx0aGVscFxcbiAyNDA6XFx0XFx0ICBTZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3QuIExhcmdlciB2YWx1ZXMgd2lsbCBpbmNyZWFzZVxcbiAyNDE6XFx0XFx0ICB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiBlYWNoIEtWTSBndWVzdCwgcmVnYXJkbGVzcyBvZiBob3cgbWFueSB2Q1BVcyBhcmVcXG4gMjQyOlxcdFxcdCAgY3JlYXRlZCBmb3IgYSBnaXZlbiBWTS5cXG4gMjQzOlxcdFxcbiAyNDQ6XFx0ZW5kaWYgIyBWSVJUVUFMSVpBVElPTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDoxNjo1Mi43NTc1ODEzMjNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzUxNzM1ODYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIGFuZCBWRklPIEludGVncmF0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgYWN0dWFsbHkgdHJpZ2dlcnMgYEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR2AuIExvb2tzIGxpa2UgYERSTV9JOTE1X0dWVF9LVk1HVGAgaXMgdGhlIHByaW1lIHN1c3BlY3QsIGFuZCBhIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQncyB0aGUgb25seSBvbmUuIEdpdmVuIHRoYXQsIEkgc2hvdWxkIHNlZSBpZiBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGAgYXJlIGFsc28gaW52b2x2ZWQgYmVjYXVzZSB0aGV5IGVuYWJsZSBLVk0gb24geDg2LCBhbG9uZyB3aXRoIHRoZSBzdGFuZGFyZCBgS1ZNYCwgYFZGSU9gLCBhbmQgcmVsYXRlZCBWRklPIGNvbmZpZ3VyYXRpb25zLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZSBtb2RpZmljYXRpb25zLiBJJ3ZlIGlkZW50aWZpZWQgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGF0OlxuMS4gICoqS1ZNIFBhZ2UgVHJhY2tpbmc6KiogYGt2bV9wYWdlX3RyYWNrXypgIGZ1bmN0aW9ucywgaGFuZGxpbmcgbm90aWZpZXIgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiwgYWxvbmcgd2l0aCBhZGRpbmcgYW5kIHJlbW92aW5nIEd1ZXN0IEZyYW1lIE51bWJlcnMgKEdGTnMpIGZvciB3cml0ZSB0cmFja2luZy5cbjIuICAqKlZGSU8vS1ZNIEludGVyYWN0aW9uOioqIEZ1bmN0aW9ucyBzdWNoIGFzIGB2ZmlvX2dyb3VwX3NldF9rdm1gLCBgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlYCwgYHZmaW9fZGV2aWNlX3B1dF9rdm1gLCBgdmZpb19kZXZpY2VfZmlsZV9zZXRfa3ZtYCAoYW5kIHRoZSBub24tc3RhdGljIGB2ZmlvX2ZpbGVfc2V0X2t2bWApLCBhbmQgYGt2bV92ZmlvX2ZpbGVfKmAgZnVuY3Rpb25zIHdoaWNoIGRlYWwgd2l0aCBmaWxlIHBvaW50ZXJzIGFuZCBLVk0gaW50ZWdyYXRpb24uXG4zLiAgKipLVk0gVk0gTGlmZWN5Y2xlOioqIGBmaWxlX3RvX2t2bWAsIGBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bWAsIGFuZCBga3ZtX3ZtX3JlbGVhc2VgLlxuXG5JJ2xsIHZlcmlmeSB3aGV0aGVyIGB2ZmlvX2RldmljZV9maWxlX3NldF9rdm1gIG9yIGBrdm1fdmZpb19maWxlX3NldF9rdm1gIGFyZSBzdGF0aWMgb3IgaW5saW5lZCwgc2luY2UgYHZmaW9fZmlsZV9zZXRfa3ZtYCBjYWxscyB0aGUgZm9ybWVyIGFuZCBga3ZtX3ZmaW9fZmlsZV9hZGRgIGNhbGxzIHRoZSBsYXR0ZXIuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZXNlIGFyZW4ndCBwYXJ0IG9mIGFueSBnZW5lcmljIGtlcm5lbCBpbmZyYXN0cnVjdHVyZSwgbGlrZSBtZW1vcnkgYWxsb2NhdG9ycywgcGFnZSBmYXVsdHMgb3IgbG9ja3Mgd2hpY2ggY2FuIGJlIGNvbW1vbiBpbiB0aGUga2VybmVsLiBUaGUgZm9jdXMgaXMgZGVmaW5pdGVseSBvbiBLVk0gVk0gbGlmZWN5Y2xlLCB0aGUgS1ZNLVZGSU8gYXR0YWNobWVudCBtZWNoYW5pc20sIGFuZCB0aGUgS1ZNIHBhZ2UgdHJhY2tpbmcuXG5cblRoZSByZWxldmFudCBrZXJuZWwgY29uZmlnIG9wdGlvbnMgSSBzaG91bGQgYmUgY29uc2lkZXJpbmcgYXJlOiBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBLVk1fQU1EYCwgYFZGSU9gLCBgVkZJT19HUk9VUGAsIGBWRklPX0NPTlRBSU5FUmAsIGBWRklPX0RFVklDRV9DREVWYCwgYW5kIHRoZSBpbXBvcnRhbnQgYERSTV9JOTE1X0dWVF9LVk1HVGAuXG5cbkluIGVzc2VuY2UsIHdoYXQgdGhpcyBwYXRjaCBzZXJpZXMgZG9lcyBpcyByZWZhY3RvciB0aGUgS1ZNIGFuZCBWRklPIGludGVyYWN0aW9uLCBhbmQgYnkgcHJveHkgS1ZNIHBhZ2UgdHJhY2tpbmcsIHJlcGxhY2luZyByYXcgYHN0cnVjdCBrdm0gKmAgcG9pbnRlcnMgd2l0aCBgc3RydWN0IGZpbGUgKmAgcG9pbnRlcnMgdG8gS1ZNIFZNIGZpbGVzLiBUaGlzIGNoYW5nZSBpcyBpbnRlbmRlZCB0byBpbXByb3ZlIGxpZmV0aW1lIG1hbmFnZW1lbnQgYnkgZGVjb3VwbGluZyBpdC4gVGhpcyBpcyBkb25lIHZpYSBgZ2V0X2ZpbGUoKWAgYW5kIGBmcHV0KClgIHRvIG1hbmFnZSB0aGUgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGUgY2hhbmdlcyBhZmZlY3QgZmlsZSBsaWZlY3ljbGUgaGFuZGxpbmcsIHdoaWNoIGluY2x1ZGVzIHRoZSBga3ZtX3ZtX3JlbGVhc2VgIGZ1bmN0aW9uLCBhcyB3ZWxsIGFzIGRldmljZSBhdHRhY2htZW50IHdoaWNoIGlzIGhhbmRsZWQgYnkgYGt2bV92ZmlvX2ZpbGVfYWRkYCBhbmQgYHZmaW9fZmlsZV9zZXRfa3ZtYCBmdW5jdGlvbnMuIFRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBmaWxlIGxpZmVjeWNsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYWNjZXNzaWJsZSB2aWEgS1ZNIGFuZCBWRklPIGlvY3Rscy5cblxuTGV0J3MgbG9nIHRob3NlIGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTkxMCwiT3V0cHV0VG9rZW5zIjozMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MTc6MDAuMjc0OTQzOThaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ0NzEyMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJWRklPXCIsXG4gICAgXCJWRklPX0dST1VQXCIsXG4gICAgXCJWRklPX0NPTlRBSU5FUlwiLFxuICAgIFwiVkZJT19ERVZJQ0VfQ0RFVlwiLFxuICAgIFwiRFJNX0k5MTVfR1ZUX0tWTUdUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3ZmaW9fZmlsZV9hZGRcIixcbiAgICBcInZmaW9fZmlsZV9zZXRfa3ZtXCIsXG4gICAgXCJ2ZmlvX2dyb3VwX3NldF9rdm1cIixcbiAgICBcInZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZVwiLFxuICAgIFwidmZpb19kZXZpY2VfcHV0X2t2bVwiLFxuICAgIFwiZmlsZV90b19rdm1cIixcbiAgICBcImt2bV92bV9yZWxlYXNlXCIsXG4gICAgXCJrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bVwiLFxuICAgIFwia3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXJcIixcbiAgICBcImt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXJcIixcbiAgICBcImt2bV93cml0ZV90cmFja19hZGRfZ2ZuXCIsXG4gICAgXCJrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgdGhlIHJlZmVyZW5jZSBtYW5hZ2VtZW50IGJldHdlZW4gS1ZNIGFuZCBleHRlcm5hbCBzdWJzeXN0ZW1zIChwcmltYXJpbHkgVkZJTyBhbmQgS1ZNIHBhZ2UgdHJhY2tpbmcpLCBzd2l0Y2hpbmcgZnJvbSBob2xkaW5nIGRpcmVjdCAnc3RydWN0IGt2bSAqJyBwb2ludGVycyB0byB1c2luZyAnc3RydWN0IGZpbGUgKicgcmVmZXJlbmNlcyB2aWEgZ2V0X2ZpbGUoKS9mcHV0KCkgYW5kIGdldF9maWxlX2FjdGl2ZSgpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbGlmZWN5Y2xlIHBhdGhzLCBjb25jdXJyZW5jeSwgYW5kIHJlZmNvdW50aW5nIGJldHdlZW4gS1ZNIFZNIGZpbGVzIGFuZCBWRklPIGRldmljZXMvZ3JvdXBzIGR1cmluZyBWTSBjcmVhdGlvbiwgcmVsZWFzZSwgYW5kIFZGSU8gZGV2aWNlIGF0dGFjaG1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIlZGSU9cIixcbiAgICBcIlZGSU9fR1JPVVBcIixcbiAgICBcIlZGSU9fQ09OVEFJTkVSXCIsXG4gICAgXCJWRklPX0RFVklDRV9DREVWXCIsXG4gICAgXCJEUk1fSTkxNV9HVlRfS1ZNR1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdmZpb19maWxlX2FkZFwiLFxuICAgIFwidmZpb19maWxlX3NldF9rdm1cIixcbiAgICBcInZmaW9fZ3JvdXBfc2V0X2t2bVwiLFxuICAgIFwidmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlXCIsXG4gICAgXCJ2ZmlvX2RldmljZV9wdXRfa3ZtXCIsXG4gICAgXCJmaWxlX3RvX2t2bVwiLFxuICAgIFwia3ZtX3ZtX3JlbGVhc2VcIixcbiAgICBcImt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtXCIsXG4gICAgXCJrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllclwiLFxuICAgIFwia3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllclwiLFxuICAgIFwia3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm5cIixcbiAgICBcImt2bV93cml0ZV90cmFja19yZW1vdmVfZ2ZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgcmVmZXJlbmNlIG1hbmFnZW1lbnQgYmV0d2VlbiBLVk0gYW5kIGV4dGVybmFsIHN1YnN5c3RlbXMgKHByaW1hcmlseSBWRklPIGFuZCBLVk0gcGFnZSB0cmFja2luZyksIHN3aXRjaGluZyBmcm9tIGhvbGRpbmcgZGlyZWN0ICdzdHJ1Y3Qga3ZtIConIHBvaW50ZXJzIHRvIHVzaW5nICdzdHJ1Y3QgZmlsZSAqJyByZWZlcmVuY2VzIHZpYSBnZXRfZmlsZSgpL2ZwdXQoKSBhbmQgZ2V0X2ZpbGVfYWN0aXZlKCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBsaWZlY3ljbGUgcGF0aHMsIGNvbmN1cnJlbmN5LCBhbmQgcmVmY291bnRpbmcgYmV0d2VlbiBLVk0gVk0gZmlsZXMgYW5kIFZGSU8gZGV2aWNlcy9ncm91cHMgZHVyaW5nIFZNIGNyZWF0aW9uLCByZWxlYXNlLCBhbmQgVkZJTyBkZXZpY2UgYXR0YWNobWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MTc6MDAuMzg5NDI1OTQ5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjc2NzIxMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MTc6MDAuMzkwMjQ4MzA5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6ODI3NTg5Mzc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGludGVyYWN0aW9uIGJldHdlZW4gS1ZNIGFuZCBWRklPIChhcyB3ZWxsIGFzIHg4NiBwYWdlIHRyYWNraW5nIGFuZCBzMzkwIHZmaW8tYXApIGJ5IHBhc3NpbmcgYW5kIHRyYWNraW5nIGBzdHJ1Y3QgZmlsZSAqYCBpbnN0ZWFkIG9mIHJhdyBgc3RydWN0IGt2bSAqYCBwb2ludGVycy5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZXMsIGZpbGUvS1ZNIHJlZmVyZW5jZSBjb3VudGluZywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gU3VjaCBpc3N1ZXMgYXJlIG1lbW9yeSBtYW5hZ2VtZW50IGJ1Z3MgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy5cXG5cXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2sgb3IgaGVhcCBidWZmZXJzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgZGF0YSBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGludm9sdmUgY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSGVuY2UsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB3YXJyYW50aW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTM4ZTI5NDU5NGQyZTlkZmFhNTRkYWFlNTRmMzlmY2IzNmY1ODVhNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTA6MTY6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFnZV90cmFjay5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhZ2VfdHJhY2suaFxuaW5kZXggM2QwNDA3NDEwNDRiNC4uMDQ2YTI1YzhmZTRmOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmhcbkBAIC00NCwxMyArNDQsMTMgQEAgc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUge1xuIFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpub2RlKTtcbiB9O1xuIFxuLWludCBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sXG4raW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbik7XG4tdm9pZCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSxcbit2b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0XHRcdHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpuKTtcbiBcbi1pbnQga3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm4oc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pO1xuLWludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7XG4raW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBmaWxlICpmaWxlLCBnZm5fdCBnZm4pO1xuK2ludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3QgZmlsZSAqZmlsZSwgZ2ZuX3QgZ2ZuKTtcbiAjZWxzZVxuIC8qXG4gICogQWxsb3cgZGVmaW5pbmcgYSBub2RlIGluIGEgc3RydWN0dXJlIGV2ZW4gaWYgcGFnZSB0cmFja2luZyBpcyBkaXNhYmxlZCwgZS5nLlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZSBiL2FyY2gveDg2L2t2bS9NYWtlZmlsZVxuaW5kZXggMDQ3NDYwNGFiOGExNC4uOTZmODlkNmY3ZTZhOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZVxuKysrIGIvYXJjaC94ODYva3ZtL01ha2VmaWxlXG5AQCAtNjAsMTAgKzYwLDcgQEAgZXhwb3J0c19ncmVwX3RyYWlsZXIgOj0gLS1pbmNsdWRlPScqLltjaF0nIC1ucncgJChzcmN0cmVlKS92aXJ0L2t2bSAkKHNyY3RyZWUpL2FcbiBcdFx0XHRncmVwIC12IC1lIGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyIFxcXG4gXHRcdFx0XHQtZSBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyIFxcXG4gXHRcdFx0XHQtZSBrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbiBcXFxuLVx0XHRcdFx0LWUga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4gXFxcbi1cdFx0XHRcdC1lIGt2bV9nZXRfa3ZtIFxcXG4tXHRcdFx0XHQtZSBrdm1fZ2V0X2t2bV9zYWZlIFxcXG4tXHRcdFx0XHQtZSBrdm1fcHV0X2t2bVxuK1x0XHRcdFx0LWUga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm5cbiBcbiAjIEZvcmNlIGdyZXAgdG8gZW1pdCBhIGdvb2Z5IGdyb3VwIHNlcGFyYXRvciB0aGF0IGNhbiBpbiB0dXJuIGJlIHJlcGxhY2VkIHdpdGhcbiAjIHRoZSBhYm92ZSBuZXdsaW5lIG1hY3JvIChuZXdsaW5lcyBpbiBNYWtlIGFyZSBhIG5pZ2h0bWFyZSkuICBOb3RlLCBncmVwIG9ubHlcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYyBiL2FyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jXG5pbmRleCA3ZTgxOTVhMzExYmIwLi45OGYxMzNlNGYwYjMyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmNcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jXG5AQCAtMjM3LDEwICsyMzcsMTEgQEAgc3RhdGljIGludCBrdm1fZW5hYmxlX2V4dGVybmFsX3dyaXRlX3RyYWNraW5nKHN0cnVjdCBrdm0gKmt2bSlcbiAgKiByZWdpc3RlciB0aGUgbm90aWZpZXIgc28gdGhhdCBldmVudCBpbnRlcmNlcHRpb24gZm9yIHRoZSB0cmFja2VkIGd1ZXN0XG4gICogcGFnZXMgY2FuIGJlIHJlY2VpdmVkLlxuICAqL1xuLWludCBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sXG4raW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbilcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfaGVhZCAqaGVhZDtcbitcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbGVfdG9fa3ZtKGZpbGUpO1xuIFx0aW50IHI7XG4gXG4gXHRpZiAoIWt2bSB8fCBrdm0tXHUwMDNlbW0gIT0gY3VycmVudC1cdTAwM2VtbSlcbkBAIC0yNTIsNyArMjUzLDcgQEAgaW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRyZXR1cm4gcjtcbiBcdH1cbiBcbi1cdGt2bV9nZXRfa3ZtKGt2bSk7XG4rXHRnZXRfZmlsZShmaWxlKTtcbiBcbiBcdGhlYWQgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC50cmFja19ub3RpZmllcl9oZWFkO1xuIFxuQEAgLTI2NywxMCArMjY4LDExIEBAIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKTtcbiAgKiBzdG9wIHJlY2VpdmluZyB0aGUgZXZlbnQgaW50ZXJjZXB0aW9uLiBJdCBpcyB0aGUgb3Bwb3NlZCBvcGVyYXRpb24gb2ZcbiAgKiBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcigpLlxuICAqL1xuLXZvaWQga3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sXG4rdm9pZCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdFx0XHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbilcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfaGVhZCAqaGVhZDtcbitcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbGVfdG9fa3ZtKGZpbGUpO1xuIFxuIFx0aGVhZCA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLnRyYWNrX25vdGlmaWVyX2hlYWQ7XG4gXG5AQCAtMjc5LDcgKzI4MSw3IEBAIHZvaWQga3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sXG4gXHR3cml0ZV91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiBcdHN5bmNocm9uaXplX3NyY3UoXHUwMDI2aGVhZC1cdTAwM2V0cmFja19zcmN1KTtcbiBcbi1cdGt2bV9wdXRfa3ZtKGt2bSk7XG4rXHRmcHV0KGZpbGUpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKTtcbiBcbkBAIC0zMzYsMTEgKzMzOCwxMiBAQCB2b2lkIGt2bV9wYWdlX3RyYWNrX2RlbGV0ZV9zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbiAgKiBhZGQgZ3Vlc3QgcGFnZSB0byB0aGUgdHJhY2tpbmcgcG9vbCBzbyB0aGF0IGNvcnJlc3BvbmRpbmcgYWNjZXNzIG9uIHRoYXRcbiAgKiBwYWdlIHdpbGwgYmUgaW50ZXJjZXB0ZWQuXG4gICpcbi0gKiBAa3ZtOiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uXG4rICogQGZpbGU6IHRoZSBWTSBmaWxlIG9mIHRoZSBndWVzdCBpbnN0YW5jZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbi5cbiAgKiBAZ2ZuOiB0aGUgZ3Vlc3QgcGFnZS5cbiAgKi9cbi1pbnQga3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm4oc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pXG4raW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBmaWxlICpmaWxlLCBnZm5fdCBnZm4pXG4ge1xuK1x0c3RydWN0IGt2bSAqa3ZtID0gZmlsZV90b19rdm0oZmlsZSk7XG4gXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xuIFx0aW50IGlkeDtcbiBcbkBAIC0zNjYsMTEgKzM2OSwxMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbik7XG4gICogcmVtb3ZlIHRoZSBndWVzdCBwYWdlIGZyb20gdGhlIHRyYWNraW5nIHBvb2wgd2hpY2ggc3RvcHMgdGhlIGludGVyY2VwdGlvblxuICAqIG9mIGNvcnJlc3BvbmRpbmcgYWNjZXNzIG9uIHRoYXQgcGFnZS5cbiAgKlxuLSAqIEBrdm06IHRoZSBndWVzdCBpbnN0YW5jZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbi5cbisgKiBAZmlsZTogdGhlIFZNIGZpbGUgb2YgdGhlIGd1ZXN0IGluc3RhbmNlIHdlIGFyZSBpbnRlcmVzdGVkIGluLlxuICAqIEBnZm46IHRoZSBndWVzdCBwYWdlLlxuICAqL1xuLWludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbilcbitpbnQga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4oc3RydWN0IGZpbGUgKmZpbGUsIGdmbl90IGdmbilcbiB7XG4rXHRzdHJ1Y3Qga3ZtICprdm0gPSBmaWxlX3RvX2t2bShmaWxlKTtcbiBcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG4gXHRpbnQgaWR4O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuaW5kZXggOTQwYzBmZjY2OGJlZS4uZjE2MGUxOTQ1ZmJjZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG5AQCAtMTgyMiwxNyArMTgyMiwyNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdmZpb19hcF9tZGV2X2F0dHJfZ3JvdXBzW10gPSB7XG4gXG4gLyoqXG4gICogdmZpb19hcF9tZGV2X3NldF9rdm0gLSBzZXRzIGFsbCBkYXRhIGZvciBAbWF0cml4X21kZXYgdGhhdCBhcmUgbmVlZGVkXG4tICogdG8gbWFuYWdlIEFQIHJlc291cmNlcyBmb3IgdGhlIGd1ZXN0IHdob3NlIHN0YXRlIGlzIHJlcHJlc2VudGVkIGJ5IEBrdm1cbisgKiB0byBtYW5hZ2UgQVAgcmVzb3VyY2VzIGZvciB0aGUgZ3Vlc3Qgd2hvc2Ugc3RhdGUgaXMgcmVwcmVzZW50ZWQgYnlcbisgKiBAa3ZtX2ZpbGVcbiAgKlxuICAqIEBtYXRyaXhfbWRldjogYSBtZWRpYXRlZCBtYXRyaXggZGV2aWNlXG4tICogQGt2bTogcmVmZXJlbmNlIHRvIEtWTSBpbnN0YW5jZVxuKyAqIEBrdm1fZmlsZTogdGhlIEtWTSBWTSBmaWxlIHRoaXMgdmZpbyBkZXZpY2UgaXMgYXNzb2NpYXRlZCB3aXRoXG4gICpcbi0gKiBSZXR1cm46IDAgaWYgbm8gb3RoZXIgbWVkaWF0ZWQgbWF0cml4IGRldmljZSBoYXMgYSByZWZlcmVuY2UgdG8gQGt2bTtcbisgKiBSZXR1cm46IDAgaWYgbm8gb3RoZXIgbWVkaWF0ZWQgbWF0cml4IGRldmljZSBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIFZNO1xuICAqIG90aGVyd2lzZSwgcmV0dXJucyBhbiAtRVBFUk0uXG4gICovXG4gc3RhdGljIGludCB2ZmlvX2FwX21kZXZfc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuLVx0XHRcdFx0c3RydWN0IGt2bSAqa3ZtKVxuK1x0XHRcdFx0c3RydWN0IGZpbGUgKmt2bV9maWxlKVxuIHtcbitcdHN0cnVjdCBrdm0gKmt2bTtcbitcbitcdGlmICgha3ZtX2ZpbGUpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0a3ZtID0ga3ZtX2ZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1x0aWYgKCFrdm0pXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuIFx0aWYgKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYmQpIHtcbiBcdFx0Z2V0X3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7XG4gXHRcdGlmIChrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rKSB7XG5AQCAtMTg0MSw3ICsxODUxLDYgQEAgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuIFx0XHR9XG4gXHRcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2sgPSBcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2VwcWFwX2hvb2s7XG4gXG4tXHRcdGt2bV9nZXRfa3ZtKGt2bSk7XG4gXHRcdG1hdHJpeF9tZGV2LVx1MDAzZWt2bSA9IGt2bTtcbiBcdFx0dmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTtcbiBcdFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuQEAgLTE4OTQsNyArMTkwMyw2IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl91bnNldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbiBcdFx0bWF0cml4X21kZXYtXHUwMDNla3ZtID0gTlVMTDtcbiBcbiBcdFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuLVx0XHRrdm1fcHV0X2t2bShrdm0pO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vZ3JvdXAuYyBiL2RyaXZlcnMvdmZpby9ncm91cC5jXG5pbmRleCBiMjI5OWU1YmM2ZGYzLi41YmY4Y2JkZmYzNzdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL2dyb3VwLmNcbisrKyBiL2RyaXZlcnMvdmZpby9ncm91cC5jXG5AQCAtODYwLDExICs4NjAsMjAgQEAgYm9vbCB2ZmlvX2dyb3VwX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cClcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGt2bSAqa3ZtKVxuK3ZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGZpbGUgKmt2bSlcbiB7XG4rXHRzdHJ1Y3QgZmlsZSAqb2xkO1xuK1xuK1x0aWYgKGt2bSlcbitcdFx0Z2V0X2ZpbGUoa3ZtKTtcbitcbiBcdHNwaW5fbG9jayhcdTAwMjZncm91cC1cdTAwM2Vrdm1fcmVmX2xvY2spO1xuK1x0b2xkID0gZ3JvdXAtXHUwMDNla3ZtO1xuIFx0Z3JvdXAtXHUwMDNla3ZtID0ga3ZtO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2Z3JvdXAtXHUwMDNla3ZtX3JlZl9sb2NrKTtcbitcbitcdGlmIChvbGQpXG4rXHRcdGZwdXQob2xkKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuY1xuaW5kZXggZjQ3ZjM2MzE0YTFjYy4uMDQ1MTMyZTkwYmZlZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuY1xuQEAgLTE4NCw2ICsxODQsNyBAQCBpbnQgdmZpb19wY2lfemRldl9mZWF0dXJlX2VycihzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxuIGludCB2ZmlvX3BjaV96ZGV2X29wZW5fZGV2aWNlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiB7XG4gXHRzdHJ1Y3QgenBjaV9kZXYgKnpkZXYgPSB0b196cGNpKHZkZXYtXHUwMDNlcGRldik7XG4rXHRzdHJ1Y3Qga3ZtICprdm07XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCF6ZGV2KVxuQEAgLTE5NSw5ICsxOTYsMTQgQEAgaW50IHZmaW9fcGNpX3pkZXZfb3Blbl9kZXZpY2Uoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHJldCA9IC1FTk9FTlQ7XG4rXHRrdm0gPSB2ZGV2LVx1MDAzZXZkZXYua3ZtLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdGlmICgha3ZtKVxuK1x0XHRnb3RvIHJlY292ZXJ5O1xuK1xuIFx0aWYgKHpwY2lfa3ZtX2hvb2sua3ZtX3JlZ2lzdGVyKVxuLVx0XHRyZXQgPSB6cGNpX2t2bV9ob29rLmt2bV9yZWdpc3Rlcih6ZGV2LCB2ZGV2LVx1MDAzZXZkZXYua3ZtKTtcbitcdFx0cmV0ID0genBjaV9rdm1faG9vay5rdm1fcmVnaXN0ZXIoemRldiwga3ZtKTtcbiBcbityZWNvdmVyeTpcbiBcdGlmIChyZXQpXG4gXHRcdHpwY2lfc3RvcF9tZWRpYXRlZF9yZWNvdmVyeSh6ZGV2KTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vdmZpby5oIGIvZHJpdmVycy92ZmlvL3ZmaW8uaFxuaW5kZXggNzcyOGJjOTliNjNkMS4uOWI2MTk5NTFhNWQwYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby92ZmlvLmhcbisrKyBiL2RyaXZlcnMvdmZpby92ZmlvLmhcbkBAIC0yMyw3ICsyMyw3IEBAIHN0cnVjdCB2ZmlvX2RldmljZV9maWxlIHtcbiBcdHU4IGFjY2Vzc19ncmFudGVkO1xuIFx0dTMyIGRldmlkOyAvKiBvbmx5IHZhbGlkIHdoZW4gaW9tbXVmZCBpcyB2YWxpZCAqL1xuIFx0c3BpbmxvY2tfdCBrdm1fcmVmX2xvY2s7IC8qIHByb3RlY3Qga3ZtIGZpZWxkICovXG4tXHRzdHJ1Y3Qga3ZtICprdm07XG4rXHRzdHJ1Y3QgZmlsZSAqa3ZtO1xuIFx0c3RydWN0IGlvbW11ZmRfY3R4ICppb21tdWZkOyAvKiBwcm90ZWN0ZWQgYnkgc3RydWN0IHZmaW9fZGV2aWNlX3NldDo6bG9jayAqL1xuIH07XG4gXG5AQCAtODgsNyArODgsNyBAQCBzdHJ1Y3QgdmZpb19ncm91cCB7XG4gI2VuZGlmXG4gXHRlbnVtIHZmaW9fZ3JvdXBfdHlwZVx0XHR0eXBlO1xuIFx0c3RydWN0IG11dGV4XHRcdFx0Z3JvdXBfbG9jaztcbi1cdHN0cnVjdCBrdm1cdFx0XHQqa3ZtO1xuK1x0c3RydWN0IGZpbGVcdFx0XHQqa3ZtO1xuIFx0c3RydWN0IGZpbGVcdFx0XHQqb3BlbmVkX2ZpbGU7XG4gXHRzdHJ1Y3QgaW9tbXVmZF9jdHhcdFx0KmlvbW11ZmQ7XG4gXHRzcGlubG9ja190XHRcdFx0a3ZtX3JlZl9sb2NrO1xuQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIHZmaW9fZGV2aWNlX2dyb3VwX3VudXNlX2lvbW11KHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKTtcbiB2b2lkIHZmaW9fZGZfZ3JvdXBfY2xvc2Uoc3RydWN0IHZmaW9fZGV2aWNlX2ZpbGUgKmRmKTtcbiBzdHJ1Y3QgdmZpb19ncm91cCAqdmZpb19ncm91cF9mcm9tX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpO1xuIGJvb2wgdmZpb19ncm91cF9lbmZvcmNlZF9jb2hlcmVudChzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXApO1xuLXZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGt2bSAqa3ZtKTtcbit2b2lkIHZmaW9fZ3JvdXBfc2V0X2t2bShzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXAsIHN0cnVjdCBmaWxlICprdm0pO1xuIGJvb2wgdmZpb19kZXZpY2VfaGFzX2NvbnRhaW5lcihzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSk7XG4gaW50IF9faW5pdCB2ZmlvX2dyb3VwX2luaXQodm9pZCk7XG4gdm9pZCB2ZmlvX2dyb3VwX2NsZWFudXAodm9pZCk7XG5AQCAtMTY1LDcgKzE2NSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX2dyb3VwX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGt2bSAqa3ZtKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX2dyb3VwX3NldF9rdm0oc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgZmlsZSAqa3ZtKVxuIHtcbiB9XG4gXG5AQCAtNDI5LDExICs0MjksMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fdmlycWZkX2V4aXQodm9pZClcbiAjZW5kaWZcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfS1ZNKVxuLXZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3Qga3ZtICprdm0pO1xuK3ZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZmlsZSAqa3ZtKTtcbiB2b2lkIHZmaW9fZGV2aWNlX3B1dF9rdm0oc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSxcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBrdm0gKmt2bSlcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCBmaWxlICprdm0pXG4ge1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMgYi9kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmNcbmluZGV4IDQyM2VhZDQ4YWFmZTMuLmVkOTZhY2ZhODYzNTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmNcbisrKyBiL2RyaXZlcnMvdmZpby92ZmlvX21haW4uY1xuQEAgLTQ3MiwzNiArNDcyLDE0IEBAIHZvaWQgdmZpb191bnJlZ2lzdGVyX2dyb3VwX2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSlcbiBFWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KTtcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfS1ZNKVxuLXZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3Qga3ZtICprdm0pXG4rdm9pZCB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBmaWxlICprdm0pXG4ge1xuLVx0dm9pZCAoKnBmbikoc3RydWN0IGt2bSAqa3ZtKTtcbi1cdGJvb2wgKCpmbikoc3RydWN0IGt2bSAqa3ZtKTtcbi1cdGJvb2wgcmV0O1xuLVxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkZXZpY2UtXHUwMDNlZGV2X3NldC1cdTAwM2Vsb2NrKTtcbiBcbiBcdGlmICgha3ZtKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRwZm4gPSBzeW1ib2xfZ2V0KGt2bV9wdXRfa3ZtKTtcbi1cdGlmIChXQVJOX09OKCFwZm4pKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRmbiA9IHN5bWJvbF9nZXQoa3ZtX2dldF9rdm1fc2FmZSk7XG4tXHRpZiAoV0FSTl9PTighZm4pKSB7XG4tXHRcdHN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRyZXQgPSBmbihrdm0pO1xuLVx0c3ltYm9sX3B1dChrdm1fZ2V0X2t2bV9zYWZlKTtcbi1cdGlmICghcmV0KSB7XG4tXHRcdHN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRkZXZpY2UtXHUwMDNlcHV0X2t2bSA9IHBmbjtcbi1cdGRldmljZS1cdTAwM2Vrdm0gPSBrdm07XG4rXHRkZXZpY2UtXHUwMDNla3ZtID0gZ2V0X2ZpbGUoa3ZtKTtcbiB9XG4gXG4gdm9pZCB2ZmlvX2RldmljZV9wdXRfa3ZtKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKVxuQEAgLTUxMSwxNCArNDg5LDcgQEAgdm9pZCB2ZmlvX2RldmljZV9wdXRfa3ZtKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKVxuIFx0aWYgKCFkZXZpY2UtXHUwMDNla3ZtKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoV0FSTl9PTighZGV2aWNlLVx1MDAzZXB1dF9rdm0pKVxuLVx0XHRnb3RvIGNsZWFyO1xuLVxuLVx0ZGV2aWNlLVx1MDAzZXB1dF9rdm0oZGV2aWNlLVx1MDAzZWt2bSk7XG4tXHRkZXZpY2UtXHUwMDNlcHV0X2t2bSA9IE5VTEw7XG4tXHRzeW1ib2xfcHV0KGt2bV9wdXRfa3ZtKTtcbi1cbi1jbGVhcjpcbitcdGZwdXQoZGV2aWNlLVx1MDAzZWt2bSk7XG4gXHRkZXZpY2UtXHUwMDNla3ZtID0gTlVMTDtcbiB9XG4gI2VuZGlmXG5AQCAtMTU0NCw5ICsxNTE1LDEzIEBAIGJvb2wgdmZpb19maWxlX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCBmaWxlICpmaWxlKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX2ZpbGVfZW5mb3JjZWRfY29oZXJlbnQpO1xuIFxuLXN0YXRpYyB2b2lkIHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKVxuK3N0YXRpYyB2b2lkIHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGUgKmt2bSlcbiB7XG4gXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmlsZSAqZGYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdHN0cnVjdCBmaWxlICpvbGQ7XG4rXG4rXHRpZiAoa3ZtKVxuK1x0XHRnZXRfZmlsZShrdm0pO1xuIFxuIFx0LypcbiBcdCAqIFRoZSBrdm0gaXMgZmlyc3QgcmVjb3JkZWQgaW4gdGhlIHZmaW9fZGV2aWNlX2ZpbGUsIGFuZCB3aWxsXG5AQCAtMTU1NCwyOCArMTUyOSwzMiBAQCBzdGF0aWMgdm9pZCB2ZmlvX2RldmljZV9maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdCAqIGlvbW11ZmQgc3VjY2Vzc2Z1bGx5IGluIHRoZSB2ZmlvIGRldmljZSBjZGV2IHBhdGguXG4gXHQgKi9cbiBcdHNwaW5fbG9jayhcdTAwMjZkZi1cdTAwM2Vrdm1fcmVmX2xvY2spO1xuK1x0b2xkID0gZGYtXHUwMDNla3ZtO1xuIFx0ZGYtXHUwMDNla3ZtID0ga3ZtO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2ZGYtXHUwMDNla3ZtX3JlZl9sb2NrKTtcbitcbitcdGlmIChvbGQpXG4rXHRcdGZwdXQob2xkKTtcbiB9XG4gXG4gLyoqXG4gICogdmZpb19maWxlX3NldF9rdm0gLSBMaW5rIGEga3ZtIHdpdGggVkZJTyBkcml2ZXJzXG4tICogQGZpbGU6IFZGSU8gZ3JvdXAgZmlsZSBvciBWRklPIGRldmljZSBmaWxlXG4tICogQGt2bTogS1ZNIHRvIGxpbmtcbisgKiBAdmZpb19maWxlOiBWRklPIGdyb3VwIGZpbGUgb3IgVkZJTyBkZXZpY2UgZmlsZVxuKyAqIEBrdm06IEtWTSBmaWxlIHRvIGxpbmtcbiAgKlxuICAqIFdoZW4gYSBWRklPIGRldmljZSBpcyBmaXJzdCBvcGVuZWQgdGhlIEtWTSB3aWxsIGJlIGF2YWlsYWJsZSBpblxuICAqIGRldmljZS1cdTAwM2Vrdm0gaWYgb25lIHdhcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuXG4gICovXG4tdm9pZCB2ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKVxuK3ZvaWQgdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSlcbiB7XG4gXHRzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXA7XG4gXG4tXHRncm91cCA9IHZmaW9fZ3JvdXBfZnJvbV9maWxlKGZpbGUpO1xuK1x0Z3JvdXAgPSB2ZmlvX2dyb3VwX2Zyb21fZmlsZSh2ZmlvX2ZpbGUpO1xuIFx0aWYgKGdyb3VwKVxuIFx0XHR2ZmlvX2dyb3VwX3NldF9rdm0oZ3JvdXAsIGt2bSk7XG4gXG4tXHRpZiAodmZpb19kZXZpY2VfZnJvbV9maWxlKGZpbGUpKVxuLVx0XHR2ZmlvX2RldmljZV9maWxlX3NldF9rdm0oZmlsZSwga3ZtKTtcbitcdGlmICh2ZmlvX2RldmljZV9mcm9tX2ZpbGUodmZpb19maWxlKSlcbitcdFx0dmZpb19kZXZpY2VfZmlsZV9zZXRfa3ZtKHZmaW9fZmlsZSwga3ZtKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmZpb19maWxlX3NldF9rdm0pO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggMDNiZmM5Mjg2NGI2ZS4uYmZlY2NlMWI1OTU1YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtNzg0LDYgKzc4NCwxMyBAQCBzdHJ1Y3Qga3ZtIHtcbiBcdCAqIGt2bV9zd2FwX2FjdGl2ZV9tZW1zbG90cygpLlxuIFx0ICovXG4gXHRzdHJ1Y3QgbXV0ZXggc2xvdHNfYXJjaF9sb2NrO1xuK1x0LypcbitcdCAqIEJhY2stcmVmZXJlbmNlIHRvIHRoZSBWTSBmaWxlIGZvciBzdWJzeXN0ZW1zIChlLmcuLCBWRklPKS4gSG9sZHMgbm9cbitcdCAqIHJlZmVyZW5jZSB0byBhdm9pZCBwaW5uaW5nIHRoZSBWTS4gQWNjZXNzIHZpYSBnZXRfZmlsZV9hY3RpdmUoXHUwMDI2a3ZtLVx1MDAzZWZpbGUpXG4rXHQgKiBvbmx54oCUc2FmZSBiZWNhdXNlIGNsZWFyZWQgaW4ga3ZtX3ZtX3JlbGVhc2UoKSBiZWZvcmUgZmlsZSBmcmVlZC4gQ2FsbGVyc1xuK1x0ICogc3RvcmluZyB0aGUgcmVzdWx0IG11c3QgdGFrZSB0aGVpciBvd24gcmVmZXJlbmNlIHZpYSBnZXRfZmlsZSgpXG4rXHQgKi9cbitcdHN0cnVjdCBmaWxlICpmaWxlO1xuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW07IC8qIHVzZXJzcGFjZSB0aWVkIHRvIHRoaXMgdm0gKi9cbiBcdHVuc2lnbmVkIGxvbmcgbnJfbWVtc2xvdF9wYWdlcztcbiBcdC8qIFRoZSB0d28gbWVtc2xvdCBzZXRzIC0gYWN0aXZlIGFuZCBpbmFjdGl2ZSAocGVyIGFkZHJlc3Mgc3BhY2UpICovXG5AQCAtMTA4Miw2ICsxMDg5LDcgQEAgdm9pZCBrdm1fZ2V0X2t2bShzdHJ1Y3Qga3ZtICprdm0pO1xuIGJvb2wga3ZtX2dldF9rdm1fc2FmZShzdHJ1Y3Qga3ZtICprdm0pO1xuIHZvaWQga3ZtX3B1dF9rdm0oc3RydWN0IGt2bSAqa3ZtKTtcbiBib29sIGZpbGVfaXNfa3ZtKHN0cnVjdCBmaWxlICpmaWxlKTtcbitzdHJ1Y3Qga3ZtICpmaWxlX3RvX2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSk7XG4gdm9pZCBrdm1fcHV0X2t2bV9ub19kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSk7XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21lbXNsb3RzICpfX2t2bV9tZW1zbG90cyhzdHJ1Y3Qga3ZtICprdm0sIGludCBhc19pZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvbGludXgvdmZpby5oXG5pbmRleCA0NWYwODk4NjM1OWU0Li4wY2M5MWM2Zjk2ZDJiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvLmhcbisrKyBiL2luY2x1ZGUvbGludXgvdmZpby5oXG5AQCAtNTQsNyArNTQsNyBAQCBzdHJ1Y3QgdmZpb19kZXZpY2Uge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBkZXZfc2V0X2xpc3Q7XG4gXHR1bnNpZ25lZCBpbnQgbWlncmF0aW9uX2ZsYWdzO1xuIFx0dTggcHJlY29weV9pbmZvX3YyO1xuLVx0c3RydWN0IGt2bSAqa3ZtO1xuK1x0c3RydWN0IGZpbGUgKmt2bTtcbiBcbiBcdC8qIE1lbWJlcnMgYmVsb3cgaGVyZSBhcmUgcHJpdmF0ZSwgbm90IGZvciBkcml2ZXIgdXNlICovXG4gXHR1bnNpZ25lZCBpbnQgaW5kZXg7XG5AQCAtNjYsNyArNjYsNiBAQCBzdHJ1Y3QgdmZpb19kZXZpY2Uge1xuIFx0dW5zaWduZWQgaW50IG9wZW5fY291bnQ7XG4gXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xuIFx0c3RydWN0IGlvbW11ZmRfYWNjZXNzICppb21tdWZkX2FjY2Vzcztcbi1cdHZvaWQgKCpwdXRfa3ZtKShzdHJ1Y3Qga3ZtICprdm0pO1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU9NTVVGRClcbiBcdHN0cnVjdCBpb21tdWZkX2RldmljZSAqaW9tbXVmZF9kZXZpY2U7XG5AQCAtMzc4LDcgKzM3Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX2ZpbGVfaGFzX2RldihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpXG4gI2VuZGlmXG4gYm9vbCB2ZmlvX2ZpbGVfaXNfdmFsaWQoc3RydWN0IGZpbGUgKmZpbGUpO1xuIGJvb2wgdmZpb19maWxlX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCBmaWxlICpmaWxlKTtcbi12b2lkIHZmaW9fZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pO1xuK3ZvaWQgdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSk7XG4gXG4gI2RlZmluZSBWRklPX1BJTl9QQUdFU19NQVhfRU5UUklFU1x0KFBBR0VfU0laRS9zaXplb2YodW5zaWduZWQgbG9uZykpXG4gXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbmluZGV4IDY1ZWIyNmEwNTIwZDguLjM0YjRjNDM5MDhiM2IgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtMTMxNCw3ICsxMzE0LDcgQEAgdm9pZCBrdm1fZ2V0X2t2bShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0cmVmY291bnRfaW5jKFx1MDAyNmt2bS1cdTAwM2V1c2Vyc19jb3VudCk7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9nZXRfa3ZtKTtcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2dldF9rdm0pO1xuIFxuIC8qXG4gICogTWFrZSBzdXJlIHRoZSB2bSBpcyBub3QgZHVyaW5nIGRlc3RydWN0aW9uLCB3aGljaCBpcyBhIHNhZmUgdmVyc2lvbiBvZlxuQEAgLTEzMjQsMTQgKzEzMjQsMTQgQEAgYm9vbCBrdm1fZ2V0X2t2bV9zYWZlKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRyZXR1cm4gcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNmt2bS1cdTAwM2V1c2Vyc19jb3VudCk7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9nZXRfa3ZtX3NhZmUpO1xuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZ2V0X2t2bV9zYWZlKTtcbiBcbiB2b2lkIGt2bV9wdXRfa3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmt2bS1cdTAwM2V1c2Vyc19jb3VudCkpXG4gXHRcdGt2bV9kZXN0cm95X3ZtKGt2bSk7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9wdXRfa3ZtKTtcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3B1dF9rdm0pO1xuIFxuIC8qXG4gICogVXNlZCB0byBwdXQgYSByZWZlcmVuY2UgdGhhdCB3YXMgdGFrZW4gb24gYmVoYWxmIG9mIGFuIG9iamVjdCBhc3NvY2lhdGVkXG5AQCAtMTM1Miw2ICsxMzUyLDggQEAgc3RhdGljIGludCBrdm1fdm1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbiBcbiBcdGt2bV9pcnFmZF9yZWxlYXNlKGt2bSk7XG4gXG4rXHRXUklURV9PTkNFKGt2bS1cdTAwM2VmaWxlLCBOVUxMKTtcbitcbiBcdGt2bV9wdXRfa3ZtKGt2bSk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNTQ5Niw2ICs1NDk4LDE1IEBAIGJvb2wgZmlsZV9pc19rdm0oc3RydWN0IGZpbGUgKmZpbGUpXG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChmaWxlX2lzX2t2bSk7XG4gXG4rc3RydWN0IGt2bSAqZmlsZV90b19rdm0oc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0aWYgKCFmaWxlX2lzX2t2bShmaWxlKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXR1cm4gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChmaWxlX3RvX2t2bSk7XG4rXG4gc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUpXG4ge1xuIFx0Y2hhciBmZG5hbWVbSVRPQV9NQVhfTEVOICsgMV07XG5AQCAtNTUyNyw2ICs1NTM4LDkgQEAgc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUpXG4gXHQgKiBjYXNlcyBpdCB3aWxsIGJlIGNhbGxlZCBieSB0aGUgZmluYWwgZnB1dChmaWxlKSBhbmQgd2lsbCB0YWtlXG4gXHQgKiBjYXJlIG9mIGRvaW5nIGt2bV9wdXRfa3ZtKGt2bSkuXG4gXHQgKi9cbitcbitcdGt2bS1cdTAwM2VmaWxlID0gZmlsZTtcbitcbiBcdGt2bV91ZXZlbnRfbm90aWZ5X2NoYW5nZShLVk1fRVZFTlRfQ1JFQVRFX1ZNLCBrdm0pO1xuIFxuIFx0ZmRfaW5zdGFsbChmZCwgZmlsZSk7XG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vdmZpby5jIGIvdmlydC9rdm0vdmZpby5jXG5pbmRleCA2Y2RjNGU5YTMzM2EzLi4xOTU0OGE0MzA5NDI2IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vdmZpby5jXG4rKysgYi92aXJ0L2t2bS92ZmlvLmNcbkBAIC0zNSwxNSArMzUsMTUgQEAgc3RydWN0IGt2bV92ZmlvIHtcbiBcdGJvb2wgbm9uY29oZXJlbnQ7XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCBrdm1fdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSlcbitzdGF0aWMgdm9pZCBrdm1fdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSlcbiB7XG4tXHR2b2lkICgqZm4pKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pO1xuK1x0dm9pZCAoKmZuKShzdHJ1Y3QgZmlsZSAqdmZpb19maWxlLCBzdHJ1Y3QgZmlsZSAqa3ZtKTtcbiBcbiBcdGZuID0gc3ltYm9sX2dldCh2ZmlvX2ZpbGVfc2V0X2t2bSk7XG4gXHRpZiAoIWZuKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRmbihmaWxlLCBrdm0pO1xuK1x0Zm4odmZpb19maWxlLCBrdm0pO1xuIFxuIFx0c3ltYm9sX3B1dCh2ZmlvX2ZpbGVfc2V0X2t2bSk7XG4gfVxuQEAgLTE0NCw2ICsxNDQsNyBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZClcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZmaW8gKmt2ID0gZGV2LVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3Qga3ZtX3ZmaW9fZmlsZSAqa3ZmO1xuK1x0c3RydWN0IGZpbGUgKmt2bV9maWxlIF9fZnJlZShmcHV0KSA9IE5VTEw7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlscCBfX2ZyZWUoZnB1dCkgPSBOVUxMO1xuIFxuIFx0ZmlscCA9IGZnZXQoZmQpO1xuQEAgLTE1NCw2ICsxNTUsMTAgQEAgc3RhdGljIGludCBrdm1fdmZpb19maWxlX2FkZChzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmQpXG4gXHRpZiAoIWt2bV92ZmlvX2ZpbGVfaXNfdmFsaWQoZmlscCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0a3ZtX2ZpbGUgPSBnZXRfZmlsZV9hY3RpdmUoXHUwMDI2ZGV2LVx1MDAzZWt2bS1cdTAwM2VmaWxlKTtcbitcdGlmICgha3ZtX2ZpbGUpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuIFx0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2LVx1MDAzZWxvY2spO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShrdmYsIFx1MDAyNmt2LVx1MDAzZWZpbGVfbGlzdCwgbm9kZSkge1xuQEAgLTE2OCw3ICsxNzMsNyBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZClcbiBcdGt2Zi1cdTAwM2VmaWxlID0gZ2V0X2ZpbGUoZmlscCk7XG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNmt2Zi1cdTAwM2Vub2RlLCBcdTAwMjZrdi1cdTAwM2VmaWxlX2xpc3QpO1xuIFxuLVx0a3ZtX3ZmaW9fZmlsZV9zZXRfa3ZtKGt2Zi1cdTAwM2VmaWxlLCBkZXYtXHUwMDNla3ZtKTtcbitcdGt2bV92ZmlvX2ZpbGVfc2V0X2t2bShrdmYtXHUwMDNlZmlsZSwga3ZtX2ZpbGUpO1xuIFx0a3ZtX3ZmaW9fdXBkYXRlX2NvaGVyZW5jeShkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDoxNzowMC4zOTAyNTA3OThaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODI3NTg1NDU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEFzc2Vzc21lbnQgb2YgS1ZNL1ZGSU8gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2gsIHdoaWNoIHJlZmFjdG9ycyBLVk0vVkZJTyBpbnRlcmFjdGlvbiB0byB1c2UgYHN0cnVjdCBmaWxlICpgIGZvciBwYWdlIHRyYWNraW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcsIGxpa2VseSAqZG9lc24ndCogd2FycmFudCBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0J3Mgc2VlIGlmIHRoYXQgaG9sZHMgdXAuXG5cbkZpcnN0LCB0aGUgcGF0Y2gncyBpbnRlbnQgaXMgY2xlYXI6IG1vZGVybml6ZSB0aGUgS1ZNIGFuZCBWRklPIGludGVyYWN0aW9uLCBzd2l0Y2hpbmcgdG8gdGhlIGBzdHJ1Y3QgZmlsZWAgcmVmZXJlbmNlIGNvdW50LiBXZSdyZSBtb3ZpbmcgYXdheSBmcm9tIGRpcmVjdCBga3ZtX2dldF9rdm1gL2Brdm1fcHV0X2t2bWAgY2FsbHMgaW4gZmF2b3Igb2YgYGdldF9maWxlYC9gZnB1dGAsIHdoaWNoIGlzIGEgZ29vZCBtb3ZlIGZvciBnZW5lcmFsIGtlcm5lbCBvYmplY3QgbWFuYWdlbWVudC5cblxuSSd2ZSBnb25lIG92ZXIgdGhlIGRpZmYgbWV0aWN1bG91c2x5LiBJdCB0b3VjaGVzIGEgZ29vZCBudW1iZXIgb2YgZmlsZXMsIGZyb20gcGFnZSB0cmFja2luZyB0byBWRklPIGRldmljZSBtYW5hZ2VtZW50LCBidXQgaXQncyBmdW5kYW1lbnRhbGx5IGFib3V0IHBvaW50ZXIgY2hhbmdlcyBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGUga2V5IGZ1bmN0aW9ucyDigJMgYGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyYCwgYGt2bV93cml0ZV90cmFja19hZGRfZ2ZuYCwgYW5kIHRoZWlyIGNvdW50ZXJwYXJ0cyDigJMgYXJlIHVwZGF0ZWQgdG8gdGFrZSBgc3RydWN0IGZpbGUgKmAgaW5zdGVhZCBvZiBgc3RydWN0IGt2bSAqYC4gSW1wb3J0YW50bHksIGl0IHNlZW1zIGxpa2UgdGhlc2UgY2hhbmdlcyBhcmUgYmVpbmcgcHJvcGFnYXRlZCB0aHJvdWdob3V0IHRoZSBWRklPIHN1YnN5c3RlbSBhcyB3ZWxsLCByZXBsYWNpbmcgYGt2bV9nZXRfa3ZtYC9ga3ZtX3B1dF9rdm1gIGNhbGxzIHdpdGggYGdldF9maWxlYCBhbmQgYGZwdXRgIGluIHZhcmlvdXMgY29udGV4dHMsIGxpa2UgYHZmaW9fYXBfbWRldl9zZXRfa3ZtYCBhbmQgYHZmaW9fZ3JvdXBfc2V0X2t2bWAuXG5cbkkndmUgY2hlY2tlZCBmb3IgdGhlIGNvbW1vbiBtZW1vcnkgc2FmZXR5IGJ1Z3MsIHRoYXQgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBjaGVja3M6XG4qICAgKipPYmplY3QgbGlmZXRpbWUvcmVmY291bnRpbmcgYnVnczoqKiBVc2UtYWZ0ZXItZnJlZSwgZG91YmxlIGBmcHV0YCwgZGFuZ2xpbmcgcG9pbnRlcnMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHJhY2UgY29uZGl0aW9ucyBvbiByZWZjb3VudHMuIEkgKmRvbid0KiBzZWUgYW55IG9idmlvdXMgcmVkIGZsYWdzIG9uIGEgcXVpY2sgcmVhZC4gTm8gbmV3IGFsbG9jYXRpb25zLCBubyBvYnZpb3VzIGRvdWJsZSBwdXRzLCBhbmQgdGhlIHJlZmNvdW50IGxvZ2ljIHNlZW1zIHNvdW5kLiBUaGVzZSBraW5kcyBvZiBpc3N1ZXMgYXJlIGV4YWN0bHkgd2hhdCBLQVNBTiBhbmQgbG9ja2RlcCBhcmUgZ29vZCBhdCBjYXRjaGluZy5cblxuTm93LCBsZXQncyBmb2N1cyBvbiB0aGUgS01TQU4gYW5nbGU6IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGlzIGlzIHdoZXJlIHdlIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsLlxuKiAgICoqTmV3IGFsbG9jYXRpb25zPyoqIE5vLiBOb3RoaW5nIG5ldyBpcyBiZWluZyBhbGxvY2F0ZWQgaGVyZS5cbiogICAqKkRhdGEgY29waWVkIHRvIHVzZXJzcGFjZT8qKiBOby4gTm8gYGNvcHlfdG9fdXNlcmAgY2FsbHMgb3IgYW55dGhpbmcgb2YgdGhhdCBzb3J0IHRoYXQgd291bGQgaW5kaWNhdGUgaW5mb3JtYXRpb24gbGVha2FnZS5cbiogICAqKkNvbmRpdGlvbmFsIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIGluc3RhbmNlcyBvZiB0aGlzLlxuKiAgICoqU3RydWN0IHBhZGRpbmcgY2hhbmdlcz8qKiBOb3BlLCBubyBjaGFuZ2VzIHRvIHN0cnVjdCBwYWRkaW5nLCBzZXJpYWxpemF0aW9uLCBvciBkZXNlcmlhbGl6YXRpb24uXG5cblRoZSBjb3JlIG9mIEtNU0FOIGlzIHRvIGRldGVjdCBpZiBhIG1lbW9yeSByZWFkIG9jY3VycyBiZWZvcmUgdGhlIG1lbW9yeSBpcyBpbml0aWFsaXplZC4gV2UgbmVlZCB0byBhc3Nlc3MgaWYgdGhlIHBhdGNoIGludHJvZHVjZXMgcmlza3Mgd2hlcmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZC5cblxuTG9va2luZyBiYWNrLCB0aGVyZSBhcmUgbm8gc3VjaCByaXNrcyBJIHNlZTsgdGhlIG9ubHkgY2hhbmdlcyBhcmUgdG8gdHlwZSBpbmZvcm1hdGlvbiwgc28gbm8gS01TQU4gaXMgbmVlZGVkLlxuXG5JJ3ZlIHJlLWV4YW1pbmVkIHRoZSBjb2RlLiBJIGFtIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LiBUaGlzIHBhdGNoIGZvY3VzZXMgb24gcG9pbnRlciByZS10eXBpbmcgYW5kIHJlZmVyZW5jZSBjb3VudGluZyB1c2luZyBrZXJuZWwgcHJpbWl0aXZlcywgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdGhhdCBLTVNBTiB3b3VsZCBkZXRlY3QuIEtBU0FOIGFuZCBsb2NrZGVwIHNob3VsZCBiZSBtb3JlIHRoYW4gc3VmZmljaWVudCB0byBjYXRjaCBwb3RlbnRpYWwgZXJyb3JzIGhlcmUuXG5cbioqVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4qKiBJJ20gc2V0dGluZyB0aGUgcmVzdWx0cyBhbmQgbW92aW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzczLCJPdXRwdXRUb2tlbnMiOjE4NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDoxNzowOC42NjYxMTc1NDdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBpbnRlcmFjdGlvbiBiZXR3ZWVuIEtWTSBhbmQgVkZJTyAoYXMgd2VsbCBhcyB4ODYgcGFnZSB0cmFja2luZyBhbmQgczM5MCB2ZmlvLWFwKSBieSBwYXNzaW5nIGFuZCB0cmFja2luZyBgc3RydWN0IGZpbGUgKmAgaW5zdGVhZCBvZiByYXcgYHN0cnVjdCBrdm0gKmAgcG9pbnRlcnMuXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzLCBmaWxlL0tWTSByZWZlcmVuY2UgY291bnRpbmcsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFN1Y2ggaXNzdWVzIGFyZSBtZW1vcnkgbWFuYWdlbWVudCBidWdzIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgYnVmZmVycyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGRhdGEgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEhlbmNlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgd2FycmFudGluZyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBpbnRlcmFjdGlvbiBiZXR3ZWVuIEtWTSBhbmQgVkZJTyAoYXMgd2VsbCBhcyB4ODYgcGFnZSB0cmFja2luZyBhbmQgczM5MCB2ZmlvLWFwKSBieSBwYXNzaW5nIGFuZCB0cmFja2luZyBgc3RydWN0IGZpbGUgKmAgaW5zdGVhZCBvZiByYXcgYHN0cnVjdCBrdm0gKmAgcG9pbnRlcnMuXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzLCBmaWxlL0tWTSByZWZlcmVuY2UgY291bnRpbmcsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFN1Y2ggaXNzdWVzIGFyZSBtZW1vcnkgbWFuYWdlbWVudCBidWdzIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgYnVmZmVycyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGRhdGEgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEhlbmNlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgd2FycmFudGluZyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxbqqz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 10:14:16 +0000 UTC FinishedAt: 2026-09-04 10:17:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "940de590b839f71d6dc846160534bf202401b8b7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "VFIO", "VFIO_GROUP", "VFIO_CONTAINER", "VFIO_DEVICE_CDEV", "DRM_I915_GVT_KVMGT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "940de590b839f71d6dc846160534bf202401b8b7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "VFIO", "VFIO_GROUP", "VFIO_CONTAINER", "VFIO_DEVICE_CDEV", "DRM_I915_GVT_KVMGT" ], "series_id": "308ccf27-f252-4e8c-8e88-572275635063" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_vfio_file_add", "vfio_file_set_kvm", "vfio_group_set_kvm", "vfio_device_get_kvm_safe", "vfio_device_put_kvm", "file_to_kvm", "kvm_vm_release", "kvm_dev_ioctl_create_vm", "kvm_page_track_register_notifier", "kvm_page_track_unregister_notifier", "kvm_write_track_add_gfn", "kvm_write_track_remove_gfn" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O1ZGSU9fR1JPVVAmIzM0OywKICAgICYjMzQ7VkZJT19DT05UQUlORVImIzM0OywKICAgICYjMzQ7VkZJT19ERVZJQ0VfQ0RFViYjMzQ7LAogICAgJiMzNDtEUk1fSTkxNV9HVlRfS1ZNR1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdmZpb19maWxlX2FkZCYjMzQ7LAogICAgJiMzNDt2ZmlvX2ZpbGVfc2V0X2t2bSYjMzQ7LAogICAgJiMzNDt2ZmlvX2dyb3VwX3NldF9rdm0mIzM0OywKICAgICYjMzQ7dmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlJiMzNDssCiAgICAmIzM0O3ZmaW9fZGV2aWNlX3B1dF9rdm0mIzM0OywKICAgICYjMzQ7ZmlsZV90b19rdm0mIzM0OywKICAgICYjMzQ7a3ZtX3ZtX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7a3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm0mIzM0OywKICAgICYjMzQ7a3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXImIzM0OywKICAgICYjMzQ7a3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbiYjMzQ7LAogICAgJiMzNDtrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBpbnRlcmFjdGlvbiBiZXR3ZWVuIEtWTSBhbmQgVkZJTyAoYXMgd2VsbCBhcyB4ODYgcGFnZSB0cmFja2luZyBhbmQgczM5MCB2ZmlvLWFwKSBieSBwYXNzaW5nIGFuZCB0cmFja2luZyBgc3RydWN0IGZpbGUgKmAgaW5zdGVhZCBvZiByYXcgYHN0cnVjdCBrdm0gKmAgcG9pbnRlcnMuXG5cbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lcywgZmlsZS9LVk0gcmVmZXJlbmNlIGNvdW50aW5nLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBTdWNoIGlzc3VlcyBhcmUgbWVtb3J5IG1hbmFnZW1lbnQgYnVncyBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLlxuXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2sgb3IgaGVhcCBidWZmZXJzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgZGF0YSBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGludm9sdmUgY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSGVuY2UsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB3YXJyYW50aW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgdGhlIHJlZmVyZW5jZSBtYW5hZ2VtZW50IGJldHdlZW4gS1ZNIGFuZCBleHRlcm5hbCBzdWJzeXN0ZW1zIChwcmltYXJpbHkgVkZJTyBhbmQgS1ZNIHBhZ2UgdHJhY2tpbmcpLCBzd2l0Y2hpbmcgZnJvbSBob2xkaW5nIGRpcmVjdCAmIzM5O3N0cnVjdCBrdm0gKiYjMzk7IHBvaW50ZXJzIHRvIHVzaW5nICYjMzk7c3RydWN0IGZpbGUgKiYjMzk7IHJlZmVyZW5jZXMgdmlhIGdldF9maWxlKCkvZnB1dCgpIGFuZCBnZXRfZmlsZV9hY3RpdmUoKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGxpZmVjeWNsZSBwYXRocywgY29uY3VycmVuY3ksIGFuZCByZWZjb3VudGluZyBiZXR3ZWVuIEtWTSBWTSBmaWxlcyBhbmQgVkZJTyBkZXZpY2VzL2dyb3VwcyBkdXJpbmcgVk0gY3JlYXRpb24sIHJlbGVhc2UsIGFuZCBWRklPIGRldmljZSBhdHRhY2htZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjE2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTM4ZTI5NDU5NGQyZTlkZmFhNTRkYWFlNTRmMzlmY2IzNmY1ODVhNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTA6MTY6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhZ2VfdHJhY2suaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmhcbmluZGV4IDNkMDQwNzQxMDQ0YjQuLjA0NmEyNWM4ZmU0ZjggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFnZV90cmFjay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFnZV90cmFjay5oXG5AQCAtNDQsMTMgJiM0Mzs0NCwxMyBAQCBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSB7XG4gXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm5vZGUpO1xuIH07XG4gXG4taW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSxcbiYjNDM7aW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbik7XG4tdm9pZCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSxcbiYjNDM7dm9pZCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdFx0XHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbik7XG4gXG4taW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTtcbi1pbnQga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pO1xuJiM0MztpbnQga3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm4oc3RydWN0IGZpbGUgKmZpbGUsIGdmbl90IGdmbik7XG4mIzQzO2ludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3QgZmlsZSAqZmlsZSwgZ2ZuX3QgZ2ZuKTtcbiAjZWxzZVxuIC8qXG4gICogQWxsb3cgZGVmaW5pbmcgYSBub2RlIGluIGEgc3RydWN0dXJlIGV2ZW4gaWYgcGFnZSB0cmFja2luZyBpcyBkaXNhYmxlZCwgZS5nLlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZSBiL2FyY2gveDg2L2t2bS9NYWtlZmlsZVxuaW5kZXggMDQ3NDYwNGFiOGExNC4uOTZmODlkNmY3ZTZhOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL01ha2VmaWxlXG5AQCAtNjAsMTAgJiM0Mzs2MCw3IEBAIGV4cG9ydHNfZ3JlcF90cmFpbGVyIDo9IC0taW5jbHVkZT0mIzM5OyouW2NoXSYjMzk7IC1ucncgJChzcmN0cmVlKS92aXJ0L2t2bSAkKHNyY3RyZWUpL2FcbiBcdFx0XHRncmVwIC12IC1lIGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyIFxcXG4gXHRcdFx0XHQtZSBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyIFxcXG4gXHRcdFx0XHQtZSBrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbiBcXFxuLVx0XHRcdFx0LWUga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4gXFxcbi1cdFx0XHRcdC1lIGt2bV9nZXRfa3ZtIFxcXG4tXHRcdFx0XHQtZSBrdm1fZ2V0X2t2bV9zYWZlIFxcXG4tXHRcdFx0XHQtZSBrdm1fcHV0X2t2bVxuJiM0MztcdFx0XHRcdC1lIGt2bV93cml0ZV90cmFja19yZW1vdmVfZ2ZuXG4gXG4gIyBGb3JjZSBncmVwIHRvIGVtaXQgYSBnb29meSBncm91cCBzZXBhcmF0b3IgdGhhdCBjYW4gaW4gdHVybiBiZSByZXBsYWNlZCB3aXRoXG4gIyB0aGUgYWJvdmUgbmV3bGluZSBtYWNybyAobmV3bGluZXMgaW4gTWFrZSBhcmUgYSBuaWdodG1hcmUpLiAgTm90ZSwgZ3JlcCBvbmx5XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMgYi9hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suY1xuaW5kZXggN2U4MTk1YTMxMWJiMC4uOThmMTMzZTRmMGIzMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suY1xuQEAgLTIzNywxMCAmIzQzOzIzNywxMSBAQCBzdGF0aWMgaW50IGt2bV9lbmFibGVfZXh0ZXJuYWxfd3JpdGVfdHJhY2tpbmcoc3RydWN0IGt2bSAqa3ZtKVxuICAqIHJlZ2lzdGVyIHRoZSBub3RpZmllciBzbyB0aGF0IGV2ZW50IGludGVyY2VwdGlvbiBmb3IgdGhlIHRyYWNrZWQgZ3Vlc3RcbiAgKiBwYWdlcyBjYW4gYmUgcmVjZWl2ZWQuXG4gICovXG4taW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSxcbiYjNDM7aW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbilcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfaGVhZCAqaGVhZDtcbiYjNDM7XHRzdHJ1Y3Qga3ZtICprdm0gPSBmaWxlX3RvX2t2bShmaWxlKTtcbiBcdGludCByO1xuIFxuIFx0aWYgKCFrdm0gfHwga3ZtLVx1MDAzZW1tICE9IGN1cnJlbnQtXHUwMDNlbW0pXG5AQCAtMjUyLDcgJiM0MzsyNTMsNyBAQCBpbnQga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdHJldHVybiByO1xuIFx0fVxuIFxuLVx0a3ZtX2dldF9rdm0oa3ZtKTtcbiYjNDM7XHRnZXRfZmlsZShmaWxlKTtcbiBcbiBcdGhlYWQgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC50cmFja19ub3RpZmllcl9oZWFkO1xuIFxuQEAgLTI2NywxMCAmIzQzOzI2OCwxMSBAQCBFWFBPUlRfU1lNQk9MX0dQTChrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcik7XG4gICogc3RvcCByZWNlaXZpbmcgdGhlIGV2ZW50IGludGVyY2VwdGlvbi4gSXQgaXMgdGhlIG9wcG9zZWQgb3BlcmF0aW9uIG9mXG4gICoga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIoKS5cbiAgKi9cbi12b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLFxuJiM0Mzt2b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0XHRcdHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpuKVxuIHtcbiBcdHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9oZWFkICpoZWFkO1xuJiM0MztcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbGVfdG9fa3ZtKGZpbGUpO1xuIFxuIFx0aGVhZCA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLnRyYWNrX25vdGlmaWVyX2hlYWQ7XG4gXG5AQCAtMjc5LDcgJiM0MzsyODEsNyBAQCB2b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLFxuIFx0d3JpdGVfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXHRzeW5jaHJvbml6ZV9zcmN1KFx1MDAyNmhlYWQtXHUwMDNldHJhY2tfc3JjdSk7XG4gXG4tXHRrdm1fcHV0X2t2bShrdm0pO1xuJiM0MztcdGZwdXQoZmlsZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIpO1xuIFxuQEAgLTMzNiwxMSAmIzQzOzMzOCwxMiBAQCB2b2lkIGt2bV9wYWdlX3RyYWNrX2RlbGV0ZV9zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbiAgKiBhZGQgZ3Vlc3QgcGFnZSB0byB0aGUgdHJhY2tpbmcgcG9vbCBzbyB0aGF0IGNvcnJlc3BvbmRpbmcgYWNjZXNzIG9uIHRoYXRcbiAgKiBwYWdlIHdpbGwgYmUgaW50ZXJjZXB0ZWQuXG4gICpcbi0gKiBAa3ZtOiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uXG4mIzQzOyAqIEBmaWxlOiB0aGUgVk0gZmlsZSBvZiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uXG4gICogQGdmbjogdGhlIGd1ZXN0IHBhZ2UuXG4gICovXG4taW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKVxuJiM0MztpbnQga3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm4oc3RydWN0IGZpbGUgKmZpbGUsIGdmbl90IGdmbilcbiB7XG4mIzQzO1x0c3RydWN0IGt2bSAqa3ZtID0gZmlsZV90b19rdm0oZmlsZSk7XG4gXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xuIFx0aW50IGlkeDtcbiBcbkBAIC0zNjYsMTEgJiM0MzszNjksMTIgQEAgRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm4pO1xuICAqIHJlbW92ZSB0aGUgZ3Vlc3QgcGFnZSBmcm9tIHRoZSB0cmFja2luZyBwb29sIHdoaWNoIHN0b3BzIHRoZSBpbnRlcmNlcHRpb25cbiAgKiBvZiBjb3JyZXNwb25kaW5nIGFjY2VzcyBvbiB0aGF0IHBhZ2UuXG4gICpcbi0gKiBAa3ZtOiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uXG4mIzQzOyAqIEBmaWxlOiB0aGUgVk0gZmlsZSBvZiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uXG4gICogQGdmbjogdGhlIGd1ZXN0IHBhZ2UuXG4gICovXG4taW50IGt2bV93cml0ZV90cmFja19yZW1vdmVfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKVxuJiM0MztpbnQga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4oc3RydWN0IGZpbGUgKmZpbGUsIGdmbl90IGdmbilcbiB7XG4mIzQzO1x0c3RydWN0IGt2bSAqa3ZtID0gZmlsZV90b19rdm0oZmlsZSk7XG4gXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xuIFx0aW50IGlkeDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbmluZGV4IDk0MGMwZmY2NjhiZWUuLmYxNjBlMTk0NWZiY2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuQEAgLTE4MjIsMTcgJiM0MzsxODIyLDI3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICp2ZmlvX2FwX21kZXZfYXR0cl9ncm91cHNbXSA9IHtcbiBcbiAvKipcbiAgKiB2ZmlvX2FwX21kZXZfc2V0X2t2bSAtIHNldHMgYWxsIGRhdGEgZm9yIEBtYXRyaXhfbWRldiB0aGF0IGFyZSBuZWVkZWRcbi0gKiB0byBtYW5hZ2UgQVAgcmVzb3VyY2VzIGZvciB0aGUgZ3Vlc3Qgd2hvc2Ugc3RhdGUgaXMgcmVwcmVzZW50ZWQgYnkgQGt2bVxuJiM0MzsgKiB0byBtYW5hZ2UgQVAgcmVzb3VyY2VzIGZvciB0aGUgZ3Vlc3Qgd2hvc2Ugc3RhdGUgaXMgcmVwcmVzZW50ZWQgYnlcbiYjNDM7ICogQGt2bV9maWxlXG4gICpcbiAgKiBAbWF0cml4X21kZXY6IGEgbWVkaWF0ZWQgbWF0cml4IGRldmljZVxuLSAqIEBrdm06IHJlZmVyZW5jZSB0byBLVk0gaW5zdGFuY2VcbiYjNDM7ICogQGt2bV9maWxlOiB0aGUgS1ZNIFZNIGZpbGUgdGhpcyB2ZmlvIGRldmljZSBpcyBhc3NvY2lhdGVkIHdpdGhcbiAgKlxuLSAqIFJldHVybjogMCBpZiBubyBvdGhlciBtZWRpYXRlZCBtYXRyaXggZGV2aWNlIGhhcyBhIHJlZmVyZW5jZSB0byBAa3ZtO1xuJiM0MzsgKiBSZXR1cm46IDAgaWYgbm8gb3RoZXIgbWVkaWF0ZWQgbWF0cml4IGRldmljZSBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIFZNO1xuICAqIG90aGVyd2lzZSwgcmV0dXJucyBhbiAtRVBFUk0uXG4gICovXG4gc3RhdGljIGludCB2ZmlvX2FwX21kZXZfc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuLVx0XHRcdFx0c3RydWN0IGt2bSAqa3ZtKVxuJiM0MztcdFx0XHRcdHN0cnVjdCBmaWxlICprdm1fZmlsZSlcbiB7XG4mIzQzO1x0c3RydWN0IGt2bSAqa3ZtO1xuJiM0MztcbiYjNDM7XHRpZiAoIWt2bV9maWxlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1xuJiM0MztcdGt2bSA9IGt2bV9maWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XHRpZiAoIWt2bSlcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcbiBcdGlmIChrdm0tXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2JkKSB7XG4gXHRcdGdldF91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuIFx0XHRpZiAoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vaykge1xuQEAgLTE4NDEsNyAmIzQzOzE4NTEsNiBAQCBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9zZXRfa3ZtKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG4gXHRcdH1cbiBcdFx0a3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vayA9IFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZXBxYXBfaG9vaztcbiBcbi1cdFx0a3ZtX2dldF9rdm0oa3ZtKTtcbiBcdFx0bWF0cml4X21kZXYtXHUwMDNla3ZtID0ga3ZtO1xuIFx0XHR2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpO1xuIFx0XHRyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7XG5AQCAtMTg5NCw3ICYjNDM7MTkwMyw2IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl91bnNldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbiBcdFx0bWF0cml4X21kZXYtXHUwMDNla3ZtID0gTlVMTDtcbiBcbiBcdFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuLVx0XHRrdm1fcHV0X2t2bShrdm0pO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vZ3JvdXAuYyBiL2RyaXZlcnMvdmZpby9ncm91cC5jXG5pbmRleCBiMjI5OWU1YmM2ZGYzLi41YmY4Y2JkZmYzNzdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL2dyb3VwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9ncm91cC5jXG5AQCAtODYwLDExICYjNDM7ODYwLDIwIEBAIGJvb2wgdmZpb19ncm91cF9lbmZvcmNlZF9jb2hlcmVudChzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXApXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi12b2lkIHZmaW9fZ3JvdXBfc2V0X2t2bShzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXAsIHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7dm9pZCB2ZmlvX2dyb3VwX3NldF9rdm0oc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgZmlsZSAqa3ZtKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqb2xkO1xuJiM0MztcbiYjNDM7XHRpZiAoa3ZtKVxuJiM0MztcdFx0Z2V0X2ZpbGUoa3ZtKTtcbiYjNDM7XG4gXHRzcGluX2xvY2soXHUwMDI2Z3JvdXAtXHUwMDNla3ZtX3JlZl9sb2NrKTtcbiYjNDM7XHRvbGQgPSBncm91cC1cdTAwM2Vrdm07XG4gXHRncm91cC1cdTAwM2Vrdm0gPSBrdm07XG4gXHRzcGluX3VubG9jayhcdTAwMjZncm91cC1cdTAwM2Vrdm1fcmVmX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAob2xkKVxuJiM0MztcdFx0ZnB1dChvbGQpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jXG5pbmRleCBmNDdmMzYzMTRhMWNjLi4wNDUxMzJlOTBiZmVlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jXG5AQCAtMTg0LDYgJiM0MzsxODQsNyBAQCBpbnQgdmZpb19wY2lfemRldl9mZWF0dXJlX2VycihzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxuIGludCB2ZmlvX3BjaV96ZGV2X29wZW5fZGV2aWNlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiB7XG4gXHRzdHJ1Y3QgenBjaV9kZXYgKnpkZXYgPSB0b196cGNpKHZkZXYtXHUwMDNlcGRldik7XG4mIzQzO1x0c3RydWN0IGt2bSAqa3ZtO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICghemRldilcbkBAIC0xOTUsOSAmIzQzOzE5NiwxNCBAQCBpbnQgdmZpb19wY2lfemRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cmV0ID0gLUVOT0VOVDtcbiYjNDM7XHRrdm0gPSB2ZGV2LVx1MDAzZXZkZXYua3ZtLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XHRpZiAoIWt2bSlcbiYjNDM7XHRcdGdvdG8gcmVjb3Zlcnk7XG4mIzQzO1xuIFx0aWYgKHpwY2lfa3ZtX2hvb2sua3ZtX3JlZ2lzdGVyKVxuLVx0XHRyZXQgPSB6cGNpX2t2bV9ob29rLmt2bV9yZWdpc3Rlcih6ZGV2LCB2ZGV2LVx1MDAzZXZkZXYua3ZtKTtcbiYjNDM7XHRcdHJldCA9IHpwY2lfa3ZtX2hvb2sua3ZtX3JlZ2lzdGVyKHpkZXYsIGt2bSk7XG4gXG4mIzQzO3JlY292ZXJ5OlxuIFx0aWYgKHJldClcbiBcdFx0enBjaV9zdG9wX21lZGlhdGVkX3JlY292ZXJ5KHpkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby92ZmlvLmggYi9kcml2ZXJzL3ZmaW8vdmZpby5oXG5pbmRleCA3NzI4YmM5OWI2M2QxLi45YjYxOTk1MWE1ZDBjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3ZmaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3ZmaW8uaFxuQEAgLTIzLDcgJiM0MzsyMyw3IEBAIHN0cnVjdCB2ZmlvX2RldmljZV9maWxlIHtcbiBcdHU4IGFjY2Vzc19ncmFudGVkO1xuIFx0dTMyIGRldmlkOyAvKiBvbmx5IHZhbGlkIHdoZW4gaW9tbXVmZCBpcyB2YWxpZCAqL1xuIFx0c3BpbmxvY2tfdCBrdm1fcmVmX2xvY2s7IC8qIHByb3RlY3Qga3ZtIGZpZWxkICovXG4tXHRzdHJ1Y3Qga3ZtICprdm07XG4mIzQzO1x0c3RydWN0IGZpbGUgKmt2bTtcbiBcdHN0cnVjdCBpb21tdWZkX2N0eCAqaW9tbXVmZDsgLyogcHJvdGVjdGVkIGJ5IHN0cnVjdCB2ZmlvX2RldmljZV9zZXQ6OmxvY2sgKi9cbiB9O1xuIFxuQEAgLTg4LDcgJiM0Mzs4OCw3IEBAIHN0cnVjdCB2ZmlvX2dyb3VwIHtcbiAjZW5kaWZcbiBcdGVudW0gdmZpb19ncm91cF90eXBlXHRcdHR5cGU7XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRncm91cF9sb2NrO1xuLVx0c3RydWN0IGt2bVx0XHRcdCprdm07XG4mIzQzO1x0c3RydWN0IGZpbGVcdFx0XHQqa3ZtO1xuIFx0c3RydWN0IGZpbGVcdFx0XHQqb3BlbmVkX2ZpbGU7XG4gXHRzdHJ1Y3QgaW9tbXVmZF9jdHhcdFx0KmlvbW11ZmQ7XG4gXHRzcGlubG9ja190XHRcdFx0a3ZtX3JlZl9sb2NrO1xuQEAgLTEwNyw3ICYjNDM7MTA3LDcgQEAgdm9pZCB2ZmlvX2RldmljZV9ncm91cF91bnVzZV9pb21tdShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSk7XG4gdm9pZCB2ZmlvX2RmX2dyb3VwX2Nsb3NlKHN0cnVjdCB2ZmlvX2RldmljZV9maWxlICpkZik7XG4gc3RydWN0IHZmaW9fZ3JvdXAgKnZmaW9fZ3JvdXBfZnJvbV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKTtcbiBib29sIHZmaW9fZ3JvdXBfZW5mb3JjZWRfY29oZXJlbnQoc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwKTtcbi12b2lkIHZmaW9fZ3JvdXBfc2V0X2t2bShzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXAsIHN0cnVjdCBrdm0gKmt2bSk7XG4mIzQzO3ZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGZpbGUgKmt2bSk7XG4gYm9vbCB2ZmlvX2RldmljZV9oYXNfY29udGFpbmVyKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKTtcbiBpbnQgX19pbml0IHZmaW9fZ3JvdXBfaW5pdCh2b2lkKTtcbiB2b2lkIHZmaW9fZ3JvdXBfY2xlYW51cCh2b2lkKTtcbkBAIC0xNjUsNyAmIzQzOzE2NSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX2dyb3VwX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGt2bSAqa3ZtKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGZpbGUgKmt2bSlcbiB7XG4gfVxuIFxuQEAgLTQyOSwxMSAmIzQzOzQyOSwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb192aXJxZmRfZXhpdCh2b2lkKVxuICNlbmRpZlxuIFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19LVk0pXG4tdm9pZCB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBrdm0gKmt2bSk7XG4mIzQzO3ZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZmlsZSAqa3ZtKTtcbiB2b2lkIHZmaW9fZGV2aWNlX3B1dF9rdm0oc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSxcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7XHRcdFx0XHRcdCAgICBzdHJ1Y3QgZmlsZSAqa3ZtKVxuIHtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jIGIvZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jXG5pbmRleCA0MjNlYWQ0OGFhZmUzLi5lZDk2YWNmYTg2MzU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmNcbkBAIC00NzIsMzYgJiM0Mzs0NzIsMTQgQEAgdm9pZCB2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKVxuIEVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fdW5yZWdpc3Rlcl9ncm91cF9kZXYpO1xuIFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19LVk0pXG4tdm9pZCB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7dm9pZCB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBmaWxlICprdm0pXG4ge1xuLVx0dm9pZCAoKnBmbikoc3RydWN0IGt2bSAqa3ZtKTtcbi1cdGJvb2wgKCpmbikoc3RydWN0IGt2bSAqa3ZtKTtcbi1cdGJvb2wgcmV0O1xuLVxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkZXZpY2UtXHUwMDNlZGV2X3NldC1cdTAwM2Vsb2NrKTtcbiBcbiBcdGlmICgha3ZtKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRwZm4gPSBzeW1ib2xfZ2V0KGt2bV9wdXRfa3ZtKTtcbi1cdGlmIChXQVJOX09OKCFwZm4pKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRmbiA9IHN5bWJvbF9nZXQoa3ZtX2dldF9rdm1fc2FmZSk7XG4tXHRpZiAoV0FSTl9PTighZm4pKSB7XG4tXHRcdHN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRyZXQgPSBmbihrdm0pO1xuLVx0c3ltYm9sX3B1dChrdm1fZ2V0X2t2bV9zYWZlKTtcbi1cdGlmICghcmV0KSB7XG4tXHRcdHN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRkZXZpY2UtXHUwMDNlcHV0X2t2bSA9IHBmbjtcbi1cdGRldmljZS1cdTAwM2Vrdm0gPSBrdm07XG4mIzQzO1x0ZGV2aWNlLVx1MDAzZWt2bSA9IGdldF9maWxlKGt2bSk7XG4gfVxuIFxuIHZvaWQgdmZpb19kZXZpY2VfcHV0X2t2bShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSlcbkBAIC01MTEsMTQgJiM0Mzs0ODksNyBAQCB2b2lkIHZmaW9fZGV2aWNlX3B1dF9rdm0oc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UpXG4gXHRpZiAoIWRldmljZS1cdTAwM2Vrdm0pXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmIChXQVJOX09OKCFkZXZpY2UtXHUwMDNlcHV0X2t2bSkpXG4tXHRcdGdvdG8gY2xlYXI7XG4tXG4tXHRkZXZpY2UtXHUwMDNlcHV0X2t2bShkZXZpY2UtXHUwMDNla3ZtKTtcbi1cdGRldmljZS1cdTAwM2VwdXRfa3ZtID0gTlVMTDtcbi1cdHN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pO1xuLVxuLWNsZWFyOlxuJiM0MztcdGZwdXQoZGV2aWNlLVx1MDAzZWt2bSk7XG4gXHRkZXZpY2UtXHUwMDNla3ZtID0gTlVMTDtcbiB9XG4gI2VuZGlmXG5AQCAtMTU0NCw5ICYjNDM7MTUxNSwxMyBAQCBib29sIHZmaW9fZmlsZV9lbmZvcmNlZF9jb2hlcmVudChzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmZpb19maWxlX2VuZm9yY2VkX2NvaGVyZW50KTtcbiBcbi1zdGF0aWMgdm9pZCB2ZmlvX2RldmljZV9maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7c3RhdGljIHZvaWQgdmZpb19kZXZpY2VfZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCB2ZmlvX2RldmljZV9maWxlICpkZiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuJiM0MztcdHN0cnVjdCBmaWxlICpvbGQ7XG4mIzQzO1xuJiM0MztcdGlmIChrdm0pXG4mIzQzO1x0XHRnZXRfZmlsZShrdm0pO1xuIFxuIFx0LypcbiBcdCAqIFRoZSBrdm0gaXMgZmlyc3QgcmVjb3JkZWQgaW4gdGhlIHZmaW9fZGV2aWNlX2ZpbGUsIGFuZCB3aWxsXG5AQCAtMTU1NCwyOCAmIzQzOzE1MjksMzIgQEAgc3RhdGljIHZvaWQgdmZpb19kZXZpY2VfZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHQgKiBpb21tdWZkIHN1Y2Nlc3NmdWxseSBpbiB0aGUgdmZpbyBkZXZpY2UgY2RldiBwYXRoLlxuIFx0ICovXG4gXHRzcGluX2xvY2soXHUwMDI2ZGYtXHUwMDNla3ZtX3JlZl9sb2NrKTtcbiYjNDM7XHRvbGQgPSBkZi1cdTAwM2Vrdm07XG4gXHRkZi1cdTAwM2Vrdm0gPSBrdm07XG4gXHRzcGluX3VubG9jayhcdTAwMjZkZi1cdTAwM2Vrdm1fcmVmX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAob2xkKVxuJiM0MztcdFx0ZnB1dChvbGQpO1xuIH1cbiBcbiAvKipcbiAgKiB2ZmlvX2ZpbGVfc2V0X2t2bSAtIExpbmsgYSBrdm0gd2l0aCBWRklPIGRyaXZlcnNcbi0gKiBAZmlsZTogVkZJTyBncm91cCBmaWxlIG9yIFZGSU8gZGV2aWNlIGZpbGVcbi0gKiBAa3ZtOiBLVk0gdG8gbGlua1xuJiM0MzsgKiBAdmZpb19maWxlOiBWRklPIGdyb3VwIGZpbGUgb3IgVkZJTyBkZXZpY2UgZmlsZVxuJiM0MzsgKiBAa3ZtOiBLVk0gZmlsZSB0byBsaW5rXG4gICpcbiAgKiBXaGVuIGEgVkZJTyBkZXZpY2UgaXMgZmlyc3Qgb3BlbmVkIHRoZSBLVk0gd2lsbCBiZSBhdmFpbGFibGUgaW5cbiAgKiBkZXZpY2UtXHUwMDNla3ZtIGlmIG9uZSB3YXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWxlLlxuICAqL1xuLXZvaWQgdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7dm9pZCB2ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqdmZpb19maWxlLCBzdHJ1Y3QgZmlsZSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cDtcbiBcbi1cdGdyb3VwID0gdmZpb19ncm91cF9mcm9tX2ZpbGUoZmlsZSk7XG4mIzQzO1x0Z3JvdXAgPSB2ZmlvX2dyb3VwX2Zyb21fZmlsZSh2ZmlvX2ZpbGUpO1xuIFx0aWYgKGdyb3VwKVxuIFx0XHR2ZmlvX2dyb3VwX3NldF9rdm0oZ3JvdXAsIGt2bSk7XG4gXG4tXHRpZiAodmZpb19kZXZpY2VfZnJvbV9maWxlKGZpbGUpKVxuLVx0XHR2ZmlvX2RldmljZV9maWxlX3NldF9rdm0oZmlsZSwga3ZtKTtcbiYjNDM7XHRpZiAodmZpb19kZXZpY2VfZnJvbV9maWxlKHZmaW9fZmlsZSkpXG4mIzQzO1x0XHR2ZmlvX2RldmljZV9maWxlX3NldF9rdm0odmZpb19maWxlLCBrdm0pO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX2ZpbGVfc2V0X2t2bSk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5pbmRleCAwM2JmYzkyODY0YjZlLi5iZmVjY2UxYjU5NTVhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbkBAIC03ODQsNiAmIzQzOzc4NCwxMyBAQCBzdHJ1Y3Qga3ZtIHtcbiBcdCAqIGt2bV9zd2FwX2FjdGl2ZV9tZW1zbG90cygpLlxuIFx0ICovXG4gXHRzdHJ1Y3QgbXV0ZXggc2xvdHNfYXJjaF9sb2NrO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQmFjay1yZWZlcmVuY2UgdG8gdGhlIFZNIGZpbGUgZm9yIHN1YnN5c3RlbXMgKGUuZy4sIFZGSU8pLiBIb2xkcyBub1xuJiM0MztcdCAqIHJlZmVyZW5jZSB0byBhdm9pZCBwaW5uaW5nIHRoZSBWTS4gQWNjZXNzIHZpYSBnZXRfZmlsZV9hY3RpdmUoXHUwMDI2a3ZtLVx1MDAzZWZpbGUpXG4mIzQzO1x0ICogb25seeKAlHNhZmUgYmVjYXVzZSBjbGVhcmVkIGluIGt2bV92bV9yZWxlYXNlKCkgYmVmb3JlIGZpbGUgZnJlZWQuIENhbGxlcnNcbiYjNDM7XHQgKiBzdG9yaW5nIHRoZSByZXN1bHQgbXVzdCB0YWtlIHRoZWlyIG93biByZWZlcmVuY2UgdmlhIGdldF9maWxlKClcbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tOyAvKiB1c2Vyc3BhY2UgdGllZCB0byB0aGlzIHZtICovXG4gXHR1bnNpZ25lZCBsb25nIG5yX21lbXNsb3RfcGFnZXM7XG4gXHQvKiBUaGUgdHdvIG1lbXNsb3Qgc2V0cyAtIGFjdGl2ZSBhbmQgaW5hY3RpdmUgKHBlciBhZGRyZXNzIHNwYWNlKSAqL1xuQEAgLTEwODIsNiAmIzQzOzEwODksNyBAQCB2b2lkIGt2bV9nZXRfa3ZtKHN0cnVjdCBrdm0gKmt2bSk7XG4gYm9vbCBrdm1fZ2V0X2t2bV9zYWZlKHN0cnVjdCBrdm0gKmt2bSk7XG4gdm9pZCBrdm1fcHV0X2t2bShzdHJ1Y3Qga3ZtICprdm0pO1xuIGJvb2wgZmlsZV9pc19rdm0oc3RydWN0IGZpbGUgKmZpbGUpO1xuJiM0MztzdHJ1Y3Qga3ZtICpmaWxlX3RvX2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSk7XG4gdm9pZCBrdm1fcHV0X2t2bV9ub19kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSk7XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21lbXNsb3RzICpfX2t2bV9tZW1zbG90cyhzdHJ1Y3Qga3ZtICprdm0sIGludCBhc19pZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvbGludXgvdmZpby5oXG5pbmRleCA0NWYwODk4NjM1OWU0Li4wY2M5MWM2Zjk2ZDJiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdmZpby5oXG5AQCAtNTQsNyAmIzQzOzU0LDcgQEAgc3RydWN0IHZmaW9fZGV2aWNlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZGV2X3NldF9saXN0O1xuIFx0dW5zaWduZWQgaW50IG1pZ3JhdGlvbl9mbGFncztcbiBcdHU4IHByZWNvcHlfaW5mb192Mjtcbi1cdHN0cnVjdCBrdm0gKmt2bTtcbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqa3ZtO1xuIFxuIFx0LyogTWVtYmVycyBiZWxvdyBoZXJlIGFyZSBwcml2YXRlLCBub3QgZm9yIGRyaXZlciB1c2UgKi9cbiBcdHVuc2lnbmVkIGludCBpbmRleDtcbkBAIC02Niw3ICYjNDM7NjYsNiBAQCBzdHJ1Y3QgdmZpb19kZXZpY2Uge1xuIFx0dW5zaWduZWQgaW50IG9wZW5fY291bnQ7XG4gXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xuIFx0c3RydWN0IGlvbW11ZmRfYWNjZXNzICppb21tdWZkX2FjY2Vzcztcbi1cdHZvaWQgKCpwdXRfa3ZtKShzdHJ1Y3Qga3ZtICprdm0pO1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU9NTVVGRClcbiBcdHN0cnVjdCBpb21tdWZkX2RldmljZSAqaW9tbXVmZF9kZXZpY2U7XG5AQCAtMzc4LDcgJiM0MzszNzcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdmZpb19maWxlX2hhc19kZXYoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aVxuICNlbmRpZlxuIGJvb2wgdmZpb19maWxlX2lzX3ZhbGlkKHN0cnVjdCBmaWxlICpmaWxlKTtcbiBib29sIHZmaW9fZmlsZV9lbmZvcmNlZF9jb2hlcmVudChzdHJ1Y3QgZmlsZSAqZmlsZSk7XG4tdm9pZCB2ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKTtcbiYjNDM7dm9pZCB2ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqdmZpb19maWxlLCBzdHJ1Y3QgZmlsZSAqa3ZtKTtcbiBcbiAjZGVmaW5lIFZGSU9fUElOX1BBR0VTX01BWF9FTlRSSUVTXHQoUEFHRV9TSVpFL3NpemVvZih1bnNpZ25lZCBsb25nKSlcbiBcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggNjVlYjI2YTA1MjBkOC4uMzRiNGM0MzkwOGIzYiAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbkBAIC0xMzE0LDcgJiM0MzsxMzE0LDcgQEAgdm9pZCBrdm1fZ2V0X2t2bShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0cmVmY291bnRfaW5jKFx1MDAyNmt2bS1cdTAwM2V1c2Vyc19jb3VudCk7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9nZXRfa3ZtKTtcbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9nZXRfa3ZtKTtcbiBcbiAvKlxuICAqIE1ha2Ugc3VyZSB0aGUgdm0gaXMgbm90IGR1cmluZyBkZXN0cnVjdGlvbiwgd2hpY2ggaXMgYSBzYWZlIHZlcnNpb24gb2ZcbkBAIC0xMzI0LDE0ICYjNDM7MTMyNCwxNCBAQCBib29sIGt2bV9nZXRfa3ZtX3NhZmUoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdHJldHVybiByZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2a3ZtLVx1MDAzZXVzZXJzX2NvdW50KTtcbiB9XG4tRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2dldF9rdm1fc2FmZSk7XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZ2V0X2t2bV9zYWZlKTtcbiBcbiB2b2lkIGt2bV9wdXRfa3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmt2bS1cdTAwM2V1c2Vyc19jb3VudCkpXG4gXHRcdGt2bV9kZXN0cm95X3ZtKGt2bSk7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9wdXRfa3ZtKTtcbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9wdXRfa3ZtKTtcbiBcbiAvKlxuICAqIFVzZWQgdG8gcHV0IGEgcmVmZXJlbmNlIHRoYXQgd2FzIHRha2VuIG9uIGJlaGFsZiBvZiBhbiBvYmplY3QgYXNzb2NpYXRlZFxuQEAgLTEzNTIsNiAmIzQzOzEzNTIsOCBAQCBzdGF0aWMgaW50IGt2bV92bV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxuIFxuIFx0a3ZtX2lycWZkX3JlbGVhc2Uoa3ZtKTtcbiBcbiYjNDM7XHRXUklURV9PTkNFKGt2bS1cdTAwM2VmaWxlLCBOVUxMKTtcbiYjNDM7XG4gXHRrdm1fcHV0X2t2bShrdm0pO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTU0OTYsNiAmIzQzOzU0OTgsMTUgQEAgYm9vbCBmaWxlX2lzX2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGZpbGVfaXNfa3ZtKTtcbiBcbiYjNDM7c3RydWN0IGt2bSAqZmlsZV90b19rdm0oc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWZpbGVfaXNfa3ZtKGZpbGUpKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoZmlsZV90b19rdm0pO1xuJiM0MztcbiBzdGF0aWMgaW50IGt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSlcbiB7XG4gXHRjaGFyIGZkbmFtZVtJVE9BX01BWF9MRU4gJiM0MzsgMV07XG5AQCAtNTUyNyw2ICYjNDM7NTUzOCw5IEBAIHN0YXRpYyBpbnQga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlKVxuIFx0ICogY2FzZXMgaXQgd2lsbCBiZSBjYWxsZWQgYnkgdGhlIGZpbmFsIGZwdXQoZmlsZSkgYW5kIHdpbGwgdGFrZVxuIFx0ICogY2FyZSBvZiBkb2luZyBrdm1fcHV0X2t2bShrdm0pLlxuIFx0ICovXG4mIzQzO1xuJiM0MztcdGt2bS1cdTAwM2VmaWxlID0gZmlsZTtcbiYjNDM7XG4gXHRrdm1fdWV2ZW50X25vdGlmeV9jaGFuZ2UoS1ZNX0VWRU5UX0NSRUFURV9WTSwga3ZtKTtcbiBcbiBcdGZkX2luc3RhbGwoZmQsIGZpbGUpO1xuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3ZmaW8uYyBiL3ZpcnQva3ZtL3ZmaW8uY1xuaW5kZXggNmNkYzRlOWEzMzNhMy4uMTk1NDhhNDMwOTQyNiAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL3ZmaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vdmZpby5jXG5AQCAtMzUsMTUgJiM0MzszNSwxNSBAQCBzdHJ1Y3Qga3ZtX3ZmaW8ge1xuIFx0Ym9vbCBub25jb2hlcmVudDtcbiB9O1xuIFxuLXN0YXRpYyB2b2lkIGt2bV92ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKVxuJiM0MztzdGF0aWMgdm9pZCBrdm1fdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSlcbiB7XG4tXHR2b2lkICgqZm4pKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pO1xuJiM0MztcdHZvaWQgKCpmbikoc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSk7XG4gXG4gXHRmbiA9IHN5bWJvbF9nZXQodmZpb19maWxlX3NldF9rdm0pO1xuIFx0aWYgKCFmbilcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Zm4oZmlsZSwga3ZtKTtcbiYjNDM7XHRmbih2ZmlvX2ZpbGUsIGt2bSk7XG4gXG4gXHRzeW1ib2xfcHV0KHZmaW9fZmlsZV9zZXRfa3ZtKTtcbiB9XG5AQCAtMTQ0LDYgJiM0MzsxNDQsNyBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZClcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZmaW8gKmt2ID0gZGV2LVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3Qga3ZtX3ZmaW9fZmlsZSAqa3ZmO1xuJiM0MztcdHN0cnVjdCBmaWxlICprdm1fZmlsZSBfX2ZyZWUoZnB1dCkgPSBOVUxMO1xuIFx0c3RydWN0IGZpbGUgKmZpbHAgX19mcmVlKGZwdXQpID0gTlVMTDtcbiBcbiBcdGZpbHAgPSBmZ2V0KGZkKTtcbkBAIC0xNTQsNiAmIzQzOzE1NSwxMCBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZClcbiBcdGlmICgha3ZtX3ZmaW9fZmlsZV9pc192YWxpZChmaWxwKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0a3ZtX2ZpbGUgPSBnZXRfZmlsZV9hY3RpdmUoXHUwMDI2ZGV2LVx1MDAzZWt2bS1cdTAwM2VmaWxlKTtcbiYjNDM7XHRpZiAoIWt2bV9maWxlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1xuIFx0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2LVx1MDAzZWxvY2spO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShrdmYsIFx1MDAyNmt2LVx1MDAzZWZpbGVfbGlzdCwgbm9kZSkge1xuQEAgLTE2OCw3ICYjNDM7MTczLDcgQEAgc3RhdGljIGludCBrdm1fdmZpb19maWxlX2FkZChzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmQpXG4gXHRrdmYtXHUwMDNlZmlsZSA9IGdldF9maWxlKGZpbHApO1xuIFx0bGlzdF9hZGRfdGFpbChcdTAwMjZrdmYtXHUwMDNlbm9kZSwgXHUwMDI2a3YtXHUwMDNlZmlsZV9saXN0KTtcbiBcbi1cdGt2bV92ZmlvX2ZpbGVfc2V0X2t2bShrdmYtXHUwMDNlZmlsZSwgZGV2LVx1MDAzZWt2bSk7XG4mIzQzO1x0a3ZtX3ZmaW9fZmlsZV9zZXRfa3ZtKGt2Zi1cdTAwM2VmaWxlLCBrdm1fZmlsZSk7XG4gXHRrdm1fdmZpb191cGRhdGVfY29oZXJlbmN5KGRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7VkZJTyYjMzQ7LAogICAgJiMzNDtWRklPX0dST1VQJiMzNDssCiAgICAmIzM0O1ZGSU9fQ09OVEFJTkVSJiMzNDssCiAgICAmIzM0O1ZGSU9fREVWSUNFX0NERVYmIzM0OywKICAgICYjMzQ7RFJNX0k5MTVfR1ZUX0tWTUdUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3ZmaW9fZmlsZV9hZGQmIzM0OywKICAgICYjMzQ7dmZpb19maWxlX3NldF9rdm0mIzM0OywKICAgICYjMzQ7dmZpb19ncm91cF9zZXRfa3ZtJiMzNDssCiAgICAmIzM0O3ZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2RldmljZV9wdXRfa3ZtJiMzNDssCiAgICAmIzM0O2ZpbGVfdG9fa3ZtJiMzNDssCiAgICAmIzM0O2t2bV92bV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2t2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtJiMzNDssCiAgICAmIzM0O2t2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyJiMzNDssCiAgICAmIzM0O2t2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXImIzM0OywKICAgICYjMzQ7a3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm4mIzM0OywKICAgICYjMzQ7a3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgcmVmZXJlbmNlIG1hbmFnZW1lbnQgYmV0d2VlbiBLVk0gYW5kIGV4dGVybmFsIHN1YnN5c3RlbXMgKHByaW1hcmlseSBWRklPIGFuZCBLVk0gcGFnZSB0cmFja2luZyksIHN3aXRjaGluZyBmcm9tIGhvbGRpbmcgZGlyZWN0ICYjMzk7c3RydWN0IGt2bSAqJiMzOTsgcG9pbnRlcnMgdG8gdXNpbmcgJiMzOTtzdHJ1Y3QgZmlsZSAqJiMzOTsgcmVmZXJlbmNlcyB2aWEgZ2V0X2ZpbGUoKS9mcHV0KCkgYW5kIGdldF9maWxlX2FjdGl2ZSgpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbGlmZWN5Y2xlIHBhdGhzLCBjb25jdXJyZW5jeSwgYW5kIHJlZmNvdW50aW5nIGJldHdlZW4gS1ZNIFZNIGZpbGVzIGFuZCBWRklPIGRldmljZXMvZ3JvdXBzIGR1cmluZyBWTSBjcmVhdGlvbiwgcmVsZWFzZSwgYW5kIFZGSU8gZGV2aWNlIGF0dGFjaG1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMzhlMjk0NTk0ZDJlOWRmYWE1NGRhYWU1NGYzOWZjYjM2ZjU4NWE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxMDoxNjowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFnZV90cmFjay5oCmluZGV4IDNkMDQwNzQxMDQ0YjQuLjA0NmEyNWM4ZmU0ZjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhZ2VfdHJhY2suaApAQCAtNDQsMTMgJiM0Mzs0NCwxMyBAQCBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSB7CiAJCQkJICAgIHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpub2RlKTsKIH07CiAKLWludCBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7aW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCSAgICAgc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm4pOwotdm9pZCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwKJiM0Mzt2b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJCXN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpuKTsKIAotaW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTsKLWludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7CiYjNDM7aW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBmaWxlICpmaWxlLCBnZm5fdCBnZm4pOwomIzQzO2ludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3QgZmlsZSAqZmlsZSwgZ2ZuX3QgZ2ZuKTsKICNlbHNlCiAvKgogICogQWxsb3cgZGVmaW5pbmcgYSBub2RlIGluIGEgc3RydWN0dXJlIGV2ZW4gaWYgcGFnZSB0cmFja2luZyBpcyBkaXNhYmxlZCwgZS5nLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL01ha2VmaWxlIGIvYXJjaC94ODYva3ZtL01ha2VmaWxlCmluZGV4IDA0NzQ2MDRhYjhhMTQuLjk2Zjg5ZDZmN2U2YTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vTWFrZWZpbGUKQEAgLTYwLDEwICYjNDM7NjAsNyBAQCBleHBvcnRzX2dyZXBfdHJhaWxlciA6PSAtLWluY2x1ZGU9JiMzOTsqLltjaF0mIzM5OyAtbnJ3ICQoc3JjdHJlZSkvdmlydC9rdm0gJChzcmN0cmVlKS9hCiAJCQlncmVwIC12IC1lIGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyIFwKIAkJCQktZSBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyIFwKIAkJCQktZSBrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbiBcCi0JCQkJLWUga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4gXAotCQkJCS1lIGt2bV9nZXRfa3ZtIFwKLQkJCQktZSBrdm1fZ2V0X2t2bV9zYWZlIFwKLQkJCQktZSBrdm1fcHV0X2t2bQomIzQzOwkJCQktZSBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbgogCiAjIEZvcmNlIGdyZXAgdG8gZW1pdCBhIGdvb2Z5IGdyb3VwIHNlcGFyYXRvciB0aGF0IGNhbiBpbiB0dXJuIGJlIHJlcGxhY2VkIHdpdGgKICMgdGhlIGFib3ZlIG5ld2xpbmUgbWFjcm8gKG5ld2xpbmVzIGluIE1ha2UgYXJlIGEgbmlnaHRtYXJlKS4gIE5vdGUsIGdyZXAgb25seQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMgYi9hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYwppbmRleCA3ZTgxOTVhMzExYmIwLi45OGYxMzNlNGYwYjMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYwpAQCAtMjM3LDEwICYjNDM7MjM3LDExIEBAIHN0YXRpYyBpbnQga3ZtX2VuYWJsZV9leHRlcm5hbF93cml0ZV90cmFja2luZyhzdHJ1Y3Qga3ZtICprdm0pCiAgKiByZWdpc3RlciB0aGUgbm90aWZpZXIgc28gdGhhdCBldmVudCBpbnRlcmNlcHRpb24gZm9yIHRoZSB0cmFja2VkIGd1ZXN0CiAgKiBwYWdlcyBjYW4gYmUgcmVjZWl2ZWQuCiAgKi8KLWludCBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7aW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCSAgICAgc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm4pCiB7CiAJc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX2hlYWQgKmhlYWQ7CiYjNDM7CXN0cnVjdCBrdm0gKmt2bSA9IGZpbGVfdG9fa3ZtKGZpbGUpOwogCWludCByOwogCiAJaWYgKCFrdm0gfHwga3ZtLSZndDttbSAhPSBjdXJyZW50LSZndDttbSkKQEAgLTI1Miw3ICYjNDM7MjUzLDcgQEAgaW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwKIAkJCXJldHVybiByOwogCX0KIAotCWt2bV9nZXRfa3ZtKGt2bSk7CiYjNDM7CWdldF9maWxlKGZpbGUpOwogCiAJaGVhZCA9ICZhbXA7a3ZtLSZndDthcmNoLnRyYWNrX25vdGlmaWVyX2hlYWQ7CiAKQEAgLTI2NywxMCAmIzQzOzI2OCwxMSBAQCBFWFBPUlRfU1lNQk9MX0dQTChrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcik7CiAgKiBzdG9wIHJlY2VpdmluZyB0aGUgZXZlbnQgaW50ZXJjZXB0aW9uLiBJdCBpcyB0aGUgb3Bwb3NlZCBvcGVyYXRpb24gb2YKICAqIGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKCkuCiAgKi8KLXZvaWQga3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7dm9pZCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCQlzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbikKIHsKIAlzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfaGVhZCAqaGVhZDsKJiM0MzsJc3RydWN0IGt2bSAqa3ZtID0gZmlsZV90b19rdm0oZmlsZSk7CiAKIAloZWFkID0gJmFtcDtrdm0tJmd0O2FyY2gudHJhY2tfbm90aWZpZXJfaGVhZDsKIApAQCAtMjc5LDcgJiM0MzsyODEsNyBAQCB2b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLAogCXdyaXRlX3VubG9jaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwogCXN5bmNocm9uaXplX3NyY3UoJmFtcDtoZWFkLSZndDt0cmFja19zcmN1KTsKIAotCWt2bV9wdXRfa3ZtKGt2bSk7CiYjNDM7CWZwdXQoZmlsZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKTsKIApAQCAtMzM2LDExICYjNDM7MzM4LDEyIEBAIHZvaWQga3ZtX3BhZ2VfdHJhY2tfZGVsZXRlX3Nsb3Qoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KQogICogYWRkIGd1ZXN0IHBhZ2UgdG8gdGhlIHRyYWNraW5nIHBvb2wgc28gdGhhdCBjb3JyZXNwb25kaW5nIGFjY2VzcyBvbiB0aGF0CiAgKiBwYWdlIHdpbGwgYmUgaW50ZXJjZXB0ZWQuCiAgKgotICogQGt2bTogdGhlIGd1ZXN0IGluc3RhbmNlIHdlIGFyZSBpbnRlcmVzdGVkIGluLgomIzQzOyAqIEBmaWxlOiB0aGUgVk0gZmlsZSBvZiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uCiAgKiBAZ2ZuOiB0aGUgZ3Vlc3QgcGFnZS4KICAqLwotaW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQomIzQzO2ludCBrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbihzdHJ1Y3QgZmlsZSAqZmlsZSwgZ2ZuX3QgZ2ZuKQogewomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSBmaWxlX3RvX2t2bShmaWxlKTsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OwogCWludCBpZHg7CiAKQEAgLTM2NiwxMSAmIzQzOzM2OSwxMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbik7CiAgKiByZW1vdmUgdGhlIGd1ZXN0IHBhZ2UgZnJvbSB0aGUgdHJhY2tpbmcgcG9vbCB3aGljaCBzdG9wcyB0aGUgaW50ZXJjZXB0aW9uCiAgKiBvZiBjb3JyZXNwb25kaW5nIGFjY2VzcyBvbiB0aGF0IHBhZ2UuCiAgKgotICogQGt2bTogdGhlIGd1ZXN0IGluc3RhbmNlIHdlIGFyZSBpbnRlcmVzdGVkIGluLgomIzQzOyAqIEBmaWxlOiB0aGUgVk0gZmlsZSBvZiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uCiAgKiBAZ2ZuOiB0aGUgZ3Vlc3QgcGFnZS4KICAqLwotaW50IGt2bV93cml0ZV90cmFja19yZW1vdmVfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQomIzQzO2ludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3QgZmlsZSAqZmlsZSwgZ2ZuX3QgZ2ZuKQogewomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSBmaWxlX3RvX2t2bShmaWxlKTsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OwogCWludCBpZHg7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwppbmRleCA5NDBjMGZmNjY4YmVlLi5mMTYwZTE5NDVmYmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCkBAIC0xODIyLDE3ICYjNDM7MTgyMiwyNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdmZpb19hcF9tZGV2X2F0dHJfZ3JvdXBzW10gPSB7CiAKIC8qKgogICogdmZpb19hcF9tZGV2X3NldF9rdm0gLSBzZXRzIGFsbCBkYXRhIGZvciBAbWF0cml4X21kZXYgdGhhdCBhcmUgbmVlZGVkCi0gKiB0byBtYW5hZ2UgQVAgcmVzb3VyY2VzIGZvciB0aGUgZ3Vlc3Qgd2hvc2Ugc3RhdGUgaXMgcmVwcmVzZW50ZWQgYnkgQGt2bQomIzQzOyAqIHRvIG1hbmFnZSBBUCByZXNvdXJjZXMgZm9yIHRoZSBndWVzdCB3aG9zZSBzdGF0ZSBpcyByZXByZXNlbnRlZCBieQomIzQzOyAqIEBrdm1fZmlsZQogICoKICAqIEBtYXRyaXhfbWRldjogYSBtZWRpYXRlZCBtYXRyaXggZGV2aWNlCi0gKiBAa3ZtOiByZWZlcmVuY2UgdG8gS1ZNIGluc3RhbmNlCiYjNDM7ICogQGt2bV9maWxlOiB0aGUgS1ZNIFZNIGZpbGUgdGhpcyB2ZmlvIGRldmljZSBpcyBhc3NvY2lhdGVkIHdpdGgKICAqCi0gKiBSZXR1cm46IDAgaWYgbm8gb3RoZXIgbWVkaWF0ZWQgbWF0cml4IGRldmljZSBoYXMgYSByZWZlcmVuY2UgdG8gQGt2bTsKJiM0MzsgKiBSZXR1cm46IDAgaWYgbm8gb3RoZXIgbWVkaWF0ZWQgbWF0cml4IGRldmljZSBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIFZNOwogICogb3RoZXJ3aXNlLCByZXR1cm5zIGFuIC1FUEVSTS4KICAqLwogc3RhdGljIGludCB2ZmlvX2FwX21kZXZfc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LAotCQkJCXN0cnVjdCBrdm0gKmt2bSkKJiM0MzsJCQkJc3RydWN0IGZpbGUgKmt2bV9maWxlKQogewomIzQzOwlzdHJ1Y3Qga3ZtICprdm07CiYjNDM7CiYjNDM7CWlmICgha3ZtX2ZpbGUpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKJiM0MzsJa3ZtID0ga3ZtX2ZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJaWYgKCFrdm0pCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKIAlpZiAoa3ZtLSZndDthcmNoLmNyeXB0by5jcnljYmQpIHsKIAkJZ2V0X3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7CiAJCWlmIChrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9vaykgewpAQCAtMTg0MSw3ICYjNDM7MTg1MSw2IEBAIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3NldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiwKIAkJfQogCQlrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9vayA9ICZhbXA7bWF0cml4X21kZXYtJmd0O3BxYXBfaG9vazsKIAotCQlrdm1fZ2V0X2t2bShrdm0pOwogCQltYXRyaXhfbWRldi0mZ3Q7a3ZtID0ga3ZtOwogCQl2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpOwogCQlyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7CkBAIC0xODk0LDcgJiM0MzsxOTAzLDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3Vuc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KQogCQltYXRyaXhfbWRldi0mZ3Q7a3ZtID0gTlVMTDsKIAogCQlyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7Ci0JCWt2bV9wdXRfa3ZtKGt2bSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vZ3JvdXAuYyBiL2RyaXZlcnMvdmZpby9ncm91cC5jCmluZGV4IGIyMjk5ZTViYzZkZjMuLjViZjhjYmRmZjM3N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9ncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9ncm91cC5jCkBAIC04NjAsMTEgJiM0Mzs4NjAsMjAgQEAgYm9vbCB2ZmlvX2dyb3VwX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCkKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIHZmaW9fZ3JvdXBfc2V0X2t2bShzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXAsIHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt2b2lkIHZmaW9fZ3JvdXBfc2V0X2t2bShzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXAsIHN0cnVjdCBmaWxlICprdm0pCiB7CiYjNDM7CXN0cnVjdCBmaWxlICpvbGQ7CiYjNDM7CiYjNDM7CWlmIChrdm0pCiYjNDM7CQlnZXRfZmlsZShrdm0pOwomIzQzOwogCXNwaW5fbG9jaygmYW1wO2dyb3VwLSZndDtrdm1fcmVmX2xvY2spOwomIzQzOwlvbGQgPSBncm91cC0mZ3Q7a3ZtOwogCWdyb3VwLSZndDtrdm0gPSBrdm07CiAJc3Bpbl91bmxvY2soJmFtcDtncm91cC0mZ3Q7a3ZtX3JlZl9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKG9sZCkKJiM0MzsJCWZwdXQob2xkKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jCmluZGV4IGY0N2YzNjMxNGExY2MuLjA0NTEzMmU5MGJmZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jCkBAIC0xODQsNiAmIzQzOzE4NCw3IEBAIGludCB2ZmlvX3BjaV96ZGV2X2ZlYXR1cmVfZXJyKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsCiBpbnQgdmZpb19wY2lfemRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiB7CiAJc3RydWN0IHpwY2lfZGV2ICp6ZGV2ID0gdG9fenBjaSh2ZGV2LSZndDtwZGV2KTsKJiM0MzsJc3RydWN0IGt2bSAqa3ZtOwogCWludCByZXQ7CiAKIAlpZiAoIXpkZXYpCkBAIC0xOTUsOSAmIzQzOzE5NiwxNCBAQCBpbnQgdmZpb19wY2lfemRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiAJCXJldHVybiAwOwogCiAJcmV0ID0gLUVOT0VOVDsKJiM0MzsJa3ZtID0gdmRldi0mZ3Q7dmRldi5rdm0tJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJaWYgKCFrdm0pCiYjNDM7CQlnb3RvIHJlY292ZXJ5OwomIzQzOwogCWlmICh6cGNpX2t2bV9ob29rLmt2bV9yZWdpc3RlcikKLQkJcmV0ID0genBjaV9rdm1faG9vay5rdm1fcmVnaXN0ZXIoemRldiwgdmRldi0mZ3Q7dmRldi5rdm0pOwomIzQzOwkJcmV0ID0genBjaV9rdm1faG9vay5rdm1fcmVnaXN0ZXIoemRldiwga3ZtKTsKIAomIzQzO3JlY292ZXJ5OgogCWlmIChyZXQpCiAJCXpwY2lfc3RvcF9tZWRpYXRlZF9yZWNvdmVyeSh6ZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3ZmaW8uaCBiL2RyaXZlcnMvdmZpby92ZmlvLmgKaW5kZXggNzcyOGJjOTliNjNkMS4uOWI2MTk5NTFhNWQwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3ZmaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vdmZpby5oCkBAIC0yMyw3ICYjNDM7MjMsNyBAQCBzdHJ1Y3QgdmZpb19kZXZpY2VfZmlsZSB7CiAJdTggYWNjZXNzX2dyYW50ZWQ7CiAJdTMyIGRldmlkOyAvKiBvbmx5IHZhbGlkIHdoZW4gaW9tbXVmZCBpcyB2YWxpZCAqLwogCXNwaW5sb2NrX3Qga3ZtX3JlZl9sb2NrOyAvKiBwcm90ZWN0IGt2bSBmaWVsZCAqLwotCXN0cnVjdCBrdm0gKmt2bTsKJiM0MzsJc3RydWN0IGZpbGUgKmt2bTsKIAlzdHJ1Y3QgaW9tbXVmZF9jdHggKmlvbW11ZmQ7IC8qIHByb3RlY3RlZCBieSBzdHJ1Y3QgdmZpb19kZXZpY2Vfc2V0Ojpsb2NrICovCiB9OwogCkBAIC04OCw3ICYjNDM7ODgsNyBAQCBzdHJ1Y3QgdmZpb19ncm91cCB7CiAjZW5kaWYKIAllbnVtIHZmaW9fZ3JvdXBfdHlwZQkJdHlwZTsKIAlzdHJ1Y3QgbXV0ZXgJCQlncm91cF9sb2NrOwotCXN0cnVjdCBrdm0JCQkqa3ZtOwomIzQzOwlzdHJ1Y3QgZmlsZQkJCSprdm07CiAJc3RydWN0IGZpbGUJCQkqb3BlbmVkX2ZpbGU7CiAJc3RydWN0IGlvbW11ZmRfY3R4CQkqaW9tbXVmZDsKIAlzcGlubG9ja190CQkJa3ZtX3JlZl9sb2NrOwpAQCAtMTA3LDcgJiM0MzsxMDcsNyBAQCB2b2lkIHZmaW9fZGV2aWNlX2dyb3VwX3VudXNlX2lvbW11KHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKTsKIHZvaWQgdmZpb19kZl9ncm91cF9jbG9zZShzdHJ1Y3QgdmZpb19kZXZpY2VfZmlsZSAqZGYpOwogc3RydWN0IHZmaW9fZ3JvdXAgKnZmaW9fZ3JvdXBfZnJvbV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKTsKIGJvb2wgdmZpb19ncm91cF9lbmZvcmNlZF9jb2hlcmVudChzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXApOwotdm9pZCB2ZmlvX2dyb3VwX3NldF9rdm0oc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwLCBzdHJ1Y3Qga3ZtICprdm0pOwomIzQzO3ZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGZpbGUgKmt2bSk7CiBib29sIHZmaW9fZGV2aWNlX2hhc19jb250YWluZXIoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UpOwogaW50IF9faW5pdCB2ZmlvX2dyb3VwX2luaXQodm9pZCk7CiB2b2lkIHZmaW9fZ3JvdXBfY2xlYW51cCh2b2lkKTsKQEAgLTE2NSw3ICYjNDM7MTY1LDcgQEAgc3RhdGljIGlubGluZSBib29sIHZmaW9fZ3JvdXBfZW5mb3JjZWRfY29oZXJlbnQoc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwKQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX2dyb3VwX3NldF9rdm0oc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgZmlsZSAqa3ZtKQogewogfQogCkBAIC00MjksMTEgJiM0Mzs0MjksMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fdmlycWZkX2V4aXQodm9pZCkKICNlbmRpZgogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfS1ZNKQotdm9pZCB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7dm9pZCB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBmaWxlICprdm0pOwogdm9pZCB2ZmlvX2RldmljZV9wdXRfa3ZtKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLAotCQkJCQkgICAgc3RydWN0IGt2bSAqa3ZtKQomIzQzOwkJCQkJICAgIHN0cnVjdCBmaWxlICprdm0pCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby92ZmlvX21haW4uYyBiL2RyaXZlcnMvdmZpby92ZmlvX21haW4uYwppbmRleCA0MjNlYWQ0OGFhZmUzLi5lZDk2YWNmYTg2MzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jCkBAIC00NzIsMzYgJiM0Mzs0NzIsMTQgQEAgdm9pZCB2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKQogRVhQT1JUX1NZTUJPTF9HUEwodmZpb191bnJlZ2lzdGVyX2dyb3VwX2Rldik7CiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19LVk0pCi12b2lkIHZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO3ZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZmlsZSAqa3ZtKQogewotCXZvaWQgKCpwZm4pKHN0cnVjdCBrdm0gKmt2bSk7Ci0JYm9vbCAoKmZuKShzdHJ1Y3Qga3ZtICprdm0pOwotCWJvb2wgcmV0OwotCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2RldmljZS0mZ3Q7ZGV2X3NldC0mZ3Q7bG9jayk7CiAKIAlpZiAoIWt2bSkKIAkJcmV0dXJuOwogCi0JcGZuID0gc3ltYm9sX2dldChrdm1fcHV0X2t2bSk7Ci0JaWYgKFdBUk5fT04oIXBmbikpCi0JCXJldHVybjsKLQotCWZuID0gc3ltYm9sX2dldChrdm1fZ2V0X2t2bV9zYWZlKTsKLQlpZiAoV0FSTl9PTighZm4pKSB7Ci0JCXN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pOwotCQlyZXR1cm47Ci0JfQotCi0JcmV0ID0gZm4oa3ZtKTsKLQlzeW1ib2xfcHV0KGt2bV9nZXRfa3ZtX3NhZmUpOwotCWlmICghcmV0KSB7Ci0JCXN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pOwotCQlyZXR1cm47Ci0JfQotCi0JZGV2aWNlLSZndDtwdXRfa3ZtID0gcGZuOwotCWRldmljZS0mZ3Q7a3ZtID0ga3ZtOwomIzQzOwlkZXZpY2UtJmd0O2t2bSA9IGdldF9maWxlKGt2bSk7CiB9CiAKIHZvaWQgdmZpb19kZXZpY2VfcHV0X2t2bShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSkKQEAgLTUxMSwxNCAmIzQzOzQ4OSw3IEBAIHZvaWQgdmZpb19kZXZpY2VfcHV0X2t2bShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSkKIAlpZiAoIWRldmljZS0mZ3Q7a3ZtKQogCQlyZXR1cm47CiAKLQlpZiAoV0FSTl9PTighZGV2aWNlLSZndDtwdXRfa3ZtKSkKLQkJZ290byBjbGVhcjsKLQotCWRldmljZS0mZ3Q7cHV0X2t2bShkZXZpY2UtJmd0O2t2bSk7Ci0JZGV2aWNlLSZndDtwdXRfa3ZtID0gTlVMTDsKLQlzeW1ib2xfcHV0KGt2bV9wdXRfa3ZtKTsKLQotY2xlYXI6CiYjNDM7CWZwdXQoZGV2aWNlLSZndDtrdm0pOwogCWRldmljZS0mZ3Q7a3ZtID0gTlVMTDsKIH0KICNlbmRpZgpAQCAtMTU0NCw5ICYjNDM7MTUxNSwxMyBAQCBib29sIHZmaW9fZmlsZV9lbmZvcmNlZF9jb2hlcmVudChzdHJ1Y3QgZmlsZSAqZmlsZSkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fZmlsZV9lbmZvcmNlZF9jb2hlcmVudCk7CiAKLXN0YXRpYyB2b2lkIHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO3N0YXRpYyB2b2lkIHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGUgKmt2bSkKIHsKIAlzdHJ1Y3QgdmZpb19kZXZpY2VfZmlsZSAqZGYgPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CXN0cnVjdCBmaWxlICpvbGQ7CiYjNDM7CiYjNDM7CWlmIChrdm0pCiYjNDM7CQlnZXRfZmlsZShrdm0pOwogCiAJLyoKIAkgKiBUaGUga3ZtIGlzIGZpcnN0IHJlY29yZGVkIGluIHRoZSB2ZmlvX2RldmljZV9maWxlLCBhbmQgd2lsbApAQCAtMTU1NCwyOCAmIzQzOzE1MjksMzIgQEAgc3RhdGljIHZvaWQgdmZpb19kZXZpY2VfZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pCiAJICogaW9tbXVmZCBzdWNjZXNzZnVsbHkgaW4gdGhlIHZmaW8gZGV2aWNlIGNkZXYgcGF0aC4KIAkgKi8KIAlzcGluX2xvY2soJmFtcDtkZi0mZ3Q7a3ZtX3JlZl9sb2NrKTsKJiM0MzsJb2xkID0gZGYtJmd0O2t2bTsKIAlkZi0mZ3Q7a3ZtID0ga3ZtOwogCXNwaW5fdW5sb2NrKCZhbXA7ZGYtJmd0O2t2bV9yZWZfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChvbGQpCiYjNDM7CQlmcHV0KG9sZCk7CiB9CiAKIC8qKgogICogdmZpb19maWxlX3NldF9rdm0gLSBMaW5rIGEga3ZtIHdpdGggVkZJTyBkcml2ZXJzCi0gKiBAZmlsZTogVkZJTyBncm91cCBmaWxlIG9yIFZGSU8gZGV2aWNlIGZpbGUKLSAqIEBrdm06IEtWTSB0byBsaW5rCiYjNDM7ICogQHZmaW9fZmlsZTogVkZJTyBncm91cCBmaWxlIG9yIFZGSU8gZGV2aWNlIGZpbGUKJiM0MzsgKiBAa3ZtOiBLVk0gZmlsZSB0byBsaW5rCiAgKgogICogV2hlbiBhIFZGSU8gZGV2aWNlIGlzIGZpcnN0IG9wZW5lZCB0aGUgS1ZNIHdpbGwgYmUgYXZhaWxhYmxlIGluCiAgKiBkZXZpY2UtJmd0O2t2bSBpZiBvbmUgd2FzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsZS4KICAqLwotdm9pZCB2ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO3ZvaWQgdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSkKIHsKIAlzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXA7CiAKLQlncm91cCA9IHZmaW9fZ3JvdXBfZnJvbV9maWxlKGZpbGUpOwomIzQzOwlncm91cCA9IHZmaW9fZ3JvdXBfZnJvbV9maWxlKHZmaW9fZmlsZSk7CiAJaWYgKGdyb3VwKQogCQl2ZmlvX2dyb3VwX3NldF9rdm0oZ3JvdXAsIGt2bSk7CiAKLQlpZiAodmZpb19kZXZpY2VfZnJvbV9maWxlKGZpbGUpKQotCQl2ZmlvX2RldmljZV9maWxlX3NldF9rdm0oZmlsZSwga3ZtKTsKJiM0MzsJaWYgKHZmaW9fZGV2aWNlX2Zyb21fZmlsZSh2ZmlvX2ZpbGUpKQomIzQzOwkJdmZpb19kZXZpY2VfZmlsZV9zZXRfa3ZtKHZmaW9fZmlsZSwga3ZtKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fZmlsZV9zZXRfa3ZtKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IDAzYmZjOTI4NjRiNmUuLmJmZWNjZTFiNTk1NWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTc4NCw2ICYjNDM7Nzg0LDEzIEBAIHN0cnVjdCBrdm0gewogCSAqIGt2bV9zd2FwX2FjdGl2ZV9tZW1zbG90cygpLgogCSAqLwogCXN0cnVjdCBtdXRleCBzbG90c19hcmNoX2xvY2s7CiYjNDM7CS8qCiYjNDM7CSAqIEJhY2stcmVmZXJlbmNlIHRvIHRoZSBWTSBmaWxlIGZvciBzdWJzeXN0ZW1zIChlLmcuLCBWRklPKS4gSG9sZHMgbm8KJiM0MzsJICogcmVmZXJlbmNlIHRvIGF2b2lkIHBpbm5pbmcgdGhlIFZNLiBBY2Nlc3MgdmlhIGdldF9maWxlX2FjdGl2ZSgmYW1wO2t2bS0mZ3Q7ZmlsZSkKJiM0MzsJICogb25seeKAlHNhZmUgYmVjYXVzZSBjbGVhcmVkIGluIGt2bV92bV9yZWxlYXNlKCkgYmVmb3JlIGZpbGUgZnJlZWQuIENhbGxlcnMKJiM0MzsJICogc3RvcmluZyB0aGUgcmVzdWx0IG11c3QgdGFrZSB0aGVpciBvd24gcmVmZXJlbmNlIHZpYSBnZXRfZmlsZSgpCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgZmlsZSAqZmlsZTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsgLyogdXNlcnNwYWNlIHRpZWQgdG8gdGhpcyB2bSAqLwogCXVuc2lnbmVkIGxvbmcgbnJfbWVtc2xvdF9wYWdlczsKIAkvKiBUaGUgdHdvIG1lbXNsb3Qgc2V0cyAtIGFjdGl2ZSBhbmQgaW5hY3RpdmUgKHBlciBhZGRyZXNzIHNwYWNlKSAqLwpAQCAtMTA4Miw2ICYjNDM7MTA4OSw3IEBAIHZvaWQga3ZtX2dldF9rdm0oc3RydWN0IGt2bSAqa3ZtKTsKIGJvb2wga3ZtX2dldF9rdm1fc2FmZShzdHJ1Y3Qga3ZtICprdm0pOwogdm9pZCBrdm1fcHV0X2t2bShzdHJ1Y3Qga3ZtICprdm0pOwogYm9vbCBmaWxlX2lzX2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSk7CiYjNDM7c3RydWN0IGt2bSAqZmlsZV90b19rdm0oc3RydWN0IGZpbGUgKmZpbGUpOwogdm9pZCBrdm1fcHV0X2t2bV9ub19kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tZW1zbG90cyAqX19rdm1fbWVtc2xvdHMoc3RydWN0IGt2bSAqa3ZtLCBpbnQgYXNfaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvbGludXgvdmZpby5oCmluZGV4IDQ1ZjA4OTg2MzU5ZTQuLjBjYzkxYzZmOTZkMmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmZpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdmZpby5oCkBAIC01NCw3ICYjNDM7NTQsNyBAQCBzdHJ1Y3QgdmZpb19kZXZpY2UgewogCXN0cnVjdCBsaXN0X2hlYWQgZGV2X3NldF9saXN0OwogCXVuc2lnbmVkIGludCBtaWdyYXRpb25fZmxhZ3M7CiAJdTggcHJlY29weV9pbmZvX3YyOwotCXN0cnVjdCBrdm0gKmt2bTsKJiM0MzsJc3RydWN0IGZpbGUgKmt2bTsKIAogCS8qIE1lbWJlcnMgYmVsb3cgaGVyZSBhcmUgcHJpdmF0ZSwgbm90IGZvciBkcml2ZXIgdXNlICovCiAJdW5zaWduZWQgaW50IGluZGV4OwpAQCAtNjYsNyAmIzQzOzY2LDYgQEAgc3RydWN0IHZmaW9fZGV2aWNlIHsKIAl1bnNpZ25lZCBpbnQgb3Blbl9jb3VudDsKIAlzdHJ1Y3QgY29tcGxldGlvbiBjb21wOwogCXN0cnVjdCBpb21tdWZkX2FjY2VzcyAqaW9tbXVmZF9hY2Nlc3M7Ci0Jdm9pZCAoKnB1dF9rdm0pKHN0cnVjdCBrdm0gKmt2bSk7CiAJc3RydWN0IGlub2RlICppbm9kZTsKICNpZiBJU19FTkFCTEVEKENPTkZJR19JT01NVUZEKQogCXN0cnVjdCBpb21tdWZkX2RldmljZSAqaW9tbXVmZF9kZXZpY2U7CkBAIC0zNzgsNyAmIzQzOzM3Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX2ZpbGVfaGFzX2RldihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpCiAjZW5kaWYKIGJvb2wgdmZpb19maWxlX2lzX3ZhbGlkKHN0cnVjdCBmaWxlICpmaWxlKTsKIGJvb2wgdmZpb19maWxlX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCBmaWxlICpmaWxlKTsKLXZvaWQgdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7dm9pZCB2ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqdmZpb19maWxlLCBzdHJ1Y3QgZmlsZSAqa3ZtKTsKIAogI2RlZmluZSBWRklPX1BJTl9QQUdFU19NQVhfRU5UUklFUwkoUEFHRV9TSVpFL3NpemVvZih1bnNpZ25lZCBsb25nKSkKIApkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggNjVlYjI2YTA1MjBkOC4uMzRiNGM0MzkwOGIzYiAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC0xMzE0LDcgJiM0MzsxMzE0LDcgQEAgdm9pZCBrdm1fZ2V0X2t2bShzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJcmVmY291bnRfaW5jKCZhbXA7a3ZtLSZndDt1c2Vyc19jb3VudCk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChrdm1fZ2V0X2t2bSk7CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9nZXRfa3ZtKTsKIAogLyoKICAqIE1ha2Ugc3VyZSB0aGUgdm0gaXMgbm90IGR1cmluZyBkZXN0cnVjdGlvbiwgd2hpY2ggaXMgYSBzYWZlIHZlcnNpb24gb2YKQEAgLTEzMjQsMTQgJiM0MzsxMzI0LDE0IEBAIGJvb2wga3ZtX2dldF9rdm1fc2FmZShzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJcmV0dXJuIHJlZmNvdW50X2luY19ub3RfemVybygmYW1wO2t2bS0mZ3Q7dXNlcnNfY291bnQpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2dldF9rdm1fc2FmZSk7CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9nZXRfa3ZtX3NhZmUpOwogCiB2b2lkIGt2bV9wdXRfa3ZtKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7a3ZtLSZndDt1c2Vyc19jb3VudCkpCiAJCWt2bV9kZXN0cm95X3ZtKGt2bSk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChrdm1fcHV0X2t2bSk7CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9wdXRfa3ZtKTsKIAogLyoKICAqIFVzZWQgdG8gcHV0IGEgcmVmZXJlbmNlIHRoYXQgd2FzIHRha2VuIG9uIGJlaGFsZiBvZiBhbiBvYmplY3QgYXNzb2NpYXRlZApAQCAtMTM1Miw2ICYjNDM7MTM1Miw4IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiAKIAlrdm1faXJxZmRfcmVsZWFzZShrdm0pOwogCiYjNDM7CVdSSVRFX09OQ0Uoa3ZtLSZndDtmaWxlLCBOVUxMKTsKJiM0MzsKIAlrdm1fcHV0X2t2bShrdm0pOwogCXJldHVybiAwOwogfQpAQCAtNTQ5Niw2ICYjNDM7NTQ5OCwxNSBAQCBib29sIGZpbGVfaXNfa3ZtKHN0cnVjdCBmaWxlICpmaWxlKQogfQogRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGZpbGVfaXNfa3ZtKTsKIAomIzQzO3N0cnVjdCBrdm0gKmZpbGVfdG9fa3ZtKHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3sKJiM0MzsJaWYgKCFmaWxlX2lzX2t2bShmaWxlKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoZmlsZV90b19rdm0pOwomIzQzOwogc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUpCiB7CiAJY2hhciBmZG5hbWVbSVRPQV9NQVhfTEVOICYjNDM7IDFdOwpAQCAtNTUyNyw2ICYjNDM7NTUzOCw5IEBAIHN0YXRpYyBpbnQga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlKQogCSAqIGNhc2VzIGl0IHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBmaW5hbCBmcHV0KGZpbGUpIGFuZCB3aWxsIHRha2UKIAkgKiBjYXJlIG9mIGRvaW5nIGt2bV9wdXRfa3ZtKGt2bSkuCiAJICovCiYjNDM7CiYjNDM7CWt2bS0mZ3Q7ZmlsZSA9IGZpbGU7CiYjNDM7CiAJa3ZtX3VldmVudF9ub3RpZnlfY2hhbmdlKEtWTV9FVkVOVF9DUkVBVEVfVk0sIGt2bSk7CiAKIAlmZF9pbnN0YWxsKGZkLCBmaWxlKTsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3ZmaW8uYyBiL3ZpcnQva3ZtL3ZmaW8uYwppbmRleCA2Y2RjNGU5YTMzM2EzLi4xOTU0OGE0MzA5NDI2IDEwMDY0NAotLS0gYS92aXJ0L2t2bS92ZmlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vdmZpby5jCkBAIC0zNSwxNSAmIzQzOzM1LDE1IEBAIHN0cnVjdCBrdm1fdmZpbyB7CiAJYm9vbCBub25jb2hlcmVudDsKIH07CiAKLXN0YXRpYyB2b2lkIGt2bV92ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO3N0YXRpYyB2b2lkIGt2bV92ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqdmZpb19maWxlLCBzdHJ1Y3QgZmlsZSAqa3ZtKQogewotCXZvaWQgKCpmbikoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7CXZvaWQgKCpmbikoc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSk7CiAKIAlmbiA9IHN5bWJvbF9nZXQodmZpb19maWxlX3NldF9rdm0pOwogCWlmICghZm4pCiAJCXJldHVybjsKIAotCWZuKGZpbGUsIGt2bSk7CiYjNDM7CWZuKHZmaW9fZmlsZSwga3ZtKTsKIAogCXN5bWJvbF9wdXQodmZpb19maWxlX3NldF9rdm0pOwogfQpAQCAtMTQ0LDYgJiM0MzsxNDQsNyBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZCkKIHsKIAlzdHJ1Y3Qga3ZtX3ZmaW8gKmt2ID0gZGV2LSZndDtwcml2YXRlOwogCXN0cnVjdCBrdm1fdmZpb19maWxlICprdmY7CiYjNDM7CXN0cnVjdCBmaWxlICprdm1fZmlsZSBfX2ZyZWUoZnB1dCkgPSBOVUxMOwogCXN0cnVjdCBmaWxlICpmaWxwIF9fZnJlZShmcHV0KSA9IE5VTEw7CiAKIAlmaWxwID0gZmdldChmZCk7CkBAIC0xNTQsNiAmIzQzOzE1NSwxMCBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZCkKIAlpZiAoIWt2bV92ZmlvX2ZpbGVfaXNfdmFsaWQoZmlscCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CWt2bV9maWxlID0gZ2V0X2ZpbGVfYWN0aXZlKCZhbXA7ZGV2LSZndDtrdm0tJmd0O2ZpbGUpOwomIzQzOwlpZiAoIWt2bV9maWxlKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiAJZ3VhcmQobXV0ZXgpKCZhbXA7a3YtJmd0O2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShrdmYsICZhbXA7a3YtJmd0O2ZpbGVfbGlzdCwgbm9kZSkgewpAQCAtMTY4LDcgJiM0MzsxNzMsNyBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZCkKIAlrdmYtJmd0O2ZpbGUgPSBnZXRfZmlsZShmaWxwKTsKIAlsaXN0X2FkZF90YWlsKCZhbXA7a3ZmLSZndDtub2RlLCAmYW1wO2t2LSZndDtmaWxlX2xpc3QpOwogCi0Ja3ZtX3ZmaW9fZmlsZV9zZXRfa3ZtKGt2Zi0mZ3Q7ZmlsZSwgZGV2LSZndDtrdm0pOwomIzQzOwlrdm1fdmZpb19maWxlX3NldF9rdm0oa3ZmLSZndDtmaWxlLCBrdm1fZmlsZSk7CiAJa3ZtX3ZmaW9fdXBkYXRlX2NvaGVyZW5jeShkZXYpOwogCiAJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTYxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIHBhdGNoIGRvd24gYW5kIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgZnV6ei13b3J0aHksIGFuZCBpZiBzbywgaG93IHdlIHNob3VsZCBhcHByb2FjaCBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgd29ydGggYSBjbG9zZXIgbG9vaywgZ2l2ZW4gdGhhdCBLVk0gYW5kIFZGSU8gYXJlIGludm9sdmVkLgoKRmlyc3QsIEkgbmVlZCB0byBncmFzcCB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlaW5nIGNoYW5nZWQuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgaG93IEtWTSBhbmQgVkZJTyBpbnRlcmFjdCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHN0cnVjdCBrdm1gIGFuZCBgc3RydWN0IGZpbGVgIG9iamVjdHMuIFRoZSBwYXRjaCBpcyByZWZhY3RvcmluZyBob3cgdGhlc2UgYXJlIHBhc3NlZCBhbmQgc3RvcmVkIGFjcm9zcyBzZXZlcmFsIGtleSBmdW5jdGlvbnMgaW4gYHBhZ2VfdHJhY2suY2AsIGBrdm1fbWFpbi5jYCwgYW5kIGB2ZmlvLmNgLiBSZXBsYWNpbmcgYHN0cnVjdCBrdm0gKmt2bWAgd2l0aCBgc3RydWN0IGZpbGUgKmZpbGVgIGluIHNldmVyYWwgcGxhY2VzLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBmaWxlX3RvX2t2bSgpYCBhbmQgcmVsYXRlZCBjaGFuZ2VzLCBpcyB0aGUgY29yZSBvZiBpdC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY2hhbmdlcyBpbiBob3cgS1ZNcyBhcmUgY3JlYXRlZCwgYWNjZXNzZWQsIGFuZCByZWxlYXNlZCwgYWxvbmdzaWRlIFZGSU8gaW50ZXJhY3Rpb25zLiBUaGUgYEVYUE9SVF9TWU1CT0xfR1BMYCB2cy4gYEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTGAgY2hhbmdlcyBhcmUgYWxzbyBpbnRlcmVzdGluZyBhbmQgY291bGQgaGludCBhdCBhY2Nlc3MgY29udHJvbCBjaGFuZ2VzLCBhbmQgbWF5IGV4cG9zZSBzb21lIG5ldyBzdXJmYWNlLgoKVGhlIGtleSBmdW5jdGlvbnMgYXJlOgoKKiAgIGBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcmAsIGBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyYCwgYGt2bV93cml0ZV90cmFja19hZGRfZ2ZuYCwgYGt2bV93cml0ZV90cmFja19yZW1vdmVfZ2ZuYCAoaW4gYHBhZ2VfdHJhY2suY2ApCiogICBgdmZpb19ncm91cF9zZXRfa3ZtYCwgYHZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZWAsIGB2ZmlvX2RldmljZV9wdXRfa3ZtYCwgYHZmaW9fZmlsZV9zZXRfa3ZtYCwgYHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bWAgKFZGSU8gcmVsYXRlZCBjb2RlKQoqICAgYGt2bV9nZXRfa3ZtYCwgYGt2bV9nZXRfa3ZtX3NhZmVgLCBga3ZtX3B1dF9rdm1gIChpbiBga3ZtX21haW4uY2ApCiogICBga3ZtX3ZtX3JlbGVhc2VgCiogICBga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm1gCiogICBga3ZtX3ZmaW9fZmlsZV9zZXRfa3ZtYCBhbmQgYGt2bV92ZmlvX2ZpbGVfYWRkYCAoaW4gYHZmaW8uY2ApCgpOb3csIGlzIHRoaXMgZXZlbiByZWFjaGFibGUgb24geDg2XzY0LCBvciBpcyBpdCBpc29sYXRlZD8gVGhlIGFuc3dlciBpcyBjbGVhcmx5IHllcyEgS1ZNIGFuZCBWRklPIGFyZSBmb3VuZGF0aW9uYWwgdGVjaG5vbG9naWVzLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIEtWTSBpb2N0bHMsIHNwZWNpZmljYWxseSB0aG9zZSByZWxhdGVkIHRvIEtWTS1WRklPIGRldmljZSBjcmVhdGlvbiBhbmQgbWFuYWdlbWVudCwgYW5kIFZGSU8gaW9jdGxzL2ZpbGUgZGVzY3JpcHRvcnMgdGhhdCBpbnRlcmFjdCB3aXRoIEtWTS4gV2UgZGVmaW5pdGVseSBjYW4gZ2V0IHRvIHRoaXMuCgpUaGlua2luZyBhYm91dCB0aGUgZnV6emluZyBwb3RlbnRpYWwsIGxldCYjMzk7cyBzZWUgaG93IHRoaXMgYWxpZ25zIHdpdGggdGhlIGNyaXRlcmlhLiBUaGlzIHNlZW1zIHRvIGhpdCBvbiBzZXZlcmFsIHBvaW50cy4gVGhpcyBoYXMgcG90ZW50aWFsLCBpdCBmaXRzLgoKKiAgICoqQ29yZSBTdWJzeXN0ZW1zOioqIE1lbW9yeSBtYW5hZ2VtZW50LCBWRlMsIEtWTSwgVkZJTyBhcmUgdG91Y2hlZC4KKiAgICoqUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOioqIFllcywgd2UmIzM5O3JlIHNlZWluZyByZXN0cnVjdHVyaW5nIG9mIGRhdGEgc3RydWN0dXJlcyAoYGt2bWAgYW5kIGBmaWxlYCBzcGVjaWZpY2FsbHkpLCBhbmQgaG93IHRoZXNlIGFyZSBoYW5kbGVkLgoqICAgKipSdW50aW1lIGFzc2VydGlvbnMgYW5kIGRlZmVuc2l2ZSBjaGVja3M6KiogVGhlIGNoYW5nZXMgd2l0aCBgZ2V0X2ZpbGVfYWN0aXZlYCwgc3BpbmxvY2tzLCBhbmQgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBjaGFuZ2VzIGJldHdlZW4gYHN0cnVjdCBmaWxlYCBhbmQgYHN0cnVjdCBrdm1gIGxvb2sgcHJvbWlzaW5nIGZvciBleHBvc2luZyBzdWJ0bGUgYnVncy4gVGhpcyBpcyBhIHJlZmFjdG9yLCB0aGlzIGlzIGEgY2hhbmdlIHRvIHRoZSBmdW5kYW1lbnRhbCB3YXkgd2UmIzM5O3JlIGhhbmRsaW5nIGZpbGUgZGVzY3JpcHRvcnMsIGFuZCBLVk0gY29udGV4dHMuCgpTbywgdGhpcyBwYXRjaCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuIE5leHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIEtjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIG9yIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciBLVk0gYW5kIFZGSU8gdG8gZGV0ZXJtaW5lIHRoZSBuZWVkZWQgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgY29uZmlndXJhdGlvbnMgZm9yOgoKKiAgIEtWTSAob2J2aW91c2x5KS4KKiAgIFZGSU8sIGVzcGVjaWFsbHkgYW55dGhpbmcgcmVsYXRlZCB0byBkZXZpY2UgYXNzaWdubWVudCBhbmQgcGFzc3Rocm91Z2guCiogICBBbnl0aGluZyByZWxhdGluZyB0byB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHdlJiMzOTtyZSBsb29raW5nIGF0LCBqdXN0IGluIGNhc2UuCgpPbmNlIEkgaGF2ZSB0aGUgY29uZmlncyBuYWlsZWQgZG93biwgSSBjYW4gc3RhcnQgdGhpbmtpbmcgYWJvdXQgc3BlY2lmaWMgZnV6emluZyB0YXJnZXRzLiBUaGlzIGxvb2tzIHRvIGJlIHJpcGUgZm9yIGlucHV0IHRoYXQgdHJpZ2dlcnMgaW9jdGxzIHJlbGF0ZWQgdG8gS1ZNIGRldmljZSBjcmVhdGlvbi9tYW5hZ2VtZW50LCBhbmQgYW55dGhpbmcgdGhhdCBtYW5pcHVsYXRlcyBmaWxlIGRlc2NyaXB0b3JzIHJlbGF0ZWQgdG8gVkZJTyBhbmQgS1ZNLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mzpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5My1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDg6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTc6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOC1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzM6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNC1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzODYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBWRklPIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgVkZJTyBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIGRyaXZlciBvcHRpb25zIHJlc2lkZS4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gbmF2aWdhdGUgdG8gdGhlIGBkcml2ZXJzL3ZmaW8vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBkZWZpbml0aW9uIGZvciBhbGwgdGhpbmdzIHJlbGF0ZWQgdG8gVkZJTy4gVGhhdCBmaWxlIHNob3VsZCBkZWZpbmUgdGhlIHZhcmlvdXMga25vYnMgYW5kIHN3aXRjaGVzIHdlIGhhdmUgdG8gY29udHJvbCBpdHMgYmVoYXZpb3IsIHdoZXRoZXIgaXQgaXMgZW5hYmxlZCBhcyBhIG1vZHVsZSwgYnVpbHQgaW4gb3IgZGlzYWJsZWQuIEZyb20gdGhlcmUsIEkgY2FuIHVuZGVyc3RhbmQgd2hpY2ggZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSwgd2hpY2ggZGVwZW5kZW5jaWVzIGV4aXN0LCBhbmQgaG93IHRoZSB2YXJpb3VzIGNvbXBvbmVudHMgaW50ZXJhY3QgZnJvbSBhIGJ1aWxkIGNvbmZpZ3VyYXRpb24gcGVyc3BlY3RpdmUuIFRoaXMgaXMgYSBjcml0aWNhbCBzdGVwIGJlZm9yZSBhdHRlbXB0aW5nIGFueSBtb2RpZmljYXRpb25zIG9yIHRyb3VibGVzaG9vdGluZyBiZWNhdXNlIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGN1cnJlbnQgcGFyYW1ldGVycyBhbmQgaG93IHRoZXkgYXJlIGhhbmRsZWQuIFRoZSBLY29uZmlnIGZpbGUgc2hvdWxkIGdpdmUgbWUgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy92ZmlvL0tjb25maWc6MjptZW51Y29uZmlnIFZGSU9cbmRyaXZlcnMvdmZpby9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtWRklPIE5vbi1Qcml2aWxlZ2VkIHVzZXJzcGFjZSBkcml2ZXIgZnJhbWV3b3JrXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWc9MTY9aWYgVkZJT1xuZHJpdmVycy92ZmlvL0tjb25maWc6MTc6Y29uZmlnIFZGSU9fREVWSUNFX0NERVZcbmRyaXZlcnMvdmZpby9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciB0aGUgVkZJTyBjZGV2IC9kZXYvdmZpby9kZXZpY2VzL3ZmaW9YXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWctMjgtXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzoyOTpjb25maWcgVkZJT19HUk9VUFxuZHJpdmVycy92ZmlvL0tjb25maWctMzAtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRoZSBWRklPIGdyb3VwIC9kZXYvdmZpby8kZ3JvdXBfaWRcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0zOC1cbmRyaXZlcnMvdmZpby9LY29uZmlnOjM5OmNvbmZpZyBWRklPX0NPTlRBSU5FUlxuZHJpdmVycy92ZmlvL0tjb25maWctNDAtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRoZSBWRklPIGNvbnRhaW5lciAvZGV2L3ZmaW8vdmZpb1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnPTUxPWlmIFZGSU9fQ09OVEFJTkVSXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Mjpjb25maWcgVkZJT19JT01NVV9UWVBFMVxuZHJpdmVycy92ZmlvL0tjb25maWctNTMtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnLTU1LVxuZHJpdmVycy92ZmlvL0tjb25maWc6NTY6Y29uZmlnIFZGSU9fSU9NTVVfU1BBUFJfVENFXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01Ny1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWc9NjA9ZW5kaWZcbmRyaXZlcnMvdmZpby9LY29uZmlnLTYxLVxuZHJpdmVycy92ZmlvL0tjb25maWc6NjI6Y29uZmlnIFZGSU9fTk9JT01NVVxuZHJpdmVycy92ZmlvL0tjb25maWctNjMtXHRib29sIFwmIzM0O1ZGSU8gTm8tSU9NTVUgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnLTc4LVxuZHJpdmVycy92ZmlvL0tjb25maWc6Nzk6Y29uZmlnIFZGSU9fVklSUUZEXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy04MC1cdGJvb2xcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy04My1cbmRyaXZlcnMvdmZpby9LY29uZmlnOjg0OmNvbmZpZyBWRklPX0RFQlVHRlNcbmRyaXZlcnMvdmZpby9LY29uZmlnLTg1LVx0Ym9vbCBcJiMzNDtFeHBvcnQgVkZJTyBpbnRlcm5hbHMgaW4gRGVidWdGU1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9jZHgvS2NvbmZpZy03LVxuZHJpdmVycy92ZmlvL2NkeC9LY29uZmlnOjg6Y29uZmlnIFZGSU9fQ0RYXG5kcml2ZXJzL3ZmaW8vY2R4L0tjb25maWctOS1cdHRyaXN0YXRlIFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgQ0RYIGJ1cyBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnPTE9bWVudSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIEZTTF9NQyBidXMgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy0zLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnOjQ6Y29uZmlnIFZGSU9fRlNMX01DXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctNS1cdHRyaXN0YXRlIFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgUW9ySVEgRFBBQTIgZnNsLW1jIGJ1cyBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL21kZXYvS2NvbmZpZy0yLVxuZHJpdmVycy92ZmlvL21kZXYvS2NvbmZpZzozOmNvbmZpZyBWRklPX01ERVZcbmRyaXZlcnMvdmZpby9tZGV2L0tjb25maWctNC1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTI9bWVudSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTpjb25maWcgVkZJT19QQ0lfQ09SRVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTYtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy05LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BDSV9JTlRYXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTEtXHRkZWZfYm9vbCB5IGlmICFTMzkwXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTEzLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjE0OmNvbmZpZyBWRklPX1BDSVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBWRklPIHN1cHBvcnQgZm9yIGFueSBQQ0kgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTIzPWlmIFZGSU9fUENJXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MjQ6Y29uZmlnIFZGSU9fUENJX1ZHQVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTMzLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjM0OmNvbmZpZyBWRklPX1BDSV9JR0RcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zNS1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBleHRlbnNpb25zIGZvciBJbnRlbCBncmFwaGljcyAoR1ZULWQpXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTQ1PWVuZGlmXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDYtXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDc6Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDgtXHRib29sIFwmIzM0O1ZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01Ny1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo1ODpjb25maWcgVkZJT19QQ0lfRE1BQlVGXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTktXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXHUwMDI2XHUwMDI2IFBDSV9QMlBETUEgXHUwMDI2XHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXG4tLVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWc9Mj1tZW51IFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgcGxhdGZvcm0gZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnLTQtXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZzo1OmNvbmZpZyBWRklPX1BMQVRGT1JNX0JBU0VcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnLTYtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnLTgtXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZzo5OmNvbmZpZyBWRklPX1BMQVRGT1JNXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZy0xMC1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgcGxhdGZvcm0gZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctMTgtXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZzoxOTpjb25maWcgVkZJT19BTUJBXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O1ZGSU8gc3VwcG9ydCBmb3IgQU1CQSBkZXZpY2VzIChERVBSRUNBVEVEKVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnPTI9aWYgVkZJT19QTEFURk9STVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL3Jlc2V0L0tjb25maWc6Mzpjb25maWcgVkZJT19QTEFURk9STV9DQUxYRURBWEdNQUNfUkVTRVRcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIGNhbHhlZGEgeGdtYWMgcmVzZXQgKERFUFJFQ0FURUQpXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL3Jlc2V0L0tjb25maWctOS1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BMQVRGT1JNX0FNRFhHQkVfUkVTRVRcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTExLVx0dHJpc3RhdGUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBBTUQgWEdCRSByZXNldCAoREVQUkVDQVRFRClcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy0xNi1cbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnOjE3OmNvbmZpZyBWRklPX1BMQVRGT1JNX0JDTUZMRVhSTV9SRVNFVFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL3Jlc2V0L0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIEJyb2FkY29tIEZsZXhSTSByZXNldCAoREVQUkVDQVRFRClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM5NAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcywgdGhpbmtpbmcgb3V0IGxvdWQ6CgoqKkRpdmluZyBpbnRvIFZGSU8gYW5kIEtWTSBJbnRlcmFjdGlvbioqCgpSaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IFZGSU8gYW5kIEtWTSBhcmUgdGFsa2luZyB0byBlYWNoIG90aGVyLCBhbmQgd2hhdCB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIGFyZS4gSSYjMzk7bGwgc3RhcnQgYnkgZm9jdXNpbmcgb24gYHZpcnQva3ZtL3ZmaW8uY2AuIFRoYXQmIzM5O3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSBWRklPIHNpZGUgb2YgdGhpbmdzLgoKTXkgbmV4dCBtb3ZlIGlzIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgYHZpcnQva3ZtL3ZmaW8uY2AgZ2V0cyBidWlsdCBpbnRvIHRoZSBrZXJuZWwuIFRoZSBNYWtlZmlsZSB3aWxsIGJlIHRoZSBrZXkgdGhlcmUuIEkgbmVlZCB0byB0cmFjZSB0aGUgYnVpbGQgcHJvY2VzcyB0byBzZWUgaXRzIGRlcGVuZGVuY2llcyBhbmQgYW55IHJlbGV2YW50IGNvbXBpbGVyIGZsYWdzIG9yIGNvbmRpdGlvbnMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBtb2R1bGUgaXMgaW5jbHVkZWQgaW50byB0aGUgZ3JlYXRlciBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9NYWtlZmlsZS5rdm09OD1rdm0teSA6PSAkKEtWTSkva3ZtX21haW4ubyAkKEtWTSkvZXZlbnRmZC5vICQoS1ZNKS9iaW5hcnlfc3RhdHMub1xudmlydC9rdm0vTWFrZWZpbGUua3ZtOjk6a3ZtLSQoQ09ORklHX0tWTV9WRklPKSAmIzQzOz0gJChLVk0pL3ZmaW8ub1xudmlydC9rdm0vTWFrZWZpbGUua3ZtLTEwLWt2bS0kKENPTkZJR19LVk1fTU1JTykgJiM0Mzs9ICQoS1ZNKS9jb2FsZXNjZWRfbW1pby5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NzAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIENPTkZJR19LVk1fVkZJTyBEZWZpbml0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBDT05GSUdfS1ZNX1ZGSU9gLiBJdCYjMzk7cyBhIGtleSBzeW1ib2wsIHNvIGl0IHNob3VsZCBiZSB1c2VkIHByZXR0eSB3aWRlbHkuIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgd2hlcmUgYW5kIGhvdyB0aGUgVkZJTyBzdXBwb3J0IGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcuIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgbWF5YmUgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgc2VhcmNoIHRocm91Z2ggdGhlIGtlcm5lbCYjMzk7cyBzb3VyY2UgdHJlZSBhbmQgY29uZmlnIGZpbGVzLiBUaGUgZ29hbCBpcyB0byBlc3RhYmxpc2ggdGhlIGNvbXBsZXRlIGRlcGVuZGVuY3kgY2hhaW4gYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGxlYWQgdG8gaXRzIGFjdGl2YXRpb24gYW5kIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBLVk0gY29tcG9uZW50cy4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBpdHMgY29udGV4dCB3aXRoaW4gdGhlIGxhcmdlciBrZXJuZWwgZnJhbWV3b3JrLiBJJiMzOTttIHRoaW5raW5nIG9mIGBLY29uZmlnYCBmaWxlcyBhbmQgdGhlaXIgaW5jbHVzaW9uIGhpZXJhcmNoaWVzLiBUaW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9WRklPJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL0tjb25maWc9NTk9Y29uZmlnIEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTYxLVxudmlydC9rdm0vS2NvbmZpZzo2Mjpjb25maWcgS1ZNX1ZGSU9cbnZpcnQva3ZtL0tjb25maWctNjMtICAgICAgIGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwODYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBWRklPIFVzZXIgU2VsZWN0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgYSBjb25jaXNlIG9uZTogJiMzNDtMZXQmIzM5O3Mgc2VlIHdobyBzZWxlY3RzIEtWTV9WRklPLiYjMzQ7IEl0IGltbWVkaWF0ZWx5IGJyaW5ncyB0byBtaW5kIGEgc3BlY2lmaWMgc2NlbmFyaW8uIEkmIzM5O20gbGlrZWx5IHRoaW5raW5nIGFib3V0IG1vbml0b3JpbmcsIHBlcmhhcHMgYSBzeXN0ZW0gY29uZmlndXJhdGlvbiwgYSBkZXZlbG9wbWVudCBwcm9jZXNzLCBvciBtYXliZSBldmVuIGEgdXNlciBzdXJ2ZXkuIFRoZSB0cmlnZ2VyIGlzIHRoZSBtZW50aW9uIG9mIEtWTV9WRklPIHdoaWNoIGltbWVkaWF0ZWx5IHBsYWNlcyBtZSBpbiB0aGUgY29udGV4dCBvZiB2aXJ0dWFsaXphdGlvbiwgaGFyZHdhcmUgcGFzc3Rocm91Z2gsIGFuZCBJL08gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLgoKVGhlIGltcGxpZWQgcXVlc3Rpb24gaXMsICYjMzQ7V2hvIGlzIGxldmVyYWdpbmcgVkZJTyAoVmlydHVhbCBGdW5jdGlvbiBJL08pIHdpdGhpbiBhIEtWTSAoS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSkgZW52aXJvbm1lbnQ/JiMzNDsgVGhpcyBpc24mIzM5O3QganVzdCBhIGNhc3VhbCBvYnNlcnZhdGlvbjsgaXQmIzM5O3MgYSBkYXRhLWdhdGhlcmluZyBleGVyY2lzZS4gSSYjMzk7bSB0cnlpbmcgdG8gaWRlbnRpZnkgYSBzcGVjaWZpYyBkZW1vZ3JhcGhpYyBvciB1c2VyIHByb2ZpbGUgcmVsYXRlZCB0byBhZHZhbmNlZCB2aXJ0dWFsaXphdGlvbiB0ZWNobmlxdWVzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBnYW1lcnMsIHJlc2VhcmNoZXJzIHdvcmtpbmcgd2l0aCBzcGVjaWFsaXplZCBoYXJkd2FyZSwgb3IgcGVyaGFwcyBlbnRlcnByaXNlIHVzZXJzIGNvbnNvbGlkYXRpbmcgd29ya2xvYWRzPwoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgbGlrZWx5IHRvIGlkZW50aWZ5IHRoZSB1c2UgY2FzZXMgYW5kIHRlY2huaWNhbCBrbm93bGVkZ2UgYmFzZSBzdXJyb3VuZGluZyB0aGUgcGVvcGxlIHRoYXQgYXJlIHVzaW5nIHRoZSBoYXJkd2FyZSBwYXNzLXRocm91Z2ggY2FwYWJpbGl0aWVzIG9mIEtWTV9WRklPLiBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIGFwcGxpY2F0aW9ucywgdW5kZXJseWluZyBoYXJkd2FyZSwgYW5kIGNvbmZpZ3VyYXRpb24gY2hvaWNlcyBiZWluZyBtYWRlLiBJdCBzdWdnZXN0cyB0aGF0IHRoZXJlIGlzIGEgZGVmaW5lZCBwcm9ibGVtIHRvIHNvbHZlIG9yIGEgZGF0YSBhbmFseXNpcyBwcm9qZWN0IHRvIHBlcmZvcm0uIFRoaXMgYWxzbyBtZWFucyB0aGF0IEkgYW0gcHJvYmFibHkgYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBpbXBsaWNhdGlvbnMgb2Ygc2VsZWN0aW5nIGFuZCBkZXBsb3lpbmcgVkZJTywgYXMgd2VsbCBhcyB0aGUgaW1wbGljYXRpb25zIG9mIG5vdCBkb2luZyBzby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEtWTV9WRklPJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9MjA9bWVudWNvbmZpZyBLVk1cbi0tXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTI3LVx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjI4Olx0c2VsZWN0IEtWTV9WRklPXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTI5LVx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIyLVx0c2VsZWN0IEtWTV9DT01NT05cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMzpcdHNlbGVjdCBLVk1fVkZJT1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI0LVx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1Ncbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWc9MTk9Y29uZmlnIEtWTVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0yOS1cdHNlbGVjdCBIQVZFX0tWTV9OT19QT0xMXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MzA6XHRzZWxlY3QgS1ZNX1ZGSU9cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0zMS1cdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNDQtXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo0NTpcdHNlbGVjdCBLVk1fVkZJT1xuYXJjaC94ODYva3ZtL0tjb25maWctNDYtXHRzZWxlY3QgSEFWRV9LVk1fUE1fTk9USUZJRVIgaWYgUE1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4NTgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBSZXZpZXcgZm9yIEtWTSBhbmQgVkZJTyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgeDg2IGtlcm5lbCBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gS1ZNIGFuZCBWRklPLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhhdCBgQ09ORklHX0tWTV9YODZgIGltcGxpZXMgYEtWTV9WRklPYCwgd2hpY2ggbWFrZXMgc2Vuc2U7IHRoZXkgb2Z0ZW4gZ28gaGFuZC1pbi1oYW5kIGluIGEgdmlydHVhbGl6YXRpb24gc2V0dXAuIEkmIzM5O20gbm90aW5nIHRoYXQgYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX1ZGSU9gIGFyZSB0aGUgY29yZSBjb25maWcgb3B0aW9ucyBoZXJlLgoKTm93LCBsZXQmIzM5O3MgYWxzbyBjaGVjayB0aGlzIGBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdgIG9wdGlvbiDigJMgdGhhdCYjMzk7cyBzb21ldGhpbmcgd29ydGggaW52ZXN0aWdhdGluZy4gSSYjMzk7bGwgbWFrZSBhIG1lbnRhbCBub3RlIHRvIGZpbmQgdGhhdCBpbiBgYXJjaC94ODYva3ZtL0tjb25maWdgIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyB0aGVyZS4gSSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuLi4gc28gSSBtdXN0IGNoZWNrIHdobyBzZWxlY3RzIGBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3IgZmVhdHVyZXMgcmVseSBvbiB0aGlzLiBUaGlzIGlzIGFsbCBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgS1ZNIGFuZCBWRklPIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZz0xMjU9Y29uZmlnIERSTV9JOTE1X0dWVF9LVk1HVFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWctMTMxLVx0c2VsZWN0IERSTV9JOTE1X0dWVFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZzoxMzI6XHRzZWxlY3QgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmlnLTEzMy1cdHNlbGVjdCBWRklPX01ERVZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczMTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBLVk0gUGFnZSBUcmFja2luZyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXJgIGlzIGFjdHVhbGx5IGNvbXBpbGVkIHdpdGhpbiB0aGUgeDg2IEtWTSBjb2RlLiBUaGlzIGZ1bmN0aW9uIGlzIHByZXR0eSBjcml0aWNhbCBmb3IgdHJhY2tpbmcgcGFnZSBtb2RpZmljYXRpb25zLCBzbyBrbm93aW5nIGl0cyBidWlsZCBsb2NhdGlvbiB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgS1ZNIGFyY2hpdGVjdHVyZS4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgLiBUaGF0IGZpbGUgc2hvdWxkIG9yY2hlc3RyYXRlIHRoZSBidWlsZCBvZiBhbGwgdGhlIHJlbGV2YW50IEtWTSBjb21wb25lbnRzIGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gVGltZSB0byBkaXZlIGluIGFuZCBzZWUgd2hlcmUgdGhhdCBub3RpZmllciByZWdpc3RyYXRpb24gaXMgYWN0dWFsbHkgYnJvdWdodCBpbnRvIHRoZSBwaWN0dXJlLiBGaW5kaW5nIGl0JiMzOTtzIGJ1aWxkIHJ1bGUgc2hvdWxkIGlsbHVtaW5hdGUgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgcmVzdCBvZiB0aGUgS1ZNIGluZnJhc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX3RyYWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9NYWtlZmlsZT04PWt2bS15XHRcdFx0JiM0Mzs9IHg4Ni5vIGVtdWxhdGUubyBpcnEubyBsYXBpYy5vIGNwdWlkLm8gbXNycy5vIHBtdS5vIHJlZ3MubyBcXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjk6XHRcdFx0ICAgbXRyci5vIGRlYnVnZnMubyBtbXUvbW11Lm8gbW11L3BhZ2VfdHJhY2subyBtbXUvc3B0ZS5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMTAtXG4tLVxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTU5PWV4cG9ydHNfZ3JlcF90cmFpbGVyIDo9IC0taW5jbHVkZT0mIzM5OyouW2NoXSYjMzk7IC1ucncgJChzcmN0cmVlKS92aXJ0L2t2bSAkKHNyY3RyZWUpL2FyY2gveDg2L2t2bSB8IFxcXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6NjA6XHRcdFx0Z3JlcCAtdiAtZSBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllciBcXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjYxOlx0XHRcdFx0LWUga3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllciBcXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTYyLVx0XHRcdFx0LWUga3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm4gXFxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTI3LSNpbmNsdWRlIFwmIzM0O2t2bV9lbXVsYXRlLmhcJiMzNDtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Mjg6I2luY2x1ZGUgXCYjMzQ7cGFnZV90cmFjay5oXCYjMzQ7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTI5LSNpbmNsdWRlIFwmIzM0O2NwdWlkLmhcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQwNjA9c3RhdGljIGludCBtbXVfZmlyc3Rfc2hhZG93X3Jvb3RfYWxsb2Moc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDA4Ny1cdGlmIChrdm1fbWVtc2xvdHNfaGF2ZV9ybWFwcyhrdm0pIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0MDg4Olx0ICAgIGt2bV9wYWdlX3RyYWNrX3dyaXRlX3RyYWNraW5nX2VuYWJsZWQoa3ZtKSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDA4OS1cdFx0Z290byBvdXRfc3VjY2Vzcztcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQxMDYtXHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQxMDc6XHRcdFx0ciA9IGt2bV9wYWdlX3RyYWNrX3dyaXRlX3RyYWNraW5nX2FsbG9jKHNsb3QpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00MTA4LVx0XHRcdGlmIChyKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDUyMD1zdGF0aWMgaW50IGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwgYm9vbCBkaXJlY3QpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTUzLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NTU0OnN0YXRpYyBib29sIHBhZ2VfZmF1bHRfaGFuZGxlX3BhZ2VfdHJhY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTU1LVx0XHRcdFx0XHQgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ4NDA9c3RhdGljIGludCBkaXJlY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00ODQ3LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0ODQ4Olx0aWYgKHBhZ2VfZmF1bHRfaGFuZGxlX3BhZ2VfdHJhY2sodmNwdSwgZmF1bHQpKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00ODQ5LVx0XHRyZXR1cm4gUkVUX1BGX1dSSVRFX1BST1RFQ1RFRDtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ5MzU9c3RhdGljIGludCBrdm1fdGRwX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ5MzktXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ5NDA6XHRpZiAocGFnZV9mYXVsdF9oYW5kbGVfcGFnZV90cmFjayh2Y3B1LCBmYXVsdCkpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ5NDEtXHRcdHJldHVybiBSRVRfUEZfV1JJVEVfUFJPVEVDVEVEO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTIwLSNpbmNsdWRlIFwmIzM0O21tdV9pbnRlcm5hbC5oXCYjMzQ7XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoyMTojaW5jbHVkZSBcJiMzNDtwYWdlX3RyYWNrLmhcJiMzNDtcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTIyLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM9MjM9c3RhdGljIGJvb2wga3ZtX2V4dGVybmFsX3dyaXRlX3RyYWNraW5nX2VuYWJsZWQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTI3LVx0ICogUmVhZCBleHRlcm5hbF93cml0ZV90cmFja2luZ19lbmFibGVkIGJlZm9yZSByZWxhdGVkIHBvaW50ZXJzLiAgUGFpcnNcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI4Olx0ICogd2l0aCB0aGUgc21wX3N0b3JlX3JlbGVhc2UgaW4ga3ZtX3BhZ2VfdHJhY2tfd3JpdGVfdHJhY2tpbmdfZW5hYmxlKCkuXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yOS1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTM1LVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MzY6Ym9vbCBrdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19lbmFibGVkKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTM3LXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy00MS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjQyOnZvaWQga3ZtX3BhZ2VfdHJhY2tfZnJlZV9tZW1zbG90KHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy00My17XG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtNDctXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzo0ODpzdGF0aWMgaW50IF9fa3ZtX3BhZ2VfdHJhY2tfd3JpdGVfdHJhY2tpbmdfYWxsb2Moc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTQ5LVx0XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIG5wYWdlcylcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy01OS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjYwOmludCBrdm1fcGFnZV90cmFja19jcmVhdGVfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy02MS1cdFx0XHRcdCAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy02My17XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzo2NDpcdGlmICgha3ZtX3BhZ2VfdHJhY2tfd3JpdGVfdHJhY2tpbmdfZW5hYmxlZChrdm0pKVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtNjUtXHRcdHJldHVybiAwO1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtNjYtXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzo2NzpcdHJldHVybiBfX2t2bV9wYWdlX3RyYWNrX3dyaXRlX3RyYWNraW5nX2FsbG9jKHNsb3QsIG5wYWdlcyk7XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy02OC19XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy02OS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjcwOmludCBrdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19hbGxvYyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtNzEte1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6NzI6XHRyZXR1cm4gX19rdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19hbGxvYyhzbG90LCBzbG90LVx1MDAzZW5wYWdlcyk7XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy03My19XG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM9OTA9dm9pZCBfX2t2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy05Ny1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjk4Olx0aWYgKEtWTV9CVUdfT04oIWt2bV9wYWdlX3RyYWNrX3dyaXRlX3RyYWNraW5nX2VuYWJsZWQoa3ZtKSwga3ZtKSlcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTk5LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM9MTEzPXZvaWQgX19rdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTIwLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MTIxOlx0aWYgKEtWTV9CVUdfT04oIWt2bV9wYWdlX3RyYWNrX3dyaXRlX3RyYWNraW5nX2VuYWJsZWQoa3ZtKSwga3ZtKSlcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTEyMi1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jPTE0Nj1ib29sIGt2bV9nZm5faXNfd3JpdGVfdHJhY2tlZChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTUzLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MTU0Olx0aWYgKCFrdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19lbmFibGVkKGt2bSkpXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0xNTUtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0xNzEtI2lmZGVmIENPTkZJR19LVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjE3Mjp2b2lkIGt2bV9wYWdlX3RyYWNrX2NsZWFudXAoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTczLXtcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjE3NDpcdHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9oZWFkICpoZWFkO1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTc1LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTE3OS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjE4MDppbnQga3ZtX3BhZ2VfdHJhY2tfaW5pdChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0xODEte1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MTgyOlx0c3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX2hlYWQgKmhlYWQ7XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0xODMtXG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM9MTg5PXN0YXRpYyBpbnQga3ZtX2VuYWJsZV9leHRlcm5hbF93cml0ZV90cmFja2luZyhzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMjA0LVx0ICovXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoyMDU6XHRpZiAoa3ZtX3BhZ2VfdHJhY2tfd3JpdGVfdHJhY2tpbmdfZW5hYmxlZChrdm0pKVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMjA2LVx0XHRnb3RvIG91dF9zdWNjZXNzO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTIxOC1cdFx0XHQgKi9cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjIxOTpcdFx0XHRyID0ga3ZtX3BhZ2VfdHJhY2tfd3JpdGVfdHJhY2tpbmdfYWxsb2Moc2xvdCk7XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yMjAtXHRcdFx0aWYgKHIpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMjM5LSAqL1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MjQwOmludCBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3QgZmlsZSAqZmlsZSxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI0MTpcdFx0XHRcdCAgICAgc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm4pXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yNDIte1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MjQzOlx0c3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX2hlYWQgKmhlYWQ7XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yNDQtXHRzdHJ1Y3Qga3ZtICprdm0gPSBmaWxlX3RvX2t2bShmaWxlKTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yNjQtfVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MjY1OkVYUE9SVF9TWU1CT0xfR1BMKGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKTtcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTI2Ni1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yNjgtICogc3RvcCByZWNlaXZpbmcgdGhlIGV2ZW50IGludGVyY2VwdGlvbi4gSXQgaXMgdGhlIG9wcG9zZWQgb3BlcmF0aW9uIG9mXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoyNjk6ICoga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIoKS5cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTI3MC0gKi9cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI3MTp2b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGZpbGUgKmZpbGUsXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoyNzI6XHRcdFx0XHRcdHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpuKVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMjczLXtcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI3NDpcdHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9oZWFkICpoZWFkO1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMjc1LVx0c3RydWN0IGt2bSAqa3ZtID0gZmlsZV90b19rdm0oZmlsZSk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMjg1LX1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI4NjpFWFBPUlRfU1lNQk9MX0dQTChrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKTtcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTI4Ny1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yOTQtICovXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoyOTU6dm9pZCBfX2t2bV9wYWdlX3RyYWNrX3dyaXRlKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCBjb25zdCB1OCAqbmV3LCBpbnQgYnl0ZXMpXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yOTYte1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6Mjk3Olx0c3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX2hlYWQgKmhlYWQ7XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoyOTg6XHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbjtcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTI5OS1cdGludCBpZHg7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMzE3LSAqL1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MzE4OnZvaWQga3ZtX3BhZ2VfdHJhY2tfZGVsZXRlX3Nsb3Qoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMzE5LXtcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjMyMDpcdHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9oZWFkICpoZWFkO1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MzIxOlx0c3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm47XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0zMjItXHRpbnQgaWR4O1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTYtXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaDo3OiNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGFnZV90cmFjay5oXHUwMDNlXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaC04LVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtOS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oOjEwOmJvb2wga3ZtX3BhZ2VfdHJhY2tfd3JpdGVfdHJhY2tpbmdfZW5hYmxlZChzdHJ1Y3Qga3ZtICprdm0pO1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6MTE6aW50IGt2bV9wYWdlX3RyYWNrX3dyaXRlX3RyYWNraW5nX2FsbG9jKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpO1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtMTItXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaDoxMzp2b2lkIGt2bV9wYWdlX3RyYWNrX2ZyZWVfbWVtc2xvdChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KTtcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oOjE0OmludCBrdm1fcGFnZV90cmFja19jcmVhdGVfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaC0xNS1cdFx0XHRcdCAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaD0yMz1ib29sIGt2bV9nZm5faXNfd3JpdGVfdHJhY2tlZChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtMjYtI2lmZGVmIENPTkZJR19LVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oOjI3OmludCBrdm1fcGFnZV90cmFja19pbml0KHN0cnVjdCBrdm0gKmt2bSk7XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaDoyODp2b2lkIGt2bV9wYWdlX3RyYWNrX2NsZWFudXAoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTI5LVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6MzA6dm9pZCBfX2t2bV9wYWdlX3RyYWNrX3dyaXRlKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCBjb25zdCB1OCAqbmV3LCBpbnQgYnl0ZXMpO1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6MzE6dm9pZCBrdm1fcGFnZV90cmFja19kZWxldGVfc2xvdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpO1xuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtMzItXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaDozMzpzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3BhZ2VfdHJhY2tfaGFzX2V4dGVybmFsX3VzZXIoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtMzQte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTM3LSNlbHNlXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaDozODpzdGF0aWMgaW5saW5lIGludCBrdm1fcGFnZV90cmFja19pbml0KHN0cnVjdCBrdm0gKmt2bSkgeyByZXR1cm4gMDsgfVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6Mzk6c3RhdGljIGlubGluZSB2b2lkIGt2bV9wYWdlX3RyYWNrX2NsZWFudXAoc3RydWN0IGt2bSAqa3ZtKSB7IH1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTQwLVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6NDE6c3RhdGljIGlubGluZSB2b2lkIF9fa3ZtX3BhZ2VfdHJhY2tfd3JpdGUoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaC00Mi1cdFx0XHRcdFx0ICBjb25zdCB1OCAqbmV3LCBpbnQgYnl0ZXMpIHsgfVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6NDM6c3RhdGljIGlubGluZSB2b2lkIGt2bV9wYWdlX3RyYWNrX2RlbGV0ZV9zbG90KHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTQ0LVx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KSB7IH1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTQ1LVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6NDY6c3RhdGljIGlubGluZSBib29sIGt2bV9wYWdlX3RyYWNrX2hhc19leHRlcm5hbF91c2VyKHN0cnVjdCBrdm0gKmt2bSkgeyByZXR1cm4gZmFsc2U7IH1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTQ3LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTQ5LVxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6NTA6c3RhdGljIGlubGluZSB2b2lkIGt2bV9wYWdlX3RyYWNrX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtNTEtXHRcdFx0XHRcdGNvbnN0IHU4ICpuZXcsIGludCBieXRlcylcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTUyLXtcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oOjUzOlx0X19rdm1fcGFnZV90cmFja193cml0ZSh2Y3B1LVx1MDAzZWt2bSwgZ3BhLCBuZXcsIGJ5dGVzKTtcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTU0LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaD04MDQ9c3RhdGljIGludCBGTkFNRShwYWdlX2ZhdWx0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oLTgzMi1cbmFyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaDo4MzM6XHRpZiAocGFnZV9mYXVsdF9oYW5kbGVfcGFnZV90cmFjayh2Y3B1LCBmYXVsdCkpIHtcbmFyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaC04MzQtXHRcdHNoYWRvd19wYWdlX3RhYmxlX2NsZWFyX2Zsb29kKHZjcHUsIGZhdWx0LVx1MDAzZWFkZHIpO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0yNy0jaW5jbHVkZSBcJiMzNDtrdm1fZW11bGF0ZS5oXCYjMzQ7XG5hcmNoL3g4Ni9rdm0veDg2LmM6Mjg6I2luY2x1ZGUgXCYjMzQ7bW11L3BhZ2VfdHJhY2suaFwmIzM0O1xuYXJjaC94ODYva3ZtL3g4Ni5jLTI5LSNpbmNsdWRlIFwmIzM0O3g4Ni5oXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTUwNjE9c3RhdGljIGludCBlbXVsYXRvcl93cml0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTA2OC1cdFx0cmV0dXJuIDA7XG5hcmNoL3g4Ni9rdm0veDg2LmM6NTA2OTpcdGt2bV9wYWdlX3RyYWNrX3dyaXRlKHZjcHUsIGdwYSwgdmFsLCBieXRlcyk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNTA3MC1cdHJldHVybiAxO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz01MjYwPXN0YXRpYyBpbnQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTMzMi1cbmFyY2gveDg2L2t2bS94ODYuYzo1MzMzOlx0a3ZtX3BhZ2VfdHJhY2tfd3JpdGUodmNwdSwgZ3BhLCBuZXcsIGJ5dGVzKTtcbmFyY2gveDg2L2t2bS94ODYuYy01MzM0LVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz05ODQzPWludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05ODU4LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjk4NTk6XHRyZXQgPSBrdm1fcGFnZV90cmFja19pbml0KGt2bSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTg2MC1cdGlmIChyZXQpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTk4NjQtXHRpZiAocmV0KVxuYXJjaC94ODYva3ZtL3g4Ni5jOjk4NjU6XHRcdGdvdG8gb3V0X2NsZWFudXBfcGFnZV90cmFjaztcbmFyY2gveDg2L2t2bS94ODYuYy05ODY2LVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05OTA5LVx0a3ZtX21tdV91bmluaXRfdm0oa3ZtKTtcbmFyY2gveDg2L2t2bS94ODYuYzo5OTEwOm91dF9jbGVhbnVwX3BhZ2VfdHJhY2s6XG5hcmNoL3g4Ni9rdm0veDg2LmM6OTkxMTpcdGt2bV9wYWdlX3RyYWNrX2NsZWFudXAoa3ZtKTtcbmFyY2gveDg2L2t2bS94ODYuYy05OTEyLW91dDpcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTAwMTQ9dm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwNDAtXHRrdm1fbW11X3VuaW5pdF92bShrdm0pO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMDQxOlx0a3ZtX3BhZ2VfdHJhY2tfY2xlYW51cChrdm0pO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDQyLVx0a3ZtX3hlbl9kZXN0cm95X3ZtKGt2bSk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwMDU3PXZvaWQga3ZtX2FyY2hfZnJlZV9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwNjctXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwNjg6XHRrdm1fcGFnZV90cmFja19mcmVlX21lbXNsb3Qoc2xvdCk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwNjktfVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMDA5Mz1zdGF0aWMgaW50IGt2bV9hbGxvY19tZW1zbG90X21ldGFkYXRhKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxNDYtXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAxNDc6XHRpZiAoa3ZtX3BhZ2VfdHJhY2tfY3JlYXRlX21lbXNsb3Qoa3ZtLCBzbG90LCBucGFnZXMpKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMTQ4LVx0XHRnb3RvIG91dF9mcmVlO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMDE3OD1pbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxODYtXHQgKi9cbmFyY2gveDg2L2t2bS94ODYuYzoxMDE4NzpcdGlmIChjaGFuZ2UgPT0gS1ZNX01SX01PVkUgXHUwMDI2XHUwMDI2IGt2bV9wYWdlX3RyYWNrX2hhc19leHRlcm5hbF91c2VyKGt2bSkpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxODgtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMDMzOD12b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAzNDMtXHRpZiAoY2hhbmdlID09IEtWTV9NUl9ERUxFVEUpXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAzNDQ6XHRcdGt2bV9wYWdlX3RyYWNrX2RlbGV0ZV9zbG90KGt2bSwgb2xkKTtcbmFyY2gveDg2L2t2bS94ODYuYy0xMDM0NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1MjQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTS1WRklPIEludGVncmF0aW9uOiBBIENvbmN1cnJlbmN5IERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyB0b3VjaGVzIEtWTSBhbmQgVkZJTywgYW5kIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGhvdyBLVk0gVk1zIGFuZCBWRklPIGRldmljZXMgYXJlIGxpbmtlZCBhdCB0aGUgZmlsZSBkZXNjcmlwdG9yIGxldmVsLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIHNwZWNpZmljYWxseSwgZ2l2ZW4gdGhlIGluaXRpYWwgY29udGV4dCBvZiBgcGFnZV90cmFjay5jYC4KCkZpcnN0LCBJIHNlZSB0aGUgYHBhZ2VfdHJhY2suY2AgY2hhbmdlcyBpbnRyb2R1Y2UgZmlsZS1iYXNlZCBub3RpZmllciByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQgbWVhbnMgdGhlIG9sZCBLVk0gc3RydWN0IGlzIG5vIGxvbmdlciBiZWluZyB1c2VkLiBUaGlzIHNpZ25hbHMgYSBzaGlmdCB0b3dhcmRzIGZpbGUtZGVzY3JpcHRvci1iYXNlZCBvcGVyYXRpb25zLgoKRGl2aW5nIGludG8gdGhlIGRpZmYsIEkgbm90ZSB0aGUgcGVydmFzaXZlIGNoYW5nZSBmcm9tIHVzaW5nIGBzdHJ1Y3Qga3ZtICpgIGZvciByZXByZXNlbnRpbmcgdGhlIEtWTSB0byB1c2luZyBgc3RydWN0IGZpbGUgKmAsIHRocm91Z2hvdXQgdGhlIFZGSU8gYW5kIEtWTSBjb2RlLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgYXJjaGl0ZWN0dXJhbCBzaGlmdC4gS2V5IGZ1bmN0aW9ucyBsaWtlIGBrdm1fcGFnZV90cmFja18qYCwgYHZmaW9fZ3JvdXBfc2V0X2t2bWAsIGFuZCBzZXZlcmFsIFZGSU8gZGV2aWNlL2dyb3VwIG9wZXJhdGlvbnMgYXJlIGFsbCByZWZhY3RvcmVkIHRvIHdvcmsgd2l0aCBgc3RydWN0IGZpbGUgKmAgYW5kIHVzZSBmaWxlIG9wZXJhdGlvbnMuIFRoZSB1c2FnZSBvZiBgZ2V0X2ZpbGVgIGFuZCBgZnB1dGAgaW4gcGxhY2Ugb2YgYGt2bV9nZXRfa3ZtYCBhbmQgYGt2bV9wdXRfa3ZtYCBpcyB0aGUgY3JpdGljYWwgcGllY2UgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgY29uY3VycmVuY3kgaW1wbGljYXRpb25zLiBLVk0tVkZJTyBpcyBhIGNsYXNzaWMgZXhhbXBsZSBvZiBjb21wbGV4IHJlc291cmNlIG1hbmFnZW1lbnQgaW52b2x2aW5nIHJlZmNvdW50aW5nLiBUaGUgY29kZSBub3cgbGlua3MgYSBWRklPIGRldmljZS9ncm91cCB0byBhIEtWTSBmaWxlIHRocm91Z2ggYGdldF9maWxlYCBhbmQgYGZwdXRgLiBUaGlzIHN1Z2dlc3RzIGEgcmFjZSBjb25kaXRpb24gaXMgcG9zc2libGUgYmV0d2VlbiB0aGUgY2xvc3VyZSBvZiB0aGUgVk0gZmlsZSBhbmQgdGhlIFZGSU8gb3BlcmF0aW9ucyBvciBga3ZtX3ZmaW9fZmlsZV9hZGRgLiBJIHNlZSBpbiBga3ZtX2hvc3QuaGAgYSBjb21tZW50IHRoYXQgZGVzY3JpYmVzIGEgbWVjaGFuaXNtIHZpYSBgZ2V0X2ZpbGVfYWN0aXZlYCB0byBwcmV2ZW50IHBpbm5pbmcgb2YgdGhlIFZNLCB3aGljaCBzdXBwb3J0cyBteSBjdXJyZW50IHN1c3BpY2lvbiB0aGF0IHRoaXMgYXJlYSBpcyBwcm9uZSB0byB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBUaGVzZSBhcmUgdGV4dGJvb2sgaW5kaWNhdG9ycyBvZiBwb3NzaWJsZSBjb25jdXJyZW5jeSBidWdzLCByZWZjb3VudCBpbmNvbnNpc3RlbmNpZXMsIGFuZCBwb3RlbnRpYWwgZGVhZGxvY2tzLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCB0byBmdXp6aW5nIQoKTm93LCB0aGUgc3ltYm9sIHNlbGVjdGlvbiBmb3IgZGVlcGVyIHRlc3RpbmcuIEkgbmVlZCB0byBiZSBwcmVjaXNlIGhlcmUuCgpIZXJlJiMzOTtzIG15IHJlZmluZWQgbGlzdCBvZiBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZnJvbSB0aGUgZGlmZjoKKiAgIGBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bWAgKGJlY2F1c2UgaXQmIzM5O3MgdGhlIHN0YXJ0IHBvaW50KQoqICAgYGt2bV92bV9yZWxlYXNlYCAoY3JpdGljYWwgZW5kcG9pbnQgZm9yIHJlc291cmNlIGNsZWFudXApCiogICBgZmlsZV90b19rdm1gIChhIGNyaXRpY2FsIGJhY2tsaW5rISkKKiAgIGBrdm1fdmZpb19maWxlX2FkZGAgYW5kIGBrdm1fdmZpb19maWxlX3NldF9rdm1gIChWRklPIGludGVncmF0aW9uIGVudHJ5KQoqICAgYHZmaW9fZmlsZV9zZXRfa3ZtYCAoY29yZSBWRklPIGRldmljZSBsaW5rIHRvIEtWTSkKKiAgIGB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmVgIGFuZCBgdmZpb19kZXZpY2VfcHV0X2t2bWAgKFZGSU8gZGV2aWNlIGZ1bmN0aW9ucykKKiAgIGB2ZmlvX2dyb3VwX3NldF9rdm1gIChWRklPIGdyb3VwIGxpbmtpbmcpCiogICBga3ZtX3BhZ2VfdHJhY2tfKmAgKHg4NiBzcGVjaWZpYykKCkl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGZpbGUtZGVzY3JpcHRvciBoYW5kbGluZyBmdW5jdGlvbnMgYXJlIHRoZSBtb3N0IGltcG9ydGFudC4gVGhlIHVzYWdlIG9mIGBmaWxlX3RvX2t2bWAgbWFrZXMgaXQgYSBjcml0aWNhbCBzeW1ib2wgZm9yIGFueSBhbmFseXNpcy4KCk9uIGNvbmZpZ3VyYXRpb24sIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgS1ZNYCwgYFZGSU9gLCBgVkZJT19HUk9VUGAsIGBWRklPX0RFVklDRV9DREVWYCwgYFZGSU9fQ09OVEFJTkVSYCwgYEtWTV9WRklPYCwgYW5kIGBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdgIGFyZSBzZXQuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBgZHJpdmVycy92ZmlvL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4KCk15IG92ZXJhbGwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2hzZXQgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgZHVlIHRvIHRoZSBmaWxlIHJlZmNvdW50aW5nIGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gS1ZNIGFuZCBWRklPLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0bWVudWNvbmZpZyBWRklPXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtWRklPIE5vbi1Qcml2aWxlZ2VkIHVzZXJzcGFjZSBkcml2ZXIgZnJhbWV3b3JrXCYjMzQ7XG4gICA0Olx0XHRzZWxlY3QgSU9NTVVfQVBJXG4gICA1Olx0XHRkZXBlbmRzIG9uIElPTU1VRkQgfHwgIUlPTU1VRkRcbiAgIDY6XHRcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXG4gICA3Olx0XHRzZWxlY3QgVkZJT19HUk9VUCBpZiBTUEFQUl9UQ0VfSU9NTVUgfHwgSU9NTVVGRD1uXG4gICA4Olx0XHRzZWxlY3QgVkZJT19ERVZJQ0VfQ0RFViBpZiAhVkZJT19HUk9VUFxuICAgOTpcdFx0c2VsZWN0IFZGSU9fQ09OVEFJTkVSIGlmIElPTU1VRkQ9blxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBWRklPIHByb3ZpZGVzIGEgZnJhbWV3b3JrIGZvciBzZWN1cmUgdXNlcnNwYWNlIGRldmljZSBkcml2ZXJzLlxuICAxMjpcdFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3ZmaW8ucnN0IGZvciBtb3JlIGRldGFpbHMuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIElmIHlvdSBkb24mIzM5O3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLlxuICAxNTpcdFxuICAxNjpcdGlmIFZGSU9cbiAgMTc6XHRjb25maWcgVkZJT19ERVZJQ0VfQ0RFVlxuICAxODpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciB0aGUgVkZJTyBjZGV2IC9kZXYvdmZpby9kZXZpY2VzL3ZmaW9YXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIElPTU1VRkQgXHUwMDI2XHUwMDI2ICFTUEFQUl9UQ0VfSU9NTVVcbiAgMjA6XHRcdGRlZmF1bHQgIVZGSU9fR1JPVVBcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgVGhlIFZGSU8gZGV2aWNlIGNkZXYgaXMgYW5vdGhlciB3YXkgZm9yIHVzZXJzcGFjZSB0byBnZXQgZGV2aWNlXG4gIDIzOlx0XHQgIGFjY2Vzcy4gVXNlcnNwYWNlIGdldHMgZGV2aWNlIGZkIGJ5IG9wZW5pbmcgZGV2aWNlIGNkZXYgdW5kZXJcbiAgMjQ6XHRcdCAgL2Rldi92ZmlvL2RldmljZXMvdmZpb1gsIGFuZCB0aGVuIGJpbmQgdGhlIGRldmljZSBmZCB3aXRoIGFuIGlvbW11ZmRcbiAgMjU6XHRcdCAgdG8gc2V0IHVwIHNlY3VyZSBETUEgY29udGV4dCBmb3IgZGV2aWNlIGFjY2Vzcy5cbiAgMjY6XHRcbiAgMjc6XHRcdCAgSWYgeW91IGRvbiYjMzk7dCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IE4uXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIFZGSU9fR1JPVVBcbiAgMzA6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgdGhlIFZGSU8gZ3JvdXAgL2Rldi92ZmlvLyRncm91cF9pZFwmIzM0O1xuICAzMTpcdFx0ZGVmYXVsdCB5XG4gIDMyOlx0XHRoZWxwXG4gIDMzOlx0XHQgICBWRklPIGdyb3VwIHN1cHBvcnQgcHJvdmlkZXMgdGhlIHRyYWRpdGlvbmFsIG1vZGVsIGZvciBhY2Nlc3NpbmdcbiAgMzQ6XHRcdCAgIGRldmljZXMgdGhyb3VnaCBWRklPIGFuZCBpcyB1c2VkIGJ5IHRoZSBtYWpvcml0eSBvZiB1c2Vyc3BhY2VcbiAgMzU6XHRcdCAgIGFwcGxpY2F0aW9ucyBhbmQgZHJpdmVycyBtYWtpbmcgdXNlIG9mIFZGSU8uXG4gIDM2Olx0XG4gIDM3Olx0XHQgICBJZiB5b3UgZG9uJiMzOTt0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgWS5cbiAgMzg6XHRcbiAgMzk6XHRjb25maWcgVkZJT19DT05UQUlORVJcbiAgNDA6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgdGhlIFZGSU8gY29udGFpbmVyIC9kZXYvdmZpby92ZmlvXCYjMzQ7XG4gIDQxOlx0XHRzZWxlY3QgVkZJT19JT01NVV9UWVBFMSBpZiBNTVUgXHUwMDI2XHUwMDI2IChYODYgfHwgUzM5MCB8fCBBUk0gfHwgQVJNNjQpXG4gIDQyOlx0XHRkZXBlbmRzIG9uIFZGSU9fR1JPVVBcbiAgNDM6XHRcdGRlZmF1bHQgeVxuICA0NDpcdFx0aGVscFxuICA0NTpcdFx0ICBUaGUgVkZJTyBjb250YWluZXIgaXMgdGhlIGNsYXNzaWMgaW50ZXJmYWNlIHRvIFZGSU8gZm9yIGVzdGFibGlzaGluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODE1OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkludmVzdGlnYXRpbmcgS1ZNIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGFuZCwgbW9yZSBwcmVjaXNlbHksIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIGBhcmNoL3g4Ni9rdm1gIGRpcmVjdG9yeS4gSSB3YW50IHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiBLVk0gYmVoYXZpb3IuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgS1ZNIGdlbmVyYWxseSwgb2YgY291cnNlLCBidXQgcGFydGljdWxhcmx5IEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJwbGF5IGFuZCBzcGVjaWZpYyBzZXR0aW5ncyBhcm91bmQgYEtWTV9JTlRFTGAgYW5kIGBLVk1fQU1EYC4gVGhlc2UgYXJlIHRoZSBrZXkgdG9nZ2xlcyBmb3IgSW50ZWwgYW5kIEFNRCBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0IHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgc3RydWN0dXJlZCwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QgYmV0d2VlbiB0aGVtLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBicm9hZGVyIEtWTSBmZWF0dXJlIHNldC4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBhIHNwZWNpZmljIGRldGFpbCBJIGFtIGxvb2tpbmcgZm9yIHJlZ2FyZGluZyBhIHNwZWNpZmljIGZlYXR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE4Olx0aWYgVklSVFVBTElaQVRJT05cbiAgMTk6XHRcbiAgMjA6XHRjb25maWcgS1ZNX1g4NlxuICAyMTpcdFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuICAyMjpcdFx0c2VsZWN0IEtWTV9DT01NT05cbiAgMjM6XHRcdHNlbGVjdCBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXG4gIDI0Olx0XHRzZWxlY3QgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xuICAyNTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcbiAgMjY6XHRcdHNlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRVxuICAyNzpcdFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfVFNPXG4gIDI4Olx0XHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXG4gIDI5Olx0XHRzZWxlY3QgSEFWRV9LVk1fSVJRX0JZUEFTU1xuICAzMDpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9ST1VUSU5HXG4gIDMxOlx0XHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXG4gIDMyOlx0XHRzZWxlY3QgVkhPU1RfVEFTS1xuICAzMzpcdFx0c2VsZWN0IEtWTV9BU1lOQ19QRlxuICAzNDpcdFx0c2VsZWN0IFVTRVJfUkVUVVJOX05PVElGSUVSXG4gIDM1Olx0XHRzZWxlY3QgS1ZNX01NSU9cbiAgMzY6XHRcdHNlbGVjdCBTQ0hFRF9JTkZPXG4gIDM3Olx0XHRzZWxlY3QgUEVSRl9FVkVOVFNcbiAgMzg6XHRcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UU1xuICAzOTpcdFx0c2VsZWN0IFBFUkZfR1VFU1RfTUVESUFURURfUE1VXG4gIDQwOlx0XHRzZWxlY3QgSEFWRV9LVk1fTVNJXG4gIDQxOlx0XHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxuICA0MjpcdFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcbiAgNDM6XHRcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuICA0NDpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuICA0NTpcdFx0c2VsZWN0IEtWTV9WRklPXG4gIDQ2Olx0XHRzZWxlY3QgSEFWRV9LVk1fUE1fTk9USUZJRVIgaWYgUE1cbiAgNDc6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xuICA0ODpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbiAgNDk6XHRcdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxuICA1MDpcdFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCBpZiBYODZfNjRcbiAgNTE6XHRcbiAgNTI6XHRjb25maWcgS1ZNXG4gIDUzOlx0XHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbiAgNTQ6XHRcdGRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUNcbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgU3VwcG9ydCBob3N0aW5nIGZ1bGx5IHZpcnR1YWxpemVkIGd1ZXN0IG1hY2hpbmVzIHVzaW5nIGhhcmR3YXJlXG4gIDU3Olx0XHQgIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuICBZb3Ugd2lsbCBuZWVkIGEgZmFpcmx5IHJlY2VudFxuICA1ODpcdFx0ICBwcm9jZXNzb3IgZXF1aXBwZWQgd2l0aCB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiBZb3Ugd2lsbCBhbHNvXG4gIDU5Olx0XHQgIG5lZWQgdG8gc2VsZWN0IG9uZSBvciBtb3JlIG9mIHRoZSBwcm9jZXNzb3IgbW9kdWxlcyBiZWxvdy5cbiAgNjA6XHRcbiAgNjE6XHRcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgdGhyb3VnaFxuICA2MjpcdFx0ICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS5cbiAgNjM6XHRcbiAgNjQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDY1Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGt2bS5cbiAgNjY6XHRcbiAgNjc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjg6XHRcbiAgNjk6XHRjb25maWcgS1ZNX1dFUlJPUlxuICA3MDpcdFx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbiAgNzE6XHRcdCMgRGlzYWxsb3cgS1ZNJiMzOTtzIC1XZXJyb3IgaWYgS0FTQU4gaXMgZW5hYmxlZCwgZS5nLiB0byBndWFyZCBhZ2FpbnN0XG4gIDcyOlx0XHQjIHJhbmRvbWl6ZWQgY29uZmlncyBmcm9tIHNlbGVjdGluZyBLVk1fV0VSUk9SPXksIHdoaWNoIGRvZXNuJiMzOTt0IHBsYXlcbiAgNzM6XHRcdCMgbmljZSB3aXRoIEtBU0FOLiAgS0FTQU4gYnVpbGRzIGdlbmVyYXRlcyB3YXJuaW5ncyBmb3IgdGhlIGRlZmF1bHRcbiAgNzQ6XHRcdCMgRlJBTUVfV0FSTiwgaS5lLiBLVk1fV0VSUk9SPXkgd2l0aCBLQVNBTj15IHJlcXVpcmVzIHNwZWNpYWwgdHVuaW5nLlxuICA3NTpcdFx0IyBCdWlsZGluZyBLVk0gd2l0aCAtV2Vycm9yIGFuZCBLQVNBTiBpcyBzdGlsbCBkb2FibGUgdmlhIGVuYWJsaW5nXG4gIDc2Olx0XHQjIHRoZSBrZXJuZWwtd2lkZSBXRVJST1I9eS5cbiAgNzc6XHRcdGRlcGVuZHMgb24gS1ZNX1g4NiBcdTAwMjZcdTAwMjYgKChFWFBFUlQgXHUwMDI2XHUwMDI2ICFLQVNBTikgfHwgV0VSUk9SKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTM5MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gbXkgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgRXh0ZXJuYWwgV3JpdGUgVHJhY2tpbmcgaW4gS1ZNKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYENPTkZJR19LVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0LiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uYWxpdHkgZW5hYmxlZD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiBpdCYjMzk7cyBvbiBvciBvZmY/IExldCBtZSBxdWlja2x5IHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nLCBhbmQgdHJhY2tpbmcgZXh0ZXJuYWwgd3JpdGVzIHRvIFZNIG1lbW9yeSwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gSSYjMzk7bGwgZm9jdXMgb24gaG93IHRoaXMgY29uZmlnIG9wdGlvbiBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBJcyBpdCBwZXJmb3JtYW5jZS1yZWxhdGVkPyBTZWN1cml0eS1yZWxhdGVkPyBCb3RoPyBMZXQmIzM5O3MgdHJhY2UgaXQgYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG1vcmUgZ2VuZXJhbCBLVk0gbWVjaGFuaXNtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjI1Olx0XHQgIGdhdGVzIGNvZGUgdGhhdCB2ZXJpZmllcyBhIHRvLWJlLWZyZWVkIHBhZ2UgdGFibGUgZG9lc24mIzM5O3QgaGF2ZSBhbnlcbiAyMjY6XHRcdCAgcHJlc2VudCBTUFRFcy5cbiAyMjc6XHRcbiAyMjg6XHRcdCAgSWYgaW4gZG91YnQsIHNheSBcJiMzNDtOXCYjMzQ7LlxuIDIyOTpcdFxuIDIzMDpcdGNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbiAyMzE6XHRcdGJvb2xcbiAyMzI6XHRcbiAyMzM6XHRjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuIDIzNDpcdFx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiAyMzU6XHRcdGRlcGVuZHMgb24gS1ZNX1g4NlxuIDIzNjpcdFx0cmFuZ2UgMTAyNCA0MDk2XG4gMjM3Olx0XHRkZWZhdWx0IDQwOTYgaWYgTUFYU01QXG4gMjM4Olx0XHRkZWZhdWx0IDEwMjRcbiAyMzk6XHRcdGhlbHBcbiAyNDA6XHRcdCAgU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0LiBMYXJnZXIgdmFsdWVzIHdpbGwgaW5jcmVhc2VcbiAyNDE6XHRcdCAgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgZWFjaCBLVk0gZ3Vlc3QsIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgdkNQVXMgYXJlXG4gMjQyOlx0XHQgIGNyZWF0ZWQgZm9yIGEgZ2l2ZW4gVk0uXG4gMjQzOlx0XG4gMjQ0Olx0ZW5kaWYgIyBWSVJUVUFMSVpBVElPTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTkxMAoJCQkJCQkJb3V0cHV0OiAzMzYKCQkJCQkJCXRob3VnaHRzOiAxMTgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gYW5kIFZGSU8gSW50ZWdyYXRpb24gQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IGFjdHVhbGx5IHRyaWdnZXJzIGBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdgLiBMb29rcyBsaWtlIGBEUk1fSTkxNV9HVlRfS1ZNR1RgIGlzIHRoZSBwcmltZSBzdXNwZWN0LCBhbmQgYSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0JiMzOTtzIHRoZSBvbmx5IG9uZS4gR2l2ZW4gdGhhdCwgSSBzaG91bGQgc2VlIGlmIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCBhcmUgYWxzbyBpbnZvbHZlZCBiZWNhdXNlIHRoZXkgZW5hYmxlIEtWTSBvbiB4ODYsIGFsb25nIHdpdGggdGhlIHN0YW5kYXJkIGBLVk1gLCBgVkZJT2AsIGFuZCByZWxhdGVkIFZGSU8gY29uZmlndXJhdGlvbnMuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgbW9kaWZpY2F0aW9ucy4gSSYjMzk7dmUgaWRlbnRpZmllZCBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGF0OgoxLiAgKipLVk0gUGFnZSBUcmFja2luZzoqKiBga3ZtX3BhZ2VfdHJhY2tfKmAgZnVuY3Rpb25zLCBoYW5kbGluZyBub3RpZmllciByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uLCBhbG9uZyB3aXRoIGFkZGluZyBhbmQgcmVtb3ZpbmcgR3Vlc3QgRnJhbWUgTnVtYmVycyAoR0ZOcykgZm9yIHdyaXRlIHRyYWNraW5nLgoyLiAgKipWRklPL0tWTSBJbnRlcmFjdGlvbjoqKiBGdW5jdGlvbnMgc3VjaCBhcyBgdmZpb19ncm91cF9zZXRfa3ZtYCwgYHZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZWAsIGB2ZmlvX2RldmljZV9wdXRfa3ZtYCwgYHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bWAgKGFuZCB0aGUgbm9uLXN0YXRpYyBgdmZpb19maWxlX3NldF9rdm1gKSwgYW5kIGBrdm1fdmZpb19maWxlXypgIGZ1bmN0aW9ucyB3aGljaCBkZWFsIHdpdGggZmlsZSBwb2ludGVycyBhbmQgS1ZNIGludGVncmF0aW9uLgozLiAgKipLVk0gVk0gTGlmZWN5Y2xlOioqIGBmaWxlX3RvX2t2bWAsIGBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bWAsIGFuZCBga3ZtX3ZtX3JlbGVhc2VgLgoKSSYjMzk7bGwgdmVyaWZ5IHdoZXRoZXIgYHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bWAgb3IgYGt2bV92ZmlvX2ZpbGVfc2V0X2t2bWAgYXJlIHN0YXRpYyBvciBpbmxpbmVkLCBzaW5jZSBgdmZpb19maWxlX3NldF9rdm1gIGNhbGxzIHRoZSBmb3JtZXIgYW5kIGBrdm1fdmZpb19maWxlX2FkZGAgY2FsbHMgdGhlIGxhdHRlci4KCkkgbmVlZCB0byBjb25maXJtIHRoZXNlIGFyZW4mIzM5O3QgcGFydCBvZiBhbnkgZ2VuZXJpYyBrZXJuZWwgaW5mcmFzdHJ1Y3R1cmUsIGxpa2UgbWVtb3J5IGFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRzIG9yIGxvY2tzIHdoaWNoIGNhbiBiZSBjb21tb24gaW4gdGhlIGtlcm5lbC4gVGhlIGZvY3VzIGlzIGRlZmluaXRlbHkgb24gS1ZNIFZNIGxpZmVjeWNsZSwgdGhlIEtWTS1WRklPIGF0dGFjaG1lbnQgbWVjaGFuaXNtLCBhbmQgdGhlIEtWTSBwYWdlIHRyYWNraW5nLgoKVGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWcgb3B0aW9ucyBJIHNob3VsZCBiZSBjb25zaWRlcmluZyBhcmU6IGBLVk1gLCBgS1ZNX0lOVEVMYCwgYEtWTV9BTURgLCBgVkZJT2AsIGBWRklPX0dST1VQYCwgYFZGSU9fQ09OVEFJTkVSYCwgYFZGSU9fREVWSUNFX0NERVZgLCBhbmQgdGhlIGltcG9ydGFudCBgRFJNX0k5MTVfR1ZUX0tWTUdUYC4KCkluIGVzc2VuY2UsIHdoYXQgdGhpcyBwYXRjaCBzZXJpZXMgZG9lcyBpcyByZWZhY3RvciB0aGUgS1ZNIGFuZCBWRklPIGludGVyYWN0aW9uLCBhbmQgYnkgcHJveHkgS1ZNIHBhZ2UgdHJhY2tpbmcsIHJlcGxhY2luZyByYXcgYHN0cnVjdCBrdm0gKmAgcG9pbnRlcnMgd2l0aCBgc3RydWN0IGZpbGUgKmAgcG9pbnRlcnMgdG8gS1ZNIFZNIGZpbGVzLiBUaGlzIGNoYW5nZSBpcyBpbnRlbmRlZCB0byBpbXByb3ZlIGxpZmV0aW1lIG1hbmFnZW1lbnQgYnkgZGVjb3VwbGluZyBpdC4gVGhpcyBpcyBkb25lIHZpYSBgZ2V0X2ZpbGUoKWAgYW5kIGBmcHV0KClgIHRvIG1hbmFnZSB0aGUgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGUgY2hhbmdlcyBhZmZlY3QgZmlsZSBsaWZlY3ljbGUgaGFuZGxpbmcsIHdoaWNoIGluY2x1ZGVzIHRoZSBga3ZtX3ZtX3JlbGVhc2VgIGZ1bmN0aW9uLCBhcyB3ZWxsIGFzIGRldmljZSBhdHRhY2htZW50IHdoaWNoIGlzIGhhbmRsZWQgYnkgYGt2bV92ZmlvX2ZpbGVfYWRkYCBhbmQgYHZmaW9fZmlsZV9zZXRfa3ZtYCBmdW5jdGlvbnMuIFRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBmaWxlIGxpZmVjeWNsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYWNjZXNzaWJsZSB2aWEgS1ZNIGFuZCBWRklPIGlvY3Rscy4KCkxldCYjMzk7cyBsb2cgdGhvc2UgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7VkZJTyYjMzQ7LAogICAgJiMzNDtWRklPX0dST1VQJiMzNDssCiAgICAmIzM0O1ZGSU9fQ09OVEFJTkVSJiMzNDssCiAgICAmIzM0O1ZGSU9fREVWSUNFX0NERVYmIzM0OywKICAgICYjMzQ7RFJNX0k5MTVfR1ZUX0tWTUdUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3ZmaW9fZmlsZV9hZGQmIzM0OywKICAgICYjMzQ7dmZpb19maWxlX3NldF9rdm0mIzM0OywKICAgICYjMzQ7dmZpb19ncm91cF9zZXRfa3ZtJiMzNDssCiAgICAmIzM0O3ZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2RldmljZV9wdXRfa3ZtJiMzNDssCiAgICAmIzM0O2ZpbGVfdG9fa3ZtJiMzNDssCiAgICAmIzM0O2t2bV92bV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2t2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtJiMzNDssCiAgICAmIzM0O2t2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyJiMzNDssCiAgICAmIzM0O2t2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXImIzM0OywKICAgICYjMzQ7a3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm4mIzM0OywKICAgICYjMzQ7a3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgcmVmZXJlbmNlIG1hbmFnZW1lbnQgYmV0d2VlbiBLVk0gYW5kIGV4dGVybmFsIHN1YnN5c3RlbXMgKHByaW1hcmlseSBWRklPIGFuZCBLVk0gcGFnZSB0cmFja2luZyksIHN3aXRjaGluZyBmcm9tIGhvbGRpbmcgZGlyZWN0ICYjMzk7c3RydWN0IGt2bSAqJiMzOTsgcG9pbnRlcnMgdG8gdXNpbmcgJiMzOTtzdHJ1Y3QgZmlsZSAqJiMzOTsgcmVmZXJlbmNlcyB2aWEgZ2V0X2ZpbGUoKS9mcHV0KCkgYW5kIGdldF9maWxlX2FjdGl2ZSgpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbGlmZWN5Y2xlIHBhdGhzLCBjb25jdXJyZW5jeSwgYW5kIHJlZmNvdW50aW5nIGJldHdlZW4gS1ZNIFZNIGZpbGVzIGFuZCBWRklPIGRldmljZXMvZ3JvdXBzIGR1cmluZyBWTSBjcmVhdGlvbiwgcmVsZWFzZSwgYW5kIFZGSU8gZGV2aWNlIGF0dGFjaG1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O1ZGSU9fR1JPVVAmIzM0OywKICAgICYjMzQ7VkZJT19DT05UQUlORVImIzM0OywKICAgICYjMzQ7VkZJT19ERVZJQ0VfQ0RFViYjMzQ7LAogICAgJiMzNDtEUk1fSTkxNV9HVlRfS1ZNR1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdmZpb19maWxlX2FkZCYjMzQ7LAogICAgJiMzNDt2ZmlvX2ZpbGVfc2V0X2t2bSYjMzQ7LAogICAgJiMzNDt2ZmlvX2dyb3VwX3NldF9rdm0mIzM0OywKICAgICYjMzQ7dmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlJiMzNDssCiAgICAmIzM0O3ZmaW9fZGV2aWNlX3B1dF9rdm0mIzM0OywKICAgICYjMzQ7ZmlsZV90b19rdm0mIzM0OywKICAgICYjMzQ7a3ZtX3ZtX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7a3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm0mIzM0OywKICAgICYjMzQ7a3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXImIzM0OywKICAgICYjMzQ7a3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbiYjMzQ7LAogICAgJiMzNDtrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSByZWZlcmVuY2UgbWFuYWdlbWVudCBiZXR3ZWVuIEtWTSBhbmQgZXh0ZXJuYWwgc3Vic3lzdGVtcyAocHJpbWFyaWx5IFZGSU8gYW5kIEtWTSBwYWdlIHRyYWNraW5nKSwgc3dpdGNoaW5nIGZyb20gaG9sZGluZyBkaXJlY3QgJiMzOTtzdHJ1Y3Qga3ZtIComIzM5OyBwb2ludGVycyB0byB1c2luZyAmIzM5O3N0cnVjdCBmaWxlIComIzM5OyByZWZlcmVuY2VzIHZpYSBnZXRfZmlsZSgpL2ZwdXQoKSBhbmQgZ2V0X2ZpbGVfYWN0aXZlKCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBsaWZlY3ljbGUgcGF0aHMsIGNvbmN1cnJlbmN5LCBhbmQgcmVmY291bnRpbmcgYmV0d2VlbiBLVk0gVk0gZmlsZXMgYW5kIFZGSU8gZGV2aWNlcy9ncm91cHMgZHVyaW5nIFZNIGNyZWF0aW9uLCByZWxlYXNlLCBhbmQgVkZJTyBkZXZpY2UgYXR0YWNobWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBpbnRlcmFjdGlvbiBiZXR3ZWVuIEtWTSBhbmQgVkZJTyAoYXMgd2VsbCBhcyB4ODYgcGFnZSB0cmFja2luZyBhbmQgczM5MCB2ZmlvLWFwKSBieSBwYXNzaW5nIGFuZCB0cmFja2luZyBgc3RydWN0IGZpbGUgKmAgaW5zdGVhZCBvZiByYXcgYHN0cnVjdCBrdm0gKmAgcG9pbnRlcnMuXG5cbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lcywgZmlsZS9LVk0gcmVmZXJlbmNlIGNvdW50aW5nLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBTdWNoIGlzc3VlcyBhcmUgbWVtb3J5IG1hbmFnZW1lbnQgYnVncyBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLlxuXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2sgb3IgaGVhcCBidWZmZXJzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgZGF0YSBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGludm9sdmUgY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSGVuY2UsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB3YXJyYW50aW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMzhlMjk0NTk0ZDJlOWRmYWE1NGRhYWU1NGYzOWZjYjM2ZjU4NWE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxMDoxNjowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFnZV90cmFjay5oCmluZGV4IDNkMDQwNzQxMDQ0YjQuLjA0NmEyNWM4ZmU0ZjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhZ2VfdHJhY2suaApAQCAtNDQsMTMgJiM0Mzs0NCwxMyBAQCBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSB7CiAJCQkJICAgIHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpub2RlKTsKIH07CiAKLWludCBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7aW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCSAgICAgc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm4pOwotdm9pZCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwKJiM0Mzt2b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJCXN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpuKTsKIAotaW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTsKLWludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7CiYjNDM7aW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBmaWxlICpmaWxlLCBnZm5fdCBnZm4pOwomIzQzO2ludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3QgZmlsZSAqZmlsZSwgZ2ZuX3QgZ2ZuKTsKICNlbHNlCiAvKgogICogQWxsb3cgZGVmaW5pbmcgYSBub2RlIGluIGEgc3RydWN0dXJlIGV2ZW4gaWYgcGFnZSB0cmFja2luZyBpcyBkaXNhYmxlZCwgZS5nLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL01ha2VmaWxlIGIvYXJjaC94ODYva3ZtL01ha2VmaWxlCmluZGV4IDA0NzQ2MDRhYjhhMTQuLjk2Zjg5ZDZmN2U2YTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vTWFrZWZpbGUKQEAgLTYwLDEwICYjNDM7NjAsNyBAQCBleHBvcnRzX2dyZXBfdHJhaWxlciA6PSAtLWluY2x1ZGU9JiMzOTsqLltjaF0mIzM5OyAtbnJ3ICQoc3JjdHJlZSkvdmlydC9rdm0gJChzcmN0cmVlKS9hCiAJCQlncmVwIC12IC1lIGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyIFwKIAkJCQktZSBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyIFwKIAkJCQktZSBrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbiBcCi0JCQkJLWUga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4gXAotCQkJCS1lIGt2bV9nZXRfa3ZtIFwKLQkJCQktZSBrdm1fZ2V0X2t2bV9zYWZlIFwKLQkJCQktZSBrdm1fcHV0X2t2bQomIzQzOwkJCQktZSBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbgogCiAjIEZvcmNlIGdyZXAgdG8gZW1pdCBhIGdvb2Z5IGdyb3VwIHNlcGFyYXRvciB0aGF0IGNhbiBpbiB0dXJuIGJlIHJlcGxhY2VkIHdpdGgKICMgdGhlIGFib3ZlIG5ld2xpbmUgbWFjcm8gKG5ld2xpbmVzIGluIE1ha2UgYXJlIGEgbmlnaHRtYXJlKS4gIE5vdGUsIGdyZXAgb25seQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMgYi9hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYwppbmRleCA3ZTgxOTVhMzExYmIwLi45OGYxMzNlNGYwYjMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYwpAQCAtMjM3LDEwICYjNDM7MjM3LDExIEBAIHN0YXRpYyBpbnQga3ZtX2VuYWJsZV9leHRlcm5hbF93cml0ZV90cmFja2luZyhzdHJ1Y3Qga3ZtICprdm0pCiAgKiByZWdpc3RlciB0aGUgbm90aWZpZXIgc28gdGhhdCBldmVudCBpbnRlcmNlcHRpb24gZm9yIHRoZSB0cmFja2VkIGd1ZXN0CiAgKiBwYWdlcyBjYW4gYmUgcmVjZWl2ZWQuCiAgKi8KLWludCBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7aW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCSAgICAgc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm4pCiB7CiAJc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX2hlYWQgKmhlYWQ7CiYjNDM7CXN0cnVjdCBrdm0gKmt2bSA9IGZpbGVfdG9fa3ZtKGZpbGUpOwogCWludCByOwogCiAJaWYgKCFrdm0gfHwga3ZtLSZndDttbSAhPSBjdXJyZW50LSZndDttbSkKQEAgLTI1Miw3ICYjNDM7MjUzLDcgQEAgaW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwKIAkJCXJldHVybiByOwogCX0KIAotCWt2bV9nZXRfa3ZtKGt2bSk7CiYjNDM7CWdldF9maWxlKGZpbGUpOwogCiAJaGVhZCA9ICZhbXA7a3ZtLSZndDthcmNoLnRyYWNrX25vdGlmaWVyX2hlYWQ7CiAKQEAgLTI2NywxMCAmIzQzOzI2OCwxMSBAQCBFWFBPUlRfU1lNQk9MX0dQTChrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcik7CiAgKiBzdG9wIHJlY2VpdmluZyB0aGUgZXZlbnQgaW50ZXJjZXB0aW9uLiBJdCBpcyB0aGUgb3Bwb3NlZCBvcGVyYXRpb24gb2YKICAqIGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKCkuCiAgKi8KLXZvaWQga3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7dm9pZCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCQlzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbikKIHsKIAlzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfaGVhZCAqaGVhZDsKJiM0MzsJc3RydWN0IGt2bSAqa3ZtID0gZmlsZV90b19rdm0oZmlsZSk7CiAKIAloZWFkID0gJmFtcDtrdm0tJmd0O2FyY2gudHJhY2tfbm90aWZpZXJfaGVhZDsKIApAQCAtMjc5LDcgJiM0MzsyODEsNyBAQCB2b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLAogCXdyaXRlX3VubG9jaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwogCXN5bmNocm9uaXplX3NyY3UoJmFtcDtoZWFkLSZndDt0cmFja19zcmN1KTsKIAotCWt2bV9wdXRfa3ZtKGt2bSk7CiYjNDM7CWZwdXQoZmlsZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKTsKIApAQCAtMzM2LDExICYjNDM7MzM4LDEyIEBAIHZvaWQga3ZtX3BhZ2VfdHJhY2tfZGVsZXRlX3Nsb3Qoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KQogICogYWRkIGd1ZXN0IHBhZ2UgdG8gdGhlIHRyYWNraW5nIHBvb2wgc28gdGhhdCBjb3JyZXNwb25kaW5nIGFjY2VzcyBvbiB0aGF0CiAgKiBwYWdlIHdpbGwgYmUgaW50ZXJjZXB0ZWQuCiAgKgotICogQGt2bTogdGhlIGd1ZXN0IGluc3RhbmNlIHdlIGFyZSBpbnRlcmVzdGVkIGluLgomIzQzOyAqIEBmaWxlOiB0aGUgVk0gZmlsZSBvZiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uCiAgKiBAZ2ZuOiB0aGUgZ3Vlc3QgcGFnZS4KICAqLwotaW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQomIzQzO2ludCBrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbihzdHJ1Y3QgZmlsZSAqZmlsZSwgZ2ZuX3QgZ2ZuKQogewomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSBmaWxlX3RvX2t2bShmaWxlKTsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OwogCWludCBpZHg7CiAKQEAgLTM2NiwxMSAmIzQzOzM2OSwxMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbik7CiAgKiByZW1vdmUgdGhlIGd1ZXN0IHBhZ2UgZnJvbSB0aGUgdHJhY2tpbmcgcG9vbCB3aGljaCBzdG9wcyB0aGUgaW50ZXJjZXB0aW9uCiAgKiBvZiBjb3JyZXNwb25kaW5nIGFjY2VzcyBvbiB0aGF0IHBhZ2UuCiAgKgotICogQGt2bTogdGhlIGd1ZXN0IGluc3RhbmNlIHdlIGFyZSBpbnRlcmVzdGVkIGluLgomIzQzOyAqIEBmaWxlOiB0aGUgVk0gZmlsZSBvZiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uCiAgKiBAZ2ZuOiB0aGUgZ3Vlc3QgcGFnZS4KICAqLwotaW50IGt2bV93cml0ZV90cmFja19yZW1vdmVfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQomIzQzO2ludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3QgZmlsZSAqZmlsZSwgZ2ZuX3QgZ2ZuKQogewomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSBmaWxlX3RvX2t2bShmaWxlKTsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OwogCWludCBpZHg7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwppbmRleCA5NDBjMGZmNjY4YmVlLi5mMTYwZTE5NDVmYmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCkBAIC0xODIyLDE3ICYjNDM7MTgyMiwyNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdmZpb19hcF9tZGV2X2F0dHJfZ3JvdXBzW10gPSB7CiAKIC8qKgogICogdmZpb19hcF9tZGV2X3NldF9rdm0gLSBzZXRzIGFsbCBkYXRhIGZvciBAbWF0cml4X21kZXYgdGhhdCBhcmUgbmVlZGVkCi0gKiB0byBtYW5hZ2UgQVAgcmVzb3VyY2VzIGZvciB0aGUgZ3Vlc3Qgd2hvc2Ugc3RhdGUgaXMgcmVwcmVzZW50ZWQgYnkgQGt2bQomIzQzOyAqIHRvIG1hbmFnZSBBUCByZXNvdXJjZXMgZm9yIHRoZSBndWVzdCB3aG9zZSBzdGF0ZSBpcyByZXByZXNlbnRlZCBieQomIzQzOyAqIEBrdm1fZmlsZQogICoKICAqIEBtYXRyaXhfbWRldjogYSBtZWRpYXRlZCBtYXRyaXggZGV2aWNlCi0gKiBAa3ZtOiByZWZlcmVuY2UgdG8gS1ZNIGluc3RhbmNlCiYjNDM7ICogQGt2bV9maWxlOiB0aGUgS1ZNIFZNIGZpbGUgdGhpcyB2ZmlvIGRldmljZSBpcyBhc3NvY2lhdGVkIHdpdGgKICAqCi0gKiBSZXR1cm46IDAgaWYgbm8gb3RoZXIgbWVkaWF0ZWQgbWF0cml4IGRldmljZSBoYXMgYSByZWZlcmVuY2UgdG8gQGt2bTsKJiM0MzsgKiBSZXR1cm46IDAgaWYgbm8gb3RoZXIgbWVkaWF0ZWQgbWF0cml4IGRldmljZSBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIFZNOwogICogb3RoZXJ3aXNlLCByZXR1cm5zIGFuIC1FUEVSTS4KICAqLwogc3RhdGljIGludCB2ZmlvX2FwX21kZXZfc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LAotCQkJCXN0cnVjdCBrdm0gKmt2bSkKJiM0MzsJCQkJc3RydWN0IGZpbGUgKmt2bV9maWxlKQogewomIzQzOwlzdHJ1Y3Qga3ZtICprdm07CiYjNDM7CiYjNDM7CWlmICgha3ZtX2ZpbGUpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKJiM0MzsJa3ZtID0ga3ZtX2ZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJaWYgKCFrdm0pCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKIAlpZiAoa3ZtLSZndDthcmNoLmNyeXB0by5jcnljYmQpIHsKIAkJZ2V0X3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7CiAJCWlmIChrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9vaykgewpAQCAtMTg0MSw3ICYjNDM7MTg1MSw2IEBAIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3NldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiwKIAkJfQogCQlrdm0tJmd0O2FyY2guY3J5cHRvLnBxYXBfaG9vayA9ICZhbXA7bWF0cml4X21kZXYtJmd0O3BxYXBfaG9vazsKIAotCQlrdm1fZ2V0X2t2bShrdm0pOwogCQltYXRyaXhfbWRldi0mZ3Q7a3ZtID0ga3ZtOwogCQl2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpOwogCQlyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7CkBAIC0xODk0LDcgJiM0MzsxOTAzLDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3Vuc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KQogCQltYXRyaXhfbWRldi0mZ3Q7a3ZtID0gTlVMTDsKIAogCQlyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7Ci0JCWt2bV9wdXRfa3ZtKGt2bSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vZ3JvdXAuYyBiL2RyaXZlcnMvdmZpby9ncm91cC5jCmluZGV4IGIyMjk5ZTViYzZkZjMuLjViZjhjYmRmZjM3N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9ncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9ncm91cC5jCkBAIC04NjAsMTEgJiM0Mzs4NjAsMjAgQEAgYm9vbCB2ZmlvX2dyb3VwX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCkKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIHZmaW9fZ3JvdXBfc2V0X2t2bShzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXAsIHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt2b2lkIHZmaW9fZ3JvdXBfc2V0X2t2bShzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXAsIHN0cnVjdCBmaWxlICprdm0pCiB7CiYjNDM7CXN0cnVjdCBmaWxlICpvbGQ7CiYjNDM7CiYjNDM7CWlmIChrdm0pCiYjNDM7CQlnZXRfZmlsZShrdm0pOwomIzQzOwogCXNwaW5fbG9jaygmYW1wO2dyb3VwLSZndDtrdm1fcmVmX2xvY2spOwomIzQzOwlvbGQgPSBncm91cC0mZ3Q7a3ZtOwogCWdyb3VwLSZndDtrdm0gPSBrdm07CiAJc3Bpbl91bmxvY2soJmFtcDtncm91cC0mZ3Q7a3ZtX3JlZl9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKG9sZCkKJiM0MzsJCWZwdXQob2xkKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jCmluZGV4IGY0N2YzNjMxNGExY2MuLjA0NTEzMmU5MGJmZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jCkBAIC0xODQsNiAmIzQzOzE4NCw3IEBAIGludCB2ZmlvX3BjaV96ZGV2X2ZlYXR1cmVfZXJyKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsCiBpbnQgdmZpb19wY2lfemRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiB7CiAJc3RydWN0IHpwY2lfZGV2ICp6ZGV2ID0gdG9fenBjaSh2ZGV2LSZndDtwZGV2KTsKJiM0MzsJc3RydWN0IGt2bSAqa3ZtOwogCWludCByZXQ7CiAKIAlpZiAoIXpkZXYpCkBAIC0xOTUsOSAmIzQzOzE5NiwxNCBAQCBpbnQgdmZpb19wY2lfemRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiAJCXJldHVybiAwOwogCiAJcmV0ID0gLUVOT0VOVDsKJiM0MzsJa3ZtID0gdmRldi0mZ3Q7dmRldi5rdm0tJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJaWYgKCFrdm0pCiYjNDM7CQlnb3RvIHJlY292ZXJ5OwomIzQzOwogCWlmICh6cGNpX2t2bV9ob29rLmt2bV9yZWdpc3RlcikKLQkJcmV0ID0genBjaV9rdm1faG9vay5rdm1fcmVnaXN0ZXIoemRldiwgdmRldi0mZ3Q7dmRldi5rdm0pOwomIzQzOwkJcmV0ID0genBjaV9rdm1faG9vay5rdm1fcmVnaXN0ZXIoemRldiwga3ZtKTsKIAomIzQzO3JlY292ZXJ5OgogCWlmIChyZXQpCiAJCXpwY2lfc3RvcF9tZWRpYXRlZF9yZWNvdmVyeSh6ZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3ZmaW8uaCBiL2RyaXZlcnMvdmZpby92ZmlvLmgKaW5kZXggNzcyOGJjOTliNjNkMS4uOWI2MTk5NTFhNWQwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3ZmaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vdmZpby5oCkBAIC0yMyw3ICYjNDM7MjMsNyBAQCBzdHJ1Y3QgdmZpb19kZXZpY2VfZmlsZSB7CiAJdTggYWNjZXNzX2dyYW50ZWQ7CiAJdTMyIGRldmlkOyAvKiBvbmx5IHZhbGlkIHdoZW4gaW9tbXVmZCBpcyB2YWxpZCAqLwogCXNwaW5sb2NrX3Qga3ZtX3JlZl9sb2NrOyAvKiBwcm90ZWN0IGt2bSBmaWVsZCAqLwotCXN0cnVjdCBrdm0gKmt2bTsKJiM0MzsJc3RydWN0IGZpbGUgKmt2bTsKIAlzdHJ1Y3QgaW9tbXVmZF9jdHggKmlvbW11ZmQ7IC8qIHByb3RlY3RlZCBieSBzdHJ1Y3QgdmZpb19kZXZpY2Vfc2V0Ojpsb2NrICovCiB9OwogCkBAIC04OCw3ICYjNDM7ODgsNyBAQCBzdHJ1Y3QgdmZpb19ncm91cCB7CiAjZW5kaWYKIAllbnVtIHZmaW9fZ3JvdXBfdHlwZQkJdHlwZTsKIAlzdHJ1Y3QgbXV0ZXgJCQlncm91cF9sb2NrOwotCXN0cnVjdCBrdm0JCQkqa3ZtOwomIzQzOwlzdHJ1Y3QgZmlsZQkJCSprdm07CiAJc3RydWN0IGZpbGUJCQkqb3BlbmVkX2ZpbGU7CiAJc3RydWN0IGlvbW11ZmRfY3R4CQkqaW9tbXVmZDsKIAlzcGlubG9ja190CQkJa3ZtX3JlZl9sb2NrOwpAQCAtMTA3LDcgJiM0MzsxMDcsNyBAQCB2b2lkIHZmaW9fZGV2aWNlX2dyb3VwX3VudXNlX2lvbW11KHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKTsKIHZvaWQgdmZpb19kZl9ncm91cF9jbG9zZShzdHJ1Y3QgdmZpb19kZXZpY2VfZmlsZSAqZGYpOwogc3RydWN0IHZmaW9fZ3JvdXAgKnZmaW9fZ3JvdXBfZnJvbV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKTsKIGJvb2wgdmZpb19ncm91cF9lbmZvcmNlZF9jb2hlcmVudChzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXApOwotdm9pZCB2ZmlvX2dyb3VwX3NldF9rdm0oc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwLCBzdHJ1Y3Qga3ZtICprdm0pOwomIzQzO3ZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGZpbGUgKmt2bSk7CiBib29sIHZmaW9fZGV2aWNlX2hhc19jb250YWluZXIoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UpOwogaW50IF9faW5pdCB2ZmlvX2dyb3VwX2luaXQodm9pZCk7CiB2b2lkIHZmaW9fZ3JvdXBfY2xlYW51cCh2b2lkKTsKQEAgLTE2NSw3ICYjNDM7MTY1LDcgQEAgc3RhdGljIGlubGluZSBib29sIHZmaW9fZ3JvdXBfZW5mb3JjZWRfY29oZXJlbnQoc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwKQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX2dyb3VwX3NldF9rdm0oc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgZmlsZSAqa3ZtKQogewogfQogCkBAIC00MjksMTEgJiM0Mzs0MjksMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fdmlycWZkX2V4aXQodm9pZCkKICNlbmRpZgogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfS1ZNKQotdm9pZCB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7dm9pZCB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBmaWxlICprdm0pOwogdm9pZCB2ZmlvX2RldmljZV9wdXRfa3ZtKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLAotCQkJCQkgICAgc3RydWN0IGt2bSAqa3ZtKQomIzQzOwkJCQkJICAgIHN0cnVjdCBmaWxlICprdm0pCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby92ZmlvX21haW4uYyBiL2RyaXZlcnMvdmZpby92ZmlvX21haW4uYwppbmRleCA0MjNlYWQ0OGFhZmUzLi5lZDk2YWNmYTg2MzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jCkBAIC00NzIsMzYgJiM0Mzs0NzIsMTQgQEAgdm9pZCB2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKQogRVhQT1JUX1NZTUJPTF9HUEwodmZpb191bnJlZ2lzdGVyX2dyb3VwX2Rldik7CiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19LVk0pCi12b2lkIHZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO3ZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZmlsZSAqa3ZtKQogewotCXZvaWQgKCpwZm4pKHN0cnVjdCBrdm0gKmt2bSk7Ci0JYm9vbCAoKmZuKShzdHJ1Y3Qga3ZtICprdm0pOwotCWJvb2wgcmV0OwotCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2RldmljZS0mZ3Q7ZGV2X3NldC0mZ3Q7bG9jayk7CiAKIAlpZiAoIWt2bSkKIAkJcmV0dXJuOwogCi0JcGZuID0gc3ltYm9sX2dldChrdm1fcHV0X2t2bSk7Ci0JaWYgKFdBUk5fT04oIXBmbikpCi0JCXJldHVybjsKLQotCWZuID0gc3ltYm9sX2dldChrdm1fZ2V0X2t2bV9zYWZlKTsKLQlpZiAoV0FSTl9PTighZm4pKSB7Ci0JCXN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pOwotCQlyZXR1cm47Ci0JfQotCi0JcmV0ID0gZm4oa3ZtKTsKLQlzeW1ib2xfcHV0KGt2bV9nZXRfa3ZtX3NhZmUpOwotCWlmICghcmV0KSB7Ci0JCXN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pOwotCQlyZXR1cm47Ci0JfQotCi0JZGV2aWNlLSZndDtwdXRfa3ZtID0gcGZuOwotCWRldmljZS0mZ3Q7a3ZtID0ga3ZtOwomIzQzOwlkZXZpY2UtJmd0O2t2bSA9IGdldF9maWxlKGt2bSk7CiB9CiAKIHZvaWQgdmZpb19kZXZpY2VfcHV0X2t2bShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSkKQEAgLTUxMSwxNCAmIzQzOzQ4OSw3IEBAIHZvaWQgdmZpb19kZXZpY2VfcHV0X2t2bShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSkKIAlpZiAoIWRldmljZS0mZ3Q7a3ZtKQogCQlyZXR1cm47CiAKLQlpZiAoV0FSTl9PTighZGV2aWNlLSZndDtwdXRfa3ZtKSkKLQkJZ290byBjbGVhcjsKLQotCWRldmljZS0mZ3Q7cHV0X2t2bShkZXZpY2UtJmd0O2t2bSk7Ci0JZGV2aWNlLSZndDtwdXRfa3ZtID0gTlVMTDsKLQlzeW1ib2xfcHV0KGt2bV9wdXRfa3ZtKTsKLQotY2xlYXI6CiYjNDM7CWZwdXQoZGV2aWNlLSZndDtrdm0pOwogCWRldmljZS0mZ3Q7a3ZtID0gTlVMTDsKIH0KICNlbmRpZgpAQCAtMTU0NCw5ICYjNDM7MTUxNSwxMyBAQCBib29sIHZmaW9fZmlsZV9lbmZvcmNlZF9jb2hlcmVudChzdHJ1Y3QgZmlsZSAqZmlsZSkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fZmlsZV9lbmZvcmNlZF9jb2hlcmVudCk7CiAKLXN0YXRpYyB2b2lkIHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO3N0YXRpYyB2b2lkIHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGUgKmt2bSkKIHsKIAlzdHJ1Y3QgdmZpb19kZXZpY2VfZmlsZSAqZGYgPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CXN0cnVjdCBmaWxlICpvbGQ7CiYjNDM7CiYjNDM7CWlmIChrdm0pCiYjNDM7CQlnZXRfZmlsZShrdm0pOwogCiAJLyoKIAkgKiBUaGUga3ZtIGlzIGZpcnN0IHJlY29yZGVkIGluIHRoZSB2ZmlvX2RldmljZV9maWxlLCBhbmQgd2lsbApAQCAtMTU1NCwyOCAmIzQzOzE1MjksMzIgQEAgc3RhdGljIHZvaWQgdmZpb19kZXZpY2VfZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pCiAJICogaW9tbXVmZCBzdWNjZXNzZnVsbHkgaW4gdGhlIHZmaW8gZGV2aWNlIGNkZXYgcGF0aC4KIAkgKi8KIAlzcGluX2xvY2soJmFtcDtkZi0mZ3Q7a3ZtX3JlZl9sb2NrKTsKJiM0MzsJb2xkID0gZGYtJmd0O2t2bTsKIAlkZi0mZ3Q7a3ZtID0ga3ZtOwogCXNwaW5fdW5sb2NrKCZhbXA7ZGYtJmd0O2t2bV9yZWZfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChvbGQpCiYjNDM7CQlmcHV0KG9sZCk7CiB9CiAKIC8qKgogICogdmZpb19maWxlX3NldF9rdm0gLSBMaW5rIGEga3ZtIHdpdGggVkZJTyBkcml2ZXJzCi0gKiBAZmlsZTogVkZJTyBncm91cCBmaWxlIG9yIFZGSU8gZGV2aWNlIGZpbGUKLSAqIEBrdm06IEtWTSB0byBsaW5rCiYjNDM7ICogQHZmaW9fZmlsZTogVkZJTyBncm91cCBmaWxlIG9yIFZGSU8gZGV2aWNlIGZpbGUKJiM0MzsgKiBAa3ZtOiBLVk0gZmlsZSB0byBsaW5rCiAgKgogICogV2hlbiBhIFZGSU8gZGV2aWNlIGlzIGZpcnN0IG9wZW5lZCB0aGUgS1ZNIHdpbGwgYmUgYXZhaWxhYmxlIGluCiAgKiBkZXZpY2UtJmd0O2t2bSBpZiBvbmUgd2FzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsZS4KICAqLwotdm9pZCB2ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO3ZvaWQgdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSkKIHsKIAlzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXA7CiAKLQlncm91cCA9IHZmaW9fZ3JvdXBfZnJvbV9maWxlKGZpbGUpOwomIzQzOwlncm91cCA9IHZmaW9fZ3JvdXBfZnJvbV9maWxlKHZmaW9fZmlsZSk7CiAJaWYgKGdyb3VwKQogCQl2ZmlvX2dyb3VwX3NldF9rdm0oZ3JvdXAsIGt2bSk7CiAKLQlpZiAodmZpb19kZXZpY2VfZnJvbV9maWxlKGZpbGUpKQotCQl2ZmlvX2RldmljZV9maWxlX3NldF9rdm0oZmlsZSwga3ZtKTsKJiM0MzsJaWYgKHZmaW9fZGV2aWNlX2Zyb21fZmlsZSh2ZmlvX2ZpbGUpKQomIzQzOwkJdmZpb19kZXZpY2VfZmlsZV9zZXRfa3ZtKHZmaW9fZmlsZSwga3ZtKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fZmlsZV9zZXRfa3ZtKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IDAzYmZjOTI4NjRiNmUuLmJmZWNjZTFiNTk1NWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTc4NCw2ICYjNDM7Nzg0LDEzIEBAIHN0cnVjdCBrdm0gewogCSAqIGt2bV9zd2FwX2FjdGl2ZV9tZW1zbG90cygpLgogCSAqLwogCXN0cnVjdCBtdXRleCBzbG90c19hcmNoX2xvY2s7CiYjNDM7CS8qCiYjNDM7CSAqIEJhY2stcmVmZXJlbmNlIHRvIHRoZSBWTSBmaWxlIGZvciBzdWJzeXN0ZW1zIChlLmcuLCBWRklPKS4gSG9sZHMgbm8KJiM0MzsJICogcmVmZXJlbmNlIHRvIGF2b2lkIHBpbm5pbmcgdGhlIFZNLiBBY2Nlc3MgdmlhIGdldF9maWxlX2FjdGl2ZSgmYW1wO2t2bS0mZ3Q7ZmlsZSkKJiM0MzsJICogb25seeKAlHNhZmUgYmVjYXVzZSBjbGVhcmVkIGluIGt2bV92bV9yZWxlYXNlKCkgYmVmb3JlIGZpbGUgZnJlZWQuIENhbGxlcnMKJiM0MzsJICogc3RvcmluZyB0aGUgcmVzdWx0IG11c3QgdGFrZSB0aGVpciBvd24gcmVmZXJlbmNlIHZpYSBnZXRfZmlsZSgpCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgZmlsZSAqZmlsZTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsgLyogdXNlcnNwYWNlIHRpZWQgdG8gdGhpcyB2bSAqLwogCXVuc2lnbmVkIGxvbmcgbnJfbWVtc2xvdF9wYWdlczsKIAkvKiBUaGUgdHdvIG1lbXNsb3Qgc2V0cyAtIGFjdGl2ZSBhbmQgaW5hY3RpdmUgKHBlciBhZGRyZXNzIHNwYWNlKSAqLwpAQCAtMTA4Miw2ICYjNDM7MTA4OSw3IEBAIHZvaWQga3ZtX2dldF9rdm0oc3RydWN0IGt2bSAqa3ZtKTsKIGJvb2wga3ZtX2dldF9rdm1fc2FmZShzdHJ1Y3Qga3ZtICprdm0pOwogdm9pZCBrdm1fcHV0X2t2bShzdHJ1Y3Qga3ZtICprdm0pOwogYm9vbCBmaWxlX2lzX2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSk7CiYjNDM7c3RydWN0IGt2bSAqZmlsZV90b19rdm0oc3RydWN0IGZpbGUgKmZpbGUpOwogdm9pZCBrdm1fcHV0X2t2bV9ub19kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tZW1zbG90cyAqX19rdm1fbWVtc2xvdHMoc3RydWN0IGt2bSAqa3ZtLCBpbnQgYXNfaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvbGludXgvdmZpby5oCmluZGV4IDQ1ZjA4OTg2MzU5ZTQuLjBjYzkxYzZmOTZkMmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmZpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdmZpby5oCkBAIC01NCw3ICYjNDM7NTQsNyBAQCBzdHJ1Y3QgdmZpb19kZXZpY2UgewogCXN0cnVjdCBsaXN0X2hlYWQgZGV2X3NldF9saXN0OwogCXVuc2lnbmVkIGludCBtaWdyYXRpb25fZmxhZ3M7CiAJdTggcHJlY29weV9pbmZvX3YyOwotCXN0cnVjdCBrdm0gKmt2bTsKJiM0MzsJc3RydWN0IGZpbGUgKmt2bTsKIAogCS8qIE1lbWJlcnMgYmVsb3cgaGVyZSBhcmUgcHJpdmF0ZSwgbm90IGZvciBkcml2ZXIgdXNlICovCiAJdW5zaWduZWQgaW50IGluZGV4OwpAQCAtNjYsNyAmIzQzOzY2LDYgQEAgc3RydWN0IHZmaW9fZGV2aWNlIHsKIAl1bnNpZ25lZCBpbnQgb3Blbl9jb3VudDsKIAlzdHJ1Y3QgY29tcGxldGlvbiBjb21wOwogCXN0cnVjdCBpb21tdWZkX2FjY2VzcyAqaW9tbXVmZF9hY2Nlc3M7Ci0Jdm9pZCAoKnB1dF9rdm0pKHN0cnVjdCBrdm0gKmt2bSk7CiAJc3RydWN0IGlub2RlICppbm9kZTsKICNpZiBJU19FTkFCTEVEKENPTkZJR19JT01NVUZEKQogCXN0cnVjdCBpb21tdWZkX2RldmljZSAqaW9tbXVmZF9kZXZpY2U7CkBAIC0zNzgsNyAmIzQzOzM3Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX2ZpbGVfaGFzX2RldihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpCiAjZW5kaWYKIGJvb2wgdmZpb19maWxlX2lzX3ZhbGlkKHN0cnVjdCBmaWxlICpmaWxlKTsKIGJvb2wgdmZpb19maWxlX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCBmaWxlICpmaWxlKTsKLXZvaWQgdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7dm9pZCB2ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqdmZpb19maWxlLCBzdHJ1Y3QgZmlsZSAqa3ZtKTsKIAogI2RlZmluZSBWRklPX1BJTl9QQUdFU19NQVhfRU5UUklFUwkoUEFHRV9TSVpFL3NpemVvZih1bnNpZ25lZCBsb25nKSkKIApkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggNjVlYjI2YTA1MjBkOC4uMzRiNGM0MzkwOGIzYiAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC0xMzE0LDcgJiM0MzsxMzE0LDcgQEAgdm9pZCBrdm1fZ2V0X2t2bShzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJcmVmY291bnRfaW5jKCZhbXA7a3ZtLSZndDt1c2Vyc19jb3VudCk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChrdm1fZ2V0X2t2bSk7CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9nZXRfa3ZtKTsKIAogLyoKICAqIE1ha2Ugc3VyZSB0aGUgdm0gaXMgbm90IGR1cmluZyBkZXN0cnVjdGlvbiwgd2hpY2ggaXMgYSBzYWZlIHZlcnNpb24gb2YKQEAgLTEzMjQsMTQgJiM0MzsxMzI0LDE0IEBAIGJvb2wga3ZtX2dldF9rdm1fc2FmZShzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJcmV0dXJuIHJlZmNvdW50X2luY19ub3RfemVybygmYW1wO2t2bS0mZ3Q7dXNlcnNfY291bnQpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2dldF9rdm1fc2FmZSk7CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9nZXRfa3ZtX3NhZmUpOwogCiB2b2lkIGt2bV9wdXRfa3ZtKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7a3ZtLSZndDt1c2Vyc19jb3VudCkpCiAJCWt2bV9kZXN0cm95X3ZtKGt2bSk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChrdm1fcHV0X2t2bSk7CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9wdXRfa3ZtKTsKIAogLyoKICAqIFVzZWQgdG8gcHV0IGEgcmVmZXJlbmNlIHRoYXQgd2FzIHRha2VuIG9uIGJlaGFsZiBvZiBhbiBvYmplY3QgYXNzb2NpYXRlZApAQCAtMTM1Miw2ICYjNDM7MTM1Miw4IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiAKIAlrdm1faXJxZmRfcmVsZWFzZShrdm0pOwogCiYjNDM7CVdSSVRFX09OQ0Uoa3ZtLSZndDtmaWxlLCBOVUxMKTsKJiM0MzsKIAlrdm1fcHV0X2t2bShrdm0pOwogCXJldHVybiAwOwogfQpAQCAtNTQ5Niw2ICYjNDM7NTQ5OCwxNSBAQCBib29sIGZpbGVfaXNfa3ZtKHN0cnVjdCBmaWxlICpmaWxlKQogfQogRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGZpbGVfaXNfa3ZtKTsKIAomIzQzO3N0cnVjdCBrdm0gKmZpbGVfdG9fa3ZtKHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3sKJiM0MzsJaWYgKCFmaWxlX2lzX2t2bShmaWxlKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoZmlsZV90b19rdm0pOwomIzQzOwogc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUpCiB7CiAJY2hhciBmZG5hbWVbSVRPQV9NQVhfTEVOICYjNDM7IDFdOwpAQCAtNTUyNyw2ICYjNDM7NTUzOCw5IEBAIHN0YXRpYyBpbnQga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlKQogCSAqIGNhc2VzIGl0IHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBmaW5hbCBmcHV0KGZpbGUpIGFuZCB3aWxsIHRha2UKIAkgKiBjYXJlIG9mIGRvaW5nIGt2bV9wdXRfa3ZtKGt2bSkuCiAJICovCiYjNDM7CiYjNDM7CWt2bS0mZ3Q7ZmlsZSA9IGZpbGU7CiYjNDM7CiAJa3ZtX3VldmVudF9ub3RpZnlfY2hhbmdlKEtWTV9FVkVOVF9DUkVBVEVfVk0sIGt2bSk7CiAKIAlmZF9pbnN0YWxsKGZkLCBmaWxlKTsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3ZmaW8uYyBiL3ZpcnQva3ZtL3ZmaW8uYwppbmRleCA2Y2RjNGU5YTMzM2EzLi4xOTU0OGE0MzA5NDI2IDEwMDY0NAotLS0gYS92aXJ0L2t2bS92ZmlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vdmZpby5jCkBAIC0zNSwxNSAmIzQzOzM1LDE1IEBAIHN0cnVjdCBrdm1fdmZpbyB7CiAJYm9vbCBub25jb2hlcmVudDsKIH07CiAKLXN0YXRpYyB2b2lkIGt2bV92ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKQomIzQzO3N0YXRpYyB2b2lkIGt2bV92ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqdmZpb19maWxlLCBzdHJ1Y3QgZmlsZSAqa3ZtKQogewotCXZvaWQgKCpmbikoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7CXZvaWQgKCpmbikoc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSk7CiAKIAlmbiA9IHN5bWJvbF9nZXQodmZpb19maWxlX3NldF9rdm0pOwogCWlmICghZm4pCiAJCXJldHVybjsKIAotCWZuKGZpbGUsIGt2bSk7CiYjNDM7CWZuKHZmaW9fZmlsZSwga3ZtKTsKIAogCXN5bWJvbF9wdXQodmZpb19maWxlX3NldF9rdm0pOwogfQpAQCAtMTQ0LDYgJiM0MzsxNDQsNyBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZCkKIHsKIAlzdHJ1Y3Qga3ZtX3ZmaW8gKmt2ID0gZGV2LSZndDtwcml2YXRlOwogCXN0cnVjdCBrdm1fdmZpb19maWxlICprdmY7CiYjNDM7CXN0cnVjdCBmaWxlICprdm1fZmlsZSBfX2ZyZWUoZnB1dCkgPSBOVUxMOwogCXN0cnVjdCBmaWxlICpmaWxwIF9fZnJlZShmcHV0KSA9IE5VTEw7CiAKIAlmaWxwID0gZmdldChmZCk7CkBAIC0xNTQsNiAmIzQzOzE1NSwxMCBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZCkKIAlpZiAoIWt2bV92ZmlvX2ZpbGVfaXNfdmFsaWQoZmlscCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CWt2bV9maWxlID0gZ2V0X2ZpbGVfYWN0aXZlKCZhbXA7ZGV2LSZndDtrdm0tJmd0O2ZpbGUpOwomIzQzOwlpZiAoIWt2bV9maWxlKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiAJZ3VhcmQobXV0ZXgpKCZhbXA7a3YtJmd0O2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShrdmYsICZhbXA7a3YtJmd0O2ZpbGVfbGlzdCwgbm9kZSkgewpAQCAtMTY4LDcgJiM0MzsxNzMsNyBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZCkKIAlrdmYtJmd0O2ZpbGUgPSBnZXRfZmlsZShmaWxwKTsKIAlsaXN0X2FkZF90YWlsKCZhbXA7a3ZmLSZndDtub2RlLCAmYW1wO2t2LSZndDtmaWxlX2xpc3QpOwogCi0Ja3ZtX3ZmaW9fZmlsZV9zZXRfa3ZtKGt2Zi0mZ3Q7ZmlsZSwgZGV2LSZndDtrdm0pOwomIzQzOwlrdm1fdmZpb19maWxlX3NldF9rdm0oa3ZmLSZndDtmaWxlLCBrdm1fZmlsZSk7CiAJa3ZtX3ZmaW9fdXBkYXRlX2NvaGVyZW5jeShkZXYpOwogCiAJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzczCgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDE1MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBBc3Nlc3NtZW50IG9mIEtWTS9WRklPIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2gsIHdoaWNoIHJlZmFjdG9ycyBLVk0vVkZJTyBpbnRlcmFjdGlvbiB0byB1c2UgYHN0cnVjdCBmaWxlICpgIGZvciBwYWdlIHRyYWNraW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcsIGxpa2VseSAqZG9lc24mIzM5O3QqIHdhcnJhbnQgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCYjMzk7cyBzZWUgaWYgdGhhdCBob2xkcyB1cC4KCkZpcnN0LCB0aGUgcGF0Y2gmIzM5O3MgaW50ZW50IGlzIGNsZWFyOiBtb2Rlcm5pemUgdGhlIEtWTSBhbmQgVkZJTyBpbnRlcmFjdGlvbiwgc3dpdGNoaW5nIHRvIHRoZSBgc3RydWN0IGZpbGVgIHJlZmVyZW5jZSBjb3VudC4gV2UmIzM5O3JlIG1vdmluZyBhd2F5IGZyb20gZGlyZWN0IGBrdm1fZ2V0X2t2bWAvYGt2bV9wdXRfa3ZtYCBjYWxscyBpbiBmYXZvciBvZiBgZ2V0X2ZpbGVgL2BmcHV0YCwgd2hpY2ggaXMgYSBnb29kIG1vdmUgZm9yIGdlbmVyYWwga2VybmVsIG9iamVjdCBtYW5hZ2VtZW50LgoKSSYjMzk7dmUgZ29uZSBvdmVyIHRoZSBkaWZmIG1ldGljdWxvdXNseS4gSXQgdG91Y2hlcyBhIGdvb2QgbnVtYmVyIG9mIGZpbGVzLCBmcm9tIHBhZ2UgdHJhY2tpbmcgdG8gVkZJTyBkZXZpY2UgbWFuYWdlbWVudCwgYnV0IGl0JiMzOTtzIGZ1bmRhbWVudGFsbHkgYWJvdXQgcG9pbnRlciBjaGFuZ2VzIGFuZCByZWZlcmVuY2UgY291bnRpbmcuIFRoZSBrZXkgZnVuY3Rpb25zIOKAkyBga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXJgLCBga3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm5gLCBhbmQgdGhlaXIgY291bnRlcnBhcnRzIOKAkyBhcmUgdXBkYXRlZCB0byB0YWtlIGBzdHJ1Y3QgZmlsZSAqYCBpbnN0ZWFkIG9mIGBzdHJ1Y3Qga3ZtICpgLiBJbXBvcnRhbnRseSwgaXQgc2VlbXMgbGlrZSB0aGVzZSBjaGFuZ2VzIGFyZSBiZWluZyBwcm9wYWdhdGVkIHRocm91Z2hvdXQgdGhlIFZGSU8gc3Vic3lzdGVtIGFzIHdlbGwsIHJlcGxhY2luZyBga3ZtX2dldF9rdm1gL2Brdm1fcHV0X2t2bWAgY2FsbHMgd2l0aCBgZ2V0X2ZpbGVgIGFuZCBgZnB1dGAgaW4gdmFyaW91cyBjb250ZXh0cywgbGlrZSBgdmZpb19hcF9tZGV2X3NldF9rdm1gIGFuZCBgdmZpb19ncm91cF9zZXRfa3ZtYC4KCkkmIzM5O3ZlIGNoZWNrZWQgZm9yIHRoZSBjb21tb24gbWVtb3J5IHNhZmV0eSBidWdzLCB0aGF0IHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzOgoqICAgKipPYmplY3QgbGlmZXRpbWUvcmVmY291bnRpbmcgYnVnczoqKiBVc2UtYWZ0ZXItZnJlZSwgZG91YmxlIGBmcHV0YCwgZGFuZ2xpbmcgcG9pbnRlcnMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHJhY2UgY29uZGl0aW9ucyBvbiByZWZjb3VudHMuIEkgKmRvbiYjMzk7dCogc2VlIGFueSBvYnZpb3VzIHJlZCBmbGFncyBvbiBhIHF1aWNrIHJlYWQuIE5vIG5ldyBhbGxvY2F0aW9ucywgbm8gb2J2aW91cyBkb3VibGUgcHV0cywgYW5kIHRoZSByZWZjb3VudCBsb2dpYyBzZWVtcyBzb3VuZC4gVGhlc2Uga2luZHMgb2YgaXNzdWVzIGFyZSBleGFjdGx5IHdoYXQgS0FTQU4gYW5kIGxvY2tkZXAgYXJlIGdvb2QgYXQgY2F0Y2hpbmcuCgpOb3csIGxldCYjMzk7cyBmb2N1cyBvbiB0aGUgS01TQU4gYW5nbGU6IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGlzIGlzIHdoZXJlIHdlIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsLgoqICAgKipOZXcgYWxsb2NhdGlvbnM/KiogTm8uIE5vdGhpbmcgbmV3IGlzIGJlaW5nIGFsbG9jYXRlZCBoZXJlLgoqICAgKipEYXRhIGNvcGllZCB0byB1c2Vyc3BhY2U/KiogTm8uIE5vIGBjb3B5X3RvX3VzZXJgIGNhbGxzIG9yIGFueXRoaW5nIG9mIHRoYXQgc29ydCB0aGF0IHdvdWxkIGluZGljYXRlIGluZm9ybWF0aW9uIGxlYWthZ2UuCiogICAqKkNvbmRpdGlvbmFsIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBpbnN0YW5jZXMgb2YgdGhpcy4KKiAgICoqU3RydWN0IHBhZGRpbmcgY2hhbmdlcz8qKiBOb3BlLCBubyBjaGFuZ2VzIHRvIHN0cnVjdCBwYWRkaW5nLCBzZXJpYWxpemF0aW9uLCBvciBkZXNlcmlhbGl6YXRpb24uCgpUaGUgY29yZSBvZiBLTVNBTiBpcyB0byBkZXRlY3QgaWYgYSBtZW1vcnkgcmVhZCBvY2N1cnMgYmVmb3JlIHRoZSBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQuIFdlIG5lZWQgdG8gYXNzZXNzIGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJpc2tzIHdoZXJlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQuCgpMb29raW5nIGJhY2ssIHRoZXJlIGFyZSBubyBzdWNoIHJpc2tzIEkgc2VlOyB0aGUgb25seSBjaGFuZ2VzIGFyZSB0byB0eXBlIGluZm9ybWF0aW9uLCBzbyBubyBLTVNBTiBpcyBuZWVkZWQuCgpJJiMzOTt2ZSByZS1leGFtaW5lZCB0aGUgY29kZS4gSSBhbSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudC4gVGhpcyBwYXRjaCBmb2N1c2VzIG9uIHBvaW50ZXIgcmUtdHlwaW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcgdXNpbmcga2VybmVsIHByaW1pdGl2ZXMsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgS01TQU4gd291bGQgZGV0ZWN0LiBLQVNBTiBhbmQgbG9ja2RlcCBzaG91bGQgYmUgbW9yZSB0aGFuIHN1ZmZpY2llbnQgdG8gY2F0Y2ggcG90ZW50aWFsIGVycm9ycyBoZXJlLgoKKipUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLioqIEkmIzM5O20gc2V0dGluZyB0aGUgcmVzdWx0cyBhbmQgbW92aW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgaW50ZXJhY3Rpb24gYmV0d2VlbiBLVk0gYW5kIFZGSU8gKGFzIHdlbGwgYXMgeDg2IHBhZ2UgdHJhY2tpbmcgYW5kIHMzOTAgdmZpby1hcCkgYnkgcGFzc2luZyBhbmQgdHJhY2tpbmcgYHN0cnVjdCBmaWxlICpgIGluc3RlYWQgb2YgcmF3IGBzdHJ1Y3Qga3ZtICpgIHBvaW50ZXJzLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZXMsIGZpbGUvS1ZNIHJlZmVyZW5jZSBjb3VudGluZywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gU3VjaCBpc3N1ZXMgYXJlIG1lbW9yeSBtYW5hZ2VtZW50IGJ1Z3MgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy5cblxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgYnVmZmVycyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGRhdGEgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEhlbmNlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgd2FycmFudGluZyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGludGVyYWN0aW9uIGJldHdlZW4gS1ZNIGFuZCBWRklPIChhcyB3ZWxsIGFzIHg4NiBwYWdlIHRyYWNraW5nIGFuZCBzMzkwIHZmaW8tYXApIGJ5IHBhc3NpbmcgYW5kIHRyYWNraW5nIGBzdHJ1Y3QgZmlsZSAqYCBpbnN0ZWFkIG9mIHJhdyBgc3RydWN0IGt2bSAqYCBwb2ludGVycy5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzLCBmaWxlL0tWTSByZWZlcmVuY2UgY291bnRpbmcsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFN1Y2ggaXNzdWVzIGFyZSBtZW1vcnkgbWFuYWdlbWVudCBidWdzIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgY29waWVkIHRvIHVzZXJzcGFjZSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBkYXRhIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgaW52b2x2ZSBjb25kaXRpb25hbCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBIZW5jZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHdhcnJhbnRpbmcgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MTY6MDIuNzcxMDcwMDA4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU4OTUwODkxMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIlZGSU9cIixcbiAgICBcIlZGSU9fR1JPVVBcIixcbiAgICBcIlZGSU9fQ09OVEFJTkVSXCIsXG4gICAgXCJWRklPX0RFVklDRV9DREVWXCIsXG4gICAgXCJEUk1fSTkxNV9HVlRfS1ZNR1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdmZpb19maWxlX2FkZFwiLFxuICAgIFwidmZpb19maWxlX3NldF9rdm1cIixcbiAgICBcInZmaW9fZ3JvdXBfc2V0X2t2bVwiLFxuICAgIFwidmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlXCIsXG4gICAgXCJ2ZmlvX2RldmljZV9wdXRfa3ZtXCIsXG4gICAgXCJmaWxlX3RvX2t2bVwiLFxuICAgIFwia3ZtX3ZtX3JlbGVhc2VcIixcbiAgICBcImt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtXCIsXG4gICAgXCJrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllclwiLFxuICAgIFwia3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllclwiLFxuICAgIFwia3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm5cIixcbiAgICBcImt2bV93cml0ZV90cmFja19yZW1vdmVfZ2ZuXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgaW50ZXJhY3Rpb24gYmV0d2VlbiBLVk0gYW5kIFZGSU8gKGFzIHdlbGwgYXMgeDg2IHBhZ2UgdHJhY2tpbmcgYW5kIHMzOTAgdmZpby1hcCkgYnkgcGFzc2luZyBhbmQgdHJhY2tpbmcgYHN0cnVjdCBmaWxlICpgIGluc3RlYWQgb2YgcmF3IGBzdHJ1Y3Qga3ZtICpgIHBvaW50ZXJzLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lcywgZmlsZS9LVk0gcmVmZXJlbmNlIGNvdW50aW5nLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBTdWNoIGlzc3VlcyBhcmUgbWVtb3J5IG1hbmFnZW1lbnQgYnVncyBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgY29waWVkIHRvIHVzZXJzcGFjZSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBkYXRhIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgaW52b2x2ZSBjb25kaXRpb25hbCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBIZW5jZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHdhcnJhbnRpbmcgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSByZWZlcmVuY2UgbWFuYWdlbWVudCBiZXR3ZWVuIEtWTSBhbmQgZXh0ZXJuYWwgc3Vic3lzdGVtcyAocHJpbWFyaWx5IFZGSU8gYW5kIEtWTSBwYWdlIHRyYWNraW5nKSwgc3dpdGNoaW5nIGZyb20gaG9sZGluZyBkaXJlY3QgJ3N0cnVjdCBrdm0gKicgcG9pbnRlcnMgdG8gdXNpbmcgJ3N0cnVjdCBmaWxlIConIHJlZmVyZW5jZXMgdmlhIGdldF9maWxlKCkvZnB1dCgpIGFuZCBnZXRfZmlsZV9hY3RpdmUoKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGxpZmVjeWNsZSBwYXRocywgY29uY3VycmVuY3ksIGFuZCByZWZjb3VudGluZyBiZXR3ZWVuIEtWTSBWTSBmaWxlcyBhbmQgVkZJTyBkZXZpY2VzL2dyb3VwcyBkdXJpbmcgVk0gY3JlYXRpb24sIHJlbGVhc2UsIGFuZCBWRklPIGRldmljZSBhdHRhY2htZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDoxNjowMi43NzEwNzU5MThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODkxNjIyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlMzhlMjk0NTk0ZDJlOWRmYWE1NGRhYWU1NGYzOWZjYjM2ZjU4NWE1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMTA6MTY6MDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhZ2VfdHJhY2suaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmhcXG5pbmRleCAzZDA0MDc0MTA0NGI0Li4wNDZhMjVjOGZlNGY4IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFnZV90cmFjay5oXFxuQEAgLTQ0LDEzICs0NCwxMyBAQCBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSB7XFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbm9kZSk7XFxuIH07XFxuIFxcbi1pbnQga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLFxcbitpbnQga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm4pO1xcbi12b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLFxcbit2b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpuKTtcXG4gXFxuLWludCBrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7XFxuLWludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7XFxuK2ludCBrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbihzdHJ1Y3QgZmlsZSAqZmlsZSwgZ2ZuX3QgZ2ZuKTtcXG4raW50IGt2bV93cml0ZV90cmFja19yZW1vdmVfZ2ZuKHN0cnVjdCBmaWxlICpmaWxlLCBnZm5fdCBnZm4pO1xcbiAjZWxzZVxcbiAvKlxcbiAgKiBBbGxvdyBkZWZpbmluZyBhIG5vZGUgaW4gYSBzdHJ1Y3R1cmUgZXZlbiBpZiBwYWdlIHRyYWNraW5nIGlzIGRpc2FibGVkLCBlLmcuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZSBiL2FyY2gveDg2L2t2bS9NYWtlZmlsZVxcbmluZGV4IDA0NzQ2MDRhYjhhMTQuLjk2Zjg5ZDZmN2U2YTggMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL01ha2VmaWxlXFxuKysrIGIvYXJjaC94ODYva3ZtL01ha2VmaWxlXFxuQEAgLTYwLDEwICs2MCw3IEBAIGV4cG9ydHNfZ3JlcF90cmFpbGVyIDo9IC0taW5jbHVkZT0nKi5bY2hdJyAtbnJ3ICQoc3JjdHJlZSkvdmlydC9rdm0gJChzcmN0cmVlKS9hXFxuIFxcdFxcdFxcdGdyZXAgLXYgLWUga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIgXFxcXFxcbiBcXHRcXHRcXHRcXHQtZSBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyIFxcXFxcXG4gXFx0XFx0XFx0XFx0LWUga3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm4gXFxcXFxcbi1cXHRcXHRcXHRcXHQtZSBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbiBcXFxcXFxuLVxcdFxcdFxcdFxcdC1lIGt2bV9nZXRfa3ZtIFxcXFxcXG4tXFx0XFx0XFx0XFx0LWUga3ZtX2dldF9rdm1fc2FmZSBcXFxcXFxuLVxcdFxcdFxcdFxcdC1lIGt2bV9wdXRfa3ZtXFxuK1xcdFxcdFxcdFxcdC1lIGt2bV93cml0ZV90cmFja19yZW1vdmVfZ2ZuXFxuIFxcbiAjIEZvcmNlIGdyZXAgdG8gZW1pdCBhIGdvb2Z5IGdyb3VwIHNlcGFyYXRvciB0aGF0IGNhbiBpbiB0dXJuIGJlIHJlcGxhY2VkIHdpdGhcXG4gIyB0aGUgYWJvdmUgbmV3bGluZSBtYWNybyAobmV3bGluZXMgaW4gTWFrZSBhcmUgYSBuaWdodG1hcmUpLiAgTm90ZSwgZ3JlcCBvbmx5XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jIGIvYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmNcXG5pbmRleCA3ZTgxOTVhMzExYmIwLi45OGYxMzNlNGYwYjMyIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jXFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmNcXG5AQCAtMjM3LDEwICsyMzcsMTEgQEAgc3RhdGljIGludCBrdm1fZW5hYmxlX2V4dGVybmFsX3dyaXRlX3RyYWNraW5nKHN0cnVjdCBrdm0gKmt2bSlcXG4gICogcmVnaXN0ZXIgdGhlIG5vdGlmaWVyIHNvIHRoYXQgZXZlbnQgaW50ZXJjZXB0aW9uIGZvciB0aGUgdHJhY2tlZCBndWVzdFxcbiAgKiBwYWdlcyBjYW4gYmUgcmVjZWl2ZWQuXFxuICAqL1xcbi1pbnQga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLFxcbitpbnQga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm4pXFxuIHtcXG4gXFx0c3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX2hlYWQgKmhlYWQ7XFxuK1xcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbGVfdG9fa3ZtKGZpbGUpO1xcbiBcXHRpbnQgcjtcXG4gXFxuIFxcdGlmICgha3ZtIHx8IGt2bS1cXHUwMDNlbW0gIT0gY3VycmVudC1cXHUwMDNlbW0pXFxuQEAgLTI1Miw3ICsyNTMsNyBAQCBpbnQga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRcXHRyZXR1cm4gcjtcXG4gXFx0fVxcbiBcXG4tXFx0a3ZtX2dldF9rdm0oa3ZtKTtcXG4rXFx0Z2V0X2ZpbGUoZmlsZSk7XFxuIFxcbiBcXHRoZWFkID0gXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC50cmFja19ub3RpZmllcl9oZWFkO1xcbiBcXG5AQCAtMjY3LDEwICsyNjgsMTEgQEAgRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIpO1xcbiAgKiBzdG9wIHJlY2VpdmluZyB0aGUgZXZlbnQgaW50ZXJjZXB0aW9uLiBJdCBpcyB0aGUgb3Bwb3NlZCBvcGVyYXRpb24gb2ZcXG4gICoga3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIoKS5cXG4gICovXFxuLXZvaWQga3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sXFxuK3ZvaWQga3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUgKm4pXFxuIHtcXG4gXFx0c3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX2hlYWQgKmhlYWQ7XFxuK1xcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbGVfdG9fa3ZtKGZpbGUpO1xcbiBcXG4gXFx0aGVhZCA9IFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudHJhY2tfbm90aWZpZXJfaGVhZDtcXG4gXFxuQEAgLTI3OSw3ICsyODEsNyBAQCB2b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHR3cml0ZV91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbiBcXHRzeW5jaHJvbml6ZV9zcmN1KFxcdTAwMjZoZWFkLVxcdTAwM2V0cmFja19zcmN1KTtcXG4gXFxuLVxcdGt2bV9wdXRfa3ZtKGt2bSk7XFxuK1xcdGZwdXQoZmlsZSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllcik7XFxuIFxcbkBAIC0zMzYsMTEgKzMzOCwxMiBAQCB2b2lkIGt2bV9wYWdlX3RyYWNrX2RlbGV0ZV9zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG4gICogYWRkIGd1ZXN0IHBhZ2UgdG8gdGhlIHRyYWNraW5nIHBvb2wgc28gdGhhdCBjb3JyZXNwb25kaW5nIGFjY2VzcyBvbiB0aGF0XFxuICAqIHBhZ2Ugd2lsbCBiZSBpbnRlcmNlcHRlZC5cXG4gICpcXG4tICogQGt2bTogdGhlIGd1ZXN0IGluc3RhbmNlIHdlIGFyZSBpbnRlcmVzdGVkIGluLlxcbisgKiBAZmlsZTogdGhlIFZNIGZpbGUgb2YgdGhlIGd1ZXN0IGluc3RhbmNlIHdlIGFyZSBpbnRlcmVzdGVkIGluLlxcbiAgKiBAZ2ZuOiB0aGUgZ3Vlc3QgcGFnZS5cXG4gICovXFxuLWludCBrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbilcXG4raW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBmaWxlICpmaWxlLCBnZm5fdCBnZm4pXFxuIHtcXG4rXFx0c3RydWN0IGt2bSAqa3ZtID0gZmlsZV90b19rdm0oZmlsZSk7XFxuIFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XFxuIFxcdGludCBpZHg7XFxuIFxcbkBAIC0zNjYsMTEgKzM2OSwxMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbik7XFxuICAqIHJlbW92ZSB0aGUgZ3Vlc3QgcGFnZSBmcm9tIHRoZSB0cmFja2luZyBwb29sIHdoaWNoIHN0b3BzIHRoZSBpbnRlcmNlcHRpb25cXG4gICogb2YgY29ycmVzcG9uZGluZyBhY2Nlc3Mgb24gdGhhdCBwYWdlLlxcbiAgKlxcbi0gKiBAa3ZtOiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uXFxuKyAqIEBmaWxlOiB0aGUgVk0gZmlsZSBvZiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uXFxuICAqIEBnZm46IHRoZSBndWVzdCBwYWdlLlxcbiAgKi9cXG4taW50IGt2bV93cml0ZV90cmFja19yZW1vdmVfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKVxcbitpbnQga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4oc3RydWN0IGZpbGUgKmZpbGUsIGdmbl90IGdmbilcXG4ge1xcbitcXHRzdHJ1Y3Qga3ZtICprdm0gPSBmaWxlX3RvX2t2bShmaWxlKTtcXG4gXFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDtcXG4gXFx0aW50IGlkeDtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xcbmluZGV4IDk0MGMwZmY2NjhiZWUuLmYxNjBlMTk0NWZiY2UgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXFxuKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXFxuQEAgLTE4MjIsMTcgKzE4MjIsMjcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnZmaW9fYXBfbWRldl9hdHRyX2dyb3Vwc1tdID0ge1xcbiBcXG4gLyoqXFxuICAqIHZmaW9fYXBfbWRldl9zZXRfa3ZtIC0gc2V0cyBhbGwgZGF0YSBmb3IgQG1hdHJpeF9tZGV2IHRoYXQgYXJlIG5lZWRlZFxcbi0gKiB0byBtYW5hZ2UgQVAgcmVzb3VyY2VzIGZvciB0aGUgZ3Vlc3Qgd2hvc2Ugc3RhdGUgaXMgcmVwcmVzZW50ZWQgYnkgQGt2bVxcbisgKiB0byBtYW5hZ2UgQVAgcmVzb3VyY2VzIGZvciB0aGUgZ3Vlc3Qgd2hvc2Ugc3RhdGUgaXMgcmVwcmVzZW50ZWQgYnlcXG4rICogQGt2bV9maWxlXFxuICAqXFxuICAqIEBtYXRyaXhfbWRldjogYSBtZWRpYXRlZCBtYXRyaXggZGV2aWNlXFxuLSAqIEBrdm06IHJlZmVyZW5jZSB0byBLVk0gaW5zdGFuY2VcXG4rICogQGt2bV9maWxlOiB0aGUgS1ZNIFZNIGZpbGUgdGhpcyB2ZmlvIGRldmljZSBpcyBhc3NvY2lhdGVkIHdpdGhcXG4gICpcXG4tICogUmV0dXJuOiAwIGlmIG5vIG90aGVyIG1lZGlhdGVkIG1hdHJpeCBkZXZpY2UgaGFzIGEgcmVmZXJlbmNlIHRvIEBrdm07XFxuKyAqIFJldHVybjogMCBpZiBubyBvdGhlciBtZWRpYXRlZCBtYXRyaXggZGV2aWNlIGhhcyBhIHJlZmVyZW5jZSB0byB0aGUgVk07XFxuICAqIG90aGVyd2lzZSwgcmV0dXJucyBhbiAtRVBFUk0uXFxuICAqL1xcbiBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9zZXRfa3ZtKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBrdm0gKmt2bSlcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGZpbGUgKmt2bV9maWxlKVxcbiB7XFxuK1xcdHN0cnVjdCBrdm0gKmt2bTtcXG4rXFxuK1xcdGlmICgha3ZtX2ZpbGUpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4rXFx0a3ZtID0ga3ZtX2ZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0aWYgKCFrdm0pXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4gXFx0aWYgKGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2JkKSB7XFxuIFxcdFxcdGdldF91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xcbiBcXHRcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2spIHtcXG5AQCAtMTg0MSw3ICsxODUxLDYgQEAgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxcbiBcXHRcXHR9XFxuIFxcdFxcdGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rID0gXFx1MDAyNm1hdHJpeF9tZGV2LVxcdTAwM2VwcWFwX2hvb2s7XFxuIFxcbi1cXHRcXHRrdm1fZ2V0X2t2bShrdm0pO1xcbiBcXHRcXHRtYXRyaXhfbWRldi1cXHUwMDNla3ZtID0ga3ZtO1xcbiBcXHRcXHR2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpO1xcbiBcXHRcXHRyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7XFxuQEAgLTE4OTQsNyArMTkwMyw2IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl91bnNldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcXG4gXFx0XFx0bWF0cml4X21kZXYtXFx1MDAzZWt2bSA9IE5VTEw7XFxuIFxcbiBcXHRcXHRyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7XFxuLVxcdFxcdGt2bV9wdXRfa3ZtKGt2bSk7XFxuIFxcdH1cXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL2dyb3VwLmMgYi9kcml2ZXJzL3ZmaW8vZ3JvdXAuY1xcbmluZGV4IGIyMjk5ZTViYzZkZjMuLjViZjhjYmRmZjM3N2MgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL2dyb3VwLmNcXG4rKysgYi9kcml2ZXJzL3ZmaW8vZ3JvdXAuY1xcbkBAIC04NjAsMTEgKzg2MCwyMCBAQCBib29sIHZmaW9fZ3JvdXBfZW5mb3JjZWRfY29oZXJlbnQoc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi12b2lkIHZmaW9fZ3JvdXBfc2V0X2t2bShzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXAsIHN0cnVjdCBrdm0gKmt2bSlcXG4rdm9pZCB2ZmlvX2dyb3VwX3NldF9rdm0oc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgZmlsZSAqa3ZtKVxcbiB7XFxuK1xcdHN0cnVjdCBmaWxlICpvbGQ7XFxuK1xcbitcXHRpZiAoa3ZtKVxcbitcXHRcXHRnZXRfZmlsZShrdm0pO1xcbitcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZncm91cC1cXHUwMDNla3ZtX3JlZl9sb2NrKTtcXG4rXFx0b2xkID0gZ3JvdXAtXFx1MDAzZWt2bTtcXG4gXFx0Z3JvdXAtXFx1MDAzZWt2bSA9IGt2bTtcXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNmdyb3VwLVxcdTAwM2Vrdm1fcmVmX2xvY2spO1xcbitcXG4rXFx0aWYgKG9sZClcXG4rXFx0XFx0ZnB1dChvbGQpO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuY1xcbmluZGV4IGY0N2YzNjMxNGExY2MuLjA0NTEzMmU5MGJmZWUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmNcXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuY1xcbkBAIC0xODQsNiArMTg0LDcgQEAgaW50IHZmaW9fcGNpX3pkZXZfZmVhdHVyZV9lcnIoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcXG4gaW50IHZmaW9fcGNpX3pkZXZfb3Blbl9kZXZpY2Uoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCB6cGNpX2RldiAqemRldiA9IHRvX3pwY2kodmRldi1cXHUwMDNlcGRldik7XFxuK1xcdHN0cnVjdCBrdm0gKmt2bTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmICghemRldilcXG5AQCAtMTk1LDkgKzE5NiwxNCBAQCBpbnQgdmZpb19wY2lfemRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0cmV0ID0gLUVOT0VOVDtcXG4rXFx0a3ZtID0gdmRldi1cXHUwMDNldmRldi5rdm0tXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0aWYgKCFrdm0pXFxuK1xcdFxcdGdvdG8gcmVjb3Zlcnk7XFxuK1xcbiBcXHRpZiAoenBjaV9rdm1faG9vay5rdm1fcmVnaXN0ZXIpXFxuLVxcdFxcdHJldCA9IHpwY2lfa3ZtX2hvb2sua3ZtX3JlZ2lzdGVyKHpkZXYsIHZkZXYtXFx1MDAzZXZkZXYua3ZtKTtcXG4rXFx0XFx0cmV0ID0genBjaV9rdm1faG9vay5rdm1fcmVnaXN0ZXIoemRldiwga3ZtKTtcXG4gXFxuK3JlY292ZXJ5OlxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHR6cGNpX3N0b3BfbWVkaWF0ZWRfcmVjb3ZlcnkoemRldik7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vdmZpby5oIGIvZHJpdmVycy92ZmlvL3ZmaW8uaFxcbmluZGV4IDc3MjhiYzk5YjYzZDEuLjliNjE5OTUxYTVkMGMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL3ZmaW8uaFxcbisrKyBiL2RyaXZlcnMvdmZpby92ZmlvLmhcXG5AQCAtMjMsNyArMjMsNyBAQCBzdHJ1Y3QgdmZpb19kZXZpY2VfZmlsZSB7XFxuIFxcdHU4IGFjY2Vzc19ncmFudGVkO1xcbiBcXHR1MzIgZGV2aWQ7IC8qIG9ubHkgdmFsaWQgd2hlbiBpb21tdWZkIGlzIHZhbGlkICovXFxuIFxcdHNwaW5sb2NrX3Qga3ZtX3JlZl9sb2NrOyAvKiBwcm90ZWN0IGt2bSBmaWVsZCAqL1xcbi1cXHRzdHJ1Y3Qga3ZtICprdm07XFxuK1xcdHN0cnVjdCBmaWxlICprdm07XFxuIFxcdHN0cnVjdCBpb21tdWZkX2N0eCAqaW9tbXVmZDsgLyogcHJvdGVjdGVkIGJ5IHN0cnVjdCB2ZmlvX2RldmljZV9zZXQ6OmxvY2sgKi9cXG4gfTtcXG4gXFxuQEAgLTg4LDcgKzg4LDcgQEAgc3RydWN0IHZmaW9fZ3JvdXAge1xcbiAjZW5kaWZcXG4gXFx0ZW51bSB2ZmlvX2dyb3VwX3R5cGVcXHRcXHR0eXBlO1xcbiBcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRcXHRncm91cF9sb2NrO1xcbi1cXHRzdHJ1Y3Qga3ZtXFx0XFx0XFx0Kmt2bTtcXG4rXFx0c3RydWN0IGZpbGVcXHRcXHRcXHQqa3ZtO1xcbiBcXHRzdHJ1Y3QgZmlsZVxcdFxcdFxcdCpvcGVuZWRfZmlsZTtcXG4gXFx0c3RydWN0IGlvbW11ZmRfY3R4XFx0XFx0KmlvbW11ZmQ7XFxuIFxcdHNwaW5sb2NrX3RcXHRcXHRcXHRrdm1fcmVmX2xvY2s7XFxuQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIHZmaW9fZGV2aWNlX2dyb3VwX3VudXNlX2lvbW11KHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKTtcXG4gdm9pZCB2ZmlvX2RmX2dyb3VwX2Nsb3NlKHN0cnVjdCB2ZmlvX2RldmljZV9maWxlICpkZik7XFxuIHN0cnVjdCB2ZmlvX2dyb3VwICp2ZmlvX2dyb3VwX2Zyb21fZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSk7XFxuIGJvb2wgdmZpb19ncm91cF9lbmZvcmNlZF9jb2hlcmVudChzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXApO1xcbi12b2lkIHZmaW9fZ3JvdXBfc2V0X2t2bShzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXAsIHN0cnVjdCBrdm0gKmt2bSk7XFxuK3ZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGZpbGUgKmt2bSk7XFxuIGJvb2wgdmZpb19kZXZpY2VfaGFzX2NvbnRhaW5lcihzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSk7XFxuIGludCBfX2luaXQgdmZpb19ncm91cF9pbml0KHZvaWQpO1xcbiB2b2lkIHZmaW9fZ3JvdXBfY2xlYW51cCh2b2lkKTtcXG5AQCAtMTY1LDcgKzE2NSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX2dyb3VwX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cClcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX2dyb3VwX3NldF9rdm0oc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwLCBzdHJ1Y3Qga3ZtICprdm0pXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX2dyb3VwX3NldF9rdm0oc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgZmlsZSAqa3ZtKVxcbiB7XFxuIH1cXG4gXFxuQEAgLTQyOSwxMSArNDI5LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3ZpcnFmZF9leGl0KHZvaWQpXFxuICNlbmRpZlxcbiBcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0tWTSlcXG4tdm9pZCB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBrdm0gKmt2bSk7XFxuK3ZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZmlsZSAqa3ZtKTtcXG4gdm9pZCB2ZmlvX2RldmljZV9wdXRfa3ZtKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm0gKmt2bSlcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBmaWxlICprdm0pXFxuIHtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jIGIvZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jXFxuaW5kZXggNDIzZWFkNDhhYWZlMy4uZWQ5NmFjZmE4NjM1OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmNcXG4rKysgYi9kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmNcXG5AQCAtNDcyLDM2ICs0NzIsMTQgQEAgdm9pZCB2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKVxcbiBFWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KTtcXG4gXFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19LVk0pXFxuLXZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3Qga3ZtICprdm0pXFxuK3ZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZmlsZSAqa3ZtKVxcbiB7XFxuLVxcdHZvaWQgKCpwZm4pKHN0cnVjdCBrdm0gKmt2bSk7XFxuLVxcdGJvb2wgKCpmbikoc3RydWN0IGt2bSAqa3ZtKTtcXG4tXFx0Ym9vbCByZXQ7XFxuLVxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWRldl9zZXQtXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0aWYgKCFrdm0pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdHBmbiA9IHN5bWJvbF9nZXQoa3ZtX3B1dF9rdm0pO1xcbi1cXHRpZiAoV0FSTl9PTighcGZuKSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0Zm4gPSBzeW1ib2xfZ2V0KGt2bV9nZXRfa3ZtX3NhZmUpO1xcbi1cXHRpZiAoV0FSTl9PTighZm4pKSB7XFxuLVxcdFxcdHN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4tXFxuLVxcdHJldCA9IGZuKGt2bSk7XFxuLVxcdHN5bWJvbF9wdXQoa3ZtX2dldF9rdm1fc2FmZSk7XFxuLVxcdGlmICghcmV0KSB7XFxuLVxcdFxcdHN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4tXFxuLVxcdGRldmljZS1cXHUwMDNlcHV0X2t2bSA9IHBmbjtcXG4tXFx0ZGV2aWNlLVxcdTAwM2Vrdm0gPSBrdm07XFxuK1xcdGRldmljZS1cXHUwMDNla3ZtID0gZ2V0X2ZpbGUoa3ZtKTtcXG4gfVxcbiBcXG4gdm9pZCB2ZmlvX2RldmljZV9wdXRfa3ZtKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKVxcbkBAIC01MTEsMTQgKzQ4OSw3IEBAIHZvaWQgdmZpb19kZXZpY2VfcHV0X2t2bShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSlcXG4gXFx0aWYgKCFkZXZpY2UtXFx1MDAzZWt2bSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0aWYgKFdBUk5fT04oIWRldmljZS1cXHUwMDNlcHV0X2t2bSkpXFxuLVxcdFxcdGdvdG8gY2xlYXI7XFxuLVxcbi1cXHRkZXZpY2UtXFx1MDAzZXB1dF9rdm0oZGV2aWNlLVxcdTAwM2Vrdm0pO1xcbi1cXHRkZXZpY2UtXFx1MDAzZXB1dF9rdm0gPSBOVUxMO1xcbi1cXHRzeW1ib2xfcHV0KGt2bV9wdXRfa3ZtKTtcXG4tXFxuLWNsZWFyOlxcbitcXHRmcHV0KGRldmljZS1cXHUwMDNla3ZtKTtcXG4gXFx0ZGV2aWNlLVxcdTAwM2Vrdm0gPSBOVUxMO1xcbiB9XFxuICNlbmRpZlxcbkBAIC0xNTQ0LDkgKzE1MTUsMTMgQEAgYm9vbCB2ZmlvX2ZpbGVfZW5mb3JjZWRfY29oZXJlbnQoc3RydWN0IGZpbGUgKmZpbGUpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodmZpb19maWxlX2VuZm9yY2VkX2NvaGVyZW50KTtcXG4gXFxuLXN0YXRpYyB2b2lkIHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKVxcbitzdGF0aWMgdm9pZCB2ZmlvX2RldmljZV9maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlICprdm0pXFxuIHtcXG4gXFx0c3RydWN0IHZmaW9fZGV2aWNlX2ZpbGUgKmRmID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbitcXHRzdHJ1Y3QgZmlsZSAqb2xkO1xcbitcXG4rXFx0aWYgKGt2bSlcXG4rXFx0XFx0Z2V0X2ZpbGUoa3ZtKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBrdm0gaXMgZmlyc3QgcmVjb3JkZWQgaW4gdGhlIHZmaW9fZGV2aWNlX2ZpbGUsIGFuZCB3aWxsXFxuQEAgLTE1NTQsMjggKzE1MjksMzIgQEAgc3RhdGljIHZvaWQgdmZpb19kZXZpY2VfZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcdCAqIGlvbW11ZmQgc3VjY2Vzc2Z1bGx5IGluIHRoZSB2ZmlvIGRldmljZSBjZGV2IHBhdGguXFxuIFxcdCAqL1xcbiBcXHRzcGluX2xvY2soXFx1MDAyNmRmLVxcdTAwM2Vrdm1fcmVmX2xvY2spO1xcbitcXHRvbGQgPSBkZi1cXHUwMDNla3ZtO1xcbiBcXHRkZi1cXHUwMDNla3ZtID0ga3ZtO1xcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2ZGYtXFx1MDAzZWt2bV9yZWZfbG9jayk7XFxuK1xcbitcXHRpZiAob2xkKVxcbitcXHRcXHRmcHV0KG9sZCk7XFxuIH1cXG4gXFxuIC8qKlxcbiAgKiB2ZmlvX2ZpbGVfc2V0X2t2bSAtIExpbmsgYSBrdm0gd2l0aCBWRklPIGRyaXZlcnNcXG4tICogQGZpbGU6IFZGSU8gZ3JvdXAgZmlsZSBvciBWRklPIGRldmljZSBmaWxlXFxuLSAqIEBrdm06IEtWTSB0byBsaW5rXFxuKyAqIEB2ZmlvX2ZpbGU6IFZGSU8gZ3JvdXAgZmlsZSBvciBWRklPIGRldmljZSBmaWxlXFxuKyAqIEBrdm06IEtWTSBmaWxlIHRvIGxpbmtcXG4gICpcXG4gICogV2hlbiBhIFZGSU8gZGV2aWNlIGlzIGZpcnN0IG9wZW5lZCB0aGUgS1ZNIHdpbGwgYmUgYXZhaWxhYmxlIGluXFxuICAqIGRldmljZS1cXHUwMDNla3ZtIGlmIG9uZSB3YXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWxlLlxcbiAgKi9cXG4tdm9pZCB2ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKVxcbit2b2lkIHZmaW9fZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICp2ZmlvX2ZpbGUsIHN0cnVjdCBmaWxlICprdm0pXFxuIHtcXG4gXFx0c3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwO1xcbiBcXG4tXFx0Z3JvdXAgPSB2ZmlvX2dyb3VwX2Zyb21fZmlsZShmaWxlKTtcXG4rXFx0Z3JvdXAgPSB2ZmlvX2dyb3VwX2Zyb21fZmlsZSh2ZmlvX2ZpbGUpO1xcbiBcXHRpZiAoZ3JvdXApXFxuIFxcdFxcdHZmaW9fZ3JvdXBfc2V0X2t2bShncm91cCwga3ZtKTtcXG4gXFxuLVxcdGlmICh2ZmlvX2RldmljZV9mcm9tX2ZpbGUoZmlsZSkpXFxuLVxcdFxcdHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bShmaWxlLCBrdm0pO1xcbitcXHRpZiAodmZpb19kZXZpY2VfZnJvbV9maWxlKHZmaW9fZmlsZSkpXFxuK1xcdFxcdHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bSh2ZmlvX2ZpbGUsIGt2bSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodmZpb19maWxlX3NldF9rdm0pO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuaW5kZXggMDNiZmM5Mjg2NGI2ZS4uYmZlY2NlMWI1OTU1YSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5AQCAtNzg0LDYgKzc4NCwxMyBAQCBzdHJ1Y3Qga3ZtIHtcXG4gXFx0ICoga3ZtX3N3YXBfYWN0aXZlX21lbXNsb3RzKCkuXFxuIFxcdCAqL1xcbiBcXHRzdHJ1Y3QgbXV0ZXggc2xvdHNfYXJjaF9sb2NrO1xcbitcXHQvKlxcbitcXHQgKiBCYWNrLXJlZmVyZW5jZSB0byB0aGUgVk0gZmlsZSBmb3Igc3Vic3lzdGVtcyAoZS5nLiwgVkZJTykuIEhvbGRzIG5vXFxuK1xcdCAqIHJlZmVyZW5jZSB0byBhdm9pZCBwaW5uaW5nIHRoZSBWTS4gQWNjZXNzIHZpYSBnZXRfZmlsZV9hY3RpdmUoXFx1MDAyNmt2bS1cXHUwMDNlZmlsZSlcXG4rXFx0ICogb25seeKAlHNhZmUgYmVjYXVzZSBjbGVhcmVkIGluIGt2bV92bV9yZWxlYXNlKCkgYmVmb3JlIGZpbGUgZnJlZWQuIENhbGxlcnNcXG4rXFx0ICogc3RvcmluZyB0aGUgcmVzdWx0IG11c3QgdGFrZSB0aGVpciBvd24gcmVmZXJlbmNlIHZpYSBnZXRfZmlsZSgpXFxuK1xcdCAqL1xcbitcXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcXG4gXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07IC8qIHVzZXJzcGFjZSB0aWVkIHRvIHRoaXMgdm0gKi9cXG4gXFx0dW5zaWduZWQgbG9uZyBucl9tZW1zbG90X3BhZ2VzO1xcbiBcXHQvKiBUaGUgdHdvIG1lbXNsb3Qgc2V0cyAtIGFjdGl2ZSBhbmQgaW5hY3RpdmUgKHBlciBhZGRyZXNzIHNwYWNlKSAqL1xcbkBAIC0xMDgyLDYgKzEwODksNyBAQCB2b2lkIGt2bV9nZXRfa3ZtKHN0cnVjdCBrdm0gKmt2bSk7XFxuIGJvb2wga3ZtX2dldF9rdm1fc2FmZShzdHJ1Y3Qga3ZtICprdm0pO1xcbiB2b2lkIGt2bV9wdXRfa3ZtKHN0cnVjdCBrdm0gKmt2bSk7XFxuIGJvb2wgZmlsZV9pc19rdm0oc3RydWN0IGZpbGUgKmZpbGUpO1xcbitzdHJ1Y3Qga3ZtICpmaWxlX3RvX2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSk7XFxuIHZvaWQga3ZtX3B1dF9rdm1fbm9fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pO1xcbiBcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21lbXNsb3RzICpfX2t2bV9tZW1zbG90cyhzdHJ1Y3Qga3ZtICprdm0sIGludCBhc19pZClcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92ZmlvLmggYi9pbmNsdWRlL2xpbnV4L3ZmaW8uaFxcbmluZGV4IDQ1ZjA4OTg2MzU5ZTQuLjBjYzkxYzZmOTZkMmIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3ZmaW8uaFxcbkBAIC01NCw3ICs1NCw3IEBAIHN0cnVjdCB2ZmlvX2RldmljZSB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZGV2X3NldF9saXN0O1xcbiBcXHR1bnNpZ25lZCBpbnQgbWlncmF0aW9uX2ZsYWdzO1xcbiBcXHR1OCBwcmVjb3B5X2luZm9fdjI7XFxuLVxcdHN0cnVjdCBrdm0gKmt2bTtcXG4rXFx0c3RydWN0IGZpbGUgKmt2bTtcXG4gXFxuIFxcdC8qIE1lbWJlcnMgYmVsb3cgaGVyZSBhcmUgcHJpdmF0ZSwgbm90IGZvciBkcml2ZXIgdXNlICovXFxuIFxcdHVuc2lnbmVkIGludCBpbmRleDtcXG5AQCAtNjYsNyArNjYsNiBAQCBzdHJ1Y3QgdmZpb19kZXZpY2Uge1xcbiBcXHR1bnNpZ25lZCBpbnQgb3Blbl9jb3VudDtcXG4gXFx0c3RydWN0IGNvbXBsZXRpb24gY29tcDtcXG4gXFx0c3RydWN0IGlvbW11ZmRfYWNjZXNzICppb21tdWZkX2FjY2VzcztcXG4tXFx0dm9pZCAoKnB1dF9rdm0pKHN0cnVjdCBrdm0gKmt2bSk7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JT01NVUZEKVxcbiBcXHRzdHJ1Y3QgaW9tbXVmZF9kZXZpY2UgKmlvbW11ZmRfZGV2aWNlO1xcbkBAIC0zNzgsNyArMzc3LDcgQEAgc3RhdGljIGlubGluZSBib29sIHZmaW9fZmlsZV9oYXNfZGV2KHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmlcXG4gI2VuZGlmXFxuIGJvb2wgdmZpb19maWxlX2lzX3ZhbGlkKHN0cnVjdCBmaWxlICpmaWxlKTtcXG4gYm9vbCB2ZmlvX2ZpbGVfZW5mb3JjZWRfY29oZXJlbnQoc3RydWN0IGZpbGUgKmZpbGUpO1xcbi12b2lkIHZmaW9fZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pO1xcbit2b2lkIHZmaW9fZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICp2ZmlvX2ZpbGUsIHN0cnVjdCBmaWxlICprdm0pO1xcbiBcXG4gI2RlZmluZSBWRklPX1BJTl9QQUdFU19NQVhfRU5UUklFU1xcdChQQUdFX1NJWkUvc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKVxcbiBcXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG5pbmRleCA2NWViMjZhMDUyMGQ4Li4zNGI0YzQzOTA4YjNiIDEwMDY0NFxcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuQEAgLTEzMTQsNyArMTMxNCw3IEBAIHZvaWQga3ZtX2dldF9rdm0oc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuIFxcdHJlZmNvdW50X2luYyhcXHUwMDI2a3ZtLVxcdTAwM2V1c2Vyc19jb3VudCk7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2dldF9rdm0pO1xcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2dldF9rdm0pO1xcbiBcXG4gLypcXG4gICogTWFrZSBzdXJlIHRoZSB2bSBpcyBub3QgZHVyaW5nIGRlc3RydWN0aW9uLCB3aGljaCBpcyBhIHNhZmUgdmVyc2lvbiBvZlxcbkBAIC0xMzI0LDE0ICsxMzI0LDE0IEBAIGJvb2wga3ZtX2dldF9rdm1fc2FmZShzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4gXFx0cmV0dXJuIHJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2a3ZtLVxcdTAwM2V1c2Vyc19jb3VudCk7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2dldF9rdm1fc2FmZSk7XFxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZ2V0X2t2bV9zYWZlKTtcXG4gXFxuIHZvaWQga3ZtX3B1dF9rdm0oc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuIFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmt2bS1cXHUwMDNldXNlcnNfY291bnQpKVxcbiBcXHRcXHRrdm1fZGVzdHJveV92bShrdm0pO1xcbiB9XFxuLUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9wdXRfa3ZtKTtcXG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9wdXRfa3ZtKTtcXG4gXFxuIC8qXFxuICAqIFVzZWQgdG8gcHV0IGEgcmVmZXJlbmNlIHRoYXQgd2FzIHRha2VuIG9uIGJlaGFsZiBvZiBhbiBvYmplY3QgYXNzb2NpYXRlZFxcbkBAIC0xMzUyLDYgKzEzNTIsOCBAQCBzdGF0aWMgaW50IGt2bV92bV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxcbiBcXG4gXFx0a3ZtX2lycWZkX3JlbGVhc2Uoa3ZtKTtcXG4gXFxuK1xcdFdSSVRFX09OQ0Uoa3ZtLVxcdTAwM2VmaWxlLCBOVUxMKTtcXG4rXFxuIFxcdGt2bV9wdXRfa3ZtKGt2bSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTU0OTYsNiArNTQ5OCwxNSBAQCBib29sIGZpbGVfaXNfa3ZtKHN0cnVjdCBmaWxlICpmaWxlKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChmaWxlX2lzX2t2bSk7XFxuIFxcbitzdHJ1Y3Qga3ZtICpmaWxlX3RvX2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHRpZiAoIWZpbGVfaXNfa3ZtKGZpbGUpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHJldHVybiBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGZpbGVfdG9fa3ZtKTtcXG4rXFxuIHN0YXRpYyBpbnQga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlKVxcbiB7XFxuIFxcdGNoYXIgZmRuYW1lW0lUT0FfTUFYX0xFTiArIDFdO1xcbkBAIC01NTI3LDYgKzU1MzgsOSBAQCBzdGF0aWMgaW50IGt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSlcXG4gXFx0ICogY2FzZXMgaXQgd2lsbCBiZSBjYWxsZWQgYnkgdGhlIGZpbmFsIGZwdXQoZmlsZSkgYW5kIHdpbGwgdGFrZVxcbiBcXHQgKiBjYXJlIG9mIGRvaW5nIGt2bV9wdXRfa3ZtKGt2bSkuXFxuIFxcdCAqL1xcbitcXG4rXFx0a3ZtLVxcdTAwM2VmaWxlID0gZmlsZTtcXG4rXFxuIFxcdGt2bV91ZXZlbnRfbm90aWZ5X2NoYW5nZShLVk1fRVZFTlRfQ1JFQVRFX1ZNLCBrdm0pO1xcbiBcXG4gXFx0ZmRfaW5zdGFsbChmZCwgZmlsZSk7XFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3ZmaW8uYyBiL3ZpcnQva3ZtL3ZmaW8uY1xcbmluZGV4IDZjZGM0ZTlhMzMzYTMuLjE5NTQ4YTQzMDk0MjYgMTAwNjQ0XFxuLS0tIGEvdmlydC9rdm0vdmZpby5jXFxuKysrIGIvdmlydC9rdm0vdmZpby5jXFxuQEAgLTM1LDE1ICszNSwxNSBAQCBzdHJ1Y3Qga3ZtX3ZmaW8ge1xcbiBcXHRib29sIG5vbmNvaGVyZW50O1xcbiB9O1xcbiBcXG4tc3RhdGljIHZvaWQga3ZtX3ZmaW9fZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pXFxuK3N0YXRpYyB2b2lkIGt2bV92ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqdmZpb19maWxlLCBzdHJ1Y3QgZmlsZSAqa3ZtKVxcbiB7XFxuLVxcdHZvaWQgKCpmbikoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSk7XFxuK1xcdHZvaWQgKCpmbikoc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSk7XFxuIFxcbiBcXHRmbiA9IHN5bWJvbF9nZXQodmZpb19maWxlX3NldF9rdm0pO1xcbiBcXHRpZiAoIWZuKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRmbihmaWxlLCBrdm0pO1xcbitcXHRmbih2ZmlvX2ZpbGUsIGt2bSk7XFxuIFxcbiBcXHRzeW1ib2xfcHV0KHZmaW9fZmlsZV9zZXRfa3ZtKTtcXG4gfVxcbkBAIC0xNDQsNiArMTQ0LDcgQEAgc3RhdGljIGludCBrdm1fdmZpb19maWxlX2FkZChzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmQpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92ZmlvICprdiA9IGRldi1cXHUwMDNlcHJpdmF0ZTtcXG4gXFx0c3RydWN0IGt2bV92ZmlvX2ZpbGUgKmt2ZjtcXG4rXFx0c3RydWN0IGZpbGUgKmt2bV9maWxlIF9fZnJlZShmcHV0KSA9IE5VTEw7XFxuIFxcdHN0cnVjdCBmaWxlICpmaWxwIF9fZnJlZShmcHV0KSA9IE5VTEw7XFxuIFxcbiBcXHRmaWxwID0gZmdldChmZCk7XFxuQEAgLTE1NCw2ICsxNTUsMTAgQEAgc3RhdGljIGludCBrdm1fdmZpb19maWxlX2FkZChzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmQpXFxuIFxcdGlmICgha3ZtX3ZmaW9fZmlsZV9pc192YWxpZChmaWxwKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRrdm1fZmlsZSA9IGdldF9maWxlX2FjdGl2ZShcXHUwMDI2ZGV2LVxcdTAwM2Vrdm0tXFx1MDAzZWZpbGUpO1xcbitcXHRpZiAoIWt2bV9maWxlKVxcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFxuIFxcdGd1YXJkKG11dGV4KShcXHUwMDI2a3YtXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShrdmYsIFxcdTAwMjZrdi1cXHUwMDNlZmlsZV9saXN0LCBub2RlKSB7XFxuQEAgLTE2OCw3ICsxNzMsNyBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZClcXG4gXFx0a3ZmLVxcdTAwM2VmaWxlID0gZ2V0X2ZpbGUoZmlscCk7XFxuIFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmt2Zi1cXHUwMDNlbm9kZSwgXFx1MDAyNmt2LVxcdTAwM2VmaWxlX2xpc3QpO1xcbiBcXG4tXFx0a3ZtX3ZmaW9fZmlsZV9zZXRfa3ZtKGt2Zi1cXHUwMDNlZmlsZSwgZGV2LVxcdTAwM2Vrdm0pO1xcbitcXHRrdm1fdmZpb19maWxlX3NldF9rdm0oa3ZmLVxcdTAwM2VmaWxlLCBrdm1fZmlsZSk7XFxuIFxcdGt2bV92ZmlvX3VwZGF0ZV9jb2hlcmVuY3koZGV2KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDoxNjowNC41NjExODQ5MDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU1ODI4MjM1NTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJWRklPXCIsXG4gICAgXCJWRklPX0dST1VQXCIsXG4gICAgXCJWRklPX0NPTlRBSU5FUlwiLFxuICAgIFwiVkZJT19ERVZJQ0VfQ0RFVlwiLFxuICAgIFwiRFJNX0k5MTVfR1ZUX0tWTUdUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3ZmaW9fZmlsZV9hZGRcIixcbiAgICBcInZmaW9fZmlsZV9zZXRfa3ZtXCIsXG4gICAgXCJ2ZmlvX2dyb3VwX3NldF9rdm1cIixcbiAgICBcInZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZVwiLFxuICAgIFwidmZpb19kZXZpY2VfcHV0X2t2bVwiLFxuICAgIFwiZmlsZV90b19rdm1cIixcbiAgICBcImt2bV92bV9yZWxlYXNlXCIsXG4gICAgXCJrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bVwiLFxuICAgIFwia3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXJcIixcbiAgICBcImt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXJcIixcbiAgICBcImt2bV93cml0ZV90cmFja19hZGRfZ2ZuXCIsXG4gICAgXCJrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgdGhlIHJlZmVyZW5jZSBtYW5hZ2VtZW50IGJldHdlZW4gS1ZNIGFuZCBleHRlcm5hbCBzdWJzeXN0ZW1zIChwcmltYXJpbHkgVkZJTyBhbmQgS1ZNIHBhZ2UgdHJhY2tpbmcpLCBzd2l0Y2hpbmcgZnJvbSBob2xkaW5nIGRpcmVjdCAnc3RydWN0IGt2bSAqJyBwb2ludGVycyB0byB1c2luZyAnc3RydWN0IGZpbGUgKicgcmVmZXJlbmNlcyB2aWEgZ2V0X2ZpbGUoKS9mcHV0KCkgYW5kIGdldF9maWxlX2FjdGl2ZSgpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbGlmZWN5Y2xlIHBhdGhzLCBjb25jdXJyZW5jeSwgYW5kIHJlZmNvdW50aW5nIGJldHdlZW4gS1ZNIFZNIGZpbGVzIGFuZCBWRklPIGRldmljZXMvZ3JvdXBzIGR1cmluZyBWTSBjcmVhdGlvbiwgcmVsZWFzZSwgYW5kIFZGSU8gZGV2aWNlIGF0dGFjaG1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTM4ZTI5NDU5NGQyZTlkZmFhNTRkYWFlNTRmMzlmY2IzNmY1ODVhNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTA6MTY6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFnZV90cmFjay5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhZ2VfdHJhY2suaFxuaW5kZXggM2QwNDA3NDEwNDRiNC4uMDQ2YTI1YzhmZTRmOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmhcbkBAIC00NCwxMyArNDQsMTMgQEAgc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUge1xuIFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpub2RlKTtcbiB9O1xuIFxuLWludCBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sXG4raW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbik7XG4tdm9pZCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSxcbit2b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0XHRcdHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpuKTtcbiBcbi1pbnQga3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm4oc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pO1xuLWludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7XG4raW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBmaWxlICpmaWxlLCBnZm5fdCBnZm4pO1xuK2ludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3QgZmlsZSAqZmlsZSwgZ2ZuX3QgZ2ZuKTtcbiAjZWxzZVxuIC8qXG4gICogQWxsb3cgZGVmaW5pbmcgYSBub2RlIGluIGEgc3RydWN0dXJlIGV2ZW4gaWYgcGFnZSB0cmFja2luZyBpcyBkaXNhYmxlZCwgZS5nLlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZSBiL2FyY2gveDg2L2t2bS9NYWtlZmlsZVxuaW5kZXggMDQ3NDYwNGFiOGExNC4uOTZmODlkNmY3ZTZhOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZVxuKysrIGIvYXJjaC94ODYva3ZtL01ha2VmaWxlXG5AQCAtNjAsMTAgKzYwLDcgQEAgZXhwb3J0c19ncmVwX3RyYWlsZXIgOj0gLS1pbmNsdWRlPScqLltjaF0nIC1ucncgJChzcmN0cmVlKS92aXJ0L2t2bSAkKHNyY3RyZWUpL2FcbiBcdFx0XHRncmVwIC12IC1lIGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyIFxcXG4gXHRcdFx0XHQtZSBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyIFxcXG4gXHRcdFx0XHQtZSBrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbiBcXFxuLVx0XHRcdFx0LWUga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4gXFxcbi1cdFx0XHRcdC1lIGt2bV9nZXRfa3ZtIFxcXG4tXHRcdFx0XHQtZSBrdm1fZ2V0X2t2bV9zYWZlIFxcXG4tXHRcdFx0XHQtZSBrdm1fcHV0X2t2bVxuK1x0XHRcdFx0LWUga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm5cbiBcbiAjIEZvcmNlIGdyZXAgdG8gZW1pdCBhIGdvb2Z5IGdyb3VwIHNlcGFyYXRvciB0aGF0IGNhbiBpbiB0dXJuIGJlIHJlcGxhY2VkIHdpdGhcbiAjIHRoZSBhYm92ZSBuZXdsaW5lIG1hY3JvIChuZXdsaW5lcyBpbiBNYWtlIGFyZSBhIG5pZ2h0bWFyZSkuICBOb3RlLCBncmVwIG9ubHlcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYyBiL2FyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jXG5pbmRleCA3ZTgxOTVhMzExYmIwLi45OGYxMzNlNGYwYjMyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmNcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jXG5AQCAtMjM3LDEwICsyMzcsMTEgQEAgc3RhdGljIGludCBrdm1fZW5hYmxlX2V4dGVybmFsX3dyaXRlX3RyYWNraW5nKHN0cnVjdCBrdm0gKmt2bSlcbiAgKiByZWdpc3RlciB0aGUgbm90aWZpZXIgc28gdGhhdCBldmVudCBpbnRlcmNlcHRpb24gZm9yIHRoZSB0cmFja2VkIGd1ZXN0XG4gICogcGFnZXMgY2FuIGJlIHJlY2VpdmVkLlxuICAqL1xuLWludCBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sXG4raW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbilcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfaGVhZCAqaGVhZDtcbitcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbGVfdG9fa3ZtKGZpbGUpO1xuIFx0aW50IHI7XG4gXG4gXHRpZiAoIWt2bSB8fCBrdm0tXHUwMDNlbW0gIT0gY3VycmVudC1cdTAwM2VtbSlcbkBAIC0yNTIsNyArMjUzLDcgQEAgaW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRyZXR1cm4gcjtcbiBcdH1cbiBcbi1cdGt2bV9nZXRfa3ZtKGt2bSk7XG4rXHRnZXRfZmlsZShmaWxlKTtcbiBcbiBcdGhlYWQgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC50cmFja19ub3RpZmllcl9oZWFkO1xuIFxuQEAgLTI2NywxMCArMjY4LDExIEBAIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKTtcbiAgKiBzdG9wIHJlY2VpdmluZyB0aGUgZXZlbnQgaW50ZXJjZXB0aW9uLiBJdCBpcyB0aGUgb3Bwb3NlZCBvcGVyYXRpb24gb2ZcbiAgKiBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcigpLlxuICAqL1xuLXZvaWQga3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sXG4rdm9pZCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdFx0XHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbilcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfaGVhZCAqaGVhZDtcbitcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbGVfdG9fa3ZtKGZpbGUpO1xuIFxuIFx0aGVhZCA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLnRyYWNrX25vdGlmaWVyX2hlYWQ7XG4gXG5AQCAtMjc5LDcgKzI4MSw3IEBAIHZvaWQga3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sXG4gXHR3cml0ZV91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiBcdHN5bmNocm9uaXplX3NyY3UoXHUwMDI2aGVhZC1cdTAwM2V0cmFja19zcmN1KTtcbiBcbi1cdGt2bV9wdXRfa3ZtKGt2bSk7XG4rXHRmcHV0KGZpbGUpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKTtcbiBcbkBAIC0zMzYsMTEgKzMzOCwxMiBAQCB2b2lkIGt2bV9wYWdlX3RyYWNrX2RlbGV0ZV9zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbiAgKiBhZGQgZ3Vlc3QgcGFnZSB0byB0aGUgdHJhY2tpbmcgcG9vbCBzbyB0aGF0IGNvcnJlc3BvbmRpbmcgYWNjZXNzIG9uIHRoYXRcbiAgKiBwYWdlIHdpbGwgYmUgaW50ZXJjZXB0ZWQuXG4gICpcbi0gKiBAa3ZtOiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uXG4rICogQGZpbGU6IHRoZSBWTSBmaWxlIG9mIHRoZSBndWVzdCBpbnN0YW5jZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbi5cbiAgKiBAZ2ZuOiB0aGUgZ3Vlc3QgcGFnZS5cbiAgKi9cbi1pbnQga3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm4oc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pXG4raW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBmaWxlICpmaWxlLCBnZm5fdCBnZm4pXG4ge1xuK1x0c3RydWN0IGt2bSAqa3ZtID0gZmlsZV90b19rdm0oZmlsZSk7XG4gXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xuIFx0aW50IGlkeDtcbiBcbkBAIC0zNjYsMTEgKzM2OSwxMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbik7XG4gICogcmVtb3ZlIHRoZSBndWVzdCBwYWdlIGZyb20gdGhlIHRyYWNraW5nIHBvb2wgd2hpY2ggc3RvcHMgdGhlIGludGVyY2VwdGlvblxuICAqIG9mIGNvcnJlc3BvbmRpbmcgYWNjZXNzIG9uIHRoYXQgcGFnZS5cbiAgKlxuLSAqIEBrdm06IHRoZSBndWVzdCBpbnN0YW5jZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbi5cbisgKiBAZmlsZTogdGhlIFZNIGZpbGUgb2YgdGhlIGd1ZXN0IGluc3RhbmNlIHdlIGFyZSBpbnRlcmVzdGVkIGluLlxuICAqIEBnZm46IHRoZSBndWVzdCBwYWdlLlxuICAqL1xuLWludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbilcbitpbnQga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4oc3RydWN0IGZpbGUgKmZpbGUsIGdmbl90IGdmbilcbiB7XG4rXHRzdHJ1Y3Qga3ZtICprdm0gPSBmaWxlX3RvX2t2bShmaWxlKTtcbiBcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG4gXHRpbnQgaWR4O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuaW5kZXggOTQwYzBmZjY2OGJlZS4uZjE2MGUxOTQ1ZmJjZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG5AQCAtMTgyMiwxNyArMTgyMiwyNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdmZpb19hcF9tZGV2X2F0dHJfZ3JvdXBzW10gPSB7XG4gXG4gLyoqXG4gICogdmZpb19hcF9tZGV2X3NldF9rdm0gLSBzZXRzIGFsbCBkYXRhIGZvciBAbWF0cml4X21kZXYgdGhhdCBhcmUgbmVlZGVkXG4tICogdG8gbWFuYWdlIEFQIHJlc291cmNlcyBmb3IgdGhlIGd1ZXN0IHdob3NlIHN0YXRlIGlzIHJlcHJlc2VudGVkIGJ5IEBrdm1cbisgKiB0byBtYW5hZ2UgQVAgcmVzb3VyY2VzIGZvciB0aGUgZ3Vlc3Qgd2hvc2Ugc3RhdGUgaXMgcmVwcmVzZW50ZWQgYnlcbisgKiBAa3ZtX2ZpbGVcbiAgKlxuICAqIEBtYXRyaXhfbWRldjogYSBtZWRpYXRlZCBtYXRyaXggZGV2aWNlXG4tICogQGt2bTogcmVmZXJlbmNlIHRvIEtWTSBpbnN0YW5jZVxuKyAqIEBrdm1fZmlsZTogdGhlIEtWTSBWTSBmaWxlIHRoaXMgdmZpbyBkZXZpY2UgaXMgYXNzb2NpYXRlZCB3aXRoXG4gICpcbi0gKiBSZXR1cm46IDAgaWYgbm8gb3RoZXIgbWVkaWF0ZWQgbWF0cml4IGRldmljZSBoYXMgYSByZWZlcmVuY2UgdG8gQGt2bTtcbisgKiBSZXR1cm46IDAgaWYgbm8gb3RoZXIgbWVkaWF0ZWQgbWF0cml4IGRldmljZSBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIFZNO1xuICAqIG90aGVyd2lzZSwgcmV0dXJucyBhbiAtRVBFUk0uXG4gICovXG4gc3RhdGljIGludCB2ZmlvX2FwX21kZXZfc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuLVx0XHRcdFx0c3RydWN0IGt2bSAqa3ZtKVxuK1x0XHRcdFx0c3RydWN0IGZpbGUgKmt2bV9maWxlKVxuIHtcbitcdHN0cnVjdCBrdm0gKmt2bTtcbitcbitcdGlmICgha3ZtX2ZpbGUpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0a3ZtID0ga3ZtX2ZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1x0aWYgKCFrdm0pXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuIFx0aWYgKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYmQpIHtcbiBcdFx0Z2V0X3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7XG4gXHRcdGlmIChrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rKSB7XG5AQCAtMTg0MSw3ICsxODUxLDYgQEAgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuIFx0XHR9XG4gXHRcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2sgPSBcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2VwcWFwX2hvb2s7XG4gXG4tXHRcdGt2bV9nZXRfa3ZtKGt2bSk7XG4gXHRcdG1hdHJpeF9tZGV2LVx1MDAzZWt2bSA9IGt2bTtcbiBcdFx0dmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTtcbiBcdFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuQEAgLTE4OTQsNyArMTkwMyw2IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl91bnNldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbiBcdFx0bWF0cml4X21kZXYtXHUwMDNla3ZtID0gTlVMTDtcbiBcbiBcdFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuLVx0XHRrdm1fcHV0X2t2bShrdm0pO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vZ3JvdXAuYyBiL2RyaXZlcnMvdmZpby9ncm91cC5jXG5pbmRleCBiMjI5OWU1YmM2ZGYzLi41YmY4Y2JkZmYzNzdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL2dyb3VwLmNcbisrKyBiL2RyaXZlcnMvdmZpby9ncm91cC5jXG5AQCAtODYwLDExICs4NjAsMjAgQEAgYm9vbCB2ZmlvX2dyb3VwX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cClcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGt2bSAqa3ZtKVxuK3ZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGZpbGUgKmt2bSlcbiB7XG4rXHRzdHJ1Y3QgZmlsZSAqb2xkO1xuK1xuK1x0aWYgKGt2bSlcbitcdFx0Z2V0X2ZpbGUoa3ZtKTtcbitcbiBcdHNwaW5fbG9jayhcdTAwMjZncm91cC1cdTAwM2Vrdm1fcmVmX2xvY2spO1xuK1x0b2xkID0gZ3JvdXAtXHUwMDNla3ZtO1xuIFx0Z3JvdXAtXHUwMDNla3ZtID0ga3ZtO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2Z3JvdXAtXHUwMDNla3ZtX3JlZl9sb2NrKTtcbitcbitcdGlmIChvbGQpXG4rXHRcdGZwdXQob2xkKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuY1xuaW5kZXggZjQ3ZjM2MzE0YTFjYy4uMDQ1MTMyZTkwYmZlZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuY1xuQEAgLTE4NCw2ICsxODQsNyBAQCBpbnQgdmZpb19wY2lfemRldl9mZWF0dXJlX2VycihzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxuIGludCB2ZmlvX3BjaV96ZGV2X29wZW5fZGV2aWNlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiB7XG4gXHRzdHJ1Y3QgenBjaV9kZXYgKnpkZXYgPSB0b196cGNpKHZkZXYtXHUwMDNlcGRldik7XG4rXHRzdHJ1Y3Qga3ZtICprdm07XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCF6ZGV2KVxuQEAgLTE5NSw5ICsxOTYsMTQgQEAgaW50IHZmaW9fcGNpX3pkZXZfb3Blbl9kZXZpY2Uoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHJldCA9IC1FTk9FTlQ7XG4rXHRrdm0gPSB2ZGV2LVx1MDAzZXZkZXYua3ZtLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdGlmICgha3ZtKVxuK1x0XHRnb3RvIHJlY292ZXJ5O1xuK1xuIFx0aWYgKHpwY2lfa3ZtX2hvb2sua3ZtX3JlZ2lzdGVyKVxuLVx0XHRyZXQgPSB6cGNpX2t2bV9ob29rLmt2bV9yZWdpc3Rlcih6ZGV2LCB2ZGV2LVx1MDAzZXZkZXYua3ZtKTtcbitcdFx0cmV0ID0genBjaV9rdm1faG9vay5rdm1fcmVnaXN0ZXIoemRldiwga3ZtKTtcbiBcbityZWNvdmVyeTpcbiBcdGlmIChyZXQpXG4gXHRcdHpwY2lfc3RvcF9tZWRpYXRlZF9yZWNvdmVyeSh6ZGV2KTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vdmZpby5oIGIvZHJpdmVycy92ZmlvL3ZmaW8uaFxuaW5kZXggNzcyOGJjOTliNjNkMS4uOWI2MTk5NTFhNWQwYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby92ZmlvLmhcbisrKyBiL2RyaXZlcnMvdmZpby92ZmlvLmhcbkBAIC0yMyw3ICsyMyw3IEBAIHN0cnVjdCB2ZmlvX2RldmljZV9maWxlIHtcbiBcdHU4IGFjY2Vzc19ncmFudGVkO1xuIFx0dTMyIGRldmlkOyAvKiBvbmx5IHZhbGlkIHdoZW4gaW9tbXVmZCBpcyB2YWxpZCAqL1xuIFx0c3BpbmxvY2tfdCBrdm1fcmVmX2xvY2s7IC8qIHByb3RlY3Qga3ZtIGZpZWxkICovXG4tXHRzdHJ1Y3Qga3ZtICprdm07XG4rXHRzdHJ1Y3QgZmlsZSAqa3ZtO1xuIFx0c3RydWN0IGlvbW11ZmRfY3R4ICppb21tdWZkOyAvKiBwcm90ZWN0ZWQgYnkgc3RydWN0IHZmaW9fZGV2aWNlX3NldDo6bG9jayAqL1xuIH07XG4gXG5AQCAtODgsNyArODgsNyBAQCBzdHJ1Y3QgdmZpb19ncm91cCB7XG4gI2VuZGlmXG4gXHRlbnVtIHZmaW9fZ3JvdXBfdHlwZVx0XHR0eXBlO1xuIFx0c3RydWN0IG11dGV4XHRcdFx0Z3JvdXBfbG9jaztcbi1cdHN0cnVjdCBrdm1cdFx0XHQqa3ZtO1xuK1x0c3RydWN0IGZpbGVcdFx0XHQqa3ZtO1xuIFx0c3RydWN0IGZpbGVcdFx0XHQqb3BlbmVkX2ZpbGU7XG4gXHRzdHJ1Y3QgaW9tbXVmZF9jdHhcdFx0KmlvbW11ZmQ7XG4gXHRzcGlubG9ja190XHRcdFx0a3ZtX3JlZl9sb2NrO1xuQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIHZmaW9fZGV2aWNlX2dyb3VwX3VudXNlX2lvbW11KHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKTtcbiB2b2lkIHZmaW9fZGZfZ3JvdXBfY2xvc2Uoc3RydWN0IHZmaW9fZGV2aWNlX2ZpbGUgKmRmKTtcbiBzdHJ1Y3QgdmZpb19ncm91cCAqdmZpb19ncm91cF9mcm9tX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpO1xuIGJvb2wgdmZpb19ncm91cF9lbmZvcmNlZF9jb2hlcmVudChzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXApO1xuLXZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGt2bSAqa3ZtKTtcbit2b2lkIHZmaW9fZ3JvdXBfc2V0X2t2bShzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXAsIHN0cnVjdCBmaWxlICprdm0pO1xuIGJvb2wgdmZpb19kZXZpY2VfaGFzX2NvbnRhaW5lcihzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSk7XG4gaW50IF9faW5pdCB2ZmlvX2dyb3VwX2luaXQodm9pZCk7XG4gdm9pZCB2ZmlvX2dyb3VwX2NsZWFudXAodm9pZCk7XG5AQCAtMTY1LDcgKzE2NSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX2dyb3VwX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGt2bSAqa3ZtKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX2dyb3VwX3NldF9rdm0oc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgZmlsZSAqa3ZtKVxuIHtcbiB9XG4gXG5AQCAtNDI5LDExICs0MjksMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fdmlycWZkX2V4aXQodm9pZClcbiAjZW5kaWZcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfS1ZNKVxuLXZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3Qga3ZtICprdm0pO1xuK3ZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZmlsZSAqa3ZtKTtcbiB2b2lkIHZmaW9fZGV2aWNlX3B1dF9rdm0oc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSxcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBrdm0gKmt2bSlcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCBmaWxlICprdm0pXG4ge1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMgYi9kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmNcbmluZGV4IDQyM2VhZDQ4YWFmZTMuLmVkOTZhY2ZhODYzNTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmNcbisrKyBiL2RyaXZlcnMvdmZpby92ZmlvX21haW4uY1xuQEAgLTQ3MiwzNiArNDcyLDE0IEBAIHZvaWQgdmZpb191bnJlZ2lzdGVyX2dyb3VwX2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSlcbiBFWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KTtcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfS1ZNKVxuLXZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3Qga3ZtICprdm0pXG4rdm9pZCB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBmaWxlICprdm0pXG4ge1xuLVx0dm9pZCAoKnBmbikoc3RydWN0IGt2bSAqa3ZtKTtcbi1cdGJvb2wgKCpmbikoc3RydWN0IGt2bSAqa3ZtKTtcbi1cdGJvb2wgcmV0O1xuLVxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkZXZpY2UtXHUwMDNlZGV2X3NldC1cdTAwM2Vsb2NrKTtcbiBcbiBcdGlmICgha3ZtKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRwZm4gPSBzeW1ib2xfZ2V0KGt2bV9wdXRfa3ZtKTtcbi1cdGlmIChXQVJOX09OKCFwZm4pKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRmbiA9IHN5bWJvbF9nZXQoa3ZtX2dldF9rdm1fc2FmZSk7XG4tXHRpZiAoV0FSTl9PTighZm4pKSB7XG4tXHRcdHN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRyZXQgPSBmbihrdm0pO1xuLVx0c3ltYm9sX3B1dChrdm1fZ2V0X2t2bV9zYWZlKTtcbi1cdGlmICghcmV0KSB7XG4tXHRcdHN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRkZXZpY2UtXHUwMDNlcHV0X2t2bSA9IHBmbjtcbi1cdGRldmljZS1cdTAwM2Vrdm0gPSBrdm07XG4rXHRkZXZpY2UtXHUwMDNla3ZtID0gZ2V0X2ZpbGUoa3ZtKTtcbiB9XG4gXG4gdm9pZCB2ZmlvX2RldmljZV9wdXRfa3ZtKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKVxuQEAgLTUxMSwxNCArNDg5LDcgQEAgdm9pZCB2ZmlvX2RldmljZV9wdXRfa3ZtKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKVxuIFx0aWYgKCFkZXZpY2UtXHUwMDNla3ZtKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoV0FSTl9PTighZGV2aWNlLVx1MDAzZXB1dF9rdm0pKVxuLVx0XHRnb3RvIGNsZWFyO1xuLVxuLVx0ZGV2aWNlLVx1MDAzZXB1dF9rdm0oZGV2aWNlLVx1MDAzZWt2bSk7XG4tXHRkZXZpY2UtXHUwMDNlcHV0X2t2bSA9IE5VTEw7XG4tXHRzeW1ib2xfcHV0KGt2bV9wdXRfa3ZtKTtcbi1cbi1jbGVhcjpcbitcdGZwdXQoZGV2aWNlLVx1MDAzZWt2bSk7XG4gXHRkZXZpY2UtXHUwMDNla3ZtID0gTlVMTDtcbiB9XG4gI2VuZGlmXG5AQCAtMTU0NCw5ICsxNTE1LDEzIEBAIGJvb2wgdmZpb19maWxlX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCBmaWxlICpmaWxlKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX2ZpbGVfZW5mb3JjZWRfY29oZXJlbnQpO1xuIFxuLXN0YXRpYyB2b2lkIHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKVxuK3N0YXRpYyB2b2lkIHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGUgKmt2bSlcbiB7XG4gXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmlsZSAqZGYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdHN0cnVjdCBmaWxlICpvbGQ7XG4rXG4rXHRpZiAoa3ZtKVxuK1x0XHRnZXRfZmlsZShrdm0pO1xuIFxuIFx0LypcbiBcdCAqIFRoZSBrdm0gaXMgZmlyc3QgcmVjb3JkZWQgaW4gdGhlIHZmaW9fZGV2aWNlX2ZpbGUsIGFuZCB3aWxsXG5AQCAtMTU1NCwyOCArMTUyOSwzMiBAQCBzdGF0aWMgdm9pZCB2ZmlvX2RldmljZV9maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdCAqIGlvbW11ZmQgc3VjY2Vzc2Z1bGx5IGluIHRoZSB2ZmlvIGRldmljZSBjZGV2IHBhdGguXG4gXHQgKi9cbiBcdHNwaW5fbG9jayhcdTAwMjZkZi1cdTAwM2Vrdm1fcmVmX2xvY2spO1xuK1x0b2xkID0gZGYtXHUwMDNla3ZtO1xuIFx0ZGYtXHUwMDNla3ZtID0ga3ZtO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2ZGYtXHUwMDNla3ZtX3JlZl9sb2NrKTtcbitcbitcdGlmIChvbGQpXG4rXHRcdGZwdXQob2xkKTtcbiB9XG4gXG4gLyoqXG4gICogdmZpb19maWxlX3NldF9rdm0gLSBMaW5rIGEga3ZtIHdpdGggVkZJTyBkcml2ZXJzXG4tICogQGZpbGU6IFZGSU8gZ3JvdXAgZmlsZSBvciBWRklPIGRldmljZSBmaWxlXG4tICogQGt2bTogS1ZNIHRvIGxpbmtcbisgKiBAdmZpb19maWxlOiBWRklPIGdyb3VwIGZpbGUgb3IgVkZJTyBkZXZpY2UgZmlsZVxuKyAqIEBrdm06IEtWTSBmaWxlIHRvIGxpbmtcbiAgKlxuICAqIFdoZW4gYSBWRklPIGRldmljZSBpcyBmaXJzdCBvcGVuZWQgdGhlIEtWTSB3aWxsIGJlIGF2YWlsYWJsZSBpblxuICAqIGRldmljZS1cdTAwM2Vrdm0gaWYgb25lIHdhcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuXG4gICovXG4tdm9pZCB2ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKVxuK3ZvaWQgdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSlcbiB7XG4gXHRzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXA7XG4gXG4tXHRncm91cCA9IHZmaW9fZ3JvdXBfZnJvbV9maWxlKGZpbGUpO1xuK1x0Z3JvdXAgPSB2ZmlvX2dyb3VwX2Zyb21fZmlsZSh2ZmlvX2ZpbGUpO1xuIFx0aWYgKGdyb3VwKVxuIFx0XHR2ZmlvX2dyb3VwX3NldF9rdm0oZ3JvdXAsIGt2bSk7XG4gXG4tXHRpZiAodmZpb19kZXZpY2VfZnJvbV9maWxlKGZpbGUpKVxuLVx0XHR2ZmlvX2RldmljZV9maWxlX3NldF9rdm0oZmlsZSwga3ZtKTtcbitcdGlmICh2ZmlvX2RldmljZV9mcm9tX2ZpbGUodmZpb19maWxlKSlcbitcdFx0dmZpb19kZXZpY2VfZmlsZV9zZXRfa3ZtKHZmaW9fZmlsZSwga3ZtKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmZpb19maWxlX3NldF9rdm0pO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggMDNiZmM5Mjg2NGI2ZS4uYmZlY2NlMWI1OTU1YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtNzg0LDYgKzc4NCwxMyBAQCBzdHJ1Y3Qga3ZtIHtcbiBcdCAqIGt2bV9zd2FwX2FjdGl2ZV9tZW1zbG90cygpLlxuIFx0ICovXG4gXHRzdHJ1Y3QgbXV0ZXggc2xvdHNfYXJjaF9sb2NrO1xuK1x0LypcbitcdCAqIEJhY2stcmVmZXJlbmNlIHRvIHRoZSBWTSBmaWxlIGZvciBzdWJzeXN0ZW1zIChlLmcuLCBWRklPKS4gSG9sZHMgbm9cbitcdCAqIHJlZmVyZW5jZSB0byBhdm9pZCBwaW5uaW5nIHRoZSBWTS4gQWNjZXNzIHZpYSBnZXRfZmlsZV9hY3RpdmUoXHUwMDI2a3ZtLVx1MDAzZWZpbGUpXG4rXHQgKiBvbmx54oCUc2FmZSBiZWNhdXNlIGNsZWFyZWQgaW4ga3ZtX3ZtX3JlbGVhc2UoKSBiZWZvcmUgZmlsZSBmcmVlZC4gQ2FsbGVyc1xuK1x0ICogc3RvcmluZyB0aGUgcmVzdWx0IG11c3QgdGFrZSB0aGVpciBvd24gcmVmZXJlbmNlIHZpYSBnZXRfZmlsZSgpXG4rXHQgKi9cbitcdHN0cnVjdCBmaWxlICpmaWxlO1xuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW07IC8qIHVzZXJzcGFjZSB0aWVkIHRvIHRoaXMgdm0gKi9cbiBcdHVuc2lnbmVkIGxvbmcgbnJfbWVtc2xvdF9wYWdlcztcbiBcdC8qIFRoZSB0d28gbWVtc2xvdCBzZXRzIC0gYWN0aXZlIGFuZCBpbmFjdGl2ZSAocGVyIGFkZHJlc3Mgc3BhY2UpICovXG5AQCAtMTA4Miw2ICsxMDg5LDcgQEAgdm9pZCBrdm1fZ2V0X2t2bShzdHJ1Y3Qga3ZtICprdm0pO1xuIGJvb2wga3ZtX2dldF9rdm1fc2FmZShzdHJ1Y3Qga3ZtICprdm0pO1xuIHZvaWQga3ZtX3B1dF9rdm0oc3RydWN0IGt2bSAqa3ZtKTtcbiBib29sIGZpbGVfaXNfa3ZtKHN0cnVjdCBmaWxlICpmaWxlKTtcbitzdHJ1Y3Qga3ZtICpmaWxlX3RvX2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSk7XG4gdm9pZCBrdm1fcHV0X2t2bV9ub19kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSk7XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21lbXNsb3RzICpfX2t2bV9tZW1zbG90cyhzdHJ1Y3Qga3ZtICprdm0sIGludCBhc19pZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvbGludXgvdmZpby5oXG5pbmRleCA0NWYwODk4NjM1OWU0Li4wY2M5MWM2Zjk2ZDJiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvLmhcbisrKyBiL2luY2x1ZGUvbGludXgvdmZpby5oXG5AQCAtNTQsNyArNTQsNyBAQCBzdHJ1Y3QgdmZpb19kZXZpY2Uge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBkZXZfc2V0X2xpc3Q7XG4gXHR1bnNpZ25lZCBpbnQgbWlncmF0aW9uX2ZsYWdzO1xuIFx0dTggcHJlY29weV9pbmZvX3YyO1xuLVx0c3RydWN0IGt2bSAqa3ZtO1xuK1x0c3RydWN0IGZpbGUgKmt2bTtcbiBcbiBcdC8qIE1lbWJlcnMgYmVsb3cgaGVyZSBhcmUgcHJpdmF0ZSwgbm90IGZvciBkcml2ZXIgdXNlICovXG4gXHR1bnNpZ25lZCBpbnQgaW5kZXg7XG5AQCAtNjYsNyArNjYsNiBAQCBzdHJ1Y3QgdmZpb19kZXZpY2Uge1xuIFx0dW5zaWduZWQgaW50IG9wZW5fY291bnQ7XG4gXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xuIFx0c3RydWN0IGlvbW11ZmRfYWNjZXNzICppb21tdWZkX2FjY2Vzcztcbi1cdHZvaWQgKCpwdXRfa3ZtKShzdHJ1Y3Qga3ZtICprdm0pO1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU9NTVVGRClcbiBcdHN0cnVjdCBpb21tdWZkX2RldmljZSAqaW9tbXVmZF9kZXZpY2U7XG5AQCAtMzc4LDcgKzM3Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX2ZpbGVfaGFzX2RldihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpXG4gI2VuZGlmXG4gYm9vbCB2ZmlvX2ZpbGVfaXNfdmFsaWQoc3RydWN0IGZpbGUgKmZpbGUpO1xuIGJvb2wgdmZpb19maWxlX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCBmaWxlICpmaWxlKTtcbi12b2lkIHZmaW9fZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pO1xuK3ZvaWQgdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSk7XG4gXG4gI2RlZmluZSBWRklPX1BJTl9QQUdFU19NQVhfRU5UUklFU1x0KFBBR0VfU0laRS9zaXplb2YodW5zaWduZWQgbG9uZykpXG4gXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbmluZGV4IDY1ZWIyNmEwNTIwZDguLjM0YjRjNDM5MDhiM2IgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtMTMxNCw3ICsxMzE0LDcgQEAgdm9pZCBrdm1fZ2V0X2t2bShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0cmVmY291bnRfaW5jKFx1MDAyNmt2bS1cdTAwM2V1c2Vyc19jb3VudCk7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9nZXRfa3ZtKTtcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2dldF9rdm0pO1xuIFxuIC8qXG4gICogTWFrZSBzdXJlIHRoZSB2bSBpcyBub3QgZHVyaW5nIGRlc3RydWN0aW9uLCB3aGljaCBpcyBhIHNhZmUgdmVyc2lvbiBvZlxuQEAgLTEzMjQsMTQgKzEzMjQsMTQgQEAgYm9vbCBrdm1fZ2V0X2t2bV9zYWZlKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRyZXR1cm4gcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNmt2bS1cdTAwM2V1c2Vyc19jb3VudCk7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9nZXRfa3ZtX3NhZmUpO1xuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZ2V0X2t2bV9zYWZlKTtcbiBcbiB2b2lkIGt2bV9wdXRfa3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmt2bS1cdTAwM2V1c2Vyc19jb3VudCkpXG4gXHRcdGt2bV9kZXN0cm95X3ZtKGt2bSk7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9wdXRfa3ZtKTtcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3B1dF9rdm0pO1xuIFxuIC8qXG4gICogVXNlZCB0byBwdXQgYSByZWZlcmVuY2UgdGhhdCB3YXMgdGFrZW4gb24gYmVoYWxmIG9mIGFuIG9iamVjdCBhc3NvY2lhdGVkXG5AQCAtMTM1Miw2ICsxMzUyLDggQEAgc3RhdGljIGludCBrdm1fdm1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbiBcbiBcdGt2bV9pcnFmZF9yZWxlYXNlKGt2bSk7XG4gXG4rXHRXUklURV9PTkNFKGt2bS1cdTAwM2VmaWxlLCBOVUxMKTtcbitcbiBcdGt2bV9wdXRfa3ZtKGt2bSk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNTQ5Niw2ICs1NDk4LDE1IEBAIGJvb2wgZmlsZV9pc19rdm0oc3RydWN0IGZpbGUgKmZpbGUpXG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChmaWxlX2lzX2t2bSk7XG4gXG4rc3RydWN0IGt2bSAqZmlsZV90b19rdm0oc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0aWYgKCFmaWxlX2lzX2t2bShmaWxlKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXR1cm4gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChmaWxlX3RvX2t2bSk7XG4rXG4gc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUpXG4ge1xuIFx0Y2hhciBmZG5hbWVbSVRPQV9NQVhfTEVOICsgMV07XG5AQCAtNTUyNyw2ICs1NTM4LDkgQEAgc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUpXG4gXHQgKiBjYXNlcyBpdCB3aWxsIGJlIGNhbGxlZCBieSB0aGUgZmluYWwgZnB1dChmaWxlKSBhbmQgd2lsbCB0YWtlXG4gXHQgKiBjYXJlIG9mIGRvaW5nIGt2bV9wdXRfa3ZtKGt2bSkuXG4gXHQgKi9cbitcbitcdGt2bS1cdTAwM2VmaWxlID0gZmlsZTtcbitcbiBcdGt2bV91ZXZlbnRfbm90aWZ5X2NoYW5nZShLVk1fRVZFTlRfQ1JFQVRFX1ZNLCBrdm0pO1xuIFxuIFx0ZmRfaW5zdGFsbChmZCwgZmlsZSk7XG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vdmZpby5jIGIvdmlydC9rdm0vdmZpby5jXG5pbmRleCA2Y2RjNGU5YTMzM2EzLi4xOTU0OGE0MzA5NDI2IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vdmZpby5jXG4rKysgYi92aXJ0L2t2bS92ZmlvLmNcbkBAIC0zNSwxNSArMzUsMTUgQEAgc3RydWN0IGt2bV92ZmlvIHtcbiBcdGJvb2wgbm9uY29oZXJlbnQ7XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCBrdm1fdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSlcbitzdGF0aWMgdm9pZCBrdm1fdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSlcbiB7XG4tXHR2b2lkICgqZm4pKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pO1xuK1x0dm9pZCAoKmZuKShzdHJ1Y3QgZmlsZSAqdmZpb19maWxlLCBzdHJ1Y3QgZmlsZSAqa3ZtKTtcbiBcbiBcdGZuID0gc3ltYm9sX2dldCh2ZmlvX2ZpbGVfc2V0X2t2bSk7XG4gXHRpZiAoIWZuKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRmbihmaWxlLCBrdm0pO1xuK1x0Zm4odmZpb19maWxlLCBrdm0pO1xuIFxuIFx0c3ltYm9sX3B1dCh2ZmlvX2ZpbGVfc2V0X2t2bSk7XG4gfVxuQEAgLTE0NCw2ICsxNDQsNyBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZClcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZmaW8gKmt2ID0gZGV2LVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3Qga3ZtX3ZmaW9fZmlsZSAqa3ZmO1xuK1x0c3RydWN0IGZpbGUgKmt2bV9maWxlIF9fZnJlZShmcHV0KSA9IE5VTEw7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlscCBfX2ZyZWUoZnB1dCkgPSBOVUxMO1xuIFxuIFx0ZmlscCA9IGZnZXQoZmQpO1xuQEAgLTE1NCw2ICsxNTUsMTAgQEAgc3RhdGljIGludCBrdm1fdmZpb19maWxlX2FkZChzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmQpXG4gXHRpZiAoIWt2bV92ZmlvX2ZpbGVfaXNfdmFsaWQoZmlscCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0a3ZtX2ZpbGUgPSBnZXRfZmlsZV9hY3RpdmUoXHUwMDI2ZGV2LVx1MDAzZWt2bS1cdTAwM2VmaWxlKTtcbitcdGlmICgha3ZtX2ZpbGUpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuIFx0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2LVx1MDAzZWxvY2spO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShrdmYsIFx1MDAyNmt2LVx1MDAzZWZpbGVfbGlzdCwgbm9kZSkge1xuQEAgLTE2OCw3ICsxNzMsNyBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZClcbiBcdGt2Zi1cdTAwM2VmaWxlID0gZ2V0X2ZpbGUoZmlscCk7XG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNmt2Zi1cdTAwM2Vub2RlLCBcdTAwMjZrdi1cdTAwM2VmaWxlX2xpc3QpO1xuIFxuLVx0a3ZtX3ZmaW9fZmlsZV9zZXRfa3ZtKGt2Zi1cdTAwM2VmaWxlLCBkZXYtXHUwMDNla3ZtKTtcbitcdGt2bV92ZmlvX2ZpbGVfc2V0X2t2bShrdmYtXHUwMDNlZmlsZSwga3ZtX2ZpbGUpO1xuIFx0a3ZtX3ZmaW9fdXBkYXRlX2NvaGVyZW5jeShkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDoxNjowNC41NjExODY5MTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzA4NzA4MzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGFuZCBmaWd1cmUgb3V0IGlmIGl0J3MgZnV6ei13b3J0aHksIGFuZCBpZiBzbywgaG93IHdlIHNob3VsZCBhcHByb2FjaCBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgd29ydGggYSBjbG9zZXIgbG9vaywgZ2l2ZW4gdGhhdCBLVk0gYW5kIFZGSU8gYXJlIGludm9sdmVkLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGdyYXNwIHdoYXQncyBhY3R1YWxseSBiZWluZyBjaGFuZ2VkLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgaG93IEtWTSBhbmQgVkZJTyBpbnRlcmFjdCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHN0cnVjdCBrdm1gIGFuZCBgc3RydWN0IGZpbGVgIG9iamVjdHMuIFRoZSBwYXRjaCBpcyByZWZhY3RvcmluZyBob3cgdGhlc2UgYXJlIHBhc3NlZCBhbmQgc3RvcmVkIGFjcm9zcyBzZXZlcmFsIGtleSBmdW5jdGlvbnMgaW4gYHBhZ2VfdHJhY2suY2AsIGBrdm1fbWFpbi5jYCwgYW5kIGB2ZmlvLmNgLiBSZXBsYWNpbmcgYHN0cnVjdCBrdm0gKmt2bWAgd2l0aCBgc3RydWN0IGZpbGUgKmZpbGVgIGluIHNldmVyYWwgcGxhY2VzLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBmaWxlX3RvX2t2bSgpYCBhbmQgcmVsYXRlZCBjaGFuZ2VzLCBpcyB0aGUgY29yZSBvZiBpdC4gV2UncmUgdGFsa2luZyBhYm91dCBjaGFuZ2VzIGluIGhvdyBLVk1zIGFyZSBjcmVhdGVkLCBhY2Nlc3NlZCwgYW5kIHJlbGVhc2VkLCBhbG9uZ3NpZGUgVkZJTyBpbnRlcmFjdGlvbnMuIFRoZSBgRVhQT1JUX1NZTUJPTF9HUExgIHZzLiBgRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMYCBjaGFuZ2VzIGFyZSBhbHNvIGludGVyZXN0aW5nIGFuZCBjb3VsZCBoaW50IGF0IGFjY2VzcyBjb250cm9sIGNoYW5nZXMsIGFuZCBtYXkgZXhwb3NlIHNvbWUgbmV3IHN1cmZhY2UuXG5cblRoZSBrZXkgZnVuY3Rpb25zIGFyZTpcblxuKiAgIGBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcmAsIGBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyYCwgYGt2bV93cml0ZV90cmFja19hZGRfZ2ZuYCwgYGt2bV93cml0ZV90cmFja19yZW1vdmVfZ2ZuYCAoaW4gYHBhZ2VfdHJhY2suY2ApXG4qICAgYHZmaW9fZ3JvdXBfc2V0X2t2bWAsIGB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmVgLCBgdmZpb19kZXZpY2VfcHV0X2t2bWAsIGB2ZmlvX2ZpbGVfc2V0X2t2bWAsIGB2ZmlvX2RldmljZV9maWxlX3NldF9rdm1gIChWRklPIHJlbGF0ZWQgY29kZSlcbiogICBga3ZtX2dldF9rdm1gLCBga3ZtX2dldF9rdm1fc2FmZWAsIGBrdm1fcHV0X2t2bWAgKGluIGBrdm1fbWFpbi5jYClcbiogICBga3ZtX3ZtX3JlbGVhc2VgXG4qICAgYGt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtYFxuKiAgIGBrdm1fdmZpb19maWxlX3NldF9rdm1gIGFuZCBga3ZtX3ZmaW9fZmlsZV9hZGRgIChpbiBgdmZpby5jYClcblxuTm93LCBpcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIG9uIHg4Nl82NCwgb3IgaXMgaXQgaXNvbGF0ZWQ/IFRoZSBhbnN3ZXIgaXMgY2xlYXJseSB5ZXMhIEtWTSBhbmQgVkZJTyBhcmUgZm91bmRhdGlvbmFsIHRlY2hub2xvZ2llcy4gV2UncmUgZGVhbGluZyB3aXRoIEtWTSBpb2N0bHMsIHNwZWNpZmljYWxseSB0aG9zZSByZWxhdGVkIHRvIEtWTS1WRklPIGRldmljZSBjcmVhdGlvbiBhbmQgbWFuYWdlbWVudCwgYW5kIFZGSU8gaW9jdGxzL2ZpbGUgZGVzY3JpcHRvcnMgdGhhdCBpbnRlcmFjdCB3aXRoIEtWTS4gV2UgZGVmaW5pdGVseSBjYW4gZ2V0IHRvIHRoaXMuXG5cblRoaW5raW5nIGFib3V0IHRoZSBmdXp6aW5nIHBvdGVudGlhbCwgbGV0J3Mgc2VlIGhvdyB0aGlzIGFsaWducyB3aXRoIHRoZSBjcml0ZXJpYS4gVGhpcyBzZWVtcyB0byBoaXQgb24gc2V2ZXJhbCBwb2ludHMuIFRoaXMgaGFzIHBvdGVudGlhbCwgaXQgZml0cy5cblxuKiAgICoqQ29yZSBTdWJzeXN0ZW1zOioqIE1lbW9yeSBtYW5hZ2VtZW50LCBWRlMsIEtWTSwgVkZJTyBhcmUgdG91Y2hlZC5cbiogICAqKlJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoqKiBZZXMsIHdlJ3JlIHNlZWluZyByZXN0cnVjdHVyaW5nIG9mIGRhdGEgc3RydWN0dXJlcyAoYGt2bWAgYW5kIGBmaWxlYCBzcGVjaWZpY2FsbHkpLCBhbmQgaG93IHRoZXNlIGFyZSBoYW5kbGVkLlxuKiAgICoqUnVudGltZSBhc3NlcnRpb25zIGFuZCBkZWZlbnNpdmUgY2hlY2tzOioqIFRoZSBjaGFuZ2VzIHdpdGggYGdldF9maWxlX2FjdGl2ZWAsIHNwaW5sb2NrcywgYW5kIHRoZSByZWZlcmVuY2UgY291bnRpbmcgY2hhbmdlcyBiZXR3ZWVuIGBzdHJ1Y3QgZmlsZWAgYW5kIGBzdHJ1Y3Qga3ZtYCBsb29rIHByb21pc2luZyBmb3IgZXhwb3Npbmcgc3VidGxlIGJ1Z3MuIFRoaXMgaXMgYSByZWZhY3RvciwgdGhpcyBpcyBhIGNoYW5nZSB0byB0aGUgZnVuZGFtZW50YWwgd2F5IHdlJ3JlIGhhbmRsaW5nIGZpbGUgZGVzY3JpcHRvcnMsIGFuZCBLVk0gY29udGV4dHMuXG5cblNvLCB0aGlzIHBhdGNoIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZy4gTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggS2NvbmZpZyBvcHRpb25zIGFyZSByZXF1aXJlZCB0byBlbmFibGUgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIEknbGwgdXNlIGBncmVwcGVyYCBvciBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgS1ZNIGFuZCBWRklPIHRvIGRldGVybWluZSB0aGUgbmVlZGVkIGNvbmZpZ3VyYXRpb25zLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgY29uZmlndXJhdGlvbnMgZm9yOlxuXG4qICAgS1ZNIChvYnZpb3VzbHkpLlxuKiAgIFZGSU8sIGVzcGVjaWFsbHkgYW55dGhpbmcgcmVsYXRlZCB0byBkZXZpY2UgYXNzaWdubWVudCBhbmQgcGFzc3Rocm91Z2guXG4qICAgQW55dGhpbmcgcmVsYXRpbmcgdG8gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB3ZSdyZSBsb29raW5nIGF0LCBqdXN0IGluIGNhc2UuXG5cbk9uY2UgSSBoYXZlIHRoZSBjb25maWdzIG5haWxlZCBkb3duLCBJIGNhbiBzdGFydCB0aGlua2luZyBhYm91dCBzcGVjaWZpYyBmdXp6aW5nIHRhcmdldHMuIFRoaXMgbG9va3MgdG8gYmUgcmlwZSBmb3IgaW5wdXQgdGhhdCB0cmlnZ2VycyBpb2N0bHMgcmVsYXRlZCB0byBLVk0gZGV2aWNlIGNyZWF0aW9uL21hbmFnZW1lbnQsIGFuZCBhbnl0aGluZyB0aGF0IG1hbmlwdWxhdGVzIGZpbGUgZGVzY3JpcHRvcnMgcmVsYXRlZCB0byBWRklPIGFuZCBLVk0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTYxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MTY6MTEuMjY5ODk4NzIzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0ODI3MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiQ29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTczOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4NC1cXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5My1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTQ6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA3LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTc6Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTgtXFx0Ym9vbCBcXFwiUHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzA6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXHRib29sXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMzpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNC1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjE2OjExLjMzNDczMTcxMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyOTc2MDE5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFZGSU8gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIFZGSU8gY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBkcml2ZXIgb3B0aW9ucyByZXNpZGUuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIG5hdmlnYXRlIHRvIHRoZSBgZHJpdmVycy92ZmlvL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSXQncyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIGRlZmluaXRpb24gZm9yIGFsbCB0aGluZ3MgcmVsYXRlZCB0byBWRklPLiBUaGF0IGZpbGUgc2hvdWxkIGRlZmluZSB0aGUgdmFyaW91cyBrbm9icyBhbmQgc3dpdGNoZXMgd2UgaGF2ZSB0byBjb250cm9sIGl0cyBiZWhhdmlvciwgd2hldGhlciBpdCBpcyBlbmFibGVkIGFzIGEgbW9kdWxlLCBidWlsdCBpbiBvciBkaXNhYmxlZC4gRnJvbSB0aGVyZSwgSSBjYW4gdW5kZXJzdGFuZCB3aGljaCBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLCB3aGljaCBkZXBlbmRlbmNpZXMgZXhpc3QsIGFuZCBob3cgdGhlIHZhcmlvdXMgY29tcG9uZW50cyBpbnRlcmFjdCBmcm9tIGEgYnVpbGQgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZS4gVGhpcyBpcyBhIGNyaXRpY2FsIHN0ZXAgYmVmb3JlIGF0dGVtcHRpbmcgYW55IG1vZGlmaWNhdGlvbnMgb3IgdHJvdWJsZXNob290aW5nIGJlY2F1c2UgSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY3VycmVudCBwYXJhbWV0ZXJzIGFuZCBob3cgdGhleSBhcmUgaGFuZGxlZC4gVGhlIEtjb25maWcgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM4NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjE2OjE3LjYzMjMzNjA3NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTE2NjMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZmaW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzoyOm1lbnVjb25maWcgVkZJT1xcbmRyaXZlcnMvdmZpby9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlZGSU8gTm9uLVByaXZpbGVnZWQgdXNlcnNwYWNlIGRyaXZlciBmcmFtZXdvcmtcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz0xNj1pZiBWRklPXFxuZHJpdmVycy92ZmlvL0tjb25maWc6MTc6Y29uZmlnIFZGSU9fREVWSUNFX0NERVZcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0xOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgVkZJTyBjZGV2IC9kZXYvdmZpby9kZXZpY2VzL3ZmaW9YXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctMjgtXFxuZHJpdmVycy92ZmlvL0tjb25maWc6Mjk6Y29uZmlnIFZGSU9fR1JPVVBcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0zMC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgVkZJTyBncm91cCAvZGV2L3ZmaW8vJGdyb3VwX2lkXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctMzgtXFxuZHJpdmVycy92ZmlvL0tjb25maWc6Mzk6Y29uZmlnIFZGSU9fQ09OVEFJTkVSXFxuZHJpdmVycy92ZmlvL0tjb25maWctNDAtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgdGhlIFZGSU8gY29udGFpbmVyIC9kZXYvdmZpby92ZmlvXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWc9NTE9aWYgVkZJT19DT05UQUlORVJcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Mjpjb25maWcgVkZJT19JT01NVV9UWVBFMVxcbmRyaXZlcnMvdmZpby9LY29uZmlnLTUzLVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01NS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Njpjb25maWcgVkZJT19JT01NVV9TUEFQUl9UQ0VcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01Ny1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWc9NjA9ZW5kaWZcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy02MS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo2Mjpjb25maWcgVkZJT19OT0lPTU1VXFxuZHJpdmVycy92ZmlvL0tjb25maWctNjMtXFx0Ym9vbCBcXFwiVkZJTyBOby1JT01NVSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctNzgtXFxuZHJpdmVycy92ZmlvL0tjb25maWc6Nzk6Y29uZmlnIFZGSU9fVklSUUZEXFxuZHJpdmVycy92ZmlvL0tjb25maWctODAtXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctODMtXFxuZHJpdmVycy92ZmlvL0tjb25maWc6ODQ6Y29uZmlnIFZGSU9fREVCVUdGU1xcbmRyaXZlcnMvdmZpby9LY29uZmlnLTg1LVxcdGJvb2wgXFxcIkV4cG9ydCBWRklPIGludGVybmFscyBpbiBEZWJ1Z0ZTXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL2NkeC9LY29uZmlnLTctXFxuZHJpdmVycy92ZmlvL2NkeC9LY29uZmlnOjg6Y29uZmlnIFZGSU9fQ0RYXFxuZHJpdmVycy92ZmlvL2NkeC9LY29uZmlnLTktXFx0dHJpc3RhdGUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgQ0RYIGJ1cyBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnPTE9bWVudSBcXFwiVkZJTyBzdXBwb3J0IGZvciBGU0xfTUMgYnVzIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctMy1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWc6NDpjb25maWcgVkZJT19GU0xfTUNcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctNS1cXHR0cmlzdGF0ZSBcXFwiVkZJTyBzdXBwb3J0IGZvciBRb3JJUSBEUEFBMiBmc2wtbWMgYnVzIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vbWRldi9LY29uZmlnLTItXFxuZHJpdmVycy92ZmlvL21kZXYvS2NvbmZpZzozOmNvbmZpZyBWRklPX01ERVZcXG5kcml2ZXJzL3ZmaW8vbWRldi9LY29uZmlnLTQtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yPW1lbnUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgUENJIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNC1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTpjb25maWcgVkZJT19QQ0lfQ09SRVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy02LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctOS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MTA6Y29uZmlnIFZGSU9fUENJX0lOVFhcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTEtXFx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTEzLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxNDpjb25maWcgVkZJT19QQ0lcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTUtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgUENJIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yMz1pZiBWRklPX1BDSVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoyNDpjb25maWcgVkZJT19QQ0lfVkdBXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIkdlbmVyaWMgVkZJTyBQQ0kgc3VwcG9ydCBmb3IgVkdBIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzMtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjM0OmNvbmZpZyBWRklPX1BDSV9JR0RcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzUtXFx0Ym9vbCBcXFwiR2VuZXJpYyBWRklPIFBDSSBleHRlbnNpb25zIGZvciBJbnRlbCBncmFwaGljcyAoR1ZULWQpXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTQ1PWVuZGlmXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ2LVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo0Nzpjb25maWcgVkZJT19QQ0lfWkRFVl9LVk1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgczM5MHggS1ZNIHBhc3N0aHJvdWdoXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU3LVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo1ODpjb25maWcgVkZJT19QQ0lfRE1BQlVGXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVxcdGRlZl9ib29sIHkgaWYgVkZJT19QQ0lfQ09SRSBcXHUwMDI2XFx1MDAyNiBQQ0lfUDJQRE1BIFxcdTAwMjZcXHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZz0yPW1lbnUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgcGxhdGZvcm0gZGV2aWNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnLTQtXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWc6NTpjb25maWcgVkZJT19QTEFURk9STV9CQVNFXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctNi1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctOC1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vS2NvbmZpZzo5OmNvbmZpZyBWRklPX1BMQVRGT1JNXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctMTAtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgcGxhdGZvcm0gZGV2aWNlXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWctMTgtXFxuZHJpdmVycy92ZmlvL3BsYXRmb3JtL0tjb25maWc6MTk6Y29uZmlnIFZGSU9fQU1CQVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnLTIwLVxcdHRyaXN0YXRlIFxcXCJWRklPIHN1cHBvcnQgZm9yIEFNQkEgZGV2aWNlcyAoREVQUkVDQVRFRClcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZz0yPWlmIFZGSU9fUExBVEZPUk1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZzozOmNvbmZpZyBWRklPX1BMQVRGT1JNX0NBTFhFREFYR01BQ19SRVNFVFxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgY2FseGVkYSB4Z21hYyByZXNldCAoREVQUkVDQVRFRClcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy05LVxcbmRyaXZlcnMvdmZpby9wbGF0Zm9ybS9yZXNldC9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BMQVRGT1JNX0FNRFhHQkVfUkVTRVRcXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy0xMS1cXHR0cmlzdGF0ZSBcXFwiVkZJTyBzdXBwb3J0IGZvciBBTUQgWEdCRSByZXNldCAoREVQUkVDQVRFRClcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy0xNi1cXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZzoxNzpjb25maWcgVkZJT19QTEFURk9STV9CQ01GTEVYUk1fUkVTRVRcXG5kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vcmVzZXQvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiVkZJTyBzdXBwb3J0IGZvciBCcm9hZGNvbSBGbGV4Uk0gcmVzZXQgKERFUFJFQ0FURUQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDoxNjoxNy43MjM1MDY5OTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjE5MjI1NzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcywgdGhpbmtpbmcgb3V0IGxvdWQ6XG5cbioqRGl2aW5nIGludG8gVkZJTyBhbmQgS1ZNIEludGVyYWN0aW9uKipcblxuUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBWRklPIGFuZCBLVk0gYXJlIHRhbGtpbmcgdG8gZWFjaCBvdGhlciwgYW5kIHdoYXQgdGhlIGtleSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCBhcmUuIEknbGwgc3RhcnQgYnkgZm9jdXNpbmcgb24gYHZpcnQva3ZtL3ZmaW8uY2AuIFRoYXQncyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBmb3IgdGhlIFZGSU8gc2lkZSBvZiB0aGluZ3MuXG5cbk15IG5leHQgbW92ZSBpcyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IGB2aXJ0L2t2bS92ZmlvLmNgIGdldHMgYnVpbHQgaW50byB0aGUga2VybmVsLiBUaGUgTWFrZWZpbGUgd2lsbCBiZSB0aGUga2V5IHRoZXJlLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGJ1aWxkIHByb2Nlc3MgdG8gc2VlIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGFueSByZWxldmFudCBjb21waWxlciBmbGFncyBvciBjb25kaXRpb25zLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgbW9kdWxlIGlzIGluY2x1ZGVkIGludG8gdGhlIGdyZWF0ZXIga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM5NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjE2OjE5Ljk0MjczNjExNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjk5ODcyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL01ha2VmaWxlLmt2bT04PWt2bS15IDo9ICQoS1ZNKS9rdm1fbWFpbi5vICQoS1ZNKS9ldmVudGZkLm8gJChLVk0pL2JpbmFyeV9zdGF0cy5vXFxudmlydC9rdm0vTWFrZWZpbGUua3ZtOjk6a3ZtLSQoQ09ORklHX0tWTV9WRklPKSArPSAkKEtWTSkvdmZpby5vXFxudmlydC9rdm0vTWFrZWZpbGUua3ZtLTEwLWt2bS0kKENPTkZJR19LVk1fTU1JTykgKz0gJChLVk0pL2NvYWxlc2NlZF9tbWlvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MTY6MjAuMDI1NzQ1MDk1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2NzI0NjY2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBDT05GSUdfS1ZNX1ZGSU8gRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBDT05GSUdfS1ZNX1ZGSU9gLiBJdCdzIGEga2V5IHN5bWJvbCwgc28gaXQgc2hvdWxkIGJlIHVzZWQgcHJldHR5IHdpZGVseS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgaG93IGl0J3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgd2hlcmUgYW5kIGhvdyB0aGUgVkZJTyBzdXBwb3J0IGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcuIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGBncmVwYCBvciBtYXliZSBhIG1vcmUgc29waGlzdGljYXRlZCBzZWFyY2ggdGhyb3VnaCB0aGUga2VybmVsJ3Mgc291cmNlIHRyZWUgYW5kIGNvbmZpZyBmaWxlcy4gVGhlIGdvYWwgaXMgdG8gZXN0YWJsaXNoIHRoZSBjb21wbGV0ZSBkZXBlbmRlbmN5IGNoYWluIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBsZWFkIHRvIGl0cyBhY3RpdmF0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgS1ZNIGNvbXBvbmVudHMuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBsYXJnZXIga2VybmVsIGZyYW1ld29yay4gSSdtIHRoaW5raW5nIG9mIGBLY29uZmlnYCBmaWxlcyBhbmQgdGhlaXIgaW5jbHVzaW9uIGhpZXJhcmNoaWVzLiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NzAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDoxNjoyMi4zOTI5OTUzODZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTUyMTI2MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9WRklPXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL0tjb25maWc9NTk9Y29uZmlnIEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctNjEtXFxudmlydC9rdm0vS2NvbmZpZzo2Mjpjb25maWcgS1ZNX1ZGSU9cXG52aXJ0L2t2bS9LY29uZmlnLTYzLSAgICAgICBib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjE2OjI0LjU0ODIxOTgzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NDQ4NDcyMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IFZGSU8gVXNlciBTZWxlY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIGEgY29uY2lzZSBvbmU6IFwiTGV0J3Mgc2VlIHdobyBzZWxlY3RzIEtWTV9WRklPLlwiIEl0IGltbWVkaWF0ZWx5IGJyaW5ncyB0byBtaW5kIGEgc3BlY2lmaWMgc2NlbmFyaW8uIEknbSBsaWtlbHkgdGhpbmtpbmcgYWJvdXQgbW9uaXRvcmluZywgcGVyaGFwcyBhIHN5c3RlbSBjb25maWd1cmF0aW9uLCBhIGRldmVsb3BtZW50IHByb2Nlc3MsIG9yIG1heWJlIGV2ZW4gYSB1c2VyIHN1cnZleS4gVGhlIHRyaWdnZXIgaXMgdGhlIG1lbnRpb24gb2YgS1ZNX1ZGSU8gd2hpY2ggaW1tZWRpYXRlbHkgcGxhY2VzIG1lIGluIHRoZSBjb250ZXh0IG9mIHZpcnR1YWxpemF0aW9uLCBoYXJkd2FyZSBwYXNzdGhyb3VnaCwgYW5kIEkvTyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uXG5cblRoZSBpbXBsaWVkIHF1ZXN0aW9uIGlzLCBcIldobyBpcyBsZXZlcmFnaW5nIFZGSU8gKFZpcnR1YWwgRnVuY3Rpb24gSS9PKSB3aXRoaW4gYSBLVk0gKEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUpIGVudmlyb25tZW50P1wiIFRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBvYnNlcnZhdGlvbjsgaXQncyBhIGRhdGEtZ2F0aGVyaW5nIGV4ZXJjaXNlLiBJJ20gdHJ5aW5nIHRvIGlkZW50aWZ5IGEgc3BlY2lmaWMgZGVtb2dyYXBoaWMgb3IgdXNlciBwcm9maWxlIHJlbGF0ZWQgdG8gYWR2YW5jZWQgdmlydHVhbGl6YXRpb24gdGVjaG5pcXVlcy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZ2FtZXJzLCByZXNlYXJjaGVycyB3b3JraW5nIHdpdGggc3BlY2lhbGl6ZWQgaGFyZHdhcmUsIG9yIHBlcmhhcHMgZW50ZXJwcmlzZSB1c2VycyBjb25zb2xpZGF0aW5nIHdvcmtsb2Fkcz9cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgbGlrZWx5IHRvIGlkZW50aWZ5IHRoZSB1c2UgY2FzZXMgYW5kIHRlY2huaWNhbCBrbm93bGVkZ2UgYmFzZSBzdXJyb3VuZGluZyB0aGUgcGVvcGxlIHRoYXQgYXJlIHVzaW5nIHRoZSBoYXJkd2FyZSBwYXNzLXRocm91Z2ggY2FwYWJpbGl0aWVzIG9mIEtWTV9WRklPLiBJJ20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgYXBwbGljYXRpb25zLCB1bmRlcmx5aW5nIGhhcmR3YXJlLCBhbmQgY29uZmlndXJhdGlvbiBjaG9pY2VzIGJlaW5nIG1hZGUuIEl0IHN1Z2dlc3RzIHRoYXQgdGhlcmUgaXMgYSBkZWZpbmVkIHByb2JsZW0gdG8gc29sdmUgb3IgYSBkYXRhIGFuYWx5c2lzIHByb2plY3QgdG8gcGVyZm9ybS4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgSSBhbSBwcm9iYWJseSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlIGltcGxpY2F0aW9ucyBvZiBzZWxlY3RpbmcgYW5kIGRlcGxveWluZyBWRklPLCBhcyB3ZWxsIGFzIHRoZSBpbXBsaWNhdGlvbnMgb2Ygbm90IGRvaW5nIHNvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA4NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjE2OjI3LjA5MzA2OTg2OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5MTE1MTQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgS1ZNX1ZGSU9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz0yMD1tZW51Y29uZmlnIEtWTVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0yNy1cXHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjI4OlxcdHNlbGVjdCBLVk1fVkZJT1xcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMjktXFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMi1cXHRzZWxlY3QgS1ZNX0NPTU1PTlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMzpcXHRzZWxlY3QgS1ZNX1ZGSU9cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjQtXFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZz0xOT1jb25maWcgS1ZNXFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjktXFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MzA6XFx0c2VsZWN0IEtWTV9WRklPXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTMxLVxcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTQ0LVxcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo0NTpcXHRzZWxlY3QgS1ZNX1ZGSU9cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00Ni1cXHRzZWxlY3QgSEFWRV9LVk1fUE1fTk9USUZJRVIgaWYgUE1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MTY6MjkuNjg0MjI3NTg2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NDE4MDQ2NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gUmV2aWV3IGZvciBLVk0gYW5kIFZGSU8qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSB4ODYga2VybmVsIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBLVk0gYW5kIFZGSU8uIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGF0IGBDT05GSUdfS1ZNX1g4NmAgaW1wbGllcyBgS1ZNX1ZGSU9gLCB3aGljaCBtYWtlcyBzZW5zZTsgdGhleSBvZnRlbiBnbyBoYW5kLWluLWhhbmQgaW4gYSB2aXJ0dWFsaXphdGlvbiBzZXR1cC4gSSdtIG5vdGluZyB0aGF0IGBDT05GSUdfS1ZNYCBhbmQgYENPTkZJR19WRklPYCBhcmUgdGhlIGNvcmUgY29uZmlnIG9wdGlvbnMgaGVyZS5cblxuTm93LCBsZXQncyBhbHNvIGNoZWNrIHRoaXMgYEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR2Agb3B0aW9uIOKAkyB0aGF0J3Mgc29tZXRoaW5nIHdvcnRoIGludmVzdGlnYXRpbmcuIEknbGwgbWFrZSBhIG1lbnRhbCBub3RlIHRvIGZpbmQgdGhhdCBpbiBgYXJjaC94ODYva3ZtL0tjb25maWdgIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyB0aGVyZS4gSSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuLi4gc28gSSBtdXN0IGNoZWNrIHdobyBzZWxlY3RzIGBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3IgZmVhdHVyZXMgcmVseSBvbiB0aGlzLiBUaGlzIGlzIGFsbCBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgS1ZNIGFuZCBWRklPIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODU4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MTY6MzIuMjI2MDM0NjA1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ4OTM2Nzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZz0xMjU9Y29uZmlnIERSTV9JOTE1X0dWVF9LVk1HVFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZy0xMzEtXFx0c2VsZWN0IERSTV9JOTE1X0dWVFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWc6MTMyOlxcdHNlbGVjdCBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmlnLTEzMy1cXHRzZWxlY3QgVkZJT19NREVWXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjE2OjM0LjM3NDk3NjQ4OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjYyNDQ3OTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBLVk0gUGFnZSBUcmFja2luZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcmAgaXMgYWN0dWFsbHkgY29tcGlsZWQgd2l0aGluIHRoZSB4ODYgS1ZNIGNvZGUuIFRoaXMgZnVuY3Rpb24gaXMgcHJldHR5IGNyaXRpY2FsIGZvciB0cmFja2luZyBwYWdlIG1vZGlmaWNhdGlvbnMsIHNvIGtub3dpbmcgaXRzIGJ1aWxkIGxvY2F0aW9uIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGhvdyBpdCdzIGludGVncmF0ZWQgaW50byB0aGUgbGFyZ2VyIEtWTSBhcmNoaXRlY3R1cmUuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgYXJjaC94ODYva3ZtL01ha2VmaWxlYC4gVGhhdCBmaWxlIHNob3VsZCBvcmNoZXN0cmF0ZSB0aGUgYnVpbGQgb2YgYWxsIHRoZSByZWxldmFudCBLVk0gY29tcG9uZW50cyBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoZXJlIHRoYXQgbm90aWZpZXIgcmVnaXN0cmF0aW9uIGlzIGFjdHVhbGx5IGJyb3VnaHQgaW50byB0aGUgcGljdHVyZS4gRmluZGluZyBpdCdzIGJ1aWxkIHJ1bGUgc2hvdWxkIGlsbHVtaW5hdGUgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgcmVzdCBvZiB0aGUgS1ZNIGluZnJhc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzMxNywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjE2OjM2LjYzNzQyNjM0MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkxNjMzNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV90cmFja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL01ha2VmaWxlPTg9a3ZtLXlcXHRcXHRcXHQrPSB4ODYubyBlbXVsYXRlLm8gaXJxLm8gbGFwaWMubyBjcHVpZC5vIG1zcnMubyBwbXUubyByZWdzLm8gXFxcXFxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZTo5OlxcdFxcdFxcdCAgIG10cnIubyBkZWJ1Z2ZzLm8gbW11L21tdS5vIG1tdS9wYWdlX3RyYWNrLm8gbW11L3NwdGUub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xMC1cXG4tLVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZT01OT1leHBvcnRzX2dyZXBfdHJhaWxlciA6PSAtLWluY2x1ZGU9JyouW2NoXScgLW5ydyAkKHNyY3RyZWUpL3ZpcnQva3ZtICQoc3JjdHJlZSkvYXJjaC94ODYva3ZtIHwgXFxcXFxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZTo2MDpcXHRcXHRcXHRncmVwIC12IC1lIGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyIFxcXFxcXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6NjE6XFx0XFx0XFx0XFx0LWUga3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllciBcXFxcXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTYyLVxcdFxcdFxcdFxcdC1lIGt2bV93cml0ZV90cmFja19hZGRfZ2ZuIFxcXFxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMjctI2luY2x1ZGUgXFxcImt2bV9lbXVsYXRlLmhcXFwiXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoyODojaW5jbHVkZSBcXFwicGFnZV90cmFjay5oXFxcIlxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMjktI2luY2x1ZGUgXFxcImNwdWlkLmhcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQwNjA9c3RhdGljIGludCBtbXVfZmlyc3Rfc2hhZG93X3Jvb3RfYWxsb2Moc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00MDg3LVxcdGlmIChrdm1fbWVtc2xvdHNfaGF2ZV9ybWFwcyhrdm0pIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0MDg4OlxcdCAgICBrdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19lbmFibGVkKGt2bSkpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00MDg5LVxcdFxcdGdvdG8gb3V0X3N1Y2Nlc3M7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQxMDYtXFx0XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDEwNzpcXHRcXHRcXHRyID0ga3ZtX3BhZ2VfdHJhY2tfd3JpdGVfdHJhY2tpbmdfYWxsb2Moc2xvdCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00MTA4LVxcdFxcdFxcdGlmIChyKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NTIwPXN0YXRpYyBpbnQgaGFuZGxlX21taW9fcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBhZGRyLCBib29sIGRpcmVjdClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDU1My1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ1NTQ6c3RhdGljIGJvb2wgcGFnZV9mYXVsdF9oYW5kbGVfcGFnZV90cmFjayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NTU1LVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00ODQwPXN0YXRpYyBpbnQgZGlyZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00ODQ3LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDg0ODpcXHRpZiAocGFnZV9mYXVsdF9oYW5kbGVfcGFnZV90cmFjayh2Y3B1LCBmYXVsdCkpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00ODQ5LVxcdFxcdHJldHVybiBSRVRfUEZfV1JJVEVfUFJPVEVDVEVEO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00OTM1PXN0YXRpYyBpbnQga3ZtX3RkcF9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ5MzktXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0OTQwOlxcdGlmIChwYWdlX2ZhdWx0X2hhbmRsZV9wYWdlX3RyYWNrKHZjcHUsIGZhdWx0KSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ5NDEtXFx0XFx0cmV0dXJuIFJFVF9QRl9XUklURV9QUk9URUNURUQ7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yMC0jaW5jbHVkZSBcXFwibW11X2ludGVybmFsLmhcXFwiXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MjE6I2luY2x1ZGUgXFxcInBhZ2VfdHJhY2suaFxcXCJcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yMi1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYz0yMz1zdGF0aWMgYm9vbCBrdm1fZXh0ZXJuYWxfd3JpdGVfdHJhY2tpbmdfZW5hYmxlZChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yNy1cXHQgKiBSZWFkIGV4dGVybmFsX3dyaXRlX3RyYWNraW5nX2VuYWJsZWQgYmVmb3JlIHJlbGF0ZWQgcG9pbnRlcnMuICBQYWlyc1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI4OlxcdCAqIHdpdGggdGhlIHNtcF9zdG9yZV9yZWxlYXNlIGluIGt2bV9wYWdlX3RyYWNrX3dyaXRlX3RyYWNraW5nX2VuYWJsZSgpLlxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTI5LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMzUtXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MzY6Ym9vbCBrdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19lbmFibGVkKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0zNy17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy00MS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzo0Mjp2b2lkIGt2bV9wYWdlX3RyYWNrX2ZyZWVfbWVtc2xvdChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTQzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTQ3LVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjQ4OnN0YXRpYyBpbnQgX19rdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19hbGxvYyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTQ5LVxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIG5wYWdlcylcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTU5LVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjYwOmludCBrdm1fcGFnZV90cmFja19jcmVhdGVfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtNjEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtNjMte1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjY0OlxcdGlmICgha3ZtX3BhZ2VfdHJhY2tfd3JpdGVfdHJhY2tpbmdfZW5hYmxlZChrdm0pKVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTY1LVxcdFxcdHJldHVybiAwO1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTY2LVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjY3OlxcdHJldHVybiBfX2t2bV9wYWdlX3RyYWNrX3dyaXRlX3RyYWNraW5nX2FsbG9jKHNsb3QsIG5wYWdlcyk7XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtNjgtfVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTY5LVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjcwOmludCBrdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19hbGxvYyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTcxLXtcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzo3MjpcXHRyZXR1cm4gX19rdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19hbGxvYyhzbG90LCBzbG90LVxcdTAwM2VucGFnZXMpO1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTczLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jPTkwPXZvaWQgX19rdm1fd3JpdGVfdHJhY2tfYWRkX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy05Ny1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzo5ODpcXHRpZiAoS1ZNX0JVR19PTigha3ZtX3BhZ2VfdHJhY2tfd3JpdGVfdHJhY2tpbmdfZW5hYmxlZChrdm0pLCBrdm0pKVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTk5LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jPTExMz12b2lkIF9fa3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4oc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTIwLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjEyMTpcXHRpZiAoS1ZNX0JVR19PTigha3ZtX3BhZ2VfdHJhY2tfd3JpdGVfdHJhY2tpbmdfZW5hYmxlZChrdm0pLCBrdm0pKVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTEyMi1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYz0xNDY9Ym9vbCBrdm1fZ2ZuX2lzX3dyaXRlX3RyYWNrZWQoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTUzLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjE1NDpcXHRpZiAoIWt2bV9wYWdlX3RyYWNrX3dyaXRlX3RyYWNraW5nX2VuYWJsZWQoa3ZtKSlcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0xNTUtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTcxLSNpZmRlZiBDT05GSUdfS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MTcyOnZvaWQga3ZtX3BhZ2VfdHJhY2tfY2xlYW51cChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTczLXtcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoxNzQ6XFx0c3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX2hlYWQgKmhlYWQ7XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTc1LVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTc5LVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjE4MDppbnQga3ZtX3BhZ2VfdHJhY2tfaW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTgxLXtcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoxODI6XFx0c3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX2hlYWQgKmhlYWQ7XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMTgzLVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM9MTg5PXN0YXRpYyBpbnQga3ZtX2VuYWJsZV9leHRlcm5hbF93cml0ZV90cmFja2luZyhzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yMDQtXFx0ICovXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MjA1OlxcdGlmIChrdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19lbmFibGVkKGt2bSkpXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMjA2LVxcdFxcdGdvdG8gb3V0X3N1Y2Nlc3M7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yMTgtXFx0XFx0XFx0ICovXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MjE5OlxcdFxcdFxcdHIgPSBrdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19hbGxvYyhzbG90KTtcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yMjAtXFx0XFx0XFx0aWYgKHIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yMzktICovXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MjQwOmludCBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoyNDE6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbilcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yNDIte1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI0MzpcXHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfaGVhZCAqaGVhZDtcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yNDQtXFx0c3RydWN0IGt2bSAqa3ZtID0gZmlsZV90b19rdm0oZmlsZSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yNjQtfVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI2NTpFWFBPUlRfU1lNQk9MX0dQTChrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcik7XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMjY2LVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMjY4LSAqIHN0b3AgcmVjZWl2aW5nIHRoZSBldmVudCBpbnRlcmNlcHRpb24uIEl0IGlzIHRoZSBvcHBvc2VkIG9wZXJhdGlvbiBvZlxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI2OTogKiBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcigpLlxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTI3MC0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzoyNzE6dm9pZCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLFxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI3MjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbilcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yNzMte1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI3NDpcXHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfaGVhZCAqaGVhZDtcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yNzUtXFx0c3RydWN0IGt2bSAqa3ZtID0gZmlsZV90b19rdm0oZmlsZSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yODUtfVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI4NjpFWFBPUlRfU1lNQk9MX0dQTChrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKTtcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yODctXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yOTQtICovXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6Mjk1OnZvaWQgX19rdm1fcGFnZV90cmFja193cml0ZShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgY29uc3QgdTggKm5ldywgaW50IGJ5dGVzKVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTI5Ni17XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6Mjk3OlxcdHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9oZWFkICpoZWFkO1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jOjI5ODpcXHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbjtcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYy0yOTktXFx0aW50IGlkeDtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTMxNy0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzozMTg6dm9pZCBrdm1fcGFnZV90cmFja19kZWxldGVfc2xvdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmMtMzE5LXtcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYzozMjA6XFx0c3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX2hlYWQgKmhlYWQ7XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmM6MzIxOlxcdHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpuO1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jLTMyMi1cXHRpbnQgaWR4O1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtNi1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaDo3OiNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX3BhZ2VfdHJhY2suaFxcdTAwM2VcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaC04LVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTktXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6MTA6Ym9vbCBrdm1fcGFnZV90cmFja193cml0ZV90cmFja2luZ19lbmFibGVkKHN0cnVjdCBrdm0gKmt2bSk7XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6MTE6aW50IGt2bV9wYWdlX3RyYWNrX3dyaXRlX3RyYWNraW5nX2FsbG9jKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpO1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTEyLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oOjEzOnZvaWQga3ZtX3BhZ2VfdHJhY2tfZnJlZV9tZW1zbG90KHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpO1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oOjE0OmludCBrdm1fcGFnZV90cmFja19jcmVhdGVfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtMTUtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg9MjM9Ym9vbCBrdm1fZ2ZuX2lzX3dyaXRlX3RyYWNrZWQoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtMjYtI2lmZGVmIENPTkZJR19LVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaDoyNzppbnQga3ZtX3BhZ2VfdHJhY2tfaW5pdChzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oOjI4OnZvaWQga3ZtX3BhZ2VfdHJhY2tfY2xlYW51cChzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTI5LVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oOjMwOnZvaWQgX19rdm1fcGFnZV90cmFja193cml0ZShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgY29uc3QgdTggKm5ldywgaW50IGJ5dGVzKTtcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaDozMTp2b2lkIGt2bV9wYWdlX3RyYWNrX2RlbGV0ZV9zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCk7XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtMzItXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6MzM6c3RhdGljIGlubGluZSBib29sIGt2bV9wYWdlX3RyYWNrX2hhc19leHRlcm5hbF91c2VyKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaC0zNC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaC0zNy0jZWxzZVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oOjM4OnN0YXRpYyBpbmxpbmUgaW50IGt2bV9wYWdlX3RyYWNrX2luaXQoc3RydWN0IGt2bSAqa3ZtKSB7IHJldHVybiAwOyB9XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6Mzk6c3RhdGljIGlubGluZSB2b2lkIGt2bV9wYWdlX3RyYWNrX2NsZWFudXAoc3RydWN0IGt2bSAqa3ZtKSB7IH1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaC00MC1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaDo0MTpzdGF0aWMgaW5saW5lIHZvaWQgX19rdm1fcGFnZV90cmFja193cml0ZShzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSxcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaC00Mi1cXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHU4ICpuZXcsIGludCBieXRlcykgeyB9XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6NDM6c3RhdGljIGlubGluZSB2b2lkIGt2bV9wYWdlX3RyYWNrX2RlbGV0ZV9zbG90KHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaC00NC1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KSB7IH1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaC00NS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaDo0NjpzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3BhZ2VfdHJhY2tfaGFzX2V4dGVybmFsX3VzZXIoc3RydWN0IGt2bSAqa3ZtKSB7IHJldHVybiBmYWxzZTsgfVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTQ3LVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtNDktXFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6NTA6c3RhdGljIGlubGluZSB2b2lkIGt2bV9wYWdlX3RyYWNrX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxcbmFyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5oLTUxLVxcdFxcdFxcdFxcdFxcdGNvbnN0IHU4ICpuZXcsIGludCBieXRlcylcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suaC01Mi17XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmg6NTM6XFx0X19rdm1fcGFnZV90cmFja193cml0ZSh2Y3B1LVxcdTAwM2Vrdm0sIGdwYSwgbmV3LCBieXRlcyk7XFxuYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmgtNTQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmg9ODA0PXN0YXRpYyBpbnQgRk5BTUUocGFnZV9mYXVsdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oLTgzMi1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmg6ODMzOlxcdGlmIChwYWdlX2ZhdWx0X2hhbmRsZV9wYWdlX3RyYWNrKHZjcHUsIGZhdWx0KSkge1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaC04MzQtXFx0XFx0c2hhZG93X3BhZ2VfdGFibGVfY2xlYXJfZmxvb2QodmNwdSwgZmF1bHQtXFx1MDAzZWFkZHIpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTI3LSNpbmNsdWRlIFxcXCJrdm1fZW11bGF0ZS5oXFxcIlxcbmFyY2gveDg2L2t2bS94ODYuYzoyODojaW5jbHVkZSBcXFwibW11L3BhZ2VfdHJhY2suaFxcXCJcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjktI2luY2x1ZGUgXFxcIng4Ni5oXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTUwNjE9c3RhdGljIGludCBlbXVsYXRvcl93cml0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01MDY4LVxcdFxcdHJldHVybiAwO1xcbmFyY2gveDg2L2t2bS94ODYuYzo1MDY5OlxcdGt2bV9wYWdlX3RyYWNrX3dyaXRlKHZjcHUsIGdwYSwgdmFsLCBieXRlcyk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUwNzAtXFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTI2MD1zdGF0aWMgaW50IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTMzMi1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTMzMzpcXHRrdm1fcGFnZV90cmFja193cml0ZSh2Y3B1LCBncGEsIG5ldywgYnl0ZXMpO1xcbmFyY2gveDg2L2t2bS94ODYuYy01MzM0LVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTk4NDM9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTg1OC1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTg1OTpcXHRyZXQgPSBrdm1fcGFnZV90cmFja19pbml0KGt2bSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk4NjAtXFx0aWYgKHJldClcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy05ODY0LVxcdGlmIChyZXQpXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjk4NjU6XFx0XFx0Z290byBvdXRfY2xlYW51cF9wYWdlX3RyYWNrO1xcbmFyY2gveDg2L2t2bS94ODYuYy05ODY2LVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MDktXFx0a3ZtX21tdV91bmluaXRfdm0oa3ZtKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTkxMDpvdXRfY2xlYW51cF9wYWdlX3RyYWNrOlxcbmFyY2gveDg2L2t2bS94ODYuYzo5OTExOlxcdGt2bV9wYWdlX3RyYWNrX2NsZWFudXAoa3ZtKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkxMi1vdXQ6XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTAwMTQ9dm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDA0MC1cXHRrdm1fbW11X3VuaW5pdF92bShrdm0pO1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMDA0MTpcXHRrdm1fcGFnZV90cmFja19jbGVhbnVwKGt2bSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDQyLVxcdGt2bV94ZW5fZGVzdHJveV92bShrdm0pO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwMDU3PXZvaWQga3ZtX2FyY2hfZnJlZV9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDA2Ny1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwNjg6XFx0a3ZtX3BhZ2VfdHJhY2tfZnJlZV9tZW1zbG90KHNsb3QpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMDA2OS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTAwOTM9c3RhdGljIGludCBrdm1fYWxsb2NfbWVtc2xvdF9tZXRhZGF0YShzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxNDYtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMTQ3OlxcdGlmIChrdm1fcGFnZV90cmFja19jcmVhdGVfbWVtc2xvdChrdm0sIHNsb3QsIG5wYWdlcykpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMTQ4LVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTAxNzg9aW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxODYtXFx0ICovXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMTg3OlxcdGlmIChjaGFuZ2UgPT0gS1ZNX01SX01PVkUgXFx1MDAyNlxcdTAwMjYga3ZtX3BhZ2VfdHJhY2tfaGFzX2V4dGVybmFsX3VzZXIoa3ZtKSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxODgtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTAzMzg9dm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAzNDMtXFx0aWYgKGNoYW5nZSA9PSBLVk1fTVJfREVMRVRFKVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMDM0NDpcXHRcXHRrdm1fcGFnZV90cmFja19kZWxldGVfc2xvdChrdm0sIG9sZCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMzQ1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDoxNjozNi43MTY1OTYxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNjYwNzM0Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTS1WRklPIEludGVncmF0aW9uOiBBIENvbmN1cnJlbmN5IERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgdG91Y2hlcyBLVk0gYW5kIFZGSU8sIGFuZCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBob3cgS1ZNIFZNcyBhbmQgVkZJTyBkZXZpY2VzIGFyZSBsaW5rZWQgYXQgdGhlIGZpbGUgZGVzY3JpcHRvciBsZXZlbC4gSSdtIGZvY3VzaW5nIG9uIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIHNwZWNpZmljYWxseSwgZ2l2ZW4gdGhlIGluaXRpYWwgY29udGV4dCBvZiBgcGFnZV90cmFjay5jYC5cblxuRmlyc3QsIEkgc2VlIHRoZSBgcGFnZV90cmFjay5jYCBjaGFuZ2VzIGludHJvZHVjZSBmaWxlLWJhc2VkIG5vdGlmaWVyIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhhdCBtZWFucyB0aGUgb2xkIEtWTSBzdHJ1Y3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHVzZWQuIFRoaXMgc2lnbmFscyBhIHNoaWZ0IHRvd2FyZHMgZmlsZS1kZXNjcmlwdG9yLWJhc2VkIG9wZXJhdGlvbnMuXG5cbkRpdmluZyBpbnRvIHRoZSBkaWZmLCBJIG5vdGUgdGhlIHBlcnZhc2l2ZSBjaGFuZ2UgZnJvbSB1c2luZyBgc3RydWN0IGt2bSAqYCBmb3IgcmVwcmVzZW50aW5nIHRoZSBLVk0gdG8gdXNpbmcgYHN0cnVjdCBmaWxlICpgLCB0aHJvdWdob3V0IHRoZSBWRklPIGFuZCBLVk0gY29kZS4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgc2hpZnQuIEtleSBmdW5jdGlvbnMgbGlrZSBga3ZtX3BhZ2VfdHJhY2tfKmAsIGB2ZmlvX2dyb3VwX3NldF9rdm1gLCBhbmQgc2V2ZXJhbCBWRklPIGRldmljZS9ncm91cCBvcGVyYXRpb25zIGFyZSBhbGwgcmVmYWN0b3JlZCB0byB3b3JrIHdpdGggYHN0cnVjdCBmaWxlICpgIGFuZCB1c2UgZmlsZSBvcGVyYXRpb25zLiBUaGUgdXNhZ2Ugb2YgYGdldF9maWxlYCBhbmQgYGZwdXRgIGluIHBsYWNlIG9mIGBrdm1fZ2V0X2t2bWAgYW5kIGBrdm1fcHV0X2t2bWAgaXMgdGhlIGNyaXRpY2FsIHBpZWNlIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgY29uY3VycmVuY3kgaW1wbGljYXRpb25zLiBLVk0tVkZJTyBpcyBhIGNsYXNzaWMgZXhhbXBsZSBvZiBjb21wbGV4IHJlc291cmNlIG1hbmFnZW1lbnQgaW52b2x2aW5nIHJlZmNvdW50aW5nLiBUaGUgY29kZSBub3cgbGlua3MgYSBWRklPIGRldmljZS9ncm91cCB0byBhIEtWTSBmaWxlIHRocm91Z2ggYGdldF9maWxlYCBhbmQgYGZwdXRgLiBUaGlzIHN1Z2dlc3RzIGEgcmFjZSBjb25kaXRpb24gaXMgcG9zc2libGUgYmV0d2VlbiB0aGUgY2xvc3VyZSBvZiB0aGUgVk0gZmlsZSBhbmQgdGhlIFZGSU8gb3BlcmF0aW9ucyBvciBga3ZtX3ZmaW9fZmlsZV9hZGRgLiBJIHNlZSBpbiBga3ZtX2hvc3QuaGAgYSBjb21tZW50IHRoYXQgZGVzY3JpYmVzIGEgbWVjaGFuaXNtIHZpYSBgZ2V0X2ZpbGVfYWN0aXZlYCB0byBwcmV2ZW50IHBpbm5pbmcgb2YgdGhlIFZNLCB3aGljaCBzdXBwb3J0cyBteSBjdXJyZW50IHN1c3BpY2lvbiB0aGF0IHRoaXMgYXJlYSBpcyBwcm9uZSB0byB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBUaGVzZSBhcmUgdGV4dGJvb2sgaW5kaWNhdG9ycyBvZiBwb3NzaWJsZSBjb25jdXJyZW5jeSBidWdzLCByZWZjb3VudCBpbmNvbnNpc3RlbmNpZXMsIGFuZCBwb3RlbnRpYWwgZGVhZGxvY2tzLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCB0byBmdXp6aW5nIVxuXG5Ob3csIHRoZSBzeW1ib2wgc2VsZWN0aW9uIGZvciBkZWVwZXIgdGVzdGluZy4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZS5cblxuSGVyZSdzIG15IHJlZmluZWQgbGlzdCBvZiBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZnJvbSB0aGUgZGlmZjpcbiogICBga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdm1gIChiZWNhdXNlIGl0J3MgdGhlIHN0YXJ0IHBvaW50KVxuKiAgIGBrdm1fdm1fcmVsZWFzZWAgKGNyaXRpY2FsIGVuZHBvaW50IGZvciByZXNvdXJjZSBjbGVhbnVwKVxuKiAgIGBmaWxlX3RvX2t2bWAgKGEgY3JpdGljYWwgYmFja2xpbmshKVxuKiAgIGBrdm1fdmZpb19maWxlX2FkZGAgYW5kIGBrdm1fdmZpb19maWxlX3NldF9rdm1gIChWRklPIGludGVncmF0aW9uIGVudHJ5KVxuKiAgIGB2ZmlvX2ZpbGVfc2V0X2t2bWAgKGNvcmUgVkZJTyBkZXZpY2UgbGluayB0byBLVk0pXG4qICAgYHZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZWAgYW5kIGB2ZmlvX2RldmljZV9wdXRfa3ZtYCAoVkZJTyBkZXZpY2UgZnVuY3Rpb25zKVxuKiAgIGB2ZmlvX2dyb3VwX3NldF9rdm1gIChWRklPIGdyb3VwIGxpbmtpbmcpXG4qICAgYGt2bV9wYWdlX3RyYWNrXypgICh4ODYgc3BlY2lmaWMpXG5cbkl0J3MgY2xlYXIgdGhhdCB0aGUgZmlsZS1kZXNjcmlwdG9yIGhhbmRsaW5nIGZ1bmN0aW9ucyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50LiBUaGUgdXNhZ2Ugb2YgYGZpbGVfdG9fa3ZtYCBtYWtlcyBpdCBhIGNyaXRpY2FsIHN5bWJvbCBmb3IgYW55IGFuYWx5c2lzLlxuXG5PbiBjb25maWd1cmF0aW9uLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYEtWTWAsIGBWRklPYCwgYFZGSU9fR1JPVVBgLCBgVkZJT19ERVZJQ0VfQ0RFVmAsIGBWRklPX0NPTlRBSU5FUmAsIGBLVk1fVkZJT2AsIGFuZCBgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HYCBhcmUgc2V0LiBJJ2xsIGRvdWJsZS1jaGVjayBgZHJpdmVycy92ZmlvL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi5cblxuTXkgb3ZlcmFsbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaHNldCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyBkdWUgdG8gdGhlIGZpbGUgcmVmY291bnRpbmcgYW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBLVk0gYW5kIFZGSU8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTI0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDoxNjo0Ny4zNzczMzQxOTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmZpby9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51Y29uZmlnIFZGSU9cXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJWRklPIE5vbi1Qcml2aWxlZ2VkIHVzZXJzcGFjZSBkcml2ZXIgZnJhbWV3b3JrXFxcIlxcbiAgIDQ6XFx0XFx0c2VsZWN0IElPTU1VX0FQSVxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBJT01NVUZEIHx8ICFJT01NVUZEXFxuICAgNjpcXHRcXHRzZWxlY3QgSU5URVJWQUxfVFJFRVxcbiAgIDc6XFx0XFx0c2VsZWN0IFZGSU9fR1JPVVAgaWYgU1BBUFJfVENFX0lPTU1VIHx8IElPTU1VRkQ9blxcbiAgIDg6XFx0XFx0c2VsZWN0IFZGSU9fREVWSUNFX0NERVYgaWYgIVZGSU9fR1JPVVBcXG4gICA5OlxcdFxcdHNlbGVjdCBWRklPX0NPTlRBSU5FUiBpZiBJT01NVUZEPW5cXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgVkZJTyBwcm92aWRlcyBhIGZyYW1ld29yayBmb3Igc2VjdXJlIHVzZXJzcGFjZSBkZXZpY2UgZHJpdmVycy5cXG4gIDEyOlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vZHJpdmVyLWFwaS92ZmlvLnJzdCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IE4uXFxuICAxNTpcXHRcXG4gIDE2OlxcdGlmIFZGSU9cXG4gIDE3OlxcdGNvbmZpZyBWRklPX0RFVklDRV9DREVWXFxuICAxODpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgVkZJTyBjZGV2IC9kZXYvdmZpby9kZXZpY2VzL3ZmaW9YXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBJT01NVUZEIFxcdTAwMjZcXHUwMDI2ICFTUEFQUl9UQ0VfSU9NTVVcXG4gIDIwOlxcdFxcdGRlZmF1bHQgIVZGSU9fR1JPVVBcXG4gIDIxOlxcdFxcdGhlbHBcXG4gIDIyOlxcdFxcdCAgVGhlIFZGSU8gZGV2aWNlIGNkZXYgaXMgYW5vdGhlciB3YXkgZm9yIHVzZXJzcGFjZSB0byBnZXQgZGV2aWNlXFxuICAyMzpcXHRcXHQgIGFjY2Vzcy4gVXNlcnNwYWNlIGdldHMgZGV2aWNlIGZkIGJ5IG9wZW5pbmcgZGV2aWNlIGNkZXYgdW5kZXJcXG4gIDI0OlxcdFxcdCAgL2Rldi92ZmlvL2RldmljZXMvdmZpb1gsIGFuZCB0aGVuIGJpbmQgdGhlIGRldmljZSBmZCB3aXRoIGFuIGlvbW11ZmRcXG4gIDI1OlxcdFxcdCAgdG8gc2V0IHVwIHNlY3VyZSBETUEgY29udGV4dCBmb3IgZGV2aWNlIGFjY2Vzcy5cXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0ICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRjb25maWcgVkZJT19HUk9VUFxcbiAgMzA6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgdGhlIFZGSU8gZ3JvdXAgL2Rldi92ZmlvLyRncm91cF9pZFxcXCJcXG4gIDMxOlxcdFxcdGRlZmF1bHQgeVxcbiAgMzI6XFx0XFx0aGVscFxcbiAgMzM6XFx0XFx0ICAgVkZJTyBncm91cCBzdXBwb3J0IHByb3ZpZGVzIHRoZSB0cmFkaXRpb25hbCBtb2RlbCBmb3IgYWNjZXNzaW5nXFxuICAzNDpcXHRcXHQgICBkZXZpY2VzIHRocm91Z2ggVkZJTyBhbmQgaXMgdXNlZCBieSB0aGUgbWFqb3JpdHkgb2YgdXNlcnNwYWNlXFxuICAzNTpcXHRcXHQgICBhcHBsaWNhdGlvbnMgYW5kIGRyaXZlcnMgbWFraW5nIHVzZSBvZiBWRklPLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBZLlxcbiAgMzg6XFx0XFxuICAzOTpcXHRjb25maWcgVkZJT19DT05UQUlORVJcXG4gIDQwOlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHRoZSBWRklPIGNvbnRhaW5lciAvZGV2L3ZmaW8vdmZpb1xcXCJcXG4gIDQxOlxcdFxcdHNlbGVjdCBWRklPX0lPTU1VX1RZUEUxIGlmIE1NVSBcXHUwMDI2XFx1MDAyNiAoWDg2IHx8IFMzOTAgfHwgQVJNIHx8IEFSTTY0KVxcbiAgNDI6XFx0XFx0ZGVwZW5kcyBvbiBWRklPX0dST1VQXFxuICA0MzpcXHRcXHRkZWZhdWx0IHlcXG4gIDQ0OlxcdFxcdGhlbHBcXG4gIDQ1OlxcdFxcdCAgVGhlIFZGSU8gY29udGFpbmVyIGlzIHRoZSBjbGFzc2ljIGludGVyZmFjZSB0byBWRklPIGZvciBlc3RhYmxpc2hpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MTY6NDcuMzc3NDUyMTQ5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMzA3Mzk3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgS1ZNIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSBhbmQsIG1vcmUgcHJlY2lzZWx5LCB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBgYXJjaC94ODYva3ZtYCBkaXJlY3RvcnkuIEkgd2FudCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gS1ZNIGJlaGF2aW9yLiBJJ20gdGhpbmtpbmcgYWJvdXQgS1ZNIGdlbmVyYWxseSwgb2YgY291cnNlLCBidXQgcGFydGljdWxhcmx5IEknbSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcnBsYXkgYW5kIHNwZWNpZmljIHNldHRpbmdzIGFyb3VuZCBgS1ZNX0lOVEVMYCBhbmQgYEtWTV9BTURgLiBUaGVzZSBhcmUgdGhlIGtleSB0b2dnbGVzIGZvciBJbnRlbCBhbmQgQU1EIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCBiZXR3ZWVuIHRoZW0sIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJyb2FkZXIgS1ZNIGZlYXR1cmUgc2V0LiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIGEgc3BlY2lmaWMgZGV0YWlsIEkgYW0gbG9va2luZyBmb3IgcmVnYXJkaW5nIGEgc3BlY2lmaWMgZmVhdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgxNTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjE2OjQ5LjYwODE5NDY5MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxODpcXHRpZiBWSVJUVUFMSVpBVElPTlxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgS1ZNX1g4NlxcbiAgMjE6XFx0XFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbiAgMjI6XFx0XFx0c2VsZWN0IEtWTV9DT01NT05cXG4gIDIzOlxcdFxcdHNlbGVjdCBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXFxuICAyNDpcXHRcXHRzZWxlY3QgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xcbiAgMjU6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcXG4gIDI2OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRVxcbiAgMjc6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfVFNPXFxuICAyODpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXFxuICAyOTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fSVJRX0JZUEFTU1xcbiAgMzA6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9ST1VUSU5HXFxuICAzMTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXFxuICAzMjpcXHRcXHRzZWxlY3QgVkhPU1RfVEFTS1xcbiAgMzM6XFx0XFx0c2VsZWN0IEtWTV9BU1lOQ19QRlxcbiAgMzQ6XFx0XFx0c2VsZWN0IFVTRVJfUkVUVVJOX05PVElGSUVSXFxuICAzNTpcXHRcXHRzZWxlY3QgS1ZNX01NSU9cXG4gIDM2OlxcdFxcdHNlbGVjdCBTQ0hFRF9JTkZPXFxuICAzNzpcXHRcXHRzZWxlY3QgUEVSRl9FVkVOVFNcXG4gIDM4OlxcdFxcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UU1xcbiAgMzk6XFx0XFx0c2VsZWN0IFBFUkZfR1VFU1RfTUVESUFURURfUE1VXFxuICA0MDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fTVNJXFxuICA0MTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxcbiAgNDI6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcXG4gIDQzOlxcdFxcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xcbiAgNDQ6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxcbiAgNDU6XFx0XFx0c2VsZWN0IEtWTV9WRklPXFxuICA0NjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUE1fTk9USUZJRVIgaWYgUE1cXG4gIDQ3OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xcbiAgNDg6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG4gIDQ5OlxcdFxcdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxcbiAgNTA6XFx0XFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCBpZiBYODZfNjRcXG4gIDUxOlxcdFxcbiAgNTI6XFx0Y29uZmlnIEtWTVxcbiAgNTM6XFx0XFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4gIDU0OlxcdFxcdGRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUNcXG4gIDU1OlxcdFxcdGhlbHBcXG4gIDU2OlxcdFxcdCAgU3VwcG9ydCBob3N0aW5nIGZ1bGx5IHZpcnR1YWxpemVkIGd1ZXN0IG1hY2hpbmVzIHVzaW5nIGhhcmR3YXJlXFxuICA1NzpcXHRcXHQgIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuICBZb3Ugd2lsbCBuZWVkIGEgZmFpcmx5IHJlY2VudFxcbiAgNTg6XFx0XFx0ICBwcm9jZXNzb3IgZXF1aXBwZWQgd2l0aCB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiBZb3Ugd2lsbCBhbHNvXFxuICA1OTpcXHRcXHQgIG5lZWQgdG8gc2VsZWN0IG9uZSBvciBtb3JlIG9mIHRoZSBwcm9jZXNzb3IgbW9kdWxlcyBiZWxvdy5cXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0aHJvdWdoXFxuICA2MjpcXHRcXHQgIGEgY2hhcmFjdGVyIGRldmljZSBub2RlIG5hbWVkIC9kZXYva3ZtLlxcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgNjU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0uXFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDY4OlxcdFxcbiAgNjk6XFx0Y29uZmlnIEtWTV9XRVJST1JcXG4gIDcwOlxcdFxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4gIDcxOlxcdFxcdCMgRGlzYWxsb3cgS1ZNJ3MgLVdlcnJvciBpZiBLQVNBTiBpcyBlbmFibGVkLCBlLmcuIHRvIGd1YXJkIGFnYWluc3RcXG4gIDcyOlxcdFxcdCMgcmFuZG9taXplZCBjb25maWdzIGZyb20gc2VsZWN0aW5nIEtWTV9XRVJST1I9eSwgd2hpY2ggZG9lc24ndCBwbGF5XFxuICA3MzpcXHRcXHQjIG5pY2Ugd2l0aCBLQVNBTi4gIEtBU0FOIGJ1aWxkcyBnZW5lcmF0ZXMgd2FybmluZ3MgZm9yIHRoZSBkZWZhdWx0XFxuICA3NDpcXHRcXHQjIEZSQU1FX1dBUk4sIGkuZS4gS1ZNX1dFUlJPUj15IHdpdGggS0FTQU49eSByZXF1aXJlcyBzcGVjaWFsIHR1bmluZy5cXG4gIDc1OlxcdFxcdCMgQnVpbGRpbmcgS1ZNIHdpdGggLVdlcnJvciBhbmQgS0FTQU4gaXMgc3RpbGwgZG9hYmxlIHZpYSBlbmFibGluZ1xcbiAgNzY6XFx0XFx0IyB0aGUga2VybmVsLXdpZGUgV0VSUk9SPXkuXFxuICA3NzpcXHRcXHRkZXBlbmRzIG9uIEtWTV9YODYgXFx1MDAyNlxcdTAwMjYgKChFWFBFUlQgXFx1MDAyNlxcdTAwMjYgIUtBU0FOKSB8fCBXRVJST1IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjE2OjQ5LjYwODI3MDI1MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTQ5MTk3MjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEV4dGVybmFsIFdyaXRlIFRyYWNraW5nIGluIEtWTSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYENPTkZJR19LVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0LiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uYWxpdHkgZW5hYmxlZD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiBpdCdzIG9uIG9yIG9mZj8gTGV0IG1lIHF1aWNrbHkgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQncyByZWxhdGVkIHRvIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZywgYW5kIHRyYWNraW5nIGV4dGVybmFsIHdyaXRlcyB0byBWTSBtZW1vcnksIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIEknbGwgZm9jdXMgb24gaG93IHRoaXMgY29uZmlnIG9wdGlvbiBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBJcyBpdCBwZXJmb3JtYW5jZS1yZWxhdGVkPyBTZWN1cml0eS1yZWxhdGVkPyBCb3RoPyBMZXQncyB0cmFjZSBpdCBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbW9yZSBnZW5lcmFsIEtWTSBtZWNoYW5pc21zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTM5MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MTY6NTIuNzU3NDcyMDIzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMjU6XFx0XFx0ICBnYXRlcyBjb2RlIHRoYXQgdmVyaWZpZXMgYSB0by1iZS1mcmVlZCBwYWdlIHRhYmxlIGRvZXNuJ3QgaGF2ZSBhbnlcXG4gMjI2OlxcdFxcdCAgcHJlc2VudCBTUFRFcy5cXG4gMjI3OlxcdFxcbiAyMjg6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IFxcXCJOXFxcIi5cXG4gMjI5OlxcdFxcbiAyMzA6XFx0Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xcbiAyMzE6XFx0XFx0Ym9vbFxcbiAyMzI6XFx0XFxuIDIzMzpcXHRjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xcbiAyMzQ6XFx0XFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcbiAyMzU6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2XFxuIDIzNjpcXHRcXHRyYW5nZSAxMDI0IDQwOTZcXG4gMjM3OlxcdFxcdGRlZmF1bHQgNDA5NiBpZiBNQVhTTVBcXG4gMjM4OlxcdFxcdGRlZmF1bHQgMTAyNFxcbiAyMzk6XFx0XFx0aGVscFxcbiAyNDA6XFx0XFx0ICBTZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3QuIExhcmdlciB2YWx1ZXMgd2lsbCBpbmNyZWFzZVxcbiAyNDE6XFx0XFx0ICB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiBlYWNoIEtWTSBndWVzdCwgcmVnYXJkbGVzcyBvZiBob3cgbWFueSB2Q1BVcyBhcmVcXG4gMjQyOlxcdFxcdCAgY3JlYXRlZCBmb3IgYSBnaXZlbiBWTS5cXG4gMjQzOlxcdFxcbiAyNDQ6XFx0ZW5kaWYgIyBWSVJUVUFMSVpBVElPTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDoxNjo1Mi43NTc1ODEzMjNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzUxNzM1ODYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIGFuZCBWRklPIEludGVncmF0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgYWN0dWFsbHkgdHJpZ2dlcnMgYEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR2AuIExvb2tzIGxpa2UgYERSTV9JOTE1X0dWVF9LVk1HVGAgaXMgdGhlIHByaW1lIHN1c3BlY3QsIGFuZCBhIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQncyB0aGUgb25seSBvbmUuIEdpdmVuIHRoYXQsIEkgc2hvdWxkIHNlZSBpZiBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGAgYXJlIGFsc28gaW52b2x2ZWQgYmVjYXVzZSB0aGV5IGVuYWJsZSBLVk0gb24geDg2LCBhbG9uZyB3aXRoIHRoZSBzdGFuZGFyZCBgS1ZNYCwgYFZGSU9gLCBhbmQgcmVsYXRlZCBWRklPIGNvbmZpZ3VyYXRpb25zLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZSBtb2RpZmljYXRpb25zLiBJJ3ZlIGlkZW50aWZpZWQgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGF0OlxuMS4gICoqS1ZNIFBhZ2UgVHJhY2tpbmc6KiogYGt2bV9wYWdlX3RyYWNrXypgIGZ1bmN0aW9ucywgaGFuZGxpbmcgbm90aWZpZXIgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiwgYWxvbmcgd2l0aCBhZGRpbmcgYW5kIHJlbW92aW5nIEd1ZXN0IEZyYW1lIE51bWJlcnMgKEdGTnMpIGZvciB3cml0ZSB0cmFja2luZy5cbjIuICAqKlZGSU8vS1ZNIEludGVyYWN0aW9uOioqIEZ1bmN0aW9ucyBzdWNoIGFzIGB2ZmlvX2dyb3VwX3NldF9rdm1gLCBgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlYCwgYHZmaW9fZGV2aWNlX3B1dF9rdm1gLCBgdmZpb19kZXZpY2VfZmlsZV9zZXRfa3ZtYCAoYW5kIHRoZSBub24tc3RhdGljIGB2ZmlvX2ZpbGVfc2V0X2t2bWApLCBhbmQgYGt2bV92ZmlvX2ZpbGVfKmAgZnVuY3Rpb25zIHdoaWNoIGRlYWwgd2l0aCBmaWxlIHBvaW50ZXJzIGFuZCBLVk0gaW50ZWdyYXRpb24uXG4zLiAgKipLVk0gVk0gTGlmZWN5Y2xlOioqIGBmaWxlX3RvX2t2bWAsIGBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bWAsIGFuZCBga3ZtX3ZtX3JlbGVhc2VgLlxuXG5JJ2xsIHZlcmlmeSB3aGV0aGVyIGB2ZmlvX2RldmljZV9maWxlX3NldF9rdm1gIG9yIGBrdm1fdmZpb19maWxlX3NldF9rdm1gIGFyZSBzdGF0aWMgb3IgaW5saW5lZCwgc2luY2UgYHZmaW9fZmlsZV9zZXRfa3ZtYCBjYWxscyB0aGUgZm9ybWVyIGFuZCBga3ZtX3ZmaW9fZmlsZV9hZGRgIGNhbGxzIHRoZSBsYXR0ZXIuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZXNlIGFyZW4ndCBwYXJ0IG9mIGFueSBnZW5lcmljIGtlcm5lbCBpbmZyYXN0cnVjdHVyZSwgbGlrZSBtZW1vcnkgYWxsb2NhdG9ycywgcGFnZSBmYXVsdHMgb3IgbG9ja3Mgd2hpY2ggY2FuIGJlIGNvbW1vbiBpbiB0aGUga2VybmVsLiBUaGUgZm9jdXMgaXMgZGVmaW5pdGVseSBvbiBLVk0gVk0gbGlmZWN5Y2xlLCB0aGUgS1ZNLVZGSU8gYXR0YWNobWVudCBtZWNoYW5pc20sIGFuZCB0aGUgS1ZNIHBhZ2UgdHJhY2tpbmcuXG5cblRoZSByZWxldmFudCBrZXJuZWwgY29uZmlnIG9wdGlvbnMgSSBzaG91bGQgYmUgY29uc2lkZXJpbmcgYXJlOiBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBLVk1fQU1EYCwgYFZGSU9gLCBgVkZJT19HUk9VUGAsIGBWRklPX0NPTlRBSU5FUmAsIGBWRklPX0RFVklDRV9DREVWYCwgYW5kIHRoZSBpbXBvcnRhbnQgYERSTV9JOTE1X0dWVF9LVk1HVGAuXG5cbkluIGVzc2VuY2UsIHdoYXQgdGhpcyBwYXRjaCBzZXJpZXMgZG9lcyBpcyByZWZhY3RvciB0aGUgS1ZNIGFuZCBWRklPIGludGVyYWN0aW9uLCBhbmQgYnkgcHJveHkgS1ZNIHBhZ2UgdHJhY2tpbmcsIHJlcGxhY2luZyByYXcgYHN0cnVjdCBrdm0gKmAgcG9pbnRlcnMgd2l0aCBgc3RydWN0IGZpbGUgKmAgcG9pbnRlcnMgdG8gS1ZNIFZNIGZpbGVzLiBUaGlzIGNoYW5nZSBpcyBpbnRlbmRlZCB0byBpbXByb3ZlIGxpZmV0aW1lIG1hbmFnZW1lbnQgYnkgZGVjb3VwbGluZyBpdC4gVGhpcyBpcyBkb25lIHZpYSBgZ2V0X2ZpbGUoKWAgYW5kIGBmcHV0KClgIHRvIG1hbmFnZSB0aGUgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGUgY2hhbmdlcyBhZmZlY3QgZmlsZSBsaWZlY3ljbGUgaGFuZGxpbmcsIHdoaWNoIGluY2x1ZGVzIHRoZSBga3ZtX3ZtX3JlbGVhc2VgIGZ1bmN0aW9uLCBhcyB3ZWxsIGFzIGRldmljZSBhdHRhY2htZW50IHdoaWNoIGlzIGhhbmRsZWQgYnkgYGt2bV92ZmlvX2ZpbGVfYWRkYCBhbmQgYHZmaW9fZmlsZV9zZXRfa3ZtYCBmdW5jdGlvbnMuIFRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBmaWxlIGxpZmVjeWNsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYWNjZXNzaWJsZSB2aWEgS1ZNIGFuZCBWRklPIGlvY3Rscy5cblxuTGV0J3MgbG9nIHRob3NlIGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTkxMCwiT3V0cHV0VG9rZW5zIjozMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MTc6MDAuMjc0OTQzOThaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ0NzEyMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJWRklPXCIsXG4gICAgXCJWRklPX0dST1VQXCIsXG4gICAgXCJWRklPX0NPTlRBSU5FUlwiLFxuICAgIFwiVkZJT19ERVZJQ0VfQ0RFVlwiLFxuICAgIFwiRFJNX0k5MTVfR1ZUX0tWTUdUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3ZmaW9fZmlsZV9hZGRcIixcbiAgICBcInZmaW9fZmlsZV9zZXRfa3ZtXCIsXG4gICAgXCJ2ZmlvX2dyb3VwX3NldF9rdm1cIixcbiAgICBcInZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZVwiLFxuICAgIFwidmZpb19kZXZpY2VfcHV0X2t2bVwiLFxuICAgIFwiZmlsZV90b19rdm1cIixcbiAgICBcImt2bV92bV9yZWxlYXNlXCIsXG4gICAgXCJrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bVwiLFxuICAgIFwia3ZtX3BhZ2VfdHJhY2tfcmVnaXN0ZXJfbm90aWZpZXJcIixcbiAgICBcImt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXJcIixcbiAgICBcImt2bV93cml0ZV90cmFja19hZGRfZ2ZuXCIsXG4gICAgXCJrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgdGhlIHJlZmVyZW5jZSBtYW5hZ2VtZW50IGJldHdlZW4gS1ZNIGFuZCBleHRlcm5hbCBzdWJzeXN0ZW1zIChwcmltYXJpbHkgVkZJTyBhbmQgS1ZNIHBhZ2UgdHJhY2tpbmcpLCBzd2l0Y2hpbmcgZnJvbSBob2xkaW5nIGRpcmVjdCAnc3RydWN0IGt2bSAqJyBwb2ludGVycyB0byB1c2luZyAnc3RydWN0IGZpbGUgKicgcmVmZXJlbmNlcyB2aWEgZ2V0X2ZpbGUoKS9mcHV0KCkgYW5kIGdldF9maWxlX2FjdGl2ZSgpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbGlmZWN5Y2xlIHBhdGhzLCBjb25jdXJyZW5jeSwgYW5kIHJlZmNvdW50aW5nIGJldHdlZW4gS1ZNIFZNIGZpbGVzIGFuZCBWRklPIGRldmljZXMvZ3JvdXBzIGR1cmluZyBWTSBjcmVhdGlvbiwgcmVsZWFzZSwgYW5kIFZGSU8gZGV2aWNlIGF0dGFjaG1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIlZGSU9cIixcbiAgICBcIlZGSU9fR1JPVVBcIixcbiAgICBcIlZGSU9fQ09OVEFJTkVSXCIsXG4gICAgXCJWRklPX0RFVklDRV9DREVWXCIsXG4gICAgXCJEUk1fSTkxNV9HVlRfS1ZNR1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdmZpb19maWxlX2FkZFwiLFxuICAgIFwidmZpb19maWxlX3NldF9rdm1cIixcbiAgICBcInZmaW9fZ3JvdXBfc2V0X2t2bVwiLFxuICAgIFwidmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlXCIsXG4gICAgXCJ2ZmlvX2RldmljZV9wdXRfa3ZtXCIsXG4gICAgXCJmaWxlX3RvX2t2bVwiLFxuICAgIFwia3ZtX3ZtX3JlbGVhc2VcIixcbiAgICBcImt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtXCIsXG4gICAgXCJrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllclwiLFxuICAgIFwia3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllclwiLFxuICAgIFwia3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm5cIixcbiAgICBcImt2bV93cml0ZV90cmFja19yZW1vdmVfZ2ZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgcmVmZXJlbmNlIG1hbmFnZW1lbnQgYmV0d2VlbiBLVk0gYW5kIGV4dGVybmFsIHN1YnN5c3RlbXMgKHByaW1hcmlseSBWRklPIGFuZCBLVk0gcGFnZSB0cmFja2luZyksIHN3aXRjaGluZyBmcm9tIGhvbGRpbmcgZGlyZWN0ICdzdHJ1Y3Qga3ZtIConIHBvaW50ZXJzIHRvIHVzaW5nICdzdHJ1Y3QgZmlsZSAqJyByZWZlcmVuY2VzIHZpYSBnZXRfZmlsZSgpL2ZwdXQoKSBhbmQgZ2V0X2ZpbGVfYWN0aXZlKCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBsaWZlY3ljbGUgcGF0aHMsIGNvbmN1cnJlbmN5LCBhbmQgcmVmY291bnRpbmcgYmV0d2VlbiBLVk0gVk0gZmlsZXMgYW5kIFZGSU8gZGV2aWNlcy9ncm91cHMgZHVyaW5nIFZNIGNyZWF0aW9uLCByZWxlYXNlLCBhbmQgVkZJTyBkZXZpY2UgYXR0YWNobWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MTc6MDAuMzg5NDI1OTQ5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjc2NzIxMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MTc6MDAuMzkwMjQ4MzA5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6ODI3NTg5Mzc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGludGVyYWN0aW9uIGJldHdlZW4gS1ZNIGFuZCBWRklPIChhcyB3ZWxsIGFzIHg4NiBwYWdlIHRyYWNraW5nIGFuZCBzMzkwIHZmaW8tYXApIGJ5IHBhc3NpbmcgYW5kIHRyYWNraW5nIGBzdHJ1Y3QgZmlsZSAqYCBpbnN0ZWFkIG9mIHJhdyBgc3RydWN0IGt2bSAqYCBwb2ludGVycy5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZXMsIGZpbGUvS1ZNIHJlZmVyZW5jZSBjb3VudGluZywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gU3VjaCBpc3N1ZXMgYXJlIG1lbW9yeSBtYW5hZ2VtZW50IGJ1Z3MgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy5cXG5cXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2sgb3IgaGVhcCBidWZmZXJzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgZGF0YSBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGludm9sdmUgY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSGVuY2UsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB3YXJyYW50aW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTM4ZTI5NDU5NGQyZTlkZmFhNTRkYWFlNTRmMzlmY2IzNmY1ODVhNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTA6MTY6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFnZV90cmFjay5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhZ2VfdHJhY2suaFxuaW5kZXggM2QwNDA3NDEwNDRiNC4uMDQ2YTI1YzhmZTRmOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYWdlX3RyYWNrLmhcbkBAIC00NCwxMyArNDQsMTMgQEAgc3RydWN0IGt2bV9wYWdlX3RyYWNrX25vdGlmaWVyX25vZGUge1xuIFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpub2RlKTtcbiB9O1xuIFxuLWludCBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sXG4raW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbik7XG4tdm9pZCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSxcbit2b2lkIGt2bV9wYWdlX3RyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0XHRcdHN0cnVjdCBrdm1fcGFnZV90cmFja19ub3RpZmllcl9ub2RlICpuKTtcbiBcbi1pbnQga3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm4oc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pO1xuLWludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7XG4raW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBmaWxlICpmaWxlLCBnZm5fdCBnZm4pO1xuK2ludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3QgZmlsZSAqZmlsZSwgZ2ZuX3QgZ2ZuKTtcbiAjZWxzZVxuIC8qXG4gICogQWxsb3cgZGVmaW5pbmcgYSBub2RlIGluIGEgc3RydWN0dXJlIGV2ZW4gaWYgcGFnZSB0cmFja2luZyBpcyBkaXNhYmxlZCwgZS5nLlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZSBiL2FyY2gveDg2L2t2bS9NYWtlZmlsZVxuaW5kZXggMDQ3NDYwNGFiOGExNC4uOTZmODlkNmY3ZTZhOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZVxuKysrIGIvYXJjaC94ODYva3ZtL01ha2VmaWxlXG5AQCAtNjAsMTAgKzYwLDcgQEAgZXhwb3J0c19ncmVwX3RyYWlsZXIgOj0gLS1pbmNsdWRlPScqLltjaF0nIC1ucncgJChzcmN0cmVlKS92aXJ0L2t2bSAkKHNyY3RyZWUpL2FcbiBcdFx0XHRncmVwIC12IC1lIGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyIFxcXG4gXHRcdFx0XHQtZSBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyIFxcXG4gXHRcdFx0XHQtZSBrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbiBcXFxuLVx0XHRcdFx0LWUga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4gXFxcbi1cdFx0XHRcdC1lIGt2bV9nZXRfa3ZtIFxcXG4tXHRcdFx0XHQtZSBrdm1fZ2V0X2t2bV9zYWZlIFxcXG4tXHRcdFx0XHQtZSBrdm1fcHV0X2t2bVxuK1x0XHRcdFx0LWUga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm5cbiBcbiAjIEZvcmNlIGdyZXAgdG8gZW1pdCBhIGdvb2Z5IGdyb3VwIHNlcGFyYXRvciB0aGF0IGNhbiBpbiB0dXJuIGJlIHJlcGxhY2VkIHdpdGhcbiAjIHRoZSBhYm92ZSBuZXdsaW5lIG1hY3JvIChuZXdsaW5lcyBpbiBNYWtlIGFyZSBhIG5pZ2h0bWFyZSkuICBOb3RlLCBncmVwIG9ubHlcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3BhZ2VfdHJhY2suYyBiL2FyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jXG5pbmRleCA3ZTgxOTVhMzExYmIwLi45OGYxMzNlNGYwYjMyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9wYWdlX3RyYWNrLmNcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvcGFnZV90cmFjay5jXG5AQCAtMjM3LDEwICsyMzcsMTEgQEAgc3RhdGljIGludCBrdm1fZW5hYmxlX2V4dGVybmFsX3dyaXRlX3RyYWNraW5nKHN0cnVjdCBrdm0gKmt2bSlcbiAgKiByZWdpc3RlciB0aGUgbm90aWZpZXIgc28gdGhhdCBldmVudCBpbnRlcmNlcHRpb24gZm9yIHRoZSB0cmFja2VkIGd1ZXN0XG4gICogcGFnZXMgY2FuIGJlIHJlY2VpdmVkLlxuICAqL1xuLWludCBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sXG4raW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbilcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfaGVhZCAqaGVhZDtcbitcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbGVfdG9fa3ZtKGZpbGUpO1xuIFx0aW50IHI7XG4gXG4gXHRpZiAoIWt2bSB8fCBrdm0tXHUwMDNlbW0gIT0gY3VycmVudC1cdTAwM2VtbSlcbkBAIC0yNTIsNyArMjUzLDcgQEAgaW50IGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRyZXR1cm4gcjtcbiBcdH1cbiBcbi1cdGt2bV9nZXRfa3ZtKGt2bSk7XG4rXHRnZXRfZmlsZShmaWxlKTtcbiBcbiBcdGhlYWQgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC50cmFja19ub3RpZmllcl9oZWFkO1xuIFxuQEAgLTI2NywxMCArMjY4LDExIEBAIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKTtcbiAgKiBzdG9wIHJlY2VpdmluZyB0aGUgZXZlbnQgaW50ZXJjZXB0aW9uLiBJdCBpcyB0aGUgb3Bwb3NlZCBvcGVyYXRpb24gb2ZcbiAgKiBrdm1fcGFnZV90cmFja19yZWdpc3Rlcl9ub3RpZmllcigpLlxuICAqL1xuLXZvaWQga3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sXG4rdm9pZCBrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdFx0XHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfbm9kZSAqbilcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3BhZ2VfdHJhY2tfbm90aWZpZXJfaGVhZCAqaGVhZDtcbitcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbGVfdG9fa3ZtKGZpbGUpO1xuIFxuIFx0aGVhZCA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLnRyYWNrX25vdGlmaWVyX2hlYWQ7XG4gXG5AQCAtMjc5LDcgKzI4MSw3IEBAIHZvaWQga3ZtX3BhZ2VfdHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sXG4gXHR3cml0ZV91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiBcdHN5bmNocm9uaXplX3NyY3UoXHUwMDI2aGVhZC1cdTAwM2V0cmFja19zcmN1KTtcbiBcbi1cdGt2bV9wdXRfa3ZtKGt2bSk7XG4rXHRmcHV0KGZpbGUpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fcGFnZV90cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKTtcbiBcbkBAIC0zMzYsMTEgKzMzOCwxMiBAQCB2b2lkIGt2bV9wYWdlX3RyYWNrX2RlbGV0ZV9zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbiAgKiBhZGQgZ3Vlc3QgcGFnZSB0byB0aGUgdHJhY2tpbmcgcG9vbCBzbyB0aGF0IGNvcnJlc3BvbmRpbmcgYWNjZXNzIG9uIHRoYXRcbiAgKiBwYWdlIHdpbGwgYmUgaW50ZXJjZXB0ZWQuXG4gICpcbi0gKiBAa3ZtOiB0aGUgZ3Vlc3QgaW5zdGFuY2Ugd2UgYXJlIGludGVyZXN0ZWQgaW4uXG4rICogQGZpbGU6IHRoZSBWTSBmaWxlIG9mIHRoZSBndWVzdCBpbnN0YW5jZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbi5cbiAgKiBAZ2ZuOiB0aGUgZ3Vlc3QgcGFnZS5cbiAgKi9cbi1pbnQga3ZtX3dyaXRlX3RyYWNrX2FkZF9nZm4oc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pXG4raW50IGt2bV93cml0ZV90cmFja19hZGRfZ2ZuKHN0cnVjdCBmaWxlICpmaWxlLCBnZm5fdCBnZm4pXG4ge1xuK1x0c3RydWN0IGt2bSAqa3ZtID0gZmlsZV90b19rdm0oZmlsZSk7XG4gXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xuIFx0aW50IGlkeDtcbiBcbkBAIC0zNjYsMTEgKzM2OSwxMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChrdm1fd3JpdGVfdHJhY2tfYWRkX2dmbik7XG4gICogcmVtb3ZlIHRoZSBndWVzdCBwYWdlIGZyb20gdGhlIHRyYWNraW5nIHBvb2wgd2hpY2ggc3RvcHMgdGhlIGludGVyY2VwdGlvblxuICAqIG9mIGNvcnJlc3BvbmRpbmcgYWNjZXNzIG9uIHRoYXQgcGFnZS5cbiAgKlxuLSAqIEBrdm06IHRoZSBndWVzdCBpbnN0YW5jZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbi5cbisgKiBAZmlsZTogdGhlIFZNIGZpbGUgb2YgdGhlIGd1ZXN0IGluc3RhbmNlIHdlIGFyZSBpbnRlcmVzdGVkIGluLlxuICAqIEBnZm46IHRoZSBndWVzdCBwYWdlLlxuICAqL1xuLWludCBrdm1fd3JpdGVfdHJhY2tfcmVtb3ZlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbilcbitpbnQga3ZtX3dyaXRlX3RyYWNrX3JlbW92ZV9nZm4oc3RydWN0IGZpbGUgKmZpbGUsIGdmbl90IGdmbilcbiB7XG4rXHRzdHJ1Y3Qga3ZtICprdm0gPSBmaWxlX3RvX2t2bShmaWxlKTtcbiBcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG4gXHRpbnQgaWR4O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuaW5kZXggOTQwYzBmZjY2OGJlZS4uZjE2MGUxOTQ1ZmJjZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG5AQCAtMTgyMiwxNyArMTgyMiwyNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdmZpb19hcF9tZGV2X2F0dHJfZ3JvdXBzW10gPSB7XG4gXG4gLyoqXG4gICogdmZpb19hcF9tZGV2X3NldF9rdm0gLSBzZXRzIGFsbCBkYXRhIGZvciBAbWF0cml4X21kZXYgdGhhdCBhcmUgbmVlZGVkXG4tICogdG8gbWFuYWdlIEFQIHJlc291cmNlcyBmb3IgdGhlIGd1ZXN0IHdob3NlIHN0YXRlIGlzIHJlcHJlc2VudGVkIGJ5IEBrdm1cbisgKiB0byBtYW5hZ2UgQVAgcmVzb3VyY2VzIGZvciB0aGUgZ3Vlc3Qgd2hvc2Ugc3RhdGUgaXMgcmVwcmVzZW50ZWQgYnlcbisgKiBAa3ZtX2ZpbGVcbiAgKlxuICAqIEBtYXRyaXhfbWRldjogYSBtZWRpYXRlZCBtYXRyaXggZGV2aWNlXG4tICogQGt2bTogcmVmZXJlbmNlIHRvIEtWTSBpbnN0YW5jZVxuKyAqIEBrdm1fZmlsZTogdGhlIEtWTSBWTSBmaWxlIHRoaXMgdmZpbyBkZXZpY2UgaXMgYXNzb2NpYXRlZCB3aXRoXG4gICpcbi0gKiBSZXR1cm46IDAgaWYgbm8gb3RoZXIgbWVkaWF0ZWQgbWF0cml4IGRldmljZSBoYXMgYSByZWZlcmVuY2UgdG8gQGt2bTtcbisgKiBSZXR1cm46IDAgaWYgbm8gb3RoZXIgbWVkaWF0ZWQgbWF0cml4IGRldmljZSBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIFZNO1xuICAqIG90aGVyd2lzZSwgcmV0dXJucyBhbiAtRVBFUk0uXG4gICovXG4gc3RhdGljIGludCB2ZmlvX2FwX21kZXZfc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuLVx0XHRcdFx0c3RydWN0IGt2bSAqa3ZtKVxuK1x0XHRcdFx0c3RydWN0IGZpbGUgKmt2bV9maWxlKVxuIHtcbitcdHN0cnVjdCBrdm0gKmt2bTtcbitcbitcdGlmICgha3ZtX2ZpbGUpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0a3ZtID0ga3ZtX2ZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1x0aWYgKCFrdm0pXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuIFx0aWYgKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYmQpIHtcbiBcdFx0Z2V0X3VwZGF0ZV9sb2Nrc19mb3Jfa3ZtKGt2bSk7XG4gXHRcdGlmIChrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rKSB7XG5AQCAtMTg0MSw3ICsxODUxLDYgQEAgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfc2V0X2t2bShzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxuIFx0XHR9XG4gXHRcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2sgPSBcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2VwcWFwX2hvb2s7XG4gXG4tXHRcdGt2bV9nZXRfa3ZtKGt2bSk7XG4gXHRcdG1hdHJpeF9tZGV2LVx1MDAzZWt2bSA9IGt2bTtcbiBcdFx0dmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTtcbiBcdFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuQEAgLTE4OTQsNyArMTkwMyw2IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl91bnNldF9rdm0oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbiBcdFx0bWF0cml4X21kZXYtXHUwMDNla3ZtID0gTlVMTDtcbiBcbiBcdFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX2t2bShrdm0pO1xuLVx0XHRrdm1fcHV0X2t2bShrdm0pO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vZ3JvdXAuYyBiL2RyaXZlcnMvdmZpby9ncm91cC5jXG5pbmRleCBiMjI5OWU1YmM2ZGYzLi41YmY4Y2JkZmYzNzdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL2dyb3VwLmNcbisrKyBiL2RyaXZlcnMvdmZpby9ncm91cC5jXG5AQCAtODYwLDExICs4NjAsMjAgQEAgYm9vbCB2ZmlvX2dyb3VwX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cClcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGt2bSAqa3ZtKVxuK3ZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGZpbGUgKmt2bSlcbiB7XG4rXHRzdHJ1Y3QgZmlsZSAqb2xkO1xuK1xuK1x0aWYgKGt2bSlcbitcdFx0Z2V0X2ZpbGUoa3ZtKTtcbitcbiBcdHNwaW5fbG9jayhcdTAwMjZncm91cC1cdTAwM2Vrdm1fcmVmX2xvY2spO1xuK1x0b2xkID0gZ3JvdXAtXHUwMDNla3ZtO1xuIFx0Z3JvdXAtXHUwMDNla3ZtID0ga3ZtO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2Z3JvdXAtXHUwMDNla3ZtX3JlZl9sb2NrKTtcbitcbitcdGlmIChvbGQpXG4rXHRcdGZwdXQob2xkKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV96ZGV2LmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuY1xuaW5kZXggZjQ3ZjM2MzE0YTFjYy4uMDQ1MTMyZTkwYmZlZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfemRldi5jXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3pkZXYuY1xuQEAgLTE4NCw2ICsxODQsNyBAQCBpbnQgdmZpb19wY2lfemRldl9mZWF0dXJlX2VycihzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxuIGludCB2ZmlvX3BjaV96ZGV2X29wZW5fZGV2aWNlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiB7XG4gXHRzdHJ1Y3QgenBjaV9kZXYgKnpkZXYgPSB0b196cGNpKHZkZXYtXHUwMDNlcGRldik7XG4rXHRzdHJ1Y3Qga3ZtICprdm07XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCF6ZGV2KVxuQEAgLTE5NSw5ICsxOTYsMTQgQEAgaW50IHZmaW9fcGNpX3pkZXZfb3Blbl9kZXZpY2Uoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHJldCA9IC1FTk9FTlQ7XG4rXHRrdm0gPSB2ZGV2LVx1MDAzZXZkZXYua3ZtLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdGlmICgha3ZtKVxuK1x0XHRnb3RvIHJlY292ZXJ5O1xuK1xuIFx0aWYgKHpwY2lfa3ZtX2hvb2sua3ZtX3JlZ2lzdGVyKVxuLVx0XHRyZXQgPSB6cGNpX2t2bV9ob29rLmt2bV9yZWdpc3Rlcih6ZGV2LCB2ZGV2LVx1MDAzZXZkZXYua3ZtKTtcbitcdFx0cmV0ID0genBjaV9rdm1faG9vay5rdm1fcmVnaXN0ZXIoemRldiwga3ZtKTtcbiBcbityZWNvdmVyeTpcbiBcdGlmIChyZXQpXG4gXHRcdHpwY2lfc3RvcF9tZWRpYXRlZF9yZWNvdmVyeSh6ZGV2KTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vdmZpby5oIGIvZHJpdmVycy92ZmlvL3ZmaW8uaFxuaW5kZXggNzcyOGJjOTliNjNkMS4uOWI2MTk5NTFhNWQwYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby92ZmlvLmhcbisrKyBiL2RyaXZlcnMvdmZpby92ZmlvLmhcbkBAIC0yMyw3ICsyMyw3IEBAIHN0cnVjdCB2ZmlvX2RldmljZV9maWxlIHtcbiBcdHU4IGFjY2Vzc19ncmFudGVkO1xuIFx0dTMyIGRldmlkOyAvKiBvbmx5IHZhbGlkIHdoZW4gaW9tbXVmZCBpcyB2YWxpZCAqL1xuIFx0c3BpbmxvY2tfdCBrdm1fcmVmX2xvY2s7IC8qIHByb3RlY3Qga3ZtIGZpZWxkICovXG4tXHRzdHJ1Y3Qga3ZtICprdm07XG4rXHRzdHJ1Y3QgZmlsZSAqa3ZtO1xuIFx0c3RydWN0IGlvbW11ZmRfY3R4ICppb21tdWZkOyAvKiBwcm90ZWN0ZWQgYnkgc3RydWN0IHZmaW9fZGV2aWNlX3NldDo6bG9jayAqL1xuIH07XG4gXG5AQCAtODgsNyArODgsNyBAQCBzdHJ1Y3QgdmZpb19ncm91cCB7XG4gI2VuZGlmXG4gXHRlbnVtIHZmaW9fZ3JvdXBfdHlwZVx0XHR0eXBlO1xuIFx0c3RydWN0IG11dGV4XHRcdFx0Z3JvdXBfbG9jaztcbi1cdHN0cnVjdCBrdm1cdFx0XHQqa3ZtO1xuK1x0c3RydWN0IGZpbGVcdFx0XHQqa3ZtO1xuIFx0c3RydWN0IGZpbGVcdFx0XHQqb3BlbmVkX2ZpbGU7XG4gXHRzdHJ1Y3QgaW9tbXVmZF9jdHhcdFx0KmlvbW11ZmQ7XG4gXHRzcGlubG9ja190XHRcdFx0a3ZtX3JlZl9sb2NrO1xuQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIHZmaW9fZGV2aWNlX2dyb3VwX3VudXNlX2lvbW11KHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKTtcbiB2b2lkIHZmaW9fZGZfZ3JvdXBfY2xvc2Uoc3RydWN0IHZmaW9fZGV2aWNlX2ZpbGUgKmRmKTtcbiBzdHJ1Y3QgdmZpb19ncm91cCAqdmZpb19ncm91cF9mcm9tX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpO1xuIGJvb2wgdmZpb19ncm91cF9lbmZvcmNlZF9jb2hlcmVudChzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXApO1xuLXZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGt2bSAqa3ZtKTtcbit2b2lkIHZmaW9fZ3JvdXBfc2V0X2t2bShzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXAsIHN0cnVjdCBmaWxlICprdm0pO1xuIGJvb2wgdmZpb19kZXZpY2VfaGFzX2NvbnRhaW5lcihzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSk7XG4gaW50IF9faW5pdCB2ZmlvX2dyb3VwX2luaXQodm9pZCk7XG4gdm9pZCB2ZmlvX2dyb3VwX2NsZWFudXAodm9pZCk7XG5AQCAtMTY1LDcgKzE2NSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX2dyb3VwX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgdmZpb19ncm91cF9zZXRfa3ZtKHN0cnVjdCB2ZmlvX2dyb3VwICpncm91cCwgc3RydWN0IGt2bSAqa3ZtKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX2dyb3VwX3NldF9rdm0oc3RydWN0IHZmaW9fZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgZmlsZSAqa3ZtKVxuIHtcbiB9XG4gXG5AQCAtNDI5LDExICs0MjksMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fdmlycWZkX2V4aXQodm9pZClcbiAjZW5kaWZcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfS1ZNKVxuLXZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3Qga3ZtICprdm0pO1xuK3ZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZmlsZSAqa3ZtKTtcbiB2b2lkIHZmaW9fZGV2aWNlX3B1dF9rdm0oc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fZGV2aWNlX2dldF9rdm1fc2FmZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSxcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBrdm0gKmt2bSlcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCBmaWxlICprdm0pXG4ge1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMgYi9kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmNcbmluZGV4IDQyM2VhZDQ4YWFmZTMuLmVkOTZhY2ZhODYzNTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmNcbisrKyBiL2RyaXZlcnMvdmZpby92ZmlvX21haW4uY1xuQEAgLTQ3MiwzNiArNDcyLDE0IEBAIHZvaWQgdmZpb191bnJlZ2lzdGVyX2dyb3VwX2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSlcbiBFWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KTtcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfS1ZNKVxuLXZvaWQgdmZpb19kZXZpY2VfZ2V0X2t2bV9zYWZlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3Qga3ZtICprdm0pXG4rdm9pZCB2ZmlvX2RldmljZV9nZXRfa3ZtX3NhZmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBmaWxlICprdm0pXG4ge1xuLVx0dm9pZCAoKnBmbikoc3RydWN0IGt2bSAqa3ZtKTtcbi1cdGJvb2wgKCpmbikoc3RydWN0IGt2bSAqa3ZtKTtcbi1cdGJvb2wgcmV0O1xuLVxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkZXZpY2UtXHUwMDNlZGV2X3NldC1cdTAwM2Vsb2NrKTtcbiBcbiBcdGlmICgha3ZtKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRwZm4gPSBzeW1ib2xfZ2V0KGt2bV9wdXRfa3ZtKTtcbi1cdGlmIChXQVJOX09OKCFwZm4pKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRmbiA9IHN5bWJvbF9nZXQoa3ZtX2dldF9rdm1fc2FmZSk7XG4tXHRpZiAoV0FSTl9PTighZm4pKSB7XG4tXHRcdHN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRyZXQgPSBmbihrdm0pO1xuLVx0c3ltYm9sX3B1dChrdm1fZ2V0X2t2bV9zYWZlKTtcbi1cdGlmICghcmV0KSB7XG4tXHRcdHN5bWJvbF9wdXQoa3ZtX3B1dF9rdm0pO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRkZXZpY2UtXHUwMDNlcHV0X2t2bSA9IHBmbjtcbi1cdGRldmljZS1cdTAwM2Vrdm0gPSBrdm07XG4rXHRkZXZpY2UtXHUwMDNla3ZtID0gZ2V0X2ZpbGUoa3ZtKTtcbiB9XG4gXG4gdm9pZCB2ZmlvX2RldmljZV9wdXRfa3ZtKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKVxuQEAgLTUxMSwxNCArNDg5LDcgQEAgdm9pZCB2ZmlvX2RldmljZV9wdXRfa3ZtKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlKVxuIFx0aWYgKCFkZXZpY2UtXHUwMDNla3ZtKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoV0FSTl9PTighZGV2aWNlLVx1MDAzZXB1dF9rdm0pKVxuLVx0XHRnb3RvIGNsZWFyO1xuLVxuLVx0ZGV2aWNlLVx1MDAzZXB1dF9rdm0oZGV2aWNlLVx1MDAzZWt2bSk7XG4tXHRkZXZpY2UtXHUwMDNlcHV0X2t2bSA9IE5VTEw7XG4tXHRzeW1ib2xfcHV0KGt2bV9wdXRfa3ZtKTtcbi1cbi1jbGVhcjpcbitcdGZwdXQoZGV2aWNlLVx1MDAzZWt2bSk7XG4gXHRkZXZpY2UtXHUwMDNla3ZtID0gTlVMTDtcbiB9XG4gI2VuZGlmXG5AQCAtMTU0NCw5ICsxNTE1LDEzIEBAIGJvb2wgdmZpb19maWxlX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCBmaWxlICpmaWxlKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX2ZpbGVfZW5mb3JjZWRfY29oZXJlbnQpO1xuIFxuLXN0YXRpYyB2b2lkIHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKVxuK3N0YXRpYyB2b2lkIHZmaW9fZGV2aWNlX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGUgKmt2bSlcbiB7XG4gXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmlsZSAqZGYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdHN0cnVjdCBmaWxlICpvbGQ7XG4rXG4rXHRpZiAoa3ZtKVxuK1x0XHRnZXRfZmlsZShrdm0pO1xuIFxuIFx0LypcbiBcdCAqIFRoZSBrdm0gaXMgZmlyc3QgcmVjb3JkZWQgaW4gdGhlIHZmaW9fZGV2aWNlX2ZpbGUsIGFuZCB3aWxsXG5AQCAtMTU1NCwyOCArMTUyOSwzMiBAQCBzdGF0aWMgdm9pZCB2ZmlvX2RldmljZV9maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdCAqIGlvbW11ZmQgc3VjY2Vzc2Z1bGx5IGluIHRoZSB2ZmlvIGRldmljZSBjZGV2IHBhdGguXG4gXHQgKi9cbiBcdHNwaW5fbG9jayhcdTAwMjZkZi1cdTAwM2Vrdm1fcmVmX2xvY2spO1xuK1x0b2xkID0gZGYtXHUwMDNla3ZtO1xuIFx0ZGYtXHUwMDNla3ZtID0ga3ZtO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2ZGYtXHUwMDNla3ZtX3JlZl9sb2NrKTtcbitcbitcdGlmIChvbGQpXG4rXHRcdGZwdXQob2xkKTtcbiB9XG4gXG4gLyoqXG4gICogdmZpb19maWxlX3NldF9rdm0gLSBMaW5rIGEga3ZtIHdpdGggVkZJTyBkcml2ZXJzXG4tICogQGZpbGU6IFZGSU8gZ3JvdXAgZmlsZSBvciBWRklPIGRldmljZSBmaWxlXG4tICogQGt2bTogS1ZNIHRvIGxpbmtcbisgKiBAdmZpb19maWxlOiBWRklPIGdyb3VwIGZpbGUgb3IgVkZJTyBkZXZpY2UgZmlsZVxuKyAqIEBrdm06IEtWTSBmaWxlIHRvIGxpbmtcbiAgKlxuICAqIFdoZW4gYSBWRklPIGRldmljZSBpcyBmaXJzdCBvcGVuZWQgdGhlIEtWTSB3aWxsIGJlIGF2YWlsYWJsZSBpblxuICAqIGRldmljZS1cdTAwM2Vrdm0gaWYgb25lIHdhcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuXG4gICovXG4tdm9pZCB2ZmlvX2ZpbGVfc2V0X2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGt2bSAqa3ZtKVxuK3ZvaWQgdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSlcbiB7XG4gXHRzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXA7XG4gXG4tXHRncm91cCA9IHZmaW9fZ3JvdXBfZnJvbV9maWxlKGZpbGUpO1xuK1x0Z3JvdXAgPSB2ZmlvX2dyb3VwX2Zyb21fZmlsZSh2ZmlvX2ZpbGUpO1xuIFx0aWYgKGdyb3VwKVxuIFx0XHR2ZmlvX2dyb3VwX3NldF9rdm0oZ3JvdXAsIGt2bSk7XG4gXG4tXHRpZiAodmZpb19kZXZpY2VfZnJvbV9maWxlKGZpbGUpKVxuLVx0XHR2ZmlvX2RldmljZV9maWxlX3NldF9rdm0oZmlsZSwga3ZtKTtcbitcdGlmICh2ZmlvX2RldmljZV9mcm9tX2ZpbGUodmZpb19maWxlKSlcbitcdFx0dmZpb19kZXZpY2VfZmlsZV9zZXRfa3ZtKHZmaW9fZmlsZSwga3ZtKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmZpb19maWxlX3NldF9rdm0pO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggMDNiZmM5Mjg2NGI2ZS4uYmZlY2NlMWI1OTU1YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtNzg0LDYgKzc4NCwxMyBAQCBzdHJ1Y3Qga3ZtIHtcbiBcdCAqIGt2bV9zd2FwX2FjdGl2ZV9tZW1zbG90cygpLlxuIFx0ICovXG4gXHRzdHJ1Y3QgbXV0ZXggc2xvdHNfYXJjaF9sb2NrO1xuK1x0LypcbitcdCAqIEJhY2stcmVmZXJlbmNlIHRvIHRoZSBWTSBmaWxlIGZvciBzdWJzeXN0ZW1zIChlLmcuLCBWRklPKS4gSG9sZHMgbm9cbitcdCAqIHJlZmVyZW5jZSB0byBhdm9pZCBwaW5uaW5nIHRoZSBWTS4gQWNjZXNzIHZpYSBnZXRfZmlsZV9hY3RpdmUoXHUwMDI2a3ZtLVx1MDAzZWZpbGUpXG4rXHQgKiBvbmx54oCUc2FmZSBiZWNhdXNlIGNsZWFyZWQgaW4ga3ZtX3ZtX3JlbGVhc2UoKSBiZWZvcmUgZmlsZSBmcmVlZC4gQ2FsbGVyc1xuK1x0ICogc3RvcmluZyB0aGUgcmVzdWx0IG11c3QgdGFrZSB0aGVpciBvd24gcmVmZXJlbmNlIHZpYSBnZXRfZmlsZSgpXG4rXHQgKi9cbitcdHN0cnVjdCBmaWxlICpmaWxlO1xuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW07IC8qIHVzZXJzcGFjZSB0aWVkIHRvIHRoaXMgdm0gKi9cbiBcdHVuc2lnbmVkIGxvbmcgbnJfbWVtc2xvdF9wYWdlcztcbiBcdC8qIFRoZSB0d28gbWVtc2xvdCBzZXRzIC0gYWN0aXZlIGFuZCBpbmFjdGl2ZSAocGVyIGFkZHJlc3Mgc3BhY2UpICovXG5AQCAtMTA4Miw2ICsxMDg5LDcgQEAgdm9pZCBrdm1fZ2V0X2t2bShzdHJ1Y3Qga3ZtICprdm0pO1xuIGJvb2wga3ZtX2dldF9rdm1fc2FmZShzdHJ1Y3Qga3ZtICprdm0pO1xuIHZvaWQga3ZtX3B1dF9rdm0oc3RydWN0IGt2bSAqa3ZtKTtcbiBib29sIGZpbGVfaXNfa3ZtKHN0cnVjdCBmaWxlICpmaWxlKTtcbitzdHJ1Y3Qga3ZtICpmaWxlX3RvX2t2bShzdHJ1Y3QgZmlsZSAqZmlsZSk7XG4gdm9pZCBrdm1fcHV0X2t2bV9ub19kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSk7XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21lbXNsb3RzICpfX2t2bV9tZW1zbG90cyhzdHJ1Y3Qga3ZtICprdm0sIGludCBhc19pZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvbGludXgvdmZpby5oXG5pbmRleCA0NWYwODk4NjM1OWU0Li4wY2M5MWM2Zjk2ZDJiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvLmhcbisrKyBiL2luY2x1ZGUvbGludXgvdmZpby5oXG5AQCAtNTQsNyArNTQsNyBAQCBzdHJ1Y3QgdmZpb19kZXZpY2Uge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBkZXZfc2V0X2xpc3Q7XG4gXHR1bnNpZ25lZCBpbnQgbWlncmF0aW9uX2ZsYWdzO1xuIFx0dTggcHJlY29weV9pbmZvX3YyO1xuLVx0c3RydWN0IGt2bSAqa3ZtO1xuK1x0c3RydWN0IGZpbGUgKmt2bTtcbiBcbiBcdC8qIE1lbWJlcnMgYmVsb3cgaGVyZSBhcmUgcHJpdmF0ZSwgbm90IGZvciBkcml2ZXIgdXNlICovXG4gXHR1bnNpZ25lZCBpbnQgaW5kZXg7XG5AQCAtNjYsNyArNjYsNiBAQCBzdHJ1Y3QgdmZpb19kZXZpY2Uge1xuIFx0dW5zaWduZWQgaW50IG9wZW5fY291bnQ7XG4gXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xuIFx0c3RydWN0IGlvbW11ZmRfYWNjZXNzICppb21tdWZkX2FjY2Vzcztcbi1cdHZvaWQgKCpwdXRfa3ZtKShzdHJ1Y3Qga3ZtICprdm0pO1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU9NTVVGRClcbiBcdHN0cnVjdCBpb21tdWZkX2RldmljZSAqaW9tbXVmZF9kZXZpY2U7XG5AQCAtMzc4LDcgKzM3Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX2ZpbGVfaGFzX2RldihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpXG4gI2VuZGlmXG4gYm9vbCB2ZmlvX2ZpbGVfaXNfdmFsaWQoc3RydWN0IGZpbGUgKmZpbGUpO1xuIGJvb2wgdmZpb19maWxlX2VuZm9yY2VkX2NvaGVyZW50KHN0cnVjdCBmaWxlICpmaWxlKTtcbi12b2lkIHZmaW9fZmlsZV9zZXRfa3ZtKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pO1xuK3ZvaWQgdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSk7XG4gXG4gI2RlZmluZSBWRklPX1BJTl9QQUdFU19NQVhfRU5UUklFU1x0KFBBR0VfU0laRS9zaXplb2YodW5zaWduZWQgbG9uZykpXG4gXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbmluZGV4IDY1ZWIyNmEwNTIwZDguLjM0YjRjNDM5MDhiM2IgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtMTMxNCw3ICsxMzE0LDcgQEAgdm9pZCBrdm1fZ2V0X2t2bShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0cmVmY291bnRfaW5jKFx1MDAyNmt2bS1cdTAwM2V1c2Vyc19jb3VudCk7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9nZXRfa3ZtKTtcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2dldF9rdm0pO1xuIFxuIC8qXG4gICogTWFrZSBzdXJlIHRoZSB2bSBpcyBub3QgZHVyaW5nIGRlc3RydWN0aW9uLCB3aGljaCBpcyBhIHNhZmUgdmVyc2lvbiBvZlxuQEAgLTEzMjQsMTQgKzEzMjQsMTQgQEAgYm9vbCBrdm1fZ2V0X2t2bV9zYWZlKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRyZXR1cm4gcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNmt2bS1cdTAwM2V1c2Vyc19jb3VudCk7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9nZXRfa3ZtX3NhZmUpO1xuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZ2V0X2t2bV9zYWZlKTtcbiBcbiB2b2lkIGt2bV9wdXRfa3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmt2bS1cdTAwM2V1c2Vyc19jb3VudCkpXG4gXHRcdGt2bV9kZXN0cm95X3ZtKGt2bSk7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9wdXRfa3ZtKTtcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3B1dF9rdm0pO1xuIFxuIC8qXG4gICogVXNlZCB0byBwdXQgYSByZWZlcmVuY2UgdGhhdCB3YXMgdGFrZW4gb24gYmVoYWxmIG9mIGFuIG9iamVjdCBhc3NvY2lhdGVkXG5AQCAtMTM1Miw2ICsxMzUyLDggQEAgc3RhdGljIGludCBrdm1fdm1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbiBcbiBcdGt2bV9pcnFmZF9yZWxlYXNlKGt2bSk7XG4gXG4rXHRXUklURV9PTkNFKGt2bS1cdTAwM2VmaWxlLCBOVUxMKTtcbitcbiBcdGt2bV9wdXRfa3ZtKGt2bSk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNTQ5Niw2ICs1NDk4LDE1IEBAIGJvb2wgZmlsZV9pc19rdm0oc3RydWN0IGZpbGUgKmZpbGUpXG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChmaWxlX2lzX2t2bSk7XG4gXG4rc3RydWN0IGt2bSAqZmlsZV90b19rdm0oc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0aWYgKCFmaWxlX2lzX2t2bShmaWxlKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXR1cm4gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChmaWxlX3RvX2t2bSk7XG4rXG4gc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUpXG4ge1xuIFx0Y2hhciBmZG5hbWVbSVRPQV9NQVhfTEVOICsgMV07XG5AQCAtNTUyNyw2ICs1NTM4LDkgQEAgc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUpXG4gXHQgKiBjYXNlcyBpdCB3aWxsIGJlIGNhbGxlZCBieSB0aGUgZmluYWwgZnB1dChmaWxlKSBhbmQgd2lsbCB0YWtlXG4gXHQgKiBjYXJlIG9mIGRvaW5nIGt2bV9wdXRfa3ZtKGt2bSkuXG4gXHQgKi9cbitcbitcdGt2bS1cdTAwM2VmaWxlID0gZmlsZTtcbitcbiBcdGt2bV91ZXZlbnRfbm90aWZ5X2NoYW5nZShLVk1fRVZFTlRfQ1JFQVRFX1ZNLCBrdm0pO1xuIFxuIFx0ZmRfaW5zdGFsbChmZCwgZmlsZSk7XG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vdmZpby5jIGIvdmlydC9rdm0vdmZpby5jXG5pbmRleCA2Y2RjNGU5YTMzM2EzLi4xOTU0OGE0MzA5NDI2IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vdmZpby5jXG4rKysgYi92aXJ0L2t2bS92ZmlvLmNcbkBAIC0zNSwxNSArMzUsMTUgQEAgc3RydWN0IGt2bV92ZmlvIHtcbiBcdGJvb2wgbm9uY29oZXJlbnQ7XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCBrdm1fdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrdm0gKmt2bSlcbitzdGF0aWMgdm9pZCBrdm1fdmZpb19maWxlX3NldF9rdm0oc3RydWN0IGZpbGUgKnZmaW9fZmlsZSwgc3RydWN0IGZpbGUgKmt2bSlcbiB7XG4tXHR2b2lkICgqZm4pKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga3ZtICprdm0pO1xuK1x0dm9pZCAoKmZuKShzdHJ1Y3QgZmlsZSAqdmZpb19maWxlLCBzdHJ1Y3QgZmlsZSAqa3ZtKTtcbiBcbiBcdGZuID0gc3ltYm9sX2dldCh2ZmlvX2ZpbGVfc2V0X2t2bSk7XG4gXHRpZiAoIWZuKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRmbihmaWxlLCBrdm0pO1xuK1x0Zm4odmZpb19maWxlLCBrdm0pO1xuIFxuIFx0c3ltYm9sX3B1dCh2ZmlvX2ZpbGVfc2V0X2t2bSk7XG4gfVxuQEAgLTE0NCw2ICsxNDQsNyBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZClcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZmaW8gKmt2ID0gZGV2LVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3Qga3ZtX3ZmaW9fZmlsZSAqa3ZmO1xuK1x0c3RydWN0IGZpbGUgKmt2bV9maWxlIF9fZnJlZShmcHV0KSA9IE5VTEw7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlscCBfX2ZyZWUoZnB1dCkgPSBOVUxMO1xuIFxuIFx0ZmlscCA9IGZnZXQoZmQpO1xuQEAgLTE1NCw2ICsxNTUsMTAgQEAgc3RhdGljIGludCBrdm1fdmZpb19maWxlX2FkZChzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmQpXG4gXHRpZiAoIWt2bV92ZmlvX2ZpbGVfaXNfdmFsaWQoZmlscCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0a3ZtX2ZpbGUgPSBnZXRfZmlsZV9hY3RpdmUoXHUwMDI2ZGV2LVx1MDAzZWt2bS1cdTAwM2VmaWxlKTtcbitcdGlmICgha3ZtX2ZpbGUpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuIFx0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2LVx1MDAzZWxvY2spO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShrdmYsIFx1MDAyNmt2LVx1MDAzZWZpbGVfbGlzdCwgbm9kZSkge1xuQEAgLTE2OCw3ICsxNzMsNyBAQCBzdGF0aWMgaW50IGt2bV92ZmlvX2ZpbGVfYWRkKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmZClcbiBcdGt2Zi1cdTAwM2VmaWxlID0gZ2V0X2ZpbGUoZmlscCk7XG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNmt2Zi1cdTAwM2Vub2RlLCBcdTAwMjZrdi1cdTAwM2VmaWxlX2xpc3QpO1xuIFxuLVx0a3ZtX3ZmaW9fZmlsZV9zZXRfa3ZtKGt2Zi1cdTAwM2VmaWxlLCBkZXYtXHUwMDNla3ZtKTtcbitcdGt2bV92ZmlvX2ZpbGVfc2V0X2t2bShrdmYtXHUwMDNlZmlsZSwga3ZtX2ZpbGUpO1xuIFx0a3ZtX3ZmaW9fdXBkYXRlX2NvaGVyZW5jeShkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDoxNzowMC4zOTAyNTA3OThaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODI3NTg1NDU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEFzc2Vzc21lbnQgb2YgS1ZNL1ZGSU8gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2gsIHdoaWNoIHJlZmFjdG9ycyBLVk0vVkZJTyBpbnRlcmFjdGlvbiB0byB1c2UgYHN0cnVjdCBmaWxlICpgIGZvciBwYWdlIHRyYWNraW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcsIGxpa2VseSAqZG9lc24ndCogd2FycmFudCBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0J3Mgc2VlIGlmIHRoYXQgaG9sZHMgdXAuXG5cbkZpcnN0LCB0aGUgcGF0Y2gncyBpbnRlbnQgaXMgY2xlYXI6IG1vZGVybml6ZSB0aGUgS1ZNIGFuZCBWRklPIGludGVyYWN0aW9uLCBzd2l0Y2hpbmcgdG8gdGhlIGBzdHJ1Y3QgZmlsZWAgcmVmZXJlbmNlIGNvdW50LiBXZSdyZSBtb3ZpbmcgYXdheSBmcm9tIGRpcmVjdCBga3ZtX2dldF9rdm1gL2Brdm1fcHV0X2t2bWAgY2FsbHMgaW4gZmF2b3Igb2YgYGdldF9maWxlYC9gZnB1dGAsIHdoaWNoIGlzIGEgZ29vZCBtb3ZlIGZvciBnZW5lcmFsIGtlcm5lbCBvYmplY3QgbWFuYWdlbWVudC5cblxuSSd2ZSBnb25lIG92ZXIgdGhlIGRpZmYgbWV0aWN1bG91c2x5LiBJdCB0b3VjaGVzIGEgZ29vZCBudW1iZXIgb2YgZmlsZXMsIGZyb20gcGFnZSB0cmFja2luZyB0byBWRklPIGRldmljZSBtYW5hZ2VtZW50LCBidXQgaXQncyBmdW5kYW1lbnRhbGx5IGFib3V0IHBvaW50ZXIgY2hhbmdlcyBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGUga2V5IGZ1bmN0aW9ucyDigJMgYGt2bV9wYWdlX3RyYWNrX3JlZ2lzdGVyX25vdGlmaWVyYCwgYGt2bV93cml0ZV90cmFja19hZGRfZ2ZuYCwgYW5kIHRoZWlyIGNvdW50ZXJwYXJ0cyDigJMgYXJlIHVwZGF0ZWQgdG8gdGFrZSBgc3RydWN0IGZpbGUgKmAgaW5zdGVhZCBvZiBgc3RydWN0IGt2bSAqYC4gSW1wb3J0YW50bHksIGl0IHNlZW1zIGxpa2UgdGhlc2UgY2hhbmdlcyBhcmUgYmVpbmcgcHJvcGFnYXRlZCB0aHJvdWdob3V0IHRoZSBWRklPIHN1YnN5c3RlbSBhcyB3ZWxsLCByZXBsYWNpbmcgYGt2bV9nZXRfa3ZtYC9ga3ZtX3B1dF9rdm1gIGNhbGxzIHdpdGggYGdldF9maWxlYCBhbmQgYGZwdXRgIGluIHZhcmlvdXMgY29udGV4dHMsIGxpa2UgYHZmaW9fYXBfbWRldl9zZXRfa3ZtYCBhbmQgYHZmaW9fZ3JvdXBfc2V0X2t2bWAuXG5cbkkndmUgY2hlY2tlZCBmb3IgdGhlIGNvbW1vbiBtZW1vcnkgc2FmZXR5IGJ1Z3MsIHRoYXQgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBjaGVja3M6XG4qICAgKipPYmplY3QgbGlmZXRpbWUvcmVmY291bnRpbmcgYnVnczoqKiBVc2UtYWZ0ZXItZnJlZSwgZG91YmxlIGBmcHV0YCwgZGFuZ2xpbmcgcG9pbnRlcnMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHJhY2UgY29uZGl0aW9ucyBvbiByZWZjb3VudHMuIEkgKmRvbid0KiBzZWUgYW55IG9idmlvdXMgcmVkIGZsYWdzIG9uIGEgcXVpY2sgcmVhZC4gTm8gbmV3IGFsbG9jYXRpb25zLCBubyBvYnZpb3VzIGRvdWJsZSBwdXRzLCBhbmQgdGhlIHJlZmNvdW50IGxvZ2ljIHNlZW1zIHNvdW5kLiBUaGVzZSBraW5kcyBvZiBpc3N1ZXMgYXJlIGV4YWN0bHkgd2hhdCBLQVNBTiBhbmQgbG9ja2RlcCBhcmUgZ29vZCBhdCBjYXRjaGluZy5cblxuTm93LCBsZXQncyBmb2N1cyBvbiB0aGUgS01TQU4gYW5nbGU6IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGlzIGlzIHdoZXJlIHdlIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsLlxuKiAgICoqTmV3IGFsbG9jYXRpb25zPyoqIE5vLiBOb3RoaW5nIG5ldyBpcyBiZWluZyBhbGxvY2F0ZWQgaGVyZS5cbiogICAqKkRhdGEgY29waWVkIHRvIHVzZXJzcGFjZT8qKiBOby4gTm8gYGNvcHlfdG9fdXNlcmAgY2FsbHMgb3IgYW55dGhpbmcgb2YgdGhhdCBzb3J0IHRoYXQgd291bGQgaW5kaWNhdGUgaW5mb3JtYXRpb24gbGVha2FnZS5cbiogICAqKkNvbmRpdGlvbmFsIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIGluc3RhbmNlcyBvZiB0aGlzLlxuKiAgICoqU3RydWN0IHBhZGRpbmcgY2hhbmdlcz8qKiBOb3BlLCBubyBjaGFuZ2VzIHRvIHN0cnVjdCBwYWRkaW5nLCBzZXJpYWxpemF0aW9uLCBvciBkZXNlcmlhbGl6YXRpb24uXG5cblRoZSBjb3JlIG9mIEtNU0FOIGlzIHRvIGRldGVjdCBpZiBhIG1lbW9yeSByZWFkIG9jY3VycyBiZWZvcmUgdGhlIG1lbW9yeSBpcyBpbml0aWFsaXplZC4gV2UgbmVlZCB0byBhc3Nlc3MgaWYgdGhlIHBhdGNoIGludHJvZHVjZXMgcmlza3Mgd2hlcmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZC5cblxuTG9va2luZyBiYWNrLCB0aGVyZSBhcmUgbm8gc3VjaCByaXNrcyBJIHNlZTsgdGhlIG9ubHkgY2hhbmdlcyBhcmUgdG8gdHlwZSBpbmZvcm1hdGlvbiwgc28gbm8gS01TQU4gaXMgbmVlZGVkLlxuXG5JJ3ZlIHJlLWV4YW1pbmVkIHRoZSBjb2RlLiBJIGFtIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LiBUaGlzIHBhdGNoIGZvY3VzZXMgb24gcG9pbnRlciByZS10eXBpbmcgYW5kIHJlZmVyZW5jZSBjb3VudGluZyB1c2luZyBrZXJuZWwgcHJpbWl0aXZlcywgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdGhhdCBLTVNBTiB3b3VsZCBkZXRlY3QuIEtBU0FOIGFuZCBsb2NrZGVwIHNob3VsZCBiZSBtb3JlIHRoYW4gc3VmZmljaWVudCB0byBjYXRjaCBwb3RlbnRpYWwgZXJyb3JzIGhlcmUuXG5cbioqVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4qKiBJJ20gc2V0dGluZyB0aGUgcmVzdWx0cyBhbmQgbW92aW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzczLCJPdXRwdXRUb2tlbnMiOjE4NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDoxNzowOC42NjYxMTc1NDdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBpbnRlcmFjdGlvbiBiZXR3ZWVuIEtWTSBhbmQgVkZJTyAoYXMgd2VsbCBhcyB4ODYgcGFnZSB0cmFja2luZyBhbmQgczM5MCB2ZmlvLWFwKSBieSBwYXNzaW5nIGFuZCB0cmFja2luZyBgc3RydWN0IGZpbGUgKmAgaW5zdGVhZCBvZiByYXcgYHN0cnVjdCBrdm0gKmAgcG9pbnRlcnMuXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzLCBmaWxlL0tWTSByZWZlcmVuY2UgY291bnRpbmcsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFN1Y2ggaXNzdWVzIGFyZSBtZW1vcnkgbWFuYWdlbWVudCBidWdzIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgYnVmZmVycyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGRhdGEgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEhlbmNlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgd2FycmFudGluZyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBpbnRlcmFjdGlvbiBiZXR3ZWVuIEtWTSBhbmQgVkZJTyAoYXMgd2VsbCBhcyB4ODYgcGFnZSB0cmFja2luZyBhbmQgczM5MCB2ZmlvLWFwKSBieSBwYXNzaW5nIGFuZCB0cmFja2luZyBgc3RydWN0IGZpbGUgKmAgaW5zdGVhZCBvZiByYXcgYHN0cnVjdCBrdm0gKmAgcG9pbnRlcnMuXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzLCBmaWxlL0tWTSByZWZlcmVuY2UgY291bnRpbmcsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFN1Y2ggaXNzdWVzIGFyZSBtZW1vcnkgbWFuYWdlbWVudCBidWdzIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgYnVmZmVycyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGRhdGEgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEhlbmNlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgd2FycmFudGluZyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxbqqz[1] Phase: Succeeded StartedAt: 2026-09-04 10:17:20 +0000 UTC FinishedAt: 2026-09-04 10:17:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 10:17:20 +0000 UTC FinishedAt: 2026-09-04 10:17:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[2] Phase: Succeeded StartedAt: 2026-09-04 10:17:20 +0000 UTC FinishedAt: 2026-09-04 14:01:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 10:17:20 +0000 UTC FinishedAt: 2026-09-04 14:01:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 10:17:20 +0000 UTC FinishedAt: 2026-09-04 10:17:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 10:17:20 +0000 UTC FinishedAt: 2026-09-04 10:17:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowxbqqz/series-workflowxbqqz-convert-artifact-4260374342/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 10:17:31 +0000 UTC FinishedAt: 2026-09-04 10:36:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 10:17:31 +0000 UTC FinishedAt: 2026-09-04 10:36:38 +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:*c5084f3a-5de6-46fb-a3f6-b69ba5950315,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-workflowxbqqz/series-workflowxbqqz-convert-artifact-4260374342/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": "85863539-97fe-4222-967f-039a0835b8b0", "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-workflowxbqqz/series-workflowxbqqz-build-action-1239217372/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 10:17:31 +0000 UTC FinishedAt: 2026-09-04 10:36:28 +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:*c5084f3a-5de6-46fb-a3f6-b69ba5950315,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-workflowxbqqz/series-workflowxbqqz-convert-artifact-4260374342/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": "85863539-97fe-4222-967f-039a0835b8b0", "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-workflowxbqqz/series-workflowxbqqz-build-action-1239217372/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 10:36:38 +0000 UTC FinishedAt: 2026-09-04 10:36:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 10:36:38 +0000 UTC FinishedAt: 2026-09-04 10:36:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 10:36:38 +0000 UTC FinishedAt: 2026-09-04 10:36:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 10:36:38 +0000 UTC FinishedAt: 2026-09-04 10:36:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowxbqqz/series-workflowxbqqz-convert-artifact-2813892761/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 10:36:48 +0000 UTC FinishedAt: 2026-09-04 10:38:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 10:36:48 +0000 UTC FinishedAt: 2026-09-04 10:38:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*85863539-97fe-4222-967f-039a0835b8b0,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-workflowxbqqz/series-workflowxbqqz-build-action-1239217372/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-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 10:38:41 +0000 UTC FinishedAt: 2026-09-04 10:38:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 10:38:41 +0000 UTC FinishedAt: 2026-09-04 10:38:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 10:38:41 +0000 UTC FinishedAt: 2026-09-04 10:56:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 10:38:41 +0000 UTC FinishedAt: 2026-09-04 10:56:59 +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:*c5084f3a-5de6-46fb-a3f6-b69ba5950315,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-workflowxbqqz/series-workflowxbqqz-convert-artifact-2813892761/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": "9b839fa2-5d68-4330-be3c-e37b322c84eb", "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-workflowxbqqz/series-workflowxbqqz-build-action-463644661/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 10:38:41 +0000 UTC FinishedAt: 2026-09-04 10:56:49 +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:*c5084f3a-5de6-46fb-a3f6-b69ba5950315,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-workflowxbqqz/series-workflowxbqqz-convert-artifact-2813892761/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": "9b839fa2-5d68-4330-be3c-e37b322c84eb", "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-workflowxbqqz/series-workflowxbqqz-build-action-463644661/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 10:56:59 +0000 UTC FinishedAt: 2026-09-04 10:56:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 10:56:59 +0000 UTC FinishedAt: 2026-09-04 10:56:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 10:56:59 +0000 UTC FinishedAt: 2026-09-04 10:58:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 10:56:59 +0000 UTC FinishedAt: 2026-09-04 10:58:45 +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:*9b839fa2-5d68-4330-be3c-e37b322c84eb,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-workflowxbqqz/series-workflowxbqqz-build-action-463644661/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-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 10:58:55 +0000 UTC FinishedAt: 2026-09-04 14:01:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 10:58:55 +0000 UTC FinishedAt: 2026-09-04 14:01:52 +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":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"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:*85863539-97fe-4222-967f-039a0835b8b0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9b839fa2-5d68-4330-be3c-e37b322c84eb,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-workflowxbqqz/series-workflowxbqqz-build-action-1239217372/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-workflowxbqqz/series-workflowxbqqz-build-action-463644661/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 10:58:55 +0000 UTC FinishedAt: 2026-09-04 10:59:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 10:58:55 +0000 UTC FinishedAt: 2026-09-04 10:58:59 +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":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"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-workflowxbqqz/series-workflowxbqqz-convert-artifact-1075128462/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 10:58:55 +0000 UTC FinishedAt: 2026-09-04 10:58:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 10:58:55 +0000 UTC FinishedAt: 2026-09-04 10:58:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 10:58:55 +0000 UTC FinishedAt: 2026-09-04 10:58:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 10:59:05 +0000 UTC FinishedAt: 2026-09-04 14:01:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbqqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vfio_file_add","vfio_file_set_kvm","vfio_group_set_kvm","vfio_device_get_kvm_safe","vfio_device_put_kvm","file_to_kvm","kvm_vm_release","kvm_dev_ioctl_create_vm","kvm_page_track_register_notifier","kvm_page_track_unregister_notifier","kvm_write_track_add_gfn","kvm_write_track_remove_gfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"940de590b839f71d6dc846160534bf202401b8b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","VFIO","VFIO_GROUP","VFIO_CONTAINER","VFIO_DEVICE_CDEV","DRM_I915_GVT_KVMGT"],"series_id":"308ccf27-f252-4e8c-8e88-572275635063","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 10:59:05 +0000 UTC FinishedAt: 2026-09-04 14:01:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*85863539-97fe-4222-967f-039a0835b8b0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9b839fa2-5d68-4330-be3c-e37b322c84eb,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-workflowxbqqz/series-workflowxbqqz-build-action-1239217372/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-workflowxbqqz/series-workflowxbqqz-build-action-463644661/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-workflowxbqqz/series-workflowxbqqz-convert-artifact-1075128462/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,}