Name: series-workflowfjjxg Phase: Succeeded StartedAt: 2026-09-05 08:59:28 +0000 UTC FinishedAt: 2026-09-05 13:01:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[0] Phase: Succeeded StartedAt: 2026-09-05 08:59:28 +0000 UTC FinishedAt: 2026-09-05 09:17:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 08:59:28 +0000 UTC FinishedAt: 2026-09-05 09:17:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "80dd7e754b3aa9637a0758ad93fa209f9650ec48", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_CFM", "BRIDGE_MRP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "80dd7e754b3aa9637a0758ad93fa209f9650ec48", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_CFM", "BRIDGE_MRP" ], "series_id": "812fa91c-2e34-4104-8775-050a1d6aa243" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "br_add_frame", "br_del_frame", "br_del_frame_all", "br_cfm_mep_create", "br_cfm_mep_delete", "br_mrp_add", "br_mrp_del", "br_dev_delete" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfQ0ZNJiMzNDssCiAgICAmIzM0O0JSSURHRV9NUlAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl9hZGRfZnJhbWUmIzM0OywKICAgICYjMzQ7YnJfZGVsX2ZyYW1lJiMzNDssCiAgICAmIzM0O2JyX2RlbF9mcmFtZV9hbGwmIzM0OywKICAgICYjMzQ7YnJfY2ZtX21lcF9jcmVhdGUmIzM0OywKICAgICYjMzQ7YnJfY2ZtX21lcF9kZWxldGUmIzM0OywKICAgICYjMzQ7YnJfbXJwX2FkZCYjMzQ7LAogICAgJiMzNDticl9tcnBfZGVsJiMzNDssCiAgICAmIzM0O2JyX2Rldl9kZWxldGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgZXRoZXJuZXQgZnJhbWUgaGFuZGxlcnMgKHN1Y2ggYXMgQ0ZNIGFuZCBNUlApIGFyZSByZWdpc3RlcmVkIGluIHRoZSBicmlkZ2UgbW9kdWxlLiBJbnN0ZWFkIG9mIHVzaW5nIHN0YXRpYyBnbG9iYWwgYHN0cnVjdCBicl9mcmFtZV90eXBlYCB2YXJpYWJsZXMsIGl0IGR5bmFtaWNhbGx5IGFsbG9jYXRlcyBgc3RydWN0IGJyX2ZyYW1lX3R5cGVgIHVzaW5nIGBrbWFsbG9jX29iamAgYW5kIHByb3RlY3RzIGl0cyByZW1vdmFsIHdpdGggYGtmcmVlX3JjdWAuXG5cbkFsbCBmaWVsZHMgKGB0eXBlYCwgYGZyYW1lX2hhbmRsZXJgLCBhbmQgYGxpc3RgKSBhY2Nlc3NlZCBieSBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYCBhbmQgbGlzdCB0cmF2ZXJzYWwgZnVuY3Rpb25zIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBpbnNlcnRpb24gaW50byBgYnItXHUwMDNlZnJhbWVfdHlwZV9saXN0YC4gTm9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgYXJlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvciBjYWxjdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyAoc3VjaCBhcyBSQ1Ugc3luY2hyb25pemF0aW9uIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYnJpZGdlIEV0aGVybmV0IGZyYW1lIHR5cGUgaGFuZGxlciByZWdpc3RyYXRpb24vZGVyZWdpc3RyYXRpb24gbWVjaGFuaXNtLiBQcmV2aW91c2x5LCBzdGF0aWNhbGx5IGFsbG9jYXRlZCBmcmFtZSB0eXBlIHN0cnVjdHVyZXMgKHN1Y2ggYXMgY2ZtX2ZyYW1lX3R5cGUgYW5kIG1ycF9mcmFtZV90eXBlKSB3ZXJlIHJlZ2lzdGVyZWQgZGlyZWN0bHkgdG8gYnJpZGdlIGluc3RhbmNlcywgd2hpY2ggY291bGQgbGVhZCB0byBsaXN0IGNvcnJ1cHRpb24gYWNyb3NzIG11bHRpcGxlIGJyaWRnZXMuIFRoZSBwYXRjaCBjaGFuZ2VzIHRoaXMgdG8gZHluYW1pYyBwZXItYnJpZGdlIGFsbG9jYXRpb24gYW5kIFJDVS1iYXNlZCBmcmVlaW5nIG9mIGZyYW1lIHR5cGUgbm9kZXMsIGludHJvZHVjZXMgZXJyb3IgaGFuZGxpbmcgb24gYWxsb2NhdGlvbiBmYWlsdXJlLCBhbmQgYWRkcyBjbGVhbnVwIG9mIGFsbCByZWdpc3RlcmVkIGZyYW1lIHR5cGVzIGR1cmluZyBicmlkZ2UgZGV2aWNlIGRlbGV0aW9uIChicl9kZXZfZGVsZXRlKS4gVGhlc2UgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjaGFuZ2VzIHdhcnJhbnQgZnV6emluZyB0byB1bmNvdmVyIHBvdGVudGlhbCBtZW1vcnkgbGVha3MsIGNvbmN1cnJlbmN5IGlzc3Vlcywgb3IgZXJyb3IgaGFuZGxpbmcgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiNjZmZGEyMjdiMjI5YzBhZmNmMjBlMzk1MTcxMjUyOTYzYWY2NjE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwOToxNjo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2NmbS5jIGIvbmV0L2JyaWRnZS9icl9jZm0uY1xuaW5kZXggZGVhNTZmZmZhMWMxOS4uNTc5MDI0ODU4ODI5OCAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfY2ZtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfY2ZtLmNcbkBAIC00ODksMTEgJiM0Mzs0ODksNiBAQCBzdGF0aWMgaW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSBjZm1fZnJhbWVfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuLVx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9DRk0pLFxuLVx0LmZyYW1lX2hhbmRsZXIgPSBicl9jZm1fZnJhbWVfcngsXG4tfTtcbi1cbiBpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0XHQgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsXG4gXHRcdCAgICAgIHN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSAqY29uc3QgY3JlYXRlLFxuQEAgLTUwMSw2ICYjNDM7NDk2LDcgQEAgaW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiB7XG4gXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwO1xuIFx0c3RydWN0IGJyX2NmbV9tZXAgKm1lcDtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuIFx0QVNTRVJUX1JUTkwoKTtcbiBcbkBAIC01NTgsOCAmIzQzOzU1NCwxMyBAQCBpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm1lcC1cdTAwM2VwZWVyX21lcF9saXN0KTtcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm1lcC1cdTAwM2VjY21fdHhfZHdvcmssIGNjbV90eF93b3JrX2V4cGlyZWQpO1xuIFxuLVx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1lcF9saXN0KSlcbi1cdFx0YnJfYWRkX2ZyYW1lKGJyLCBcdTAwMjZjZm1fZnJhbWVfdHlwZSk7XG4mIzQzO1x0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1lcF9saXN0KSkge1xuJiM0MztcdFx0ZXJyID0gYnJfYWRkX2ZyYW1lKGJyLCBjcHVfdG9fYmUxNihFVEhfUF9DRk0pLCBicl9jZm1fZnJhbWVfcngpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRrZnJlZShtZXApO1xuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbiBcdGhsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZtZXAtXHUwMDNlaGVhZCwgXHUwMDI2YnItXHUwMDNlbWVwX2xpc3QpO1xuIFxuQEAgLTU4OCw3ICYjNDM7NTg5LDcgQEAgc3RhdGljIHZvaWQgbWVwX2RlbGV0ZV9pbXBsZW1lbnRhdGlvbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gXHRrZnJlZV9yY3UobWVwLCByY3UpO1xuIFxuIFx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1lcF9saXN0KSlcbi1cdFx0YnJfZGVsX2ZyYW1lKGJyLCBcdTAwMjZjZm1fZnJhbWVfdHlwZSk7XG4mIzQzO1x0XHRicl9kZWxfZnJhbWUoYnIsIGNwdV90b19iZTE2KEVUSF9QX0NGTSkpO1xuIH1cbiBcbiBpbnQgYnJfY2ZtX21lcF9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaWYuYyBiL25ldC9icmlkZ2UvYnJfaWYuY1xuaW5kZXggYzUyNjEzNDMxZjg4Ni4uZmU4ZTlhNDdlMWFjMSAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfaWYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9pZi5jXG5AQCAtMzk3LDYgJiM0MzszOTcsOCBAQCB2b2lkIGJyX2Rldl9kZWxldGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2YnItXHUwMDNldGNuX3RpbWVyKTtcbiBcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZici1cdTAwM2VnY193b3JrKTtcbiBcbiYjNDM7XHRicl9kZWxfZnJhbWVfYWxsKGJyKTtcbiYjNDM7XG4gXHRicl9zeXNmc19kZWxicihici1cdTAwM2VkZXYpO1xuIFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoYnItXHUwMDNlZGV2LCBoZWFkKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jXG5pbmRleCBkODdhNWY5ZmE5MmI3Li4wN2VmZDBmYmNmOWNkIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmNcbkBAIC00NjgsMTggJiM0Mzs0NjgsNDggQEAgcnhfaGFuZGxlcl9mdW5jX3QgKmJyX2dldF9yeF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gYnJfaGFuZGxlX2ZyYW1lO1xuIH1cbiBcbi12b2lkIGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdClcbiYjNDM7aW50IGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlLFxuJiM0MztcdFx0IGludCAoKmZyYW1lX2hhbmRsZXIpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikpXG4ge1xuJiM0MztcdHN0cnVjdCBicl9mcmFtZV90eXBlICpmdDtcbiYjNDM7XG4mIzQzO1x0aGxpc3RfZm9yX2VhY2hfZW50cnkoZnQsIFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdCkge1xuJiM0MztcdFx0aWYgKGZ0LVx1MDAzZXR5cGUgPT0gdHlwZSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmdCA9IGttYWxsb2Nfb2JqKCpmdCk7XG4mIzQzO1x0aWYgKCFmdClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRmdC1cdTAwM2V0eXBlID0gdHlwZTtcbiYjNDM7XHRmdC1cdTAwM2VmcmFtZV9oYW5kbGVyID0gZnJhbWVfaGFuZGxlcjtcbiBcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZmdC1cdTAwM2VsaXN0LCBcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4tdm9pZCBicl9kZWxfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQpXG4mIzQzO3ZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgX19iZTE2IHR5cGUpXG4ge1xuLVx0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKnRtcDtcbiYjNDM7XHRzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQ7XG4gXG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsIFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdClcbi1cdFx0aWYgKGZ0ID09IHRtcCkge1xuJiM0MztcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZ0LCBcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHtcbiYjNDM7XHRcdGlmIChmdC1cdTAwM2V0eXBlID09IHR5cGUpIHtcbiBcdFx0XHRobGlzdF9kZWxfcmN1KFx1MDAyNmZ0LVx1MDAzZWxpc3QpO1xuJiM0MztcdFx0XHRrZnJlZV9yY3UoZnQsIHJjdSk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGJyX2RlbF9mcmFtZV9hbGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0O1xuJiM0MztcdHN0cnVjdCBobGlzdF9ub2RlICpuO1xuJiM0MztcbiYjNDM7XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZ0LCBuLCBcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHtcbiYjNDM7XHRcdGhsaXN0X2RlbF9yY3UoXHUwMDI2ZnQtXHUwMDNlbGlzdCk7XG4mIzQzO1x0XHRrZnJlZV9yY3UoZnQsIHJjdSk7XG4mIzQzO1x0fVxuIH1cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX21ycC5jIGIvbmV0L2JyaWRnZS9icl9tcnAuY1xuaW5kZXggZWYxNmQwNzAzOTI0MS4uNTExYWU4YWYzZDAzMyAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfbXJwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfbXJwLmNcbkBAIC04LDExICYjNDM7OCw2IEBAIHN0YXRpYyBjb25zdCB1OCBtcnBfaW5fdGVzdF9kbWFjW0VUSF9BTEVOXSA9IHsgMHgxLCAweDE1LCAweDRlLCAweDAsIDB4MCwgMHgzIH07XG4gXG4gc3RhdGljIGludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbi1zdGF0aWMgc3RydWN0IGJyX2ZyYW1lX3R5cGUgbXJwX2ZyYW1lX3R5cGUgX19yZWFkX21vc3RseSA9IHtcbi1cdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSxcbi1cdC5mcmFtZV9oYW5kbGVyID0gYnJfbXJwX3Byb2Nlc3MsXG4tfTtcbi1cbiBzdGF0aWMgYm9vbCBicl9tcnBfaXNfcmluZ19wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBfcG9ydCxcbiBcdFx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnNfcG9ydCxcbiBcdFx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5AQCAtNDg2LDcgJiM0Mzs0ODEsNyBAQCBzdGF0aWMgdm9pZCBicl9tcnBfZGVsX2ltcGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApXG4gXHRrZnJlZV9yY3UobXJwLCByY3UpO1xuIFxuIFx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1ycF9saXN0KSlcbi1cdFx0YnJfZGVsX2ZyYW1lKGJyLCBcdTAwMjZtcnBfZnJhbWVfdHlwZSk7XG4mIzQzO1x0XHRicl9kZWxfZnJhbWUoYnIsIGNwdV90b19iZTE2KEVUSF9QX01SUCkpO1xuIH1cbiBcbiAvKiBBZGRzIGEgbmV3IE1SUCBpbnN0YW5jZS5cbkBAIC01MzUsMTMgJiM0Mzs1MzAsMTYgQEAgaW50IGJyX21ycF9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSlcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZWxvY2spO1xuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1ycC1cdTAwM2VzX3BvcnQsIHApO1xuIFxuLVx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1ycF9saXN0KSlcbi1cdFx0YnJfYWRkX2ZyYW1lKGJyLCBcdTAwMjZtcnBfZnJhbWVfdHlwZSk7XG4tXG4gXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZtcnAtXHUwMDNldGVzdF93b3JrLCBicl9tcnBfdGVzdF93b3JrX2V4cGlyZWQpO1xuIFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2bXJwLVx1MDAzZWluX3Rlc3Rfd29yaywgYnJfbXJwX2luX3Rlc3Rfd29ya19leHBpcmVkKTtcbiBcdGhsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZtcnAtXHUwMDNlbGlzdCwgXHUwMDI2YnItXHUwMDNlbXJwX2xpc3QpO1xuIFxuJiM0MztcdGlmIChobGlzdF9pc19zaW5ndWxhcl9ub2RlKFx1MDAyNm1ycC1cdTAwM2VsaXN0LCBcdTAwMjZici1cdTAwM2VtcnBfbGlzdCkpIHtcbiYjNDM7XHRcdGVyciA9IGJyX2FkZF9mcmFtZShiciwgY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSwgYnJfbXJwX3Byb2Nlc3MpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBkZWxldGVfbXJwO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRlcnIgPSBicl9tcnBfc3dpdGNoZGV2X2FkZChiciwgbXJwKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZGVsZXRlX21ycDtcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG5pbmRleCBkMzM3YjFjZmI5ODBkLi41MTYzMDE3ZmViNzRkIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG5AQCAtOTM3LDEwICYjNDM7OTM3LDE0IEBAIHN0cnVjdCBicl9mcmFtZV90eXBlIHtcbiBcdGludFx0XHRcdCgqZnJhbWVfaGFuZGxlcikoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcbiBcdFx0XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZVx0bGlzdDtcbiYjNDM7XHRzdHJ1Y3QgcmN1X2hlYWRcdFx0cmN1O1xuIH07XG4gXG4tdm9pZCBicl9hZGRfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQpO1xuLXZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTtcbiYjNDM7aW50IGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlLFxuJiM0MztcdFx0IGludCAoKmZyYW1lX2hhbmRsZXIpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikpO1xuJiM0Mzt2b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlKTtcbiYjNDM7dm9pZCBicl9kZWxfZnJhbWVfYWxsKHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG4gXG4gc3RhdGljIGlubGluZSBib29sIGJyX3J4X2hhbmRsZXJfY2hlY2tfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjE2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfQ0ZNJiMzNDssCiAgICAmIzM0O0JSSURHRV9NUlAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl9hZGRfZnJhbWUmIzM0OywKICAgICYjMzQ7YnJfZGVsX2ZyYW1lJiMzNDssCiAgICAmIzM0O2JyX2RlbF9mcmFtZV9hbGwmIzM0OywKICAgICYjMzQ7YnJfY2ZtX21lcF9jcmVhdGUmIzM0OywKICAgICYjMzQ7YnJfY2ZtX21lcF9kZWxldGUmIzM0OywKICAgICYjMzQ7YnJfbXJwX2FkZCYjMzQ7LAogICAgJiMzNDticl9tcnBfZGVsJiMzNDssCiAgICAmIzM0O2JyX2Rldl9kZWxldGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBicmlkZ2UgRXRoZXJuZXQgZnJhbWUgdHlwZSBoYW5kbGVyIHJlZ2lzdHJhdGlvbi9kZXJlZ2lzdHJhdGlvbiBtZWNoYW5pc20uIFByZXZpb3VzbHksIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGZyYW1lIHR5cGUgc3RydWN0dXJlcyAoc3VjaCBhcyBjZm1fZnJhbWVfdHlwZSBhbmQgbXJwX2ZyYW1lX3R5cGUpIHdlcmUgcmVnaXN0ZXJlZCBkaXJlY3RseSB0byBicmlkZ2UgaW5zdGFuY2VzLCB3aGljaCBjb3VsZCBsZWFkIHRvIGxpc3QgY29ycnVwdGlvbiBhY3Jvc3MgbXVsdGlwbGUgYnJpZGdlcy4gVGhlIHBhdGNoIGNoYW5nZXMgdGhpcyB0byBkeW5hbWljIHBlci1icmlkZ2UgYWxsb2NhdGlvbiBhbmQgUkNVLWJhc2VkIGZyZWVpbmcgb2YgZnJhbWUgdHlwZSBub2RlcywgaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBvbiBhbGxvY2F0aW9uIGZhaWx1cmUsIGFuZCBhZGRzIGNsZWFudXAgb2YgYWxsIHJlZ2lzdGVyZWQgZnJhbWUgdHlwZXMgZHVyaW5nIGJyaWRnZSBkZXZpY2UgZGVsZXRpb24gKGJyX2Rldl9kZWxldGUpLiBUaGVzZSByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNoYW5nZXMgd2FycmFudCBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgY29uY3VycmVuY3kgaXNzdWVzLCBvciBlcnJvciBoYW5kbGluZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI2NmZkYTIyN2IyMjljMGFmY2YyMGUzOTUxNzEyNTI5NjNhZjY2MTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA5OjE2OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9jZm0uYyBiL25ldC9icmlkZ2UvYnJfY2ZtLmMKaW5kZXggZGVhNTZmZmZhMWMxOS4uNTc5MDI0ODU4ODI5OCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9jZm0uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX2NmbS5jCkBAIC00ODksMTEgJiM0Mzs0ODksNiBAQCBzdGF0aWMgaW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGJyX2ZyYW1lX3R5cGUgY2ZtX2ZyYW1lX3R5cGUgX19yZWFkX21vc3RseSA9IHsKLQkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0NGTSksCi0JLmZyYW1lX2hhbmRsZXIgPSBicl9jZm1fZnJhbWVfcngsCi19OwotCiBpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogCQkgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsCiAJCSAgICAgIHN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSAqY29uc3QgY3JlYXRlLApAQCAtNTAxLDYgJiM0Mzs0OTYsNyBAQCBpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogewogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7CiAJc3RydWN0IGJyX2NmbV9tZXAgKm1lcDsKJiM0MzsJaW50IGVycjsKIAogCUFTU0VSVF9SVE5MKCk7CiAKQEAgLTU1OCw4ICYjNDM7NTU0LDEzIEBAIGludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCiAJSU5JVF9ITElTVF9IRUFEKCZhbXA7bWVwLSZndDtwZWVyX21lcF9saXN0KTsKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO21lcC0mZ3Q7Y2NtX3R4X2R3b3JrLCBjY21fdHhfd29ya19leHBpcmVkKTsKIAotCWlmIChobGlzdF9lbXB0eSgmYW1wO2JyLSZndDttZXBfbGlzdCkpCi0JCWJyX2FkZF9mcmFtZShiciwgJmFtcDtjZm1fZnJhbWVfdHlwZSk7CiYjNDM7CWlmIChobGlzdF9lbXB0eSgmYW1wO2JyLSZndDttZXBfbGlzdCkpIHsKJiM0MzsJCWVyciA9IGJyX2FkZF9mcmFtZShiciwgY3B1X3RvX2JlMTYoRVRIX1BfQ0ZNKSwgYnJfY2ZtX2ZyYW1lX3J4KTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlrZnJlZShtZXApOwomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CX0KIAogCWhsaXN0X2FkZF90YWlsX3JjdSgmYW1wO21lcC0mZ3Q7aGVhZCwgJmFtcDtici0mZ3Q7bWVwX2xpc3QpOwogCkBAIC01ODgsNyAmIzQzOzU4OSw3IEBAIHN0YXRpYyB2b2lkIG1lcF9kZWxldGVfaW1wbGVtZW50YXRpb24oc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogCWtmcmVlX3JjdShtZXAsIHJjdSk7CiAKIAlpZiAoaGxpc3RfZW1wdHkoJmFtcDtici0mZ3Q7bWVwX2xpc3QpKQotCQlicl9kZWxfZnJhbWUoYnIsICZhbXA7Y2ZtX2ZyYW1lX3R5cGUpOwomIzQzOwkJYnJfZGVsX2ZyYW1lKGJyLCBjcHVfdG9fYmUxNihFVEhfUF9DRk0pKTsKIH0KIAogaW50IGJyX2NmbV9tZXBfZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaWYuYyBiL25ldC9icmlkZ2UvYnJfaWYuYwppbmRleCBjNTI2MTM0MzFmODg2Li5mZThlOWE0N2UxYWMxIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9pZi5jCkBAIC0zOTcsNiAmIzQzOzM5Nyw4IEBAIHZvaWQgYnJfZGV2X2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDtici0mZ3Q7dGNuX3RpbWVyKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtici0mZ3Q7Z2Nfd29yayk7CiAKJiM0MzsJYnJfZGVsX2ZyYW1lX2FsbChicik7CiYjNDM7CiAJYnJfc3lzZnNfZGVsYnIoYnItJmd0O2Rldik7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoYnItJmd0O2RldiwgaGVhZCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKaW5kZXggZDg3YTVmOWZhOTJiNy4uMDdlZmQwZmJjZjljZCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwpAQCAtNDY4LDE4ICYjNDM7NDY4LDQ4IEBAIHJ4X2hhbmRsZXJfZnVuY190ICpicl9nZXRfcnhfaGFuZGxlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXJldHVybiBicl9oYW5kbGVfZnJhbWU7CiB9CiAKLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KQomIzQzO2ludCBicl9hZGRfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBfX2JlMTYgdHlwZSwKJiM0MzsJCSBpbnQgKCpmcmFtZV9oYW5kbGVyKShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LAomIzQzOwkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSkKIHsKJiM0MzsJc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0OwomIzQzOwomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeShmdCwgJmFtcDtici0mZ3Q7ZnJhbWVfdHlwZV9saXN0LCBsaXN0KSB7CiYjNDM7CQlpZiAoZnQtJmd0O3R5cGUgPT0gdHlwZSkKJiM0MzsJCQlyZXR1cm4gLUVFWElTVDsKJiM0MzsJfQomIzQzOwomIzQzOwlmdCA9IGttYWxsb2Nfb2JqKCpmdCk7CiYjNDM7CWlmICghZnQpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJZnQtJmd0O3R5cGUgPSB0eXBlOwomIzQzOwlmdC0mZ3Q7ZnJhbWVfaGFuZGxlciA9IGZyYW1lX2hhbmRsZXI7CiAJaGxpc3RfYWRkX2hlYWRfcmN1KCZhbXA7ZnQtJmd0O2xpc3QsICZhbXA7YnItJmd0O2ZyYW1lX3R5cGVfbGlzdCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCi12b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdCkKJiM0Mzt2b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlKQogewotCXN0cnVjdCBicl9mcmFtZV90eXBlICp0bXA7CiYjNDM7CXN0cnVjdCBicl9mcmFtZV90eXBlICpmdDsKIAotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJmFtcDtici0mZ3Q7ZnJhbWVfdHlwZV9saXN0LCBsaXN0KQotCQlpZiAoZnQgPT0gdG1wKSB7CiYjNDM7CWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZ0LCAmYW1wO2JyLSZndDtmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHsKJiM0MzsJCWlmIChmdC0mZ3Q7dHlwZSA9PSB0eXBlKSB7CiAJCQlobGlzdF9kZWxfcmN1KCZhbXA7ZnQtJmd0O2xpc3QpOwomIzQzOwkJCWtmcmVlX3JjdShmdCwgcmN1KTsKIAkJCXJldHVybjsKIAkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgYnJfZGVsX2ZyYW1lX2FsbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQ7CiYjNDM7CXN0cnVjdCBobGlzdF9ub2RlICpuOwomIzQzOwomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZ0LCBuLCAmYW1wO2JyLSZndDtmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHsKJiM0MzsJCWhsaXN0X2RlbF9yY3UoJmFtcDtmdC0mZ3Q7bGlzdCk7CiYjNDM7CQlrZnJlZV9yY3UoZnQsIHJjdSk7CiYjNDM7CX0KIH0KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXJwLmMgYi9uZXQvYnJpZGdlL2JyX21ycC5jCmluZGV4IGVmMTZkMDcwMzkyNDEuLjUxMWFlOGFmM2QwMzMgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbXJwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9tcnAuYwpAQCAtOCwxMSAmIzQzOzgsNiBAQCBzdGF0aWMgY29uc3QgdTggbXJwX2luX3Rlc3RfZG1hY1tFVEhfQUxFTl0gPSB7IDB4MSwgMHgxNSwgMHg0ZSwgMHgwLCAweDAsIDB4MyB9OwogCiBzdGF0aWMgaW50IGJyX21ycF9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBza19idWZmICpza2IpOwogCi1zdGF0aWMgc3RydWN0IGJyX2ZyYW1lX3R5cGUgbXJwX2ZyYW1lX3R5cGUgX19yZWFkX21vc3RseSA9IHsKLQkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX01SUCksCi0JLmZyYW1lX2hhbmRsZXIgPSBicl9tcnBfcHJvY2VzcywKLX07Ci0KIHN0YXRpYyBib29sIGJyX21ycF9pc19yaW5nX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcF9wb3J0LAogCQkJCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnNfcG9ydCwKIAkJCQlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KQpAQCAtNDg2LDcgJiM0Mzs0ODEsNyBAQCBzdGF0aWMgdm9pZCBicl9tcnBfZGVsX2ltcGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApCiAJa2ZyZWVfcmN1KG1ycCwgcmN1KTsKIAogCWlmIChobGlzdF9lbXB0eSgmYW1wO2JyLSZndDttcnBfbGlzdCkpCi0JCWJyX2RlbF9mcmFtZShiciwgJmFtcDttcnBfZnJhbWVfdHlwZSk7CiYjNDM7CQlicl9kZWxfZnJhbWUoYnIsIGNwdV90b19iZTE2KEVUSF9QX01SUCkpOwogfQogCiAvKiBBZGRzIGEgbmV3IE1SUCBpbnN0YW5jZS4KQEAgLTUzNSwxMyAmIzQzOzUzMCwxNiBAQCBpbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKQogCXNwaW5fdW5sb2NrX2JoKCZhbXA7YnItJmd0O2xvY2spOwogCXJjdV9hc3NpZ25fcG9pbnRlcihtcnAtJmd0O3NfcG9ydCwgcCk7CiAKLQlpZiAoaGxpc3RfZW1wdHkoJmFtcDtici0mZ3Q7bXJwX2xpc3QpKQotCQlicl9hZGRfZnJhbWUoYnIsICZhbXA7bXJwX2ZyYW1lX3R5cGUpOwotCiAJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDttcnAtJmd0O3Rlc3Rfd29yaywgYnJfbXJwX3Rlc3Rfd29ya19leHBpcmVkKTsKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO21ycC0mZ3Q7aW5fdGVzdF93b3JrLCBicl9tcnBfaW5fdGVzdF93b3JrX2V4cGlyZWQpOwogCWhsaXN0X2FkZF90YWlsX3JjdSgmYW1wO21ycC0mZ3Q7bGlzdCwgJmFtcDtici0mZ3Q7bXJwX2xpc3QpOwogCiYjNDM7CWlmIChobGlzdF9pc19zaW5ndWxhcl9ub2RlKCZhbXA7bXJwLSZndDtsaXN0LCAmYW1wO2JyLSZndDttcnBfbGlzdCkpIHsKJiM0MzsJCWVyciA9IGJyX2FkZF9mcmFtZShiciwgY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSwgYnJfbXJwX3Byb2Nlc3MpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGRlbGV0ZV9tcnA7CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBicl9tcnBfc3dpdGNoZGV2X2FkZChiciwgbXJwKTsKIAlpZiAoZXJyKQogCQlnb3RvIGRlbGV0ZV9tcnA7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCmluZGV4IGQzMzdiMWNmYjk4MGQuLjUxNjMwMTdmZWI3NGQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCkBAIC05MzcsMTAgJiM0Mzs5MzcsMTQgQEAgc3RydWN0IGJyX2ZyYW1lX3R5cGUgewogCWludAkJCSgqZnJhbWVfaGFuZGxlcikoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwKIAkJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQlsaXN0OwomIzQzOwlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKIH07CiAKLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTsKLXZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTsKJiM0MztpbnQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgX19iZTE2IHR5cGUsCiYjNDM7CQkgaW50ICgqZnJhbWVfaGFuZGxlcikoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwKJiM0MzsJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikpOwomIzQzO3ZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgX19iZTE2IHR5cGUpOwomIzQzO3ZvaWQgYnJfZGVsX2ZyYW1lX2FsbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgYnJfcnhfaGFuZGxlcl9jaGVja19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMxNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJyaWRnaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCB0YXJnZXRpbmcgdGhlIGBuZXQvYnJpZGdlYCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0b3VjaGluZyBgYnJfY2ZtLmNgLCBgYnJfaWYuY2AsIGBicl9pbnB1dC5jYCwgYGJyX21ycC5jYCwgYW5kIGBicl9wcml2YXRlLmhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtGaW5hbGx5LCBzb21lb25lIGFkZHJlc3NlZCB0aGF0IHNoYXJlZCBgc3RydWN0IGJyX2ZyYW1lX3R5cGVgIGlzc3VlLiYjMzQ7IEkmIzM5O3ZlIHNlZW4gdGhhdCBraW5kIG9mIHN0YXRpYyBzdHJ1Y3R1cmUgY2F1c2UgaGVhZGFjaGVzIGZvciBhZ2VzLgoKTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBkaWZmIGNvbmZpcm1zIG15IHN1c3BpY2lvbi4gVGhlIGNvcmUgcHJvYmxlbSwgYXMgSSByZWNhbGwsIHdhcyB0aGF0IGBicl9hZGRfZnJhbWVgIHdhcyB1c2luZyBzdGF0aWNhbGx5IGRlY2xhcmVkIGBzdHJ1Y3QgYnJfZnJhbWVfdHlwZWAgaW5zdGFuY2VzIGxpa2UgYGNmbV9mcmFtZV90eXBlYCBhbmQgYG1ycF9mcmFtZV90eXBlYC4gVGhhdCYjMzk7cyBhIHRleHRib29rIHJlY2lwZSBmb3IgbGlzdCBjb3JydXB0aW9uIGFuZCByYWNlIGNvbmRpdGlvbnMgaWYgbXVsdGlwbGUgYnJpZGdlcyB3ZXJlIGFkZGluZyB0aGUgc2FtZSBpbnN0YW5jZSwgb3IgaWYgdGhlcmUgd2FzIGNvbmN1cnJlbnQgcmVnaXN0cmF0aW9uLiBUaGUgc2hhcmVkIGBzdHJ1Y3QgaGxpc3Rfbm9kZSBsaXN0YCB3aXRoaW4gdGhvc2Ugc3RhdGljIGluc3RhbmNlcyB3YXMgdGhlIGN1bHByaXQuCgpUaGlzIHBhdGNoIHNtYXJ0bHkgYWRkcmVzc2VzIGl0IGJ5IGFsbG9jYXRpbmcgYSAqZHluYW1pYyogYHN0cnVjdCBicl9mcmFtZV90eXBlYCBwZXIgYnJpZGdlIHVzaW5nIGBrbWFsbG9jX29iamAuIFRoaXMgaXMgdGhlIHJpZ2h0IGFwcHJvYWNoLiBUaGVuLCBgYnJfZGVsX2ZyYW1lYCBub3cgY2FsbHMgYGtmcmVlX3JjdShmdCwgcmN1KWAgdG8gcmVsZWFzZSB0aGUgYWxsb2NhdGVkIG1lbW9yeSwgYW5kIGNydWNpYWxseSwgYGJyX2RlbF9mcmFtZV9hbGwoYnIpYCBoYXMgYmVlbiBhZGRlZCB0byBgYnJfZGV2X2RlbGV0ZWAgdG8gY2xlYW4gdXAgdGhlIGZyYW1lIHR5cGVzIGR1cmluZyBicmlkZ2UgZGV2aWNlIGRlbGV0aW9uLiBHb29kLCB0aG9yb3VnaCBjbGVhbnVwIGlzIGVzc2VudGlhbCBoZXJlLgoKVGhlIGNoYW5nZXMgaW4gYGJyX2NmbS5jYCBhbmQgYGJyX21ycC5jYCB1cGRhdGluZyBmdW5jdGlvbiBzaWduYXR1cmVzIHRvIG1hdGNoIHRoZSBuZXcgYGJyX2FkZF9mcmFtZWAgYW5kIGBicl9kZWxfZnJhbWVgIGFyZSBhcyBleHBlY3RlZCwgYW5kIGdvb2QgdG8gc2VlLiBUaGUgZXJyb3IgaGFuZGxpbmcgaXMgYWxzbyBpbiBwbGFjZSwgd2hpY2ggaXMgYSB2ZXJ5IGdvb2QgYWRkaXRpb24uIEl0JiMzOTtzIGFsc28gZ3JlYXQgdGhhdCBgYnJfaW5wdXQuY2AgaXMgdXBkYXRlZCwgdG9vLiBBbmQgb2YgY291cnNlLCB0aGUgYWRkaXRpb24gb2YgdGhlIGBzdHJ1Y3QgcmN1X2hlYWQgcmN1O2AgbWVtYmVyIGluIGBzdHJ1Y3QgYnJfZnJhbWVfdHlwZWAgd2l0aGluIGBicl9wcml2YXRlLmhgIGlzIG5lY2Vzc2FyeSB0byBzdXBwb3J0IHRoZSBSQ1UtYmFzZWQgbWVtb3J5IGZyZWVpbmcuCgpOb3csIGJlZm9yZSBJIGdpdmUgdGhpcyBhIHJ1YmJlciBzdGFtcCwgSSYjMzk7bSBnb2luZyB0byBydW4gYSBxdWljayBjaGVjayBvbiB0aGUgS2NvbmZpZyByZXF1aXJlbWVudHMgZm9yIGJyaWRnZSwgQ0ZNLCBhbmQgTVJQLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgZXZlcnl0aGluZyYjMzk7cyBjb25maWd1cmVkIGFzIGV4cGVjdGVkIGFuZCB0aGF0IGFueSBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3RseSBoYW5kbGVkLiBJIHRoaW5rIGEgcXVpY2sgZ3JlcHBpbmcgc2Vzc2lvbiB0aHJvdWdoIHRoZSBgbmV0L2JyaWRnZWAgS2NvbmZpZyBmaWxlcyBzaG91bGQgcHJvdmlkZSB3aGF0IEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDRk18TVJQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvS2NvbmZpZz01MD1jb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTYzLVxubmV0L2JyaWRnZS9LY29uZmlnOjY0OmNvbmZpZyBCUklER0VfTVJQXG5uZXQvYnJpZGdlL0tjb25maWc6NjU6XHRib29sIFwmIzM0O01SUCBwcm90b2NvbFwmIzM0O1xubmV0L2JyaWRnZS9LY29uZmlnLTY2LVx0ZGVwZW5kcyBvbiBCUklER0Vcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNjgtXHRoZWxwXG5uZXQvYnJpZGdlL0tjb25maWc6Njk6XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHRvIHJ1biBNUlBcbm5ldC9icmlkZ2UvS2NvbmZpZy03MC1cdCAgcHJvdG9jb2wgdG8gZGV0ZWN0IGxvb3BzXG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTc1LVxubmV0L2JyaWRnZS9LY29uZmlnOjc2OmNvbmZpZyBCUklER0VfQ0ZNXG5uZXQvYnJpZGdlL0tjb25maWc6Nzc6XHRib29sIFwmIzM0O0NGTSBwcm90b2NvbFwmIzM0O1xubmV0L2JyaWRnZS9LY29uZmlnLTc4LVx0ZGVwZW5kcyBvbiBCUklER0Vcbm5ldC9icmlkZ2UvS2NvbmZpZy03OS1cdGhlbHBcbm5ldC9icmlkZ2UvS2NvbmZpZzo4MDpcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgdG8gcnVuIENGTVxubmV0L2JyaWRnZS9LY29uZmlnLTgxLVx0ICBwcm90b2NvbCBhY2NvcmRpbmcgdG8gODAyLjFRIHNlY3Rpb24gMTIuMTRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Njg2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBCcmlkZ2UgQ29uZmlndXJhdGlvbiBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJyaWRnZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gZGlnIGluISBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyBieSBleGFtaW5pbmcgdGhlIGJ1aWxkIHN5c3RlbSBmaWxlcy4gSSYjMzk7bSBnb2luZyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgbmV0L2JyaWRnZS9NYWtlZmlsZWAgYW5kIGBuZXQvYnJpZGdlL0tjb25maWdgLiBUaGVzZSB0d28gZmlsZXMgc2hvdWxkIGdpdmUgbWUgYSBjb21wbGV0ZSBwaWN0dXJlLiBUaGUgTWFrZWZpbGUgd2lsbCBsYXkgb3V0IHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgd2hpbGUgdGhlIEtjb25maWcgZmlsZSBob2xkcyBhbGwgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgaGVscCB0ZXh0LiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBzZWUgZXZlcnl0aGluZyByZWxhdGVkIHRvIGJyaWRnaW5nIGFuZCBob3cgaXQmIzM5O3MgZW5hYmxlZCBhbmQgY29uZmlndXJlZCBhdCBjb21waWxlIHRpbWUuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgSUVFRSA4MDIuMWQgZXRoZXJuZXQgYnJpZGdpbmcgbGF5ZXIuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19CUklER0UpICYjNDM7PSBicmlkZ2Uub1xuICAgNzpcdFxuICAgODpcdGJyaWRnZS15XHQ6PSBici5vIGJyX2RldmljZS5vIGJyX2ZkYi5vIGJyX2ZvcndhcmQubyBicl9pZi5vIGJyX2lucHV0Lm8gXFxcbiAgIDk6XHRcdFx0XHRicl9pb2N0bC5vIGJyX3N0cC5vIGJyX3N0cF9icGR1Lm8gXFxcbiAgMTA6XHRcdFx0XHRicl9zdHBfaWYubyBicl9zdHBfdGltZXIubyBicl9uZXRsaW5rLm8gXFxcbiAgMTE6XHRcdFx0XHRicl9uZXRsaW5rX3R1bm5lbC5vIGJyX2FycF9uZF9wcm94eS5vXG4gIDEyOlx0XG4gIDEzOlx0YnJpZGdlLSQoQ09ORklHX1NZU0ZTKSAmIzQzOz0gYnJfc3lzZnNfaWYubyBicl9zeXNmc19ici5vXG4gIDE0Olx0XG4gIDE1Olx0YnJpZGdlLSQoc3Vic3QgbSx5LCQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpKSAmIzQzOz0gYnJfbmZfY29yZS5vXG4gIDE2Olx0XG4gIDE3Olx0YnJfbmV0ZmlsdGVyLXkgOj0gYnJfbmV0ZmlsdGVyX2hvb2tzLm9cbiAgMTg6XHRicl9uZXRmaWx0ZXItJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpICYjNDM7PSBicl9uZXRmaWx0ZXJfaXB2Ni5vXG4gIDE5Olx0b2JqLSQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpICYjNDM7PSBicl9uZXRmaWx0ZXIub1xuICAyMDpcdFxuICAyMTpcdGJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgJiM0Mzs9IGJyX211bHRpY2FzdC5vIGJyX21kYi5vIGJyX211bHRpY2FzdF9laHQub1xuICAyMjpcdFxuICAyMzpcdGJyaWRnZS0kKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpICYjNDM7PSBicl92bGFuLm8gYnJfdmxhbl90dW5uZWwubyBicl92bGFuX29wdGlvbnMubyBicl9tc3Qub1xuICAyNDpcdFxuICAyNTpcdGJyaWRnZS0kKENPTkZJR19ORVRfU1dJVENIREVWKSAmIzQzOz0gYnJfc3dpdGNoZGV2Lm9cbiAgMjY6XHRcbiAgMjc6XHRvYmotJChDT05GSUdfTkVURklMVEVSKSAmIzQzOz0gbmV0ZmlsdGVyL1xuICAyODpcdFxuICAyOTpcdGJyaWRnZS0kKENPTkZJR19CUklER0VfTVJQKVx0JiM0Mzs9IGJyX21ycF9zd2l0Y2hkZXYubyBicl9tcnAubyBicl9tcnBfbmV0bGluay5vXG4gIDMwOlx0XG4gIDMxOlx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9DRk0pXHQmIzQzOz0gYnJfY2ZtLm8gYnJfY2ZtX25ldGxpbmsub1xuICAzMjpcdFxuICAzMzpcdGlmZGVmIENPTkZJR19HQ09WX1BST0ZJTEVfTkVURklMVEVSXG4gIDM0Olx0R0NPVl9QUk9GSUxFX2JyX25mX2NvcmUubyA6PSB5XG4gIDM1Olx0R0NPVl9QUk9GSUxFX2JyX25ldGZpbHRlcl9ob29rcy5vIDo9IHlcbiAgMzY6XHRHQ09WX1BST0ZJTEVfYnJfbmV0ZmlsdGVyX2lwdjYubyA6PSB5XG4gIDM3Olx0ZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjAyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBNUlAgYW5kIENGTSBDb25maWd1cmF0aW9uIGFuZCBJbnZvY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgdGVjaG5pY2FsIHVuZGVycGlubmluZ3Mgb2YgaG93IE1SUCAoTXVsdGlwbGUgUmVnaXN0cmF0aW9uIFByb3RvY29sKSBhbmQgQ0ZNIChDb25uZWN0aXZpdHkgRmF1bHQgTWFuYWdlbWVudCkgYXJlIGNvbmZpZ3VyZWQgYW5kIGFjdHVhbGx5IGNhbGxlZCDigJMgaG93IHRoZXkmIzM5O3JlICppbnZva2VkKi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBob3cgdGhlc2UgdGhpbmdzIGFyZSB3aXJlZCB1cC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBOZXRsaW5rIGlzIGludm9sdmVkIGhlcmUsIGdpdmVuIHRoZSBrZXJuZWwtbGV2ZWwgbmF0dXJlIG9mIHRoZXNlIHByb3RvY29scywgc28gdGhhdCYjMzk7cyB0aGUgYW5nbGUgSSYjMzk7bSB0YWtpbmcuIFNvIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCB0aGUgTmV0bGluayBlbnRyeSBwb2ludHMgZm9yIGJvdGggQ0ZNIGFuZCBNUlAuIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBob29rcywgdGhlIGNyaXRpY2FsIGNvbnRyb2wgcG9pbnRzLCB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBhbmQgb3BlcmF0aW9uIG9mIHRoZXNlIHByb3RvY29scyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIHN5c3RlbS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBiYXNlIHRvIHVuZGVyc3RhbmQgaG93IHRvIGludGVyYWN0IHdpdGggdGhlbSBhdCBhIHN5c3RlbSBsZXZlbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9jZm1fbWVwX2NyZWF0ZXxicl9tcnBfYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9jZm0uYz0zNzA9c3RhdGljIGludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvYnJpZGdlL2JyX2NmbS5jLTQ5MS1cbm5ldC9icmlkZ2UvYnJfY2ZtLmM6NDkyOmludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX2NmbS5jLTQ5My1cdFx0ICAgICAgY29uc3QgdTMyIGluc3RhbmNlLFxubmV0L2JyaWRnZS9icl9jZm0uYzo0OTQ6XHRcdCAgICAgIHN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSAqY29uc3QgY3JlYXRlLFxubmV0L2JyaWRnZS9icl9jZm0uYy00OTUtXHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM9OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzo5OmJyX2NmbV9tZXBfY3JlYXRlX3BvbGljeVtJRkxBX0JSSURHRV9DRk1fTUVQX0NSRUFURV9NQVggJiM0MzsgMV0gPSB7XG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTAtXHRbSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfVU5TUEVDXVx0PSB7IC50eXBlID0gTkxBX1JFSkVDVCB9LFxuLS1cbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYz03Mj1icl9jZm1fcG9saWN5W0lGTEFfQlJJREdFX0NGTV9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTc0LVx0W0lGTEFfQlJJREdFX0NGTV9NRVBfQ1JFQVRFXVx0XHQ9XG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM6NzU6XHRcdFx0XHROTEFfUE9MSUNZX05FU1RFRChicl9jZm1fbWVwX2NyZWF0ZV9wb2xpY3kpLFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTc2LVx0W0lGTEFfQlJJREdFX0NGTV9NRVBfREVMRVRFXVx0XHQ9XG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jPTkyPXN0YXRpYyBpbnQgYnJfbWVwX2NyZWF0ZV9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTk1LVx0c3RydWN0IG5sYXR0ciAqdGJbSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfTUFYICYjNDM7IDFdO1xubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjk2Olx0c3RydWN0IGJyX2NmbV9tZXBfY3JlYXRlIGNyZWF0ZTtcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy05Ny1cdHUzMiBpbnN0YW5jZTtcbi0tXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTAwLVx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfTUFYLCBhdHRyLFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjEwMTpcdFx0XHQgICAgICAgYnJfY2ZtX21lcF9jcmVhdGVfcG9saWN5LCBleHRhY2spO1xubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTEwMi1cdGlmIChlcnIpXG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTEyOC1cbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzoxMjk6XHRyZXR1cm4gYnJfY2ZtX21lcF9jcmVhdGUoYnIsIGluc3RhbmNlLCBcdTAwMjZjcmVhdGUsIGV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTMwLX1cbi0tXG5uZXQvYnJpZGdlL2JyX21ycC5jPTQyMT1zdGF0aWMgdm9pZCBicl9tcnBfZGVsX2ltcGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApXG4tLVxubmV0L2JyaWRnZS9icl9tcnAuYy00ODktICovXG5uZXQvYnJpZGdlL2JyX21ycC5jOjQ5MDppbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKVxubmV0L2JyaWRnZS9icl9tcnAuYy00OTEte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX25ldGxpbmsuYz0zMT1zdGF0aWMgaW50IGJyX21ycF9pbnN0YW5jZV9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jLTYxLVx0aWYgKGNtZCA9PSBSVE1fU0VUTElOSylcbm5ldC9icmlkZ2UvYnJfbXJwX25ldGxpbmsuYzo2MjpcdFx0cmV0dXJuIGJyX21ycF9hZGQoYnIsIFx1MDAyNmluc3QpO1xubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jLTYzLVx0ZWxzZVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaC04LVxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oOjk6c3RydWN0IGJyX2NmbV9tZXBfY3JlYXRlIHtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaC0xMC1cdGVudW0gYnJfY2ZtX2RvbWFpbiBkb21haW47IC8qIERvbWFpbiBmb3IgdGhpcyBNRVAgKi9cbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTQtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmg6MTU6aW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaC0xNi1cdFx0ICAgICAgY29uc3QgdTMyIGluc3RhbmNlLFxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oOjE3Olx0XHQgICAgICBzdHJ1Y3QgYnJfY2ZtX21lcF9jcmVhdGUgKmNvbnN0IGNyZWF0ZSxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaC0xOC1cdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmg9MTE3PXN0cnVjdCBicl9jZm1fbWVwIHtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTIwLVx0dTMyXHRcdFx0XHRpbnN0YW5jZTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaDoxMjE6XHRzdHJ1Y3QgYnJfY2ZtX21lcF9jcmVhdGVcdGNyZWF0ZTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaC0xMjItXHRzdHJ1Y3QgYnJfY2ZtX21lcF9jb25maWdcdGNvbmZpZztcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfbXJwLmg9NTk9ZW51bSBicl9tcnBfaHdfc3VwcG9ydCB7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlX21ycC5oLTY1LS8qIGJyX21ycC5jICovXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfbXJwLmg6NjY6aW50IGJyX21ycF9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfbXJwLmgtNjctaW50IGJyX21ycF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMzMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gRnJhbWUgVHlwZSBMb29rdXAqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBmcmFtZSB0eXBlIGxvb2t1cCBwcm9jZXNzIGR1cmluZyBwYWNrZXQgcmVjZXB0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBicmlkZ2luZyBjb250ZXh0LiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3lzdGVtIGRldGVybWluZXMgd2hhdCAqa2luZCogb2YgZnJhbWUgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHdoZW4gYSBwYWNrZXQgY29tZXMgaW4uIFRoaXMgcmVhbGx5IGdldHMgZG93biB0byB0aGUgY29yZSBvZiB0aGUgYnJpZGdlJiMzOTtzIGhhbmRsaW5nIGxvZ2ljLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGJyX2lucHV0LmNgIGFuZCBzcGVjaWZpY2FsbHkgYGJyX2hhbmRsZV9mcmFtZWAsIGFzIHRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgZnJhbWUgcHJvY2Vzc2luZy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHN5c3RlbSBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuLCBzYXksIGEgc3RhbmRhcmQgRXRoZXJuZXQgZnJhbWUsIGEgVkxBTi10YWdnZWQgZnJhbWUsIG9yIGFueXRoaW5nIGVsc2UgaXQgbWlnaHQgZW5jb3VudGVyLiBVbmRlcnN0YW5kaW5nIHRoaXMgbG9va3VwIHByb2Nlc3MgaXMgY3J1Y2lhbCBmb3IgdHJvdWJsZXNob290aW5nIHBvdGVudGlhbCBpc3N1ZXMgaW4gZnJhbWUgaGFuZGxpbmcsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdW51c3VhbCBvciBjdXN0b21pemVkIGZyYW1lIGZvcm1hdHMsIGFuZCBmb3Igb3B0aW1pemluZyBwZXJmb3JtYW5jZSBpZiBJIG5lZWQgdG8uIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmcmFtZV90eXBlX2xpc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX2RldmljZS5jPTQ4MD12b2lkIGJyX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNTA1LVx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNmJyLVx1MDAzZWZkYl9saXN0KTtcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6NTA2Olx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCk7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTUwNy0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX01SUClcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9MzIzPXN0YXRpYyBpbnQgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTMyNy1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozMjg6XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wLCBcdTAwMjZwLVx1MDAzZWJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdClcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMjktXHRcdGlmICh1bmxpa2VseSh0bXAtXHUwMDNldHlwZSA9PSBza2ItXHUwMDNlcHJvdG9jb2wpKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz00NzE9aW50IGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlLFxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NzYtXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDc3Olx0aGxpc3RfZm9yX2VhY2hfZW50cnkoZnQsIFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdCkge1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ3OC1cdFx0aWYgKGZ0LVx1MDAzZXR5cGUgPT0gdHlwZSlcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDg3LVx0ZnQtXHUwMDNlZnJhbWVfaGFuZGxlciA9IGZyYW1lX2hhbmRsZXI7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDg4Olx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNmZ0LVx1MDAzZWxpc3QsIFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCk7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDg5LVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz00OTM9dm9pZCBicl9kZWxfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBfX2JlMTYgdHlwZSlcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDk2LVxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjQ5NzpcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZ0LCBcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00OTgtXHRcdGlmIChmdC1cdTAwM2V0eXBlID09IHR5cGUpIHtcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9NTA2PXZvaWQgYnJfZGVsX2ZyYW1lX2FsbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTUxMC1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo1MTE6XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZ0LCBuLCBcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy01MTItXHRcdGhsaXN0X2RlbF9yY3UoXHUwMDI2ZnQtXHUwMDNlbGlzdCk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NTAwPXN0cnVjdCBuZXRfYnJpZGdlIHtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01MDItXHRzcGlubG9ja190XHRcdFx0aGFzaF9sb2NrO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NTAzOlx0c3RydWN0IGhsaXN0X2hlYWRcdFx0ZnJhbWVfdHlwZV9saXN0O1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTA0LVx0c3RydWN0IG5ldF9kZXZpY2VcdFx0KmRldjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzOTgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogQ29yZSBOZXR3b3JraW5nIENvZGUqKgoKT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGNvcmUgbmV0d29ya2luZyBjb2RlIOKAkyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBFdGhlcm5ldCBicmlkZ2luZywgQ0ZNIChDb25uZWN0aXZpdHkgRmF1bHQgTWFuYWdlbWVudCksIGFuZCBNUlAgKE11bHRpcGxlIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkuIFRoZSBnb29kIG5ld3MgaXMsIGZyb20gd2hhdCBJIGNhbiBzZWUsIHRoaXMgKnNob3VsZCogYmUgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgdXN1YWwgc3VzcGVjdHM6IHN0YW5kYXJkIGJyaWRnZSBuZXRkZXZpY2UgY3JlYXRpb24gdXNpbmcgYGlwIGxpbmsgYWRkIG5hbWUgYnIwIHR5cGUgYnJpZGdlYCwgbmV0bGluayBjb25maWd1cmF0aW9uIG9mIENGTS9NUlAgKGxpa2VseSB2aWEgYFJUTV9TRVRMSU5LYCBhbmQgYHJ0bmxgKSwgcGFja2V0IHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uIHZpYSB0aGUgY29tbW9uIGludGVyZmFjZXMgbGlrZSBUQVAvdmV0aC9sb29wYmFjaywgYW5kIG9mIGNvdXJzZSB0aGUgY3JpdGljYWwgYGJyX3Byb2Nlc3NfZnJhbWVfdHlwZWAgZnVuY3Rpb24gZm9yIGJyaWRnZSBmcmFtZSBwcm9jZXNzaW5nLCBhbG9uZyB3aXRoIHRoZSBicmlkZ2UgZGV2aWNlIGRlbGV0aW9uIHJvdXRpbmVzLiBTbywgeWVzLCB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IG9mICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgaXMgc3BvdCBvbiEKCk5vdywgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4KCjEuICAqKmBXb3J0aEZ1enppbmdgKio6IEFic29sdXRlbHksIGNvbmZpcm1lZC4gV2UgaGF2ZSBlbm91Z2ggYWNjZXNzaWJpbGl0eSB0byBwdXQgdGhpcyB0aHJvdWdoIGl0cyBwYWNlcy4KMi4gICoqYFJlYXNvbmluZ2AqKjogVGhlIHNpZ25pZmljYW50IGNoYW5nZXMgaGVyZSBhcmUgdGhlIHJlZmFjdG9yaW5nIG9mIGJyaWRnZSBmcmFtZSB0eXBlIHJlZ2lzdHJhdGlvbiBhbmQgZGVyZWdpc3RyYXRpb24uIFRoZXkgd2VudCBmcm9tIHN0YXRpYyBzdHJ1Y3R1cmVzIHRvIHBlci1icmlkZ2UgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGVudHJpZXMgbWFuYWdlZCB3aXRoIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkuIEkmIzM5O20gYWxzbyBzZWVpbmcgdXBkYXRlZCBlcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cCBwYXRocyBzcHJpbmtsZWQgdGhyb3VnaG91dCBDRk0sIE1SUCwgYW5kIHRoZSBicmlkZ2UgZGVsZXRpb24gcm91dGluZXMuIFRoaXMgaXMgKnJlYWNoYWJsZSogYmVjYXVzZSBicmlkZ2luZyBmdW5jdGlvbmFsaXR5IHdpdGggQ0ZNL01SUCBwcm90b2NvbHMgaXMgYWNjZXNzaWJsZSB2aWEgbmV0bGluayBhbmQgcGFja2V0IHJlY2VwdGlvbi4gU3BlY2lmaWNhbGx5LCB3ZSBjYW4gY3JhZnQgcGFja2V0cyB0aGF0IGZsb3cgdGhyb3VnaCB0aGUgbmV0bGluayBpbnRlcmZhY2UsIGFuZCB0aHJvdWdoIHRoZSBicmlkZ2UgcHJvY2Vzc2luZyB0aGF0IHRhcmdldHMgdGhvc2UgcHJvdG9jb2xzLgozLiAgKipgRm9jdXNTeW1ib2xzYCoqOiBXZSBuZWVkIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zIGFuZCBwYXJ0cyBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIHNlbGVjdCBub24tdWJpcXVpdG91cyBmdW5jdGlvbnMsIHRoYXQgd2VyZSBtb2RpZmllZCwgb3IgZGlyZWN0bHkgY2FsbCB0aGUgbW9kaWZpZWQgY29kZS4gSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGRpcmVjdGx5IHRhcmdldDoKCiAgICAqICAgYGJyX2FkZF9mcmFtZWAKICAgICogICBgYnJfZGVsX2ZyYW1lYAogICAgKiAgIGBicl9kZWxfZnJhbWVfYWxsYAogICAgKiAgIGBicl9jZm1fbWVwX2NyZWF0ZWAKICAgICogICBgYnJfY2ZtX21lcF9kZWxldGVgCiAgICAqICAgYGJyX21ycF9hZGRgCiAgICAqICAgYGJyX21ycF9kZWxfaW1wbGAgLyBgYnJfbXJwX2RlbGAKICAgICogICBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYAogICAgKiAgIGBicl9kZXZfZGVsZXRlYAoKICAgIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhvc2UgZXhhY3Qgc3ltYm9sIG5hbWVzIHdpdGhpbiBgYnJfY2ZtLmNgIGFuZCBgYnJfbXJwLmNgIHRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgYnV0IHRoYXQmIzM5O3MgbXkgdGFyZ2V0IGxpc3QuIFdlIGhhdmUgYSBjbGVhciBwYXRoIHRvIGdlbmVyYXRpbmcgZnV6emVyIGlucHV0IGJhc2VkIG9uIHRoZSBuZXRsaW5rIGludGVyZmFjZXMgYW5kIHBhY2tldCBmbG93cywgYW5kIHRob3NlIGZ1bmN0aW9uIGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9jZm1fbWVwX2RlbGV0ZXxicl9tcnBfZGVsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9jZm0uYz01NzA9c3RhdGljIHZvaWQgbWVwX2RlbGV0ZV9pbXBsZW1lbnRhdGlvbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9jZm0uYy01OTQtXG5uZXQvYnJpZGdlL2JyX2NmbS5jOjU5NTppbnQgYnJfY2ZtX21lcF9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxubmV0L2JyaWRnZS9icl9jZm0uYy01OTYtXHRcdCAgICAgIGNvbnN0IHUzMiBpbnN0YW5jZSxcbi0tXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM9MTc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM6MTg6YnJfY2ZtX21lcF9kZWxldGVfcG9saWN5W0lGTEFfQlJJREdFX0NGTV9NRVBfREVMRVRFX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xOS1cdFtJRkxBX0JSSURHRV9DRk1fTUVQX0RFTEVURV9VTlNQRUNdXHQ9IHsgLnR5cGUgPSBOTEFfUkVKRUNUIH0sXG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jPTcyPWJyX2NmbV9wb2xpY3lbSUZMQV9CUklER0VfQ0ZNX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtNzYtXHRbSUZMQV9CUklER0VfQ0ZNX01FUF9ERUxFVEVdXHRcdD1cbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzo3NzpcdFx0XHRcdE5MQV9QT0xJQ1lfTkVTVEVEKGJyX2NmbV9tZXBfZGVsZXRlX3BvbGljeSksXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtNzgtXHRbSUZMQV9CUklER0VfQ0ZNX01FUF9DT05GSUddXHRcdD1cbi0tXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM9MTMyPXN0YXRpYyBpbnQgYnJfbWVwX2RlbGV0ZV9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTEzOS1cdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIElGTEFfQlJJREdFX0NGTV9NRVBfREVMRVRFX01BWCwgYXR0cixcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzoxNDA6XHRcdFx0ICAgICAgIGJyX2NmbV9tZXBfZGVsZXRlX3BvbGljeSwgZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xNDEtXHRpZiAoZXJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xNTEtXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM6MTUyOlx0cmV0dXJuIGJyX2NmbV9tZXBfZGVsZXRlKGJyLCBpbnN0YW5jZSwgZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xNTMtfVxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwLmM9MzQ1PXN0YXRpYyB2b2lkIGJyX21ycF9pbl90ZXN0X3dvcmtfZXhwaXJlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L2JyaWRnZS9icl9tcnAuYy00MjAtICovXG5uZXQvYnJpZGdlL2JyX21ycC5jOjQyMTpzdGF0aWMgdm9pZCBicl9tcnBfZGVsX2ltcGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApXG5uZXQvYnJpZGdlL2JyX21ycC5jLTQyMi17XG4tLVxubmV0L2JyaWRnZS9icl9tcnAuYz00OTA9aW50IGJyX21ycF9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSlcbi0tXG5uZXQvYnJpZGdlL2JyX21ycC5jLTU0OS1kZWxldGVfbXJwOlxubmV0L2JyaWRnZS9icl9tcnAuYzo1NTA6XHRicl9tcnBfZGVsX2ltcGwoYnIsIG1ycCk7XG5uZXQvYnJpZGdlL2JyX21ycC5jLTU1MS1cbi0tXG5uZXQvYnJpZGdlL2JyX21ycC5jPTU1OD12b2lkIGJyX21ycF9wb3J0X2RlbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXG4tLVxubmV0L2JyaWRnZS9icl9tcnAuYy01NjUtXG5uZXQvYnJpZGdlL2JyX21ycC5jOjU2NjpcdGJyX21ycF9kZWxfaW1wbChiciwgbXJwKTtcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNTY3LX1cbi0tXG5uZXQvYnJpZGdlL2JyX21ycC5jLTU3MS0gKi9cbm5ldC9icmlkZ2UvYnJfbXJwLmM6NTcyOmludCBicl9tcnBfZGVsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycF9pbnN0YW5jZSAqaW5zdGFuY2UpXG5uZXQvYnJpZGdlL2JyX21ycC5jLTU3My17XG4tLVxubmV0L2JyaWRnZS9icl9tcnAuYy01NzgtXG5uZXQvYnJpZGdlL2JyX21ycC5jOjU3OTpcdGJyX21ycF9kZWxfaW1wbChiciwgbXJwKTtcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNTgwLVxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX25ldGxpbmsuYz0zMT1zdGF0aWMgaW50IGJyX21ycF9pbnN0YW5jZV9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jLTYzLVx0ZWxzZVxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jOjY0Olx0XHRyZXR1cm4gYnJfbXJwX2RlbChiciwgXHUwMDI2aW5zdCk7XG5uZXQvYnJpZGdlL2JyX21ycF9uZXRsaW5rLmMtNjUtXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oPTE1PWludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oLTE5LVxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oOjIwOmludCBicl9jZm1fbWVwX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMjEtXHRcdCAgICAgIGNvbnN0IHUzMiBpbnN0YW5jZSxcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfbXJwLmg9NjY9aW50IGJyX21ycF9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfbXJwLmg6Njc6aW50IGJyX21ycF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfbXJwLmgtNjgtaW50IGJyX21ycF9zZXRfcG9ydF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgwOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkNvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uIGZvciBCcmlkZ2luZyBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byB2ZXJpZnkgYSBicmlkZ2UgY29uZmlndXJhdGlvbi4gVGhlIGluaXRpYWwgY2hlY2tsaXN0IG1hbmRhdGVzIGVuc3VyaW5nIGBCUklER0VgLCBgQlJJREdFX0NGTWAsIGFuZCBgQlJJREdFX01SUGAgYXJlIGFsbCBjb3JyZWN0bHkgc2V0LiBJIGtub3cgSSBuZWVkIHRvIGRlbHZlIGRlZXBlciBpbnRvIHRoZXNlIHNldHRpbmdzIHRvIGVuc3VyZSB0aGV5JiMzOTtyZSBjb25maWd1cmVkIGFwcHJvcHJpYXRlbHksIHNvIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgQlJJREdFX0NGTWAgYW5kIGBCUklER0VfTVJQYC4gVGhleSBhcmUsIGFmdGVyIGFsbCwgZmVhdHVyZXMgYnVpbHQgb24gdG9wIG9mIHRoZSBiYXNlIGJyaWRnZSBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gY29uc3VsdCB0aGUgYG5ldC9icmlkZ2UvS2NvbmZpZ2AgZmlsZSBzcGVjaWZpY2FsbHkuIEkgcmVjYWxsIHRoYXQgYEJSSURHRV9DRk1gIGFuZCBgQlJJREdFX01SUGAgcmVxdWlyZSBgQlJJREdFYCwgd2hpY2ggaW4gdHVybiBwcm9iYWJseSBkZXBlbmRzIG9uIHRoaW5ncyBsaWtlIGBORVRgIGFuZCBwZXJoYXBzIGBJTkVUYCAob3Igc2ltaWxhciBuZXR3b3JraW5nIGluZnJhc3RydWN0dXJlKS4gSSBzaG91bGQgcHJvYmFibHkgdmVyaWZ5IHdoYXQgdGhlIGV4YWN0IGRlcGVuZGVuY2llcyBhcmUgd2l0aGluIHRoYXQgS2NvbmZpZyBmaWxlLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IHdoZW4gY29uZmlndXJpbmcgdGhlc2UgY29tcGxleCBuZXR3b3JraW5nIGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlJJREdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvS2NvbmZpZy01LVxubmV0L2JyaWRnZS9LY29uZmlnOjY6Y29uZmlnIEJSSURHRVxubmV0L2JyaWRnZS9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDs4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctMzUtXG5uZXQvYnJpZGdlL0tjb25maWc6MzY6Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXG5uZXQvYnJpZGdlL0tjb25maWctMzctXHRib29sIFwmIzM0O0lHTVAvTUxEIHNub29waW5nXCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTQ5LVxubmV0L2JyaWRnZS9LY29uZmlnOjUwOmNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy01MS1cdGJvb2wgXCYjMzQ7VkxBTiBmaWx0ZXJpbmdcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNjMtXG5uZXQvYnJpZGdlL0tjb25maWc6NjQ6Y29uZmlnIEJSSURHRV9NUlBcbm5ldC9icmlkZ2UvS2NvbmZpZy02NS1cdGJvb2wgXCYjMzQ7TVJQIHByb3RvY29sXCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTc1LVxubmV0L2JyaWRnZS9LY29uZmlnOjc2OmNvbmZpZyBCUklER0VfQ0ZNXG5uZXQvYnJpZGdlL0tjb25maWctNzctXHRib29sIFwmIzM0O0NGTSBwcm90b2NvbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM3NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb25maWd1cmF0aW9uIGZpbGU6CgoqKkludmVzdGlnYXRpbmcgQnJpZGdlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYG5ldC9icmlkZ2UvS2NvbmZpZ2AuIEkmIzM5O20gc3RhcnRpbmcgYnkgbG9va2luZyBhdCBsaW5lcyAxIHRocm91Z2ggMjAuIFRoaXMgdXN1YWxseSBpbmRpY2F0ZXMgdGhlIG1haW4sIHRvcC1sZXZlbCBzZXR0aW5ncyBhbmQgZGVmaW5pdGlvbnMgZm9yIHRoZSBicmlkZ2UgbW9kdWxlIGl0c2VsZi4gTXkgaW5pdGlhbCBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGdlbmVyYWwgb3B0aW9ucyBwcmVzZW50ZWQsIHRoZSBkZXBlbmRlbmNpZXMgdGhleSBtaWdodCBoYXZlLCBhbmQgYW55IHByZWxpbWluYXJ5IGNvbW1lbnRzIG9yIGV4cGxhbmF0aW9ucyB0aGF0IHNldCB0aGUgc3RhZ2UgZm9yIHRoZSByZXN0IG9mIHRoZSBjb25maWd1cmF0aW9uLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2U6IHRoZSBtYWluIGJyaWRnZSBzdXBwb3J0IGVuYWJsaW5nIG9wdGlvbiwgcHJvYmFibHkgYSBkZWZhdWx0IHNldHRpbmcgZm9yIHNvbWUgYmFzaWMgZnVuY3Rpb25hbGl0eSwgYW5kIG1heWJlIHNvbWUgZWFybHkgY29tbWVudHMgb3V0bGluaW5nIHRoZSBjb3JlIHB1cnBvc2Ugb2YgdGhlIGJyaWRnaW5nIGNvZGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGtleXdvcmRzIGFuZCBzeW1ib2xzIHRoYXQgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciBmb3IgdGhlIHJlc3Qgb2YgdGhlIHJldmlldy4gVGhlIGdvYWwgcmlnaHQgbm93IGlzIGp1c3QgdG8gZ2V0IG15IGJlYXJpbmdzIGFuZCB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZSBiZWZvcmUgZ2V0dGluZyBpbnRvIHRoZSB3ZWVkcyBvZiBtb3JlIHNwZWNpZmljIGZ1bmN0aW9uYWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyA4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIEJSSURHRVxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7ODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgTExDXG4gICA5Olx0XHRzZWxlY3QgU1RQXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYW5cbiAgMTI6XHRcdCAgRXRoZXJuZXQgYnJpZGdlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBkaWZmZXJlbnQgRXRoZXJuZXQgc2VnbWVudHMgaXRcbiAgMTM6XHRcdCAgaXMgY29ubmVjdGVkIHRvIHdpbGwgYXBwZWFyIGFzIG9uZSBFdGhlcm5ldCB0byB0aGUgcGFydGljaXBhbnRzLlxuICAxNDpcdFx0ICBTZXZlcmFsIHN1Y2ggYnJpZGdlcyBjYW4gd29yayB0b2dldGhlciB0byBjcmVhdGUgZXZlbiBsYXJnZXJcbiAgMTU6XHRcdCAgbmV0d29ya3Mgb2YgRXRoZXJuZXRzIHVzaW5nIHRoZSBJRUVFIDgwMi4xIHNwYW5uaW5nIHRyZWUgYWxnb3JpdGhtLlxuICAxNjpcdFx0ICBBcyB0aGlzIGlzIGEgc3RhbmRhcmQsIExpbnV4IGJyaWRnZXMgd2lsbCBjb29wZXJhdGUgcHJvcGVybHkgd2l0aFxuICAxNzpcdFx0ICBvdGhlciB0aGlyZCBwYXJ0eSBicmlkZ2UgcHJvZHVjdHMuXG4gIDE4Olx0XG4gIDE5Olx0XHQgIEluIG9yZGVyIHRvIHVzZSB0aGUgRXRoZXJuZXQgYnJpZGdlLCB5b3UmIzM5O2xsIG5lZWQgdGhlIGJyaWRnZVxuICAyMDpcdFx0ICBjb25maWd1cmF0aW9uIHRvb2xzOyBzZWUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdFx1MDAzZVxuICAyMTpcdFx0ICBmb3IgbG9jYXRpb24uIFBsZWFzZSByZWFkIHRoZSBCcmlkZ2UgbWluaS1IT1dUTyBmb3IgbW9yZVxuICAyMjpcdFx0ICBpbmZvcm1hdGlvbi5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgSWYgeW91IGVuYWJsZSBpcHRhYmxlcyBzdXBwb3J0IGFsb25nIHdpdGggdGhlIGJyaWRnZSBzdXBwb3J0IHRoZW4geW91XG4gIDI1Olx0XHQgIHR1cm4geW91ciBicmlkZ2UgaW50byBhIGJyaWRnaW5nIElQIGZpcmV3YWxsLlxuICAyNjpcdFx0ICBpcHRhYmxlcyB3aWxsIHRoZW4gc2VlIHRoZSBJUCBwYWNrZXRzIGJlaW5nIGJyaWRnZWQsIHNvIHlvdSBuZWVkIHRvXG4gIDI3Olx0XHQgIHRha2UgdGhpcyBpbnRvIGFjY291bnQgd2hlbiBzZXR0aW5nIHVwIHlvdXIgZmlyZXdhbGwgcnVsZXMuXG4gIDI4Olx0XHQgIEVuYWJsaW5nIGFycHRhYmxlcyBzdXBwb3J0IHdoZW4gYnJpZGdpbmcgd2lsbCBsZXQgYXJwdGFibGVzIHNlZVxuICAyOTpcdFx0ICBicmlkZ2VkIEFSUCB0cmFmZmljIGluIHRoZSBhcnB0YWJsZXMgRk9SV0FSRCBjaGFpbi5cbiAgMzA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNzkKCQkJCQkJCW91dHB1dDogMjQ3CgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2Ugbm90ZXMuCgoqKk15IEFuYWx5c2lzIG9mIEJyaWRnZSBDb25maWd1cmF0aW9uICZhbXA7IEFzc29jaWF0ZWQgRnVuY3Rpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIHNldHVwLCBhbmQgaXQmIzM5O3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgYEJSSURHRWAsIGBCUklER0VfQ0ZNYCwgYW5kIGBCUklER0VfTVJQYCBmbGFncy4gTm8gc3VycHJpc2VzIHRoZXJlLiBUaGVzZSBhcmUgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcywgdGhlIGZvdW5kYXRpb24sIGZvciBnZXR0aW5nIGEgYnJpZGdlIGltcGxlbWVudGF0aW9uIHVwIGFuZCBydW5uaW5nLiAKCk5vdywgZGlnZ2luZyBkZWVwZXIsIEkgc2VlIHRoZSBjb3JlIGZ1bmN0aW9uIHN5bWJvbHMgdGhhdCBuZWVkIGNhcmVmdWwgY29uc2lkZXJhdGlvbi4gYGJyX2FkZF9mcmFtZWAsIGBicl9kZWxfZnJhbWVgLCBgYnJfZGVsX2ZyYW1lX2FsbGAgYXJlIGNydWNpYWwgZm9yIGZyYW1lIGhhbmRsaW5nIOKAkyBhZGRpbmcsIHJlbW92aW5nLCBhbmQgY2xlYXJpbmcgZnJhbWVzIHdpdGhpbiB0aGUgYnJpZGdlJiMzOTtzIGZvcndhcmRpbmcgdGFibGUuIE9idmlvdXNseSwgd2UmIzM5O2xsIG5lZWQgcm9idXN0IGxvZ2ljIGFyb3VuZCB0aG9zZS4gVGhlbiwgYGJyX2NmbV9tZXBfY3JlYXRlYCBhbmQgYGJyX2NmbV9tZXBfZGVsZXRlYCBzdWdnZXN0IHRoYXQgd2UgYXJlIGdvaW5nIHRvIHVzZSBDb25uZWN0aXZpdHkgRmF1bHQgTWFuYWdlbWVudC4gRGVmaW5pdGVseSBrZXkgaW4gbGFyZ2VyIGRlcGxveW1lbnRzLiBGb2xsb3dpbmcgb24gZnJvbSB0aGF0LCB0aGUgTVJQLXNwZWNpZmljIGZ1bmN0aW9ucywgYGJyX21ycF9hZGRgIGFuZCBgYnJfbXJwX2RlbGAsIGNvbmZpcm0gTVJQIHN1cHBvcnQuIEZpbmFsbHkgYGJyX2Rldl9kZWxldGVgIGlzIGFuIG9idmlvdXMgY2hvaWNlIHdoZW4gd2UgbmVlZCB0byB0ZWFyIGRvd24gdGhlIGJyaWRnZS4KCk92ZXJhbGwsIGl0JiMzOTtzIGEgZ29vZCBzZXQgb2Ygc3ltYm9scyDigJMgcHJldHR5IGNvbXByZWhlbnNpdmUgcmVhbGx5IOKAkyBhbmQgYWxsIHNlZW1zIHRvIGJlIGxvZ2ljYWxseSBpbnRlcmNvbm5lY3RlZC4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgc2V0LXJlc3VsdHNgIHZhcmlhYmxlIHRyYWNrcyB0aG9zZSBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7QlJJREdFX0NGTSYjMzQ7LAogICAgJiMzNDtCUklER0VfTVJQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfYWRkX2ZyYW1lJiMzNDssCiAgICAmIzM0O2JyX2RlbF9mcmFtZSYjMzQ7LAogICAgJiMzNDticl9kZWxfZnJhbWVfYWxsJiMzNDssCiAgICAmIzM0O2JyX2NmbV9tZXBfY3JlYXRlJiMzNDssCiAgICAmIzM0O2JyX2NmbV9tZXBfZGVsZXRlJiMzNDssCiAgICAmIzM0O2JyX21ycF9hZGQmIzM0OywKICAgICYjMzQ7YnJfbXJwX2RlbCYjMzQ7LAogICAgJiMzNDticl9kZXZfZGVsZXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYnJpZGdlIEV0aGVybmV0IGZyYW1lIHR5cGUgaGFuZGxlciByZWdpc3RyYXRpb24vZGVyZWdpc3RyYXRpb24gbWVjaGFuaXNtLiBQcmV2aW91c2x5LCBzdGF0aWNhbGx5IGFsbG9jYXRlZCBmcmFtZSB0eXBlIHN0cnVjdHVyZXMgKHN1Y2ggYXMgY2ZtX2ZyYW1lX3R5cGUgYW5kIG1ycF9mcmFtZV90eXBlKSB3ZXJlIHJlZ2lzdGVyZWQgZGlyZWN0bHkgdG8gYnJpZGdlIGluc3RhbmNlcywgd2hpY2ggY291bGQgbGVhZCB0byBsaXN0IGNvcnJ1cHRpb24gYWNyb3NzIG11bHRpcGxlIGJyaWRnZXMuIFRoZSBwYXRjaCBjaGFuZ2VzIHRoaXMgdG8gZHluYW1pYyBwZXItYnJpZGdlIGFsbG9jYXRpb24gYW5kIFJDVS1iYXNlZCBmcmVlaW5nIG9mIGZyYW1lIHR5cGUgbm9kZXMsIGludHJvZHVjZXMgZXJyb3IgaGFuZGxpbmcgb24gYWxsb2NhdGlvbiBmYWlsdXJlLCBhbmQgYWRkcyBjbGVhbnVwIG9mIGFsbCByZWdpc3RlcmVkIGZyYW1lIHR5cGVzIGR1cmluZyBicmlkZ2UgZGV2aWNlIGRlbGV0aW9uIChicl9kZXZfZGVsZXRlKS4gVGhlc2UgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjaGFuZ2VzIHdhcnJhbnQgZnV6emluZyB0byB1bmNvdmVyIHBvdGVudGlhbCBtZW1vcnkgbGVha3MsIGNvbmN1cnJlbmN5IGlzc3Vlcywgb3IgZXJyb3IgaGFuZGxpbmcgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfQ0ZNJiMzNDssCiAgICAmIzM0O0JSSURHRV9NUlAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl9hZGRfZnJhbWUmIzM0OywKICAgICYjMzQ7YnJfZGVsX2ZyYW1lJiMzNDssCiAgICAmIzM0O2JyX2RlbF9mcmFtZV9hbGwmIzM0OywKICAgICYjMzQ7YnJfY2ZtX21lcF9jcmVhdGUmIzM0OywKICAgICYjMzQ7YnJfY2ZtX21lcF9kZWxldGUmIzM0OywKICAgICYjMzQ7YnJfbXJwX2FkZCYjMzQ7LAogICAgJiMzNDticl9tcnBfZGVsJiMzNDssCiAgICAmIzM0O2JyX2Rldl9kZWxldGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBicmlkZ2UgRXRoZXJuZXQgZnJhbWUgdHlwZSBoYW5kbGVyIHJlZ2lzdHJhdGlvbi9kZXJlZ2lzdHJhdGlvbiBtZWNoYW5pc20uIFByZXZpb3VzbHksIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGZyYW1lIHR5cGUgc3RydWN0dXJlcyAoc3VjaCBhcyBjZm1fZnJhbWVfdHlwZSBhbmQgbXJwX2ZyYW1lX3R5cGUpIHdlcmUgcmVnaXN0ZXJlZCBkaXJlY3RseSB0byBicmlkZ2UgaW5zdGFuY2VzLCB3aGljaCBjb3VsZCBsZWFkIHRvIGxpc3QgY29ycnVwdGlvbiBhY3Jvc3MgbXVsdGlwbGUgYnJpZGdlcy4gVGhlIHBhdGNoIGNoYW5nZXMgdGhpcyB0byBkeW5hbWljIHBlci1icmlkZ2UgYWxsb2NhdGlvbiBhbmQgUkNVLWJhc2VkIGZyZWVpbmcgb2YgZnJhbWUgdHlwZSBub2RlcywgaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBvbiBhbGxvY2F0aW9uIGZhaWx1cmUsIGFuZCBhZGRzIGNsZWFudXAgb2YgYWxsIHJlZ2lzdGVyZWQgZnJhbWUgdHlwZXMgZHVyaW5nIGJyaWRnZSBkZXZpY2UgZGVsZXRpb24gKGJyX2Rldl9kZWxldGUpLiBUaGVzZSByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNoYW5nZXMgd2FycmFudCBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgY29uY3VycmVuY3kgaXNzdWVzLCBvciBlcnJvciBoYW5kbGluZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBldGhlcm5ldCBmcmFtZSBoYW5kbGVycyAoc3VjaCBhcyBDRk0gYW5kIE1SUCkgYXJlIHJlZ2lzdGVyZWQgaW4gdGhlIGJyaWRnZSBtb2R1bGUuIEluc3RlYWQgb2YgdXNpbmcgc3RhdGljIGdsb2JhbCBgc3RydWN0IGJyX2ZyYW1lX3R5cGVgIHZhcmlhYmxlcywgaXQgZHluYW1pY2FsbHkgYWxsb2NhdGVzIGBzdHJ1Y3QgYnJfZnJhbWVfdHlwZWAgdXNpbmcgYGttYWxsb2Nfb2JqYCBhbmQgcHJvdGVjdHMgaXRzIHJlbW92YWwgd2l0aCBga2ZyZWVfcmN1YC5cblxuQWxsIGZpZWxkcyAoYHR5cGVgLCBgZnJhbWVfaGFuZGxlcmAsIGFuZCBgbGlzdGApIGFjY2Vzc2VkIGJ5IGBicl9wcm9jZXNzX2ZyYW1lX3R5cGVgIGFuZCBsaXN0IHRyYXZlcnNhbCBmdW5jdGlvbnMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGluc2VydGlvbiBpbnRvIGBici1cdTAwM2VmcmFtZV90eXBlX2xpc3RgLiBOb25lIG9mIHRoZXNlIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhcmUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHVzZWQgaW4gY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9yIGNhbGN1bGF0aW9ucy4gQW55IHBvdGVudGlhbCBidWdzIChzdWNoIGFzIFJDVSBzeW5jaHJvbml6YXRpb24gaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGxlYWtzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI2NmZkYTIyN2IyMjljMGFmY2YyMGUzOTUxNzEyNTI5NjNhZjY2MTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA5OjE2OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9jZm0uYyBiL25ldC9icmlkZ2UvYnJfY2ZtLmMKaW5kZXggZGVhNTZmZmZhMWMxOS4uNTc5MDI0ODU4ODI5OCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9jZm0uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX2NmbS5jCkBAIC00ODksMTEgJiM0Mzs0ODksNiBAQCBzdGF0aWMgaW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGJyX2ZyYW1lX3R5cGUgY2ZtX2ZyYW1lX3R5cGUgX19yZWFkX21vc3RseSA9IHsKLQkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0NGTSksCi0JLmZyYW1lX2hhbmRsZXIgPSBicl9jZm1fZnJhbWVfcngsCi19OwotCiBpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogCQkgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsCiAJCSAgICAgIHN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSAqY29uc3QgY3JlYXRlLApAQCAtNTAxLDYgJiM0Mzs0OTYsNyBAQCBpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogewogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7CiAJc3RydWN0IGJyX2NmbV9tZXAgKm1lcDsKJiM0MzsJaW50IGVycjsKIAogCUFTU0VSVF9SVE5MKCk7CiAKQEAgLTU1OCw4ICYjNDM7NTU0LDEzIEBAIGludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCiAJSU5JVF9ITElTVF9IRUFEKCZhbXA7bWVwLSZndDtwZWVyX21lcF9saXN0KTsKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO21lcC0mZ3Q7Y2NtX3R4X2R3b3JrLCBjY21fdHhfd29ya19leHBpcmVkKTsKIAotCWlmIChobGlzdF9lbXB0eSgmYW1wO2JyLSZndDttZXBfbGlzdCkpCi0JCWJyX2FkZF9mcmFtZShiciwgJmFtcDtjZm1fZnJhbWVfdHlwZSk7CiYjNDM7CWlmIChobGlzdF9lbXB0eSgmYW1wO2JyLSZndDttZXBfbGlzdCkpIHsKJiM0MzsJCWVyciA9IGJyX2FkZF9mcmFtZShiciwgY3B1X3RvX2JlMTYoRVRIX1BfQ0ZNKSwgYnJfY2ZtX2ZyYW1lX3J4KTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlrZnJlZShtZXApOwomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CX0KIAogCWhsaXN0X2FkZF90YWlsX3JjdSgmYW1wO21lcC0mZ3Q7aGVhZCwgJmFtcDtici0mZ3Q7bWVwX2xpc3QpOwogCkBAIC01ODgsNyAmIzQzOzU4OSw3IEBAIHN0YXRpYyB2b2lkIG1lcF9kZWxldGVfaW1wbGVtZW50YXRpb24oc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogCWtmcmVlX3JjdShtZXAsIHJjdSk7CiAKIAlpZiAoaGxpc3RfZW1wdHkoJmFtcDtici0mZ3Q7bWVwX2xpc3QpKQotCQlicl9kZWxfZnJhbWUoYnIsICZhbXA7Y2ZtX2ZyYW1lX3R5cGUpOwomIzQzOwkJYnJfZGVsX2ZyYW1lKGJyLCBjcHVfdG9fYmUxNihFVEhfUF9DRk0pKTsKIH0KIAogaW50IGJyX2NmbV9tZXBfZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaWYuYyBiL25ldC9icmlkZ2UvYnJfaWYuYwppbmRleCBjNTI2MTM0MzFmODg2Li5mZThlOWE0N2UxYWMxIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9pZi5jCkBAIC0zOTcsNiAmIzQzOzM5Nyw4IEBAIHZvaWQgYnJfZGV2X2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDtici0mZ3Q7dGNuX3RpbWVyKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtici0mZ3Q7Z2Nfd29yayk7CiAKJiM0MzsJYnJfZGVsX2ZyYW1lX2FsbChicik7CiYjNDM7CiAJYnJfc3lzZnNfZGVsYnIoYnItJmd0O2Rldik7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoYnItJmd0O2RldiwgaGVhZCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKaW5kZXggZDg3YTVmOWZhOTJiNy4uMDdlZmQwZmJjZjljZCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwpAQCAtNDY4LDE4ICYjNDM7NDY4LDQ4IEBAIHJ4X2hhbmRsZXJfZnVuY190ICpicl9nZXRfcnhfaGFuZGxlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXJldHVybiBicl9oYW5kbGVfZnJhbWU7CiB9CiAKLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KQomIzQzO2ludCBicl9hZGRfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBfX2JlMTYgdHlwZSwKJiM0MzsJCSBpbnQgKCpmcmFtZV9oYW5kbGVyKShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LAomIzQzOwkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSkKIHsKJiM0MzsJc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0OwomIzQzOwomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeShmdCwgJmFtcDtici0mZ3Q7ZnJhbWVfdHlwZV9saXN0LCBsaXN0KSB7CiYjNDM7CQlpZiAoZnQtJmd0O3R5cGUgPT0gdHlwZSkKJiM0MzsJCQlyZXR1cm4gLUVFWElTVDsKJiM0MzsJfQomIzQzOwomIzQzOwlmdCA9IGttYWxsb2Nfb2JqKCpmdCk7CiYjNDM7CWlmICghZnQpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJZnQtJmd0O3R5cGUgPSB0eXBlOwomIzQzOwlmdC0mZ3Q7ZnJhbWVfaGFuZGxlciA9IGZyYW1lX2hhbmRsZXI7CiAJaGxpc3RfYWRkX2hlYWRfcmN1KCZhbXA7ZnQtJmd0O2xpc3QsICZhbXA7YnItJmd0O2ZyYW1lX3R5cGVfbGlzdCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCi12b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdCkKJiM0Mzt2b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlKQogewotCXN0cnVjdCBicl9mcmFtZV90eXBlICp0bXA7CiYjNDM7CXN0cnVjdCBicl9mcmFtZV90eXBlICpmdDsKIAotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJmFtcDtici0mZ3Q7ZnJhbWVfdHlwZV9saXN0LCBsaXN0KQotCQlpZiAoZnQgPT0gdG1wKSB7CiYjNDM7CWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZ0LCAmYW1wO2JyLSZndDtmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHsKJiM0MzsJCWlmIChmdC0mZ3Q7dHlwZSA9PSB0eXBlKSB7CiAJCQlobGlzdF9kZWxfcmN1KCZhbXA7ZnQtJmd0O2xpc3QpOwomIzQzOwkJCWtmcmVlX3JjdShmdCwgcmN1KTsKIAkJCXJldHVybjsKIAkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgYnJfZGVsX2ZyYW1lX2FsbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQ7CiYjNDM7CXN0cnVjdCBobGlzdF9ub2RlICpuOwomIzQzOwomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZ0LCBuLCAmYW1wO2JyLSZndDtmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHsKJiM0MzsJCWhsaXN0X2RlbF9yY3UoJmFtcDtmdC0mZ3Q7bGlzdCk7CiYjNDM7CQlrZnJlZV9yY3UoZnQsIHJjdSk7CiYjNDM7CX0KIH0KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXJwLmMgYi9uZXQvYnJpZGdlL2JyX21ycC5jCmluZGV4IGVmMTZkMDcwMzkyNDEuLjUxMWFlOGFmM2QwMzMgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbXJwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9tcnAuYwpAQCAtOCwxMSAmIzQzOzgsNiBAQCBzdGF0aWMgY29uc3QgdTggbXJwX2luX3Rlc3RfZG1hY1tFVEhfQUxFTl0gPSB7IDB4MSwgMHgxNSwgMHg0ZSwgMHgwLCAweDAsIDB4MyB9OwogCiBzdGF0aWMgaW50IGJyX21ycF9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBza19idWZmICpza2IpOwogCi1zdGF0aWMgc3RydWN0IGJyX2ZyYW1lX3R5cGUgbXJwX2ZyYW1lX3R5cGUgX19yZWFkX21vc3RseSA9IHsKLQkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX01SUCksCi0JLmZyYW1lX2hhbmRsZXIgPSBicl9tcnBfcHJvY2VzcywKLX07Ci0KIHN0YXRpYyBib29sIGJyX21ycF9pc19yaW5nX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcF9wb3J0LAogCQkJCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnNfcG9ydCwKIAkJCQlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KQpAQCAtNDg2LDcgJiM0Mzs0ODEsNyBAQCBzdGF0aWMgdm9pZCBicl9tcnBfZGVsX2ltcGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApCiAJa2ZyZWVfcmN1KG1ycCwgcmN1KTsKIAogCWlmIChobGlzdF9lbXB0eSgmYW1wO2JyLSZndDttcnBfbGlzdCkpCi0JCWJyX2RlbF9mcmFtZShiciwgJmFtcDttcnBfZnJhbWVfdHlwZSk7CiYjNDM7CQlicl9kZWxfZnJhbWUoYnIsIGNwdV90b19iZTE2KEVUSF9QX01SUCkpOwogfQogCiAvKiBBZGRzIGEgbmV3IE1SUCBpbnN0YW5jZS4KQEAgLTUzNSwxMyAmIzQzOzUzMCwxNiBAQCBpbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKQogCXNwaW5fdW5sb2NrX2JoKCZhbXA7YnItJmd0O2xvY2spOwogCXJjdV9hc3NpZ25fcG9pbnRlcihtcnAtJmd0O3NfcG9ydCwgcCk7CiAKLQlpZiAoaGxpc3RfZW1wdHkoJmFtcDtici0mZ3Q7bXJwX2xpc3QpKQotCQlicl9hZGRfZnJhbWUoYnIsICZhbXA7bXJwX2ZyYW1lX3R5cGUpOwotCiAJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDttcnAtJmd0O3Rlc3Rfd29yaywgYnJfbXJwX3Rlc3Rfd29ya19leHBpcmVkKTsKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO21ycC0mZ3Q7aW5fdGVzdF93b3JrLCBicl9tcnBfaW5fdGVzdF93b3JrX2V4cGlyZWQpOwogCWhsaXN0X2FkZF90YWlsX3JjdSgmYW1wO21ycC0mZ3Q7bGlzdCwgJmFtcDtici0mZ3Q7bXJwX2xpc3QpOwogCiYjNDM7CWlmIChobGlzdF9pc19zaW5ndWxhcl9ub2RlKCZhbXA7bXJwLSZndDtsaXN0LCAmYW1wO2JyLSZndDttcnBfbGlzdCkpIHsKJiM0MzsJCWVyciA9IGJyX2FkZF9mcmFtZShiciwgY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSwgYnJfbXJwX3Byb2Nlc3MpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGRlbGV0ZV9tcnA7CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBicl9tcnBfc3dpdGNoZGV2X2FkZChiciwgbXJwKTsKIAlpZiAoZXJyKQogCQlnb3RvIGRlbGV0ZV9tcnA7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCmluZGV4IGQzMzdiMWNmYjk4MGQuLjUxNjMwMTdmZWI3NGQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCkBAIC05MzcsMTAgJiM0Mzs5MzcsMTQgQEAgc3RydWN0IGJyX2ZyYW1lX3R5cGUgewogCWludAkJCSgqZnJhbWVfaGFuZGxlcikoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwKIAkJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQlsaXN0OwomIzQzOwlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKIH07CiAKLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTsKLXZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTsKJiM0MztpbnQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgX19iZTE2IHR5cGUsCiYjNDM7CQkgaW50ICgqZnJhbWVfaGFuZGxlcikoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwKJiM0MzsJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikpOwomIzQzO3ZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgX19iZTE2IHR5cGUpOwomIzQzO3ZvaWQgYnJfZGVsX2ZyYW1lX2FsbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgYnJfcnhfaGFuZGxlcl9jaGVja19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MjkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA3MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEeW5hbWljIEFsbG9jYXRpb24gb2YgYGJyX2ZyYW1lX3R5cGVgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBhbGwgYWJvdXQgbW92aW5nIGF3YXkgZnJvbSB0aG9zZSBzdGF0aWMsIGdsb2JhbCBgY2ZtX2ZyYW1lX3R5cGVgIGFuZCBgbXJwX2ZyYW1lX3R5cGVgIHN0cnVjdHVyZXMuIEluc3RlYWQsIHRoZSBwYXRjaCBkeW5hbWljYWxseSBhbGxvY2F0ZXMgYHN0cnVjdCBicl9mcmFtZV90eXBlYCBpbnN0YW5jZXMgb24gYSBwZXItYnJpZGdlIGJhc2lzLiBUaGlzIGlzIGEgZ29vZCBtb3ZlOyBpdCBtYWtlcyB0aGUgY29kZSBjbGVhbmVyLCBtb3JlIGZsZXhpYmxlLCBhbmQgcG90ZW50aWFsbHkgc2FmZXIuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgcGxheXMgb3V0IGFjcm9zcyB0aGUgYnJpZGdlIGNvZGUuCgpGaXJzdCwgaW4gYG5ldC9icmlkZ2UvYnJfY2ZtLmNgLCBJIHNlZSB0aGV5JiMzOTt2ZSByZW1vdmVkIHRoZSBzdGF0aWMgYGNmbV9mcmFtZV90eXBlYC4gTm93LCB3aGVuIGNyZWF0aW5nIGEgQ0ZNIE1FUCAoTWFpbnRlbmFuY2UgRW50aXR5IFBvaW50KSBpbiBgYnJfY2ZtX21lcF9jcmVhdGVgLCB0aGV5IGNhbGwgYGJyX2FkZF9mcmFtZWAgd2l0aCB0aGUgcHJvdG9jb2wgdHlwZSBgRVRIX1BfQ0ZNYCBhbmQgdGhlIGhhbmRsZXIgYGJyX2NmbV9mcmFtZV9yeGAuICBJZiBgYnJfYWRkX2ZyYW1lYCBmYWlscyAoYWx3YXlzIGEgZ29vZCBjaGVjayksIHRoZSBNRVAgaXMgZnJlZWQgYW5kIGFuIGVycm9yIGlzIHJldHVybmVkLiBPbiBkZWxldGlvbiwgdGhleSBjYWxsIGBicl9kZWxfZnJhbWVgIHdpdGggYEVUSF9QX0NGTWAgaW5zdGVhZCBvZiB0aGUgb2xkIHN0YXRpYyBzdHJ1Y3R1cmUuIFRoaXMgZmVlbHMgY2xlYW5lciBhbmQgbW9yZSBpbnR1aXRpdmUuCgpUaGVuLCBpbiBgbmV0L2JyaWRnZS9icl9pZi5jYCwgdGhleSYjMzk7dmUgYWRkZWQgYGJyX2RlbF9mcmFtZV9hbGwoYnIpYCB0byBgYnJfZGV2X2RlbGV0ZWAuICBUaGlzIGVuc3VyZXMgYWxsIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBmcmFtZSB0eXBlcyBhcmUgcHJvcGVybHkgY2xlYW5lZCB1cCB3aGVuIGEgYnJpZGdlIGludGVyZmFjZSBpcyBkZWxldGVkLCB3aGljaCBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIHRvIGF2b2lkIG1lbW9yeSBsZWFrcy4gRXhjZWxsZW50LgoKUGVla2luZyBpbnRvIGBuZXQvYnJpZGdlL2JyX2lucHV0LmNgLCB0aGUgaGVhcnQgb2YgdGhlIGNoYW5nZXMgc2VlbXMgdG8gYmUgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBicl9hZGRfZnJhbWVgIGFuZCBgYnJfZGVsX2ZyYW1lYC4gIGBicl9hZGRfZnJhbWVgIG5vdyBjaGVja3MgZm9yIGR1cGxpY2F0ZSBmcmFtZSB0eXBlcyAoYSBgdHlwZWAgYWxyZWFkeSBleGlzdHMgaW4gYGJyLSZndDtmcmFtZV90eXBlX2xpc3RgKSwgd2hpY2ggaXMgYSBkZWNlbnQgc2FuaXR5IGNoZWNrIGFuZCByZXR1cm5zIGFuIGVycm9yIGNvZGUuIEl0IHRoZW4gZHluYW1pY2FsbHkgYWxsb2NhdGVzIGEgYHN0cnVjdCBicl9mcmFtZV90eXBlYCB3aXRoIGBrbWFsbG9jX29iamAsIGFuZCBpZiB0aGF0IGZhaWxzLCByZXR1cm5zIGFuIGVycm9yLiAgSXQgc2V0cyB0aGUgYHR5cGVgIGFuZCBgZnJhbWVfaGFuZGxlcmAsIGFuZCBhZGRzIHRoZSBuZXcgYGZ0YCB0byBgYnItJmd0O2ZyYW1lX3R5cGVfbGlzdGAuICBgYnJfZGVsX2ZyYW1lYCBub3cgZmluZHMgdGhlIGFwcHJvcHJpYXRlIGBmdGAgYmFzZWQgb24gdGhlIGB0eXBlYCwgYW5kIHNhZmVseSByZW1vdmVzIGFuZCBmcmVlcyBpdC4gIGBicl9kZWxfZnJhbWVfYWxsYCBqdXN0IGl0ZXJhdGVzIHRocm91Z2ggdGhlIGxpc3QgYW5kIGNsZWFucyB1cCBldmVyeXRoaW5nLiAgSSYjMzk7bSBnbGFkIHRvIHNlZSB0aGUgdXNlIG9mIGBrZnJlZV9yY3VgIHdpdGggdGhlIGByY3VgIGhlYWQsIHByb3BlciB1c2Ugb2YgUkNVIGZvciBzeW5jaHJvbml6YXRpb24gaXMgdGhlIHdheSB0byBnbyBoZXJlLgoKTmV4dCwgaW4gYG5ldC9icmlkZ2UvYnJfbXJwLmNgLCB0aGUgc3RhdGljIGBtcnBfZnJhbWVfdHlwZWAgaXMgZ29uZS4gIE9uIE1SUCBkZWxldGlvbiwgYGJyX2RlbF9mcmFtZWAgaXMgY2FsbGVkIHdpdGggYEVUSF9QX01SUGAuIE9uIE1SUCBhZGRpdGlvbiwgaXQgY2hlY2tzIGlmIGBtcnAtJmd0O2xpc3RgIGlzIHNpbmd1bGFyLCBhbmQgdGhlbiBjYWxscyBgYnJfYWRkX2ZyYW1lYCB3aXRoIGBFVEhfUF9NUlBgIGFuZCB0aGUgYGJyX21ycF9wcm9jZXNzYCBoYW5kbGVyLiAgU291bmRzIHN0cmFpZ2h0Zm9yd2FyZC4KCkZpbmFsbHksIGBuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaGAgYWRkcyB0aGUgYHN0cnVjdCByY3VfaGVhZCByY3U7YCB0byBgc3RydWN0IGJyX2ZyYW1lX3R5cGVgLiAgVGhpcyBpcyBlc3NlbnRpYWwgZm9yIFJDVS1zYWZlIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgZGVjbGFyYXRpb25zIGZvciB0aGUgY29yZSBmdW5jdGlvbnMgYXJlIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgbmV3IHN0cnVjdHVyZS4KCk5vdywgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3Igc2ltaWxhciB0b29sIHRvIHF1aWNrbHkgc2NhbiB0aGUgcmVzdCBvZiB0aGUgYnJpZGdlIGNvZGUgdG8gY29uZmlybSB0aGF0IHRoZSBgZnJhbWVfdHlwZV9saXN0YCBhbmQgYGJyX2ZyYW1lX3R5cGVgIGFyZSBvbmx5IHVzZWQgd2l0aGluIHRoZSBpbnRlbmRlZCBzY29wZS4gVGhpcyBzZWVtcyBsaWtlIGEgc29saWQsIHdlbGwtdGhvdWdodC1vdXQgY2hhbmdlLiBUaGUgZHluYW1pYyBhbGxvY2F0aW9uIGFwcHJvYWNoIGlzIGNvcnJlY3QgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnJhbWVfdHlwZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9kZXZpY2UuYz00ODA9dm9pZCBicl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTUwNS1cdElOSVRfSExJU1RfSEVBRChcdTAwMjZici1cdTAwM2VmZGJfbGlzdCk7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjUwNjpcdElOSVRfSExJU1RfSEVBRChcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QpO1xubmV0L2JyaWRnZS9icl9kZXZpY2UuYy01MDctI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTI2Nz1zdGF0aWMgaW50IG5mX2hvb2tfYnJpZGdlX3ByZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTMyMi0gKi9cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozMjM6c3RhdGljIGludCBicl9wcm9jZXNzX2ZyYW1lX3R5cGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMjQtXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMjUte1xubmV0L2JyaWRnZS9icl9pbnB1dC5jOjMyNjpcdHN0cnVjdCBicl9mcmFtZV90eXBlICp0bXA7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzI3LVxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjMyODpcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXAsIFx1MDAyNnAtXHUwMDNlYnItXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTMyOS1cdFx0aWYgKHVubGlrZWx5KHRtcC1cdTAwM2V0eXBlID09IHNrYi1cdTAwM2Vwcm90b2NvbCkpXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTMzOT1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBicl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00MjctXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDI4Olx0aWYgKHVubGlrZWx5KGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShwLCBza2IpKSlcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00MjktXHRcdHJldHVybiBSWF9IQU5ETEVSX1BBU1M7XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTQ3MT1pbnQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgX19iZTE2IHR5cGUsXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ3NC17XG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDc1Olx0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0O1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ3Ni1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0Nzc6XHRobGlzdF9mb3JfZWFjaF9lbnRyeShmdCwgXHUwMDI2YnItXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KSB7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDc4LVx0XHRpZiAoZnQtXHUwMDNldHlwZSA9PSB0eXBlKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00ODctXHRmdC1cdTAwM2VmcmFtZV9oYW5kbGVyID0gZnJhbWVfaGFuZGxlcjtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0ODg6XHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2ZnQtXHUwMDNlbGlzdCwgXHUwMDI2YnItXHUwMDNlZnJhbWVfdHlwZV9saXN0KTtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00ODktXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTQ5Mz12b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlKVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ5NC17XG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDk1Olx0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0O1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ5Ni1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0OTc6XHRobGlzdF9mb3JfZWFjaF9lbnRyeShmdCwgXHUwMDI2YnItXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KSB7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDk4LVx0XHRpZiAoZnQtXHUwMDNldHlwZSA9PSB0eXBlKSB7XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTUwNj12b2lkIGJyX2RlbF9mcmFtZV9hbGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTUwNy17XG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NTA4Olx0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0O1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTUwOS1cdHN0cnVjdCBobGlzdF9ub2RlICpuO1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTUxMC1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo1MTE6XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZ0LCBuLCBcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy01MTItXHRcdGhsaXN0X2RlbF9yY3UoXHUwMDI2ZnQtXHUwMDNlbGlzdCk7XG4tLVxubmV0L2JyaWRnZS9icl9tcnAuYz05OTQ9c3RhdGljIGJvb2wgYnJfbXJwX21pbV9wcm9jZXNzKHN0cnVjdCBicl9tcnAgKm1ycCwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcbi0tXG5uZXQvYnJpZGdlL2JyX21ycC5jLTEwMzItICovXG5uZXQvYnJpZGdlL2JyX21ycC5jOjEwMzM6c3RhdGljIHU4IGJyX21ycF9nZXRfZnJhbWVfdHlwZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2JyaWRnZS9icl9tcnAuYy0xMDM0LXtcbi0tXG5uZXQvYnJpZGdlL2JyX21ycC5jPTEwNzA9c3RhdGljIGludCBicl9tcnBfcmN2KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4tLVxubmV0L2JyaWRnZS9icl9tcnAuYy0xMTIyLVx0aWYgKGJyX21ycF9pbl9mcmFtZShza2IpKSB7XG5uZXQvYnJpZGdlL2JyX21ycC5jOjExMjM6XHRcdHU4IGluX3R5cGUgPSBicl9tcnBfZ2V0X2ZyYW1lX3R5cGUoc2tiKTtcbm5ldC9icmlkZ2UvYnJfbXJwLmMtMTEyNC1cbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD01MDA9c3RydWN0IG5ldF9icmlkZ2Uge1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTUwMi1cdHNwaW5sb2NrX3RcdFx0XHRoYXNoX2xvY2s7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo1MDM6XHRzdHJ1Y3QgaGxpc3RfaGVhZFx0XHRmcmFtZV90eXBlX2xpc3Q7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01MDQtXHRzdHJ1Y3QgbmV0X2RldmljZVx0XHQqZGV2O1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTkzMz1yeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05MzQtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo5MzU6c3RydWN0IGJyX2ZyYW1lX3R5cGUge1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTM2LVx0X19iZTE2XHRcdFx0dHlwZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU5OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGJyX3Byb2Nlc3NfZnJhbWVfdHlwZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGlzIGBicl9wcm9jZXNzX2ZyYW1lX3R5cGVgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgaXQgd2l0aGluIHRoZSBgbmV0L2JyaWRnZS9icl9pbnB1dC5jYCBmaWxlLiBUaGlzIGlzIHdoZXJlIHRoZSBicmlkZ2UgaW5wdXQgcHJvY2Vzc2luZyBsb2dpYyBpcywgc28gaXQgbWFrZXMgc2Vuc2UgdGhhdCB0aGUgZnJhbWUgdHlwZSB3b3VsZCBiZSBoYW5kbGVkIGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0IGRldGVybWluZXMgdGhlIGluY29taW5nIGZyYW1lJiMzOTtzIHR5cGUgYW5kIHdoYXQgaXQgZG9lcyB3aXRoIGl0LiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBvciBhIGxvZ2ljIGVycm9yIHRoYXQgSSBuZWVkIHRvIHBpbnBvaW50LiBUaW1lIHRvIGZpcmUgdXAgdGhlIGVkaXRvciBhbmQgc3RhcnQgcmVhZGluZyB0aHJvdWdoIHRoYXQgc2VjdGlvbiBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfaW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzIwOlx0LyogUmV0dXJuIDAgaWYgdGhlIGZyYW1lIHdhcyBub3QgcHJvY2Vzc2VkIG90aGVyd2lzZSAxXG4gMzIxOlx0ICogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrXG4gMzIyOlx0ICovXG4gMzIzOlx0c3RhdGljIGludCBicl9wcm9jZXNzX2ZyYW1lX3R5cGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbiAzMjQ6XHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDMyNTpcdHtcbiAzMjY6XHRcdHN0cnVjdCBicl9mcmFtZV90eXBlICp0bXA7XG4gMzI3Olx0XG4gMzI4Olx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wLCBcdTAwMjZwLVx1MDAzZWJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdClcbiAzMjk6XHRcdFx0aWYgKHVubGlrZWx5KHRtcC1cdTAwM2V0eXBlID09IHNrYi1cdTAwM2Vwcm90b2NvbCkpXG4gMzMwOlx0XHRcdFx0cmV0dXJuIHRtcC1cdTAwM2VmcmFtZV9oYW5kbGVyKHAsIHNrYik7XG4gMzMxOlx0XG4gMzMyOlx0XHRyZXR1cm4gMDtcbiAzMzM6XHR9XG4gMzM0Olx0XG4gMzM1Olx0LypcbiAzMzY6XHQgKiBSZXR1cm4gTlVMTCBpZiBza2IgaXMgaGFuZGxlZFxuIDMzNzpcdCAqIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9ja1xuIDMzODpcdCAqL1xuIDMzOTpcdHN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGJyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4gMzQwOlx0e1xuIDM0MTpcdFx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG4gMzQyOlx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwO1xuIDM0MzpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiO1xuIDM0NDpcdFx0Y29uc3QgdW5zaWduZWQgY2hhciAqZGVzdCA9IGV0aF9oZHIoc2tiKS1cdTAwM2VoX2Rlc3Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNDMKCQkJCQkJCW91dHB1dDogMjA4CgkJCQkJCQl0aG91Z2h0czogNjk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGBicl9hZGRfZnJhbWVgIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBhbmQgTWVtb3J5IFNhZmV0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBicl9hZGRfZnJhbWVgIGZ1bmN0aW9uIGluIGBicl9pbnB1dC5jYC4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBwb3RlbnRpYWwgbGVha3MuIFRoZSBmdW5jdGlvbiBhZGRzIGEgZnJhbWUgdHlwZSB0byBhIGJyaWRnZSYjMzk7cyBsaXN0LiBJIG5lZWQgdG8gYmUgbWV0aWN1bG91cy4KCkZpcnN0LCB0aGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoIHRoZSBleGlzdGluZyBmcmFtZSB0eXBlcyB0byBlbnN1cmUgdW5pcXVlbmVzcy4gVGhhdCYjMzk7cyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4gVGhlbiwgaXQgYWxsb2NhdGVzIG1lbW9yeSBmb3IgYSBuZXcgYGJyX2ZyYW1lX3R5cGVgIHN0cnVjdHVyZSB1c2luZyBga21hbGxvY19vYmpgLiBUaGlzIGlzIGNyaXRpY2FsLiBga21hbGxvY19vYmooKmZ0KWAgbWVhbnMgaXQgYWxsb2NhdGVzIHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgYGZ0YC4KCk5leHQsIHRoZSBzdHJ1Y3R1cmUgZmllbGRzIGFyZSBpbml0aWFsaXplZDogYHR5cGVgIGFuZCBgZnJhbWVfaGFuZGxlcmAgYXJlIGFzc2lnbmVkIHRoZWlyIHByb3ZpZGVkIHZhbHVlcywgYW5kIHRoZSBgbGlzdGAgbWVtYmVyIGlzIGFkZGVkIHRvIHRoZSBgaGxpc3RfaGVhZGAgb2YgZnJhbWUgdHlwZXMuIFRoZSBgcmN1YCBtZW1iZXIgaXMgbGlrZWx5IHVzZWQgZm9yIFJDVS1zYWZlIGZyZWVpbmcgbGF0ZXIuIFRoZSBgaGxpc3RfYWRkX2hlYWRfcmN1YCBmdW5jdGlvbiBpbXBsaWNpdGx5IGluaXRpYWxpemVzIGBsaXN0YC4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBhcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgcmVhZHMgb3IgcG90ZW50aWFsIGxlYWtzIHRvIHVzZXJzcGFjZT8gTGV0JiMzOTtzIHRyYWNlIGl0LiBUaGUgYGZ0YCBzdHJ1Y3R1cmUgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IGBicl9wcm9jZXNzX2ZyYW1lX3R5cGVgIHRvIHJlYWQgaXRzIGB0eXBlYCBhbmQgYGZyYW1lX2hhbmRsZXJgIG1lbWJlcnMsIGFuZCB0byB0cmF2ZXJzZSB0aGUgbGlzdCB2aWEgYGxpc3RgLiBJbXBvcnRhbnRseSwgYWxsIGZpZWxkcyAqcmVhZCogYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQgdmFsdWVzLiBUaGVyZSBpcyBubyBjb3B5aW5nIG9mIGRhdGEgdG8gdXNlcnNwYWNlLCBzbyB0aGVyZSYjMzk7cyBubyByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRocm91Z2ggdGhhdCBjaGFubmVsLiBJIHNlZSBubyB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgdXNlZCBmb3IgY29uZGl0aW9uYWwgYnJhbmNoaW5nLiBBbmQgbm8gcGFkZGluZyBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBlaXRoZXIuCgpOZXh0LCBJIG5lZWQgdG8gY29uc2lkZXIgbWVtb3J5IG1hbmFnZW1lbnQsIGNvbmN1cnJlbmN5LCBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIG1lbW9yeSBsZWFrcy4gVGhlIGZ1bmN0aW9uIGR5bmFtaWNhbGx5IGFsbG9jYXRlcyBgYnJfZnJhbWVfdHlwZWAgdXNpbmcgYGttYWxsb2Nfb2JqYC4gVGhpcyBzdHJ1Y3R1cmUgd2lsbCBldmVudHVhbGx5IGJlIGRlYWxsb2NhdGVkIHVzaW5nIGBrZnJlZV9yY3VgLCBpbmRpY2F0aW5nIGl0JiMzOTtzIFJDVS1wcm90ZWN0ZWQuIFRoYXQgc3VnZ2VzdHMgd2UgaGF2ZSB0byBjb25zaWRlciBSQ1Ugc3luY2hyb25pemF0aW9uLiBIb3dldmVyLCBhbnkgYnVncyBpbiBSQ1UgbGlzdCB0cmF2ZXJzYWwgb3IgbWVtb3J5IGZyZWVpbmcgKGxpa2UgVUFGIG9yIGRvdWJsZS1mcmVlKSBhcmUgdGhpbmdzIHRoYXQgd291bGQgZ2V0IGNhdWdodCBieSBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCBtZW1vcnkgZGV0ZWN0b3JzLiBJIGZlZWwgY29uZmlkZW50IGFib3V0IHRoaXMgcG9pbnQuCgpHaXZlbiB0aGUgb3ZlcmFsbCBjb2RlIGFuYWx5c2lzLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBFdmVyeXRoaW5nIHRvdWNoZWQgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQuCgpSZXZpZXdpbmcgdGhlIEtNU0FOIHJ1bGVzIGhlbHBzIG1lIGNvbmZpcm0gbXkgY29uY2x1c2lvbi4gVGhlIGNvZGUgZG9lc24mIzM5O3QgbWVldCB0aGUgY3JpdGVyaWEgZm9yIGBOZWVkc0tNU0FOPXRydWVgLiBJdCBmYWxscyBpbnRvIHRoZSBjYXRlZ29yeSBvZiBjb2RlIHRoYXQgcHJpbWFyaWx5IGludHJvZHVjZXMgcmlza3MgbGlrZSBVQUYsIG1lbW9yeSBsZWFrcywgZXRjLiwgd2hpY2ggYXJlIGNhdWdodCBieSBleGlzdGluZyBkZXRlY3RvcnMuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBjcmVhdGUgYSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgZXRoZXJuZXQgZnJhbWUgaGFuZGxlcnMgKHN1Y2ggYXMgQ0ZNIGFuZCBNUlApIGFyZSByZWdpc3RlcmVkIGluIHRoZSBicmlkZ2UgbW9kdWxlLiBJbnN0ZWFkIG9mIHVzaW5nIHN0YXRpYyBnbG9iYWwgYHN0cnVjdCBicl9mcmFtZV90eXBlYCB2YXJpYWJsZXMsIGl0IGR5bmFtaWNhbGx5IGFsbG9jYXRlcyBgc3RydWN0IGJyX2ZyYW1lX3R5cGVgIHVzaW5nIGBrbWFsbG9jX29iamAgYW5kIHByb3RlY3RzIGl0cyByZW1vdmFsIHdpdGggYGtmcmVlX3JjdWAuXG5cbkFsbCBmaWVsZHMgKGB0eXBlYCwgYGZyYW1lX2hhbmRsZXJgLCBhbmQgYGxpc3RgKSBhY2Nlc3NlZCBieSBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYCBhbmQgbGlzdCB0cmF2ZXJzYWwgZnVuY3Rpb25zIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBpbnNlcnRpb24gaW50byBgYnItXHUwMDNlZnJhbWVfdHlwZV9saXN0YC4gTm9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgYXJlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvciBjYWxjdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyAoc3VjaCBhcyBSQ1Ugc3luY2hyb25pemF0aW9uIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgZXRoZXJuZXQgZnJhbWUgaGFuZGxlcnMgKHN1Y2ggYXMgQ0ZNIGFuZCBNUlApIGFyZSByZWdpc3RlcmVkIGluIHRoZSBicmlkZ2UgbW9kdWxlLiBJbnN0ZWFkIG9mIHVzaW5nIHN0YXRpYyBnbG9iYWwgYHN0cnVjdCBicl9mcmFtZV90eXBlYCB2YXJpYWJsZXMsIGl0IGR5bmFtaWNhbGx5IGFsbG9jYXRlcyBgc3RydWN0IGJyX2ZyYW1lX3R5cGVgIHVzaW5nIGBrbWFsbG9jX29iamAgYW5kIHByb3RlY3RzIGl0cyByZW1vdmFsIHdpdGggYGtmcmVlX3JjdWAuXG5cbkFsbCBmaWVsZHMgKGB0eXBlYCwgYGZyYW1lX2hhbmRsZXJgLCBhbmQgYGxpc3RgKSBhY2Nlc3NlZCBieSBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYCBhbmQgbGlzdCB0cmF2ZXJzYWwgZnVuY3Rpb25zIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBpbnNlcnRpb24gaW50byBgYnItXHUwMDNlZnJhbWVfdHlwZV9saXN0YC4gTm9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgYXJlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvciBjYWxjdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyAoc3VjaCBhcyBSQ1Ugc3luY2hyb25pemF0aW9uIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE2OjQ0Ljc1NzgxOTM2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMTczMzIxNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX0NGTVwiLFxuICAgIFwiQlJJREdFX01SUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX2FkZF9mcmFtZVwiLFxuICAgIFwiYnJfZGVsX2ZyYW1lXCIsXG4gICAgXCJicl9kZWxfZnJhbWVfYWxsXCIsXG4gICAgXCJicl9jZm1fbWVwX2NyZWF0ZVwiLFxuICAgIFwiYnJfY2ZtX21lcF9kZWxldGVcIixcbiAgICBcImJyX21ycF9hZGRcIixcbiAgICBcImJyX21ycF9kZWxcIixcbiAgICBcImJyX2Rldl9kZWxldGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBldGhlcm5ldCBmcmFtZSBoYW5kbGVycyAoc3VjaCBhcyBDRk0gYW5kIE1SUCkgYXJlIHJlZ2lzdGVyZWQgaW4gdGhlIGJyaWRnZSBtb2R1bGUuIEluc3RlYWQgb2YgdXNpbmcgc3RhdGljIGdsb2JhbCBgc3RydWN0IGJyX2ZyYW1lX3R5cGVgIHZhcmlhYmxlcywgaXQgZHluYW1pY2FsbHkgYWxsb2NhdGVzIGBzdHJ1Y3QgYnJfZnJhbWVfdHlwZWAgdXNpbmcgYGttYWxsb2Nfb2JqYCBhbmQgcHJvdGVjdHMgaXRzIHJlbW92YWwgd2l0aCBga2ZyZWVfcmN1YC5cXG5cXG5BbGwgZmllbGRzIChgdHlwZWAsIGBmcmFtZV9oYW5kbGVyYCwgYW5kIGBsaXN0YCkgYWNjZXNzZWQgYnkgYGJyX3Byb2Nlc3NfZnJhbWVfdHlwZWAgYW5kIGxpc3QgdHJhdmVyc2FsIGZ1bmN0aW9ucyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgaW5zZXJ0aW9uIGludG8gYGJyLVxcdTAwM2VmcmFtZV90eXBlX2xpc3RgLiBOb25lIG9mIHRoZXNlIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhcmUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHVzZWQgaW4gY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9yIGNhbGN1bGF0aW9ucy4gQW55IHBvdGVudGlhbCBidWdzIChzdWNoIGFzIFJDVSBzeW5jaHJvbml6YXRpb24gaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGxlYWtzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGJyaWRnZSBFdGhlcm5ldCBmcmFtZSB0eXBlIGhhbmRsZXIgcmVnaXN0cmF0aW9uL2RlcmVnaXN0cmF0aW9uIG1lY2hhbmlzbS4gUHJldmlvdXNseSwgc3RhdGljYWxseSBhbGxvY2F0ZWQgZnJhbWUgdHlwZSBzdHJ1Y3R1cmVzIChzdWNoIGFzIGNmbV9mcmFtZV90eXBlIGFuZCBtcnBfZnJhbWVfdHlwZSkgd2VyZSByZWdpc3RlcmVkIGRpcmVjdGx5IHRvIGJyaWRnZSBpbnN0YW5jZXMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gbGlzdCBjb3JydXB0aW9uIGFjcm9zcyBtdWx0aXBsZSBicmlkZ2VzLiBUaGUgcGF0Y2ggY2hhbmdlcyB0aGlzIHRvIGR5bmFtaWMgcGVyLWJyaWRnZSBhbGxvY2F0aW9uIGFuZCBSQ1UtYmFzZWQgZnJlZWluZyBvZiBmcmFtZSB0eXBlIG5vZGVzLCBpbnRyb2R1Y2VzIGVycm9yIGhhbmRsaW5nIG9uIGFsbG9jYXRpb24gZmFpbHVyZSwgYW5kIGFkZHMgY2xlYW51cCBvZiBhbGwgcmVnaXN0ZXJlZCBmcmFtZSB0eXBlcyBkdXJpbmcgYnJpZGdlIGRldmljZSBkZWxldGlvbiAoYnJfZGV2X2RlbGV0ZSkuIFRoZXNlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY2hhbmdlcyB3YXJyYW50IGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLCBjb25jdXJyZW5jeSBpc3N1ZXMsIG9yIGVycm9yIGhhbmRsaW5nIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToxNjo0NC43NTc4Mjc3MTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTYyMDY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI2NmZkYTIyN2IyMjljMGFmY2YyMGUzOTUxNzEyNTI5NjNhZjY2MTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAwOToxNjo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2NmbS5jIGIvbmV0L2JyaWRnZS9icl9jZm0uY1xcbmluZGV4IGRlYTU2ZmZmYTFjMTkuLjU3OTAyNDg1ODgyOTggMTAwNjQ0XFxuLS0tIGEvbmV0L2JyaWRnZS9icl9jZm0uY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfY2ZtLmNcXG5AQCAtNDg5LDExICs0ODksNiBAQCBzdGF0aWMgaW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCBicl9mcmFtZV90eXBlIGNmbV9mcmFtZV90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XFxuLVxcdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfQ0ZNKSxcXG4tXFx0LmZyYW1lX2hhbmRsZXIgPSBicl9jZm1fZnJhbWVfcngsXFxuLX07XFxuLVxcbiBpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbiBcXHRcXHQgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsXFxuIFxcdFxcdCAgICAgIHN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSAqY29uc3QgY3JlYXRlLFxcbkBAIC01MDEsNiArNDk2LDcgQEAgaW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwO1xcbiBcXHRzdHJ1Y3QgYnJfY2ZtX21lcCAqbWVwO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4gXFx0QVNTRVJUX1JUTkwoKTtcXG4gXFxuQEAgLTU1OCw4ICs1NTQsMTMgQEAgaW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4gXFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZtZXAtXFx1MDAzZXBlZXJfbWVwX2xpc3QpO1xcbiBcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2bWVwLVxcdTAwM2VjY21fdHhfZHdvcmssIGNjbV90eF93b3JrX2V4cGlyZWQpO1xcbiBcXG4tXFx0aWYgKGhsaXN0X2VtcHR5KFxcdTAwMjZici1cXHUwMDNlbWVwX2xpc3QpKVxcbi1cXHRcXHRicl9hZGRfZnJhbWUoYnIsIFxcdTAwMjZjZm1fZnJhbWVfdHlwZSk7XFxuK1xcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2YnItXFx1MDAzZW1lcF9saXN0KSkge1xcbitcXHRcXHRlcnIgPSBicl9hZGRfZnJhbWUoYnIsIGNwdV90b19iZTE2KEVUSF9QX0NGTSksIGJyX2NmbV9mcmFtZV9yeCk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0a2ZyZWUobWVwKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcbiBcXHRobGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNm1lcC1cXHUwMDNlaGVhZCwgXFx1MDAyNmJyLVxcdTAwM2VtZXBfbGlzdCk7XFxuIFxcbkBAIC01ODgsNyArNTg5LDcgQEAgc3RhdGljIHZvaWQgbWVwX2RlbGV0ZV9pbXBsZW1lbnRhdGlvbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuIFxcdGtmcmVlX3JjdShtZXAsIHJjdSk7XFxuIFxcbiBcXHRpZiAoaGxpc3RfZW1wdHkoXFx1MDAyNmJyLVxcdTAwM2VtZXBfbGlzdCkpXFxuLVxcdFxcdGJyX2RlbF9mcmFtZShiciwgXFx1MDAyNmNmbV9mcmFtZV90eXBlKTtcXG4rXFx0XFx0YnJfZGVsX2ZyYW1lKGJyLCBjcHVfdG9fYmUxNihFVEhfUF9DRk0pKTtcXG4gfVxcbiBcXG4gaW50IGJyX2NmbV9tZXBfZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pZi5jIGIvbmV0L2JyaWRnZS9icl9pZi5jXFxuaW5kZXggYzUyNjEzNDMxZjg4Ni4uZmU4ZTlhNDdlMWFjMSAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX2lmLmNcXG4rKysgYi9uZXQvYnJpZGdlL2JyX2lmLmNcXG5AQCAtMzk3LDYgKzM5Nyw4IEBAIHZvaWQgYnJfZGV2X2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbiBcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZici1cXHUwMDNldGNuX3RpbWVyKTtcXG4gXFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZici1cXHUwMDNlZ2Nfd29yayk7XFxuIFxcbitcXHRicl9kZWxfZnJhbWVfYWxsKGJyKTtcXG4rXFxuIFxcdGJyX3N5c2ZzX2RlbGJyKGJyLVxcdTAwM2VkZXYpO1xcbiBcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShici1cXHUwMDNlZGV2LCBoZWFkKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmNcXG5pbmRleCBkODdhNWY5ZmE5MmI3Li4wN2VmZDBmYmNmOWNkIDEwMDY0NFxcbi0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xcbkBAIC00NjgsMTggKzQ2OCw0OCBAQCByeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIGJyX2hhbmRsZV9mcmFtZTtcXG4gfVxcbiBcXG4tdm9pZCBicl9hZGRfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQpXFxuK2ludCBicl9hZGRfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBfX2JlMTYgdHlwZSxcXG4rXFx0XFx0IGludCAoKmZyYW1lX2hhbmRsZXIpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpKVxcbiB7XFxuK1xcdHN0cnVjdCBicl9mcmFtZV90eXBlICpmdDtcXG4rXFxuK1xcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZ0LCBcXHUwMDI2YnItXFx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdCkge1xcbitcXHRcXHRpZiAoZnQtXFx1MDAzZXR5cGUgPT0gdHlwZSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcdH1cXG4rXFxuK1xcdGZ0ID0ga21hbGxvY19vYmooKmZ0KTtcXG4rXFx0aWYgKCFmdClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRmdC1cXHUwMDNldHlwZSA9IHR5cGU7XFxuK1xcdGZ0LVxcdTAwM2VmcmFtZV9oYW5kbGVyID0gZnJhbWVfaGFuZGxlcjtcXG4gXFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZmdC1cXHUwMDNlbGlzdCwgXFx1MDAyNmJyLVxcdTAwM2VmcmFtZV90eXBlX2xpc3QpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KVxcbit2b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlKVxcbiB7XFxuLVxcdHN0cnVjdCBicl9mcmFtZV90eXBlICp0bXA7XFxuK1xcdHN0cnVjdCBicl9mcmFtZV90eXBlICpmdDtcXG4gXFxuLVxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgXFx1MDAyNmJyLVxcdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpXFxuLVxcdFxcdGlmIChmdCA9PSB0bXApIHtcXG4rXFx0aGxpc3RfZm9yX2VhY2hfZW50cnkoZnQsIFxcdTAwMjZici1cXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KSB7XFxuK1xcdFxcdGlmIChmdC1cXHUwMDNldHlwZSA9PSB0eXBlKSB7XFxuIFxcdFxcdFxcdGhsaXN0X2RlbF9yY3UoXFx1MDAyNmZ0LVxcdTAwM2VsaXN0KTtcXG4rXFx0XFx0XFx0a2ZyZWVfcmN1KGZ0LCByY3UpO1xcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbit2b2lkIGJyX2RlbF9mcmFtZV9hbGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbit7XFxuK1xcdHN0cnVjdCBicl9mcmFtZV90eXBlICpmdDtcXG4rXFx0c3RydWN0IGhsaXN0X25vZGUgKm47XFxuK1xcbitcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZ0LCBuLCBcXHUwMDI2YnItXFx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdCkge1xcbitcXHRcXHRobGlzdF9kZWxfcmN1KFxcdTAwMjZmdC1cXHUwMDNlbGlzdCk7XFxuK1xcdFxcdGtmcmVlX3JjdShmdCwgcmN1KTtcXG4rXFx0fVxcbiB9XFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXJwLmMgYi9uZXQvYnJpZGdlL2JyX21ycC5jXFxuaW5kZXggZWYxNmQwNzAzOTI0MS4uNTExYWU4YWYzZDAzMyAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX21ycC5jXFxuKysrIGIvbmV0L2JyaWRnZS9icl9tcnAuY1xcbkBAIC04LDExICs4LDYgQEAgc3RhdGljIGNvbnN0IHU4IG1ycF9pbl90ZXN0X2RtYWNbRVRIX0FMRU5dID0geyAweDEsIDB4MTUsIDB4NGUsIDB4MCwgMHgwLCAweDMgfTtcXG4gXFxuIHN0YXRpYyBpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIFxcbi1zdGF0aWMgc3RydWN0IGJyX2ZyYW1lX3R5cGUgbXJwX2ZyYW1lX3R5cGUgX19yZWFkX21vc3RseSA9IHtcXG4tXFx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9NUlApLFxcbi1cXHQuZnJhbWVfaGFuZGxlciA9IGJyX21ycF9wcm9jZXNzLFxcbi19O1xcbi1cXG4gc3RhdGljIGJvb2wgYnJfbXJwX2lzX3JpbmdfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwX3BvcnQsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnNfcG9ydCxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5AQCAtNDg2LDcgKzQ4MSw3IEBAIHN0YXRpYyB2b2lkIGJyX21ycF9kZWxfaW1wbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnAgKm1ycClcXG4gXFx0a2ZyZWVfcmN1KG1ycCwgcmN1KTtcXG4gXFxuIFxcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2YnItXFx1MDAzZW1ycF9saXN0KSlcXG4tXFx0XFx0YnJfZGVsX2ZyYW1lKGJyLCBcXHUwMDI2bXJwX2ZyYW1lX3R5cGUpO1xcbitcXHRcXHRicl9kZWxfZnJhbWUoYnIsIGNwdV90b19iZTE2KEVUSF9QX01SUCkpO1xcbiB9XFxuIFxcbiAvKiBBZGRzIGEgbmV3IE1SUCBpbnN0YW5jZS5cXG5AQCAtNTM1LDEzICs1MzAsMTYgQEAgaW50IGJyX21ycF9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSlcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmJyLVxcdTAwM2Vsb2NrKTtcXG4gXFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1ycC1cXHUwMDNlc19wb3J0LCBwKTtcXG4gXFxuLVxcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2YnItXFx1MDAzZW1ycF9saXN0KSlcXG4tXFx0XFx0YnJfYWRkX2ZyYW1lKGJyLCBcXHUwMDI2bXJwX2ZyYW1lX3R5cGUpO1xcbi1cXG4gXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNm1ycC1cXHUwMDNldGVzdF93b3JrLCBicl9tcnBfdGVzdF93b3JrX2V4cGlyZWQpO1xcbiBcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2bXJwLVxcdTAwM2Vpbl90ZXN0X3dvcmssIGJyX21ycF9pbl90ZXN0X3dvcmtfZXhwaXJlZCk7XFxuIFxcdGhsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2bXJwLVxcdTAwM2VsaXN0LCBcXHUwMDI2YnItXFx1MDAzZW1ycF9saXN0KTtcXG4gXFxuK1xcdGlmIChobGlzdF9pc19zaW5ndWxhcl9ub2RlKFxcdTAwMjZtcnAtXFx1MDAzZWxpc3QsIFxcdTAwMjZici1cXHUwMDNlbXJwX2xpc3QpKSB7XFxuK1xcdFxcdGVyciA9IGJyX2FkZF9mcmFtZShiciwgY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSwgYnJfbXJwX3Byb2Nlc3MpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGRlbGV0ZV9tcnA7XFxuK1xcdH1cXG4rXFxuIFxcdGVyciA9IGJyX21ycF9zd2l0Y2hkZXZfYWRkKGJyLCBtcnApO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGRlbGV0ZV9tcnA7XFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcXG5pbmRleCBkMzM3YjFjZmI5ODBkLi41MTYzMDE3ZmViNzRkIDEwMDY0NFxcbi0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXFxuKysrIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcXG5AQCAtOTM3LDEwICs5MzcsMTQgQEAgc3RydWN0IGJyX2ZyYW1lX3R5cGUge1xcbiBcXHRpbnRcXHRcXHRcXHQoKmZyYW1lX2hhbmRsZXIpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gXFx0c3RydWN0IGhsaXN0X25vZGVcXHRsaXN0O1xcbitcXHRzdHJ1Y3QgcmN1X2hlYWRcXHRcXHRyY3U7XFxuIH07XFxuIFxcbi12b2lkIGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdCk7XFxuLXZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTtcXG4raW50IGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlLFxcbitcXHRcXHQgaW50ICgqZnJhbWVfaGFuZGxlcikoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikpO1xcbit2b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlKTtcXG4rdm9pZCBicl9kZWxfZnJhbWVfYWxsKHN0cnVjdCBuZXRfYnJpZGdlICpicik7XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgYnJfcnhfaGFuZGxlcl9jaGVja19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToxNjo0NS4yNTQ0NzI1MzVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI5ODE2MzgzMTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX0NGTVwiLFxuICAgIFwiQlJJREdFX01SUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX2FkZF9mcmFtZVwiLFxuICAgIFwiYnJfZGVsX2ZyYW1lXCIsXG4gICAgXCJicl9kZWxfZnJhbWVfYWxsXCIsXG4gICAgXCJicl9jZm1fbWVwX2NyZWF0ZVwiLFxuICAgIFwiYnJfY2ZtX21lcF9kZWxldGVcIixcbiAgICBcImJyX21ycF9hZGRcIixcbiAgICBcImJyX21ycF9kZWxcIixcbiAgICBcImJyX2Rldl9kZWxldGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGJyaWRnZSBFdGhlcm5ldCBmcmFtZSB0eXBlIGhhbmRsZXIgcmVnaXN0cmF0aW9uL2RlcmVnaXN0cmF0aW9uIG1lY2hhbmlzbS4gUHJldmlvdXNseSwgc3RhdGljYWxseSBhbGxvY2F0ZWQgZnJhbWUgdHlwZSBzdHJ1Y3R1cmVzIChzdWNoIGFzIGNmbV9mcmFtZV90eXBlIGFuZCBtcnBfZnJhbWVfdHlwZSkgd2VyZSByZWdpc3RlcmVkIGRpcmVjdGx5IHRvIGJyaWRnZSBpbnN0YW5jZXMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gbGlzdCBjb3JydXB0aW9uIGFjcm9zcyBtdWx0aXBsZSBicmlkZ2VzLiBUaGUgcGF0Y2ggY2hhbmdlcyB0aGlzIHRvIGR5bmFtaWMgcGVyLWJyaWRnZSBhbGxvY2F0aW9uIGFuZCBSQ1UtYmFzZWQgZnJlZWluZyBvZiBmcmFtZSB0eXBlIG5vZGVzLCBpbnRyb2R1Y2VzIGVycm9yIGhhbmRsaW5nIG9uIGFsbG9jYXRpb24gZmFpbHVyZSwgYW5kIGFkZHMgY2xlYW51cCBvZiBhbGwgcmVnaXN0ZXJlZCBmcmFtZSB0eXBlcyBkdXJpbmcgYnJpZGdlIGRldmljZSBkZWxldGlvbiAoYnJfZGV2X2RlbGV0ZSkuIFRoZXNlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY2hhbmdlcyB3YXJyYW50IGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLCBjb25jdXJyZW5jeSBpc3N1ZXMsIG9yIGVycm9yIGhhbmRsaW5nIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI2NmZkYTIyN2IyMjljMGFmY2YyMGUzOTUxNzEyNTI5NjNhZjY2MTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDA5OjE2OjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9jZm0uYyBiL25ldC9icmlkZ2UvYnJfY2ZtLmNcbmluZGV4IGRlYTU2ZmZmYTFjMTkuLjU3OTAyNDg1ODgyOTggMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX2NmbS5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX2NmbS5jXG5AQCAtNDg5LDExICs0ODksNiBAQCBzdGF0aWMgaW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSBjZm1fZnJhbWVfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuLVx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9DRk0pLFxuLVx0LmZyYW1lX2hhbmRsZXIgPSBicl9jZm1fZnJhbWVfcngsXG4tfTtcbi1cbiBpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0XHQgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsXG4gXHRcdCAgICAgIHN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSAqY29uc3QgY3JlYXRlLFxuQEAgLTUwMSw2ICs0OTYsNyBAQCBpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIHtcbiBcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7XG4gXHRzdHJ1Y3QgYnJfY2ZtX21lcCAqbWVwO1xuK1x0aW50IGVycjtcbiBcbiBcdEFTU0VSVF9SVE5MKCk7XG4gXG5AQCAtNTU4LDggKzU1NCwxMyBAQCBpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm1lcC1cdTAwM2VwZWVyX21lcF9saXN0KTtcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm1lcC1cdTAwM2VjY21fdHhfZHdvcmssIGNjbV90eF93b3JrX2V4cGlyZWQpO1xuIFxuLVx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1lcF9saXN0KSlcbi1cdFx0YnJfYWRkX2ZyYW1lKGJyLCBcdTAwMjZjZm1fZnJhbWVfdHlwZSk7XG4rXHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2YnItXHUwMDNlbWVwX2xpc3QpKSB7XG4rXHRcdGVyciA9IGJyX2FkZF9mcmFtZShiciwgY3B1X3RvX2JlMTYoRVRIX1BfQ0ZNKSwgYnJfY2ZtX2ZyYW1lX3J4KTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGtmcmVlKG1lcCk7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1x0fVxuIFxuIFx0aGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNm1lcC1cdTAwM2VoZWFkLCBcdTAwMjZici1cdTAwM2VtZXBfbGlzdCk7XG4gXG5AQCAtNTg4LDcgKzU4OSw3IEBAIHN0YXRpYyB2b2lkIG1lcF9kZWxldGVfaW1wbGVtZW50YXRpb24oc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0a2ZyZWVfcmN1KG1lcCwgcmN1KTtcbiBcbiBcdGlmIChobGlzdF9lbXB0eShcdTAwMjZici1cdTAwM2VtZXBfbGlzdCkpXG4tXHRcdGJyX2RlbF9mcmFtZShiciwgXHUwMDI2Y2ZtX2ZyYW1lX3R5cGUpO1xuK1x0XHRicl9kZWxfZnJhbWUoYnIsIGNwdV90b19iZTE2KEVUSF9QX0NGTSkpO1xuIH1cbiBcbiBpbnQgYnJfY2ZtX21lcF9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaWYuYyBiL25ldC9icmlkZ2UvYnJfaWYuY1xuaW5kZXggYzUyNjEzNDMxZjg4Ni4uZmU4ZTlhNDdlMWFjMSAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfaWYuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9pZi5jXG5AQCAtMzk3LDYgKzM5Nyw4IEBAIHZvaWQgYnJfZGV2X2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuIFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZici1cdTAwM2V0Y25fdGltZXIpO1xuIFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmJyLVx1MDAzZWdjX3dvcmspO1xuIFxuK1x0YnJfZGVsX2ZyYW1lX2FsbChicik7XG4rXG4gXHRicl9zeXNmc19kZWxicihici1cdTAwM2VkZXYpO1xuIFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoYnItXHUwMDNlZGV2LCBoZWFkKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jXG5pbmRleCBkODdhNWY5ZmE5MmI3Li4wN2VmZDBmYmNmOWNkIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmNcbkBAIC00NjgsMTggKzQ2OCw0OCBAQCByeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiBicl9oYW5kbGVfZnJhbWU7XG4gfVxuIFxuLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KVxuK2ludCBicl9hZGRfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBfX2JlMTYgdHlwZSxcbitcdFx0IGludCAoKmZyYW1lX2hhbmRsZXIpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSlcbiB7XG4rXHRzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQ7XG4rXG4rXHRobGlzdF9mb3JfZWFjaF9lbnRyeShmdCwgXHUwMDI2YnItXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KSB7XG4rXHRcdGlmIChmdC1cdTAwM2V0eXBlID09IHR5cGUpXG4rXHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXHR9XG4rXG4rXHRmdCA9IGttYWxsb2Nfb2JqKCpmdCk7XG4rXHRpZiAoIWZ0KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZ0LVx1MDAzZXR5cGUgPSB0eXBlO1xuK1x0ZnQtXHUwMDNlZnJhbWVfaGFuZGxlciA9IGZyYW1lX2hhbmRsZXI7XG4gXHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2ZnQtXHUwMDNlbGlzdCwgXHUwMDI2YnItXHUwMDNlZnJhbWVfdHlwZV9saXN0KTtcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbi12b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdClcbit2b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlKVxuIHtcbi1cdHN0cnVjdCBicl9mcmFtZV90eXBlICp0bXA7XG4rXHRzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQ7XG4gXG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsIFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdClcbi1cdFx0aWYgKGZ0ID09IHRtcCkge1xuK1x0aGxpc3RfZm9yX2VhY2hfZW50cnkoZnQsIFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdCkge1xuK1x0XHRpZiAoZnQtXHUwMDNldHlwZSA9PSB0eXBlKSB7XG4gXHRcdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZmdC1cdTAwM2VsaXN0KTtcbitcdFx0XHRrZnJlZV9yY3UoZnQsIHJjdSk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4rXHR9XG4rfVxuK1xuK3ZvaWQgYnJfZGVsX2ZyYW1lX2FsbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4re1xuK1x0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0O1xuK1x0c3RydWN0IGhsaXN0X25vZGUgKm47XG4rXG4rXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZ0LCBuLCBcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHtcbitcdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZmdC1cdTAwM2VsaXN0KTtcbitcdFx0a2ZyZWVfcmN1KGZ0LCByY3UpO1xuK1x0fVxuIH1cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX21ycC5jIGIvbmV0L2JyaWRnZS9icl9tcnAuY1xuaW5kZXggZWYxNmQwNzAzOTI0MS4uNTExYWU4YWYzZDAzMyAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfbXJwLmNcbisrKyBiL25ldC9icmlkZ2UvYnJfbXJwLmNcbkBAIC04LDExICs4LDYgQEAgc3RhdGljIGNvbnN0IHU4IG1ycF9pbl90ZXN0X2RtYWNbRVRIX0FMRU5dID0geyAweDEsIDB4MTUsIDB4NGUsIDB4MCwgMHgwLCAweDMgfTtcbiBcbiBzdGF0aWMgaW50IGJyX21ycF9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBza19idWZmICpza2IpO1xuIFxuLXN0YXRpYyBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSBtcnBfZnJhbWVfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuLVx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9NUlApLFxuLVx0LmZyYW1lX2hhbmRsZXIgPSBicl9tcnBfcHJvY2Vzcyxcbi19O1xuLVxuIHN0YXRpYyBib29sIGJyX21ycF9pc19yaW5nX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcF9wb3J0LFxuIFx0XHRcdFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqc19wb3J0LFxuIFx0XHRcdFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbkBAIC00ODYsNyArNDgxLDcgQEAgc3RhdGljIHZvaWQgYnJfbXJwX2RlbF9pbXBsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycCAqbXJwKVxuIFx0a2ZyZWVfcmN1KG1ycCwgcmN1KTtcbiBcbiBcdGlmIChobGlzdF9lbXB0eShcdTAwMjZici1cdTAwM2VtcnBfbGlzdCkpXG4tXHRcdGJyX2RlbF9mcmFtZShiciwgXHUwMDI2bXJwX2ZyYW1lX3R5cGUpO1xuK1x0XHRicl9kZWxfZnJhbWUoYnIsIGNwdV90b19iZTE2KEVUSF9QX01SUCkpO1xuIH1cbiBcbiAvKiBBZGRzIGEgbmV3IE1SUCBpbnN0YW5jZS5cbkBAIC01MzUsMTMgKzUzMCwxNiBAQCBpbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKVxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YnItXHUwMDNlbG9jayk7XG4gXHRyY3VfYXNzaWduX3BvaW50ZXIobXJwLVx1MDAzZXNfcG9ydCwgcCk7XG4gXG4tXHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2YnItXHUwMDNlbXJwX2xpc3QpKVxuLVx0XHRicl9hZGRfZnJhbWUoYnIsIFx1MDAyNm1ycF9mcmFtZV90eXBlKTtcbi1cbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm1ycC1cdTAwM2V0ZXN0X3dvcmssIGJyX21ycF90ZXN0X3dvcmtfZXhwaXJlZCk7XG4gXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZtcnAtXHUwMDNlaW5fdGVzdF93b3JrLCBicl9tcnBfaW5fdGVzdF93b3JrX2V4cGlyZWQpO1xuIFx0aGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNm1ycC1cdTAwM2VsaXN0LCBcdTAwMjZici1cdTAwM2VtcnBfbGlzdCk7XG4gXG4rXHRpZiAoaGxpc3RfaXNfc2luZ3VsYXJfbm9kZShcdTAwMjZtcnAtXHUwMDNlbGlzdCwgXHUwMDI2YnItXHUwMDNlbXJwX2xpc3QpKSB7XG4rXHRcdGVyciA9IGJyX2FkZF9mcmFtZShiciwgY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSwgYnJfbXJwX3Byb2Nlc3MpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZGVsZXRlX21ycDtcbitcdH1cbitcbiBcdGVyciA9IGJyX21ycF9zd2l0Y2hkZXZfYWRkKGJyLCBtcnApO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBkZWxldGVfbXJwO1xuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbmluZGV4IGQzMzdiMWNmYjk4MGQuLjUxNjMwMTdmZWI3NGQgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuKysrIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbkBAIC05MzcsMTAgKzkzNywxNCBAQCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSB7XG4gXHRpbnRcdFx0XHQoKmZyYW1lX2hhbmRsZXIpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG4gXHRcdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpO1xuIFx0c3RydWN0IGhsaXN0X25vZGVcdGxpc3Q7XG4rXHRzdHJ1Y3QgcmN1X2hlYWRcdFx0cmN1O1xuIH07XG4gXG4tdm9pZCBicl9hZGRfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQpO1xuLXZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTtcbitpbnQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgX19iZTE2IHR5cGUsXG4rXHRcdCBpbnQgKCpmcmFtZV9oYW5kbGVyKShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikpO1xuK3ZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgX19iZTE2IHR5cGUpO1xuK3ZvaWQgYnJfZGVsX2ZyYW1lX2FsbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBicl9yeF9oYW5kbGVyX2NoZWNrX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE2OjQ1LjI1NDQ3NDQyNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg0NzEzNzQxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCcmlkZ2luZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIHRhcmdldGluZyB0aGUgYG5ldC9icmlkZ2VgIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGBicl9jZm0uY2AsIGBicl9pZi5jYCwgYGJyX2lucHV0LmNgLCBgYnJfbXJwLmNgLCBhbmQgYGJyX3ByaXZhdGUuaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkZpbmFsbHksIHNvbWVvbmUgYWRkcmVzc2VkIHRoYXQgc2hhcmVkIGBzdHJ1Y3QgYnJfZnJhbWVfdHlwZWAgaXNzdWUuXCIgSSd2ZSBzZWVuIHRoYXQga2luZCBvZiBzdGF0aWMgc3RydWN0dXJlIGNhdXNlIGhlYWRhY2hlcyBmb3IgYWdlcy5cblxuTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBkaWZmIGNvbmZpcm1zIG15IHN1c3BpY2lvbi4gVGhlIGNvcmUgcHJvYmxlbSwgYXMgSSByZWNhbGwsIHdhcyB0aGF0IGBicl9hZGRfZnJhbWVgIHdhcyB1c2luZyBzdGF0aWNhbGx5IGRlY2xhcmVkIGBzdHJ1Y3QgYnJfZnJhbWVfdHlwZWAgaW5zdGFuY2VzIGxpa2UgYGNmbV9mcmFtZV90eXBlYCBhbmQgYG1ycF9mcmFtZV90eXBlYC4gVGhhdCdzIGEgdGV4dGJvb2sgcmVjaXBlIGZvciBsaXN0IGNvcnJ1cHRpb24gYW5kIHJhY2UgY29uZGl0aW9ucyBpZiBtdWx0aXBsZSBicmlkZ2VzIHdlcmUgYWRkaW5nIHRoZSBzYW1lIGluc3RhbmNlLCBvciBpZiB0aGVyZSB3YXMgY29uY3VycmVudCByZWdpc3RyYXRpb24uIFRoZSBzaGFyZWQgYHN0cnVjdCBobGlzdF9ub2RlIGxpc3RgIHdpdGhpbiB0aG9zZSBzdGF0aWMgaW5zdGFuY2VzIHdhcyB0aGUgY3VscHJpdC5cblxuVGhpcyBwYXRjaCBzbWFydGx5IGFkZHJlc3NlcyBpdCBieSBhbGxvY2F0aW5nIGEgKmR5bmFtaWMqIGBzdHJ1Y3QgYnJfZnJhbWVfdHlwZWAgcGVyIGJyaWRnZSB1c2luZyBga21hbGxvY19vYmpgLiBUaGlzIGlzIHRoZSByaWdodCBhcHByb2FjaC4gVGhlbiwgYGJyX2RlbF9mcmFtZWAgbm93IGNhbGxzIGBrZnJlZV9yY3UoZnQsIHJjdSlgIHRvIHJlbGVhc2UgdGhlIGFsbG9jYXRlZCBtZW1vcnksIGFuZCBjcnVjaWFsbHksIGBicl9kZWxfZnJhbWVfYWxsKGJyKWAgaGFzIGJlZW4gYWRkZWQgdG8gYGJyX2Rldl9kZWxldGVgIHRvIGNsZWFuIHVwIHRoZSBmcmFtZSB0eXBlcyBkdXJpbmcgYnJpZGdlIGRldmljZSBkZWxldGlvbi4gR29vZCwgdGhvcm91Z2ggY2xlYW51cCBpcyBlc3NlbnRpYWwgaGVyZS5cblxuVGhlIGNoYW5nZXMgaW4gYGJyX2NmbS5jYCBhbmQgYGJyX21ycC5jYCB1cGRhdGluZyBmdW5jdGlvbiBzaWduYXR1cmVzIHRvIG1hdGNoIHRoZSBuZXcgYGJyX2FkZF9mcmFtZWAgYW5kIGBicl9kZWxfZnJhbWVgIGFyZSBhcyBleHBlY3RlZCwgYW5kIGdvb2QgdG8gc2VlLiBUaGUgZXJyb3IgaGFuZGxpbmcgaXMgYWxzbyBpbiBwbGFjZSwgd2hpY2ggaXMgYSB2ZXJ5IGdvb2QgYWRkaXRpb24uIEl0J3MgYWxzbyBncmVhdCB0aGF0IGBicl9pbnB1dC5jYCBpcyB1cGRhdGVkLCB0b28uIEFuZCBvZiBjb3Vyc2UsIHRoZSBhZGRpdGlvbiBvZiB0aGUgYHN0cnVjdCByY3VfaGVhZCByY3U7YCBtZW1iZXIgaW4gYHN0cnVjdCBicl9mcmFtZV90eXBlYCB3aXRoaW4gYGJyX3ByaXZhdGUuaGAgaXMgbmVjZXNzYXJ5IHRvIHN1cHBvcnQgdGhlIFJDVS1iYXNlZCBtZW1vcnkgZnJlZWluZy5cblxuTm93LCBiZWZvcmUgSSBnaXZlIHRoaXMgYSBydWJiZXIgc3RhbXAsIEknbSBnb2luZyB0byBydW4gYSBxdWljayBjaGVjayBvbiB0aGUgS2NvbmZpZyByZXF1aXJlbWVudHMgZm9yIGJyaWRnZSwgQ0ZNLCBhbmQgTVJQLiBMZXQncyBtYWtlIHN1cmUgdGhhdCBldmVyeXRoaW5nJ3MgY29uZmlndXJlZCBhcyBleHBlY3RlZCBhbmQgdGhhdCBhbnkgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0bHkgaGFuZGxlZC4gSSB0aGluayBhIHF1aWNrIGdyZXBwaW5nIHNlc3Npb24gdGhyb3VnaCB0aGUgYG5ldC9icmlkZ2VgIEtjb25maWcgZmlsZXMgc2hvdWxkIHByb3ZpZGUgd2hhdCBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToxNjo1My43MjU4NTE1NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDEzNDgxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ0ZNfE1SUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9LY29uZmlnPTUwPWNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy02My1cXG5uZXQvYnJpZGdlL0tjb25maWc6NjQ6Y29uZmlnIEJSSURHRV9NUlBcXG5uZXQvYnJpZGdlL0tjb25maWc6NjU6XFx0Ym9vbCBcXFwiTVJQIHByb3RvY29sXFxcIlxcbm5ldC9icmlkZ2UvS2NvbmZpZy02Ni1cXHRkZXBlbmRzIG9uIEJSSURHRVxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTY4LVxcdGhlbHBcXG5uZXQvYnJpZGdlL0tjb25maWc6Njk6XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSB0byBydW4gTVJQXFxubmV0L2JyaWRnZS9LY29uZmlnLTcwLVxcdCAgcHJvdG9jb2wgdG8gZGV0ZWN0IGxvb3BzXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNzUtXFxubmV0L2JyaWRnZS9LY29uZmlnOjc2OmNvbmZpZyBCUklER0VfQ0ZNXFxubmV0L2JyaWRnZS9LY29uZmlnOjc3OlxcdGJvb2wgXFxcIkNGTSBwcm90b2NvbFxcXCJcXG5uZXQvYnJpZGdlL0tjb25maWctNzgtXFx0ZGVwZW5kcyBvbiBCUklER0VcXG5uZXQvYnJpZGdlL0tjb25maWctNzktXFx0aGVscFxcbm5ldC9icmlkZ2UvS2NvbmZpZzo4MDpcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHRvIHJ1biBDRk1cXG5uZXQvYnJpZGdlL0tjb25maWctODEtXFx0ICBwcm90b2NvbCBhY2NvcmRpbmcgdG8gODAyLjFRIHNlY3Rpb24gMTIuMTRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MTY6NTMuOTY3MjA1NTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTkxNzgzODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEJyaWRnZSBDb25maWd1cmF0aW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBicmlkZ2UgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUga2VybmVsLiBUaW1lIHRvIGRpZyBpbiEgVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgYnkgZXhhbWluaW5nIHRoZSBidWlsZCBzeXN0ZW0gZmlsZXMuIEknbSBnb2luZyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgbmV0L2JyaWRnZS9NYWtlZmlsZWAgYW5kIGBuZXQvYnJpZGdlL0tjb25maWdgLiBUaGVzZSB0d28gZmlsZXMgc2hvdWxkIGdpdmUgbWUgYSBjb21wbGV0ZSBwaWN0dXJlLiBUaGUgTWFrZWZpbGUgd2lsbCBsYXkgb3V0IHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgd2hpbGUgdGhlIEtjb25maWcgZmlsZSBob2xkcyBhbGwgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgaGVscCB0ZXh0LiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBzZWUgZXZlcnl0aGluZyByZWxhdGVkIHRvIGJyaWRnaW5nIGFuZCBob3cgaXQncyBlbmFibGVkIGFuZCBjb25maWd1cmVkIGF0IGNvbXBpbGUgdGltZS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY4NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE2OjU1Ljk1ODk5MzUwNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIElFRUUgODAyLjFkIGV0aGVybmV0IGJyaWRnaW5nIGxheWVyLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfQlJJREdFKSArPSBicmlkZ2Uub1xcbiAgIDc6XFx0XFxuICAgODpcXHRicmlkZ2UteVxcdDo9IGJyLm8gYnJfZGV2aWNlLm8gYnJfZmRiLm8gYnJfZm9yd2FyZC5vIGJyX2lmLm8gYnJfaW5wdXQubyBcXFxcXFxuICAgOTpcXHRcXHRcXHRcXHRicl9pb2N0bC5vIGJyX3N0cC5vIGJyX3N0cF9icGR1Lm8gXFxcXFxcbiAgMTA6XFx0XFx0XFx0XFx0YnJfc3RwX2lmLm8gYnJfc3RwX3RpbWVyLm8gYnJfbmV0bGluay5vIFxcXFxcXG4gIDExOlxcdFxcdFxcdFxcdGJyX25ldGxpbmtfdHVubmVsLm8gYnJfYXJwX25kX3Byb3h5Lm9cXG4gIDEyOlxcdFxcbiAgMTM6XFx0YnJpZGdlLSQoQ09ORklHX1NZU0ZTKSArPSBicl9zeXNmc19pZi5vIGJyX3N5c2ZzX2JyLm9cXG4gIDE0OlxcdFxcbiAgMTU6XFx0YnJpZGdlLSQoc3Vic3QgbSx5LCQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpKSArPSBicl9uZl9jb3JlLm9cXG4gIDE2OlxcdFxcbiAgMTc6XFx0YnJfbmV0ZmlsdGVyLXkgOj0gYnJfbmV0ZmlsdGVyX2hvb2tzLm9cXG4gIDE4OlxcdGJyX25ldGZpbHRlci0kKHN1YnN0IG0seSwkKENPTkZJR19JUFY2KSkgKz0gYnJfbmV0ZmlsdGVyX2lwdjYub1xcbiAgMTk6XFx0b2JqLSQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpICs9IGJyX25ldGZpbHRlci5vXFxuICAyMDpcXHRcXG4gIDIxOlxcdGJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgKz0gYnJfbXVsdGljYXN0Lm8gYnJfbWRiLm8gYnJfbXVsdGljYXN0X2VodC5vXFxuICAyMjpcXHRcXG4gIDIzOlxcdGJyaWRnZS0kKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpICs9IGJyX3ZsYW4ubyBicl92bGFuX3R1bm5lbC5vIGJyX3ZsYW5fb3B0aW9ucy5vIGJyX21zdC5vXFxuICAyNDpcXHRcXG4gIDI1OlxcdGJyaWRnZS0kKENPTkZJR19ORVRfU1dJVENIREVWKSArPSBicl9zd2l0Y2hkZXYub1xcbiAgMjY6XFx0XFxuICAyNzpcXHRvYmotJChDT05GSUdfTkVURklMVEVSKSArPSBuZXRmaWx0ZXIvXFxuICAyODpcXHRcXG4gIDI5OlxcdGJyaWRnZS0kKENPTkZJR19CUklER0VfTVJQKVxcdCs9IGJyX21ycF9zd2l0Y2hkZXYubyBicl9tcnAubyBicl9tcnBfbmV0bGluay5vXFxuICAzMDpcXHRcXG4gIDMxOlxcdGJyaWRnZS0kKENPTkZJR19CUklER0VfQ0ZNKVxcdCs9IGJyX2NmbS5vIGJyX2NmbV9uZXRsaW5rLm9cXG4gIDMyOlxcdFxcbiAgMzM6XFx0aWZkZWYgQ09ORklHX0dDT1ZfUFJPRklMRV9ORVRGSUxURVJcXG4gIDM0OlxcdEdDT1ZfUFJPRklMRV9icl9uZl9jb3JlLm8gOj0geVxcbiAgMzU6XFx0R0NPVl9QUk9GSUxFX2JyX25ldGZpbHRlcl9ob29rcy5vIDo9IHlcXG4gIDM2OlxcdEdDT1ZfUFJPRklMRV9icl9uZXRmaWx0ZXJfaXB2Ni5vIDo9IHlcXG4gIDM3OlxcdGVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE2OjU1Ljk1OTExMDAwNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxMTk1MTUzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBNUlAgYW5kIENGTSBDb25maWd1cmF0aW9uIGFuZCBJbnZvY2F0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHRlY2huaWNhbCB1bmRlcnBpbm5pbmdzIG9mIGhvdyBNUlAgKE11bHRpcGxlIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgYW5kIENGTSAoQ29ubmVjdGl2aXR5IEZhdWx0IE1hbmFnZW1lbnQpIGFyZSBjb25maWd1cmVkIGFuZCBhY3R1YWxseSBjYWxsZWQg4oCTIGhvdyB0aGV5J3JlICppbnZva2VkKi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBob3cgdGhlc2UgdGhpbmdzIGFyZSB3aXJlZCB1cC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBOZXRsaW5rIGlzIGludm9sdmVkIGhlcmUsIGdpdmVuIHRoZSBrZXJuZWwtbGV2ZWwgbmF0dXJlIG9mIHRoZXNlIHByb3RvY29scywgc28gdGhhdCdzIHRoZSBhbmdsZSBJJ20gdGFraW5nLiBTbyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIE5ldGxpbmsgZW50cnkgcG9pbnRzIGZvciBib3RoIENGTSBhbmQgTVJQLiBJIG5lZWQgdG8gZmluZCB0aGUgc3BlY2lmaWMgaG9va3MsIHRoZSBjcml0aWNhbCBjb250cm9sIHBvaW50cywgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIG9wZXJhdGlvbiBvZiB0aGVzZSBwcm90b2NvbHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBzeXN0ZW0uIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgYmFzZSB0byB1bmRlcnN0YW5kIGhvdyB0byBpbnRlcmFjdCB3aXRoIHRoZW0gYXQgYSBzeXN0ZW0gbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MDIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE2OjU5LjA3ODYyODQzOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTMxMjg2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9jZm1fbWVwX2NyZWF0ZXxicl9tcnBfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfY2ZtLmM9MzcwPXN0YXRpYyBpbnQgYnJfY2ZtX2ZyYW1lX3J4KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbS5jLTQ5MS1cXG5uZXQvYnJpZGdlL2JyX2NmbS5jOjQ5MjppbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfY2ZtLmMtNDkzLVxcdFxcdCAgICAgIGNvbnN0IHUzMiBpbnN0YW5jZSxcXG5uZXQvYnJpZGdlL2JyX2NmbS5jOjQ5NDpcXHRcXHQgICAgICBzdHJ1Y3QgYnJfY2ZtX21lcF9jcmVhdGUgKmNvbnN0IGNyZWF0ZSxcXG5uZXQvYnJpZGdlL2JyX2NmbS5jLTQ5NS1cXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM9OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM6OTpicl9jZm1fbWVwX2NyZWF0ZV9wb2xpY3lbSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfTUFYICsgMV0gPSB7XFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTEwLVxcdFtJRkxBX0JSSURHRV9DRk1fTUVQX0NSRUFURV9VTlNQRUNdXFx0PSB7IC50eXBlID0gTkxBX1JFSkVDVCB9LFxcbi0tXFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jPTcyPWJyX2NmbV9wb2xpY3lbSUZMQV9CUklER0VfQ0ZNX01BWCArIDFdID0ge1xcbi0tXFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTc0LVxcdFtJRkxBX0JSSURHRV9DRk1fTUVQX0NSRUFURV1cXHRcXHQ9XFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjc1OlxcdFxcdFxcdFxcdE5MQV9QT0xJQ1lfTkVTVEVEKGJyX2NmbV9tZXBfY3JlYXRlX3BvbGljeSksXFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTc2LVxcdFtJRkxBX0JSSURHRV9DRk1fTUVQX0RFTEVURV1cXHRcXHQ9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM9OTI9c3RhdGljIGludCBicl9tZXBfY3JlYXRlX3BhcnNlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy05NS1cXHRzdHJ1Y3QgbmxhdHRyICp0YltJRkxBX0JSSURHRV9DRk1fTUVQX0NSRUFURV9NQVggKyAxXTtcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM6OTY6XFx0c3RydWN0IGJyX2NmbV9tZXBfY3JlYXRlIGNyZWF0ZTtcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtOTctXFx0dTMyIGluc3RhbmNlO1xcbi0tXFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTEwMC1cXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBJRkxBX0JSSURHRV9DRk1fTUVQX0NSRUFURV9NQVgsIGF0dHIsXFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjEwMTpcXHRcXHRcXHQgICAgICAgYnJfY2ZtX21lcF9jcmVhdGVfcG9saWN5LCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xMDItXFx0aWYgKGVycilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xMjgtXFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjEyOTpcXHRyZXR1cm4gYnJfY2ZtX21lcF9jcmVhdGUoYnIsIGluc3RhbmNlLCBcXHUwMDI2Y3JlYXRlLCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xMzAtfVxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnAuYz00MjE9c3RhdGljIHZvaWQgYnJfbXJwX2RlbF9pbXBsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycCAqbXJwKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnAuYy00ODktICovXFxubmV0L2JyaWRnZS9icl9tcnAuYzo0OTA6aW50IGJyX21ycF9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSlcXG5uZXQvYnJpZGdlL2JyX21ycC5jLTQ5MS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycF9uZXRsaW5rLmM9MzE9c3RhdGljIGludCBicl9tcnBfaW5zdGFuY2VfcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jLTYxLVxcdGlmIChjbWQgPT0gUlRNX1NFVExJTkspXFxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jOjYyOlxcdFxcdHJldHVybiBicl9tcnBfYWRkKGJyLCBcXHUwMDI2aW5zdCk7XFxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jLTYzLVxcdGVsc2VcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaC04LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaDo5OnN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSB7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oLTEwLVxcdGVudW0gYnJfY2ZtX2RvbWFpbiBkb21haW47IC8qIERvbWFpbiBmb3IgdGhpcyBNRVAgKi9cXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaC0xNC1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmg6MTU6aW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTYtXFx0XFx0ICAgICAgY29uc3QgdTMyIGluc3RhbmNlLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaDoxNzpcXHRcXHQgICAgICBzdHJ1Y3QgYnJfY2ZtX21lcF9jcmVhdGUgKmNvbnN0IGNyZWF0ZSxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTgtXFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaD0xMTc9c3RydWN0IGJyX2NmbV9tZXAge1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oLTEyMC1cXHR1MzJcXHRcXHRcXHRcXHRpbnN0YW5jZTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmg6MTIxOlxcdHN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZVxcdGNyZWF0ZTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTIyLVxcdHN0cnVjdCBicl9jZm1fbWVwX2NvbmZpZ1xcdGNvbmZpZztcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaD01OT1lbnVtIGJyX21ycF9od19zdXBwb3J0IHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaC02NS0vKiBicl9tcnAuYyAqL1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaDo2NjppbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfbXJwLmgtNjctaW50IGJyX21ycF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE2OjU5LjE2Nzk0NTIwNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MDY2ODc2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gRnJhbWUgVHlwZSBMb29rdXAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZyYW1lIHR5cGUgbG9va3VwIHByb2Nlc3MgZHVyaW5nIHBhY2tldCByZWNlcHRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGJyaWRnaW5nIGNvbnRleHQuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyB3aGF0ICpraW5kKiBvZiBmcmFtZSBpdCdzIGRlYWxpbmcgd2l0aCB3aGVuIGEgcGFja2V0IGNvbWVzIGluLiBUaGlzIHJlYWxseSBnZXRzIGRvd24gdG8gdGhlIGNvcmUgb2YgdGhlIGJyaWRnZSdzIGhhbmRsaW5nIGxvZ2ljLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBicl9pbnB1dC5jYCBhbmQgc3BlY2lmaWNhbGx5IGBicl9oYW5kbGVfZnJhbWVgLCBhcyB0aGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgZW50cnkgcG9pbnQgZm9yIGZyYW1lIHByb2Nlc3NpbmcuIEkgd2FudCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gZGlmZmVyZW50aWF0ZXMgYmV0d2Vlbiwgc2F5LCBhIHN0YW5kYXJkIEV0aGVybmV0IGZyYW1lLCBhIFZMQU4tdGFnZ2VkIGZyYW1lLCBvciBhbnl0aGluZyBlbHNlIGl0IG1pZ2h0IGVuY291bnRlci4gVW5kZXJzdGFuZGluZyB0aGlzIGxvb2t1cCBwcm9jZXNzIGlzIGNydWNpYWwgZm9yIHRyb3VibGVzaG9vdGluZyBwb3RlbnRpYWwgaXNzdWVzIGluIGZyYW1lIGhhbmRsaW5nLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHVudXN1YWwgb3IgY3VzdG9taXplZCBmcmFtZSBmb3JtYXRzLCBhbmQgZm9yIG9wdGltaXppbmcgcGVyZm9ybWFuY2UgaWYgSSBuZWVkIHRvLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzMxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MTc6MDEuNjc0NjM0OTA4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTgxMDI5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmcmFtZV90eXBlX2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9kZXZpY2UuYz00ODA9dm9pZCBicl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNTA1LVxcdElOSVRfSExJU1RfSEVBRChcXHUwMDI2YnItXFx1MDAzZWZkYl9saXN0KTtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjUwNjpcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNmJyLVxcdTAwM2VmcmFtZV90eXBlX2xpc3QpO1xcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNTA3LSNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTVJQKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTMyMz1zdGF0aWMgaW50IGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTMyNy1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MzI4OlxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXAsIFxcdTAwMjZwLVxcdTAwM2Vici1cXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMjktXFx0XFx0aWYgKHVubGlrZWx5KHRtcC1cXHUwMDNldHlwZSA9PSBza2ItXFx1MDAzZXByb3RvY29sKSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz00NzE9aW50IGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlLFxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ3Ni1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDc3OlxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZ0LCBcXHUwMDI2YnItXFx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdCkge1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NzgtXFx0XFx0aWYgKGZ0LVxcdTAwM2V0eXBlID09IHR5cGUpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDg3LVxcdGZ0LVxcdTAwM2VmcmFtZV9oYW5kbGVyID0gZnJhbWVfaGFuZGxlcjtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDg4OlxcdGhsaXN0X2FkZF9oZWFkX3JjdShcXHUwMDI2ZnQtXFx1MDAzZWxpc3QsIFxcdTAwMjZici1cXHUwMDNlZnJhbWVfdHlwZV9saXN0KTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDg5LVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTQ5Mz12b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ5Ni1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDk3OlxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZ0LCBcXHUwMDI2YnItXFx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdCkge1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00OTgtXFx0XFx0aWYgKGZ0LVxcdTAwM2V0eXBlID09IHR5cGUpIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz01MDY9dm9pZCBicl9kZWxfZnJhbWVfYWxsKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy01MTAtXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjUxMTpcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZ0LCBuLCBcXHUwMDI2YnItXFx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdCkge1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy01MTItXFx0XFx0aGxpc3RfZGVsX3JjdShcXHUwMDI2ZnQtXFx1MDAzZWxpc3QpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NTAwPXN0cnVjdCBuZXRfYnJpZGdlIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTUwMi1cXHRzcGlubG9ja190XFx0XFx0XFx0aGFzaF9sb2NrO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjUwMzpcXHRzdHJ1Y3QgaGxpc3RfaGVhZFxcdFxcdGZyYW1lX3R5cGVfbGlzdDtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01MDQtXFx0c3RydWN0IG5ldF9kZXZpY2VcXHRcXHQqZGV2O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToxNzowMS43NjY0NDk5NTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM5MTg1MjMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBDb3JlIE5ldHdvcmtpbmcgQ29kZSoqXG5cbk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBjb3JlIG5ldHdvcmtpbmcgY29kZSDigJMgd2UncmUgdGFsa2luZyBhYm91dCBFdGhlcm5ldCBicmlkZ2luZywgQ0ZNIChDb25uZWN0aXZpdHkgRmF1bHQgTWFuYWdlbWVudCksIGFuZCBNUlAgKE11bHRpcGxlIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkuIFRoZSBnb29kIG5ld3MgaXMsIGZyb20gd2hhdCBJIGNhbiBzZWUsIHRoaXMgKnNob3VsZCogYmUgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gV2UncmUgZGVhbGluZyB3aXRoIHRoZSB1c3VhbCBzdXNwZWN0czogc3RhbmRhcmQgYnJpZGdlIG5ldGRldmljZSBjcmVhdGlvbiB1c2luZyBgaXAgbGluayBhZGQgbmFtZSBicjAgdHlwZSBicmlkZ2VgLCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gb2YgQ0ZNL01SUCAobGlrZWx5IHZpYSBgUlRNX1NFVExJTktgIGFuZCBgcnRubGApLCBwYWNrZXQgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24gdmlhIHRoZSBjb21tb24gaW50ZXJmYWNlcyBsaWtlIFRBUC92ZXRoL2xvb3BiYWNrLCBhbmQgb2YgY291cnNlIHRoZSBjcml0aWNhbCBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYCBmdW5jdGlvbiBmb3IgYnJpZGdlIGZyYW1lIHByb2Nlc3NpbmcsIGFsb25nIHdpdGggdGhlIGJyaWRnZSBkZXZpY2UgZGVsZXRpb24gcm91dGluZXMuIFNvLCB5ZXMsIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgXCJXb3J0aEZ1enppbmdcIiBpcyBzcG90IG9uIVxuXG5Ob3csIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS5cblxuMS4gICoqYFdvcnRoRnV6emluZ2AqKjogQWJzb2x1dGVseSwgY29uZmlybWVkLiBXZSBoYXZlIGVub3VnaCBhY2Nlc3NpYmlsaXR5IHRvIHB1dCB0aGlzIHRocm91Z2ggaXRzIHBhY2VzLlxuMi4gICoqYFJlYXNvbmluZ2AqKjogVGhlIHNpZ25pZmljYW50IGNoYW5nZXMgaGVyZSBhcmUgdGhlIHJlZmFjdG9yaW5nIG9mIGJyaWRnZSBmcmFtZSB0eXBlIHJlZ2lzdHJhdGlvbiBhbmQgZGVyZWdpc3RyYXRpb24uIFRoZXkgd2VudCBmcm9tIHN0YXRpYyBzdHJ1Y3R1cmVzIHRvIHBlci1icmlkZ2UgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGVudHJpZXMgbWFuYWdlZCB3aXRoIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkuIEknbSBhbHNvIHNlZWluZyB1cGRhdGVkIGVycm9yIGhhbmRsaW5nIGFuZCBjbGVhbnVwIHBhdGhzIHNwcmlua2xlZCB0aHJvdWdob3V0IENGTSwgTVJQLCBhbmQgdGhlIGJyaWRnZSBkZWxldGlvbiByb3V0aW5lcy4gVGhpcyBpcyAqcmVhY2hhYmxlKiBiZWNhdXNlIGJyaWRnaW5nIGZ1bmN0aW9uYWxpdHkgd2l0aCBDRk0vTVJQIHByb3RvY29scyBpcyBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIGFuZCBwYWNrZXQgcmVjZXB0aW9uLiBTcGVjaWZpY2FsbHksIHdlIGNhbiBjcmFmdCBwYWNrZXRzIHRoYXQgZmxvdyB0aHJvdWdoIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgYW5kIHRocm91Z2ggdGhlIGJyaWRnZSBwcm9jZXNzaW5nIHRoYXQgdGFyZ2V0cyB0aG9zZSBwcm90b2NvbHMuXG4zLiAgKipgRm9jdXNTeW1ib2xzYCoqOiBXZSBuZWVkIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zIGFuZCBwYXJ0cyBvZiB0aGUgY29kZS4gTGV0J3Mgc2VsZWN0IG5vbi11YmlxdWl0b3VzIGZ1bmN0aW9ucywgdGhhdCB3ZXJlIG1vZGlmaWVkLCBvciBkaXJlY3RseSBjYWxsIHRoZSBtb2RpZmllZCBjb2RlLiBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBkaXJlY3RseSB0YXJnZXQ6XG5cbiAgICAqICAgYGJyX2FkZF9mcmFtZWBcbiAgICAqICAgYGJyX2RlbF9mcmFtZWBcbiAgICAqICAgYGJyX2RlbF9mcmFtZV9hbGxgXG4gICAgKiAgIGBicl9jZm1fbWVwX2NyZWF0ZWBcbiAgICAqICAgYGJyX2NmbV9tZXBfZGVsZXRlYFxuICAgICogICBgYnJfbXJwX2FkZGBcbiAgICAqICAgYGJyX21ycF9kZWxfaW1wbGAgLyBgYnJfbXJwX2RlbGBcbiAgICAqICAgYGJyX3Byb2Nlc3NfZnJhbWVfdHlwZWBcbiAgICAqICAgYGJyX2Rldl9kZWxldGVgXG5cbiAgICBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRob3NlIGV4YWN0IHN5bWJvbCBuYW1lcyB3aXRoaW4gYGJyX2NmbS5jYCBhbmQgYGJyX21ycC5jYCB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIGJ1dCB0aGF0J3MgbXkgdGFyZ2V0IGxpc3QuIFdlIGhhdmUgYSBjbGVhciBwYXRoIHRvIGdlbmVyYXRpbmcgZnV6emVyIGlucHV0IGJhc2VkIG9uIHRoZSBuZXRsaW5rIGludGVyZmFjZXMgYW5kIHBhY2tldCBmbG93cywgYW5kIHRob3NlIGZ1bmN0aW9uIGNhbGxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM5OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToxNzowNi4xNTgzMDUzNDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTA4MTM4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9jZm1fbWVwX2RlbGV0ZXxicl9tcnBfZGVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfY2ZtLmM9NTcwPXN0YXRpYyB2b2lkIG1lcF9kZWxldGVfaW1wbGVtZW50YXRpb24oc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9jZm0uYy01OTQtXFxubmV0L2JyaWRnZS9icl9jZm0uYzo1OTU6aW50IGJyX2NmbV9tZXBfZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG5uZXQvYnJpZGdlL2JyX2NmbS5jLTU5Ni1cXHRcXHQgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM9MTc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjE4OmJyX2NmbV9tZXBfZGVsZXRlX3BvbGljeVtJRkxBX0JSSURHRV9DRk1fTUVQX0RFTEVURV9NQVggKyAxXSA9IHtcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTktXFx0W0lGTEFfQlJJREdFX0NGTV9NRVBfREVMRVRFX1VOU1BFQ11cXHQ9IHsgLnR5cGUgPSBOTEFfUkVKRUNUIH0sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM9NzI9YnJfY2ZtX3BvbGljeVtJRkxBX0JSSURHRV9DRk1fTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtNzYtXFx0W0lGTEFfQlJJREdFX0NGTV9NRVBfREVMRVRFXVxcdFxcdD1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM6Nzc6XFx0XFx0XFx0XFx0TkxBX1BPTElDWV9ORVNURUQoYnJfY2ZtX21lcF9kZWxldGVfcG9saWN5KSxcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtNzgtXFx0W0lGTEFfQlJJREdFX0NGTV9NRVBfQ09ORklHXVxcdFxcdD1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYz0xMzI9c3RhdGljIGludCBicl9tZXBfZGVsZXRlX3BhcnNlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xMzktXFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgSUZMQV9CUklER0VfQ0ZNX01FUF9ERUxFVEVfTUFYLCBhdHRyLFxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzoxNDA6XFx0XFx0XFx0ICAgICAgIGJyX2NmbV9tZXBfZGVsZXRlX3BvbGljeSwgZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTQxLVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTUxLVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzoxNTI6XFx0cmV0dXJuIGJyX2NmbV9tZXBfZGVsZXRlKGJyLCBpbnN0YW5jZSwgZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTUzLX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwLmM9MzQ1PXN0YXRpYyB2b2lkIGJyX21ycF9pbl90ZXN0X3dvcmtfZXhwaXJlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycC5jLTQyMC0gKi9cXG5uZXQvYnJpZGdlL2JyX21ycC5jOjQyMTpzdGF0aWMgdm9pZCBicl9tcnBfZGVsX2ltcGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApXFxubmV0L2JyaWRnZS9icl9tcnAuYy00MjIte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tcnAuYz00OTA9aW50IGJyX21ycF9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNTQ5LWRlbGV0ZV9tcnA6XFxubmV0L2JyaWRnZS9icl9tcnAuYzo1NTA6XFx0YnJfbXJwX2RlbF9pbXBsKGJyLCBtcnApO1xcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNTUxLVxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnAuYz01NTg9dm9pZCBicl9tcnBfcG9ydF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnAuYy01NjUtXFxubmV0L2JyaWRnZS9icl9tcnAuYzo1NjY6XFx0YnJfbXJwX2RlbF9pbXBsKGJyLCBtcnApO1xcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNTY3LX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNTcxLSAqL1xcbm5ldC9icmlkZ2UvYnJfbXJwLmM6NTcyOmludCBicl9tcnBfZGVsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycF9pbnN0YW5jZSAqaW5zdGFuY2UpXFxubmV0L2JyaWRnZS9icl9tcnAuYy01NzMte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tcnAuYy01NzgtXFxubmV0L2JyaWRnZS9icl9tcnAuYzo1Nzk6XFx0YnJfbXJwX2RlbF9pbXBsKGJyLCBtcnApO1xcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNTgwLVxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jPTMxPXN0YXRpYyBpbnQgYnJfbXJwX2luc3RhbmNlX3BhcnNlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX25ldGxpbmsuYy02My1cXHRlbHNlXFxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jOjY0OlxcdFxcdHJldHVybiBicl9tcnBfZGVsKGJyLCBcXHUwMDI2aW5zdCk7XFxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jLTY1LVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oPTE1PWludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTktXFxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oOjIwOmludCBicl9jZm1fbWVwX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oLTIxLVxcdFxcdCAgICAgIGNvbnN0IHUzMiBpbnN0YW5jZSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaD02Nj1pbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfbXJwLmg6Njc6aW50IGJyX21ycF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlX21ycC5oLTY4LWludCBicl9tcnBfc2V0X3BvcnRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MTc6MDYuMjY3MzkzMjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkzMTA0OTk5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24gZm9yIEJyaWRnaW5nIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IGEgYnJpZGdlIGNvbmZpZ3VyYXRpb24uIFRoZSBpbml0aWFsIGNoZWNrbGlzdCBtYW5kYXRlcyBlbnN1cmluZyBgQlJJREdFYCwgYEJSSURHRV9DRk1gLCBhbmQgYEJSSURHRV9NUlBgIGFyZSBhbGwgY29ycmVjdGx5IHNldC4gSSBrbm93IEkgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGVzZSBzZXR0aW5ncyB0byBlbnN1cmUgdGhleSdyZSBjb25maWd1cmVkIGFwcHJvcHJpYXRlbHksIHNvIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgQlJJREdFX0NGTWAgYW5kIGBCUklER0VfTVJQYC4gVGhleSBhcmUsIGFmdGVyIGFsbCwgZmVhdHVyZXMgYnVpbHQgb24gdG9wIG9mIHRoZSBiYXNlIGJyaWRnZSBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gY29uc3VsdCB0aGUgYG5ldC9icmlkZ2UvS2NvbmZpZ2AgZmlsZSBzcGVjaWZpY2FsbHkuIEkgcmVjYWxsIHRoYXQgYEJSSURHRV9DRk1gIGFuZCBgQlJJREdFX01SUGAgcmVxdWlyZSBgQlJJREdFYCwgd2hpY2ggaW4gdHVybiBwcm9iYWJseSBkZXBlbmRzIG9uIHRoaW5ncyBsaWtlIGBORVRgIGFuZCBwZXJoYXBzIGBJTkVUYCAob3Igc2ltaWxhciBuZXR3b3JraW5nIGluZnJhc3RydWN0dXJlKS4gSSBzaG91bGQgcHJvYmFibHkgdmVyaWZ5IHdoYXQgdGhlIGV4YWN0IGRlcGVuZGVuY2llcyBhcmUgd2l0aGluIHRoYXQgS2NvbmZpZyBmaWxlLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IHdoZW4gY29uZmlndXJpbmcgdGhlc2UgY29tcGxleCBuZXR3b3JraW5nIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjgwOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE3OjA4LjE5ODQ0NTkzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ1NDI3NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJSSURHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9LY29uZmlnLTUtXFxubmV0L2JyaWRnZS9LY29uZmlnOjY6Y29uZmlnIEJSSURHRVxcbm5ldC9icmlkZ2UvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCI4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctMzUtXFxubmV0L2JyaWRnZS9LY29uZmlnOjM2OmNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNy1cXHRib29sIFxcXCJJR01QL01MRCBzbm9vcGluZ1xcXCJcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy00OS1cXG5uZXQvYnJpZGdlL0tjb25maWc6NTA6Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xcbm5ldC9icmlkZ2UvS2NvbmZpZy01MS1cXHRib29sIFxcXCJWTEFOIGZpbHRlcmluZ1xcXCJcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy02My1cXG5uZXQvYnJpZGdlL0tjb25maWc6NjQ6Y29uZmlnIEJSSURHRV9NUlBcXG5uZXQvYnJpZGdlL0tjb25maWctNjUtXFx0Ym9vbCBcXFwiTVJQIHByb3RvY29sXFxcIlxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTc1LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo3Njpjb25maWcgQlJJREdFX0NGTVxcbm5ldC9icmlkZ2UvS2NvbmZpZy03Ny1cXHRib29sIFxcXCJDRk0gcHJvdG9jb2xcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE3OjA4LjI3Mjk5NzY5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjAxOTI1Mzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvbmZpZ3VyYXRpb24gZmlsZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJyaWRnZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gYG5ldC9icmlkZ2UvS2NvbmZpZ2AuIEknbSBzdGFydGluZyBieSBsb29raW5nIGF0IGxpbmVzIDEgdGhyb3VnaCAyMC4gVGhpcyB1c3VhbGx5IGluZGljYXRlcyB0aGUgbWFpbiwgdG9wLWxldmVsIHNldHRpbmdzIGFuZCBkZWZpbml0aW9ucyBmb3IgdGhlIGJyaWRnZSBtb2R1bGUgaXRzZWxmLiBNeSBpbml0aWFsIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZ2VuZXJhbCBvcHRpb25zIHByZXNlbnRlZCwgdGhlIGRlcGVuZGVuY2llcyB0aGV5IG1pZ2h0IGhhdmUsIGFuZCBhbnkgcHJlbGltaW5hcnkgY29tbWVudHMgb3IgZXhwbGFuYXRpb25zIHRoYXQgc2V0IHRoZSBzdGFnZSBmb3IgdGhlIHJlc3Qgb2YgdGhlIGNvbmZpZ3VyYXRpb24uIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlOiB0aGUgbWFpbiBicmlkZ2Ugc3VwcG9ydCBlbmFibGluZyBvcHRpb24sIHByb2JhYmx5IGEgZGVmYXVsdCBzZXR0aW5nIGZvciBzb21lIGJhc2ljIGZ1bmN0aW9uYWxpdHksIGFuZCBtYXliZSBzb21lIGVhcmx5IGNvbW1lbnRzIG91dGxpbmluZyB0aGUgY29yZSBwdXJwb3NlIG9mIHRoZSBicmlkZ2luZyBjb2RlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGtleXdvcmRzIGFuZCBzeW1ib2xzIHRoYXQgSSdsbCBuZWVkIHRvIHJlbWVtYmVyIGZvciB0aGUgcmVzdCBvZiB0aGUgcmV2aWV3LiBUaGUgZ29hbCByaWdodCBub3cgaXMganVzdCB0byBnZXQgbXkgYmVhcmluZ3MgYW5kIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIGJlZm9yZSBnZXR0aW5nIGludG8gdGhlIHdlZWRzIG9mIG1vcmUgc3BlY2lmaWMgZnVuY3Rpb25hbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM3NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE3OjEwLjQ3NDkyNTg2OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBCUklER0VcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCI4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTExDXFxuICAgOTpcXHRcXHRzZWxlY3QgU1RQXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYW5cXG4gIDEyOlxcdFxcdCAgRXRoZXJuZXQgYnJpZGdlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBkaWZmZXJlbnQgRXRoZXJuZXQgc2VnbWVudHMgaXRcXG4gIDEzOlxcdFxcdCAgaXMgY29ubmVjdGVkIHRvIHdpbGwgYXBwZWFyIGFzIG9uZSBFdGhlcm5ldCB0byB0aGUgcGFydGljaXBhbnRzLlxcbiAgMTQ6XFx0XFx0ICBTZXZlcmFsIHN1Y2ggYnJpZGdlcyBjYW4gd29yayB0b2dldGhlciB0byBjcmVhdGUgZXZlbiBsYXJnZXJcXG4gIDE1OlxcdFxcdCAgbmV0d29ya3Mgb2YgRXRoZXJuZXRzIHVzaW5nIHRoZSBJRUVFIDgwMi4xIHNwYW5uaW5nIHRyZWUgYWxnb3JpdGhtLlxcbiAgMTY6XFx0XFx0ICBBcyB0aGlzIGlzIGEgc3RhbmRhcmQsIExpbnV4IGJyaWRnZXMgd2lsbCBjb29wZXJhdGUgcHJvcGVybHkgd2l0aFxcbiAgMTc6XFx0XFx0ICBvdGhlciB0aGlyZCBwYXJ0eSBicmlkZ2UgcHJvZHVjdHMuXFxuICAxODpcXHRcXG4gIDE5OlxcdFxcdCAgSW4gb3JkZXIgdG8gdXNlIHRoZSBFdGhlcm5ldCBicmlkZ2UsIHlvdSdsbCBuZWVkIHRoZSBicmlkZ2VcXG4gIDIwOlxcdFxcdCAgY29uZmlndXJhdGlvbiB0b29sczsgc2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0XFx1MDAzZVxcbiAgMjE6XFx0XFx0ICBmb3IgbG9jYXRpb24uIFBsZWFzZSByZWFkIHRoZSBCcmlkZ2UgbWluaS1IT1dUTyBmb3IgbW9yZVxcbiAgMjI6XFx0XFx0ICBpbmZvcm1hdGlvbi5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0ICBJZiB5b3UgZW5hYmxlIGlwdGFibGVzIHN1cHBvcnQgYWxvbmcgd2l0aCB0aGUgYnJpZGdlIHN1cHBvcnQgdGhlbiB5b3VcXG4gIDI1OlxcdFxcdCAgdHVybiB5b3VyIGJyaWRnZSBpbnRvIGEgYnJpZGdpbmcgSVAgZmlyZXdhbGwuXFxuICAyNjpcXHRcXHQgIGlwdGFibGVzIHdpbGwgdGhlbiBzZWUgdGhlIElQIHBhY2tldHMgYmVpbmcgYnJpZGdlZCwgc28geW91IG5lZWQgdG9cXG4gIDI3OlxcdFxcdCAgdGFrZSB0aGlzIGludG8gYWNjb3VudCB3aGVuIHNldHRpbmcgdXAgeW91ciBmaXJld2FsbCBydWxlcy5cXG4gIDI4OlxcdFxcdCAgRW5hYmxpbmcgYXJwdGFibGVzIHN1cHBvcnQgd2hlbiBicmlkZ2luZyB3aWxsIGxldCBhcnB0YWJsZXMgc2VlXFxuICAyOTpcXHRcXHQgIGJyaWRnZWQgQVJQIHRyYWZmaWMgaW4gdGhlIGFycHRhYmxlcyBGT1JXQVJEIGNoYWluLlxcbiAgMzA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE3OjEwLjQ3NDk4NjI3OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDU2NzI3MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBub3Rlcy5cblxuKipNeSBBbmFseXNpcyBvZiBCcmlkZ2UgQ29uZmlndXJhdGlvbiBcdTAwMjYgQXNzb2NpYXRlZCBGdW5jdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIHNldHVwLCBhbmQgaXQncyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IHdlIG5lZWQgdG8gZW5hYmxlIHRoZSBgQlJJREdFYCwgYEJSSURHRV9DRk1gLCBhbmQgYEJSSURHRV9NUlBgIGZsYWdzLiBObyBzdXJwcmlzZXMgdGhlcmUuIFRoZXNlIGFyZSB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzLCB0aGUgZm91bmRhdGlvbiwgZm9yIGdldHRpbmcgYSBicmlkZ2UgaW1wbGVtZW50YXRpb24gdXAgYW5kIHJ1bm5pbmcuIFxuXG5Ob3csIGRpZ2dpbmcgZGVlcGVyLCBJIHNlZSB0aGUgY29yZSBmdW5jdGlvbiBzeW1ib2xzIHRoYXQgbmVlZCBjYXJlZnVsIGNvbnNpZGVyYXRpb24uIGBicl9hZGRfZnJhbWVgLCBgYnJfZGVsX2ZyYW1lYCwgYGJyX2RlbF9mcmFtZV9hbGxgIGFyZSBjcnVjaWFsIGZvciBmcmFtZSBoYW5kbGluZyDigJMgYWRkaW5nLCByZW1vdmluZywgYW5kIGNsZWFyaW5nIGZyYW1lcyB3aXRoaW4gdGhlIGJyaWRnZSdzIGZvcndhcmRpbmcgdGFibGUuIE9idmlvdXNseSwgd2UnbGwgbmVlZCByb2J1c3QgbG9naWMgYXJvdW5kIHRob3NlLiBUaGVuLCBgYnJfY2ZtX21lcF9jcmVhdGVgIGFuZCBgYnJfY2ZtX21lcF9kZWxldGVgIHN1Z2dlc3QgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gdXNlIENvbm5lY3Rpdml0eSBGYXVsdCBNYW5hZ2VtZW50LiBEZWZpbml0ZWx5IGtleSBpbiBsYXJnZXIgZGVwbG95bWVudHMuIEZvbGxvd2luZyBvbiBmcm9tIHRoYXQsIHRoZSBNUlAtc3BlY2lmaWMgZnVuY3Rpb25zLCBgYnJfbXJwX2FkZGAgYW5kIGBicl9tcnBfZGVsYCwgY29uZmlybSBNUlAgc3VwcG9ydC4gRmluYWxseSBgYnJfZGV2X2RlbGV0ZWAgaXMgYW4gb2J2aW91cyBjaG9pY2Ugd2hlbiB3ZSBuZWVkIHRvIHRlYXIgZG93biB0aGUgYnJpZGdlLlxuXG5PdmVyYWxsLCBpdCdzIGEgZ29vZCBzZXQgb2Ygc3ltYm9scyDigJMgcHJldHR5IGNvbXByZWhlbnNpdmUgcmVhbGx5IOKAkyBhbmQgYWxsIHNlZW1zIHRvIGJlIGxvZ2ljYWxseSBpbnRlcmNvbm5lY3RlZC4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGBzZXQtcmVzdWx0c2AgdmFyaWFibGUgdHJhY2tzIHRob3NlIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwNzksIk91dHB1dFRva2VucyI6MjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MTc6MTQuOTMxNzE2MjU3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MTM1MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9DRk1cIixcbiAgICBcIkJSSURHRV9NUlBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9hZGRfZnJhbWVcIixcbiAgICBcImJyX2RlbF9mcmFtZVwiLFxuICAgIFwiYnJfZGVsX2ZyYW1lX2FsbFwiLFxuICAgIFwiYnJfY2ZtX21lcF9jcmVhdGVcIixcbiAgICBcImJyX2NmbV9tZXBfZGVsZXRlXCIsXG4gICAgXCJicl9tcnBfYWRkXCIsXG4gICAgXCJicl9tcnBfZGVsXCIsXG4gICAgXCJicl9kZXZfZGVsZXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBicmlkZ2UgRXRoZXJuZXQgZnJhbWUgdHlwZSBoYW5kbGVyIHJlZ2lzdHJhdGlvbi9kZXJlZ2lzdHJhdGlvbiBtZWNoYW5pc20uIFByZXZpb3VzbHksIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGZyYW1lIHR5cGUgc3RydWN0dXJlcyAoc3VjaCBhcyBjZm1fZnJhbWVfdHlwZSBhbmQgbXJwX2ZyYW1lX3R5cGUpIHdlcmUgcmVnaXN0ZXJlZCBkaXJlY3RseSB0byBicmlkZ2UgaW5zdGFuY2VzLCB3aGljaCBjb3VsZCBsZWFkIHRvIGxpc3QgY29ycnVwdGlvbiBhY3Jvc3MgbXVsdGlwbGUgYnJpZGdlcy4gVGhlIHBhdGNoIGNoYW5nZXMgdGhpcyB0byBkeW5hbWljIHBlci1icmlkZ2UgYWxsb2NhdGlvbiBhbmQgUkNVLWJhc2VkIGZyZWVpbmcgb2YgZnJhbWUgdHlwZSBub2RlcywgaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBvbiBhbGxvY2F0aW9uIGZhaWx1cmUsIGFuZCBhZGRzIGNsZWFudXAgb2YgYWxsIHJlZ2lzdGVyZWQgZnJhbWUgdHlwZXMgZHVyaW5nIGJyaWRnZSBkZXZpY2UgZGVsZXRpb24gKGJyX2Rldl9kZWxldGUpLiBUaGVzZSByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNoYW5nZXMgd2FycmFudCBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgY29uY3VycmVuY3kgaXNzdWVzLCBvciBlcnJvciBoYW5kbGluZyByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9DRk1cIixcbiAgICBcIkJSSURHRV9NUlBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9hZGRfZnJhbWVcIixcbiAgICBcImJyX2RlbF9mcmFtZVwiLFxuICAgIFwiYnJfZGVsX2ZyYW1lX2FsbFwiLFxuICAgIFwiYnJfY2ZtX21lcF9jcmVhdGVcIixcbiAgICBcImJyX2NmbV9tZXBfZGVsZXRlXCIsXG4gICAgXCJicl9tcnBfYWRkXCIsXG4gICAgXCJicl9tcnBfZGVsXCIsXG4gICAgXCJicl9kZXZfZGVsZXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBicmlkZ2UgRXRoZXJuZXQgZnJhbWUgdHlwZSBoYW5kbGVyIHJlZ2lzdHJhdGlvbi9kZXJlZ2lzdHJhdGlvbiBtZWNoYW5pc20uIFByZXZpb3VzbHksIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGZyYW1lIHR5cGUgc3RydWN0dXJlcyAoc3VjaCBhcyBjZm1fZnJhbWVfdHlwZSBhbmQgbXJwX2ZyYW1lX3R5cGUpIHdlcmUgcmVnaXN0ZXJlZCBkaXJlY3RseSB0byBicmlkZ2UgaW5zdGFuY2VzLCB3aGljaCBjb3VsZCBsZWFkIHRvIGxpc3QgY29ycnVwdGlvbiBhY3Jvc3MgbXVsdGlwbGUgYnJpZGdlcy4gVGhlIHBhdGNoIGNoYW5nZXMgdGhpcyB0byBkeW5hbWljIHBlci1icmlkZ2UgYWxsb2NhdGlvbiBhbmQgUkNVLWJhc2VkIGZyZWVpbmcgb2YgZnJhbWUgdHlwZSBub2RlcywgaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBvbiBhbGxvY2F0aW9uIGZhaWx1cmUsIGFuZCBhZGRzIGNsZWFudXAgb2YgYWxsIHJlZ2lzdGVyZWQgZnJhbWUgdHlwZXMgZHVyaW5nIGJyaWRnZSBkZXZpY2UgZGVsZXRpb24gKGJyX2Rldl9kZWxldGUpLiBUaGVzZSByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNoYW5nZXMgd2FycmFudCBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgY29uY3VycmVuY3kgaXNzdWVzLCBvciBlcnJvciBoYW5kbGluZyByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MTc6MTUuMDcwODU5NjMxWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg2MDI2ODQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE3OjE1LjA3MTMxNzE2MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIwODU5ODA2MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBob3cgZXRoZXJuZXQgZnJhbWUgaGFuZGxlcnMgKHN1Y2ggYXMgQ0ZNIGFuZCBNUlApIGFyZSByZWdpc3RlcmVkIGluIHRoZSBicmlkZ2UgbW9kdWxlLiBJbnN0ZWFkIG9mIHVzaW5nIHN0YXRpYyBnbG9iYWwgYHN0cnVjdCBicl9mcmFtZV90eXBlYCB2YXJpYWJsZXMsIGl0IGR5bmFtaWNhbGx5IGFsbG9jYXRlcyBgc3RydWN0IGJyX2ZyYW1lX3R5cGVgIHVzaW5nIGBrbWFsbG9jX29iamAgYW5kIHByb3RlY3RzIGl0cyByZW1vdmFsIHdpdGggYGtmcmVlX3JjdWAuXFxuXFxuQWxsIGZpZWxkcyAoYHR5cGVgLCBgZnJhbWVfaGFuZGxlcmAsIGFuZCBgbGlzdGApIGFjY2Vzc2VkIGJ5IGBicl9wcm9jZXNzX2ZyYW1lX3R5cGVgIGFuZCBsaXN0IHRyYXZlcnNhbCBmdW5jdGlvbnMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGluc2VydGlvbiBpbnRvIGBici1cXHUwMDNlZnJhbWVfdHlwZV9saXN0YC4gTm9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgYXJlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvciBjYWxjdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyAoc3VjaCBhcyBSQ1Ugc3luY2hyb25pemF0aW9uIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjY2ZmRhMjI3YjIyOWMwYWZjZjIwZTM5NTE3MTI1Mjk2M2FmNjYxOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDk6MTY6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2NmbS5jIGIvbmV0L2JyaWRnZS9icl9jZm0uY1xuaW5kZXggZGVhNTZmZmZhMWMxOS4uNTc5MDI0ODU4ODI5OCAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfY2ZtLmNcbisrKyBiL25ldC9icmlkZ2UvYnJfY2ZtLmNcbkBAIC00ODksMTEgKzQ4OSw2IEBAIHN0YXRpYyBpbnQgYnJfY2ZtX2ZyYW1lX3J4KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBicl9mcmFtZV90eXBlIGNmbV9mcmFtZV90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XG4tXHQudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0NGTSksXG4tXHQuZnJhbWVfaGFuZGxlciA9IGJyX2NmbV9mcmFtZV9yeCxcbi19O1xuLVxuIGludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gXHRcdCAgICAgIGNvbnN0IHUzMiBpbnN0YW5jZSxcbiBcdFx0ICAgICAgc3RydWN0IGJyX2NmbV9tZXBfY3JlYXRlICpjb25zdCBjcmVhdGUsXG5AQCAtNTAxLDYgKzQ5Niw3IEBAIGludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4ge1xuIFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcDtcbiBcdHN0cnVjdCBicl9jZm1fbWVwICptZXA7XG4rXHRpbnQgZXJyO1xuIFxuIFx0QVNTRVJUX1JUTkwoKTtcbiBcbkBAIC01NTgsOCArNTU0LDEzIEBAIGludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gXHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2bWVwLVx1MDAzZXBlZXJfbWVwX2xpc3QpO1xuIFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2bWVwLVx1MDAzZWNjbV90eF9kd29yaywgY2NtX3R4X3dvcmtfZXhwaXJlZCk7XG4gXG4tXHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2YnItXHUwMDNlbWVwX2xpc3QpKVxuLVx0XHRicl9hZGRfZnJhbWUoYnIsIFx1MDAyNmNmbV9mcmFtZV90eXBlKTtcbitcdGlmIChobGlzdF9lbXB0eShcdTAwMjZici1cdTAwM2VtZXBfbGlzdCkpIHtcbitcdFx0ZXJyID0gYnJfYWRkX2ZyYW1lKGJyLCBjcHVfdG9fYmUxNihFVEhfUF9DRk0pLCBicl9jZm1fZnJhbWVfcngpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0a2ZyZWUobWVwKTtcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4rXHR9XG4gXG4gXHRobGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2bWVwLVx1MDAzZWhlYWQsIFx1MDAyNmJyLVx1MDAzZW1lcF9saXN0KTtcbiBcbkBAIC01ODgsNyArNTg5LDcgQEAgc3RhdGljIHZvaWQgbWVwX2RlbGV0ZV9pbXBsZW1lbnRhdGlvbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gXHRrZnJlZV9yY3UobWVwLCByY3UpO1xuIFxuIFx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1lcF9saXN0KSlcbi1cdFx0YnJfZGVsX2ZyYW1lKGJyLCBcdTAwMjZjZm1fZnJhbWVfdHlwZSk7XG4rXHRcdGJyX2RlbF9mcmFtZShiciwgY3B1X3RvX2JlMTYoRVRIX1BfQ0ZNKSk7XG4gfVxuIFxuIGludCBicl9jZm1fbWVwX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pZi5jIGIvbmV0L2JyaWRnZS9icl9pZi5jXG5pbmRleCBjNTI2MTM0MzFmODg2Li5mZThlOWE0N2UxYWMxIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9pZi5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX2lmLmNcbkBAIC0zOTcsNiArMzk3LDggQEAgdm9pZCBicl9kZXZfZGVsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNmJyLVx1MDAzZXRjbl90aW1lcik7XG4gXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2YnItXHUwMDNlZ2Nfd29yayk7XG4gXG4rXHRicl9kZWxfZnJhbWVfYWxsKGJyKTtcbitcbiBcdGJyX3N5c2ZzX2RlbGJyKGJyLVx1MDAzZWRldik7XG4gXHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShici1cdTAwM2VkZXYsIGhlYWQpO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmNcbmluZGV4IGQ4N2E1ZjlmYTkyYjcuLjA3ZWZkMGZiY2Y5Y2QgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX2lucHV0LmNcbisrKyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xuQEAgLTQ2OCwxOCArNDY4LDQ4IEBAIHJ4X2hhbmRsZXJfZnVuY190ICpicl9nZXRfcnhfaGFuZGxlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0cmV0dXJuIGJyX2hhbmRsZV9mcmFtZTtcbiB9XG4gXG4tdm9pZCBicl9hZGRfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQpXG4raW50IGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlLFxuK1x0XHQgaW50ICgqZnJhbWVfaGFuZGxlcikoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpKVxuIHtcbitcdHN0cnVjdCBicl9mcmFtZV90eXBlICpmdDtcbitcbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZ0LCBcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHtcbitcdFx0aWYgKGZ0LVx1MDAzZXR5cGUgPT0gdHlwZSlcbitcdFx0XHRyZXR1cm4gLUVFWElTVDtcbitcdH1cbitcbitcdGZ0ID0ga21hbGxvY19vYmooKmZ0KTtcbitcdGlmICghZnQpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0ZnQtXHUwMDNldHlwZSA9IHR5cGU7XG4rXHRmdC1cdTAwM2VmcmFtZV9oYW5kbGVyID0gZnJhbWVfaGFuZGxlcjtcbiBcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZmdC1cdTAwM2VsaXN0LCBcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QpO1xuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuLXZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KVxuK3ZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgX19iZTE2IHR5cGUpXG4ge1xuLVx0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKnRtcDtcbitcdHN0cnVjdCBicl9mcmFtZV90eXBlICpmdDtcbiBcbi1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgXHUwMDI2YnItXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KVxuLVx0XHRpZiAoZnQgPT0gdG1wKSB7XG4rXHRobGlzdF9mb3JfZWFjaF9lbnRyeShmdCwgXHUwMDI2YnItXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KSB7XG4rXHRcdGlmIChmdC1cdTAwM2V0eXBlID09IHR5cGUpIHtcbiBcdFx0XHRobGlzdF9kZWxfcmN1KFx1MDAyNmZ0LVx1MDAzZWxpc3QpO1xuK1x0XHRcdGtmcmVlX3JjdShmdCwgcmN1KTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbitcdH1cbit9XG4rXG4rdm9pZCBicl9kZWxfZnJhbWVfYWxsKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbit7XG4rXHRzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQ7XG4rXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjtcbitcbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZnQsIG4sIFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdCkge1xuK1x0XHRobGlzdF9kZWxfcmN1KFx1MDAyNmZ0LVx1MDAzZWxpc3QpO1xuK1x0XHRrZnJlZV9yY3UoZnQsIHJjdSk7XG4rXHR9XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXJwLmMgYi9uZXQvYnJpZGdlL2JyX21ycC5jXG5pbmRleCBlZjE2ZDA3MDM5MjQxLi41MTFhZThhZjNkMDMzIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9tcnAuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9tcnAuY1xuQEAgLTgsMTEgKzgsNiBAQCBzdGF0aWMgY29uc3QgdTggbXJwX2luX3Rlc3RfZG1hY1tFVEhfQUxFTl0gPSB7IDB4MSwgMHgxNSwgMHg0ZSwgMHgwLCAweDAsIDB4MyB9O1xuIFxuIHN0YXRpYyBpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG4tc3RhdGljIHN0cnVjdCBicl9mcmFtZV90eXBlIG1ycF9mcmFtZV90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XG4tXHQudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX01SUCksXG4tXHQuZnJhbWVfaGFuZGxlciA9IGJyX21ycF9wcm9jZXNzLFxuLX07XG4tXG4gc3RhdGljIGJvb2wgYnJfbXJwX2lzX3JpbmdfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwX3BvcnQsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpzX3BvcnQsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxuQEAgLTQ4Niw3ICs0ODEsNyBAQCBzdGF0aWMgdm9pZCBicl9tcnBfZGVsX2ltcGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApXG4gXHRrZnJlZV9yY3UobXJwLCByY3UpO1xuIFxuIFx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1ycF9saXN0KSlcbi1cdFx0YnJfZGVsX2ZyYW1lKGJyLCBcdTAwMjZtcnBfZnJhbWVfdHlwZSk7XG4rXHRcdGJyX2RlbF9mcmFtZShiciwgY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSk7XG4gfVxuIFxuIC8qIEFkZHMgYSBuZXcgTVJQIGluc3RhbmNlLlxuQEAgLTUzNSwxMyArNTMwLDE2IEBAIGludCBicl9tcnBfYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycF9pbnN0YW5jZSAqaW5zdGFuY2UpXG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZici1cdTAwM2Vsb2NrKTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihtcnAtXHUwMDNlc19wb3J0LCBwKTtcbiBcbi1cdGlmIChobGlzdF9lbXB0eShcdTAwMjZici1cdTAwM2VtcnBfbGlzdCkpXG4tXHRcdGJyX2FkZF9mcmFtZShiciwgXHUwMDI2bXJwX2ZyYW1lX3R5cGUpO1xuLVxuIFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2bXJwLVx1MDAzZXRlc3Rfd29yaywgYnJfbXJwX3Rlc3Rfd29ya19leHBpcmVkKTtcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm1ycC1cdTAwM2Vpbl90ZXN0X3dvcmssIGJyX21ycF9pbl90ZXN0X3dvcmtfZXhwaXJlZCk7XG4gXHRobGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2bXJwLVx1MDAzZWxpc3QsIFx1MDAyNmJyLVx1MDAzZW1ycF9saXN0KTtcbiBcbitcdGlmIChobGlzdF9pc19zaW5ndWxhcl9ub2RlKFx1MDAyNm1ycC1cdTAwM2VsaXN0LCBcdTAwMjZici1cdTAwM2VtcnBfbGlzdCkpIHtcbitcdFx0ZXJyID0gYnJfYWRkX2ZyYW1lKGJyLCBjcHVfdG9fYmUxNihFVEhfUF9NUlApLCBicl9tcnBfcHJvY2Vzcyk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBkZWxldGVfbXJwO1xuK1x0fVxuK1xuIFx0ZXJyID0gYnJfbXJwX3N3aXRjaGRldl9hZGQoYnIsIG1ycCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGRlbGV0ZV9tcnA7XG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuaW5kZXggZDMzN2IxY2ZiOTgwZC4uNTE2MzAxN2ZlYjc0ZCAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG4rKysgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuQEAgLTkzNywxMCArOTM3LDE0IEBAIHN0cnVjdCBicl9mcmFtZV90eXBlIHtcbiBcdGludFx0XHRcdCgqZnJhbWVfaGFuZGxlcikoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcbiBcdFx0XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZVx0bGlzdDtcbitcdHN0cnVjdCByY3VfaGVhZFx0XHRyY3U7XG4gfTtcbiBcbi12b2lkIGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdCk7XG4tdm9pZCBicl9kZWxfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQpO1xuK2ludCBicl9hZGRfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBfX2JlMTYgdHlwZSxcbitcdFx0IGludCAoKmZyYW1lX2hhbmRsZXIpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSk7XG4rdm9pZCBicl9kZWxfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBfX2JlMTYgdHlwZSk7XG4rdm9pZCBicl9kZWxfZnJhbWVfYWxsKHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG4gXG4gc3RhdGljIGlubGluZSBib29sIGJyX3J4X2hhbmRsZXJfY2hlY2tfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MTc6MTUuMDcxMzE3ODgxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMDQxNzQ5ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRHluYW1pYyBBbGxvY2F0aW9uIG9mIGBicl9mcmFtZV90eXBlYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgYWxsIGFib3V0IG1vdmluZyBhd2F5IGZyb20gdGhvc2Ugc3RhdGljLCBnbG9iYWwgYGNmbV9mcmFtZV90eXBlYCBhbmQgYG1ycF9mcmFtZV90eXBlYCBzdHJ1Y3R1cmVzLiBJbnN0ZWFkLCB0aGUgcGF0Y2ggZHluYW1pY2FsbHkgYWxsb2NhdGVzIGBzdHJ1Y3QgYnJfZnJhbWVfdHlwZWAgaW5zdGFuY2VzIG9uIGEgcGVyLWJyaWRnZSBiYXNpcy4gVGhpcyBpcyBhIGdvb2QgbW92ZTsgaXQgbWFrZXMgdGhlIGNvZGUgY2xlYW5lciwgbW9yZSBmbGV4aWJsZSwgYW5kIHBvdGVudGlhbGx5IHNhZmVyLiBMZXQncyBzZWUgaG93IHRoaXMgcGxheXMgb3V0IGFjcm9zcyB0aGUgYnJpZGdlIGNvZGUuXG5cbkZpcnN0LCBpbiBgbmV0L2JyaWRnZS9icl9jZm0uY2AsIEkgc2VlIHRoZXkndmUgcmVtb3ZlZCB0aGUgc3RhdGljIGBjZm1fZnJhbWVfdHlwZWAuIE5vdywgd2hlbiBjcmVhdGluZyBhIENGTSBNRVAgKE1haW50ZW5hbmNlIEVudGl0eSBQb2ludCkgaW4gYGJyX2NmbV9tZXBfY3JlYXRlYCwgdGhleSBjYWxsIGBicl9hZGRfZnJhbWVgIHdpdGggdGhlIHByb3RvY29sIHR5cGUgYEVUSF9QX0NGTWAgYW5kIHRoZSBoYW5kbGVyIGBicl9jZm1fZnJhbWVfcnhgLiAgSWYgYGJyX2FkZF9mcmFtZWAgZmFpbHMgKGFsd2F5cyBhIGdvb2QgY2hlY2spLCB0aGUgTUVQIGlzIGZyZWVkIGFuZCBhbiBlcnJvciBpcyByZXR1cm5lZC4gT24gZGVsZXRpb24sIHRoZXkgY2FsbCBgYnJfZGVsX2ZyYW1lYCB3aXRoIGBFVEhfUF9DRk1gIGluc3RlYWQgb2YgdGhlIG9sZCBzdGF0aWMgc3RydWN0dXJlLiBUaGlzIGZlZWxzIGNsZWFuZXIgYW5kIG1vcmUgaW50dWl0aXZlLlxuXG5UaGVuLCBpbiBgbmV0L2JyaWRnZS9icl9pZi5jYCwgdGhleSd2ZSBhZGRlZCBgYnJfZGVsX2ZyYW1lX2FsbChicilgIHRvIGBicl9kZXZfZGVsZXRlYC4gIFRoaXMgZW5zdXJlcyBhbGwgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGZyYW1lIHR5cGVzIGFyZSBwcm9wZXJseSBjbGVhbmVkIHVwIHdoZW4gYSBicmlkZ2UgaW50ZXJmYWNlIGlzIGRlbGV0ZWQsIHdoaWNoIGlzIGFic29sdXRlbHkgY3JpdGljYWwgdG8gYXZvaWQgbWVtb3J5IGxlYWtzLiBFeGNlbGxlbnQuXG5cblBlZWtpbmcgaW50byBgbmV0L2JyaWRnZS9icl9pbnB1dC5jYCwgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzIHNlZW1zIHRvIGJlIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYnJfYWRkX2ZyYW1lYCBhbmQgYGJyX2RlbF9mcmFtZWAuICBgYnJfYWRkX2ZyYW1lYCBub3cgY2hlY2tzIGZvciBkdXBsaWNhdGUgZnJhbWUgdHlwZXMgKGEgYHR5cGVgIGFscmVhZHkgZXhpc3RzIGluIGBici1cdTAwM2VmcmFtZV90eXBlX2xpc3RgKSwgd2hpY2ggaXMgYSBkZWNlbnQgc2FuaXR5IGNoZWNrIGFuZCByZXR1cm5zIGFuIGVycm9yIGNvZGUuIEl0IHRoZW4gZHluYW1pY2FsbHkgYWxsb2NhdGVzIGEgYHN0cnVjdCBicl9mcmFtZV90eXBlYCB3aXRoIGBrbWFsbG9jX29iamAsIGFuZCBpZiB0aGF0IGZhaWxzLCByZXR1cm5zIGFuIGVycm9yLiAgSXQgc2V0cyB0aGUgYHR5cGVgIGFuZCBgZnJhbWVfaGFuZGxlcmAsIGFuZCBhZGRzIHRoZSBuZXcgYGZ0YCB0byBgYnItXHUwMDNlZnJhbWVfdHlwZV9saXN0YC4gIGBicl9kZWxfZnJhbWVgIG5vdyBmaW5kcyB0aGUgYXBwcm9wcmlhdGUgYGZ0YCBiYXNlZCBvbiB0aGUgYHR5cGVgLCBhbmQgc2FmZWx5IHJlbW92ZXMgYW5kIGZyZWVzIGl0LiAgYGJyX2RlbF9mcmFtZV9hbGxgIGp1c3QgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgbGlzdCBhbmQgY2xlYW5zIHVwIGV2ZXJ5dGhpbmcuICBJJ20gZ2xhZCB0byBzZWUgdGhlIHVzZSBvZiBga2ZyZWVfcmN1YCB3aXRoIHRoZSBgcmN1YCBoZWFkLCBwcm9wZXIgdXNlIG9mIFJDVSBmb3Igc3luY2hyb25pemF0aW9uIGlzIHRoZSB3YXkgdG8gZ28gaGVyZS5cblxuTmV4dCwgaW4gYG5ldC9icmlkZ2UvYnJfbXJwLmNgLCB0aGUgc3RhdGljIGBtcnBfZnJhbWVfdHlwZWAgaXMgZ29uZS4gIE9uIE1SUCBkZWxldGlvbiwgYGJyX2RlbF9mcmFtZWAgaXMgY2FsbGVkIHdpdGggYEVUSF9QX01SUGAuIE9uIE1SUCBhZGRpdGlvbiwgaXQgY2hlY2tzIGlmIGBtcnAtXHUwMDNlbGlzdGAgaXMgc2luZ3VsYXIsIGFuZCB0aGVuIGNhbGxzIGBicl9hZGRfZnJhbWVgIHdpdGggYEVUSF9QX01SUGAgYW5kIHRoZSBgYnJfbXJwX3Byb2Nlc3NgIGhhbmRsZXIuICBTb3VuZHMgc3RyYWlnaHRmb3J3YXJkLlxuXG5GaW5hbGx5LCBgbmV0L2JyaWRnZS9icl9wcml2YXRlLmhgIGFkZHMgdGhlIGBzdHJ1Y3QgcmN1X2hlYWQgcmN1O2AgdG8gYHN0cnVjdCBicl9mcmFtZV90eXBlYC4gIFRoaXMgaXMgZXNzZW50aWFsIGZvciBSQ1Utc2FmZSBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGNvcmUgZnVuY3Rpb25zIGFyZSB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIG5ldyBzdHJ1Y3R1cmUuXG5cbk5vdywgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEknbGwgbmVlZCB0byB1c2UgYGdyZXBwZXJgIG9yIHNpbWlsYXIgdG9vbCB0byBxdWlja2x5IHNjYW4gdGhlIHJlc3Qgb2YgdGhlIGJyaWRnZSBjb2RlIHRvIGNvbmZpcm0gdGhhdCB0aGUgYGZyYW1lX3R5cGVfbGlzdGAgYW5kIGBicl9mcmFtZV90eXBlYCBhcmUgb25seSB1c2VkIHdpdGhpbiB0aGUgaW50ZW5kZWQgc2NvcGUuIFRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkLCB3ZWxsLXRob3VnaHQtb3V0IGNoYW5nZS4gVGhlIGR5bmFtaWMgYWxsb2NhdGlvbiBhcHByb2FjaCBpcyBjb3JyZWN0IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MjksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToxNzoyOC4xMTMwNzEzOTlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMDk2Njc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZyYW1lX3R5cGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX2RldmljZS5jPTQ4MD12b2lkIGJyX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy01MDUtXFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZici1cXHUwMDNlZmRiX2xpc3QpO1xcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6NTA2OlxcdElOSVRfSExJU1RfSEVBRChcXHUwMDI2YnItXFx1MDAzZWZyYW1lX3R5cGVfbGlzdCk7XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy01MDctI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9MjY3PXN0YXRpYyBpbnQgbmZfaG9va19icmlkZ2VfcHJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICoqcHNrYilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMjItICovXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjMyMzpzdGF0aWMgaW50IGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMjQtXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTMyNS17XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjMyNjpcXHRzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqdG1wO1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMjctXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjMyODpcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wLCBcXHUwMDI2cC1cXHUwMDNlYnItXFx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdClcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzI5LVxcdFxcdGlmICh1bmxpa2VseSh0bXAtXFx1MDAzZXR5cGUgPT0gc2tiLVxcdTAwM2Vwcm90b2NvbCkpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9MzM5PXN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGJyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDI3LVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0Mjg6XFx0aWYgKHVubGlrZWx5KGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShwLCBza2IpKSlcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDI5LVxcdFxcdHJldHVybiBSWF9IQU5ETEVSX1BBU1M7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9NDcxPWludCBicl9hZGRfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBfX2JlMTYgdHlwZSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NzQte1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0NzU6XFx0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0O1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NzYtXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjQ3NzpcXHRobGlzdF9mb3JfZWFjaF9lbnRyeShmdCwgXFx1MDAyNmJyLVxcdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDc4LVxcdFxcdGlmIChmdC1cXHUwMDNldHlwZSA9PSB0eXBlKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ4Ny1cXHRmdC1cXHUwMDNlZnJhbWVfaGFuZGxlciA9IGZyYW1lX2hhbmRsZXI7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjQ4ODpcXHRobGlzdF9hZGRfaGVhZF9yY3UoXFx1MDAyNmZ0LVxcdTAwM2VsaXN0LCBcXHUwMDI2YnItXFx1MDAzZWZyYW1lX3R5cGVfbGlzdCk7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ4OS1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz00OTM9dm9pZCBicl9kZWxfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBfX2JlMTYgdHlwZSlcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDk0LXtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDk1OlxcdHN0cnVjdCBicl9mcmFtZV90eXBlICpmdDtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDk2LVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0OTc6XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkoZnQsIFxcdTAwMjZici1cXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KSB7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ5OC1cXHRcXHRpZiAoZnQtXFx1MDAzZXR5cGUgPT0gdHlwZSkge1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTUwNj12b2lkIGJyX2RlbF9mcmFtZV9hbGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy01MDcte1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo1MDg6XFx0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0O1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy01MDktXFx0c3RydWN0IGhsaXN0X25vZGUgKm47XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTUxMC1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NTExOlxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZnQsIG4sIFxcdTAwMjZici1cXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KSB7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTUxMi1cXHRcXHRobGlzdF9kZWxfcmN1KFxcdTAwMjZmdC1cXHUwMDNlbGlzdCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycC5jPTk5ND1zdGF0aWMgYm9vbCBicl9tcnBfbWltX3Byb2Nlc3Moc3RydWN0IGJyX21ycCAqbXJwLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnAuYy0xMDMyLSAqL1xcbm5ldC9icmlkZ2UvYnJfbXJwLmM6MTAzMzpzdGF0aWMgdTggYnJfbXJwX2dldF9mcmFtZV90eXBlKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9tcnAuYy0xMDM0LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwLmM9MTA3MD1zdGF0aWMgaW50IGJyX21ycF9yY3Yoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwLmMtMTEyMi1cXHRpZiAoYnJfbXJwX2luX2ZyYW1lKHNrYikpIHtcXG5uZXQvYnJpZGdlL2JyX21ycC5jOjExMjM6XFx0XFx0dTggaW5fdHlwZSA9IGJyX21ycF9nZXRfZnJhbWVfdHlwZShza2IpO1xcbm5ldC9icmlkZ2UvYnJfbXJwLmMtMTEyNC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTUwMD1zdHJ1Y3QgbmV0X2JyaWRnZSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01MDItXFx0c3BpbmxvY2tfdFxcdFxcdFxcdGhhc2hfbG9jaztcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo1MDM6XFx0c3RydWN0IGhsaXN0X2hlYWRcXHRcXHRmcmFtZV90eXBlX2xpc3Q7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTA0LVxcdHN0cnVjdCBuZXRfZGV2aWNlXFx0XFx0KmRldjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTkzMz1yeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTM0LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjkzNTpzdHJ1Y3QgYnJfZnJhbWVfdHlwZSB7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTM2LVxcdF9fYmUxNlxcdFxcdFxcdHR5cGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE3OjI4LjE4NTE3NDE4NloiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDQyMjE4NDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBicl9wcm9jZXNzX2ZyYW1lX3R5cGVgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGlzIGBicl9wcm9jZXNzX2ZyYW1lX3R5cGVgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBhdCBpdCB3aXRoaW4gdGhlIGBuZXQvYnJpZGdlL2JyX2lucHV0LmNgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIGJyaWRnZSBpbnB1dCBwcm9jZXNzaW5nIGxvZ2ljIGlzLCBzbyBpdCBtYWtlcyBzZW5zZSB0aGF0IHRoZSBmcmFtZSB0eXBlIHdvdWxkIGJlIGhhbmRsZWQgaGVyZS4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCBkZXRlcm1pbmVzIHRoZSBpbmNvbWluZyBmcmFtZSdzIHR5cGUgYW5kIHdoYXQgaXQgZG9lcyB3aXRoIGl0LiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBvciBhIGxvZ2ljIGVycm9yIHRoYXQgSSBuZWVkIHRvIHBpbnBvaW50LiBUaW1lIHRvIGZpcmUgdXAgdGhlIGVkaXRvciBhbmQgc3RhcnQgcmVhZGluZyB0aHJvdWdoIHRoYXQgc2VjdGlvbiBvZiB0aGUgY29kZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1OTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToxNzozMC4yMjczOTYxNDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvYnJfaW5wdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjA6XFx0LyogUmV0dXJuIDAgaWYgdGhlIGZyYW1lIHdhcyBub3QgcHJvY2Vzc2VkIG90aGVyd2lzZSAxXFxuIDMyMTpcXHQgKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2tcXG4gMzIyOlxcdCAqL1xcbiAzMjM6XFx0c3RhdGljIGludCBicl9wcm9jZXNzX2ZyYW1lX3R5cGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4gMzI0OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAzMjU6XFx0e1xcbiAzMjY6XFx0XFx0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKnRtcDtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRtcCwgXFx1MDAyNnAtXFx1MDAzZWJyLVxcdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpXFxuIDMyOTpcXHRcXHRcXHRpZiAodW5saWtlbHkodG1wLVxcdTAwM2V0eXBlID09IHNrYi1cXHUwMDNlcHJvdG9jb2wpKVxcbiAzMzA6XFx0XFx0XFx0XFx0cmV0dXJuIHRtcC1cXHUwMDNlZnJhbWVfaGFuZGxlcihwLCBza2IpO1xcbiAzMzE6XFx0XFxuIDMzMjpcXHRcXHRyZXR1cm4gMDtcXG4gMzMzOlxcdH1cXG4gMzM0OlxcdFxcbiAzMzU6XFx0LypcXG4gMzM2OlxcdCAqIFJldHVybiBOVUxMIGlmIHNrYiBpcyBoYW5kbGVkXFxuIDMzNzpcXHQgKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2tcXG4gMzM4OlxcdCAqL1xcbiAzMzk6XFx0c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgYnJfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcXG4gMzQwOlxcdHtcXG4gMzQxOlxcdFxcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xcbiAzNDI6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcDtcXG4gMzQzOlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSAqcHNrYjtcXG4gMzQ0OlxcdFxcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBldGhfaGRyKHNrYiktXFx1MDAzZWhfZGVzdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MTc6MzAuMjI3NTA1MDc4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3MDM1OTIzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYGJyX2FkZF9mcmFtZWAgZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGFuZCBNZW1vcnkgU2FmZXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCB0aGUgYGJyX2FkZF9mcmFtZWAgZnVuY3Rpb24gaW4gYGJyX2lucHV0LmNgLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIHBvdGVudGlhbCBsZWFrcy4gVGhlIGZ1bmN0aW9uIGFkZHMgYSBmcmFtZSB0eXBlIHRvIGEgYnJpZGdlJ3MgbGlzdC4gSSBuZWVkIHRvIGJlIG1ldGljdWxvdXMuXG5cbkZpcnN0LCB0aGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoIHRoZSBleGlzdGluZyBmcmFtZSB0eXBlcyB0byBlbnN1cmUgdW5pcXVlbmVzcy4gVGhhdCdzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLiBUaGVuLCBpdCBhbGxvY2F0ZXMgbWVtb3J5IGZvciBhIG5ldyBgYnJfZnJhbWVfdHlwZWAgc3RydWN0dXJlIHVzaW5nIGBrbWFsbG9jX29iamAuIFRoaXMgaXMgY3JpdGljYWwuIGBrbWFsbG9jX29iaigqZnQpYCBtZWFucyBpdCBhbGxvY2F0ZXMgdGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyZSBgZnRgLlxuXG5OZXh0LCB0aGUgc3RydWN0dXJlIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQ6IGB0eXBlYCBhbmQgYGZyYW1lX2hhbmRsZXJgIGFyZSBhc3NpZ25lZCB0aGVpciBwcm92aWRlZCB2YWx1ZXMsIGFuZCB0aGUgYGxpc3RgIG1lbWJlciBpcyBhZGRlZCB0byB0aGUgYGhsaXN0X2hlYWRgIG9mIGZyYW1lIHR5cGVzLiBUaGUgYHJjdWAgbWVtYmVyIGlzIGxpa2VseSB1c2VkIGZvciBSQ1Utc2FmZSBmcmVlaW5nIGxhdGVyLiBUaGUgYGhsaXN0X2FkZF9oZWFkX3JjdWAgZnVuY3Rpb24gaW1wbGljaXRseSBpbml0aWFsaXplcyBgbGlzdGAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBhcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgcmVhZHMgb3IgcG90ZW50aWFsIGxlYWtzIHRvIHVzZXJzcGFjZT8gTGV0J3MgdHJhY2UgaXQuIFRoZSBgZnRgIHN0cnVjdHVyZSBpcyB1c2VkIGludGVybmFsbHkgYnkgYGJyX3Byb2Nlc3NfZnJhbWVfdHlwZWAgdG8gcmVhZCBpdHMgYHR5cGVgIGFuZCBgZnJhbWVfaGFuZGxlcmAgbWVtYmVycywgYW5kIHRvIHRyYXZlcnNlIHRoZSBsaXN0IHZpYSBgbGlzdGAuIEltcG9ydGFudGx5LCBhbGwgZmllbGRzICpyZWFkKiBhcmUgZXhwbGljaXRseSBhc3NpZ25lZCB2YWx1ZXMuIFRoZXJlIGlzIG5vIGNvcHlpbmcgb2YgZGF0YSB0byB1c2Vyc3BhY2UsIHNvIHRoZXJlJ3Mgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0aHJvdWdoIHRoYXQgY2hhbm5lbC4gSSBzZWUgbm8gdW5pbml0aWFsaXplZCBkYXRhIGJlaW5nIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gQW5kIG5vIHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgZWl0aGVyLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uc2lkZXIgbWVtb3J5IG1hbmFnZW1lbnQsIGNvbmN1cnJlbmN5LCBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIG1lbW9yeSBsZWFrcy4gVGhlIGZ1bmN0aW9uIGR5bmFtaWNhbGx5IGFsbG9jYXRlcyBgYnJfZnJhbWVfdHlwZWAgdXNpbmcgYGttYWxsb2Nfb2JqYC4gVGhpcyBzdHJ1Y3R1cmUgd2lsbCBldmVudHVhbGx5IGJlIGRlYWxsb2NhdGVkIHVzaW5nIGBrZnJlZV9yY3VgLCBpbmRpY2F0aW5nIGl0J3MgUkNVLXByb3RlY3RlZC4gVGhhdCBzdWdnZXN0cyB3ZSBoYXZlIHRvIGNvbnNpZGVyIFJDVSBzeW5jaHJvbml6YXRpb24uIEhvd2V2ZXIsIGFueSBidWdzIGluIFJDVSBsaXN0IHRyYXZlcnNhbCBvciBtZW1vcnkgZnJlZWluZyAobGlrZSBVQUYgb3IgZG91YmxlLWZyZWUpIGFyZSB0aGluZ3MgdGhhdCB3b3VsZCBnZXQgY2F1Z2h0IGJ5IEtBU0FOIG9yIG90aGVyIHN0YW5kYXJkIG1lbW9yeSBkZXRlY3RvcnMuIEkgZmVlbCBjb25maWRlbnQgYWJvdXQgdGhpcyBwb2ludC5cblxuR2l2ZW4gdGhlIG92ZXJhbGwgY29kZSBhbmFseXNpcywgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBFdmVyeXRoaW5nIHRvdWNoZWQgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQuXG5cblJldmlld2luZyB0aGUgS01TQU4gcnVsZXMgaGVscHMgbWUgY29uZmlybSBteSBjb25jbHVzaW9uLiBUaGUgY29kZSBkb2Vzbid0IG1lZXQgdGhlIGNyaXRlcmlhIGZvciBgTmVlZHNLTVNBTj10cnVlYC4gSXQgZmFsbHMgaW50byB0aGUgY2F0ZWdvcnkgb2YgY29kZSB0aGF0IHByaW1hcmlseSBpbnRyb2R1Y2VzIHJpc2tzIGxpa2UgVUFGLCBtZW1vcnkgbGVha3MsIGV0Yy4sIHdoaWNoIGFyZSBjYXVnaHQgYnkgZXhpc3RpbmcgZGV0ZWN0b3JzLiBUaGUgcGF0Y2ggZG9lc24ndCBjcmVhdGUgYSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjQzLCJPdXRwdXRUb2tlbnMiOjIwOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE3OjM1LjkzMTEwMDE3M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGV0aGVybmV0IGZyYW1lIGhhbmRsZXJzIChzdWNoIGFzIENGTSBhbmQgTVJQKSBhcmUgcmVnaXN0ZXJlZCBpbiB0aGUgYnJpZGdlIG1vZHVsZS4gSW5zdGVhZCBvZiB1c2luZyBzdGF0aWMgZ2xvYmFsIGBzdHJ1Y3QgYnJfZnJhbWVfdHlwZWAgdmFyaWFibGVzLCBpdCBkeW5hbWljYWxseSBhbGxvY2F0ZXMgYHN0cnVjdCBicl9mcmFtZV90eXBlYCB1c2luZyBga21hbGxvY19vYmpgIGFuZCBwcm90ZWN0cyBpdHMgcmVtb3ZhbCB3aXRoIGBrZnJlZV9yY3VgLlxcblxcbkFsbCBmaWVsZHMgKGB0eXBlYCwgYGZyYW1lX2hhbmRsZXJgLCBhbmQgYGxpc3RgKSBhY2Nlc3NlZCBieSBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYCBhbmQgbGlzdCB0cmF2ZXJzYWwgZnVuY3Rpb25zIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBpbnNlcnRpb24gaW50byBgYnItXFx1MDAzZWZyYW1lX3R5cGVfbGlzdGAuIE5vbmUgb2YgdGhlc2Ugc3RydWN0dXJlcyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFyZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdXNlZCBpbiBjb25kaXRpb25hbCBicmFuY2hpbmcgb3IgY2FsY3VsYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKHN1Y2ggYXMgUkNVIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgbGVha3MpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBldGhlcm5ldCBmcmFtZSBoYW5kbGVycyAoc3VjaCBhcyBDRk0gYW5kIE1SUCkgYXJlIHJlZ2lzdGVyZWQgaW4gdGhlIGJyaWRnZSBtb2R1bGUuIEluc3RlYWQgb2YgdXNpbmcgc3RhdGljIGdsb2JhbCBgc3RydWN0IGJyX2ZyYW1lX3R5cGVgIHZhcmlhYmxlcywgaXQgZHluYW1pY2FsbHkgYWxsb2NhdGVzIGBzdHJ1Y3QgYnJfZnJhbWVfdHlwZWAgdXNpbmcgYGttYWxsb2Nfb2JqYCBhbmQgcHJvdGVjdHMgaXRzIHJlbW92YWwgd2l0aCBga2ZyZWVfcmN1YC5cXG5cXG5BbGwgZmllbGRzIChgdHlwZWAsIGBmcmFtZV9oYW5kbGVyYCwgYW5kIGBsaXN0YCkgYWNjZXNzZWQgYnkgYGJyX3Byb2Nlc3NfZnJhbWVfdHlwZWAgYW5kIGxpc3QgdHJhdmVyc2FsIGZ1bmN0aW9ucyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgaW5zZXJ0aW9uIGludG8gYGJyLVxcdTAwM2VmcmFtZV90eXBlX2xpc3RgLiBOb25lIG9mIHRoZXNlIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhcmUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHVzZWQgaW4gY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9yIGNhbGN1bGF0aW9ucy4gQW55IHBvdGVudGlhbCBidWdzIChzdWNoIGFzIFJDVSBzeW5jaHJvbml6YXRpb24gaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGxlYWtzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowfjjxg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 08:59:28 +0000 UTC FinishedAt: 2026-09-05 09:17:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "80dd7e754b3aa9637a0758ad93fa209f9650ec48", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_CFM", "BRIDGE_MRP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "80dd7e754b3aa9637a0758ad93fa209f9650ec48", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_CFM", "BRIDGE_MRP" ], "series_id": "812fa91c-2e34-4104-8775-050a1d6aa243" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "br_add_frame", "br_del_frame", "br_del_frame_all", "br_cfm_mep_create", "br_cfm_mep_delete", "br_mrp_add", "br_mrp_del", "br_dev_delete" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfQ0ZNJiMzNDssCiAgICAmIzM0O0JSSURHRV9NUlAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl9hZGRfZnJhbWUmIzM0OywKICAgICYjMzQ7YnJfZGVsX2ZyYW1lJiMzNDssCiAgICAmIzM0O2JyX2RlbF9mcmFtZV9hbGwmIzM0OywKICAgICYjMzQ7YnJfY2ZtX21lcF9jcmVhdGUmIzM0OywKICAgICYjMzQ7YnJfY2ZtX21lcF9kZWxldGUmIzM0OywKICAgICYjMzQ7YnJfbXJwX2FkZCYjMzQ7LAogICAgJiMzNDticl9tcnBfZGVsJiMzNDssCiAgICAmIzM0O2JyX2Rldl9kZWxldGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgZXRoZXJuZXQgZnJhbWUgaGFuZGxlcnMgKHN1Y2ggYXMgQ0ZNIGFuZCBNUlApIGFyZSByZWdpc3RlcmVkIGluIHRoZSBicmlkZ2UgbW9kdWxlLiBJbnN0ZWFkIG9mIHVzaW5nIHN0YXRpYyBnbG9iYWwgYHN0cnVjdCBicl9mcmFtZV90eXBlYCB2YXJpYWJsZXMsIGl0IGR5bmFtaWNhbGx5IGFsbG9jYXRlcyBgc3RydWN0IGJyX2ZyYW1lX3R5cGVgIHVzaW5nIGBrbWFsbG9jX29iamAgYW5kIHByb3RlY3RzIGl0cyByZW1vdmFsIHdpdGggYGtmcmVlX3JjdWAuXG5cbkFsbCBmaWVsZHMgKGB0eXBlYCwgYGZyYW1lX2hhbmRsZXJgLCBhbmQgYGxpc3RgKSBhY2Nlc3NlZCBieSBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYCBhbmQgbGlzdCB0cmF2ZXJzYWwgZnVuY3Rpb25zIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBpbnNlcnRpb24gaW50byBgYnItXHUwMDNlZnJhbWVfdHlwZV9saXN0YC4gTm9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgYXJlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvciBjYWxjdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyAoc3VjaCBhcyBSQ1Ugc3luY2hyb25pemF0aW9uIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYnJpZGdlIEV0aGVybmV0IGZyYW1lIHR5cGUgaGFuZGxlciByZWdpc3RyYXRpb24vZGVyZWdpc3RyYXRpb24gbWVjaGFuaXNtLiBQcmV2aW91c2x5LCBzdGF0aWNhbGx5IGFsbG9jYXRlZCBmcmFtZSB0eXBlIHN0cnVjdHVyZXMgKHN1Y2ggYXMgY2ZtX2ZyYW1lX3R5cGUgYW5kIG1ycF9mcmFtZV90eXBlKSB3ZXJlIHJlZ2lzdGVyZWQgZGlyZWN0bHkgdG8gYnJpZGdlIGluc3RhbmNlcywgd2hpY2ggY291bGQgbGVhZCB0byBsaXN0IGNvcnJ1cHRpb24gYWNyb3NzIG11bHRpcGxlIGJyaWRnZXMuIFRoZSBwYXRjaCBjaGFuZ2VzIHRoaXMgdG8gZHluYW1pYyBwZXItYnJpZGdlIGFsbG9jYXRpb24gYW5kIFJDVS1iYXNlZCBmcmVlaW5nIG9mIGZyYW1lIHR5cGUgbm9kZXMsIGludHJvZHVjZXMgZXJyb3IgaGFuZGxpbmcgb24gYWxsb2NhdGlvbiBmYWlsdXJlLCBhbmQgYWRkcyBjbGVhbnVwIG9mIGFsbCByZWdpc3RlcmVkIGZyYW1lIHR5cGVzIGR1cmluZyBicmlkZ2UgZGV2aWNlIGRlbGV0aW9uIChicl9kZXZfZGVsZXRlKS4gVGhlc2UgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjaGFuZ2VzIHdhcnJhbnQgZnV6emluZyB0byB1bmNvdmVyIHBvdGVudGlhbCBtZW1vcnkgbGVha3MsIGNvbmN1cnJlbmN5IGlzc3Vlcywgb3IgZXJyb3IgaGFuZGxpbmcgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiNjZmZGEyMjdiMjI5YzBhZmNmMjBlMzk1MTcxMjUyOTYzYWY2NjE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwOToxNjo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2NmbS5jIGIvbmV0L2JyaWRnZS9icl9jZm0uY1xuaW5kZXggZGVhNTZmZmZhMWMxOS4uNTc5MDI0ODU4ODI5OCAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfY2ZtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfY2ZtLmNcbkBAIC00ODksMTEgJiM0Mzs0ODksNiBAQCBzdGF0aWMgaW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSBjZm1fZnJhbWVfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuLVx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9DRk0pLFxuLVx0LmZyYW1lX2hhbmRsZXIgPSBicl9jZm1fZnJhbWVfcngsXG4tfTtcbi1cbiBpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0XHQgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsXG4gXHRcdCAgICAgIHN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSAqY29uc3QgY3JlYXRlLFxuQEAgLTUwMSw2ICYjNDM7NDk2LDcgQEAgaW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiB7XG4gXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwO1xuIFx0c3RydWN0IGJyX2NmbV9tZXAgKm1lcDtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuIFx0QVNTRVJUX1JUTkwoKTtcbiBcbkBAIC01NTgsOCAmIzQzOzU1NCwxMyBAQCBpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm1lcC1cdTAwM2VwZWVyX21lcF9saXN0KTtcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm1lcC1cdTAwM2VjY21fdHhfZHdvcmssIGNjbV90eF93b3JrX2V4cGlyZWQpO1xuIFxuLVx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1lcF9saXN0KSlcbi1cdFx0YnJfYWRkX2ZyYW1lKGJyLCBcdTAwMjZjZm1fZnJhbWVfdHlwZSk7XG4mIzQzO1x0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1lcF9saXN0KSkge1xuJiM0MztcdFx0ZXJyID0gYnJfYWRkX2ZyYW1lKGJyLCBjcHVfdG9fYmUxNihFVEhfUF9DRk0pLCBicl9jZm1fZnJhbWVfcngpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRrZnJlZShtZXApO1xuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbiBcdGhsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZtZXAtXHUwMDNlaGVhZCwgXHUwMDI2YnItXHUwMDNlbWVwX2xpc3QpO1xuIFxuQEAgLTU4OCw3ICYjNDM7NTg5LDcgQEAgc3RhdGljIHZvaWQgbWVwX2RlbGV0ZV9pbXBsZW1lbnRhdGlvbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gXHRrZnJlZV9yY3UobWVwLCByY3UpO1xuIFxuIFx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1lcF9saXN0KSlcbi1cdFx0YnJfZGVsX2ZyYW1lKGJyLCBcdTAwMjZjZm1fZnJhbWVfdHlwZSk7XG4mIzQzO1x0XHRicl9kZWxfZnJhbWUoYnIsIGNwdV90b19iZTE2KEVUSF9QX0NGTSkpO1xuIH1cbiBcbiBpbnQgYnJfY2ZtX21lcF9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaWYuYyBiL25ldC9icmlkZ2UvYnJfaWYuY1xuaW5kZXggYzUyNjEzNDMxZjg4Ni4uZmU4ZTlhNDdlMWFjMSAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfaWYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9pZi5jXG5AQCAtMzk3LDYgJiM0MzszOTcsOCBAQCB2b2lkIGJyX2Rldl9kZWxldGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2YnItXHUwMDNldGNuX3RpbWVyKTtcbiBcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZici1cdTAwM2VnY193b3JrKTtcbiBcbiYjNDM7XHRicl9kZWxfZnJhbWVfYWxsKGJyKTtcbiYjNDM7XG4gXHRicl9zeXNmc19kZWxicihici1cdTAwM2VkZXYpO1xuIFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoYnItXHUwMDNlZGV2LCBoZWFkKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jXG5pbmRleCBkODdhNWY5ZmE5MmI3Li4wN2VmZDBmYmNmOWNkIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmNcbkBAIC00NjgsMTggJiM0Mzs0NjgsNDggQEAgcnhfaGFuZGxlcl9mdW5jX3QgKmJyX2dldF9yeF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gYnJfaGFuZGxlX2ZyYW1lO1xuIH1cbiBcbi12b2lkIGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdClcbiYjNDM7aW50IGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlLFxuJiM0MztcdFx0IGludCAoKmZyYW1lX2hhbmRsZXIpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikpXG4ge1xuJiM0MztcdHN0cnVjdCBicl9mcmFtZV90eXBlICpmdDtcbiYjNDM7XG4mIzQzO1x0aGxpc3RfZm9yX2VhY2hfZW50cnkoZnQsIFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdCkge1xuJiM0MztcdFx0aWYgKGZ0LVx1MDAzZXR5cGUgPT0gdHlwZSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmdCA9IGttYWxsb2Nfb2JqKCpmdCk7XG4mIzQzO1x0aWYgKCFmdClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRmdC1cdTAwM2V0eXBlID0gdHlwZTtcbiYjNDM7XHRmdC1cdTAwM2VmcmFtZV9oYW5kbGVyID0gZnJhbWVfaGFuZGxlcjtcbiBcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZmdC1cdTAwM2VsaXN0LCBcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4tdm9pZCBicl9kZWxfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQpXG4mIzQzO3ZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgX19iZTE2IHR5cGUpXG4ge1xuLVx0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKnRtcDtcbiYjNDM7XHRzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQ7XG4gXG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsIFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdClcbi1cdFx0aWYgKGZ0ID09IHRtcCkge1xuJiM0MztcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZ0LCBcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHtcbiYjNDM7XHRcdGlmIChmdC1cdTAwM2V0eXBlID09IHR5cGUpIHtcbiBcdFx0XHRobGlzdF9kZWxfcmN1KFx1MDAyNmZ0LVx1MDAzZWxpc3QpO1xuJiM0MztcdFx0XHRrZnJlZV9yY3UoZnQsIHJjdSk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGJyX2RlbF9mcmFtZV9hbGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0O1xuJiM0MztcdHN0cnVjdCBobGlzdF9ub2RlICpuO1xuJiM0MztcbiYjNDM7XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZ0LCBuLCBcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHtcbiYjNDM7XHRcdGhsaXN0X2RlbF9yY3UoXHUwMDI2ZnQtXHUwMDNlbGlzdCk7XG4mIzQzO1x0XHRrZnJlZV9yY3UoZnQsIHJjdSk7XG4mIzQzO1x0fVxuIH1cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX21ycC5jIGIvbmV0L2JyaWRnZS9icl9tcnAuY1xuaW5kZXggZWYxNmQwNzAzOTI0MS4uNTExYWU4YWYzZDAzMyAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfbXJwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfbXJwLmNcbkBAIC04LDExICYjNDM7OCw2IEBAIHN0YXRpYyBjb25zdCB1OCBtcnBfaW5fdGVzdF9kbWFjW0VUSF9BTEVOXSA9IHsgMHgxLCAweDE1LCAweDRlLCAweDAsIDB4MCwgMHgzIH07XG4gXG4gc3RhdGljIGludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbi1zdGF0aWMgc3RydWN0IGJyX2ZyYW1lX3R5cGUgbXJwX2ZyYW1lX3R5cGUgX19yZWFkX21vc3RseSA9IHtcbi1cdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSxcbi1cdC5mcmFtZV9oYW5kbGVyID0gYnJfbXJwX3Byb2Nlc3MsXG4tfTtcbi1cbiBzdGF0aWMgYm9vbCBicl9tcnBfaXNfcmluZ19wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBfcG9ydCxcbiBcdFx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnNfcG9ydCxcbiBcdFx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5AQCAtNDg2LDcgJiM0Mzs0ODEsNyBAQCBzdGF0aWMgdm9pZCBicl9tcnBfZGVsX2ltcGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApXG4gXHRrZnJlZV9yY3UobXJwLCByY3UpO1xuIFxuIFx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1ycF9saXN0KSlcbi1cdFx0YnJfZGVsX2ZyYW1lKGJyLCBcdTAwMjZtcnBfZnJhbWVfdHlwZSk7XG4mIzQzO1x0XHRicl9kZWxfZnJhbWUoYnIsIGNwdV90b19iZTE2KEVUSF9QX01SUCkpO1xuIH1cbiBcbiAvKiBBZGRzIGEgbmV3IE1SUCBpbnN0YW5jZS5cbkBAIC01MzUsMTMgJiM0Mzs1MzAsMTYgQEAgaW50IGJyX21ycF9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSlcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZWxvY2spO1xuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1ycC1cdTAwM2VzX3BvcnQsIHApO1xuIFxuLVx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1ycF9saXN0KSlcbi1cdFx0YnJfYWRkX2ZyYW1lKGJyLCBcdTAwMjZtcnBfZnJhbWVfdHlwZSk7XG4tXG4gXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZtcnAtXHUwMDNldGVzdF93b3JrLCBicl9tcnBfdGVzdF93b3JrX2V4cGlyZWQpO1xuIFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2bXJwLVx1MDAzZWluX3Rlc3Rfd29yaywgYnJfbXJwX2luX3Rlc3Rfd29ya19leHBpcmVkKTtcbiBcdGhsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZtcnAtXHUwMDNlbGlzdCwgXHUwMDI2YnItXHUwMDNlbXJwX2xpc3QpO1xuIFxuJiM0MztcdGlmIChobGlzdF9pc19zaW5ndWxhcl9ub2RlKFx1MDAyNm1ycC1cdTAwM2VsaXN0LCBcdTAwMjZici1cdTAwM2VtcnBfbGlzdCkpIHtcbiYjNDM7XHRcdGVyciA9IGJyX2FkZF9mcmFtZShiciwgY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSwgYnJfbXJwX3Byb2Nlc3MpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBkZWxldGVfbXJwO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRlcnIgPSBicl9tcnBfc3dpdGNoZGV2X2FkZChiciwgbXJwKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZGVsZXRlX21ycDtcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG5pbmRleCBkMzM3YjFjZmI5ODBkLi41MTYzMDE3ZmViNzRkIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG5AQCAtOTM3LDEwICYjNDM7OTM3LDE0IEBAIHN0cnVjdCBicl9mcmFtZV90eXBlIHtcbiBcdGludFx0XHRcdCgqZnJhbWVfaGFuZGxlcikoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcbiBcdFx0XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZVx0bGlzdDtcbiYjNDM7XHRzdHJ1Y3QgcmN1X2hlYWRcdFx0cmN1O1xuIH07XG4gXG4tdm9pZCBicl9hZGRfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQpO1xuLXZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTtcbiYjNDM7aW50IGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlLFxuJiM0MztcdFx0IGludCAoKmZyYW1lX2hhbmRsZXIpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikpO1xuJiM0Mzt2b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlKTtcbiYjNDM7dm9pZCBicl9kZWxfZnJhbWVfYWxsKHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG4gXG4gc3RhdGljIGlubGluZSBib29sIGJyX3J4X2hhbmRsZXJfY2hlY2tfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjE2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfQ0ZNJiMzNDssCiAgICAmIzM0O0JSSURHRV9NUlAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl9hZGRfZnJhbWUmIzM0OywKICAgICYjMzQ7YnJfZGVsX2ZyYW1lJiMzNDssCiAgICAmIzM0O2JyX2RlbF9mcmFtZV9hbGwmIzM0OywKICAgICYjMzQ7YnJfY2ZtX21lcF9jcmVhdGUmIzM0OywKICAgICYjMzQ7YnJfY2ZtX21lcF9kZWxldGUmIzM0OywKICAgICYjMzQ7YnJfbXJwX2FkZCYjMzQ7LAogICAgJiMzNDticl9tcnBfZGVsJiMzNDssCiAgICAmIzM0O2JyX2Rldl9kZWxldGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBicmlkZ2UgRXRoZXJuZXQgZnJhbWUgdHlwZSBoYW5kbGVyIHJlZ2lzdHJhdGlvbi9kZXJlZ2lzdHJhdGlvbiBtZWNoYW5pc20uIFByZXZpb3VzbHksIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGZyYW1lIHR5cGUgc3RydWN0dXJlcyAoc3VjaCBhcyBjZm1fZnJhbWVfdHlwZSBhbmQgbXJwX2ZyYW1lX3R5cGUpIHdlcmUgcmVnaXN0ZXJlZCBkaXJlY3RseSB0byBicmlkZ2UgaW5zdGFuY2VzLCB3aGljaCBjb3VsZCBsZWFkIHRvIGxpc3QgY29ycnVwdGlvbiBhY3Jvc3MgbXVsdGlwbGUgYnJpZGdlcy4gVGhlIHBhdGNoIGNoYW5nZXMgdGhpcyB0byBkeW5hbWljIHBlci1icmlkZ2UgYWxsb2NhdGlvbiBhbmQgUkNVLWJhc2VkIGZyZWVpbmcgb2YgZnJhbWUgdHlwZSBub2RlcywgaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBvbiBhbGxvY2F0aW9uIGZhaWx1cmUsIGFuZCBhZGRzIGNsZWFudXAgb2YgYWxsIHJlZ2lzdGVyZWQgZnJhbWUgdHlwZXMgZHVyaW5nIGJyaWRnZSBkZXZpY2UgZGVsZXRpb24gKGJyX2Rldl9kZWxldGUpLiBUaGVzZSByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNoYW5nZXMgd2FycmFudCBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgY29uY3VycmVuY3kgaXNzdWVzLCBvciBlcnJvciBoYW5kbGluZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI2NmZkYTIyN2IyMjljMGFmY2YyMGUzOTUxNzEyNTI5NjNhZjY2MTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA5OjE2OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9jZm0uYyBiL25ldC9icmlkZ2UvYnJfY2ZtLmMKaW5kZXggZGVhNTZmZmZhMWMxOS4uNTc5MDI0ODU4ODI5OCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9jZm0uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX2NmbS5jCkBAIC00ODksMTEgJiM0Mzs0ODksNiBAQCBzdGF0aWMgaW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGJyX2ZyYW1lX3R5cGUgY2ZtX2ZyYW1lX3R5cGUgX19yZWFkX21vc3RseSA9IHsKLQkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0NGTSksCi0JLmZyYW1lX2hhbmRsZXIgPSBicl9jZm1fZnJhbWVfcngsCi19OwotCiBpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogCQkgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsCiAJCSAgICAgIHN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSAqY29uc3QgY3JlYXRlLApAQCAtNTAxLDYgJiM0Mzs0OTYsNyBAQCBpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogewogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7CiAJc3RydWN0IGJyX2NmbV9tZXAgKm1lcDsKJiM0MzsJaW50IGVycjsKIAogCUFTU0VSVF9SVE5MKCk7CiAKQEAgLTU1OCw4ICYjNDM7NTU0LDEzIEBAIGludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCiAJSU5JVF9ITElTVF9IRUFEKCZhbXA7bWVwLSZndDtwZWVyX21lcF9saXN0KTsKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO21lcC0mZ3Q7Y2NtX3R4X2R3b3JrLCBjY21fdHhfd29ya19leHBpcmVkKTsKIAotCWlmIChobGlzdF9lbXB0eSgmYW1wO2JyLSZndDttZXBfbGlzdCkpCi0JCWJyX2FkZF9mcmFtZShiciwgJmFtcDtjZm1fZnJhbWVfdHlwZSk7CiYjNDM7CWlmIChobGlzdF9lbXB0eSgmYW1wO2JyLSZndDttZXBfbGlzdCkpIHsKJiM0MzsJCWVyciA9IGJyX2FkZF9mcmFtZShiciwgY3B1X3RvX2JlMTYoRVRIX1BfQ0ZNKSwgYnJfY2ZtX2ZyYW1lX3J4KTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlrZnJlZShtZXApOwomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CX0KIAogCWhsaXN0X2FkZF90YWlsX3JjdSgmYW1wO21lcC0mZ3Q7aGVhZCwgJmFtcDtici0mZ3Q7bWVwX2xpc3QpOwogCkBAIC01ODgsNyAmIzQzOzU4OSw3IEBAIHN0YXRpYyB2b2lkIG1lcF9kZWxldGVfaW1wbGVtZW50YXRpb24oc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogCWtmcmVlX3JjdShtZXAsIHJjdSk7CiAKIAlpZiAoaGxpc3RfZW1wdHkoJmFtcDtici0mZ3Q7bWVwX2xpc3QpKQotCQlicl9kZWxfZnJhbWUoYnIsICZhbXA7Y2ZtX2ZyYW1lX3R5cGUpOwomIzQzOwkJYnJfZGVsX2ZyYW1lKGJyLCBjcHVfdG9fYmUxNihFVEhfUF9DRk0pKTsKIH0KIAogaW50IGJyX2NmbV9tZXBfZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaWYuYyBiL25ldC9icmlkZ2UvYnJfaWYuYwppbmRleCBjNTI2MTM0MzFmODg2Li5mZThlOWE0N2UxYWMxIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9pZi5jCkBAIC0zOTcsNiAmIzQzOzM5Nyw4IEBAIHZvaWQgYnJfZGV2X2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDtici0mZ3Q7dGNuX3RpbWVyKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtici0mZ3Q7Z2Nfd29yayk7CiAKJiM0MzsJYnJfZGVsX2ZyYW1lX2FsbChicik7CiYjNDM7CiAJYnJfc3lzZnNfZGVsYnIoYnItJmd0O2Rldik7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoYnItJmd0O2RldiwgaGVhZCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKaW5kZXggZDg3YTVmOWZhOTJiNy4uMDdlZmQwZmJjZjljZCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwpAQCAtNDY4LDE4ICYjNDM7NDY4LDQ4IEBAIHJ4X2hhbmRsZXJfZnVuY190ICpicl9nZXRfcnhfaGFuZGxlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXJldHVybiBicl9oYW5kbGVfZnJhbWU7CiB9CiAKLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KQomIzQzO2ludCBicl9hZGRfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBfX2JlMTYgdHlwZSwKJiM0MzsJCSBpbnQgKCpmcmFtZV9oYW5kbGVyKShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LAomIzQzOwkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSkKIHsKJiM0MzsJc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0OwomIzQzOwomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeShmdCwgJmFtcDtici0mZ3Q7ZnJhbWVfdHlwZV9saXN0LCBsaXN0KSB7CiYjNDM7CQlpZiAoZnQtJmd0O3R5cGUgPT0gdHlwZSkKJiM0MzsJCQlyZXR1cm4gLUVFWElTVDsKJiM0MzsJfQomIzQzOwomIzQzOwlmdCA9IGttYWxsb2Nfb2JqKCpmdCk7CiYjNDM7CWlmICghZnQpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJZnQtJmd0O3R5cGUgPSB0eXBlOwomIzQzOwlmdC0mZ3Q7ZnJhbWVfaGFuZGxlciA9IGZyYW1lX2hhbmRsZXI7CiAJaGxpc3RfYWRkX2hlYWRfcmN1KCZhbXA7ZnQtJmd0O2xpc3QsICZhbXA7YnItJmd0O2ZyYW1lX3R5cGVfbGlzdCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCi12b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdCkKJiM0Mzt2b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlKQogewotCXN0cnVjdCBicl9mcmFtZV90eXBlICp0bXA7CiYjNDM7CXN0cnVjdCBicl9mcmFtZV90eXBlICpmdDsKIAotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJmFtcDtici0mZ3Q7ZnJhbWVfdHlwZV9saXN0LCBsaXN0KQotCQlpZiAoZnQgPT0gdG1wKSB7CiYjNDM7CWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZ0LCAmYW1wO2JyLSZndDtmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHsKJiM0MzsJCWlmIChmdC0mZ3Q7dHlwZSA9PSB0eXBlKSB7CiAJCQlobGlzdF9kZWxfcmN1KCZhbXA7ZnQtJmd0O2xpc3QpOwomIzQzOwkJCWtmcmVlX3JjdShmdCwgcmN1KTsKIAkJCXJldHVybjsKIAkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgYnJfZGVsX2ZyYW1lX2FsbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQ7CiYjNDM7CXN0cnVjdCBobGlzdF9ub2RlICpuOwomIzQzOwomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZ0LCBuLCAmYW1wO2JyLSZndDtmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHsKJiM0MzsJCWhsaXN0X2RlbF9yY3UoJmFtcDtmdC0mZ3Q7bGlzdCk7CiYjNDM7CQlrZnJlZV9yY3UoZnQsIHJjdSk7CiYjNDM7CX0KIH0KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXJwLmMgYi9uZXQvYnJpZGdlL2JyX21ycC5jCmluZGV4IGVmMTZkMDcwMzkyNDEuLjUxMWFlOGFmM2QwMzMgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbXJwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9tcnAuYwpAQCAtOCwxMSAmIzQzOzgsNiBAQCBzdGF0aWMgY29uc3QgdTggbXJwX2luX3Rlc3RfZG1hY1tFVEhfQUxFTl0gPSB7IDB4MSwgMHgxNSwgMHg0ZSwgMHgwLCAweDAsIDB4MyB9OwogCiBzdGF0aWMgaW50IGJyX21ycF9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBza19idWZmICpza2IpOwogCi1zdGF0aWMgc3RydWN0IGJyX2ZyYW1lX3R5cGUgbXJwX2ZyYW1lX3R5cGUgX19yZWFkX21vc3RseSA9IHsKLQkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX01SUCksCi0JLmZyYW1lX2hhbmRsZXIgPSBicl9tcnBfcHJvY2VzcywKLX07Ci0KIHN0YXRpYyBib29sIGJyX21ycF9pc19yaW5nX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcF9wb3J0LAogCQkJCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnNfcG9ydCwKIAkJCQlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KQpAQCAtNDg2LDcgJiM0Mzs0ODEsNyBAQCBzdGF0aWMgdm9pZCBicl9tcnBfZGVsX2ltcGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApCiAJa2ZyZWVfcmN1KG1ycCwgcmN1KTsKIAogCWlmIChobGlzdF9lbXB0eSgmYW1wO2JyLSZndDttcnBfbGlzdCkpCi0JCWJyX2RlbF9mcmFtZShiciwgJmFtcDttcnBfZnJhbWVfdHlwZSk7CiYjNDM7CQlicl9kZWxfZnJhbWUoYnIsIGNwdV90b19iZTE2KEVUSF9QX01SUCkpOwogfQogCiAvKiBBZGRzIGEgbmV3IE1SUCBpbnN0YW5jZS4KQEAgLTUzNSwxMyAmIzQzOzUzMCwxNiBAQCBpbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKQogCXNwaW5fdW5sb2NrX2JoKCZhbXA7YnItJmd0O2xvY2spOwogCXJjdV9hc3NpZ25fcG9pbnRlcihtcnAtJmd0O3NfcG9ydCwgcCk7CiAKLQlpZiAoaGxpc3RfZW1wdHkoJmFtcDtici0mZ3Q7bXJwX2xpc3QpKQotCQlicl9hZGRfZnJhbWUoYnIsICZhbXA7bXJwX2ZyYW1lX3R5cGUpOwotCiAJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDttcnAtJmd0O3Rlc3Rfd29yaywgYnJfbXJwX3Rlc3Rfd29ya19leHBpcmVkKTsKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO21ycC0mZ3Q7aW5fdGVzdF93b3JrLCBicl9tcnBfaW5fdGVzdF93b3JrX2V4cGlyZWQpOwogCWhsaXN0X2FkZF90YWlsX3JjdSgmYW1wO21ycC0mZ3Q7bGlzdCwgJmFtcDtici0mZ3Q7bXJwX2xpc3QpOwogCiYjNDM7CWlmIChobGlzdF9pc19zaW5ndWxhcl9ub2RlKCZhbXA7bXJwLSZndDtsaXN0LCAmYW1wO2JyLSZndDttcnBfbGlzdCkpIHsKJiM0MzsJCWVyciA9IGJyX2FkZF9mcmFtZShiciwgY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSwgYnJfbXJwX3Byb2Nlc3MpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGRlbGV0ZV9tcnA7CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBicl9tcnBfc3dpdGNoZGV2X2FkZChiciwgbXJwKTsKIAlpZiAoZXJyKQogCQlnb3RvIGRlbGV0ZV9tcnA7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCmluZGV4IGQzMzdiMWNmYjk4MGQuLjUxNjMwMTdmZWI3NGQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCkBAIC05MzcsMTAgJiM0Mzs5MzcsMTQgQEAgc3RydWN0IGJyX2ZyYW1lX3R5cGUgewogCWludAkJCSgqZnJhbWVfaGFuZGxlcikoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwKIAkJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQlsaXN0OwomIzQzOwlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKIH07CiAKLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTsKLXZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTsKJiM0MztpbnQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgX19iZTE2IHR5cGUsCiYjNDM7CQkgaW50ICgqZnJhbWVfaGFuZGxlcikoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwKJiM0MzsJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikpOwomIzQzO3ZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgX19iZTE2IHR5cGUpOwomIzQzO3ZvaWQgYnJfZGVsX2ZyYW1lX2FsbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgYnJfcnhfaGFuZGxlcl9jaGVja19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMxNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJyaWRnaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCB0YXJnZXRpbmcgdGhlIGBuZXQvYnJpZGdlYCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0b3VjaGluZyBgYnJfY2ZtLmNgLCBgYnJfaWYuY2AsIGBicl9pbnB1dC5jYCwgYGJyX21ycC5jYCwgYW5kIGBicl9wcml2YXRlLmhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtGaW5hbGx5LCBzb21lb25lIGFkZHJlc3NlZCB0aGF0IHNoYXJlZCBgc3RydWN0IGJyX2ZyYW1lX3R5cGVgIGlzc3VlLiYjMzQ7IEkmIzM5O3ZlIHNlZW4gdGhhdCBraW5kIG9mIHN0YXRpYyBzdHJ1Y3R1cmUgY2F1c2UgaGVhZGFjaGVzIGZvciBhZ2VzLgoKTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBkaWZmIGNvbmZpcm1zIG15IHN1c3BpY2lvbi4gVGhlIGNvcmUgcHJvYmxlbSwgYXMgSSByZWNhbGwsIHdhcyB0aGF0IGBicl9hZGRfZnJhbWVgIHdhcyB1c2luZyBzdGF0aWNhbGx5IGRlY2xhcmVkIGBzdHJ1Y3QgYnJfZnJhbWVfdHlwZWAgaW5zdGFuY2VzIGxpa2UgYGNmbV9mcmFtZV90eXBlYCBhbmQgYG1ycF9mcmFtZV90eXBlYC4gVGhhdCYjMzk7cyBhIHRleHRib29rIHJlY2lwZSBmb3IgbGlzdCBjb3JydXB0aW9uIGFuZCByYWNlIGNvbmRpdGlvbnMgaWYgbXVsdGlwbGUgYnJpZGdlcyB3ZXJlIGFkZGluZyB0aGUgc2FtZSBpbnN0YW5jZSwgb3IgaWYgdGhlcmUgd2FzIGNvbmN1cnJlbnQgcmVnaXN0cmF0aW9uLiBUaGUgc2hhcmVkIGBzdHJ1Y3QgaGxpc3Rfbm9kZSBsaXN0YCB3aXRoaW4gdGhvc2Ugc3RhdGljIGluc3RhbmNlcyB3YXMgdGhlIGN1bHByaXQuCgpUaGlzIHBhdGNoIHNtYXJ0bHkgYWRkcmVzc2VzIGl0IGJ5IGFsbG9jYXRpbmcgYSAqZHluYW1pYyogYHN0cnVjdCBicl9mcmFtZV90eXBlYCBwZXIgYnJpZGdlIHVzaW5nIGBrbWFsbG9jX29iamAuIFRoaXMgaXMgdGhlIHJpZ2h0IGFwcHJvYWNoLiBUaGVuLCBgYnJfZGVsX2ZyYW1lYCBub3cgY2FsbHMgYGtmcmVlX3JjdShmdCwgcmN1KWAgdG8gcmVsZWFzZSB0aGUgYWxsb2NhdGVkIG1lbW9yeSwgYW5kIGNydWNpYWxseSwgYGJyX2RlbF9mcmFtZV9hbGwoYnIpYCBoYXMgYmVlbiBhZGRlZCB0byBgYnJfZGV2X2RlbGV0ZWAgdG8gY2xlYW4gdXAgdGhlIGZyYW1lIHR5cGVzIGR1cmluZyBicmlkZ2UgZGV2aWNlIGRlbGV0aW9uLiBHb29kLCB0aG9yb3VnaCBjbGVhbnVwIGlzIGVzc2VudGlhbCBoZXJlLgoKVGhlIGNoYW5nZXMgaW4gYGJyX2NmbS5jYCBhbmQgYGJyX21ycC5jYCB1cGRhdGluZyBmdW5jdGlvbiBzaWduYXR1cmVzIHRvIG1hdGNoIHRoZSBuZXcgYGJyX2FkZF9mcmFtZWAgYW5kIGBicl9kZWxfZnJhbWVgIGFyZSBhcyBleHBlY3RlZCwgYW5kIGdvb2QgdG8gc2VlLiBUaGUgZXJyb3IgaGFuZGxpbmcgaXMgYWxzbyBpbiBwbGFjZSwgd2hpY2ggaXMgYSB2ZXJ5IGdvb2QgYWRkaXRpb24uIEl0JiMzOTtzIGFsc28gZ3JlYXQgdGhhdCBgYnJfaW5wdXQuY2AgaXMgdXBkYXRlZCwgdG9vLiBBbmQgb2YgY291cnNlLCB0aGUgYWRkaXRpb24gb2YgdGhlIGBzdHJ1Y3QgcmN1X2hlYWQgcmN1O2AgbWVtYmVyIGluIGBzdHJ1Y3QgYnJfZnJhbWVfdHlwZWAgd2l0aGluIGBicl9wcml2YXRlLmhgIGlzIG5lY2Vzc2FyeSB0byBzdXBwb3J0IHRoZSBSQ1UtYmFzZWQgbWVtb3J5IGZyZWVpbmcuCgpOb3csIGJlZm9yZSBJIGdpdmUgdGhpcyBhIHJ1YmJlciBzdGFtcCwgSSYjMzk7bSBnb2luZyB0byBydW4gYSBxdWljayBjaGVjayBvbiB0aGUgS2NvbmZpZyByZXF1aXJlbWVudHMgZm9yIGJyaWRnZSwgQ0ZNLCBhbmQgTVJQLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgZXZlcnl0aGluZyYjMzk7cyBjb25maWd1cmVkIGFzIGV4cGVjdGVkIGFuZCB0aGF0IGFueSBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3RseSBoYW5kbGVkLiBJIHRoaW5rIGEgcXVpY2sgZ3JlcHBpbmcgc2Vzc2lvbiB0aHJvdWdoIHRoZSBgbmV0L2JyaWRnZWAgS2NvbmZpZyBmaWxlcyBzaG91bGQgcHJvdmlkZSB3aGF0IEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDRk18TVJQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvS2NvbmZpZz01MD1jb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTYzLVxubmV0L2JyaWRnZS9LY29uZmlnOjY0OmNvbmZpZyBCUklER0VfTVJQXG5uZXQvYnJpZGdlL0tjb25maWc6NjU6XHRib29sIFwmIzM0O01SUCBwcm90b2NvbFwmIzM0O1xubmV0L2JyaWRnZS9LY29uZmlnLTY2LVx0ZGVwZW5kcyBvbiBCUklER0Vcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNjgtXHRoZWxwXG5uZXQvYnJpZGdlL0tjb25maWc6Njk6XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHRvIHJ1biBNUlBcbm5ldC9icmlkZ2UvS2NvbmZpZy03MC1cdCAgcHJvdG9jb2wgdG8gZGV0ZWN0IGxvb3BzXG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTc1LVxubmV0L2JyaWRnZS9LY29uZmlnOjc2OmNvbmZpZyBCUklER0VfQ0ZNXG5uZXQvYnJpZGdlL0tjb25maWc6Nzc6XHRib29sIFwmIzM0O0NGTSBwcm90b2NvbFwmIzM0O1xubmV0L2JyaWRnZS9LY29uZmlnLTc4LVx0ZGVwZW5kcyBvbiBCUklER0Vcbm5ldC9icmlkZ2UvS2NvbmZpZy03OS1cdGhlbHBcbm5ldC9icmlkZ2UvS2NvbmZpZzo4MDpcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgdG8gcnVuIENGTVxubmV0L2JyaWRnZS9LY29uZmlnLTgxLVx0ICBwcm90b2NvbCBhY2NvcmRpbmcgdG8gODAyLjFRIHNlY3Rpb24gMTIuMTRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Njg2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBCcmlkZ2UgQ29uZmlndXJhdGlvbiBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJyaWRnZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gZGlnIGluISBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyBieSBleGFtaW5pbmcgdGhlIGJ1aWxkIHN5c3RlbSBmaWxlcy4gSSYjMzk7bSBnb2luZyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgbmV0L2JyaWRnZS9NYWtlZmlsZWAgYW5kIGBuZXQvYnJpZGdlL0tjb25maWdgLiBUaGVzZSB0d28gZmlsZXMgc2hvdWxkIGdpdmUgbWUgYSBjb21wbGV0ZSBwaWN0dXJlLiBUaGUgTWFrZWZpbGUgd2lsbCBsYXkgb3V0IHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgd2hpbGUgdGhlIEtjb25maWcgZmlsZSBob2xkcyBhbGwgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgaGVscCB0ZXh0LiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBzZWUgZXZlcnl0aGluZyByZWxhdGVkIHRvIGJyaWRnaW5nIGFuZCBob3cgaXQmIzM5O3MgZW5hYmxlZCBhbmQgY29uZmlndXJlZCBhdCBjb21waWxlIHRpbWUuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgSUVFRSA4MDIuMWQgZXRoZXJuZXQgYnJpZGdpbmcgbGF5ZXIuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19CUklER0UpICYjNDM7PSBicmlkZ2Uub1xuICAgNzpcdFxuICAgODpcdGJyaWRnZS15XHQ6PSBici5vIGJyX2RldmljZS5vIGJyX2ZkYi5vIGJyX2ZvcndhcmQubyBicl9pZi5vIGJyX2lucHV0Lm8gXFxcbiAgIDk6XHRcdFx0XHRicl9pb2N0bC5vIGJyX3N0cC5vIGJyX3N0cF9icGR1Lm8gXFxcbiAgMTA6XHRcdFx0XHRicl9zdHBfaWYubyBicl9zdHBfdGltZXIubyBicl9uZXRsaW5rLm8gXFxcbiAgMTE6XHRcdFx0XHRicl9uZXRsaW5rX3R1bm5lbC5vIGJyX2FycF9uZF9wcm94eS5vXG4gIDEyOlx0XG4gIDEzOlx0YnJpZGdlLSQoQ09ORklHX1NZU0ZTKSAmIzQzOz0gYnJfc3lzZnNfaWYubyBicl9zeXNmc19ici5vXG4gIDE0Olx0XG4gIDE1Olx0YnJpZGdlLSQoc3Vic3QgbSx5LCQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpKSAmIzQzOz0gYnJfbmZfY29yZS5vXG4gIDE2Olx0XG4gIDE3Olx0YnJfbmV0ZmlsdGVyLXkgOj0gYnJfbmV0ZmlsdGVyX2hvb2tzLm9cbiAgMTg6XHRicl9uZXRmaWx0ZXItJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpICYjNDM7PSBicl9uZXRmaWx0ZXJfaXB2Ni5vXG4gIDE5Olx0b2JqLSQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpICYjNDM7PSBicl9uZXRmaWx0ZXIub1xuICAyMDpcdFxuICAyMTpcdGJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgJiM0Mzs9IGJyX211bHRpY2FzdC5vIGJyX21kYi5vIGJyX211bHRpY2FzdF9laHQub1xuICAyMjpcdFxuICAyMzpcdGJyaWRnZS0kKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpICYjNDM7PSBicl92bGFuLm8gYnJfdmxhbl90dW5uZWwubyBicl92bGFuX29wdGlvbnMubyBicl9tc3Qub1xuICAyNDpcdFxuICAyNTpcdGJyaWRnZS0kKENPTkZJR19ORVRfU1dJVENIREVWKSAmIzQzOz0gYnJfc3dpdGNoZGV2Lm9cbiAgMjY6XHRcbiAgMjc6XHRvYmotJChDT05GSUdfTkVURklMVEVSKSAmIzQzOz0gbmV0ZmlsdGVyL1xuICAyODpcdFxuICAyOTpcdGJyaWRnZS0kKENPTkZJR19CUklER0VfTVJQKVx0JiM0Mzs9IGJyX21ycF9zd2l0Y2hkZXYubyBicl9tcnAubyBicl9tcnBfbmV0bGluay5vXG4gIDMwOlx0XG4gIDMxOlx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9DRk0pXHQmIzQzOz0gYnJfY2ZtLm8gYnJfY2ZtX25ldGxpbmsub1xuICAzMjpcdFxuICAzMzpcdGlmZGVmIENPTkZJR19HQ09WX1BST0ZJTEVfTkVURklMVEVSXG4gIDM0Olx0R0NPVl9QUk9GSUxFX2JyX25mX2NvcmUubyA6PSB5XG4gIDM1Olx0R0NPVl9QUk9GSUxFX2JyX25ldGZpbHRlcl9ob29rcy5vIDo9IHlcbiAgMzY6XHRHQ09WX1BST0ZJTEVfYnJfbmV0ZmlsdGVyX2lwdjYubyA6PSB5XG4gIDM3Olx0ZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjAyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBNUlAgYW5kIENGTSBDb25maWd1cmF0aW9uIGFuZCBJbnZvY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgdGVjaG5pY2FsIHVuZGVycGlubmluZ3Mgb2YgaG93IE1SUCAoTXVsdGlwbGUgUmVnaXN0cmF0aW9uIFByb3RvY29sKSBhbmQgQ0ZNIChDb25uZWN0aXZpdHkgRmF1bHQgTWFuYWdlbWVudCkgYXJlIGNvbmZpZ3VyZWQgYW5kIGFjdHVhbGx5IGNhbGxlZCDigJMgaG93IHRoZXkmIzM5O3JlICppbnZva2VkKi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBob3cgdGhlc2UgdGhpbmdzIGFyZSB3aXJlZCB1cC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBOZXRsaW5rIGlzIGludm9sdmVkIGhlcmUsIGdpdmVuIHRoZSBrZXJuZWwtbGV2ZWwgbmF0dXJlIG9mIHRoZXNlIHByb3RvY29scywgc28gdGhhdCYjMzk7cyB0aGUgYW5nbGUgSSYjMzk7bSB0YWtpbmcuIFNvIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCB0aGUgTmV0bGluayBlbnRyeSBwb2ludHMgZm9yIGJvdGggQ0ZNIGFuZCBNUlAuIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBob29rcywgdGhlIGNyaXRpY2FsIGNvbnRyb2wgcG9pbnRzLCB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBhbmQgb3BlcmF0aW9uIG9mIHRoZXNlIHByb3RvY29scyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIHN5c3RlbS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBiYXNlIHRvIHVuZGVyc3RhbmQgaG93IHRvIGludGVyYWN0IHdpdGggdGhlbSBhdCBhIHN5c3RlbSBsZXZlbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9jZm1fbWVwX2NyZWF0ZXxicl9tcnBfYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9jZm0uYz0zNzA9c3RhdGljIGludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvYnJpZGdlL2JyX2NmbS5jLTQ5MS1cbm5ldC9icmlkZ2UvYnJfY2ZtLmM6NDkyOmludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX2NmbS5jLTQ5My1cdFx0ICAgICAgY29uc3QgdTMyIGluc3RhbmNlLFxubmV0L2JyaWRnZS9icl9jZm0uYzo0OTQ6XHRcdCAgICAgIHN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSAqY29uc3QgY3JlYXRlLFxubmV0L2JyaWRnZS9icl9jZm0uYy00OTUtXHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM9OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzo5OmJyX2NmbV9tZXBfY3JlYXRlX3BvbGljeVtJRkxBX0JSSURHRV9DRk1fTUVQX0NSRUFURV9NQVggJiM0MzsgMV0gPSB7XG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTAtXHRbSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfVU5TUEVDXVx0PSB7IC50eXBlID0gTkxBX1JFSkVDVCB9LFxuLS1cbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYz03Mj1icl9jZm1fcG9saWN5W0lGTEFfQlJJREdFX0NGTV9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTc0LVx0W0lGTEFfQlJJREdFX0NGTV9NRVBfQ1JFQVRFXVx0XHQ9XG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM6NzU6XHRcdFx0XHROTEFfUE9MSUNZX05FU1RFRChicl9jZm1fbWVwX2NyZWF0ZV9wb2xpY3kpLFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTc2LVx0W0lGTEFfQlJJREdFX0NGTV9NRVBfREVMRVRFXVx0XHQ9XG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jPTkyPXN0YXRpYyBpbnQgYnJfbWVwX2NyZWF0ZV9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTk1LVx0c3RydWN0IG5sYXR0ciAqdGJbSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfTUFYICYjNDM7IDFdO1xubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjk2Olx0c3RydWN0IGJyX2NmbV9tZXBfY3JlYXRlIGNyZWF0ZTtcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy05Ny1cdHUzMiBpbnN0YW5jZTtcbi0tXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTAwLVx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfTUFYLCBhdHRyLFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjEwMTpcdFx0XHQgICAgICAgYnJfY2ZtX21lcF9jcmVhdGVfcG9saWN5LCBleHRhY2spO1xubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTEwMi1cdGlmIChlcnIpXG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTEyOC1cbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzoxMjk6XHRyZXR1cm4gYnJfY2ZtX21lcF9jcmVhdGUoYnIsIGluc3RhbmNlLCBcdTAwMjZjcmVhdGUsIGV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTMwLX1cbi0tXG5uZXQvYnJpZGdlL2JyX21ycC5jPTQyMT1zdGF0aWMgdm9pZCBicl9tcnBfZGVsX2ltcGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApXG4tLVxubmV0L2JyaWRnZS9icl9tcnAuYy00ODktICovXG5uZXQvYnJpZGdlL2JyX21ycC5jOjQ5MDppbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKVxubmV0L2JyaWRnZS9icl9tcnAuYy00OTEte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX25ldGxpbmsuYz0zMT1zdGF0aWMgaW50IGJyX21ycF9pbnN0YW5jZV9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jLTYxLVx0aWYgKGNtZCA9PSBSVE1fU0VUTElOSylcbm5ldC9icmlkZ2UvYnJfbXJwX25ldGxpbmsuYzo2MjpcdFx0cmV0dXJuIGJyX21ycF9hZGQoYnIsIFx1MDAyNmluc3QpO1xubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jLTYzLVx0ZWxzZVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaC04LVxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oOjk6c3RydWN0IGJyX2NmbV9tZXBfY3JlYXRlIHtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaC0xMC1cdGVudW0gYnJfY2ZtX2RvbWFpbiBkb21haW47IC8qIERvbWFpbiBmb3IgdGhpcyBNRVAgKi9cbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTQtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmg6MTU6aW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaC0xNi1cdFx0ICAgICAgY29uc3QgdTMyIGluc3RhbmNlLFxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oOjE3Olx0XHQgICAgICBzdHJ1Y3QgYnJfY2ZtX21lcF9jcmVhdGUgKmNvbnN0IGNyZWF0ZSxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaC0xOC1cdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmg9MTE3PXN0cnVjdCBicl9jZm1fbWVwIHtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTIwLVx0dTMyXHRcdFx0XHRpbnN0YW5jZTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaDoxMjE6XHRzdHJ1Y3QgYnJfY2ZtX21lcF9jcmVhdGVcdGNyZWF0ZTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaC0xMjItXHRzdHJ1Y3QgYnJfY2ZtX21lcF9jb25maWdcdGNvbmZpZztcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfbXJwLmg9NTk9ZW51bSBicl9tcnBfaHdfc3VwcG9ydCB7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlX21ycC5oLTY1LS8qIGJyX21ycC5jICovXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfbXJwLmg6NjY6aW50IGJyX21ycF9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfbXJwLmgtNjctaW50IGJyX21ycF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMzMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gRnJhbWUgVHlwZSBMb29rdXAqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBmcmFtZSB0eXBlIGxvb2t1cCBwcm9jZXNzIGR1cmluZyBwYWNrZXQgcmVjZXB0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBicmlkZ2luZyBjb250ZXh0LiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3lzdGVtIGRldGVybWluZXMgd2hhdCAqa2luZCogb2YgZnJhbWUgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHdoZW4gYSBwYWNrZXQgY29tZXMgaW4uIFRoaXMgcmVhbGx5IGdldHMgZG93biB0byB0aGUgY29yZSBvZiB0aGUgYnJpZGdlJiMzOTtzIGhhbmRsaW5nIGxvZ2ljLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGJyX2lucHV0LmNgIGFuZCBzcGVjaWZpY2FsbHkgYGJyX2hhbmRsZV9mcmFtZWAsIGFzIHRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgZnJhbWUgcHJvY2Vzc2luZy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHN5c3RlbSBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuLCBzYXksIGEgc3RhbmRhcmQgRXRoZXJuZXQgZnJhbWUsIGEgVkxBTi10YWdnZWQgZnJhbWUsIG9yIGFueXRoaW5nIGVsc2UgaXQgbWlnaHQgZW5jb3VudGVyLiBVbmRlcnN0YW5kaW5nIHRoaXMgbG9va3VwIHByb2Nlc3MgaXMgY3J1Y2lhbCBmb3IgdHJvdWJsZXNob290aW5nIHBvdGVudGlhbCBpc3N1ZXMgaW4gZnJhbWUgaGFuZGxpbmcsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdW51c3VhbCBvciBjdXN0b21pemVkIGZyYW1lIGZvcm1hdHMsIGFuZCBmb3Igb3B0aW1pemluZyBwZXJmb3JtYW5jZSBpZiBJIG5lZWQgdG8uIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmcmFtZV90eXBlX2xpc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX2RldmljZS5jPTQ4MD12b2lkIGJyX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNTA1LVx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNmJyLVx1MDAzZWZkYl9saXN0KTtcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6NTA2Olx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCk7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTUwNy0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX01SUClcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9MzIzPXN0YXRpYyBpbnQgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTMyNy1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozMjg6XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wLCBcdTAwMjZwLVx1MDAzZWJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdClcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMjktXHRcdGlmICh1bmxpa2VseSh0bXAtXHUwMDNldHlwZSA9PSBza2ItXHUwMDNlcHJvdG9jb2wpKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz00NzE9aW50IGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlLFxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NzYtXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDc3Olx0aGxpc3RfZm9yX2VhY2hfZW50cnkoZnQsIFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdCkge1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ3OC1cdFx0aWYgKGZ0LVx1MDAzZXR5cGUgPT0gdHlwZSlcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDg3LVx0ZnQtXHUwMDNlZnJhbWVfaGFuZGxlciA9IGZyYW1lX2hhbmRsZXI7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDg4Olx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNmZ0LVx1MDAzZWxpc3QsIFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCk7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDg5LVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz00OTM9dm9pZCBicl9kZWxfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBfX2JlMTYgdHlwZSlcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDk2LVxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjQ5NzpcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZ0LCBcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00OTgtXHRcdGlmIChmdC1cdTAwM2V0eXBlID09IHR5cGUpIHtcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9NTA2PXZvaWQgYnJfZGVsX2ZyYW1lX2FsbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTUxMC1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo1MTE6XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZ0LCBuLCBcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy01MTItXHRcdGhsaXN0X2RlbF9yY3UoXHUwMDI2ZnQtXHUwMDNlbGlzdCk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NTAwPXN0cnVjdCBuZXRfYnJpZGdlIHtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01MDItXHRzcGlubG9ja190XHRcdFx0aGFzaF9sb2NrO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NTAzOlx0c3RydWN0IGhsaXN0X2hlYWRcdFx0ZnJhbWVfdHlwZV9saXN0O1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTA0LVx0c3RydWN0IG5ldF9kZXZpY2VcdFx0KmRldjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzOTgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogQ29yZSBOZXR3b3JraW5nIENvZGUqKgoKT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGNvcmUgbmV0d29ya2luZyBjb2RlIOKAkyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBFdGhlcm5ldCBicmlkZ2luZywgQ0ZNIChDb25uZWN0aXZpdHkgRmF1bHQgTWFuYWdlbWVudCksIGFuZCBNUlAgKE11bHRpcGxlIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkuIFRoZSBnb29kIG5ld3MgaXMsIGZyb20gd2hhdCBJIGNhbiBzZWUsIHRoaXMgKnNob3VsZCogYmUgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgdXN1YWwgc3VzcGVjdHM6IHN0YW5kYXJkIGJyaWRnZSBuZXRkZXZpY2UgY3JlYXRpb24gdXNpbmcgYGlwIGxpbmsgYWRkIG5hbWUgYnIwIHR5cGUgYnJpZGdlYCwgbmV0bGluayBjb25maWd1cmF0aW9uIG9mIENGTS9NUlAgKGxpa2VseSB2aWEgYFJUTV9TRVRMSU5LYCBhbmQgYHJ0bmxgKSwgcGFja2V0IHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uIHZpYSB0aGUgY29tbW9uIGludGVyZmFjZXMgbGlrZSBUQVAvdmV0aC9sb29wYmFjaywgYW5kIG9mIGNvdXJzZSB0aGUgY3JpdGljYWwgYGJyX3Byb2Nlc3NfZnJhbWVfdHlwZWAgZnVuY3Rpb24gZm9yIGJyaWRnZSBmcmFtZSBwcm9jZXNzaW5nLCBhbG9uZyB3aXRoIHRoZSBicmlkZ2UgZGV2aWNlIGRlbGV0aW9uIHJvdXRpbmVzLiBTbywgeWVzLCB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IG9mICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgaXMgc3BvdCBvbiEKCk5vdywgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4KCjEuICAqKmBXb3J0aEZ1enppbmdgKio6IEFic29sdXRlbHksIGNvbmZpcm1lZC4gV2UgaGF2ZSBlbm91Z2ggYWNjZXNzaWJpbGl0eSB0byBwdXQgdGhpcyB0aHJvdWdoIGl0cyBwYWNlcy4KMi4gICoqYFJlYXNvbmluZ2AqKjogVGhlIHNpZ25pZmljYW50IGNoYW5nZXMgaGVyZSBhcmUgdGhlIHJlZmFjdG9yaW5nIG9mIGJyaWRnZSBmcmFtZSB0eXBlIHJlZ2lzdHJhdGlvbiBhbmQgZGVyZWdpc3RyYXRpb24uIFRoZXkgd2VudCBmcm9tIHN0YXRpYyBzdHJ1Y3R1cmVzIHRvIHBlci1icmlkZ2UgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGVudHJpZXMgbWFuYWdlZCB3aXRoIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkuIEkmIzM5O20gYWxzbyBzZWVpbmcgdXBkYXRlZCBlcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cCBwYXRocyBzcHJpbmtsZWQgdGhyb3VnaG91dCBDRk0sIE1SUCwgYW5kIHRoZSBicmlkZ2UgZGVsZXRpb24gcm91dGluZXMuIFRoaXMgaXMgKnJlYWNoYWJsZSogYmVjYXVzZSBicmlkZ2luZyBmdW5jdGlvbmFsaXR5IHdpdGggQ0ZNL01SUCBwcm90b2NvbHMgaXMgYWNjZXNzaWJsZSB2aWEgbmV0bGluayBhbmQgcGFja2V0IHJlY2VwdGlvbi4gU3BlY2lmaWNhbGx5LCB3ZSBjYW4gY3JhZnQgcGFja2V0cyB0aGF0IGZsb3cgdGhyb3VnaCB0aGUgbmV0bGluayBpbnRlcmZhY2UsIGFuZCB0aHJvdWdoIHRoZSBicmlkZ2UgcHJvY2Vzc2luZyB0aGF0IHRhcmdldHMgdGhvc2UgcHJvdG9jb2xzLgozLiAgKipgRm9jdXNTeW1ib2xzYCoqOiBXZSBuZWVkIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zIGFuZCBwYXJ0cyBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIHNlbGVjdCBub24tdWJpcXVpdG91cyBmdW5jdGlvbnMsIHRoYXQgd2VyZSBtb2RpZmllZCwgb3IgZGlyZWN0bHkgY2FsbCB0aGUgbW9kaWZpZWQgY29kZS4gSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGRpcmVjdGx5IHRhcmdldDoKCiAgICAqICAgYGJyX2FkZF9mcmFtZWAKICAgICogICBgYnJfZGVsX2ZyYW1lYAogICAgKiAgIGBicl9kZWxfZnJhbWVfYWxsYAogICAgKiAgIGBicl9jZm1fbWVwX2NyZWF0ZWAKICAgICogICBgYnJfY2ZtX21lcF9kZWxldGVgCiAgICAqICAgYGJyX21ycF9hZGRgCiAgICAqICAgYGJyX21ycF9kZWxfaW1wbGAgLyBgYnJfbXJwX2RlbGAKICAgICogICBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYAogICAgKiAgIGBicl9kZXZfZGVsZXRlYAoKICAgIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhvc2UgZXhhY3Qgc3ltYm9sIG5hbWVzIHdpdGhpbiBgYnJfY2ZtLmNgIGFuZCBgYnJfbXJwLmNgIHRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgYnV0IHRoYXQmIzM5O3MgbXkgdGFyZ2V0IGxpc3QuIFdlIGhhdmUgYSBjbGVhciBwYXRoIHRvIGdlbmVyYXRpbmcgZnV6emVyIGlucHV0IGJhc2VkIG9uIHRoZSBuZXRsaW5rIGludGVyZmFjZXMgYW5kIHBhY2tldCBmbG93cywgYW5kIHRob3NlIGZ1bmN0aW9uIGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9jZm1fbWVwX2RlbGV0ZXxicl9tcnBfZGVsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9jZm0uYz01NzA9c3RhdGljIHZvaWQgbWVwX2RlbGV0ZV9pbXBsZW1lbnRhdGlvbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9jZm0uYy01OTQtXG5uZXQvYnJpZGdlL2JyX2NmbS5jOjU5NTppbnQgYnJfY2ZtX21lcF9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxubmV0L2JyaWRnZS9icl9jZm0uYy01OTYtXHRcdCAgICAgIGNvbnN0IHUzMiBpbnN0YW5jZSxcbi0tXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM9MTc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM6MTg6YnJfY2ZtX21lcF9kZWxldGVfcG9saWN5W0lGTEFfQlJJREdFX0NGTV9NRVBfREVMRVRFX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xOS1cdFtJRkxBX0JSSURHRV9DRk1fTUVQX0RFTEVURV9VTlNQRUNdXHQ9IHsgLnR5cGUgPSBOTEFfUkVKRUNUIH0sXG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jPTcyPWJyX2NmbV9wb2xpY3lbSUZMQV9CUklER0VfQ0ZNX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtNzYtXHRbSUZMQV9CUklER0VfQ0ZNX01FUF9ERUxFVEVdXHRcdD1cbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzo3NzpcdFx0XHRcdE5MQV9QT0xJQ1lfTkVTVEVEKGJyX2NmbV9tZXBfZGVsZXRlX3BvbGljeSksXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtNzgtXHRbSUZMQV9CUklER0VfQ0ZNX01FUF9DT05GSUddXHRcdD1cbi0tXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM9MTMyPXN0YXRpYyBpbnQgYnJfbWVwX2RlbGV0ZV9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTEzOS1cdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIElGTEFfQlJJREdFX0NGTV9NRVBfREVMRVRFX01BWCwgYXR0cixcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzoxNDA6XHRcdFx0ICAgICAgIGJyX2NmbV9tZXBfZGVsZXRlX3BvbGljeSwgZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xNDEtXHRpZiAoZXJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xNTEtXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM6MTUyOlx0cmV0dXJuIGJyX2NmbV9tZXBfZGVsZXRlKGJyLCBpbnN0YW5jZSwgZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xNTMtfVxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwLmM9MzQ1PXN0YXRpYyB2b2lkIGJyX21ycF9pbl90ZXN0X3dvcmtfZXhwaXJlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L2JyaWRnZS9icl9tcnAuYy00MjAtICovXG5uZXQvYnJpZGdlL2JyX21ycC5jOjQyMTpzdGF0aWMgdm9pZCBicl9tcnBfZGVsX2ltcGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApXG5uZXQvYnJpZGdlL2JyX21ycC5jLTQyMi17XG4tLVxubmV0L2JyaWRnZS9icl9tcnAuYz00OTA9aW50IGJyX21ycF9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSlcbi0tXG5uZXQvYnJpZGdlL2JyX21ycC5jLTU0OS1kZWxldGVfbXJwOlxubmV0L2JyaWRnZS9icl9tcnAuYzo1NTA6XHRicl9tcnBfZGVsX2ltcGwoYnIsIG1ycCk7XG5uZXQvYnJpZGdlL2JyX21ycC5jLTU1MS1cbi0tXG5uZXQvYnJpZGdlL2JyX21ycC5jPTU1OD12b2lkIGJyX21ycF9wb3J0X2RlbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXG4tLVxubmV0L2JyaWRnZS9icl9tcnAuYy01NjUtXG5uZXQvYnJpZGdlL2JyX21ycC5jOjU2NjpcdGJyX21ycF9kZWxfaW1wbChiciwgbXJwKTtcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNTY3LX1cbi0tXG5uZXQvYnJpZGdlL2JyX21ycC5jLTU3MS0gKi9cbm5ldC9icmlkZ2UvYnJfbXJwLmM6NTcyOmludCBicl9tcnBfZGVsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycF9pbnN0YW5jZSAqaW5zdGFuY2UpXG5uZXQvYnJpZGdlL2JyX21ycC5jLTU3My17XG4tLVxubmV0L2JyaWRnZS9icl9tcnAuYy01NzgtXG5uZXQvYnJpZGdlL2JyX21ycC5jOjU3OTpcdGJyX21ycF9kZWxfaW1wbChiciwgbXJwKTtcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNTgwLVxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX25ldGxpbmsuYz0zMT1zdGF0aWMgaW50IGJyX21ycF9pbnN0YW5jZV9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jLTYzLVx0ZWxzZVxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jOjY0Olx0XHRyZXR1cm4gYnJfbXJwX2RlbChiciwgXHUwMDI2aW5zdCk7XG5uZXQvYnJpZGdlL2JyX21ycF9uZXRsaW5rLmMtNjUtXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oPTE1PWludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oLTE5LVxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oOjIwOmludCBicl9jZm1fbWVwX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMjEtXHRcdCAgICAgIGNvbnN0IHUzMiBpbnN0YW5jZSxcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfbXJwLmg9NjY9aW50IGJyX21ycF9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfbXJwLmg6Njc6aW50IGJyX21ycF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfbXJwLmgtNjgtaW50IGJyX21ycF9zZXRfcG9ydF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgwOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkNvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uIGZvciBCcmlkZ2luZyBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byB2ZXJpZnkgYSBicmlkZ2UgY29uZmlndXJhdGlvbi4gVGhlIGluaXRpYWwgY2hlY2tsaXN0IG1hbmRhdGVzIGVuc3VyaW5nIGBCUklER0VgLCBgQlJJREdFX0NGTWAsIGFuZCBgQlJJREdFX01SUGAgYXJlIGFsbCBjb3JyZWN0bHkgc2V0LiBJIGtub3cgSSBuZWVkIHRvIGRlbHZlIGRlZXBlciBpbnRvIHRoZXNlIHNldHRpbmdzIHRvIGVuc3VyZSB0aGV5JiMzOTtyZSBjb25maWd1cmVkIGFwcHJvcHJpYXRlbHksIHNvIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgQlJJREdFX0NGTWAgYW5kIGBCUklER0VfTVJQYC4gVGhleSBhcmUsIGFmdGVyIGFsbCwgZmVhdHVyZXMgYnVpbHQgb24gdG9wIG9mIHRoZSBiYXNlIGJyaWRnZSBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gY29uc3VsdCB0aGUgYG5ldC9icmlkZ2UvS2NvbmZpZ2AgZmlsZSBzcGVjaWZpY2FsbHkuIEkgcmVjYWxsIHRoYXQgYEJSSURHRV9DRk1gIGFuZCBgQlJJREdFX01SUGAgcmVxdWlyZSBgQlJJREdFYCwgd2hpY2ggaW4gdHVybiBwcm9iYWJseSBkZXBlbmRzIG9uIHRoaW5ncyBsaWtlIGBORVRgIGFuZCBwZXJoYXBzIGBJTkVUYCAob3Igc2ltaWxhciBuZXR3b3JraW5nIGluZnJhc3RydWN0dXJlKS4gSSBzaG91bGQgcHJvYmFibHkgdmVyaWZ5IHdoYXQgdGhlIGV4YWN0IGRlcGVuZGVuY2llcyBhcmUgd2l0aGluIHRoYXQgS2NvbmZpZyBmaWxlLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IHdoZW4gY29uZmlndXJpbmcgdGhlc2UgY29tcGxleCBuZXR3b3JraW5nIGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlJJREdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvS2NvbmZpZy01LVxubmV0L2JyaWRnZS9LY29uZmlnOjY6Y29uZmlnIEJSSURHRVxubmV0L2JyaWRnZS9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDs4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctMzUtXG5uZXQvYnJpZGdlL0tjb25maWc6MzY6Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXG5uZXQvYnJpZGdlL0tjb25maWctMzctXHRib29sIFwmIzM0O0lHTVAvTUxEIHNub29waW5nXCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTQ5LVxubmV0L2JyaWRnZS9LY29uZmlnOjUwOmNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy01MS1cdGJvb2wgXCYjMzQ7VkxBTiBmaWx0ZXJpbmdcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNjMtXG5uZXQvYnJpZGdlL0tjb25maWc6NjQ6Y29uZmlnIEJSSURHRV9NUlBcbm5ldC9icmlkZ2UvS2NvbmZpZy02NS1cdGJvb2wgXCYjMzQ7TVJQIHByb3RvY29sXCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTc1LVxubmV0L2JyaWRnZS9LY29uZmlnOjc2OmNvbmZpZyBCUklER0VfQ0ZNXG5uZXQvYnJpZGdlL0tjb25maWctNzctXHRib29sIFwmIzM0O0NGTSBwcm90b2NvbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM3NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb25maWd1cmF0aW9uIGZpbGU6CgoqKkludmVzdGlnYXRpbmcgQnJpZGdlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYG5ldC9icmlkZ2UvS2NvbmZpZ2AuIEkmIzM5O20gc3RhcnRpbmcgYnkgbG9va2luZyBhdCBsaW5lcyAxIHRocm91Z2ggMjAuIFRoaXMgdXN1YWxseSBpbmRpY2F0ZXMgdGhlIG1haW4sIHRvcC1sZXZlbCBzZXR0aW5ncyBhbmQgZGVmaW5pdGlvbnMgZm9yIHRoZSBicmlkZ2UgbW9kdWxlIGl0c2VsZi4gTXkgaW5pdGlhbCBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGdlbmVyYWwgb3B0aW9ucyBwcmVzZW50ZWQsIHRoZSBkZXBlbmRlbmNpZXMgdGhleSBtaWdodCBoYXZlLCBhbmQgYW55IHByZWxpbWluYXJ5IGNvbW1lbnRzIG9yIGV4cGxhbmF0aW9ucyB0aGF0IHNldCB0aGUgc3RhZ2UgZm9yIHRoZSByZXN0IG9mIHRoZSBjb25maWd1cmF0aW9uLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2U6IHRoZSBtYWluIGJyaWRnZSBzdXBwb3J0IGVuYWJsaW5nIG9wdGlvbiwgcHJvYmFibHkgYSBkZWZhdWx0IHNldHRpbmcgZm9yIHNvbWUgYmFzaWMgZnVuY3Rpb25hbGl0eSwgYW5kIG1heWJlIHNvbWUgZWFybHkgY29tbWVudHMgb3V0bGluaW5nIHRoZSBjb3JlIHB1cnBvc2Ugb2YgdGhlIGJyaWRnaW5nIGNvZGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGtleXdvcmRzIGFuZCBzeW1ib2xzIHRoYXQgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciBmb3IgdGhlIHJlc3Qgb2YgdGhlIHJldmlldy4gVGhlIGdvYWwgcmlnaHQgbm93IGlzIGp1c3QgdG8gZ2V0IG15IGJlYXJpbmdzIGFuZCB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZSBiZWZvcmUgZ2V0dGluZyBpbnRvIHRoZSB3ZWVkcyBvZiBtb3JlIHNwZWNpZmljIGZ1bmN0aW9uYWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyA4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIEJSSURHRVxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7ODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgTExDXG4gICA5Olx0XHRzZWxlY3QgU1RQXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYW5cbiAgMTI6XHRcdCAgRXRoZXJuZXQgYnJpZGdlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBkaWZmZXJlbnQgRXRoZXJuZXQgc2VnbWVudHMgaXRcbiAgMTM6XHRcdCAgaXMgY29ubmVjdGVkIHRvIHdpbGwgYXBwZWFyIGFzIG9uZSBFdGhlcm5ldCB0byB0aGUgcGFydGljaXBhbnRzLlxuICAxNDpcdFx0ICBTZXZlcmFsIHN1Y2ggYnJpZGdlcyBjYW4gd29yayB0b2dldGhlciB0byBjcmVhdGUgZXZlbiBsYXJnZXJcbiAgMTU6XHRcdCAgbmV0d29ya3Mgb2YgRXRoZXJuZXRzIHVzaW5nIHRoZSBJRUVFIDgwMi4xIHNwYW5uaW5nIHRyZWUgYWxnb3JpdGhtLlxuICAxNjpcdFx0ICBBcyB0aGlzIGlzIGEgc3RhbmRhcmQsIExpbnV4IGJyaWRnZXMgd2lsbCBjb29wZXJhdGUgcHJvcGVybHkgd2l0aFxuICAxNzpcdFx0ICBvdGhlciB0aGlyZCBwYXJ0eSBicmlkZ2UgcHJvZHVjdHMuXG4gIDE4Olx0XG4gIDE5Olx0XHQgIEluIG9yZGVyIHRvIHVzZSB0aGUgRXRoZXJuZXQgYnJpZGdlLCB5b3UmIzM5O2xsIG5lZWQgdGhlIGJyaWRnZVxuICAyMDpcdFx0ICBjb25maWd1cmF0aW9uIHRvb2xzOyBzZWUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdFx1MDAzZVxuICAyMTpcdFx0ICBmb3IgbG9jYXRpb24uIFBsZWFzZSByZWFkIHRoZSBCcmlkZ2UgbWluaS1IT1dUTyBmb3IgbW9yZVxuICAyMjpcdFx0ICBpbmZvcm1hdGlvbi5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgSWYgeW91IGVuYWJsZSBpcHRhYmxlcyBzdXBwb3J0IGFsb25nIHdpdGggdGhlIGJyaWRnZSBzdXBwb3J0IHRoZW4geW91XG4gIDI1Olx0XHQgIHR1cm4geW91ciBicmlkZ2UgaW50byBhIGJyaWRnaW5nIElQIGZpcmV3YWxsLlxuICAyNjpcdFx0ICBpcHRhYmxlcyB3aWxsIHRoZW4gc2VlIHRoZSBJUCBwYWNrZXRzIGJlaW5nIGJyaWRnZWQsIHNvIHlvdSBuZWVkIHRvXG4gIDI3Olx0XHQgIHRha2UgdGhpcyBpbnRvIGFjY291bnQgd2hlbiBzZXR0aW5nIHVwIHlvdXIgZmlyZXdhbGwgcnVsZXMuXG4gIDI4Olx0XHQgIEVuYWJsaW5nIGFycHRhYmxlcyBzdXBwb3J0IHdoZW4gYnJpZGdpbmcgd2lsbCBsZXQgYXJwdGFibGVzIHNlZVxuICAyOTpcdFx0ICBicmlkZ2VkIEFSUCB0cmFmZmljIGluIHRoZSBhcnB0YWJsZXMgRk9SV0FSRCBjaGFpbi5cbiAgMzA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNzkKCQkJCQkJCW91dHB1dDogMjQ3CgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2Ugbm90ZXMuCgoqKk15IEFuYWx5c2lzIG9mIEJyaWRnZSBDb25maWd1cmF0aW9uICZhbXA7IEFzc29jaWF0ZWQgRnVuY3Rpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIHNldHVwLCBhbmQgaXQmIzM5O3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgYEJSSURHRWAsIGBCUklER0VfQ0ZNYCwgYW5kIGBCUklER0VfTVJQYCBmbGFncy4gTm8gc3VycHJpc2VzIHRoZXJlLiBUaGVzZSBhcmUgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcywgdGhlIGZvdW5kYXRpb24sIGZvciBnZXR0aW5nIGEgYnJpZGdlIGltcGxlbWVudGF0aW9uIHVwIGFuZCBydW5uaW5nLiAKCk5vdywgZGlnZ2luZyBkZWVwZXIsIEkgc2VlIHRoZSBjb3JlIGZ1bmN0aW9uIHN5bWJvbHMgdGhhdCBuZWVkIGNhcmVmdWwgY29uc2lkZXJhdGlvbi4gYGJyX2FkZF9mcmFtZWAsIGBicl9kZWxfZnJhbWVgLCBgYnJfZGVsX2ZyYW1lX2FsbGAgYXJlIGNydWNpYWwgZm9yIGZyYW1lIGhhbmRsaW5nIOKAkyBhZGRpbmcsIHJlbW92aW5nLCBhbmQgY2xlYXJpbmcgZnJhbWVzIHdpdGhpbiB0aGUgYnJpZGdlJiMzOTtzIGZvcndhcmRpbmcgdGFibGUuIE9idmlvdXNseSwgd2UmIzM5O2xsIG5lZWQgcm9idXN0IGxvZ2ljIGFyb3VuZCB0aG9zZS4gVGhlbiwgYGJyX2NmbV9tZXBfY3JlYXRlYCBhbmQgYGJyX2NmbV9tZXBfZGVsZXRlYCBzdWdnZXN0IHRoYXQgd2UgYXJlIGdvaW5nIHRvIHVzZSBDb25uZWN0aXZpdHkgRmF1bHQgTWFuYWdlbWVudC4gRGVmaW5pdGVseSBrZXkgaW4gbGFyZ2VyIGRlcGxveW1lbnRzLiBGb2xsb3dpbmcgb24gZnJvbSB0aGF0LCB0aGUgTVJQLXNwZWNpZmljIGZ1bmN0aW9ucywgYGJyX21ycF9hZGRgIGFuZCBgYnJfbXJwX2RlbGAsIGNvbmZpcm0gTVJQIHN1cHBvcnQuIEZpbmFsbHkgYGJyX2Rldl9kZWxldGVgIGlzIGFuIG9idmlvdXMgY2hvaWNlIHdoZW4gd2UgbmVlZCB0byB0ZWFyIGRvd24gdGhlIGJyaWRnZS4KCk92ZXJhbGwsIGl0JiMzOTtzIGEgZ29vZCBzZXQgb2Ygc3ltYm9scyDigJMgcHJldHR5IGNvbXByZWhlbnNpdmUgcmVhbGx5IOKAkyBhbmQgYWxsIHNlZW1zIHRvIGJlIGxvZ2ljYWxseSBpbnRlcmNvbm5lY3RlZC4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgc2V0LXJlc3VsdHNgIHZhcmlhYmxlIHRyYWNrcyB0aG9zZSBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7QlJJREdFX0NGTSYjMzQ7LAogICAgJiMzNDtCUklER0VfTVJQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfYWRkX2ZyYW1lJiMzNDssCiAgICAmIzM0O2JyX2RlbF9mcmFtZSYjMzQ7LAogICAgJiMzNDticl9kZWxfZnJhbWVfYWxsJiMzNDssCiAgICAmIzM0O2JyX2NmbV9tZXBfY3JlYXRlJiMzNDssCiAgICAmIzM0O2JyX2NmbV9tZXBfZGVsZXRlJiMzNDssCiAgICAmIzM0O2JyX21ycF9hZGQmIzM0OywKICAgICYjMzQ7YnJfbXJwX2RlbCYjMzQ7LAogICAgJiMzNDticl9kZXZfZGVsZXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYnJpZGdlIEV0aGVybmV0IGZyYW1lIHR5cGUgaGFuZGxlciByZWdpc3RyYXRpb24vZGVyZWdpc3RyYXRpb24gbWVjaGFuaXNtLiBQcmV2aW91c2x5LCBzdGF0aWNhbGx5IGFsbG9jYXRlZCBmcmFtZSB0eXBlIHN0cnVjdHVyZXMgKHN1Y2ggYXMgY2ZtX2ZyYW1lX3R5cGUgYW5kIG1ycF9mcmFtZV90eXBlKSB3ZXJlIHJlZ2lzdGVyZWQgZGlyZWN0bHkgdG8gYnJpZGdlIGluc3RhbmNlcywgd2hpY2ggY291bGQgbGVhZCB0byBsaXN0IGNvcnJ1cHRpb24gYWNyb3NzIG11bHRpcGxlIGJyaWRnZXMuIFRoZSBwYXRjaCBjaGFuZ2VzIHRoaXMgdG8gZHluYW1pYyBwZXItYnJpZGdlIGFsbG9jYXRpb24gYW5kIFJDVS1iYXNlZCBmcmVlaW5nIG9mIGZyYW1lIHR5cGUgbm9kZXMsIGludHJvZHVjZXMgZXJyb3IgaGFuZGxpbmcgb24gYWxsb2NhdGlvbiBmYWlsdXJlLCBhbmQgYWRkcyBjbGVhbnVwIG9mIGFsbCByZWdpc3RlcmVkIGZyYW1lIHR5cGVzIGR1cmluZyBicmlkZ2UgZGV2aWNlIGRlbGV0aW9uIChicl9kZXZfZGVsZXRlKS4gVGhlc2UgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjaGFuZ2VzIHdhcnJhbnQgZnV6emluZyB0byB1bmNvdmVyIHBvdGVudGlhbCBtZW1vcnkgbGVha3MsIGNvbmN1cnJlbmN5IGlzc3Vlcywgb3IgZXJyb3IgaGFuZGxpbmcgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfQ0ZNJiMzNDssCiAgICAmIzM0O0JSSURHRV9NUlAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl9hZGRfZnJhbWUmIzM0OywKICAgICYjMzQ7YnJfZGVsX2ZyYW1lJiMzNDssCiAgICAmIzM0O2JyX2RlbF9mcmFtZV9hbGwmIzM0OywKICAgICYjMzQ7YnJfY2ZtX21lcF9jcmVhdGUmIzM0OywKICAgICYjMzQ7YnJfY2ZtX21lcF9kZWxldGUmIzM0OywKICAgICYjMzQ7YnJfbXJwX2FkZCYjMzQ7LAogICAgJiMzNDticl9tcnBfZGVsJiMzNDssCiAgICAmIzM0O2JyX2Rldl9kZWxldGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBicmlkZ2UgRXRoZXJuZXQgZnJhbWUgdHlwZSBoYW5kbGVyIHJlZ2lzdHJhdGlvbi9kZXJlZ2lzdHJhdGlvbiBtZWNoYW5pc20uIFByZXZpb3VzbHksIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGZyYW1lIHR5cGUgc3RydWN0dXJlcyAoc3VjaCBhcyBjZm1fZnJhbWVfdHlwZSBhbmQgbXJwX2ZyYW1lX3R5cGUpIHdlcmUgcmVnaXN0ZXJlZCBkaXJlY3RseSB0byBicmlkZ2UgaW5zdGFuY2VzLCB3aGljaCBjb3VsZCBsZWFkIHRvIGxpc3QgY29ycnVwdGlvbiBhY3Jvc3MgbXVsdGlwbGUgYnJpZGdlcy4gVGhlIHBhdGNoIGNoYW5nZXMgdGhpcyB0byBkeW5hbWljIHBlci1icmlkZ2UgYWxsb2NhdGlvbiBhbmQgUkNVLWJhc2VkIGZyZWVpbmcgb2YgZnJhbWUgdHlwZSBub2RlcywgaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBvbiBhbGxvY2F0aW9uIGZhaWx1cmUsIGFuZCBhZGRzIGNsZWFudXAgb2YgYWxsIHJlZ2lzdGVyZWQgZnJhbWUgdHlwZXMgZHVyaW5nIGJyaWRnZSBkZXZpY2UgZGVsZXRpb24gKGJyX2Rldl9kZWxldGUpLiBUaGVzZSByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNoYW5nZXMgd2FycmFudCBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgY29uY3VycmVuY3kgaXNzdWVzLCBvciBlcnJvciBoYW5kbGluZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBldGhlcm5ldCBmcmFtZSBoYW5kbGVycyAoc3VjaCBhcyBDRk0gYW5kIE1SUCkgYXJlIHJlZ2lzdGVyZWQgaW4gdGhlIGJyaWRnZSBtb2R1bGUuIEluc3RlYWQgb2YgdXNpbmcgc3RhdGljIGdsb2JhbCBgc3RydWN0IGJyX2ZyYW1lX3R5cGVgIHZhcmlhYmxlcywgaXQgZHluYW1pY2FsbHkgYWxsb2NhdGVzIGBzdHJ1Y3QgYnJfZnJhbWVfdHlwZWAgdXNpbmcgYGttYWxsb2Nfb2JqYCBhbmQgcHJvdGVjdHMgaXRzIHJlbW92YWwgd2l0aCBga2ZyZWVfcmN1YC5cblxuQWxsIGZpZWxkcyAoYHR5cGVgLCBgZnJhbWVfaGFuZGxlcmAsIGFuZCBgbGlzdGApIGFjY2Vzc2VkIGJ5IGBicl9wcm9jZXNzX2ZyYW1lX3R5cGVgIGFuZCBsaXN0IHRyYXZlcnNhbCBmdW5jdGlvbnMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGluc2VydGlvbiBpbnRvIGBici1cdTAwM2VmcmFtZV90eXBlX2xpc3RgLiBOb25lIG9mIHRoZXNlIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhcmUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHVzZWQgaW4gY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9yIGNhbGN1bGF0aW9ucy4gQW55IHBvdGVudGlhbCBidWdzIChzdWNoIGFzIFJDVSBzeW5jaHJvbml6YXRpb24gaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGxlYWtzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI2NmZkYTIyN2IyMjljMGFmY2YyMGUzOTUxNzEyNTI5NjNhZjY2MTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA5OjE2OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9jZm0uYyBiL25ldC9icmlkZ2UvYnJfY2ZtLmMKaW5kZXggZGVhNTZmZmZhMWMxOS4uNTc5MDI0ODU4ODI5OCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9jZm0uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX2NmbS5jCkBAIC00ODksMTEgJiM0Mzs0ODksNiBAQCBzdGF0aWMgaW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGJyX2ZyYW1lX3R5cGUgY2ZtX2ZyYW1lX3R5cGUgX19yZWFkX21vc3RseSA9IHsKLQkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0NGTSksCi0JLmZyYW1lX2hhbmRsZXIgPSBicl9jZm1fZnJhbWVfcngsCi19OwotCiBpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogCQkgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsCiAJCSAgICAgIHN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSAqY29uc3QgY3JlYXRlLApAQCAtNTAxLDYgJiM0Mzs0OTYsNyBAQCBpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogewogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7CiAJc3RydWN0IGJyX2NmbV9tZXAgKm1lcDsKJiM0MzsJaW50IGVycjsKIAogCUFTU0VSVF9SVE5MKCk7CiAKQEAgLTU1OCw4ICYjNDM7NTU0LDEzIEBAIGludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCiAJSU5JVF9ITElTVF9IRUFEKCZhbXA7bWVwLSZndDtwZWVyX21lcF9saXN0KTsKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO21lcC0mZ3Q7Y2NtX3R4X2R3b3JrLCBjY21fdHhfd29ya19leHBpcmVkKTsKIAotCWlmIChobGlzdF9lbXB0eSgmYW1wO2JyLSZndDttZXBfbGlzdCkpCi0JCWJyX2FkZF9mcmFtZShiciwgJmFtcDtjZm1fZnJhbWVfdHlwZSk7CiYjNDM7CWlmIChobGlzdF9lbXB0eSgmYW1wO2JyLSZndDttZXBfbGlzdCkpIHsKJiM0MzsJCWVyciA9IGJyX2FkZF9mcmFtZShiciwgY3B1X3RvX2JlMTYoRVRIX1BfQ0ZNKSwgYnJfY2ZtX2ZyYW1lX3J4KTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlrZnJlZShtZXApOwomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CX0KIAogCWhsaXN0X2FkZF90YWlsX3JjdSgmYW1wO21lcC0mZ3Q7aGVhZCwgJmFtcDtici0mZ3Q7bWVwX2xpc3QpOwogCkBAIC01ODgsNyAmIzQzOzU4OSw3IEBAIHN0YXRpYyB2b2lkIG1lcF9kZWxldGVfaW1wbGVtZW50YXRpb24oc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogCWtmcmVlX3JjdShtZXAsIHJjdSk7CiAKIAlpZiAoaGxpc3RfZW1wdHkoJmFtcDtici0mZ3Q7bWVwX2xpc3QpKQotCQlicl9kZWxfZnJhbWUoYnIsICZhbXA7Y2ZtX2ZyYW1lX3R5cGUpOwomIzQzOwkJYnJfZGVsX2ZyYW1lKGJyLCBjcHVfdG9fYmUxNihFVEhfUF9DRk0pKTsKIH0KIAogaW50IGJyX2NmbV9tZXBfZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaWYuYyBiL25ldC9icmlkZ2UvYnJfaWYuYwppbmRleCBjNTI2MTM0MzFmODg2Li5mZThlOWE0N2UxYWMxIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9pZi5jCkBAIC0zOTcsNiAmIzQzOzM5Nyw4IEBAIHZvaWQgYnJfZGV2X2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDtici0mZ3Q7dGNuX3RpbWVyKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtici0mZ3Q7Z2Nfd29yayk7CiAKJiM0MzsJYnJfZGVsX2ZyYW1lX2FsbChicik7CiYjNDM7CiAJYnJfc3lzZnNfZGVsYnIoYnItJmd0O2Rldik7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoYnItJmd0O2RldiwgaGVhZCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKaW5kZXggZDg3YTVmOWZhOTJiNy4uMDdlZmQwZmJjZjljZCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwpAQCAtNDY4LDE4ICYjNDM7NDY4LDQ4IEBAIHJ4X2hhbmRsZXJfZnVuY190ICpicl9nZXRfcnhfaGFuZGxlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXJldHVybiBicl9oYW5kbGVfZnJhbWU7CiB9CiAKLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KQomIzQzO2ludCBicl9hZGRfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBfX2JlMTYgdHlwZSwKJiM0MzsJCSBpbnQgKCpmcmFtZV9oYW5kbGVyKShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LAomIzQzOwkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSkKIHsKJiM0MzsJc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0OwomIzQzOwomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeShmdCwgJmFtcDtici0mZ3Q7ZnJhbWVfdHlwZV9saXN0LCBsaXN0KSB7CiYjNDM7CQlpZiAoZnQtJmd0O3R5cGUgPT0gdHlwZSkKJiM0MzsJCQlyZXR1cm4gLUVFWElTVDsKJiM0MzsJfQomIzQzOwomIzQzOwlmdCA9IGttYWxsb2Nfb2JqKCpmdCk7CiYjNDM7CWlmICghZnQpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJZnQtJmd0O3R5cGUgPSB0eXBlOwomIzQzOwlmdC0mZ3Q7ZnJhbWVfaGFuZGxlciA9IGZyYW1lX2hhbmRsZXI7CiAJaGxpc3RfYWRkX2hlYWRfcmN1KCZhbXA7ZnQtJmd0O2xpc3QsICZhbXA7YnItJmd0O2ZyYW1lX3R5cGVfbGlzdCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCi12b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdCkKJiM0Mzt2b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlKQogewotCXN0cnVjdCBicl9mcmFtZV90eXBlICp0bXA7CiYjNDM7CXN0cnVjdCBicl9mcmFtZV90eXBlICpmdDsKIAotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJmFtcDtici0mZ3Q7ZnJhbWVfdHlwZV9saXN0LCBsaXN0KQotCQlpZiAoZnQgPT0gdG1wKSB7CiYjNDM7CWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZ0LCAmYW1wO2JyLSZndDtmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHsKJiM0MzsJCWlmIChmdC0mZ3Q7dHlwZSA9PSB0eXBlKSB7CiAJCQlobGlzdF9kZWxfcmN1KCZhbXA7ZnQtJmd0O2xpc3QpOwomIzQzOwkJCWtmcmVlX3JjdShmdCwgcmN1KTsKIAkJCXJldHVybjsKIAkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgYnJfZGVsX2ZyYW1lX2FsbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQ7CiYjNDM7CXN0cnVjdCBobGlzdF9ub2RlICpuOwomIzQzOwomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZ0LCBuLCAmYW1wO2JyLSZndDtmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHsKJiM0MzsJCWhsaXN0X2RlbF9yY3UoJmFtcDtmdC0mZ3Q7bGlzdCk7CiYjNDM7CQlrZnJlZV9yY3UoZnQsIHJjdSk7CiYjNDM7CX0KIH0KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXJwLmMgYi9uZXQvYnJpZGdlL2JyX21ycC5jCmluZGV4IGVmMTZkMDcwMzkyNDEuLjUxMWFlOGFmM2QwMzMgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbXJwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9tcnAuYwpAQCAtOCwxMSAmIzQzOzgsNiBAQCBzdGF0aWMgY29uc3QgdTggbXJwX2luX3Rlc3RfZG1hY1tFVEhfQUxFTl0gPSB7IDB4MSwgMHgxNSwgMHg0ZSwgMHgwLCAweDAsIDB4MyB9OwogCiBzdGF0aWMgaW50IGJyX21ycF9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBza19idWZmICpza2IpOwogCi1zdGF0aWMgc3RydWN0IGJyX2ZyYW1lX3R5cGUgbXJwX2ZyYW1lX3R5cGUgX19yZWFkX21vc3RseSA9IHsKLQkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX01SUCksCi0JLmZyYW1lX2hhbmRsZXIgPSBicl9tcnBfcHJvY2VzcywKLX07Ci0KIHN0YXRpYyBib29sIGJyX21ycF9pc19yaW5nX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcF9wb3J0LAogCQkJCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnNfcG9ydCwKIAkJCQlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KQpAQCAtNDg2LDcgJiM0Mzs0ODEsNyBAQCBzdGF0aWMgdm9pZCBicl9tcnBfZGVsX2ltcGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApCiAJa2ZyZWVfcmN1KG1ycCwgcmN1KTsKIAogCWlmIChobGlzdF9lbXB0eSgmYW1wO2JyLSZndDttcnBfbGlzdCkpCi0JCWJyX2RlbF9mcmFtZShiciwgJmFtcDttcnBfZnJhbWVfdHlwZSk7CiYjNDM7CQlicl9kZWxfZnJhbWUoYnIsIGNwdV90b19iZTE2KEVUSF9QX01SUCkpOwogfQogCiAvKiBBZGRzIGEgbmV3IE1SUCBpbnN0YW5jZS4KQEAgLTUzNSwxMyAmIzQzOzUzMCwxNiBAQCBpbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKQogCXNwaW5fdW5sb2NrX2JoKCZhbXA7YnItJmd0O2xvY2spOwogCXJjdV9hc3NpZ25fcG9pbnRlcihtcnAtJmd0O3NfcG9ydCwgcCk7CiAKLQlpZiAoaGxpc3RfZW1wdHkoJmFtcDtici0mZ3Q7bXJwX2xpc3QpKQotCQlicl9hZGRfZnJhbWUoYnIsICZhbXA7bXJwX2ZyYW1lX3R5cGUpOwotCiAJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDttcnAtJmd0O3Rlc3Rfd29yaywgYnJfbXJwX3Rlc3Rfd29ya19leHBpcmVkKTsKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO21ycC0mZ3Q7aW5fdGVzdF93b3JrLCBicl9tcnBfaW5fdGVzdF93b3JrX2V4cGlyZWQpOwogCWhsaXN0X2FkZF90YWlsX3JjdSgmYW1wO21ycC0mZ3Q7bGlzdCwgJmFtcDtici0mZ3Q7bXJwX2xpc3QpOwogCiYjNDM7CWlmIChobGlzdF9pc19zaW5ndWxhcl9ub2RlKCZhbXA7bXJwLSZndDtsaXN0LCAmYW1wO2JyLSZndDttcnBfbGlzdCkpIHsKJiM0MzsJCWVyciA9IGJyX2FkZF9mcmFtZShiciwgY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSwgYnJfbXJwX3Byb2Nlc3MpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGRlbGV0ZV9tcnA7CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBicl9tcnBfc3dpdGNoZGV2X2FkZChiciwgbXJwKTsKIAlpZiAoZXJyKQogCQlnb3RvIGRlbGV0ZV9tcnA7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCmluZGV4IGQzMzdiMWNmYjk4MGQuLjUxNjMwMTdmZWI3NGQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCkBAIC05MzcsMTAgJiM0Mzs5MzcsMTQgQEAgc3RydWN0IGJyX2ZyYW1lX3R5cGUgewogCWludAkJCSgqZnJhbWVfaGFuZGxlcikoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwKIAkJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQlsaXN0OwomIzQzOwlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKIH07CiAKLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTsKLXZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTsKJiM0MztpbnQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgX19iZTE2IHR5cGUsCiYjNDM7CQkgaW50ICgqZnJhbWVfaGFuZGxlcikoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwKJiM0MzsJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikpOwomIzQzO3ZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgX19iZTE2IHR5cGUpOwomIzQzO3ZvaWQgYnJfZGVsX2ZyYW1lX2FsbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgYnJfcnhfaGFuZGxlcl9jaGVja19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MjkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA3MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEeW5hbWljIEFsbG9jYXRpb24gb2YgYGJyX2ZyYW1lX3R5cGVgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBhbGwgYWJvdXQgbW92aW5nIGF3YXkgZnJvbSB0aG9zZSBzdGF0aWMsIGdsb2JhbCBgY2ZtX2ZyYW1lX3R5cGVgIGFuZCBgbXJwX2ZyYW1lX3R5cGVgIHN0cnVjdHVyZXMuIEluc3RlYWQsIHRoZSBwYXRjaCBkeW5hbWljYWxseSBhbGxvY2F0ZXMgYHN0cnVjdCBicl9mcmFtZV90eXBlYCBpbnN0YW5jZXMgb24gYSBwZXItYnJpZGdlIGJhc2lzLiBUaGlzIGlzIGEgZ29vZCBtb3ZlOyBpdCBtYWtlcyB0aGUgY29kZSBjbGVhbmVyLCBtb3JlIGZsZXhpYmxlLCBhbmQgcG90ZW50aWFsbHkgc2FmZXIuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgcGxheXMgb3V0IGFjcm9zcyB0aGUgYnJpZGdlIGNvZGUuCgpGaXJzdCwgaW4gYG5ldC9icmlkZ2UvYnJfY2ZtLmNgLCBJIHNlZSB0aGV5JiMzOTt2ZSByZW1vdmVkIHRoZSBzdGF0aWMgYGNmbV9mcmFtZV90eXBlYC4gTm93LCB3aGVuIGNyZWF0aW5nIGEgQ0ZNIE1FUCAoTWFpbnRlbmFuY2UgRW50aXR5IFBvaW50KSBpbiBgYnJfY2ZtX21lcF9jcmVhdGVgLCB0aGV5IGNhbGwgYGJyX2FkZF9mcmFtZWAgd2l0aCB0aGUgcHJvdG9jb2wgdHlwZSBgRVRIX1BfQ0ZNYCBhbmQgdGhlIGhhbmRsZXIgYGJyX2NmbV9mcmFtZV9yeGAuICBJZiBgYnJfYWRkX2ZyYW1lYCBmYWlscyAoYWx3YXlzIGEgZ29vZCBjaGVjayksIHRoZSBNRVAgaXMgZnJlZWQgYW5kIGFuIGVycm9yIGlzIHJldHVybmVkLiBPbiBkZWxldGlvbiwgdGhleSBjYWxsIGBicl9kZWxfZnJhbWVgIHdpdGggYEVUSF9QX0NGTWAgaW5zdGVhZCBvZiB0aGUgb2xkIHN0YXRpYyBzdHJ1Y3R1cmUuIFRoaXMgZmVlbHMgY2xlYW5lciBhbmQgbW9yZSBpbnR1aXRpdmUuCgpUaGVuLCBpbiBgbmV0L2JyaWRnZS9icl9pZi5jYCwgdGhleSYjMzk7dmUgYWRkZWQgYGJyX2RlbF9mcmFtZV9hbGwoYnIpYCB0byBgYnJfZGV2X2RlbGV0ZWAuICBUaGlzIGVuc3VyZXMgYWxsIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBmcmFtZSB0eXBlcyBhcmUgcHJvcGVybHkgY2xlYW5lZCB1cCB3aGVuIGEgYnJpZGdlIGludGVyZmFjZSBpcyBkZWxldGVkLCB3aGljaCBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIHRvIGF2b2lkIG1lbW9yeSBsZWFrcy4gRXhjZWxsZW50LgoKUGVla2luZyBpbnRvIGBuZXQvYnJpZGdlL2JyX2lucHV0LmNgLCB0aGUgaGVhcnQgb2YgdGhlIGNoYW5nZXMgc2VlbXMgdG8gYmUgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBicl9hZGRfZnJhbWVgIGFuZCBgYnJfZGVsX2ZyYW1lYC4gIGBicl9hZGRfZnJhbWVgIG5vdyBjaGVja3MgZm9yIGR1cGxpY2F0ZSBmcmFtZSB0eXBlcyAoYSBgdHlwZWAgYWxyZWFkeSBleGlzdHMgaW4gYGJyLSZndDtmcmFtZV90eXBlX2xpc3RgKSwgd2hpY2ggaXMgYSBkZWNlbnQgc2FuaXR5IGNoZWNrIGFuZCByZXR1cm5zIGFuIGVycm9yIGNvZGUuIEl0IHRoZW4gZHluYW1pY2FsbHkgYWxsb2NhdGVzIGEgYHN0cnVjdCBicl9mcmFtZV90eXBlYCB3aXRoIGBrbWFsbG9jX29iamAsIGFuZCBpZiB0aGF0IGZhaWxzLCByZXR1cm5zIGFuIGVycm9yLiAgSXQgc2V0cyB0aGUgYHR5cGVgIGFuZCBgZnJhbWVfaGFuZGxlcmAsIGFuZCBhZGRzIHRoZSBuZXcgYGZ0YCB0byBgYnItJmd0O2ZyYW1lX3R5cGVfbGlzdGAuICBgYnJfZGVsX2ZyYW1lYCBub3cgZmluZHMgdGhlIGFwcHJvcHJpYXRlIGBmdGAgYmFzZWQgb24gdGhlIGB0eXBlYCwgYW5kIHNhZmVseSByZW1vdmVzIGFuZCBmcmVlcyBpdC4gIGBicl9kZWxfZnJhbWVfYWxsYCBqdXN0IGl0ZXJhdGVzIHRocm91Z2ggdGhlIGxpc3QgYW5kIGNsZWFucyB1cCBldmVyeXRoaW5nLiAgSSYjMzk7bSBnbGFkIHRvIHNlZSB0aGUgdXNlIG9mIGBrZnJlZV9yY3VgIHdpdGggdGhlIGByY3VgIGhlYWQsIHByb3BlciB1c2Ugb2YgUkNVIGZvciBzeW5jaHJvbml6YXRpb24gaXMgdGhlIHdheSB0byBnbyBoZXJlLgoKTmV4dCwgaW4gYG5ldC9icmlkZ2UvYnJfbXJwLmNgLCB0aGUgc3RhdGljIGBtcnBfZnJhbWVfdHlwZWAgaXMgZ29uZS4gIE9uIE1SUCBkZWxldGlvbiwgYGJyX2RlbF9mcmFtZWAgaXMgY2FsbGVkIHdpdGggYEVUSF9QX01SUGAuIE9uIE1SUCBhZGRpdGlvbiwgaXQgY2hlY2tzIGlmIGBtcnAtJmd0O2xpc3RgIGlzIHNpbmd1bGFyLCBhbmQgdGhlbiBjYWxscyBgYnJfYWRkX2ZyYW1lYCB3aXRoIGBFVEhfUF9NUlBgIGFuZCB0aGUgYGJyX21ycF9wcm9jZXNzYCBoYW5kbGVyLiAgU291bmRzIHN0cmFpZ2h0Zm9yd2FyZC4KCkZpbmFsbHksIGBuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaGAgYWRkcyB0aGUgYHN0cnVjdCByY3VfaGVhZCByY3U7YCB0byBgc3RydWN0IGJyX2ZyYW1lX3R5cGVgLiAgVGhpcyBpcyBlc3NlbnRpYWwgZm9yIFJDVS1zYWZlIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgZGVjbGFyYXRpb25zIGZvciB0aGUgY29yZSBmdW5jdGlvbnMgYXJlIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgbmV3IHN0cnVjdHVyZS4KCk5vdywgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3Igc2ltaWxhciB0b29sIHRvIHF1aWNrbHkgc2NhbiB0aGUgcmVzdCBvZiB0aGUgYnJpZGdlIGNvZGUgdG8gY29uZmlybSB0aGF0IHRoZSBgZnJhbWVfdHlwZV9saXN0YCBhbmQgYGJyX2ZyYW1lX3R5cGVgIGFyZSBvbmx5IHVzZWQgd2l0aGluIHRoZSBpbnRlbmRlZCBzY29wZS4gVGhpcyBzZWVtcyBsaWtlIGEgc29saWQsIHdlbGwtdGhvdWdodC1vdXQgY2hhbmdlLiBUaGUgZHluYW1pYyBhbGxvY2F0aW9uIGFwcHJvYWNoIGlzIGNvcnJlY3QgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnJhbWVfdHlwZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9kZXZpY2UuYz00ODA9dm9pZCBicl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTUwNS1cdElOSVRfSExJU1RfSEVBRChcdTAwMjZici1cdTAwM2VmZGJfbGlzdCk7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjUwNjpcdElOSVRfSExJU1RfSEVBRChcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QpO1xubmV0L2JyaWRnZS9icl9kZXZpY2UuYy01MDctI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTI2Nz1zdGF0aWMgaW50IG5mX2hvb2tfYnJpZGdlX3ByZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTMyMi0gKi9cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozMjM6c3RhdGljIGludCBicl9wcm9jZXNzX2ZyYW1lX3R5cGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMjQtXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMjUte1xubmV0L2JyaWRnZS9icl9pbnB1dC5jOjMyNjpcdHN0cnVjdCBicl9mcmFtZV90eXBlICp0bXA7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzI3LVxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjMyODpcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXAsIFx1MDAyNnAtXHUwMDNlYnItXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTMyOS1cdFx0aWYgKHVubGlrZWx5KHRtcC1cdTAwM2V0eXBlID09IHNrYi1cdTAwM2Vwcm90b2NvbCkpXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTMzOT1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBicl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00MjctXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDI4Olx0aWYgKHVubGlrZWx5KGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShwLCBza2IpKSlcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00MjktXHRcdHJldHVybiBSWF9IQU5ETEVSX1BBU1M7XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTQ3MT1pbnQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgX19iZTE2IHR5cGUsXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ3NC17XG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDc1Olx0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0O1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ3Ni1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0Nzc6XHRobGlzdF9mb3JfZWFjaF9lbnRyeShmdCwgXHUwMDI2YnItXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KSB7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDc4LVx0XHRpZiAoZnQtXHUwMDNldHlwZSA9PSB0eXBlKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00ODctXHRmdC1cdTAwM2VmcmFtZV9oYW5kbGVyID0gZnJhbWVfaGFuZGxlcjtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0ODg6XHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2ZnQtXHUwMDNlbGlzdCwgXHUwMDI2YnItXHUwMDNlZnJhbWVfdHlwZV9saXN0KTtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00ODktXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTQ5Mz12b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlKVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ5NC17XG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDk1Olx0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0O1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ5Ni1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0OTc6XHRobGlzdF9mb3JfZWFjaF9lbnRyeShmdCwgXHUwMDI2YnItXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KSB7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDk4LVx0XHRpZiAoZnQtXHUwMDNldHlwZSA9PSB0eXBlKSB7XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTUwNj12b2lkIGJyX2RlbF9mcmFtZV9hbGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTUwNy17XG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NTA4Olx0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0O1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTUwOS1cdHN0cnVjdCBobGlzdF9ub2RlICpuO1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTUxMC1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo1MTE6XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZ0LCBuLCBcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy01MTItXHRcdGhsaXN0X2RlbF9yY3UoXHUwMDI2ZnQtXHUwMDNlbGlzdCk7XG4tLVxubmV0L2JyaWRnZS9icl9tcnAuYz05OTQ9c3RhdGljIGJvb2wgYnJfbXJwX21pbV9wcm9jZXNzKHN0cnVjdCBicl9tcnAgKm1ycCwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcbi0tXG5uZXQvYnJpZGdlL2JyX21ycC5jLTEwMzItICovXG5uZXQvYnJpZGdlL2JyX21ycC5jOjEwMzM6c3RhdGljIHU4IGJyX21ycF9nZXRfZnJhbWVfdHlwZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2JyaWRnZS9icl9tcnAuYy0xMDM0LXtcbi0tXG5uZXQvYnJpZGdlL2JyX21ycC5jPTEwNzA9c3RhdGljIGludCBicl9tcnBfcmN2KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4tLVxubmV0L2JyaWRnZS9icl9tcnAuYy0xMTIyLVx0aWYgKGJyX21ycF9pbl9mcmFtZShza2IpKSB7XG5uZXQvYnJpZGdlL2JyX21ycC5jOjExMjM6XHRcdHU4IGluX3R5cGUgPSBicl9tcnBfZ2V0X2ZyYW1lX3R5cGUoc2tiKTtcbm5ldC9icmlkZ2UvYnJfbXJwLmMtMTEyNC1cbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD01MDA9c3RydWN0IG5ldF9icmlkZ2Uge1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTUwMi1cdHNwaW5sb2NrX3RcdFx0XHRoYXNoX2xvY2s7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo1MDM6XHRzdHJ1Y3QgaGxpc3RfaGVhZFx0XHRmcmFtZV90eXBlX2xpc3Q7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01MDQtXHRzdHJ1Y3QgbmV0X2RldmljZVx0XHQqZGV2O1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTkzMz1yeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05MzQtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo5MzU6c3RydWN0IGJyX2ZyYW1lX3R5cGUge1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTM2LVx0X19iZTE2XHRcdFx0dHlwZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU5OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGJyX3Byb2Nlc3NfZnJhbWVfdHlwZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGlzIGBicl9wcm9jZXNzX2ZyYW1lX3R5cGVgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgaXQgd2l0aGluIHRoZSBgbmV0L2JyaWRnZS9icl9pbnB1dC5jYCBmaWxlLiBUaGlzIGlzIHdoZXJlIHRoZSBicmlkZ2UgaW5wdXQgcHJvY2Vzc2luZyBsb2dpYyBpcywgc28gaXQgbWFrZXMgc2Vuc2UgdGhhdCB0aGUgZnJhbWUgdHlwZSB3b3VsZCBiZSBoYW5kbGVkIGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0IGRldGVybWluZXMgdGhlIGluY29taW5nIGZyYW1lJiMzOTtzIHR5cGUgYW5kIHdoYXQgaXQgZG9lcyB3aXRoIGl0LiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBvciBhIGxvZ2ljIGVycm9yIHRoYXQgSSBuZWVkIHRvIHBpbnBvaW50LiBUaW1lIHRvIGZpcmUgdXAgdGhlIGVkaXRvciBhbmQgc3RhcnQgcmVhZGluZyB0aHJvdWdoIHRoYXQgc2VjdGlvbiBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfaW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzIwOlx0LyogUmV0dXJuIDAgaWYgdGhlIGZyYW1lIHdhcyBub3QgcHJvY2Vzc2VkIG90aGVyd2lzZSAxXG4gMzIxOlx0ICogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrXG4gMzIyOlx0ICovXG4gMzIzOlx0c3RhdGljIGludCBicl9wcm9jZXNzX2ZyYW1lX3R5cGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbiAzMjQ6XHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDMyNTpcdHtcbiAzMjY6XHRcdHN0cnVjdCBicl9mcmFtZV90eXBlICp0bXA7XG4gMzI3Olx0XG4gMzI4Olx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wLCBcdTAwMjZwLVx1MDAzZWJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdClcbiAzMjk6XHRcdFx0aWYgKHVubGlrZWx5KHRtcC1cdTAwM2V0eXBlID09IHNrYi1cdTAwM2Vwcm90b2NvbCkpXG4gMzMwOlx0XHRcdFx0cmV0dXJuIHRtcC1cdTAwM2VmcmFtZV9oYW5kbGVyKHAsIHNrYik7XG4gMzMxOlx0XG4gMzMyOlx0XHRyZXR1cm4gMDtcbiAzMzM6XHR9XG4gMzM0Olx0XG4gMzM1Olx0LypcbiAzMzY6XHQgKiBSZXR1cm4gTlVMTCBpZiBza2IgaXMgaGFuZGxlZFxuIDMzNzpcdCAqIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9ja1xuIDMzODpcdCAqL1xuIDMzOTpcdHN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGJyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4gMzQwOlx0e1xuIDM0MTpcdFx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG4gMzQyOlx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwO1xuIDM0MzpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiO1xuIDM0NDpcdFx0Y29uc3QgdW5zaWduZWQgY2hhciAqZGVzdCA9IGV0aF9oZHIoc2tiKS1cdTAwM2VoX2Rlc3Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNDMKCQkJCQkJCW91dHB1dDogMjA4CgkJCQkJCQl0aG91Z2h0czogNjk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGBicl9hZGRfZnJhbWVgIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBhbmQgTWVtb3J5IFNhZmV0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBicl9hZGRfZnJhbWVgIGZ1bmN0aW9uIGluIGBicl9pbnB1dC5jYC4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBwb3RlbnRpYWwgbGVha3MuIFRoZSBmdW5jdGlvbiBhZGRzIGEgZnJhbWUgdHlwZSB0byBhIGJyaWRnZSYjMzk7cyBsaXN0LiBJIG5lZWQgdG8gYmUgbWV0aWN1bG91cy4KCkZpcnN0LCB0aGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoIHRoZSBleGlzdGluZyBmcmFtZSB0eXBlcyB0byBlbnN1cmUgdW5pcXVlbmVzcy4gVGhhdCYjMzk7cyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4gVGhlbiwgaXQgYWxsb2NhdGVzIG1lbW9yeSBmb3IgYSBuZXcgYGJyX2ZyYW1lX3R5cGVgIHN0cnVjdHVyZSB1c2luZyBga21hbGxvY19vYmpgLiBUaGlzIGlzIGNyaXRpY2FsLiBga21hbGxvY19vYmooKmZ0KWAgbWVhbnMgaXQgYWxsb2NhdGVzIHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgYGZ0YC4KCk5leHQsIHRoZSBzdHJ1Y3R1cmUgZmllbGRzIGFyZSBpbml0aWFsaXplZDogYHR5cGVgIGFuZCBgZnJhbWVfaGFuZGxlcmAgYXJlIGFzc2lnbmVkIHRoZWlyIHByb3ZpZGVkIHZhbHVlcywgYW5kIHRoZSBgbGlzdGAgbWVtYmVyIGlzIGFkZGVkIHRvIHRoZSBgaGxpc3RfaGVhZGAgb2YgZnJhbWUgdHlwZXMuIFRoZSBgcmN1YCBtZW1iZXIgaXMgbGlrZWx5IHVzZWQgZm9yIFJDVS1zYWZlIGZyZWVpbmcgbGF0ZXIuIFRoZSBgaGxpc3RfYWRkX2hlYWRfcmN1YCBmdW5jdGlvbiBpbXBsaWNpdGx5IGluaXRpYWxpemVzIGBsaXN0YC4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBhcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgcmVhZHMgb3IgcG90ZW50aWFsIGxlYWtzIHRvIHVzZXJzcGFjZT8gTGV0JiMzOTtzIHRyYWNlIGl0LiBUaGUgYGZ0YCBzdHJ1Y3R1cmUgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IGBicl9wcm9jZXNzX2ZyYW1lX3R5cGVgIHRvIHJlYWQgaXRzIGB0eXBlYCBhbmQgYGZyYW1lX2hhbmRsZXJgIG1lbWJlcnMsIGFuZCB0byB0cmF2ZXJzZSB0aGUgbGlzdCB2aWEgYGxpc3RgLiBJbXBvcnRhbnRseSwgYWxsIGZpZWxkcyAqcmVhZCogYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQgdmFsdWVzLiBUaGVyZSBpcyBubyBjb3B5aW5nIG9mIGRhdGEgdG8gdXNlcnNwYWNlLCBzbyB0aGVyZSYjMzk7cyBubyByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRocm91Z2ggdGhhdCBjaGFubmVsLiBJIHNlZSBubyB1bmluaXRpYWxpemVkIGRhdGEgYmVpbmcgdXNlZCBmb3IgY29uZGl0aW9uYWwgYnJhbmNoaW5nLiBBbmQgbm8gcGFkZGluZyBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBlaXRoZXIuCgpOZXh0LCBJIG5lZWQgdG8gY29uc2lkZXIgbWVtb3J5IG1hbmFnZW1lbnQsIGNvbmN1cnJlbmN5LCBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIG1lbW9yeSBsZWFrcy4gVGhlIGZ1bmN0aW9uIGR5bmFtaWNhbGx5IGFsbG9jYXRlcyBgYnJfZnJhbWVfdHlwZWAgdXNpbmcgYGttYWxsb2Nfb2JqYC4gVGhpcyBzdHJ1Y3R1cmUgd2lsbCBldmVudHVhbGx5IGJlIGRlYWxsb2NhdGVkIHVzaW5nIGBrZnJlZV9yY3VgLCBpbmRpY2F0aW5nIGl0JiMzOTtzIFJDVS1wcm90ZWN0ZWQuIFRoYXQgc3VnZ2VzdHMgd2UgaGF2ZSB0byBjb25zaWRlciBSQ1Ugc3luY2hyb25pemF0aW9uLiBIb3dldmVyLCBhbnkgYnVncyBpbiBSQ1UgbGlzdCB0cmF2ZXJzYWwgb3IgbWVtb3J5IGZyZWVpbmcgKGxpa2UgVUFGIG9yIGRvdWJsZS1mcmVlKSBhcmUgdGhpbmdzIHRoYXQgd291bGQgZ2V0IGNhdWdodCBieSBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCBtZW1vcnkgZGV0ZWN0b3JzLiBJIGZlZWwgY29uZmlkZW50IGFib3V0IHRoaXMgcG9pbnQuCgpHaXZlbiB0aGUgb3ZlcmFsbCBjb2RlIGFuYWx5c2lzLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBFdmVyeXRoaW5nIHRvdWNoZWQgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQuCgpSZXZpZXdpbmcgdGhlIEtNU0FOIHJ1bGVzIGhlbHBzIG1lIGNvbmZpcm0gbXkgY29uY2x1c2lvbi4gVGhlIGNvZGUgZG9lc24mIzM5O3QgbWVldCB0aGUgY3JpdGVyaWEgZm9yIGBOZWVkc0tNU0FOPXRydWVgLiBJdCBmYWxscyBpbnRvIHRoZSBjYXRlZ29yeSBvZiBjb2RlIHRoYXQgcHJpbWFyaWx5IGludHJvZHVjZXMgcmlza3MgbGlrZSBVQUYsIG1lbW9yeSBsZWFrcywgZXRjLiwgd2hpY2ggYXJlIGNhdWdodCBieSBleGlzdGluZyBkZXRlY3RvcnMuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBjcmVhdGUgYSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgZXRoZXJuZXQgZnJhbWUgaGFuZGxlcnMgKHN1Y2ggYXMgQ0ZNIGFuZCBNUlApIGFyZSByZWdpc3RlcmVkIGluIHRoZSBicmlkZ2UgbW9kdWxlLiBJbnN0ZWFkIG9mIHVzaW5nIHN0YXRpYyBnbG9iYWwgYHN0cnVjdCBicl9mcmFtZV90eXBlYCB2YXJpYWJsZXMsIGl0IGR5bmFtaWNhbGx5IGFsbG9jYXRlcyBgc3RydWN0IGJyX2ZyYW1lX3R5cGVgIHVzaW5nIGBrbWFsbG9jX29iamAgYW5kIHByb3RlY3RzIGl0cyByZW1vdmFsIHdpdGggYGtmcmVlX3JjdWAuXG5cbkFsbCBmaWVsZHMgKGB0eXBlYCwgYGZyYW1lX2hhbmRsZXJgLCBhbmQgYGxpc3RgKSBhY2Nlc3NlZCBieSBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYCBhbmQgbGlzdCB0cmF2ZXJzYWwgZnVuY3Rpb25zIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBpbnNlcnRpb24gaW50byBgYnItXHUwMDNlZnJhbWVfdHlwZV9saXN0YC4gTm9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgYXJlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvciBjYWxjdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyAoc3VjaCBhcyBSQ1Ugc3luY2hyb25pemF0aW9uIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgZXRoZXJuZXQgZnJhbWUgaGFuZGxlcnMgKHN1Y2ggYXMgQ0ZNIGFuZCBNUlApIGFyZSByZWdpc3RlcmVkIGluIHRoZSBicmlkZ2UgbW9kdWxlLiBJbnN0ZWFkIG9mIHVzaW5nIHN0YXRpYyBnbG9iYWwgYHN0cnVjdCBicl9mcmFtZV90eXBlYCB2YXJpYWJsZXMsIGl0IGR5bmFtaWNhbGx5IGFsbG9jYXRlcyBgc3RydWN0IGJyX2ZyYW1lX3R5cGVgIHVzaW5nIGBrbWFsbG9jX29iamAgYW5kIHByb3RlY3RzIGl0cyByZW1vdmFsIHdpdGggYGtmcmVlX3JjdWAuXG5cbkFsbCBmaWVsZHMgKGB0eXBlYCwgYGZyYW1lX2hhbmRsZXJgLCBhbmQgYGxpc3RgKSBhY2Nlc3NlZCBieSBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYCBhbmQgbGlzdCB0cmF2ZXJzYWwgZnVuY3Rpb25zIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBpbnNlcnRpb24gaW50byBgYnItXHUwMDNlZnJhbWVfdHlwZV9saXN0YC4gTm9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgYXJlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvciBjYWxjdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyAoc3VjaCBhcyBSQ1Ugc3luY2hyb25pemF0aW9uIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE2OjQ0Ljc1NzgxOTM2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMTczMzIxNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX0NGTVwiLFxuICAgIFwiQlJJREdFX01SUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX2FkZF9mcmFtZVwiLFxuICAgIFwiYnJfZGVsX2ZyYW1lXCIsXG4gICAgXCJicl9kZWxfZnJhbWVfYWxsXCIsXG4gICAgXCJicl9jZm1fbWVwX2NyZWF0ZVwiLFxuICAgIFwiYnJfY2ZtX21lcF9kZWxldGVcIixcbiAgICBcImJyX21ycF9hZGRcIixcbiAgICBcImJyX21ycF9kZWxcIixcbiAgICBcImJyX2Rldl9kZWxldGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBldGhlcm5ldCBmcmFtZSBoYW5kbGVycyAoc3VjaCBhcyBDRk0gYW5kIE1SUCkgYXJlIHJlZ2lzdGVyZWQgaW4gdGhlIGJyaWRnZSBtb2R1bGUuIEluc3RlYWQgb2YgdXNpbmcgc3RhdGljIGdsb2JhbCBgc3RydWN0IGJyX2ZyYW1lX3R5cGVgIHZhcmlhYmxlcywgaXQgZHluYW1pY2FsbHkgYWxsb2NhdGVzIGBzdHJ1Y3QgYnJfZnJhbWVfdHlwZWAgdXNpbmcgYGttYWxsb2Nfb2JqYCBhbmQgcHJvdGVjdHMgaXRzIHJlbW92YWwgd2l0aCBga2ZyZWVfcmN1YC5cXG5cXG5BbGwgZmllbGRzIChgdHlwZWAsIGBmcmFtZV9oYW5kbGVyYCwgYW5kIGBsaXN0YCkgYWNjZXNzZWQgYnkgYGJyX3Byb2Nlc3NfZnJhbWVfdHlwZWAgYW5kIGxpc3QgdHJhdmVyc2FsIGZ1bmN0aW9ucyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgaW5zZXJ0aW9uIGludG8gYGJyLVxcdTAwM2VmcmFtZV90eXBlX2xpc3RgLiBOb25lIG9mIHRoZXNlIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhcmUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHVzZWQgaW4gY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9yIGNhbGN1bGF0aW9ucy4gQW55IHBvdGVudGlhbCBidWdzIChzdWNoIGFzIFJDVSBzeW5jaHJvbml6YXRpb24gaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGxlYWtzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGJyaWRnZSBFdGhlcm5ldCBmcmFtZSB0eXBlIGhhbmRsZXIgcmVnaXN0cmF0aW9uL2RlcmVnaXN0cmF0aW9uIG1lY2hhbmlzbS4gUHJldmlvdXNseSwgc3RhdGljYWxseSBhbGxvY2F0ZWQgZnJhbWUgdHlwZSBzdHJ1Y3R1cmVzIChzdWNoIGFzIGNmbV9mcmFtZV90eXBlIGFuZCBtcnBfZnJhbWVfdHlwZSkgd2VyZSByZWdpc3RlcmVkIGRpcmVjdGx5IHRvIGJyaWRnZSBpbnN0YW5jZXMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gbGlzdCBjb3JydXB0aW9uIGFjcm9zcyBtdWx0aXBsZSBicmlkZ2VzLiBUaGUgcGF0Y2ggY2hhbmdlcyB0aGlzIHRvIGR5bmFtaWMgcGVyLWJyaWRnZSBhbGxvY2F0aW9uIGFuZCBSQ1UtYmFzZWQgZnJlZWluZyBvZiBmcmFtZSB0eXBlIG5vZGVzLCBpbnRyb2R1Y2VzIGVycm9yIGhhbmRsaW5nIG9uIGFsbG9jYXRpb24gZmFpbHVyZSwgYW5kIGFkZHMgY2xlYW51cCBvZiBhbGwgcmVnaXN0ZXJlZCBmcmFtZSB0eXBlcyBkdXJpbmcgYnJpZGdlIGRldmljZSBkZWxldGlvbiAoYnJfZGV2X2RlbGV0ZSkuIFRoZXNlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY2hhbmdlcyB3YXJyYW50IGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLCBjb25jdXJyZW5jeSBpc3N1ZXMsIG9yIGVycm9yIGhhbmRsaW5nIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToxNjo0NC43NTc4Mjc3MTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTYyMDY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI2NmZkYTIyN2IyMjljMGFmY2YyMGUzOTUxNzEyNTI5NjNhZjY2MTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAwOToxNjo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2NmbS5jIGIvbmV0L2JyaWRnZS9icl9jZm0uY1xcbmluZGV4IGRlYTU2ZmZmYTFjMTkuLjU3OTAyNDg1ODgyOTggMTAwNjQ0XFxuLS0tIGEvbmV0L2JyaWRnZS9icl9jZm0uY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfY2ZtLmNcXG5AQCAtNDg5LDExICs0ODksNiBAQCBzdGF0aWMgaW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCBicl9mcmFtZV90eXBlIGNmbV9mcmFtZV90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XFxuLVxcdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfQ0ZNKSxcXG4tXFx0LmZyYW1lX2hhbmRsZXIgPSBicl9jZm1fZnJhbWVfcngsXFxuLX07XFxuLVxcbiBpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbiBcXHRcXHQgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsXFxuIFxcdFxcdCAgICAgIHN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSAqY29uc3QgY3JlYXRlLFxcbkBAIC01MDEsNiArNDk2LDcgQEAgaW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwO1xcbiBcXHRzdHJ1Y3QgYnJfY2ZtX21lcCAqbWVwO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4gXFx0QVNTRVJUX1JUTkwoKTtcXG4gXFxuQEAgLTU1OCw4ICs1NTQsMTMgQEAgaW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4gXFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZtZXAtXFx1MDAzZXBlZXJfbWVwX2xpc3QpO1xcbiBcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2bWVwLVxcdTAwM2VjY21fdHhfZHdvcmssIGNjbV90eF93b3JrX2V4cGlyZWQpO1xcbiBcXG4tXFx0aWYgKGhsaXN0X2VtcHR5KFxcdTAwMjZici1cXHUwMDNlbWVwX2xpc3QpKVxcbi1cXHRcXHRicl9hZGRfZnJhbWUoYnIsIFxcdTAwMjZjZm1fZnJhbWVfdHlwZSk7XFxuK1xcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2YnItXFx1MDAzZW1lcF9saXN0KSkge1xcbitcXHRcXHRlcnIgPSBicl9hZGRfZnJhbWUoYnIsIGNwdV90b19iZTE2KEVUSF9QX0NGTSksIGJyX2NmbV9mcmFtZV9yeCk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0a2ZyZWUobWVwKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcbiBcXHRobGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNm1lcC1cXHUwMDNlaGVhZCwgXFx1MDAyNmJyLVxcdTAwM2VtZXBfbGlzdCk7XFxuIFxcbkBAIC01ODgsNyArNTg5LDcgQEAgc3RhdGljIHZvaWQgbWVwX2RlbGV0ZV9pbXBsZW1lbnRhdGlvbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuIFxcdGtmcmVlX3JjdShtZXAsIHJjdSk7XFxuIFxcbiBcXHRpZiAoaGxpc3RfZW1wdHkoXFx1MDAyNmJyLVxcdTAwM2VtZXBfbGlzdCkpXFxuLVxcdFxcdGJyX2RlbF9mcmFtZShiciwgXFx1MDAyNmNmbV9mcmFtZV90eXBlKTtcXG4rXFx0XFx0YnJfZGVsX2ZyYW1lKGJyLCBjcHVfdG9fYmUxNihFVEhfUF9DRk0pKTtcXG4gfVxcbiBcXG4gaW50IGJyX2NmbV9tZXBfZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pZi5jIGIvbmV0L2JyaWRnZS9icl9pZi5jXFxuaW5kZXggYzUyNjEzNDMxZjg4Ni4uZmU4ZTlhNDdlMWFjMSAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX2lmLmNcXG4rKysgYi9uZXQvYnJpZGdlL2JyX2lmLmNcXG5AQCAtMzk3LDYgKzM5Nyw4IEBAIHZvaWQgYnJfZGV2X2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbiBcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZici1cXHUwMDNldGNuX3RpbWVyKTtcXG4gXFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZici1cXHUwMDNlZ2Nfd29yayk7XFxuIFxcbitcXHRicl9kZWxfZnJhbWVfYWxsKGJyKTtcXG4rXFxuIFxcdGJyX3N5c2ZzX2RlbGJyKGJyLVxcdTAwM2VkZXYpO1xcbiBcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShici1cXHUwMDNlZGV2LCBoZWFkKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmNcXG5pbmRleCBkODdhNWY5ZmE5MmI3Li4wN2VmZDBmYmNmOWNkIDEwMDY0NFxcbi0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xcbkBAIC00NjgsMTggKzQ2OCw0OCBAQCByeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIGJyX2hhbmRsZV9mcmFtZTtcXG4gfVxcbiBcXG4tdm9pZCBicl9hZGRfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQpXFxuK2ludCBicl9hZGRfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBfX2JlMTYgdHlwZSxcXG4rXFx0XFx0IGludCAoKmZyYW1lX2hhbmRsZXIpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpKVxcbiB7XFxuK1xcdHN0cnVjdCBicl9mcmFtZV90eXBlICpmdDtcXG4rXFxuK1xcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZ0LCBcXHUwMDI2YnItXFx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdCkge1xcbitcXHRcXHRpZiAoZnQtXFx1MDAzZXR5cGUgPT0gdHlwZSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcdH1cXG4rXFxuK1xcdGZ0ID0ga21hbGxvY19vYmooKmZ0KTtcXG4rXFx0aWYgKCFmdClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRmdC1cXHUwMDNldHlwZSA9IHR5cGU7XFxuK1xcdGZ0LVxcdTAwM2VmcmFtZV9oYW5kbGVyID0gZnJhbWVfaGFuZGxlcjtcXG4gXFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZmdC1cXHUwMDNlbGlzdCwgXFx1MDAyNmJyLVxcdTAwM2VmcmFtZV90eXBlX2xpc3QpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KVxcbit2b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlKVxcbiB7XFxuLVxcdHN0cnVjdCBicl9mcmFtZV90eXBlICp0bXA7XFxuK1xcdHN0cnVjdCBicl9mcmFtZV90eXBlICpmdDtcXG4gXFxuLVxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgXFx1MDAyNmJyLVxcdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpXFxuLVxcdFxcdGlmIChmdCA9PSB0bXApIHtcXG4rXFx0aGxpc3RfZm9yX2VhY2hfZW50cnkoZnQsIFxcdTAwMjZici1cXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KSB7XFxuK1xcdFxcdGlmIChmdC1cXHUwMDNldHlwZSA9PSB0eXBlKSB7XFxuIFxcdFxcdFxcdGhsaXN0X2RlbF9yY3UoXFx1MDAyNmZ0LVxcdTAwM2VsaXN0KTtcXG4rXFx0XFx0XFx0a2ZyZWVfcmN1KGZ0LCByY3UpO1xcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbit2b2lkIGJyX2RlbF9mcmFtZV9hbGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbit7XFxuK1xcdHN0cnVjdCBicl9mcmFtZV90eXBlICpmdDtcXG4rXFx0c3RydWN0IGhsaXN0X25vZGUgKm47XFxuK1xcbitcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZ0LCBuLCBcXHUwMDI2YnItXFx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdCkge1xcbitcXHRcXHRobGlzdF9kZWxfcmN1KFxcdTAwMjZmdC1cXHUwMDNlbGlzdCk7XFxuK1xcdFxcdGtmcmVlX3JjdShmdCwgcmN1KTtcXG4rXFx0fVxcbiB9XFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXJwLmMgYi9uZXQvYnJpZGdlL2JyX21ycC5jXFxuaW5kZXggZWYxNmQwNzAzOTI0MS4uNTExYWU4YWYzZDAzMyAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX21ycC5jXFxuKysrIGIvbmV0L2JyaWRnZS9icl9tcnAuY1xcbkBAIC04LDExICs4LDYgQEAgc3RhdGljIGNvbnN0IHU4IG1ycF9pbl90ZXN0X2RtYWNbRVRIX0FMRU5dID0geyAweDEsIDB4MTUsIDB4NGUsIDB4MCwgMHgwLCAweDMgfTtcXG4gXFxuIHN0YXRpYyBpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIFxcbi1zdGF0aWMgc3RydWN0IGJyX2ZyYW1lX3R5cGUgbXJwX2ZyYW1lX3R5cGUgX19yZWFkX21vc3RseSA9IHtcXG4tXFx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9NUlApLFxcbi1cXHQuZnJhbWVfaGFuZGxlciA9IGJyX21ycF9wcm9jZXNzLFxcbi19O1xcbi1cXG4gc3RhdGljIGJvb2wgYnJfbXJwX2lzX3JpbmdfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwX3BvcnQsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnNfcG9ydCxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5AQCAtNDg2LDcgKzQ4MSw3IEBAIHN0YXRpYyB2b2lkIGJyX21ycF9kZWxfaW1wbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnAgKm1ycClcXG4gXFx0a2ZyZWVfcmN1KG1ycCwgcmN1KTtcXG4gXFxuIFxcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2YnItXFx1MDAzZW1ycF9saXN0KSlcXG4tXFx0XFx0YnJfZGVsX2ZyYW1lKGJyLCBcXHUwMDI2bXJwX2ZyYW1lX3R5cGUpO1xcbitcXHRcXHRicl9kZWxfZnJhbWUoYnIsIGNwdV90b19iZTE2KEVUSF9QX01SUCkpO1xcbiB9XFxuIFxcbiAvKiBBZGRzIGEgbmV3IE1SUCBpbnN0YW5jZS5cXG5AQCAtNTM1LDEzICs1MzAsMTYgQEAgaW50IGJyX21ycF9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSlcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmJyLVxcdTAwM2Vsb2NrKTtcXG4gXFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1ycC1cXHUwMDNlc19wb3J0LCBwKTtcXG4gXFxuLVxcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2YnItXFx1MDAzZW1ycF9saXN0KSlcXG4tXFx0XFx0YnJfYWRkX2ZyYW1lKGJyLCBcXHUwMDI2bXJwX2ZyYW1lX3R5cGUpO1xcbi1cXG4gXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNm1ycC1cXHUwMDNldGVzdF93b3JrLCBicl9tcnBfdGVzdF93b3JrX2V4cGlyZWQpO1xcbiBcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2bXJwLVxcdTAwM2Vpbl90ZXN0X3dvcmssIGJyX21ycF9pbl90ZXN0X3dvcmtfZXhwaXJlZCk7XFxuIFxcdGhsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2bXJwLVxcdTAwM2VsaXN0LCBcXHUwMDI2YnItXFx1MDAzZW1ycF9saXN0KTtcXG4gXFxuK1xcdGlmIChobGlzdF9pc19zaW5ndWxhcl9ub2RlKFxcdTAwMjZtcnAtXFx1MDAzZWxpc3QsIFxcdTAwMjZici1cXHUwMDNlbXJwX2xpc3QpKSB7XFxuK1xcdFxcdGVyciA9IGJyX2FkZF9mcmFtZShiciwgY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSwgYnJfbXJwX3Byb2Nlc3MpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGRlbGV0ZV9tcnA7XFxuK1xcdH1cXG4rXFxuIFxcdGVyciA9IGJyX21ycF9zd2l0Y2hkZXZfYWRkKGJyLCBtcnApO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGRlbGV0ZV9tcnA7XFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcXG5pbmRleCBkMzM3YjFjZmI5ODBkLi41MTYzMDE3ZmViNzRkIDEwMDY0NFxcbi0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXFxuKysrIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcXG5AQCAtOTM3LDEwICs5MzcsMTQgQEAgc3RydWN0IGJyX2ZyYW1lX3R5cGUge1xcbiBcXHRpbnRcXHRcXHRcXHQoKmZyYW1lX2hhbmRsZXIpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gXFx0c3RydWN0IGhsaXN0X25vZGVcXHRsaXN0O1xcbitcXHRzdHJ1Y3QgcmN1X2hlYWRcXHRcXHRyY3U7XFxuIH07XFxuIFxcbi12b2lkIGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdCk7XFxuLXZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTtcXG4raW50IGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlLFxcbitcXHRcXHQgaW50ICgqZnJhbWVfaGFuZGxlcikoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikpO1xcbit2b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlKTtcXG4rdm9pZCBicl9kZWxfZnJhbWVfYWxsKHN0cnVjdCBuZXRfYnJpZGdlICpicik7XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgYnJfcnhfaGFuZGxlcl9jaGVja19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToxNjo0NS4yNTQ0NzI1MzVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI5ODE2MzgzMTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX0NGTVwiLFxuICAgIFwiQlJJREdFX01SUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX2FkZF9mcmFtZVwiLFxuICAgIFwiYnJfZGVsX2ZyYW1lXCIsXG4gICAgXCJicl9kZWxfZnJhbWVfYWxsXCIsXG4gICAgXCJicl9jZm1fbWVwX2NyZWF0ZVwiLFxuICAgIFwiYnJfY2ZtX21lcF9kZWxldGVcIixcbiAgICBcImJyX21ycF9hZGRcIixcbiAgICBcImJyX21ycF9kZWxcIixcbiAgICBcImJyX2Rldl9kZWxldGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGJyaWRnZSBFdGhlcm5ldCBmcmFtZSB0eXBlIGhhbmRsZXIgcmVnaXN0cmF0aW9uL2RlcmVnaXN0cmF0aW9uIG1lY2hhbmlzbS4gUHJldmlvdXNseSwgc3RhdGljYWxseSBhbGxvY2F0ZWQgZnJhbWUgdHlwZSBzdHJ1Y3R1cmVzIChzdWNoIGFzIGNmbV9mcmFtZV90eXBlIGFuZCBtcnBfZnJhbWVfdHlwZSkgd2VyZSByZWdpc3RlcmVkIGRpcmVjdGx5IHRvIGJyaWRnZSBpbnN0YW5jZXMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gbGlzdCBjb3JydXB0aW9uIGFjcm9zcyBtdWx0aXBsZSBicmlkZ2VzLiBUaGUgcGF0Y2ggY2hhbmdlcyB0aGlzIHRvIGR5bmFtaWMgcGVyLWJyaWRnZSBhbGxvY2F0aW9uIGFuZCBSQ1UtYmFzZWQgZnJlZWluZyBvZiBmcmFtZSB0eXBlIG5vZGVzLCBpbnRyb2R1Y2VzIGVycm9yIGhhbmRsaW5nIG9uIGFsbG9jYXRpb24gZmFpbHVyZSwgYW5kIGFkZHMgY2xlYW51cCBvZiBhbGwgcmVnaXN0ZXJlZCBmcmFtZSB0eXBlcyBkdXJpbmcgYnJpZGdlIGRldmljZSBkZWxldGlvbiAoYnJfZGV2X2RlbGV0ZSkuIFRoZXNlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY2hhbmdlcyB3YXJyYW50IGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLCBjb25jdXJyZW5jeSBpc3N1ZXMsIG9yIGVycm9yIGhhbmRsaW5nIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI2NmZkYTIyN2IyMjljMGFmY2YyMGUzOTUxNzEyNTI5NjNhZjY2MTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDA5OjE2OjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9jZm0uYyBiL25ldC9icmlkZ2UvYnJfY2ZtLmNcbmluZGV4IGRlYTU2ZmZmYTFjMTkuLjU3OTAyNDg1ODgyOTggMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX2NmbS5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX2NmbS5jXG5AQCAtNDg5LDExICs0ODksNiBAQCBzdGF0aWMgaW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSBjZm1fZnJhbWVfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuLVx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9DRk0pLFxuLVx0LmZyYW1lX2hhbmRsZXIgPSBicl9jZm1fZnJhbWVfcngsXG4tfTtcbi1cbiBpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0XHQgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsXG4gXHRcdCAgICAgIHN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSAqY29uc3QgY3JlYXRlLFxuQEAgLTUwMSw2ICs0OTYsNyBAQCBpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIHtcbiBcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7XG4gXHRzdHJ1Y3QgYnJfY2ZtX21lcCAqbWVwO1xuK1x0aW50IGVycjtcbiBcbiBcdEFTU0VSVF9SVE5MKCk7XG4gXG5AQCAtNTU4LDggKzU1NCwxMyBAQCBpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm1lcC1cdTAwM2VwZWVyX21lcF9saXN0KTtcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm1lcC1cdTAwM2VjY21fdHhfZHdvcmssIGNjbV90eF93b3JrX2V4cGlyZWQpO1xuIFxuLVx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1lcF9saXN0KSlcbi1cdFx0YnJfYWRkX2ZyYW1lKGJyLCBcdTAwMjZjZm1fZnJhbWVfdHlwZSk7XG4rXHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2YnItXHUwMDNlbWVwX2xpc3QpKSB7XG4rXHRcdGVyciA9IGJyX2FkZF9mcmFtZShiciwgY3B1X3RvX2JlMTYoRVRIX1BfQ0ZNKSwgYnJfY2ZtX2ZyYW1lX3J4KTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGtmcmVlKG1lcCk7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1x0fVxuIFxuIFx0aGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNm1lcC1cdTAwM2VoZWFkLCBcdTAwMjZici1cdTAwM2VtZXBfbGlzdCk7XG4gXG5AQCAtNTg4LDcgKzU4OSw3IEBAIHN0YXRpYyB2b2lkIG1lcF9kZWxldGVfaW1wbGVtZW50YXRpb24oc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0a2ZyZWVfcmN1KG1lcCwgcmN1KTtcbiBcbiBcdGlmIChobGlzdF9lbXB0eShcdTAwMjZici1cdTAwM2VtZXBfbGlzdCkpXG4tXHRcdGJyX2RlbF9mcmFtZShiciwgXHUwMDI2Y2ZtX2ZyYW1lX3R5cGUpO1xuK1x0XHRicl9kZWxfZnJhbWUoYnIsIGNwdV90b19iZTE2KEVUSF9QX0NGTSkpO1xuIH1cbiBcbiBpbnQgYnJfY2ZtX21lcF9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaWYuYyBiL25ldC9icmlkZ2UvYnJfaWYuY1xuaW5kZXggYzUyNjEzNDMxZjg4Ni4uZmU4ZTlhNDdlMWFjMSAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfaWYuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9pZi5jXG5AQCAtMzk3LDYgKzM5Nyw4IEBAIHZvaWQgYnJfZGV2X2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuIFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZici1cdTAwM2V0Y25fdGltZXIpO1xuIFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmJyLVx1MDAzZWdjX3dvcmspO1xuIFxuK1x0YnJfZGVsX2ZyYW1lX2FsbChicik7XG4rXG4gXHRicl9zeXNmc19kZWxicihici1cdTAwM2VkZXYpO1xuIFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoYnItXHUwMDNlZGV2LCBoZWFkKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jXG5pbmRleCBkODdhNWY5ZmE5MmI3Li4wN2VmZDBmYmNmOWNkIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmNcbkBAIC00NjgsMTggKzQ2OCw0OCBAQCByeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiBicl9oYW5kbGVfZnJhbWU7XG4gfVxuIFxuLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KVxuK2ludCBicl9hZGRfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBfX2JlMTYgdHlwZSxcbitcdFx0IGludCAoKmZyYW1lX2hhbmRsZXIpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSlcbiB7XG4rXHRzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQ7XG4rXG4rXHRobGlzdF9mb3JfZWFjaF9lbnRyeShmdCwgXHUwMDI2YnItXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KSB7XG4rXHRcdGlmIChmdC1cdTAwM2V0eXBlID09IHR5cGUpXG4rXHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXHR9XG4rXG4rXHRmdCA9IGttYWxsb2Nfb2JqKCpmdCk7XG4rXHRpZiAoIWZ0KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZ0LVx1MDAzZXR5cGUgPSB0eXBlO1xuK1x0ZnQtXHUwMDNlZnJhbWVfaGFuZGxlciA9IGZyYW1lX2hhbmRsZXI7XG4gXHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2ZnQtXHUwMDNlbGlzdCwgXHUwMDI2YnItXHUwMDNlZnJhbWVfdHlwZV9saXN0KTtcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbi12b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdClcbit2b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlKVxuIHtcbi1cdHN0cnVjdCBicl9mcmFtZV90eXBlICp0bXA7XG4rXHRzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQ7XG4gXG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsIFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdClcbi1cdFx0aWYgKGZ0ID09IHRtcCkge1xuK1x0aGxpc3RfZm9yX2VhY2hfZW50cnkoZnQsIFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdCkge1xuK1x0XHRpZiAoZnQtXHUwMDNldHlwZSA9PSB0eXBlKSB7XG4gXHRcdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZmdC1cdTAwM2VsaXN0KTtcbitcdFx0XHRrZnJlZV9yY3UoZnQsIHJjdSk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4rXHR9XG4rfVxuK1xuK3ZvaWQgYnJfZGVsX2ZyYW1lX2FsbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4re1xuK1x0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0O1xuK1x0c3RydWN0IGhsaXN0X25vZGUgKm47XG4rXG4rXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZ0LCBuLCBcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHtcbitcdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZmdC1cdTAwM2VsaXN0KTtcbitcdFx0a2ZyZWVfcmN1KGZ0LCByY3UpO1xuK1x0fVxuIH1cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX21ycC5jIGIvbmV0L2JyaWRnZS9icl9tcnAuY1xuaW5kZXggZWYxNmQwNzAzOTI0MS4uNTExYWU4YWYzZDAzMyAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfbXJwLmNcbisrKyBiL25ldC9icmlkZ2UvYnJfbXJwLmNcbkBAIC04LDExICs4LDYgQEAgc3RhdGljIGNvbnN0IHU4IG1ycF9pbl90ZXN0X2RtYWNbRVRIX0FMRU5dID0geyAweDEsIDB4MTUsIDB4NGUsIDB4MCwgMHgwLCAweDMgfTtcbiBcbiBzdGF0aWMgaW50IGJyX21ycF9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBza19idWZmICpza2IpO1xuIFxuLXN0YXRpYyBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSBtcnBfZnJhbWVfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuLVx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9NUlApLFxuLVx0LmZyYW1lX2hhbmRsZXIgPSBicl9tcnBfcHJvY2Vzcyxcbi19O1xuLVxuIHN0YXRpYyBib29sIGJyX21ycF9pc19yaW5nX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcF9wb3J0LFxuIFx0XHRcdFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqc19wb3J0LFxuIFx0XHRcdFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbkBAIC00ODYsNyArNDgxLDcgQEAgc3RhdGljIHZvaWQgYnJfbXJwX2RlbF9pbXBsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycCAqbXJwKVxuIFx0a2ZyZWVfcmN1KG1ycCwgcmN1KTtcbiBcbiBcdGlmIChobGlzdF9lbXB0eShcdTAwMjZici1cdTAwM2VtcnBfbGlzdCkpXG4tXHRcdGJyX2RlbF9mcmFtZShiciwgXHUwMDI2bXJwX2ZyYW1lX3R5cGUpO1xuK1x0XHRicl9kZWxfZnJhbWUoYnIsIGNwdV90b19iZTE2KEVUSF9QX01SUCkpO1xuIH1cbiBcbiAvKiBBZGRzIGEgbmV3IE1SUCBpbnN0YW5jZS5cbkBAIC01MzUsMTMgKzUzMCwxNiBAQCBpbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKVxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YnItXHUwMDNlbG9jayk7XG4gXHRyY3VfYXNzaWduX3BvaW50ZXIobXJwLVx1MDAzZXNfcG9ydCwgcCk7XG4gXG4tXHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2YnItXHUwMDNlbXJwX2xpc3QpKVxuLVx0XHRicl9hZGRfZnJhbWUoYnIsIFx1MDAyNm1ycF9mcmFtZV90eXBlKTtcbi1cbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm1ycC1cdTAwM2V0ZXN0X3dvcmssIGJyX21ycF90ZXN0X3dvcmtfZXhwaXJlZCk7XG4gXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZtcnAtXHUwMDNlaW5fdGVzdF93b3JrLCBicl9tcnBfaW5fdGVzdF93b3JrX2V4cGlyZWQpO1xuIFx0aGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNm1ycC1cdTAwM2VsaXN0LCBcdTAwMjZici1cdTAwM2VtcnBfbGlzdCk7XG4gXG4rXHRpZiAoaGxpc3RfaXNfc2luZ3VsYXJfbm9kZShcdTAwMjZtcnAtXHUwMDNlbGlzdCwgXHUwMDI2YnItXHUwMDNlbXJwX2xpc3QpKSB7XG4rXHRcdGVyciA9IGJyX2FkZF9mcmFtZShiciwgY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSwgYnJfbXJwX3Byb2Nlc3MpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZGVsZXRlX21ycDtcbitcdH1cbitcbiBcdGVyciA9IGJyX21ycF9zd2l0Y2hkZXZfYWRkKGJyLCBtcnApO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBkZWxldGVfbXJwO1xuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbmluZGV4IGQzMzdiMWNmYjk4MGQuLjUxNjMwMTdmZWI3NGQgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuKysrIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbkBAIC05MzcsMTAgKzkzNywxNCBAQCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSB7XG4gXHRpbnRcdFx0XHQoKmZyYW1lX2hhbmRsZXIpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG4gXHRcdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpO1xuIFx0c3RydWN0IGhsaXN0X25vZGVcdGxpc3Q7XG4rXHRzdHJ1Y3QgcmN1X2hlYWRcdFx0cmN1O1xuIH07XG4gXG4tdm9pZCBicl9hZGRfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQpO1xuLXZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTtcbitpbnQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgX19iZTE2IHR5cGUsXG4rXHRcdCBpbnQgKCpmcmFtZV9oYW5kbGVyKShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikpO1xuK3ZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgX19iZTE2IHR5cGUpO1xuK3ZvaWQgYnJfZGVsX2ZyYW1lX2FsbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBicl9yeF9oYW5kbGVyX2NoZWNrX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE2OjQ1LjI1NDQ3NDQyNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg0NzEzNzQxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCcmlkZ2luZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIHRhcmdldGluZyB0aGUgYG5ldC9icmlkZ2VgIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGBicl9jZm0uY2AsIGBicl9pZi5jYCwgYGJyX2lucHV0LmNgLCBgYnJfbXJwLmNgLCBhbmQgYGJyX3ByaXZhdGUuaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkZpbmFsbHksIHNvbWVvbmUgYWRkcmVzc2VkIHRoYXQgc2hhcmVkIGBzdHJ1Y3QgYnJfZnJhbWVfdHlwZWAgaXNzdWUuXCIgSSd2ZSBzZWVuIHRoYXQga2luZCBvZiBzdGF0aWMgc3RydWN0dXJlIGNhdXNlIGhlYWRhY2hlcyBmb3IgYWdlcy5cblxuTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBkaWZmIGNvbmZpcm1zIG15IHN1c3BpY2lvbi4gVGhlIGNvcmUgcHJvYmxlbSwgYXMgSSByZWNhbGwsIHdhcyB0aGF0IGBicl9hZGRfZnJhbWVgIHdhcyB1c2luZyBzdGF0aWNhbGx5IGRlY2xhcmVkIGBzdHJ1Y3QgYnJfZnJhbWVfdHlwZWAgaW5zdGFuY2VzIGxpa2UgYGNmbV9mcmFtZV90eXBlYCBhbmQgYG1ycF9mcmFtZV90eXBlYC4gVGhhdCdzIGEgdGV4dGJvb2sgcmVjaXBlIGZvciBsaXN0IGNvcnJ1cHRpb24gYW5kIHJhY2UgY29uZGl0aW9ucyBpZiBtdWx0aXBsZSBicmlkZ2VzIHdlcmUgYWRkaW5nIHRoZSBzYW1lIGluc3RhbmNlLCBvciBpZiB0aGVyZSB3YXMgY29uY3VycmVudCByZWdpc3RyYXRpb24uIFRoZSBzaGFyZWQgYHN0cnVjdCBobGlzdF9ub2RlIGxpc3RgIHdpdGhpbiB0aG9zZSBzdGF0aWMgaW5zdGFuY2VzIHdhcyB0aGUgY3VscHJpdC5cblxuVGhpcyBwYXRjaCBzbWFydGx5IGFkZHJlc3NlcyBpdCBieSBhbGxvY2F0aW5nIGEgKmR5bmFtaWMqIGBzdHJ1Y3QgYnJfZnJhbWVfdHlwZWAgcGVyIGJyaWRnZSB1c2luZyBga21hbGxvY19vYmpgLiBUaGlzIGlzIHRoZSByaWdodCBhcHByb2FjaC4gVGhlbiwgYGJyX2RlbF9mcmFtZWAgbm93IGNhbGxzIGBrZnJlZV9yY3UoZnQsIHJjdSlgIHRvIHJlbGVhc2UgdGhlIGFsbG9jYXRlZCBtZW1vcnksIGFuZCBjcnVjaWFsbHksIGBicl9kZWxfZnJhbWVfYWxsKGJyKWAgaGFzIGJlZW4gYWRkZWQgdG8gYGJyX2Rldl9kZWxldGVgIHRvIGNsZWFuIHVwIHRoZSBmcmFtZSB0eXBlcyBkdXJpbmcgYnJpZGdlIGRldmljZSBkZWxldGlvbi4gR29vZCwgdGhvcm91Z2ggY2xlYW51cCBpcyBlc3NlbnRpYWwgaGVyZS5cblxuVGhlIGNoYW5nZXMgaW4gYGJyX2NmbS5jYCBhbmQgYGJyX21ycC5jYCB1cGRhdGluZyBmdW5jdGlvbiBzaWduYXR1cmVzIHRvIG1hdGNoIHRoZSBuZXcgYGJyX2FkZF9mcmFtZWAgYW5kIGBicl9kZWxfZnJhbWVgIGFyZSBhcyBleHBlY3RlZCwgYW5kIGdvb2QgdG8gc2VlLiBUaGUgZXJyb3IgaGFuZGxpbmcgaXMgYWxzbyBpbiBwbGFjZSwgd2hpY2ggaXMgYSB2ZXJ5IGdvb2QgYWRkaXRpb24uIEl0J3MgYWxzbyBncmVhdCB0aGF0IGBicl9pbnB1dC5jYCBpcyB1cGRhdGVkLCB0b28uIEFuZCBvZiBjb3Vyc2UsIHRoZSBhZGRpdGlvbiBvZiB0aGUgYHN0cnVjdCByY3VfaGVhZCByY3U7YCBtZW1iZXIgaW4gYHN0cnVjdCBicl9mcmFtZV90eXBlYCB3aXRoaW4gYGJyX3ByaXZhdGUuaGAgaXMgbmVjZXNzYXJ5IHRvIHN1cHBvcnQgdGhlIFJDVS1iYXNlZCBtZW1vcnkgZnJlZWluZy5cblxuTm93LCBiZWZvcmUgSSBnaXZlIHRoaXMgYSBydWJiZXIgc3RhbXAsIEknbSBnb2luZyB0byBydW4gYSBxdWljayBjaGVjayBvbiB0aGUgS2NvbmZpZyByZXF1aXJlbWVudHMgZm9yIGJyaWRnZSwgQ0ZNLCBhbmQgTVJQLiBMZXQncyBtYWtlIHN1cmUgdGhhdCBldmVyeXRoaW5nJ3MgY29uZmlndXJlZCBhcyBleHBlY3RlZCBhbmQgdGhhdCBhbnkgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0bHkgaGFuZGxlZC4gSSB0aGluayBhIHF1aWNrIGdyZXBwaW5nIHNlc3Npb24gdGhyb3VnaCB0aGUgYG5ldC9icmlkZ2VgIEtjb25maWcgZmlsZXMgc2hvdWxkIHByb3ZpZGUgd2hhdCBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToxNjo1My43MjU4NTE1NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDEzNDgxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ0ZNfE1SUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9LY29uZmlnPTUwPWNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy02My1cXG5uZXQvYnJpZGdlL0tjb25maWc6NjQ6Y29uZmlnIEJSSURHRV9NUlBcXG5uZXQvYnJpZGdlL0tjb25maWc6NjU6XFx0Ym9vbCBcXFwiTVJQIHByb3RvY29sXFxcIlxcbm5ldC9icmlkZ2UvS2NvbmZpZy02Ni1cXHRkZXBlbmRzIG9uIEJSSURHRVxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTY4LVxcdGhlbHBcXG5uZXQvYnJpZGdlL0tjb25maWc6Njk6XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSB0byBydW4gTVJQXFxubmV0L2JyaWRnZS9LY29uZmlnLTcwLVxcdCAgcHJvdG9jb2wgdG8gZGV0ZWN0IGxvb3BzXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNzUtXFxubmV0L2JyaWRnZS9LY29uZmlnOjc2OmNvbmZpZyBCUklER0VfQ0ZNXFxubmV0L2JyaWRnZS9LY29uZmlnOjc3OlxcdGJvb2wgXFxcIkNGTSBwcm90b2NvbFxcXCJcXG5uZXQvYnJpZGdlL0tjb25maWctNzgtXFx0ZGVwZW5kcyBvbiBCUklER0VcXG5uZXQvYnJpZGdlL0tjb25maWctNzktXFx0aGVscFxcbm5ldC9icmlkZ2UvS2NvbmZpZzo4MDpcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHRvIHJ1biBDRk1cXG5uZXQvYnJpZGdlL0tjb25maWctODEtXFx0ICBwcm90b2NvbCBhY2NvcmRpbmcgdG8gODAyLjFRIHNlY3Rpb24gMTIuMTRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MTY6NTMuOTY3MjA1NTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTkxNzgzODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEJyaWRnZSBDb25maWd1cmF0aW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBicmlkZ2UgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUga2VybmVsLiBUaW1lIHRvIGRpZyBpbiEgVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgYnkgZXhhbWluaW5nIHRoZSBidWlsZCBzeXN0ZW0gZmlsZXMuIEknbSBnb2luZyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgbmV0L2JyaWRnZS9NYWtlZmlsZWAgYW5kIGBuZXQvYnJpZGdlL0tjb25maWdgLiBUaGVzZSB0d28gZmlsZXMgc2hvdWxkIGdpdmUgbWUgYSBjb21wbGV0ZSBwaWN0dXJlLiBUaGUgTWFrZWZpbGUgd2lsbCBsYXkgb3V0IHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgd2hpbGUgdGhlIEtjb25maWcgZmlsZSBob2xkcyBhbGwgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgaGVscCB0ZXh0LiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBzZWUgZXZlcnl0aGluZyByZWxhdGVkIHRvIGJyaWRnaW5nIGFuZCBob3cgaXQncyBlbmFibGVkIGFuZCBjb25maWd1cmVkIGF0IGNvbXBpbGUgdGltZS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY4NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE2OjU1Ljk1ODk5MzUwNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIElFRUUgODAyLjFkIGV0aGVybmV0IGJyaWRnaW5nIGxheWVyLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfQlJJREdFKSArPSBicmlkZ2Uub1xcbiAgIDc6XFx0XFxuICAgODpcXHRicmlkZ2UteVxcdDo9IGJyLm8gYnJfZGV2aWNlLm8gYnJfZmRiLm8gYnJfZm9yd2FyZC5vIGJyX2lmLm8gYnJfaW5wdXQubyBcXFxcXFxuICAgOTpcXHRcXHRcXHRcXHRicl9pb2N0bC5vIGJyX3N0cC5vIGJyX3N0cF9icGR1Lm8gXFxcXFxcbiAgMTA6XFx0XFx0XFx0XFx0YnJfc3RwX2lmLm8gYnJfc3RwX3RpbWVyLm8gYnJfbmV0bGluay5vIFxcXFxcXG4gIDExOlxcdFxcdFxcdFxcdGJyX25ldGxpbmtfdHVubmVsLm8gYnJfYXJwX25kX3Byb3h5Lm9cXG4gIDEyOlxcdFxcbiAgMTM6XFx0YnJpZGdlLSQoQ09ORklHX1NZU0ZTKSArPSBicl9zeXNmc19pZi5vIGJyX3N5c2ZzX2JyLm9cXG4gIDE0OlxcdFxcbiAgMTU6XFx0YnJpZGdlLSQoc3Vic3QgbSx5LCQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpKSArPSBicl9uZl9jb3JlLm9cXG4gIDE2OlxcdFxcbiAgMTc6XFx0YnJfbmV0ZmlsdGVyLXkgOj0gYnJfbmV0ZmlsdGVyX2hvb2tzLm9cXG4gIDE4OlxcdGJyX25ldGZpbHRlci0kKHN1YnN0IG0seSwkKENPTkZJR19JUFY2KSkgKz0gYnJfbmV0ZmlsdGVyX2lwdjYub1xcbiAgMTk6XFx0b2JqLSQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpICs9IGJyX25ldGZpbHRlci5vXFxuICAyMDpcXHRcXG4gIDIxOlxcdGJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgKz0gYnJfbXVsdGljYXN0Lm8gYnJfbWRiLm8gYnJfbXVsdGljYXN0X2VodC5vXFxuICAyMjpcXHRcXG4gIDIzOlxcdGJyaWRnZS0kKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpICs9IGJyX3ZsYW4ubyBicl92bGFuX3R1bm5lbC5vIGJyX3ZsYW5fb3B0aW9ucy5vIGJyX21zdC5vXFxuICAyNDpcXHRcXG4gIDI1OlxcdGJyaWRnZS0kKENPTkZJR19ORVRfU1dJVENIREVWKSArPSBicl9zd2l0Y2hkZXYub1xcbiAgMjY6XFx0XFxuICAyNzpcXHRvYmotJChDT05GSUdfTkVURklMVEVSKSArPSBuZXRmaWx0ZXIvXFxuICAyODpcXHRcXG4gIDI5OlxcdGJyaWRnZS0kKENPTkZJR19CUklER0VfTVJQKVxcdCs9IGJyX21ycF9zd2l0Y2hkZXYubyBicl9tcnAubyBicl9tcnBfbmV0bGluay5vXFxuICAzMDpcXHRcXG4gIDMxOlxcdGJyaWRnZS0kKENPTkZJR19CUklER0VfQ0ZNKVxcdCs9IGJyX2NmbS5vIGJyX2NmbV9uZXRsaW5rLm9cXG4gIDMyOlxcdFxcbiAgMzM6XFx0aWZkZWYgQ09ORklHX0dDT1ZfUFJPRklMRV9ORVRGSUxURVJcXG4gIDM0OlxcdEdDT1ZfUFJPRklMRV9icl9uZl9jb3JlLm8gOj0geVxcbiAgMzU6XFx0R0NPVl9QUk9GSUxFX2JyX25ldGZpbHRlcl9ob29rcy5vIDo9IHlcXG4gIDM2OlxcdEdDT1ZfUFJPRklMRV9icl9uZXRmaWx0ZXJfaXB2Ni5vIDo9IHlcXG4gIDM3OlxcdGVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE2OjU1Ljk1OTExMDAwNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxMTk1MTUzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBNUlAgYW5kIENGTSBDb25maWd1cmF0aW9uIGFuZCBJbnZvY2F0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHRlY2huaWNhbCB1bmRlcnBpbm5pbmdzIG9mIGhvdyBNUlAgKE11bHRpcGxlIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgYW5kIENGTSAoQ29ubmVjdGl2aXR5IEZhdWx0IE1hbmFnZW1lbnQpIGFyZSBjb25maWd1cmVkIGFuZCBhY3R1YWxseSBjYWxsZWQg4oCTIGhvdyB0aGV5J3JlICppbnZva2VkKi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBob3cgdGhlc2UgdGhpbmdzIGFyZSB3aXJlZCB1cC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBOZXRsaW5rIGlzIGludm9sdmVkIGhlcmUsIGdpdmVuIHRoZSBrZXJuZWwtbGV2ZWwgbmF0dXJlIG9mIHRoZXNlIHByb3RvY29scywgc28gdGhhdCdzIHRoZSBhbmdsZSBJJ20gdGFraW5nLiBTbyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIE5ldGxpbmsgZW50cnkgcG9pbnRzIGZvciBib3RoIENGTSBhbmQgTVJQLiBJIG5lZWQgdG8gZmluZCB0aGUgc3BlY2lmaWMgaG9va3MsIHRoZSBjcml0aWNhbCBjb250cm9sIHBvaW50cywgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIG9wZXJhdGlvbiBvZiB0aGVzZSBwcm90b2NvbHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBzeXN0ZW0uIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgYmFzZSB0byB1bmRlcnN0YW5kIGhvdyB0byBpbnRlcmFjdCB3aXRoIHRoZW0gYXQgYSBzeXN0ZW0gbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MDIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE2OjU5LjA3ODYyODQzOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTMxMjg2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9jZm1fbWVwX2NyZWF0ZXxicl9tcnBfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfY2ZtLmM9MzcwPXN0YXRpYyBpbnQgYnJfY2ZtX2ZyYW1lX3J4KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbS5jLTQ5MS1cXG5uZXQvYnJpZGdlL2JyX2NmbS5jOjQ5MjppbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfY2ZtLmMtNDkzLVxcdFxcdCAgICAgIGNvbnN0IHUzMiBpbnN0YW5jZSxcXG5uZXQvYnJpZGdlL2JyX2NmbS5jOjQ5NDpcXHRcXHQgICAgICBzdHJ1Y3QgYnJfY2ZtX21lcF9jcmVhdGUgKmNvbnN0IGNyZWF0ZSxcXG5uZXQvYnJpZGdlL2JyX2NmbS5jLTQ5NS1cXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM9OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM6OTpicl9jZm1fbWVwX2NyZWF0ZV9wb2xpY3lbSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfTUFYICsgMV0gPSB7XFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTEwLVxcdFtJRkxBX0JSSURHRV9DRk1fTUVQX0NSRUFURV9VTlNQRUNdXFx0PSB7IC50eXBlID0gTkxBX1JFSkVDVCB9LFxcbi0tXFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jPTcyPWJyX2NmbV9wb2xpY3lbSUZMQV9CUklER0VfQ0ZNX01BWCArIDFdID0ge1xcbi0tXFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTc0LVxcdFtJRkxBX0JSSURHRV9DRk1fTUVQX0NSRUFURV1cXHRcXHQ9XFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjc1OlxcdFxcdFxcdFxcdE5MQV9QT0xJQ1lfTkVTVEVEKGJyX2NmbV9tZXBfY3JlYXRlX3BvbGljeSksXFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTc2LVxcdFtJRkxBX0JSSURHRV9DRk1fTUVQX0RFTEVURV1cXHRcXHQ9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM9OTI9c3RhdGljIGludCBicl9tZXBfY3JlYXRlX3BhcnNlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy05NS1cXHRzdHJ1Y3QgbmxhdHRyICp0YltJRkxBX0JSSURHRV9DRk1fTUVQX0NSRUFURV9NQVggKyAxXTtcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM6OTY6XFx0c3RydWN0IGJyX2NmbV9tZXBfY3JlYXRlIGNyZWF0ZTtcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtOTctXFx0dTMyIGluc3RhbmNlO1xcbi0tXFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTEwMC1cXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBJRkxBX0JSSURHRV9DRk1fTUVQX0NSRUFURV9NQVgsIGF0dHIsXFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjEwMTpcXHRcXHRcXHQgICAgICAgYnJfY2ZtX21lcF9jcmVhdGVfcG9saWN5LCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xMDItXFx0aWYgKGVycilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xMjgtXFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjEyOTpcXHRyZXR1cm4gYnJfY2ZtX21lcF9jcmVhdGUoYnIsIGluc3RhbmNlLCBcXHUwMDI2Y3JlYXRlLCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xMzAtfVxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnAuYz00MjE9c3RhdGljIHZvaWQgYnJfbXJwX2RlbF9pbXBsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycCAqbXJwKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnAuYy00ODktICovXFxubmV0L2JyaWRnZS9icl9tcnAuYzo0OTA6aW50IGJyX21ycF9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSlcXG5uZXQvYnJpZGdlL2JyX21ycC5jLTQ5MS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycF9uZXRsaW5rLmM9MzE9c3RhdGljIGludCBicl9tcnBfaW5zdGFuY2VfcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jLTYxLVxcdGlmIChjbWQgPT0gUlRNX1NFVExJTkspXFxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jOjYyOlxcdFxcdHJldHVybiBicl9tcnBfYWRkKGJyLCBcXHUwMDI2aW5zdCk7XFxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jLTYzLVxcdGVsc2VcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaC04LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaDo5OnN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSB7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oLTEwLVxcdGVudW0gYnJfY2ZtX2RvbWFpbiBkb21haW47IC8qIERvbWFpbiBmb3IgdGhpcyBNRVAgKi9cXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaC0xNC1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmg6MTU6aW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTYtXFx0XFx0ICAgICAgY29uc3QgdTMyIGluc3RhbmNlLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaDoxNzpcXHRcXHQgICAgICBzdHJ1Y3QgYnJfY2ZtX21lcF9jcmVhdGUgKmNvbnN0IGNyZWF0ZSxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTgtXFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaD0xMTc9c3RydWN0IGJyX2NmbV9tZXAge1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oLTEyMC1cXHR1MzJcXHRcXHRcXHRcXHRpbnN0YW5jZTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmg6MTIxOlxcdHN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZVxcdGNyZWF0ZTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTIyLVxcdHN0cnVjdCBicl9jZm1fbWVwX2NvbmZpZ1xcdGNvbmZpZztcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaD01OT1lbnVtIGJyX21ycF9od19zdXBwb3J0IHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaC02NS0vKiBicl9tcnAuYyAqL1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaDo2NjppbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfbXJwLmgtNjctaW50IGJyX21ycF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE2OjU5LjE2Nzk0NTIwNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MDY2ODc2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gRnJhbWUgVHlwZSBMb29rdXAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZyYW1lIHR5cGUgbG9va3VwIHByb2Nlc3MgZHVyaW5nIHBhY2tldCByZWNlcHRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGJyaWRnaW5nIGNvbnRleHQuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyB3aGF0ICpraW5kKiBvZiBmcmFtZSBpdCdzIGRlYWxpbmcgd2l0aCB3aGVuIGEgcGFja2V0IGNvbWVzIGluLiBUaGlzIHJlYWxseSBnZXRzIGRvd24gdG8gdGhlIGNvcmUgb2YgdGhlIGJyaWRnZSdzIGhhbmRsaW5nIGxvZ2ljLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBicl9pbnB1dC5jYCBhbmQgc3BlY2lmaWNhbGx5IGBicl9oYW5kbGVfZnJhbWVgLCBhcyB0aGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgZW50cnkgcG9pbnQgZm9yIGZyYW1lIHByb2Nlc3NpbmcuIEkgd2FudCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gZGlmZmVyZW50aWF0ZXMgYmV0d2Vlbiwgc2F5LCBhIHN0YW5kYXJkIEV0aGVybmV0IGZyYW1lLCBhIFZMQU4tdGFnZ2VkIGZyYW1lLCBvciBhbnl0aGluZyBlbHNlIGl0IG1pZ2h0IGVuY291bnRlci4gVW5kZXJzdGFuZGluZyB0aGlzIGxvb2t1cCBwcm9jZXNzIGlzIGNydWNpYWwgZm9yIHRyb3VibGVzaG9vdGluZyBwb3RlbnRpYWwgaXNzdWVzIGluIGZyYW1lIGhhbmRsaW5nLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHVudXN1YWwgb3IgY3VzdG9taXplZCBmcmFtZSBmb3JtYXRzLCBhbmQgZm9yIG9wdGltaXppbmcgcGVyZm9ybWFuY2UgaWYgSSBuZWVkIHRvLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzMxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MTc6MDEuNjc0NjM0OTA4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTgxMDI5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmcmFtZV90eXBlX2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9kZXZpY2UuYz00ODA9dm9pZCBicl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNTA1LVxcdElOSVRfSExJU1RfSEVBRChcXHUwMDI2YnItXFx1MDAzZWZkYl9saXN0KTtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjUwNjpcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNmJyLVxcdTAwM2VmcmFtZV90eXBlX2xpc3QpO1xcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNTA3LSNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTVJQKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTMyMz1zdGF0aWMgaW50IGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTMyNy1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MzI4OlxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXAsIFxcdTAwMjZwLVxcdTAwM2Vici1cXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMjktXFx0XFx0aWYgKHVubGlrZWx5KHRtcC1cXHUwMDNldHlwZSA9PSBza2ItXFx1MDAzZXByb3RvY29sKSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz00NzE9aW50IGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlLFxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ3Ni1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDc3OlxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZ0LCBcXHUwMDI2YnItXFx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdCkge1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NzgtXFx0XFx0aWYgKGZ0LVxcdTAwM2V0eXBlID09IHR5cGUpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDg3LVxcdGZ0LVxcdTAwM2VmcmFtZV9oYW5kbGVyID0gZnJhbWVfaGFuZGxlcjtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDg4OlxcdGhsaXN0X2FkZF9oZWFkX3JjdShcXHUwMDI2ZnQtXFx1MDAzZWxpc3QsIFxcdTAwMjZici1cXHUwMDNlZnJhbWVfdHlwZV9saXN0KTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDg5LVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTQ5Mz12b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ5Ni1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDk3OlxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZ0LCBcXHUwMDI2YnItXFx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdCkge1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00OTgtXFx0XFx0aWYgKGZ0LVxcdTAwM2V0eXBlID09IHR5cGUpIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz01MDY9dm9pZCBicl9kZWxfZnJhbWVfYWxsKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy01MTAtXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjUxMTpcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZ0LCBuLCBcXHUwMDI2YnItXFx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdCkge1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy01MTItXFx0XFx0aGxpc3RfZGVsX3JjdShcXHUwMDI2ZnQtXFx1MDAzZWxpc3QpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NTAwPXN0cnVjdCBuZXRfYnJpZGdlIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTUwMi1cXHRzcGlubG9ja190XFx0XFx0XFx0aGFzaF9sb2NrO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjUwMzpcXHRzdHJ1Y3QgaGxpc3RfaGVhZFxcdFxcdGZyYW1lX3R5cGVfbGlzdDtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01MDQtXFx0c3RydWN0IG5ldF9kZXZpY2VcXHRcXHQqZGV2O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToxNzowMS43NjY0NDk5NTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM5MTg1MjMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBDb3JlIE5ldHdvcmtpbmcgQ29kZSoqXG5cbk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBjb3JlIG5ldHdvcmtpbmcgY29kZSDigJMgd2UncmUgdGFsa2luZyBhYm91dCBFdGhlcm5ldCBicmlkZ2luZywgQ0ZNIChDb25uZWN0aXZpdHkgRmF1bHQgTWFuYWdlbWVudCksIGFuZCBNUlAgKE11bHRpcGxlIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkuIFRoZSBnb29kIG5ld3MgaXMsIGZyb20gd2hhdCBJIGNhbiBzZWUsIHRoaXMgKnNob3VsZCogYmUgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gV2UncmUgZGVhbGluZyB3aXRoIHRoZSB1c3VhbCBzdXNwZWN0czogc3RhbmRhcmQgYnJpZGdlIG5ldGRldmljZSBjcmVhdGlvbiB1c2luZyBgaXAgbGluayBhZGQgbmFtZSBicjAgdHlwZSBicmlkZ2VgLCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gb2YgQ0ZNL01SUCAobGlrZWx5IHZpYSBgUlRNX1NFVExJTktgIGFuZCBgcnRubGApLCBwYWNrZXQgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24gdmlhIHRoZSBjb21tb24gaW50ZXJmYWNlcyBsaWtlIFRBUC92ZXRoL2xvb3BiYWNrLCBhbmQgb2YgY291cnNlIHRoZSBjcml0aWNhbCBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYCBmdW5jdGlvbiBmb3IgYnJpZGdlIGZyYW1lIHByb2Nlc3NpbmcsIGFsb25nIHdpdGggdGhlIGJyaWRnZSBkZXZpY2UgZGVsZXRpb24gcm91dGluZXMuIFNvLCB5ZXMsIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgXCJXb3J0aEZ1enppbmdcIiBpcyBzcG90IG9uIVxuXG5Ob3csIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS5cblxuMS4gICoqYFdvcnRoRnV6emluZ2AqKjogQWJzb2x1dGVseSwgY29uZmlybWVkLiBXZSBoYXZlIGVub3VnaCBhY2Nlc3NpYmlsaXR5IHRvIHB1dCB0aGlzIHRocm91Z2ggaXRzIHBhY2VzLlxuMi4gICoqYFJlYXNvbmluZ2AqKjogVGhlIHNpZ25pZmljYW50IGNoYW5nZXMgaGVyZSBhcmUgdGhlIHJlZmFjdG9yaW5nIG9mIGJyaWRnZSBmcmFtZSB0eXBlIHJlZ2lzdHJhdGlvbiBhbmQgZGVyZWdpc3RyYXRpb24uIFRoZXkgd2VudCBmcm9tIHN0YXRpYyBzdHJ1Y3R1cmVzIHRvIHBlci1icmlkZ2UgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGVudHJpZXMgbWFuYWdlZCB3aXRoIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkuIEknbSBhbHNvIHNlZWluZyB1cGRhdGVkIGVycm9yIGhhbmRsaW5nIGFuZCBjbGVhbnVwIHBhdGhzIHNwcmlua2xlZCB0aHJvdWdob3V0IENGTSwgTVJQLCBhbmQgdGhlIGJyaWRnZSBkZWxldGlvbiByb3V0aW5lcy4gVGhpcyBpcyAqcmVhY2hhYmxlKiBiZWNhdXNlIGJyaWRnaW5nIGZ1bmN0aW9uYWxpdHkgd2l0aCBDRk0vTVJQIHByb3RvY29scyBpcyBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIGFuZCBwYWNrZXQgcmVjZXB0aW9uLiBTcGVjaWZpY2FsbHksIHdlIGNhbiBjcmFmdCBwYWNrZXRzIHRoYXQgZmxvdyB0aHJvdWdoIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgYW5kIHRocm91Z2ggdGhlIGJyaWRnZSBwcm9jZXNzaW5nIHRoYXQgdGFyZ2V0cyB0aG9zZSBwcm90b2NvbHMuXG4zLiAgKipgRm9jdXNTeW1ib2xzYCoqOiBXZSBuZWVkIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zIGFuZCBwYXJ0cyBvZiB0aGUgY29kZS4gTGV0J3Mgc2VsZWN0IG5vbi11YmlxdWl0b3VzIGZ1bmN0aW9ucywgdGhhdCB3ZXJlIG1vZGlmaWVkLCBvciBkaXJlY3RseSBjYWxsIHRoZSBtb2RpZmllZCBjb2RlLiBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBkaXJlY3RseSB0YXJnZXQ6XG5cbiAgICAqICAgYGJyX2FkZF9mcmFtZWBcbiAgICAqICAgYGJyX2RlbF9mcmFtZWBcbiAgICAqICAgYGJyX2RlbF9mcmFtZV9hbGxgXG4gICAgKiAgIGBicl9jZm1fbWVwX2NyZWF0ZWBcbiAgICAqICAgYGJyX2NmbV9tZXBfZGVsZXRlYFxuICAgICogICBgYnJfbXJwX2FkZGBcbiAgICAqICAgYGJyX21ycF9kZWxfaW1wbGAgLyBgYnJfbXJwX2RlbGBcbiAgICAqICAgYGJyX3Byb2Nlc3NfZnJhbWVfdHlwZWBcbiAgICAqICAgYGJyX2Rldl9kZWxldGVgXG5cbiAgICBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRob3NlIGV4YWN0IHN5bWJvbCBuYW1lcyB3aXRoaW4gYGJyX2NmbS5jYCBhbmQgYGJyX21ycC5jYCB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIGJ1dCB0aGF0J3MgbXkgdGFyZ2V0IGxpc3QuIFdlIGhhdmUgYSBjbGVhciBwYXRoIHRvIGdlbmVyYXRpbmcgZnV6emVyIGlucHV0IGJhc2VkIG9uIHRoZSBuZXRsaW5rIGludGVyZmFjZXMgYW5kIHBhY2tldCBmbG93cywgYW5kIHRob3NlIGZ1bmN0aW9uIGNhbGxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM5OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToxNzowNi4xNTgzMDUzNDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTA4MTM4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9jZm1fbWVwX2RlbGV0ZXxicl9tcnBfZGVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfY2ZtLmM9NTcwPXN0YXRpYyB2b2lkIG1lcF9kZWxldGVfaW1wbGVtZW50YXRpb24oc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9jZm0uYy01OTQtXFxubmV0L2JyaWRnZS9icl9jZm0uYzo1OTU6aW50IGJyX2NmbV9tZXBfZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG5uZXQvYnJpZGdlL2JyX2NmbS5jLTU5Ni1cXHRcXHQgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM9MTc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjE4OmJyX2NmbV9tZXBfZGVsZXRlX3BvbGljeVtJRkxBX0JSSURHRV9DRk1fTUVQX0RFTEVURV9NQVggKyAxXSA9IHtcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTktXFx0W0lGTEFfQlJJREdFX0NGTV9NRVBfREVMRVRFX1VOU1BFQ11cXHQ9IHsgLnR5cGUgPSBOTEFfUkVKRUNUIH0sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM9NzI9YnJfY2ZtX3BvbGljeVtJRkxBX0JSSURHRV9DRk1fTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtNzYtXFx0W0lGTEFfQlJJREdFX0NGTV9NRVBfREVMRVRFXVxcdFxcdD1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM6Nzc6XFx0XFx0XFx0XFx0TkxBX1BPTElDWV9ORVNURUQoYnJfY2ZtX21lcF9kZWxldGVfcG9saWN5KSxcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtNzgtXFx0W0lGTEFfQlJJREdFX0NGTV9NRVBfQ09ORklHXVxcdFxcdD1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYz0xMzI9c3RhdGljIGludCBicl9tZXBfZGVsZXRlX3BhcnNlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xMzktXFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgSUZMQV9CUklER0VfQ0ZNX01FUF9ERUxFVEVfTUFYLCBhdHRyLFxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzoxNDA6XFx0XFx0XFx0ICAgICAgIGJyX2NmbV9tZXBfZGVsZXRlX3BvbGljeSwgZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTQxLVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTUxLVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzoxNTI6XFx0cmV0dXJuIGJyX2NmbV9tZXBfZGVsZXRlKGJyLCBpbnN0YW5jZSwgZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTUzLX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwLmM9MzQ1PXN0YXRpYyB2b2lkIGJyX21ycF9pbl90ZXN0X3dvcmtfZXhwaXJlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycC5jLTQyMC0gKi9cXG5uZXQvYnJpZGdlL2JyX21ycC5jOjQyMTpzdGF0aWMgdm9pZCBicl9tcnBfZGVsX2ltcGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApXFxubmV0L2JyaWRnZS9icl9tcnAuYy00MjIte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tcnAuYz00OTA9aW50IGJyX21ycF9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNTQ5LWRlbGV0ZV9tcnA6XFxubmV0L2JyaWRnZS9icl9tcnAuYzo1NTA6XFx0YnJfbXJwX2RlbF9pbXBsKGJyLCBtcnApO1xcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNTUxLVxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnAuYz01NTg9dm9pZCBicl9tcnBfcG9ydF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnAuYy01NjUtXFxubmV0L2JyaWRnZS9icl9tcnAuYzo1NjY6XFx0YnJfbXJwX2RlbF9pbXBsKGJyLCBtcnApO1xcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNTY3LX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNTcxLSAqL1xcbm5ldC9icmlkZ2UvYnJfbXJwLmM6NTcyOmludCBicl9tcnBfZGVsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycF9pbnN0YW5jZSAqaW5zdGFuY2UpXFxubmV0L2JyaWRnZS9icl9tcnAuYy01NzMte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tcnAuYy01NzgtXFxubmV0L2JyaWRnZS9icl9tcnAuYzo1Nzk6XFx0YnJfbXJwX2RlbF9pbXBsKGJyLCBtcnApO1xcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNTgwLVxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jPTMxPXN0YXRpYyBpbnQgYnJfbXJwX2luc3RhbmNlX3BhcnNlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX25ldGxpbmsuYy02My1cXHRlbHNlXFxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jOjY0OlxcdFxcdHJldHVybiBicl9tcnBfZGVsKGJyLCBcXHUwMDI2aW5zdCk7XFxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jLTY1LVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oPTE1PWludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTktXFxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oOjIwOmludCBicl9jZm1fbWVwX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oLTIxLVxcdFxcdCAgICAgIGNvbnN0IHUzMiBpbnN0YW5jZSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaD02Nj1pbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfbXJwLmg6Njc6aW50IGJyX21ycF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlX21ycC5oLTY4LWludCBicl9tcnBfc2V0X3BvcnRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MTc6MDYuMjY3MzkzMjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkzMTA0OTk5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24gZm9yIEJyaWRnaW5nIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IGEgYnJpZGdlIGNvbmZpZ3VyYXRpb24uIFRoZSBpbml0aWFsIGNoZWNrbGlzdCBtYW5kYXRlcyBlbnN1cmluZyBgQlJJREdFYCwgYEJSSURHRV9DRk1gLCBhbmQgYEJSSURHRV9NUlBgIGFyZSBhbGwgY29ycmVjdGx5IHNldC4gSSBrbm93IEkgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGVzZSBzZXR0aW5ncyB0byBlbnN1cmUgdGhleSdyZSBjb25maWd1cmVkIGFwcHJvcHJpYXRlbHksIHNvIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgQlJJREdFX0NGTWAgYW5kIGBCUklER0VfTVJQYC4gVGhleSBhcmUsIGFmdGVyIGFsbCwgZmVhdHVyZXMgYnVpbHQgb24gdG9wIG9mIHRoZSBiYXNlIGJyaWRnZSBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gY29uc3VsdCB0aGUgYG5ldC9icmlkZ2UvS2NvbmZpZ2AgZmlsZSBzcGVjaWZpY2FsbHkuIEkgcmVjYWxsIHRoYXQgYEJSSURHRV9DRk1gIGFuZCBgQlJJREdFX01SUGAgcmVxdWlyZSBgQlJJREdFYCwgd2hpY2ggaW4gdHVybiBwcm9iYWJseSBkZXBlbmRzIG9uIHRoaW5ncyBsaWtlIGBORVRgIGFuZCBwZXJoYXBzIGBJTkVUYCAob3Igc2ltaWxhciBuZXR3b3JraW5nIGluZnJhc3RydWN0dXJlKS4gSSBzaG91bGQgcHJvYmFibHkgdmVyaWZ5IHdoYXQgdGhlIGV4YWN0IGRlcGVuZGVuY2llcyBhcmUgd2l0aGluIHRoYXQgS2NvbmZpZyBmaWxlLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IHdoZW4gY29uZmlndXJpbmcgdGhlc2UgY29tcGxleCBuZXR3b3JraW5nIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjgwOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE3OjA4LjE5ODQ0NTkzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ1NDI3NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJSSURHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9LY29uZmlnLTUtXFxubmV0L2JyaWRnZS9LY29uZmlnOjY6Y29uZmlnIEJSSURHRVxcbm5ldC9icmlkZ2UvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCI4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctMzUtXFxubmV0L2JyaWRnZS9LY29uZmlnOjM2OmNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNy1cXHRib29sIFxcXCJJR01QL01MRCBzbm9vcGluZ1xcXCJcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy00OS1cXG5uZXQvYnJpZGdlL0tjb25maWc6NTA6Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xcbm5ldC9icmlkZ2UvS2NvbmZpZy01MS1cXHRib29sIFxcXCJWTEFOIGZpbHRlcmluZ1xcXCJcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy02My1cXG5uZXQvYnJpZGdlL0tjb25maWc6NjQ6Y29uZmlnIEJSSURHRV9NUlBcXG5uZXQvYnJpZGdlL0tjb25maWctNjUtXFx0Ym9vbCBcXFwiTVJQIHByb3RvY29sXFxcIlxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTc1LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo3Njpjb25maWcgQlJJREdFX0NGTVxcbm5ldC9icmlkZ2UvS2NvbmZpZy03Ny1cXHRib29sIFxcXCJDRk0gcHJvdG9jb2xcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE3OjA4LjI3Mjk5NzY5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjAxOTI1Mzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvbmZpZ3VyYXRpb24gZmlsZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJyaWRnZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gYG5ldC9icmlkZ2UvS2NvbmZpZ2AuIEknbSBzdGFydGluZyBieSBsb29raW5nIGF0IGxpbmVzIDEgdGhyb3VnaCAyMC4gVGhpcyB1c3VhbGx5IGluZGljYXRlcyB0aGUgbWFpbiwgdG9wLWxldmVsIHNldHRpbmdzIGFuZCBkZWZpbml0aW9ucyBmb3IgdGhlIGJyaWRnZSBtb2R1bGUgaXRzZWxmLiBNeSBpbml0aWFsIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZ2VuZXJhbCBvcHRpb25zIHByZXNlbnRlZCwgdGhlIGRlcGVuZGVuY2llcyB0aGV5IG1pZ2h0IGhhdmUsIGFuZCBhbnkgcHJlbGltaW5hcnkgY29tbWVudHMgb3IgZXhwbGFuYXRpb25zIHRoYXQgc2V0IHRoZSBzdGFnZSBmb3IgdGhlIHJlc3Qgb2YgdGhlIGNvbmZpZ3VyYXRpb24uIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlOiB0aGUgbWFpbiBicmlkZ2Ugc3VwcG9ydCBlbmFibGluZyBvcHRpb24sIHByb2JhYmx5IGEgZGVmYXVsdCBzZXR0aW5nIGZvciBzb21lIGJhc2ljIGZ1bmN0aW9uYWxpdHksIGFuZCBtYXliZSBzb21lIGVhcmx5IGNvbW1lbnRzIG91dGxpbmluZyB0aGUgY29yZSBwdXJwb3NlIG9mIHRoZSBicmlkZ2luZyBjb2RlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGtleXdvcmRzIGFuZCBzeW1ib2xzIHRoYXQgSSdsbCBuZWVkIHRvIHJlbWVtYmVyIGZvciB0aGUgcmVzdCBvZiB0aGUgcmV2aWV3LiBUaGUgZ29hbCByaWdodCBub3cgaXMganVzdCB0byBnZXQgbXkgYmVhcmluZ3MgYW5kIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIGJlZm9yZSBnZXR0aW5nIGludG8gdGhlIHdlZWRzIG9mIG1vcmUgc3BlY2lmaWMgZnVuY3Rpb25hbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM3NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE3OjEwLjQ3NDkyNTg2OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBCUklER0VcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCI4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTExDXFxuICAgOTpcXHRcXHRzZWxlY3QgU1RQXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYW5cXG4gIDEyOlxcdFxcdCAgRXRoZXJuZXQgYnJpZGdlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBkaWZmZXJlbnQgRXRoZXJuZXQgc2VnbWVudHMgaXRcXG4gIDEzOlxcdFxcdCAgaXMgY29ubmVjdGVkIHRvIHdpbGwgYXBwZWFyIGFzIG9uZSBFdGhlcm5ldCB0byB0aGUgcGFydGljaXBhbnRzLlxcbiAgMTQ6XFx0XFx0ICBTZXZlcmFsIHN1Y2ggYnJpZGdlcyBjYW4gd29yayB0b2dldGhlciB0byBjcmVhdGUgZXZlbiBsYXJnZXJcXG4gIDE1OlxcdFxcdCAgbmV0d29ya3Mgb2YgRXRoZXJuZXRzIHVzaW5nIHRoZSBJRUVFIDgwMi4xIHNwYW5uaW5nIHRyZWUgYWxnb3JpdGhtLlxcbiAgMTY6XFx0XFx0ICBBcyB0aGlzIGlzIGEgc3RhbmRhcmQsIExpbnV4IGJyaWRnZXMgd2lsbCBjb29wZXJhdGUgcHJvcGVybHkgd2l0aFxcbiAgMTc6XFx0XFx0ICBvdGhlciB0aGlyZCBwYXJ0eSBicmlkZ2UgcHJvZHVjdHMuXFxuICAxODpcXHRcXG4gIDE5OlxcdFxcdCAgSW4gb3JkZXIgdG8gdXNlIHRoZSBFdGhlcm5ldCBicmlkZ2UsIHlvdSdsbCBuZWVkIHRoZSBicmlkZ2VcXG4gIDIwOlxcdFxcdCAgY29uZmlndXJhdGlvbiB0b29sczsgc2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0XFx1MDAzZVxcbiAgMjE6XFx0XFx0ICBmb3IgbG9jYXRpb24uIFBsZWFzZSByZWFkIHRoZSBCcmlkZ2UgbWluaS1IT1dUTyBmb3IgbW9yZVxcbiAgMjI6XFx0XFx0ICBpbmZvcm1hdGlvbi5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0ICBJZiB5b3UgZW5hYmxlIGlwdGFibGVzIHN1cHBvcnQgYWxvbmcgd2l0aCB0aGUgYnJpZGdlIHN1cHBvcnQgdGhlbiB5b3VcXG4gIDI1OlxcdFxcdCAgdHVybiB5b3VyIGJyaWRnZSBpbnRvIGEgYnJpZGdpbmcgSVAgZmlyZXdhbGwuXFxuICAyNjpcXHRcXHQgIGlwdGFibGVzIHdpbGwgdGhlbiBzZWUgdGhlIElQIHBhY2tldHMgYmVpbmcgYnJpZGdlZCwgc28geW91IG5lZWQgdG9cXG4gIDI3OlxcdFxcdCAgdGFrZSB0aGlzIGludG8gYWNjb3VudCB3aGVuIHNldHRpbmcgdXAgeW91ciBmaXJld2FsbCBydWxlcy5cXG4gIDI4OlxcdFxcdCAgRW5hYmxpbmcgYXJwdGFibGVzIHN1cHBvcnQgd2hlbiBicmlkZ2luZyB3aWxsIGxldCBhcnB0YWJsZXMgc2VlXFxuICAyOTpcXHRcXHQgIGJyaWRnZWQgQVJQIHRyYWZmaWMgaW4gdGhlIGFycHRhYmxlcyBGT1JXQVJEIGNoYWluLlxcbiAgMzA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE3OjEwLjQ3NDk4NjI3OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDU2NzI3MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBub3Rlcy5cblxuKipNeSBBbmFseXNpcyBvZiBCcmlkZ2UgQ29uZmlndXJhdGlvbiBcdTAwMjYgQXNzb2NpYXRlZCBGdW5jdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIHNldHVwLCBhbmQgaXQncyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IHdlIG5lZWQgdG8gZW5hYmxlIHRoZSBgQlJJREdFYCwgYEJSSURHRV9DRk1gLCBhbmQgYEJSSURHRV9NUlBgIGZsYWdzLiBObyBzdXJwcmlzZXMgdGhlcmUuIFRoZXNlIGFyZSB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzLCB0aGUgZm91bmRhdGlvbiwgZm9yIGdldHRpbmcgYSBicmlkZ2UgaW1wbGVtZW50YXRpb24gdXAgYW5kIHJ1bm5pbmcuIFxuXG5Ob3csIGRpZ2dpbmcgZGVlcGVyLCBJIHNlZSB0aGUgY29yZSBmdW5jdGlvbiBzeW1ib2xzIHRoYXQgbmVlZCBjYXJlZnVsIGNvbnNpZGVyYXRpb24uIGBicl9hZGRfZnJhbWVgLCBgYnJfZGVsX2ZyYW1lYCwgYGJyX2RlbF9mcmFtZV9hbGxgIGFyZSBjcnVjaWFsIGZvciBmcmFtZSBoYW5kbGluZyDigJMgYWRkaW5nLCByZW1vdmluZywgYW5kIGNsZWFyaW5nIGZyYW1lcyB3aXRoaW4gdGhlIGJyaWRnZSdzIGZvcndhcmRpbmcgdGFibGUuIE9idmlvdXNseSwgd2UnbGwgbmVlZCByb2J1c3QgbG9naWMgYXJvdW5kIHRob3NlLiBUaGVuLCBgYnJfY2ZtX21lcF9jcmVhdGVgIGFuZCBgYnJfY2ZtX21lcF9kZWxldGVgIHN1Z2dlc3QgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gdXNlIENvbm5lY3Rpdml0eSBGYXVsdCBNYW5hZ2VtZW50LiBEZWZpbml0ZWx5IGtleSBpbiBsYXJnZXIgZGVwbG95bWVudHMuIEZvbGxvd2luZyBvbiBmcm9tIHRoYXQsIHRoZSBNUlAtc3BlY2lmaWMgZnVuY3Rpb25zLCBgYnJfbXJwX2FkZGAgYW5kIGBicl9tcnBfZGVsYCwgY29uZmlybSBNUlAgc3VwcG9ydC4gRmluYWxseSBgYnJfZGV2X2RlbGV0ZWAgaXMgYW4gb2J2aW91cyBjaG9pY2Ugd2hlbiB3ZSBuZWVkIHRvIHRlYXIgZG93biB0aGUgYnJpZGdlLlxuXG5PdmVyYWxsLCBpdCdzIGEgZ29vZCBzZXQgb2Ygc3ltYm9scyDigJMgcHJldHR5IGNvbXByZWhlbnNpdmUgcmVhbGx5IOKAkyBhbmQgYWxsIHNlZW1zIHRvIGJlIGxvZ2ljYWxseSBpbnRlcmNvbm5lY3RlZC4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGBzZXQtcmVzdWx0c2AgdmFyaWFibGUgdHJhY2tzIHRob3NlIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwNzksIk91dHB1dFRva2VucyI6MjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MTc6MTQuOTMxNzE2MjU3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MTM1MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9DRk1cIixcbiAgICBcIkJSSURHRV9NUlBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9hZGRfZnJhbWVcIixcbiAgICBcImJyX2RlbF9mcmFtZVwiLFxuICAgIFwiYnJfZGVsX2ZyYW1lX2FsbFwiLFxuICAgIFwiYnJfY2ZtX21lcF9jcmVhdGVcIixcbiAgICBcImJyX2NmbV9tZXBfZGVsZXRlXCIsXG4gICAgXCJicl9tcnBfYWRkXCIsXG4gICAgXCJicl9tcnBfZGVsXCIsXG4gICAgXCJicl9kZXZfZGVsZXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBicmlkZ2UgRXRoZXJuZXQgZnJhbWUgdHlwZSBoYW5kbGVyIHJlZ2lzdHJhdGlvbi9kZXJlZ2lzdHJhdGlvbiBtZWNoYW5pc20uIFByZXZpb3VzbHksIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGZyYW1lIHR5cGUgc3RydWN0dXJlcyAoc3VjaCBhcyBjZm1fZnJhbWVfdHlwZSBhbmQgbXJwX2ZyYW1lX3R5cGUpIHdlcmUgcmVnaXN0ZXJlZCBkaXJlY3RseSB0byBicmlkZ2UgaW5zdGFuY2VzLCB3aGljaCBjb3VsZCBsZWFkIHRvIGxpc3QgY29ycnVwdGlvbiBhY3Jvc3MgbXVsdGlwbGUgYnJpZGdlcy4gVGhlIHBhdGNoIGNoYW5nZXMgdGhpcyB0byBkeW5hbWljIHBlci1icmlkZ2UgYWxsb2NhdGlvbiBhbmQgUkNVLWJhc2VkIGZyZWVpbmcgb2YgZnJhbWUgdHlwZSBub2RlcywgaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBvbiBhbGxvY2F0aW9uIGZhaWx1cmUsIGFuZCBhZGRzIGNsZWFudXAgb2YgYWxsIHJlZ2lzdGVyZWQgZnJhbWUgdHlwZXMgZHVyaW5nIGJyaWRnZSBkZXZpY2UgZGVsZXRpb24gKGJyX2Rldl9kZWxldGUpLiBUaGVzZSByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNoYW5nZXMgd2FycmFudCBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgY29uY3VycmVuY3kgaXNzdWVzLCBvciBlcnJvciBoYW5kbGluZyByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9DRk1cIixcbiAgICBcIkJSSURHRV9NUlBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9hZGRfZnJhbWVcIixcbiAgICBcImJyX2RlbF9mcmFtZVwiLFxuICAgIFwiYnJfZGVsX2ZyYW1lX2FsbFwiLFxuICAgIFwiYnJfY2ZtX21lcF9jcmVhdGVcIixcbiAgICBcImJyX2NmbV9tZXBfZGVsZXRlXCIsXG4gICAgXCJicl9tcnBfYWRkXCIsXG4gICAgXCJicl9tcnBfZGVsXCIsXG4gICAgXCJicl9kZXZfZGVsZXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBicmlkZ2UgRXRoZXJuZXQgZnJhbWUgdHlwZSBoYW5kbGVyIHJlZ2lzdHJhdGlvbi9kZXJlZ2lzdHJhdGlvbiBtZWNoYW5pc20uIFByZXZpb3VzbHksIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGZyYW1lIHR5cGUgc3RydWN0dXJlcyAoc3VjaCBhcyBjZm1fZnJhbWVfdHlwZSBhbmQgbXJwX2ZyYW1lX3R5cGUpIHdlcmUgcmVnaXN0ZXJlZCBkaXJlY3RseSB0byBicmlkZ2UgaW5zdGFuY2VzLCB3aGljaCBjb3VsZCBsZWFkIHRvIGxpc3QgY29ycnVwdGlvbiBhY3Jvc3MgbXVsdGlwbGUgYnJpZGdlcy4gVGhlIHBhdGNoIGNoYW5nZXMgdGhpcyB0byBkeW5hbWljIHBlci1icmlkZ2UgYWxsb2NhdGlvbiBhbmQgUkNVLWJhc2VkIGZyZWVpbmcgb2YgZnJhbWUgdHlwZSBub2RlcywgaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBvbiBhbGxvY2F0aW9uIGZhaWx1cmUsIGFuZCBhZGRzIGNsZWFudXAgb2YgYWxsIHJlZ2lzdGVyZWQgZnJhbWUgdHlwZXMgZHVyaW5nIGJyaWRnZSBkZXZpY2UgZGVsZXRpb24gKGJyX2Rldl9kZWxldGUpLiBUaGVzZSByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNoYW5nZXMgd2FycmFudCBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgY29uY3VycmVuY3kgaXNzdWVzLCBvciBlcnJvciBoYW5kbGluZyByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MTc6MTUuMDcwODU5NjMxWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg2MDI2ODQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE3OjE1LjA3MTMxNzE2MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIwODU5ODA2MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBob3cgZXRoZXJuZXQgZnJhbWUgaGFuZGxlcnMgKHN1Y2ggYXMgQ0ZNIGFuZCBNUlApIGFyZSByZWdpc3RlcmVkIGluIHRoZSBicmlkZ2UgbW9kdWxlLiBJbnN0ZWFkIG9mIHVzaW5nIHN0YXRpYyBnbG9iYWwgYHN0cnVjdCBicl9mcmFtZV90eXBlYCB2YXJpYWJsZXMsIGl0IGR5bmFtaWNhbGx5IGFsbG9jYXRlcyBgc3RydWN0IGJyX2ZyYW1lX3R5cGVgIHVzaW5nIGBrbWFsbG9jX29iamAgYW5kIHByb3RlY3RzIGl0cyByZW1vdmFsIHdpdGggYGtmcmVlX3JjdWAuXFxuXFxuQWxsIGZpZWxkcyAoYHR5cGVgLCBgZnJhbWVfaGFuZGxlcmAsIGFuZCBgbGlzdGApIGFjY2Vzc2VkIGJ5IGBicl9wcm9jZXNzX2ZyYW1lX3R5cGVgIGFuZCBsaXN0IHRyYXZlcnNhbCBmdW5jdGlvbnMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGluc2VydGlvbiBpbnRvIGBici1cXHUwMDNlZnJhbWVfdHlwZV9saXN0YC4gTm9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgYXJlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBvciBjYWxjdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyAoc3VjaCBhcyBSQ1Ugc3luY2hyb25pemF0aW9uIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBsZWFrcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjY2ZmRhMjI3YjIyOWMwYWZjZjIwZTM5NTE3MTI1Mjk2M2FmNjYxOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDk6MTY6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2NmbS5jIGIvbmV0L2JyaWRnZS9icl9jZm0uY1xuaW5kZXggZGVhNTZmZmZhMWMxOS4uNTc5MDI0ODU4ODI5OCAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfY2ZtLmNcbisrKyBiL25ldC9icmlkZ2UvYnJfY2ZtLmNcbkBAIC00ODksMTEgKzQ4OSw2IEBAIHN0YXRpYyBpbnQgYnJfY2ZtX2ZyYW1lX3J4KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBicl9mcmFtZV90eXBlIGNmbV9mcmFtZV90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XG4tXHQudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0NGTSksXG4tXHQuZnJhbWVfaGFuZGxlciA9IGJyX2NmbV9mcmFtZV9yeCxcbi19O1xuLVxuIGludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gXHRcdCAgICAgIGNvbnN0IHUzMiBpbnN0YW5jZSxcbiBcdFx0ICAgICAgc3RydWN0IGJyX2NmbV9tZXBfY3JlYXRlICpjb25zdCBjcmVhdGUsXG5AQCAtNTAxLDYgKzQ5Niw3IEBAIGludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4ge1xuIFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcDtcbiBcdHN0cnVjdCBicl9jZm1fbWVwICptZXA7XG4rXHRpbnQgZXJyO1xuIFxuIFx0QVNTRVJUX1JUTkwoKTtcbiBcbkBAIC01NTgsOCArNTU0LDEzIEBAIGludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gXHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2bWVwLVx1MDAzZXBlZXJfbWVwX2xpc3QpO1xuIFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2bWVwLVx1MDAzZWNjbV90eF9kd29yaywgY2NtX3R4X3dvcmtfZXhwaXJlZCk7XG4gXG4tXHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2YnItXHUwMDNlbWVwX2xpc3QpKVxuLVx0XHRicl9hZGRfZnJhbWUoYnIsIFx1MDAyNmNmbV9mcmFtZV90eXBlKTtcbitcdGlmIChobGlzdF9lbXB0eShcdTAwMjZici1cdTAwM2VtZXBfbGlzdCkpIHtcbitcdFx0ZXJyID0gYnJfYWRkX2ZyYW1lKGJyLCBjcHVfdG9fYmUxNihFVEhfUF9DRk0pLCBicl9jZm1fZnJhbWVfcngpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0a2ZyZWUobWVwKTtcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4rXHR9XG4gXG4gXHRobGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2bWVwLVx1MDAzZWhlYWQsIFx1MDAyNmJyLVx1MDAzZW1lcF9saXN0KTtcbiBcbkBAIC01ODgsNyArNTg5LDcgQEAgc3RhdGljIHZvaWQgbWVwX2RlbGV0ZV9pbXBsZW1lbnRhdGlvbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gXHRrZnJlZV9yY3UobWVwLCByY3UpO1xuIFxuIFx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1lcF9saXN0KSlcbi1cdFx0YnJfZGVsX2ZyYW1lKGJyLCBcdTAwMjZjZm1fZnJhbWVfdHlwZSk7XG4rXHRcdGJyX2RlbF9mcmFtZShiciwgY3B1X3RvX2JlMTYoRVRIX1BfQ0ZNKSk7XG4gfVxuIFxuIGludCBicl9jZm1fbWVwX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pZi5jIGIvbmV0L2JyaWRnZS9icl9pZi5jXG5pbmRleCBjNTI2MTM0MzFmODg2Li5mZThlOWE0N2UxYWMxIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9pZi5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX2lmLmNcbkBAIC0zOTcsNiArMzk3LDggQEAgdm9pZCBicl9kZXZfZGVsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNmJyLVx1MDAzZXRjbl90aW1lcik7XG4gXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2YnItXHUwMDNlZ2Nfd29yayk7XG4gXG4rXHRicl9kZWxfZnJhbWVfYWxsKGJyKTtcbitcbiBcdGJyX3N5c2ZzX2RlbGJyKGJyLVx1MDAzZWRldik7XG4gXHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShici1cdTAwM2VkZXYsIGhlYWQpO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmNcbmluZGV4IGQ4N2E1ZjlmYTkyYjcuLjA3ZWZkMGZiY2Y5Y2QgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX2lucHV0LmNcbisrKyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xuQEAgLTQ2OCwxOCArNDY4LDQ4IEBAIHJ4X2hhbmRsZXJfZnVuY190ICpicl9nZXRfcnhfaGFuZGxlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0cmV0dXJuIGJyX2hhbmRsZV9mcmFtZTtcbiB9XG4gXG4tdm9pZCBicl9hZGRfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQpXG4raW50IGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiB0eXBlLFxuK1x0XHQgaW50ICgqZnJhbWVfaGFuZGxlcikoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpKVxuIHtcbitcdHN0cnVjdCBicl9mcmFtZV90eXBlICpmdDtcbitcbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZ0LCBcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHtcbitcdFx0aWYgKGZ0LVx1MDAzZXR5cGUgPT0gdHlwZSlcbitcdFx0XHRyZXR1cm4gLUVFWElTVDtcbitcdH1cbitcbitcdGZ0ID0ga21hbGxvY19vYmooKmZ0KTtcbitcdGlmICghZnQpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0ZnQtXHUwMDNldHlwZSA9IHR5cGU7XG4rXHRmdC1cdTAwM2VmcmFtZV9oYW5kbGVyID0gZnJhbWVfaGFuZGxlcjtcbiBcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZmdC1cdTAwM2VsaXN0LCBcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QpO1xuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuLXZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KVxuK3ZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgX19iZTE2IHR5cGUpXG4ge1xuLVx0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKnRtcDtcbitcdHN0cnVjdCBicl9mcmFtZV90eXBlICpmdDtcbiBcbi1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgXHUwMDI2YnItXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KVxuLVx0XHRpZiAoZnQgPT0gdG1wKSB7XG4rXHRobGlzdF9mb3JfZWFjaF9lbnRyeShmdCwgXHUwMDI2YnItXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KSB7XG4rXHRcdGlmIChmdC1cdTAwM2V0eXBlID09IHR5cGUpIHtcbiBcdFx0XHRobGlzdF9kZWxfcmN1KFx1MDAyNmZ0LVx1MDAzZWxpc3QpO1xuK1x0XHRcdGtmcmVlX3JjdShmdCwgcmN1KTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbitcdH1cbit9XG4rXG4rdm9pZCBicl9kZWxfZnJhbWVfYWxsKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbit7XG4rXHRzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQ7XG4rXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjtcbitcbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZnQsIG4sIFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdCkge1xuK1x0XHRobGlzdF9kZWxfcmN1KFx1MDAyNmZ0LVx1MDAzZWxpc3QpO1xuK1x0XHRrZnJlZV9yY3UoZnQsIHJjdSk7XG4rXHR9XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXJwLmMgYi9uZXQvYnJpZGdlL2JyX21ycC5jXG5pbmRleCBlZjE2ZDA3MDM5MjQxLi41MTFhZThhZjNkMDMzIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9tcnAuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9tcnAuY1xuQEAgLTgsMTEgKzgsNiBAQCBzdGF0aWMgY29uc3QgdTggbXJwX2luX3Rlc3RfZG1hY1tFVEhfQUxFTl0gPSB7IDB4MSwgMHgxNSwgMHg0ZSwgMHgwLCAweDAsIDB4MyB9O1xuIFxuIHN0YXRpYyBpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG4tc3RhdGljIHN0cnVjdCBicl9mcmFtZV90eXBlIG1ycF9mcmFtZV90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XG4tXHQudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX01SUCksXG4tXHQuZnJhbWVfaGFuZGxlciA9IGJyX21ycF9wcm9jZXNzLFxuLX07XG4tXG4gc3RhdGljIGJvb2wgYnJfbXJwX2lzX3JpbmdfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwX3BvcnQsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpzX3BvcnQsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxuQEAgLTQ4Niw3ICs0ODEsNyBAQCBzdGF0aWMgdm9pZCBicl9tcnBfZGVsX2ltcGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApXG4gXHRrZnJlZV9yY3UobXJwLCByY3UpO1xuIFxuIFx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1ycF9saXN0KSlcbi1cdFx0YnJfZGVsX2ZyYW1lKGJyLCBcdTAwMjZtcnBfZnJhbWVfdHlwZSk7XG4rXHRcdGJyX2RlbF9mcmFtZShiciwgY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSk7XG4gfVxuIFxuIC8qIEFkZHMgYSBuZXcgTVJQIGluc3RhbmNlLlxuQEAgLTUzNSwxMyArNTMwLDE2IEBAIGludCBicl9tcnBfYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycF9pbnN0YW5jZSAqaW5zdGFuY2UpXG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZici1cdTAwM2Vsb2NrKTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihtcnAtXHUwMDNlc19wb3J0LCBwKTtcbiBcbi1cdGlmIChobGlzdF9lbXB0eShcdTAwMjZici1cdTAwM2VtcnBfbGlzdCkpXG4tXHRcdGJyX2FkZF9mcmFtZShiciwgXHUwMDI2bXJwX2ZyYW1lX3R5cGUpO1xuLVxuIFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2bXJwLVx1MDAzZXRlc3Rfd29yaywgYnJfbXJwX3Rlc3Rfd29ya19leHBpcmVkKTtcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm1ycC1cdTAwM2Vpbl90ZXN0X3dvcmssIGJyX21ycF9pbl90ZXN0X3dvcmtfZXhwaXJlZCk7XG4gXHRobGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2bXJwLVx1MDAzZWxpc3QsIFx1MDAyNmJyLVx1MDAzZW1ycF9saXN0KTtcbiBcbitcdGlmIChobGlzdF9pc19zaW5ndWxhcl9ub2RlKFx1MDAyNm1ycC1cdTAwM2VsaXN0LCBcdTAwMjZici1cdTAwM2VtcnBfbGlzdCkpIHtcbitcdFx0ZXJyID0gYnJfYWRkX2ZyYW1lKGJyLCBjcHVfdG9fYmUxNihFVEhfUF9NUlApLCBicl9tcnBfcHJvY2Vzcyk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBkZWxldGVfbXJwO1xuK1x0fVxuK1xuIFx0ZXJyID0gYnJfbXJwX3N3aXRjaGRldl9hZGQoYnIsIG1ycCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGRlbGV0ZV9tcnA7XG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuaW5kZXggZDMzN2IxY2ZiOTgwZC4uNTE2MzAxN2ZlYjc0ZCAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG4rKysgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuQEAgLTkzNywxMCArOTM3LDE0IEBAIHN0cnVjdCBicl9mcmFtZV90eXBlIHtcbiBcdGludFx0XHRcdCgqZnJhbWVfaGFuZGxlcikoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcbiBcdFx0XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZVx0bGlzdDtcbitcdHN0cnVjdCByY3VfaGVhZFx0XHRyY3U7XG4gfTtcbiBcbi12b2lkIGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdCk7XG4tdm9pZCBicl9kZWxfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQpO1xuK2ludCBicl9hZGRfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBfX2JlMTYgdHlwZSxcbitcdFx0IGludCAoKmZyYW1lX2hhbmRsZXIpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSk7XG4rdm9pZCBicl9kZWxfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBfX2JlMTYgdHlwZSk7XG4rdm9pZCBicl9kZWxfZnJhbWVfYWxsKHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG4gXG4gc3RhdGljIGlubGluZSBib29sIGJyX3J4X2hhbmRsZXJfY2hlY2tfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MTc6MTUuMDcxMzE3ODgxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMDQxNzQ5ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRHluYW1pYyBBbGxvY2F0aW9uIG9mIGBicl9mcmFtZV90eXBlYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgYWxsIGFib3V0IG1vdmluZyBhd2F5IGZyb20gdGhvc2Ugc3RhdGljLCBnbG9iYWwgYGNmbV9mcmFtZV90eXBlYCBhbmQgYG1ycF9mcmFtZV90eXBlYCBzdHJ1Y3R1cmVzLiBJbnN0ZWFkLCB0aGUgcGF0Y2ggZHluYW1pY2FsbHkgYWxsb2NhdGVzIGBzdHJ1Y3QgYnJfZnJhbWVfdHlwZWAgaW5zdGFuY2VzIG9uIGEgcGVyLWJyaWRnZSBiYXNpcy4gVGhpcyBpcyBhIGdvb2QgbW92ZTsgaXQgbWFrZXMgdGhlIGNvZGUgY2xlYW5lciwgbW9yZSBmbGV4aWJsZSwgYW5kIHBvdGVudGlhbGx5IHNhZmVyLiBMZXQncyBzZWUgaG93IHRoaXMgcGxheXMgb3V0IGFjcm9zcyB0aGUgYnJpZGdlIGNvZGUuXG5cbkZpcnN0LCBpbiBgbmV0L2JyaWRnZS9icl9jZm0uY2AsIEkgc2VlIHRoZXkndmUgcmVtb3ZlZCB0aGUgc3RhdGljIGBjZm1fZnJhbWVfdHlwZWAuIE5vdywgd2hlbiBjcmVhdGluZyBhIENGTSBNRVAgKE1haW50ZW5hbmNlIEVudGl0eSBQb2ludCkgaW4gYGJyX2NmbV9tZXBfY3JlYXRlYCwgdGhleSBjYWxsIGBicl9hZGRfZnJhbWVgIHdpdGggdGhlIHByb3RvY29sIHR5cGUgYEVUSF9QX0NGTWAgYW5kIHRoZSBoYW5kbGVyIGBicl9jZm1fZnJhbWVfcnhgLiAgSWYgYGJyX2FkZF9mcmFtZWAgZmFpbHMgKGFsd2F5cyBhIGdvb2QgY2hlY2spLCB0aGUgTUVQIGlzIGZyZWVkIGFuZCBhbiBlcnJvciBpcyByZXR1cm5lZC4gT24gZGVsZXRpb24sIHRoZXkgY2FsbCBgYnJfZGVsX2ZyYW1lYCB3aXRoIGBFVEhfUF9DRk1gIGluc3RlYWQgb2YgdGhlIG9sZCBzdGF0aWMgc3RydWN0dXJlLiBUaGlzIGZlZWxzIGNsZWFuZXIgYW5kIG1vcmUgaW50dWl0aXZlLlxuXG5UaGVuLCBpbiBgbmV0L2JyaWRnZS9icl9pZi5jYCwgdGhleSd2ZSBhZGRlZCBgYnJfZGVsX2ZyYW1lX2FsbChicilgIHRvIGBicl9kZXZfZGVsZXRlYC4gIFRoaXMgZW5zdXJlcyBhbGwgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGZyYW1lIHR5cGVzIGFyZSBwcm9wZXJseSBjbGVhbmVkIHVwIHdoZW4gYSBicmlkZ2UgaW50ZXJmYWNlIGlzIGRlbGV0ZWQsIHdoaWNoIGlzIGFic29sdXRlbHkgY3JpdGljYWwgdG8gYXZvaWQgbWVtb3J5IGxlYWtzLiBFeGNlbGxlbnQuXG5cblBlZWtpbmcgaW50byBgbmV0L2JyaWRnZS9icl9pbnB1dC5jYCwgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzIHNlZW1zIHRvIGJlIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYnJfYWRkX2ZyYW1lYCBhbmQgYGJyX2RlbF9mcmFtZWAuICBgYnJfYWRkX2ZyYW1lYCBub3cgY2hlY2tzIGZvciBkdXBsaWNhdGUgZnJhbWUgdHlwZXMgKGEgYHR5cGVgIGFscmVhZHkgZXhpc3RzIGluIGBici1cdTAwM2VmcmFtZV90eXBlX2xpc3RgKSwgd2hpY2ggaXMgYSBkZWNlbnQgc2FuaXR5IGNoZWNrIGFuZCByZXR1cm5zIGFuIGVycm9yIGNvZGUuIEl0IHRoZW4gZHluYW1pY2FsbHkgYWxsb2NhdGVzIGEgYHN0cnVjdCBicl9mcmFtZV90eXBlYCB3aXRoIGBrbWFsbG9jX29iamAsIGFuZCBpZiB0aGF0IGZhaWxzLCByZXR1cm5zIGFuIGVycm9yLiAgSXQgc2V0cyB0aGUgYHR5cGVgIGFuZCBgZnJhbWVfaGFuZGxlcmAsIGFuZCBhZGRzIHRoZSBuZXcgYGZ0YCB0byBgYnItXHUwMDNlZnJhbWVfdHlwZV9saXN0YC4gIGBicl9kZWxfZnJhbWVgIG5vdyBmaW5kcyB0aGUgYXBwcm9wcmlhdGUgYGZ0YCBiYXNlZCBvbiB0aGUgYHR5cGVgLCBhbmQgc2FmZWx5IHJlbW92ZXMgYW5kIGZyZWVzIGl0LiAgYGJyX2RlbF9mcmFtZV9hbGxgIGp1c3QgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgbGlzdCBhbmQgY2xlYW5zIHVwIGV2ZXJ5dGhpbmcuICBJJ20gZ2xhZCB0byBzZWUgdGhlIHVzZSBvZiBga2ZyZWVfcmN1YCB3aXRoIHRoZSBgcmN1YCBoZWFkLCBwcm9wZXIgdXNlIG9mIFJDVSBmb3Igc3luY2hyb25pemF0aW9uIGlzIHRoZSB3YXkgdG8gZ28gaGVyZS5cblxuTmV4dCwgaW4gYG5ldC9icmlkZ2UvYnJfbXJwLmNgLCB0aGUgc3RhdGljIGBtcnBfZnJhbWVfdHlwZWAgaXMgZ29uZS4gIE9uIE1SUCBkZWxldGlvbiwgYGJyX2RlbF9mcmFtZWAgaXMgY2FsbGVkIHdpdGggYEVUSF9QX01SUGAuIE9uIE1SUCBhZGRpdGlvbiwgaXQgY2hlY2tzIGlmIGBtcnAtXHUwMDNlbGlzdGAgaXMgc2luZ3VsYXIsIGFuZCB0aGVuIGNhbGxzIGBicl9hZGRfZnJhbWVgIHdpdGggYEVUSF9QX01SUGAgYW5kIHRoZSBgYnJfbXJwX3Byb2Nlc3NgIGhhbmRsZXIuICBTb3VuZHMgc3RyYWlnaHRmb3J3YXJkLlxuXG5GaW5hbGx5LCBgbmV0L2JyaWRnZS9icl9wcml2YXRlLmhgIGFkZHMgdGhlIGBzdHJ1Y3QgcmN1X2hlYWQgcmN1O2AgdG8gYHN0cnVjdCBicl9mcmFtZV90eXBlYC4gIFRoaXMgaXMgZXNzZW50aWFsIGZvciBSQ1Utc2FmZSBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGNvcmUgZnVuY3Rpb25zIGFyZSB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIG5ldyBzdHJ1Y3R1cmUuXG5cbk5vdywgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEknbGwgbmVlZCB0byB1c2UgYGdyZXBwZXJgIG9yIHNpbWlsYXIgdG9vbCB0byBxdWlja2x5IHNjYW4gdGhlIHJlc3Qgb2YgdGhlIGJyaWRnZSBjb2RlIHRvIGNvbmZpcm0gdGhhdCB0aGUgYGZyYW1lX3R5cGVfbGlzdGAgYW5kIGBicl9mcmFtZV90eXBlYCBhcmUgb25seSB1c2VkIHdpdGhpbiB0aGUgaW50ZW5kZWQgc2NvcGUuIFRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkLCB3ZWxsLXRob3VnaHQtb3V0IGNoYW5nZS4gVGhlIGR5bmFtaWMgYWxsb2NhdGlvbiBhcHByb2FjaCBpcyBjb3JyZWN0IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MjksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToxNzoyOC4xMTMwNzEzOTlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMDk2Njc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZyYW1lX3R5cGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX2RldmljZS5jPTQ4MD12b2lkIGJyX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy01MDUtXFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZici1cXHUwMDNlZmRiX2xpc3QpO1xcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6NTA2OlxcdElOSVRfSExJU1RfSEVBRChcXHUwMDI2YnItXFx1MDAzZWZyYW1lX3R5cGVfbGlzdCk7XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy01MDctI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9MjY3PXN0YXRpYyBpbnQgbmZfaG9va19icmlkZ2VfcHJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICoqcHNrYilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMjItICovXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjMyMzpzdGF0aWMgaW50IGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMjQtXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTMyNS17XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjMyNjpcXHRzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqdG1wO1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMjctXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjMyODpcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wLCBcXHUwMDI2cC1cXHUwMDNlYnItXFx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdClcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzI5LVxcdFxcdGlmICh1bmxpa2VseSh0bXAtXFx1MDAzZXR5cGUgPT0gc2tiLVxcdTAwM2Vwcm90b2NvbCkpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9MzM5PXN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGJyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDI3LVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0Mjg6XFx0aWYgKHVubGlrZWx5KGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShwLCBza2IpKSlcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDI5LVxcdFxcdHJldHVybiBSWF9IQU5ETEVSX1BBU1M7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9NDcxPWludCBicl9hZGRfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBfX2JlMTYgdHlwZSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NzQte1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0NzU6XFx0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0O1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NzYtXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjQ3NzpcXHRobGlzdF9mb3JfZWFjaF9lbnRyeShmdCwgXFx1MDAyNmJyLVxcdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpIHtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDc4LVxcdFxcdGlmIChmdC1cXHUwMDNldHlwZSA9PSB0eXBlKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ4Ny1cXHRmdC1cXHUwMDNlZnJhbWVfaGFuZGxlciA9IGZyYW1lX2hhbmRsZXI7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjQ4ODpcXHRobGlzdF9hZGRfaGVhZF9yY3UoXFx1MDAyNmZ0LVxcdTAwM2VsaXN0LCBcXHUwMDI2YnItXFx1MDAzZWZyYW1lX3R5cGVfbGlzdCk7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ4OS1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz00OTM9dm9pZCBicl9kZWxfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBfX2JlMTYgdHlwZSlcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDk0LXtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDk1OlxcdHN0cnVjdCBicl9mcmFtZV90eXBlICpmdDtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDk2LVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0OTc6XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkoZnQsIFxcdTAwMjZici1cXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KSB7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ5OC1cXHRcXHRpZiAoZnQtXFx1MDAzZXR5cGUgPT0gdHlwZSkge1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTUwNj12b2lkIGJyX2RlbF9mcmFtZV9hbGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy01MDcte1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo1MDg6XFx0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0O1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy01MDktXFx0c3RydWN0IGhsaXN0X25vZGUgKm47XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTUxMC1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NTExOlxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZnQsIG4sIFxcdTAwMjZici1cXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KSB7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTUxMi1cXHRcXHRobGlzdF9kZWxfcmN1KFxcdTAwMjZmdC1cXHUwMDNlbGlzdCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycC5jPTk5ND1zdGF0aWMgYm9vbCBicl9tcnBfbWltX3Byb2Nlc3Moc3RydWN0IGJyX21ycCAqbXJwLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnAuYy0xMDMyLSAqL1xcbm5ldC9icmlkZ2UvYnJfbXJwLmM6MTAzMzpzdGF0aWMgdTggYnJfbXJwX2dldF9mcmFtZV90eXBlKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9tcnAuYy0xMDM0LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwLmM9MTA3MD1zdGF0aWMgaW50IGJyX21ycF9yY3Yoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwLmMtMTEyMi1cXHRpZiAoYnJfbXJwX2luX2ZyYW1lKHNrYikpIHtcXG5uZXQvYnJpZGdlL2JyX21ycC5jOjExMjM6XFx0XFx0dTggaW5fdHlwZSA9IGJyX21ycF9nZXRfZnJhbWVfdHlwZShza2IpO1xcbm5ldC9icmlkZ2UvYnJfbXJwLmMtMTEyNC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTUwMD1zdHJ1Y3QgbmV0X2JyaWRnZSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01MDItXFx0c3BpbmxvY2tfdFxcdFxcdFxcdGhhc2hfbG9jaztcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo1MDM6XFx0c3RydWN0IGhsaXN0X2hlYWRcXHRcXHRmcmFtZV90eXBlX2xpc3Q7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTA0LVxcdHN0cnVjdCBuZXRfZGV2aWNlXFx0XFx0KmRldjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTkzMz1yeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTM0LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjkzNTpzdHJ1Y3QgYnJfZnJhbWVfdHlwZSB7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTM2LVxcdF9fYmUxNlxcdFxcdFxcdHR5cGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE3OjI4LjE4NTE3NDE4NloiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDQyMjE4NDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBicl9wcm9jZXNzX2ZyYW1lX3R5cGVgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGlzIGBicl9wcm9jZXNzX2ZyYW1lX3R5cGVgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBhdCBpdCB3aXRoaW4gdGhlIGBuZXQvYnJpZGdlL2JyX2lucHV0LmNgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIGJyaWRnZSBpbnB1dCBwcm9jZXNzaW5nIGxvZ2ljIGlzLCBzbyBpdCBtYWtlcyBzZW5zZSB0aGF0IHRoZSBmcmFtZSB0eXBlIHdvdWxkIGJlIGhhbmRsZWQgaGVyZS4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCBkZXRlcm1pbmVzIHRoZSBpbmNvbWluZyBmcmFtZSdzIHR5cGUgYW5kIHdoYXQgaXQgZG9lcyB3aXRoIGl0LiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBvciBhIGxvZ2ljIGVycm9yIHRoYXQgSSBuZWVkIHRvIHBpbnBvaW50LiBUaW1lIHRvIGZpcmUgdXAgdGhlIGVkaXRvciBhbmQgc3RhcnQgcmVhZGluZyB0aHJvdWdoIHRoYXQgc2VjdGlvbiBvZiB0aGUgY29kZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1OTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToxNzozMC4yMjczOTYxNDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvYnJfaW5wdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjA6XFx0LyogUmV0dXJuIDAgaWYgdGhlIGZyYW1lIHdhcyBub3QgcHJvY2Vzc2VkIG90aGVyd2lzZSAxXFxuIDMyMTpcXHQgKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2tcXG4gMzIyOlxcdCAqL1xcbiAzMjM6XFx0c3RhdGljIGludCBicl9wcm9jZXNzX2ZyYW1lX3R5cGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4gMzI0OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAzMjU6XFx0e1xcbiAzMjY6XFx0XFx0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKnRtcDtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRtcCwgXFx1MDAyNnAtXFx1MDAzZWJyLVxcdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpXFxuIDMyOTpcXHRcXHRcXHRpZiAodW5saWtlbHkodG1wLVxcdTAwM2V0eXBlID09IHNrYi1cXHUwMDNlcHJvdG9jb2wpKVxcbiAzMzA6XFx0XFx0XFx0XFx0cmV0dXJuIHRtcC1cXHUwMDNlZnJhbWVfaGFuZGxlcihwLCBza2IpO1xcbiAzMzE6XFx0XFxuIDMzMjpcXHRcXHRyZXR1cm4gMDtcXG4gMzMzOlxcdH1cXG4gMzM0OlxcdFxcbiAzMzU6XFx0LypcXG4gMzM2OlxcdCAqIFJldHVybiBOVUxMIGlmIHNrYiBpcyBoYW5kbGVkXFxuIDMzNzpcXHQgKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2tcXG4gMzM4OlxcdCAqL1xcbiAzMzk6XFx0c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgYnJfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcXG4gMzQwOlxcdHtcXG4gMzQxOlxcdFxcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xcbiAzNDI6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcDtcXG4gMzQzOlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSAqcHNrYjtcXG4gMzQ0OlxcdFxcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBldGhfaGRyKHNrYiktXFx1MDAzZWhfZGVzdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MTc6MzAuMjI3NTA1MDc4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3MDM1OTIzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYGJyX2FkZF9mcmFtZWAgZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGFuZCBNZW1vcnkgU2FmZXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCB0aGUgYGJyX2FkZF9mcmFtZWAgZnVuY3Rpb24gaW4gYGJyX2lucHV0LmNgLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIHBvdGVudGlhbCBsZWFrcy4gVGhlIGZ1bmN0aW9uIGFkZHMgYSBmcmFtZSB0eXBlIHRvIGEgYnJpZGdlJ3MgbGlzdC4gSSBuZWVkIHRvIGJlIG1ldGljdWxvdXMuXG5cbkZpcnN0LCB0aGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoIHRoZSBleGlzdGluZyBmcmFtZSB0eXBlcyB0byBlbnN1cmUgdW5pcXVlbmVzcy4gVGhhdCdzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLiBUaGVuLCBpdCBhbGxvY2F0ZXMgbWVtb3J5IGZvciBhIG5ldyBgYnJfZnJhbWVfdHlwZWAgc3RydWN0dXJlIHVzaW5nIGBrbWFsbG9jX29iamAuIFRoaXMgaXMgY3JpdGljYWwuIGBrbWFsbG9jX29iaigqZnQpYCBtZWFucyBpdCBhbGxvY2F0ZXMgdGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyZSBgZnRgLlxuXG5OZXh0LCB0aGUgc3RydWN0dXJlIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQ6IGB0eXBlYCBhbmQgYGZyYW1lX2hhbmRsZXJgIGFyZSBhc3NpZ25lZCB0aGVpciBwcm92aWRlZCB2YWx1ZXMsIGFuZCB0aGUgYGxpc3RgIG1lbWJlciBpcyBhZGRlZCB0byB0aGUgYGhsaXN0X2hlYWRgIG9mIGZyYW1lIHR5cGVzLiBUaGUgYHJjdWAgbWVtYmVyIGlzIGxpa2VseSB1c2VkIGZvciBSQ1Utc2FmZSBmcmVlaW5nIGxhdGVyLiBUaGUgYGhsaXN0X2FkZF9oZWFkX3JjdWAgZnVuY3Rpb24gaW1wbGljaXRseSBpbml0aWFsaXplcyBgbGlzdGAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBhcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgcmVhZHMgb3IgcG90ZW50aWFsIGxlYWtzIHRvIHVzZXJzcGFjZT8gTGV0J3MgdHJhY2UgaXQuIFRoZSBgZnRgIHN0cnVjdHVyZSBpcyB1c2VkIGludGVybmFsbHkgYnkgYGJyX3Byb2Nlc3NfZnJhbWVfdHlwZWAgdG8gcmVhZCBpdHMgYHR5cGVgIGFuZCBgZnJhbWVfaGFuZGxlcmAgbWVtYmVycywgYW5kIHRvIHRyYXZlcnNlIHRoZSBsaXN0IHZpYSBgbGlzdGAuIEltcG9ydGFudGx5LCBhbGwgZmllbGRzICpyZWFkKiBhcmUgZXhwbGljaXRseSBhc3NpZ25lZCB2YWx1ZXMuIFRoZXJlIGlzIG5vIGNvcHlpbmcgb2YgZGF0YSB0byB1c2Vyc3BhY2UsIHNvIHRoZXJlJ3Mgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0aHJvdWdoIHRoYXQgY2hhbm5lbC4gSSBzZWUgbm8gdW5pbml0aWFsaXplZCBkYXRhIGJlaW5nIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGJyYW5jaGluZy4gQW5kIG5vIHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgZWl0aGVyLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uc2lkZXIgbWVtb3J5IG1hbmFnZW1lbnQsIGNvbmN1cnJlbmN5LCBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIG1lbW9yeSBsZWFrcy4gVGhlIGZ1bmN0aW9uIGR5bmFtaWNhbGx5IGFsbG9jYXRlcyBgYnJfZnJhbWVfdHlwZWAgdXNpbmcgYGttYWxsb2Nfb2JqYC4gVGhpcyBzdHJ1Y3R1cmUgd2lsbCBldmVudHVhbGx5IGJlIGRlYWxsb2NhdGVkIHVzaW5nIGBrZnJlZV9yY3VgLCBpbmRpY2F0aW5nIGl0J3MgUkNVLXByb3RlY3RlZC4gVGhhdCBzdWdnZXN0cyB3ZSBoYXZlIHRvIGNvbnNpZGVyIFJDVSBzeW5jaHJvbml6YXRpb24uIEhvd2V2ZXIsIGFueSBidWdzIGluIFJDVSBsaXN0IHRyYXZlcnNhbCBvciBtZW1vcnkgZnJlZWluZyAobGlrZSBVQUYgb3IgZG91YmxlLWZyZWUpIGFyZSB0aGluZ3MgdGhhdCB3b3VsZCBnZXQgY2F1Z2h0IGJ5IEtBU0FOIG9yIG90aGVyIHN0YW5kYXJkIG1lbW9yeSBkZXRlY3RvcnMuIEkgZmVlbCBjb25maWRlbnQgYWJvdXQgdGhpcyBwb2ludC5cblxuR2l2ZW4gdGhlIG92ZXJhbGwgY29kZSBhbmFseXNpcywgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBFdmVyeXRoaW5nIHRvdWNoZWQgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQuXG5cblJldmlld2luZyB0aGUgS01TQU4gcnVsZXMgaGVscHMgbWUgY29uZmlybSBteSBjb25jbHVzaW9uLiBUaGUgY29kZSBkb2Vzbid0IG1lZXQgdGhlIGNyaXRlcmlhIGZvciBgTmVlZHNLTVNBTj10cnVlYC4gSXQgZmFsbHMgaW50byB0aGUgY2F0ZWdvcnkgb2YgY29kZSB0aGF0IHByaW1hcmlseSBpbnRyb2R1Y2VzIHJpc2tzIGxpa2UgVUFGLCBtZW1vcnkgbGVha3MsIGV0Yy4sIHdoaWNoIGFyZSBjYXVnaHQgYnkgZXhpc3RpbmcgZGV0ZWN0b3JzLiBUaGUgcGF0Y2ggZG9lc24ndCBjcmVhdGUgYSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjQzLCJPdXRwdXRUb2tlbnMiOjIwOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjE3OjM1LjkzMTEwMDE3M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGV0aGVybmV0IGZyYW1lIGhhbmRsZXJzIChzdWNoIGFzIENGTSBhbmQgTVJQKSBhcmUgcmVnaXN0ZXJlZCBpbiB0aGUgYnJpZGdlIG1vZHVsZS4gSW5zdGVhZCBvZiB1c2luZyBzdGF0aWMgZ2xvYmFsIGBzdHJ1Y3QgYnJfZnJhbWVfdHlwZWAgdmFyaWFibGVzLCBpdCBkeW5hbWljYWxseSBhbGxvY2F0ZXMgYHN0cnVjdCBicl9mcmFtZV90eXBlYCB1c2luZyBga21hbGxvY19vYmpgIGFuZCBwcm90ZWN0cyBpdHMgcmVtb3ZhbCB3aXRoIGBrZnJlZV9yY3VgLlxcblxcbkFsbCBmaWVsZHMgKGB0eXBlYCwgYGZyYW1lX2hhbmRsZXJgLCBhbmQgYGxpc3RgKSBhY2Nlc3NlZCBieSBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYCBhbmQgbGlzdCB0cmF2ZXJzYWwgZnVuY3Rpb25zIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBpbnNlcnRpb24gaW50byBgYnItXFx1MDAzZWZyYW1lX3R5cGVfbGlzdGAuIE5vbmUgb2YgdGhlc2Ugc3RydWN0dXJlcyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFyZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdXNlZCBpbiBjb25kaXRpb25hbCBicmFuY2hpbmcgb3IgY2FsY3VsYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgKHN1Y2ggYXMgUkNVIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgbGVha3MpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBldGhlcm5ldCBmcmFtZSBoYW5kbGVycyAoc3VjaCBhcyBDRk0gYW5kIE1SUCkgYXJlIHJlZ2lzdGVyZWQgaW4gdGhlIGJyaWRnZSBtb2R1bGUuIEluc3RlYWQgb2YgdXNpbmcgc3RhdGljIGdsb2JhbCBgc3RydWN0IGJyX2ZyYW1lX3R5cGVgIHZhcmlhYmxlcywgaXQgZHluYW1pY2FsbHkgYWxsb2NhdGVzIGBzdHJ1Y3QgYnJfZnJhbWVfdHlwZWAgdXNpbmcgYGttYWxsb2Nfb2JqYCBhbmQgcHJvdGVjdHMgaXRzIHJlbW92YWwgd2l0aCBga2ZyZWVfcmN1YC5cXG5cXG5BbGwgZmllbGRzIChgdHlwZWAsIGBmcmFtZV9oYW5kbGVyYCwgYW5kIGBsaXN0YCkgYWNjZXNzZWQgYnkgYGJyX3Byb2Nlc3NfZnJhbWVfdHlwZWAgYW5kIGxpc3QgdHJhdmVyc2FsIGZ1bmN0aW9ucyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgaW5zZXJ0aW9uIGludG8gYGJyLVxcdTAwM2VmcmFtZV90eXBlX2xpc3RgLiBOb25lIG9mIHRoZXNlIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhcmUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHVzZWQgaW4gY29uZGl0aW9uYWwgYnJhbmNoaW5nIG9yIGNhbGN1bGF0aW9ucy4gQW55IHBvdGVudGlhbCBidWdzIChzdWNoIGFzIFJDVSBzeW5jaHJvbml6YXRpb24gaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGxlYWtzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowfjjxg[1] Phase: Succeeded StartedAt: 2026-09-05 09:17:46 +0000 UTC FinishedAt: 2026-09-05 09:17:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 09:17:46 +0000 UTC FinishedAt: 2026-09-05 09:17:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[2] Phase: Succeeded StartedAt: 2026-09-05 09:17:46 +0000 UTC FinishedAt: 2026-09-05 13:01:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 09:17:46 +0000 UTC FinishedAt: 2026-09-05 13:01:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 09:17:46 +0000 UTC FinishedAt: 2026-09-05 09:17:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 09:17:46 +0000 UTC FinishedAt: 2026-09-05 09:17:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfjjxg/series-workflowfjjxg-convert-artifact-3077238364/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 09:17:56 +0000 UTC FinishedAt: 2026-09-05 09:34:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 09:17:56 +0000 UTC FinishedAt: 2026-09-05 09:34:29 +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:*5944e196-9832-4ce7-9ee5-a1f1db4dae28,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-workflowfjjxg/series-workflowfjjxg-convert-artifact-3077238364/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": "f5b44eca-f272-4d83-afca-fd6a4ccee28d", "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-workflowfjjxg/series-workflowfjjxg-build-action-104669578/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 09:17:56 +0000 UTC FinishedAt: 2026-09-05 09:34:19 +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:*5944e196-9832-4ce7-9ee5-a1f1db4dae28,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-workflowfjjxg/series-workflowfjjxg-convert-artifact-3077238364/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": "f5b44eca-f272-4d83-afca-fd6a4ccee28d", "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-workflowfjjxg/series-workflowfjjxg-build-action-104669578/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 09:34:29 +0000 UTC FinishedAt: 2026-09-05 09:34:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 09:34:29 +0000 UTC FinishedAt: 2026-09-05 09:34:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 09:34:29 +0000 UTC FinishedAt: 2026-09-05 09:34:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 09:34:29 +0000 UTC FinishedAt: 2026-09-05 09:34:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfjjxg/series-workflowfjjxg-convert-artifact-4294413723/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 09:34:39 +0000 UTC FinishedAt: 2026-09-05 09:36:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 09:34:39 +0000 UTC FinishedAt: 2026-09-05 09:36:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f5b44eca-f272-4d83-afca-fd6a4ccee28d,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-workflowfjjxg/series-workflowfjjxg-build-action-104669578/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-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 09:36:37 +0000 UTC FinishedAt: 2026-09-05 09:36:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 09:36:37 +0000 UTC FinishedAt: 2026-09-05 09:36:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 09:36:37 +0000 UTC FinishedAt: 2026-09-05 09:56:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 09:36:37 +0000 UTC FinishedAt: 2026-09-05 09:56:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5944e196-9832-4ce7-9ee5-a1f1db4dae28,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-workflowfjjxg/series-workflowfjjxg-convert-artifact-4294413723/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": "6d9497f0-1845-4d30-be4b-c5531e9ed693", "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-workflowfjjxg/series-workflowfjjxg-build-action-1648818495/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 09:36:37 +0000 UTC FinishedAt: 2026-09-05 09:56:48 +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:*5944e196-9832-4ce7-9ee5-a1f1db4dae28,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-workflowfjjxg/series-workflowfjjxg-convert-artifact-4294413723/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": "6d9497f0-1845-4d30-be4b-c5531e9ed693", "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-workflowfjjxg/series-workflowfjjxg-build-action-1648818495/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 09:56:58 +0000 UTC FinishedAt: 2026-09-05 09:56:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 09:56:58 +0000 UTC FinishedAt: 2026-09-05 09:56:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 09:56:58 +0000 UTC FinishedAt: 2026-09-05 09:58:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 09:56:58 +0000 UTC FinishedAt: 2026-09-05 09: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:*6d9497f0-1845-4d30-be4b-c5531e9ed693,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-workflowfjjxg/series-workflowfjjxg-build-action-1648818495/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-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 09:58:55 +0000 UTC FinishedAt: 2026-09-05 13:01:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 09:58:55 +0000 UTC FinishedAt: 2026-09-05 13:01:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"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:*f5b44eca-f272-4d83-afca-fd6a4ccee28d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6d9497f0-1845-4d30-be4b-c5531e9ed693,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-workflowfjjxg/series-workflowfjjxg-build-action-104669578/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-workflowfjjxg/series-workflowfjjxg-build-action-1648818495/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 09:58:55 +0000 UTC FinishedAt: 2026-09-05 09:59:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 09:58:55 +0000 UTC FinishedAt: 2026-09-05 09: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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"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-workflowfjjxg/series-workflowfjjxg-convert-artifact-999741076/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 09:58:55 +0000 UTC FinishedAt: 2026-09-05 09:58:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 09:58:55 +0000 UTC FinishedAt: 2026-09-05 09:58:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 09:58:55 +0000 UTC FinishedAt: 2026-09-05 09:58:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 09:59:05 +0000 UTC FinishedAt: 2026-09-05 13:01:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjjxg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_add_frame","br_del_frame","br_del_frame_all","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del","br_dev_delete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"80dd7e754b3aa9637a0758ad93fa209f9650ec48","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"812fa91c-2e34-4104-8775-050a1d6aa243","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 09:59:05 +0000 UTC FinishedAt: 2026-09-05 13:01:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f5b44eca-f272-4d83-afca-fd6a4ccee28d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6d9497f0-1845-4d30-be4b-c5531e9ed693,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-workflowfjjxg/series-workflowfjjxg-build-action-104669578/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-workflowfjjxg/series-workflowfjjxg-build-action-1648818495/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-workflowfjjxg/series-workflowfjjxg-convert-artifact-999741076/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,}