Name: series-workflowhhprd Phase: Succeeded StartedAt: 2026-07-24 22:30:22 +0000 UTC FinishedAt: 2026-07-25 03:23:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[0] Phase: Succeeded StartedAt: 2026-07-24 22:30:23 +0000 UTC FinishedAt: 2026-07-24 23:00:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[0].run-triage Phase: Succeeded StartedAt: 2026-07-24 22:30:23 +0000 UTC FinishedAt: 2026-07-24 23:00:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6_MROUTE", "IPV6_MROUTE_MULTIPLE_TABLES", "IPV6_PIMSM_V2" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6_MROUTE", "IPV6_MROUTE_MULTIPLE_TABLES", "IPV6_PIMSM_V2" ], "series_id": "c9c7f758-314f-4ed0-9400-04b16f040b80" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip6_mroute_setsockopt", "ip6_mroute_getsockopt", "ip6mr_ioctl", "ip6mr_compat_ioctl", "ip6_mr_input", "ip6_mr_output", "pim6_rcv", "reg_vif_xmit", "mroute6_is_socket", "ip6mr_sk_done" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI0IDIyOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfTVJPVVRFJiMzNDssCiAgICAmIzM0O0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtJUFY2X1BJTVNNX1YyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwNl9tcm91dGVfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcDZtcl9pb2N0bCYjMzQ7LAogICAgJiMzNDtpcDZtcl9jb21wYXRfaW9jdGwmIzM0OywKICAgICYjMzQ7aXA2X21yX2lucHV0JiMzNDssCiAgICAmIzM0O2lwNl9tcl9vdXRwdXQmIzM0OywKICAgICYjMzQ7cGltNl9yY3YmIzM0OywKICAgICYjMzQ7cmVnX3ZpZl94bWl0JiMzNDssCiAgICAmIzM0O21yb3V0ZTZfaXNfc29ja2V0JiMzNDssCiAgICAmIzM0O2lwNm1yX3NrX2RvbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyByZWZlcmVuY2UgY291bnRpbmcgdG8gSVB2NiBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZXMgKHN0cnVjdCBtcl90YWJsZSkgdG8gZml4IHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMuIEl0IG1vZGlmaWVzIHZhcmlvdXMgZW50cnkgcG9pbnRzIChzb2NrZXQgb3B0aW9ucywgaW9jdGxzLCBuZXRsaW5rLCBwYWNrZXQgcngvdHgpIHRvIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIHRhYmxlIHdoaWxlIGluIHVzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjI6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0ZGI1ZjhkYTA5ZTFhYmQ2MGJiYmVlNTQwNzc3YzRhYzBmMmM3MmQxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMjI6NTk6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oIGIvaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oXG5pbmRleCA0ZDU1ODI3ZTk3MDUzNy4uNTM2ZmEzMjQ2MjAyNzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbXJvdXRlX2Jhc2UuaFxuQEAgLTIsOCAmIzQzOzIsMTAgQEBcbiAjZGVmaW5lIF9fTElOVVhfTVJPVVRFX0JBU0VfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yaGFzaHRhYmxlLXR5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZmliX25vdGlmaWVyLmhcdTAwM2VcbkBAIC0yNDIsNiAmIzQzOzI0NCw4IEBAIHN0cnVjdCBtcl90YWJsZV9vcHMge1xuICAqIEBtcm91dGVfZG9fYXNzZXJ0OiBXaGV0aGVyIHRvIGluZm9ybSB1c2Vyc3BhY2Ugb24gd3JvbmcgaW5ncmVzc1xuICAqIEBtcm91dGVfZG9fcGltOiBXaGV0aGVyIHRvIHJlY2VpdmUgSUdNUCBQSU12MVxuICAqIEBtcm91dGVfcmVnX3ZpZl9udW06IFBJTS1kZXZpY2UgdmlmIGluZGV4XG4mIzQzOyAqIEByZWZjbnQ6IGxpZmV0aW1lIHBpbnMgZm9yIHRoaXMgdGFibGVcbiYjNDM7ICogQGRlc3Ryb3lfd29yazogcHJvY2Vzcy1jb250ZXh0IGNsZWFudXAgYmVmb3JlIGZpbmFsIFJDVSBmcmVlXG4gICovXG4gc3RydWN0IG1yX3RhYmxlIHtcbiBcdHN0cnVjdCByY3Vfd29ya1x0XHR3b3JrO1xuQEAgLTI2MSw2ICYjNDM7MjY1LDggQEAgc3RydWN0IG1yX3RhYmxlIHtcbiBcdGJvb2xcdFx0XHRtcm91dGVfZG9fcGltO1xuIFx0Ym9vbFx0XHRcdG1yb3V0ZV9kb193cnZpZndob2xlO1xuIFx0aW50XHRcdFx0bXJvdXRlX3JlZ192aWZfbnVtO1xuJiM0MztcdHJlZmNvdW50X3RcdFx0cmVmY250O1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdFx0ZGVzdHJveV93b3JrO1xuIH07XG4gXG4gc3RhdGljIGlubGluZSBib29sIG1yX2Nhbl9mcmVlX3RhYmxlKHN0cnVjdCBuZXQgKm5ldClcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yX2Jhc2UuYyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jXG5pbmRleCA4NjdiMjRiZWRlZDExMi4uOTcxMDc4OWNmYWY5OTQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcG1yX2Jhc2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBtcl9iYXNlLmNcbkBAIC0zMiw4ICYjNDM7MzIsMTAgQEAgc3RhdGljIHZvaWQgX19tcl9mcmVlX3RhYmxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSxcbiBcdFx0XHRcdFx0ICAgIHN0cnVjdCBtcl90YWJsZSwgd29yayk7XG4mIzQzO1x0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQpO1xuIFxuIFx0cmhsdGFibGVfZGVzdHJveShcdTAwMjZtcnQtXHUwMDNlbWZjX2hhc2gpO1xuJiM0MztcdHB1dF9uZXQobmV0KTtcbiBcdGtmcmVlKG1ydCk7XG4gfVxuIFxuQEAgLTU2LDExICYjNDM7NTgsMTIgQEAgbXJfdGFibGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQsXG4gXHRpZiAoIW1ydClcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXHRtcnQtXHUwMDNlaWQgPSBpZDtcbi1cdHdyaXRlX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCwgbmV0KTtcbiYjNDM7XHR3cml0ZV9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQsIGdldF9uZXQobmV0KSk7XG4gXG4gXHRtcnQtXHUwMDNlb3BzID0gKm9wcztcbiBcdGVyciA9IHJobHRhYmxlX2luaXQoXHUwMDI2bXJ0LVx1MDAzZW1mY19oYXNoLCBtcnQtXHUwMDNlb3BzLnJodF9wYXJhbXMpO1xuIFx0aWYgKGVycikge1xuJiM0MztcdFx0cHV0X25ldChyZWFkX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCkpO1xuIFx0XHRrZnJlZShtcnQpO1xuIFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0fVxuQEAgLTcyLDYgJiM0Mzs3NSw3IEBAIG1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxuIFx0dGltZXJfc2V0dXAoXHUwMDI2bXJ0LVx1MDAzZWlwbXJfZXhwaXJlX3RpbWVyLCBleHBpcmVfZnVuYywgMCk7XG4gXG4gXHRtcnQtXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtID0gLTE7XG4mIzQzO1x0cmVmY291bnRfc2V0KFx1MDAyNm1ydC1cdTAwM2VyZWZjbnQsIDEpO1xuIFx0dGFibGVfc2V0KG1ydCwgbmV0KTtcbiBcdHJldHVybiBtcnQ7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jXG5pbmRleCA2MDRhNTg4Mzg5MDFhNy4uOTRiYjAwYmRmZjk4YzggMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZtci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZtci5jXG5AQCAtODcsNiAmIzQzOzg3LDExIEBAIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbXJ0X2NhY2hlcCBfX3JlYWRfbW9zdGx5O1xuIHN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwNm1yX25ld190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCk7XG4gc3RhdGljIHZvaWQgaXA2bXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbiBcdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRldl9raWxsX2xpc3QpO1xuJiM0MztzdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiYjNDM7c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfZ2V0X3RhYmxlX2hvbGQoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpO1xuJiM0MztzdGF0aWMgdm9pZCBpcDZtcl9wdXRfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQpO1xuJiM0MztzdGF0aWMgdm9pZCBfX2lwNm1yX3B1dF90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZGV2X2tpbGxfbGlzdCk7XG4gXG4gc3RhdGljIHZvaWQgaXA2X21yX2ZvcndhcmQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbiBcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTE3OSw3ICYjNDM7MTg0LDcgQEAgc3RhdGljIGludCBpcDZtcl9ydWxlX2FjdGlvbihzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsIHN0cnVjdCBmbG93aSAqZmxwLFxuIFxuIFx0YXJnLVx1MDAzZXRhYmxlID0gZmliX3J1bGVfZ2V0X3RhYmxlKHJ1bGUsIGFyZyk7XG4gXG4tXHRtcnQgPSBfX2lwNm1yX2dldF90YWJsZShydWxlLVx1MDAzZWZyX25ldCwgYXJnLVx1MDAzZXRhYmxlKTtcbiYjNDM7XHRtcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChydWxlLVx1MDAzZWZyX25ldCwgYXJnLVx1MDAzZXRhYmxlKTtcbiBcdGlmICghbXJ0KVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcdHJlcy1cdTAwM2VtcnQgPSBtcnQ7XG5AQCAtMjcxLDcgJiM0MzsyNzYsOCBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwNm1yX3J1bGVzX2V4aXRfcnRubChzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobXJ0LCBuZXh0LCBcdTAwMjZuZXQtXHUwMDNlaXB2Ni5tcjZfdGFibGVzLCBsaXN0KSB7XG4gXHRcdGxpc3RfZGVsX3JjdShcdTAwMjZtcnQtXHUwMDNlbGlzdCk7XG4tXHRcdGlwNm1yX2ZyZWVfdGFibGUobXJ0LCBkZXZfa2lsbF9saXN0KTtcbiYjNDM7XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuJiM0MztcdFx0X19pcDZtcl9wdXRfdGFibGUobXJ0LCBkZXZfa2lsbF9saXN0KTtcbiBcdH1cbiB9XG4gXG5AQCAtMzE0LDcgJiM0MzszMjAsNyBAQCBzdGF0aWMgc3RydWN0IG1yX3RhYmxlICpfX2lwNm1yX2dldF90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZClcbiBzdGF0aWMgaW50IGlwNm1yX2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k2ICpmbHA2LFxuIFx0XHRcdCAgICBzdHJ1Y3QgbXJfdGFibGUgKiptcnQpXG4ge1xuLVx0Km1ydCA9IHJjdV9kZXJlZmVyZW5jZShuZXQtXHUwMDNlaXB2Ni5tcnQ2KTtcbiYjNDM7XHQqbXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQobmV0LCBSVDZfVEFCTEVfREZMVCk7XG4gXHRpZiAoISptcnQpXG4gXHRcdHJldHVybiAtRUFHQUlOO1xuIFx0cmV0dXJuIDA7XG5AQCAtMzQyLDcgJiM0MzszNDgsOCBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwNm1yX3J1bGVzX2V4aXRfcnRubChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobmV0LVx1MDAzZWlwdjYubXJ0NiwgMSk7XG4gXG4gXHRSQ1VfSU5JVF9QT0lOVEVSKG5ldC1cdTAwM2VpcHY2Lm1ydDYsIE5VTEwpO1xuLVx0aXA2bXJfZnJlZV90YWJsZShtcnQsIGRldl9raWxsX2xpc3QpO1xuJiM0MztcdHN5bmNocm9uaXplX3JjdSgpO1xuJiM0MztcdF9faXA2bXJfcHV0X3RhYmxlKG1ydCwgZGV2X2tpbGxfbGlzdCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaXA2bXJfcnVsZXNfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG5AQCAtMzY4LDYgJiM0MzszNzUsNDQgQEAgc3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfZ2V0X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKVxuIFx0cmV0dXJuIG1ydDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwNm1yX2dldF90YWJsZV9ob2xkKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRtcnQgPSBfX2lwNm1yX2dldF90YWJsZShuZXQsIGlkKTtcbiYjNDM7XHRpZiAobXJ0IFx1MDAyNlx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNm1ydC1cdTAwM2VyZWZjbnQpKVxuJiM0MztcdFx0bXJ0ID0gTlVMTDtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1ydDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgX19pcDZtcl9wdXRfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkICpkZXZfa2lsbF9saXN0O1xuJiM0MztcdExJU1RfSEVBRChsb2NhbF9kZXZfa2lsbF9saXN0KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2bXJ0LVx1MDAzZXJlZmNudCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICghbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSkge1xuJiM0MztcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZtcnQtXHUwMDNlZGVzdHJveV93b3JrKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRldl9raWxsX2xpc3QgPSBoZWFkID8gaGVhZCA6IFx1MDAyNmxvY2FsX2Rldl9raWxsX2xpc3Q7XG4mIzQzO1x0aXA2bXJfZnJlZV90YWJsZShtcnQsIGRldl9raWxsX2xpc3QpO1xuJiM0MztcdGlmICghaGVhZClcbiYjNDM7XHRcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoZGV2X2tpbGxfbGlzdCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlwNm1yX3B1dF90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydClcbiYjNDM7e1xuJiM0MztcdF9faXA2bXJfcHV0X3RhYmxlKG1ydCwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBpcDZtcl9oYXNoX2NtcChzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyAqYXJnLFxuIFx0XHRcdCAgY29uc3Qgdm9pZCAqcHRyKVxuIHtcbkBAIC00MTMsOCAmIzQzOzQ1OCwxMiBAQCBzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXG4gXHRpZiAobXJ0KVxuIFx0XHRyZXR1cm4gbXJ0O1xuIFxuLVx0cmV0dXJuIG1yX3RhYmxlX2FsbG9jKG5ldCwgaWQsIFx1MDAyNmlwNm1yX21yX3RhYmxlX29wcyxcbi1cdFx0XHQgICAgICBpcG1yX2V4cGlyZV9wcm9jZXNzLCBpcDZtcl9uZXdfdGFibGVfc2V0KTtcbiYjNDM7XHRtcnQgPSBtcl90YWJsZV9hbGxvYyhuZXQsIGlkLCBcdTAwMjZpcDZtcl9tcl90YWJsZV9vcHMsXG4mIzQzO1x0XHRcdCAgICAgaXBtcl9leHBpcmVfcHJvY2VzcywgaXA2bXJfbmV3X3RhYmxlX3NldCk7XG4mIzQzO1x0aWYgKCFJU19FUlIobXJ0KSlcbiYjNDM7XHRcdElOSVRfV09SSyhcdTAwMjZtcnQtXHUwMDNlZGVzdHJveV93b3JrLCBpcDZtcl9mcmVlX3RhYmxlX3dvcmspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbXJ0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuQEAgLTQyMyw4ICYjNDM7NDcyLDYgQEAgc3RhdGljIHZvaWQgaXA2bXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZtcnQtXHUwMDNlbmV0KTtcbiBcdExJU1RfSEVBRChpcDZtcl9kZXZfa2lsbF9saXN0KTtcbiBcbi1cdFdBUk5fT05fT05DRSghbXJfY2FuX2ZyZWVfdGFibGUobmV0KSk7XG4tXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNm1ydC1cdTAwM2VpcG1yX2V4cGlyZV90aW1lcik7XG4gXHRtcm91dGVfY2xlYW5fdGFibGVzKG1ydCwgTVJUNl9GTFVTSF9NSUZTIHwgTVJUNl9GTFVTSF9NSUZTX1NUQVRJQyB8XG4gXHRcdFx0ICAgIE1SVDZfRkxVU0hfTUZDIHwgTVJUNl9GTFVTSF9NRkNfU1RBVElDLFxuQEAgLTQzNiw2ICYjNDM7NDgzLDE3IEBAIHN0YXRpYyB2b2lkIGlwNm1yX2ZyZWVfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQsXG4gXHRsaXN0X3NwbGljZShcdTAwMjZpcDZtcl9kZXZfa2lsbF9saXN0LCBkZXZfa2lsbF9saXN0KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGlwNm1yX2ZyZWVfdGFibGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXJfdGFibGUsIGRlc3Ryb3lfd29yayk7XG4mIzQzO1x0TElTVF9IRUFEKGRldl9raWxsX2xpc3QpO1xuJiM0MztcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRpcDZtcl9mcmVlX3RhYmxlKG1ydCwgXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG4mIzQzO1x0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShcdTAwMjZkZXZfa2lsbF9saXN0KTtcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0Mzt9XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfUFJPQ19GU1xuIC8qIFRoZSAvcHJvYyBpbnRlcmZhY2VzIHRvIG11bHRpY2FzdCByb3V0aW5nXG4gICogL3Byb2MvaXA2X21yX2NhY2hlIC9wcm9jL2lwNl9tcl92aWZcbkBAIC01NjksNyAmIzQzOzYyNyw3IEBAIHN0YXRpYyBpbnQgcGltNl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHN0cnVjdCBpcHY2aGRyICAgKmVuY2FwO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgICpyZWdfZGV2ID0gTlVMTDtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4tXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcbiYjNDM7XHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IE5VTEw7XG4gXHRzdHJ1Y3QgZmxvd2k2IGZsNiA9IHtcbiBcdFx0LmZsb3dpNl9paWZcdD0gc2tiLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4LFxuIFx0XHQuZmxvd2k2X21hcmtcdD0gc2tiLVx1MDAzZW1hcmssXG5AQCAtNjE3LDkgJiM0Mzs2NzUsMTIgQEAgc3RhdGljIGludCBwaW02X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiX3R1bm5lbF9yeChza2IsIHJlZ19kZXYsIGRldl9uZXQocmVnX2RldikpO1xuIFxuIFx0bmV0aWZfcngoc2tiKTtcbiYjNDM7XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcbiBcdHJldHVybiAwO1xuICBkcm9wOlxuJiM0MztcdGlmIChtcnQpXG4mIzQzO1x0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTYzNCw3ICYjNDM7Njk1LDcgQEAgc3RhdGljIG5ldGRldl90eF90IHJlZ192aWZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XG4tXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcbiYjNDM7XHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IE5VTEw7XG4gXHRzdHJ1Y3QgZmxvd2k2IGZsNiA9IHtcbiBcdFx0LmZsb3dpNl9vaWZcdD0gZGV2LVx1MDAzZWlmaW5kZXgsXG4gXHRcdC5mbG93aTZfaWlmXHQ9IHNrYi1cdTAwM2Vza2JfaWlmID8gOiBMT09QQkFDS19JRklOREVYLFxuQEAgLTY1NSwxMiAmIzQzOzcxNiwxNSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgcmVnX3ZpZl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpcDZtcl9jYWNoZV9yZXBvcnQobXJ0LCBza2IsIFJFQURfT05DRShtcnQtXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtKSxcbiBcdFx0XHQgICBNUlQ2TVNHX1dIT0xFUEtUKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIFxuIHR4X2xvb2t1cF9lcnI6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB0eF9lcnI6XG4mIzQzO1x0aWYgKG1ydClcbiYjNDM7XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0REVWX1NUQVRTX0lOQyhkZXYsIHR4X2Vycm9ycyk7XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG5AQCAtMTYxNSwxMiAmIzQzOzE2NzksMTMgQEAgc3RhdGljIHZvaWQgbXJvdXRlX2NsZWFuX3RhYmxlcyhzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgaW50IGZsYWdzLFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW50IGlwNm1yX3NrX2luaXQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBzb2NrICpzaylcbiYjNDM7c3RhdGljIGludCBfX2lwNm1yX3NrX2luaXQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRpbnQgZXJyID0gMDtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbiBcbi1cdHJ0bmxfbG9jaygpO1xuJiM0MztcdEFTU0VSVF9SVE5MKCk7XG4mIzQzO1xuIFx0c3Bpbl9sb2NrKFx1MDAyNm1ydF9sb2NrKTtcbiBcdGlmIChydG5sX2RlcmVmZXJlbmNlKG1ydC1cdTAwM2Vtcm91dGVfc2spKSB7XG4gXHRcdGVyciA9IC1FQUREUklOVVNFO1xuQEAgLTE2MjgsNiAmIzQzOzE2OTMsNyBAQCBzdGF0aWMgaW50IGlwNm1yX3NrX2luaXQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBzb2NrICpzaylcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1ydC1cdTAwM2Vtcm91dGVfc2ssIHNrKTtcbiBcdFx0c29ja19zZXRfZmxhZyhzaywgU09DS19SQ1VfRlJFRSk7XG4gXHRcdGF0b21pY19pbmMoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXHUwMDNlbWNfZm9yd2FyZGluZyk7XG4mIzQzO1x0XHRyZWZjb3VudF9pbmMoXHUwMDI2bXJ0LVx1MDAzZXJlZmNudCk7XG4gXHR9XG4gXHRzcGluX3VubG9jayhcdTAwMjZtcnRfbG9jayk7XG4gXG5AQCAtMTYzNiw3ICYjNDM7MTcwMiw2IEBAIHN0YXRpYyBpbnQgaXA2bXJfc2tfaW5pdChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IHNvY2sgKnNrKVxuIFx0XHRcdFx0XHQgICAgIE5FVENPTkZBX01DX0ZPUldBUkRJTkcsXG4gXHRcdFx0XHRcdCAgICAgTkVUQ09ORkFfSUZJTkRFWF9BTEwsXG4gXHRcdFx0XHRcdCAgICAgbmV0LVx1MDAzZWlwdjYuZGV2Y29uZl9hbGwpO1xuLVx0cnRubF91bmxvY2soKTtcbiBcbiBcdHJldHVybiBlcnI7XG4gfVxuQEAgLTE2NDYsNiAmIzQzOzE3MTEsNyBAQCBpbnQgaXA2bXJfc2tfZG9uZShzdHJ1Y3Qgc29jayAqc2spXG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4gXHRzdHJ1Y3QgaXB2Nl9kZXZjb25mICpkZXZjb25mO1xuIFx0TElTVF9IRUFEKGRldl9raWxsX2xpc3QpO1xuJiM0MztcdHN0cnVjdCBtcl90YWJsZSAqZnJlZV9tcnQgPSBOVUxMO1xuIFx0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4gXHRpbnQgZXJyID0gLUVBQ0NFUztcbiBcbkBAIC0xNjc1LDYgJiM0MzsxNzQxLDE1IEBAIGludCBpcDZtcl9za19kb25lKHN0cnVjdCBzb2NrICpzaylcbiBcbiBcdFx0XHRtcm91dGVfY2xlYW5fdGFibGVzKG1ydCwgTVJUNl9GTFVTSF9NSUZTIHwgTVJUNl9GTFVTSF9NRkMsXG4gXHRcdFx0XHRcdCAgICBcdTAwMjZkZXZfa2lsbF9saXN0KTtcbiYjNDM7XHRcdFx0aWYgKG1ydC1cdTAwM2VpZCAhPSBSVDZfVEFCTEVfREZMVCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICFSRUFEX09OQ0UobXJ0LVx1MDAzZW1heHZpZikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAhUkVBRF9PTkNFKG1ydC1cdTAwM2VjYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICBsaXN0X2VtcHR5KFx1MDAyNm1ydC1cdTAwM2VtZmNfY2FjaGVfbGlzdCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICBsaXN0X2VtcHR5KFx1MDAyNm1ydC1cdTAwM2VtZmNfdW5yZXNfcXVldWUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgUkVBRF9PTkNFKG1ydC1cdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdFx0bGlzdF9kZWxfcmN1KFx1MDAyNm1ydC1cdTAwM2VsaXN0KTtcbiYjNDM7XHRcdFx0XHRmcmVlX21ydCA9IG1ydDtcbiYjNDM7XHRcdFx0fVxuIFx0XHRcdGVyciA9IDA7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC0xNjgyLDYgJiM0MzsxNzU3LDE0IEBAIGludCBpcDZtcl9za19kb25lKHN0cnVjdCBzb2NrICpzaylcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG4gXHRydG5sX3VubG9jaygpO1xuIFxuJiM0MztcdGlmICghZXJyKVxuJiM0MztcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4mIzQzO1xuJiM0MztcdGlmIChmcmVlX21ydCkge1xuJiM0MztcdFx0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0XHRpcDZtcl9wdXRfdGFibGUoZnJlZV9tcnQpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xNjkzLDExICYjNDM7MTc3NiwxNSBAQCBib29sIG1yb3V0ZTZfaXNfc29ja2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0LmZsb3dpNl9vaWZcdD0gc2tiLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4LFxuIFx0XHQuZmxvd2k2X21hcmtcdD0gc2tiLVx1MDAzZW1hcmssXG4gXHR9O1xuJiM0MztcdGJvb2wgcmV0O1xuIFxuIFx0aWYgKGlwNm1yX2ZpYl9sb29rdXAobmV0LCBcdTAwMjZmbDYsIFx1MDAyNm1ydCkgXHUwMDNjIDApXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0cmV0dXJuIHJjdV9hY2Nlc3NfcG9pbnRlcihtcnQtXHUwMDNlbXJvdXRlX3NrKTtcbiYjNDM7XHRyZXQgPSByY3VfYWNjZXNzX3BvaW50ZXIobXJ0LVx1MDAzZW1yb3V0ZV9zayk7XG4mIzQzO1x0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIEVYUE9SVF9TWU1CT0wobXJvdXRlNl9pc19zb2NrZXQpO1xuIFxuQEAgLTE3MTYsMjAgJiM0MzsxODAzLDI0IEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdHN0cnVjdCBtZjZjY3RsIG1mYztcbiBcdG1pZmlfdCBtaWZpO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuLVx0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4mIzQzO1x0c3RydWN0IG1yX3RhYmxlICptcnQgPSBOVUxMO1xuJiM0MztcdHUzMiB0YWJsZSA9IHJhdzZfc2soc2spLVx1MDAzZWlwNm1yX3RhYmxlID8gOiBSVDZfVEFCTEVfREZMVDtcbiBcbiBcdGlmIChzay1cdTAwM2Vza190eXBlICE9IFNPQ0tfUkFXIHx8XG4gXHQgICAgaW5ldF9zayhzayktXHUwMDNlaW5ldF9udW0gIT0gSVBQUk9UT19JQ01QVjYpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdG1ydCA9IGlwNm1yX2dldF90YWJsZShuZXQsIHJhdzZfc2soc2spLVx1MDAzZWlwNm1yX3RhYmxlID8gOiBSVDZfVEFCTEVfREZMVCk7XG4tXHRpZiAoIW1ydClcbi1cdFx0cmV0dXJuIC1FTk9FTlQ7XG4tXG4tXHRpZiAob3B0bmFtZSAhPSBNUlQ2X0lOSVQpIHtcbiYjNDM7XHRpZiAob3B0bmFtZSAhPSBNUlQ2X0lOSVQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIG9wdG5hbWUgIT0gTVJUNl9UQUJMRSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgb3B0bmFtZSAhPSBNUlQ2X0RPTkUpIHtcbiYjNDM7XHRcdG1ydCA9IGlwNm1yX2dldF90YWJsZV9ob2xkKG5ldCwgdGFibGUpO1xuJiM0MztcdFx0aWYgKCFtcnQpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PRU5UO1xuIFx0XHRpZiAoc2sgIT0gcmN1X2FjY2Vzc19wb2ludGVyKG1ydC1cdTAwM2Vtcm91dGVfc2spIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIW5zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKVxuJiM0MztcdFx0ICAgICFuc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkge1xuJiM0MztcdFx0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuQEAgLTE3MzcsMzIgJiM0MzsxODI4LDQxIEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRcdHJldHVybiBpcDZtcl9za19pbml0KG1ydCwgc2spO1xuJiM0MztcdFx0cnRubF9sb2NrKCk7XG4mIzQzO1x0XHRtcnQgPSBpcDZtcl9uZXdfdGFibGUobmV0LCB0YWJsZSk7XG4mIzQzO1x0XHRpZiAoIUlTX0VSUihtcnQpKVxuJiM0MztcdFx0XHRyZXQgPSBfX2lwNm1yX3NrX2luaXQobXJ0LCBzayk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHJldCA9IFBUUl9FUlIobXJ0KTtcbiYjNDM7XHRcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0Y2FzZSBNUlQ2X0RPTkU6XG4gXHRcdHJldHVybiBpcDZtcl9za19kb25lKHNrKTtcbiBcbiBcdGNhc2UgTVJUNl9BRERfTUlGOlxuIFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YodmlmKSlcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VpbnZhbDtcbiBcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNnZpZiwgb3B0dmFsLCBzaXplb2YodmlmKSkpXG4tXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XG4gXHRcdGlmICh2aWYubWlmNmNfbWlmaSBcdTAwM2U9IE1BWE1JRlMpXG4tXHRcdFx0cmV0dXJuIC1FTkZJTEU7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9lbmZpbGU7XG4gXHRcdHJ0bmxfbG9jaygpO1xuIFx0XHRyZXQgPSBtaWY2X2FkZChuZXQsIG1ydCwgXHUwMDI2dmlmLFxuIFx0XHRcdCAgICAgICBzayA9PSBydG5sX2RlcmVmZXJlbmNlKG1ydC1cdTAwM2Vtcm91dGVfc2spKTtcbiBcdFx0cnRubF91bmxvY2soKTtcbiYjNDM7XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0Y2FzZSBNUlQ2X0RFTF9NSUY6XG4gXHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihtaWZpX3QpKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIG91dF9wdXRfdGFibGVfZWludmFsO1xuIFx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2bWlmaSwgb3B0dmFsLCBzaXplb2YobWlmaV90KSkpXG4tXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XG4gXHRcdHJ0bmxfbG9jaygpO1xuIFx0XHRyZXQgPSBtaWY2X2RlbGV0ZShtcnQsIG1pZmksIDAsIE5VTEwpO1xuIFx0XHRydG5sX3VubG9jaygpO1xuJiM0MztcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHQvKlxuQEAgLTE3NzYsOSAmIzQzOzE4NzYsOSBAQCBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRjYXNlIE1SVDZfQUREX01GQ19QUk9YWTpcbiBcdGNhc2UgTVJUNl9ERUxfTUZDX1BST1hZOlxuIFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YobWZjKSlcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VpbnZhbDtcbiBcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNm1mYywgb3B0dmFsLCBzaXplb2YobWZjKSkpXG4tXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XG4gXHRcdGlmIChwYXJlbnQgPT0gMClcbiBcdFx0XHRwYXJlbnQgPSBtZmMubWY2Y2NfcGFyZW50O1xuIFxuQEAgLTE3OTMsNiAmIzQzOzE4OTMsNyBAQCBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRcdFx0XHRcdCAgICBwYXJlbnQpO1xuIFxuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bmV0LVx1MDAzZWlwdjYubWZjX211dGV4KTtcbiYjNDM7XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0Y2FzZSBNUlQ2X0ZMVVNIOlxuQEAgLTE4MDEsMTQgJiM0MzsxOTAyLDE1IEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0aW50IGZsYWdzO1xuIFxuIFx0XHRpZiAob3B0bGVuICE9IHNpemVvZihmbGFncykpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7XG4gXHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZmbGFncywgb3B0dmFsLCBzaXplb2YoZmxhZ3MpKSlcbi1cdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VmYXVsdDtcbiBcbiBcdFx0cnRubF9sb2NrKCk7XG4gXHRcdG1yb3V0ZV9jbGVhbl90YWJsZXMobXJ0LCBmbGFncywgXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG4gXHRcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG4gXHRcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1x0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG5AQCAtMTgyMCwxMCAmIzQzOzE5MjIsMTEgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFx0XHRpbnQgdjtcbiBcbiBcdFx0aWYgKG9wdGxlbiAhPSBzaXplb2YodikpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7XG4gXHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZ2LCBvcHR2YWwsIHNpemVvZih2KSkpXG4tXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XG4gXHRcdFdSSVRFX09OQ0UobXJ0LVx1MDAzZW1yb3V0ZV9kb19hc3NlcnQsIHYpO1xuJiM0MztcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuQEAgLTE4MzQsOSAmIzQzOzE5MzcsOSBAQCBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRcdGludCB2O1xuIFxuIFx0XHRpZiAob3B0bGVuICE9IHNpemVvZih2KSlcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VpbnZhbDtcbiBcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNnYsIG9wdHZhbCwgc2l6ZW9mKHYpKSlcbi1cdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VmYXVsdDtcbiBcbiBcdFx0ZG9fd3JtaWZ3aG9sZSA9ICh2ID09IE1SVDZNU0dfV1JNSUZXSE9MRSk7XG4gXHRcdHYgPSAhIXY7XG5AQCAtMTg0OCw2ICYjNDM7MTk1MSw3IEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0XHRXUklURV9PTkNFKG1ydC1cdTAwM2Vtcm91dGVfZG9fd3J2aWZ3aG9sZSwgZG9fd3JtaWZ3aG9sZSk7XG4gXHRcdH1cbiBcdFx0cnRubF91bmxvY2soKTtcbiYjNDM7XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuQEAgLTE4NjQsMTggJiM0MzsxOTY4LDIyIEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0LyogXCYjMzQ7cGltNnJlZyV1XCYjMzQ7IHNob3VsZCBub3QgZXhjZWVkIDE2IGJ5dGVzIChJRk5BTVNJWikgKi9cbiBcdFx0aWYgKHYgIT0gUlRfVEFCTEVfREVGQVVMVCBcdTAwMjZcdTAwMjYgdiBcdTAwM2U9IDEwMDAwMDAwMClcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0aWYgKHNrID09IHJjdV9hY2Nlc3NfcG9pbnRlcihtcnQtXHUwMDNlbXJvdXRlX3NrKSlcbiYjNDM7XG4mIzQzO1x0XHRtcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChuZXQsIHRhYmxlKTtcbiYjNDM7XHRcdGlmIChtcnQgXHUwMDI2XHUwMDI2IHNrID09IHJjdV9hY2Nlc3NfcG9pbnRlcihtcnQtXHUwMDNlbXJvdXRlX3NrKSkge1xuJiM0MztcdFx0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKCFuc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkge1xuJiM0MztcdFx0XHRpZiAobXJ0KVxuJiM0MztcdFx0XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChtcnQpXG4mIzQzO1x0XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFxuLVx0XHRydG5sX2xvY2soKTtcbi1cdFx0cmV0ID0gMDtcbi1cdFx0bXJ0ID0gaXA2bXJfbmV3X3RhYmxlKG5ldCwgdik7XG4tXHRcdGlmIChJU19FUlIobXJ0KSlcbi1cdFx0XHRyZXQgPSBQVFJfRVJSKG1ydCk7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyYXc2X3NrKHNrKS1cdTAwM2VpcDZtcl90YWJsZSA9IHY7XG4tXHRcdHJ0bmxfdW5sb2NrKCk7XG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyYXc2X3NrKHNrKS1cdTAwM2VpcDZtcl90YWJsZSA9IHY7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdH1cbiAjZW5kaWZcbiBcdC8qXG5AQCAtMTg4Myw4ICYjNDM7MTk5MSwyNSBAQCBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gXHQgKlx0c2V0LlxuIFx0ICovXG4gXHRkZWZhdWx0OlxuJiM0MztcdFx0aWYgKG1ydClcbiYjNDM7XHRcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4gXHR9XG4mIzQzO1xuJiM0MztvdXRfcHV0X3RhYmxlX2VmYXVsdDpcbiYjNDM7XHRpZiAobXJ0KVxuJiM0MztcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4mIzQzO1x0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztvdXRfcHV0X3RhYmxlX2VpbnZhbDpcbiYjNDM7XHRpZiAobXJ0KVxuJiM0MztcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4mIzQzO1x0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztvdXRfcHV0X3RhYmxlX2VuZmlsZTpcbiYjNDM7XHRpZiAobXJ0KVxuJiM0MztcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4mIzQzO1x0cmV0dXJuIC1FTkZJTEU7XG4gfVxuIFxuIC8qXG5AQCAtMTg5NSw2ICYjNDM7MjAyMCw3IEBAIGludCBpcDZfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0XHQgIHNvY2twdHJfdCBvcHRsZW4pXG4ge1xuIFx0aW50IG9scjtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcdGludCB2YWw7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4gXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcbkBAIC0xOTAzLDcgJiM0MzsyMDI5LDcgQEAgaW50IGlwNl9tcm91dGVfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFx0ICAgIGluZXRfc2soc2spLVx1MDAzZWluZXRfbnVtICE9IElQUFJPVE9fSUNNUFY2KVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRtcnQgPSBpcDZtcl9nZXRfdGFibGUobmV0LCByYXc2X3NrKHNrKS1cdTAwM2VpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpO1xuJiM0MztcdG1ydCA9IGlwNm1yX2dldF90YWJsZV9ob2xkKG5ldCwgcmF3Nl9zayhzayktXHUwMDNlaXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTtcbiBcdGlmICghbXJ0KVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbkBAIC0xOTIwLDI2ICYjNDM7MjA0NiwzMyBAQCBpbnQgaXA2X21yb3V0ZV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRcdHZhbCA9IFJFQURfT05DRShtcnQtXHUwMDNlbXJvdXRlX2RvX2Fzc2VydCk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbiYjNDM7XHRcdHJldCA9IC1FTk9QUk9UT09QVDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNm9sciwgb3B0bGVuLCBzaXplb2YoaW50KSkpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZvbHIsIG9wdGxlbiwgc2l6ZW9mKGludCkpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUZBVUxUO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuIFxuIFx0b2xyID0gbWluX3QoaW50LCBvbHIsIHNpemVvZihpbnQpKTtcbi1cdGlmIChvbHIgXHUwMDNjIDApXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmIChvbHIgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4gXG4tXHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXHUwMDI2b2xyLCBzaXplb2YoaW50KSkpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIFx1MDAyNnZhbCwgb2xyKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXHUwMDI2b2xyLCBzaXplb2YoaW50KSkgfHxcbiYjNDM7XHQgICAgY29weV90b19zb2NrcHRyKG9wdHZhbCwgXHUwMDI2dmFsLCBvbHIpKVxuJiM0MztcdFx0cmV0ID0gLUVGQVVMVDtcbiYjNDM7b3V0OlxuJiM0MztcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qXG4gICpcdFRoZSBJUCBtdWx0aWNhc3QgaW9jdGwgc3VwcG9ydCByb3V0aW5lcy5cbiAgKi9cbiYjNDM7XG4gaW50IGlwNm1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCAqYXJnKVxuIHtcbiBcdHN0cnVjdCBzaW9jX3NnX3JlcTYgKnNyO1xuQEAgLTE5NDksNyAmIzQzOzIwODIsNyBAQCBpbnQgaXA2bXJfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkICphcmcpXG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4gXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcbiBcbi1cdG1ydCA9IGlwNm1yX2dldF90YWJsZShuZXQsIHJhdzZfc2soc2spLVx1MDAzZWlwNm1yX3RhYmxlID8gOiBSVDZfVEFCTEVfREZMVCk7XG4mIzQzO1x0bXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQobmV0LCByYXc2X3NrKHNrKS1cdTAwM2VpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpO1xuIFx0aWYgKCFtcnQpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuQEAgLTE5NTcsNyAmIzQzOzIwOTAsNyBAQCBpbnQgaXA2bXJfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkICphcmcpXG4gXHRjYXNlIFNJT0NHRVRNSUZDTlRfSU42OlxuIFx0XHR2ciA9IChzdHJ1Y3Qgc2lvY19taWZfcmVxNiAqKWFyZztcbiBcdFx0aWYgKHZyLVx1MDAzZW1pZmkgXHUwMDNlPSBtcnQtXHUwMDNlbWF4dmlmKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIG91dF9wdXRfdGFibGVfZWludmFsO1xuIFx0XHR2ci1cdTAwM2VtaWZpID0gYXJyYXlfaW5kZXhfbm9zcGVjKHZyLVx1MDAzZW1pZmksIG1ydC1cdTAwM2VtYXh2aWYpO1xuIFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdHZpZiA9IFx1MDAyNm1ydC1cdTAwM2V2aWZfdGFibGVbdnItXHUwMDNlbWlmaV07XG5AQCAtMTk2Nyw5ICYjNDM7MjEwMCwxMSBAQCBpbnQgaXA2bXJfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkICphcmcpXG4gXHRcdFx0dnItXHUwMDNlaWJ5dGVzID0gUkVBRF9PTkNFKHZpZi1cdTAwM2VieXRlc19pbik7XG4gXHRcdFx0dnItXHUwMDNlb2J5dGVzID0gUkVBRF9PTkNFKHZpZi1cdTAwM2VieXRlc19vdXQpO1xuIFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4gXHRjYXNlIFNJT0NHRVRTR0NOVF9JTjY6XG4gXHRcdHNyID0gKHN0cnVjdCBzaW9jX3NnX3JlcTYgKilhcmc7XG5AQCAtMTk4MiwxNSAmIzQzOzIxMTcsMjEgQEAgaW50IGlwNm1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCAqYXJnKVxuIFx0XHRcdHNyLVx1MDAzZWJ5dGVjbnQgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmMtXHUwMDNlX2MubWZjX3VuLnJlcy5ieXRlcyk7XG4gXHRcdFx0c3ItXHUwMDNld3JvbmdfaWYgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmMtXHUwMDNlX2MubWZjX3VuLnJlcy53cm9uZ19pZik7XG4gXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiBcdGRlZmF1bHQ6XG4mIzQzO1x0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0cmV0dXJuIC1FTk9JT0NUTENNRDtcbiBcdH1cbi19XG4gXG4mIzQzO291dF9wdXRfdGFibGVfZWludmFsOlxuJiM0MztcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuJiM0MztcdHJldHVybiAtRUlOVkFMO1xuJiM0Mzt9XG4gI2lmZGVmIENPTkZJR19DT01QQVRcbiBzdHJ1Y3QgY29tcGF0X3Npb2Nfc2dfcmVxNiB7XG4gXHRzdHJ1Y3Qgc29ja2FkZHJfaW42IHNyYztcbkBAIC0yMDE3LDE2ICYjNDM7MjE1OCwxNiBAQCBpbnQgaXA2bXJfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZylcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbiBcdHN0cnVjdCBtcl90YWJsZSAqbXJ0O1xuIFxuLVx0bXJ0ID0gaXA2bXJfZ2V0X3RhYmxlKG5ldCwgcmF3Nl9zayhzayktXHUwMDNlaXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTtcbiYjNDM7XHRtcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChuZXQsIHJhdzZfc2soc2spLVx1MDAzZWlwNm1yX3RhYmxlID8gOiBSVDZfVEFCTEVfREZMVCk7XG4gXHRpZiAoIW1ydClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBTSU9DR0VUTUlGQ05UX0lONjpcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnZyLCBhcmcsIHNpemVvZih2cikpKVxuLVx0XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdFx0XHRnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0O1xuIFx0XHRpZiAodnIubWlmaSBcdTAwM2U9IG1ydC1cdTAwM2VtYXh2aWYpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7XG4gXHRcdHZyLm1pZmkgPSBhcnJheV9pbmRleF9ub3NwZWModnIubWlmaSwgbXJ0LVx1MDAzZW1heHZpZik7XG4gXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0dmlmID0gXHUwMDI2bXJ0LVx1MDAzZXZpZl90YWJsZVt2ci5taWZpXTtcbkBAIC0yMDM4LDE0ICYjNDM7MjE3OSwxNiBAQCBpbnQgaXA2bXJfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZylcbiBcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdFx0XHRpZiAoY29weV90b191c2VyKGFyZywgXHUwMDI2dnIsIHNpemVvZih2cikpKVxuLVx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VmYXVsdDtcbiYjNDM7XHRcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdH1cbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuIFx0Y2FzZSBTSU9DR0VUU0dDTlRfSU42OlxuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2c3IsIGFyZywgc2l6ZW9mKHNyKSkpXG4tXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XG4gXG4gXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0YyA9IGlwNm1yX2NhY2hlX2ZpbmQobXJ0LCBcdTAwMjZzci5zcmMuc2luNl9hZGRyLCBcdTAwMjZzci5ncnAuc2luNl9hZGRyKTtcbkBAIC0yMDU2LDE0ICYjNDM7MjE5OSwyNSBAQCBpbnQgaXA2bXJfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZylcbiBcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdFx0XHRpZiAoY29weV90b191c2VyKGFyZywgXHUwMDI2c3IsIHNpemVvZihzcikpKVxuLVx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VmYXVsdDtcbiYjNDM7XHRcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdH1cbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuIFx0ZGVmYXVsdDpcbiYjNDM7XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xuIFx0fVxuJiM0MztcbiYjNDM7b3V0X3B1dF90YWJsZV9lZmF1bHQ6XG4mIzQzO1x0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4mIzQzO1x0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztvdXRfcHV0X3RhYmxlX2VpbnZhbDpcbiYjNDM7XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiYjNDM7XHRyZXR1cm4gLUVJTlZBTDtcbiB9XG4gI2VuZGlmXG4gXG5AQCAtMjM5MiwxMyAmIzQzOzI1NDYsMTYgQEAgaW50IGlwNl9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRpZiAodmlmIFx1MDAzZT0gMCkge1xuIFx0XHRcdGludCBlcnIgPSBpcDZtcl9jYWNoZV91bnJlc29sdmVkKG1ydCwgdmlmLCBza2IsIGRldik7XG4gXG4mIzQzO1x0XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiYjNDM7XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG4gXG4gXHRpcDZfbXJfZm9yd2FyZChuZXQsIG1ydCwgZGV2LCBza2IsIGNhY2hlKTtcbiYjNDM7XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0yNDQxLDE5ICYjNDM7MjU5OCwyNSBAQCBpbnQgaXA2X21yX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdC8qIE5vIHVzYWJsZSBjYWNoZSBlbnRyeSAqL1xuIFx0aWYgKCFjYWNoZSkge1xuIFx0XHR2aWYgPSBpcDZtcl9maW5kX3ZpZihtcnQsIGRldik7XG4tXHRcdGlmICh2aWYgXHUwMDNlPSAwKVxuLVx0XHRcdHJldHVybiBpcDZtcl9jYWNoZV91bnJlc29sdmVkKG1ydCwgdmlmLCBza2IsIGRldik7XG4tXHRcdGdvdG8gaXA2X291dHB1dDtcbiYjNDM7XHRcdGlmICh2aWYgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRcdGVyciA9IGlwNm1yX2NhY2hlX3VucmVzb2x2ZWQobXJ0LCB2aWYsIHNrYiwgZGV2KTtcbiYjNDM7XHRcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRnb3RvIG91dF9wdXQ7XG4gXHR9XG4gXG4gXHQvKiBXcm9uZyBpbnRlcmZhY2UgKi9cbiBcdHZpZiA9IGNhY2hlLVx1MDAzZV9jLm1mY19wYXJlbnQ7XG4gXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKG1ydC1cdTAwM2V2aWZfdGFibGVbdmlmXS5kZXYpICE9IGRldilcbi1cdFx0Z290byBpcDZfb3V0cHV0O1xuJiM0MztcdFx0Z290byBvdXRfcHV0O1xuIFxuIFx0aXA2X21yX291dHB1dF9maW5pc2gobmV0LCBtcnQsIGRldiwgc2tiLCBjYWNoZSk7XG4mIzQzO1x0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRyZXR1cm4gMDtcbiBcbiYjNDM7b3V0X3B1dDpcbiYjNDM7XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBpcDZfb3V0cHV0OlxuIFx0cmV0dXJuIGlwNl9vdXRwdXQobmV0LCBzaywgc2tiKTtcbiB9XG5AQCAtMjc1NSwzMyAmIzQzOzI5MTgsMzUgQEAgc3RhdGljIGludCBpcDZtcl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdGdycCA9IG5sYV9nZXRfaW42X2FkZHIodGJbUlRBX0RTVF0pO1xuIFx0dGFibGVpZCA9IG5sYV9nZXRfdTMyX2RlZmF1bHQodGJbUlRBX1RBQkxFXSwgMCk7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXG4tXHRtcnQgPSBfX2lwNm1yX2dldF90YWJsZShuZXQsIHRhYmxlaWQgPzogUlRfVEFCTEVfREVGQVVMVCk7XG4mIzQzO1x0bXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQobmV0LCB0YWJsZWlkID86IFJUX1RBQkxFX0RFRkFVTFQpO1xuIFx0aWYgKCFtcnQpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7TVIgdGFibGUgZG9lcyBub3QgZXhpc3RcJiMzNDspO1xuIFx0XHRlcnIgPSAtRU5PRU5UO1xuLVx0XHRnb3RvIGVycjtcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWU7XG4gXHR9XG4gXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuIFx0Y2FjaGUgPSBpcDZtcl9jYWNoZV9maW5kKG1ydCwgXHUwMDI2c3JjLCBcdTAwMjZncnApO1xuIFx0aWYgKCFjYWNoZSkge1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O01SIGNhY2hlIGVudHJ5IG5vdCBmb3VuZFwmIzM0Oyk7XG4gXHRcdGVyciA9IC1FTk9FTlQ7XG4tXHRcdGdvdG8gZXJyO1xuJiM0MztcdFx0Z290byBlcnJfcHV0O1xuIFx0fVxuIFxuIFx0ZXJyID0gaXA2bXJfZmlsbF9tcm91dGUobXJ0LCBza2IsIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsXG4gXHRcdFx0XHRubGgtXHUwMDNlbmxtc2dfc2VxLCBjYWNoZSwgUlRNX05FV1JPVVRFLCAwKTtcbi1cdGlmIChlcnIgXHUwMDNjIDApXG4tXHRcdGdvdG8gZXJyO1xuLVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3B1dDtcbiBcbi1cdHJldHVybiBydG5sX3VuaWNhc3Qoc2tiLCBuZXQsIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQpO1xuJiM0MztcdGVyciA9IHJ0bmxfdW5pY2FzdChza2IsIG5ldCwgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCk7XG4mIzQzO1x0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiBcbi1lcnI6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7ZXJyX3B1dDpcbiYjNDM7XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiYjNDM7ZXJyX2ZyZWU6XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuQEAgLTI4MDQsNyAmIzQzOzI5NjksNyBAQCBzdGF0aWMgaW50IGlwNm1yX3J0bV9kdW1wcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0aWYgKGZpbHRlci50YWJsZV9pZCkge1xuIFx0XHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcbiBcbi1cdFx0bXJ0ID0gX19pcDZtcl9nZXRfdGFibGUoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgZmlsdGVyLnRhYmxlX2lkKTtcbiYjNDM7XHRcdG1ydCA9IGlwNm1yX2dldF90YWJsZV9ob2xkKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIGZpbHRlci50YWJsZV9pZCk7XG4gXHRcdGlmICghbXJ0KSB7XG4gXHRcdFx0aWYgKHJ0bmxfbXNnX2ZhbWlseShjYi1cdTAwM2VubGgpICE9IFJUTkxfRkFNSUxZX0lQNk1SKSB7XG4gXHRcdFx0XHRlcnIgPSBza2ItXHUwMDNlbGVuO1xuQEAgLTI4MTgsNiAmIzQzOzI5ODMsNyBAQCBzdGF0aWMgaW50IGlwNm1yX3J0bV9kdW1wcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFxuIFx0XHRlcnIgPSBtcl90YWJsZV9kdW1wKG1ydCwgc2tiLCBjYiwgX2lwNm1yX2ZpbGxfbXJvdXRlLFxuIFx0XHRcdFx0ICAgIFx1MDAyNm1mY191bnJlc19sb2NrLCBcdTAwMjZmaWx0ZXIpO1xuJiM0MztcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdGVyciA9IHNrYi1cdTAwM2VsZW4gPyA6IGVycjtcbiBcdFx0Z290byB1bmxvY2s7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjI6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfTVJPVVRFJiMzNDssCiAgICAmIzM0O0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtJUFY2X1BJTVNNX1YyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwNl9tcm91dGVfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcDZtcl9pb2N0bCYjMzQ7LAogICAgJiMzNDtpcDZtcl9jb21wYXRfaW9jdGwmIzM0OywKICAgICYjMzQ7aXA2X21yX2lucHV0JiMzNDssCiAgICAmIzM0O2lwNl9tcl9vdXRwdXQmIzM0OywKICAgICYjMzQ7cGltNl9yY3YmIzM0OywKICAgICYjMzQ7cmVnX3ZpZl94bWl0JiMzNDssCiAgICAmIzM0O21yb3V0ZTZfaXNfc29ja2V0JiMzNDssCiAgICAmIzM0O2lwNm1yX3NrX2RvbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyByZWZlcmVuY2UgY291bnRpbmcgdG8gSVB2NiBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZXMgKHN0cnVjdCBtcl90YWJsZSkgdG8gZml4IHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMuIEl0IG1vZGlmaWVzIHZhcmlvdXMgZW50cnkgcG9pbnRzIChzb2NrZXQgb3B0aW9ucywgaW9jdGxzLCBuZXRsaW5rLCBwYWNrZXQgcngvdHgpIHRvIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIHRhYmxlIHdoaWxlIGluIHVzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZGI1ZjhkYTA5ZTFhYmQ2MGJiYmVlNTQwNzc3YzRhYzBmMmM3MmQxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMjQgMjI6NTk6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmggYi9pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmgKaW5kZXggNGQ1NTgyN2U5NzA1MzcuLjUzNmZhMzI0NjIwMjczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oCkBAIC0yLDggJiM0MzsyLDEwIEBACiAjZGVmaW5lIF9fTElOVVhfTVJPVVRFX0JBU0VfSAogCiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZmNvdW50LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmhhc2h0YWJsZS10eXBlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRfbmFtZXNwYWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3NvY2suaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZmliX25vdGlmaWVyLmgmZ3Q7CkBAIC0yNDIsNiAmIzQzOzI0NCw4IEBAIHN0cnVjdCBtcl90YWJsZV9vcHMgewogICogQG1yb3V0ZV9kb19hc3NlcnQ6IFdoZXRoZXIgdG8gaW5mb3JtIHVzZXJzcGFjZSBvbiB3cm9uZyBpbmdyZXNzCiAgKiBAbXJvdXRlX2RvX3BpbTogV2hldGhlciB0byByZWNlaXZlIElHTVAgUElNdjEKICAqIEBtcm91dGVfcmVnX3ZpZl9udW06IFBJTS1kZXZpY2UgdmlmIGluZGV4CiYjNDM7ICogQHJlZmNudDogbGlmZXRpbWUgcGlucyBmb3IgdGhpcyB0YWJsZQomIzQzOyAqIEBkZXN0cm95X3dvcms6IHByb2Nlc3MtY29udGV4dCBjbGVhbnVwIGJlZm9yZSBmaW5hbCBSQ1UgZnJlZQogICovCiBzdHJ1Y3QgbXJfdGFibGUgewogCXN0cnVjdCByY3Vfd29yawkJd29yazsKQEAgLTI2MSw2ICYjNDM7MjY1LDggQEAgc3RydWN0IG1yX3RhYmxlIHsKIAlib29sCQkJbXJvdXRlX2RvX3BpbTsKIAlib29sCQkJbXJvdXRlX2RvX3dydmlmd2hvbGU7CiAJaW50CQkJbXJvdXRlX3JlZ192aWZfbnVtOwomIzQzOwlyZWZjb3VudF90CQlyZWZjbnQ7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdAlkZXN0cm95X3dvcms7CiB9OwogCiBzdGF0aWMgaW5saW5lIGJvb2wgbXJfY2FuX2ZyZWVfdGFibGUoc3RydWN0IG5ldCAqbmV0KQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtcl9iYXNlLmMgYi9uZXQvaXB2NC9pcG1yX2Jhc2UuYwppbmRleCA4NjdiMjRiZWRlZDExMi4uOTcxMDc4OWNmYWY5OTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXJfYmFzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jCkBAIC0zMiw4ICYjNDM7MzIsMTAgQEAgc3RhdGljIHZvaWQgX19tcl9mcmVlX3RhYmxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwKIAkJCQkJICAgIHN0cnVjdCBtcl90YWJsZSwgd29yayk7CiYjNDM7CXN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldCgmYW1wO21ydC0mZ3Q7bmV0KTsKIAogCXJobHRhYmxlX2Rlc3Ryb3koJmFtcDttcnQtJmd0O21mY19oYXNoKTsKJiM0MzsJcHV0X25ldChuZXQpOwogCWtmcmVlKG1ydCk7CiB9CiAKQEAgLTU2LDExICYjNDM7NTgsMTIgQEAgbXJfdGFibGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQsCiAJaWYgKCFtcnQpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCW1ydC0mZ3Q7aWQgPSBpZDsKLQl3cml0ZV9wbmV0KCZhbXA7bXJ0LSZndDtuZXQsIG5ldCk7CiYjNDM7CXdyaXRlX3BuZXQoJmFtcDttcnQtJmd0O25ldCwgZ2V0X25ldChuZXQpKTsKIAogCW1ydC0mZ3Q7b3BzID0gKm9wczsKIAllcnIgPSByaGx0YWJsZV9pbml0KCZhbXA7bXJ0LSZndDttZmNfaGFzaCwgbXJ0LSZndDtvcHMucmh0X3BhcmFtcyk7CiAJaWYgKGVycikgewomIzQzOwkJcHV0X25ldChyZWFkX3BuZXQoJmFtcDttcnQtJmd0O25ldCkpOwogCQlrZnJlZShtcnQpOwogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCX0KQEAgLTcyLDYgJiM0Mzs3NSw3IEBAIG1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLAogCXRpbWVyX3NldHVwKCZhbXA7bXJ0LSZndDtpcG1yX2V4cGlyZV90aW1lciwgZXhwaXJlX2Z1bmMsIDApOwogCiAJbXJ0LSZndDttcm91dGVfcmVnX3ZpZl9udW0gPSAtMTsKJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7bXJ0LSZndDtyZWZjbnQsIDEpOwogCXRhYmxlX3NldChtcnQsIG5ldCk7CiAJcmV0dXJuIG1ydDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jCmluZGV4IDYwNGE1ODgzODkwMWE3Li45NGJiMDBiZGZmOThjOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2bXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZtci5jCkBAIC04Nyw2ICYjNDM7ODcsMTEgQEAgc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptcnRfY2FjaGVwIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpOwogc3RhdGljIHZvaWQgaXA2bXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCwKIAkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqZGV2X2tpbGxfbGlzdCk7CiYjNDM7c3RhdGljIHZvaWQgaXA2bXJfZnJlZV90YWJsZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiYjNDM7c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfZ2V0X3RhYmxlX2hvbGQoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpOwomIzQzO3N0YXRpYyB2b2lkIGlwNm1yX3B1dF90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCk7CiYjNDM7c3RhdGljIHZvaWQgX19pcDZtcl9wdXRfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQsCiYjNDM7CQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZGV2X2tpbGxfbGlzdCk7CiAKIHN0YXRpYyB2b2lkIGlwNl9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsCiAJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTc5LDcgJiM0MzsxODQsNyBAQCBzdGF0aWMgaW50IGlwNm1yX3J1bGVfYWN0aW9uKHN0cnVjdCBmaWJfcnVsZSAqcnVsZSwgc3RydWN0IGZsb3dpICpmbHAsCiAKIAlhcmctJmd0O3RhYmxlID0gZmliX3J1bGVfZ2V0X3RhYmxlKHJ1bGUsIGFyZyk7CiAKLQltcnQgPSBfX2lwNm1yX2dldF90YWJsZShydWxlLSZndDtmcl9uZXQsIGFyZy0mZ3Q7dGFibGUpOwomIzQzOwltcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChydWxlLSZndDtmcl9uZXQsIGFyZy0mZ3Q7dGFibGUpOwogCWlmICghbXJ0KQogCQlyZXR1cm4gLUVBR0FJTjsKIAlyZXMtJmd0O21ydCA9IG1ydDsKQEAgLTI3MSw3ICYjNDM7Mjc2LDggQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZtcl9ydWxlc19leGl0X3J0bmwoc3RydWN0IG5ldCAqbmV0LAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1ydCwgbmV4dCwgJmFtcDtuZXQtJmd0O2lwdjYubXI2X3RhYmxlcywgbGlzdCkgewogCQlsaXN0X2RlbF9yY3UoJmFtcDttcnQtJmd0O2xpc3QpOwotCQlpcDZtcl9mcmVlX3RhYmxlKG1ydCwgZGV2X2tpbGxfbGlzdCk7CiYjNDM7CQlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0MzsJCV9faXA2bXJfcHV0X3RhYmxlKG1ydCwgZGV2X2tpbGxfbGlzdCk7CiAJfQogfQogCkBAIC0zMTQsNyAmIzQzOzMyMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKl9faXA2bXJfZ2V0X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKQogc3RhdGljIGludCBpcDZtcl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNiAqZmxwNiwKIAkJCSAgICBzdHJ1Y3QgbXJfdGFibGUgKiptcnQpCiB7Ci0JKm1ydCA9IHJjdV9kZXJlZmVyZW5jZShuZXQtJmd0O2lwdjYubXJ0Nik7CiYjNDM7CSptcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChuZXQsIFJUNl9UQUJMRV9ERkxUKTsKIAlpZiAoISptcnQpCiAJCXJldHVybiAtRUFHQUlOOwogCXJldHVybiAwOwpAQCAtMzQyLDcgJiM0MzszNDgsOCBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwNm1yX3J1bGVzX2V4aXRfcnRubChzdHJ1Y3QgbmV0ICpuZXQsCiAJc3RydWN0IG1yX3RhYmxlICptcnQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG5ldC0mZ3Q7aXB2Ni5tcnQ2LCAxKTsKIAogCVJDVV9JTklUX1BPSU5URVIobmV0LSZndDtpcHY2Lm1ydDYsIE5VTEwpOwotCWlwNm1yX2ZyZWVfdGFibGUobXJ0LCBkZXZfa2lsbF9saXN0KTsKJiM0MzsJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CV9faXA2bXJfcHV0X3RhYmxlKG1ydCwgZGV2X2tpbGxfbGlzdCk7CiB9CiAKIHN0YXRpYyBpbnQgaXA2bXJfcnVsZXNfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCkBAIC0zNjgsNiAmIzQzOzM3NSw0NCBAQCBzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9nZXRfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpCiAJcmV0dXJuIG1ydDsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwNm1yX2dldF90YWJsZV9ob2xkKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKQomIzQzO3sKJiM0MzsJc3RydWN0IG1yX3RhYmxlICptcnQ7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJbXJ0ID0gX19pcDZtcl9nZXRfdGFibGUobmV0LCBpZCk7CiYjNDM7CWlmIChtcnQgJmFtcDsmYW1wOyAhcmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7bXJ0LSZndDtyZWZjbnQpKQomIzQzOwkJbXJ0ID0gTlVMTDsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiBtcnQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9faXA2bXJfcHV0X3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LAomIzQzOwkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkICpkZXZfa2lsbF9saXN0OwomIzQzOwlMSVNUX0hFQUQobG9jYWxfZGV2X2tpbGxfbGlzdCk7CiYjNDM7CiYjNDM7CWlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7bXJ0LSZndDtyZWZjbnQpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoIWxvY2tkZXBfcnRubF9pc19oZWxkKCkpIHsKJiM0MzsJCXNjaGVkdWxlX3dvcmsoJmFtcDttcnQtJmd0O2Rlc3Ryb3lfd29yayk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGV2X2tpbGxfbGlzdCA9IGhlYWQgPyBoZWFkIDogJmFtcDtsb2NhbF9kZXZfa2lsbF9saXN0OwomIzQzOwlpcDZtcl9mcmVlX3RhYmxlKG1ydCwgZGV2X2tpbGxfbGlzdCk7CiYjNDM7CWlmICghaGVhZCkKJiM0MzsJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoZGV2X2tpbGxfbGlzdCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlwNm1yX3B1dF90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCkKJiM0Mzt7CiYjNDM7CV9faXA2bXJfcHV0X3RhYmxlKG1ydCwgTlVMTCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBpcDZtcl9oYXNoX2NtcChzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyAqYXJnLAogCQkJICBjb25zdCB2b2lkICpwdHIpCiB7CkBAIC00MTMsOCAmIzQzOzQ1OCwxMiBAQCBzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpCiAJaWYgKG1ydCkKIAkJcmV0dXJuIG1ydDsKIAotCXJldHVybiBtcl90YWJsZV9hbGxvYyhuZXQsIGlkLCAmYW1wO2lwNm1yX21yX3RhYmxlX29wcywKLQkJCSAgICAgIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIGlwNm1yX25ld190YWJsZV9zZXQpOwomIzQzOwltcnQgPSBtcl90YWJsZV9hbGxvYyhuZXQsIGlkLCAmYW1wO2lwNm1yX21yX3RhYmxlX29wcywKJiM0MzsJCQkgICAgIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIGlwNm1yX25ld190YWJsZV9zZXQpOwomIzQzOwlpZiAoIUlTX0VSUihtcnQpKQomIzQzOwkJSU5JVF9XT1JLKCZhbXA7bXJ0LSZndDtkZXN0cm95X3dvcmssIGlwNm1yX2ZyZWVfdGFibGVfd29yayk7CiYjNDM7CiYjNDM7CXJldHVybiBtcnQ7CiB9CiAKIHN0YXRpYyB2b2lkIGlwNm1yX2ZyZWVfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQsCkBAIC00MjMsOCAmIzQzOzQ3Miw2IEBAIHN0YXRpYyB2b2lkIGlwNm1yX2ZyZWVfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQsCiAJc3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KCZhbXA7bXJ0LSZndDtuZXQpOwogCUxJU1RfSEVBRChpcDZtcl9kZXZfa2lsbF9saXN0KTsKIAotCVdBUk5fT05fT05DRSghbXJfY2FuX2ZyZWVfdGFibGUobmV0KSk7Ci0KIAl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7bXJ0LSZndDtpcG1yX2V4cGlyZV90aW1lcik7CiAJbXJvdXRlX2NsZWFuX3RhYmxlcyhtcnQsIE1SVDZfRkxVU0hfTUlGUyB8IE1SVDZfRkxVU0hfTUlGU19TVEFUSUMgfAogCQkJICAgIE1SVDZfRkxVU0hfTUZDIHwgTVJUNl9GTFVTSF9NRkNfU1RBVElDLApAQCAtNDM2LDYgJiM0Mzs0ODMsMTcgQEAgc3RhdGljIHZvaWQgaXA2bXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCwKIAlsaXN0X3NwbGljZSgmYW1wO2lwNm1yX2Rldl9raWxsX2xpc3QsIGRldl9raWxsX2xpc3QpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgaXA2bXJfZnJlZV90YWJsZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcl90YWJsZSAqbXJ0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtcl90YWJsZSwgZGVzdHJveV93b3JrKTsKJiM0MzsJTElTVF9IRUFEKGRldl9raWxsX2xpc3QpOwomIzQzOwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJaXA2bXJfZnJlZV90YWJsZShtcnQsICZhbXA7ZGV2X2tpbGxfbGlzdCk7CiYjNDM7CXVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoJmFtcDtkZXZfa2lsbF9saXN0KTsKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0Mzt9CiYjNDM7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIC8qIFRoZSAvcHJvYyBpbnRlcmZhY2VzIHRvIG11bHRpY2FzdCByb3V0aW5nCiAgKiAvcHJvYy9pcDZfbXJfY2FjaGUgL3Byb2MvaXA2X21yX3ZpZgpAQCAtNTY5LDcgJiM0Mzs2MjcsNyBAQCBzdGF0aWMgaW50IHBpbTZfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAJc3RydWN0IGlwdjZoZHIgICAqZW5jYXA7CiAJc3RydWN0IG5ldF9kZXZpY2UgICpyZWdfZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0mZ3Q7ZGV2KTsKLQlzdHJ1Y3QgbXJfdGFibGUgKm1ydDsKJiM0MzsJc3RydWN0IG1yX3RhYmxlICptcnQgPSBOVUxMOwogCXN0cnVjdCBmbG93aTYgZmw2ID0gewogCQkuZmxvd2k2X2lpZgk9IHNrYi0mZ3Q7ZGV2LSZndDtpZmluZGV4LAogCQkuZmxvd2k2X21hcmsJPSBza2ItJmd0O21hcmssCkBAIC02MTcsOSAmIzQzOzY3NSwxMiBAQCBzdGF0aWMgaW50IHBpbTZfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAJc2tiX3R1bm5lbF9yeChza2IsIHJlZ19kZXYsIGRldl9uZXQocmVnX2RldikpOwogCiAJbmV0aWZfcngoc2tiKTsKJiM0MzsJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAKIAlyZXR1cm4gMDsKICBkcm9wOgomIzQzOwlpZiAobXJ0KQomIzQzOwkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CiB9CkBAIC02MzQsNyAmIzQzOzY5NSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKLQlzdHJ1Y3QgbXJfdGFibGUgKm1ydDsKJiM0MzsJc3RydWN0IG1yX3RhYmxlICptcnQgPSBOVUxMOwogCXN0cnVjdCBmbG93aTYgZmw2ID0gewogCQkuZmxvd2k2X29pZgk9IGRldi0mZ3Q7aWZpbmRleCwKIAkJLmZsb3dpNl9paWYJPSBza2ItJmd0O3NrYl9paWYgPyA6IExPT1BCQUNLX0lGSU5ERVgsCkBAIC02NTUsMTIgJiM0Mzs3MTYsMTUgQEAgc3RhdGljIG5ldGRldl90eF90IHJlZ192aWZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlwNm1yX2NhY2hlX3JlcG9ydChtcnQsIHNrYiwgUkVBRF9PTkNFKG1ydC0mZ3Q7bXJvdXRlX3JlZ192aWZfbnVtKSwKIAkJCSAgIE1SVDZNU0dfV0hPTEVQS1QpOwogCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlpcDZtcl9wdXRfdGFibGUobXJ0KTsKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogCiB0eF9sb29rdXBfZXJyOgogCXJjdV9yZWFkX3VubG9jaygpOwogdHhfZXJyOgomIzQzOwlpZiAobXJ0KQomIzQzOwkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAJREVWX1NUQVRTX0lOQyhkZXYsIHR4X2Vycm9ycyk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKQEAgLTE2MTUsMTIgJiM0MzsxNjc5LDEzIEBAIHN0YXRpYyB2b2lkIG1yb3V0ZV9jbGVhbl90YWJsZXMoc3RydWN0IG1yX3RhYmxlICptcnQsIGludCBmbGFncywKIAl9CiB9CiAKLXN0YXRpYyBpbnQgaXA2bXJfc2tfaW5pdChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IHNvY2sgKnNrKQomIzQzO3N0YXRpYyBpbnQgX19pcDZtcl9za19pbml0KHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJaW50IGVyciA9IDA7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCi0JcnRubF9sb2NrKCk7CiYjNDM7CUFTU0VSVF9SVE5MKCk7CiYjNDM7CiAJc3Bpbl9sb2NrKCZhbXA7bXJ0X2xvY2spOwogCWlmIChydG5sX2RlcmVmZXJlbmNlKG1ydC0mZ3Q7bXJvdXRlX3NrKSkgewogCQllcnIgPSAtRUFERFJJTlVTRTsKQEAgLTE2MjgsNiAmIzQzOzE2OTMsNyBAQCBzdGF0aWMgaW50IGlwNm1yX3NrX2luaXQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBzb2NrICpzaykKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKG1ydC0mZ3Q7bXJvdXRlX3NrLCBzayk7CiAJCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfUkNVX0ZSRUUpOwogCQlhdG9taWNfaW5jKCZhbXA7bmV0LSZndDtpcHY2LmRldmNvbmZfYWxsLSZndDttY19mb3J3YXJkaW5nKTsKJiM0MzsJCXJlZmNvdW50X2luYygmYW1wO21ydC0mZ3Q7cmVmY250KTsKIAl9CiAJc3Bpbl91bmxvY2soJmFtcDttcnRfbG9jayk7CiAKQEAgLTE2MzYsNyAmIzQzOzE3MDIsNiBAQCBzdGF0aWMgaW50IGlwNm1yX3NrX2luaXQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBzb2NrICpzaykKIAkJCQkJICAgICBORVRDT05GQV9NQ19GT1JXQVJESU5HLAogCQkJCQkgICAgIE5FVENPTkZBX0lGSU5ERVhfQUxMLAogCQkJCQkgICAgIG5ldC0mZ3Q7aXB2Ni5kZXZjb25mX2FsbCk7Ci0JcnRubF91bmxvY2soKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0xNjQ2LDYgJiM0MzsxNzExLDcgQEAgaW50IGlwNm1yX3NrX2RvbmUoc3RydWN0IHNvY2sgKnNrKQogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAlzdHJ1Y3QgaXB2Nl9kZXZjb25mICpkZXZjb25mOwogCUxJU1RfSEVBRChkZXZfa2lsbF9saXN0KTsKJiM0MzsJc3RydWN0IG1yX3RhYmxlICpmcmVlX21ydCA9IE5VTEw7CiAJc3RydWN0IG1yX3RhYmxlICptcnQ7CiAJaW50IGVyciA9IC1FQUNDRVM7CiAKQEAgLTE2NzUsNiAmIzQzOzE3NDEsMTUgQEAgaW50IGlwNm1yX3NrX2RvbmUoc3RydWN0IHNvY2sgKnNrKQogCiAJCQltcm91dGVfY2xlYW5fdGFibGVzKG1ydCwgTVJUNl9GTFVTSF9NSUZTIHwgTVJUNl9GTFVTSF9NRkMsCiAJCQkJCSAgICAmYW1wO2Rldl9raWxsX2xpc3QpOwomIzQzOwkJCWlmIChtcnQtJmd0O2lkICE9IFJUNl9UQUJMRV9ERkxUICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgIVJFQURfT05DRShtcnQtJmd0O21heHZpZikgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAhUkVBRF9PTkNFKG1ydC0mZ3Q7Y2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgbGlzdF9lbXB0eSgmYW1wO21ydC0mZ3Q7bWZjX2NhY2hlX2xpc3QpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgbGlzdF9lbXB0eSgmYW1wO21ydC0mZ3Q7bWZjX3VucmVzX3F1ZXVlKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIFJFQURfT05DRShtcnQtJmd0O21yb3V0ZV9yZWdfdmlmX251bSkgJmx0OyAwKSB7CiYjNDM7CQkJCWxpc3RfZGVsX3JjdSgmYW1wO21ydC0mZ3Q7bGlzdCk7CiYjNDM7CQkJCWZyZWVfbXJ0ID0gbXJ0OwomIzQzOwkJCX0KIAkJCWVyciA9IDA7CiAJCQlicmVhazsKIAkJfQpAQCAtMTY4Miw2ICYjNDM7MTc1NywxNCBAQCBpbnQgaXA2bXJfc2tfZG9uZShzdHJ1Y3Qgc29jayAqc2spCiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueSgmYW1wO2Rldl9raWxsX2xpc3QpOwogCXJ0bmxfdW5sb2NrKCk7CiAKJiM0MzsJaWYgKCFlcnIpCiYjNDM7CQlpcDZtcl9wdXRfdGFibGUobXJ0KTsKJiM0MzsKJiM0MzsJaWYgKGZyZWVfbXJ0KSB7CiYjNDM7CQlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0MzsJCWlwNm1yX3B1dF90YWJsZShmcmVlX21ydCk7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNjkzLDExICYjNDM7MTc3NiwxNSBAQCBib29sIG1yb3V0ZTZfaXNfc29ja2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJLmZsb3dpNl9vaWYJPSBza2ItJmd0O2Rldi0mZ3Q7aWZpbmRleCwKIAkJLmZsb3dpNl9tYXJrCT0gc2tiLSZndDttYXJrLAogCX07CiYjNDM7CWJvb2wgcmV0OwogCiAJaWYgKGlwNm1yX2ZpYl9sb29rdXAobmV0LCAmYW1wO2ZsNiwgJmFtcDttcnQpICZsdDsgMCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gcmN1X2FjY2Vzc19wb2ludGVyKG1ydC0mZ3Q7bXJvdXRlX3NrKTsKJiM0MzsJcmV0ID0gcmN1X2FjY2Vzc19wb2ludGVyKG1ydC0mZ3Q7bXJvdXRlX3NrKTsKJiM0MzsJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKG1yb3V0ZTZfaXNfc29ja2V0KTsKIApAQCAtMTcxNiwyMCAmIzQzOzE4MDMsMjQgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAogCXN0cnVjdCBtZjZjY3RsIG1mYzsKIAltaWZpX3QgbWlmaTsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7Ci0Jc3RydWN0IG1yX3RhYmxlICptcnQ7CiYjNDM7CXN0cnVjdCBtcl90YWJsZSAqbXJ0ID0gTlVMTDsKJiM0MzsJdTMyIHRhYmxlID0gcmF3Nl9zayhzayktJmd0O2lwNm1yX3RhYmxlID8gOiBSVDZfVEFCTEVfREZMVDsKIAogCWlmIChzay0mZ3Q7c2tfdHlwZSAhPSBTT0NLX1JBVyB8fAogCSAgICBpbmV0X3NrKHNrKS0mZ3Q7aW5ldF9udW0gIT0gSVBQUk9UT19JQ01QVjYpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCW1ydCA9IGlwNm1yX2dldF90YWJsZShuZXQsIHJhdzZfc2soc2spLSZndDtpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpOwotCWlmICghbXJ0KQotCQlyZXR1cm4gLUVOT0VOVDsKLQotCWlmIChvcHRuYW1lICE9IE1SVDZfSU5JVCkgewomIzQzOwlpZiAob3B0bmFtZSAhPSBNUlQ2X0lOSVQgJmFtcDsmYW1wOwomIzQzOwkgICAgb3B0bmFtZSAhPSBNUlQ2X1RBQkxFICZhbXA7JmFtcDsKJiM0MzsJICAgIG9wdG5hbWUgIT0gTVJUNl9ET05FKSB7CiYjNDM7CQltcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChuZXQsIHRhYmxlKTsKJiM0MzsJCWlmICghbXJ0KQomIzQzOwkJCXJldHVybiAtRU5PRU5UOwogCQlpZiAoc2sgIT0gcmN1X2FjY2Vzc19wb2ludGVyKG1ydC0mZ3Q7bXJvdXRlX3NrKSAmYW1wOyZhbXA7Ci0JCSAgICAhbnNfY2FwYWJsZShuZXQtJmd0O3VzZXJfbnMsIENBUF9ORVRfQURNSU4pKQomIzQzOwkJICAgICFuc19jYXBhYmxlKG5ldC0mZ3Q7dXNlcl9ucywgQ0FQX05FVF9BRE1JTikpIHsKJiM0MzsJCQlpcDZtcl9wdXRfdGFibGUobXJ0KTsKIAkJCXJldHVybiAtRUFDQ0VTOwomIzQzOwkJfQogCX0KIAogCXN3aXRjaCAob3B0bmFtZSkgewpAQCAtMTczNywzMiAmIzQzOzE4MjgsNDEgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAogCQlpZiAob3B0bGVuICZsdDsgc2l6ZW9mKGludCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlyZXR1cm4gaXA2bXJfc2tfaW5pdChtcnQsIHNrKTsKJiM0MzsJCXJ0bmxfbG9jaygpOwomIzQzOwkJbXJ0ID0gaXA2bXJfbmV3X3RhYmxlKG5ldCwgdGFibGUpOwomIzQzOwkJaWYgKCFJU19FUlIobXJ0KSkKJiM0MzsJCQlyZXQgPSBfX2lwNm1yX3NrX2luaXQobXJ0LCBzayk7CiYjNDM7CQllbHNlCiYjNDM7CQkJcmV0ID0gUFRSX0VSUihtcnQpOwomIzQzOwkJcnRubF91bmxvY2soKTsKJiM0MzsJCXJldHVybiByZXQ7CiAKIAljYXNlIE1SVDZfRE9ORToKIAkJcmV0dXJuIGlwNm1yX3NrX2RvbmUoc2spOwogCiAJY2FzZSBNUlQ2X0FERF9NSUY6CiAJCWlmIChvcHRsZW4gJmx0OyBzaXplb2YodmlmKSkKLQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCWdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7CiAJCWlmIChjb3B5X2Zyb21fc29ja3B0cigmYW1wO3ZpZiwgb3B0dmFsLCBzaXplb2YodmlmKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCQlnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0OwogCQlpZiAodmlmLm1pZjZjX21pZmkgJmd0Oz0gTUFYTUlGUykKLQkJCXJldHVybiAtRU5GSUxFOwomIzQzOwkJCWdvdG8gb3V0X3B1dF90YWJsZV9lbmZpbGU7CiAJCXJ0bmxfbG9jaygpOwogCQlyZXQgPSBtaWY2X2FkZChuZXQsIG1ydCwgJmFtcDt2aWYsCiAJCQkgICAgICAgc2sgPT0gcnRubF9kZXJlZmVyZW5jZShtcnQtJmd0O21yb3V0ZV9zaykpOwogCQlydG5sX3VubG9jaygpOwomIzQzOwkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAJCXJldHVybiByZXQ7CiAKIAljYXNlIE1SVDZfREVMX01JRjoKIAkJaWYgKG9wdGxlbiAmbHQ7IHNpemVvZihtaWZpX3QpKQotCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJZ290byBvdXRfcHV0X3RhYmxlX2VpbnZhbDsKIAkJaWYgKGNvcHlfZnJvbV9zb2NrcHRyKCZhbXA7bWlmaSwgb3B0dmFsLCBzaXplb2YobWlmaV90KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCQlnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0OwogCQlydG5sX2xvY2soKTsKIAkJcmV0ID0gbWlmNl9kZWxldGUobXJ0LCBtaWZpLCAwLCBOVUxMKTsKIAkJcnRubF91bmxvY2soKTsKJiM0MzsJCWlwNm1yX3B1dF90YWJsZShtcnQpOwogCQlyZXR1cm4gcmV0OwogCiAJLyoKQEAgLTE3NzYsOSAmIzQzOzE4NzYsOSBAQCBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsCiAJY2FzZSBNUlQ2X0FERF9NRkNfUFJPWFk6CiAJY2FzZSBNUlQ2X0RFTF9NRkNfUFJPWFk6CiAJCWlmIChvcHRsZW4gJmx0OyBzaXplb2YobWZjKSkKLQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCWdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7CiAJCWlmIChjb3B5X2Zyb21fc29ja3B0cigmYW1wO21mYywgb3B0dmFsLCBzaXplb2YobWZjKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCQlnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0OwogCQlpZiAocGFyZW50ID09IDApCiAJCQlwYXJlbnQgPSBtZmMubWY2Y2NfcGFyZW50OwogCkBAIC0xNzkzLDYgJiM0MzsxODkzLDcgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAogCQkJCQkgICAgcGFyZW50KTsKIAogCQltdXRleF91bmxvY2soJmFtcDtuZXQtJmd0O2lwdjYubWZjX211dGV4KTsKJiM0MzsJCWlwNm1yX3B1dF90YWJsZShtcnQpOwogCQlyZXR1cm4gcmV0OwogCiAJY2FzZSBNUlQ2X0ZMVVNIOgpAQCAtMTgwMSwxNCAmIzQzOzE5MDIsMTUgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAogCQlpbnQgZmxhZ3M7CiAKIAkJaWYgKG9wdGxlbiAhPSBzaXplb2YoZmxhZ3MpKQotCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJZ290byBvdXRfcHV0X3RhYmxlX2VpbnZhbDsKIAkJaWYgKGNvcHlfZnJvbV9zb2NrcHRyKCZhbXA7ZmxhZ3MsIG9wdHZhbCwgc2l6ZW9mKGZsYWdzKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCQlnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0OwogCiAJCXJ0bmxfbG9jaygpOwogCQltcm91dGVfY2xlYW5fdGFibGVzKG1ydCwgZmxhZ3MsICZhbXA7ZGV2X2tpbGxfbGlzdCk7CiAJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoJmFtcDtkZXZfa2lsbF9saXN0KTsKIAkJcnRubF91bmxvY2soKTsKJiM0MzsJCWlwNm1yX3B1dF90YWJsZShtcnQpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE4MjAsMTAgJiM0MzsxOTIyLDExIEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwKIAkJaW50IHY7CiAKIAkJaWYgKG9wdGxlbiAhPSBzaXplb2YodikpCi0JCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQlnb3RvIG91dF9wdXRfdGFibGVfZWludmFsOwogCQlpZiAoY29weV9mcm9tX3NvY2twdHIoJmFtcDt2LCBvcHR2YWwsIHNpemVvZih2KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCQlnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0OwogCQlXUklURV9PTkNFKG1ydC0mZ3Q7bXJvdXRlX2RvX2Fzc2VydCwgdik7CiYjNDM7CQlpcDZtcl9wdXRfdGFibGUobXJ0KTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xODM0LDkgJiM0MzsxOTM3LDkgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAogCQlpbnQgdjsKIAogCQlpZiAob3B0bGVuICE9IHNpemVvZih2KSkKLQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCWdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7CiAJCWlmIChjb3B5X2Zyb21fc29ja3B0cigmYW1wO3YsIG9wdHZhbCwgc2l6ZW9mKHYpKSkKLQkJCXJldHVybiAtRUZBVUxUOwomIzQzOwkJCWdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7CiAKIAkJZG9fd3JtaWZ3aG9sZSA9ICh2ID09IE1SVDZNU0dfV1JNSUZXSE9MRSk7CiAJCXYgPSAhIXY7CkBAIC0xODQ4LDYgJiM0MzsxOTUxLDcgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAogCQkJV1JJVEVfT05DRShtcnQtJmd0O21yb3V0ZV9kb193cnZpZndob2xlLCBkb193cm1pZndob2xlKTsKIAkJfQogCQlydG5sX3VubG9jaygpOwomIzQzOwkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0xODY0LDE4ICYjNDM7MTk2OCwyMiBAQCBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsCiAJCS8qICYjMzQ7cGltNnJlZyV1JiMzNDsgc2hvdWxkIG5vdCBleGNlZWQgMTYgYnl0ZXMgKElGTkFNU0laKSAqLwogCQlpZiAodiAhPSBSVF9UQUJMRV9ERUZBVUxUICZhbXA7JmFtcDsgdiAmZ3Q7PSAxMDAwMDAwMDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKHNrID09IHJjdV9hY2Nlc3NfcG9pbnRlcihtcnQtJmd0O21yb3V0ZV9zaykpCiYjNDM7CiYjNDM7CQltcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChuZXQsIHRhYmxlKTsKJiM0MzsJCWlmIChtcnQgJmFtcDsmYW1wOyBzayA9PSByY3VfYWNjZXNzX3BvaW50ZXIobXJ0LSZndDttcm91dGVfc2spKSB7CiYjNDM7CQkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAJCQlyZXR1cm4gLUVCVVNZOwomIzQzOwkJfQomIzQzOwkJaWYgKCFuc19jYXBhYmxlKG5ldC0mZ3Q7dXNlcl9ucywgQ0FQX05FVF9BRE1JTikpIHsKJiM0MzsJCQlpZiAobXJ0KQomIzQzOwkJCQlpcDZtcl9wdXRfdGFibGUobXJ0KTsKJiM0MzsJCQlyZXR1cm4gLUVBQ0NFUzsKJiM0MzsJCX0KJiM0MzsJCWlmIChtcnQpCiYjNDM7CQkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAKLQkJcnRubF9sb2NrKCk7Ci0JCXJldCA9IDA7Ci0JCW1ydCA9IGlwNm1yX25ld190YWJsZShuZXQsIHYpOwotCQlpZiAoSVNfRVJSKG1ydCkpCi0JCQlyZXQgPSBQVFJfRVJSKG1ydCk7Ci0JCWVsc2UKLQkJCXJhdzZfc2soc2spLSZndDtpcDZtcl90YWJsZSA9IHY7Ci0JCXJ0bmxfdW5sb2NrKCk7Ci0JCXJldHVybiByZXQ7CiYjNDM7CQlyYXc2X3NrKHNrKS0mZ3Q7aXA2bXJfdGFibGUgPSB2OwomIzQzOwkJcmV0dXJuIDA7CiAJfQogI2VuZGlmCiAJLyoKQEAgLTE4ODMsOCAmIzQzOzE5OTEsMjUgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAogCSAqCXNldC4KIAkgKi8KIAlkZWZhdWx0OgomIzQzOwkJaWYgKG1ydCkKJiM0MzsJCQlpcDZtcl9wdXRfdGFibGUobXJ0KTsKIAkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAl9CiYjNDM7CiYjNDM7b3V0X3B1dF90YWJsZV9lZmF1bHQ6CiYjNDM7CWlmIChtcnQpCiYjNDM7CQlpcDZtcl9wdXRfdGFibGUobXJ0KTsKJiM0MzsJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7b3V0X3B1dF90YWJsZV9laW52YWw6CiYjNDM7CWlmIChtcnQpCiYjNDM7CQlpcDZtcl9wdXRfdGFibGUobXJ0KTsKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7b3V0X3B1dF90YWJsZV9lbmZpbGU6CiYjNDM7CWlmIChtcnQpCiYjNDM7CQlpcDZtcl9wdXRfdGFibGUobXJ0KTsKJiM0MzsJcmV0dXJuIC1FTkZJTEU7CiB9CiAKIC8qCkBAIC0xODk1LDYgJiM0MzsyMDIwLDcgQEAgaW50IGlwNl9tcm91dGVfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAogCQkJICBzb2NrcHRyX3Qgb3B0bGVuKQogewogCWludCBvbHI7CiYjNDM7CWludCByZXQgPSAwOwogCWludCB2YWw7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCXN0cnVjdCBtcl90YWJsZSAqbXJ0OwpAQCAtMTkwMyw3ICYjNDM7MjAyOSw3IEBAIGludCBpcDZfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwKIAkgICAgaW5ldF9zayhzayktJmd0O2luZXRfbnVtICE9IElQUFJPVE9fSUNNUFY2KQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQltcnQgPSBpcDZtcl9nZXRfdGFibGUobmV0LCByYXc2X3NrKHNrKS0mZ3Q7aXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTsKJiM0MzsJbXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQobmV0LCByYXc2X3NrKHNrKS0mZ3Q7aXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTsKIAlpZiAoIW1ydCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKQEAgLTE5MjAsMjYgJiM0MzsyMDQ2LDMzIEBAIGludCBpcDZfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwKIAkJdmFsID0gUkVBRF9PTkNFKG1ydC0mZ3Q7bXJvdXRlX2RvX2Fzc2VydCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PUFJPVE9PUFQ7CiYjNDM7CQlyZXQgPSAtRU5PUFJPVE9PUFQ7CiYjNDM7CQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoY29weV9mcm9tX3NvY2twdHIoJmFtcDtvbHIsIG9wdGxlbiwgc2l6ZW9mKGludCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJaWYgKGNvcHlfZnJvbV9zb2NrcHRyKCZhbXA7b2xyLCBvcHRsZW4sIHNpemVvZihpbnQpKSkgewomIzQzOwkJcmV0ID0gLUVGQVVMVDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiAKIAlvbHIgPSBtaW5fdChpbnQsIG9sciwgc2l6ZW9mKGludCkpOwotCWlmIChvbHIgJmx0OyAwKQotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKG9sciAmbHQ7IDApIHsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQogCi0JaWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sICZhbXA7b2xyLCBzaXplb2YoaW50KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChjb3B5X3RvX3NvY2twdHIob3B0dmFsLCAmYW1wO3ZhbCwgb2xyKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7CiYjNDM7CWlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCAmYW1wO29sciwgc2l6ZW9mKGludCkpIHx8CiYjNDM7CSAgICBjb3B5X3RvX3NvY2twdHIob3B0dmFsLCAmYW1wO3ZhbCwgb2xyKSkKJiM0MzsJCXJldCA9IC1FRkFVTFQ7CiYjNDM7b3V0OgomIzQzOwlpcDZtcl9wdXRfdGFibGUobXJ0KTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogLyoKICAqCVRoZSBJUCBtdWx0aWNhc3QgaW9jdGwgc3VwcG9ydCByb3V0aW5lcy4KICAqLwomIzQzOwogaW50IGlwNm1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBzaW9jX3NnX3JlcTYgKnNyOwpAQCAtMTk0OSw3ICYjNDM7MjA4Miw3IEBAIGludCBpcDZtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgKmFyZykKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAJc3RydWN0IG1yX3RhYmxlICptcnQ7CiAKLQltcnQgPSBpcDZtcl9nZXRfdGFibGUobmV0LCByYXc2X3NrKHNrKS0mZ3Q7aXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTsKJiM0MzsJbXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQobmV0LCByYXc2X3NrKHNrKS0mZ3Q7aXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTsKIAlpZiAoIW1ydCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKQEAgLTE5NTcsNyAmIzQzOzIwOTAsNyBAQCBpbnQgaXA2bXJfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkICphcmcpCiAJY2FzZSBTSU9DR0VUTUlGQ05UX0lONjoKIAkJdnIgPSAoc3RydWN0IHNpb2NfbWlmX3JlcTYgKilhcmc7CiAJCWlmICh2ci0mZ3Q7bWlmaSAmZ3Q7PSBtcnQtJmd0O21heHZpZikKLQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCWdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7CiAJCXZyLSZndDttaWZpID0gYXJyYXlfaW5kZXhfbm9zcGVjKHZyLSZndDttaWZpLCBtcnQtJmd0O21heHZpZik7CiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJdmlmID0gJmFtcDttcnQtJmd0O3ZpZl90YWJsZVt2ci0mZ3Q7bWlmaV07CkBAIC0xOTY3LDkgJiM0MzsyMTAwLDExIEBAIGludCBpcDZtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgKmFyZykKIAkJCXZyLSZndDtpYnl0ZXMgPSBSRUFEX09OQ0UodmlmLSZndDtieXRlc19pbik7CiAJCQl2ci0mZ3Q7b2J5dGVzID0gUkVBRF9PTkNFKHZpZi0mZ3Q7Ynl0ZXNfb3V0KTsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJCWlwNm1yX3B1dF90YWJsZShtcnQpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlpcDZtcl9wdXRfdGFibGUobXJ0KTsKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCWNhc2UgU0lPQ0dFVFNHQ05UX0lONjoKIAkJc3IgPSAoc3RydWN0IHNpb2Nfc2dfcmVxNiAqKWFyZzsKQEAgLTE5ODIsMTUgJiM0MzsyMTE3LDIxIEBAIGludCBpcDZtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgKmFyZykKIAkJCXNyLSZndDtieXRlY250ID0gYXRvbWljX2xvbmdfcmVhZCgmYW1wO2MtJmd0O19jLm1mY191bi5yZXMuYnl0ZXMpOwogCQkJc3ItJmd0O3dyb25nX2lmID0gYXRvbWljX2xvbmdfcmVhZCgmYW1wO2MtJmd0O19jLm1mY191bi5yZXMud3JvbmdfaWYpOwogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCWlwNm1yX3B1dF90YWJsZShtcnQpOwogCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAJZGVmYXVsdDoKJiM0MzsJCWlwNm1yX3B1dF90YWJsZShtcnQpOwogCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogCX0KLX0KIAomIzQzO291dF9wdXRfdGFibGVfZWludmFsOgomIzQzOwlpcDZtcl9wdXRfdGFibGUobXJ0KTsKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQogI2lmZGVmIENPTkZJR19DT01QQVQKIHN0cnVjdCBjb21wYXRfc2lvY19zZ19yZXE2IHsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNyYzsKQEAgLTIwMTcsMTYgJiM0MzsyMTU4LDE2IEBAIGludCBpcDZtcl9jb21wYXRfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAlzdHJ1Y3QgbXJfdGFibGUgKm1ydDsKIAotCW1ydCA9IGlwNm1yX2dldF90YWJsZShuZXQsIHJhdzZfc2soc2spLSZndDtpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpOwomIzQzOwltcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChuZXQsIHJhdzZfc2soc2spLSZndDtpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpOwogCWlmICghbXJ0KQogCQlyZXR1cm4gLUVOT0VOVDsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTSU9DR0VUTUlGQ05UX0lONjoKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7dnIsIGFyZywgc2l6ZW9mKHZyKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCQlnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0OwogCQlpZiAodnIubWlmaSAmZ3Q7PSBtcnQtJmd0O21heHZpZikKLQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCWdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7CiAJCXZyLm1pZmkgPSBhcnJheV9pbmRleF9ub3NwZWModnIubWlmaSwgbXJ0LSZndDttYXh2aWYpOwogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCXZpZiA9ICZhbXA7bXJ0LSZndDt2aWZfdGFibGVbdnIubWlmaV07CkBAIC0yMDM4LDE0ICYjNDM7MjE3OSwxNiBAQCBpbnQgaXA2bXJfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZykKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogCiAJCQlpZiAoY29weV90b191c2VyKGFyZywgJmFtcDt2ciwgc2l6ZW9mKHZyKSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CQkJCWdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7CiYjNDM7CQkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCWlwNm1yX3B1dF90YWJsZShtcnQpOwogCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAJY2FzZSBTSU9DR0VUU0dDTlRfSU42OgogCQlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDtzciwgYXJnLCBzaXplb2Yoc3IpKSkKLQkJCXJldHVybiAtRUZBVUxUOwomIzQzOwkJCWdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7CiAKIAkJcmN1X3JlYWRfbG9jaygpOwogCQljID0gaXA2bXJfY2FjaGVfZmluZChtcnQsICZhbXA7c3Iuc3JjLnNpbjZfYWRkciwgJmFtcDtzci5ncnAuc2luNl9hZGRyKTsKQEAgLTIwNTYsMTQgJiM0MzsyMTk5LDI1IEBAIGludCBpcDZtcl9jb21wYXRfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYW1wO3NyLCBzaXplb2Yoc3IpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCQkJZ290byBvdXRfcHV0X3RhYmxlX2VmYXVsdDsKJiM0MzsJCQlpcDZtcl9wdXRfdGFibGUobXJ0KTsKIAkJCXJldHVybiAwOwogCQl9CiAJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAlkZWZhdWx0OgomIzQzOwkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAJCXJldHVybiAtRU5PSU9DVExDTUQ7CiAJfQomIzQzOwomIzQzO291dF9wdXRfdGFibGVfZWZhdWx0OgomIzQzOwlpcDZtcl9wdXRfdGFibGUobXJ0KTsKJiM0MzsJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7b3V0X3B1dF90YWJsZV9laW52YWw6CiYjNDM7CWlwNm1yX3B1dF90YWJsZShtcnQpOwomIzQzOwlyZXR1cm4gLUVJTlZBTDsKIH0KICNlbmRpZgogCkBAIC0yMzkyLDEzICYjNDM7MjU0NiwxNiBAQCBpbnQgaXA2X21yX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpCiAJCWlmICh2aWYgJmd0Oz0gMCkgewogCQkJaW50IGVyciA9IGlwNm1yX2NhY2hlX3VucmVzb2x2ZWQobXJ0LCB2aWYsIHNrYiwgZGV2KTsKIAomIzQzOwkJCWlwNm1yX3B1dF90YWJsZShtcnQpOwogCQkJcmV0dXJuIGVycjsKIAkJfQomIzQzOwkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpcDZfbXJfZm9yd2FyZChuZXQsIG1ydCwgZGV2LCBza2IsIGNhY2hlKTsKJiM0MzsJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI0NDEsMTkgJiM0MzsyNTk4LDI1IEBAIGludCBpcDZfbXJfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCS8qIE5vIHVzYWJsZSBjYWNoZSBlbnRyeSAqLwogCWlmICghY2FjaGUpIHsKIAkJdmlmID0gaXA2bXJfZmluZF92aWYobXJ0LCBkZXYpOwotCQlpZiAodmlmICZndDs9IDApCi0JCQlyZXR1cm4gaXA2bXJfY2FjaGVfdW5yZXNvbHZlZChtcnQsIHZpZiwgc2tiLCBkZXYpOwotCQlnb3RvIGlwNl9vdXRwdXQ7CiYjNDM7CQlpZiAodmlmICZndDs9IDApIHsKJiM0MzsJCQllcnIgPSBpcDZtcl9jYWNoZV91bnJlc29sdmVkKG1ydCwgdmlmLCBza2IsIGRldik7CiYjNDM7CQkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsJCWdvdG8gb3V0X3B1dDsKIAl9CiAKIAkvKiBXcm9uZyBpbnRlcmZhY2UgKi8KIAl2aWYgPSBjYWNoZS0mZ3Q7X2MubWZjX3BhcmVudDsKIAlpZiAocmN1X2FjY2Vzc19wb2ludGVyKG1ydC0mZ3Q7dmlmX3RhYmxlW3ZpZl0uZGV2KSAhPSBkZXYpCi0JCWdvdG8gaXA2X291dHB1dDsKJiM0MzsJCWdvdG8gb3V0X3B1dDsKIAogCWlwNl9tcl9vdXRwdXRfZmluaXNoKG5ldCwgbXJ0LCBkZXYsIHNrYiwgY2FjaGUpOwomIzQzOwlpcDZtcl9wdXRfdGFibGUobXJ0KTsKIAlyZXR1cm4gMDsKIAomIzQzO291dF9wdXQ6CiYjNDM7CWlwNm1yX3B1dF90YWJsZShtcnQpOwogaXA2X291dHB1dDoKIAlyZXR1cm4gaXA2X291dHB1dChuZXQsIHNrLCBza2IpOwogfQpAQCAtMjc1NSwzMyAmIzQzOzI5MTgsMzUgQEAgc3RhdGljIGludCBpcDZtcl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCWdycCA9IG5sYV9nZXRfaW42X2FkZHIodGJbUlRBX0RTVF0pOwogCXRhYmxlaWQgPSBubGFfZ2V0X3UzMl9kZWZhdWx0KHRiW1JUQV9UQUJMRV0sIDApOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCi0JbXJ0ID0gX19pcDZtcl9nZXRfdGFibGUobmV0LCB0YWJsZWlkID86IFJUX1RBQkxFX0RFRkFVTFQpOwomIzQzOwltcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChuZXQsIHRhYmxlaWQgPzogUlRfVEFCTEVfREVGQVVMVCk7CiAJaWYgKCFtcnQpIHsKIAkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtNUiB0YWJsZSBkb2VzIG5vdCBleGlzdCYjMzQ7KTsKIAkJZXJyID0gLUVOT0VOVDsKLQkJZ290byBlcnI7CiYjNDM7CQlnb3RvIGVycl9mcmVlOwogCX0KIAomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiAJY2FjaGUgPSBpcDZtcl9jYWNoZV9maW5kKG1ydCwgJmFtcDtzcmMsICZhbXA7Z3JwKTsKIAlpZiAoIWNhY2hlKSB7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKIAkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtNUiBjYWNoZSBlbnRyeSBub3QgZm91bmQmIzM0Oyk7CiAJCWVyciA9IC1FTk9FTlQ7Ci0JCWdvdG8gZXJyOwomIzQzOwkJZ290byBlcnJfcHV0OwogCX0KIAogCWVyciA9IGlwNm1yX2ZpbGxfbXJvdXRlKG1ydCwgc2tiLCBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLAogCQkJCW5saC0mZ3Q7bmxtc2dfc2VxLCBjYWNoZSwgUlRNX05FV1JPVVRFLCAwKTsKLQlpZiAoZXJyICZsdDsgMCkKLQkJZ290byBlcnI7Ci0KIAlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9wdXQ7CiAKLQlyZXR1cm4gcnRubF91bmljYXN0KHNrYiwgbmV0LCBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkKTsKJiM0MzsJZXJyID0gcnRubF91bmljYXN0KHNrYiwgbmV0LCBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkKTsKJiM0MzsJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiYjNDM7CXJldHVybiBlcnI7CiAKLWVycjoKLQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MztlcnJfcHV0OgomIzQzOwlpcDZtcl9wdXRfdGFibGUobXJ0KTsKJiM0MztlcnJfZnJlZToKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjgwNCw3ICYjNDM7Mjk2OSw3IEBAIHN0YXRpYyBpbnQgaXA2bXJfcnRtX2R1bXByb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJaWYgKGZpbHRlci50YWJsZV9pZCkgewogCQlzdHJ1Y3QgbXJfdGFibGUgKm1ydDsKIAotCQltcnQgPSBfX2lwNm1yX2dldF90YWJsZShzb2NrX25ldChza2ItJmd0O3NrKSwgZmlsdGVyLnRhYmxlX2lkKTsKJiM0MzsJCW1ydCA9IGlwNm1yX2dldF90YWJsZV9ob2xkKHNvY2tfbmV0KHNrYi0mZ3Q7c2spLCBmaWx0ZXIudGFibGVfaWQpOwogCQlpZiAoIW1ydCkgewogCQkJaWYgKHJ0bmxfbXNnX2ZhbWlseShjYi0mZ3Q7bmxoKSAhPSBSVE5MX0ZBTUlMWV9JUDZNUikgewogCQkJCWVyciA9IHNrYi0mZ3Q7bGVuOwpAQCAtMjgxOCw2ICYjNDM7Mjk4Myw3IEBAIHN0YXRpYyBpbnQgaXA2bXJfcnRtX2R1bXByb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAKIAkJZXJyID0gbXJfdGFibGVfZHVtcChtcnQsIHNrYiwgY2IsIF9pcDZtcl9maWxsX21yb3V0ZSwKIAkJCQkgICAgJmFtcDttZmNfdW5yZXNfbG9jaywgJmFtcDtmaWx0ZXIpOwomIzQzOwkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAJCWVyciA9IHNrYi0mZ3Q7bGVuID8gOiBlcnI7CiAJCWdvdG8gdW5sb2NrOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4OTYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IElQdjYgTXVsdGljYXN0IFJvdXRpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggYWZmZWN0aW5nIElQdjYgbXVsdGljYXN0IHJvdXRpbmcsIHNwZWNpZmljYWxseSB0b3VjaGluZyBgbmV0L2lwdjYvaXA2bXIuY2AsIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2AsIGFuZCBgaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oYC4gIFRoZSBjb3JlIG9mIGl0IGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgcmVmZXJlbmNlIGNvdW50aW5nIGZvciBgc3RydWN0IG1yX3RhYmxlYCDigJMgYHJlZmNudGAgYW5kIGBkZXN0cm95X3dvcmtgIOKAkyBhbmQgYSBjb3JyZXNwb25kaW5nIGNoYW5nZSBpbiB0aGUgdGFibGUgbWFuYWdlbWVudCBmdW5jdGlvbnMuIEJhc2ljYWxseSwgdGhleSBhcmUgdHJ5aW5nIHRvIGZpeCBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24sIHdoaWNoIGlzIGNyaXRpY2FsLgoKTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzLCAqeWVzKiwgdGhpcyB3YXJyYW50cyBmdXp6aW5nLiBJdCYjMzk7cyB0b3VjaGluZyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IElQdjYgbXVsdGljYXN0IHJvdXRpbmcsIHdoaWNoIG1lYW5zIGl04oCZcyBkZWZpbml0ZWx5IGNyaXRpY2FsIGluZnJhc3RydWN0dXJlLiBJdCBpcyBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhcyB3ZWxsLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2ggdG8gY29uc3RydWN0IGEgbGlzdCBvZiBmdXp6IHRhcmdldHMuIFRoZSBtb3N0IGltcG9ydGFudCBvbmVzIHNlZW0gdG8gYmUgdGhlIG5ldyBgaXA2bXJfZ2V0X3RhYmxlX2hvbGRgLCBgX19pcDZtcl9wdXRfdGFibGVgLCBgaXA2bXJfcHV0X3RhYmxlYCwgYW5kIGBpcDZtcl9mcmVlX3RhYmxlX3dvcmtgLCBidXQgdGhlIG1vZGlmaWNhdGlvbnMgYXJlbiYjMzk7dCBsaW1pdGVkIHRvIHRoYXQuIFRoZXkgYWxzbyBtb2RpZmllZCBob3cgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcmUgdXNlZCBsaWtlIGBpcDZtcl9uZXdfdGFibGVgLCBgaXA2bXJfZnJlZV90YWJsZWAsIGBwaW02X3JjdmAsIGByZWdfdmlmX3htaXRgLCBgX19pcDZtcl9za19pbml0YCwgYGlwNm1yX3NrX2RvbmVgLCBgbXJvdXRlNl9pc19zb2NrZXRgLCBgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0YCwgYGlwNl9tcm91dGVfZ2V0c29ja29wdGAsIGBpcDZtcl9pb2N0bGAsIGBpcDZtcl9jb21wYXRfaW9jdGxgLCBgaXA2X21yX2lucHV0YCwgYGlwNl9tcl9vdXRwdXRgLCBgaXA2bXJfcnRtX2dldHJvdXRlYCwgYW5kIGBpcDZtcl9ydG1fZHVtcHJvdXRlYC4KClRoaW5raW5nIGFib3V0IHRoZSBtb3N0IGVmZmVjdGl2ZSBmdXp6aW5nIHRhcmdldHMsIEkmIzM5O2QgaG9uZSBpbiBvbiB0aGVzZTogYGlwNl9tcm91dGVfc2V0c29ja29wdGAsIGBpcDZfbXJvdXRlX2dldHNvY2tvcHRgLCBgaXA2bXJfaW9jdGxgLCBgaXA2bXJfY29tcGF0X2lvY3RsYCwgYGlwNl9tcl9pbnB1dGAsIGBpcDZfbXJfb3V0cHV0YCwgYGlwNm1yX3J0bV9nZXRyb3V0ZWAsIGBpcDZtcl9ydG1fZHVtcHJvdXRlYCwgYHBpbTZfcmN2YCwgYW5kIGByZWdfdmlmX3htaXRgLiBTb2NrZXQgb3B0aW9ucyBhbmQgaW9jdGxzIGFyZSBhbHdheXMgZ29vZCBzdGFydGluZyBwb2ludHMsIHNpbmNlIHRoZXkgcHJvdmlkZSBkaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVsLiBUaGUgcm91dGluZyB0YWJsZSBpbnRlcmFjdGlvbiBhbmQgcGFja2V0IGlucHV0L291dHB1dCBmdW5jdGlvbnMgYXJlIGFsc28gaW1wb3J0YW50LgoKRmluYWxseSwgYSBxdWljayBzYW5pdHkgY2hlY2sgb2YgdGhlIEtjb25maWcgb3B0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IElQdjYgbXVsdGljYXN0IHJvdXRpbmcgKGBDT05GSUdfSVBWNl9NUk9VVEVgKSBpcyBlbmFibGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB3aXRoIGEgYGdyZXBwZXJgIHNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUFY2X01ST1VURSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZz03MD1DT05GSUdfSVBWNl9TVUJUUkVFUz15XG5hcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZzo3MTpDT05GSUdfSVBWNl9NUk9VVEU9eVxuYXJjaC9hcm0vY29uZmlncy9rZXlzdG9uZV9kZWZjb25maWctNzItQ09ORklHX0lQVjZfUElNU01fVjI9eVxuLS1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc9MTU5PUNPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUz15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjE2MDpDT05GSUdfSVBWNl9NUk9VVEU9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy0xNjEtQ09ORklHX01QVENQPXlcbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTE3NT1DT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVM9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzoxNzY6Q09ORklHX0lQVjZfTVJPVVRFPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWctMTc3LUNPTkZJR19NUFRDUD15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvYmNtNDd4eF9kZWZjb25maWc9MjU9Q09ORklHX0lQVjZfU1VCVFJFRVM9eVxuYXJjaC9taXBzL2NvbmZpZ3MvYmNtNDd4eF9kZWZjb25maWc6MjY6Q09ORklHX0lQVjZfTVJPVVRFPXlcbmFyY2gvbWlwcy9jb25maWdzL2JjbTQ3eHhfZGVmY29uZmlnLTI3LUNPTkZJR19ORVRGSUxURVI9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2RiMXh4eF9kZWZjb25maWc9NjU9Q09ORklHX0lQVjZfU1VCVFJFRVM9eVxuYXJjaC9taXBzL2NvbmZpZ3MvZGIxeHh4X2RlZmNvbmZpZzo2NjpDT05GSUdfSVBWNl9NUk9VVEU9eVxuYXJjaC9taXBzL2NvbmZpZ3MvZGIxeHh4X2RlZmNvbmZpZzo2NzpDT05GSUdfSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcbmFyY2gvbWlwcy9jb25maWdzL2RiMXh4eF9kZWZjb25maWctNjgtQ09ORklHX0lQVjZfUElNU01fVjI9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnPTQ4PUNPTkZJR19JUFY2X1NVQlRSRUVTPXlcbmFyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnOjQ5OkNPTkZJR19JUFY2X01ST1VURT15XG5hcmNoL21pcHMvY29uZmlncy9pcDIyX2RlZmNvbmZpZy01MC1DT05GSUdfSVBWNl9QSU1TTV9WMj15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWc9NDc9Q09ORklHX0lQVjZfU1VCVFJFRVM9eVxuYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWc6NDg6Q09ORklHX0lQVjZfTVJPVVRFPXlcbmFyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnLTQ5LUNPTkZJR19JUFY2X1BJTVNNX1YyPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9pcDMwX2RlZmNvbmZpZz00Nz1DT05GSUdfSVBWNl9TVUJUUkVFUz15XG5hcmNoL21pcHMvY29uZmlncy9pcDMwX2RlZmNvbmZpZzo0ODpDT05GSUdfSVBWNl9NUk9VVEU9eVxuYXJjaC9taXBzL2NvbmZpZ3MvaXAzMF9kZWZjb25maWctNDktQ09ORklHX0lQVjZfUElNU01fVjI9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZz01MT1DT05GSUdfSVBWNl9UVU5ORUw9bVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnOjUyOkNPTkZJR19JUFY2X01ST1VURT15XG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWctNTMtQ09ORklHX0lQVjZfUElNU01fVjI9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWc9NTU9Q09ORklHX0lQVjZfVFVOTkVMPW1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWc6NTY6Q09ORklHX0lQVjZfTVJPVVRFPXlcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWctNTctQ09ORklHX0lQVjZfUElNU01fVjI9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZz01ND1DT05GSUdfSVBWNl9UVU5ORUw9bVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnOjU1OkNPTkZJR19JUFY2X01ST1VURT15XG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX3hwYV9kZWZjb25maWctNTYtQ09ORklHX0lQVjZfUElNU01fVjI9eVxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWc9MTE3PUNPTkZJR19JUFY2X1NVQlRSRUVTPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWc6MTE4OkNPTkZJR19JUFY2X01ST1VURT15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnLTExOS1DT05GSUdfSVBWNl9QSU1TTV9WMj15XG4tLVxuZHJpdmVycy9uZXQvdnJmLmM9MTUxNz1zdGF0aWMgaW50IHZyZl9hZGRfZmliX3J1bGVzKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdnJmLmMtMTUzNC1cbmRyaXZlcnMvbmV0L3ZyZi5jOjE1MzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFUylcbmRyaXZlcnMvbmV0L3ZyZi5jLTE1MzYtXHRlcnIgPSB2cmZfZmliX3J1bGUoZGV2LCBSVE5MX0ZBTUlMWV9JUDZNUiwgdHJ1ZSk7XG4tLVxuZHJpdmVycy9uZXQvdnJmLmMtMTU0Mi1cbmRyaXZlcnMvbmV0L3ZyZi5jOjE1NDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFUylcbmRyaXZlcnMvbmV0L3ZyZi5jLTE1NDQtaXA2bXJfZXJyOlxuLS1cbmluY2x1ZGUvbGludXgvaXB2Ni5oPTEzPXN0cnVjdCBpcHY2X2RldmNvbmYge1xuLS1cbmluY2x1ZGUvbGludXgvaXB2Ni5oLTYyLSNlbmRpZlxuaW5jbHVkZS9saW51eC9pcHY2Lmg6NjM6I2lmZGVmIENPTkZJR19JUFY2X01ST1VURVxuaW5jbHVkZS9saW51eC9pcHY2LmgtNjQtXHRhdG9taWNfdFx0bWNfZm9yd2FyZGluZztcbi0tXG5pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaC0xMy1cbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oOjE0OiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVcbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oLTE1LXN0YXRpYyBpbmxpbmUgaW50IGlwNl9tcm91dGVfb3B0KGludCBvcHQpXG4tLVxuaW5jbHVkZS9saW51eC9tcm91dGU2Lmg9MjY9c3RydWN0IHNvY2s7XG5pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaC0yNy1cbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oOjI4OiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVcbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oLTI5LWV4dGVybiBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICosIGludCwgc29ja3B0cl90LCB1bnNpZ25lZCBpbnQpO1xuLS1cbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oPTY4PXN0YXRpYyBpbmxpbmUgdm9pZCBpcDZfbXJfY2xlYW51cCh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oLTczLVxuaW5jbHVkZS9saW51eC9tcm91dGU2Lmg6NzQ6I2lmZGVmIENPTkZJR19JUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oLTc1LWJvb2wgaXA2bXJfcnVsZV9kZWZhdWx0KGNvbnN0IHN0cnVjdCBmaWJfcnVsZSAqcnVsZSk7XG4tLVxuaW5jbHVkZS9saW51eC9tcm91dGU2Lmg9MTA0PWV4dGVybiBpbnQgaXA2bXJfZ2V0X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaC0xMDYtXG5pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaDoxMDc6I2lmZGVmIENPTkZJR19JUFY2X01ST1VURVxuaW5jbHVkZS9saW51eC9tcm91dGU2LmgtMTA4LWJvb2wgbXJvdXRlNl9pc19zb2NrZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi0tXG5pbmNsdWRlL25ldC9uZXRucy9pcHY2Lmg9NjY9c3RydWN0IG5ldG5zX2lwdjYge1xuLS1cbmluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaC0xMDctXG5pbmNsdWRlL25ldC9uZXRucy9pcHY2Lmg6MTA4OiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaDoxMDk6I2lmbmRlZiBDT05GSUdfSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5pbmNsdWRlL25ldC9uZXRucy9pcHY2LmgtMTEwLVx0c3RydWN0IG1yX3RhYmxlXHRcdCptcnQ2O1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaD02ODI9ZW51bSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oLTcwMi0jZGVmaW5lIFJUTUdSUF9JUFY2X0lGQUREUlx0MHgxMDBcbmluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaDo3MDM6I2RlZmluZSBSVE1HUlBfSVBWNl9NUk9VVEVcdDB4MjAwXG5pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgtNzA0LSNkZWZpbmUgUlRNR1JQX0lQVjZfUk9VVEVcdDB4NDAwXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oPTcxND1lbnVtIHJ0bmV0bGlua19ncm91cHMge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaC03MzQtI2RlZmluZSBSVE5MR1JQX0lQVjZfSUZBRERSXHRSVE5MR1JQX0lQVjZfSUZBRERSXG5pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmg6NzM1Olx0UlROTEdSUF9JUFY2X01ST1VURSxcbmluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaDo3MzY6I2RlZmluZSBSVE5MR1JQX0lQVjZfTVJPVVRFXHRSVE5MR1JQX0lQVjZfTVJPVVRFXG5pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgtNzM3LVx0UlROTEdSUF9JUFY2X1JPVVRFLFxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaC03NzQtI2RlZmluZSBSVE5MR1JQX0lQVjRfTVJPVVRFX1JcdFJUTkxHUlBfSVBWNF9NUk9VVEVfUlxuaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oOjc3NTpcdFJUTkxHUlBfSVBWNl9NUk9VVEVfUixcbmluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaDo3NzY6I2RlZmluZSBSVE5MR1JQX0lQVjZfTVJPVVRFX1JcdFJUTkxHUlBfSVBWNl9NUk9VVEVfUlxuaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oLTc3Ny1cdFJUTkxHUlBfTkVYVEhPUCxcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz0xMTA9c3RhdGljIHU4IGJhdGFkdl9tY2FzdF9tbGFfcnRyX2ZsYWdzX21lc2hpZl9nZXRfaXB2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEzMC0gKi9cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEzMTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9NUk9VVEUpXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMzItc3RhdGljIHU4IGJhdGFkdl9tY2FzdF9tbGFfcnRyX2ZsYWdzX21lc2hpZl9nZXRfaXB2NihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTcxMDY9c3RhdGljIGludCBydG5ldGxpbmtfYmluZChzdHJ1Y3QgbmV0ICpuZXQsIGludCBncm91cClcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03MTA5LVx0Y2FzZSBSVE5MR1JQX0lQVjRfTVJPVVRFX1I6XG5uZXQvY29yZS9ydG5ldGxpbmsuYzo3MTEwOlx0Y2FzZSBSVE5MR1JQX0lQVjZfTVJPVVRFX1I6XG5uZXQvY29yZS9ydG5ldGxpbmsuYy03MTExLVx0XHRpZiAoIW5zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKVxuLS1cbm5ldC9pcHY0L0tjb25maWc9MjE2PWNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXG5uZXQvaXB2NC9LY29uZmlnLTIxNy1cdGJvb2xcbm5ldC9pcHY0L0tjb25maWc6MjE4Olx0ZGVwZW5kcyBvbiBJUF9NUk9VVEUgfHwgSVBWNl9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjE5LVxuLS1cbm5ldC9pcHY2L0tjb25maWc9MjQzPWNvbmZpZyBJUFY2X1NVQlRSRUVTXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNTYtXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcbm5ldC9pcHY2L0tjb25maWctMjU4LVx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjY0LVxubmV0L2lwdjYvS2NvbmZpZzoyNjU6Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yNjYtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1wmIzM0O1xubmV0L2lwdjYvS2NvbmZpZzoyNjc6XHRkZXBlbmRzIG9uIElQVjZfTVJPVVRFXG5uZXQvaXB2Ni9LY29uZmlnLTI2OC1cdHNlbGVjdCBGSUJfUlVMRVNcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTI3OT1jb25maWcgSVBWNl9QSU1TTV9WMlxubmV0L2lwdjYvS2NvbmZpZy0yODAtXHRib29sIFwmIzM0O0lQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFwmIzM0O1xubmV0L2lwdjYvS2NvbmZpZzoyODE6XHRkZXBlbmRzIG9uIElQVjZfTVJPVVRFXG5uZXQvaXB2Ni9LY29uZmlnLTI4Mi1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9NYWtlZmlsZT0xNT1pcHY2LSQoQ09ORklHX1NZU0NUTCkgJiM0Mzs9IHN5c2N0bF9uZXRfaXB2Ni5vXG5uZXQvaXB2Ni9NYWtlZmlsZToxNjppcHY2LSQoQ09ORklHX0lQVjZfTVJPVVRFKSAmIzQzOz0gaXA2bXIub1xubmV0L2lwdjYvTWFrZWZpbGUtMTctXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz01MDg9c3RhdGljIGludCBpbmV0Nl9uZXRjb25mX21zZ3NpemVfZGV2Y29uZihpbnQgdHlwZSlcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTUxOC1cdFx0c2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoNCk7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjUxOTojaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTUyMC1cdGlmIChhbGwgfHwgdHlwZSA9PSBORVRDT05GQV9NQ19GT1JXQVJESU5HKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NTMyPXN0YXRpYyBpbnQgaW5ldDZfbmV0Y29uZl9maWxsX2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlmaW5kZXgsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy01NjEtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xubmV0L2lwdjYvYWRkcmNvbmYuYzo1NjI6I2lmZGVmIENPTkZJR19JUFY2X01ST1VURVxubmV0L2lwdjYvYWRkcmNvbmYuYy01NjMtXHRpZiAoKGFsbCB8fCB0eXBlID09IE5FVENPTkZBX01DX0ZPUldBUkRJTkcpIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NTY2Mj1zdGF0aWMgdm9pZCBpcHY2X3N0b3JlX2RldmNvbmYoY29uc3Qgc3RydWN0IGlwdjZfZGV2Y29uZiAqY25mLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNTcxNS0jZW5kaWZcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTcxNjojaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3MTctXHRhcnJheVtERVZDT05GX01DX0ZPUldBUkRJTkddID0gYXRvbWljX3JlYWQoXHUwMDI2Y25mLVx1MDAzZW1jX2ZvcndhcmRpbmcpO1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9Njg2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBhZGRyY29uZl9zeXNjdGxbXSA9IHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcxMzEtI2VuZGlmXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjcxMzI6I2lmZGVmIENPTkZJR19JUFY2X01ST1VURVxubmV0L2lwdjYvYWRkcmNvbmYuYy03MTMzLVx0e1xuLS1cbm5ldC9pcHY2L2lwNl9pbnB1dC5jPTU1ND1pbnQgaXA2X21jX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaXA2X2lucHV0LmMtNTc2LVxubmV0L2lwdjYvaXA2X2lucHV0LmM6NTc3OiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVcbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTU3OC1cdC8qXG4tLVxubmV0L2lwdjYvaXA2bXIuYz0xMTA9c3RhdGljIHZvaWQgaXBtcl9leHBpcmVfcHJvY2VzcyhzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG5uZXQvaXB2Ni9pcDZtci5jLTExMS1cbm5ldC9pcHY2L2lwNm1yLmM6MTEyOiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9pcDZtci5jLTExMy0jZGVmaW5lIGlwNm1yX2Zvcl9lYWNoX3RhYmxlKG1ydCwgbmV0KSBcXFxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9NDM1PXN0YXRpYyB2b2lkIGlwNm1yX25ld190YWJsZV9zZXQoc3RydWN0IG1yX3RhYmxlICptcnQsXG4tLVxubmV0L2lwdjYvaXA2bXIuYy00Mzcte1xubmV0L2lwdjYvaXA2bXIuYzo0Mzg6I2lmZGVmIENPTkZJR19JUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY2L2lwNm1yLmMtNDM5LVx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2bXJ0LVx1MDAzZWxpc3QsIFx1MDAyNm5ldC1cdTAwM2VpcHY2Lm1yNl90YWJsZXMpO1xuLS1cbm5ldC9pcHY2L2lwNm1yLmM9MTc5OD1pbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xOTU4LSNlbmRpZlxubmV0L2lwdjYvaXA2bXIuYzoxOTU5OiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9pcDZtci5jLTE5NjAtXHRjYXNlIE1SVDZfVEFCTEU6XG4tLVxubmV0L2lwdjYvaXA2bXIuYz0yNzY5PXN0YXRpYyB2b2lkIG1yNl9uZXRsaW5rX2V2ZW50KHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3QgbWZjNl9jYWNoZSAqbWZjLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMjc4My1cbm5ldC9pcHY2L2lwNm1yLmM6Mjc4NDpcdHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0lQVjZfTVJPVVRFLCBOVUxMLCBHRlBfQVRPTUlDKTtcbm5ldC9pcHY2L2lwNm1yLmMtMjc4NS1cdHJldHVybjtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTI3ODgtXHRrZnJlZV9za2Ioc2tiKTtcbm5ldC9pcHY2L2lwNm1yLmM6Mjc4OTpcdHJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfSVBWNl9NUk9VVEUsIGVycik7XG5uZXQvaXB2Ni9pcDZtci5jLTI3OTAtfVxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9MjgwOT1zdGF0aWMgdm9pZCBtcnQ2bXNnX25ldGxpbmtfZXZlbnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBza19idWZmICpwa3QpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0yODQ2LVxubmV0L2lwdjYvaXA2bXIuYzoyODQ3Olx0cnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfSVBWNl9NUk9VVEVfUiwgTlVMTCwgR0ZQX0FUT01JQyk7XG5uZXQvaXB2Ni9pcDZtci5jLTI4NDgtXHRyZXR1cm47XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0yODUzLVx0a2ZyZWVfc2tiKHNrYik7XG5uZXQvaXB2Ni9pcDZtci5jOjI4NTQ6XHRydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfTVJPVVRFX1IsIC1FTk9CVUZTKTtcbm5ldC9pcHY2L2lwNm1yLmMtMjg1NS19XG4tLVxubmV0L2lwdjYvcmF3LmM9MTExNT1zdGF0aWMgaW50IHJhd3Y2X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxuLS1cbm5ldC9pcHY2L3Jhdy5jLTExMzUtXHRkZWZhdWx0OlxubmV0L2lwdjYvcmF3LmM6MTEzNjojaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFXG5uZXQvaXB2Ni9yYXcuYy0xMTM3LVx0XHRyZXR1cm4gaXA2bXJfaW9jdGwoc2ssIGNtZCwga2FyZyk7XG4tLVxubmV0L2lwdjYvcmF3LmM9MTE0NT1zdGF0aWMgaW50IGNvbXBhdF9yYXd2Nl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbm5ldC9pcHY2L3Jhdy5jLTExNTEtXHRkZWZhdWx0OlxubmV0L2lwdjYvcmF3LmM6MTE1MjojaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFXG5uZXQvaXB2Ni9yYXcuYy0xMTUzLVx0XHRyZXR1cm4gaXA2bXJfY29tcGF0X2lvY3RsKHNrLCBjbWQsIGNvbXBhdF9wdHIoYXJnKSk7XG4tLVxubmV0L2lwdjYvcm91dGUuYz01Nzc0PXN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvcm91dGUuYy01ODM5LVx0aWYgKGlpZikge1xubmV0L2lwdjYvcm91dGUuYzo1ODQwOiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVcbm5ldC9pcHY2L3JvdXRlLmMtNTg0MS1cdFx0aWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoXHUwMDI2cnQ2X2RzdC1cdTAwM2VhZGRyKSkge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaD02ODI9ZW51bSB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oLTcwMi0jZGVmaW5lIFJUTUdSUF9JUFY2X0lGQUREUlx0MHgxMDBcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaDo3MDM6I2RlZmluZSBSVE1HUlBfSVBWNl9NUk9VVEVcdDB4MjAwXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgtNzA0LSNkZWZpbmUgUlRNR1JQX0lQVjZfUk9VVEVcdDB4NDAwXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oPTcxND1lbnVtIHJ0bmV0bGlua19ncm91cHMge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaC03MzQtI2RlZmluZSBSVE5MR1JQX0lQVjZfSUZBRERSXHRSVE5MR1JQX0lQVjZfSUZBRERSXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmg6NzM1Olx0UlROTEdSUF9JUFY2X01ST1VURSxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaDo3MzY6I2RlZmluZSBSVE5MR1JQX0lQVjZfTVJPVVRFXHRSVE5MR1JQX0lQVjZfTVJPVVRFXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgtNzM3LVx0UlROTEdSUF9JUFY2X1JPVVRFLFxuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaC03NzQtI2RlZmluZSBSVE5MR1JQX0lQVjRfTVJPVVRFX1JcdFJUTkxHUlBfSVBWNF9NUk9VVEVfUlxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oOjc3NTpcdFJUTkxHUlBfSVBWNl9NUk9VVEVfUixcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaDo3NzY6I2RlZmluZSBSVE5MR1JQX0lQVjZfTVJPVVRFX1JcdFJUTkxHUlBfSVBWNl9NUk9VVEVfUlxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oLTc3Ny1cdFJUTkxHUlBfTkVYVEhPUCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnPTQzPUNPTkZJR19JUFY2X0lPQU02X0xXVFVOTkVMPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWc6NDQ6Q09ORklHX0lQVjZfTVJPVVRFPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWctNDUtQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm9yd2FyZGluZy9jb25maWc9MTI9Q09ORklHX0lQVjZfR1JFPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3J3YXJkaW5nL2NvbmZpZzoxMzpDT05GSUdfSVBWNl9NUk9VVEU9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvcndhcmRpbmcvY29uZmlnOjE0OkNPTkZJR19JUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVM9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvcndhcmRpbmcvY29uZmlnLTE1LUNPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUz15XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1MTYKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBhIGZldyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseS4gVGhlIGNvcmUgbmVjZXNzaXRpZXMgc2VlbSB0byBiZSBgSVBWNl9NUk9VVEVgIGFuZCBgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTYC4gSWRlYWxseSwgZm9yIHJvYnVzdCB0ZXN0aW5nIG9mIGBwaW02X3JjdmAsIEkgc2hvdWxkIGFsc28gaW5jbHVkZSBgSVBWNl9QSU1TTV9WMmAgYXMgd2VsbC4gU2luY2UgdGhpcyBpbnZvbHZlcyBpcG1yX2Jhc2UuYyBtb2RpZmljYXRpb25zLCBJIGhhdmUgdG8gZW5hYmxlIGJvdGggYElQX01ST1VURWAgYW5kIGBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTYCB0b28uIFJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgYnkgZG91YmxlLWNoZWNraW5nIHRob3NlIGBJUF9NUk9VVEVgIGNvbmZpZ3VyYXRpb25zIHRvIGNvbmZpcm0gdGhleSYjMzk7cmUgZW5hYmxlZCBhcyBleHBlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9NUk9VVEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnPTMwPUNPTkZJR19JUF9QTlBfQk9PVFA9eVxuYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnOjMxOkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnLTMyLUNPTkZJR19JUF9QSU1TTV9WMT15XG4tLVxuYXJjaC9hcm0vY29uZmlncy9rZXlzdG9uZV9kZWZjb25maWc9NTk9Q09ORklHX05FVF9JUEdSRT15XG5hcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZzo2MDpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gvYXJtL2NvbmZpZ3Mva2V5c3RvbmVfZGVmY29uZmlnOjYxOkNPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcbmFyY2gvYXJtL2NvbmZpZ3Mva2V5c3RvbmVfZGVmY29uZmlnLTYyLUNPTkZJR19JUF9QSU1TTV9WMj15XG4tLVxuYXJjaC9hcm0vY29uZmlncy9uaGs4ODE1X2RlZmNvbmZpZz0zMD1DT05GSUdfTkVUX0lQSVA9eVxuYXJjaC9hcm0vY29uZmlncy9uaGs4ODE1X2RlZmNvbmZpZzozMTpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gvYXJtL2NvbmZpZ3MvbmhrODgxNV9kZWZjb25maWctMzItIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0XG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz0xMzA9Q09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzoxMzE6Q09ORklHX0lQX01ST1VURT15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjEzMjpDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUz15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTEzMy1DT05GSUdfSVBfUElNU01fVjE9eVxuLS1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9MTQ2PUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6MTQ3OkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzoxNDg6Q09ORklHX0lQX01ST1VURV9NVUxUSVBMRV9UQUJMRVM9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0xNDktQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9iY200N3h4X2RlZmNvbmZpZz0xOT1DT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXlcbmFyY2gvbWlwcy9jb25maWdzL2JjbTQ3eHhfZGVmY29uZmlnOjIwOkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9taXBzL2NvbmZpZ3MvYmNtNDd4eF9kZWZjb25maWc6MjE6Q09ORklHX0lQX01ST1VURV9NVUxUSVBMRV9UQUJMRVM9eVxuYXJjaC9taXBzL2NvbmZpZ3MvYmNtNDd4eF9kZWZjb25maWctMjItQ09ORklHX1NZTl9DT09LSUVTPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnPTQ0PUNPTkZJR19JUF9QTlBfQk9PVFA9eVxuYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZzo0NTpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWctNDYtQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9ibWlwc19zdGJfZGVmY29uZmlnPTYxPUNPTkZJR19JUF9QTlBfUkFSUD15XG5hcmNoL21pcHMvY29uZmlncy9ibWlwc19zdGJfZGVmY29uZmlnOjYyOkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9taXBzL2NvbmZpZ3MvYm1pcHNfc3RiX2RlZmNvbmZpZy02My1DT05GSUdfSVBfUElNU01fVjE9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2Nhdml1bV9vY3Rlb25fZGVmY29uZmlnPTM5PUNPTkZJR19JUF9QTlBfUkFSUD15XG5hcmNoL21pcHMvY29uZmlncy9jYXZpdW1fb2N0ZW9uX2RlZmNvbmZpZzo0MDpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gvbWlwcy9jb25maWdzL2Nhdml1bV9vY3Rlb25fZGVmY29uZmlnLTQxLUNPTkZJR19JUF9QSU1TTV9WMT15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvbGVtb3RlMmZfZGVmY29uZmlnPTQwPUNPTkZJR19ORVRfSVBJUD1tXG5hcmNoL21pcHMvY29uZmlncy9sZW1vdGUyZl9kZWZjb25maWc6NDE6Q09ORklHX0lQX01ST1VURT15XG5hcmNoL21pcHMvY29uZmlncy9sZW1vdGUyZl9kZWZjb25maWctNDItQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWc9MzY9Q09ORklHX05FVF9JUElQPW1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZzozNzpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZy0zOC1DT05GSUdfSVBfUElNU01fVjE9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWc9NDA9Q09ORklHX05FVF9JUElQPW1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWc6NDE6Q09ORklHX0lQX01ST1VURT15XG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9rdm1fZGVmY29uZmlnLTQyLUNPTkZJR19JUF9QSU1TTV9WMT15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfcWVtdV8zMnI2X2RlZmNvbmZpZz0zNT1DT05GSUdfTkVUX0lQSVA9bVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfcWVtdV8zMnI2X2RlZmNvbmZpZzozNjpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX3FlbXVfMzJyNl9kZWZjb25maWctMzctQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YWFwcnBfZGVmY29uZmlnPTM3PUNPTkZJR19ORVRfSVBJUD1tXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YWFwcnBfZGVmY29uZmlnOjM4OkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFhcHJwX2RlZmNvbmZpZy0zOS1DT05GSUdfSVBfUElNU01fVjE9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhc212cF9kZWZjb25maWc9Mzg9Q09ORklHX05FVF9JUElQPW1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhc212cF9kZWZjb25maWc6Mzk6Q09ORklHX0lQX01ST1VURT15XG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXNtdnBfZGVmY29uZmlnLTQwLUNPTkZJR19JUF9QSU1TTV9WMT15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFzbXZwX2V2YV9kZWZjb25maWc9Mzk9Q09ORklHX05FVF9JUElQPW1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhc212cF9ldmFfZGVmY29uZmlnOjQwOkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFzbXZwX2V2YV9kZWZjb25maWctNDEtQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX2RlZmNvbmZpZz0zNj1DT05GSUdfTkVUX0lQSVA9bVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF9kZWZjb25maWc6Mzc6Q09ORklHX0lQX01ST1VURT15XG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX2RlZmNvbmZpZy0zOC1DT05GSUdfSVBfUElNU01fVjE9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZz0zOT1DT05GSUdfTkVUX0lQSVA9bVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnOjQwOkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnLTQxLUNPTkZJR19JUF9QSU1TTV9WMT15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWc9NTE9Q09ORklHX05FVF9JUElQPW1cbmFyY2gvbWlwcy9jb25maWdzL210eDFfZGVmY29uZmlnOjUyOkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWctNTMtQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9xaV9sYjYwX2RlZmNvbmZpZz0yOD1DT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15XG5hcmNoL21pcHMvY29uZmlncy9xaV9sYjYwX2RlZmNvbmZpZzoyOTpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gvbWlwcy9jb25maWdzL3FpX2xiNjBfZGVmY29uZmlnOjMwOkNPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcbmFyY2gvbWlwcy9jb25maWdzL3FpX2xiNjBfZGVmY29uZmlnLTMxLSMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnPTI3PUNPTkZJR19ORVRfSVBJUD1tXG5hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWc6Mjg6Q09ORklHX0lQX01ST1VURT15XG5hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWctMjktQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9yczkwX2RlZmNvbmZpZz01MD1DT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15XG5hcmNoL21pcHMvY29uZmlncy9yczkwX2RlZmNvbmZpZzo1MTpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gvbWlwcy9jb25maWdzL3JzOTBfZGVmY29uZmlnOjUyOkNPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcbmFyY2gvbWlwcy9jb25maWdzL3JzOTBfZGVmY29uZmlnLTUzLSMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvcnQzMDV4X2RlZmNvbmZpZz0zND1DT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15XG5hcmNoL21pcHMvY29uZmlncy9ydDMwNXhfZGVmY29uZmlnOjM1OkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9taXBzL2NvbmZpZ3MvcnQzMDV4X2RlZmNvbmZpZzozNjpDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUz15XG5hcmNoL21pcHMvY29uZmlncy9ydDMwNXhfZGVmY29uZmlnLTM3LUNPTkZJR19TWU5fQ09PS0lFUz15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWc9MzY9Q09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eVxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWc6Mzc6Q09ORklHX0lQX01ST1VURT15XG5hcmNoL21pcHMvY29uZmlncy94d2F5X2RlZmNvbmZpZzozODpDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUz15XG5hcmNoL21pcHMvY29uZmlncy94d2F5X2RlZmNvbmZpZy0zOS1DT05GSUdfU1lOX0NPT0tJRVM9eVxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvZ2VfaW1wM2FfZGVmY29uZmlnPTU0PUNPTkZJR19ORVRfSVBJUD1tXG5hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2dlX2ltcDNhX2RlZmNvbmZpZzo1NTpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvZ2VfaW1wM2FfZGVmY29uZmlnLTU2LUNPTkZJR19JUF9QSU1TTV9WMT15XG4tLVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZjb25maWc9NTA9Q09ORklHX05FVF9JUElQPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgveGVzX21wYzg1eHhfZGVmY29uZmlnOjUxOkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZjb25maWctNTItQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL3Bvd2VycGMvY29uZmlncy9mc2wtZW1iLW5vbmh3LmNvbmZpZz01OD1DT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL2ZzbC1lbWItbm9uaHcuY29uZmlnOjU5OkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZnNsLWVtYi1ub25ody5jb25maWctNjAtQ09ORklHX0lQX01VTFRJQ0FTVD15XG4tLVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZz05MD1DT05GSUdfTkVUX0lQSVA9bVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZzo5MTpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWctOTItQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9MTQ1PUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXlcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzoxNDY6Q09ORklHX0lQX01ST1VURT15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MTQ3OkNPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy0xNDgtQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9MTM2PUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXlcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzoxMzc6Q09ORklHX0lQX01ST1VURT15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6MTM4OkNPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy0xMzktQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL3NoL2NvbmZpZ3Mvc2U3NzEyX2RlZmNvbmZpZz0zOD1DT05GSUdfSVBfUE5QX0JPT1RQPXlcbmFyY2gvc2gvY29uZmlncy9zZTc3MTJfZGVmY29uZmlnOjM5OkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9zaC9jb25maWdzL3NlNzcxMl9kZWZjb25maWctNDAtQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZz0zNz1DT05GSUdfSVBfUE5QX0RIQ1A9eVxuYXJjaC9zaC9jb25maWdzL3NlNzcyMV9kZWZjb25maWc6Mzg6Q09ORklHX0lQX01ST1VURT15XG5hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZy0zOS1DT05GSUdfSVBfUElNU01fVjE9eVxuLS1cbmFyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWc9NDE9Q09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eVxuYXJjaC9zaC9jb25maWdzL3RpdGFuX2RlZmNvbmZpZzo0MjpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWctNDMtQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL3NwYXJjL2NvbmZpZ3Mvc3BhcmM2NF9kZWZjb25maWc9Mzk9Q09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eVxuYXJjaC9zcGFyYy9jb25maWdzL3NwYXJjNjRfZGVmY29uZmlnOjQwOkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9zcGFyYy9jb25maWdzL3NwYXJjNjRfZGVmY29uZmlnLTQxLUNPTkZJR19JUF9QSU1TTV9WMT15XG4tLVxuYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZz03Mz1DT05GSUdfSVBfUE5QX1JBUlA9eVxuYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZzo3NDpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWctNzUtQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWc9NzQ9Q09ORklHX0lQX1BOUF9SQVJQPXlcbmFyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZzo3NTpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZy03Ni1DT05GSUdfSVBfUElNU01fVjE9eVxuLS1cbmRyaXZlcnMvbmV0L3ZyZi5jPTE1MTc9c3RhdGljIGludCB2cmZfYWRkX2ZpYl9ydWxlcyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3ZyZi5jLTE1MjgtXG5kcml2ZXJzL25ldC92cmYuYzoxNTI5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTKVxuZHJpdmVycy9uZXQvdnJmLmMtMTUzMC1cdGVyciA9IHZyZl9maWJfcnVsZShkZXYsIFJUTkxfRkFNSUxZX0lQTVIsIHRydWUpO1xuLS1cbmRyaXZlcnMvbmV0L3ZyZi5jLTE1NDctXG5kcml2ZXJzL25ldC92cmYuYzoxNTQ4OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTKVxuZHJpdmVycy9uZXQvdnJmLmMtMTU0OS1pcG1yX2Vycjpcbi0tXG5pbmNsdWRlL2xpbnV4L21yb3V0ZS5oLTEyLVxuaW5jbHVkZS9saW51eC9tcm91dGUuaDoxMzojaWZkZWYgQ09ORklHX0lQX01ST1VURVxuaW5jbHVkZS9saW51eC9tcm91dGUuaC0xNC1zdGF0aWMgaW5saW5lIGludCBpcF9tcm91dGVfb3B0KGludCBvcHQpXG4tLVxuaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oPTI3Mj1zdGF0aWMgaW5saW5lIGJvb2wgbXJfY2FuX2ZyZWVfdGFibGUoc3RydWN0IG5ldCAqbmV0KVxuLS1cbmluY2x1ZGUvbGludXgvbXJvdXRlX2Jhc2UuaC0yNzYtXG5pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmg6Mjc3OiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFX0NPTU1PTlxuaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oLTI3OC12b2lkIHZpZl9kZXZpY2VfaW5pdChzdHJ1Y3QgdmlmX2RldmljZSAqdixcbi0tXG5pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmg9Mzk3PXN0cnVjdCBtcl9tZmNfaXRlciB7XG4tLVxuaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oLTQwNS1cbmluY2x1ZGUvbGludXgvbXJvdXRlX2Jhc2UuaDo0MDY6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVfQ09NTU9OXG5pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmgtNDA3LXZvaWQgKm1yX3ZpZl9zZXFfaWR4KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3ZpZl9pdGVyICppdGVyLCBsb2ZmX3QgcG9zKTtcbi0tXG5pbmNsdWRlL25ldC9uZXRucy9pcHY0Lmg9NTU9c3RydWN0IG5ldG5zX2lwdjQge1xuLS1cbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaC0yNzUtXG5pbmNsdWRlL25ldC9uZXRucy9pcHY0Lmg6Mjc2OiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXG5pbmNsdWRlL25ldC9uZXRucy9pcHY0Lmg6Mjc3OiNpZm5kZWYgQ09ORklHX0lQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaC0yNzgtXHRzdHJ1Y3QgbXJfdGFibGUgX19yY3VcdCptcnQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZz0yMDc9Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1Rcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTIxNS1cbm5ldC9pcHY0L0tjb25maWc6MjE2OmNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXG5uZXQvaXB2NC9LY29uZmlnLTIxNy1cdGJvb2xcbm5ldC9pcHY0L0tjb25maWc6MjE4Olx0ZGVwZW5kcyBvbiBJUF9NUk9VVEUgfHwgSVBWNl9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjE5LVxubmV0L2lwdjQvS2NvbmZpZzoyMjA6Y29uZmlnIElQX01ST1VURVxubmV0L2lwdjQvS2NvbmZpZy0yMjEtXHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0O1xubmV0L2lwdjQvS2NvbmZpZy0yMjItXHRkZXBlbmRzIG9uIElQX01VTFRJQ0FTVFxubmV0L2lwdjQvS2NvbmZpZzoyMjM6XHRzZWxlY3QgSVBfTVJPVVRFX0NPTU1PTlxubmV0L2lwdjQvS2NvbmZpZy0yMjQtXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0yMzEtXG5uZXQvaXB2NC9LY29uZmlnOjIzMjpjb25maWcgSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjQvS2NvbmZpZy0yMzMtXHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MjM0Olx0ZGVwZW5kcyBvbiBJUF9NUk9VVEUgXHUwMDI2XHUwMDI2IElQX0FEVkFOQ0VEX1JPVVRFUlxubmV0L2lwdjQvS2NvbmZpZy0yMzUtXHRzZWxlY3QgRklCX1JVTEVTXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0yNDY9Y29uZmlnIElQX1BJTVNNX1YxXG5uZXQvaXB2NC9LY29uZmlnLTI0Ny1cdGJvb2wgXCYjMzQ7SVA6IFBJTS1TTSB2ZXJzaW9uIDEgc3VwcG9ydFwmIzM0O1xubmV0L2lwdjQvS2NvbmZpZzoyNDg6XHRkZXBlbmRzIG9uIElQX01ST1VURVxubmV0L2lwdjQvS2NvbmZpZy0yNDktXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0yNTk9Y29uZmlnIElQX1BJTVNNX1YyXG5uZXQvaXB2NC9LY29uZmlnLTI2MC1cdGJvb2wgXCYjMzQ7SVA6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFwmIzM0O1xubmV0L2lwdjQvS2NvbmZpZzoyNjE6XHRkZXBlbmRzIG9uIElQX01ST1VURVxubmV0L2lwdjQvS2NvbmZpZy0yNjItXHRoZWxwXG4tLVxubmV0L2lwdjQvTWFrZWZpbGU9MjI9b2JqLSQoQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUykgJiM0Mzs9IGZpYl9ydWxlcy5vXG5uZXQvaXB2NC9NYWtlZmlsZToyMzpvYmotJChDT05GSUdfSVBfTVJPVVRFKSAmIzQzOz0gaXBtci5vXG5uZXQvaXB2NC9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfSVBfTVJPVVRFX0NPTU1PTikgJiM0Mzs9IGlwbXJfYmFzZS5vXG5uZXQvaXB2NC9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfTkVUX0lQSVApICYjNDM7PSBpcGlwLm9cbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTE2LSNpbmNsdWRlIFx1MDAzY25ldC9zZWN1cmVfc2VxLmhcdTAwM2Vcbm5ldC9pcHY0L2FmX2luZXQuYzoxMTc6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVcbm5ldC9pcHY0L2FmX2luZXQuYy0xMTgtI2luY2x1ZGUgXHUwMDNjbGludXgvbXJvdXRlLmhcdTAwM2Vcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTg4Mj1zdGF0aWMgaW50IF9faW5pdCBpbmV0X2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTk4OC1cdCAqL1xubmV0L2lwdjQvYWZfaW5ldC5jOjE5ODk6I2lmIGRlZmluZWQoQ09ORklHX0lQX01ST1VURSlcbm5ldC9pcHY0L2FmX2luZXQuYy0xOTkwLVx0aWYgKGlwX21yX2luaXQoKSlcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTAxLSNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlcl9pcHY0LmhcdTAwM2Vcbm5ldC9pcHY0L2lnbXAuYzoxMDI6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVcbm5ldC9pcHY0L2lnbXAuYy0xMDMtI2luY2x1ZGUgXHUwMDNjbGludXgvbXJvdXRlLmhcdTAwM2Vcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0zNjc9aW50IGlwX21jX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0zODMtXHRcdGlmIChza19tY19sb29wKHNrKVxubmV0L2lwdjQvaXBfb3V0cHV0LmM6Mzg0OiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0zODUtXHRcdC8qIFNtYWxsIG9wdGltaXphdGlvbjogZG8gbm90IGxvb3BiYWNrIG5vdCBsb2NhbCBmcmFtZXMsXG4tLVxubmV0L2lwdjQvaXBtci5jPTExOD1zdGF0aWMgdm9pZCBpcG1yX2V4cGlyZV9wcm9jZXNzKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbm5ldC9pcHY0L2lwbXIuYy0xMTktXG5uZXQvaXB2NC9pcG1yLmM6MTIwOiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjQvaXBtci5jLTEyMS0jZGVmaW5lIGlwbXJfZm9yX2VhY2hfdGFibGUobXJ0LCBuZXQpXHRcdFx0XHRcdFxcXG4tLVxubmV0L2lwdjQvaXBtci5jPTQwOD1zdGF0aWMgdm9pZCBpcG1yX25ld190YWJsZV9zZXQoc3RydWN0IG1yX3RhYmxlICptcnQsXG4tLVxubmV0L2lwdjQvaXBtci5jLTQxMC17XG5uZXQvaXB2NC9pcG1yLmM6NDExOiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjQvaXBtci5jLTQxMi1cdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNm1ydC1cdTAwM2VsaXN0LCBcdTAwMjZuZXQtXHUwMDNlaXB2NC5tcl90YWJsZXMpO1xuLS1cbm5ldC9pcHY0L2lwbXIuYz0xNDEwPWludCBpcF9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuLS1cbm5ldC9pcHY0L2lwbXIuYy0xNTc4LVx0Y2FzZSBNUlRfVEFCTEU6XG5uZXQvaXB2NC9pcG1yLmM6MTU3OTpcdFx0aWYgKCFJU19CVUlMVElOKENPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTKSkge1xubmV0L2lwdjQvaXBtci5jLTE1ODAtXHRcdFx0cmV0ID0gLUVOT1BST1RPT1BUO1xuLS1cbm5ldC9pcHY0L3Jhdy5jPTg3MT1zdGF0aWMgaW50IHJhd19pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcbi0tXG5uZXQvaXB2NC9yYXcuYy04OTEtXHRkZWZhdWx0OlxubmV0L2lwdjQvcmF3LmM6ODkyOiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXG5uZXQvaXB2NC9yYXcuYy04OTMtXHRcdHJldHVybiBpcG1yX2lvY3RsKHNrLCBjbWQsIGthcmcpO1xuLS1cbm5ldC9pcHY0L3Jhdy5jPTkwMT1zdGF0aWMgaW50IGNvbXBhdF9yYXdfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5uZXQvaXB2NC9yYXcuYy05MDctXHRkZWZhdWx0OlxubmV0L2lwdjQvcmF3LmM6OTA4OiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXG5uZXQvaXB2NC9yYXcuYy05MDktXHRcdHJldHVybiBpcG1yX2NvbXBhdF9pb2N0bChzaywgY21kLCBjb21wYXRfcHRyKGFyZykpO1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTczOT1pcF9yb3V0ZV9pbnB1dF9tYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkcixcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTE3NjktXG5uZXQvaXB2NC9yb3V0ZS5jOjE3NzA6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVcbm5ldC9pcHY0L3JvdXRlLmMtMTc3MS1cdGlmICghaXB2NF9pc19sb2NhbF9tdWx0aWNhc3QoZGFkZHIpIFx1MDAyNlx1MDAyNiBJTl9ERVZfTUZPUldBUkQoaW5fZGV2KSlcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTI0OTE9aXBfcm91dGVfaW5wdXRfcmN1KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjUyNy1cdFx0aWYgKG91clxubmV0L2lwdjQvcm91dGUuYzoyNTI4OiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXG5uZXQvaXB2NC9yb3V0ZS5jLTI1MjktXHRcdFx0fHxcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTI1NTk9c3RhdGljIHN0cnVjdCBydGFibGUgKl9fbWtyb3V0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTI2NjYtXHRcdH1cbm5ldC9pcHY0L3JvdXRlLmM6MjY2NzojaWZkZWYgQ09ORklHX0lQX01ST1VURVxubmV0L2lwdjQvcm91dGUuYy0yNjY4LVx0XHRpZiAodHlwZSA9PSBSVE5fTVVMVElDQVNUKSB7XG4tLVxubmV0L2lwdjQvcm91dGUuYz0yOTQ2PXN0YXRpYyBpbnQgcnRfZmlsbF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIGRzdCwgX19iZTMyIHNyYyxcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTMwNDgtXHRcdGlmIChydF9pc19pbnB1dF9yb3V0ZShydCkpIHtcbm5ldC9pcHY0L3JvdXRlLmM6MzA0OTojaWZkZWYgQ09ORklHX0lQX01ST1VURVxubmV0L2lwdjQvcm91dGUuYy0zMDUwLVx0XHRcdGlmIChpcHY0X2lzX211bHRpY2FzdChkc3QpIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9pcHY2L0tjb25maWc9MjU3PWNvbmZpZyBJUFY2X01ST1VURVxuLS1cbm5ldC9pcHY2L0tjb25maWctMjU5LVx0ZGVwZW5kcyBvbiBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnOjI2MDpcdHNlbGVjdCBJUF9NUk9VVEVfQ09NTU9OXG5uZXQvaXB2Ni9LY29uZmlnLTI2MS1cdGhlbHBcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82ND0xMDY9Q09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NDoxMDc6Q09ORklHX0lQX01ST1VURT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NC0xMDgtQ09ORklHX0lQX01VTFRJQ0FTVD15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL2NvbmZpZy5jb21tb249OTM9Q09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvY29uZmlnLmNvbW1vbjo5NDpDT05GSUdfSVBfTVJPVVRFPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9jb25maWcuY29tbW9uLTk1LUNPTkZJR19JUF9NVUxUSUNBU1Q9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3J3YXJkaW5nL2NvbmZpZz02PUNPTkZJR19EVU1NWT1tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm9yd2FyZGluZy9jb25maWc6NzpDT05GSUdfSVBfTVJPVVRFPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3J3YXJkaW5nL2NvbmZpZzo4OkNPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3J3YXJkaW5nL2NvbmZpZy05LUNPTkZJR19JUF9QSU1TTV9WMT15XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzNjkKCQkJCQkJCW91dHB1dDogMjM2CgkJCQkJCQl0aG91Z2h0czogMTM1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgSVB2NiBNdWx0aWNhc3QgUm91dGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHRhc2tlZCB3aXRoIGFuYWx5emluZyB0aGlzIHBhdGNoLCBhbmQgaGVyZSYjMzk7cyBteSBicmVha2Rvd24uIEZpcnN0IG9mZiwgSSBzZWUgdGhlIGNvcmUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQ6IGBJUFY2X01ST1VURWAsIGBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNgLCBhbmQgYElQVjZfUElNU01fVjJgLiBMZXQmIzM5O3MgY2xhcmlmeSB3aHksIGJlY2F1c2UgdGhlIHBhdGNoIG9ubHkgdG91Y2hlcyBgbmV0L2lwdjYvaXA2bXIuY2AgYW5kIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2AuIGBpcG1yX2Jhc2UuY2AgaXMgY29tcGlsZWQgdW5kZXIgYENPTkZJR19JUF9NUk9VVEVfQ09NTU9OYCwgd2hpY2ggZ2V0cyBlbmFibGVkIHdoZW4gd2UgaGF2ZSBlaXRoZXIgYElQVjZfTVJPVVRFYCBvciBgSVBfTVJPVVRFYC4gU2luY2UgdGhlIHBhdGNoICppc24mIzM5O3QqIHRvdWNoaW5nIElQdjQgc3BlY2lmaWMgcm91dGluZyBjb2RlIChsaWtlIGBuZXQvaXB2NC9pcG1yLmNgKSwgYElQVjZfTVJPVVRFYCBpcyB0aGUgY3JpdGljYWwgY29uZmlnIGhlcmUuIEFuZCBzaW5jZSBtdWx0aXBsZSB0YWJsZXMgYW5kIFBJTXYyIGFyZSByZWxldmFudCBwYXJ0cyBvZiBJUHY2IG11bHRpY2FzdCByb3V0aW5nLCB0aG9zZSBjb25maWd1cmF0aW9ucyBhcmUgYWxzbyBuZWNlc3NhcnkuIFNvLCB5ZXMsIHRoZSBzZXQgaW5jbHVkZXMgYElQVjZfTVJPVVRFYCwgYElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU2AsIGFuZCBgSVBWNl9QSU1TTV9WMmAuCgpKdXN0IHRvIGNvbmZpcm06IGBDT05GSUdfSVBWNl9NUk9VVEVgIGlzIGRlcGVuZGVudCBvbiBgQ09ORklHX0lQVjZgLiBgQ09ORklHX0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU2AgZGVwZW5kcyBvbiBgQ09ORklHX0lQVjZfTVJPVVRFYCBhbmQgc2VsZWN0cyBgQ09ORklHX0ZJQl9SVUxFU2AuIGBDT05GSUdfSVBWNl9QSU1TTV9WMmAgZGVwZW5kcyBvbiBgQ09ORklHX0lQVjZfTVJPVVRFYC4KCk5vdywgZm9jdXNpbmcgb24gdGhlIHN5bWJvbHMuIEkmIzM5O3ZlIGNvbXBpbGVkIGEgbGlzdDogYGlwNl9tcm91dGVfc2V0c29ja29wdGAsIGBpcDZfbXJvdXRlX2dldHNvY2tvcHRgLCBgaXA2bXJfaW9jdGxgLCBgaXA2bXJfY29tcGF0X2lvY3RsYCwgYGlwNl9tcl9pbnB1dGAsIGBpcDZfbXJfb3V0cHV0YCwgYGlwNm1yX3J0bV9nZXRyb3V0ZWAsIGBpcDZtcl9ydG1fZHVtcHJvdXRlYCwgYHBpbTZfcmN2YCwgYW5kIGByZWdfdmlmX3htaXRgLgoKTGV0JiMzOTtzIHZlcmlmeSB0aGVzZSBpbiB0aGUgcGF0Y2ggYW5kIGFsc28gdGhhdCB0aGV5IGFyZSBub3Qgc3RhdGljL2lubGluZWQsIHBlciBpbnN0cnVjdGlvbnMuIGBpcDZfbXJvdXRlX3NldHNvY2tvcHRgIGFuZCBgaXA2X21yb3V0ZV9nZXRzb2Nrb3B0YCBzZWVtIHRvIGJlIGV4cG9ydGVkLCBtZWFuaW5nIGdsb2JhbC4gU2FtZSB3aXRoIGBpcDZtcl9pb2N0bGAgYW5kIGBpcDZtcl9jb21wYXRfaW9jdGxgLiBgaXA2X21yX2lucHV0YCBhbmQgYGlwNl9tcl9vdXRwdXRgIGFsc28gYXBwZWFyIHRvIGJlIGV4cG9ydGVkIGFuZCBnbG9iYWwuCgpOb3csIGBpcDZtcl9ydG1fZ2V0cm91dGVgIGFuZCBgaXA2bXJfcnRtX2R1bXByb3V0ZWAgYXJlIHN0YXRpYyBidXQgcmVnaXN0ZXJlZCBhcyBuZXRsaW5rIGNhbGxiYWNrcy4gVGhhdCBtZWFucyB0aGVpciBhZGRyZXNzZXMgYXJlIGJlaW5nIHRha2VuLCBzbyB0aGV5IHdvbiYjMzk7dCBiZSBpbmxpbmVkLiBgcGltNl9yY3ZgIGlzIGFsc28gc3RhdGljLCBidXQgYSBwcm90b2NvbCBoYW5kbGVyIGFuZCBgcmVnX3ZpZl94bWl0YCBpcyBzdGF0aWMsIGJ1dCBhIG5ldGRldiBvcCAtLSBib3RoIGFyZSBmaW5lLiBUaGF0IG1lYW5zIHdlIGRvbiYjMzk7dCBoYXZlIHRvIGNoYW5nZSB0aGUgbGlzdC4KClNvLCB0aGUgZm9jdXMgc3ltYm9scyBhcmU6IGBpcDZfbXJvdXRlX3NldHNvY2tvcHRgLCBgaXA2X21yb3V0ZV9nZXRzb2Nrb3B0YCwgYGlwNm1yX2lvY3RsYCwgYGlwNm1yX2NvbXBhdF9pb2N0bGAsIGBpcDZfbXJfaW5wdXRgLCBgaXA2X21yX291dHB1dGAsIGBwaW02X3JjdmAsIGByZWdfdmlmX3htaXRgLCBgaXA2bXJfcnRtX2dldHJvdXRlYCwgYW5kIGBpcDZtcl9ydG1fZHVtcHJvdXRlYC4KCkFscmlnaHQsIGxldCYjMzk7cyB2ZXJpZnkgaWYgdGhlIHJlbGV2YW50IHN5bWJvbHMgYXJlIGluIHRoZSBwYXRjaC4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgaXA2bXJfcnRtX2dldHJvdXRlYCBhbmQgYGlwNm1yX3J0bV9kdW1wcm91dGVgIHRvIHVzZSBgaXA2bXJfZ2V0X3RhYmxlX2hvbGRgIGFuZCBgaXA2bXJfcHV0X3RhYmxlYCwgd2hpY2ggaXMgZ29vZC4gQWxzbywgYGlwNl9tcl9pbnB1dGAsIGBpcDZfbXJfb3V0cHV0YCwgYHBpbTZfcmN2YCwgYW5kIGByZWdfdmlmX3htaXRgIGFyZSBtb2RpZmllZC4gTGlrZXdpc2UsIGBpcDZfbXJvdXRlX3NldHNvY2tvcHRgLCBgaXA2X21yb3V0ZV9nZXRzb2Nrb3B0YCwgYGlwNm1yX2lvY3RsYCwgYW5kIGBpcDZtcl9jb21wYXRfaW9jdGxgIGFyZSB1cGRhdGVkLgoKQ2hlY2tpbmcgZm9yIGFueSBtaXNzZWQgZW50cnkgcG9pbnRzLi4uIEFoLCBJIHNlZSB0aGF0IGBtcm91dGU2X2lzX3NvY2tldGAgaXMgbW9kaWZpZWQgYXMgd2VsbCwgYWxvbmcgd2l0aCBgaXA2bXJfc2tfZG9uZWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50IQoKU28sIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgaGVyZSYjMzk7cyBteSBmaW5hbCBsaXN0IG9mIHN5bWJvbHMgdG8gaW5jbHVkZTogYGlwNl9tcm91dGVfc2V0c29ja29wdGAsIGBpcDZfbXJvdXRlX2dldHNvY2tvcHRgLCBgaXA2bXJfaW9jdGxgLCBgaXA2bXJfY29tcGF0X2lvY3RsYCwgYGlwNl9tcl9pbnB1dGAsIGBpcDZfbXJfb3V0cHV0YCwgYHBpbTZfcmN2YCwgYAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfTVJPVVRFJiMzNDssCiAgICAmIzM0O0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtJUFY2X1BJTVNNX1YyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwNl9tcm91dGVfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcDZtcl9pb2N0bCYjMzQ7LAogICAgJiMzNDtpcDZtcl9jb21wYXRfaW9jdGwmIzM0OywKICAgICYjMzQ7aXA2X21yX2lucHV0JiMzNDssCiAgICAmIzM0O2lwNl9tcl9vdXRwdXQmIzM0OywKICAgICYjMzQ7cGltNl9yY3YmIzM0OywKICAgICYjMzQ7cmVnX3ZpZl94bWl0JiMzNDssCiAgICAmIzM0O21yb3V0ZTZfaXNfc29ja2V0JiMzNDssCiAgICAmIzM0O2lwNm1yX3NrX2RvbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyByZWZlcmVuY2UgY291bnRpbmcgdG8gSVB2NiBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZXMgKHN0cnVjdCBtcl90YWJsZSkgdG8gZml4IHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMuIEl0IG1vZGlmaWVzIHZhcmlvdXMgZW50cnkgcG9pbnRzIChzb2NrZXQgb3B0aW9ucywgaW9jdGxzLCBuZXRsaW5rLCBwYWNrZXQgcngvdHgpIHRvIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIHRhYmxlIHdoaWxlIGluIHVzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfTVJPVVRFJiMzNDssCiAgICAmIzM0O0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtJUFY2X1BJTVNNX1YyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwNl9tcm91dGVfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcDZtcl9pb2N0bCYjMzQ7LAogICAgJiMzNDtpcDZtcl9jb21wYXRfaW9jdGwmIzM0OywKICAgICYjMzQ7aXA2X21yX2lucHV0JiMzNDssCiAgICAmIzM0O2lwNl9tcl9vdXRwdXQmIzM0OywKICAgICYjMzQ7cGltNl9yY3YmIzM0OywKICAgICYjMzQ7cmVnX3ZpZl94bWl0JiMzNDssCiAgICAmIzM0O21yb3V0ZTZfaXNfc29ja2V0JiMzNDssCiAgICAmIzM0O2lwNm1yX3NrX2RvbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyByZWZlcmVuY2UgY291bnRpbmcgdG8gSVB2NiBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZXMgKHN0cnVjdCBtcl90YWJsZSkgdG8gZml4IHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMuIEl0IG1vZGlmaWVzIHZhcmlvdXMgZW50cnkgcG9pbnRzIChzb2NrZXQgb3B0aW9ucywgaW9jdGxzLCBuZXRsaW5rLCBwYWNrZXQgcngvdHgpIHRvIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIHRhYmxlIHdoaWxlIGluIHVzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMjo1OTozMS44MDEyMzM0MzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTMwMzMwODEyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2X01ST1VURVwiLFxuICAgIFwiSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXCIsXG4gICAgXCJJUFY2X1BJTVNNX1YyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X21yb3V0ZV9zZXRzb2Nrb3B0XCIsXG4gICAgXCJpcDZfbXJvdXRlX2dldHNvY2tvcHRcIixcbiAgICBcImlwNm1yX2lvY3RsXCIsXG4gICAgXCJpcDZtcl9jb21wYXRfaW9jdGxcIixcbiAgICBcImlwNl9tcl9pbnB1dFwiLFxuICAgIFwiaXA2X21yX291dHB1dFwiLFxuICAgIFwicGltNl9yY3ZcIixcbiAgICBcInJlZ192aWZfeG1pdFwiLFxuICAgIFwibXJvdXRlNl9pc19zb2NrZXRcIixcbiAgICBcImlwNm1yX3NrX2RvbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJlZmVyZW5jZSBjb3VudGluZyB0byBJUHY2IG11bHRpY2FzdCByb3V0aW5nIHRhYmxlcyAoc3RydWN0IG1yX3RhYmxlKSB0byBmaXggcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3Vlcy4gSXQgbW9kaWZpZXMgdmFyaW91cyBlbnRyeSBwb2ludHMgKHNvY2tldCBvcHRpb25zLCBpb2N0bHMsIG5ldGxpbmssIHBhY2tldCByeC90eCkgdG8gaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgdGFibGUgd2hpbGUgaW4gdXNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjI6NTk6MzEuODAxMjQxMTkzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzczMjE2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0ZGI1ZjhkYTA5ZTFhYmQ2MGJiYmVlNTQwNzc3YzRhYzBmMmM3MmQxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDI0IDIyOjU5OjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXJvdXRlX2Jhc2UuaCBiL2luY2x1ZGUvbGludXgvbXJvdXRlX2Jhc2UuaFxcbmluZGV4IDRkNTU4MjdlOTcwNTM3Li41MzZmYTMyNDYyMDI3MyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmhcXG5AQCAtMiw4ICsyLDEwIEBAXFxuICNkZWZpbmUgX19MSU5VWF9NUk9VVEVfQkFTRV9IXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWZjb3VudC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmhhc2h0YWJsZS10eXBlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpbmxvY2suaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvZmliX25vdGlmaWVyLmhcXHUwMDNlXFxuQEAgLTI0Miw2ICsyNDQsOCBAQCBzdHJ1Y3QgbXJfdGFibGVfb3BzIHtcXG4gICogQG1yb3V0ZV9kb19hc3NlcnQ6IFdoZXRoZXIgdG8gaW5mb3JtIHVzZXJzcGFjZSBvbiB3cm9uZyBpbmdyZXNzXFxuICAqIEBtcm91dGVfZG9fcGltOiBXaGV0aGVyIHRvIHJlY2VpdmUgSUdNUCBQSU12MVxcbiAgKiBAbXJvdXRlX3JlZ192aWZfbnVtOiBQSU0tZGV2aWNlIHZpZiBpbmRleFxcbisgKiBAcmVmY250OiBsaWZldGltZSBwaW5zIGZvciB0aGlzIHRhYmxlXFxuKyAqIEBkZXN0cm95X3dvcms6IHByb2Nlc3MtY29udGV4dCBjbGVhbnVwIGJlZm9yZSBmaW5hbCBSQ1UgZnJlZVxcbiAgKi9cXG4gc3RydWN0IG1yX3RhYmxlIHtcXG4gXFx0c3RydWN0IHJjdV93b3JrXFx0XFx0d29yaztcXG5AQCAtMjYxLDYgKzI2NSw4IEBAIHN0cnVjdCBtcl90YWJsZSB7XFxuIFxcdGJvb2xcXHRcXHRcXHRtcm91dGVfZG9fcGltO1xcbiBcXHRib29sXFx0XFx0XFx0bXJvdXRlX2RvX3dydmlmd2hvbGU7XFxuIFxcdGludFxcdFxcdFxcdG1yb3V0ZV9yZWdfdmlmX251bTtcXG4rXFx0cmVmY291bnRfdFxcdFxcdHJlZmNudDtcXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0XFx0ZGVzdHJveV93b3JrO1xcbiB9O1xcbiBcXG4gc3RhdGljIGlubGluZSBib29sIG1yX2Nhbl9mcmVlX3RhYmxlKHN0cnVjdCBuZXQgKm5ldClcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtcl9iYXNlLmMgYi9uZXQvaXB2NC9pcG1yX2Jhc2UuY1xcbmluZGV4IDg2N2IyNGJlZGVkMTEyLi45NzEwNzg5Y2ZhZjk5NCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pcG1yX2Jhc2UuY1xcbisrKyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jXFxuQEAgLTMyLDggKzMyLDEwIEBAIHN0YXRpYyB2b2lkIF9fbXJfZnJlZV90YWJsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4gXFx0c3RydWN0IG1yX3RhYmxlICptcnQgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbXJfdGFibGUsIHdvcmspO1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KTtcXG4gXFxuIFxcdHJobHRhYmxlX2Rlc3Ryb3koXFx1MDAyNm1ydC1cXHUwMDNlbWZjX2hhc2gpO1xcbitcXHRwdXRfbmV0KG5ldCk7XFxuIFxcdGtmcmVlKG1ydCk7XFxuIH1cXG4gXFxuQEAgLTU2LDExICs1OCwxMiBAQCBtcl90YWJsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCxcXG4gXFx0aWYgKCFtcnQpXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiBcXHRtcnQtXFx1MDAzZWlkID0gaWQ7XFxuLVxcdHdyaXRlX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0LCBuZXQpO1xcbitcXHR3cml0ZV9wbmV0KFxcdTAwMjZtcnQtXFx1MDAzZW5ldCwgZ2V0X25ldChuZXQpKTtcXG4gXFxuIFxcdG1ydC1cXHUwMDNlb3BzID0gKm9wcztcXG4gXFx0ZXJyID0gcmhsdGFibGVfaW5pdChcXHUwMDI2bXJ0LVxcdTAwM2VtZmNfaGFzaCwgbXJ0LVxcdTAwM2VvcHMucmh0X3BhcmFtcyk7XFxuIFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0cHV0X25ldChyZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KSk7XFxuIFxcdFxcdGtmcmVlKG1ydCk7XFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuIFxcdH1cXG5AQCAtNzIsNiArNzUsNyBAQCBtcl90YWJsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCxcXG4gXFx0dGltZXJfc2V0dXAoXFx1MDAyNm1ydC1cXHUwMDNlaXBtcl9leHBpcmVfdGltZXIsIGV4cGlyZV9mdW5jLCAwKTtcXG4gXFxuIFxcdG1ydC1cXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtID0gLTE7XFxuK1xcdHJlZmNvdW50X3NldChcXHUwMDI2bXJ0LVxcdTAwM2VyZWZjbnQsIDEpO1xcbiBcXHR0YWJsZV9zZXQobXJ0LCBuZXQpO1xcbiBcXHRyZXR1cm4gbXJ0O1xcbiB9XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jXFxuaW5kZXggNjA0YTU4ODM4OTAxYTcuLjk0YmIwMGJkZmY5OGM4IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNm1yLmNcXG4rKysgYi9uZXQvaXB2Ni9pcDZtci5jXFxuQEAgLTg3LDYgKzg3LDExIEBAIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbXJ0X2NhY2hlcCBfX3JlYWRfbW9zdGx5O1xcbiBzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpO1xcbiBzdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRldl9raWxsX2xpc3QpO1xcbitzdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4rc3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfZ2V0X3RhYmxlX2hvbGQoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpO1xcbitzdGF0aWMgdm9pZCBpcDZtcl9wdXRfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQpO1xcbitzdGF0aWMgdm9pZCBfX2lwNm1yX3B1dF90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZGV2X2tpbGxfbGlzdCk7XFxuIFxcbiBzdGF0aWMgdm9pZCBpcDZfbXJfZm9yd2FyZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbkBAIC0xNzksNyArMTg0LDcgQEAgc3RhdGljIGludCBpcDZtcl9ydWxlX2FjdGlvbihzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsIHN0cnVjdCBmbG93aSAqZmxwLFxcbiBcXG4gXFx0YXJnLVxcdTAwM2V0YWJsZSA9IGZpYl9ydWxlX2dldF90YWJsZShydWxlLCBhcmcpO1xcbiBcXG4tXFx0bXJ0ID0gX19pcDZtcl9nZXRfdGFibGUocnVsZS1cXHUwMDNlZnJfbmV0LCBhcmctXFx1MDAzZXRhYmxlKTtcXG4rXFx0bXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQocnVsZS1cXHUwMDNlZnJfbmV0LCBhcmctXFx1MDAzZXRhYmxlKTtcXG4gXFx0aWYgKCFtcnQpXFxuIFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiBcXHRyZXMtXFx1MDAzZW1ydCA9IG1ydDtcXG5AQCAtMjcxLDcgKzI3Niw4IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2bXJfcnVsZXNfZXhpdF9ydG5sKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtcnQsIG5leHQsIFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYubXI2X3RhYmxlcywgbGlzdCkge1xcbiBcXHRcXHRsaXN0X2RlbF9yY3UoXFx1MDAyNm1ydC1cXHUwMDNlbGlzdCk7XFxuLVxcdFxcdGlwNm1yX2ZyZWVfdGFibGUobXJ0LCBkZXZfa2lsbF9saXN0KTtcXG4rXFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuK1xcdFxcdF9faXA2bXJfcHV0X3RhYmxlKG1ydCwgZGV2X2tpbGxfbGlzdCk7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMzE0LDcgKzMyMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKl9faXA2bXJfZ2V0X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKVxcbiBzdGF0aWMgaW50IGlwNm1yX2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k2ICpmbHA2LFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IG1yX3RhYmxlICoqbXJ0KVxcbiB7XFxuLVxcdCptcnQgPSByY3VfZGVyZWZlcmVuY2UobmV0LVxcdTAwM2VpcHY2Lm1ydDYpO1xcbitcXHQqbXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQobmV0LCBSVDZfVEFCTEVfREZMVCk7XFxuIFxcdGlmICghKm1ydClcXG4gXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuIFxcdHJldHVybiAwO1xcbkBAIC0zNDIsNyArMzQ4LDggQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZtcl9ydWxlc19leGl0X3J0bmwoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobmV0LVxcdTAwM2VpcHY2Lm1ydDYsIDEpO1xcbiBcXG4gXFx0UkNVX0lOSVRfUE9JTlRFUihuZXQtXFx1MDAzZWlwdjYubXJ0NiwgTlVMTCk7XFxuLVxcdGlwNm1yX2ZyZWVfdGFibGUobXJ0LCBkZXZfa2lsbF9saXN0KTtcXG4rXFx0c3luY2hyb25pemVfcmN1KCk7XFxuK1xcdF9faXA2bXJfcHV0X3RhYmxlKG1ydCwgZGV2X2tpbGxfbGlzdCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgaXA2bXJfcnVsZXNfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuQEAgLTM2OCw2ICszNzUsNDQgQEAgc3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfZ2V0X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKVxcbiBcXHRyZXR1cm4gbXJ0O1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9nZXRfdGFibGVfaG9sZChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZClcXG4re1xcbitcXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bXJ0ID0gX19pcDZtcl9nZXRfdGFibGUobmV0LCBpZCk7XFxuK1xcdGlmIChtcnQgXFx1MDAyNlxcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2bXJ0LVxcdTAwM2VyZWZjbnQpKVxcbitcXHRcXHRtcnQgPSBOVUxMO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdHJldHVybiBtcnQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIF9faXA2bXJfcHV0X3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbit7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgKmRldl9raWxsX2xpc3Q7XFxuK1xcdExJU1RfSEVBRChsb2NhbF9kZXZfa2lsbF9saXN0KTtcXG4rXFxuK1xcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZtcnQtXFx1MDAzZXJlZmNudCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmICghbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSkge1xcbitcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZtcnQtXFx1MDAzZWRlc3Ryb3lfd29yayk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0ZGV2X2tpbGxfbGlzdCA9IGhlYWQgPyBoZWFkIDogXFx1MDAyNmxvY2FsX2Rldl9raWxsX2xpc3Q7XFxuK1xcdGlwNm1yX2ZyZWVfdGFibGUobXJ0LCBkZXZfa2lsbF9saXN0KTtcXG4rXFx0aWYgKCFoZWFkKVxcbitcXHRcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KGRldl9raWxsX2xpc3QpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpcDZtcl9wdXRfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQpXFxuK3tcXG4rXFx0X19pcDZtcl9wdXRfdGFibGUobXJ0LCBOVUxMKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBpcDZtcl9oYXNoX2NtcChzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyAqYXJnLFxcbiBcXHRcXHRcXHQgIGNvbnN0IHZvaWQgKnB0cilcXG4ge1xcbkBAIC00MTMsOCArNDU4LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwNm1yX25ld190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZClcXG4gXFx0aWYgKG1ydClcXG4gXFx0XFx0cmV0dXJuIG1ydDtcXG4gXFxuLVxcdHJldHVybiBtcl90YWJsZV9hbGxvYyhuZXQsIGlkLCBcXHUwMDI2aXA2bXJfbXJfdGFibGVfb3BzLFxcbi1cXHRcXHRcXHQgICAgICBpcG1yX2V4cGlyZV9wcm9jZXNzLCBpcDZtcl9uZXdfdGFibGVfc2V0KTtcXG4rXFx0bXJ0ID0gbXJfdGFibGVfYWxsb2MobmV0LCBpZCwgXFx1MDAyNmlwNm1yX21yX3RhYmxlX29wcyxcXG4rXFx0XFx0XFx0ICAgICBpcG1yX2V4cGlyZV9wcm9jZXNzLCBpcDZtcl9uZXdfdGFibGVfc2V0KTtcXG4rXFx0aWYgKCFJU19FUlIobXJ0KSlcXG4rXFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZtcnQtXFx1MDAzZWRlc3Ryb3lfd29yaywgaXA2bXJfZnJlZV90YWJsZV93b3JrKTtcXG4rXFxuK1xcdHJldHVybiBtcnQ7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGlwNm1yX2ZyZWVfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQsXFxuQEAgLTQyMyw4ICs0NzIsNiBAQCBzdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KTtcXG4gXFx0TElTVF9IRUFEKGlwNm1yX2Rldl9raWxsX2xpc3QpO1xcbiBcXG4tXFx0V0FSTl9PTl9PTkNFKCFtcl9jYW5fZnJlZV90YWJsZShuZXQpKTtcXG4tXFxuIFxcdHRpbWVyX3NodXRkb3duX3N5bmMoXFx1MDAyNm1ydC1cXHUwMDNlaXBtcl9leHBpcmVfdGltZXIpO1xcbiBcXHRtcm91dGVfY2xlYW5fdGFibGVzKG1ydCwgTVJUNl9GTFVTSF9NSUZTIHwgTVJUNl9GTFVTSF9NSUZTX1NUQVRJQyB8XFxuIFxcdFxcdFxcdCAgICBNUlQ2X0ZMVVNIX01GQyB8IE1SVDZfRkxVU0hfTUZDX1NUQVRJQyxcXG5AQCAtNDM2LDYgKzQ4MywxNyBAQCBzdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbiBcXHRsaXN0X3NwbGljZShcXHUwMDI2aXA2bXJfZGV2X2tpbGxfbGlzdCwgZGV2X2tpbGxfbGlzdCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGlwNm1yX2ZyZWVfdGFibGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IG1yX3RhYmxlICptcnQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG1yX3RhYmxlLCBkZXN0cm95X3dvcmspO1xcbitcXHRMSVNUX0hFQUQoZGV2X2tpbGxfbGlzdCk7XFxuK1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFx0aXA2bXJfZnJlZV90YWJsZShtcnQsIFxcdTAwMjZkZXZfa2lsbF9saXN0KTtcXG4rXFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShcXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK31cXG4rXFxuICNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbiAvKiBUaGUgL3Byb2MgaW50ZXJmYWNlcyB0byBtdWx0aWNhc3Qgcm91dGluZ1xcbiAgKiAvcHJvYy9pcDZfbXJfY2FjaGUgL3Byb2MvaXA2X21yX3ZpZlxcbkBAIC01NjksNyArNjI3LDcgQEAgc3RhdGljIGludCBwaW02X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRzdHJ1Y3QgaXB2NmhkciAgICplbmNhcDtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgICpyZWdfZGV2ID0gTlVMTDtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxuLVxcdHN0cnVjdCBtcl90YWJsZSAqbXJ0O1xcbitcXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBmbG93aTYgZmw2ID0ge1xcbiBcXHRcXHQuZmxvd2k2X2lpZlxcdD0gc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXgsXFxuIFxcdFxcdC5mbG93aTZfbWFya1xcdD0gc2tiLVxcdTAwM2VtYXJrLFxcbkBAIC02MTcsOSArNjc1LDEyIEBAIHN0YXRpYyBpbnQgcGltNl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c2tiX3R1bm5lbF9yeChza2IsIHJlZ19kZXYsIGRldl9uZXQocmVnX2RldikpO1xcbiBcXG4gXFx0bmV0aWZfcngoc2tiKTtcXG4rXFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gIGRyb3A6XFxuK1xcdGlmIChtcnQpXFxuK1xcdFxcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbiBcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNjM0LDcgKzY5NSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XFxuLVxcdHN0cnVjdCBtcl90YWJsZSAqbXJ0O1xcbitcXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBmbG93aTYgZmw2ID0ge1xcbiBcXHRcXHQuZmxvd2k2X29pZlxcdD0gZGV2LVxcdTAwM2VpZmluZGV4LFxcbiBcXHRcXHQuZmxvd2k2X2lpZlxcdD0gc2tiLVxcdTAwM2Vza2JfaWlmID8gOiBMT09QQkFDS19JRklOREVYLFxcbkBAIC02NTUsMTIgKzcxNiwxNSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgcmVnX3ZpZl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlwNm1yX2NhY2hlX3JlcG9ydChtcnQsIHNrYiwgUkVBRF9PTkNFKG1ydC1cXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtKSxcXG4gXFx0XFx0XFx0ICAgTVJUNk1TR19XSE9MRVBLVCk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4gXFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIFxcbiB0eF9sb29rdXBfZXJyOlxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gdHhfZXJyOlxcbitcXHRpZiAobXJ0KVxcbitcXHRcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4gXFx0REVWX1NUQVRTX0lOQyhkZXYsIHR4X2Vycm9ycyk7XFxuIFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbkBAIC0xNjE1LDEyICsxNjc5LDEzIEBAIHN0YXRpYyB2b2lkIG1yb3V0ZV9jbGVhbl90YWJsZXMoc3RydWN0IG1yX3RhYmxlICptcnQsIGludCBmbGFncyxcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGlwNm1yX3NrX2luaXQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBzb2NrICpzaylcXG4rc3RhdGljIGludCBfX2lwNm1yX3NrX2luaXQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xcbiBcXG4tXFx0cnRubF9sb2NrKCk7XFxuK1xcdEFTU0VSVF9SVE5MKCk7XFxuK1xcbiBcXHRzcGluX2xvY2soXFx1MDAyNm1ydF9sb2NrKTtcXG4gXFx0aWYgKHJ0bmxfZGVyZWZlcmVuY2UobXJ0LVxcdTAwM2Vtcm91dGVfc2spKSB7XFxuIFxcdFxcdGVyciA9IC1FQUREUklOVVNFO1xcbkBAIC0xNjI4LDYgKzE2OTMsNyBAQCBzdGF0aWMgaW50IGlwNm1yX3NrX2luaXQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBzb2NrICpzaylcXG4gXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1ydC1cXHUwMDNlbXJvdXRlX3NrLCBzayk7XFxuIFxcdFxcdHNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfUkNVX0ZSRUUpO1xcbiBcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXFx1MDAzZW1jX2ZvcndhcmRpbmcpO1xcbitcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNm1ydC1cXHUwMDNlcmVmY250KTtcXG4gXFx0fVxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2bXJ0X2xvY2spO1xcbiBcXG5AQCAtMTYzNiw3ICsxNzAyLDYgQEAgc3RhdGljIGludCBpcDZtcl9za19pbml0KHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgTkVUQ09ORkFfTUNfRk9SV0FSRElORyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBORVRDT05GQV9JRklOREVYX0FMTCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBuZXQtXFx1MDAzZWlwdjYuZGV2Y29uZl9hbGwpO1xcbi1cXHRydG5sX3VubG9jaygpO1xcbiBcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbkBAIC0xNjQ2LDYgKzE3MTEsNyBAQCBpbnQgaXA2bXJfc2tfZG9uZShzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcXG4gXFx0c3RydWN0IGlwdjZfZGV2Y29uZiAqZGV2Y29uZjtcXG4gXFx0TElTVF9IRUFEKGRldl9raWxsX2xpc3QpO1xcbitcXHRzdHJ1Y3QgbXJfdGFibGUgKmZyZWVfbXJ0ID0gTlVMTDtcXG4gXFx0c3RydWN0IG1yX3RhYmxlICptcnQ7XFxuIFxcdGludCBlcnIgPSAtRUFDQ0VTO1xcbiBcXG5AQCAtMTY3NSw2ICsxNzQxLDE1IEBAIGludCBpcDZtcl9za19kb25lKHN0cnVjdCBzb2NrICpzaylcXG4gXFxuIFxcdFxcdFxcdG1yb3V0ZV9jbGVhbl90YWJsZXMobXJ0LCBNUlQ2X0ZMVVNIX01JRlMgfCBNUlQ2X0ZMVVNIX01GQyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZkZXZfa2lsbF9saXN0KTtcXG4rXFx0XFx0XFx0aWYgKG1ydC1cXHUwMDNlaWQgIT0gUlQ2X1RBQkxFX0RGTFQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICFSRUFEX09OQ0UobXJ0LVxcdTAwM2VtYXh2aWYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAhUkVBRF9PTkNFKG1ydC1cXHUwMDNlY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBsaXN0X2VtcHR5KFxcdTAwMjZtcnQtXFx1MDAzZW1mY19jYWNoZV9saXN0KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgbGlzdF9lbXB0eShcXHUwMDI2bXJ0LVxcdTAwM2VtZmNfdW5yZXNfcXVldWUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBSRUFEX09OQ0UobXJ0LVxcdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pIFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRcXHRsaXN0X2RlbF9yY3UoXFx1MDAyNm1ydC1cXHUwMDNlbGlzdCk7XFxuK1xcdFxcdFxcdFxcdGZyZWVfbXJ0ID0gbXJ0O1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGVyciA9IDA7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuQEAgLTE2ODIsNiArMTc1NywxNCBAQCBpbnQgaXA2bXJfc2tfZG9uZShzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoXFx1MDAyNmRldl9raWxsX2xpc3QpO1xcbiBcXHRydG5sX3VubG9jaygpO1xcbiBcXG4rXFx0aWYgKCFlcnIpXFxuK1xcdFxcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbitcXG4rXFx0aWYgKGZyZWVfbXJ0KSB7XFxuK1xcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbitcXHRcXHRpcDZtcl9wdXRfdGFibGUoZnJlZV9tcnQpO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbkBAIC0xNjkzLDExICsxNzc2LDE1IEBAIGJvb2wgbXJvdXRlNl9pc19zb2NrZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHQuZmxvd2k2X29pZlxcdD0gc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXgsXFxuIFxcdFxcdC5mbG93aTZfbWFya1xcdD0gc2tiLVxcdTAwM2VtYXJrLFxcbiBcXHR9O1xcbitcXHRib29sIHJldDtcXG4gXFxuIFxcdGlmIChpcDZtcl9maWJfbG9va3VwKG5ldCwgXFx1MDAyNmZsNiwgXFx1MDAyNm1ydCkgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdHJldHVybiByY3VfYWNjZXNzX3BvaW50ZXIobXJ0LVxcdTAwM2Vtcm91dGVfc2spO1xcbitcXHRyZXQgPSByY3VfYWNjZXNzX3BvaW50ZXIobXJ0LVxcdTAwM2Vtcm91dGVfc2spO1xcbitcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChtcm91dGU2X2lzX3NvY2tldCk7XFxuIFxcbkBAIC0xNzE2LDIwICsxODAzLDI0IEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4gXFx0c3RydWN0IG1mNmNjdGwgbWZjO1xcbiBcXHRtaWZpX3QgbWlmaTtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xcbi1cXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcXG4rXFx0c3RydWN0IG1yX3RhYmxlICptcnQgPSBOVUxMO1xcbitcXHR1MzIgdGFibGUgPSByYXc2X3NrKHNrKS1cXHUwMDNlaXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUO1xcbiBcXG4gXFx0aWYgKHNrLVxcdTAwM2Vza190eXBlICE9IFNPQ0tfUkFXIHx8XFxuIFxcdCAgICBpbmV0X3NrKHNrKS1cXHUwMDNlaW5ldF9udW0gIT0gSVBQUk9UT19JQ01QVjYpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdG1ydCA9IGlwNm1yX2dldF90YWJsZShuZXQsIHJhdzZfc2soc2spLVxcdTAwM2VpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpO1xcbi1cXHRpZiAoIW1ydClcXG4tXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuLVxcbi1cXHRpZiAob3B0bmFtZSAhPSBNUlQ2X0lOSVQpIHtcXG4rXFx0aWYgKG9wdG5hbWUgIT0gTVJUNl9JTklUIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBvcHRuYW1lICE9IE1SVDZfVEFCTEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG9wdG5hbWUgIT0gTVJUNl9ET05FKSB7XFxuK1xcdFxcdG1ydCA9IGlwNm1yX2dldF90YWJsZV9ob2xkKG5ldCwgdGFibGUpO1xcbitcXHRcXHRpZiAoIW1ydClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcdFxcdGlmIChzayAhPSByY3VfYWNjZXNzX3BvaW50ZXIobXJ0LVxcdTAwM2Vtcm91dGVfc2spIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAhbnNfY2FwYWJsZShuZXQtXFx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKVxcbitcXHRcXHQgICAgIW5zX2NhcGFibGUobmV0LVxcdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkge1xcbitcXHRcXHRcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuQEAgLTE3MzcsMzIgKzE4MjgsNDEgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbiBcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0XFx0cmV0dXJuIGlwNm1yX3NrX2luaXQobXJ0LCBzayk7XFxuK1xcdFxcdHJ0bmxfbG9jaygpO1xcbitcXHRcXHRtcnQgPSBpcDZtcl9uZXdfdGFibGUobmV0LCB0YWJsZSk7XFxuK1xcdFxcdGlmICghSVNfRVJSKG1ydCkpXFxuK1xcdFxcdFxcdHJldCA9IF9faXA2bXJfc2tfaW5pdChtcnQsIHNrKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKG1ydCk7XFxuK1xcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRjYXNlIE1SVDZfRE9ORTpcXG4gXFx0XFx0cmV0dXJuIGlwNm1yX3NrX2RvbmUoc2spO1xcbiBcXG4gXFx0Y2FzZSBNUlQ2X0FERF9NSUY6XFxuIFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YodmlmKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2dmlmLCBvcHR2YWwsIHNpemVvZih2aWYpKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XFxuIFxcdFxcdGlmICh2aWYubWlmNmNfbWlmaSBcXHUwMDNlPSBNQVhNSUZTKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVORklMRTtcXG4rXFx0XFx0XFx0Z290byBvdXRfcHV0X3RhYmxlX2VuZmlsZTtcXG4gXFx0XFx0cnRubF9sb2NrKCk7XFxuIFxcdFxcdHJldCA9IG1pZjZfYWRkKG5ldCwgbXJ0LCBcXHUwMDI2dmlmLFxcbiBcXHRcXHRcXHQgICAgICAgc2sgPT0gcnRubF9kZXJlZmVyZW5jZShtcnQtXFx1MDAzZW1yb3V0ZV9zaykpO1xcbiBcXHRcXHRydG5sX3VubG9jaygpO1xcbitcXHRcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdGNhc2UgTVJUNl9ERUxfTUlGOlxcbiBcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKG1pZmlfdCkpXFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIG91dF9wdXRfdGFibGVfZWludmFsO1xcbiBcXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNm1pZmksIG9wdHZhbCwgc2l6ZW9mKG1pZmlfdCkpKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0XFx0XFx0Z290byBvdXRfcHV0X3RhYmxlX2VmYXVsdDtcXG4gXFx0XFx0cnRubF9sb2NrKCk7XFxuIFxcdFxcdHJldCA9IG1pZjZfZGVsZXRlKG1ydCwgbWlmaSwgMCwgTlVMTCk7XFxuIFxcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcdFxcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0LypcXG5AQCAtMTc3Niw5ICsxODc2LDkgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbiBcXHRjYXNlIE1SVDZfQUREX01GQ19QUk9YWTpcXG4gXFx0Y2FzZSBNUlQ2X0RFTF9NRkNfUFJPWFk6XFxuIFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YobWZjKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2bWZjLCBvcHR2YWwsIHNpemVvZihtZmMpKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XFxuIFxcdFxcdGlmIChwYXJlbnQgPT0gMClcXG4gXFx0XFx0XFx0cGFyZW50ID0gbWZjLm1mNmNjX3BhcmVudDtcXG4gXFxuQEAgLTE3OTMsNiArMTg5Myw3IEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIHBhcmVudCk7XFxuIFxcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5tZmNfbXV0ZXgpO1xcbitcXHRcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdGNhc2UgTVJUNl9GTFVTSDpcXG5AQCAtMTgwMSwxNCArMTkwMiwxNSBAQCBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuIFxcdFxcdGludCBmbGFncztcXG4gXFxuIFxcdFxcdGlmIChvcHRsZW4gIT0gc2l6ZW9mKGZsYWdzKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2ZmxhZ3MsIG9wdHZhbCwgc2l6ZW9mKGZsYWdzKSkpXFxuLVxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRcXHRcXHRnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0O1xcbiBcXG4gXFx0XFx0cnRubF9sb2NrKCk7XFxuIFxcdFxcdG1yb3V0ZV9jbGVhbl90YWJsZXMobXJ0LCBmbGFncywgXFx1MDAyNmRldl9raWxsX2xpc3QpO1xcbiBcXHRcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KFxcdTAwMjZkZXZfa2lsbF9saXN0KTtcXG4gXFx0XFx0cnRubF91bmxvY2soKTtcXG4rXFx0XFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbkBAIC0xODIwLDEwICsxOTIyLDExIEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4gXFx0XFx0aW50IHY7XFxuIFxcbiBcXHRcXHRpZiAob3B0bGVuICE9IHNpemVvZih2KSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2diwgb3B0dmFsLCBzaXplb2YodikpKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0XFx0XFx0Z290byBvdXRfcHV0X3RhYmxlX2VmYXVsdDtcXG4gXFx0XFx0V1JJVEVfT05DRShtcnQtXFx1MDAzZW1yb3V0ZV9kb19hc3NlcnQsIHYpO1xcbitcXHRcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuQEAgLTE4MzQsOSArMTkzNyw5IEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4gXFx0XFx0aW50IHY7XFxuIFxcbiBcXHRcXHRpZiAob3B0bGVuICE9IHNpemVvZih2KSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2diwgb3B0dmFsLCBzaXplb2YodikpKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0XFx0XFx0Z290byBvdXRfcHV0X3RhYmxlX2VmYXVsdDtcXG4gXFxuIFxcdFxcdGRvX3dybWlmd2hvbGUgPSAodiA9PSBNUlQ2TVNHX1dSTUlGV0hPTEUpO1xcbiBcXHRcXHR2ID0gISF2O1xcbkBAIC0xODQ4LDYgKzE5NTEsNyBAQCBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuIFxcdFxcdFxcdFdSSVRFX09OQ0UobXJ0LVxcdTAwM2Vtcm91dGVfZG9fd3J2aWZ3aG9sZSwgZG9fd3JtaWZ3aG9sZSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cnRubF91bmxvY2soKTtcXG4rXFx0XFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFxuQEAgLTE4NjQsMTggKzE5NjgsMjIgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbiBcXHRcXHQvKiBcXFwicGltNnJlZyV1XFxcIiBzaG91bGQgbm90IGV4Y2VlZCAxNiBieXRlcyAoSUZOQU1TSVopICovXFxuIFxcdFxcdGlmICh2ICE9IFJUX1RBQkxFX0RFRkFVTFQgXFx1MDAyNlxcdTAwMjYgdiBcXHUwMDNlPSAxMDAwMDAwMDApXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHRpZiAoc2sgPT0gcmN1X2FjY2Vzc19wb2ludGVyKG1ydC1cXHUwMDNlbXJvdXRlX3NrKSlcXG4rXFxuK1xcdFxcdG1ydCA9IGlwNm1yX2dldF90YWJsZV9ob2xkKG5ldCwgdGFibGUpO1xcbitcXHRcXHRpZiAobXJ0IFxcdTAwMjZcXHUwMDI2IHNrID09IHJjdV9hY2Nlc3NfcG9pbnRlcihtcnQtXFx1MDAzZW1yb3V0ZV9zaykpIHtcXG4rXFx0XFx0XFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKCFuc19jYXBhYmxlKG5ldC1cXHUwMDNldXNlcl9ucywgQ0FQX05FVF9BRE1JTikpIHtcXG4rXFx0XFx0XFx0aWYgKG1ydClcXG4rXFx0XFx0XFx0XFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChtcnQpXFxuK1xcdFxcdFxcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbiBcXG4tXFx0XFx0cnRubF9sb2NrKCk7XFxuLVxcdFxcdHJldCA9IDA7XFxuLVxcdFxcdG1ydCA9IGlwNm1yX25ld190YWJsZShuZXQsIHYpO1xcbi1cXHRcXHRpZiAoSVNfRVJSKG1ydCkpXFxuLVxcdFxcdFxcdHJldCA9IFBUUl9FUlIobXJ0KTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRyYXc2X3NrKHNrKS1cXHUwMDNlaXA2bXJfdGFibGUgPSB2O1xcbi1cXHRcXHRydG5sX3VubG9jaygpO1xcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyYXc2X3NrKHNrKS1cXHUwMDNlaXA2bXJfdGFibGUgPSB2O1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiAjZW5kaWZcXG4gXFx0LypcXG5AQCAtMTg4Myw4ICsxOTkxLDI1IEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4gXFx0ICpcXHRzZXQuXFxuIFxcdCAqL1xcbiBcXHRkZWZhdWx0OlxcbitcXHRcXHRpZiAobXJ0KVxcbitcXHRcXHRcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcXG4gXFx0fVxcbitcXG4rb3V0X3B1dF90YWJsZV9lZmF1bHQ6XFxuK1xcdGlmIChtcnQpXFxuK1xcdFxcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbitcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK291dF9wdXRfdGFibGVfZWludmFsOlxcbitcXHRpZiAobXJ0KVxcbitcXHRcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4rXFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitvdXRfcHV0X3RhYmxlX2VuZmlsZTpcXG4rXFx0aWYgKG1ydClcXG4rXFx0XFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuK1xcdHJldHVybiAtRU5GSUxFO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0xODk1LDYgKzIwMjAsNyBAQCBpbnQgaXA2X21yb3V0ZV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuIFxcdFxcdFxcdCAgc29ja3B0cl90IG9wdGxlbilcXG4ge1xcbiBcXHRpbnQgb2xyO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4gXFx0aW50IHZhbDtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xcbiBcXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcXG5AQCAtMTkwMyw3ICsyMDI5LDcgQEAgaW50IGlwNl9tcm91dGVfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbiBcXHQgICAgaW5ldF9zayhzayktXFx1MDAzZWluZXRfbnVtICE9IElQUFJPVE9fSUNNUFY2KVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbi1cXHRtcnQgPSBpcDZtcl9nZXRfdGFibGUobmV0LCByYXc2X3NrKHNrKS1cXHUwMDNlaXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTtcXG4rXFx0bXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQobmV0LCByYXc2X3NrKHNrKS1cXHUwMDNlaXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTtcXG4gXFx0aWYgKCFtcnQpXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG5AQCAtMTkyMCwyNiArMjA0NiwzMyBAQCBpbnQgaXA2X21yb3V0ZV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuIFxcdFxcdHZhbCA9IFJFQURfT05DRShtcnQtXFx1MDAzZW1yb3V0ZV9kb19hc3NlcnQpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4tXFx0XFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcXG4rXFx0XFx0cmV0ID0gLUVOT1BST1RPT1BUO1xcbitcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZvbHIsIG9wdGxlbiwgc2l6ZW9mKGludCkpKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZvbHIsIG9wdGxlbiwgc2l6ZW9mKGludCkpKSB7XFxuK1xcdFxcdHJldCA9IC1FRkFVTFQ7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcbiBcXHRvbHIgPSBtaW5fdChpbnQsIG9sciwgc2l6ZW9mKGludCkpO1xcbi1cXHRpZiAob2xyIFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmIChvbHIgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcbi1cXHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXFx1MDAyNm9sciwgc2l6ZW9mKGludCkpKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tXFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIFxcdTAwMjZ2YWwsIG9scikpXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXHRyZXR1cm4gMDtcXG4rXFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFxcdTAwMjZvbHIsIHNpemVvZihpbnQpKSB8fFxcbitcXHQgICAgY29weV90b19zb2NrcHRyKG9wdHZhbCwgXFx1MDAyNnZhbCwgb2xyKSlcXG4rXFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4rb3V0OlxcbitcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gLypcXG4gICpcXHRUaGUgSVAgbXVsdGljYXN0IGlvY3RsIHN1cHBvcnQgcm91dGluZXMuXFxuICAqL1xcbitcXG4gaW50IGlwNm1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCAqYXJnKVxcbiB7XFxuIFxcdHN0cnVjdCBzaW9jX3NnX3JlcTYgKnNyO1xcbkBAIC0xOTQ5LDcgKzIwODIsNyBAQCBpbnQgaXA2bXJfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkICphcmcpXFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcXG4gXFx0c3RydWN0IG1yX3RhYmxlICptcnQ7XFxuIFxcbi1cXHRtcnQgPSBpcDZtcl9nZXRfdGFibGUobmV0LCByYXc2X3NrKHNrKS1cXHUwMDNlaXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTtcXG4rXFx0bXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQobmV0LCByYXc2X3NrKHNrKS1cXHUwMDNlaXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTtcXG4gXFx0aWYgKCFtcnQpXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG5AQCAtMTk1Nyw3ICsyMDkwLDcgQEAgaW50IGlwNm1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCAqYXJnKVxcbiBcXHRjYXNlIFNJT0NHRVRNSUZDTlRfSU42OlxcbiBcXHRcXHR2ciA9IChzdHJ1Y3Qgc2lvY19taWZfcmVxNiAqKWFyZztcXG4gXFx0XFx0aWYgKHZyLVxcdTAwM2VtaWZpIFxcdTAwM2U9IG1ydC1cXHUwMDNlbWF4dmlmKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0Z290byBvdXRfcHV0X3RhYmxlX2VpbnZhbDtcXG4gXFx0XFx0dnItXFx1MDAzZW1pZmkgPSBhcnJheV9pbmRleF9ub3NwZWModnItXFx1MDAzZW1pZmksIG1ydC1cXHUwMDNlbWF4dmlmKTtcXG4gXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRcXHR2aWYgPSBcXHUwMDI2bXJ0LVxcdTAwM2V2aWZfdGFibGVbdnItXFx1MDAzZW1pZmldO1xcbkBAIC0xOTY3LDkgKzIxMDAsMTEgQEAgaW50IGlwNm1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCAqYXJnKVxcbiBcXHRcXHRcXHR2ci1cXHUwMDNlaWJ5dGVzID0gUkVBRF9PTkNFKHZpZi1cXHUwMDNlYnl0ZXNfaW4pO1xcbiBcXHRcXHRcXHR2ci1cXHUwMDNlb2J5dGVzID0gUkVBRF9PTkNFKHZpZi1cXHUwMDNlYnl0ZXNfb3V0KTtcXG4gXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdFxcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuIFxcdFxcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcXG4gXFx0Y2FzZSBTSU9DR0VUU0dDTlRfSU42OlxcbiBcXHRcXHRzciA9IChzdHJ1Y3Qgc2lvY19zZ19yZXE2ICopYXJnO1xcbkBAIC0xOTgyLDE1ICsyMTE3LDIxIEBAIGludCBpcDZtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgKmFyZylcXG4gXFx0XFx0XFx0c3ItXFx1MDAzZWJ5dGVjbnQgPSBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZjLVxcdTAwM2VfYy5tZmNfdW4ucmVzLmJ5dGVzKTtcXG4gXFx0XFx0XFx0c3ItXFx1MDAzZXdyb25nX2lmID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2Yy1cXHUwMDNlX2MubWZjX3VuLnJlcy53cm9uZ19pZik7XFxuIFxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbiBcXHRcXHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XFxuIFxcdGRlZmF1bHQ6XFxuK1xcdFxcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xcbiBcXHR9XFxuLX1cXG4gXFxuK291dF9wdXRfdGFibGVfZWludmFsOlxcbitcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4rXFx0cmV0dXJuIC1FSU5WQUw7XFxuK31cXG4gI2lmZGVmIENPTkZJR19DT01QQVRcXG4gc3RydWN0IGNvbXBhdF9zaW9jX3NnX3JlcTYge1xcbiBcXHRzdHJ1Y3Qgc29ja2FkZHJfaW42IHNyYztcXG5AQCAtMjAxNywxNiArMjE1OCwxNiBAQCBpbnQgaXA2bXJfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZylcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xcbiBcXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcXG4gXFxuLVxcdG1ydCA9IGlwNm1yX2dldF90YWJsZShuZXQsIHJhdzZfc2soc2spLVxcdTAwM2VpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpO1xcbitcXHRtcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChuZXQsIHJhdzZfc2soc2spLVxcdTAwM2VpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpO1xcbiBcXHRpZiAoIW1ydClcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcbiBcXHRzd2l0Y2ggKGNtZCkge1xcbiBcXHRjYXNlIFNJT0NHRVRNSUZDTlRfSU42OlxcbiBcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNnZyLCBhcmcsIHNpemVvZih2cikpKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0XFx0XFx0Z290byBvdXRfcHV0X3RhYmxlX2VmYXVsdDtcXG4gXFx0XFx0aWYgKHZyLm1pZmkgXFx1MDAzZT0gbXJ0LVxcdTAwM2VtYXh2aWYpXFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIG91dF9wdXRfdGFibGVfZWludmFsO1xcbiBcXHRcXHR2ci5taWZpID0gYXJyYXlfaW5kZXhfbm9zcGVjKHZyLm1pZmksIG1ydC1cXHUwMDNlbWF4dmlmKTtcXG4gXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRcXHR2aWYgPSBcXHUwMDI2bXJ0LVxcdTAwM2V2aWZfdGFibGVbdnIubWlmaV07XFxuQEAgLTIwMzgsMTQgKzIxNzksMTYgQEAgaW50IGlwNm1yX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpXFxuIFxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFxcdTAwMjZ2ciwgc2l6ZW9mKHZyKSkpXFxuLVxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0O1xcbitcXHRcXHRcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbiBcXHRcXHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XFxuIFxcdGNhc2UgU0lPQ0dFVFNHQ05UX0lONjpcXG4gXFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZzciwgYXJnLCBzaXplb2Yoc3IpKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XFxuIFxcbiBcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdFxcdGMgPSBpcDZtcl9jYWNoZV9maW5kKG1ydCwgXFx1MDAyNnNyLnNyYy5zaW42X2FkZHIsIFxcdTAwMjZzci5ncnAuc2luNl9hZGRyKTtcXG5AQCAtMjA1NiwxNCArMjE5OSwyNSBAQCBpbnQgaXA2bXJfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZylcXG4gXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRcXHRcXHRpZiAoY29weV90b191c2VyKGFyZywgXFx1MDAyNnNyLCBzaXplb2Yoc3IpKSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XFxuK1xcdFxcdFxcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuIFxcdFxcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcXG4gXFx0ZGVmYXVsdDpcXG4rXFx0XFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuIFxcdFxcdHJldHVybiAtRU5PSU9DVExDTUQ7XFxuIFxcdH1cXG4rXFxuK291dF9wdXRfdGFibGVfZWZhdWx0OlxcbitcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4rXFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitvdXRfcHV0X3RhYmxlX2VpbnZhbDpcXG4rXFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbiB9XFxuICNlbmRpZlxcbiBcXG5AQCAtMjM5MiwxMyArMjU0NiwxNiBAQCBpbnQgaXA2X21yX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdGlmICh2aWYgXFx1MDAzZT0gMCkge1xcbiBcXHRcXHRcXHRpbnQgZXJyID0gaXA2bXJfY2FjaGVfdW5yZXNvbHZlZChtcnQsIHZpZiwgc2tiLCBkZXYpO1xcbiBcXG4rXFx0XFx0XFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdFxcdH1cXG4rXFx0XFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFx0fVxcbiBcXG4gXFx0aXA2X21yX2ZvcndhcmQobmV0LCBtcnQsIGRldiwgc2tiLCBjYWNoZSk7XFxuK1xcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMjQ0MSwxOSArMjU5OCwyNSBAQCBpbnQgaXA2X21yX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0LyogTm8gdXNhYmxlIGNhY2hlIGVudHJ5ICovXFxuIFxcdGlmICghY2FjaGUpIHtcXG4gXFx0XFx0dmlmID0gaXA2bXJfZmluZF92aWYobXJ0LCBkZXYpO1xcbi1cXHRcXHRpZiAodmlmIFxcdTAwM2U9IDApXFxuLVxcdFxcdFxcdHJldHVybiBpcDZtcl9jYWNoZV91bnJlc29sdmVkKG1ydCwgdmlmLCBza2IsIGRldik7XFxuLVxcdFxcdGdvdG8gaXA2X291dHB1dDtcXG4rXFx0XFx0aWYgKHZpZiBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdFxcdGVyciA9IGlwNm1yX2NhY2hlX3VucmVzb2x2ZWQobXJ0LCB2aWYsIHNrYiwgZGV2KTtcXG4rXFx0XFx0XFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Z290byBvdXRfcHV0O1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBXcm9uZyBpbnRlcmZhY2UgKi9cXG4gXFx0dmlmID0gY2FjaGUtXFx1MDAzZV9jLm1mY19wYXJlbnQ7XFxuIFxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIobXJ0LVxcdTAwM2V2aWZfdGFibGVbdmlmXS5kZXYpICE9IGRldilcXG4tXFx0XFx0Z290byBpcDZfb3V0cHV0O1xcbitcXHRcXHRnb3RvIG91dF9wdXQ7XFxuIFxcbiBcXHRpcDZfbXJfb3V0cHV0X2ZpbmlzaChuZXQsIG1ydCwgZGV2LCBza2IsIGNhY2hlKTtcXG4rXFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuIFxcdHJldHVybiAwO1xcbiBcXG4rb3V0X3B1dDpcXG4rXFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuIGlwNl9vdXRwdXQ6XFxuIFxcdHJldHVybiBpcDZfb3V0cHV0KG5ldCwgc2ssIHNrYik7XFxuIH1cXG5AQCAtMjc1NSwzMyArMjkxOCwzNSBAQCBzdGF0aWMgaW50IGlwNm1yX3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0XFx0Z3JwID0gbmxhX2dldF9pbjZfYWRkcih0YltSVEFfRFNUXSk7XFxuIFxcdHRhYmxlaWQgPSBubGFfZ2V0X3UzMl9kZWZhdWx0KHRiW1JUQV9UQUJMRV0sIDApO1xcbiBcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXG4tXFx0bXJ0ID0gX19pcDZtcl9nZXRfdGFibGUobmV0LCB0YWJsZWlkID86IFJUX1RBQkxFX0RFRkFVTFQpO1xcbitcXHRtcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChuZXQsIHRhYmxlaWQgPzogUlRfVEFCTEVfREVGQVVMVCk7XFxuIFxcdGlmICghbXJ0KSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJNUiB0YWJsZSBkb2VzIG5vdCBleGlzdFxcXCIpO1xcbiBcXHRcXHRlcnIgPSAtRU5PRU5UO1xcbi1cXHRcXHRnb3RvIGVycjtcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4gXFx0fVxcbiBcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRjYWNoZSA9IGlwNm1yX2NhY2hlX2ZpbmQobXJ0LCBcXHUwMDI2c3JjLCBcXHUwMDI2Z3JwKTtcXG4gXFx0aWYgKCFjYWNoZSkge1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIk1SIGNhY2hlIGVudHJ5IG5vdCBmb3VuZFxcXCIpO1xcbiBcXHRcXHRlcnIgPSAtRU5PRU5UO1xcbi1cXHRcXHRnb3RvIGVycjtcXG4rXFx0XFx0Z290byBlcnJfcHV0O1xcbiBcXHR9XFxuIFxcbiBcXHRlcnIgPSBpcDZtcl9maWxsX21yb3V0ZShtcnQsIHNrYiwgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCxcXG4gXFx0XFx0XFx0XFx0bmxoLVxcdTAwM2VubG1zZ19zZXEsIGNhY2hlLCBSVE1fTkVXUk9VVEUsIDApO1xcbi1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBlcnI7XFxuLVxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3B1dDtcXG4gXFxuLVxcdHJldHVybiBydG5sX3VuaWNhc3Qoc2tiLCBuZXQsIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQpO1xcbitcXHRlcnIgPSBydG5sX3VuaWNhc3Qoc2tiLCBuZXQsIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQpO1xcbitcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4rXFx0cmV0dXJuIGVycjtcXG4gXFxuLWVycjpcXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK2Vycl9wdXQ6XFxuK1xcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbitlcnJfZnJlZTpcXG4gXFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG5AQCAtMjgwNCw3ICsyOTY5LDcgQEAgc3RhdGljIGludCBpcDZtcl9ydG1fZHVtcHJvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFx0aWYgKGZpbHRlci50YWJsZV9pZCkge1xcbiBcXHRcXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcXG4gXFxuLVxcdFxcdG1ydCA9IF9faXA2bXJfZ2V0X3RhYmxlKHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spLCBmaWx0ZXIudGFibGVfaWQpO1xcbitcXHRcXHRtcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChzb2NrX25ldChza2ItXFx1MDAzZXNrKSwgZmlsdGVyLnRhYmxlX2lkKTtcXG4gXFx0XFx0aWYgKCFtcnQpIHtcXG4gXFx0XFx0XFx0aWYgKHJ0bmxfbXNnX2ZhbWlseShjYi1cXHUwMDNlbmxoKSAhPSBSVE5MX0ZBTUlMWV9JUDZNUikge1xcbiBcXHRcXHRcXHRcXHRlcnIgPSBza2ItXFx1MDAzZWxlbjtcXG5AQCAtMjgxOCw2ICsyOTgzLDcgQEAgc3RhdGljIGludCBpcDZtcl9ydG1fZHVtcHJvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFxuIFxcdFxcdGVyciA9IG1yX3RhYmxlX2R1bXAobXJ0LCBza2IsIGNiLCBfaXA2bXJfZmlsbF9tcm91dGUsXFxuIFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2bWZjX3VucmVzX2xvY2ssIFxcdTAwMjZmaWx0ZXIpO1xcbitcXHRcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4gXFx0XFx0ZXJyID0gc2tiLVxcdTAwM2VsZW4gPyA6IGVycjtcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjI6NTk6MzIuNDc5MzQzMzY2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzQ2MjUxNjI1MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNl9NUk9VVEVcIixcbiAgICBcIklQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1wiLFxuICAgIFwiSVBWNl9QSU1TTV9WMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl9tcm91dGVfc2V0c29ja29wdFwiLFxuICAgIFwiaXA2X21yb3V0ZV9nZXRzb2Nrb3B0XCIsXG4gICAgXCJpcDZtcl9pb2N0bFwiLFxuICAgIFwiaXA2bXJfY29tcGF0X2lvY3RsXCIsXG4gICAgXCJpcDZfbXJfaW5wdXRcIixcbiAgICBcImlwNl9tcl9vdXRwdXRcIixcbiAgICBcInBpbTZfcmN2XCIsXG4gICAgXCJyZWdfdmlmX3htaXRcIixcbiAgICBcIm1yb3V0ZTZfaXNfc29ja2V0XCIsXG4gICAgXCJpcDZtcl9za19kb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyByZWZlcmVuY2UgY291bnRpbmcgdG8gSVB2NiBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZXMgKHN0cnVjdCBtcl90YWJsZSkgdG8gZml4IHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMuIEl0IG1vZGlmaWVzIHZhcmlvdXMgZW50cnkgcG9pbnRzIChzb2NrZXQgb3B0aW9ucywgaW9jdGxzLCBuZXRsaW5rLCBwYWNrZXQgcngvdHgpIHRvIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIHRhYmxlIHdoaWxlIGluIHVzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRkYjVmOGRhMDllMWFiZDYwYmJiZWU1NDA3NzdjNGFjMGYyYzcyZDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAyNCAyMjo1OToyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXJvdXRlX2Jhc2UuaCBiL2luY2x1ZGUvbGludXgvbXJvdXRlX2Jhc2UuaFxuaW5kZXggNGQ1NTgyN2U5NzA1MzcuLjUzNmZhMzI0NjIwMjczIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmhcbkBAIC0yLDggKzIsMTAgQEBcbiAjZGVmaW5lIF9fTElOVVhfTVJPVVRFX0JBU0VfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRfbmFtZXNwYWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2ZpYl9ub3RpZmllci5oXHUwMDNlXG5AQCAtMjQyLDYgKzI0NCw4IEBAIHN0cnVjdCBtcl90YWJsZV9vcHMge1xuICAqIEBtcm91dGVfZG9fYXNzZXJ0OiBXaGV0aGVyIHRvIGluZm9ybSB1c2Vyc3BhY2Ugb24gd3JvbmcgaW5ncmVzc1xuICAqIEBtcm91dGVfZG9fcGltOiBXaGV0aGVyIHRvIHJlY2VpdmUgSUdNUCBQSU12MVxuICAqIEBtcm91dGVfcmVnX3ZpZl9udW06IFBJTS1kZXZpY2UgdmlmIGluZGV4XG4rICogQHJlZmNudDogbGlmZXRpbWUgcGlucyBmb3IgdGhpcyB0YWJsZVxuKyAqIEBkZXN0cm95X3dvcms6IHByb2Nlc3MtY29udGV4dCBjbGVhbnVwIGJlZm9yZSBmaW5hbCBSQ1UgZnJlZVxuICAqL1xuIHN0cnVjdCBtcl90YWJsZSB7XG4gXHRzdHJ1Y3QgcmN1X3dvcmtcdFx0d29yaztcbkBAIC0yNjEsNiArMjY1LDggQEAgc3RydWN0IG1yX3RhYmxlIHtcbiBcdGJvb2xcdFx0XHRtcm91dGVfZG9fcGltO1xuIFx0Ym9vbFx0XHRcdG1yb3V0ZV9kb193cnZpZndob2xlO1xuIFx0aW50XHRcdFx0bXJvdXRlX3JlZ192aWZfbnVtO1xuK1x0cmVmY291bnRfdFx0XHRyZWZjbnQ7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdGRlc3Ryb3lfd29yaztcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtcl9jYW5fZnJlZV90YWJsZShzdHJ1Y3QgbmV0ICpuZXQpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtcl9iYXNlLmMgYi9uZXQvaXB2NC9pcG1yX2Jhc2UuY1xuaW5kZXggODY3YjI0YmVkZWQxMTIuLjk3MTA3ODljZmFmOTk0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBtcl9iYXNlLmNcbisrKyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jXG5AQCAtMzIsOCArMzIsMTAgQEAgc3RhdGljIHZvaWQgX19tcl9mcmVlX3RhYmxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSxcbiBcdFx0XHRcdFx0ICAgIHN0cnVjdCBtcl90YWJsZSwgd29yayk7XG4rXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCk7XG4gXG4gXHRyaGx0YWJsZV9kZXN0cm95KFx1MDAyNm1ydC1cdTAwM2VtZmNfaGFzaCk7XG4rXHRwdXRfbmV0KG5ldCk7XG4gXHRrZnJlZShtcnQpO1xuIH1cbiBcbkBAIC01NiwxMSArNTgsMTIgQEAgbXJfdGFibGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQsXG4gXHRpZiAoIW1ydClcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXHRtcnQtXHUwMDNlaWQgPSBpZDtcbi1cdHdyaXRlX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCwgbmV0KTtcbitcdHdyaXRlX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCwgZ2V0X25ldChuZXQpKTtcbiBcbiBcdG1ydC1cdTAwM2VvcHMgPSAqb3BzO1xuIFx0ZXJyID0gcmhsdGFibGVfaW5pdChcdTAwMjZtcnQtXHUwMDNlbWZjX2hhc2gsIG1ydC1cdTAwM2VvcHMucmh0X3BhcmFtcyk7XG4gXHRpZiAoZXJyKSB7XG4rXHRcdHB1dF9uZXQocmVhZF9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQpKTtcbiBcdFx0a2ZyZWUobXJ0KTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcdH1cbkBAIC03Miw2ICs3NSw3IEBAIG1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxuIFx0dGltZXJfc2V0dXAoXHUwMDI2bXJ0LVx1MDAzZWlwbXJfZXhwaXJlX3RpbWVyLCBleHBpcmVfZnVuYywgMCk7XG4gXG4gXHRtcnQtXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtID0gLTE7XG4rXHRyZWZjb3VudF9zZXQoXHUwMDI2bXJ0LVx1MDAzZXJlZmNudCwgMSk7XG4gXHR0YWJsZV9zZXQobXJ0LCBuZXQpO1xuIFx0cmV0dXJuIG1ydDtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmNcbmluZGV4IDYwNGE1ODgzODkwMWE3Li45NGJiMDBiZGZmOThjOCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNm1yLmNcbisrKyBiL25ldC9pcHY2L2lwNm1yLmNcbkBAIC04Nyw2ICs4NywxMSBAQCBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1ydF9jYWNoZXAgX19yZWFkX21vc3RseTtcbiBzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpO1xuIHN0YXRpYyB2b2lkIGlwNm1yX2ZyZWVfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpkZXZfa2lsbF9saXN0KTtcbitzdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbitzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9nZXRfdGFibGVfaG9sZChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCk7XG4rc3RhdGljIHZvaWQgaXA2bXJfcHV0X3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0KTtcbitzdGF0aWMgdm9pZCBfX2lwNm1yX3B1dF90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbitcdFx0XHQgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpkZXZfa2lsbF9saXN0KTtcbiBcbiBzdGF0aWMgdm9pZCBpcDZfbXJfZm9yd2FyZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuIFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMTc5LDcgKzE4NCw3IEBAIHN0YXRpYyBpbnQgaXA2bXJfcnVsZV9hY3Rpb24oc3RydWN0IGZpYl9ydWxlICpydWxlLCBzdHJ1Y3QgZmxvd2kgKmZscCxcbiBcbiBcdGFyZy1cdTAwM2V0YWJsZSA9IGZpYl9ydWxlX2dldF90YWJsZShydWxlLCBhcmcpO1xuIFxuLVx0bXJ0ID0gX19pcDZtcl9nZXRfdGFibGUocnVsZS1cdTAwM2Vmcl9uZXQsIGFyZy1cdTAwM2V0YWJsZSk7XG4rXHRtcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChydWxlLVx1MDAzZWZyX25ldCwgYXJnLVx1MDAzZXRhYmxlKTtcbiBcdGlmICghbXJ0KVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcdHJlcy1cdTAwM2VtcnQgPSBtcnQ7XG5AQCAtMjcxLDcgKzI3Niw4IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2bXJfcnVsZXNfZXhpdF9ydG5sKHN0cnVjdCBuZXQgKm5ldCxcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtcnQsIG5leHQsIFx1MDAyNm5ldC1cdTAwM2VpcHY2Lm1yNl90YWJsZXMsIGxpc3QpIHtcbiBcdFx0bGlzdF9kZWxfcmN1KFx1MDAyNm1ydC1cdTAwM2VsaXN0KTtcbi1cdFx0aXA2bXJfZnJlZV90YWJsZShtcnQsIGRldl9raWxsX2xpc3QpO1xuK1x0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdFx0X19pcDZtcl9wdXRfdGFibGUobXJ0LCBkZXZfa2lsbF9saXN0KTtcbiBcdH1cbiB9XG4gXG5AQCAtMzE0LDcgKzMyMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKl9faXA2bXJfZ2V0X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKVxuIHN0YXRpYyBpbnQgaXA2bXJfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTYgKmZscDYsXG4gXHRcdFx0ICAgIHN0cnVjdCBtcl90YWJsZSAqKm1ydClcbiB7XG4tXHQqbXJ0ID0gcmN1X2RlcmVmZXJlbmNlKG5ldC1cdTAwM2VpcHY2Lm1ydDYpO1xuK1x0Km1ydCA9IGlwNm1yX2dldF90YWJsZV9ob2xkKG5ldCwgUlQ2X1RBQkxFX0RGTFQpO1xuIFx0aWYgKCEqbXJ0KVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcdHJldHVybiAwO1xuQEAgLTM0Miw3ICszNDgsOCBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwNm1yX3J1bGVzX2V4aXRfcnRubChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobmV0LVx1MDAzZWlwdjYubXJ0NiwgMSk7XG4gXG4gXHRSQ1VfSU5JVF9QT0lOVEVSKG5ldC1cdTAwM2VpcHY2Lm1ydDYsIE5VTEwpO1xuLVx0aXA2bXJfZnJlZV90YWJsZShtcnQsIGRldl9raWxsX2xpc3QpO1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4rXHRfX2lwNm1yX3B1dF90YWJsZShtcnQsIGRldl9raWxsX2xpc3QpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGlwNm1yX3J1bGVzX2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuQEAgLTM2OCw2ICszNzUsNDQgQEAgc3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfZ2V0X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKVxuIFx0cmV0dXJuIG1ydDtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfZ2V0X3RhYmxlX2hvbGQoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXG4re1xuK1x0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRtcnQgPSBfX2lwNm1yX2dldF90YWJsZShuZXQsIGlkKTtcbitcdGlmIChtcnQgXHUwMDI2XHUwMDI2ICFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2bXJ0LVx1MDAzZXJlZmNudCkpXG4rXHRcdG1ydCA9IE5VTEw7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHJldHVybiBtcnQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIF9faXA2bXJfcHV0X3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuK1x0XHRcdCAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4re1xuK1x0c3RydWN0IGxpc3RfaGVhZCAqZGV2X2tpbGxfbGlzdDtcbitcdExJU1RfSEVBRChsb2NhbF9kZXZfa2lsbF9saXN0KTtcbitcbitcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNm1ydC1cdTAwM2VyZWZjbnQpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoIWxvY2tkZXBfcnRubF9pc19oZWxkKCkpIHtcbitcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZtcnQtXHUwMDNlZGVzdHJveV93b3JrKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0ZGV2X2tpbGxfbGlzdCA9IGhlYWQgPyBoZWFkIDogXHUwMDI2bG9jYWxfZGV2X2tpbGxfbGlzdDtcbitcdGlwNm1yX2ZyZWVfdGFibGUobXJ0LCBkZXZfa2lsbF9saXN0KTtcbitcdGlmICghaGVhZClcbitcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShkZXZfa2lsbF9saXN0KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaXA2bXJfcHV0X3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0KVxuK3tcbitcdF9faXA2bXJfcHV0X3RhYmxlKG1ydCwgTlVMTCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgaXA2bXJfaGFzaF9jbXAoc3RydWN0IHJoYXNodGFibGVfY29tcGFyZV9hcmcgKmFyZyxcbiBcdFx0XHQgIGNvbnN0IHZvaWQgKnB0cilcbiB7XG5AQCAtNDEzLDggKzQ1OCwxMiBAQCBzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXG4gXHRpZiAobXJ0KVxuIFx0XHRyZXR1cm4gbXJ0O1xuIFxuLVx0cmV0dXJuIG1yX3RhYmxlX2FsbG9jKG5ldCwgaWQsIFx1MDAyNmlwNm1yX21yX3RhYmxlX29wcyxcbi1cdFx0XHQgICAgICBpcG1yX2V4cGlyZV9wcm9jZXNzLCBpcDZtcl9uZXdfdGFibGVfc2V0KTtcbitcdG1ydCA9IG1yX3RhYmxlX2FsbG9jKG5ldCwgaWQsIFx1MDAyNmlwNm1yX21yX3RhYmxlX29wcyxcbitcdFx0XHQgICAgIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIGlwNm1yX25ld190YWJsZV9zZXQpO1xuK1x0aWYgKCFJU19FUlIobXJ0KSlcbitcdFx0SU5JVF9XT1JLKFx1MDAyNm1ydC1cdTAwM2VkZXN0cm95X3dvcmssIGlwNm1yX2ZyZWVfdGFibGVfd29yayk7XG4rXG4rXHRyZXR1cm4gbXJ0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuQEAgLTQyMyw4ICs0NzIsNiBAQCBzdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuIFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQpO1xuIFx0TElTVF9IRUFEKGlwNm1yX2Rldl9raWxsX2xpc3QpO1xuIFxuLVx0V0FSTl9PTl9PTkNFKCFtcl9jYW5fZnJlZV90YWJsZShuZXQpKTtcbi1cbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2bXJ0LVx1MDAzZWlwbXJfZXhwaXJlX3RpbWVyKTtcbiBcdG1yb3V0ZV9jbGVhbl90YWJsZXMobXJ0LCBNUlQ2X0ZMVVNIX01JRlMgfCBNUlQ2X0ZMVVNIX01JRlNfU1RBVElDIHxcbiBcdFx0XHQgICAgTVJUNl9GTFVTSF9NRkMgfCBNUlQ2X0ZMVVNIX01GQ19TVEFUSUMsXG5AQCAtNDM2LDYgKzQ4MywxNyBAQCBzdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuIFx0bGlzdF9zcGxpY2UoXHUwMDI2aXA2bXJfZGV2X2tpbGxfbGlzdCwgZGV2X2tpbGxfbGlzdCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGlwNm1yX2ZyZWVfdGFibGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IG1yX3RhYmxlICptcnQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG1yX3RhYmxlLCBkZXN0cm95X3dvcmspO1xuK1x0TElTVF9IRUFEKGRldl9raWxsX2xpc3QpO1xuK1xuK1x0cnRubF9sb2NrKCk7XG4rXHRpcDZtcl9mcmVlX3RhYmxlKG1ydCwgXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG4rXHR1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KFx1MDAyNmRldl9raWxsX2xpc3QpO1xuK1x0cnRubF91bmxvY2soKTtcbit9XG4rXG4gI2lmZGVmIENPTkZJR19QUk9DX0ZTXG4gLyogVGhlIC9wcm9jIGludGVyZmFjZXMgdG8gbXVsdGljYXN0IHJvdXRpbmdcbiAgKiAvcHJvYy9pcDZfbXJfY2FjaGUgL3Byb2MvaXA2X21yX3ZpZlxuQEAgLTU2OSw3ICs2MjcsNyBAQCBzdGF0aWMgaW50IHBpbTZfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3QgaXB2NmhkciAgICplbmNhcDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICAqcmVnX2RldiA9IE5VTEw7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuLVx0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4rXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IE5VTEw7XG4gXHRzdHJ1Y3QgZmxvd2k2IGZsNiA9IHtcbiBcdFx0LmZsb3dpNl9paWZcdD0gc2tiLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4LFxuIFx0XHQuZmxvd2k2X21hcmtcdD0gc2tiLVx1MDAzZW1hcmssXG5AQCAtNjE3LDkgKzY3NSwxMiBAQCBzdGF0aWMgaW50IHBpbTZfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRza2JfdHVubmVsX3J4KHNrYiwgcmVnX2RldiwgZGV2X25ldChyZWdfZGV2KSk7XG4gXG4gXHRuZXRpZl9yeChza2IpO1xuK1x0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXG4gXHRyZXR1cm4gMDtcbiAgZHJvcDpcbitcdGlmIChtcnQpXG4rXHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNjM0LDcgKzY5NSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpO1xuLVx0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4rXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IE5VTEw7XG4gXHRzdHJ1Y3QgZmxvd2k2IGZsNiA9IHtcbiBcdFx0LmZsb3dpNl9vaWZcdD0gZGV2LVx1MDAzZWlmaW5kZXgsXG4gXHRcdC5mbG93aTZfaWlmXHQ9IHNrYi1cdTAwM2Vza2JfaWlmID8gOiBMT09QQkFDS19JRklOREVYLFxuQEAgLTY1NSwxMiArNzE2LDE1IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlwNm1yX2NhY2hlX3JlcG9ydChtcnQsIHNrYiwgUkVBRF9PTkNFKG1ydC1cdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pLFxuIFx0XHRcdCAgIE1SVDZNU0dfV0hPTEVQS1QpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiBcbiB0eF9sb29rdXBfZXJyOlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gdHhfZXJyOlxuK1x0aWYgKG1ydClcbitcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRERVZfU1RBVFNfSU5DKGRldiwgdHhfZXJyb3JzKTtcbiBcdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbkBAIC0xNjE1LDEyICsxNjc5LDEzIEBAIHN0YXRpYyB2b2lkIG1yb3V0ZV9jbGVhbl90YWJsZXMoc3RydWN0IG1yX3RhYmxlICptcnQsIGludCBmbGFncyxcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGludCBpcDZtcl9za19pbml0KHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc29jayAqc2spXG4rc3RhdGljIGludCBfX2lwNm1yX3NrX2luaXQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRpbnQgZXJyID0gMDtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbiBcbi1cdHJ0bmxfbG9jaygpO1xuK1x0QVNTRVJUX1JUTkwoKTtcbitcbiBcdHNwaW5fbG9jayhcdTAwMjZtcnRfbG9jayk7XG4gXHRpZiAocnRubF9kZXJlZmVyZW5jZShtcnQtXHUwMDNlbXJvdXRlX3NrKSkge1xuIFx0XHRlcnIgPSAtRUFERFJJTlVTRTtcbkBAIC0xNjI4LDYgKzE2OTMsNyBAQCBzdGF0aWMgaW50IGlwNm1yX3NrX2luaXQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBzb2NrICpzaylcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1ydC1cdTAwM2Vtcm91dGVfc2ssIHNrKTtcbiBcdFx0c29ja19zZXRfZmxhZyhzaywgU09DS19SQ1VfRlJFRSk7XG4gXHRcdGF0b21pY19pbmMoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXHUwMDNlbWNfZm9yd2FyZGluZyk7XG4rXHRcdHJlZmNvdW50X2luYyhcdTAwMjZtcnQtXHUwMDNlcmVmY250KTtcbiBcdH1cbiBcdHNwaW5fdW5sb2NrKFx1MDAyNm1ydF9sb2NrKTtcbiBcbkBAIC0xNjM2LDcgKzE3MDIsNiBAQCBzdGF0aWMgaW50IGlwNm1yX3NrX2luaXQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHRcdFx0ICAgICBORVRDT05GQV9NQ19GT1JXQVJESU5HLFxuIFx0XHRcdFx0XHQgICAgIE5FVENPTkZBX0lGSU5ERVhfQUxMLFxuIFx0XHRcdFx0XHQgICAgIG5ldC1cdTAwM2VpcHY2LmRldmNvbmZfYWxsKTtcbi1cdHJ0bmxfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gZXJyO1xuIH1cbkBAIC0xNjQ2LDYgKzE3MTEsNyBAQCBpbnQgaXA2bXJfc2tfZG9uZShzdHJ1Y3Qgc29jayAqc2spXG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4gXHRzdHJ1Y3QgaXB2Nl9kZXZjb25mICpkZXZjb25mO1xuIFx0TElTVF9IRUFEKGRldl9raWxsX2xpc3QpO1xuK1x0c3RydWN0IG1yX3RhYmxlICpmcmVlX21ydCA9IE5VTEw7XG4gXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcbiBcdGludCBlcnIgPSAtRUFDQ0VTO1xuIFxuQEAgLTE2NzUsNiArMTc0MSwxNSBAQCBpbnQgaXA2bXJfc2tfZG9uZShzdHJ1Y3Qgc29jayAqc2spXG4gXG4gXHRcdFx0bXJvdXRlX2NsZWFuX3RhYmxlcyhtcnQsIE1SVDZfRkxVU0hfTUlGUyB8IE1SVDZfRkxVU0hfTUZDLFxuIFx0XHRcdFx0XHQgICAgXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG4rXHRcdFx0aWYgKG1ydC1cdTAwM2VpZCAhPSBSVDZfVEFCTEVfREZMVCBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIVJFQURfT05DRShtcnQtXHUwMDNlbWF4dmlmKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIVJFQURfT05DRShtcnQtXHUwMDNlY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICBsaXN0X2VtcHR5KFx1MDAyNm1ydC1cdTAwM2VtZmNfY2FjaGVfbGlzdCkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIGxpc3RfZW1wdHkoXHUwMDI2bXJ0LVx1MDAzZW1mY191bnJlc19xdWV1ZSkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIFJFQURfT05DRShtcnQtXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtKSBcdTAwM2MgMCkge1xuK1x0XHRcdFx0bGlzdF9kZWxfcmN1KFx1MDAyNm1ydC1cdTAwM2VsaXN0KTtcbitcdFx0XHRcdGZyZWVfbXJ0ID0gbXJ0O1xuK1x0XHRcdH1cbiBcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtMTY4Miw2ICsxNzU3LDE0IEBAIGludCBpcDZtcl9za19kb25lKHN0cnVjdCBzb2NrICpzaylcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG4gXHRydG5sX3VubG9jaygpO1xuIFxuK1x0aWYgKCFlcnIpXG4rXHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuK1xuK1x0aWYgKGZyZWVfbXJ0KSB7XG4rXHRcdHN5bmNocm9uaXplX3JjdSgpO1xuK1x0XHRpcDZtcl9wdXRfdGFibGUoZnJlZV9tcnQpO1xuK1x0fVxuK1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTY5MywxMSArMTc3NiwxNSBAQCBib29sIG1yb3V0ZTZfaXNfc29ja2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0LmZsb3dpNl9vaWZcdD0gc2tiLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4LFxuIFx0XHQuZmxvd2k2X21hcmtcdD0gc2tiLVx1MDAzZW1hcmssXG4gXHR9O1xuK1x0Ym9vbCByZXQ7XG4gXG4gXHRpZiAoaXA2bXJfZmliX2xvb2t1cChuZXQsIFx1MDAyNmZsNiwgXHUwMDI2bXJ0KSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRyZXR1cm4gcmN1X2FjY2Vzc19wb2ludGVyKG1ydC1cdTAwM2Vtcm91dGVfc2spO1xuK1x0cmV0ID0gcmN1X2FjY2Vzc19wb2ludGVyKG1ydC1cdTAwM2Vtcm91dGVfc2spO1xuK1x0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBFWFBPUlRfU1lNQk9MKG1yb3V0ZTZfaXNfc29ja2V0KTtcbiBcbkBAIC0xNzE2LDIwICsxODAzLDI0IEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdHN0cnVjdCBtZjZjY3RsIG1mYztcbiBcdG1pZmlfdCBtaWZpO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuLVx0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4rXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IE5VTEw7XG4rXHR1MzIgdGFibGUgPSByYXc2X3NrKHNrKS1cdTAwM2VpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQ7XG4gXG4gXHRpZiAoc2stXHUwMDNlc2tfdHlwZSAhPSBTT0NLX1JBVyB8fFxuIFx0ICAgIGluZXRfc2soc2spLVx1MDAzZWluZXRfbnVtICE9IElQUFJPVE9fSUNNUFY2KVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRtcnQgPSBpcDZtcl9nZXRfdGFibGUobmV0LCByYXc2X3NrKHNrKS1cdTAwM2VpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpO1xuLVx0aWYgKCFtcnQpXG4tXHRcdHJldHVybiAtRU5PRU5UO1xuLVxuLVx0aWYgKG9wdG5hbWUgIT0gTVJUNl9JTklUKSB7XG4rXHRpZiAob3B0bmFtZSAhPSBNUlQ2X0lOSVQgXHUwMDI2XHUwMDI2XG4rXHQgICAgb3B0bmFtZSAhPSBNUlQ2X1RBQkxFIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG9wdG5hbWUgIT0gTVJUNl9ET05FKSB7XG4rXHRcdG1ydCA9IGlwNm1yX2dldF90YWJsZV9ob2xkKG5ldCwgdGFibGUpO1xuK1x0XHRpZiAoIW1ydClcbitcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcdFx0aWYgKHNrICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihtcnQtXHUwMDNlbXJvdXRlX3NrKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICFuc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSlcbitcdFx0ICAgICFuc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkge1xuK1x0XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRzd2l0Y2ggKG9wdG5hbWUpIHtcbkBAIC0xNzM3LDMyICsxODI4LDQxIEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRcdHJldHVybiBpcDZtcl9za19pbml0KG1ydCwgc2spO1xuK1x0XHRydG5sX2xvY2soKTtcbitcdFx0bXJ0ID0gaXA2bXJfbmV3X3RhYmxlKG5ldCwgdGFibGUpO1xuK1x0XHRpZiAoIUlTX0VSUihtcnQpKVxuK1x0XHRcdHJldCA9IF9faXA2bXJfc2tfaW5pdChtcnQsIHNrKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHJldCA9IFBUUl9FUlIobXJ0KTtcbitcdFx0cnRubF91bmxvY2soKTtcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGNhc2UgTVJUNl9ET05FOlxuIFx0XHRyZXR1cm4gaXA2bXJfc2tfZG9uZShzayk7XG4gXG4gXHRjYXNlIE1SVDZfQUREX01JRjpcbiBcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKHZpZikpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VpbnZhbDtcbiBcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNnZpZiwgb3B0dmFsLCBzaXplb2YodmlmKSkpXG4tXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VmYXVsdDtcbiBcdFx0aWYgKHZpZi5taWY2Y19taWZpIFx1MDAzZT0gTUFYTUlGUylcbi1cdFx0XHRyZXR1cm4gLUVORklMRTtcbitcdFx0XHRnb3RvIG91dF9wdXRfdGFibGVfZW5maWxlO1xuIFx0XHRydG5sX2xvY2soKTtcbiBcdFx0cmV0ID0gbWlmNl9hZGQobmV0LCBtcnQsIFx1MDAyNnZpZixcbiBcdFx0XHQgICAgICAgc2sgPT0gcnRubF9kZXJlZmVyZW5jZShtcnQtXHUwMDNlbXJvdXRlX3NrKSk7XG4gXHRcdHJ0bmxfdW5sb2NrKCk7XG4rXHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0Y2FzZSBNUlQ2X0RFTF9NSUY6XG4gXHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihtaWZpX3QpKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7XG4gXHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZtaWZpLCBvcHR2YWwsIHNpemVvZihtaWZpX3QpKSlcbi1cdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0XHRnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0O1xuIFx0XHRydG5sX2xvY2soKTtcbiBcdFx0cmV0ID0gbWlmNl9kZWxldGUobXJ0LCBtaWZpLCAwLCBOVUxMKTtcbiBcdFx0cnRubF91bmxvY2soKTtcbitcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHQvKlxuQEAgLTE3NzYsOSArMTg3Niw5IEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdGNhc2UgTVJUNl9BRERfTUZDX1BST1hZOlxuIFx0Y2FzZSBNUlQ2X0RFTF9NRkNfUFJPWFk6XG4gXHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihtZmMpKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7XG4gXHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZtZmMsIG9wdHZhbCwgc2l6ZW9mKG1mYykpKVxuLVx0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XG4gXHRcdGlmIChwYXJlbnQgPT0gMClcbiBcdFx0XHRwYXJlbnQgPSBtZmMubWY2Y2NfcGFyZW50O1xuIFxuQEAgLTE3OTMsNiArMTg5Myw3IEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0XHRcdFx0ICAgIHBhcmVudCk7XG4gXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZuZXQtXHUwMDNlaXB2Ni5tZmNfbXV0ZXgpO1xuK1x0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGNhc2UgTVJUNl9GTFVTSDpcbkBAIC0xODAxLDE0ICsxOTAyLDE1IEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0aW50IGZsYWdzO1xuIFxuIFx0XHRpZiAob3B0bGVuICE9IHNpemVvZihmbGFncykpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VpbnZhbDtcbiBcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmZsYWdzLCBvcHR2YWwsIHNpemVvZihmbGFncykpKVxuLVx0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XG4gXG4gXHRcdHJ0bmxfbG9jaygpO1xuIFx0XHRtcm91dGVfY2xlYW5fdGFibGVzKG1ydCwgZmxhZ3MsIFx1MDAyNmRldl9raWxsX2xpc3QpO1xuIFx0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KFx1MDAyNmRldl9raWxsX2xpc3QpO1xuIFx0XHRydG5sX3VubG9jaygpO1xuK1x0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG5AQCAtMTgyMCwxMCArMTkyMiwxMSBAQCBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRcdGludCB2O1xuIFxuIFx0XHRpZiAob3B0bGVuICE9IHNpemVvZih2KSlcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRnb3RvIG91dF9wdXRfdGFibGVfZWludmFsO1xuIFx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2diwgb3B0dmFsLCBzaXplb2YodikpKVxuLVx0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XG4gXHRcdFdSSVRFX09OQ0UobXJ0LVx1MDAzZW1yb3V0ZV9kb19hc3NlcnQsIHYpO1xuK1x0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG5AQCAtMTgzNCw5ICsxOTM3LDkgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFx0XHRpbnQgdjtcbiBcbiBcdFx0aWYgKG9wdGxlbiAhPSBzaXplb2YodikpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VpbnZhbDtcbiBcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNnYsIG9wdHZhbCwgc2l6ZW9mKHYpKSlcbi1cdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0XHRnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0O1xuIFxuIFx0XHRkb193cm1pZndob2xlID0gKHYgPT0gTVJUNk1TR19XUk1JRldIT0xFKTtcbiBcdFx0diA9ICEhdjtcbkBAIC0xODQ4LDYgKzE5NTEsNyBAQCBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRcdFx0V1JJVEVfT05DRShtcnQtXHUwMDNlbXJvdXRlX2RvX3dydmlmd2hvbGUsIGRvX3dybWlmd2hvbGUpO1xuIFx0XHR9XG4gXHRcdHJ0bmxfdW5sb2NrKCk7XG4rXHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuQEAgLTE4NjQsMTggKzE5NjgsMjIgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFx0XHQvKiBcInBpbTZyZWcldVwiIHNob3VsZCBub3QgZXhjZWVkIDE2IGJ5dGVzIChJRk5BTVNJWikgKi9cbiBcdFx0aWYgKHYgIT0gUlRfVEFCTEVfREVGQVVMVCBcdTAwMjZcdTAwMjYgdiBcdTAwM2U9IDEwMDAwMDAwMClcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0aWYgKHNrID09IHJjdV9hY2Nlc3NfcG9pbnRlcihtcnQtXHUwMDNlbXJvdXRlX3NrKSlcbitcbitcdFx0bXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQobmV0LCB0YWJsZSk7XG4rXHRcdGlmIChtcnQgXHUwMDI2XHUwMDI2IHNrID09IHJjdV9hY2Nlc3NfcG9pbnRlcihtcnQtXHUwMDNlbXJvdXRlX3NrKSkge1xuK1x0XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRcdHJldHVybiAtRUJVU1k7XG4rXHRcdH1cbitcdFx0aWYgKCFuc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkge1xuK1x0XHRcdGlmIChtcnQpXG4rXHRcdFx0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbitcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbitcdFx0fVxuK1x0XHRpZiAobXJ0KVxuK1x0XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFxuLVx0XHRydG5sX2xvY2soKTtcbi1cdFx0cmV0ID0gMDtcbi1cdFx0bXJ0ID0gaXA2bXJfbmV3X3RhYmxlKG5ldCwgdik7XG4tXHRcdGlmIChJU19FUlIobXJ0KSlcbi1cdFx0XHRyZXQgPSBQVFJfRVJSKG1ydCk7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyYXc2X3NrKHNrKS1cdTAwM2VpcDZtcl90YWJsZSA9IHY7XG4tXHRcdHJ0bmxfdW5sb2NrKCk7XG4tXHRcdHJldHVybiByZXQ7XG4rXHRcdHJhdzZfc2soc2spLVx1MDAzZWlwNm1yX3RhYmxlID0gdjtcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4gI2VuZGlmXG4gXHQvKlxuQEAgLTE4ODMsOCArMTk5MSwyNSBAQCBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gXHQgKlx0c2V0LlxuIFx0ICovXG4gXHRkZWZhdWx0OlxuK1x0XHRpZiAobXJ0KVxuK1x0XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuIFx0fVxuK1xuK291dF9wdXRfdGFibGVfZWZhdWx0OlxuK1x0aWYgKG1ydClcbitcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4rXHRyZXR1cm4gLUVGQVVMVDtcbitcbitvdXRfcHV0X3RhYmxlX2VpbnZhbDpcbitcdGlmIChtcnQpXG4rXHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuK1x0cmV0dXJuIC1FSU5WQUw7XG4rXG4rb3V0X3B1dF90YWJsZV9lbmZpbGU6XG4rXHRpZiAobXJ0KVxuK1x0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbitcdHJldHVybiAtRU5GSUxFO1xuIH1cbiBcbiAvKlxuQEAgLTE4OTUsNiArMjAyMCw3IEBAIGludCBpcDZfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0XHQgIHNvY2twdHJfdCBvcHRsZW4pXG4ge1xuIFx0aW50IG9scjtcbitcdGludCByZXQgPSAwO1xuIFx0aW50IHZhbDtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbiBcdHN0cnVjdCBtcl90YWJsZSAqbXJ0O1xuQEAgLTE5MDMsNyArMjAyOSw3IEBAIGludCBpcDZfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdCAgICBpbmV0X3NrKHNrKS1cdTAwM2VpbmV0X251bSAhPSBJUFBST1RPX0lDTVBWNilcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0bXJ0ID0gaXA2bXJfZ2V0X3RhYmxlKG5ldCwgcmF3Nl9zayhzayktXHUwMDNlaXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTtcbitcdG1ydCA9IGlwNm1yX2dldF90YWJsZV9ob2xkKG5ldCwgcmF3Nl9zayhzayktXHUwMDNlaXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTtcbiBcdGlmICghbXJ0KVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbkBAIC0xOTIwLDI2ICsyMDQ2LDMzIEBAIGludCBpcDZfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0dmFsID0gUkVBRF9PTkNFKG1ydC1cdTAwM2Vtcm91dGVfZG9fYXNzZXJ0KTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuK1x0XHRyZXQgPSAtRU5PUFJPVE9PUFQ7XG4rXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNm9sciwgb3B0bGVuLCBzaXplb2YoaW50KSkpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNm9sciwgb3B0bGVuLCBzaXplb2YoaW50KSkpIHtcbitcdFx0cmV0ID0gLUVGQVVMVDtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4gXG4gXHRvbHIgPSBtaW5fdChpbnQsIG9sciwgc2l6ZW9mKGludCkpO1xuLVx0aWYgKG9sciBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAob2xyIFx1MDAzYyAwKSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuIFxuLVx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFx1MDAyNm9sciwgc2l6ZW9mKGludCkpKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdGlmIChjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBcdTAwMjZ2YWwsIG9scikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0cmV0dXJuIDA7XG4rXHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXHUwMDI2b2xyLCBzaXplb2YoaW50KSkgfHxcbitcdCAgICBjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBcdTAwMjZ2YWwsIG9scikpXG4rXHRcdHJldCA9IC1FRkFVTFQ7XG4rb3V0OlxuK1x0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKlxuICAqXHRUaGUgSVAgbXVsdGljYXN0IGlvY3RsIHN1cHBvcnQgcm91dGluZXMuXG4gICovXG4rXG4gaW50IGlwNm1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCAqYXJnKVxuIHtcbiBcdHN0cnVjdCBzaW9jX3NnX3JlcTYgKnNyO1xuQEAgLTE5NDksNyArMjA4Miw3IEBAIGludCBpcDZtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgKmFyZylcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbiBcdHN0cnVjdCBtcl90YWJsZSAqbXJ0O1xuIFxuLVx0bXJ0ID0gaXA2bXJfZ2V0X3RhYmxlKG5ldCwgcmF3Nl9zayhzayktXHUwMDNlaXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTtcbitcdG1ydCA9IGlwNm1yX2dldF90YWJsZV9ob2xkKG5ldCwgcmF3Nl9zayhzayktXHUwMDNlaXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTtcbiBcdGlmICghbXJ0KVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbkBAIC0xOTU3LDcgKzIwOTAsNyBAQCBpbnQgaXA2bXJfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkICphcmcpXG4gXHRjYXNlIFNJT0NHRVRNSUZDTlRfSU42OlxuIFx0XHR2ciA9IChzdHJ1Y3Qgc2lvY19taWZfcmVxNiAqKWFyZztcbiBcdFx0aWYgKHZyLVx1MDAzZW1pZmkgXHUwMDNlPSBtcnQtXHUwMDNlbWF4dmlmKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7XG4gXHRcdHZyLVx1MDAzZW1pZmkgPSBhcnJheV9pbmRleF9ub3NwZWModnItXHUwMDNlbWlmaSwgbXJ0LVx1MDAzZW1heHZpZik7XG4gXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0dmlmID0gXHUwMDI2bXJ0LVx1MDAzZXZpZl90YWJsZVt2ci1cdTAwM2VtaWZpXTtcbkBAIC0xOTY3LDkgKzIxMDAsMTEgQEAgaW50IGlwNm1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCAqYXJnKVxuIFx0XHRcdHZyLVx1MDAzZWlieXRlcyA9IFJFQURfT05DRSh2aWYtXHUwMDNlYnl0ZXNfaW4pO1xuIFx0XHRcdHZyLVx1MDAzZW9ieXRlcyA9IFJFQURfT05DRSh2aWYtXHUwMDNlYnl0ZXNfb3V0KTtcbiBcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiBcdGNhc2UgU0lPQ0dFVFNHQ05UX0lONjpcbiBcdFx0c3IgPSAoc3RydWN0IHNpb2Nfc2dfcmVxNiAqKWFyZztcbkBAIC0xOTgyLDE1ICsyMTE3LDIxIEBAIGludCBpcDZtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgKmFyZylcbiBcdFx0XHRzci1cdTAwM2VieXRlY250ID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZjLVx1MDAzZV9jLm1mY191bi5yZXMuYnl0ZXMpO1xuIFx0XHRcdHNyLVx1MDAzZXdyb25nX2lmID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZjLVx1MDAzZV9jLm1mY191bi5yZXMud3JvbmdfaWYpO1xuIFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuIFx0ZGVmYXVsdDpcbitcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdHJldHVybiAtRU5PSU9DVExDTUQ7XG4gXHR9XG4tfVxuIFxuK291dF9wdXRfdGFibGVfZWludmFsOlxuK1x0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4gI2lmZGVmIENPTkZJR19DT01QQVRcbiBzdHJ1Y3QgY29tcGF0X3Npb2Nfc2dfcmVxNiB7XG4gXHRzdHJ1Y3Qgc29ja2FkZHJfaW42IHNyYztcbkBAIC0yMDE3LDE2ICsyMTU4LDE2IEBAIGludCBpcDZtcl9jb21wYXRfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKVxuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuIFx0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4gXG4tXHRtcnQgPSBpcDZtcl9nZXRfdGFibGUobmV0LCByYXc2X3NrKHNrKS1cdTAwM2VpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpO1xuK1x0bXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQobmV0LCByYXc2X3NrKHNrKS1cdTAwM2VpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpO1xuIFx0aWYgKCFtcnQpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuIFx0c3dpdGNoIChjbWQpIHtcbiBcdGNhc2UgU0lPQ0dFVE1JRkNOVF9JTjY6XG4gXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZ2ciwgYXJnLCBzaXplb2YodnIpKSlcbi1cdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0XHRnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0O1xuIFx0XHRpZiAodnIubWlmaSBcdTAwM2U9IG1ydC1cdTAwM2VtYXh2aWYpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VpbnZhbDtcbiBcdFx0dnIubWlmaSA9IGFycmF5X2luZGV4X25vc3BlYyh2ci5taWZpLCBtcnQtXHUwMDNlbWF4dmlmKTtcbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHR2aWYgPSBcdTAwMjZtcnQtXHUwMDNldmlmX3RhYmxlW3ZyLm1pZmldO1xuQEAgLTIwMzgsMTQgKzIxNzksMTYgQEAgaW50IGlwNm1yX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpXG4gXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRcdFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFx1MDAyNnZyLCBzaXplb2YodnIpKSlcbi1cdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VmYXVsdDtcbitcdFx0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiBcdGNhc2UgU0lPQ0dFVFNHQ05UX0lONjpcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnNyLCBhcmcsIHNpemVvZihzcikpKVxuLVx0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XG4gXG4gXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0YyA9IGlwNm1yX2NhY2hlX2ZpbmQobXJ0LCBcdTAwMjZzci5zcmMuc2luNl9hZGRyLCBcdTAwMjZzci5ncnAuc2luNl9hZGRyKTtcbkBAIC0yMDU2LDE0ICsyMTk5LDI1IEBAIGludCBpcDZtcl9jb21wYXRfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKVxuIFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0XHRcdGlmIChjb3B5X3RvX3VzZXIoYXJnLCBcdTAwMjZzciwgc2l6ZW9mKHNyKSkpXG4tXHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XG4rXHRcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdH1cbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4gXHRkZWZhdWx0OlxuK1x0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0cmV0dXJuIC1FTk9JT0NUTENNRDtcbiBcdH1cbitcbitvdXRfcHV0X3RhYmxlX2VmYXVsdDpcbitcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuK1x0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rb3V0X3B1dF90YWJsZV9laW52YWw6XG4rXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbitcdHJldHVybiAtRUlOVkFMO1xuIH1cbiAjZW5kaWZcbiBcbkBAIC0yMzkyLDEzICsyNTQ2LDE2IEBAIGludCBpcDZfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0aWYgKHZpZiBcdTAwM2U9IDApIHtcbiBcdFx0XHRpbnQgZXJyID0gaXA2bXJfY2FjaGVfdW5yZXNvbHZlZChtcnQsIHZpZiwgc2tiLCBkZXYpO1xuIFxuK1x0XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbitcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbiBcbiBcdGlwNl9tcl9mb3J3YXJkKG5ldCwgbXJ0LCBkZXYsIHNrYiwgY2FjaGUpO1xuK1x0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMjQ0MSwxOSArMjU5OCwyNSBAQCBpbnQgaXA2X21yX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdC8qIE5vIHVzYWJsZSBjYWNoZSBlbnRyeSAqL1xuIFx0aWYgKCFjYWNoZSkge1xuIFx0XHR2aWYgPSBpcDZtcl9maW5kX3ZpZihtcnQsIGRldik7XG4tXHRcdGlmICh2aWYgXHUwMDNlPSAwKVxuLVx0XHRcdHJldHVybiBpcDZtcl9jYWNoZV91bnJlc29sdmVkKG1ydCwgdmlmLCBza2IsIGRldik7XG4tXHRcdGdvdG8gaXA2X291dHB1dDtcbitcdFx0aWYgKHZpZiBcdTAwM2U9IDApIHtcbitcdFx0XHRlcnIgPSBpcDZtcl9jYWNoZV91bnJlc29sdmVkKG1ydCwgdmlmLCBza2IsIGRldik7XG4rXHRcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1x0XHRnb3RvIG91dF9wdXQ7XG4gXHR9XG4gXG4gXHQvKiBXcm9uZyBpbnRlcmZhY2UgKi9cbiBcdHZpZiA9IGNhY2hlLVx1MDAzZV9jLm1mY19wYXJlbnQ7XG4gXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKG1ydC1cdTAwM2V2aWZfdGFibGVbdmlmXS5kZXYpICE9IGRldilcbi1cdFx0Z290byBpcDZfb3V0cHV0O1xuK1x0XHRnb3RvIG91dF9wdXQ7XG4gXG4gXHRpcDZfbXJfb3V0cHV0X2ZpbmlzaChuZXQsIG1ydCwgZGV2LCBza2IsIGNhY2hlKTtcbitcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0cmV0dXJuIDA7XG4gXG4rb3V0X3B1dDpcbitcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIGlwNl9vdXRwdXQ6XG4gXHRyZXR1cm4gaXA2X291dHB1dChuZXQsIHNrLCBza2IpO1xuIH1cbkBAIC0yNzU1LDMzICsyOTE4LDM1IEBAIHN0YXRpYyBpbnQgaXA2bXJfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRncnAgPSBubGFfZ2V0X2luNl9hZGRyKHRiW1JUQV9EU1RdKTtcbiBcdHRhYmxlaWQgPSBubGFfZ2V0X3UzMl9kZWZhdWx0KHRiW1JUQV9UQUJMRV0sIDApO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVxuLVx0bXJ0ID0gX19pcDZtcl9nZXRfdGFibGUobmV0LCB0YWJsZWlkID86IFJUX1RBQkxFX0RFRkFVTFQpO1xuK1x0bXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQobmV0LCB0YWJsZWlkID86IFJUX1RBQkxFX0RFRkFVTFQpO1xuIFx0aWYgKCFtcnQpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJNUiB0YWJsZSBkb2VzIG5vdCBleGlzdFwiKTtcbiBcdFx0ZXJyID0gLUVOT0VOVDtcbi1cdFx0Z290byBlcnI7XG4rXHRcdGdvdG8gZXJyX2ZyZWU7XG4gXHR9XG4gXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRjYWNoZSA9IGlwNm1yX2NhY2hlX2ZpbmQobXJ0LCBcdTAwMjZzcmMsIFx1MDAyNmdycCk7XG4gXHRpZiAoIWNhY2hlKSB7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcIk1SIGNhY2hlIGVudHJ5IG5vdCBmb3VuZFwiKTtcbiBcdFx0ZXJyID0gLUVOT0VOVDtcbi1cdFx0Z290byBlcnI7XG4rXHRcdGdvdG8gZXJyX3B1dDtcbiBcdH1cbiBcbiBcdGVyciA9IGlwNm1yX2ZpbGxfbXJvdXRlKG1ydCwgc2tiLCBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxuIFx0XHRcdFx0bmxoLVx1MDAzZW5sbXNnX3NlcSwgY2FjaGUsIFJUTV9ORVdST1VURSwgMCk7XG4tXHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycjtcbi1cbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcHV0O1xuIFxuLVx0cmV0dXJuIHJ0bmxfdW5pY2FzdChza2IsIG5ldCwgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCk7XG4rXHRlcnIgPSBydG5sX3VuaWNhc3Qoc2tiLCBuZXQsIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQpO1xuK1x0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4rXHRyZXR1cm4gZXJyO1xuIFxuLWVycjpcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuK2Vycl9wdXQ6XG4rXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbitlcnJfZnJlZTpcbiBcdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5AQCAtMjgwNCw3ICsyOTY5LDcgQEAgc3RhdGljIGludCBpcDZtcl9ydG1fZHVtcHJvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdGlmIChmaWx0ZXIudGFibGVfaWQpIHtcbiBcdFx0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4gXG4tXHRcdG1ydCA9IF9faXA2bXJfZ2V0X3RhYmxlKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIGZpbHRlci50YWJsZV9pZCk7XG4rXHRcdG1ydCA9IGlwNm1yX2dldF90YWJsZV9ob2xkKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIGZpbHRlci50YWJsZV9pZCk7XG4gXHRcdGlmICghbXJ0KSB7XG4gXHRcdFx0aWYgKHJ0bmxfbXNnX2ZhbWlseShjYi1cdTAwM2VubGgpICE9IFJUTkxfRkFNSUxZX0lQNk1SKSB7XG4gXHRcdFx0XHRlcnIgPSBza2ItXHUwMDNlbGVuO1xuQEAgLTI4MTgsNiArMjk4Myw3IEBAIHN0YXRpYyBpbnQgaXA2bXJfcnRtX2R1bXByb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXG4gXHRcdGVyciA9IG1yX3RhYmxlX2R1bXAobXJ0LCBza2IsIGNiLCBfaXA2bXJfZmlsbF9tcm91dGUsXG4gXHRcdFx0XHQgICAgXHUwMDI2bWZjX3VucmVzX2xvY2ssIFx1MDAyNmZpbHRlcik7XG4rXHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRlcnIgPSBza2ItXHUwMDNlbGVuID8gOiBlcnI7XG4gXHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjI6NTk6MzIuNDc5MzQ0Mzk1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU1NjUzNjk0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogSVB2NiBNdWx0aWNhc3QgUm91dGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggYWZmZWN0aW5nIElQdjYgbXVsdGljYXN0IHJvdXRpbmcsIHNwZWNpZmljYWxseSB0b3VjaGluZyBgbmV0L2lwdjYvaXA2bXIuY2AsIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2AsIGFuZCBgaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oYC4gIFRoZSBjb3JlIG9mIGl0IGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgcmVmZXJlbmNlIGNvdW50aW5nIGZvciBgc3RydWN0IG1yX3RhYmxlYCDigJMgYHJlZmNudGAgYW5kIGBkZXN0cm95X3dvcmtgIOKAkyBhbmQgYSBjb3JyZXNwb25kaW5nIGNoYW5nZSBpbiB0aGUgdGFibGUgbWFuYWdlbWVudCBmdW5jdGlvbnMuIEJhc2ljYWxseSwgdGhleSBhcmUgdHJ5aW5nIHRvIGZpeCBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24sIHdoaWNoIGlzIGNyaXRpY2FsLlxuXG5NeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMsICp5ZXMqLCB0aGlzIHdhcnJhbnRzIGZ1enppbmcuIEl0J3MgdG91Y2hpbmcgY29yZSBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSBJUHY2IG11bHRpY2FzdCByb3V0aW5nLCB3aGljaCBtZWFucyBpdOKAmXMgZGVmaW5pdGVseSBjcml0aWNhbCBpbmZyYXN0cnVjdHVyZS4gSXQgaXMgYWNjZXNzaWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYXMgd2VsbC5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaCB0byBjb25zdHJ1Y3QgYSBsaXN0IG9mIGZ1enogdGFyZ2V0cy4gVGhlIG1vc3QgaW1wb3J0YW50IG9uZXMgc2VlbSB0byBiZSB0aGUgbmV3IGBpcDZtcl9nZXRfdGFibGVfaG9sZGAsIGBfX2lwNm1yX3B1dF90YWJsZWAsIGBpcDZtcl9wdXRfdGFibGVgLCBhbmQgYGlwNm1yX2ZyZWVfdGFibGVfd29ya2AsIGJ1dCB0aGUgbW9kaWZpY2F0aW9ucyBhcmVuJ3QgbGltaXRlZCB0byB0aGF0LiBUaGV5IGFsc28gbW9kaWZpZWQgaG93IHRoZSBvdGhlciBmdW5jdGlvbnMgYXJlIHVzZWQgbGlrZSBgaXA2bXJfbmV3X3RhYmxlYCwgYGlwNm1yX2ZyZWVfdGFibGVgLCBgcGltNl9yY3ZgLCBgcmVnX3ZpZl94bWl0YCwgYF9faXA2bXJfc2tfaW5pdGAsIGBpcDZtcl9za19kb25lYCwgYG1yb3V0ZTZfaXNfc29ja2V0YCwgYGlwNl9tcm91dGVfc2V0c29ja29wdGAsIGBpcDZfbXJvdXRlX2dldHNvY2tvcHRgLCBgaXA2bXJfaW9jdGxgLCBgaXA2bXJfY29tcGF0X2lvY3RsYCwgYGlwNl9tcl9pbnB1dGAsIGBpcDZfbXJfb3V0cHV0YCwgYGlwNm1yX3J0bV9nZXRyb3V0ZWAsIGFuZCBgaXA2bXJfcnRtX2R1bXByb3V0ZWAuXG5cblRoaW5raW5nIGFib3V0IHRoZSBtb3N0IGVmZmVjdGl2ZSBmdXp6aW5nIHRhcmdldHMsIEknZCBob25lIGluIG9uIHRoZXNlOiBgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0YCwgYGlwNl9tcm91dGVfZ2V0c29ja29wdGAsIGBpcDZtcl9pb2N0bGAsIGBpcDZtcl9jb21wYXRfaW9jdGxgLCBgaXA2X21yX2lucHV0YCwgYGlwNl9tcl9vdXRwdXRgLCBgaXA2bXJfcnRtX2dldHJvdXRlYCwgYGlwNm1yX3J0bV9kdW1wcm91dGVgLCBgcGltNl9yY3ZgLCBhbmQgYHJlZ192aWZfeG1pdGAuIFNvY2tldCBvcHRpb25zIGFuZCBpb2N0bHMgYXJlIGFsd2F5cyBnb29kIHN0YXJ0aW5nIHBvaW50cywgc2luY2UgdGhleSBwcm92aWRlIGRpcmVjdCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBrZXJuZWwuIFRoZSByb3V0aW5nIHRhYmxlIGludGVyYWN0aW9uIGFuZCBwYWNrZXQgaW5wdXQvb3V0cHV0IGZ1bmN0aW9ucyBhcmUgYWxzbyBpbXBvcnRhbnQuXG5cbkZpbmFsbHksIGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9mIHRoZSBLY29uZmlnIG9wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBJUHY2IG11bHRpY2FzdCByb3V0aW5nIChgQ09ORklHX0lQVjZfTVJPVVRFYCkgaXMgZW5hYmxlZC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB3aXRoIGEgYGdyZXBwZXJgIHNlYXJjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4OTYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMjo1OTo0MS4wMzU4ODU0MDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ0Mzc5ODcxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUFY2X01ST1VURVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZz03MD1DT05GSUdfSVBWNl9TVUJUUkVFUz15XFxuYXJjaC9hcm0vY29uZmlncy9rZXlzdG9uZV9kZWZjb25maWc6NzE6Q09ORklHX0lQVjZfTVJPVVRFPXlcXG5hcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZy03Mi1DT05GSUdfSVBWNl9QSU1TTV9WMj15XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnPTE1OT1DT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVM9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc6MTYwOkNPTkZJR19JUFY2X01ST1VURT15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy0xNjEtQ09ORklHX01QVENQPXlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9MTc1PUNPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUz15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzoxNzY6Q09ORklHX0lQVjZfTVJPVVRFPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnLTE3Ny1DT05GSUdfTVBUQ1A9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvYmNtNDd4eF9kZWZjb25maWc9MjU9Q09ORklHX0lQVjZfU1VCVFJFRVM9eVxcbmFyY2gvbWlwcy9jb25maWdzL2JjbTQ3eHhfZGVmY29uZmlnOjI2OkNPTkZJR19JUFY2X01ST1VURT15XFxuYXJjaC9taXBzL2NvbmZpZ3MvYmNtNDd4eF9kZWZjb25maWctMjctQ09ORklHX05FVEZJTFRFUj15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9kYjF4eHhfZGVmY29uZmlnPTY1PUNPTkZJR19JUFY2X1NVQlRSRUVTPXlcXG5hcmNoL21pcHMvY29uZmlncy9kYjF4eHhfZGVmY29uZmlnOjY2OkNPTkZJR19JUFY2X01ST1VURT15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZGIxeHh4X2RlZmNvbmZpZzo2NzpDT05GSUdfSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcXG5hcmNoL21pcHMvY29uZmlncy9kYjF4eHhfZGVmY29uZmlnLTY4LUNPTkZJR19JUFY2X1BJTVNNX1YyPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnPTQ4PUNPTkZJR19JUFY2X1NVQlRSRUVTPXlcXG5hcmNoL21pcHMvY29uZmlncy9pcDIyX2RlZmNvbmZpZzo0OTpDT05GSUdfSVBWNl9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnLTUwLUNPTkZJR19JUFY2X1BJTVNNX1YyPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnPTQ3PUNPTkZJR19JUFY2X1NVQlRSRUVTPXlcXG5hcmNoL21pcHMvY29uZmlncy9pcDI3X2RlZmNvbmZpZzo0ODpDT05GSUdfSVBWNl9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnLTQ5LUNPTkZJR19JUFY2X1BJTVNNX1YyPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2lwMzBfZGVmY29uZmlnPTQ3PUNPTkZJR19JUFY2X1NVQlRSRUVTPXlcXG5hcmNoL21pcHMvY29uZmlncy9pcDMwX2RlZmNvbmZpZzo0ODpDT05GSUdfSVBWNl9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL2lwMzBfZGVmY29uZmlnLTQ5LUNPTkZJR19JUFY2X1BJTVNNX1YyPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZz01MT1DT05GSUdfSVBWNl9UVU5ORUw9bVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZzo1MjpDT05GSUdfSVBWNl9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZy01My1DT05GSUdfSVBWNl9QSU1TTV9WMj15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9rdm1fZGVmY29uZmlnPTU1PUNPTkZJR19JUFY2X1RVTk5FTD1tXFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZzo1NjpDT05GSUdfSVBWNl9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWctNTctQ09ORklHX0lQVjZfUElNU01fVjI9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnPTU0PUNPTkZJR19JUFY2X1RVTk5FTD1tXFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnOjU1OkNPTkZJR19JUFY2X01ST1VURT15XFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnLTU2LUNPTkZJR19JUFY2X1BJTVNNX1YyPXlcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWc9MTE3PUNPTkZJR19JUFY2X1NVQlRSRUVTPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnOjExODpDT05GSUdfSVBWNl9NUk9VVEU9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWctMTE5LUNPTkZJR19JUFY2X1BJTVNNX1YyPXlcXG4tLVxcbmRyaXZlcnMvbmV0L3ZyZi5jPTE1MTc9c3RhdGljIGludCB2cmZfYWRkX2ZpYl9ydWxlcyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdnJmLmMtMTUzNC1cXG5kcml2ZXJzL25ldC92cmYuYzoxNTM1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVMpXFxuZHJpdmVycy9uZXQvdnJmLmMtMTUzNi1cXHRlcnIgPSB2cmZfZmliX3J1bGUoZGV2LCBSVE5MX0ZBTUlMWV9JUDZNUiwgdHJ1ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC92cmYuYy0xNTQyLVxcbmRyaXZlcnMvbmV0L3ZyZi5jOjE1NDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFUylcXG5kcml2ZXJzL25ldC92cmYuYy0xNTQ0LWlwNm1yX2VycjpcXG4tLVxcbmluY2x1ZGUvbGludXgvaXB2Ni5oPTEzPXN0cnVjdCBpcHY2X2RldmNvbmYge1xcbi0tXFxuaW5jbHVkZS9saW51eC9pcHY2LmgtNjItI2VuZGlmXFxuaW5jbHVkZS9saW51eC9pcHY2Lmg6NjM6I2lmZGVmIENPTkZJR19JUFY2X01ST1VURVxcbmluY2x1ZGUvbGludXgvaXB2Ni5oLTY0LVxcdGF0b21pY190XFx0bWNfZm9yd2FyZGluZztcXG4tLVxcbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oLTEzLVxcbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oOjE0OiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVcXG5pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaC0xNS1zdGF0aWMgaW5saW5lIGludCBpcDZfbXJvdXRlX29wdChpbnQgb3B0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9tcm91dGU2Lmg9MjY9c3RydWN0IHNvY2s7XFxuaW5jbHVkZS9saW51eC9tcm91dGU2LmgtMjctXFxuaW5jbHVkZS9saW51eC9tcm91dGU2Lmg6Mjg6I2lmZGVmIENPTkZJR19JUFY2X01ST1VURVxcbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oLTI5LWV4dGVybiBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICosIGludCwgc29ja3B0cl90LCB1bnNpZ25lZCBpbnQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tcm91dGU2Lmg9Njg9c3RhdGljIGlubGluZSB2b2lkIGlwNl9tcl9jbGVhbnVwKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaC03My1cXG5pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaDo3NDojaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oLTc1LWJvb2wgaXA2bXJfcnVsZV9kZWZhdWx0KGNvbnN0IHN0cnVjdCBmaWJfcnVsZSAqcnVsZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaD0xMDQ9ZXh0ZXJuIGludCBpcDZtcl9nZXRfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tcm91dGU2LmgtMTA2LVxcbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oOjEwNzojaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFXFxuaW5jbHVkZS9saW51eC9tcm91dGU2LmgtMTA4LWJvb2wgbXJvdXRlNl9pc19zb2NrZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaD02Nj1zdHJ1Y3QgbmV0bnNfaXB2NiB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRucy9pcHY2LmgtMTA3LVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaDoxMDg6I2lmZGVmIENPTkZJR19JUFY2X01ST1VURVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaDoxMDk6I2lmbmRlZiBDT05GSUdfSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxuaW5jbHVkZS9uZXQvbmV0bnMvaXB2Ni5oLTExMC1cXHRzdHJ1Y3QgbXJfdGFibGVcXHRcXHQqbXJ0NjtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaD02ODI9ZW51bSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgtNzAyLSNkZWZpbmUgUlRNR1JQX0lQVjZfSUZBRERSXFx0MHgxMDBcXG5pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmg6NzAzOiNkZWZpbmUgUlRNR1JQX0lQVjZfTVJPVVRFXFx0MHgyMDBcXG5pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgtNzA0LSNkZWZpbmUgUlRNR1JQX0lQVjZfUk9VVEVcXHQweDQwMFxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oPTcxND1lbnVtIHJ0bmV0bGlua19ncm91cHMge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oLTczNC0jZGVmaW5lIFJUTkxHUlBfSVBWNl9JRkFERFJcXHRSVE5MR1JQX0lQVjZfSUZBRERSXFxuaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oOjczNTpcXHRSVE5MR1JQX0lQVjZfTVJPVVRFLFxcbmluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaDo3MzY6I2RlZmluZSBSVE5MR1JQX0lQVjZfTVJPVVRFXFx0UlROTEdSUF9JUFY2X01ST1VURVxcbmluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaC03MzctXFx0UlROTEdSUF9JUFY2X1JPVVRFLFxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oLTc3NC0jZGVmaW5lIFJUTkxHUlBfSVBWNF9NUk9VVEVfUlxcdFJUTkxHUlBfSVBWNF9NUk9VVEVfUlxcbmluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaDo3NzU6XFx0UlROTEdSUF9JUFY2X01ST1VURV9SLFxcbmluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaDo3NzY6I2RlZmluZSBSVE5MR1JQX0lQVjZfTVJPVVRFX1JcXHRSVE5MR1JQX0lQVjZfTVJPVVRFX1JcXG5pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgtNzc3LVxcdFJUTkxHUlBfTkVYVEhPUCxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTExMD1zdGF0aWMgdTggYmF0YWR2X21jYXN0X21sYV9ydHJfZmxhZ3NfbWVzaGlmX2dldF9pcHY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMzAtICovXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTMxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X01ST1VURSlcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMzItc3RhdGljIHU4IGJhdGFkdl9tY2FzdF9tbGFfcnRyX2ZsYWdzX21lc2hpZl9nZXRfaXB2NihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NzEwNj1zdGF0aWMgaW50IHJ0bmV0bGlua19iaW5kKHN0cnVjdCBuZXQgKm5ldCwgaW50IGdyb3VwKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNzEwOS1cXHRjYXNlIFJUTkxHUlBfSVBWNF9NUk9VVEVfUjpcXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo3MTEwOlxcdGNhc2UgUlROTEdSUF9JUFY2X01ST1VURV9SOlxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTcxMTEtXFx0XFx0aWYgKCFuc19jYXBhYmxlKG5ldC1cXHUwMDNldXNlcl9ucywgQ0FQX05FVF9BRE1JTikpXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTIxNj1jb25maWcgSVBfTVJPVVRFX0NPTU1PTlxcbm5ldC9pcHY0L0tjb25maWctMjE3LVxcdGJvb2xcXG5uZXQvaXB2NC9LY29uZmlnOjIxODpcXHRkZXBlbmRzIG9uIElQX01ST1VURSB8fCBJUFY2X01ST1VURVxcbm5ldC9pcHY0L0tjb25maWctMjE5LVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0yNDM9Y29uZmlnIElQVjZfU1VCVFJFRVNcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjU2LVxcbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxcbm5ldC9pcHY2L0tjb25maWctMjU4LVxcdGJvb2wgXFxcIklQdjY6IG11bHRpY2FzdCByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXFxubmV0L2lwdjYvS2NvbmZpZzoyNjU6Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L0tjb25maWctMjY2LVxcdGJvb2wgXFxcIklQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG5uZXQvaXB2Ni9LY29uZmlnOjI2NzpcXHRkZXBlbmRzIG9uIElQVjZfTVJPVVRFXFxubmV0L2lwdjYvS2NvbmZpZy0yNjgtXFx0c2VsZWN0IEZJQl9SVUxFU1xcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0yNzk9Y29uZmlnIElQVjZfUElNU01fVjJcXG5uZXQvaXB2Ni9LY29uZmlnLTI4MC1cXHRib29sIFxcXCJJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcXFwiXFxubmV0L2lwdjYvS2NvbmZpZzoyODE6XFx0ZGVwZW5kcyBvbiBJUFY2X01ST1VURVxcbm5ldC9pcHY2L0tjb25maWctMjgyLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L01ha2VmaWxlPTE1PWlwdjYtJChDT05GSUdfU1lTQ1RMKSArPSBzeXNjdGxfbmV0X2lwdjYub1xcbm5ldC9pcHY2L01ha2VmaWxlOjE2OmlwdjYtJChDT05GSUdfSVBWNl9NUk9VVEUpICs9IGlwNm1yLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS0xNy1cXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NTA4PXN0YXRpYyBpbnQgaW5ldDZfbmV0Y29uZl9tc2dzaXplX2RldmNvbmYoaW50IHR5cGUpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTUxOC1cXHRcXHRzaXplICs9IG5sYV90b3RhbF9zaXplKDQpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTE5OiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTUyMC1cXHRpZiAoYWxsIHx8IHR5cGUgPT0gTkVUQ09ORkFfTUNfRk9SV0FSRElORylcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NTMyPXN0YXRpYyBpbnQgaW5ldDZfbmV0Y29uZl9maWxsX2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlmaW5kZXgsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU2MS1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjU2MjojaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFXFxubmV0L2lwdjYvYWRkcmNvbmYuYy01NjMtXFx0aWYgKChhbGwgfHwgdHlwZSA9PSBORVRDT05GQV9NQ19GT1JXQVJESU5HKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz01NjYyPXN0YXRpYyB2b2lkIGlwdjZfc3RvcmVfZGV2Y29uZihjb25zdCBzdHJ1Y3QgaXB2Nl9kZXZjb25mICpjbmYsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3MTUtI2VuZGlmXFxubmV0L2lwdjYvYWRkcmNvbmYuYzo1NzE2OiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3MTctXFx0YXJyYXlbREVWQ09ORl9NQ19GT1JXQVJESU5HXSA9IGF0b21pY19yZWFkKFxcdTAwMjZjbmYtXFx1MDAzZW1jX2ZvcndhcmRpbmcpO1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz02ODYzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGFkZHJjb25mX3N5c2N0bFtdID0ge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy03MTMxLSNlbmRpZlxcbm5ldC9pcHY2L2FkZHJjb25mLmM6NzEzMjojaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFXFxubmV0L2lwdjYvYWRkcmNvbmYuYy03MTMzLVxcdHtcXG4tLVxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jPTU1ND1pbnQgaXA2X21jX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01NzYtXFxubmV0L2lwdjYvaXA2X2lucHV0LmM6NTc3OiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01NzgtXFx0LypcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9MTEwPXN0YXRpYyB2b2lkIGlwbXJfZXhwaXJlX3Byb2Nlc3Moc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMTExLVxcbm5ldC9pcHY2L2lwNm1yLmM6MTEyOiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvaXA2bXIuYy0xMTMtI2RlZmluZSBpcDZtcl9mb3JfZWFjaF90YWJsZShtcnQsIG5ldCkgXFxcXFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz00MzU9c3RhdGljIHZvaWQgaXA2bXJfbmV3X3RhYmxlX3NldChzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNDM3LXtcXG5uZXQvaXB2Ni9pcDZtci5jOjQzODojaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L2lwNm1yLmMtNDM5LVxcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZtcnQtXFx1MDAzZWxpc3QsIFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYubXI2X3RhYmxlcyk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTE3OTg9aW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xOTU4LSNlbmRpZlxcbm5ldC9pcHY2L2lwNm1yLmM6MTk1OTojaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L2lwNm1yLmMtMTk2MC1cXHRjYXNlIE1SVDZfVEFCTEU6XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTI3Njk9c3RhdGljIHZvaWQgbXI2X25ldGxpbmtfZXZlbnQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBtZmM2X2NhY2hlICptZmMsXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTI3ODMtXFxubmV0L2lwdjYvaXA2bXIuYzoyNzg0OlxcdHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0lQVjZfTVJPVVRFLCBOVUxMLCBHRlBfQVRPTUlDKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTI3ODUtXFx0cmV0dXJuO1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0yNzg4LVxcdGtmcmVlX3NrYihza2IpO1xcbm5ldC9pcHY2L2lwNm1yLmM6Mjc4OTpcXHRydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfTVJPVVRFLCBlcnIpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMjc5MC19XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTI4MDk9c3RhdGljIHZvaWQgbXJ0Nm1zZ19uZXRsaW5rX2V2ZW50KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqcGt0KVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0yODQ2LVxcbm5ldC9pcHY2L2lwNm1yLmM6Mjg0NzpcXHRydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9JUFY2X01ST1VURV9SLCBOVUxMLCBHRlBfQVRPTUlDKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTI4NDgtXFx0cmV0dXJuO1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0yODUzLVxcdGtmcmVlX3NrYihza2IpO1xcbm5ldC9pcHY2L2lwNm1yLmM6Mjg1NDpcXHRydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfTVJPVVRFX1IsIC1FTk9CVUZTKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTI4NTUtfVxcbi0tXFxubmV0L2lwdjYvcmF3LmM9MTExNT1zdGF0aWMgaW50IHJhd3Y2X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxcbi0tXFxubmV0L2lwdjYvcmF3LmMtMTEzNS1cXHRkZWZhdWx0Olxcbm5ldC9pcHY2L3Jhdy5jOjExMzY6I2lmZGVmIENPTkZJR19JUFY2X01ST1VURVxcbm5ldC9pcHY2L3Jhdy5jLTExMzctXFx0XFx0cmV0dXJuIGlwNm1yX2lvY3RsKHNrLCBjbWQsIGthcmcpO1xcbi0tXFxubmV0L2lwdjYvcmF3LmM9MTE0NT1zdGF0aWMgaW50IGNvbXBhdF9yYXd2Nl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxubmV0L2lwdjYvcmF3LmMtMTE1MS1cXHRkZWZhdWx0Olxcbm5ldC9pcHY2L3Jhdy5jOjExNTI6I2lmZGVmIENPTkZJR19JUFY2X01ST1VURVxcbm5ldC9pcHY2L3Jhdy5jLTExNTMtXFx0XFx0cmV0dXJuIGlwNm1yX2NvbXBhdF9pb2N0bChzaywgY21kLCBjb21wYXRfcHRyKGFyZykpO1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYz01Nzc0PXN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTU4MzktXFx0aWYgKGlpZikge1xcbm5ldC9pcHY2L3JvdXRlLmM6NTg0MDojaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFXFxubmV0L2lwdjYvcm91dGUuYy01ODQxLVxcdFxcdGlmIChpcHY2X2FkZHJfaXNfbXVsdGljYXN0KFxcdTAwMjZydDZfZHN0LVxcdTAwM2VhZGRyKSkge1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oPTY4Mj1lbnVtIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaC03MDItI2RlZmluZSBSVE1HUlBfSVBWNl9JRkFERFJcXHQweDEwMFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaDo3MDM6I2RlZmluZSBSVE1HUlBfSVBWNl9NUk9VVEVcXHQweDIwMFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaC03MDQtI2RlZmluZSBSVE1HUlBfSVBWNl9ST1VURVxcdDB4NDAwXFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmg9NzE0PWVudW0gcnRuZXRsaW5rX2dyb3VwcyB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgtNzM0LSNkZWZpbmUgUlROTEdSUF9JUFY2X0lGQUREUlxcdFJUTkxHUlBfSVBWNl9JRkFERFJcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmg6NzM1OlxcdFJUTkxHUlBfSVBWNl9NUk9VVEUsXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oOjczNjojZGVmaW5lIFJUTkxHUlBfSVBWNl9NUk9VVEVcXHRSVE5MR1JQX0lQVjZfTVJPVVRFXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oLTczNy1cXHRSVE5MR1JQX0lQVjZfUk9VVEUsXFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgtNzc0LSNkZWZpbmUgUlROTEdSUF9JUFY0X01ST1VURV9SXFx0UlROTEdSUF9JUFY0X01ST1VURV9SXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oOjc3NTpcXHRSVE5MR1JQX0lQVjZfTVJPVVRFX1IsXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oOjc3NjojZGVmaW5lIFJUTkxHUlBfSVBWNl9NUk9VVEVfUlxcdFJUTkxHUlBfSVBWNl9NUk9VVEVfUlxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaC03NzctXFx0UlROTEdSUF9ORVhUSE9QLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZz00Mz1DT05GSUdfSVBWNl9JT0FNNl9MV1RVTk5FTD15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZzo0NDpDT05GSUdfSVBWNl9NUk9VVEU9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWctNDUtQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3J3YXJkaW5nL2NvbmZpZz0xMj1DT05GSUdfSVBWNl9HUkU9bVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3J3YXJkaW5nL2NvbmZpZzoxMzpDT05GSUdfSVBWNl9NUk9VVEU9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3J3YXJkaW5nL2NvbmZpZzoxNDpDT05GSUdfSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm9yd2FyZGluZy9jb25maWctMTUtQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjI6NTk6NDQuNDc5Njg4NzQ3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4ODYyNTExNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgYSBmZXcgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gd29yayBjb3JyZWN0bHkuIFRoZSBjb3JlIG5lY2Vzc2l0aWVzIHNlZW0gdG8gYmUgYElQVjZfTVJPVVRFYCBhbmQgYElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU2AuIElkZWFsbHksIGZvciByb2J1c3QgdGVzdGluZyBvZiBgcGltNl9yY3ZgLCBJIHNob3VsZCBhbHNvIGluY2x1ZGUgYElQVjZfUElNU01fVjJgIGFzIHdlbGwuIFNpbmNlIHRoaXMgaW52b2x2ZXMgaXBtcl9iYXNlLmMgbW9kaWZpY2F0aW9ucywgSSBoYXZlIHRvIGVuYWJsZSBib3RoIGBJUF9NUk9VVEVgIGFuZCBgSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFU2AgdG9vLiBSaWdodCwgbGV0J3Mgc3RhcnQgYnkgZG91YmxlLWNoZWNraW5nIHRob3NlIGBJUF9NUk9VVEVgIGNvbmZpZ3VyYXRpb25zIHRvIGNvbmZpcm0gdGhleSdyZSBlbmFibGVkIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTUxNiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMjo1OTo0Ny45NjgzMTczNDFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1NjcyNTQxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUF9NUk9VVEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnPTMwPUNPTkZJR19JUF9QTlBfQk9PVFA9eVxcbmFyY2gvYXJtL2NvbmZpZ3MvaXhwNHh4X2RlZmNvbmZpZzozMTpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL2FybS9jb25maWdzL2l4cDR4eF9kZWZjb25maWctMzItQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvYXJtL2NvbmZpZ3Mva2V5c3RvbmVfZGVmY29uZmlnPTU5PUNPTkZJR19ORVRfSVBHUkU9eVxcbmFyY2gvYXJtL2NvbmZpZ3Mva2V5c3RvbmVfZGVmY29uZmlnOjYwOkNPTkZJR19JUF9NUk9VVEU9eVxcbmFyY2gvYXJtL2NvbmZpZ3Mva2V5c3RvbmVfZGVmY29uZmlnOjYxOkNPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcXG5hcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZy02Mi1DT05GSUdfSVBfUElNU01fVjI9eVxcbi0tXFxuYXJjaC9hcm0vY29uZmlncy9uaGs4ODE1X2RlZmNvbmZpZz0zMD1DT05GSUdfTkVUX0lQSVA9eVxcbmFyY2gvYXJtL2NvbmZpZ3MvbmhrODgxNV9kZWZjb25maWc6MzE6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9hcm0vY29uZmlncy9uaGs4ODE1X2RlZmNvbmZpZy0zMi0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXRcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc9MTMwPUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjEzMTpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjEzMjpDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUz15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy0xMzMtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9MTQ2PUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjE0NzpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjE0ODpDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUz15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0xNDktQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2JjbTQ3eHhfZGVmY29uZmlnPTE5PUNPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eVxcbmFyY2gvbWlwcy9jb25maWdzL2JjbTQ3eHhfZGVmY29uZmlnOjIwOkNPTkZJR19JUF9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL2JjbTQ3eHhfZGVmY29uZmlnOjIxOkNPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcXG5hcmNoL21pcHMvY29uZmlncy9iY200N3h4X2RlZmNvbmZpZy0yMi1DT05GSUdfU1lOX0NPT0tJRVM9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZz00ND1DT05GSUdfSVBfUE5QX0JPT1RQPXlcXG5hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnOjQ1OkNPTkZJR19JUF9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWctNDYtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2JtaXBzX3N0Yl9kZWZjb25maWc9NjE9Q09ORklHX0lQX1BOUF9SQVJQPXlcXG5hcmNoL21pcHMvY29uZmlncy9ibWlwc19zdGJfZGVmY29uZmlnOjYyOkNPTkZJR19JUF9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL2JtaXBzX3N0Yl9kZWZjb25maWctNjMtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2Nhdml1bV9vY3Rlb25fZGVmY29uZmlnPTM5PUNPTkZJR19JUF9QTlBfUkFSUD15XFxuYXJjaC9taXBzL2NvbmZpZ3MvY2F2aXVtX29jdGVvbl9kZWZjb25maWc6NDA6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9taXBzL2NvbmZpZ3MvY2F2aXVtX29jdGVvbl9kZWZjb25maWctNDEtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2xlbW90ZTJmX2RlZmNvbmZpZz00MD1DT05GSUdfTkVUX0lQSVA9bVxcbmFyY2gvbWlwcy9jb25maWdzL2xlbW90ZTJmX2RlZmNvbmZpZzo0MTpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL21pcHMvY29uZmlncy9sZW1vdGUyZl9kZWZjb25maWctNDItQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZz0zNj1DT05GSUdfTkVUX0lQSVA9bVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZzozNzpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWctMzgtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWc9NDA9Q09ORklHX05FVF9JUElQPW1cXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9rdm1fZGVmY29uZmlnOjQxOkNPTkZJR19JUF9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWctNDItQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX3FlbXVfMzJyNl9kZWZjb25maWc9MzU9Q09ORklHX05FVF9JUElQPW1cXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9xZW11XzMycjZfZGVmY29uZmlnOjM2OkNPTkZJR19JUF9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX3FlbXVfMzJyNl9kZWZjb25maWctMzctQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhYXBycF9kZWZjb25maWc9Mzc9Q09ORklHX05FVF9JUElQPW1cXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YWFwcnBfZGVmY29uZmlnOjM4OkNPTkZJR19JUF9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhYXBycF9kZWZjb25maWctMzktQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhc212cF9kZWZjb25maWc9Mzg9Q09ORklHX05FVF9JUElQPW1cXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXNtdnBfZGVmY29uZmlnOjM5OkNPTkZJR19JUF9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhc212cF9kZWZjb25maWctNDAtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhc212cF9ldmFfZGVmY29uZmlnPTM5PUNPTkZJR19ORVRfSVBJUD1tXFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFzbXZwX2V2YV9kZWZjb25maWc6NDA6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFzbXZwX2V2YV9kZWZjb25maWctNDEtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfZGVmY29uZmlnPTM2PUNPTkZJR19ORVRfSVBJUD1tXFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF9kZWZjb25maWc6Mzc6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF9kZWZjb25maWctMzgtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZz0zOT1DT05GSUdfTkVUX0lQSVA9bVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZzo0MDpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX3hwYV9kZWZjb25maWctNDEtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL210eDFfZGVmY29uZmlnPTUxPUNPTkZJR19ORVRfSVBJUD1tXFxuYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWc6NTI6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWctNTMtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL3FpX2xiNjBfZGVmY29uZmlnPTI4PUNPTkZJR19JUF9ST1VURV9WRVJCT1NFPXlcXG5hcmNoL21pcHMvY29uZmlncy9xaV9sYjYwX2RlZmNvbmZpZzoyOTpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL21pcHMvY29uZmlncy9xaV9sYjYwX2RlZmNvbmZpZzozMDpDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvcWlfbGI2MF9kZWZjb25maWctMzEtIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXRcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZz0yNz1DT05GSUdfTkVUX0lQSVA9bVxcbmFyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZzoyODpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWctMjktQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL3JzOTBfZGVmY29uZmlnPTUwPUNPTkZJR19JUF9ST1VURV9WRVJCT1NFPXlcXG5hcmNoL21pcHMvY29uZmlncy9yczkwX2RlZmNvbmZpZzo1MTpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL21pcHMvY29uZmlncy9yczkwX2RlZmNvbmZpZzo1MjpDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvcnM5MF9kZWZjb25maWctNTMtIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXRcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL3J0MzA1eF9kZWZjb25maWc9MzQ9Q09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eVxcbmFyY2gvbWlwcy9jb25maWdzL3J0MzA1eF9kZWZjb25maWc6MzU6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9taXBzL2NvbmZpZ3MvcnQzMDV4X2RlZmNvbmZpZzozNjpDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvcnQzMDV4X2RlZmNvbmZpZy0zNy1DT05GSUdfU1lOX0NPT0tJRVM9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWc9MzY9Q09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eVxcbmFyY2gvbWlwcy9jb25maWdzL3h3YXlfZGVmY29uZmlnOjM3OkNPTkZJR19JUF9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL3h3YXlfZGVmY29uZmlnOjM4OkNPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcXG5hcmNoL21pcHMvY29uZmlncy94d2F5X2RlZmNvbmZpZy0zOS1DT05GSUdfU1lOX0NPT0tJRVM9eVxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9nZV9pbXAzYV9kZWZjb25maWc9NTQ9Q09ORklHX05FVF9JUElQPW1cXG5hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2dlX2ltcDNhX2RlZmNvbmZpZzo1NTpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2dlX2ltcDNhX2RlZmNvbmZpZy01Ni1DT05GSUdfSVBfUElNU01fVjE9eVxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZjb25maWc9NTA9Q09ORklHX05FVF9JUElQPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3hlc19tcGM4NXh4X2RlZmNvbmZpZzo1MTpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3hlc19tcGM4NXh4X2RlZmNvbmZpZy01Mi1DT05GSUdfSVBfUElNU01fVjE9eVxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZnNsLWVtYi1ub25ody5jb25maWc9NTg9Q09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZnNsLWVtYi1ub25ody5jb25maWc6NTk6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZnNsLWVtYi1ub25ody5jb25maWctNjAtQ09ORklHX0lQX01VTFRJQ0FTVD15XFxuLS1cXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnPTkwPUNPTkZJR19ORVRfSVBJUD1tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZzo5MTpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnLTkyLUNPTkZJR19JUF9QSU1TTV9WMT15XFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9MTQ1PUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MTQ2OkNPTkZJR19JUF9NUk9VVEU9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzoxNDc6Q09ORklHX0lQX01ST1VURV9NVUxUSVBMRV9UQUJMRVM9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy0xNDgtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZz0xMzY9Q09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzoxMzc6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnOjEzODpDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUz15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTEzOS1DT05GSUdfSVBfUElNU01fVjE9eVxcbi0tXFxuYXJjaC9zaC9jb25maWdzL3NlNzcxMl9kZWZjb25maWc9Mzg9Q09ORklHX0lQX1BOUF9CT09UUD15XFxuYXJjaC9zaC9jb25maWdzL3NlNzcxMl9kZWZjb25maWc6Mzk6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9zaC9jb25maWdzL3NlNzcxMl9kZWZjb25maWctNDAtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvc2gvY29uZmlncy9zZTc3MjFfZGVmY29uZmlnPTM3PUNPTkZJR19JUF9QTlBfREhDUD15XFxuYXJjaC9zaC9jb25maWdzL3NlNzcyMV9kZWZjb25maWc6Mzg6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9zaC9jb25maWdzL3NlNzcyMV9kZWZjb25maWctMzktQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWc9NDE9Q09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eVxcbmFyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWc6NDI6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9zaC9jb25maWdzL3RpdGFuX2RlZmNvbmZpZy00My1DT05GSUdfSVBfUElNU01fVjE9eVxcbi0tXFxuYXJjaC9zcGFyYy9jb25maWdzL3NwYXJjNjRfZGVmY29uZmlnPTM5PUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXlcXG5hcmNoL3NwYXJjL2NvbmZpZ3Mvc3BhcmM2NF9kZWZjb25maWc6NDA6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9zcGFyYy9jb25maWdzL3NwYXJjNjRfZGVmY29uZmlnLTQxLUNPTkZJR19JUF9QSU1TTV9WMT15XFxuLS1cXG5hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnPTczPUNPTkZJR19JUF9QTlBfUkFSUD15XFxuYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZzo3NDpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnLTc1LUNPTkZJR19JUF9QSU1TTV9WMT15XFxuLS1cXG5hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWc9NzQ9Q09ORklHX0lQX1BOUF9SQVJQPXlcXG5hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWc6NzU6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnLTc2LUNPTkZJR19JUF9QSU1TTV9WMT15XFxuLS1cXG5kcml2ZXJzL25ldC92cmYuYz0xNTE3PXN0YXRpYyBpbnQgdnJmX2FkZF9maWJfcnVsZXMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3ZyZi5jLTE1MjgtXFxuZHJpdmVycy9uZXQvdnJmLmM6MTUyOTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUylcXG5kcml2ZXJzL25ldC92cmYuYy0xNTMwLVxcdGVyciA9IHZyZl9maWJfcnVsZShkZXYsIFJUTkxfRkFNSUxZX0lQTVIsIHRydWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvdnJmLmMtMTU0Ny1cXG5kcml2ZXJzL25ldC92cmYuYzoxNTQ4OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTKVxcbmRyaXZlcnMvbmV0L3ZyZi5jLTE1NDktaXBtcl9lcnI6XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21yb3V0ZS5oLTEyLVxcbmluY2x1ZGUvbGludXgvbXJvdXRlLmg6MTM6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVcXG5pbmNsdWRlL2xpbnV4L21yb3V0ZS5oLTE0LXN0YXRpYyBpbmxpbmUgaW50IGlwX21yb3V0ZV9vcHQoaW50IG9wdClcXG4tLVxcbmluY2x1ZGUvbGludXgvbXJvdXRlX2Jhc2UuaD0yNzI9c3RhdGljIGlubGluZSBib29sIG1yX2Nhbl9mcmVlX3RhYmxlKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbmluY2x1ZGUvbGludXgvbXJvdXRlX2Jhc2UuaC0yNzYtXFxuaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oOjI3NzojaWZkZWYgQ09ORklHX0lQX01ST1VURV9DT01NT05cXG5pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmgtMjc4LXZvaWQgdmlmX2RldmljZV9pbml0KHN0cnVjdCB2aWZfZGV2aWNlICp2LFxcbi0tXFxuaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oPTM5Nz1zdHJ1Y3QgbXJfbWZjX2l0ZXIge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oLTQwNS1cXG5pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmg6NDA2OiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFX0NPTU1PTlxcbmluY2x1ZGUvbGludXgvbXJvdXRlX2Jhc2UuaC00MDctdm9pZCAqbXJfdmlmX3NlcV9pZHgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdmlmX2l0ZXIgKml0ZXIsIGxvZmZfdCBwb3MpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oPTU1PXN0cnVjdCBuZXRuc19pcHY0IHtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaC0yNzUtXFxuaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oOjI3NjojaWZkZWYgQ09ORklHX0lQX01ST1VURVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaDoyNzc6I2lmbmRlZiBDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaC0yNzgtXFx0c3RydWN0IG1yX3RhYmxlIF9fcmN1XFx0Km1ydDtcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MjA3PWNvbmZpZyBORVRfSVBHUkVfQlJPQURDQVNUXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTIxNS1cXG5uZXQvaXB2NC9LY29uZmlnOjIxNjpjb25maWcgSVBfTVJPVVRFX0NPTU1PTlxcbm5ldC9pcHY0L0tjb25maWctMjE3LVxcdGJvb2xcXG5uZXQvaXB2NC9LY29uZmlnOjIxODpcXHRkZXBlbmRzIG9uIElQX01ST1VURSB8fCBJUFY2X01ST1VURVxcbm5ldC9pcHY0L0tjb25maWctMjE5LVxcbm5ldC9pcHY0L0tjb25maWc6MjIwOmNvbmZpZyBJUF9NUk9VVEVcXG5uZXQvaXB2NC9LY29uZmlnLTIyMS1cXHRib29sIFxcXCJJUDogbXVsdGljYXN0IHJvdXRpbmdcXFwiXFxubmV0L2lwdjQvS2NvbmZpZy0yMjItXFx0ZGVwZW5kcyBvbiBJUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9LY29uZmlnOjIyMzpcXHRzZWxlY3QgSVBfTVJPVVRFX0NPTU1PTlxcbm5ldC9pcHY0L0tjb25maWctMjI0LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMjMxLVxcbm5ldC9pcHY0L0tjb25maWc6MjMyOmNvbmZpZyBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjQvS2NvbmZpZy0yMzMtXFx0Ym9vbCBcXFwiSVA6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjIzNDpcXHRkZXBlbmRzIG9uIElQX01ST1VURSBcXHUwMDI2XFx1MDAyNiBJUF9BRFZBTkNFRF9ST1VURVJcXG5uZXQvaXB2NC9LY29uZmlnLTIzNS1cXHRzZWxlY3QgRklCX1JVTEVTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTI0Nj1jb25maWcgSVBfUElNU01fVjFcXG5uZXQvaXB2NC9LY29uZmlnLTI0Ny1cXHRib29sIFxcXCJJUDogUElNLVNNIHZlcnNpb24gMSBzdXBwb3J0XFxcIlxcbm5ldC9pcHY0L0tjb25maWc6MjQ4OlxcdGRlcGVuZHMgb24gSVBfTVJPVVRFXFxubmV0L2lwdjQvS2NvbmZpZy0yNDktXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0yNTk9Y29uZmlnIElQX1BJTVNNX1YyXFxubmV0L2lwdjQvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiSVA6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFxcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjI2MTpcXHRkZXBlbmRzIG9uIElQX01ST1VURVxcbm5ldC9pcHY0L0tjb25maWctMjYyLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlPTIyPW9iai0kKENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMpICs9IGZpYl9ydWxlcy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6MjM6b2JqLSQoQ09ORklHX0lQX01ST1VURSkgKz0gaXBtci5vXFxubmV0L2lwdjQvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX0lQX01ST1VURV9DT01NT04pICs9IGlwbXJfYmFzZS5vXFxubmV0L2lwdjQvTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX05FVF9JUElQKSArPSBpcGlwLm9cXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xMTYtI2luY2x1ZGUgXFx1MDAzY25ldC9zZWN1cmVfc2VxLmhcXHUwMDNlXFxubmV0L2lwdjQvYWZfaW5ldC5jOjExNzojaWZkZWYgQ09ORklHX0lQX01ST1VURVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xMTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21yb3V0ZS5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jPTE4ODI9c3RhdGljIGludCBfX2luaXQgaW5ldF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTk4OC1cXHQgKi9cXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTk4OTojaWYgZGVmaW5lZChDT05GSUdfSVBfTVJPVVRFKVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xOTkwLVxcdGlmIChpcF9tcl9pbml0KCkpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTAxLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXJfaXB2NC5oXFx1MDAzZVxcbm5ldC9pcHY0L2lnbXAuYzoxMDI6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVcXG5uZXQvaXB2NC9pZ21wLmMtMTAzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tcm91dGUuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jPTM2Nz1pbnQgaXBfbWNfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMzgzLVxcdFxcdGlmIChza19tY19sb29wKHNrKVxcbm5ldC9pcHY0L2lwX291dHB1dC5jOjM4NDojaWZkZWYgQ09ORklHX0lQX01ST1VURVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTM4NS1cXHRcXHQvKiBTbWFsbCBvcHRpbWl6YXRpb246IGRvIG5vdCBsb29wYmFjayBub3QgbG9jYWwgZnJhbWVzLFxcbi0tXFxubmV0L2lwdjQvaXBtci5jPTExOD1zdGF0aWMgdm9pZCBpcG1yX2V4cGlyZV9wcm9jZXNzKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG5uZXQvaXB2NC9pcG1yLmMtMTE5LVxcbm5ldC9pcHY0L2lwbXIuYzoxMjA6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjQvaXBtci5jLTEyMS0jZGVmaW5lIGlwbXJfZm9yX2VhY2hfdGFibGUobXJ0LCBuZXQpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubmV0L2lwdjQvaXBtci5jPTQwOD1zdGF0aWMgdm9pZCBpcG1yX25ld190YWJsZV9zZXQoc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtNDEwLXtcXG5uZXQvaXB2NC9pcG1yLmM6NDExOiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY0L2lwbXIuYy00MTItXFx0bGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNm1ydC1cXHUwMDNlbGlzdCwgXFx1MDAyNm5ldC1cXHUwMDNlaXB2NC5tcl90YWJsZXMpO1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTE0MTA9aW50IGlwX21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTU3OC1cXHRjYXNlIE1SVF9UQUJMRTpcXG5uZXQvaXB2NC9pcG1yLmM6MTU3OTpcXHRcXHRpZiAoIUlTX0JVSUxUSU4oQ09ORklHX0lQX01ST1VURV9NVUxUSVBMRV9UQUJMRVMpKSB7XFxubmV0L2lwdjQvaXBtci5jLTE1ODAtXFx0XFx0XFx0cmV0ID0gLUVOT1BST1RPT1BUO1xcbi0tXFxubmV0L2lwdjQvcmF3LmM9ODcxPXN0YXRpYyBpbnQgcmF3X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxcbi0tXFxubmV0L2lwdjQvcmF3LmMtODkxLVxcdGRlZmF1bHQ6XFxubmV0L2lwdjQvcmF3LmM6ODkyOiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXFxubmV0L2lwdjQvcmF3LmMtODkzLVxcdFxcdHJldHVybiBpcG1yX2lvY3RsKHNrLCBjbWQsIGthcmcpO1xcbi0tXFxubmV0L2lwdjQvcmF3LmM9OTAxPXN0YXRpYyBpbnQgY29tcGF0X3Jhd19pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxubmV0L2lwdjQvcmF3LmMtOTA3LVxcdGRlZmF1bHQ6XFxubmV0L2lwdjQvcmF3LmM6OTA4OiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXFxubmV0L2lwdjQvcmF3LmMtOTA5LVxcdFxcdHJldHVybiBpcG1yX2NvbXBhdF9pb2N0bChzaywgY21kLCBjb21wYXRfcHRyKGFyZykpO1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0xNzM5PWlwX3JvdXRlX2lucHV0X21jKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0xNzY5LVxcbm5ldC9pcHY0L3JvdXRlLmM6MTc3MDojaWZkZWYgQ09ORklHX0lQX01ST1VURVxcbm5ldC9pcHY0L3JvdXRlLmMtMTc3MS1cXHRpZiAoIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGRhZGRyKSBcXHUwMDI2XFx1MDAyNiBJTl9ERVZfTUZPUldBUkQoaW5fZGV2KSlcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MjQ5MT1pcF9yb3V0ZV9pbnB1dF9yY3Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTI1MjctXFx0XFx0aWYgKG91clxcbm5ldC9pcHY0L3JvdXRlLmM6MjUyODojaWZkZWYgQ09ORklHX0lQX01ST1VURVxcbm5ldC9pcHY0L3JvdXRlLmMtMjUyOS1cXHRcXHRcXHR8fFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0yNTU5PXN0YXRpYyBzdHJ1Y3QgcnRhYmxlICpfX21rcm91dGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTI2NjYtXFx0XFx0fVxcbm5ldC9pcHY0L3JvdXRlLmM6MjY2NzojaWZkZWYgQ09ORklHX0lQX01ST1VURVxcbm5ldC9pcHY0L3JvdXRlLmMtMjY2OC1cXHRcXHRpZiAodHlwZSA9PSBSVE5fTVVMVElDQVNUKSB7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTI5NDY9c3RhdGljIGludCBydF9maWxsX2luZm8oc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgZHN0LCBfX2JlMzIgc3JjLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0zMDQ4LVxcdFxcdGlmIChydF9pc19pbnB1dF9yb3V0ZShydCkpIHtcXG5uZXQvaXB2NC9yb3V0ZS5jOjMwNDk6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVcXG5uZXQvaXB2NC9yb3V0ZS5jLTMwNTAtXFx0XFx0XFx0aWYgKGlwdjRfaXNfbXVsdGljYXN0KGRzdCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MjU3PWNvbmZpZyBJUFY2X01ST1VURVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNTktXFx0ZGVwZW5kcyBvbiBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZzoyNjA6XFx0c2VsZWN0IElQX01ST1VURV9DT01NT05cXG5uZXQvaXB2Ni9LY29uZmlnLTI2MS1cXHRoZWxwXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82ND0xMDY9Q09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQ6MTA3OkNPTkZJR19JUF9NUk9VVEU9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0LTEwOC1DT05GSUdfSVBfTVVMVElDQVNUPXlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9jb25maWcuY29tbW9uPTkzPUNPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9jb25maWcuY29tbW9uOjk0OkNPTkZJR19JUF9NUk9VVEU9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9jb25maWcuY29tbW9uLTk1LUNPTkZJR19JUF9NVUxUSUNBU1Q9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvcndhcmRpbmcvY29uZmlnPTY9Q09ORklHX0RVTU1ZPW1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm9yd2FyZGluZy9jb25maWc6NzpDT05GSUdfSVBfTVJPVVRFPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm9yd2FyZGluZy9jb25maWc6ODpDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUz15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvcndhcmRpbmcvY29uZmlnLTktQ09ORklHX0lQX1BJTVNNX1YxPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjI6NTk6NTAuNjI1MDUwNDA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYzMzA3NjQwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIElQdjYgTXVsdGljYXN0IFJvdXRpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdGFza2VkIHdpdGggYW5hbHl6aW5nIHRoaXMgcGF0Y2gsIGFuZCBoZXJlJ3MgbXkgYnJlYWtkb3duLiBGaXJzdCBvZmYsIEkgc2VlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkOiBgSVBWNl9NUk9VVEVgLCBgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTYCwgYW5kIGBJUFY2X1BJTVNNX1YyYC4gTGV0J3MgY2xhcmlmeSB3aHksIGJlY2F1c2UgdGhlIHBhdGNoIG9ubHkgdG91Y2hlcyBgbmV0L2lwdjYvaXA2bXIuY2AgYW5kIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2AuIGBpcG1yX2Jhc2UuY2AgaXMgY29tcGlsZWQgdW5kZXIgYENPTkZJR19JUF9NUk9VVEVfQ09NTU9OYCwgd2hpY2ggZ2V0cyBlbmFibGVkIHdoZW4gd2UgaGF2ZSBlaXRoZXIgYElQVjZfTVJPVVRFYCBvciBgSVBfTVJPVVRFYC4gU2luY2UgdGhlIHBhdGNoICppc24ndCogdG91Y2hpbmcgSVB2NCBzcGVjaWZpYyByb3V0aW5nIGNvZGUgKGxpa2UgYG5ldC9pcHY0L2lwbXIuY2ApLCBgSVBWNl9NUk9VVEVgIGlzIHRoZSBjcml0aWNhbCBjb25maWcgaGVyZS4gQW5kIHNpbmNlIG11bHRpcGxlIHRhYmxlcyBhbmQgUElNdjIgYXJlIHJlbGV2YW50IHBhcnRzIG9mIElQdjYgbXVsdGljYXN0IHJvdXRpbmcsIHRob3NlIGNvbmZpZ3VyYXRpb25zIGFyZSBhbHNvIG5lY2Vzc2FyeS4gU28sIHllcywgdGhlIHNldCBpbmNsdWRlcyBgSVBWNl9NUk9VVEVgLCBgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTYCwgYW5kIGBJUFY2X1BJTVNNX1YyYC5cblxuSnVzdCB0byBjb25maXJtOiBgQ09ORklHX0lQVjZfTVJPVVRFYCBpcyBkZXBlbmRlbnQgb24gYENPTkZJR19JUFY2YC4gYENPTkZJR19JUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNgIGRlcGVuZHMgb24gYENPTkZJR19JUFY2X01ST1VURWAgYW5kIHNlbGVjdHMgYENPTkZJR19GSUJfUlVMRVNgLiBgQ09ORklHX0lQVjZfUElNU01fVjJgIGRlcGVuZHMgb24gYENPTkZJR19JUFY2X01ST1VURWAuXG5cbk5vdywgZm9jdXNpbmcgb24gdGhlIHN5bWJvbHMuIEkndmUgY29tcGlsZWQgYSBsaXN0OiBgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0YCwgYGlwNl9tcm91dGVfZ2V0c29ja29wdGAsIGBpcDZtcl9pb2N0bGAsIGBpcDZtcl9jb21wYXRfaW9jdGxgLCBgaXA2X21yX2lucHV0YCwgYGlwNl9tcl9vdXRwdXRgLCBgaXA2bXJfcnRtX2dldHJvdXRlYCwgYGlwNm1yX3J0bV9kdW1wcm91dGVgLCBgcGltNl9yY3ZgLCBhbmQgYHJlZ192aWZfeG1pdGAuXG5cbkxldCdzIHZlcmlmeSB0aGVzZSBpbiB0aGUgcGF0Y2ggYW5kIGFsc28gdGhhdCB0aGV5IGFyZSBub3Qgc3RhdGljL2lubGluZWQsIHBlciBpbnN0cnVjdGlvbnMuIGBpcDZfbXJvdXRlX3NldHNvY2tvcHRgIGFuZCBgaXA2X21yb3V0ZV9nZXRzb2Nrb3B0YCBzZWVtIHRvIGJlIGV4cG9ydGVkLCBtZWFuaW5nIGdsb2JhbC4gU2FtZSB3aXRoIGBpcDZtcl9pb2N0bGAgYW5kIGBpcDZtcl9jb21wYXRfaW9jdGxgLiBgaXA2X21yX2lucHV0YCBhbmQgYGlwNl9tcl9vdXRwdXRgIGFsc28gYXBwZWFyIHRvIGJlIGV4cG9ydGVkIGFuZCBnbG9iYWwuXG5cbk5vdywgYGlwNm1yX3J0bV9nZXRyb3V0ZWAgYW5kIGBpcDZtcl9ydG1fZHVtcHJvdXRlYCBhcmUgc3RhdGljIGJ1dCByZWdpc3RlcmVkIGFzIG5ldGxpbmsgY2FsbGJhY2tzLiBUaGF0IG1lYW5zIHRoZWlyIGFkZHJlc3NlcyBhcmUgYmVpbmcgdGFrZW4sIHNvIHRoZXkgd29uJ3QgYmUgaW5saW5lZC4gYHBpbTZfcmN2YCBpcyBhbHNvIHN0YXRpYywgYnV0IGEgcHJvdG9jb2wgaGFuZGxlciBhbmQgYHJlZ192aWZfeG1pdGAgaXMgc3RhdGljLCBidXQgYSBuZXRkZXYgb3AgLS0gYm90aCBhcmUgZmluZS4gVGhhdCBtZWFucyB3ZSBkb24ndCBoYXZlIHRvIGNoYW5nZSB0aGUgbGlzdC5cblxuU28sIHRoZSBmb2N1cyBzeW1ib2xzIGFyZTogYGlwNl9tcm91dGVfc2V0c29ja29wdGAsIGBpcDZfbXJvdXRlX2dldHNvY2tvcHRgLCBgaXA2bXJfaW9jdGxgLCBgaXA2bXJfY29tcGF0X2lvY3RsYCwgYGlwNl9tcl9pbnB1dGAsIGBpcDZfbXJfb3V0cHV0YCwgYHBpbTZfcmN2YCwgYHJlZ192aWZfeG1pdGAsIGBpcDZtcl9ydG1fZ2V0cm91dGVgLCBhbmQgYGlwNm1yX3J0bV9kdW1wcm91dGVgLlxuXG5BbHJpZ2h0LCBsZXQncyB2ZXJpZnkgaWYgdGhlIHJlbGV2YW50IHN5bWJvbHMgYXJlIGluIHRoZSBwYXRjaC4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgaXA2bXJfcnRtX2dldHJvdXRlYCBhbmQgYGlwNm1yX3J0bV9kdW1wcm91dGVgIHRvIHVzZSBgaXA2bXJfZ2V0X3RhYmxlX2hvbGRgIGFuZCBgaXA2bXJfcHV0X3RhYmxlYCwgd2hpY2ggaXMgZ29vZC4gQWxzbywgYGlwNl9tcl9pbnB1dGAsIGBpcDZfbXJfb3V0cHV0YCwgYHBpbTZfcmN2YCwgYW5kIGByZWdfdmlmX3htaXRgIGFyZSBtb2RpZmllZC4gTGlrZXdpc2UsIGBpcDZfbXJvdXRlX3NldHNvY2tvcHRgLCBgaXA2X21yb3V0ZV9nZXRzb2Nrb3B0YCwgYGlwNm1yX2lvY3RsYCwgYW5kIGBpcDZtcl9jb21wYXRfaW9jdGxgIGFyZSB1cGRhdGVkLlxuXG5DaGVja2luZyBmb3IgYW55IG1pc3NlZCBlbnRyeSBwb2ludHMuLi4gQWgsIEkgc2VlIHRoYXQgYG1yb3V0ZTZfaXNfc29ja2V0YCBpcyBtb2RpZmllZCBhcyB3ZWxsLCBhbG9uZyB3aXRoIGBpcDZtcl9za19kb25lYC4gVGhhdCdzIGltcG9ydGFudCFcblxuU28sIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgaGVyZSdzIG15IGZpbmFsIGxpc3Qgb2Ygc3ltYm9scyB0byBpbmNsdWRlOiBgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0YCwgYGlwNl9tcm91dGVfZ2V0c29ja29wdGAsIGBpcDZtcl9pb2N0bGAsIGBpcDZtcl9jb21wYXRfaW9jdGxgLCBgaXA2X21yX2lucHV0YCwgYGlwNl9tcl9vdXRwdXRgLCBgcGltNl9yY3ZgLCBgXG5cbiIsIklucHV0VG9rZW5zIjoyNjM2OSwiT3V0cHV0VG9rZW5zIjoyMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjAwOjA2Ljk1NTgxN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NjgwNDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2X01ST1VURVwiLFxuICAgIFwiSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXCIsXG4gICAgXCJJUFY2X1BJTVNNX1YyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X21yb3V0ZV9zZXRzb2Nrb3B0XCIsXG4gICAgXCJpcDZfbXJvdXRlX2dldHNvY2tvcHRcIixcbiAgICBcImlwNm1yX2lvY3RsXCIsXG4gICAgXCJpcDZtcl9jb21wYXRfaW9jdGxcIixcbiAgICBcImlwNl9tcl9pbnB1dFwiLFxuICAgIFwiaXA2X21yX291dHB1dFwiLFxuICAgIFwicGltNl9yY3ZcIixcbiAgICBcInJlZ192aWZfeG1pdFwiLFxuICAgIFwibXJvdXRlNl9pc19zb2NrZXRcIixcbiAgICBcImlwNm1yX3NrX2RvbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJlZmVyZW5jZSBjb3VudGluZyB0byBJUHY2IG11bHRpY2FzdCByb3V0aW5nIHRhYmxlcyAoc3RydWN0IG1yX3RhYmxlKSB0byBmaXggcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3Vlcy4gSXQgbW9kaWZpZXMgdmFyaW91cyBlbnRyeSBwb2ludHMgKHNvY2tldCBvcHRpb25zLCBpb2N0bHMsIG5ldGxpbmssIHBhY2tldCByeC90eCkgdG8gaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgdGFibGUgd2hpbGUgaW4gdXNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2X01ST1VURVwiLFxuICAgIFwiSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXCIsXG4gICAgXCJJUFY2X1BJTVNNX1YyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X21yb3V0ZV9zZXRzb2Nrb3B0XCIsXG4gICAgXCJpcDZfbXJvdXRlX2dldHNvY2tvcHRcIixcbiAgICBcImlwNm1yX2lvY3RsXCIsXG4gICAgXCJpcDZtcl9jb21wYXRfaW9jdGxcIixcbiAgICBcImlwNl9tcl9pbnB1dFwiLFxuICAgIFwiaXA2X21yX291dHB1dFwiLFxuICAgIFwicGltNl9yY3ZcIixcbiAgICBcInJlZ192aWZfeG1pdFwiLFxuICAgIFwibXJvdXRlNl9pc19zb2NrZXRcIixcbiAgICBcImlwNm1yX3NrX2RvbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJlZmVyZW5jZSBjb3VudGluZyB0byBJUHY2IG11bHRpY2FzdCByb3V0aW5nIHRhYmxlcyAoc3RydWN0IG1yX3RhYmxlKSB0byBmaXggcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3Vlcy4gSXQgbW9kaWZpZXMgdmFyaW91cyBlbnRyeSBwb2ludHMgKHNvY2tldCBvcHRpb25zLCBpb2N0bHMsIG5ldGxpbmssIHBhY2tldCByeC90eCkgdG8gaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgdGFibGUgd2hpbGUgaW4gdXNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhprd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-24 22:30:23 +0000 UTC FinishedAt: 2026-07-24 23:00:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6_MROUTE", "IPV6_MROUTE_MULTIPLE_TABLES", "IPV6_PIMSM_V2" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6_MROUTE", "IPV6_MROUTE_MULTIPLE_TABLES", "IPV6_PIMSM_V2" ], "series_id": "c9c7f758-314f-4ed0-9400-04b16f040b80" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip6_mroute_setsockopt", "ip6_mroute_getsockopt", "ip6mr_ioctl", "ip6mr_compat_ioctl", "ip6_mr_input", "ip6_mr_output", "pim6_rcv", "reg_vif_xmit", "mroute6_is_socket", "ip6mr_sk_done" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI0IDIyOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfTVJPVVRFJiMzNDssCiAgICAmIzM0O0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtJUFY2X1BJTVNNX1YyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwNl9tcm91dGVfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcDZtcl9pb2N0bCYjMzQ7LAogICAgJiMzNDtpcDZtcl9jb21wYXRfaW9jdGwmIzM0OywKICAgICYjMzQ7aXA2X21yX2lucHV0JiMzNDssCiAgICAmIzM0O2lwNl9tcl9vdXRwdXQmIzM0OywKICAgICYjMzQ7cGltNl9yY3YmIzM0OywKICAgICYjMzQ7cmVnX3ZpZl94bWl0JiMzNDssCiAgICAmIzM0O21yb3V0ZTZfaXNfc29ja2V0JiMzNDssCiAgICAmIzM0O2lwNm1yX3NrX2RvbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyByZWZlcmVuY2UgY291bnRpbmcgdG8gSVB2NiBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZXMgKHN0cnVjdCBtcl90YWJsZSkgdG8gZml4IHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMuIEl0IG1vZGlmaWVzIHZhcmlvdXMgZW50cnkgcG9pbnRzIChzb2NrZXQgb3B0aW9ucywgaW9jdGxzLCBuZXRsaW5rLCBwYWNrZXQgcngvdHgpIHRvIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIHRhYmxlIHdoaWxlIGluIHVzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjI6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0ZGI1ZjhkYTA5ZTFhYmQ2MGJiYmVlNTQwNzc3YzRhYzBmMmM3MmQxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMjI6NTk6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oIGIvaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oXG5pbmRleCA0ZDU1ODI3ZTk3MDUzNy4uNTM2ZmEzMjQ2MjAyNzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbXJvdXRlX2Jhc2UuaFxuQEAgLTIsOCAmIzQzOzIsMTAgQEBcbiAjZGVmaW5lIF9fTElOVVhfTVJPVVRFX0JBU0VfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yaGFzaHRhYmxlLXR5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZmliX25vdGlmaWVyLmhcdTAwM2VcbkBAIC0yNDIsNiAmIzQzOzI0NCw4IEBAIHN0cnVjdCBtcl90YWJsZV9vcHMge1xuICAqIEBtcm91dGVfZG9fYXNzZXJ0OiBXaGV0aGVyIHRvIGluZm9ybSB1c2Vyc3BhY2Ugb24gd3JvbmcgaW5ncmVzc1xuICAqIEBtcm91dGVfZG9fcGltOiBXaGV0aGVyIHRvIHJlY2VpdmUgSUdNUCBQSU12MVxuICAqIEBtcm91dGVfcmVnX3ZpZl9udW06IFBJTS1kZXZpY2UgdmlmIGluZGV4XG4mIzQzOyAqIEByZWZjbnQ6IGxpZmV0aW1lIHBpbnMgZm9yIHRoaXMgdGFibGVcbiYjNDM7ICogQGRlc3Ryb3lfd29yazogcHJvY2Vzcy1jb250ZXh0IGNsZWFudXAgYmVmb3JlIGZpbmFsIFJDVSBmcmVlXG4gICovXG4gc3RydWN0IG1yX3RhYmxlIHtcbiBcdHN0cnVjdCByY3Vfd29ya1x0XHR3b3JrO1xuQEAgLTI2MSw2ICYjNDM7MjY1LDggQEAgc3RydWN0IG1yX3RhYmxlIHtcbiBcdGJvb2xcdFx0XHRtcm91dGVfZG9fcGltO1xuIFx0Ym9vbFx0XHRcdG1yb3V0ZV9kb193cnZpZndob2xlO1xuIFx0aW50XHRcdFx0bXJvdXRlX3JlZ192aWZfbnVtO1xuJiM0MztcdHJlZmNvdW50X3RcdFx0cmVmY250O1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdFx0ZGVzdHJveV93b3JrO1xuIH07XG4gXG4gc3RhdGljIGlubGluZSBib29sIG1yX2Nhbl9mcmVlX3RhYmxlKHN0cnVjdCBuZXQgKm5ldClcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yX2Jhc2UuYyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jXG5pbmRleCA4NjdiMjRiZWRlZDExMi4uOTcxMDc4OWNmYWY5OTQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcG1yX2Jhc2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBtcl9iYXNlLmNcbkBAIC0zMiw4ICYjNDM7MzIsMTAgQEAgc3RhdGljIHZvaWQgX19tcl9mcmVlX3RhYmxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSxcbiBcdFx0XHRcdFx0ICAgIHN0cnVjdCBtcl90YWJsZSwgd29yayk7XG4mIzQzO1x0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQpO1xuIFxuIFx0cmhsdGFibGVfZGVzdHJveShcdTAwMjZtcnQtXHUwMDNlbWZjX2hhc2gpO1xuJiM0MztcdHB1dF9uZXQobmV0KTtcbiBcdGtmcmVlKG1ydCk7XG4gfVxuIFxuQEAgLTU2LDExICYjNDM7NTgsMTIgQEAgbXJfdGFibGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQsXG4gXHRpZiAoIW1ydClcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXHRtcnQtXHUwMDNlaWQgPSBpZDtcbi1cdHdyaXRlX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCwgbmV0KTtcbiYjNDM7XHR3cml0ZV9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQsIGdldF9uZXQobmV0KSk7XG4gXG4gXHRtcnQtXHUwMDNlb3BzID0gKm9wcztcbiBcdGVyciA9IHJobHRhYmxlX2luaXQoXHUwMDI2bXJ0LVx1MDAzZW1mY19oYXNoLCBtcnQtXHUwMDNlb3BzLnJodF9wYXJhbXMpO1xuIFx0aWYgKGVycikge1xuJiM0MztcdFx0cHV0X25ldChyZWFkX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCkpO1xuIFx0XHRrZnJlZShtcnQpO1xuIFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0fVxuQEAgLTcyLDYgJiM0Mzs3NSw3IEBAIG1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxuIFx0dGltZXJfc2V0dXAoXHUwMDI2bXJ0LVx1MDAzZWlwbXJfZXhwaXJlX3RpbWVyLCBleHBpcmVfZnVuYywgMCk7XG4gXG4gXHRtcnQtXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtID0gLTE7XG4mIzQzO1x0cmVmY291bnRfc2V0KFx1MDAyNm1ydC1cdTAwM2VyZWZjbnQsIDEpO1xuIFx0dGFibGVfc2V0KG1ydCwgbmV0KTtcbiBcdHJldHVybiBtcnQ7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jXG5pbmRleCA2MDRhNTg4Mzg5MDFhNy4uOTRiYjAwYmRmZjk4YzggMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZtci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZtci5jXG5AQCAtODcsNiAmIzQzOzg3LDExIEBAIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbXJ0X2NhY2hlcCBfX3JlYWRfbW9zdGx5O1xuIHN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwNm1yX25ld190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCk7XG4gc3RhdGljIHZvaWQgaXA2bXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbiBcdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRldl9raWxsX2xpc3QpO1xuJiM0MztzdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiYjNDM7c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfZ2V0X3RhYmxlX2hvbGQoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpO1xuJiM0MztzdGF0aWMgdm9pZCBpcDZtcl9wdXRfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQpO1xuJiM0MztzdGF0aWMgdm9pZCBfX2lwNm1yX3B1dF90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZGV2X2tpbGxfbGlzdCk7XG4gXG4gc3RhdGljIHZvaWQgaXA2X21yX2ZvcndhcmQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbiBcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTE3OSw3ICYjNDM7MTg0LDcgQEAgc3RhdGljIGludCBpcDZtcl9ydWxlX2FjdGlvbihzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsIHN0cnVjdCBmbG93aSAqZmxwLFxuIFxuIFx0YXJnLVx1MDAzZXRhYmxlID0gZmliX3J1bGVfZ2V0X3RhYmxlKHJ1bGUsIGFyZyk7XG4gXG4tXHRtcnQgPSBfX2lwNm1yX2dldF90YWJsZShydWxlLVx1MDAzZWZyX25ldCwgYXJnLVx1MDAzZXRhYmxlKTtcbiYjNDM7XHRtcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChydWxlLVx1MDAzZWZyX25ldCwgYXJnLVx1MDAzZXRhYmxlKTtcbiBcdGlmICghbXJ0KVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcdHJlcy1cdTAwM2VtcnQgPSBtcnQ7XG5AQCAtMjcxLDcgJiM0MzsyNzYsOCBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwNm1yX3J1bGVzX2V4aXRfcnRubChzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobXJ0LCBuZXh0LCBcdTAwMjZuZXQtXHUwMDNlaXB2Ni5tcjZfdGFibGVzLCBsaXN0KSB7XG4gXHRcdGxpc3RfZGVsX3JjdShcdTAwMjZtcnQtXHUwMDNlbGlzdCk7XG4tXHRcdGlwNm1yX2ZyZWVfdGFibGUobXJ0LCBkZXZfa2lsbF9saXN0KTtcbiYjNDM7XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuJiM0MztcdFx0X19pcDZtcl9wdXRfdGFibGUobXJ0LCBkZXZfa2lsbF9saXN0KTtcbiBcdH1cbiB9XG4gXG5AQCAtMzE0LDcgJiM0MzszMjAsNyBAQCBzdGF0aWMgc3RydWN0IG1yX3RhYmxlICpfX2lwNm1yX2dldF90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZClcbiBzdGF0aWMgaW50IGlwNm1yX2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k2ICpmbHA2LFxuIFx0XHRcdCAgICBzdHJ1Y3QgbXJfdGFibGUgKiptcnQpXG4ge1xuLVx0Km1ydCA9IHJjdV9kZXJlZmVyZW5jZShuZXQtXHUwMDNlaXB2Ni5tcnQ2KTtcbiYjNDM7XHQqbXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQobmV0LCBSVDZfVEFCTEVfREZMVCk7XG4gXHRpZiAoISptcnQpXG4gXHRcdHJldHVybiAtRUFHQUlOO1xuIFx0cmV0dXJuIDA7XG5AQCAtMzQyLDcgJiM0MzszNDgsOCBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwNm1yX3J1bGVzX2V4aXRfcnRubChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobmV0LVx1MDAzZWlwdjYubXJ0NiwgMSk7XG4gXG4gXHRSQ1VfSU5JVF9QT0lOVEVSKG5ldC1cdTAwM2VpcHY2Lm1ydDYsIE5VTEwpO1xuLVx0aXA2bXJfZnJlZV90YWJsZShtcnQsIGRldl9raWxsX2xpc3QpO1xuJiM0MztcdHN5bmNocm9uaXplX3JjdSgpO1xuJiM0MztcdF9faXA2bXJfcHV0X3RhYmxlKG1ydCwgZGV2X2tpbGxfbGlzdCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaXA2bXJfcnVsZXNfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG5AQCAtMzY4LDYgJiM0MzszNzUsNDQgQEAgc3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfZ2V0X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKVxuIFx0cmV0dXJuIG1ydDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwNm1yX2dldF90YWJsZV9ob2xkKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRtcnQgPSBfX2lwNm1yX2dldF90YWJsZShuZXQsIGlkKTtcbiYjNDM7XHRpZiAobXJ0IFx1MDAyNlx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNm1ydC1cdTAwM2VyZWZjbnQpKVxuJiM0MztcdFx0bXJ0ID0gTlVMTDtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1ydDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgX19pcDZtcl9wdXRfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkICpkZXZfa2lsbF9saXN0O1xuJiM0MztcdExJU1RfSEVBRChsb2NhbF9kZXZfa2lsbF9saXN0KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2bXJ0LVx1MDAzZXJlZmNudCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICghbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSkge1xuJiM0MztcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZtcnQtXHUwMDNlZGVzdHJveV93b3JrKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRldl9raWxsX2xpc3QgPSBoZWFkID8gaGVhZCA6IFx1MDAyNmxvY2FsX2Rldl9raWxsX2xpc3Q7XG4mIzQzO1x0aXA2bXJfZnJlZV90YWJsZShtcnQsIGRldl9raWxsX2xpc3QpO1xuJiM0MztcdGlmICghaGVhZClcbiYjNDM7XHRcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoZGV2X2tpbGxfbGlzdCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlwNm1yX3B1dF90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydClcbiYjNDM7e1xuJiM0MztcdF9faXA2bXJfcHV0X3RhYmxlKG1ydCwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBpcDZtcl9oYXNoX2NtcChzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyAqYXJnLFxuIFx0XHRcdCAgY29uc3Qgdm9pZCAqcHRyKVxuIHtcbkBAIC00MTMsOCAmIzQzOzQ1OCwxMiBAQCBzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXG4gXHRpZiAobXJ0KVxuIFx0XHRyZXR1cm4gbXJ0O1xuIFxuLVx0cmV0dXJuIG1yX3RhYmxlX2FsbG9jKG5ldCwgaWQsIFx1MDAyNmlwNm1yX21yX3RhYmxlX29wcyxcbi1cdFx0XHQgICAgICBpcG1yX2V4cGlyZV9wcm9jZXNzLCBpcDZtcl9uZXdfdGFibGVfc2V0KTtcbiYjNDM7XHRtcnQgPSBtcl90YWJsZV9hbGxvYyhuZXQsIGlkLCBcdTAwMjZpcDZtcl9tcl90YWJsZV9vcHMsXG4mIzQzO1x0XHRcdCAgICAgaXBtcl9leHBpcmVfcHJvY2VzcywgaXA2bXJfbmV3X3RhYmxlX3NldCk7XG4mIzQzO1x0aWYgKCFJU19FUlIobXJ0KSlcbiYjNDM7XHRcdElOSVRfV09SSyhcdTAwMjZtcnQtXHUwMDNlZGVzdHJveV93b3JrLCBpcDZtcl9mcmVlX3RhYmxlX3dvcmspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbXJ0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuQEAgLTQyMyw4ICYjNDM7NDcyLDYgQEAgc3RhdGljIHZvaWQgaXA2bXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZtcnQtXHUwMDNlbmV0KTtcbiBcdExJU1RfSEVBRChpcDZtcl9kZXZfa2lsbF9saXN0KTtcbiBcbi1cdFdBUk5fT05fT05DRSghbXJfY2FuX2ZyZWVfdGFibGUobmV0KSk7XG4tXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNm1ydC1cdTAwM2VpcG1yX2V4cGlyZV90aW1lcik7XG4gXHRtcm91dGVfY2xlYW5fdGFibGVzKG1ydCwgTVJUNl9GTFVTSF9NSUZTIHwgTVJUNl9GTFVTSF9NSUZTX1NUQVRJQyB8XG4gXHRcdFx0ICAgIE1SVDZfRkxVU0hfTUZDIHwgTVJUNl9GTFVTSF9NRkNfU1RBVElDLFxuQEAgLTQzNiw2ICYjNDM7NDgzLDE3IEBAIHN0YXRpYyB2b2lkIGlwNm1yX2ZyZWVfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQsXG4gXHRsaXN0X3NwbGljZShcdTAwMjZpcDZtcl9kZXZfa2lsbF9saXN0LCBkZXZfa2lsbF9saXN0KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGlwNm1yX2ZyZWVfdGFibGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXJfdGFibGUsIGRlc3Ryb3lfd29yayk7XG4mIzQzO1x0TElTVF9IRUFEKGRldl9raWxsX2xpc3QpO1xuJiM0MztcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRpcDZtcl9mcmVlX3RhYmxlKG1ydCwgXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG4mIzQzO1x0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShcdTAwMjZkZXZfa2lsbF9saXN0KTtcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0Mzt9XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfUFJPQ19GU1xuIC8qIFRoZSAvcHJvYyBpbnRlcmZhY2VzIHRvIG11bHRpY2FzdCByb3V0aW5nXG4gICogL3Byb2MvaXA2X21yX2NhY2hlIC9wcm9jL2lwNl9tcl92aWZcbkBAIC01NjksNyAmIzQzOzYyNyw3IEBAIHN0YXRpYyBpbnQgcGltNl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHN0cnVjdCBpcHY2aGRyICAgKmVuY2FwO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgICpyZWdfZGV2ID0gTlVMTDtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4tXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcbiYjNDM7XHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IE5VTEw7XG4gXHRzdHJ1Y3QgZmxvd2k2IGZsNiA9IHtcbiBcdFx0LmZsb3dpNl9paWZcdD0gc2tiLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4LFxuIFx0XHQuZmxvd2k2X21hcmtcdD0gc2tiLVx1MDAzZW1hcmssXG5AQCAtNjE3LDkgJiM0Mzs2NzUsMTIgQEAgc3RhdGljIGludCBwaW02X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiX3R1bm5lbF9yeChza2IsIHJlZ19kZXYsIGRldl9uZXQocmVnX2RldikpO1xuIFxuIFx0bmV0aWZfcngoc2tiKTtcbiYjNDM7XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcbiBcdHJldHVybiAwO1xuICBkcm9wOlxuJiM0MztcdGlmIChtcnQpXG4mIzQzO1x0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTYzNCw3ICYjNDM7Njk1LDcgQEAgc3RhdGljIG5ldGRldl90eF90IHJlZ192aWZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XG4tXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcbiYjNDM7XHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IE5VTEw7XG4gXHRzdHJ1Y3QgZmxvd2k2IGZsNiA9IHtcbiBcdFx0LmZsb3dpNl9vaWZcdD0gZGV2LVx1MDAzZWlmaW5kZXgsXG4gXHRcdC5mbG93aTZfaWlmXHQ9IHNrYi1cdTAwM2Vza2JfaWlmID8gOiBMT09QQkFDS19JRklOREVYLFxuQEAgLTY1NSwxMiAmIzQzOzcxNiwxNSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgcmVnX3ZpZl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpcDZtcl9jYWNoZV9yZXBvcnQobXJ0LCBza2IsIFJFQURfT05DRShtcnQtXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtKSxcbiBcdFx0XHQgICBNUlQ2TVNHX1dIT0xFUEtUKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIFxuIHR4X2xvb2t1cF9lcnI6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB0eF9lcnI6XG4mIzQzO1x0aWYgKG1ydClcbiYjNDM7XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0REVWX1NUQVRTX0lOQyhkZXYsIHR4X2Vycm9ycyk7XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG5AQCAtMTYxNSwxMiAmIzQzOzE2NzksMTMgQEAgc3RhdGljIHZvaWQgbXJvdXRlX2NsZWFuX3RhYmxlcyhzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgaW50IGZsYWdzLFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW50IGlwNm1yX3NrX2luaXQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBzb2NrICpzaylcbiYjNDM7c3RhdGljIGludCBfX2lwNm1yX3NrX2luaXQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRpbnQgZXJyID0gMDtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbiBcbi1cdHJ0bmxfbG9jaygpO1xuJiM0MztcdEFTU0VSVF9SVE5MKCk7XG4mIzQzO1xuIFx0c3Bpbl9sb2NrKFx1MDAyNm1ydF9sb2NrKTtcbiBcdGlmIChydG5sX2RlcmVmZXJlbmNlKG1ydC1cdTAwM2Vtcm91dGVfc2spKSB7XG4gXHRcdGVyciA9IC1FQUREUklOVVNFO1xuQEAgLTE2MjgsNiAmIzQzOzE2OTMsNyBAQCBzdGF0aWMgaW50IGlwNm1yX3NrX2luaXQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBzb2NrICpzaylcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1ydC1cdTAwM2Vtcm91dGVfc2ssIHNrKTtcbiBcdFx0c29ja19zZXRfZmxhZyhzaywgU09DS19SQ1VfRlJFRSk7XG4gXHRcdGF0b21pY19pbmMoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXHUwMDNlbWNfZm9yd2FyZGluZyk7XG4mIzQzO1x0XHRyZWZjb3VudF9pbmMoXHUwMDI2bXJ0LVx1MDAzZXJlZmNudCk7XG4gXHR9XG4gXHRzcGluX3VubG9jayhcdTAwMjZtcnRfbG9jayk7XG4gXG5AQCAtMTYzNiw3ICYjNDM7MTcwMiw2IEBAIHN0YXRpYyBpbnQgaXA2bXJfc2tfaW5pdChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IHNvY2sgKnNrKVxuIFx0XHRcdFx0XHQgICAgIE5FVENPTkZBX01DX0ZPUldBUkRJTkcsXG4gXHRcdFx0XHRcdCAgICAgTkVUQ09ORkFfSUZJTkRFWF9BTEwsXG4gXHRcdFx0XHRcdCAgICAgbmV0LVx1MDAzZWlwdjYuZGV2Y29uZl9hbGwpO1xuLVx0cnRubF91bmxvY2soKTtcbiBcbiBcdHJldHVybiBlcnI7XG4gfVxuQEAgLTE2NDYsNiAmIzQzOzE3MTEsNyBAQCBpbnQgaXA2bXJfc2tfZG9uZShzdHJ1Y3Qgc29jayAqc2spXG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4gXHRzdHJ1Y3QgaXB2Nl9kZXZjb25mICpkZXZjb25mO1xuIFx0TElTVF9IRUFEKGRldl9raWxsX2xpc3QpO1xuJiM0MztcdHN0cnVjdCBtcl90YWJsZSAqZnJlZV9tcnQgPSBOVUxMO1xuIFx0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4gXHRpbnQgZXJyID0gLUVBQ0NFUztcbiBcbkBAIC0xNjc1LDYgJiM0MzsxNzQxLDE1IEBAIGludCBpcDZtcl9za19kb25lKHN0cnVjdCBzb2NrICpzaylcbiBcbiBcdFx0XHRtcm91dGVfY2xlYW5fdGFibGVzKG1ydCwgTVJUNl9GTFVTSF9NSUZTIHwgTVJUNl9GTFVTSF9NRkMsXG4gXHRcdFx0XHRcdCAgICBcdTAwMjZkZXZfa2lsbF9saXN0KTtcbiYjNDM7XHRcdFx0aWYgKG1ydC1cdTAwM2VpZCAhPSBSVDZfVEFCTEVfREZMVCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICFSRUFEX09OQ0UobXJ0LVx1MDAzZW1heHZpZikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAhUkVBRF9PTkNFKG1ydC1cdTAwM2VjYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICBsaXN0X2VtcHR5KFx1MDAyNm1ydC1cdTAwM2VtZmNfY2FjaGVfbGlzdCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICBsaXN0X2VtcHR5KFx1MDAyNm1ydC1cdTAwM2VtZmNfdW5yZXNfcXVldWUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgUkVBRF9PTkNFKG1ydC1cdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdFx0bGlzdF9kZWxfcmN1KFx1MDAyNm1ydC1cdTAwM2VsaXN0KTtcbiYjNDM7XHRcdFx0XHRmcmVlX21ydCA9IG1ydDtcbiYjNDM7XHRcdFx0fVxuIFx0XHRcdGVyciA9IDA7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC0xNjgyLDYgJiM0MzsxNzU3LDE0IEBAIGludCBpcDZtcl9za19kb25lKHN0cnVjdCBzb2NrICpzaylcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG4gXHRydG5sX3VubG9jaygpO1xuIFxuJiM0MztcdGlmICghZXJyKVxuJiM0MztcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4mIzQzO1xuJiM0MztcdGlmIChmcmVlX21ydCkge1xuJiM0MztcdFx0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0XHRpcDZtcl9wdXRfdGFibGUoZnJlZV9tcnQpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xNjkzLDExICYjNDM7MTc3NiwxNSBAQCBib29sIG1yb3V0ZTZfaXNfc29ja2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0LmZsb3dpNl9vaWZcdD0gc2tiLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4LFxuIFx0XHQuZmxvd2k2X21hcmtcdD0gc2tiLVx1MDAzZW1hcmssXG4gXHR9O1xuJiM0MztcdGJvb2wgcmV0O1xuIFxuIFx0aWYgKGlwNm1yX2ZpYl9sb29rdXAobmV0LCBcdTAwMjZmbDYsIFx1MDAyNm1ydCkgXHUwMDNjIDApXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0cmV0dXJuIHJjdV9hY2Nlc3NfcG9pbnRlcihtcnQtXHUwMDNlbXJvdXRlX3NrKTtcbiYjNDM7XHRyZXQgPSByY3VfYWNjZXNzX3BvaW50ZXIobXJ0LVx1MDAzZW1yb3V0ZV9zayk7XG4mIzQzO1x0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIEVYUE9SVF9TWU1CT0wobXJvdXRlNl9pc19zb2NrZXQpO1xuIFxuQEAgLTE3MTYsMjAgJiM0MzsxODAzLDI0IEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdHN0cnVjdCBtZjZjY3RsIG1mYztcbiBcdG1pZmlfdCBtaWZpO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuLVx0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4mIzQzO1x0c3RydWN0IG1yX3RhYmxlICptcnQgPSBOVUxMO1xuJiM0MztcdHUzMiB0YWJsZSA9IHJhdzZfc2soc2spLVx1MDAzZWlwNm1yX3RhYmxlID8gOiBSVDZfVEFCTEVfREZMVDtcbiBcbiBcdGlmIChzay1cdTAwM2Vza190eXBlICE9IFNPQ0tfUkFXIHx8XG4gXHQgICAgaW5ldF9zayhzayktXHUwMDNlaW5ldF9udW0gIT0gSVBQUk9UT19JQ01QVjYpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdG1ydCA9IGlwNm1yX2dldF90YWJsZShuZXQsIHJhdzZfc2soc2spLVx1MDAzZWlwNm1yX3RhYmxlID8gOiBSVDZfVEFCTEVfREZMVCk7XG4tXHRpZiAoIW1ydClcbi1cdFx0cmV0dXJuIC1FTk9FTlQ7XG4tXG4tXHRpZiAob3B0bmFtZSAhPSBNUlQ2X0lOSVQpIHtcbiYjNDM7XHRpZiAob3B0bmFtZSAhPSBNUlQ2X0lOSVQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIG9wdG5hbWUgIT0gTVJUNl9UQUJMRSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgb3B0bmFtZSAhPSBNUlQ2X0RPTkUpIHtcbiYjNDM7XHRcdG1ydCA9IGlwNm1yX2dldF90YWJsZV9ob2xkKG5ldCwgdGFibGUpO1xuJiM0MztcdFx0aWYgKCFtcnQpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PRU5UO1xuIFx0XHRpZiAoc2sgIT0gcmN1X2FjY2Vzc19wb2ludGVyKG1ydC1cdTAwM2Vtcm91dGVfc2spIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIW5zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKVxuJiM0MztcdFx0ICAgICFuc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkge1xuJiM0MztcdFx0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuQEAgLTE3MzcsMzIgJiM0MzsxODI4LDQxIEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRcdHJldHVybiBpcDZtcl9za19pbml0KG1ydCwgc2spO1xuJiM0MztcdFx0cnRubF9sb2NrKCk7XG4mIzQzO1x0XHRtcnQgPSBpcDZtcl9uZXdfdGFibGUobmV0LCB0YWJsZSk7XG4mIzQzO1x0XHRpZiAoIUlTX0VSUihtcnQpKVxuJiM0MztcdFx0XHRyZXQgPSBfX2lwNm1yX3NrX2luaXQobXJ0LCBzayk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHJldCA9IFBUUl9FUlIobXJ0KTtcbiYjNDM7XHRcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0Y2FzZSBNUlQ2X0RPTkU6XG4gXHRcdHJldHVybiBpcDZtcl9za19kb25lKHNrKTtcbiBcbiBcdGNhc2UgTVJUNl9BRERfTUlGOlxuIFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YodmlmKSlcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VpbnZhbDtcbiBcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNnZpZiwgb3B0dmFsLCBzaXplb2YodmlmKSkpXG4tXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XG4gXHRcdGlmICh2aWYubWlmNmNfbWlmaSBcdTAwM2U9IE1BWE1JRlMpXG4tXHRcdFx0cmV0dXJuIC1FTkZJTEU7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9lbmZpbGU7XG4gXHRcdHJ0bmxfbG9jaygpO1xuIFx0XHRyZXQgPSBtaWY2X2FkZChuZXQsIG1ydCwgXHUwMDI2dmlmLFxuIFx0XHRcdCAgICAgICBzayA9PSBydG5sX2RlcmVmZXJlbmNlKG1ydC1cdTAwM2Vtcm91dGVfc2spKTtcbiBcdFx0cnRubF91bmxvY2soKTtcbiYjNDM7XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0Y2FzZSBNUlQ2X0RFTF9NSUY6XG4gXHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihtaWZpX3QpKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIG91dF9wdXRfdGFibGVfZWludmFsO1xuIFx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2bWlmaSwgb3B0dmFsLCBzaXplb2YobWlmaV90KSkpXG4tXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XG4gXHRcdHJ0bmxfbG9jaygpO1xuIFx0XHRyZXQgPSBtaWY2X2RlbGV0ZShtcnQsIG1pZmksIDAsIE5VTEwpO1xuIFx0XHRydG5sX3VubG9jaygpO1xuJiM0MztcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHQvKlxuQEAgLTE3NzYsOSAmIzQzOzE4NzYsOSBAQCBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRjYXNlIE1SVDZfQUREX01GQ19QUk9YWTpcbiBcdGNhc2UgTVJUNl9ERUxfTUZDX1BST1hZOlxuIFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YobWZjKSlcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VpbnZhbDtcbiBcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNm1mYywgb3B0dmFsLCBzaXplb2YobWZjKSkpXG4tXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XG4gXHRcdGlmIChwYXJlbnQgPT0gMClcbiBcdFx0XHRwYXJlbnQgPSBtZmMubWY2Y2NfcGFyZW50O1xuIFxuQEAgLTE3OTMsNiAmIzQzOzE4OTMsNyBAQCBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRcdFx0XHRcdCAgICBwYXJlbnQpO1xuIFxuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bmV0LVx1MDAzZWlwdjYubWZjX211dGV4KTtcbiYjNDM7XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0Y2FzZSBNUlQ2X0ZMVVNIOlxuQEAgLTE4MDEsMTQgJiM0MzsxOTAyLDE1IEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0aW50IGZsYWdzO1xuIFxuIFx0XHRpZiAob3B0bGVuICE9IHNpemVvZihmbGFncykpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7XG4gXHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZmbGFncywgb3B0dmFsLCBzaXplb2YoZmxhZ3MpKSlcbi1cdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VmYXVsdDtcbiBcbiBcdFx0cnRubF9sb2NrKCk7XG4gXHRcdG1yb3V0ZV9jbGVhbl90YWJsZXMobXJ0LCBmbGFncywgXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG4gXHRcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG4gXHRcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1x0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG5AQCAtMTgyMCwxMCAmIzQzOzE5MjIsMTEgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFx0XHRpbnQgdjtcbiBcbiBcdFx0aWYgKG9wdGxlbiAhPSBzaXplb2YodikpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7XG4gXHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZ2LCBvcHR2YWwsIHNpemVvZih2KSkpXG4tXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XG4gXHRcdFdSSVRFX09OQ0UobXJ0LVx1MDAzZW1yb3V0ZV9kb19hc3NlcnQsIHYpO1xuJiM0MztcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuQEAgLTE4MzQsOSAmIzQzOzE5MzcsOSBAQCBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRcdGludCB2O1xuIFxuIFx0XHRpZiAob3B0bGVuICE9IHNpemVvZih2KSlcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VpbnZhbDtcbiBcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNnYsIG9wdHZhbCwgc2l6ZW9mKHYpKSlcbi1cdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VmYXVsdDtcbiBcbiBcdFx0ZG9fd3JtaWZ3aG9sZSA9ICh2ID09IE1SVDZNU0dfV1JNSUZXSE9MRSk7XG4gXHRcdHYgPSAhIXY7XG5AQCAtMTg0OCw2ICYjNDM7MTk1MSw3IEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0XHRXUklURV9PTkNFKG1ydC1cdTAwM2Vtcm91dGVfZG9fd3J2aWZ3aG9sZSwgZG9fd3JtaWZ3aG9sZSk7XG4gXHRcdH1cbiBcdFx0cnRubF91bmxvY2soKTtcbiYjNDM7XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuQEAgLTE4NjQsMTggJiM0MzsxOTY4LDIyIEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0LyogXCYjMzQ7cGltNnJlZyV1XCYjMzQ7IHNob3VsZCBub3QgZXhjZWVkIDE2IGJ5dGVzIChJRk5BTVNJWikgKi9cbiBcdFx0aWYgKHYgIT0gUlRfVEFCTEVfREVGQVVMVCBcdTAwMjZcdTAwMjYgdiBcdTAwM2U9IDEwMDAwMDAwMClcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0aWYgKHNrID09IHJjdV9hY2Nlc3NfcG9pbnRlcihtcnQtXHUwMDNlbXJvdXRlX3NrKSlcbiYjNDM7XG4mIzQzO1x0XHRtcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChuZXQsIHRhYmxlKTtcbiYjNDM7XHRcdGlmIChtcnQgXHUwMDI2XHUwMDI2IHNrID09IHJjdV9hY2Nlc3NfcG9pbnRlcihtcnQtXHUwMDNlbXJvdXRlX3NrKSkge1xuJiM0MztcdFx0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKCFuc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkge1xuJiM0MztcdFx0XHRpZiAobXJ0KVxuJiM0MztcdFx0XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChtcnQpXG4mIzQzO1x0XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFxuLVx0XHRydG5sX2xvY2soKTtcbi1cdFx0cmV0ID0gMDtcbi1cdFx0bXJ0ID0gaXA2bXJfbmV3X3RhYmxlKG5ldCwgdik7XG4tXHRcdGlmIChJU19FUlIobXJ0KSlcbi1cdFx0XHRyZXQgPSBQVFJfRVJSKG1ydCk7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyYXc2X3NrKHNrKS1cdTAwM2VpcDZtcl90YWJsZSA9IHY7XG4tXHRcdHJ0bmxfdW5sb2NrKCk7XG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyYXc2X3NrKHNrKS1cdTAwM2VpcDZtcl90YWJsZSA9IHY7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdH1cbiAjZW5kaWZcbiBcdC8qXG5AQCAtMTg4Myw4ICYjNDM7MTk5MSwyNSBAQCBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gXHQgKlx0c2V0LlxuIFx0ICovXG4gXHRkZWZhdWx0OlxuJiM0MztcdFx0aWYgKG1ydClcbiYjNDM7XHRcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4gXHR9XG4mIzQzO1xuJiM0MztvdXRfcHV0X3RhYmxlX2VmYXVsdDpcbiYjNDM7XHRpZiAobXJ0KVxuJiM0MztcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4mIzQzO1x0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztvdXRfcHV0X3RhYmxlX2VpbnZhbDpcbiYjNDM7XHRpZiAobXJ0KVxuJiM0MztcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4mIzQzO1x0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztvdXRfcHV0X3RhYmxlX2VuZmlsZTpcbiYjNDM7XHRpZiAobXJ0KVxuJiM0MztcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4mIzQzO1x0cmV0dXJuIC1FTkZJTEU7XG4gfVxuIFxuIC8qXG5AQCAtMTg5NSw2ICYjNDM7MjAyMCw3IEBAIGludCBpcDZfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0XHQgIHNvY2twdHJfdCBvcHRsZW4pXG4ge1xuIFx0aW50IG9scjtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcdGludCB2YWw7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4gXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcbkBAIC0xOTAzLDcgJiM0MzsyMDI5LDcgQEAgaW50IGlwNl9tcm91dGVfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFx0ICAgIGluZXRfc2soc2spLVx1MDAzZWluZXRfbnVtICE9IElQUFJPVE9fSUNNUFY2KVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRtcnQgPSBpcDZtcl9nZXRfdGFibGUobmV0LCByYXc2X3NrKHNrKS1cdTAwM2VpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpO1xuJiM0MztcdG1ydCA9IGlwNm1yX2dldF90YWJsZV9ob2xkKG5ldCwgcmF3Nl9zayhzayktXHUwMDNlaXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTtcbiBcdGlmICghbXJ0KVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbkBAIC0xOTIwLDI2ICYjNDM7MjA0NiwzMyBAQCBpbnQgaXA2X21yb3V0ZV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRcdHZhbCA9IFJFQURfT05DRShtcnQtXHUwMDNlbXJvdXRlX2RvX2Fzc2VydCk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbiYjNDM7XHRcdHJldCA9IC1FTk9QUk9UT09QVDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNm9sciwgb3B0bGVuLCBzaXplb2YoaW50KSkpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZvbHIsIG9wdGxlbiwgc2l6ZW9mKGludCkpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUZBVUxUO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuIFxuIFx0b2xyID0gbWluX3QoaW50LCBvbHIsIHNpemVvZihpbnQpKTtcbi1cdGlmIChvbHIgXHUwMDNjIDApXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmIChvbHIgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4gXG4tXHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXHUwMDI2b2xyLCBzaXplb2YoaW50KSkpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIFx1MDAyNnZhbCwgb2xyKSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXHUwMDI2b2xyLCBzaXplb2YoaW50KSkgfHxcbiYjNDM7XHQgICAgY29weV90b19zb2NrcHRyKG9wdHZhbCwgXHUwMDI2dmFsLCBvbHIpKVxuJiM0MztcdFx0cmV0ID0gLUVGQVVMVDtcbiYjNDM7b3V0OlxuJiM0MztcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qXG4gICpcdFRoZSBJUCBtdWx0aWNhc3QgaW9jdGwgc3VwcG9ydCByb3V0aW5lcy5cbiAgKi9cbiYjNDM7XG4gaW50IGlwNm1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCAqYXJnKVxuIHtcbiBcdHN0cnVjdCBzaW9jX3NnX3JlcTYgKnNyO1xuQEAgLTE5NDksNyAmIzQzOzIwODIsNyBAQCBpbnQgaXA2bXJfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkICphcmcpXG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4gXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcbiBcbi1cdG1ydCA9IGlwNm1yX2dldF90YWJsZShuZXQsIHJhdzZfc2soc2spLVx1MDAzZWlwNm1yX3RhYmxlID8gOiBSVDZfVEFCTEVfREZMVCk7XG4mIzQzO1x0bXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQobmV0LCByYXc2X3NrKHNrKS1cdTAwM2VpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpO1xuIFx0aWYgKCFtcnQpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuQEAgLTE5NTcsNyAmIzQzOzIwOTAsNyBAQCBpbnQgaXA2bXJfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkICphcmcpXG4gXHRjYXNlIFNJT0NHRVRNSUZDTlRfSU42OlxuIFx0XHR2ciA9IChzdHJ1Y3Qgc2lvY19taWZfcmVxNiAqKWFyZztcbiBcdFx0aWYgKHZyLVx1MDAzZW1pZmkgXHUwMDNlPSBtcnQtXHUwMDNlbWF4dmlmKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIG91dF9wdXRfdGFibGVfZWludmFsO1xuIFx0XHR2ci1cdTAwM2VtaWZpID0gYXJyYXlfaW5kZXhfbm9zcGVjKHZyLVx1MDAzZW1pZmksIG1ydC1cdTAwM2VtYXh2aWYpO1xuIFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdHZpZiA9IFx1MDAyNm1ydC1cdTAwM2V2aWZfdGFibGVbdnItXHUwMDNlbWlmaV07XG5AQCAtMTk2Nyw5ICYjNDM7MjEwMCwxMSBAQCBpbnQgaXA2bXJfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkICphcmcpXG4gXHRcdFx0dnItXHUwMDNlaWJ5dGVzID0gUkVBRF9PTkNFKHZpZi1cdTAwM2VieXRlc19pbik7XG4gXHRcdFx0dnItXHUwMDNlb2J5dGVzID0gUkVBRF9PTkNFKHZpZi1cdTAwM2VieXRlc19vdXQpO1xuIFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4gXHRjYXNlIFNJT0NHRVRTR0NOVF9JTjY6XG4gXHRcdHNyID0gKHN0cnVjdCBzaW9jX3NnX3JlcTYgKilhcmc7XG5AQCAtMTk4MiwxNSAmIzQzOzIxMTcsMjEgQEAgaW50IGlwNm1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCAqYXJnKVxuIFx0XHRcdHNyLVx1MDAzZWJ5dGVjbnQgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmMtXHUwMDNlX2MubWZjX3VuLnJlcy5ieXRlcyk7XG4gXHRcdFx0c3ItXHUwMDNld3JvbmdfaWYgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmMtXHUwMDNlX2MubWZjX3VuLnJlcy53cm9uZ19pZik7XG4gXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiBcdGRlZmF1bHQ6XG4mIzQzO1x0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0cmV0dXJuIC1FTk9JT0NUTENNRDtcbiBcdH1cbi19XG4gXG4mIzQzO291dF9wdXRfdGFibGVfZWludmFsOlxuJiM0MztcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuJiM0MztcdHJldHVybiAtRUlOVkFMO1xuJiM0Mzt9XG4gI2lmZGVmIENPTkZJR19DT01QQVRcbiBzdHJ1Y3QgY29tcGF0X3Npb2Nfc2dfcmVxNiB7XG4gXHRzdHJ1Y3Qgc29ja2FkZHJfaW42IHNyYztcbkBAIC0yMDE3LDE2ICYjNDM7MjE1OCwxNiBAQCBpbnQgaXA2bXJfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZylcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbiBcdHN0cnVjdCBtcl90YWJsZSAqbXJ0O1xuIFxuLVx0bXJ0ID0gaXA2bXJfZ2V0X3RhYmxlKG5ldCwgcmF3Nl9zayhzayktXHUwMDNlaXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTtcbiYjNDM7XHRtcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChuZXQsIHJhdzZfc2soc2spLVx1MDAzZWlwNm1yX3RhYmxlID8gOiBSVDZfVEFCTEVfREZMVCk7XG4gXHRpZiAoIW1ydClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBTSU9DR0VUTUlGQ05UX0lONjpcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnZyLCBhcmcsIHNpemVvZih2cikpKVxuLVx0XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdFx0XHRnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0O1xuIFx0XHRpZiAodnIubWlmaSBcdTAwM2U9IG1ydC1cdTAwM2VtYXh2aWYpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7XG4gXHRcdHZyLm1pZmkgPSBhcnJheV9pbmRleF9ub3NwZWModnIubWlmaSwgbXJ0LVx1MDAzZW1heHZpZik7XG4gXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0dmlmID0gXHUwMDI2bXJ0LVx1MDAzZXZpZl90YWJsZVt2ci5taWZpXTtcbkBAIC0yMDM4LDE0ICYjNDM7MjE3OSwxNiBAQCBpbnQgaXA2bXJfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZylcbiBcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdFx0XHRpZiAoY29weV90b191c2VyKGFyZywgXHUwMDI2dnIsIHNpemVvZih2cikpKVxuLVx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VmYXVsdDtcbiYjNDM7XHRcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdH1cbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuIFx0Y2FzZSBTSU9DR0VUU0dDTlRfSU42OlxuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2c3IsIGFyZywgc2l6ZW9mKHNyKSkpXG4tXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XG4gXG4gXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0YyA9IGlwNm1yX2NhY2hlX2ZpbmQobXJ0LCBcdTAwMjZzci5zcmMuc2luNl9hZGRyLCBcdTAwMjZzci5ncnAuc2luNl9hZGRyKTtcbkBAIC0yMDU2LDE0ICYjNDM7MjE5OSwyNSBAQCBpbnQgaXA2bXJfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZylcbiBcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdFx0XHRpZiAoY29weV90b191c2VyKGFyZywgXHUwMDI2c3IsIHNpemVvZihzcikpKVxuLVx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VmYXVsdDtcbiYjNDM7XHRcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdH1cbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuIFx0ZGVmYXVsdDpcbiYjNDM7XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xuIFx0fVxuJiM0MztcbiYjNDM7b3V0X3B1dF90YWJsZV9lZmF1bHQ6XG4mIzQzO1x0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4mIzQzO1x0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztvdXRfcHV0X3RhYmxlX2VpbnZhbDpcbiYjNDM7XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiYjNDM7XHRyZXR1cm4gLUVJTlZBTDtcbiB9XG4gI2VuZGlmXG4gXG5AQCAtMjM5MiwxMyAmIzQzOzI1NDYsMTYgQEAgaW50IGlwNl9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRpZiAodmlmIFx1MDAzZT0gMCkge1xuIFx0XHRcdGludCBlcnIgPSBpcDZtcl9jYWNoZV91bnJlc29sdmVkKG1ydCwgdmlmLCBza2IsIGRldik7XG4gXG4mIzQzO1x0XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbiYjNDM7XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG4gXG4gXHRpcDZfbXJfZm9yd2FyZChuZXQsIG1ydCwgZGV2LCBza2IsIGNhY2hlKTtcbiYjNDM7XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0yNDQxLDE5ICYjNDM7MjU5OCwyNSBAQCBpbnQgaXA2X21yX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdC8qIE5vIHVzYWJsZSBjYWNoZSBlbnRyeSAqL1xuIFx0aWYgKCFjYWNoZSkge1xuIFx0XHR2aWYgPSBpcDZtcl9maW5kX3ZpZihtcnQsIGRldik7XG4tXHRcdGlmICh2aWYgXHUwMDNlPSAwKVxuLVx0XHRcdHJldHVybiBpcDZtcl9jYWNoZV91bnJlc29sdmVkKG1ydCwgdmlmLCBza2IsIGRldik7XG4tXHRcdGdvdG8gaXA2X291dHB1dDtcbiYjNDM7XHRcdGlmICh2aWYgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRcdGVyciA9IGlwNm1yX2NhY2hlX3VucmVzb2x2ZWQobXJ0LCB2aWYsIHNrYiwgZGV2KTtcbiYjNDM7XHRcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRnb3RvIG91dF9wdXQ7XG4gXHR9XG4gXG4gXHQvKiBXcm9uZyBpbnRlcmZhY2UgKi9cbiBcdHZpZiA9IGNhY2hlLVx1MDAzZV9jLm1mY19wYXJlbnQ7XG4gXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKG1ydC1cdTAwM2V2aWZfdGFibGVbdmlmXS5kZXYpICE9IGRldilcbi1cdFx0Z290byBpcDZfb3V0cHV0O1xuJiM0MztcdFx0Z290byBvdXRfcHV0O1xuIFxuIFx0aXA2X21yX291dHB1dF9maW5pc2gobmV0LCBtcnQsIGRldiwgc2tiLCBjYWNoZSk7XG4mIzQzO1x0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRyZXR1cm4gMDtcbiBcbiYjNDM7b3V0X3B1dDpcbiYjNDM7XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBpcDZfb3V0cHV0OlxuIFx0cmV0dXJuIGlwNl9vdXRwdXQobmV0LCBzaywgc2tiKTtcbiB9XG5AQCAtMjc1NSwzMyAmIzQzOzI5MTgsMzUgQEAgc3RhdGljIGludCBpcDZtcl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdGdycCA9IG5sYV9nZXRfaW42X2FkZHIodGJbUlRBX0RTVF0pO1xuIFx0dGFibGVpZCA9IG5sYV9nZXRfdTMyX2RlZmF1bHQodGJbUlRBX1RBQkxFXSwgMCk7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXG4tXHRtcnQgPSBfX2lwNm1yX2dldF90YWJsZShuZXQsIHRhYmxlaWQgPzogUlRfVEFCTEVfREVGQVVMVCk7XG4mIzQzO1x0bXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQobmV0LCB0YWJsZWlkID86IFJUX1RBQkxFX0RFRkFVTFQpO1xuIFx0aWYgKCFtcnQpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7TVIgdGFibGUgZG9lcyBub3QgZXhpc3RcJiMzNDspO1xuIFx0XHRlcnIgPSAtRU5PRU5UO1xuLVx0XHRnb3RvIGVycjtcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWU7XG4gXHR9XG4gXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuIFx0Y2FjaGUgPSBpcDZtcl9jYWNoZV9maW5kKG1ydCwgXHUwMDI2c3JjLCBcdTAwMjZncnApO1xuIFx0aWYgKCFjYWNoZSkge1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O01SIGNhY2hlIGVudHJ5IG5vdCBmb3VuZFwmIzM0Oyk7XG4gXHRcdGVyciA9IC1FTk9FTlQ7XG4tXHRcdGdvdG8gZXJyO1xuJiM0MztcdFx0Z290byBlcnJfcHV0O1xuIFx0fVxuIFxuIFx0ZXJyID0gaXA2bXJfZmlsbF9tcm91dGUobXJ0LCBza2IsIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsXG4gXHRcdFx0XHRubGgtXHUwMDNlbmxtc2dfc2VxLCBjYWNoZSwgUlRNX05FV1JPVVRFLCAwKTtcbi1cdGlmIChlcnIgXHUwMDNjIDApXG4tXHRcdGdvdG8gZXJyO1xuLVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3B1dDtcbiBcbi1cdHJldHVybiBydG5sX3VuaWNhc3Qoc2tiLCBuZXQsIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQpO1xuJiM0MztcdGVyciA9IHJ0bmxfdW5pY2FzdChza2IsIG5ldCwgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCk7XG4mIzQzO1x0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiBcbi1lcnI6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7ZXJyX3B1dDpcbiYjNDM7XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiYjNDM7ZXJyX2ZyZWU6XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuQEAgLTI4MDQsNyAmIzQzOzI5NjksNyBAQCBzdGF0aWMgaW50IGlwNm1yX3J0bV9kdW1wcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0aWYgKGZpbHRlci50YWJsZV9pZCkge1xuIFx0XHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcbiBcbi1cdFx0bXJ0ID0gX19pcDZtcl9nZXRfdGFibGUoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgZmlsdGVyLnRhYmxlX2lkKTtcbiYjNDM7XHRcdG1ydCA9IGlwNm1yX2dldF90YWJsZV9ob2xkKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIGZpbHRlci50YWJsZV9pZCk7XG4gXHRcdGlmICghbXJ0KSB7XG4gXHRcdFx0aWYgKHJ0bmxfbXNnX2ZhbWlseShjYi1cdTAwM2VubGgpICE9IFJUTkxfRkFNSUxZX0lQNk1SKSB7XG4gXHRcdFx0XHRlcnIgPSBza2ItXHUwMDNlbGVuO1xuQEAgLTI4MTgsNiAmIzQzOzI5ODMsNyBAQCBzdGF0aWMgaW50IGlwNm1yX3J0bV9kdW1wcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFxuIFx0XHRlcnIgPSBtcl90YWJsZV9kdW1wKG1ydCwgc2tiLCBjYiwgX2lwNm1yX2ZpbGxfbXJvdXRlLFxuIFx0XHRcdFx0ICAgIFx1MDAyNm1mY191bnJlc19sb2NrLCBcdTAwMjZmaWx0ZXIpO1xuJiM0MztcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdGVyciA9IHNrYi1cdTAwM2VsZW4gPyA6IGVycjtcbiBcdFx0Z290byB1bmxvY2s7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjI6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfTVJPVVRFJiMzNDssCiAgICAmIzM0O0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtJUFY2X1BJTVNNX1YyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwNl9tcm91dGVfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcDZtcl9pb2N0bCYjMzQ7LAogICAgJiMzNDtpcDZtcl9jb21wYXRfaW9jdGwmIzM0OywKICAgICYjMzQ7aXA2X21yX2lucHV0JiMzNDssCiAgICAmIzM0O2lwNl9tcl9vdXRwdXQmIzM0OywKICAgICYjMzQ7cGltNl9yY3YmIzM0OywKICAgICYjMzQ7cmVnX3ZpZl94bWl0JiMzNDssCiAgICAmIzM0O21yb3V0ZTZfaXNfc29ja2V0JiMzNDssCiAgICAmIzM0O2lwNm1yX3NrX2RvbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyByZWZlcmVuY2UgY291bnRpbmcgdG8gSVB2NiBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZXMgKHN0cnVjdCBtcl90YWJsZSkgdG8gZml4IHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMuIEl0IG1vZGlmaWVzIHZhcmlvdXMgZW50cnkgcG9pbnRzIChzb2NrZXQgb3B0aW9ucywgaW9jdGxzLCBuZXRsaW5rLCBwYWNrZXQgcngvdHgpIHRvIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIHRhYmxlIHdoaWxlIGluIHVzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZGI1ZjhkYTA5ZTFhYmQ2MGJiYmVlNTQwNzc3YzRhYzBmMmM3MmQxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMjQgMjI6NTk6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmggYi9pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmgKaW5kZXggNGQ1NTgyN2U5NzA1MzcuLjUzNmZhMzI0NjIwMjczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oCkBAIC0yLDggJiM0MzsyLDEwIEBACiAjZGVmaW5lIF9fTElOVVhfTVJPVVRFX0JBU0VfSAogCiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZmNvdW50LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmhhc2h0YWJsZS10eXBlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRfbmFtZXNwYWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3NvY2suaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZmliX25vdGlmaWVyLmgmZ3Q7CkBAIC0yNDIsNiAmIzQzOzI0NCw4IEBAIHN0cnVjdCBtcl90YWJsZV9vcHMgewogICogQG1yb3V0ZV9kb19hc3NlcnQ6IFdoZXRoZXIgdG8gaW5mb3JtIHVzZXJzcGFjZSBvbiB3cm9uZyBpbmdyZXNzCiAgKiBAbXJvdXRlX2RvX3BpbTogV2hldGhlciB0byByZWNlaXZlIElHTVAgUElNdjEKICAqIEBtcm91dGVfcmVnX3ZpZl9udW06IFBJTS1kZXZpY2UgdmlmIGluZGV4CiYjNDM7ICogQHJlZmNudDogbGlmZXRpbWUgcGlucyBmb3IgdGhpcyB0YWJsZQomIzQzOyAqIEBkZXN0cm95X3dvcms6IHByb2Nlc3MtY29udGV4dCBjbGVhbnVwIGJlZm9yZSBmaW5hbCBSQ1UgZnJlZQogICovCiBzdHJ1Y3QgbXJfdGFibGUgewogCXN0cnVjdCByY3Vfd29yawkJd29yazsKQEAgLTI2MSw2ICYjNDM7MjY1LDggQEAgc3RydWN0IG1yX3RhYmxlIHsKIAlib29sCQkJbXJvdXRlX2RvX3BpbTsKIAlib29sCQkJbXJvdXRlX2RvX3dydmlmd2hvbGU7CiAJaW50CQkJbXJvdXRlX3JlZ192aWZfbnVtOwomIzQzOwlyZWZjb3VudF90CQlyZWZjbnQ7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdAlkZXN0cm95X3dvcms7CiB9OwogCiBzdGF0aWMgaW5saW5lIGJvb2wgbXJfY2FuX2ZyZWVfdGFibGUoc3RydWN0IG5ldCAqbmV0KQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtcl9iYXNlLmMgYi9uZXQvaXB2NC9pcG1yX2Jhc2UuYwppbmRleCA4NjdiMjRiZWRlZDExMi4uOTcxMDc4OWNmYWY5OTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXJfYmFzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jCkBAIC0zMiw4ICYjNDM7MzIsMTAgQEAgc3RhdGljIHZvaWQgX19tcl9mcmVlX3RhYmxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwKIAkJCQkJICAgIHN0cnVjdCBtcl90YWJsZSwgd29yayk7CiYjNDM7CXN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldCgmYW1wO21ydC0mZ3Q7bmV0KTsKIAogCXJobHRhYmxlX2Rlc3Ryb3koJmFtcDttcnQtJmd0O21mY19oYXNoKTsKJiM0MzsJcHV0X25ldChuZXQpOwogCWtmcmVlKG1ydCk7CiB9CiAKQEAgLTU2LDExICYjNDM7NTgsMTIgQEAgbXJfdGFibGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQsCiAJaWYgKCFtcnQpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCW1ydC0mZ3Q7aWQgPSBpZDsKLQl3cml0ZV9wbmV0KCZhbXA7bXJ0LSZndDtuZXQsIG5ldCk7CiYjNDM7CXdyaXRlX3BuZXQoJmFtcDttcnQtJmd0O25ldCwgZ2V0X25ldChuZXQpKTsKIAogCW1ydC0mZ3Q7b3BzID0gKm9wczsKIAllcnIgPSByaGx0YWJsZV9pbml0KCZhbXA7bXJ0LSZndDttZmNfaGFzaCwgbXJ0LSZndDtvcHMucmh0X3BhcmFtcyk7CiAJaWYgKGVycikgewomIzQzOwkJcHV0X25ldChyZWFkX3BuZXQoJmFtcDttcnQtJmd0O25ldCkpOwogCQlrZnJlZShtcnQpOwogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCX0KQEAgLTcyLDYgJiM0Mzs3NSw3IEBAIG1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLAogCXRpbWVyX3NldHVwKCZhbXA7bXJ0LSZndDtpcG1yX2V4cGlyZV90aW1lciwgZXhwaXJlX2Z1bmMsIDApOwogCiAJbXJ0LSZndDttcm91dGVfcmVnX3ZpZl9udW0gPSAtMTsKJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7bXJ0LSZndDtyZWZjbnQsIDEpOwogCXRhYmxlX3NldChtcnQsIG5ldCk7CiAJcmV0dXJuIG1ydDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jCmluZGV4IDYwNGE1ODgzODkwMWE3Li45NGJiMDBiZGZmOThjOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2bXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZtci5jCkBAIC04Nyw2ICYjNDM7ODcsMTEgQEAgc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptcnRfY2FjaGVwIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpOwogc3RhdGljIHZvaWQgaXA2bXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCwKIAkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqZGV2X2tpbGxfbGlzdCk7CiYjNDM7c3RhdGljIHZvaWQgaXA2bXJfZnJlZV90YWJsZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiYjNDM7c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfZ2V0X3RhYmxlX2hvbGQoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpOwomIzQzO3N0YXRpYyB2b2lkIGlwNm1yX3B1dF90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCk7CiYjNDM7c3RhdGljIHZvaWQgX19pcDZtcl9wdXRfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQsCiYjNDM7CQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZGV2X2tpbGxfbGlzdCk7CiAKIHN0YXRpYyB2b2lkIGlwNl9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsCiAJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTc5LDcgJiM0MzsxODQsNyBAQCBzdGF0aWMgaW50IGlwNm1yX3J1bGVfYWN0aW9uKHN0cnVjdCBmaWJfcnVsZSAqcnVsZSwgc3RydWN0IGZsb3dpICpmbHAsCiAKIAlhcmctJmd0O3RhYmxlID0gZmliX3J1bGVfZ2V0X3RhYmxlKHJ1bGUsIGFyZyk7CiAKLQltcnQgPSBfX2lwNm1yX2dldF90YWJsZShydWxlLSZndDtmcl9uZXQsIGFyZy0mZ3Q7dGFibGUpOwomIzQzOwltcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChydWxlLSZndDtmcl9uZXQsIGFyZy0mZ3Q7dGFibGUpOwogCWlmICghbXJ0KQogCQlyZXR1cm4gLUVBR0FJTjsKIAlyZXMtJmd0O21ydCA9IG1ydDsKQEAgLTI3MSw3ICYjNDM7Mjc2LDggQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZtcl9ydWxlc19leGl0X3J0bmwoc3RydWN0IG5ldCAqbmV0LAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1ydCwgbmV4dCwgJmFtcDtuZXQtJmd0O2lwdjYubXI2X3RhYmxlcywgbGlzdCkgewogCQlsaXN0X2RlbF9yY3UoJmFtcDttcnQtJmd0O2xpc3QpOwotCQlpcDZtcl9mcmVlX3RhYmxlKG1ydCwgZGV2X2tpbGxfbGlzdCk7CiYjNDM7CQlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0MzsJCV9faXA2bXJfcHV0X3RhYmxlKG1ydCwgZGV2X2tpbGxfbGlzdCk7CiAJfQogfQogCkBAIC0zMTQsNyAmIzQzOzMyMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKl9faXA2bXJfZ2V0X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKQogc3RhdGljIGludCBpcDZtcl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNiAqZmxwNiwKIAkJCSAgICBzdHJ1Y3QgbXJfdGFibGUgKiptcnQpCiB7Ci0JKm1ydCA9IHJjdV9kZXJlZmVyZW5jZShuZXQtJmd0O2lwdjYubXJ0Nik7CiYjNDM7CSptcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChuZXQsIFJUNl9UQUJMRV9ERkxUKTsKIAlpZiAoISptcnQpCiAJCXJldHVybiAtRUFHQUlOOwogCXJldHVybiAwOwpAQCAtMzQyLDcgJiM0MzszNDgsOCBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwNm1yX3J1bGVzX2V4aXRfcnRubChzdHJ1Y3QgbmV0ICpuZXQsCiAJc3RydWN0IG1yX3RhYmxlICptcnQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG5ldC0mZ3Q7aXB2Ni5tcnQ2LCAxKTsKIAogCVJDVV9JTklUX1BPSU5URVIobmV0LSZndDtpcHY2Lm1ydDYsIE5VTEwpOwotCWlwNm1yX2ZyZWVfdGFibGUobXJ0LCBkZXZfa2lsbF9saXN0KTsKJiM0MzsJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CV9faXA2bXJfcHV0X3RhYmxlKG1ydCwgZGV2X2tpbGxfbGlzdCk7CiB9CiAKIHN0YXRpYyBpbnQgaXA2bXJfcnVsZXNfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCkBAIC0zNjgsNiAmIzQzOzM3NSw0NCBAQCBzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9nZXRfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpCiAJcmV0dXJuIG1ydDsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwNm1yX2dldF90YWJsZV9ob2xkKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKQomIzQzO3sKJiM0MzsJc3RydWN0IG1yX3RhYmxlICptcnQ7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJbXJ0ID0gX19pcDZtcl9nZXRfdGFibGUobmV0LCBpZCk7CiYjNDM7CWlmIChtcnQgJmFtcDsmYW1wOyAhcmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7bXJ0LSZndDtyZWZjbnQpKQomIzQzOwkJbXJ0ID0gTlVMTDsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiBtcnQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9faXA2bXJfcHV0X3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LAomIzQzOwkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkICpkZXZfa2lsbF9saXN0OwomIzQzOwlMSVNUX0hFQUQobG9jYWxfZGV2X2tpbGxfbGlzdCk7CiYjNDM7CiYjNDM7CWlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7bXJ0LSZndDtyZWZjbnQpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoIWxvY2tkZXBfcnRubF9pc19oZWxkKCkpIHsKJiM0MzsJCXNjaGVkdWxlX3dvcmsoJmFtcDttcnQtJmd0O2Rlc3Ryb3lfd29yayk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGV2X2tpbGxfbGlzdCA9IGhlYWQgPyBoZWFkIDogJmFtcDtsb2NhbF9kZXZfa2lsbF9saXN0OwomIzQzOwlpcDZtcl9mcmVlX3RhYmxlKG1ydCwgZGV2X2tpbGxfbGlzdCk7CiYjNDM7CWlmICghaGVhZCkKJiM0MzsJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoZGV2X2tpbGxfbGlzdCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlwNm1yX3B1dF90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCkKJiM0Mzt7CiYjNDM7CV9faXA2bXJfcHV0X3RhYmxlKG1ydCwgTlVMTCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBpcDZtcl9oYXNoX2NtcChzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyAqYXJnLAogCQkJICBjb25zdCB2b2lkICpwdHIpCiB7CkBAIC00MTMsOCAmIzQzOzQ1OCwxMiBAQCBzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpCiAJaWYgKG1ydCkKIAkJcmV0dXJuIG1ydDsKIAotCXJldHVybiBtcl90YWJsZV9hbGxvYyhuZXQsIGlkLCAmYW1wO2lwNm1yX21yX3RhYmxlX29wcywKLQkJCSAgICAgIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIGlwNm1yX25ld190YWJsZV9zZXQpOwomIzQzOwltcnQgPSBtcl90YWJsZV9hbGxvYyhuZXQsIGlkLCAmYW1wO2lwNm1yX21yX3RhYmxlX29wcywKJiM0MzsJCQkgICAgIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIGlwNm1yX25ld190YWJsZV9zZXQpOwomIzQzOwlpZiAoIUlTX0VSUihtcnQpKQomIzQzOwkJSU5JVF9XT1JLKCZhbXA7bXJ0LSZndDtkZXN0cm95X3dvcmssIGlwNm1yX2ZyZWVfdGFibGVfd29yayk7CiYjNDM7CiYjNDM7CXJldHVybiBtcnQ7CiB9CiAKIHN0YXRpYyB2b2lkIGlwNm1yX2ZyZWVfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQsCkBAIC00MjMsOCAmIzQzOzQ3Miw2IEBAIHN0YXRpYyB2b2lkIGlwNm1yX2ZyZWVfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQsCiAJc3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KCZhbXA7bXJ0LSZndDtuZXQpOwogCUxJU1RfSEVBRChpcDZtcl9kZXZfa2lsbF9saXN0KTsKIAotCVdBUk5fT05fT05DRSghbXJfY2FuX2ZyZWVfdGFibGUobmV0KSk7Ci0KIAl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7bXJ0LSZndDtpcG1yX2V4cGlyZV90aW1lcik7CiAJbXJvdXRlX2NsZWFuX3RhYmxlcyhtcnQsIE1SVDZfRkxVU0hfTUlGUyB8IE1SVDZfRkxVU0hfTUlGU19TVEFUSUMgfAogCQkJICAgIE1SVDZfRkxVU0hfTUZDIHwgTVJUNl9GTFVTSF9NRkNfU1RBVElDLApAQCAtNDM2LDYgJiM0Mzs0ODMsMTcgQEAgc3RhdGljIHZvaWQgaXA2bXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCwKIAlsaXN0X3NwbGljZSgmYW1wO2lwNm1yX2Rldl9raWxsX2xpc3QsIGRldl9raWxsX2xpc3QpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgaXA2bXJfZnJlZV90YWJsZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcl90YWJsZSAqbXJ0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtcl90YWJsZSwgZGVzdHJveV93b3JrKTsKJiM0MzsJTElTVF9IRUFEKGRldl9raWxsX2xpc3QpOwomIzQzOwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJaXA2bXJfZnJlZV90YWJsZShtcnQsICZhbXA7ZGV2X2tpbGxfbGlzdCk7CiYjNDM7CXVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoJmFtcDtkZXZfa2lsbF9saXN0KTsKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0Mzt9CiYjNDM7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIC8qIFRoZSAvcHJvYyBpbnRlcmZhY2VzIHRvIG11bHRpY2FzdCByb3V0aW5nCiAgKiAvcHJvYy9pcDZfbXJfY2FjaGUgL3Byb2MvaXA2X21yX3ZpZgpAQCAtNTY5LDcgJiM0Mzs2MjcsNyBAQCBzdGF0aWMgaW50IHBpbTZfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAJc3RydWN0IGlwdjZoZHIgICAqZW5jYXA7CiAJc3RydWN0IG5ldF9kZXZpY2UgICpyZWdfZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0mZ3Q7ZGV2KTsKLQlzdHJ1Y3QgbXJfdGFibGUgKm1ydDsKJiM0MzsJc3RydWN0IG1yX3RhYmxlICptcnQgPSBOVUxMOwogCXN0cnVjdCBmbG93aTYgZmw2ID0gewogCQkuZmxvd2k2X2lpZgk9IHNrYi0mZ3Q7ZGV2LSZndDtpZmluZGV4LAogCQkuZmxvd2k2X21hcmsJPSBza2ItJmd0O21hcmssCkBAIC02MTcsOSAmIzQzOzY3NSwxMiBAQCBzdGF0aWMgaW50IHBpbTZfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAJc2tiX3R1bm5lbF9yeChza2IsIHJlZ19kZXYsIGRldl9uZXQocmVnX2RldikpOwogCiAJbmV0aWZfcngoc2tiKTsKJiM0MzsJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAKIAlyZXR1cm4gMDsKICBkcm9wOgomIzQzOwlpZiAobXJ0KQomIzQzOwkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CiB9CkBAIC02MzQsNyAmIzQzOzY5NSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKLQlzdHJ1Y3QgbXJfdGFibGUgKm1ydDsKJiM0MzsJc3RydWN0IG1yX3RhYmxlICptcnQgPSBOVUxMOwogCXN0cnVjdCBmbG93aTYgZmw2ID0gewogCQkuZmxvd2k2X29pZgk9IGRldi0mZ3Q7aWZpbmRleCwKIAkJLmZsb3dpNl9paWYJPSBza2ItJmd0O3NrYl9paWYgPyA6IExPT1BCQUNLX0lGSU5ERVgsCkBAIC02NTUsMTIgJiM0Mzs3MTYsMTUgQEAgc3RhdGljIG5ldGRldl90eF90IHJlZ192aWZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlwNm1yX2NhY2hlX3JlcG9ydChtcnQsIHNrYiwgUkVBRF9PTkNFKG1ydC0mZ3Q7bXJvdXRlX3JlZ192aWZfbnVtKSwKIAkJCSAgIE1SVDZNU0dfV0hPTEVQS1QpOwogCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlpcDZtcl9wdXRfdGFibGUobXJ0KTsKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogCiB0eF9sb29rdXBfZXJyOgogCXJjdV9yZWFkX3VubG9jaygpOwogdHhfZXJyOgomIzQzOwlpZiAobXJ0KQomIzQzOwkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAJREVWX1NUQVRTX0lOQyhkZXYsIHR4X2Vycm9ycyk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKQEAgLTE2MTUsMTIgJiM0MzsxNjc5LDEzIEBAIHN0YXRpYyB2b2lkIG1yb3V0ZV9jbGVhbl90YWJsZXMoc3RydWN0IG1yX3RhYmxlICptcnQsIGludCBmbGFncywKIAl9CiB9CiAKLXN0YXRpYyBpbnQgaXA2bXJfc2tfaW5pdChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IHNvY2sgKnNrKQomIzQzO3N0YXRpYyBpbnQgX19pcDZtcl9za19pbml0KHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJaW50IGVyciA9IDA7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCi0JcnRubF9sb2NrKCk7CiYjNDM7CUFTU0VSVF9SVE5MKCk7CiYjNDM7CiAJc3Bpbl9sb2NrKCZhbXA7bXJ0X2xvY2spOwogCWlmIChydG5sX2RlcmVmZXJlbmNlKG1ydC0mZ3Q7bXJvdXRlX3NrKSkgewogCQllcnIgPSAtRUFERFJJTlVTRTsKQEAgLTE2MjgsNiAmIzQzOzE2OTMsNyBAQCBzdGF0aWMgaW50IGlwNm1yX3NrX2luaXQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBzb2NrICpzaykKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKG1ydC0mZ3Q7bXJvdXRlX3NrLCBzayk7CiAJCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfUkNVX0ZSRUUpOwogCQlhdG9taWNfaW5jKCZhbXA7bmV0LSZndDtpcHY2LmRldmNvbmZfYWxsLSZndDttY19mb3J3YXJkaW5nKTsKJiM0MzsJCXJlZmNvdW50X2luYygmYW1wO21ydC0mZ3Q7cmVmY250KTsKIAl9CiAJc3Bpbl91bmxvY2soJmFtcDttcnRfbG9jayk7CiAKQEAgLTE2MzYsNyAmIzQzOzE3MDIsNiBAQCBzdGF0aWMgaW50IGlwNm1yX3NrX2luaXQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBzb2NrICpzaykKIAkJCQkJICAgICBORVRDT05GQV9NQ19GT1JXQVJESU5HLAogCQkJCQkgICAgIE5FVENPTkZBX0lGSU5ERVhfQUxMLAogCQkJCQkgICAgIG5ldC0mZ3Q7aXB2Ni5kZXZjb25mX2FsbCk7Ci0JcnRubF91bmxvY2soKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0xNjQ2LDYgJiM0MzsxNzExLDcgQEAgaW50IGlwNm1yX3NrX2RvbmUoc3RydWN0IHNvY2sgKnNrKQogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAlzdHJ1Y3QgaXB2Nl9kZXZjb25mICpkZXZjb25mOwogCUxJU1RfSEVBRChkZXZfa2lsbF9saXN0KTsKJiM0MzsJc3RydWN0IG1yX3RhYmxlICpmcmVlX21ydCA9IE5VTEw7CiAJc3RydWN0IG1yX3RhYmxlICptcnQ7CiAJaW50IGVyciA9IC1FQUNDRVM7CiAKQEAgLTE2NzUsNiAmIzQzOzE3NDEsMTUgQEAgaW50IGlwNm1yX3NrX2RvbmUoc3RydWN0IHNvY2sgKnNrKQogCiAJCQltcm91dGVfY2xlYW5fdGFibGVzKG1ydCwgTVJUNl9GTFVTSF9NSUZTIHwgTVJUNl9GTFVTSF9NRkMsCiAJCQkJCSAgICAmYW1wO2Rldl9raWxsX2xpc3QpOwomIzQzOwkJCWlmIChtcnQtJmd0O2lkICE9IFJUNl9UQUJMRV9ERkxUICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgIVJFQURfT05DRShtcnQtJmd0O21heHZpZikgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAhUkVBRF9PTkNFKG1ydC0mZ3Q7Y2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgbGlzdF9lbXB0eSgmYW1wO21ydC0mZ3Q7bWZjX2NhY2hlX2xpc3QpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgbGlzdF9lbXB0eSgmYW1wO21ydC0mZ3Q7bWZjX3VucmVzX3F1ZXVlKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIFJFQURfT05DRShtcnQtJmd0O21yb3V0ZV9yZWdfdmlmX251bSkgJmx0OyAwKSB7CiYjNDM7CQkJCWxpc3RfZGVsX3JjdSgmYW1wO21ydC0mZ3Q7bGlzdCk7CiYjNDM7CQkJCWZyZWVfbXJ0ID0gbXJ0OwomIzQzOwkJCX0KIAkJCWVyciA9IDA7CiAJCQlicmVhazsKIAkJfQpAQCAtMTY4Miw2ICYjNDM7MTc1NywxNCBAQCBpbnQgaXA2bXJfc2tfZG9uZShzdHJ1Y3Qgc29jayAqc2spCiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueSgmYW1wO2Rldl9raWxsX2xpc3QpOwogCXJ0bmxfdW5sb2NrKCk7CiAKJiM0MzsJaWYgKCFlcnIpCiYjNDM7CQlpcDZtcl9wdXRfdGFibGUobXJ0KTsKJiM0MzsKJiM0MzsJaWYgKGZyZWVfbXJ0KSB7CiYjNDM7CQlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0MzsJCWlwNm1yX3B1dF90YWJsZShmcmVlX21ydCk7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNjkzLDExICYjNDM7MTc3NiwxNSBAQCBib29sIG1yb3V0ZTZfaXNfc29ja2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJLmZsb3dpNl9vaWYJPSBza2ItJmd0O2Rldi0mZ3Q7aWZpbmRleCwKIAkJLmZsb3dpNl9tYXJrCT0gc2tiLSZndDttYXJrLAogCX07CiYjNDM7CWJvb2wgcmV0OwogCiAJaWYgKGlwNm1yX2ZpYl9sb29rdXAobmV0LCAmYW1wO2ZsNiwgJmFtcDttcnQpICZsdDsgMCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gcmN1X2FjY2Vzc19wb2ludGVyKG1ydC0mZ3Q7bXJvdXRlX3NrKTsKJiM0MzsJcmV0ID0gcmN1X2FjY2Vzc19wb2ludGVyKG1ydC0mZ3Q7bXJvdXRlX3NrKTsKJiM0MzsJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKG1yb3V0ZTZfaXNfc29ja2V0KTsKIApAQCAtMTcxNiwyMCAmIzQzOzE4MDMsMjQgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAogCXN0cnVjdCBtZjZjY3RsIG1mYzsKIAltaWZpX3QgbWlmaTsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7Ci0Jc3RydWN0IG1yX3RhYmxlICptcnQ7CiYjNDM7CXN0cnVjdCBtcl90YWJsZSAqbXJ0ID0gTlVMTDsKJiM0MzsJdTMyIHRhYmxlID0gcmF3Nl9zayhzayktJmd0O2lwNm1yX3RhYmxlID8gOiBSVDZfVEFCTEVfREZMVDsKIAogCWlmIChzay0mZ3Q7c2tfdHlwZSAhPSBTT0NLX1JBVyB8fAogCSAgICBpbmV0X3NrKHNrKS0mZ3Q7aW5ldF9udW0gIT0gSVBQUk9UT19JQ01QVjYpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCW1ydCA9IGlwNm1yX2dldF90YWJsZShuZXQsIHJhdzZfc2soc2spLSZndDtpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpOwotCWlmICghbXJ0KQotCQlyZXR1cm4gLUVOT0VOVDsKLQotCWlmIChvcHRuYW1lICE9IE1SVDZfSU5JVCkgewomIzQzOwlpZiAob3B0bmFtZSAhPSBNUlQ2X0lOSVQgJmFtcDsmYW1wOwomIzQzOwkgICAgb3B0bmFtZSAhPSBNUlQ2X1RBQkxFICZhbXA7JmFtcDsKJiM0MzsJICAgIG9wdG5hbWUgIT0gTVJUNl9ET05FKSB7CiYjNDM7CQltcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChuZXQsIHRhYmxlKTsKJiM0MzsJCWlmICghbXJ0KQomIzQzOwkJCXJldHVybiAtRU5PRU5UOwogCQlpZiAoc2sgIT0gcmN1X2FjY2Vzc19wb2ludGVyKG1ydC0mZ3Q7bXJvdXRlX3NrKSAmYW1wOyZhbXA7Ci0JCSAgICAhbnNfY2FwYWJsZShuZXQtJmd0O3VzZXJfbnMsIENBUF9ORVRfQURNSU4pKQomIzQzOwkJICAgICFuc19jYXBhYmxlKG5ldC0mZ3Q7dXNlcl9ucywgQ0FQX05FVF9BRE1JTikpIHsKJiM0MzsJCQlpcDZtcl9wdXRfdGFibGUobXJ0KTsKIAkJCXJldHVybiAtRUFDQ0VTOwomIzQzOwkJfQogCX0KIAogCXN3aXRjaCAob3B0bmFtZSkgewpAQCAtMTczNywzMiAmIzQzOzE4MjgsNDEgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAogCQlpZiAob3B0bGVuICZsdDsgc2l6ZW9mKGludCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlyZXR1cm4gaXA2bXJfc2tfaW5pdChtcnQsIHNrKTsKJiM0MzsJCXJ0bmxfbG9jaygpOwomIzQzOwkJbXJ0ID0gaXA2bXJfbmV3X3RhYmxlKG5ldCwgdGFibGUpOwomIzQzOwkJaWYgKCFJU19FUlIobXJ0KSkKJiM0MzsJCQlyZXQgPSBfX2lwNm1yX3NrX2luaXQobXJ0LCBzayk7CiYjNDM7CQllbHNlCiYjNDM7CQkJcmV0ID0gUFRSX0VSUihtcnQpOwomIzQzOwkJcnRubF91bmxvY2soKTsKJiM0MzsJCXJldHVybiByZXQ7CiAKIAljYXNlIE1SVDZfRE9ORToKIAkJcmV0dXJuIGlwNm1yX3NrX2RvbmUoc2spOwogCiAJY2FzZSBNUlQ2X0FERF9NSUY6CiAJCWlmIChvcHRsZW4gJmx0OyBzaXplb2YodmlmKSkKLQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCWdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7CiAJCWlmIChjb3B5X2Zyb21fc29ja3B0cigmYW1wO3ZpZiwgb3B0dmFsLCBzaXplb2YodmlmKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCQlnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0OwogCQlpZiAodmlmLm1pZjZjX21pZmkgJmd0Oz0gTUFYTUlGUykKLQkJCXJldHVybiAtRU5GSUxFOwomIzQzOwkJCWdvdG8gb3V0X3B1dF90YWJsZV9lbmZpbGU7CiAJCXJ0bmxfbG9jaygpOwogCQlyZXQgPSBtaWY2X2FkZChuZXQsIG1ydCwgJmFtcDt2aWYsCiAJCQkgICAgICAgc2sgPT0gcnRubF9kZXJlZmVyZW5jZShtcnQtJmd0O21yb3V0ZV9zaykpOwogCQlydG5sX3VubG9jaygpOwomIzQzOwkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAJCXJldHVybiByZXQ7CiAKIAljYXNlIE1SVDZfREVMX01JRjoKIAkJaWYgKG9wdGxlbiAmbHQ7IHNpemVvZihtaWZpX3QpKQotCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJZ290byBvdXRfcHV0X3RhYmxlX2VpbnZhbDsKIAkJaWYgKGNvcHlfZnJvbV9zb2NrcHRyKCZhbXA7bWlmaSwgb3B0dmFsLCBzaXplb2YobWlmaV90KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCQlnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0OwogCQlydG5sX2xvY2soKTsKIAkJcmV0ID0gbWlmNl9kZWxldGUobXJ0LCBtaWZpLCAwLCBOVUxMKTsKIAkJcnRubF91bmxvY2soKTsKJiM0MzsJCWlwNm1yX3B1dF90YWJsZShtcnQpOwogCQlyZXR1cm4gcmV0OwogCiAJLyoKQEAgLTE3NzYsOSAmIzQzOzE4NzYsOSBAQCBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsCiAJY2FzZSBNUlQ2X0FERF9NRkNfUFJPWFk6CiAJY2FzZSBNUlQ2X0RFTF9NRkNfUFJPWFk6CiAJCWlmIChvcHRsZW4gJmx0OyBzaXplb2YobWZjKSkKLQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCWdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7CiAJCWlmIChjb3B5X2Zyb21fc29ja3B0cigmYW1wO21mYywgb3B0dmFsLCBzaXplb2YobWZjKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCQlnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0OwogCQlpZiAocGFyZW50ID09IDApCiAJCQlwYXJlbnQgPSBtZmMubWY2Y2NfcGFyZW50OwogCkBAIC0xNzkzLDYgJiM0MzsxODkzLDcgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAogCQkJCQkgICAgcGFyZW50KTsKIAogCQltdXRleF91bmxvY2soJmFtcDtuZXQtJmd0O2lwdjYubWZjX211dGV4KTsKJiM0MzsJCWlwNm1yX3B1dF90YWJsZShtcnQpOwogCQlyZXR1cm4gcmV0OwogCiAJY2FzZSBNUlQ2X0ZMVVNIOgpAQCAtMTgwMSwxNCAmIzQzOzE5MDIsMTUgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAogCQlpbnQgZmxhZ3M7CiAKIAkJaWYgKG9wdGxlbiAhPSBzaXplb2YoZmxhZ3MpKQotCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJZ290byBvdXRfcHV0X3RhYmxlX2VpbnZhbDsKIAkJaWYgKGNvcHlfZnJvbV9zb2NrcHRyKCZhbXA7ZmxhZ3MsIG9wdHZhbCwgc2l6ZW9mKGZsYWdzKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCQlnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0OwogCiAJCXJ0bmxfbG9jaygpOwogCQltcm91dGVfY2xlYW5fdGFibGVzKG1ydCwgZmxhZ3MsICZhbXA7ZGV2X2tpbGxfbGlzdCk7CiAJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoJmFtcDtkZXZfa2lsbF9saXN0KTsKIAkJcnRubF91bmxvY2soKTsKJiM0MzsJCWlwNm1yX3B1dF90YWJsZShtcnQpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE4MjAsMTAgJiM0MzsxOTIyLDExIEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwKIAkJaW50IHY7CiAKIAkJaWYgKG9wdGxlbiAhPSBzaXplb2YodikpCi0JCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQlnb3RvIG91dF9wdXRfdGFibGVfZWludmFsOwogCQlpZiAoY29weV9mcm9tX3NvY2twdHIoJmFtcDt2LCBvcHR2YWwsIHNpemVvZih2KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCQlnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0OwogCQlXUklURV9PTkNFKG1ydC0mZ3Q7bXJvdXRlX2RvX2Fzc2VydCwgdik7CiYjNDM7CQlpcDZtcl9wdXRfdGFibGUobXJ0KTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xODM0LDkgJiM0MzsxOTM3LDkgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAogCQlpbnQgdjsKIAogCQlpZiAob3B0bGVuICE9IHNpemVvZih2KSkKLQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCWdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7CiAJCWlmIChjb3B5X2Zyb21fc29ja3B0cigmYW1wO3YsIG9wdHZhbCwgc2l6ZW9mKHYpKSkKLQkJCXJldHVybiAtRUZBVUxUOwomIzQzOwkJCWdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7CiAKIAkJZG9fd3JtaWZ3aG9sZSA9ICh2ID09IE1SVDZNU0dfV1JNSUZXSE9MRSk7CiAJCXYgPSAhIXY7CkBAIC0xODQ4LDYgJiM0MzsxOTUxLDcgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAogCQkJV1JJVEVfT05DRShtcnQtJmd0O21yb3V0ZV9kb193cnZpZndob2xlLCBkb193cm1pZndob2xlKTsKIAkJfQogCQlydG5sX3VubG9jaygpOwomIzQzOwkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0xODY0LDE4ICYjNDM7MTk2OCwyMiBAQCBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsCiAJCS8qICYjMzQ7cGltNnJlZyV1JiMzNDsgc2hvdWxkIG5vdCBleGNlZWQgMTYgYnl0ZXMgKElGTkFNU0laKSAqLwogCQlpZiAodiAhPSBSVF9UQUJMRV9ERUZBVUxUICZhbXA7JmFtcDsgdiAmZ3Q7PSAxMDAwMDAwMDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKHNrID09IHJjdV9hY2Nlc3NfcG9pbnRlcihtcnQtJmd0O21yb3V0ZV9zaykpCiYjNDM7CiYjNDM7CQltcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChuZXQsIHRhYmxlKTsKJiM0MzsJCWlmIChtcnQgJmFtcDsmYW1wOyBzayA9PSByY3VfYWNjZXNzX3BvaW50ZXIobXJ0LSZndDttcm91dGVfc2spKSB7CiYjNDM7CQkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAJCQlyZXR1cm4gLUVCVVNZOwomIzQzOwkJfQomIzQzOwkJaWYgKCFuc19jYXBhYmxlKG5ldC0mZ3Q7dXNlcl9ucywgQ0FQX05FVF9BRE1JTikpIHsKJiM0MzsJCQlpZiAobXJ0KQomIzQzOwkJCQlpcDZtcl9wdXRfdGFibGUobXJ0KTsKJiM0MzsJCQlyZXR1cm4gLUVBQ0NFUzsKJiM0MzsJCX0KJiM0MzsJCWlmIChtcnQpCiYjNDM7CQkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAKLQkJcnRubF9sb2NrKCk7Ci0JCXJldCA9IDA7Ci0JCW1ydCA9IGlwNm1yX25ld190YWJsZShuZXQsIHYpOwotCQlpZiAoSVNfRVJSKG1ydCkpCi0JCQlyZXQgPSBQVFJfRVJSKG1ydCk7Ci0JCWVsc2UKLQkJCXJhdzZfc2soc2spLSZndDtpcDZtcl90YWJsZSA9IHY7Ci0JCXJ0bmxfdW5sb2NrKCk7Ci0JCXJldHVybiByZXQ7CiYjNDM7CQlyYXc2X3NrKHNrKS0mZ3Q7aXA2bXJfdGFibGUgPSB2OwomIzQzOwkJcmV0dXJuIDA7CiAJfQogI2VuZGlmCiAJLyoKQEAgLTE4ODMsOCAmIzQzOzE5OTEsMjUgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAogCSAqCXNldC4KIAkgKi8KIAlkZWZhdWx0OgomIzQzOwkJaWYgKG1ydCkKJiM0MzsJCQlpcDZtcl9wdXRfdGFibGUobXJ0KTsKIAkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAl9CiYjNDM7CiYjNDM7b3V0X3B1dF90YWJsZV9lZmF1bHQ6CiYjNDM7CWlmIChtcnQpCiYjNDM7CQlpcDZtcl9wdXRfdGFibGUobXJ0KTsKJiM0MzsJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7b3V0X3B1dF90YWJsZV9laW52YWw6CiYjNDM7CWlmIChtcnQpCiYjNDM7CQlpcDZtcl9wdXRfdGFibGUobXJ0KTsKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7b3V0X3B1dF90YWJsZV9lbmZpbGU6CiYjNDM7CWlmIChtcnQpCiYjNDM7CQlpcDZtcl9wdXRfdGFibGUobXJ0KTsKJiM0MzsJcmV0dXJuIC1FTkZJTEU7CiB9CiAKIC8qCkBAIC0xODk1LDYgJiM0MzsyMDIwLDcgQEAgaW50IGlwNl9tcm91dGVfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAogCQkJICBzb2NrcHRyX3Qgb3B0bGVuKQogewogCWludCBvbHI7CiYjNDM7CWludCByZXQgPSAwOwogCWludCB2YWw7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCXN0cnVjdCBtcl90YWJsZSAqbXJ0OwpAQCAtMTkwMyw3ICYjNDM7MjAyOSw3IEBAIGludCBpcDZfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwKIAkgICAgaW5ldF9zayhzayktJmd0O2luZXRfbnVtICE9IElQUFJPVE9fSUNNUFY2KQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQltcnQgPSBpcDZtcl9nZXRfdGFibGUobmV0LCByYXc2X3NrKHNrKS0mZ3Q7aXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTsKJiM0MzsJbXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQobmV0LCByYXc2X3NrKHNrKS0mZ3Q7aXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTsKIAlpZiAoIW1ydCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKQEAgLTE5MjAsMjYgJiM0MzsyMDQ2LDMzIEBAIGludCBpcDZfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwKIAkJdmFsID0gUkVBRF9PTkNFKG1ydC0mZ3Q7bXJvdXRlX2RvX2Fzc2VydCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PUFJPVE9PUFQ7CiYjNDM7CQlyZXQgPSAtRU5PUFJPVE9PUFQ7CiYjNDM7CQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoY29weV9mcm9tX3NvY2twdHIoJmFtcDtvbHIsIG9wdGxlbiwgc2l6ZW9mKGludCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJaWYgKGNvcHlfZnJvbV9zb2NrcHRyKCZhbXA7b2xyLCBvcHRsZW4sIHNpemVvZihpbnQpKSkgewomIzQzOwkJcmV0ID0gLUVGQVVMVDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiAKIAlvbHIgPSBtaW5fdChpbnQsIG9sciwgc2l6ZW9mKGludCkpOwotCWlmIChvbHIgJmx0OyAwKQotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKG9sciAmbHQ7IDApIHsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQogCi0JaWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sICZhbXA7b2xyLCBzaXplb2YoaW50KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChjb3B5X3RvX3NvY2twdHIob3B0dmFsLCAmYW1wO3ZhbCwgb2xyKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7CiYjNDM7CWlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCAmYW1wO29sciwgc2l6ZW9mKGludCkpIHx8CiYjNDM7CSAgICBjb3B5X3RvX3NvY2twdHIob3B0dmFsLCAmYW1wO3ZhbCwgb2xyKSkKJiM0MzsJCXJldCA9IC1FRkFVTFQ7CiYjNDM7b3V0OgomIzQzOwlpcDZtcl9wdXRfdGFibGUobXJ0KTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogLyoKICAqCVRoZSBJUCBtdWx0aWNhc3QgaW9jdGwgc3VwcG9ydCByb3V0aW5lcy4KICAqLwomIzQzOwogaW50IGlwNm1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBzaW9jX3NnX3JlcTYgKnNyOwpAQCAtMTk0OSw3ICYjNDM7MjA4Miw3IEBAIGludCBpcDZtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgKmFyZykKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAJc3RydWN0IG1yX3RhYmxlICptcnQ7CiAKLQltcnQgPSBpcDZtcl9nZXRfdGFibGUobmV0LCByYXc2X3NrKHNrKS0mZ3Q7aXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTsKJiM0MzsJbXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQobmV0LCByYXc2X3NrKHNrKS0mZ3Q7aXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTsKIAlpZiAoIW1ydCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKQEAgLTE5NTcsNyAmIzQzOzIwOTAsNyBAQCBpbnQgaXA2bXJfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkICphcmcpCiAJY2FzZSBTSU9DR0VUTUlGQ05UX0lONjoKIAkJdnIgPSAoc3RydWN0IHNpb2NfbWlmX3JlcTYgKilhcmc7CiAJCWlmICh2ci0mZ3Q7bWlmaSAmZ3Q7PSBtcnQtJmd0O21heHZpZikKLQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCWdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7CiAJCXZyLSZndDttaWZpID0gYXJyYXlfaW5kZXhfbm9zcGVjKHZyLSZndDttaWZpLCBtcnQtJmd0O21heHZpZik7CiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJdmlmID0gJmFtcDttcnQtJmd0O3ZpZl90YWJsZVt2ci0mZ3Q7bWlmaV07CkBAIC0xOTY3LDkgJiM0MzsyMTAwLDExIEBAIGludCBpcDZtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgKmFyZykKIAkJCXZyLSZndDtpYnl0ZXMgPSBSRUFEX09OQ0UodmlmLSZndDtieXRlc19pbik7CiAJCQl2ci0mZ3Q7b2J5dGVzID0gUkVBRF9PTkNFKHZpZi0mZ3Q7Ynl0ZXNfb3V0KTsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJCWlwNm1yX3B1dF90YWJsZShtcnQpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlpcDZtcl9wdXRfdGFibGUobXJ0KTsKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCWNhc2UgU0lPQ0dFVFNHQ05UX0lONjoKIAkJc3IgPSAoc3RydWN0IHNpb2Nfc2dfcmVxNiAqKWFyZzsKQEAgLTE5ODIsMTUgJiM0MzsyMTE3LDIxIEBAIGludCBpcDZtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgKmFyZykKIAkJCXNyLSZndDtieXRlY250ID0gYXRvbWljX2xvbmdfcmVhZCgmYW1wO2MtJmd0O19jLm1mY191bi5yZXMuYnl0ZXMpOwogCQkJc3ItJmd0O3dyb25nX2lmID0gYXRvbWljX2xvbmdfcmVhZCgmYW1wO2MtJmd0O19jLm1mY191bi5yZXMud3JvbmdfaWYpOwogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCWlwNm1yX3B1dF90YWJsZShtcnQpOwogCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAJZGVmYXVsdDoKJiM0MzsJCWlwNm1yX3B1dF90YWJsZShtcnQpOwogCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogCX0KLX0KIAomIzQzO291dF9wdXRfdGFibGVfZWludmFsOgomIzQzOwlpcDZtcl9wdXRfdGFibGUobXJ0KTsKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQogI2lmZGVmIENPTkZJR19DT01QQVQKIHN0cnVjdCBjb21wYXRfc2lvY19zZ19yZXE2IHsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNyYzsKQEAgLTIwMTcsMTYgJiM0MzsyMTU4LDE2IEBAIGludCBpcDZtcl9jb21wYXRfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAlzdHJ1Y3QgbXJfdGFibGUgKm1ydDsKIAotCW1ydCA9IGlwNm1yX2dldF90YWJsZShuZXQsIHJhdzZfc2soc2spLSZndDtpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpOwomIzQzOwltcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChuZXQsIHJhdzZfc2soc2spLSZndDtpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpOwogCWlmICghbXJ0KQogCQlyZXR1cm4gLUVOT0VOVDsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTSU9DR0VUTUlGQ05UX0lONjoKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7dnIsIGFyZywgc2l6ZW9mKHZyKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCQlnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0OwogCQlpZiAodnIubWlmaSAmZ3Q7PSBtcnQtJmd0O21heHZpZikKLQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCWdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7CiAJCXZyLm1pZmkgPSBhcnJheV9pbmRleF9ub3NwZWModnIubWlmaSwgbXJ0LSZndDttYXh2aWYpOwogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCXZpZiA9ICZhbXA7bXJ0LSZndDt2aWZfdGFibGVbdnIubWlmaV07CkBAIC0yMDM4LDE0ICYjNDM7MjE3OSwxNiBAQCBpbnQgaXA2bXJfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZykKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogCiAJCQlpZiAoY29weV90b191c2VyKGFyZywgJmFtcDt2ciwgc2l6ZW9mKHZyKSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CQkJCWdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7CiYjNDM7CQkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCWlwNm1yX3B1dF90YWJsZShtcnQpOwogCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAJY2FzZSBTSU9DR0VUU0dDTlRfSU42OgogCQlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDtzciwgYXJnLCBzaXplb2Yoc3IpKSkKLQkJCXJldHVybiAtRUZBVUxUOwomIzQzOwkJCWdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7CiAKIAkJcmN1X3JlYWRfbG9jaygpOwogCQljID0gaXA2bXJfY2FjaGVfZmluZChtcnQsICZhbXA7c3Iuc3JjLnNpbjZfYWRkciwgJmFtcDtzci5ncnAuc2luNl9hZGRyKTsKQEAgLTIwNTYsMTQgJiM0MzsyMTk5LDI1IEBAIGludCBpcDZtcl9jb21wYXRfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYW1wO3NyLCBzaXplb2Yoc3IpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCQkJZ290byBvdXRfcHV0X3RhYmxlX2VmYXVsdDsKJiM0MzsJCQlpcDZtcl9wdXRfdGFibGUobXJ0KTsKIAkJCXJldHVybiAwOwogCQl9CiAJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAlkZWZhdWx0OgomIzQzOwkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAJCXJldHVybiAtRU5PSU9DVExDTUQ7CiAJfQomIzQzOwomIzQzO291dF9wdXRfdGFibGVfZWZhdWx0OgomIzQzOwlpcDZtcl9wdXRfdGFibGUobXJ0KTsKJiM0MzsJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7b3V0X3B1dF90YWJsZV9laW52YWw6CiYjNDM7CWlwNm1yX3B1dF90YWJsZShtcnQpOwomIzQzOwlyZXR1cm4gLUVJTlZBTDsKIH0KICNlbmRpZgogCkBAIC0yMzkyLDEzICYjNDM7MjU0NiwxNiBAQCBpbnQgaXA2X21yX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpCiAJCWlmICh2aWYgJmd0Oz0gMCkgewogCQkJaW50IGVyciA9IGlwNm1yX2NhY2hlX3VucmVzb2x2ZWQobXJ0LCB2aWYsIHNrYiwgZGV2KTsKIAomIzQzOwkJCWlwNm1yX3B1dF90YWJsZShtcnQpOwogCQkJcmV0dXJuIGVycjsKIAkJfQomIzQzOwkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpcDZfbXJfZm9yd2FyZChuZXQsIG1ydCwgZGV2LCBza2IsIGNhY2hlKTsKJiM0MzsJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI0NDEsMTkgJiM0MzsyNTk4LDI1IEBAIGludCBpcDZfbXJfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCS8qIE5vIHVzYWJsZSBjYWNoZSBlbnRyeSAqLwogCWlmICghY2FjaGUpIHsKIAkJdmlmID0gaXA2bXJfZmluZF92aWYobXJ0LCBkZXYpOwotCQlpZiAodmlmICZndDs9IDApCi0JCQlyZXR1cm4gaXA2bXJfY2FjaGVfdW5yZXNvbHZlZChtcnQsIHZpZiwgc2tiLCBkZXYpOwotCQlnb3RvIGlwNl9vdXRwdXQ7CiYjNDM7CQlpZiAodmlmICZndDs9IDApIHsKJiM0MzsJCQllcnIgPSBpcDZtcl9jYWNoZV91bnJlc29sdmVkKG1ydCwgdmlmLCBza2IsIGRldik7CiYjNDM7CQkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsJCWdvdG8gb3V0X3B1dDsKIAl9CiAKIAkvKiBXcm9uZyBpbnRlcmZhY2UgKi8KIAl2aWYgPSBjYWNoZS0mZ3Q7X2MubWZjX3BhcmVudDsKIAlpZiAocmN1X2FjY2Vzc19wb2ludGVyKG1ydC0mZ3Q7dmlmX3RhYmxlW3ZpZl0uZGV2KSAhPSBkZXYpCi0JCWdvdG8gaXA2X291dHB1dDsKJiM0MzsJCWdvdG8gb3V0X3B1dDsKIAogCWlwNl9tcl9vdXRwdXRfZmluaXNoKG5ldCwgbXJ0LCBkZXYsIHNrYiwgY2FjaGUpOwomIzQzOwlpcDZtcl9wdXRfdGFibGUobXJ0KTsKIAlyZXR1cm4gMDsKIAomIzQzO291dF9wdXQ6CiYjNDM7CWlwNm1yX3B1dF90YWJsZShtcnQpOwogaXA2X291dHB1dDoKIAlyZXR1cm4gaXA2X291dHB1dChuZXQsIHNrLCBza2IpOwogfQpAQCAtMjc1NSwzMyAmIzQzOzI5MTgsMzUgQEAgc3RhdGljIGludCBpcDZtcl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCWdycCA9IG5sYV9nZXRfaW42X2FkZHIodGJbUlRBX0RTVF0pOwogCXRhYmxlaWQgPSBubGFfZ2V0X3UzMl9kZWZhdWx0KHRiW1JUQV9UQUJMRV0sIDApOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCi0JbXJ0ID0gX19pcDZtcl9nZXRfdGFibGUobmV0LCB0YWJsZWlkID86IFJUX1RBQkxFX0RFRkFVTFQpOwomIzQzOwltcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChuZXQsIHRhYmxlaWQgPzogUlRfVEFCTEVfREVGQVVMVCk7CiAJaWYgKCFtcnQpIHsKIAkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtNUiB0YWJsZSBkb2VzIG5vdCBleGlzdCYjMzQ7KTsKIAkJZXJyID0gLUVOT0VOVDsKLQkJZ290byBlcnI7CiYjNDM7CQlnb3RvIGVycl9mcmVlOwogCX0KIAomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiAJY2FjaGUgPSBpcDZtcl9jYWNoZV9maW5kKG1ydCwgJmFtcDtzcmMsICZhbXA7Z3JwKTsKIAlpZiAoIWNhY2hlKSB7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKIAkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtNUiBjYWNoZSBlbnRyeSBub3QgZm91bmQmIzM0Oyk7CiAJCWVyciA9IC1FTk9FTlQ7Ci0JCWdvdG8gZXJyOwomIzQzOwkJZ290byBlcnJfcHV0OwogCX0KIAogCWVyciA9IGlwNm1yX2ZpbGxfbXJvdXRlKG1ydCwgc2tiLCBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLAogCQkJCW5saC0mZ3Q7bmxtc2dfc2VxLCBjYWNoZSwgUlRNX05FV1JPVVRFLCAwKTsKLQlpZiAoZXJyICZsdDsgMCkKLQkJZ290byBlcnI7Ci0KIAlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9wdXQ7CiAKLQlyZXR1cm4gcnRubF91bmljYXN0KHNrYiwgbmV0LCBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkKTsKJiM0MzsJZXJyID0gcnRubF91bmljYXN0KHNrYiwgbmV0LCBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkKTsKJiM0MzsJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiYjNDM7CXJldHVybiBlcnI7CiAKLWVycjoKLQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MztlcnJfcHV0OgomIzQzOwlpcDZtcl9wdXRfdGFibGUobXJ0KTsKJiM0MztlcnJfZnJlZToKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjgwNCw3ICYjNDM7Mjk2OSw3IEBAIHN0YXRpYyBpbnQgaXA2bXJfcnRtX2R1bXByb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJaWYgKGZpbHRlci50YWJsZV9pZCkgewogCQlzdHJ1Y3QgbXJfdGFibGUgKm1ydDsKIAotCQltcnQgPSBfX2lwNm1yX2dldF90YWJsZShzb2NrX25ldChza2ItJmd0O3NrKSwgZmlsdGVyLnRhYmxlX2lkKTsKJiM0MzsJCW1ydCA9IGlwNm1yX2dldF90YWJsZV9ob2xkKHNvY2tfbmV0KHNrYi0mZ3Q7c2spLCBmaWx0ZXIudGFibGVfaWQpOwogCQlpZiAoIW1ydCkgewogCQkJaWYgKHJ0bmxfbXNnX2ZhbWlseShjYi0mZ3Q7bmxoKSAhPSBSVE5MX0ZBTUlMWV9JUDZNUikgewogCQkJCWVyciA9IHNrYi0mZ3Q7bGVuOwpAQCAtMjgxOCw2ICYjNDM7Mjk4Myw3IEBAIHN0YXRpYyBpbnQgaXA2bXJfcnRtX2R1bXByb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAKIAkJZXJyID0gbXJfdGFibGVfZHVtcChtcnQsIHNrYiwgY2IsIF9pcDZtcl9maWxsX21yb3V0ZSwKIAkJCQkgICAgJmFtcDttZmNfdW5yZXNfbG9jaywgJmFtcDtmaWx0ZXIpOwomIzQzOwkJaXA2bXJfcHV0X3RhYmxlKG1ydCk7CiAJCWVyciA9IHNrYi0mZ3Q7bGVuID8gOiBlcnI7CiAJCWdvdG8gdW5sb2NrOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4OTYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IElQdjYgTXVsdGljYXN0IFJvdXRpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggYWZmZWN0aW5nIElQdjYgbXVsdGljYXN0IHJvdXRpbmcsIHNwZWNpZmljYWxseSB0b3VjaGluZyBgbmV0L2lwdjYvaXA2bXIuY2AsIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2AsIGFuZCBgaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oYC4gIFRoZSBjb3JlIG9mIGl0IGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgcmVmZXJlbmNlIGNvdW50aW5nIGZvciBgc3RydWN0IG1yX3RhYmxlYCDigJMgYHJlZmNudGAgYW5kIGBkZXN0cm95X3dvcmtgIOKAkyBhbmQgYSBjb3JyZXNwb25kaW5nIGNoYW5nZSBpbiB0aGUgdGFibGUgbWFuYWdlbWVudCBmdW5jdGlvbnMuIEJhc2ljYWxseSwgdGhleSBhcmUgdHJ5aW5nIHRvIGZpeCBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24sIHdoaWNoIGlzIGNyaXRpY2FsLgoKTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzLCAqeWVzKiwgdGhpcyB3YXJyYW50cyBmdXp6aW5nLiBJdCYjMzk7cyB0b3VjaGluZyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IElQdjYgbXVsdGljYXN0IHJvdXRpbmcsIHdoaWNoIG1lYW5zIGl04oCZcyBkZWZpbml0ZWx5IGNyaXRpY2FsIGluZnJhc3RydWN0dXJlLiBJdCBpcyBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhcyB3ZWxsLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2ggdG8gY29uc3RydWN0IGEgbGlzdCBvZiBmdXp6IHRhcmdldHMuIFRoZSBtb3N0IGltcG9ydGFudCBvbmVzIHNlZW0gdG8gYmUgdGhlIG5ldyBgaXA2bXJfZ2V0X3RhYmxlX2hvbGRgLCBgX19pcDZtcl9wdXRfdGFibGVgLCBgaXA2bXJfcHV0X3RhYmxlYCwgYW5kIGBpcDZtcl9mcmVlX3RhYmxlX3dvcmtgLCBidXQgdGhlIG1vZGlmaWNhdGlvbnMgYXJlbiYjMzk7dCBsaW1pdGVkIHRvIHRoYXQuIFRoZXkgYWxzbyBtb2RpZmllZCBob3cgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcmUgdXNlZCBsaWtlIGBpcDZtcl9uZXdfdGFibGVgLCBgaXA2bXJfZnJlZV90YWJsZWAsIGBwaW02X3JjdmAsIGByZWdfdmlmX3htaXRgLCBgX19pcDZtcl9za19pbml0YCwgYGlwNm1yX3NrX2RvbmVgLCBgbXJvdXRlNl9pc19zb2NrZXRgLCBgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0YCwgYGlwNl9tcm91dGVfZ2V0c29ja29wdGAsIGBpcDZtcl9pb2N0bGAsIGBpcDZtcl9jb21wYXRfaW9jdGxgLCBgaXA2X21yX2lucHV0YCwgYGlwNl9tcl9vdXRwdXRgLCBgaXA2bXJfcnRtX2dldHJvdXRlYCwgYW5kIGBpcDZtcl9ydG1fZHVtcHJvdXRlYC4KClRoaW5raW5nIGFib3V0IHRoZSBtb3N0IGVmZmVjdGl2ZSBmdXp6aW5nIHRhcmdldHMsIEkmIzM5O2QgaG9uZSBpbiBvbiB0aGVzZTogYGlwNl9tcm91dGVfc2V0c29ja29wdGAsIGBpcDZfbXJvdXRlX2dldHNvY2tvcHRgLCBgaXA2bXJfaW9jdGxgLCBgaXA2bXJfY29tcGF0X2lvY3RsYCwgYGlwNl9tcl9pbnB1dGAsIGBpcDZfbXJfb3V0cHV0YCwgYGlwNm1yX3J0bV9nZXRyb3V0ZWAsIGBpcDZtcl9ydG1fZHVtcHJvdXRlYCwgYHBpbTZfcmN2YCwgYW5kIGByZWdfdmlmX3htaXRgLiBTb2NrZXQgb3B0aW9ucyBhbmQgaW9jdGxzIGFyZSBhbHdheXMgZ29vZCBzdGFydGluZyBwb2ludHMsIHNpbmNlIHRoZXkgcHJvdmlkZSBkaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVsLiBUaGUgcm91dGluZyB0YWJsZSBpbnRlcmFjdGlvbiBhbmQgcGFja2V0IGlucHV0L291dHB1dCBmdW5jdGlvbnMgYXJlIGFsc28gaW1wb3J0YW50LgoKRmluYWxseSwgYSBxdWljayBzYW5pdHkgY2hlY2sgb2YgdGhlIEtjb25maWcgb3B0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IElQdjYgbXVsdGljYXN0IHJvdXRpbmcgKGBDT05GSUdfSVBWNl9NUk9VVEVgKSBpcyBlbmFibGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB3aXRoIGEgYGdyZXBwZXJgIHNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUFY2X01ST1VURSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZz03MD1DT05GSUdfSVBWNl9TVUJUUkVFUz15XG5hcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZzo3MTpDT05GSUdfSVBWNl9NUk9VVEU9eVxuYXJjaC9hcm0vY29uZmlncy9rZXlzdG9uZV9kZWZjb25maWctNzItQ09ORklHX0lQVjZfUElNU01fVjI9eVxuLS1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc9MTU5PUNPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUz15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjE2MDpDT05GSUdfSVBWNl9NUk9VVEU9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy0xNjEtQ09ORklHX01QVENQPXlcbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTE3NT1DT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVM9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzoxNzY6Q09ORklHX0lQVjZfTVJPVVRFPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWctMTc3LUNPTkZJR19NUFRDUD15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvYmNtNDd4eF9kZWZjb25maWc9MjU9Q09ORklHX0lQVjZfU1VCVFJFRVM9eVxuYXJjaC9taXBzL2NvbmZpZ3MvYmNtNDd4eF9kZWZjb25maWc6MjY6Q09ORklHX0lQVjZfTVJPVVRFPXlcbmFyY2gvbWlwcy9jb25maWdzL2JjbTQ3eHhfZGVmY29uZmlnLTI3LUNPTkZJR19ORVRGSUxURVI9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2RiMXh4eF9kZWZjb25maWc9NjU9Q09ORklHX0lQVjZfU1VCVFJFRVM9eVxuYXJjaC9taXBzL2NvbmZpZ3MvZGIxeHh4X2RlZmNvbmZpZzo2NjpDT05GSUdfSVBWNl9NUk9VVEU9eVxuYXJjaC9taXBzL2NvbmZpZ3MvZGIxeHh4X2RlZmNvbmZpZzo2NzpDT05GSUdfSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcbmFyY2gvbWlwcy9jb25maWdzL2RiMXh4eF9kZWZjb25maWctNjgtQ09ORklHX0lQVjZfUElNU01fVjI9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnPTQ4PUNPTkZJR19JUFY2X1NVQlRSRUVTPXlcbmFyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnOjQ5OkNPTkZJR19JUFY2X01ST1VURT15XG5hcmNoL21pcHMvY29uZmlncy9pcDIyX2RlZmNvbmZpZy01MC1DT05GSUdfSVBWNl9QSU1TTV9WMj15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWc9NDc9Q09ORklHX0lQVjZfU1VCVFJFRVM9eVxuYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWc6NDg6Q09ORklHX0lQVjZfTVJPVVRFPXlcbmFyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnLTQ5LUNPTkZJR19JUFY2X1BJTVNNX1YyPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9pcDMwX2RlZmNvbmZpZz00Nz1DT05GSUdfSVBWNl9TVUJUUkVFUz15XG5hcmNoL21pcHMvY29uZmlncy9pcDMwX2RlZmNvbmZpZzo0ODpDT05GSUdfSVBWNl9NUk9VVEU9eVxuYXJjaC9taXBzL2NvbmZpZ3MvaXAzMF9kZWZjb25maWctNDktQ09ORklHX0lQVjZfUElNU01fVjI9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZz01MT1DT05GSUdfSVBWNl9UVU5ORUw9bVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnOjUyOkNPTkZJR19JUFY2X01ST1VURT15XG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWctNTMtQ09ORklHX0lQVjZfUElNU01fVjI9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWc9NTU9Q09ORklHX0lQVjZfVFVOTkVMPW1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWc6NTY6Q09ORklHX0lQVjZfTVJPVVRFPXlcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWctNTctQ09ORklHX0lQVjZfUElNU01fVjI9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZz01ND1DT05GSUdfSVBWNl9UVU5ORUw9bVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnOjU1OkNPTkZJR19JUFY2X01ST1VURT15XG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX3hwYV9kZWZjb25maWctNTYtQ09ORklHX0lQVjZfUElNU01fVjI9eVxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWc9MTE3PUNPTkZJR19JUFY2X1NVQlRSRUVTPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWc6MTE4OkNPTkZJR19JUFY2X01ST1VURT15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnLTExOS1DT05GSUdfSVBWNl9QSU1TTV9WMj15XG4tLVxuZHJpdmVycy9uZXQvdnJmLmM9MTUxNz1zdGF0aWMgaW50IHZyZl9hZGRfZmliX3J1bGVzKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdnJmLmMtMTUzNC1cbmRyaXZlcnMvbmV0L3ZyZi5jOjE1MzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFUylcbmRyaXZlcnMvbmV0L3ZyZi5jLTE1MzYtXHRlcnIgPSB2cmZfZmliX3J1bGUoZGV2LCBSVE5MX0ZBTUlMWV9JUDZNUiwgdHJ1ZSk7XG4tLVxuZHJpdmVycy9uZXQvdnJmLmMtMTU0Mi1cbmRyaXZlcnMvbmV0L3ZyZi5jOjE1NDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFUylcbmRyaXZlcnMvbmV0L3ZyZi5jLTE1NDQtaXA2bXJfZXJyOlxuLS1cbmluY2x1ZGUvbGludXgvaXB2Ni5oPTEzPXN0cnVjdCBpcHY2X2RldmNvbmYge1xuLS1cbmluY2x1ZGUvbGludXgvaXB2Ni5oLTYyLSNlbmRpZlxuaW5jbHVkZS9saW51eC9pcHY2Lmg6NjM6I2lmZGVmIENPTkZJR19JUFY2X01ST1VURVxuaW5jbHVkZS9saW51eC9pcHY2LmgtNjQtXHRhdG9taWNfdFx0bWNfZm9yd2FyZGluZztcbi0tXG5pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaC0xMy1cbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oOjE0OiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVcbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oLTE1LXN0YXRpYyBpbmxpbmUgaW50IGlwNl9tcm91dGVfb3B0KGludCBvcHQpXG4tLVxuaW5jbHVkZS9saW51eC9tcm91dGU2Lmg9MjY9c3RydWN0IHNvY2s7XG5pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaC0yNy1cbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oOjI4OiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVcbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oLTI5LWV4dGVybiBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICosIGludCwgc29ja3B0cl90LCB1bnNpZ25lZCBpbnQpO1xuLS1cbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oPTY4PXN0YXRpYyBpbmxpbmUgdm9pZCBpcDZfbXJfY2xlYW51cCh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oLTczLVxuaW5jbHVkZS9saW51eC9tcm91dGU2Lmg6NzQ6I2lmZGVmIENPTkZJR19JUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oLTc1LWJvb2wgaXA2bXJfcnVsZV9kZWZhdWx0KGNvbnN0IHN0cnVjdCBmaWJfcnVsZSAqcnVsZSk7XG4tLVxuaW5jbHVkZS9saW51eC9tcm91dGU2Lmg9MTA0PWV4dGVybiBpbnQgaXA2bXJfZ2V0X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaC0xMDYtXG5pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaDoxMDc6I2lmZGVmIENPTkZJR19JUFY2X01ST1VURVxuaW5jbHVkZS9saW51eC9tcm91dGU2LmgtMTA4LWJvb2wgbXJvdXRlNl9pc19zb2NrZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi0tXG5pbmNsdWRlL25ldC9uZXRucy9pcHY2Lmg9NjY9c3RydWN0IG5ldG5zX2lwdjYge1xuLS1cbmluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaC0xMDctXG5pbmNsdWRlL25ldC9uZXRucy9pcHY2Lmg6MTA4OiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaDoxMDk6I2lmbmRlZiBDT05GSUdfSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5pbmNsdWRlL25ldC9uZXRucy9pcHY2LmgtMTEwLVx0c3RydWN0IG1yX3RhYmxlXHRcdCptcnQ2O1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaD02ODI9ZW51bSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oLTcwMi0jZGVmaW5lIFJUTUdSUF9JUFY2X0lGQUREUlx0MHgxMDBcbmluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaDo3MDM6I2RlZmluZSBSVE1HUlBfSVBWNl9NUk9VVEVcdDB4MjAwXG5pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgtNzA0LSNkZWZpbmUgUlRNR1JQX0lQVjZfUk9VVEVcdDB4NDAwXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oPTcxND1lbnVtIHJ0bmV0bGlua19ncm91cHMge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaC03MzQtI2RlZmluZSBSVE5MR1JQX0lQVjZfSUZBRERSXHRSVE5MR1JQX0lQVjZfSUZBRERSXG5pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmg6NzM1Olx0UlROTEdSUF9JUFY2X01ST1VURSxcbmluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaDo3MzY6I2RlZmluZSBSVE5MR1JQX0lQVjZfTVJPVVRFXHRSVE5MR1JQX0lQVjZfTVJPVVRFXG5pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgtNzM3LVx0UlROTEdSUF9JUFY2X1JPVVRFLFxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaC03NzQtI2RlZmluZSBSVE5MR1JQX0lQVjRfTVJPVVRFX1JcdFJUTkxHUlBfSVBWNF9NUk9VVEVfUlxuaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oOjc3NTpcdFJUTkxHUlBfSVBWNl9NUk9VVEVfUixcbmluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaDo3NzY6I2RlZmluZSBSVE5MR1JQX0lQVjZfTVJPVVRFX1JcdFJUTkxHUlBfSVBWNl9NUk9VVEVfUlxuaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oLTc3Ny1cdFJUTkxHUlBfTkVYVEhPUCxcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz0xMTA9c3RhdGljIHU4IGJhdGFkdl9tY2FzdF9tbGFfcnRyX2ZsYWdzX21lc2hpZl9nZXRfaXB2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEzMC0gKi9cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEzMTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9NUk9VVEUpXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMzItc3RhdGljIHU4IGJhdGFkdl9tY2FzdF9tbGFfcnRyX2ZsYWdzX21lc2hpZl9nZXRfaXB2NihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTcxMDY9c3RhdGljIGludCBydG5ldGxpbmtfYmluZChzdHJ1Y3QgbmV0ICpuZXQsIGludCBncm91cClcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy03MTA5LVx0Y2FzZSBSVE5MR1JQX0lQVjRfTVJPVVRFX1I6XG5uZXQvY29yZS9ydG5ldGxpbmsuYzo3MTEwOlx0Y2FzZSBSVE5MR1JQX0lQVjZfTVJPVVRFX1I6XG5uZXQvY29yZS9ydG5ldGxpbmsuYy03MTExLVx0XHRpZiAoIW5zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKVxuLS1cbm5ldC9pcHY0L0tjb25maWc9MjE2PWNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXG5uZXQvaXB2NC9LY29uZmlnLTIxNy1cdGJvb2xcbm5ldC9pcHY0L0tjb25maWc6MjE4Olx0ZGVwZW5kcyBvbiBJUF9NUk9VVEUgfHwgSVBWNl9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjE5LVxuLS1cbm5ldC9pcHY2L0tjb25maWc9MjQzPWNvbmZpZyBJUFY2X1NVQlRSRUVTXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNTYtXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcbm5ldC9pcHY2L0tjb25maWctMjU4LVx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjY0LVxubmV0L2lwdjYvS2NvbmZpZzoyNjU6Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yNjYtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1wmIzM0O1xubmV0L2lwdjYvS2NvbmZpZzoyNjc6XHRkZXBlbmRzIG9uIElQVjZfTVJPVVRFXG5uZXQvaXB2Ni9LY29uZmlnLTI2OC1cdHNlbGVjdCBGSUJfUlVMRVNcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTI3OT1jb25maWcgSVBWNl9QSU1TTV9WMlxubmV0L2lwdjYvS2NvbmZpZy0yODAtXHRib29sIFwmIzM0O0lQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFwmIzM0O1xubmV0L2lwdjYvS2NvbmZpZzoyODE6XHRkZXBlbmRzIG9uIElQVjZfTVJPVVRFXG5uZXQvaXB2Ni9LY29uZmlnLTI4Mi1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9NYWtlZmlsZT0xNT1pcHY2LSQoQ09ORklHX1NZU0NUTCkgJiM0Mzs9IHN5c2N0bF9uZXRfaXB2Ni5vXG5uZXQvaXB2Ni9NYWtlZmlsZToxNjppcHY2LSQoQ09ORklHX0lQVjZfTVJPVVRFKSAmIzQzOz0gaXA2bXIub1xubmV0L2lwdjYvTWFrZWZpbGUtMTctXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz01MDg9c3RhdGljIGludCBpbmV0Nl9uZXRjb25mX21zZ3NpemVfZGV2Y29uZihpbnQgdHlwZSlcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTUxOC1cdFx0c2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoNCk7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjUxOTojaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTUyMC1cdGlmIChhbGwgfHwgdHlwZSA9PSBORVRDT05GQV9NQ19GT1JXQVJESU5HKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NTMyPXN0YXRpYyBpbnQgaW5ldDZfbmV0Y29uZl9maWxsX2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlmaW5kZXgsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy01NjEtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xubmV0L2lwdjYvYWRkcmNvbmYuYzo1NjI6I2lmZGVmIENPTkZJR19JUFY2X01ST1VURVxubmV0L2lwdjYvYWRkcmNvbmYuYy01NjMtXHRpZiAoKGFsbCB8fCB0eXBlID09IE5FVENPTkZBX01DX0ZPUldBUkRJTkcpIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NTY2Mj1zdGF0aWMgdm9pZCBpcHY2X3N0b3JlX2RldmNvbmYoY29uc3Qgc3RydWN0IGlwdjZfZGV2Y29uZiAqY25mLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNTcxNS0jZW5kaWZcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTcxNjojaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3MTctXHRhcnJheVtERVZDT05GX01DX0ZPUldBUkRJTkddID0gYXRvbWljX3JlYWQoXHUwMDI2Y25mLVx1MDAzZW1jX2ZvcndhcmRpbmcpO1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9Njg2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBhZGRyY29uZl9zeXNjdGxbXSA9IHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcxMzEtI2VuZGlmXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjcxMzI6I2lmZGVmIENPTkZJR19JUFY2X01ST1VURVxubmV0L2lwdjYvYWRkcmNvbmYuYy03MTMzLVx0e1xuLS1cbm5ldC9pcHY2L2lwNl9pbnB1dC5jPTU1ND1pbnQgaXA2X21jX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaXA2X2lucHV0LmMtNTc2LVxubmV0L2lwdjYvaXA2X2lucHV0LmM6NTc3OiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVcbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTU3OC1cdC8qXG4tLVxubmV0L2lwdjYvaXA2bXIuYz0xMTA9c3RhdGljIHZvaWQgaXBtcl9leHBpcmVfcHJvY2VzcyhzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG5uZXQvaXB2Ni9pcDZtci5jLTExMS1cbm5ldC9pcHY2L2lwNm1yLmM6MTEyOiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9pcDZtci5jLTExMy0jZGVmaW5lIGlwNm1yX2Zvcl9lYWNoX3RhYmxlKG1ydCwgbmV0KSBcXFxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9NDM1PXN0YXRpYyB2b2lkIGlwNm1yX25ld190YWJsZV9zZXQoc3RydWN0IG1yX3RhYmxlICptcnQsXG4tLVxubmV0L2lwdjYvaXA2bXIuYy00Mzcte1xubmV0L2lwdjYvaXA2bXIuYzo0Mzg6I2lmZGVmIENPTkZJR19JUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY2L2lwNm1yLmMtNDM5LVx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2bXJ0LVx1MDAzZWxpc3QsIFx1MDAyNm5ldC1cdTAwM2VpcHY2Lm1yNl90YWJsZXMpO1xuLS1cbm5ldC9pcHY2L2lwNm1yLmM9MTc5OD1pbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xOTU4LSNlbmRpZlxubmV0L2lwdjYvaXA2bXIuYzoxOTU5OiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9pcDZtci5jLTE5NjAtXHRjYXNlIE1SVDZfVEFCTEU6XG4tLVxubmV0L2lwdjYvaXA2bXIuYz0yNzY5PXN0YXRpYyB2b2lkIG1yNl9uZXRsaW5rX2V2ZW50KHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3QgbWZjNl9jYWNoZSAqbWZjLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMjc4My1cbm5ldC9pcHY2L2lwNm1yLmM6Mjc4NDpcdHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0lQVjZfTVJPVVRFLCBOVUxMLCBHRlBfQVRPTUlDKTtcbm5ldC9pcHY2L2lwNm1yLmMtMjc4NS1cdHJldHVybjtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTI3ODgtXHRrZnJlZV9za2Ioc2tiKTtcbm5ldC9pcHY2L2lwNm1yLmM6Mjc4OTpcdHJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfSVBWNl9NUk9VVEUsIGVycik7XG5uZXQvaXB2Ni9pcDZtci5jLTI3OTAtfVxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9MjgwOT1zdGF0aWMgdm9pZCBtcnQ2bXNnX25ldGxpbmtfZXZlbnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBza19idWZmICpwa3QpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0yODQ2LVxubmV0L2lwdjYvaXA2bXIuYzoyODQ3Olx0cnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfSVBWNl9NUk9VVEVfUiwgTlVMTCwgR0ZQX0FUT01JQyk7XG5uZXQvaXB2Ni9pcDZtci5jLTI4NDgtXHRyZXR1cm47XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0yODUzLVx0a2ZyZWVfc2tiKHNrYik7XG5uZXQvaXB2Ni9pcDZtci5jOjI4NTQ6XHRydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfTVJPVVRFX1IsIC1FTk9CVUZTKTtcbm5ldC9pcHY2L2lwNm1yLmMtMjg1NS19XG4tLVxubmV0L2lwdjYvcmF3LmM9MTExNT1zdGF0aWMgaW50IHJhd3Y2X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxuLS1cbm5ldC9pcHY2L3Jhdy5jLTExMzUtXHRkZWZhdWx0OlxubmV0L2lwdjYvcmF3LmM6MTEzNjojaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFXG5uZXQvaXB2Ni9yYXcuYy0xMTM3LVx0XHRyZXR1cm4gaXA2bXJfaW9jdGwoc2ssIGNtZCwga2FyZyk7XG4tLVxubmV0L2lwdjYvcmF3LmM9MTE0NT1zdGF0aWMgaW50IGNvbXBhdF9yYXd2Nl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbm5ldC9pcHY2L3Jhdy5jLTExNTEtXHRkZWZhdWx0OlxubmV0L2lwdjYvcmF3LmM6MTE1MjojaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFXG5uZXQvaXB2Ni9yYXcuYy0xMTUzLVx0XHRyZXR1cm4gaXA2bXJfY29tcGF0X2lvY3RsKHNrLCBjbWQsIGNvbXBhdF9wdHIoYXJnKSk7XG4tLVxubmV0L2lwdjYvcm91dGUuYz01Nzc0PXN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvcm91dGUuYy01ODM5LVx0aWYgKGlpZikge1xubmV0L2lwdjYvcm91dGUuYzo1ODQwOiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVcbm5ldC9pcHY2L3JvdXRlLmMtNTg0MS1cdFx0aWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoXHUwMDI2cnQ2X2RzdC1cdTAwM2VhZGRyKSkge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaD02ODI9ZW51bSB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oLTcwMi0jZGVmaW5lIFJUTUdSUF9JUFY2X0lGQUREUlx0MHgxMDBcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaDo3MDM6I2RlZmluZSBSVE1HUlBfSVBWNl9NUk9VVEVcdDB4MjAwXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgtNzA0LSNkZWZpbmUgUlRNR1JQX0lQVjZfUk9VVEVcdDB4NDAwXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oPTcxND1lbnVtIHJ0bmV0bGlua19ncm91cHMge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaC03MzQtI2RlZmluZSBSVE5MR1JQX0lQVjZfSUZBRERSXHRSVE5MR1JQX0lQVjZfSUZBRERSXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmg6NzM1Olx0UlROTEdSUF9JUFY2X01ST1VURSxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaDo3MzY6I2RlZmluZSBSVE5MR1JQX0lQVjZfTVJPVVRFXHRSVE5MR1JQX0lQVjZfTVJPVVRFXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgtNzM3LVx0UlROTEdSUF9JUFY2X1JPVVRFLFxuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaC03NzQtI2RlZmluZSBSVE5MR1JQX0lQVjRfTVJPVVRFX1JcdFJUTkxHUlBfSVBWNF9NUk9VVEVfUlxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oOjc3NTpcdFJUTkxHUlBfSVBWNl9NUk9VVEVfUixcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaDo3NzY6I2RlZmluZSBSVE5MR1JQX0lQVjZfTVJPVVRFX1JcdFJUTkxHUlBfSVBWNl9NUk9VVEVfUlxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oLTc3Ny1cdFJUTkxHUlBfTkVYVEhPUCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnPTQzPUNPTkZJR19JUFY2X0lPQU02X0xXVFVOTkVMPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWc6NDQ6Q09ORklHX0lQVjZfTVJPVVRFPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWctNDUtQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm9yd2FyZGluZy9jb25maWc9MTI9Q09ORklHX0lQVjZfR1JFPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3J3YXJkaW5nL2NvbmZpZzoxMzpDT05GSUdfSVBWNl9NUk9VVEU9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvcndhcmRpbmcvY29uZmlnOjE0OkNPTkZJR19JUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVM9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvcndhcmRpbmcvY29uZmlnLTE1LUNPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUz15XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1MTYKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBhIGZldyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseS4gVGhlIGNvcmUgbmVjZXNzaXRpZXMgc2VlbSB0byBiZSBgSVBWNl9NUk9VVEVgIGFuZCBgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTYC4gSWRlYWxseSwgZm9yIHJvYnVzdCB0ZXN0aW5nIG9mIGBwaW02X3JjdmAsIEkgc2hvdWxkIGFsc28gaW5jbHVkZSBgSVBWNl9QSU1TTV9WMmAgYXMgd2VsbC4gU2luY2UgdGhpcyBpbnZvbHZlcyBpcG1yX2Jhc2UuYyBtb2RpZmljYXRpb25zLCBJIGhhdmUgdG8gZW5hYmxlIGJvdGggYElQX01ST1VURWAgYW5kIGBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTYCB0b28uIFJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgYnkgZG91YmxlLWNoZWNraW5nIHRob3NlIGBJUF9NUk9VVEVgIGNvbmZpZ3VyYXRpb25zIHRvIGNvbmZpcm0gdGhleSYjMzk7cmUgZW5hYmxlZCBhcyBleHBlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9NUk9VVEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnPTMwPUNPTkZJR19JUF9QTlBfQk9PVFA9eVxuYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnOjMxOkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnLTMyLUNPTkZJR19JUF9QSU1TTV9WMT15XG4tLVxuYXJjaC9hcm0vY29uZmlncy9rZXlzdG9uZV9kZWZjb25maWc9NTk9Q09ORklHX05FVF9JUEdSRT15XG5hcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZzo2MDpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gvYXJtL2NvbmZpZ3Mva2V5c3RvbmVfZGVmY29uZmlnOjYxOkNPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcbmFyY2gvYXJtL2NvbmZpZ3Mva2V5c3RvbmVfZGVmY29uZmlnLTYyLUNPTkZJR19JUF9QSU1TTV9WMj15XG4tLVxuYXJjaC9hcm0vY29uZmlncy9uaGs4ODE1X2RlZmNvbmZpZz0zMD1DT05GSUdfTkVUX0lQSVA9eVxuYXJjaC9hcm0vY29uZmlncy9uaGs4ODE1X2RlZmNvbmZpZzozMTpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gvYXJtL2NvbmZpZ3MvbmhrODgxNV9kZWZjb25maWctMzItIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0XG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz0xMzA9Q09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzoxMzE6Q09ORklHX0lQX01ST1VURT15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjEzMjpDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUz15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTEzMy1DT05GSUdfSVBfUElNU01fVjE9eVxuLS1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9MTQ2PUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6MTQ3OkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzoxNDg6Q09ORklHX0lQX01ST1VURV9NVUxUSVBMRV9UQUJMRVM9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0xNDktQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9iY200N3h4X2RlZmNvbmZpZz0xOT1DT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXlcbmFyY2gvbWlwcy9jb25maWdzL2JjbTQ3eHhfZGVmY29uZmlnOjIwOkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9taXBzL2NvbmZpZ3MvYmNtNDd4eF9kZWZjb25maWc6MjE6Q09ORklHX0lQX01ST1VURV9NVUxUSVBMRV9UQUJMRVM9eVxuYXJjaC9taXBzL2NvbmZpZ3MvYmNtNDd4eF9kZWZjb25maWctMjItQ09ORklHX1NZTl9DT09LSUVTPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnPTQ0PUNPTkZJR19JUF9QTlBfQk9PVFA9eVxuYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZzo0NTpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWctNDYtQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9ibWlwc19zdGJfZGVmY29uZmlnPTYxPUNPTkZJR19JUF9QTlBfUkFSUD15XG5hcmNoL21pcHMvY29uZmlncy9ibWlwc19zdGJfZGVmY29uZmlnOjYyOkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9taXBzL2NvbmZpZ3MvYm1pcHNfc3RiX2RlZmNvbmZpZy02My1DT05GSUdfSVBfUElNU01fVjE9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2Nhdml1bV9vY3Rlb25fZGVmY29uZmlnPTM5PUNPTkZJR19JUF9QTlBfUkFSUD15XG5hcmNoL21pcHMvY29uZmlncy9jYXZpdW1fb2N0ZW9uX2RlZmNvbmZpZzo0MDpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gvbWlwcy9jb25maWdzL2Nhdml1bV9vY3Rlb25fZGVmY29uZmlnLTQxLUNPTkZJR19JUF9QSU1TTV9WMT15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvbGVtb3RlMmZfZGVmY29uZmlnPTQwPUNPTkZJR19ORVRfSVBJUD1tXG5hcmNoL21pcHMvY29uZmlncy9sZW1vdGUyZl9kZWZjb25maWc6NDE6Q09ORklHX0lQX01ST1VURT15XG5hcmNoL21pcHMvY29uZmlncy9sZW1vdGUyZl9kZWZjb25maWctNDItQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWc9MzY9Q09ORklHX05FVF9JUElQPW1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZzozNzpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZy0zOC1DT05GSUdfSVBfUElNU01fVjE9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWc9NDA9Q09ORklHX05FVF9JUElQPW1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWc6NDE6Q09ORklHX0lQX01ST1VURT15XG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9rdm1fZGVmY29uZmlnLTQyLUNPTkZJR19JUF9QSU1TTV9WMT15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfcWVtdV8zMnI2X2RlZmNvbmZpZz0zNT1DT05GSUdfTkVUX0lQSVA9bVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfcWVtdV8zMnI2X2RlZmNvbmZpZzozNjpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX3FlbXVfMzJyNl9kZWZjb25maWctMzctQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YWFwcnBfZGVmY29uZmlnPTM3PUNPTkZJR19ORVRfSVBJUD1tXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YWFwcnBfZGVmY29uZmlnOjM4OkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFhcHJwX2RlZmNvbmZpZy0zOS1DT05GSUdfSVBfUElNU01fVjE9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhc212cF9kZWZjb25maWc9Mzg9Q09ORklHX05FVF9JUElQPW1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhc212cF9kZWZjb25maWc6Mzk6Q09ORklHX0lQX01ST1VURT15XG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXNtdnBfZGVmY29uZmlnLTQwLUNPTkZJR19JUF9QSU1TTV9WMT15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFzbXZwX2V2YV9kZWZjb25maWc9Mzk9Q09ORklHX05FVF9JUElQPW1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhc212cF9ldmFfZGVmY29uZmlnOjQwOkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFzbXZwX2V2YV9kZWZjb25maWctNDEtQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX2RlZmNvbmZpZz0zNj1DT05GSUdfTkVUX0lQSVA9bVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF9kZWZjb25maWc6Mzc6Q09ORklHX0lQX01ST1VURT15XG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX2RlZmNvbmZpZy0zOC1DT05GSUdfSVBfUElNU01fVjE9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZz0zOT1DT05GSUdfTkVUX0lQSVA9bVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnOjQwOkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnLTQxLUNPTkZJR19JUF9QSU1TTV9WMT15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWc9NTE9Q09ORklHX05FVF9JUElQPW1cbmFyY2gvbWlwcy9jb25maWdzL210eDFfZGVmY29uZmlnOjUyOkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWctNTMtQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9xaV9sYjYwX2RlZmNvbmZpZz0yOD1DT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15XG5hcmNoL21pcHMvY29uZmlncy9xaV9sYjYwX2RlZmNvbmZpZzoyOTpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gvbWlwcy9jb25maWdzL3FpX2xiNjBfZGVmY29uZmlnOjMwOkNPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcbmFyY2gvbWlwcy9jb25maWdzL3FpX2xiNjBfZGVmY29uZmlnLTMxLSMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnPTI3PUNPTkZJR19ORVRfSVBJUD1tXG5hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWc6Mjg6Q09ORklHX0lQX01ST1VURT15XG5hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWctMjktQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9yczkwX2RlZmNvbmZpZz01MD1DT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15XG5hcmNoL21pcHMvY29uZmlncy9yczkwX2RlZmNvbmZpZzo1MTpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gvbWlwcy9jb25maWdzL3JzOTBfZGVmY29uZmlnOjUyOkNPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcbmFyY2gvbWlwcy9jb25maWdzL3JzOTBfZGVmY29uZmlnLTUzLSMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvcnQzMDV4X2RlZmNvbmZpZz0zND1DT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15XG5hcmNoL21pcHMvY29uZmlncy9ydDMwNXhfZGVmY29uZmlnOjM1OkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9taXBzL2NvbmZpZ3MvcnQzMDV4X2RlZmNvbmZpZzozNjpDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUz15XG5hcmNoL21pcHMvY29uZmlncy9ydDMwNXhfZGVmY29uZmlnLTM3LUNPTkZJR19TWU5fQ09PS0lFUz15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWc9MzY9Q09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eVxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWc6Mzc6Q09ORklHX0lQX01ST1VURT15XG5hcmNoL21pcHMvY29uZmlncy94d2F5X2RlZmNvbmZpZzozODpDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUz15XG5hcmNoL21pcHMvY29uZmlncy94d2F5X2RlZmNvbmZpZy0zOS1DT05GSUdfU1lOX0NPT0tJRVM9eVxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvZ2VfaW1wM2FfZGVmY29uZmlnPTU0PUNPTkZJR19ORVRfSVBJUD1tXG5hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2dlX2ltcDNhX2RlZmNvbmZpZzo1NTpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvZ2VfaW1wM2FfZGVmY29uZmlnLTU2LUNPTkZJR19JUF9QSU1TTV9WMT15XG4tLVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZjb25maWc9NTA9Q09ORklHX05FVF9JUElQPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgveGVzX21wYzg1eHhfZGVmY29uZmlnOjUxOkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZjb25maWctNTItQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL3Bvd2VycGMvY29uZmlncy9mc2wtZW1iLW5vbmh3LmNvbmZpZz01OD1DT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL2ZzbC1lbWItbm9uaHcuY29uZmlnOjU5OkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZnNsLWVtYi1ub25ody5jb25maWctNjAtQ09ORklHX0lQX01VTFRJQ0FTVD15XG4tLVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZz05MD1DT05GSUdfTkVUX0lQSVA9bVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZzo5MTpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWctOTItQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9MTQ1PUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXlcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzoxNDY6Q09ORklHX0lQX01ST1VURT15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MTQ3OkNPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy0xNDgtQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9MTM2PUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXlcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzoxMzc6Q09ORklHX0lQX01ST1VURT15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6MTM4OkNPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy0xMzktQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL3NoL2NvbmZpZ3Mvc2U3NzEyX2RlZmNvbmZpZz0zOD1DT05GSUdfSVBfUE5QX0JPT1RQPXlcbmFyY2gvc2gvY29uZmlncy9zZTc3MTJfZGVmY29uZmlnOjM5OkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9zaC9jb25maWdzL3NlNzcxMl9kZWZjb25maWctNDAtQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZz0zNz1DT05GSUdfSVBfUE5QX0RIQ1A9eVxuYXJjaC9zaC9jb25maWdzL3NlNzcyMV9kZWZjb25maWc6Mzg6Q09ORklHX0lQX01ST1VURT15XG5hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZy0zOS1DT05GSUdfSVBfUElNU01fVjE9eVxuLS1cbmFyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWc9NDE9Q09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eVxuYXJjaC9zaC9jb25maWdzL3RpdGFuX2RlZmNvbmZpZzo0MjpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWctNDMtQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL3NwYXJjL2NvbmZpZ3Mvc3BhcmM2NF9kZWZjb25maWc9Mzk9Q09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eVxuYXJjaC9zcGFyYy9jb25maWdzL3NwYXJjNjRfZGVmY29uZmlnOjQwOkNPTkZJR19JUF9NUk9VVEU9eVxuYXJjaC9zcGFyYy9jb25maWdzL3NwYXJjNjRfZGVmY29uZmlnLTQxLUNPTkZJR19JUF9QSU1TTV9WMT15XG4tLVxuYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZz03Mz1DT05GSUdfSVBfUE5QX1JBUlA9eVxuYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZzo3NDpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWctNzUtQ09ORklHX0lQX1BJTVNNX1YxPXlcbi0tXG5hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWc9NzQ9Q09ORklHX0lQX1BOUF9SQVJQPXlcbmFyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZzo3NTpDT05GSUdfSVBfTVJPVVRFPXlcbmFyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZy03Ni1DT05GSUdfSVBfUElNU01fVjE9eVxuLS1cbmRyaXZlcnMvbmV0L3ZyZi5jPTE1MTc9c3RhdGljIGludCB2cmZfYWRkX2ZpYl9ydWxlcyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3ZyZi5jLTE1MjgtXG5kcml2ZXJzL25ldC92cmYuYzoxNTI5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTKVxuZHJpdmVycy9uZXQvdnJmLmMtMTUzMC1cdGVyciA9IHZyZl9maWJfcnVsZShkZXYsIFJUTkxfRkFNSUxZX0lQTVIsIHRydWUpO1xuLS1cbmRyaXZlcnMvbmV0L3ZyZi5jLTE1NDctXG5kcml2ZXJzL25ldC92cmYuYzoxNTQ4OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTKVxuZHJpdmVycy9uZXQvdnJmLmMtMTU0OS1pcG1yX2Vycjpcbi0tXG5pbmNsdWRlL2xpbnV4L21yb3V0ZS5oLTEyLVxuaW5jbHVkZS9saW51eC9tcm91dGUuaDoxMzojaWZkZWYgQ09ORklHX0lQX01ST1VURVxuaW5jbHVkZS9saW51eC9tcm91dGUuaC0xNC1zdGF0aWMgaW5saW5lIGludCBpcF9tcm91dGVfb3B0KGludCBvcHQpXG4tLVxuaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oPTI3Mj1zdGF0aWMgaW5saW5lIGJvb2wgbXJfY2FuX2ZyZWVfdGFibGUoc3RydWN0IG5ldCAqbmV0KVxuLS1cbmluY2x1ZGUvbGludXgvbXJvdXRlX2Jhc2UuaC0yNzYtXG5pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmg6Mjc3OiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFX0NPTU1PTlxuaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oLTI3OC12b2lkIHZpZl9kZXZpY2VfaW5pdChzdHJ1Y3QgdmlmX2RldmljZSAqdixcbi0tXG5pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmg9Mzk3PXN0cnVjdCBtcl9tZmNfaXRlciB7XG4tLVxuaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oLTQwNS1cbmluY2x1ZGUvbGludXgvbXJvdXRlX2Jhc2UuaDo0MDY6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVfQ09NTU9OXG5pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmgtNDA3LXZvaWQgKm1yX3ZpZl9zZXFfaWR4KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3ZpZl9pdGVyICppdGVyLCBsb2ZmX3QgcG9zKTtcbi0tXG5pbmNsdWRlL25ldC9uZXRucy9pcHY0Lmg9NTU9c3RydWN0IG5ldG5zX2lwdjQge1xuLS1cbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaC0yNzUtXG5pbmNsdWRlL25ldC9uZXRucy9pcHY0Lmg6Mjc2OiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXG5pbmNsdWRlL25ldC9uZXRucy9pcHY0Lmg6Mjc3OiNpZm5kZWYgQ09ORklHX0lQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaC0yNzgtXHRzdHJ1Y3QgbXJfdGFibGUgX19yY3VcdCptcnQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZz0yMDc9Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1Rcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTIxNS1cbm5ldC9pcHY0L0tjb25maWc6MjE2OmNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXG5uZXQvaXB2NC9LY29uZmlnLTIxNy1cdGJvb2xcbm5ldC9pcHY0L0tjb25maWc6MjE4Olx0ZGVwZW5kcyBvbiBJUF9NUk9VVEUgfHwgSVBWNl9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjE5LVxubmV0L2lwdjQvS2NvbmZpZzoyMjA6Y29uZmlnIElQX01ST1VURVxubmV0L2lwdjQvS2NvbmZpZy0yMjEtXHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0O1xubmV0L2lwdjQvS2NvbmZpZy0yMjItXHRkZXBlbmRzIG9uIElQX01VTFRJQ0FTVFxubmV0L2lwdjQvS2NvbmZpZzoyMjM6XHRzZWxlY3QgSVBfTVJPVVRFX0NPTU1PTlxubmV0L2lwdjQvS2NvbmZpZy0yMjQtXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0yMzEtXG5uZXQvaXB2NC9LY29uZmlnOjIzMjpjb25maWcgSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjQvS2NvbmZpZy0yMzMtXHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MjM0Olx0ZGVwZW5kcyBvbiBJUF9NUk9VVEUgXHUwMDI2XHUwMDI2IElQX0FEVkFOQ0VEX1JPVVRFUlxubmV0L2lwdjQvS2NvbmZpZy0yMzUtXHRzZWxlY3QgRklCX1JVTEVTXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0yNDY9Y29uZmlnIElQX1BJTVNNX1YxXG5uZXQvaXB2NC9LY29uZmlnLTI0Ny1cdGJvb2wgXCYjMzQ7SVA6IFBJTS1TTSB2ZXJzaW9uIDEgc3VwcG9ydFwmIzM0O1xubmV0L2lwdjQvS2NvbmZpZzoyNDg6XHRkZXBlbmRzIG9uIElQX01ST1VURVxubmV0L2lwdjQvS2NvbmZpZy0yNDktXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0yNTk9Y29uZmlnIElQX1BJTVNNX1YyXG5uZXQvaXB2NC9LY29uZmlnLTI2MC1cdGJvb2wgXCYjMzQ7SVA6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFwmIzM0O1xubmV0L2lwdjQvS2NvbmZpZzoyNjE6XHRkZXBlbmRzIG9uIElQX01ST1VURVxubmV0L2lwdjQvS2NvbmZpZy0yNjItXHRoZWxwXG4tLVxubmV0L2lwdjQvTWFrZWZpbGU9MjI9b2JqLSQoQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUykgJiM0Mzs9IGZpYl9ydWxlcy5vXG5uZXQvaXB2NC9NYWtlZmlsZToyMzpvYmotJChDT05GSUdfSVBfTVJPVVRFKSAmIzQzOz0gaXBtci5vXG5uZXQvaXB2NC9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfSVBfTVJPVVRFX0NPTU1PTikgJiM0Mzs9IGlwbXJfYmFzZS5vXG5uZXQvaXB2NC9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfTkVUX0lQSVApICYjNDM7PSBpcGlwLm9cbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTE2LSNpbmNsdWRlIFx1MDAzY25ldC9zZWN1cmVfc2VxLmhcdTAwM2Vcbm5ldC9pcHY0L2FmX2luZXQuYzoxMTc6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVcbm5ldC9pcHY0L2FmX2luZXQuYy0xMTgtI2luY2x1ZGUgXHUwMDNjbGludXgvbXJvdXRlLmhcdTAwM2Vcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTg4Mj1zdGF0aWMgaW50IF9faW5pdCBpbmV0X2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTk4OC1cdCAqL1xubmV0L2lwdjQvYWZfaW5ldC5jOjE5ODk6I2lmIGRlZmluZWQoQ09ORklHX0lQX01ST1VURSlcbm5ldC9pcHY0L2FmX2luZXQuYy0xOTkwLVx0aWYgKGlwX21yX2luaXQoKSlcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTAxLSNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlcl9pcHY0LmhcdTAwM2Vcbm5ldC9pcHY0L2lnbXAuYzoxMDI6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVcbm5ldC9pcHY0L2lnbXAuYy0xMDMtI2luY2x1ZGUgXHUwMDNjbGludXgvbXJvdXRlLmhcdTAwM2Vcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0zNjc9aW50IGlwX21jX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0zODMtXHRcdGlmIChza19tY19sb29wKHNrKVxubmV0L2lwdjQvaXBfb3V0cHV0LmM6Mzg0OiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0zODUtXHRcdC8qIFNtYWxsIG9wdGltaXphdGlvbjogZG8gbm90IGxvb3BiYWNrIG5vdCBsb2NhbCBmcmFtZXMsXG4tLVxubmV0L2lwdjQvaXBtci5jPTExOD1zdGF0aWMgdm9pZCBpcG1yX2V4cGlyZV9wcm9jZXNzKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbm5ldC9pcHY0L2lwbXIuYy0xMTktXG5uZXQvaXB2NC9pcG1yLmM6MTIwOiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjQvaXBtci5jLTEyMS0jZGVmaW5lIGlwbXJfZm9yX2VhY2hfdGFibGUobXJ0LCBuZXQpXHRcdFx0XHRcdFxcXG4tLVxubmV0L2lwdjQvaXBtci5jPTQwOD1zdGF0aWMgdm9pZCBpcG1yX25ld190YWJsZV9zZXQoc3RydWN0IG1yX3RhYmxlICptcnQsXG4tLVxubmV0L2lwdjQvaXBtci5jLTQxMC17XG5uZXQvaXB2NC9pcG1yLmM6NDExOiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjQvaXBtci5jLTQxMi1cdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNm1ydC1cdTAwM2VsaXN0LCBcdTAwMjZuZXQtXHUwMDNlaXB2NC5tcl90YWJsZXMpO1xuLS1cbm5ldC9pcHY0L2lwbXIuYz0xNDEwPWludCBpcF9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuLS1cbm5ldC9pcHY0L2lwbXIuYy0xNTc4LVx0Y2FzZSBNUlRfVEFCTEU6XG5uZXQvaXB2NC9pcG1yLmM6MTU3OTpcdFx0aWYgKCFJU19CVUlMVElOKENPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTKSkge1xubmV0L2lwdjQvaXBtci5jLTE1ODAtXHRcdFx0cmV0ID0gLUVOT1BST1RPT1BUO1xuLS1cbm5ldC9pcHY0L3Jhdy5jPTg3MT1zdGF0aWMgaW50IHJhd19pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcbi0tXG5uZXQvaXB2NC9yYXcuYy04OTEtXHRkZWZhdWx0OlxubmV0L2lwdjQvcmF3LmM6ODkyOiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXG5uZXQvaXB2NC9yYXcuYy04OTMtXHRcdHJldHVybiBpcG1yX2lvY3RsKHNrLCBjbWQsIGthcmcpO1xuLS1cbm5ldC9pcHY0L3Jhdy5jPTkwMT1zdGF0aWMgaW50IGNvbXBhdF9yYXdfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5uZXQvaXB2NC9yYXcuYy05MDctXHRkZWZhdWx0OlxubmV0L2lwdjQvcmF3LmM6OTA4OiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXG5uZXQvaXB2NC9yYXcuYy05MDktXHRcdHJldHVybiBpcG1yX2NvbXBhdF9pb2N0bChzaywgY21kLCBjb21wYXRfcHRyKGFyZykpO1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTczOT1pcF9yb3V0ZV9pbnB1dF9tYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkcixcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTE3NjktXG5uZXQvaXB2NC9yb3V0ZS5jOjE3NzA6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVcbm5ldC9pcHY0L3JvdXRlLmMtMTc3MS1cdGlmICghaXB2NF9pc19sb2NhbF9tdWx0aWNhc3QoZGFkZHIpIFx1MDAyNlx1MDAyNiBJTl9ERVZfTUZPUldBUkQoaW5fZGV2KSlcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTI0OTE9aXBfcm91dGVfaW5wdXRfcmN1KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjUyNy1cdFx0aWYgKG91clxubmV0L2lwdjQvcm91dGUuYzoyNTI4OiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXG5uZXQvaXB2NC9yb3V0ZS5jLTI1MjktXHRcdFx0fHxcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTI1NTk9c3RhdGljIHN0cnVjdCBydGFibGUgKl9fbWtyb3V0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTI2NjYtXHRcdH1cbm5ldC9pcHY0L3JvdXRlLmM6MjY2NzojaWZkZWYgQ09ORklHX0lQX01ST1VURVxubmV0L2lwdjQvcm91dGUuYy0yNjY4LVx0XHRpZiAodHlwZSA9PSBSVE5fTVVMVElDQVNUKSB7XG4tLVxubmV0L2lwdjQvcm91dGUuYz0yOTQ2PXN0YXRpYyBpbnQgcnRfZmlsbF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIGRzdCwgX19iZTMyIHNyYyxcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTMwNDgtXHRcdGlmIChydF9pc19pbnB1dF9yb3V0ZShydCkpIHtcbm5ldC9pcHY0L3JvdXRlLmM6MzA0OTojaWZkZWYgQ09ORklHX0lQX01ST1VURVxubmV0L2lwdjQvcm91dGUuYy0zMDUwLVx0XHRcdGlmIChpcHY0X2lzX211bHRpY2FzdChkc3QpIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9pcHY2L0tjb25maWc9MjU3PWNvbmZpZyBJUFY2X01ST1VURVxuLS1cbm5ldC9pcHY2L0tjb25maWctMjU5LVx0ZGVwZW5kcyBvbiBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnOjI2MDpcdHNlbGVjdCBJUF9NUk9VVEVfQ09NTU9OXG5uZXQvaXB2Ni9LY29uZmlnLTI2MS1cdGhlbHBcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82ND0xMDY9Q09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NDoxMDc6Q09ORklHX0lQX01ST1VURT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NC0xMDgtQ09ORklHX0lQX01VTFRJQ0FTVD15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL2NvbmZpZy5jb21tb249OTM9Q09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvY29uZmlnLmNvbW1vbjo5NDpDT05GSUdfSVBfTVJPVVRFPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9jb25maWcuY29tbW9uLTk1LUNPTkZJR19JUF9NVUxUSUNBU1Q9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3J3YXJkaW5nL2NvbmZpZz02PUNPTkZJR19EVU1NWT1tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm9yd2FyZGluZy9jb25maWc6NzpDT05GSUdfSVBfTVJPVVRFPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3J3YXJkaW5nL2NvbmZpZzo4OkNPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3J3YXJkaW5nL2NvbmZpZy05LUNPTkZJR19JUF9QSU1TTV9WMT15XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzNjkKCQkJCQkJCW91dHB1dDogMjM2CgkJCQkJCQl0aG91Z2h0czogMTM1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgSVB2NiBNdWx0aWNhc3QgUm91dGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHRhc2tlZCB3aXRoIGFuYWx5emluZyB0aGlzIHBhdGNoLCBhbmQgaGVyZSYjMzk7cyBteSBicmVha2Rvd24uIEZpcnN0IG9mZiwgSSBzZWUgdGhlIGNvcmUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQ6IGBJUFY2X01ST1VURWAsIGBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNgLCBhbmQgYElQVjZfUElNU01fVjJgLiBMZXQmIzM5O3MgY2xhcmlmeSB3aHksIGJlY2F1c2UgdGhlIHBhdGNoIG9ubHkgdG91Y2hlcyBgbmV0L2lwdjYvaXA2bXIuY2AgYW5kIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2AuIGBpcG1yX2Jhc2UuY2AgaXMgY29tcGlsZWQgdW5kZXIgYENPTkZJR19JUF9NUk9VVEVfQ09NTU9OYCwgd2hpY2ggZ2V0cyBlbmFibGVkIHdoZW4gd2UgaGF2ZSBlaXRoZXIgYElQVjZfTVJPVVRFYCBvciBgSVBfTVJPVVRFYC4gU2luY2UgdGhlIHBhdGNoICppc24mIzM5O3QqIHRvdWNoaW5nIElQdjQgc3BlY2lmaWMgcm91dGluZyBjb2RlIChsaWtlIGBuZXQvaXB2NC9pcG1yLmNgKSwgYElQVjZfTVJPVVRFYCBpcyB0aGUgY3JpdGljYWwgY29uZmlnIGhlcmUuIEFuZCBzaW5jZSBtdWx0aXBsZSB0YWJsZXMgYW5kIFBJTXYyIGFyZSByZWxldmFudCBwYXJ0cyBvZiBJUHY2IG11bHRpY2FzdCByb3V0aW5nLCB0aG9zZSBjb25maWd1cmF0aW9ucyBhcmUgYWxzbyBuZWNlc3NhcnkuIFNvLCB5ZXMsIHRoZSBzZXQgaW5jbHVkZXMgYElQVjZfTVJPVVRFYCwgYElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU2AsIGFuZCBgSVBWNl9QSU1TTV9WMmAuCgpKdXN0IHRvIGNvbmZpcm06IGBDT05GSUdfSVBWNl9NUk9VVEVgIGlzIGRlcGVuZGVudCBvbiBgQ09ORklHX0lQVjZgLiBgQ09ORklHX0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU2AgZGVwZW5kcyBvbiBgQ09ORklHX0lQVjZfTVJPVVRFYCBhbmQgc2VsZWN0cyBgQ09ORklHX0ZJQl9SVUxFU2AuIGBDT05GSUdfSVBWNl9QSU1TTV9WMmAgZGVwZW5kcyBvbiBgQ09ORklHX0lQVjZfTVJPVVRFYC4KCk5vdywgZm9jdXNpbmcgb24gdGhlIHN5bWJvbHMuIEkmIzM5O3ZlIGNvbXBpbGVkIGEgbGlzdDogYGlwNl9tcm91dGVfc2V0c29ja29wdGAsIGBpcDZfbXJvdXRlX2dldHNvY2tvcHRgLCBgaXA2bXJfaW9jdGxgLCBgaXA2bXJfY29tcGF0X2lvY3RsYCwgYGlwNl9tcl9pbnB1dGAsIGBpcDZfbXJfb3V0cHV0YCwgYGlwNm1yX3J0bV9nZXRyb3V0ZWAsIGBpcDZtcl9ydG1fZHVtcHJvdXRlYCwgYHBpbTZfcmN2YCwgYW5kIGByZWdfdmlmX3htaXRgLgoKTGV0JiMzOTtzIHZlcmlmeSB0aGVzZSBpbiB0aGUgcGF0Y2ggYW5kIGFsc28gdGhhdCB0aGV5IGFyZSBub3Qgc3RhdGljL2lubGluZWQsIHBlciBpbnN0cnVjdGlvbnMuIGBpcDZfbXJvdXRlX3NldHNvY2tvcHRgIGFuZCBgaXA2X21yb3V0ZV9nZXRzb2Nrb3B0YCBzZWVtIHRvIGJlIGV4cG9ydGVkLCBtZWFuaW5nIGdsb2JhbC4gU2FtZSB3aXRoIGBpcDZtcl9pb2N0bGAgYW5kIGBpcDZtcl9jb21wYXRfaW9jdGxgLiBgaXA2X21yX2lucHV0YCBhbmQgYGlwNl9tcl9vdXRwdXRgIGFsc28gYXBwZWFyIHRvIGJlIGV4cG9ydGVkIGFuZCBnbG9iYWwuCgpOb3csIGBpcDZtcl9ydG1fZ2V0cm91dGVgIGFuZCBgaXA2bXJfcnRtX2R1bXByb3V0ZWAgYXJlIHN0YXRpYyBidXQgcmVnaXN0ZXJlZCBhcyBuZXRsaW5rIGNhbGxiYWNrcy4gVGhhdCBtZWFucyB0aGVpciBhZGRyZXNzZXMgYXJlIGJlaW5nIHRha2VuLCBzbyB0aGV5IHdvbiYjMzk7dCBiZSBpbmxpbmVkLiBgcGltNl9yY3ZgIGlzIGFsc28gc3RhdGljLCBidXQgYSBwcm90b2NvbCBoYW5kbGVyIGFuZCBgcmVnX3ZpZl94bWl0YCBpcyBzdGF0aWMsIGJ1dCBhIG5ldGRldiBvcCAtLSBib3RoIGFyZSBmaW5lLiBUaGF0IG1lYW5zIHdlIGRvbiYjMzk7dCBoYXZlIHRvIGNoYW5nZSB0aGUgbGlzdC4KClNvLCB0aGUgZm9jdXMgc3ltYm9scyBhcmU6IGBpcDZfbXJvdXRlX3NldHNvY2tvcHRgLCBgaXA2X21yb3V0ZV9nZXRzb2Nrb3B0YCwgYGlwNm1yX2lvY3RsYCwgYGlwNm1yX2NvbXBhdF9pb2N0bGAsIGBpcDZfbXJfaW5wdXRgLCBgaXA2X21yX291dHB1dGAsIGBwaW02X3JjdmAsIGByZWdfdmlmX3htaXRgLCBgaXA2bXJfcnRtX2dldHJvdXRlYCwgYW5kIGBpcDZtcl9ydG1fZHVtcHJvdXRlYC4KCkFscmlnaHQsIGxldCYjMzk7cyB2ZXJpZnkgaWYgdGhlIHJlbGV2YW50IHN5bWJvbHMgYXJlIGluIHRoZSBwYXRjaC4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgaXA2bXJfcnRtX2dldHJvdXRlYCBhbmQgYGlwNm1yX3J0bV9kdW1wcm91dGVgIHRvIHVzZSBgaXA2bXJfZ2V0X3RhYmxlX2hvbGRgIGFuZCBgaXA2bXJfcHV0X3RhYmxlYCwgd2hpY2ggaXMgZ29vZC4gQWxzbywgYGlwNl9tcl9pbnB1dGAsIGBpcDZfbXJfb3V0cHV0YCwgYHBpbTZfcmN2YCwgYW5kIGByZWdfdmlmX3htaXRgIGFyZSBtb2RpZmllZC4gTGlrZXdpc2UsIGBpcDZfbXJvdXRlX3NldHNvY2tvcHRgLCBgaXA2X21yb3V0ZV9nZXRzb2Nrb3B0YCwgYGlwNm1yX2lvY3RsYCwgYW5kIGBpcDZtcl9jb21wYXRfaW9jdGxgIGFyZSB1cGRhdGVkLgoKQ2hlY2tpbmcgZm9yIGFueSBtaXNzZWQgZW50cnkgcG9pbnRzLi4uIEFoLCBJIHNlZSB0aGF0IGBtcm91dGU2X2lzX3NvY2tldGAgaXMgbW9kaWZpZWQgYXMgd2VsbCwgYWxvbmcgd2l0aCBgaXA2bXJfc2tfZG9uZWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50IQoKU28sIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgaGVyZSYjMzk7cyBteSBmaW5hbCBsaXN0IG9mIHN5bWJvbHMgdG8gaW5jbHVkZTogYGlwNl9tcm91dGVfc2V0c29ja29wdGAsIGBpcDZfbXJvdXRlX2dldHNvY2tvcHRgLCBgaXA2bXJfaW9jdGxgLCBgaXA2bXJfY29tcGF0X2lvY3RsYCwgYGlwNl9tcl9pbnB1dGAsIGBpcDZfbXJfb3V0cHV0YCwgYHBpbTZfcmN2YCwgYAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfTVJPVVRFJiMzNDssCiAgICAmIzM0O0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtJUFY2X1BJTVNNX1YyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwNl9tcm91dGVfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcDZtcl9pb2N0bCYjMzQ7LAogICAgJiMzNDtpcDZtcl9jb21wYXRfaW9jdGwmIzM0OywKICAgICYjMzQ7aXA2X21yX2lucHV0JiMzNDssCiAgICAmIzM0O2lwNl9tcl9vdXRwdXQmIzM0OywKICAgICYjMzQ7cGltNl9yY3YmIzM0OywKICAgICYjMzQ7cmVnX3ZpZl94bWl0JiMzNDssCiAgICAmIzM0O21yb3V0ZTZfaXNfc29ja2V0JiMzNDssCiAgICAmIzM0O2lwNm1yX3NrX2RvbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyByZWZlcmVuY2UgY291bnRpbmcgdG8gSVB2NiBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZXMgKHN0cnVjdCBtcl90YWJsZSkgdG8gZml4IHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMuIEl0IG1vZGlmaWVzIHZhcmlvdXMgZW50cnkgcG9pbnRzIChzb2NrZXQgb3B0aW9ucywgaW9jdGxzLCBuZXRsaW5rLCBwYWNrZXQgcngvdHgpIHRvIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIHRhYmxlIHdoaWxlIGluIHVzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfTVJPVVRFJiMzNDssCiAgICAmIzM0O0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtJUFY2X1BJTVNNX1YyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXA2X21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwNl9tcm91dGVfZ2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcDZtcl9pb2N0bCYjMzQ7LAogICAgJiMzNDtpcDZtcl9jb21wYXRfaW9jdGwmIzM0OywKICAgICYjMzQ7aXA2X21yX2lucHV0JiMzNDssCiAgICAmIzM0O2lwNl9tcl9vdXRwdXQmIzM0OywKICAgICYjMzQ7cGltNl9yY3YmIzM0OywKICAgICYjMzQ7cmVnX3ZpZl94bWl0JiMzNDssCiAgICAmIzM0O21yb3V0ZTZfaXNfc29ja2V0JiMzNDssCiAgICAmIzM0O2lwNm1yX3NrX2RvbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyByZWZlcmVuY2UgY291bnRpbmcgdG8gSVB2NiBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZXMgKHN0cnVjdCBtcl90YWJsZSkgdG8gZml4IHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMuIEl0IG1vZGlmaWVzIHZhcmlvdXMgZW50cnkgcG9pbnRzIChzb2NrZXQgb3B0aW9ucywgaW9jdGxzLCBuZXRsaW5rLCBwYWNrZXQgcngvdHgpIHRvIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIHRhYmxlIHdoaWxlIGluIHVzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMjo1OTozMS44MDEyMzM0MzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTMwMzMwODEyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2X01ST1VURVwiLFxuICAgIFwiSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXCIsXG4gICAgXCJJUFY2X1BJTVNNX1YyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X21yb3V0ZV9zZXRzb2Nrb3B0XCIsXG4gICAgXCJpcDZfbXJvdXRlX2dldHNvY2tvcHRcIixcbiAgICBcImlwNm1yX2lvY3RsXCIsXG4gICAgXCJpcDZtcl9jb21wYXRfaW9jdGxcIixcbiAgICBcImlwNl9tcl9pbnB1dFwiLFxuICAgIFwiaXA2X21yX291dHB1dFwiLFxuICAgIFwicGltNl9yY3ZcIixcbiAgICBcInJlZ192aWZfeG1pdFwiLFxuICAgIFwibXJvdXRlNl9pc19zb2NrZXRcIixcbiAgICBcImlwNm1yX3NrX2RvbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJlZmVyZW5jZSBjb3VudGluZyB0byBJUHY2IG11bHRpY2FzdCByb3V0aW5nIHRhYmxlcyAoc3RydWN0IG1yX3RhYmxlKSB0byBmaXggcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3Vlcy4gSXQgbW9kaWZpZXMgdmFyaW91cyBlbnRyeSBwb2ludHMgKHNvY2tldCBvcHRpb25zLCBpb2N0bHMsIG5ldGxpbmssIHBhY2tldCByeC90eCkgdG8gaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgdGFibGUgd2hpbGUgaW4gdXNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjI6NTk6MzEuODAxMjQxMTkzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzczMjE2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0ZGI1ZjhkYTA5ZTFhYmQ2MGJiYmVlNTQwNzc3YzRhYzBmMmM3MmQxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDI0IDIyOjU5OjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXJvdXRlX2Jhc2UuaCBiL2luY2x1ZGUvbGludXgvbXJvdXRlX2Jhc2UuaFxcbmluZGV4IDRkNTU4MjdlOTcwNTM3Li41MzZmYTMyNDYyMDI3MyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmhcXG5AQCAtMiw4ICsyLDEwIEBAXFxuICNkZWZpbmUgX19MSU5VWF9NUk9VVEVfQkFTRV9IXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWZjb3VudC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmhhc2h0YWJsZS10eXBlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpbmxvY2suaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvZmliX25vdGlmaWVyLmhcXHUwMDNlXFxuQEAgLTI0Miw2ICsyNDQsOCBAQCBzdHJ1Y3QgbXJfdGFibGVfb3BzIHtcXG4gICogQG1yb3V0ZV9kb19hc3NlcnQ6IFdoZXRoZXIgdG8gaW5mb3JtIHVzZXJzcGFjZSBvbiB3cm9uZyBpbmdyZXNzXFxuICAqIEBtcm91dGVfZG9fcGltOiBXaGV0aGVyIHRvIHJlY2VpdmUgSUdNUCBQSU12MVxcbiAgKiBAbXJvdXRlX3JlZ192aWZfbnVtOiBQSU0tZGV2aWNlIHZpZiBpbmRleFxcbisgKiBAcmVmY250OiBsaWZldGltZSBwaW5zIGZvciB0aGlzIHRhYmxlXFxuKyAqIEBkZXN0cm95X3dvcms6IHByb2Nlc3MtY29udGV4dCBjbGVhbnVwIGJlZm9yZSBmaW5hbCBSQ1UgZnJlZVxcbiAgKi9cXG4gc3RydWN0IG1yX3RhYmxlIHtcXG4gXFx0c3RydWN0IHJjdV93b3JrXFx0XFx0d29yaztcXG5AQCAtMjYxLDYgKzI2NSw4IEBAIHN0cnVjdCBtcl90YWJsZSB7XFxuIFxcdGJvb2xcXHRcXHRcXHRtcm91dGVfZG9fcGltO1xcbiBcXHRib29sXFx0XFx0XFx0bXJvdXRlX2RvX3dydmlmd2hvbGU7XFxuIFxcdGludFxcdFxcdFxcdG1yb3V0ZV9yZWdfdmlmX251bTtcXG4rXFx0cmVmY291bnRfdFxcdFxcdHJlZmNudDtcXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0XFx0ZGVzdHJveV93b3JrO1xcbiB9O1xcbiBcXG4gc3RhdGljIGlubGluZSBib29sIG1yX2Nhbl9mcmVlX3RhYmxlKHN0cnVjdCBuZXQgKm5ldClcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtcl9iYXNlLmMgYi9uZXQvaXB2NC9pcG1yX2Jhc2UuY1xcbmluZGV4IDg2N2IyNGJlZGVkMTEyLi45NzEwNzg5Y2ZhZjk5NCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pcG1yX2Jhc2UuY1xcbisrKyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jXFxuQEAgLTMyLDggKzMyLDEwIEBAIHN0YXRpYyB2b2lkIF9fbXJfZnJlZV90YWJsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4gXFx0c3RydWN0IG1yX3RhYmxlICptcnQgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbXJfdGFibGUsIHdvcmspO1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KTtcXG4gXFxuIFxcdHJobHRhYmxlX2Rlc3Ryb3koXFx1MDAyNm1ydC1cXHUwMDNlbWZjX2hhc2gpO1xcbitcXHRwdXRfbmV0KG5ldCk7XFxuIFxcdGtmcmVlKG1ydCk7XFxuIH1cXG4gXFxuQEAgLTU2LDExICs1OCwxMiBAQCBtcl90YWJsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCxcXG4gXFx0aWYgKCFtcnQpXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiBcXHRtcnQtXFx1MDAzZWlkID0gaWQ7XFxuLVxcdHdyaXRlX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0LCBuZXQpO1xcbitcXHR3cml0ZV9wbmV0KFxcdTAwMjZtcnQtXFx1MDAzZW5ldCwgZ2V0X25ldChuZXQpKTtcXG4gXFxuIFxcdG1ydC1cXHUwMDNlb3BzID0gKm9wcztcXG4gXFx0ZXJyID0gcmhsdGFibGVfaW5pdChcXHUwMDI2bXJ0LVxcdTAwM2VtZmNfaGFzaCwgbXJ0LVxcdTAwM2VvcHMucmh0X3BhcmFtcyk7XFxuIFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0cHV0X25ldChyZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KSk7XFxuIFxcdFxcdGtmcmVlKG1ydCk7XFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuIFxcdH1cXG5AQCAtNzIsNiArNzUsNyBAQCBtcl90YWJsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCxcXG4gXFx0dGltZXJfc2V0dXAoXFx1MDAyNm1ydC1cXHUwMDNlaXBtcl9leHBpcmVfdGltZXIsIGV4cGlyZV9mdW5jLCAwKTtcXG4gXFxuIFxcdG1ydC1cXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtID0gLTE7XFxuK1xcdHJlZmNvdW50X3NldChcXHUwMDI2bXJ0LVxcdTAwM2VyZWZjbnQsIDEpO1xcbiBcXHR0YWJsZV9zZXQobXJ0LCBuZXQpO1xcbiBcXHRyZXR1cm4gbXJ0O1xcbiB9XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jXFxuaW5kZXggNjA0YTU4ODM4OTAxYTcuLjk0YmIwMGJkZmY5OGM4IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNm1yLmNcXG4rKysgYi9uZXQvaXB2Ni9pcDZtci5jXFxuQEAgLTg3LDYgKzg3LDExIEBAIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbXJ0X2NhY2hlcCBfX3JlYWRfbW9zdGx5O1xcbiBzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpO1xcbiBzdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRldl9raWxsX2xpc3QpO1xcbitzdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4rc3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfZ2V0X3RhYmxlX2hvbGQoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpO1xcbitzdGF0aWMgdm9pZCBpcDZtcl9wdXRfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQpO1xcbitzdGF0aWMgdm9pZCBfX2lwNm1yX3B1dF90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZGV2X2tpbGxfbGlzdCk7XFxuIFxcbiBzdGF0aWMgdm9pZCBpcDZfbXJfZm9yd2FyZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbkBAIC0xNzksNyArMTg0LDcgQEAgc3RhdGljIGludCBpcDZtcl9ydWxlX2FjdGlvbihzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsIHN0cnVjdCBmbG93aSAqZmxwLFxcbiBcXG4gXFx0YXJnLVxcdTAwM2V0YWJsZSA9IGZpYl9ydWxlX2dldF90YWJsZShydWxlLCBhcmcpO1xcbiBcXG4tXFx0bXJ0ID0gX19pcDZtcl9nZXRfdGFibGUocnVsZS1cXHUwMDNlZnJfbmV0LCBhcmctXFx1MDAzZXRhYmxlKTtcXG4rXFx0bXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQocnVsZS1cXHUwMDNlZnJfbmV0LCBhcmctXFx1MDAzZXRhYmxlKTtcXG4gXFx0aWYgKCFtcnQpXFxuIFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiBcXHRyZXMtXFx1MDAzZW1ydCA9IG1ydDtcXG5AQCAtMjcxLDcgKzI3Niw4IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2bXJfcnVsZXNfZXhpdF9ydG5sKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtcnQsIG5leHQsIFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYubXI2X3RhYmxlcywgbGlzdCkge1xcbiBcXHRcXHRsaXN0X2RlbF9yY3UoXFx1MDAyNm1ydC1cXHUwMDNlbGlzdCk7XFxuLVxcdFxcdGlwNm1yX2ZyZWVfdGFibGUobXJ0LCBkZXZfa2lsbF9saXN0KTtcXG4rXFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuK1xcdFxcdF9faXA2bXJfcHV0X3RhYmxlKG1ydCwgZGV2X2tpbGxfbGlzdCk7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMzE0LDcgKzMyMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKl9faXA2bXJfZ2V0X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKVxcbiBzdGF0aWMgaW50IGlwNm1yX2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k2ICpmbHA2LFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IG1yX3RhYmxlICoqbXJ0KVxcbiB7XFxuLVxcdCptcnQgPSByY3VfZGVyZWZlcmVuY2UobmV0LVxcdTAwM2VpcHY2Lm1ydDYpO1xcbitcXHQqbXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQobmV0LCBSVDZfVEFCTEVfREZMVCk7XFxuIFxcdGlmICghKm1ydClcXG4gXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuIFxcdHJldHVybiAwO1xcbkBAIC0zNDIsNyArMzQ4LDggQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZtcl9ydWxlc19leGl0X3J0bmwoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobmV0LVxcdTAwM2VpcHY2Lm1ydDYsIDEpO1xcbiBcXG4gXFx0UkNVX0lOSVRfUE9JTlRFUihuZXQtXFx1MDAzZWlwdjYubXJ0NiwgTlVMTCk7XFxuLVxcdGlwNm1yX2ZyZWVfdGFibGUobXJ0LCBkZXZfa2lsbF9saXN0KTtcXG4rXFx0c3luY2hyb25pemVfcmN1KCk7XFxuK1xcdF9faXA2bXJfcHV0X3RhYmxlKG1ydCwgZGV2X2tpbGxfbGlzdCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgaXA2bXJfcnVsZXNfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuQEAgLTM2OCw2ICszNzUsNDQgQEAgc3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfZ2V0X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKVxcbiBcXHRyZXR1cm4gbXJ0O1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9nZXRfdGFibGVfaG9sZChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZClcXG4re1xcbitcXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bXJ0ID0gX19pcDZtcl9nZXRfdGFibGUobmV0LCBpZCk7XFxuK1xcdGlmIChtcnQgXFx1MDAyNlxcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2bXJ0LVxcdTAwM2VyZWZjbnQpKVxcbitcXHRcXHRtcnQgPSBOVUxMO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdHJldHVybiBtcnQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIF9faXA2bXJfcHV0X3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbit7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgKmRldl9raWxsX2xpc3Q7XFxuK1xcdExJU1RfSEVBRChsb2NhbF9kZXZfa2lsbF9saXN0KTtcXG4rXFxuK1xcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZtcnQtXFx1MDAzZXJlZmNudCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmICghbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSkge1xcbitcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZtcnQtXFx1MDAzZWRlc3Ryb3lfd29yayk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0ZGV2X2tpbGxfbGlzdCA9IGhlYWQgPyBoZWFkIDogXFx1MDAyNmxvY2FsX2Rldl9raWxsX2xpc3Q7XFxuK1xcdGlwNm1yX2ZyZWVfdGFibGUobXJ0LCBkZXZfa2lsbF9saXN0KTtcXG4rXFx0aWYgKCFoZWFkKVxcbitcXHRcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KGRldl9raWxsX2xpc3QpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpcDZtcl9wdXRfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQpXFxuK3tcXG4rXFx0X19pcDZtcl9wdXRfdGFibGUobXJ0LCBOVUxMKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBpcDZtcl9oYXNoX2NtcChzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyAqYXJnLFxcbiBcXHRcXHRcXHQgIGNvbnN0IHZvaWQgKnB0cilcXG4ge1xcbkBAIC00MTMsOCArNDU4LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwNm1yX25ld190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZClcXG4gXFx0aWYgKG1ydClcXG4gXFx0XFx0cmV0dXJuIG1ydDtcXG4gXFxuLVxcdHJldHVybiBtcl90YWJsZV9hbGxvYyhuZXQsIGlkLCBcXHUwMDI2aXA2bXJfbXJfdGFibGVfb3BzLFxcbi1cXHRcXHRcXHQgICAgICBpcG1yX2V4cGlyZV9wcm9jZXNzLCBpcDZtcl9uZXdfdGFibGVfc2V0KTtcXG4rXFx0bXJ0ID0gbXJfdGFibGVfYWxsb2MobmV0LCBpZCwgXFx1MDAyNmlwNm1yX21yX3RhYmxlX29wcyxcXG4rXFx0XFx0XFx0ICAgICBpcG1yX2V4cGlyZV9wcm9jZXNzLCBpcDZtcl9uZXdfdGFibGVfc2V0KTtcXG4rXFx0aWYgKCFJU19FUlIobXJ0KSlcXG4rXFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZtcnQtXFx1MDAzZWRlc3Ryb3lfd29yaywgaXA2bXJfZnJlZV90YWJsZV93b3JrKTtcXG4rXFxuK1xcdHJldHVybiBtcnQ7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGlwNm1yX2ZyZWVfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQsXFxuQEAgLTQyMyw4ICs0NzIsNiBAQCBzdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KTtcXG4gXFx0TElTVF9IRUFEKGlwNm1yX2Rldl9raWxsX2xpc3QpO1xcbiBcXG4tXFx0V0FSTl9PTl9PTkNFKCFtcl9jYW5fZnJlZV90YWJsZShuZXQpKTtcXG4tXFxuIFxcdHRpbWVyX3NodXRkb3duX3N5bmMoXFx1MDAyNm1ydC1cXHUwMDNlaXBtcl9leHBpcmVfdGltZXIpO1xcbiBcXHRtcm91dGVfY2xlYW5fdGFibGVzKG1ydCwgTVJUNl9GTFVTSF9NSUZTIHwgTVJUNl9GTFVTSF9NSUZTX1NUQVRJQyB8XFxuIFxcdFxcdFxcdCAgICBNUlQ2X0ZMVVNIX01GQyB8IE1SVDZfRkxVU0hfTUZDX1NUQVRJQyxcXG5AQCAtNDM2LDYgKzQ4MywxNyBAQCBzdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbiBcXHRsaXN0X3NwbGljZShcXHUwMDI2aXA2bXJfZGV2X2tpbGxfbGlzdCwgZGV2X2tpbGxfbGlzdCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGlwNm1yX2ZyZWVfdGFibGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IG1yX3RhYmxlICptcnQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG1yX3RhYmxlLCBkZXN0cm95X3dvcmspO1xcbitcXHRMSVNUX0hFQUQoZGV2X2tpbGxfbGlzdCk7XFxuK1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFx0aXA2bXJfZnJlZV90YWJsZShtcnQsIFxcdTAwMjZkZXZfa2lsbF9saXN0KTtcXG4rXFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShcXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK31cXG4rXFxuICNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbiAvKiBUaGUgL3Byb2MgaW50ZXJmYWNlcyB0byBtdWx0aWNhc3Qgcm91dGluZ1xcbiAgKiAvcHJvYy9pcDZfbXJfY2FjaGUgL3Byb2MvaXA2X21yX3ZpZlxcbkBAIC01NjksNyArNjI3LDcgQEAgc3RhdGljIGludCBwaW02X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRzdHJ1Y3QgaXB2NmhkciAgICplbmNhcDtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgICpyZWdfZGV2ID0gTlVMTDtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxuLVxcdHN0cnVjdCBtcl90YWJsZSAqbXJ0O1xcbitcXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBmbG93aTYgZmw2ID0ge1xcbiBcXHRcXHQuZmxvd2k2X2lpZlxcdD0gc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXgsXFxuIFxcdFxcdC5mbG93aTZfbWFya1xcdD0gc2tiLVxcdTAwM2VtYXJrLFxcbkBAIC02MTcsOSArNjc1LDEyIEBAIHN0YXRpYyBpbnQgcGltNl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c2tiX3R1bm5lbF9yeChza2IsIHJlZ19kZXYsIGRldl9uZXQocmVnX2RldikpO1xcbiBcXG4gXFx0bmV0aWZfcngoc2tiKTtcXG4rXFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gIGRyb3A6XFxuK1xcdGlmIChtcnQpXFxuK1xcdFxcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbiBcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNjM0LDcgKzY5NSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XFxuLVxcdHN0cnVjdCBtcl90YWJsZSAqbXJ0O1xcbitcXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBmbG93aTYgZmw2ID0ge1xcbiBcXHRcXHQuZmxvd2k2X29pZlxcdD0gZGV2LVxcdTAwM2VpZmluZGV4LFxcbiBcXHRcXHQuZmxvd2k2X2lpZlxcdD0gc2tiLVxcdTAwM2Vza2JfaWlmID8gOiBMT09QQkFDS19JRklOREVYLFxcbkBAIC02NTUsMTIgKzcxNiwxNSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgcmVnX3ZpZl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlwNm1yX2NhY2hlX3JlcG9ydChtcnQsIHNrYiwgUkVBRF9PTkNFKG1ydC1cXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtKSxcXG4gXFx0XFx0XFx0ICAgTVJUNk1TR19XSE9MRVBLVCk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4gXFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIFxcbiB0eF9sb29rdXBfZXJyOlxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gdHhfZXJyOlxcbitcXHRpZiAobXJ0KVxcbitcXHRcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4gXFx0REVWX1NUQVRTX0lOQyhkZXYsIHR4X2Vycm9ycyk7XFxuIFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbkBAIC0xNjE1LDEyICsxNjc5LDEzIEBAIHN0YXRpYyB2b2lkIG1yb3V0ZV9jbGVhbl90YWJsZXMoc3RydWN0IG1yX3RhYmxlICptcnQsIGludCBmbGFncyxcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGlwNm1yX3NrX2luaXQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBzb2NrICpzaylcXG4rc3RhdGljIGludCBfX2lwNm1yX3NrX2luaXQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xcbiBcXG4tXFx0cnRubF9sb2NrKCk7XFxuK1xcdEFTU0VSVF9SVE5MKCk7XFxuK1xcbiBcXHRzcGluX2xvY2soXFx1MDAyNm1ydF9sb2NrKTtcXG4gXFx0aWYgKHJ0bmxfZGVyZWZlcmVuY2UobXJ0LVxcdTAwM2Vtcm91dGVfc2spKSB7XFxuIFxcdFxcdGVyciA9IC1FQUREUklOVVNFO1xcbkBAIC0xNjI4LDYgKzE2OTMsNyBAQCBzdGF0aWMgaW50IGlwNm1yX3NrX2luaXQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBzb2NrICpzaylcXG4gXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1ydC1cXHUwMDNlbXJvdXRlX3NrLCBzayk7XFxuIFxcdFxcdHNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfUkNVX0ZSRUUpO1xcbiBcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXFx1MDAzZW1jX2ZvcndhcmRpbmcpO1xcbitcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNm1ydC1cXHUwMDNlcmVmY250KTtcXG4gXFx0fVxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2bXJ0X2xvY2spO1xcbiBcXG5AQCAtMTYzNiw3ICsxNzAyLDYgQEAgc3RhdGljIGludCBpcDZtcl9za19pbml0KHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgTkVUQ09ORkFfTUNfRk9SV0FSRElORyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBORVRDT05GQV9JRklOREVYX0FMTCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBuZXQtXFx1MDAzZWlwdjYuZGV2Y29uZl9hbGwpO1xcbi1cXHRydG5sX3VubG9jaygpO1xcbiBcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbkBAIC0xNjQ2LDYgKzE3MTEsNyBAQCBpbnQgaXA2bXJfc2tfZG9uZShzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcXG4gXFx0c3RydWN0IGlwdjZfZGV2Y29uZiAqZGV2Y29uZjtcXG4gXFx0TElTVF9IRUFEKGRldl9raWxsX2xpc3QpO1xcbitcXHRzdHJ1Y3QgbXJfdGFibGUgKmZyZWVfbXJ0ID0gTlVMTDtcXG4gXFx0c3RydWN0IG1yX3RhYmxlICptcnQ7XFxuIFxcdGludCBlcnIgPSAtRUFDQ0VTO1xcbiBcXG5AQCAtMTY3NSw2ICsxNzQxLDE1IEBAIGludCBpcDZtcl9za19kb25lKHN0cnVjdCBzb2NrICpzaylcXG4gXFxuIFxcdFxcdFxcdG1yb3V0ZV9jbGVhbl90YWJsZXMobXJ0LCBNUlQ2X0ZMVVNIX01JRlMgfCBNUlQ2X0ZMVVNIX01GQyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZkZXZfa2lsbF9saXN0KTtcXG4rXFx0XFx0XFx0aWYgKG1ydC1cXHUwMDNlaWQgIT0gUlQ2X1RBQkxFX0RGTFQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICFSRUFEX09OQ0UobXJ0LVxcdTAwM2VtYXh2aWYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAhUkVBRF9PTkNFKG1ydC1cXHUwMDNlY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBsaXN0X2VtcHR5KFxcdTAwMjZtcnQtXFx1MDAzZW1mY19jYWNoZV9saXN0KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgbGlzdF9lbXB0eShcXHUwMDI2bXJ0LVxcdTAwM2VtZmNfdW5yZXNfcXVldWUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBSRUFEX09OQ0UobXJ0LVxcdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pIFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRcXHRsaXN0X2RlbF9yY3UoXFx1MDAyNm1ydC1cXHUwMDNlbGlzdCk7XFxuK1xcdFxcdFxcdFxcdGZyZWVfbXJ0ID0gbXJ0O1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGVyciA9IDA7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuQEAgLTE2ODIsNiArMTc1NywxNCBAQCBpbnQgaXA2bXJfc2tfZG9uZShzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoXFx1MDAyNmRldl9raWxsX2xpc3QpO1xcbiBcXHRydG5sX3VubG9jaygpO1xcbiBcXG4rXFx0aWYgKCFlcnIpXFxuK1xcdFxcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbitcXG4rXFx0aWYgKGZyZWVfbXJ0KSB7XFxuK1xcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbitcXHRcXHRpcDZtcl9wdXRfdGFibGUoZnJlZV9tcnQpO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbkBAIC0xNjkzLDExICsxNzc2LDE1IEBAIGJvb2wgbXJvdXRlNl9pc19zb2NrZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHQuZmxvd2k2X29pZlxcdD0gc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXgsXFxuIFxcdFxcdC5mbG93aTZfbWFya1xcdD0gc2tiLVxcdTAwM2VtYXJrLFxcbiBcXHR9O1xcbitcXHRib29sIHJldDtcXG4gXFxuIFxcdGlmIChpcDZtcl9maWJfbG9va3VwKG5ldCwgXFx1MDAyNmZsNiwgXFx1MDAyNm1ydCkgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdHJldHVybiByY3VfYWNjZXNzX3BvaW50ZXIobXJ0LVxcdTAwM2Vtcm91dGVfc2spO1xcbitcXHRyZXQgPSByY3VfYWNjZXNzX3BvaW50ZXIobXJ0LVxcdTAwM2Vtcm91dGVfc2spO1xcbitcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChtcm91dGU2X2lzX3NvY2tldCk7XFxuIFxcbkBAIC0xNzE2LDIwICsxODAzLDI0IEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4gXFx0c3RydWN0IG1mNmNjdGwgbWZjO1xcbiBcXHRtaWZpX3QgbWlmaTtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xcbi1cXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcXG4rXFx0c3RydWN0IG1yX3RhYmxlICptcnQgPSBOVUxMO1xcbitcXHR1MzIgdGFibGUgPSByYXc2X3NrKHNrKS1cXHUwMDNlaXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUO1xcbiBcXG4gXFx0aWYgKHNrLVxcdTAwM2Vza190eXBlICE9IFNPQ0tfUkFXIHx8XFxuIFxcdCAgICBpbmV0X3NrKHNrKS1cXHUwMDNlaW5ldF9udW0gIT0gSVBQUk9UT19JQ01QVjYpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdG1ydCA9IGlwNm1yX2dldF90YWJsZShuZXQsIHJhdzZfc2soc2spLVxcdTAwM2VpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpO1xcbi1cXHRpZiAoIW1ydClcXG4tXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuLVxcbi1cXHRpZiAob3B0bmFtZSAhPSBNUlQ2X0lOSVQpIHtcXG4rXFx0aWYgKG9wdG5hbWUgIT0gTVJUNl9JTklUIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBvcHRuYW1lICE9IE1SVDZfVEFCTEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG9wdG5hbWUgIT0gTVJUNl9ET05FKSB7XFxuK1xcdFxcdG1ydCA9IGlwNm1yX2dldF90YWJsZV9ob2xkKG5ldCwgdGFibGUpO1xcbitcXHRcXHRpZiAoIW1ydClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcdFxcdGlmIChzayAhPSByY3VfYWNjZXNzX3BvaW50ZXIobXJ0LVxcdTAwM2Vtcm91dGVfc2spIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAhbnNfY2FwYWJsZShuZXQtXFx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKVxcbitcXHRcXHQgICAgIW5zX2NhcGFibGUobmV0LVxcdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkge1xcbitcXHRcXHRcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuQEAgLTE3MzcsMzIgKzE4MjgsNDEgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbiBcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0XFx0cmV0dXJuIGlwNm1yX3NrX2luaXQobXJ0LCBzayk7XFxuK1xcdFxcdHJ0bmxfbG9jaygpO1xcbitcXHRcXHRtcnQgPSBpcDZtcl9uZXdfdGFibGUobmV0LCB0YWJsZSk7XFxuK1xcdFxcdGlmICghSVNfRVJSKG1ydCkpXFxuK1xcdFxcdFxcdHJldCA9IF9faXA2bXJfc2tfaW5pdChtcnQsIHNrKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKG1ydCk7XFxuK1xcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRjYXNlIE1SVDZfRE9ORTpcXG4gXFx0XFx0cmV0dXJuIGlwNm1yX3NrX2RvbmUoc2spO1xcbiBcXG4gXFx0Y2FzZSBNUlQ2X0FERF9NSUY6XFxuIFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YodmlmKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2dmlmLCBvcHR2YWwsIHNpemVvZih2aWYpKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XFxuIFxcdFxcdGlmICh2aWYubWlmNmNfbWlmaSBcXHUwMDNlPSBNQVhNSUZTKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVORklMRTtcXG4rXFx0XFx0XFx0Z290byBvdXRfcHV0X3RhYmxlX2VuZmlsZTtcXG4gXFx0XFx0cnRubF9sb2NrKCk7XFxuIFxcdFxcdHJldCA9IG1pZjZfYWRkKG5ldCwgbXJ0LCBcXHUwMDI2dmlmLFxcbiBcXHRcXHRcXHQgICAgICAgc2sgPT0gcnRubF9kZXJlZmVyZW5jZShtcnQtXFx1MDAzZW1yb3V0ZV9zaykpO1xcbiBcXHRcXHRydG5sX3VubG9jaygpO1xcbitcXHRcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdGNhc2UgTVJUNl9ERUxfTUlGOlxcbiBcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKG1pZmlfdCkpXFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIG91dF9wdXRfdGFibGVfZWludmFsO1xcbiBcXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNm1pZmksIG9wdHZhbCwgc2l6ZW9mKG1pZmlfdCkpKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0XFx0XFx0Z290byBvdXRfcHV0X3RhYmxlX2VmYXVsdDtcXG4gXFx0XFx0cnRubF9sb2NrKCk7XFxuIFxcdFxcdHJldCA9IG1pZjZfZGVsZXRlKG1ydCwgbWlmaSwgMCwgTlVMTCk7XFxuIFxcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcdFxcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0LypcXG5AQCAtMTc3Niw5ICsxODc2LDkgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbiBcXHRjYXNlIE1SVDZfQUREX01GQ19QUk9YWTpcXG4gXFx0Y2FzZSBNUlQ2X0RFTF9NRkNfUFJPWFk6XFxuIFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YobWZjKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2bWZjLCBvcHR2YWwsIHNpemVvZihtZmMpKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XFxuIFxcdFxcdGlmIChwYXJlbnQgPT0gMClcXG4gXFx0XFx0XFx0cGFyZW50ID0gbWZjLm1mNmNjX3BhcmVudDtcXG4gXFxuQEAgLTE3OTMsNiArMTg5Myw3IEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIHBhcmVudCk7XFxuIFxcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5tZmNfbXV0ZXgpO1xcbitcXHRcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdGNhc2UgTVJUNl9GTFVTSDpcXG5AQCAtMTgwMSwxNCArMTkwMiwxNSBAQCBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuIFxcdFxcdGludCBmbGFncztcXG4gXFxuIFxcdFxcdGlmIChvcHRsZW4gIT0gc2l6ZW9mKGZsYWdzKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2ZmxhZ3MsIG9wdHZhbCwgc2l6ZW9mKGZsYWdzKSkpXFxuLVxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRcXHRcXHRnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0O1xcbiBcXG4gXFx0XFx0cnRubF9sb2NrKCk7XFxuIFxcdFxcdG1yb3V0ZV9jbGVhbl90YWJsZXMobXJ0LCBmbGFncywgXFx1MDAyNmRldl9raWxsX2xpc3QpO1xcbiBcXHRcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KFxcdTAwMjZkZXZfa2lsbF9saXN0KTtcXG4gXFx0XFx0cnRubF91bmxvY2soKTtcXG4rXFx0XFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbkBAIC0xODIwLDEwICsxOTIyLDExIEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4gXFx0XFx0aW50IHY7XFxuIFxcbiBcXHRcXHRpZiAob3B0bGVuICE9IHNpemVvZih2KSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2diwgb3B0dmFsLCBzaXplb2YodikpKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0XFx0XFx0Z290byBvdXRfcHV0X3RhYmxlX2VmYXVsdDtcXG4gXFx0XFx0V1JJVEVfT05DRShtcnQtXFx1MDAzZW1yb3V0ZV9kb19hc3NlcnQsIHYpO1xcbitcXHRcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuQEAgLTE4MzQsOSArMTkzNyw5IEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4gXFx0XFx0aW50IHY7XFxuIFxcbiBcXHRcXHRpZiAob3B0bGVuICE9IHNpemVvZih2KSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2diwgb3B0dmFsLCBzaXplb2YodikpKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0XFx0XFx0Z290byBvdXRfcHV0X3RhYmxlX2VmYXVsdDtcXG4gXFxuIFxcdFxcdGRvX3dybWlmd2hvbGUgPSAodiA9PSBNUlQ2TVNHX1dSTUlGV0hPTEUpO1xcbiBcXHRcXHR2ID0gISF2O1xcbkBAIC0xODQ4LDYgKzE5NTEsNyBAQCBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuIFxcdFxcdFxcdFdSSVRFX09OQ0UobXJ0LVxcdTAwM2Vtcm91dGVfZG9fd3J2aWZ3aG9sZSwgZG9fd3JtaWZ3aG9sZSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cnRubF91bmxvY2soKTtcXG4rXFx0XFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFxuQEAgLTE4NjQsMTggKzE5NjgsMjIgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbiBcXHRcXHQvKiBcXFwicGltNnJlZyV1XFxcIiBzaG91bGQgbm90IGV4Y2VlZCAxNiBieXRlcyAoSUZOQU1TSVopICovXFxuIFxcdFxcdGlmICh2ICE9IFJUX1RBQkxFX0RFRkFVTFQgXFx1MDAyNlxcdTAwMjYgdiBcXHUwMDNlPSAxMDAwMDAwMDApXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHRpZiAoc2sgPT0gcmN1X2FjY2Vzc19wb2ludGVyKG1ydC1cXHUwMDNlbXJvdXRlX3NrKSlcXG4rXFxuK1xcdFxcdG1ydCA9IGlwNm1yX2dldF90YWJsZV9ob2xkKG5ldCwgdGFibGUpO1xcbitcXHRcXHRpZiAobXJ0IFxcdTAwMjZcXHUwMDI2IHNrID09IHJjdV9hY2Nlc3NfcG9pbnRlcihtcnQtXFx1MDAzZW1yb3V0ZV9zaykpIHtcXG4rXFx0XFx0XFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKCFuc19jYXBhYmxlKG5ldC1cXHUwMDNldXNlcl9ucywgQ0FQX05FVF9BRE1JTikpIHtcXG4rXFx0XFx0XFx0aWYgKG1ydClcXG4rXFx0XFx0XFx0XFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChtcnQpXFxuK1xcdFxcdFxcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbiBcXG4tXFx0XFx0cnRubF9sb2NrKCk7XFxuLVxcdFxcdHJldCA9IDA7XFxuLVxcdFxcdG1ydCA9IGlwNm1yX25ld190YWJsZShuZXQsIHYpO1xcbi1cXHRcXHRpZiAoSVNfRVJSKG1ydCkpXFxuLVxcdFxcdFxcdHJldCA9IFBUUl9FUlIobXJ0KTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRyYXc2X3NrKHNrKS1cXHUwMDNlaXA2bXJfdGFibGUgPSB2O1xcbi1cXHRcXHRydG5sX3VubG9jaygpO1xcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyYXc2X3NrKHNrKS1cXHUwMDNlaXA2bXJfdGFibGUgPSB2O1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiAjZW5kaWZcXG4gXFx0LypcXG5AQCAtMTg4Myw4ICsxOTkxLDI1IEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4gXFx0ICpcXHRzZXQuXFxuIFxcdCAqL1xcbiBcXHRkZWZhdWx0OlxcbitcXHRcXHRpZiAobXJ0KVxcbitcXHRcXHRcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcXG4gXFx0fVxcbitcXG4rb3V0X3B1dF90YWJsZV9lZmF1bHQ6XFxuK1xcdGlmIChtcnQpXFxuK1xcdFxcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbitcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK291dF9wdXRfdGFibGVfZWludmFsOlxcbitcXHRpZiAobXJ0KVxcbitcXHRcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4rXFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitvdXRfcHV0X3RhYmxlX2VuZmlsZTpcXG4rXFx0aWYgKG1ydClcXG4rXFx0XFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuK1xcdHJldHVybiAtRU5GSUxFO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0xODk1LDYgKzIwMjAsNyBAQCBpbnQgaXA2X21yb3V0ZV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuIFxcdFxcdFxcdCAgc29ja3B0cl90IG9wdGxlbilcXG4ge1xcbiBcXHRpbnQgb2xyO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4gXFx0aW50IHZhbDtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xcbiBcXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcXG5AQCAtMTkwMyw3ICsyMDI5LDcgQEAgaW50IGlwNl9tcm91dGVfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbiBcXHQgICAgaW5ldF9zayhzayktXFx1MDAzZWluZXRfbnVtICE9IElQUFJPVE9fSUNNUFY2KVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbi1cXHRtcnQgPSBpcDZtcl9nZXRfdGFibGUobmV0LCByYXc2X3NrKHNrKS1cXHUwMDNlaXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTtcXG4rXFx0bXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQobmV0LCByYXc2X3NrKHNrKS1cXHUwMDNlaXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTtcXG4gXFx0aWYgKCFtcnQpXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG5AQCAtMTkyMCwyNiArMjA0NiwzMyBAQCBpbnQgaXA2X21yb3V0ZV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuIFxcdFxcdHZhbCA9IFJFQURfT05DRShtcnQtXFx1MDAzZW1yb3V0ZV9kb19hc3NlcnQpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4tXFx0XFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcXG4rXFx0XFx0cmV0ID0gLUVOT1BST1RPT1BUO1xcbitcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZvbHIsIG9wdGxlbiwgc2l6ZW9mKGludCkpKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZvbHIsIG9wdGxlbiwgc2l6ZW9mKGludCkpKSB7XFxuK1xcdFxcdHJldCA9IC1FRkFVTFQ7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcbiBcXHRvbHIgPSBtaW5fdChpbnQsIG9sciwgc2l6ZW9mKGludCkpO1xcbi1cXHRpZiAob2xyIFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmIChvbHIgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcbi1cXHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXFx1MDAyNm9sciwgc2l6ZW9mKGludCkpKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tXFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIFxcdTAwMjZ2YWwsIG9scikpXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXHRyZXR1cm4gMDtcXG4rXFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFxcdTAwMjZvbHIsIHNpemVvZihpbnQpKSB8fFxcbitcXHQgICAgY29weV90b19zb2NrcHRyKG9wdHZhbCwgXFx1MDAyNnZhbCwgb2xyKSlcXG4rXFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4rb3V0OlxcbitcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gLypcXG4gICpcXHRUaGUgSVAgbXVsdGljYXN0IGlvY3RsIHN1cHBvcnQgcm91dGluZXMuXFxuICAqL1xcbitcXG4gaW50IGlwNm1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCAqYXJnKVxcbiB7XFxuIFxcdHN0cnVjdCBzaW9jX3NnX3JlcTYgKnNyO1xcbkBAIC0xOTQ5LDcgKzIwODIsNyBAQCBpbnQgaXA2bXJfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkICphcmcpXFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcXG4gXFx0c3RydWN0IG1yX3RhYmxlICptcnQ7XFxuIFxcbi1cXHRtcnQgPSBpcDZtcl9nZXRfdGFibGUobmV0LCByYXc2X3NrKHNrKS1cXHUwMDNlaXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTtcXG4rXFx0bXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQobmV0LCByYXc2X3NrKHNrKS1cXHUwMDNlaXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTtcXG4gXFx0aWYgKCFtcnQpXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG5AQCAtMTk1Nyw3ICsyMDkwLDcgQEAgaW50IGlwNm1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCAqYXJnKVxcbiBcXHRjYXNlIFNJT0NHRVRNSUZDTlRfSU42OlxcbiBcXHRcXHR2ciA9IChzdHJ1Y3Qgc2lvY19taWZfcmVxNiAqKWFyZztcXG4gXFx0XFx0aWYgKHZyLVxcdTAwM2VtaWZpIFxcdTAwM2U9IG1ydC1cXHUwMDNlbWF4dmlmKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0Z290byBvdXRfcHV0X3RhYmxlX2VpbnZhbDtcXG4gXFx0XFx0dnItXFx1MDAzZW1pZmkgPSBhcnJheV9pbmRleF9ub3NwZWModnItXFx1MDAzZW1pZmksIG1ydC1cXHUwMDNlbWF4dmlmKTtcXG4gXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRcXHR2aWYgPSBcXHUwMDI2bXJ0LVxcdTAwM2V2aWZfdGFibGVbdnItXFx1MDAzZW1pZmldO1xcbkBAIC0xOTY3LDkgKzIxMDAsMTEgQEAgaW50IGlwNm1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCAqYXJnKVxcbiBcXHRcXHRcXHR2ci1cXHUwMDNlaWJ5dGVzID0gUkVBRF9PTkNFKHZpZi1cXHUwMDNlYnl0ZXNfaW4pO1xcbiBcXHRcXHRcXHR2ci1cXHUwMDNlb2J5dGVzID0gUkVBRF9PTkNFKHZpZi1cXHUwMDNlYnl0ZXNfb3V0KTtcXG4gXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdFxcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuIFxcdFxcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcXG4gXFx0Y2FzZSBTSU9DR0VUU0dDTlRfSU42OlxcbiBcXHRcXHRzciA9IChzdHJ1Y3Qgc2lvY19zZ19yZXE2ICopYXJnO1xcbkBAIC0xOTgyLDE1ICsyMTE3LDIxIEBAIGludCBpcDZtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgKmFyZylcXG4gXFx0XFx0XFx0c3ItXFx1MDAzZWJ5dGVjbnQgPSBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZjLVxcdTAwM2VfYy5tZmNfdW4ucmVzLmJ5dGVzKTtcXG4gXFx0XFx0XFx0c3ItXFx1MDAzZXdyb25nX2lmID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2Yy1cXHUwMDNlX2MubWZjX3VuLnJlcy53cm9uZ19pZik7XFxuIFxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbiBcXHRcXHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XFxuIFxcdGRlZmF1bHQ6XFxuK1xcdFxcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xcbiBcXHR9XFxuLX1cXG4gXFxuK291dF9wdXRfdGFibGVfZWludmFsOlxcbitcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4rXFx0cmV0dXJuIC1FSU5WQUw7XFxuK31cXG4gI2lmZGVmIENPTkZJR19DT01QQVRcXG4gc3RydWN0IGNvbXBhdF9zaW9jX3NnX3JlcTYge1xcbiBcXHRzdHJ1Y3Qgc29ja2FkZHJfaW42IHNyYztcXG5AQCAtMjAxNywxNiArMjE1OCwxNiBAQCBpbnQgaXA2bXJfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZylcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xcbiBcXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcXG4gXFxuLVxcdG1ydCA9IGlwNm1yX2dldF90YWJsZShuZXQsIHJhdzZfc2soc2spLVxcdTAwM2VpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpO1xcbitcXHRtcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChuZXQsIHJhdzZfc2soc2spLVxcdTAwM2VpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpO1xcbiBcXHRpZiAoIW1ydClcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcbiBcXHRzd2l0Y2ggKGNtZCkge1xcbiBcXHRjYXNlIFNJT0NHRVRNSUZDTlRfSU42OlxcbiBcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNnZyLCBhcmcsIHNpemVvZih2cikpKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0XFx0XFx0Z290byBvdXRfcHV0X3RhYmxlX2VmYXVsdDtcXG4gXFx0XFx0aWYgKHZyLm1pZmkgXFx1MDAzZT0gbXJ0LVxcdTAwM2VtYXh2aWYpXFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIG91dF9wdXRfdGFibGVfZWludmFsO1xcbiBcXHRcXHR2ci5taWZpID0gYXJyYXlfaW5kZXhfbm9zcGVjKHZyLm1pZmksIG1ydC1cXHUwMDNlbWF4dmlmKTtcXG4gXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRcXHR2aWYgPSBcXHUwMDI2bXJ0LVxcdTAwM2V2aWZfdGFibGVbdnIubWlmaV07XFxuQEAgLTIwMzgsMTQgKzIxNzksMTYgQEAgaW50IGlwNm1yX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpXFxuIFxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFxcdTAwMjZ2ciwgc2l6ZW9mKHZyKSkpXFxuLVxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0O1xcbitcXHRcXHRcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbiBcXHRcXHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XFxuIFxcdGNhc2UgU0lPQ0dFVFNHQ05UX0lONjpcXG4gXFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZzciwgYXJnLCBzaXplb2Yoc3IpKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XFxuIFxcbiBcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdFxcdGMgPSBpcDZtcl9jYWNoZV9maW5kKG1ydCwgXFx1MDAyNnNyLnNyYy5zaW42X2FkZHIsIFxcdTAwMjZzci5ncnAuc2luNl9hZGRyKTtcXG5AQCAtMjA1NiwxNCArMjE5OSwyNSBAQCBpbnQgaXA2bXJfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZylcXG4gXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRcXHRcXHRpZiAoY29weV90b191c2VyKGFyZywgXFx1MDAyNnNyLCBzaXplb2Yoc3IpKSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XFxuK1xcdFxcdFxcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuIFxcdFxcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcXG4gXFx0ZGVmYXVsdDpcXG4rXFx0XFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuIFxcdFxcdHJldHVybiAtRU5PSU9DVExDTUQ7XFxuIFxcdH1cXG4rXFxuK291dF9wdXRfdGFibGVfZWZhdWx0OlxcbitcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4rXFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitvdXRfcHV0X3RhYmxlX2VpbnZhbDpcXG4rXFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbiB9XFxuICNlbmRpZlxcbiBcXG5AQCAtMjM5MiwxMyArMjU0NiwxNiBAQCBpbnQgaXA2X21yX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdGlmICh2aWYgXFx1MDAzZT0gMCkge1xcbiBcXHRcXHRcXHRpbnQgZXJyID0gaXA2bXJfY2FjaGVfdW5yZXNvbHZlZChtcnQsIHZpZiwgc2tiLCBkZXYpO1xcbiBcXG4rXFx0XFx0XFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdFxcdH1cXG4rXFx0XFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFx0fVxcbiBcXG4gXFx0aXA2X21yX2ZvcndhcmQobmV0LCBtcnQsIGRldiwgc2tiLCBjYWNoZSk7XFxuK1xcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMjQ0MSwxOSArMjU5OCwyNSBAQCBpbnQgaXA2X21yX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0LyogTm8gdXNhYmxlIGNhY2hlIGVudHJ5ICovXFxuIFxcdGlmICghY2FjaGUpIHtcXG4gXFx0XFx0dmlmID0gaXA2bXJfZmluZF92aWYobXJ0LCBkZXYpO1xcbi1cXHRcXHRpZiAodmlmIFxcdTAwM2U9IDApXFxuLVxcdFxcdFxcdHJldHVybiBpcDZtcl9jYWNoZV91bnJlc29sdmVkKG1ydCwgdmlmLCBza2IsIGRldik7XFxuLVxcdFxcdGdvdG8gaXA2X291dHB1dDtcXG4rXFx0XFx0aWYgKHZpZiBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdFxcdGVyciA9IGlwNm1yX2NhY2hlX3VucmVzb2x2ZWQobXJ0LCB2aWYsIHNrYiwgZGV2KTtcXG4rXFx0XFx0XFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Z290byBvdXRfcHV0O1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBXcm9uZyBpbnRlcmZhY2UgKi9cXG4gXFx0dmlmID0gY2FjaGUtXFx1MDAzZV9jLm1mY19wYXJlbnQ7XFxuIFxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIobXJ0LVxcdTAwM2V2aWZfdGFibGVbdmlmXS5kZXYpICE9IGRldilcXG4tXFx0XFx0Z290byBpcDZfb3V0cHV0O1xcbitcXHRcXHRnb3RvIG91dF9wdXQ7XFxuIFxcbiBcXHRpcDZfbXJfb3V0cHV0X2ZpbmlzaChuZXQsIG1ydCwgZGV2LCBza2IsIGNhY2hlKTtcXG4rXFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuIFxcdHJldHVybiAwO1xcbiBcXG4rb3V0X3B1dDpcXG4rXFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XFxuIGlwNl9vdXRwdXQ6XFxuIFxcdHJldHVybiBpcDZfb3V0cHV0KG5ldCwgc2ssIHNrYik7XFxuIH1cXG5AQCAtMjc1NSwzMyArMjkxOCwzNSBAQCBzdGF0aWMgaW50IGlwNm1yX3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0XFx0Z3JwID0gbmxhX2dldF9pbjZfYWRkcih0YltSVEFfRFNUXSk7XFxuIFxcdHRhYmxlaWQgPSBubGFfZ2V0X3UzMl9kZWZhdWx0KHRiW1JUQV9UQUJMRV0sIDApO1xcbiBcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXG4tXFx0bXJ0ID0gX19pcDZtcl9nZXRfdGFibGUobmV0LCB0YWJsZWlkID86IFJUX1RBQkxFX0RFRkFVTFQpO1xcbitcXHRtcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChuZXQsIHRhYmxlaWQgPzogUlRfVEFCTEVfREVGQVVMVCk7XFxuIFxcdGlmICghbXJ0KSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJNUiB0YWJsZSBkb2VzIG5vdCBleGlzdFxcXCIpO1xcbiBcXHRcXHRlcnIgPSAtRU5PRU5UO1xcbi1cXHRcXHRnb3RvIGVycjtcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4gXFx0fVxcbiBcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRjYWNoZSA9IGlwNm1yX2NhY2hlX2ZpbmQobXJ0LCBcXHUwMDI2c3JjLCBcXHUwMDI2Z3JwKTtcXG4gXFx0aWYgKCFjYWNoZSkge1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIk1SIGNhY2hlIGVudHJ5IG5vdCBmb3VuZFxcXCIpO1xcbiBcXHRcXHRlcnIgPSAtRU5PRU5UO1xcbi1cXHRcXHRnb3RvIGVycjtcXG4rXFx0XFx0Z290byBlcnJfcHV0O1xcbiBcXHR9XFxuIFxcbiBcXHRlcnIgPSBpcDZtcl9maWxsX21yb3V0ZShtcnQsIHNrYiwgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCxcXG4gXFx0XFx0XFx0XFx0bmxoLVxcdTAwM2VubG1zZ19zZXEsIGNhY2hlLCBSVE1fTkVXUk9VVEUsIDApO1xcbi1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBlcnI7XFxuLVxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3B1dDtcXG4gXFxuLVxcdHJldHVybiBydG5sX3VuaWNhc3Qoc2tiLCBuZXQsIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQpO1xcbitcXHRlcnIgPSBydG5sX3VuaWNhc3Qoc2tiLCBuZXQsIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQpO1xcbitcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4rXFx0cmV0dXJuIGVycjtcXG4gXFxuLWVycjpcXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK2Vycl9wdXQ6XFxuK1xcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xcbitlcnJfZnJlZTpcXG4gXFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG5AQCAtMjgwNCw3ICsyOTY5LDcgQEAgc3RhdGljIGludCBpcDZtcl9ydG1fZHVtcHJvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFx0aWYgKGZpbHRlci50YWJsZV9pZCkge1xcbiBcXHRcXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcXG4gXFxuLVxcdFxcdG1ydCA9IF9faXA2bXJfZ2V0X3RhYmxlKHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spLCBmaWx0ZXIudGFibGVfaWQpO1xcbitcXHRcXHRtcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChzb2NrX25ldChza2ItXFx1MDAzZXNrKSwgZmlsdGVyLnRhYmxlX2lkKTtcXG4gXFx0XFx0aWYgKCFtcnQpIHtcXG4gXFx0XFx0XFx0aWYgKHJ0bmxfbXNnX2ZhbWlseShjYi1cXHUwMDNlbmxoKSAhPSBSVE5MX0ZBTUlMWV9JUDZNUikge1xcbiBcXHRcXHRcXHRcXHRlcnIgPSBza2ItXFx1MDAzZWxlbjtcXG5AQCAtMjgxOCw2ICsyOTgzLDcgQEAgc3RhdGljIGludCBpcDZtcl9ydG1fZHVtcHJvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFxuIFxcdFxcdGVyciA9IG1yX3RhYmxlX2R1bXAobXJ0LCBza2IsIGNiLCBfaXA2bXJfZmlsbF9tcm91dGUsXFxuIFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2bWZjX3VucmVzX2xvY2ssIFxcdTAwMjZmaWx0ZXIpO1xcbitcXHRcXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcXG4gXFx0XFx0ZXJyID0gc2tiLVxcdTAwM2VsZW4gPyA6IGVycjtcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjI6NTk6MzIuNDc5MzQzMzY2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzQ2MjUxNjI1MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNl9NUk9VVEVcIixcbiAgICBcIklQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1wiLFxuICAgIFwiSVBWNl9QSU1TTV9WMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwNl9tcm91dGVfc2V0c29ja29wdFwiLFxuICAgIFwiaXA2X21yb3V0ZV9nZXRzb2Nrb3B0XCIsXG4gICAgXCJpcDZtcl9pb2N0bFwiLFxuICAgIFwiaXA2bXJfY29tcGF0X2lvY3RsXCIsXG4gICAgXCJpcDZfbXJfaW5wdXRcIixcbiAgICBcImlwNl9tcl9vdXRwdXRcIixcbiAgICBcInBpbTZfcmN2XCIsXG4gICAgXCJyZWdfdmlmX3htaXRcIixcbiAgICBcIm1yb3V0ZTZfaXNfc29ja2V0XCIsXG4gICAgXCJpcDZtcl9za19kb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyByZWZlcmVuY2UgY291bnRpbmcgdG8gSVB2NiBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZXMgKHN0cnVjdCBtcl90YWJsZSkgdG8gZml4IHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMuIEl0IG1vZGlmaWVzIHZhcmlvdXMgZW50cnkgcG9pbnRzIChzb2NrZXQgb3B0aW9ucywgaW9jdGxzLCBuZXRsaW5rLCBwYWNrZXQgcngvdHgpIHRvIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIHRhYmxlIHdoaWxlIGluIHVzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRkYjVmOGRhMDllMWFiZDYwYmJiZWU1NDA3NzdjNGFjMGYyYzcyZDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAyNCAyMjo1OToyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXJvdXRlX2Jhc2UuaCBiL2luY2x1ZGUvbGludXgvbXJvdXRlX2Jhc2UuaFxuaW5kZXggNGQ1NTgyN2U5NzA1MzcuLjUzNmZhMzI0NjIwMjczIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmhcbkBAIC0yLDggKzIsMTAgQEBcbiAjZGVmaW5lIF9fTElOVVhfTVJPVVRFX0JBU0VfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRfbmFtZXNwYWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2ZpYl9ub3RpZmllci5oXHUwMDNlXG5AQCAtMjQyLDYgKzI0NCw4IEBAIHN0cnVjdCBtcl90YWJsZV9vcHMge1xuICAqIEBtcm91dGVfZG9fYXNzZXJ0OiBXaGV0aGVyIHRvIGluZm9ybSB1c2Vyc3BhY2Ugb24gd3JvbmcgaW5ncmVzc1xuICAqIEBtcm91dGVfZG9fcGltOiBXaGV0aGVyIHRvIHJlY2VpdmUgSUdNUCBQSU12MVxuICAqIEBtcm91dGVfcmVnX3ZpZl9udW06IFBJTS1kZXZpY2UgdmlmIGluZGV4XG4rICogQHJlZmNudDogbGlmZXRpbWUgcGlucyBmb3IgdGhpcyB0YWJsZVxuKyAqIEBkZXN0cm95X3dvcms6IHByb2Nlc3MtY29udGV4dCBjbGVhbnVwIGJlZm9yZSBmaW5hbCBSQ1UgZnJlZVxuICAqL1xuIHN0cnVjdCBtcl90YWJsZSB7XG4gXHRzdHJ1Y3QgcmN1X3dvcmtcdFx0d29yaztcbkBAIC0yNjEsNiArMjY1LDggQEAgc3RydWN0IG1yX3RhYmxlIHtcbiBcdGJvb2xcdFx0XHRtcm91dGVfZG9fcGltO1xuIFx0Ym9vbFx0XHRcdG1yb3V0ZV9kb193cnZpZndob2xlO1xuIFx0aW50XHRcdFx0bXJvdXRlX3JlZ192aWZfbnVtO1xuK1x0cmVmY291bnRfdFx0XHRyZWZjbnQ7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdGRlc3Ryb3lfd29yaztcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtcl9jYW5fZnJlZV90YWJsZShzdHJ1Y3QgbmV0ICpuZXQpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtcl9iYXNlLmMgYi9uZXQvaXB2NC9pcG1yX2Jhc2UuY1xuaW5kZXggODY3YjI0YmVkZWQxMTIuLjk3MTA3ODljZmFmOTk0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBtcl9iYXNlLmNcbisrKyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jXG5AQCAtMzIsOCArMzIsMTAgQEAgc3RhdGljIHZvaWQgX19tcl9mcmVlX3RhYmxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSxcbiBcdFx0XHRcdFx0ICAgIHN0cnVjdCBtcl90YWJsZSwgd29yayk7XG4rXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCk7XG4gXG4gXHRyaGx0YWJsZV9kZXN0cm95KFx1MDAyNm1ydC1cdTAwM2VtZmNfaGFzaCk7XG4rXHRwdXRfbmV0KG5ldCk7XG4gXHRrZnJlZShtcnQpO1xuIH1cbiBcbkBAIC01NiwxMSArNTgsMTIgQEAgbXJfdGFibGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQsXG4gXHRpZiAoIW1ydClcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXHRtcnQtXHUwMDNlaWQgPSBpZDtcbi1cdHdyaXRlX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCwgbmV0KTtcbitcdHdyaXRlX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCwgZ2V0X25ldChuZXQpKTtcbiBcbiBcdG1ydC1cdTAwM2VvcHMgPSAqb3BzO1xuIFx0ZXJyID0gcmhsdGFibGVfaW5pdChcdTAwMjZtcnQtXHUwMDNlbWZjX2hhc2gsIG1ydC1cdTAwM2VvcHMucmh0X3BhcmFtcyk7XG4gXHRpZiAoZXJyKSB7XG4rXHRcdHB1dF9uZXQocmVhZF9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQpKTtcbiBcdFx0a2ZyZWUobXJ0KTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcdH1cbkBAIC03Miw2ICs3NSw3IEBAIG1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxuIFx0dGltZXJfc2V0dXAoXHUwMDI2bXJ0LVx1MDAzZWlwbXJfZXhwaXJlX3RpbWVyLCBleHBpcmVfZnVuYywgMCk7XG4gXG4gXHRtcnQtXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtID0gLTE7XG4rXHRyZWZjb3VudF9zZXQoXHUwMDI2bXJ0LVx1MDAzZXJlZmNudCwgMSk7XG4gXHR0YWJsZV9zZXQobXJ0LCBuZXQpO1xuIFx0cmV0dXJuIG1ydDtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmNcbmluZGV4IDYwNGE1ODgzODkwMWE3Li45NGJiMDBiZGZmOThjOCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNm1yLmNcbisrKyBiL25ldC9pcHY2L2lwNm1yLmNcbkBAIC04Nyw2ICs4NywxMSBAQCBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1ydF9jYWNoZXAgX19yZWFkX21vc3RseTtcbiBzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpO1xuIHN0YXRpYyB2b2lkIGlwNm1yX2ZyZWVfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpkZXZfa2lsbF9saXN0KTtcbitzdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbitzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9nZXRfdGFibGVfaG9sZChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCk7XG4rc3RhdGljIHZvaWQgaXA2bXJfcHV0X3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0KTtcbitzdGF0aWMgdm9pZCBfX2lwNm1yX3B1dF90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbitcdFx0XHQgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpkZXZfa2lsbF9saXN0KTtcbiBcbiBzdGF0aWMgdm9pZCBpcDZfbXJfZm9yd2FyZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuIFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMTc5LDcgKzE4NCw3IEBAIHN0YXRpYyBpbnQgaXA2bXJfcnVsZV9hY3Rpb24oc3RydWN0IGZpYl9ydWxlICpydWxlLCBzdHJ1Y3QgZmxvd2kgKmZscCxcbiBcbiBcdGFyZy1cdTAwM2V0YWJsZSA9IGZpYl9ydWxlX2dldF90YWJsZShydWxlLCBhcmcpO1xuIFxuLVx0bXJ0ID0gX19pcDZtcl9nZXRfdGFibGUocnVsZS1cdTAwM2Vmcl9uZXQsIGFyZy1cdTAwM2V0YWJsZSk7XG4rXHRtcnQgPSBpcDZtcl9nZXRfdGFibGVfaG9sZChydWxlLVx1MDAzZWZyX25ldCwgYXJnLVx1MDAzZXRhYmxlKTtcbiBcdGlmICghbXJ0KVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcdHJlcy1cdTAwM2VtcnQgPSBtcnQ7XG5AQCAtMjcxLDcgKzI3Niw4IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2bXJfcnVsZXNfZXhpdF9ydG5sKHN0cnVjdCBuZXQgKm5ldCxcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtcnQsIG5leHQsIFx1MDAyNm5ldC1cdTAwM2VpcHY2Lm1yNl90YWJsZXMsIGxpc3QpIHtcbiBcdFx0bGlzdF9kZWxfcmN1KFx1MDAyNm1ydC1cdTAwM2VsaXN0KTtcbi1cdFx0aXA2bXJfZnJlZV90YWJsZShtcnQsIGRldl9raWxsX2xpc3QpO1xuK1x0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdFx0X19pcDZtcl9wdXRfdGFibGUobXJ0LCBkZXZfa2lsbF9saXN0KTtcbiBcdH1cbiB9XG4gXG5AQCAtMzE0LDcgKzMyMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKl9faXA2bXJfZ2V0X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKVxuIHN0YXRpYyBpbnQgaXA2bXJfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTYgKmZscDYsXG4gXHRcdFx0ICAgIHN0cnVjdCBtcl90YWJsZSAqKm1ydClcbiB7XG4tXHQqbXJ0ID0gcmN1X2RlcmVmZXJlbmNlKG5ldC1cdTAwM2VpcHY2Lm1ydDYpO1xuK1x0Km1ydCA9IGlwNm1yX2dldF90YWJsZV9ob2xkKG5ldCwgUlQ2X1RBQkxFX0RGTFQpO1xuIFx0aWYgKCEqbXJ0KVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcdHJldHVybiAwO1xuQEAgLTM0Miw3ICszNDgsOCBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwNm1yX3J1bGVzX2V4aXRfcnRubChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobmV0LVx1MDAzZWlwdjYubXJ0NiwgMSk7XG4gXG4gXHRSQ1VfSU5JVF9QT0lOVEVSKG5ldC1cdTAwM2VpcHY2Lm1ydDYsIE5VTEwpO1xuLVx0aXA2bXJfZnJlZV90YWJsZShtcnQsIGRldl9raWxsX2xpc3QpO1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4rXHRfX2lwNm1yX3B1dF90YWJsZShtcnQsIGRldl9raWxsX2xpc3QpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGlwNm1yX3J1bGVzX2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuQEAgLTM2OCw2ICszNzUsNDQgQEAgc3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfZ2V0X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKVxuIFx0cmV0dXJuIG1ydDtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfZ2V0X3RhYmxlX2hvbGQoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXG4re1xuK1x0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRtcnQgPSBfX2lwNm1yX2dldF90YWJsZShuZXQsIGlkKTtcbitcdGlmIChtcnQgXHUwMDI2XHUwMDI2ICFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2bXJ0LVx1MDAzZXJlZmNudCkpXG4rXHRcdG1ydCA9IE5VTEw7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHJldHVybiBtcnQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIF9faXA2bXJfcHV0X3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuK1x0XHRcdCAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4re1xuK1x0c3RydWN0IGxpc3RfaGVhZCAqZGV2X2tpbGxfbGlzdDtcbitcdExJU1RfSEVBRChsb2NhbF9kZXZfa2lsbF9saXN0KTtcbitcbitcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNm1ydC1cdTAwM2VyZWZjbnQpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoIWxvY2tkZXBfcnRubF9pc19oZWxkKCkpIHtcbitcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZtcnQtXHUwMDNlZGVzdHJveV93b3JrKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0ZGV2X2tpbGxfbGlzdCA9IGhlYWQgPyBoZWFkIDogXHUwMDI2bG9jYWxfZGV2X2tpbGxfbGlzdDtcbitcdGlwNm1yX2ZyZWVfdGFibGUobXJ0LCBkZXZfa2lsbF9saXN0KTtcbitcdGlmICghaGVhZClcbitcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShkZXZfa2lsbF9saXN0KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaXA2bXJfcHV0X3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0KVxuK3tcbitcdF9faXA2bXJfcHV0X3RhYmxlKG1ydCwgTlVMTCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgaXA2bXJfaGFzaF9jbXAoc3RydWN0IHJoYXNodGFibGVfY29tcGFyZV9hcmcgKmFyZyxcbiBcdFx0XHQgIGNvbnN0IHZvaWQgKnB0cilcbiB7XG5AQCAtNDEzLDggKzQ1OCwxMiBAQCBzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXG4gXHRpZiAobXJ0KVxuIFx0XHRyZXR1cm4gbXJ0O1xuIFxuLVx0cmV0dXJuIG1yX3RhYmxlX2FsbG9jKG5ldCwgaWQsIFx1MDAyNmlwNm1yX21yX3RhYmxlX29wcyxcbi1cdFx0XHQgICAgICBpcG1yX2V4cGlyZV9wcm9jZXNzLCBpcDZtcl9uZXdfdGFibGVfc2V0KTtcbitcdG1ydCA9IG1yX3RhYmxlX2FsbG9jKG5ldCwgaWQsIFx1MDAyNmlwNm1yX21yX3RhYmxlX29wcyxcbitcdFx0XHQgICAgIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIGlwNm1yX25ld190YWJsZV9zZXQpO1xuK1x0aWYgKCFJU19FUlIobXJ0KSlcbitcdFx0SU5JVF9XT1JLKFx1MDAyNm1ydC1cdTAwM2VkZXN0cm95X3dvcmssIGlwNm1yX2ZyZWVfdGFibGVfd29yayk7XG4rXG4rXHRyZXR1cm4gbXJ0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuQEAgLTQyMyw4ICs0NzIsNiBAQCBzdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuIFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQpO1xuIFx0TElTVF9IRUFEKGlwNm1yX2Rldl9raWxsX2xpc3QpO1xuIFxuLVx0V0FSTl9PTl9PTkNFKCFtcl9jYW5fZnJlZV90YWJsZShuZXQpKTtcbi1cbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2bXJ0LVx1MDAzZWlwbXJfZXhwaXJlX3RpbWVyKTtcbiBcdG1yb3V0ZV9jbGVhbl90YWJsZXMobXJ0LCBNUlQ2X0ZMVVNIX01JRlMgfCBNUlQ2X0ZMVVNIX01JRlNfU1RBVElDIHxcbiBcdFx0XHQgICAgTVJUNl9GTFVTSF9NRkMgfCBNUlQ2X0ZMVVNIX01GQ19TVEFUSUMsXG5AQCAtNDM2LDYgKzQ4MywxNyBAQCBzdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuIFx0bGlzdF9zcGxpY2UoXHUwMDI2aXA2bXJfZGV2X2tpbGxfbGlzdCwgZGV2X2tpbGxfbGlzdCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGlwNm1yX2ZyZWVfdGFibGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IG1yX3RhYmxlICptcnQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG1yX3RhYmxlLCBkZXN0cm95X3dvcmspO1xuK1x0TElTVF9IRUFEKGRldl9raWxsX2xpc3QpO1xuK1xuK1x0cnRubF9sb2NrKCk7XG4rXHRpcDZtcl9mcmVlX3RhYmxlKG1ydCwgXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG4rXHR1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KFx1MDAyNmRldl9raWxsX2xpc3QpO1xuK1x0cnRubF91bmxvY2soKTtcbit9XG4rXG4gI2lmZGVmIENPTkZJR19QUk9DX0ZTXG4gLyogVGhlIC9wcm9jIGludGVyZmFjZXMgdG8gbXVsdGljYXN0IHJvdXRpbmdcbiAgKiAvcHJvYy9pcDZfbXJfY2FjaGUgL3Byb2MvaXA2X21yX3ZpZlxuQEAgLTU2OSw3ICs2MjcsNyBAQCBzdGF0aWMgaW50IHBpbTZfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3QgaXB2NmhkciAgICplbmNhcDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICAqcmVnX2RldiA9IE5VTEw7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuLVx0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4rXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IE5VTEw7XG4gXHRzdHJ1Y3QgZmxvd2k2IGZsNiA9IHtcbiBcdFx0LmZsb3dpNl9paWZcdD0gc2tiLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4LFxuIFx0XHQuZmxvd2k2X21hcmtcdD0gc2tiLVx1MDAzZW1hcmssXG5AQCAtNjE3LDkgKzY3NSwxMiBAQCBzdGF0aWMgaW50IHBpbTZfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRza2JfdHVubmVsX3J4KHNrYiwgcmVnX2RldiwgZGV2X25ldChyZWdfZGV2KSk7XG4gXG4gXHRuZXRpZl9yeChza2IpO1xuK1x0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXG4gXHRyZXR1cm4gMDtcbiAgZHJvcDpcbitcdGlmIChtcnQpXG4rXHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNjM0LDcgKzY5NSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpO1xuLVx0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4rXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IE5VTEw7XG4gXHRzdHJ1Y3QgZmxvd2k2IGZsNiA9IHtcbiBcdFx0LmZsb3dpNl9vaWZcdD0gZGV2LVx1MDAzZWlmaW5kZXgsXG4gXHRcdC5mbG93aTZfaWlmXHQ9IHNrYi1cdTAwM2Vza2JfaWlmID8gOiBMT09QQkFDS19JRklOREVYLFxuQEAgLTY1NSwxMiArNzE2LDE1IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlwNm1yX2NhY2hlX3JlcG9ydChtcnQsIHNrYiwgUkVBRF9PTkNFKG1ydC1cdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pLFxuIFx0XHRcdCAgIE1SVDZNU0dfV0hPTEVQS1QpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiBcbiB0eF9sb29rdXBfZXJyOlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gdHhfZXJyOlxuK1x0aWYgKG1ydClcbitcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRERVZfU1RBVFNfSU5DKGRldiwgdHhfZXJyb3JzKTtcbiBcdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbkBAIC0xNjE1LDEyICsxNjc5LDEzIEBAIHN0YXRpYyB2b2lkIG1yb3V0ZV9jbGVhbl90YWJsZXMoc3RydWN0IG1yX3RhYmxlICptcnQsIGludCBmbGFncyxcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGludCBpcDZtcl9za19pbml0KHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc29jayAqc2spXG4rc3RhdGljIGludCBfX2lwNm1yX3NrX2luaXQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRpbnQgZXJyID0gMDtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbiBcbi1cdHJ0bmxfbG9jaygpO1xuK1x0QVNTRVJUX1JUTkwoKTtcbitcbiBcdHNwaW5fbG9jayhcdTAwMjZtcnRfbG9jayk7XG4gXHRpZiAocnRubF9kZXJlZmVyZW5jZShtcnQtXHUwMDNlbXJvdXRlX3NrKSkge1xuIFx0XHRlcnIgPSAtRUFERFJJTlVTRTtcbkBAIC0xNjI4LDYgKzE2OTMsNyBAQCBzdGF0aWMgaW50IGlwNm1yX3NrX2luaXQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBzb2NrICpzaylcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1ydC1cdTAwM2Vtcm91dGVfc2ssIHNrKTtcbiBcdFx0c29ja19zZXRfZmxhZyhzaywgU09DS19SQ1VfRlJFRSk7XG4gXHRcdGF0b21pY19pbmMoXHUwMDI2bmV0LVx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXHUwMDNlbWNfZm9yd2FyZGluZyk7XG4rXHRcdHJlZmNvdW50X2luYyhcdTAwMjZtcnQtXHUwMDNlcmVmY250KTtcbiBcdH1cbiBcdHNwaW5fdW5sb2NrKFx1MDAyNm1ydF9sb2NrKTtcbiBcbkBAIC0xNjM2LDcgKzE3MDIsNiBAQCBzdGF0aWMgaW50IGlwNm1yX3NrX2luaXQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHRcdFx0ICAgICBORVRDT05GQV9NQ19GT1JXQVJESU5HLFxuIFx0XHRcdFx0XHQgICAgIE5FVENPTkZBX0lGSU5ERVhfQUxMLFxuIFx0XHRcdFx0XHQgICAgIG5ldC1cdTAwM2VpcHY2LmRldmNvbmZfYWxsKTtcbi1cdHJ0bmxfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gZXJyO1xuIH1cbkBAIC0xNjQ2LDYgKzE3MTEsNyBAQCBpbnQgaXA2bXJfc2tfZG9uZShzdHJ1Y3Qgc29jayAqc2spXG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4gXHRzdHJ1Y3QgaXB2Nl9kZXZjb25mICpkZXZjb25mO1xuIFx0TElTVF9IRUFEKGRldl9raWxsX2xpc3QpO1xuK1x0c3RydWN0IG1yX3RhYmxlICpmcmVlX21ydCA9IE5VTEw7XG4gXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcbiBcdGludCBlcnIgPSAtRUFDQ0VTO1xuIFxuQEAgLTE2NzUsNiArMTc0MSwxNSBAQCBpbnQgaXA2bXJfc2tfZG9uZShzdHJ1Y3Qgc29jayAqc2spXG4gXG4gXHRcdFx0bXJvdXRlX2NsZWFuX3RhYmxlcyhtcnQsIE1SVDZfRkxVU0hfTUlGUyB8IE1SVDZfRkxVU0hfTUZDLFxuIFx0XHRcdFx0XHQgICAgXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG4rXHRcdFx0aWYgKG1ydC1cdTAwM2VpZCAhPSBSVDZfVEFCTEVfREZMVCBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIVJFQURfT05DRShtcnQtXHUwMDNlbWF4dmlmKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIVJFQURfT05DRShtcnQtXHUwMDNlY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICBsaXN0X2VtcHR5KFx1MDAyNm1ydC1cdTAwM2VtZmNfY2FjaGVfbGlzdCkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIGxpc3RfZW1wdHkoXHUwMDI2bXJ0LVx1MDAzZW1mY191bnJlc19xdWV1ZSkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIFJFQURfT05DRShtcnQtXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtKSBcdTAwM2MgMCkge1xuK1x0XHRcdFx0bGlzdF9kZWxfcmN1KFx1MDAyNm1ydC1cdTAwM2VsaXN0KTtcbitcdFx0XHRcdGZyZWVfbXJ0ID0gbXJ0O1xuK1x0XHRcdH1cbiBcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtMTY4Miw2ICsxNzU3LDE0IEBAIGludCBpcDZtcl9za19kb25lKHN0cnVjdCBzb2NrICpzaylcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG4gXHRydG5sX3VubG9jaygpO1xuIFxuK1x0aWYgKCFlcnIpXG4rXHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuK1xuK1x0aWYgKGZyZWVfbXJ0KSB7XG4rXHRcdHN5bmNocm9uaXplX3JjdSgpO1xuK1x0XHRpcDZtcl9wdXRfdGFibGUoZnJlZV9tcnQpO1xuK1x0fVxuK1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTY5MywxMSArMTc3NiwxNSBAQCBib29sIG1yb3V0ZTZfaXNfc29ja2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0LmZsb3dpNl9vaWZcdD0gc2tiLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4LFxuIFx0XHQuZmxvd2k2X21hcmtcdD0gc2tiLVx1MDAzZW1hcmssXG4gXHR9O1xuK1x0Ym9vbCByZXQ7XG4gXG4gXHRpZiAoaXA2bXJfZmliX2xvb2t1cChuZXQsIFx1MDAyNmZsNiwgXHUwMDI2bXJ0KSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRyZXR1cm4gcmN1X2FjY2Vzc19wb2ludGVyKG1ydC1cdTAwM2Vtcm91dGVfc2spO1xuK1x0cmV0ID0gcmN1X2FjY2Vzc19wb2ludGVyKG1ydC1cdTAwM2Vtcm91dGVfc2spO1xuK1x0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBFWFBPUlRfU1lNQk9MKG1yb3V0ZTZfaXNfc29ja2V0KTtcbiBcbkBAIC0xNzE2LDIwICsxODAzLDI0IEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdHN0cnVjdCBtZjZjY3RsIG1mYztcbiBcdG1pZmlfdCBtaWZpO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuLVx0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4rXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydCA9IE5VTEw7XG4rXHR1MzIgdGFibGUgPSByYXc2X3NrKHNrKS1cdTAwM2VpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQ7XG4gXG4gXHRpZiAoc2stXHUwMDNlc2tfdHlwZSAhPSBTT0NLX1JBVyB8fFxuIFx0ICAgIGluZXRfc2soc2spLVx1MDAzZWluZXRfbnVtICE9IElQUFJPVE9fSUNNUFY2KVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRtcnQgPSBpcDZtcl9nZXRfdGFibGUobmV0LCByYXc2X3NrKHNrKS1cdTAwM2VpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpO1xuLVx0aWYgKCFtcnQpXG4tXHRcdHJldHVybiAtRU5PRU5UO1xuLVxuLVx0aWYgKG9wdG5hbWUgIT0gTVJUNl9JTklUKSB7XG4rXHRpZiAob3B0bmFtZSAhPSBNUlQ2X0lOSVQgXHUwMDI2XHUwMDI2XG4rXHQgICAgb3B0bmFtZSAhPSBNUlQ2X1RBQkxFIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG9wdG5hbWUgIT0gTVJUNl9ET05FKSB7XG4rXHRcdG1ydCA9IGlwNm1yX2dldF90YWJsZV9ob2xkKG5ldCwgdGFibGUpO1xuK1x0XHRpZiAoIW1ydClcbitcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcdFx0aWYgKHNrICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihtcnQtXHUwMDNlbXJvdXRlX3NrKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICFuc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSlcbitcdFx0ICAgICFuc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkge1xuK1x0XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRzd2l0Y2ggKG9wdG5hbWUpIHtcbkBAIC0xNzM3LDMyICsxODI4LDQxIEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKGludCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRcdHJldHVybiBpcDZtcl9za19pbml0KG1ydCwgc2spO1xuK1x0XHRydG5sX2xvY2soKTtcbitcdFx0bXJ0ID0gaXA2bXJfbmV3X3RhYmxlKG5ldCwgdGFibGUpO1xuK1x0XHRpZiAoIUlTX0VSUihtcnQpKVxuK1x0XHRcdHJldCA9IF9faXA2bXJfc2tfaW5pdChtcnQsIHNrKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHJldCA9IFBUUl9FUlIobXJ0KTtcbitcdFx0cnRubF91bmxvY2soKTtcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGNhc2UgTVJUNl9ET05FOlxuIFx0XHRyZXR1cm4gaXA2bXJfc2tfZG9uZShzayk7XG4gXG4gXHRjYXNlIE1SVDZfQUREX01JRjpcbiBcdFx0aWYgKG9wdGxlbiBcdTAwM2Mgc2l6ZW9mKHZpZikpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VpbnZhbDtcbiBcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNnZpZiwgb3B0dmFsLCBzaXplb2YodmlmKSkpXG4tXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VmYXVsdDtcbiBcdFx0aWYgKHZpZi5taWY2Y19taWZpIFx1MDAzZT0gTUFYTUlGUylcbi1cdFx0XHRyZXR1cm4gLUVORklMRTtcbitcdFx0XHRnb3RvIG91dF9wdXRfdGFibGVfZW5maWxlO1xuIFx0XHRydG5sX2xvY2soKTtcbiBcdFx0cmV0ID0gbWlmNl9hZGQobmV0LCBtcnQsIFx1MDAyNnZpZixcbiBcdFx0XHQgICAgICAgc2sgPT0gcnRubF9kZXJlZmVyZW5jZShtcnQtXHUwMDNlbXJvdXRlX3NrKSk7XG4gXHRcdHJ0bmxfdW5sb2NrKCk7XG4rXHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0Y2FzZSBNUlQ2X0RFTF9NSUY6XG4gXHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihtaWZpX3QpKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7XG4gXHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZtaWZpLCBvcHR2YWwsIHNpemVvZihtaWZpX3QpKSlcbi1cdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0XHRnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0O1xuIFx0XHRydG5sX2xvY2soKTtcbiBcdFx0cmV0ID0gbWlmNl9kZWxldGUobXJ0LCBtaWZpLCAwLCBOVUxMKTtcbiBcdFx0cnRubF91bmxvY2soKTtcbitcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHQvKlxuQEAgLTE3NzYsOSArMTg3Niw5IEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdGNhc2UgTVJUNl9BRERfTUZDX1BST1hZOlxuIFx0Y2FzZSBNUlQ2X0RFTF9NRkNfUFJPWFk6XG4gXHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihtZmMpKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7XG4gXHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZtZmMsIG9wdHZhbCwgc2l6ZW9mKG1mYykpKVxuLVx0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XG4gXHRcdGlmIChwYXJlbnQgPT0gMClcbiBcdFx0XHRwYXJlbnQgPSBtZmMubWY2Y2NfcGFyZW50O1xuIFxuQEAgLTE3OTMsNiArMTg5Myw3IEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0XHRcdFx0ICAgIHBhcmVudCk7XG4gXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZuZXQtXHUwMDNlaXB2Ni5tZmNfbXV0ZXgpO1xuK1x0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGNhc2UgTVJUNl9GTFVTSDpcbkBAIC0xODAxLDE0ICsxOTAyLDE1IEBAIGludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0aW50IGZsYWdzO1xuIFxuIFx0XHRpZiAob3B0bGVuICE9IHNpemVvZihmbGFncykpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VpbnZhbDtcbiBcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmZsYWdzLCBvcHR2YWwsIHNpemVvZihmbGFncykpKVxuLVx0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XG4gXG4gXHRcdHJ0bmxfbG9jaygpO1xuIFx0XHRtcm91dGVfY2xlYW5fdGFibGVzKG1ydCwgZmxhZ3MsIFx1MDAyNmRldl9raWxsX2xpc3QpO1xuIFx0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KFx1MDAyNmRldl9raWxsX2xpc3QpO1xuIFx0XHRydG5sX3VubG9jaygpO1xuK1x0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG5AQCAtMTgyMCwxMCArMTkyMiwxMSBAQCBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRcdGludCB2O1xuIFxuIFx0XHRpZiAob3B0bGVuICE9IHNpemVvZih2KSlcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRnb3RvIG91dF9wdXRfdGFibGVfZWludmFsO1xuIFx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2diwgb3B0dmFsLCBzaXplb2YodikpKVxuLVx0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XG4gXHRcdFdSSVRFX09OQ0UobXJ0LVx1MDAzZW1yb3V0ZV9kb19hc3NlcnQsIHYpO1xuK1x0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG5AQCAtMTgzNCw5ICsxOTM3LDkgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFx0XHRpbnQgdjtcbiBcbiBcdFx0aWYgKG9wdGxlbiAhPSBzaXplb2YodikpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VpbnZhbDtcbiBcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNnYsIG9wdHZhbCwgc2l6ZW9mKHYpKSlcbi1cdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0XHRnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0O1xuIFxuIFx0XHRkb193cm1pZndob2xlID0gKHYgPT0gTVJUNk1TR19XUk1JRldIT0xFKTtcbiBcdFx0diA9ICEhdjtcbkBAIC0xODQ4LDYgKzE5NTEsNyBAQCBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRcdFx0V1JJVEVfT05DRShtcnQtXHUwMDNlbXJvdXRlX2RvX3dydmlmd2hvbGUsIGRvX3dybWlmd2hvbGUpO1xuIFx0XHR9XG4gXHRcdHJ0bmxfdW5sb2NrKCk7XG4rXHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuQEAgLTE4NjQsMTggKzE5NjgsMjIgQEAgaW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFx0XHQvKiBcInBpbTZyZWcldVwiIHNob3VsZCBub3QgZXhjZWVkIDE2IGJ5dGVzIChJRk5BTVNJWikgKi9cbiBcdFx0aWYgKHYgIT0gUlRfVEFCTEVfREVGQVVMVCBcdTAwMjZcdTAwMjYgdiBcdTAwM2U9IDEwMDAwMDAwMClcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0aWYgKHNrID09IHJjdV9hY2Nlc3NfcG9pbnRlcihtcnQtXHUwMDNlbXJvdXRlX3NrKSlcbitcbitcdFx0bXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQobmV0LCB0YWJsZSk7XG4rXHRcdGlmIChtcnQgXHUwMDI2XHUwMDI2IHNrID09IHJjdV9hY2Nlc3NfcG9pbnRlcihtcnQtXHUwMDNlbXJvdXRlX3NrKSkge1xuK1x0XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRcdHJldHVybiAtRUJVU1k7XG4rXHRcdH1cbitcdFx0aWYgKCFuc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkge1xuK1x0XHRcdGlmIChtcnQpXG4rXHRcdFx0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbitcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbitcdFx0fVxuK1x0XHRpZiAobXJ0KVxuK1x0XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFxuLVx0XHRydG5sX2xvY2soKTtcbi1cdFx0cmV0ID0gMDtcbi1cdFx0bXJ0ID0gaXA2bXJfbmV3X3RhYmxlKG5ldCwgdik7XG4tXHRcdGlmIChJU19FUlIobXJ0KSlcbi1cdFx0XHRyZXQgPSBQVFJfRVJSKG1ydCk7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyYXc2X3NrKHNrKS1cdTAwM2VpcDZtcl90YWJsZSA9IHY7XG4tXHRcdHJ0bmxfdW5sb2NrKCk7XG4tXHRcdHJldHVybiByZXQ7XG4rXHRcdHJhdzZfc2soc2spLVx1MDAzZWlwNm1yX3RhYmxlID0gdjtcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4gI2VuZGlmXG4gXHQvKlxuQEAgLTE4ODMsOCArMTk5MSwyNSBAQCBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gXHQgKlx0c2V0LlxuIFx0ICovXG4gXHRkZWZhdWx0OlxuK1x0XHRpZiAobXJ0KVxuK1x0XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuIFx0fVxuK1xuK291dF9wdXRfdGFibGVfZWZhdWx0OlxuK1x0aWYgKG1ydClcbitcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4rXHRyZXR1cm4gLUVGQVVMVDtcbitcbitvdXRfcHV0X3RhYmxlX2VpbnZhbDpcbitcdGlmIChtcnQpXG4rXHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuK1x0cmV0dXJuIC1FSU5WQUw7XG4rXG4rb3V0X3B1dF90YWJsZV9lbmZpbGU6XG4rXHRpZiAobXJ0KVxuK1x0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbitcdHJldHVybiAtRU5GSUxFO1xuIH1cbiBcbiAvKlxuQEAgLTE4OTUsNiArMjAyMCw3IEBAIGludCBpcDZfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0XHQgIHNvY2twdHJfdCBvcHRsZW4pXG4ge1xuIFx0aW50IG9scjtcbitcdGludCByZXQgPSAwO1xuIFx0aW50IHZhbDtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbiBcdHN0cnVjdCBtcl90YWJsZSAqbXJ0O1xuQEAgLTE5MDMsNyArMjAyOSw3IEBAIGludCBpcDZfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdCAgICBpbmV0X3NrKHNrKS1cdTAwM2VpbmV0X251bSAhPSBJUFBST1RPX0lDTVBWNilcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0bXJ0ID0gaXA2bXJfZ2V0X3RhYmxlKG5ldCwgcmF3Nl9zayhzayktXHUwMDNlaXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTtcbitcdG1ydCA9IGlwNm1yX2dldF90YWJsZV9ob2xkKG5ldCwgcmF3Nl9zayhzayktXHUwMDNlaXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTtcbiBcdGlmICghbXJ0KVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbkBAIC0xOTIwLDI2ICsyMDQ2LDMzIEBAIGludCBpcDZfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0dmFsID0gUkVBRF9PTkNFKG1ydC1cdTAwM2Vtcm91dGVfZG9fYXNzZXJ0KTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRyZXR1cm4gLUVOT1BST1RPT1BUO1xuK1x0XHRyZXQgPSAtRU5PUFJPVE9PUFQ7XG4rXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNm9sciwgb3B0bGVuLCBzaXplb2YoaW50KSkpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNm9sciwgb3B0bGVuLCBzaXplb2YoaW50KSkpIHtcbitcdFx0cmV0ID0gLUVGQVVMVDtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4gXG4gXHRvbHIgPSBtaW5fdChpbnQsIG9sciwgc2l6ZW9mKGludCkpO1xuLVx0aWYgKG9sciBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAob2xyIFx1MDAzYyAwKSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuIFxuLVx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFx1MDAyNm9sciwgc2l6ZW9mKGludCkpKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdGlmIChjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBcdTAwMjZ2YWwsIG9scikpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0cmV0dXJuIDA7XG4rXHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXHUwMDI2b2xyLCBzaXplb2YoaW50KSkgfHxcbitcdCAgICBjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBcdTAwMjZ2YWwsIG9scikpXG4rXHRcdHJldCA9IC1FRkFVTFQ7XG4rb3V0OlxuK1x0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKlxuICAqXHRUaGUgSVAgbXVsdGljYXN0IGlvY3RsIHN1cHBvcnQgcm91dGluZXMuXG4gICovXG4rXG4gaW50IGlwNm1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCAqYXJnKVxuIHtcbiBcdHN0cnVjdCBzaW9jX3NnX3JlcTYgKnNyO1xuQEAgLTE5NDksNyArMjA4Miw3IEBAIGludCBpcDZtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgKmFyZylcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbiBcdHN0cnVjdCBtcl90YWJsZSAqbXJ0O1xuIFxuLVx0bXJ0ID0gaXA2bXJfZ2V0X3RhYmxlKG5ldCwgcmF3Nl9zayhzayktXHUwMDNlaXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTtcbitcdG1ydCA9IGlwNm1yX2dldF90YWJsZV9ob2xkKG5ldCwgcmF3Nl9zayhzayktXHUwMDNlaXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTtcbiBcdGlmICghbXJ0KVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbkBAIC0xOTU3LDcgKzIwOTAsNyBAQCBpbnQgaXA2bXJfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkICphcmcpXG4gXHRjYXNlIFNJT0NHRVRNSUZDTlRfSU42OlxuIFx0XHR2ciA9IChzdHJ1Y3Qgc2lvY19taWZfcmVxNiAqKWFyZztcbiBcdFx0aWYgKHZyLVx1MDAzZW1pZmkgXHUwMDNlPSBtcnQtXHUwMDNlbWF4dmlmKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9laW52YWw7XG4gXHRcdHZyLVx1MDAzZW1pZmkgPSBhcnJheV9pbmRleF9ub3NwZWModnItXHUwMDNlbWlmaSwgbXJ0LVx1MDAzZW1heHZpZik7XG4gXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0dmlmID0gXHUwMDI2bXJ0LVx1MDAzZXZpZl90YWJsZVt2ci1cdTAwM2VtaWZpXTtcbkBAIC0xOTY3LDkgKzIxMDAsMTEgQEAgaW50IGlwNm1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCAqYXJnKVxuIFx0XHRcdHZyLVx1MDAzZWlieXRlcyA9IFJFQURfT05DRSh2aWYtXHUwMDNlYnl0ZXNfaW4pO1xuIFx0XHRcdHZyLVx1MDAzZW9ieXRlcyA9IFJFQURfT05DRSh2aWYtXHUwMDNlYnl0ZXNfb3V0KTtcbiBcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiBcdGNhc2UgU0lPQ0dFVFNHQ05UX0lONjpcbiBcdFx0c3IgPSAoc3RydWN0IHNpb2Nfc2dfcmVxNiAqKWFyZztcbkBAIC0xOTgyLDE1ICsyMTE3LDIxIEBAIGludCBpcDZtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgKmFyZylcbiBcdFx0XHRzci1cdTAwM2VieXRlY250ID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZjLVx1MDAzZV9jLm1mY191bi5yZXMuYnl0ZXMpO1xuIFx0XHRcdHNyLVx1MDAzZXdyb25nX2lmID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZjLVx1MDAzZV9jLm1mY191bi5yZXMud3JvbmdfaWYpO1xuIFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuIFx0ZGVmYXVsdDpcbitcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdHJldHVybiAtRU5PSU9DVExDTUQ7XG4gXHR9XG4tfVxuIFxuK291dF9wdXRfdGFibGVfZWludmFsOlxuK1x0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4gI2lmZGVmIENPTkZJR19DT01QQVRcbiBzdHJ1Y3QgY29tcGF0X3Npb2Nfc2dfcmVxNiB7XG4gXHRzdHJ1Y3Qgc29ja2FkZHJfaW42IHNyYztcbkBAIC0yMDE3LDE2ICsyMTU4LDE2IEBAIGludCBpcDZtcl9jb21wYXRfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKVxuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuIFx0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4gXG4tXHRtcnQgPSBpcDZtcl9nZXRfdGFibGUobmV0LCByYXc2X3NrKHNrKS1cdTAwM2VpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpO1xuK1x0bXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQobmV0LCByYXc2X3NrKHNrKS1cdTAwM2VpcDZtcl90YWJsZSA/IDogUlQ2X1RBQkxFX0RGTFQpO1xuIFx0aWYgKCFtcnQpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuIFx0c3dpdGNoIChjbWQpIHtcbiBcdGNhc2UgU0lPQ0dFVE1JRkNOVF9JTjY6XG4gXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZ2ciwgYXJnLCBzaXplb2YodnIpKSlcbi1cdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0XHRnb3RvIG91dF9wdXRfdGFibGVfZWZhdWx0O1xuIFx0XHRpZiAodnIubWlmaSBcdTAwM2U9IG1ydC1cdTAwM2VtYXh2aWYpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VpbnZhbDtcbiBcdFx0dnIubWlmaSA9IGFycmF5X2luZGV4X25vc3BlYyh2ci5taWZpLCBtcnQtXHUwMDNlbWF4dmlmKTtcbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHR2aWYgPSBcdTAwMjZtcnQtXHUwMDNldmlmX3RhYmxlW3ZyLm1pZmldO1xuQEAgLTIwMzgsMTQgKzIxNzksMTYgQEAgaW50IGlwNm1yX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpXG4gXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRcdFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFx1MDAyNnZyLCBzaXplb2YodnIpKSlcbi1cdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRcdFx0Z290byBvdXRfcHV0X3RhYmxlX2VmYXVsdDtcbitcdFx0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiBcdGNhc2UgU0lPQ0dFVFNHQ05UX0lONjpcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnNyLCBhcmcsIHNpemVvZihzcikpKVxuLVx0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XG4gXG4gXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0YyA9IGlwNm1yX2NhY2hlX2ZpbmQobXJ0LCBcdTAwMjZzci5zcmMuc2luNl9hZGRyLCBcdTAwMjZzci5ncnAuc2luNl9hZGRyKTtcbkBAIC0yMDU2LDE0ICsyMTk5LDI1IEBAIGludCBpcDZtcl9jb21wYXRfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKVxuIFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0XHRcdGlmIChjb3B5X3RvX3VzZXIoYXJnLCBcdTAwMjZzciwgc2l6ZW9mKHNyKSkpXG4tXHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0XHRcdGdvdG8gb3V0X3B1dF90YWJsZV9lZmF1bHQ7XG4rXHRcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdH1cbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4gXHRkZWZhdWx0OlxuK1x0XHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbiBcdFx0cmV0dXJuIC1FTk9JT0NUTENNRDtcbiBcdH1cbitcbitvdXRfcHV0X3RhYmxlX2VmYXVsdDpcbitcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuK1x0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rb3V0X3B1dF90YWJsZV9laW52YWw6XG4rXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbitcdHJldHVybiAtRUlOVkFMO1xuIH1cbiAjZW5kaWZcbiBcbkBAIC0yMzkyLDEzICsyNTQ2LDE2IEBAIGludCBpcDZfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0aWYgKHZpZiBcdTAwM2U9IDApIHtcbiBcdFx0XHRpbnQgZXJyID0gaXA2bXJfY2FjaGVfdW5yZXNvbHZlZChtcnQsIHZpZiwgc2tiLCBkZXYpO1xuIFxuK1x0XHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbitcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbiBcbiBcdGlwNl9tcl9mb3J3YXJkKG5ldCwgbXJ0LCBkZXYsIHNrYiwgY2FjaGUpO1xuK1x0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMjQ0MSwxOSArMjU5OCwyNSBAQCBpbnQgaXA2X21yX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdC8qIE5vIHVzYWJsZSBjYWNoZSBlbnRyeSAqL1xuIFx0aWYgKCFjYWNoZSkge1xuIFx0XHR2aWYgPSBpcDZtcl9maW5kX3ZpZihtcnQsIGRldik7XG4tXHRcdGlmICh2aWYgXHUwMDNlPSAwKVxuLVx0XHRcdHJldHVybiBpcDZtcl9jYWNoZV91bnJlc29sdmVkKG1ydCwgdmlmLCBza2IsIGRldik7XG4tXHRcdGdvdG8gaXA2X291dHB1dDtcbitcdFx0aWYgKHZpZiBcdTAwM2U9IDApIHtcbitcdFx0XHRlcnIgPSBpcDZtcl9jYWNoZV91bnJlc29sdmVkKG1ydCwgdmlmLCBza2IsIGRldik7XG4rXHRcdFx0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1x0XHRnb3RvIG91dF9wdXQ7XG4gXHR9XG4gXG4gXHQvKiBXcm9uZyBpbnRlcmZhY2UgKi9cbiBcdHZpZiA9IGNhY2hlLVx1MDAzZV9jLm1mY19wYXJlbnQ7XG4gXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKG1ydC1cdTAwM2V2aWZfdGFibGVbdmlmXS5kZXYpICE9IGRldilcbi1cdFx0Z290byBpcDZfb3V0cHV0O1xuK1x0XHRnb3RvIG91dF9wdXQ7XG4gXG4gXHRpcDZfbXJfb3V0cHV0X2ZpbmlzaChuZXQsIG1ydCwgZGV2LCBza2IsIGNhY2hlKTtcbitcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0cmV0dXJuIDA7XG4gXG4rb3V0X3B1dDpcbitcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIGlwNl9vdXRwdXQ6XG4gXHRyZXR1cm4gaXA2X291dHB1dChuZXQsIHNrLCBza2IpO1xuIH1cbkBAIC0yNzU1LDMzICsyOTE4LDM1IEBAIHN0YXRpYyBpbnQgaXA2bXJfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRncnAgPSBubGFfZ2V0X2luNl9hZGRyKHRiW1JUQV9EU1RdKTtcbiBcdHRhYmxlaWQgPSBubGFfZ2V0X3UzMl9kZWZhdWx0KHRiW1JUQV9UQUJMRV0sIDApO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVxuLVx0bXJ0ID0gX19pcDZtcl9nZXRfdGFibGUobmV0LCB0YWJsZWlkID86IFJUX1RBQkxFX0RFRkFVTFQpO1xuK1x0bXJ0ID0gaXA2bXJfZ2V0X3RhYmxlX2hvbGQobmV0LCB0YWJsZWlkID86IFJUX1RBQkxFX0RFRkFVTFQpO1xuIFx0aWYgKCFtcnQpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJNUiB0YWJsZSBkb2VzIG5vdCBleGlzdFwiKTtcbiBcdFx0ZXJyID0gLUVOT0VOVDtcbi1cdFx0Z290byBlcnI7XG4rXHRcdGdvdG8gZXJyX2ZyZWU7XG4gXHR9XG4gXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRjYWNoZSA9IGlwNm1yX2NhY2hlX2ZpbmQobXJ0LCBcdTAwMjZzcmMsIFx1MDAyNmdycCk7XG4gXHRpZiAoIWNhY2hlKSB7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcIk1SIGNhY2hlIGVudHJ5IG5vdCBmb3VuZFwiKTtcbiBcdFx0ZXJyID0gLUVOT0VOVDtcbi1cdFx0Z290byBlcnI7XG4rXHRcdGdvdG8gZXJyX3B1dDtcbiBcdH1cbiBcbiBcdGVyciA9IGlwNm1yX2ZpbGxfbXJvdXRlKG1ydCwgc2tiLCBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxuIFx0XHRcdFx0bmxoLVx1MDAzZW5sbXNnX3NlcSwgY2FjaGUsIFJUTV9ORVdST1VURSwgMCk7XG4tXHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycjtcbi1cbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcHV0O1xuIFxuLVx0cmV0dXJuIHJ0bmxfdW5pY2FzdChza2IsIG5ldCwgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCk7XG4rXHRlcnIgPSBydG5sX3VuaWNhc3Qoc2tiLCBuZXQsIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQpO1xuK1x0aXA2bXJfcHV0X3RhYmxlKG1ydCk7XG4rXHRyZXR1cm4gZXJyO1xuIFxuLWVycjpcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuK2Vycl9wdXQ6XG4rXHRpcDZtcl9wdXRfdGFibGUobXJ0KTtcbitlcnJfZnJlZTpcbiBcdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5AQCAtMjgwNCw3ICsyOTY5LDcgQEAgc3RhdGljIGludCBpcDZtcl9ydG1fZHVtcHJvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdGlmIChmaWx0ZXIudGFibGVfaWQpIHtcbiBcdFx0c3RydWN0IG1yX3RhYmxlICptcnQ7XG4gXG4tXHRcdG1ydCA9IF9faXA2bXJfZ2V0X3RhYmxlKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIGZpbHRlci50YWJsZV9pZCk7XG4rXHRcdG1ydCA9IGlwNm1yX2dldF90YWJsZV9ob2xkKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIGZpbHRlci50YWJsZV9pZCk7XG4gXHRcdGlmICghbXJ0KSB7XG4gXHRcdFx0aWYgKHJ0bmxfbXNnX2ZhbWlseShjYi1cdTAwM2VubGgpICE9IFJUTkxfRkFNSUxZX0lQNk1SKSB7XG4gXHRcdFx0XHRlcnIgPSBza2ItXHUwMDNlbGVuO1xuQEAgLTI4MTgsNiArMjk4Myw3IEBAIHN0YXRpYyBpbnQgaXA2bXJfcnRtX2R1bXByb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXG4gXHRcdGVyciA9IG1yX3RhYmxlX2R1bXAobXJ0LCBza2IsIGNiLCBfaXA2bXJfZmlsbF9tcm91dGUsXG4gXHRcdFx0XHQgICAgXHUwMDI2bWZjX3VucmVzX2xvY2ssIFx1MDAyNmZpbHRlcik7XG4rXHRcdGlwNm1yX3B1dF90YWJsZShtcnQpO1xuIFx0XHRlcnIgPSBza2ItXHUwMDNlbGVuID8gOiBlcnI7XG4gXHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjI6NTk6MzIuNDc5MzQ0Mzk1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU1NjUzNjk0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogSVB2NiBNdWx0aWNhc3QgUm91dGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggYWZmZWN0aW5nIElQdjYgbXVsdGljYXN0IHJvdXRpbmcsIHNwZWNpZmljYWxseSB0b3VjaGluZyBgbmV0L2lwdjYvaXA2bXIuY2AsIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2AsIGFuZCBgaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oYC4gIFRoZSBjb3JlIG9mIGl0IGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgcmVmZXJlbmNlIGNvdW50aW5nIGZvciBgc3RydWN0IG1yX3RhYmxlYCDigJMgYHJlZmNudGAgYW5kIGBkZXN0cm95X3dvcmtgIOKAkyBhbmQgYSBjb3JyZXNwb25kaW5nIGNoYW5nZSBpbiB0aGUgdGFibGUgbWFuYWdlbWVudCBmdW5jdGlvbnMuIEJhc2ljYWxseSwgdGhleSBhcmUgdHJ5aW5nIHRvIGZpeCBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24sIHdoaWNoIGlzIGNyaXRpY2FsLlxuXG5NeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMsICp5ZXMqLCB0aGlzIHdhcnJhbnRzIGZ1enppbmcuIEl0J3MgdG91Y2hpbmcgY29yZSBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSBJUHY2IG11bHRpY2FzdCByb3V0aW5nLCB3aGljaCBtZWFucyBpdOKAmXMgZGVmaW5pdGVseSBjcml0aWNhbCBpbmZyYXN0cnVjdHVyZS4gSXQgaXMgYWNjZXNzaWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYXMgd2VsbC5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaCB0byBjb25zdHJ1Y3QgYSBsaXN0IG9mIGZ1enogdGFyZ2V0cy4gVGhlIG1vc3QgaW1wb3J0YW50IG9uZXMgc2VlbSB0byBiZSB0aGUgbmV3IGBpcDZtcl9nZXRfdGFibGVfaG9sZGAsIGBfX2lwNm1yX3B1dF90YWJsZWAsIGBpcDZtcl9wdXRfdGFibGVgLCBhbmQgYGlwNm1yX2ZyZWVfdGFibGVfd29ya2AsIGJ1dCB0aGUgbW9kaWZpY2F0aW9ucyBhcmVuJ3QgbGltaXRlZCB0byB0aGF0LiBUaGV5IGFsc28gbW9kaWZpZWQgaG93IHRoZSBvdGhlciBmdW5jdGlvbnMgYXJlIHVzZWQgbGlrZSBgaXA2bXJfbmV3X3RhYmxlYCwgYGlwNm1yX2ZyZWVfdGFibGVgLCBgcGltNl9yY3ZgLCBgcmVnX3ZpZl94bWl0YCwgYF9faXA2bXJfc2tfaW5pdGAsIGBpcDZtcl9za19kb25lYCwgYG1yb3V0ZTZfaXNfc29ja2V0YCwgYGlwNl9tcm91dGVfc2V0c29ja29wdGAsIGBpcDZfbXJvdXRlX2dldHNvY2tvcHRgLCBgaXA2bXJfaW9jdGxgLCBgaXA2bXJfY29tcGF0X2lvY3RsYCwgYGlwNl9tcl9pbnB1dGAsIGBpcDZfbXJfb3V0cHV0YCwgYGlwNm1yX3J0bV9nZXRyb3V0ZWAsIGFuZCBgaXA2bXJfcnRtX2R1bXByb3V0ZWAuXG5cblRoaW5raW5nIGFib3V0IHRoZSBtb3N0IGVmZmVjdGl2ZSBmdXp6aW5nIHRhcmdldHMsIEknZCBob25lIGluIG9uIHRoZXNlOiBgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0YCwgYGlwNl9tcm91dGVfZ2V0c29ja29wdGAsIGBpcDZtcl9pb2N0bGAsIGBpcDZtcl9jb21wYXRfaW9jdGxgLCBgaXA2X21yX2lucHV0YCwgYGlwNl9tcl9vdXRwdXRgLCBgaXA2bXJfcnRtX2dldHJvdXRlYCwgYGlwNm1yX3J0bV9kdW1wcm91dGVgLCBgcGltNl9yY3ZgLCBhbmQgYHJlZ192aWZfeG1pdGAuIFNvY2tldCBvcHRpb25zIGFuZCBpb2N0bHMgYXJlIGFsd2F5cyBnb29kIHN0YXJ0aW5nIHBvaW50cywgc2luY2UgdGhleSBwcm92aWRlIGRpcmVjdCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBrZXJuZWwuIFRoZSByb3V0aW5nIHRhYmxlIGludGVyYWN0aW9uIGFuZCBwYWNrZXQgaW5wdXQvb3V0cHV0IGZ1bmN0aW9ucyBhcmUgYWxzbyBpbXBvcnRhbnQuXG5cbkZpbmFsbHksIGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9mIHRoZSBLY29uZmlnIG9wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBJUHY2IG11bHRpY2FzdCByb3V0aW5nIChgQ09ORklHX0lQVjZfTVJPVVRFYCkgaXMgZW5hYmxlZC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB3aXRoIGEgYGdyZXBwZXJgIHNlYXJjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4OTYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMjo1OTo0MS4wMzU4ODU0MDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ0Mzc5ODcxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUFY2X01ST1VURVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZz03MD1DT05GSUdfSVBWNl9TVUJUUkVFUz15XFxuYXJjaC9hcm0vY29uZmlncy9rZXlzdG9uZV9kZWZjb25maWc6NzE6Q09ORklHX0lQVjZfTVJPVVRFPXlcXG5hcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZy03Mi1DT05GSUdfSVBWNl9QSU1TTV9WMj15XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnPTE1OT1DT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVM9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc6MTYwOkNPTkZJR19JUFY2X01ST1VURT15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy0xNjEtQ09ORklHX01QVENQPXlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9MTc1PUNPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUz15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzoxNzY6Q09ORklHX0lQVjZfTVJPVVRFPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnLTE3Ny1DT05GSUdfTVBUQ1A9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvYmNtNDd4eF9kZWZjb25maWc9MjU9Q09ORklHX0lQVjZfU1VCVFJFRVM9eVxcbmFyY2gvbWlwcy9jb25maWdzL2JjbTQ3eHhfZGVmY29uZmlnOjI2OkNPTkZJR19JUFY2X01ST1VURT15XFxuYXJjaC9taXBzL2NvbmZpZ3MvYmNtNDd4eF9kZWZjb25maWctMjctQ09ORklHX05FVEZJTFRFUj15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9kYjF4eHhfZGVmY29uZmlnPTY1PUNPTkZJR19JUFY2X1NVQlRSRUVTPXlcXG5hcmNoL21pcHMvY29uZmlncy9kYjF4eHhfZGVmY29uZmlnOjY2OkNPTkZJR19JUFY2X01ST1VURT15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZGIxeHh4X2RlZmNvbmZpZzo2NzpDT05GSUdfSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcXG5hcmNoL21pcHMvY29uZmlncy9kYjF4eHhfZGVmY29uZmlnLTY4LUNPTkZJR19JUFY2X1BJTVNNX1YyPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnPTQ4PUNPTkZJR19JUFY2X1NVQlRSRUVTPXlcXG5hcmNoL21pcHMvY29uZmlncy9pcDIyX2RlZmNvbmZpZzo0OTpDT05GSUdfSVBWNl9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnLTUwLUNPTkZJR19JUFY2X1BJTVNNX1YyPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnPTQ3PUNPTkZJR19JUFY2X1NVQlRSRUVTPXlcXG5hcmNoL21pcHMvY29uZmlncy9pcDI3X2RlZmNvbmZpZzo0ODpDT05GSUdfSVBWNl9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnLTQ5LUNPTkZJR19JUFY2X1BJTVNNX1YyPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2lwMzBfZGVmY29uZmlnPTQ3PUNPTkZJR19JUFY2X1NVQlRSRUVTPXlcXG5hcmNoL21pcHMvY29uZmlncy9pcDMwX2RlZmNvbmZpZzo0ODpDT05GSUdfSVBWNl9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL2lwMzBfZGVmY29uZmlnLTQ5LUNPTkZJR19JUFY2X1BJTVNNX1YyPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZz01MT1DT05GSUdfSVBWNl9UVU5ORUw9bVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZzo1MjpDT05GSUdfSVBWNl9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZy01My1DT05GSUdfSVBWNl9QSU1TTV9WMj15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9rdm1fZGVmY29uZmlnPTU1PUNPTkZJR19JUFY2X1RVTk5FTD1tXFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfa3ZtX2RlZmNvbmZpZzo1NjpDT05GSUdfSVBWNl9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWctNTctQ09ORklHX0lQVjZfUElNU01fVjI9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnPTU0PUNPTkZJR19JUFY2X1RVTk5FTD1tXFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnOjU1OkNPTkZJR19JUFY2X01ST1VURT15XFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF94cGFfZGVmY29uZmlnLTU2LUNPTkZJR19JUFY2X1BJTVNNX1YyPXlcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWc9MTE3PUNPTkZJR19JUFY2X1NVQlRSRUVTPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnOjExODpDT05GSUdfSVBWNl9NUk9VVEU9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWctMTE5LUNPTkZJR19JUFY2X1BJTVNNX1YyPXlcXG4tLVxcbmRyaXZlcnMvbmV0L3ZyZi5jPTE1MTc9c3RhdGljIGludCB2cmZfYWRkX2ZpYl9ydWxlcyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdnJmLmMtMTUzNC1cXG5kcml2ZXJzL25ldC92cmYuYzoxNTM1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVMpXFxuZHJpdmVycy9uZXQvdnJmLmMtMTUzNi1cXHRlcnIgPSB2cmZfZmliX3J1bGUoZGV2LCBSVE5MX0ZBTUlMWV9JUDZNUiwgdHJ1ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC92cmYuYy0xNTQyLVxcbmRyaXZlcnMvbmV0L3ZyZi5jOjE1NDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFUylcXG5kcml2ZXJzL25ldC92cmYuYy0xNTQ0LWlwNm1yX2VycjpcXG4tLVxcbmluY2x1ZGUvbGludXgvaXB2Ni5oPTEzPXN0cnVjdCBpcHY2X2RldmNvbmYge1xcbi0tXFxuaW5jbHVkZS9saW51eC9pcHY2LmgtNjItI2VuZGlmXFxuaW5jbHVkZS9saW51eC9pcHY2Lmg6NjM6I2lmZGVmIENPTkZJR19JUFY2X01ST1VURVxcbmluY2x1ZGUvbGludXgvaXB2Ni5oLTY0LVxcdGF0b21pY190XFx0bWNfZm9yd2FyZGluZztcXG4tLVxcbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oLTEzLVxcbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oOjE0OiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVcXG5pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaC0xNS1zdGF0aWMgaW5saW5lIGludCBpcDZfbXJvdXRlX29wdChpbnQgb3B0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9tcm91dGU2Lmg9MjY9c3RydWN0IHNvY2s7XFxuaW5jbHVkZS9saW51eC9tcm91dGU2LmgtMjctXFxuaW5jbHVkZS9saW51eC9tcm91dGU2Lmg6Mjg6I2lmZGVmIENPTkZJR19JUFY2X01ST1VURVxcbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oLTI5LWV4dGVybiBpbnQgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICosIGludCwgc29ja3B0cl90LCB1bnNpZ25lZCBpbnQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tcm91dGU2Lmg9Njg9c3RhdGljIGlubGluZSB2b2lkIGlwNl9tcl9jbGVhbnVwKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaC03My1cXG5pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaDo3NDojaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oLTc1LWJvb2wgaXA2bXJfcnVsZV9kZWZhdWx0KGNvbnN0IHN0cnVjdCBmaWJfcnVsZSAqcnVsZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaD0xMDQ9ZXh0ZXJuIGludCBpcDZtcl9nZXRfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tcm91dGU2LmgtMTA2LVxcbmluY2x1ZGUvbGludXgvbXJvdXRlNi5oOjEwNzojaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFXFxuaW5jbHVkZS9saW51eC9tcm91dGU2LmgtMTA4LWJvb2wgbXJvdXRlNl9pc19zb2NrZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaD02Nj1zdHJ1Y3QgbmV0bnNfaXB2NiB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRucy9pcHY2LmgtMTA3LVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaDoxMDg6I2lmZGVmIENPTkZJR19JUFY2X01ST1VURVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaDoxMDk6I2lmbmRlZiBDT05GSUdfSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxuaW5jbHVkZS9uZXQvbmV0bnMvaXB2Ni5oLTExMC1cXHRzdHJ1Y3QgbXJfdGFibGVcXHRcXHQqbXJ0NjtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaD02ODI9ZW51bSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgtNzAyLSNkZWZpbmUgUlRNR1JQX0lQVjZfSUZBRERSXFx0MHgxMDBcXG5pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmg6NzAzOiNkZWZpbmUgUlRNR1JQX0lQVjZfTVJPVVRFXFx0MHgyMDBcXG5pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgtNzA0LSNkZWZpbmUgUlRNR1JQX0lQVjZfUk9VVEVcXHQweDQwMFxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oPTcxND1lbnVtIHJ0bmV0bGlua19ncm91cHMge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oLTczNC0jZGVmaW5lIFJUTkxHUlBfSVBWNl9JRkFERFJcXHRSVE5MR1JQX0lQVjZfSUZBRERSXFxuaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oOjczNTpcXHRSVE5MR1JQX0lQVjZfTVJPVVRFLFxcbmluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaDo3MzY6I2RlZmluZSBSVE5MR1JQX0lQVjZfTVJPVVRFXFx0UlROTEdSUF9JUFY2X01ST1VURVxcbmluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaC03MzctXFx0UlROTEdSUF9JUFY2X1JPVVRFLFxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oLTc3NC0jZGVmaW5lIFJUTkxHUlBfSVBWNF9NUk9VVEVfUlxcdFJUTkxHUlBfSVBWNF9NUk9VVEVfUlxcbmluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaDo3NzU6XFx0UlROTEdSUF9JUFY2X01ST1VURV9SLFxcbmluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaDo3NzY6I2RlZmluZSBSVE5MR1JQX0lQVjZfTVJPVVRFX1JcXHRSVE5MR1JQX0lQVjZfTVJPVVRFX1JcXG5pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgtNzc3LVxcdFJUTkxHUlBfTkVYVEhPUCxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTExMD1zdGF0aWMgdTggYmF0YWR2X21jYXN0X21sYV9ydHJfZmxhZ3NfbWVzaGlmX2dldF9pcHY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMzAtICovXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTMxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X01ST1VURSlcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMzItc3RhdGljIHU4IGJhdGFkdl9tY2FzdF9tbGFfcnRyX2ZsYWdzX21lc2hpZl9nZXRfaXB2NihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NzEwNj1zdGF0aWMgaW50IHJ0bmV0bGlua19iaW5kKHN0cnVjdCBuZXQgKm5ldCwgaW50IGdyb3VwKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNzEwOS1cXHRjYXNlIFJUTkxHUlBfSVBWNF9NUk9VVEVfUjpcXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo3MTEwOlxcdGNhc2UgUlROTEdSUF9JUFY2X01ST1VURV9SOlxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTcxMTEtXFx0XFx0aWYgKCFuc19jYXBhYmxlKG5ldC1cXHUwMDNldXNlcl9ucywgQ0FQX05FVF9BRE1JTikpXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTIxNj1jb25maWcgSVBfTVJPVVRFX0NPTU1PTlxcbm5ldC9pcHY0L0tjb25maWctMjE3LVxcdGJvb2xcXG5uZXQvaXB2NC9LY29uZmlnOjIxODpcXHRkZXBlbmRzIG9uIElQX01ST1VURSB8fCBJUFY2X01ST1VURVxcbm5ldC9pcHY0L0tjb25maWctMjE5LVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0yNDM9Y29uZmlnIElQVjZfU1VCVFJFRVNcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjU2LVxcbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxcbm5ldC9pcHY2L0tjb25maWctMjU4LVxcdGJvb2wgXFxcIklQdjY6IG11bHRpY2FzdCByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXFxubmV0L2lwdjYvS2NvbmZpZzoyNjU6Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L0tjb25maWctMjY2LVxcdGJvb2wgXFxcIklQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG5uZXQvaXB2Ni9LY29uZmlnOjI2NzpcXHRkZXBlbmRzIG9uIElQVjZfTVJPVVRFXFxubmV0L2lwdjYvS2NvbmZpZy0yNjgtXFx0c2VsZWN0IEZJQl9SVUxFU1xcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0yNzk9Y29uZmlnIElQVjZfUElNU01fVjJcXG5uZXQvaXB2Ni9LY29uZmlnLTI4MC1cXHRib29sIFxcXCJJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcXFwiXFxubmV0L2lwdjYvS2NvbmZpZzoyODE6XFx0ZGVwZW5kcyBvbiBJUFY2X01ST1VURVxcbm5ldC9pcHY2L0tjb25maWctMjgyLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L01ha2VmaWxlPTE1PWlwdjYtJChDT05GSUdfU1lTQ1RMKSArPSBzeXNjdGxfbmV0X2lwdjYub1xcbm5ldC9pcHY2L01ha2VmaWxlOjE2OmlwdjYtJChDT05GSUdfSVBWNl9NUk9VVEUpICs9IGlwNm1yLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS0xNy1cXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NTA4PXN0YXRpYyBpbnQgaW5ldDZfbmV0Y29uZl9tc2dzaXplX2RldmNvbmYoaW50IHR5cGUpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTUxOC1cXHRcXHRzaXplICs9IG5sYV90b3RhbF9zaXplKDQpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTE5OiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTUyMC1cXHRpZiAoYWxsIHx8IHR5cGUgPT0gTkVUQ09ORkFfTUNfRk9SV0FSRElORylcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NTMyPXN0YXRpYyBpbnQgaW5ldDZfbmV0Y29uZl9maWxsX2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlmaW5kZXgsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU2MS1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjU2MjojaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFXFxubmV0L2lwdjYvYWRkcmNvbmYuYy01NjMtXFx0aWYgKChhbGwgfHwgdHlwZSA9PSBORVRDT05GQV9NQ19GT1JXQVJESU5HKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz01NjYyPXN0YXRpYyB2b2lkIGlwdjZfc3RvcmVfZGV2Y29uZihjb25zdCBzdHJ1Y3QgaXB2Nl9kZXZjb25mICpjbmYsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3MTUtI2VuZGlmXFxubmV0L2lwdjYvYWRkcmNvbmYuYzo1NzE2OiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3MTctXFx0YXJyYXlbREVWQ09ORl9NQ19GT1JXQVJESU5HXSA9IGF0b21pY19yZWFkKFxcdTAwMjZjbmYtXFx1MDAzZW1jX2ZvcndhcmRpbmcpO1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz02ODYzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGFkZHJjb25mX3N5c2N0bFtdID0ge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy03MTMxLSNlbmRpZlxcbm5ldC9pcHY2L2FkZHJjb25mLmM6NzEzMjojaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFXFxubmV0L2lwdjYvYWRkcmNvbmYuYy03MTMzLVxcdHtcXG4tLVxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jPTU1ND1pbnQgaXA2X21jX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01NzYtXFxubmV0L2lwdjYvaXA2X2lucHV0LmM6NTc3OiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01NzgtXFx0LypcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9MTEwPXN0YXRpYyB2b2lkIGlwbXJfZXhwaXJlX3Byb2Nlc3Moc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMTExLVxcbm5ldC9pcHY2L2lwNm1yLmM6MTEyOiNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvaXA2bXIuYy0xMTMtI2RlZmluZSBpcDZtcl9mb3JfZWFjaF90YWJsZShtcnQsIG5ldCkgXFxcXFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz00MzU9c3RhdGljIHZvaWQgaXA2bXJfbmV3X3RhYmxlX3NldChzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNDM3LXtcXG5uZXQvaXB2Ni9pcDZtci5jOjQzODojaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L2lwNm1yLmMtNDM5LVxcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZtcnQtXFx1MDAzZWxpc3QsIFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYubXI2X3RhYmxlcyk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTE3OTg9aW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xOTU4LSNlbmRpZlxcbm5ldC9pcHY2L2lwNm1yLmM6MTk1OTojaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L2lwNm1yLmMtMTk2MC1cXHRjYXNlIE1SVDZfVEFCTEU6XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTI3Njk9c3RhdGljIHZvaWQgbXI2X25ldGxpbmtfZXZlbnQoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBtZmM2X2NhY2hlICptZmMsXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTI3ODMtXFxubmV0L2lwdjYvaXA2bXIuYzoyNzg0OlxcdHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0lQVjZfTVJPVVRFLCBOVUxMLCBHRlBfQVRPTUlDKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTI3ODUtXFx0cmV0dXJuO1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0yNzg4LVxcdGtmcmVlX3NrYihza2IpO1xcbm5ldC9pcHY2L2lwNm1yLmM6Mjc4OTpcXHRydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfTVJPVVRFLCBlcnIpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMjc5MC19XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTI4MDk9c3RhdGljIHZvaWQgbXJ0Nm1zZ19uZXRsaW5rX2V2ZW50KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqcGt0KVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0yODQ2LVxcbm5ldC9pcHY2L2lwNm1yLmM6Mjg0NzpcXHRydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9JUFY2X01ST1VURV9SLCBOVUxMLCBHRlBfQVRPTUlDKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTI4NDgtXFx0cmV0dXJuO1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0yODUzLVxcdGtmcmVlX3NrYihza2IpO1xcbm5ldC9pcHY2L2lwNm1yLmM6Mjg1NDpcXHRydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfTVJPVVRFX1IsIC1FTk9CVUZTKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTI4NTUtfVxcbi0tXFxubmV0L2lwdjYvcmF3LmM9MTExNT1zdGF0aWMgaW50IHJhd3Y2X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxcbi0tXFxubmV0L2lwdjYvcmF3LmMtMTEzNS1cXHRkZWZhdWx0Olxcbm5ldC9pcHY2L3Jhdy5jOjExMzY6I2lmZGVmIENPTkZJR19JUFY2X01ST1VURVxcbm5ldC9pcHY2L3Jhdy5jLTExMzctXFx0XFx0cmV0dXJuIGlwNm1yX2lvY3RsKHNrLCBjbWQsIGthcmcpO1xcbi0tXFxubmV0L2lwdjYvcmF3LmM9MTE0NT1zdGF0aWMgaW50IGNvbXBhdF9yYXd2Nl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxubmV0L2lwdjYvcmF3LmMtMTE1MS1cXHRkZWZhdWx0Olxcbm5ldC9pcHY2L3Jhdy5jOjExNTI6I2lmZGVmIENPTkZJR19JUFY2X01ST1VURVxcbm5ldC9pcHY2L3Jhdy5jLTExNTMtXFx0XFx0cmV0dXJuIGlwNm1yX2NvbXBhdF9pb2N0bChzaywgY21kLCBjb21wYXRfcHRyKGFyZykpO1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYz01Nzc0PXN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTU4MzktXFx0aWYgKGlpZikge1xcbm5ldC9pcHY2L3JvdXRlLmM6NTg0MDojaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFXFxubmV0L2lwdjYvcm91dGUuYy01ODQxLVxcdFxcdGlmIChpcHY2X2FkZHJfaXNfbXVsdGljYXN0KFxcdTAwMjZydDZfZHN0LVxcdTAwM2VhZGRyKSkge1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oPTY4Mj1lbnVtIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaC03MDItI2RlZmluZSBSVE1HUlBfSVBWNl9JRkFERFJcXHQweDEwMFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaDo3MDM6I2RlZmluZSBSVE1HUlBfSVBWNl9NUk9VVEVcXHQweDIwMFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaC03MDQtI2RlZmluZSBSVE1HUlBfSVBWNl9ST1VURVxcdDB4NDAwXFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmg9NzE0PWVudW0gcnRuZXRsaW5rX2dyb3VwcyB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgtNzM0LSNkZWZpbmUgUlROTEdSUF9JUFY2X0lGQUREUlxcdFJUTkxHUlBfSVBWNl9JRkFERFJcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmg6NzM1OlxcdFJUTkxHUlBfSVBWNl9NUk9VVEUsXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oOjczNjojZGVmaW5lIFJUTkxHUlBfSVBWNl9NUk9VVEVcXHRSVE5MR1JQX0lQVjZfTVJPVVRFXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oLTczNy1cXHRSVE5MR1JQX0lQVjZfUk9VVEUsXFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgtNzc0LSNkZWZpbmUgUlROTEdSUF9JUFY0X01ST1VURV9SXFx0UlROTEdSUF9JUFY0X01ST1VURV9SXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oOjc3NTpcXHRSVE5MR1JQX0lQVjZfTVJPVVRFX1IsXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oOjc3NjojZGVmaW5lIFJUTkxHUlBfSVBWNl9NUk9VVEVfUlxcdFJUTkxHUlBfSVBWNl9NUk9VVEVfUlxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaC03NzctXFx0UlROTEdSUF9ORVhUSE9QLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZz00Mz1DT05GSUdfSVBWNl9JT0FNNl9MV1RVTk5FTD15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZzo0NDpDT05GSUdfSVBWNl9NUk9VVEU9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWctNDUtQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3J3YXJkaW5nL2NvbmZpZz0xMj1DT05GSUdfSVBWNl9HUkU9bVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3J3YXJkaW5nL2NvbmZpZzoxMzpDT05GSUdfSVBWNl9NUk9VVEU9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3J3YXJkaW5nL2NvbmZpZzoxNDpDT05GSUdfSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm9yd2FyZGluZy9jb25maWctMTUtQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjI6NTk6NDQuNDc5Njg4NzQ3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4ODYyNTExNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgYSBmZXcgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gd29yayBjb3JyZWN0bHkuIFRoZSBjb3JlIG5lY2Vzc2l0aWVzIHNlZW0gdG8gYmUgYElQVjZfTVJPVVRFYCBhbmQgYElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU2AuIElkZWFsbHksIGZvciByb2J1c3QgdGVzdGluZyBvZiBgcGltNl9yY3ZgLCBJIHNob3VsZCBhbHNvIGluY2x1ZGUgYElQVjZfUElNU01fVjJgIGFzIHdlbGwuIFNpbmNlIHRoaXMgaW52b2x2ZXMgaXBtcl9iYXNlLmMgbW9kaWZpY2F0aW9ucywgSSBoYXZlIHRvIGVuYWJsZSBib3RoIGBJUF9NUk9VVEVgIGFuZCBgSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFU2AgdG9vLiBSaWdodCwgbGV0J3Mgc3RhcnQgYnkgZG91YmxlLWNoZWNraW5nIHRob3NlIGBJUF9NUk9VVEVgIGNvbmZpZ3VyYXRpb25zIHRvIGNvbmZpcm0gdGhleSdyZSBlbmFibGVkIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTUxNiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMjo1OTo0Ny45NjgzMTczNDFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1NjcyNTQxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUF9NUk9VVEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnPTMwPUNPTkZJR19JUF9QTlBfQk9PVFA9eVxcbmFyY2gvYXJtL2NvbmZpZ3MvaXhwNHh4X2RlZmNvbmZpZzozMTpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL2FybS9jb25maWdzL2l4cDR4eF9kZWZjb25maWctMzItQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvYXJtL2NvbmZpZ3Mva2V5c3RvbmVfZGVmY29uZmlnPTU5PUNPTkZJR19ORVRfSVBHUkU9eVxcbmFyY2gvYXJtL2NvbmZpZ3Mva2V5c3RvbmVfZGVmY29uZmlnOjYwOkNPTkZJR19JUF9NUk9VVEU9eVxcbmFyY2gvYXJtL2NvbmZpZ3Mva2V5c3RvbmVfZGVmY29uZmlnOjYxOkNPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcXG5hcmNoL2FybS9jb25maWdzL2tleXN0b25lX2RlZmNvbmZpZy02Mi1DT05GSUdfSVBfUElNU01fVjI9eVxcbi0tXFxuYXJjaC9hcm0vY29uZmlncy9uaGs4ODE1X2RlZmNvbmZpZz0zMD1DT05GSUdfTkVUX0lQSVA9eVxcbmFyY2gvYXJtL2NvbmZpZ3MvbmhrODgxNV9kZWZjb25maWc6MzE6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9hcm0vY29uZmlncy9uaGs4ODE1X2RlZmNvbmZpZy0zMi0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXRcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc9MTMwPUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjEzMTpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjEzMjpDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUz15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy0xMzMtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9MTQ2PUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjE0NzpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjE0ODpDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUz15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0xNDktQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2JjbTQ3eHhfZGVmY29uZmlnPTE5PUNPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eVxcbmFyY2gvbWlwcy9jb25maWdzL2JjbTQ3eHhfZGVmY29uZmlnOjIwOkNPTkZJR19JUF9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL2JjbTQ3eHhfZGVmY29uZmlnOjIxOkNPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcXG5hcmNoL21pcHMvY29uZmlncy9iY200N3h4X2RlZmNvbmZpZy0yMi1DT05GSUdfU1lOX0NPT0tJRVM9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZz00ND1DT05GSUdfSVBfUE5QX0JPT1RQPXlcXG5hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnOjQ1OkNPTkZJR19JUF9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWctNDYtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2JtaXBzX3N0Yl9kZWZjb25maWc9NjE9Q09ORklHX0lQX1BOUF9SQVJQPXlcXG5hcmNoL21pcHMvY29uZmlncy9ibWlwc19zdGJfZGVmY29uZmlnOjYyOkNPTkZJR19JUF9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL2JtaXBzX3N0Yl9kZWZjb25maWctNjMtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2Nhdml1bV9vY3Rlb25fZGVmY29uZmlnPTM5PUNPTkZJR19JUF9QTlBfUkFSUD15XFxuYXJjaC9taXBzL2NvbmZpZ3MvY2F2aXVtX29jdGVvbl9kZWZjb25maWc6NDA6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9taXBzL2NvbmZpZ3MvY2F2aXVtX29jdGVvbl9kZWZjb25maWctNDEtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2xlbW90ZTJmX2RlZmNvbmZpZz00MD1DT05GSUdfTkVUX0lQSVA9bVxcbmFyY2gvbWlwcy9jb25maWdzL2xlbW90ZTJmX2RlZmNvbmZpZzo0MTpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL21pcHMvY29uZmlncy9sZW1vdGUyZl9kZWZjb25maWctNDItQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZz0zNj1DT05GSUdfTkVUX0lQSVA9bVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZzozNzpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWctMzgtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWc9NDA9Q09ORklHX05FVF9JUElQPW1cXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9rdm1fZGVmY29uZmlnOjQxOkNPTkZJR19JUF9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX2t2bV9kZWZjb25maWctNDItQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX3FlbXVfMzJyNl9kZWZjb25maWc9MzU9Q09ORklHX05FVF9JUElQPW1cXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YV9xZW11XzMycjZfZGVmY29uZmlnOjM2OkNPTkZJR19JUF9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhX3FlbXVfMzJyNl9kZWZjb25maWctMzctQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhYXBycF9kZWZjb25maWc9Mzc9Q09ORklHX05FVF9JUElQPW1cXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YWFwcnBfZGVmY29uZmlnOjM4OkNPTkZJR19JUF9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhYXBycF9kZWZjb25maWctMzktQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhc212cF9kZWZjb25maWc9Mzg9Q09ORklHX05FVF9JUElQPW1cXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXNtdnBfZGVmY29uZmlnOjM5OkNPTkZJR19JUF9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhc212cF9kZWZjb25maWctNDAtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhc212cF9ldmFfZGVmY29uZmlnPTM5PUNPTkZJR19ORVRfSVBJUD1tXFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFzbXZwX2V2YV9kZWZjb25maWc6NDA6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFzbXZwX2V2YV9kZWZjb25maWctNDEtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfZGVmY29uZmlnPTM2PUNPTkZJR19ORVRfSVBJUD1tXFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF9kZWZjb25maWc6Mzc6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGF1cF9kZWZjb25maWctMzgtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZz0zOT1DT05GSUdfTkVUX0lQSVA9bVxcbmFyY2gvbWlwcy9jb25maWdzL21hbHRhdXBfeHBhX2RlZmNvbmZpZzo0MDpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL21pcHMvY29uZmlncy9tYWx0YXVwX3hwYV9kZWZjb25maWctNDEtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL210eDFfZGVmY29uZmlnPTUxPUNPTkZJR19ORVRfSVBJUD1tXFxuYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWc6NTI6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWctNTMtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL3FpX2xiNjBfZGVmY29uZmlnPTI4PUNPTkZJR19JUF9ST1VURV9WRVJCT1NFPXlcXG5hcmNoL21pcHMvY29uZmlncy9xaV9sYjYwX2RlZmNvbmZpZzoyOTpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL21pcHMvY29uZmlncy9xaV9sYjYwX2RlZmNvbmZpZzozMDpDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvcWlfbGI2MF9kZWZjb25maWctMzEtIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXRcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZz0yNz1DT05GSUdfTkVUX0lQSVA9bVxcbmFyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZzoyODpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWctMjktQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL3JzOTBfZGVmY29uZmlnPTUwPUNPTkZJR19JUF9ST1VURV9WRVJCT1NFPXlcXG5hcmNoL21pcHMvY29uZmlncy9yczkwX2RlZmNvbmZpZzo1MTpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL21pcHMvY29uZmlncy9yczkwX2RlZmNvbmZpZzo1MjpDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvcnM5MF9kZWZjb25maWctNTMtIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXRcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL3J0MzA1eF9kZWZjb25maWc9MzQ9Q09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eVxcbmFyY2gvbWlwcy9jb25maWdzL3J0MzA1eF9kZWZjb25maWc6MzU6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9taXBzL2NvbmZpZ3MvcnQzMDV4X2RlZmNvbmZpZzozNjpDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvcnQzMDV4X2RlZmNvbmZpZy0zNy1DT05GSUdfU1lOX0NPT0tJRVM9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWc9MzY9Q09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eVxcbmFyY2gvbWlwcy9jb25maWdzL3h3YXlfZGVmY29uZmlnOjM3OkNPTkZJR19JUF9NUk9VVEU9eVxcbmFyY2gvbWlwcy9jb25maWdzL3h3YXlfZGVmY29uZmlnOjM4OkNPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXlcXG5hcmNoL21pcHMvY29uZmlncy94d2F5X2RlZmNvbmZpZy0zOS1DT05GSUdfU1lOX0NPT0tJRVM9eVxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9nZV9pbXAzYV9kZWZjb25maWc9NTQ9Q09ORklHX05FVF9JUElQPW1cXG5hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2dlX2ltcDNhX2RlZmNvbmZpZzo1NTpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2dlX2ltcDNhX2RlZmNvbmZpZy01Ni1DT05GSUdfSVBfUElNU01fVjE9eVxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZjb25maWc9NTA9Q09ORklHX05FVF9JUElQPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3hlc19tcGM4NXh4X2RlZmNvbmZpZzo1MTpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3hlc19tcGM4NXh4X2RlZmNvbmZpZy01Mi1DT05GSUdfSVBfUElNU01fVjE9eVxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZnNsLWVtYi1ub25ody5jb25maWc9NTg9Q09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZnNsLWVtYi1ub25ody5jb25maWc6NTk6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZnNsLWVtYi1ub25ody5jb25maWctNjAtQ09ORklHX0lQX01VTFRJQ0FTVD15XFxuLS1cXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnPTkwPUNPTkZJR19ORVRfSVBJUD1tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZzo5MTpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnLTkyLUNPTkZJR19JUF9QSU1TTV9WMT15XFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9MTQ1PUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MTQ2OkNPTkZJR19JUF9NUk9VVEU9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzoxNDc6Q09ORklHX0lQX01ST1VURV9NVUxUSVBMRV9UQUJMRVM9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy0xNDgtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZz0xMzY9Q09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzoxMzc6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnOjEzODpDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUz15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTEzOS1DT05GSUdfSVBfUElNU01fVjE9eVxcbi0tXFxuYXJjaC9zaC9jb25maWdzL3NlNzcxMl9kZWZjb25maWc9Mzg9Q09ORklHX0lQX1BOUF9CT09UUD15XFxuYXJjaC9zaC9jb25maWdzL3NlNzcxMl9kZWZjb25maWc6Mzk6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9zaC9jb25maWdzL3NlNzcxMl9kZWZjb25maWctNDAtQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvc2gvY29uZmlncy9zZTc3MjFfZGVmY29uZmlnPTM3PUNPTkZJR19JUF9QTlBfREhDUD15XFxuYXJjaC9zaC9jb25maWdzL3NlNzcyMV9kZWZjb25maWc6Mzg6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9zaC9jb25maWdzL3NlNzcyMV9kZWZjb25maWctMzktQ09ORklHX0lQX1BJTVNNX1YxPXlcXG4tLVxcbmFyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWc9NDE9Q09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eVxcbmFyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWc6NDI6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9zaC9jb25maWdzL3RpdGFuX2RlZmNvbmZpZy00My1DT05GSUdfSVBfUElNU01fVjE9eVxcbi0tXFxuYXJjaC9zcGFyYy9jb25maWdzL3NwYXJjNjRfZGVmY29uZmlnPTM5PUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXlcXG5hcmNoL3NwYXJjL2NvbmZpZ3Mvc3BhcmM2NF9kZWZjb25maWc6NDA6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC9zcGFyYy9jb25maWdzL3NwYXJjNjRfZGVmY29uZmlnLTQxLUNPTkZJR19JUF9QSU1TTV9WMT15XFxuLS1cXG5hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnPTczPUNPTkZJR19JUF9QTlBfUkFSUD15XFxuYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZzo3NDpDT05GSUdfSVBfTVJPVVRFPXlcXG5hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnLTc1LUNPTkZJR19JUF9QSU1TTV9WMT15XFxuLS1cXG5hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWc9NzQ9Q09ORklHX0lQX1BOUF9SQVJQPXlcXG5hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWc6NzU6Q09ORklHX0lQX01ST1VURT15XFxuYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnLTc2LUNPTkZJR19JUF9QSU1TTV9WMT15XFxuLS1cXG5kcml2ZXJzL25ldC92cmYuYz0xNTE3PXN0YXRpYyBpbnQgdnJmX2FkZF9maWJfcnVsZXMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3ZyZi5jLTE1MjgtXFxuZHJpdmVycy9uZXQvdnJmLmM6MTUyOTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUylcXG5kcml2ZXJzL25ldC92cmYuYy0xNTMwLVxcdGVyciA9IHZyZl9maWJfcnVsZShkZXYsIFJUTkxfRkFNSUxZX0lQTVIsIHRydWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvdnJmLmMtMTU0Ny1cXG5kcml2ZXJzL25ldC92cmYuYzoxNTQ4OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTKVxcbmRyaXZlcnMvbmV0L3ZyZi5jLTE1NDktaXBtcl9lcnI6XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21yb3V0ZS5oLTEyLVxcbmluY2x1ZGUvbGludXgvbXJvdXRlLmg6MTM6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVcXG5pbmNsdWRlL2xpbnV4L21yb3V0ZS5oLTE0LXN0YXRpYyBpbmxpbmUgaW50IGlwX21yb3V0ZV9vcHQoaW50IG9wdClcXG4tLVxcbmluY2x1ZGUvbGludXgvbXJvdXRlX2Jhc2UuaD0yNzI9c3RhdGljIGlubGluZSBib29sIG1yX2Nhbl9mcmVlX3RhYmxlKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbmluY2x1ZGUvbGludXgvbXJvdXRlX2Jhc2UuaC0yNzYtXFxuaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oOjI3NzojaWZkZWYgQ09ORklHX0lQX01ST1VURV9DT01NT05cXG5pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmgtMjc4LXZvaWQgdmlmX2RldmljZV9pbml0KHN0cnVjdCB2aWZfZGV2aWNlICp2LFxcbi0tXFxuaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oPTM5Nz1zdHJ1Y3QgbXJfbWZjX2l0ZXIge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tcm91dGVfYmFzZS5oLTQwNS1cXG5pbmNsdWRlL2xpbnV4L21yb3V0ZV9iYXNlLmg6NDA2OiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFX0NPTU1PTlxcbmluY2x1ZGUvbGludXgvbXJvdXRlX2Jhc2UuaC00MDctdm9pZCAqbXJfdmlmX3NlcV9pZHgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdmlmX2l0ZXIgKml0ZXIsIGxvZmZfdCBwb3MpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oPTU1PXN0cnVjdCBuZXRuc19pcHY0IHtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaC0yNzUtXFxuaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oOjI3NjojaWZkZWYgQ09ORklHX0lQX01ST1VURVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaDoyNzc6I2lmbmRlZiBDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaC0yNzgtXFx0c3RydWN0IG1yX3RhYmxlIF9fcmN1XFx0Km1ydDtcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MjA3PWNvbmZpZyBORVRfSVBHUkVfQlJPQURDQVNUXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTIxNS1cXG5uZXQvaXB2NC9LY29uZmlnOjIxNjpjb25maWcgSVBfTVJPVVRFX0NPTU1PTlxcbm5ldC9pcHY0L0tjb25maWctMjE3LVxcdGJvb2xcXG5uZXQvaXB2NC9LY29uZmlnOjIxODpcXHRkZXBlbmRzIG9uIElQX01ST1VURSB8fCBJUFY2X01ST1VURVxcbm5ldC9pcHY0L0tjb25maWctMjE5LVxcbm5ldC9pcHY0L0tjb25maWc6MjIwOmNvbmZpZyBJUF9NUk9VVEVcXG5uZXQvaXB2NC9LY29uZmlnLTIyMS1cXHRib29sIFxcXCJJUDogbXVsdGljYXN0IHJvdXRpbmdcXFwiXFxubmV0L2lwdjQvS2NvbmZpZy0yMjItXFx0ZGVwZW5kcyBvbiBJUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9LY29uZmlnOjIyMzpcXHRzZWxlY3QgSVBfTVJPVVRFX0NPTU1PTlxcbm5ldC9pcHY0L0tjb25maWctMjI0LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMjMxLVxcbm5ldC9pcHY0L0tjb25maWc6MjMyOmNvbmZpZyBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjQvS2NvbmZpZy0yMzMtXFx0Ym9vbCBcXFwiSVA6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjIzNDpcXHRkZXBlbmRzIG9uIElQX01ST1VURSBcXHUwMDI2XFx1MDAyNiBJUF9BRFZBTkNFRF9ST1VURVJcXG5uZXQvaXB2NC9LY29uZmlnLTIzNS1cXHRzZWxlY3QgRklCX1JVTEVTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTI0Nj1jb25maWcgSVBfUElNU01fVjFcXG5uZXQvaXB2NC9LY29uZmlnLTI0Ny1cXHRib29sIFxcXCJJUDogUElNLVNNIHZlcnNpb24gMSBzdXBwb3J0XFxcIlxcbm5ldC9pcHY0L0tjb25maWc6MjQ4OlxcdGRlcGVuZHMgb24gSVBfTVJPVVRFXFxubmV0L2lwdjQvS2NvbmZpZy0yNDktXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0yNTk9Y29uZmlnIElQX1BJTVNNX1YyXFxubmV0L2lwdjQvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiSVA6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFxcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjI2MTpcXHRkZXBlbmRzIG9uIElQX01ST1VURVxcbm5ldC9pcHY0L0tjb25maWctMjYyLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlPTIyPW9iai0kKENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMpICs9IGZpYl9ydWxlcy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6MjM6b2JqLSQoQ09ORklHX0lQX01ST1VURSkgKz0gaXBtci5vXFxubmV0L2lwdjQvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX0lQX01ST1VURV9DT01NT04pICs9IGlwbXJfYmFzZS5vXFxubmV0L2lwdjQvTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX05FVF9JUElQKSArPSBpcGlwLm9cXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xMTYtI2luY2x1ZGUgXFx1MDAzY25ldC9zZWN1cmVfc2VxLmhcXHUwMDNlXFxubmV0L2lwdjQvYWZfaW5ldC5jOjExNzojaWZkZWYgQ09ORklHX0lQX01ST1VURVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xMTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21yb3V0ZS5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jPTE4ODI9c3RhdGljIGludCBfX2luaXQgaW5ldF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTk4OC1cXHQgKi9cXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTk4OTojaWYgZGVmaW5lZChDT05GSUdfSVBfTVJPVVRFKVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xOTkwLVxcdGlmIChpcF9tcl9pbml0KCkpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTAxLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXJfaXB2NC5oXFx1MDAzZVxcbm5ldC9pcHY0L2lnbXAuYzoxMDI6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVcXG5uZXQvaXB2NC9pZ21wLmMtMTAzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tcm91dGUuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jPTM2Nz1pbnQgaXBfbWNfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMzgzLVxcdFxcdGlmIChza19tY19sb29wKHNrKVxcbm5ldC9pcHY0L2lwX291dHB1dC5jOjM4NDojaWZkZWYgQ09ORklHX0lQX01ST1VURVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTM4NS1cXHRcXHQvKiBTbWFsbCBvcHRpbWl6YXRpb246IGRvIG5vdCBsb29wYmFjayBub3QgbG9jYWwgZnJhbWVzLFxcbi0tXFxubmV0L2lwdjQvaXBtci5jPTExOD1zdGF0aWMgdm9pZCBpcG1yX2V4cGlyZV9wcm9jZXNzKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG5uZXQvaXB2NC9pcG1yLmMtMTE5LVxcbm5ldC9pcHY0L2lwbXIuYzoxMjA6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjQvaXBtci5jLTEyMS0jZGVmaW5lIGlwbXJfZm9yX2VhY2hfdGFibGUobXJ0LCBuZXQpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubmV0L2lwdjQvaXBtci5jPTQwOD1zdGF0aWMgdm9pZCBpcG1yX25ld190YWJsZV9zZXQoc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtNDEwLXtcXG5uZXQvaXB2NC9pcG1yLmM6NDExOiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY0L2lwbXIuYy00MTItXFx0bGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNm1ydC1cXHUwMDNlbGlzdCwgXFx1MDAyNm5ldC1cXHUwMDNlaXB2NC5tcl90YWJsZXMpO1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTE0MTA9aW50IGlwX21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTU3OC1cXHRjYXNlIE1SVF9UQUJMRTpcXG5uZXQvaXB2NC9pcG1yLmM6MTU3OTpcXHRcXHRpZiAoIUlTX0JVSUxUSU4oQ09ORklHX0lQX01ST1VURV9NVUxUSVBMRV9UQUJMRVMpKSB7XFxubmV0L2lwdjQvaXBtci5jLTE1ODAtXFx0XFx0XFx0cmV0ID0gLUVOT1BST1RPT1BUO1xcbi0tXFxubmV0L2lwdjQvcmF3LmM9ODcxPXN0YXRpYyBpbnQgcmF3X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxcbi0tXFxubmV0L2lwdjQvcmF3LmMtODkxLVxcdGRlZmF1bHQ6XFxubmV0L2lwdjQvcmF3LmM6ODkyOiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXFxubmV0L2lwdjQvcmF3LmMtODkzLVxcdFxcdHJldHVybiBpcG1yX2lvY3RsKHNrLCBjbWQsIGthcmcpO1xcbi0tXFxubmV0L2lwdjQvcmF3LmM9OTAxPXN0YXRpYyBpbnQgY29tcGF0X3Jhd19pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxubmV0L2lwdjQvcmF3LmMtOTA3LVxcdGRlZmF1bHQ6XFxubmV0L2lwdjQvcmF3LmM6OTA4OiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXFxubmV0L2lwdjQvcmF3LmMtOTA5LVxcdFxcdHJldHVybiBpcG1yX2NvbXBhdF9pb2N0bChzaywgY21kLCBjb21wYXRfcHRyKGFyZykpO1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0xNzM5PWlwX3JvdXRlX2lucHV0X21jKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0xNzY5LVxcbm5ldC9pcHY0L3JvdXRlLmM6MTc3MDojaWZkZWYgQ09ORklHX0lQX01ST1VURVxcbm5ldC9pcHY0L3JvdXRlLmMtMTc3MS1cXHRpZiAoIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGRhZGRyKSBcXHUwMDI2XFx1MDAyNiBJTl9ERVZfTUZPUldBUkQoaW5fZGV2KSlcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MjQ5MT1pcF9yb3V0ZV9pbnB1dF9yY3Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTI1MjctXFx0XFx0aWYgKG91clxcbm5ldC9pcHY0L3JvdXRlLmM6MjUyODojaWZkZWYgQ09ORklHX0lQX01ST1VURVxcbm5ldC9pcHY0L3JvdXRlLmMtMjUyOS1cXHRcXHRcXHR8fFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0yNTU5PXN0YXRpYyBzdHJ1Y3QgcnRhYmxlICpfX21rcm91dGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTI2NjYtXFx0XFx0fVxcbm5ldC9pcHY0L3JvdXRlLmM6MjY2NzojaWZkZWYgQ09ORklHX0lQX01ST1VURVxcbm5ldC9pcHY0L3JvdXRlLmMtMjY2OC1cXHRcXHRpZiAodHlwZSA9PSBSVE5fTVVMVElDQVNUKSB7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTI5NDY9c3RhdGljIGludCBydF9maWxsX2luZm8oc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgZHN0LCBfX2JlMzIgc3JjLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0zMDQ4LVxcdFxcdGlmIChydF9pc19pbnB1dF9yb3V0ZShydCkpIHtcXG5uZXQvaXB2NC9yb3V0ZS5jOjMwNDk6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVcXG5uZXQvaXB2NC9yb3V0ZS5jLTMwNTAtXFx0XFx0XFx0aWYgKGlwdjRfaXNfbXVsdGljYXN0KGRzdCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MjU3PWNvbmZpZyBJUFY2X01ST1VURVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNTktXFx0ZGVwZW5kcyBvbiBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZzoyNjA6XFx0c2VsZWN0IElQX01ST1VURV9DT01NT05cXG5uZXQvaXB2Ni9LY29uZmlnLTI2MS1cXHRoZWxwXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82ND0xMDY9Q09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy54ODZfNjQ6MTA3OkNPTkZJR19JUF9NUk9VVEU9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0LTEwOC1DT05GSUdfSVBfTVVMVElDQVNUPXlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9jb25maWcuY29tbW9uPTkzPUNPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9jb25maWcuY29tbW9uOjk0OkNPTkZJR19JUF9NUk9VVEU9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9jb25maWcuY29tbW9uLTk1LUNPTkZJR19JUF9NVUxUSUNBU1Q9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvcndhcmRpbmcvY29uZmlnPTY9Q09ORklHX0RVTU1ZPW1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm9yd2FyZGluZy9jb25maWc6NzpDT05GSUdfSVBfTVJPVVRFPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm9yd2FyZGluZy9jb25maWc6ODpDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUz15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvcndhcmRpbmcvY29uZmlnLTktQ09ORklHX0lQX1BJTVNNX1YxPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjI6NTk6NTAuNjI1MDUwNDA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYzMzA3NjQwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIElQdjYgTXVsdGljYXN0IFJvdXRpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdGFza2VkIHdpdGggYW5hbHl6aW5nIHRoaXMgcGF0Y2gsIGFuZCBoZXJlJ3MgbXkgYnJlYWtkb3duLiBGaXJzdCBvZmYsIEkgc2VlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkOiBgSVBWNl9NUk9VVEVgLCBgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTYCwgYW5kIGBJUFY2X1BJTVNNX1YyYC4gTGV0J3MgY2xhcmlmeSB3aHksIGJlY2F1c2UgdGhlIHBhdGNoIG9ubHkgdG91Y2hlcyBgbmV0L2lwdjYvaXA2bXIuY2AgYW5kIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2AuIGBpcG1yX2Jhc2UuY2AgaXMgY29tcGlsZWQgdW5kZXIgYENPTkZJR19JUF9NUk9VVEVfQ09NTU9OYCwgd2hpY2ggZ2V0cyBlbmFibGVkIHdoZW4gd2UgaGF2ZSBlaXRoZXIgYElQVjZfTVJPVVRFYCBvciBgSVBfTVJPVVRFYC4gU2luY2UgdGhlIHBhdGNoICppc24ndCogdG91Y2hpbmcgSVB2NCBzcGVjaWZpYyByb3V0aW5nIGNvZGUgKGxpa2UgYG5ldC9pcHY0L2lwbXIuY2ApLCBgSVBWNl9NUk9VVEVgIGlzIHRoZSBjcml0aWNhbCBjb25maWcgaGVyZS4gQW5kIHNpbmNlIG11bHRpcGxlIHRhYmxlcyBhbmQgUElNdjIgYXJlIHJlbGV2YW50IHBhcnRzIG9mIElQdjYgbXVsdGljYXN0IHJvdXRpbmcsIHRob3NlIGNvbmZpZ3VyYXRpb25zIGFyZSBhbHNvIG5lY2Vzc2FyeS4gU28sIHllcywgdGhlIHNldCBpbmNsdWRlcyBgSVBWNl9NUk9VVEVgLCBgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTYCwgYW5kIGBJUFY2X1BJTVNNX1YyYC5cblxuSnVzdCB0byBjb25maXJtOiBgQ09ORklHX0lQVjZfTVJPVVRFYCBpcyBkZXBlbmRlbnQgb24gYENPTkZJR19JUFY2YC4gYENPTkZJR19JUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNgIGRlcGVuZHMgb24gYENPTkZJR19JUFY2X01ST1VURWAgYW5kIHNlbGVjdHMgYENPTkZJR19GSUJfUlVMRVNgLiBgQ09ORklHX0lQVjZfUElNU01fVjJgIGRlcGVuZHMgb24gYENPTkZJR19JUFY2X01ST1VURWAuXG5cbk5vdywgZm9jdXNpbmcgb24gdGhlIHN5bWJvbHMuIEkndmUgY29tcGlsZWQgYSBsaXN0OiBgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0YCwgYGlwNl9tcm91dGVfZ2V0c29ja29wdGAsIGBpcDZtcl9pb2N0bGAsIGBpcDZtcl9jb21wYXRfaW9jdGxgLCBgaXA2X21yX2lucHV0YCwgYGlwNl9tcl9vdXRwdXRgLCBgaXA2bXJfcnRtX2dldHJvdXRlYCwgYGlwNm1yX3J0bV9kdW1wcm91dGVgLCBgcGltNl9yY3ZgLCBhbmQgYHJlZ192aWZfeG1pdGAuXG5cbkxldCdzIHZlcmlmeSB0aGVzZSBpbiB0aGUgcGF0Y2ggYW5kIGFsc28gdGhhdCB0aGV5IGFyZSBub3Qgc3RhdGljL2lubGluZWQsIHBlciBpbnN0cnVjdGlvbnMuIGBpcDZfbXJvdXRlX3NldHNvY2tvcHRgIGFuZCBgaXA2X21yb3V0ZV9nZXRzb2Nrb3B0YCBzZWVtIHRvIGJlIGV4cG9ydGVkLCBtZWFuaW5nIGdsb2JhbC4gU2FtZSB3aXRoIGBpcDZtcl9pb2N0bGAgYW5kIGBpcDZtcl9jb21wYXRfaW9jdGxgLiBgaXA2X21yX2lucHV0YCBhbmQgYGlwNl9tcl9vdXRwdXRgIGFsc28gYXBwZWFyIHRvIGJlIGV4cG9ydGVkIGFuZCBnbG9iYWwuXG5cbk5vdywgYGlwNm1yX3J0bV9nZXRyb3V0ZWAgYW5kIGBpcDZtcl9ydG1fZHVtcHJvdXRlYCBhcmUgc3RhdGljIGJ1dCByZWdpc3RlcmVkIGFzIG5ldGxpbmsgY2FsbGJhY2tzLiBUaGF0IG1lYW5zIHRoZWlyIGFkZHJlc3NlcyBhcmUgYmVpbmcgdGFrZW4sIHNvIHRoZXkgd29uJ3QgYmUgaW5saW5lZC4gYHBpbTZfcmN2YCBpcyBhbHNvIHN0YXRpYywgYnV0IGEgcHJvdG9jb2wgaGFuZGxlciBhbmQgYHJlZ192aWZfeG1pdGAgaXMgc3RhdGljLCBidXQgYSBuZXRkZXYgb3AgLS0gYm90aCBhcmUgZmluZS4gVGhhdCBtZWFucyB3ZSBkb24ndCBoYXZlIHRvIGNoYW5nZSB0aGUgbGlzdC5cblxuU28sIHRoZSBmb2N1cyBzeW1ib2xzIGFyZTogYGlwNl9tcm91dGVfc2V0c29ja29wdGAsIGBpcDZfbXJvdXRlX2dldHNvY2tvcHRgLCBgaXA2bXJfaW9jdGxgLCBgaXA2bXJfY29tcGF0X2lvY3RsYCwgYGlwNl9tcl9pbnB1dGAsIGBpcDZfbXJfb3V0cHV0YCwgYHBpbTZfcmN2YCwgYHJlZ192aWZfeG1pdGAsIGBpcDZtcl9ydG1fZ2V0cm91dGVgLCBhbmQgYGlwNm1yX3J0bV9kdW1wcm91dGVgLlxuXG5BbHJpZ2h0LCBsZXQncyB2ZXJpZnkgaWYgdGhlIHJlbGV2YW50IHN5bWJvbHMgYXJlIGluIHRoZSBwYXRjaC4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgaXA2bXJfcnRtX2dldHJvdXRlYCBhbmQgYGlwNm1yX3J0bV9kdW1wcm91dGVgIHRvIHVzZSBgaXA2bXJfZ2V0X3RhYmxlX2hvbGRgIGFuZCBgaXA2bXJfcHV0X3RhYmxlYCwgd2hpY2ggaXMgZ29vZC4gQWxzbywgYGlwNl9tcl9pbnB1dGAsIGBpcDZfbXJfb3V0cHV0YCwgYHBpbTZfcmN2YCwgYW5kIGByZWdfdmlmX3htaXRgIGFyZSBtb2RpZmllZC4gTGlrZXdpc2UsIGBpcDZfbXJvdXRlX3NldHNvY2tvcHRgLCBgaXA2X21yb3V0ZV9nZXRzb2Nrb3B0YCwgYGlwNm1yX2lvY3RsYCwgYW5kIGBpcDZtcl9jb21wYXRfaW9jdGxgIGFyZSB1cGRhdGVkLlxuXG5DaGVja2luZyBmb3IgYW55IG1pc3NlZCBlbnRyeSBwb2ludHMuLi4gQWgsIEkgc2VlIHRoYXQgYG1yb3V0ZTZfaXNfc29ja2V0YCBpcyBtb2RpZmllZCBhcyB3ZWxsLCBhbG9uZyB3aXRoIGBpcDZtcl9za19kb25lYC4gVGhhdCdzIGltcG9ydGFudCFcblxuU28sIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgaGVyZSdzIG15IGZpbmFsIGxpc3Qgb2Ygc3ltYm9scyB0byBpbmNsdWRlOiBgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0YCwgYGlwNl9tcm91dGVfZ2V0c29ja29wdGAsIGBpcDZtcl9pb2N0bGAsIGBpcDZtcl9jb21wYXRfaW9jdGxgLCBgaXA2X21yX2lucHV0YCwgYGlwNl9tcl9vdXRwdXRgLCBgcGltNl9yY3ZgLCBgXG5cbiIsIklucHV0VG9rZW5zIjoyNjM2OSwiT3V0cHV0VG9rZW5zIjoyMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjAwOjA2Ljk1NTgxN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NjgwNDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2X01ST1VURVwiLFxuICAgIFwiSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXCIsXG4gICAgXCJJUFY2X1BJTVNNX1YyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X21yb3V0ZV9zZXRzb2Nrb3B0XCIsXG4gICAgXCJpcDZfbXJvdXRlX2dldHNvY2tvcHRcIixcbiAgICBcImlwNm1yX2lvY3RsXCIsXG4gICAgXCJpcDZtcl9jb21wYXRfaW9jdGxcIixcbiAgICBcImlwNl9tcl9pbnB1dFwiLFxuICAgIFwiaXA2X21yX291dHB1dFwiLFxuICAgIFwicGltNl9yY3ZcIixcbiAgICBcInJlZ192aWZfeG1pdFwiLFxuICAgIFwibXJvdXRlNl9pc19zb2NrZXRcIixcbiAgICBcImlwNm1yX3NrX2RvbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJlZmVyZW5jZSBjb3VudGluZyB0byBJUHY2IG11bHRpY2FzdCByb3V0aW5nIHRhYmxlcyAoc3RydWN0IG1yX3RhYmxlKSB0byBmaXggcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3Vlcy4gSXQgbW9kaWZpZXMgdmFyaW91cyBlbnRyeSBwb2ludHMgKHNvY2tldCBvcHRpb25zLCBpb2N0bHMsIG5ldGxpbmssIHBhY2tldCByeC90eCkgdG8gaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgdGFibGUgd2hpbGUgaW4gdXNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2X01ST1VURVwiLFxuICAgIFwiSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXCIsXG4gICAgXCJJUFY2X1BJTVNNX1YyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXA2X21yb3V0ZV9zZXRzb2Nrb3B0XCIsXG4gICAgXCJpcDZfbXJvdXRlX2dldHNvY2tvcHRcIixcbiAgICBcImlwNm1yX2lvY3RsXCIsXG4gICAgXCJpcDZtcl9jb21wYXRfaW9jdGxcIixcbiAgICBcImlwNl9tcl9pbnB1dFwiLFxuICAgIFwiaXA2X21yX291dHB1dFwiLFxuICAgIFwicGltNl9yY3ZcIixcbiAgICBcInJlZ192aWZfeG1pdFwiLFxuICAgIFwibXJvdXRlNl9pc19zb2NrZXRcIixcbiAgICBcImlwNm1yX3NrX2RvbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJlZmVyZW5jZSBjb3VudGluZyB0byBJUHY2IG11bHRpY2FzdCByb3V0aW5nIHRhYmxlcyAoc3RydWN0IG1yX3RhYmxlKSB0byBmaXggcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3Vlcy4gSXQgbW9kaWZpZXMgdmFyaW91cyBlbnRyeSBwb2ludHMgKHNvY2tldCBvcHRpb25zLCBpb2N0bHMsIG5ldGxpbmssIHBhY2tldCByeC90eCkgdG8gaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgdGFibGUgd2hpbGUgaW4gdXNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhprd[1] Phase: Succeeded StartedAt: 2026-07-24 23:00:19 +0000 UTC FinishedAt: 2026-07-24 23:00:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-24 23:00:19 +0000 UTC FinishedAt: 2026-07-24 23:00:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[2] Phase: Succeeded StartedAt: 2026-07-24 23:00:19 +0000 UTC FinishedAt: 2026-07-25 03:23:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-24 23:00:19 +0000 UTC FinishedAt: 2026-07-25 03:23:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-24 23:00:19 +0000 UTC FinishedAt: 2026-07-24 23:00:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-24 23:00:19 +0000 UTC FinishedAt: 2026-07-24 23:00:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhhprd/series-workflowhhprd-convert-artifact-996352074/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-24 23:00:40 +0000 UTC FinishedAt: 2026-07-24 23:42:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-24 23:00:40 +0000 UTC FinishedAt: 2026-07-24 23:42:50 +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:*43940b4e-ad9e-479a-98c2-61c352fa565d,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-workflowhhprd/series-workflowhhprd-convert-artifact-996352074/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": "4d300d50-9e09-470b-801e-b22a0914a46c", "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-workflowhhprd/series-workflowhhprd-build-action-1857534008/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-24 23:00:40 +0000 UTC FinishedAt: 2026-07-24 23:42:40 +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:*43940b4e-ad9e-479a-98c2-61c352fa565d,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-workflowhhprd/series-workflowhhprd-convert-artifact-996352074/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": "4d300d50-9e09-470b-801e-b22a0914a46c", "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-workflowhhprd/series-workflowhhprd-build-action-1857534008/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-24 23:42:50 +0000 UTC FinishedAt: 2026-07-24 23:42:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-24 23:42:50 +0000 UTC FinishedAt: 2026-07-24 23:42:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-24 23:42:50 +0000 UTC FinishedAt: 2026-07-24 23:43:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-24 23:42:50 +0000 UTC FinishedAt: 2026-07-24 23:42:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhhprd/series-workflowhhprd-convert-artifact-3264580069/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-24 23:43:00 +0000 UTC FinishedAt: 2026-07-24 23:45:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-24 23:43:00 +0000 UTC FinishedAt: 2026-07-24 23:45:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4d300d50-9e09-470b-801e-b22a0914a46c,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-workflowhhprd/series-workflowhhprd-build-action-1857534008/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-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-24 23:45:25 +0000 UTC FinishedAt: 2026-07-24 23:45:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-24 23:45:25 +0000 UTC FinishedAt: 2026-07-24 23:45:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-24 23:45:25 +0000 UTC FinishedAt: 2026-07-25 00:15:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-24 23:45:25 +0000 UTC FinishedAt: 2026-07-25 00:15:37 +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:*43940b4e-ad9e-479a-98c2-61c352fa565d,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-workflowhhprd/series-workflowhhprd-convert-artifact-3264580069/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": "361161be-483e-450d-9f85-deddc20b5da0", "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-workflowhhprd/series-workflowhhprd-build-action-1591238193/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-24 23:45:25 +0000 UTC FinishedAt: 2026-07-25 00:15:27 +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:*43940b4e-ad9e-479a-98c2-61c352fa565d,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-workflowhhprd/series-workflowhhprd-convert-artifact-3264580069/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": "361161be-483e-450d-9f85-deddc20b5da0", "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-workflowhhprd/series-workflowhhprd-build-action-1591238193/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-25 00:15:37 +0000 UTC FinishedAt: 2026-07-25 00:15:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-25 00:15:37 +0000 UTC FinishedAt: 2026-07-25 00:15:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-25 00:15:37 +0000 UTC FinishedAt: 2026-07-25 00:17:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-25 00:15:37 +0000 UTC FinishedAt: 2026-07-25 00:17:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*361161be-483e-450d-9f85-deddc20b5da0,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-workflowhhprd/series-workflowhhprd-build-action-1591238193/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-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-25 00:17:40 +0000 UTC FinishedAt: 2026-07-25 03:23:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-25 00:17:40 +0000 UTC FinishedAt: 2026-07-25 03:23:14 +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":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"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:*4d300d50-9e09-470b-801e-b22a0914a46c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*361161be-483e-450d-9f85-deddc20b5da0,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-workflowhhprd/series-workflowhhprd-build-action-1857534008/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-workflowhhprd/series-workflowhhprd-build-action-1591238193/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-25 00:17:40 +0000 UTC FinishedAt: 2026-07-25 00:18:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-25 00:17:40 +0000 UTC FinishedAt: 2026-07-25 00:17:49 +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":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"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-workflowhhprd/series-workflowhhprd-convert-artifact-3241475178/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-25 00:17:40 +0000 UTC FinishedAt: 2026-07-25 00:17:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-25 00:17:40 +0000 UTC FinishedAt: 2026-07-25 00:17:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-25 00:17:40 +0000 UTC FinishedAt: 2026-07-25 00:17:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-25 00:18:02 +0000 UTC FinishedAt: 2026-07-25 03:23:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhprd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip6_mroute_setsockopt","ip6_mroute_getsockopt","ip6mr_ioctl","ip6mr_compat_ioctl","ip6_mr_input","ip6_mr_output","pim6_rcv","reg_vif_xmit","mroute6_is_socket","ip6mr_sk_done"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_MROUTE","IPV6_MROUTE_MULTIPLE_TABLES","IPV6_PIMSM_V2"],"series_id":"c9c7f758-314f-4ed0-9400-04b16f040b80","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-25 00:18:02 +0000 UTC FinishedAt: 2026-07-25 03:23:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4d300d50-9e09-470b-801e-b22a0914a46c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*361161be-483e-450d-9f85-deddc20b5da0,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-workflowhhprd/series-workflowhhprd-build-action-1857534008/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-workflowhhprd/series-workflowhhprd-build-action-1591238193/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-workflowhhprd/series-workflowhhprd-convert-artifact-3241475178/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,}