Name: series-workflowgd66d Phase: Succeeded StartedAt: 2026-09-01 04:36:22 +0000 UTC FinishedAt: 2026-09-01 08:17:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[0] Phase: Succeeded StartedAt: 2026-09-01 04:36:22 +0000 UTC FinishedAt: 2026-09-01 04:39:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[0].run-triage Phase: Succeeded StartedAt: 2026-09-01 04:36:22 +0000 UTC FinishedAt: 2026-09-01 04:39:46 +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": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "KVM_X86", "KVM_XEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "KVM_X86", "KVM_XEN" ], "series_id": "799f6595-9f51-4e34-b00f-b8eaf20c1c4d" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_xen_vcpu_set_attr", "kvm_xen_hvm_set_attr", "kvm_xen_hypercall", "kvm_xen_inject_pending_events", "__kvm_xen_has_interrupt", "kvm_xen_set_evtchn_fast", "kvm_xen_hvm_evtchn_send", "kvm_gpc_refresh", "kvm_gpc_activate" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fWDg2JiMzNDssCiAgICAmIzM0O0tWTV9YRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1feGVuX3ZjcHVfc2V0X2F0dHImIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9odm1fc2V0X2F0dHImIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9oeXBlcmNhbGwmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMmIzM0OywKICAgICYjMzQ7X19rdm1feGVuX2hhc19pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmQmIzM0OywKICAgICYjMzQ7a3ZtX2dwY19yZWZyZXNoJiMzNDssCiAgICAmIzM0O2t2bV9ncGNfYWN0aXZhdGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0mIzM5O3MgWGVuIGVtdWxhdGlvbiBhbmQgR0ZOLXRvLVBGTiBjYWNoZSBpbnZhbGlkYXRpb24gbG9naWMuIFNwZWNpZmljYWxseSwgaXQ6XG4xLiBSZXBsYWNlcyB0aGUgSURSIGRhdGEgc3RydWN0dXJlIHdpdGggWEFycmF5IGZvciBldmVudCBjaGFubmVsIHBvcnQgdHJhY2tpbmcgKGBldnRjaG5fcG9ydHNgKS5cbjIuIEludHJvZHVjZXMgYSBkZWRpY2F0ZWQgc2VxdWVuY2UgY291bnRlciAoYGdwY19pbnZhbGlkYXRlX3NlcWApIGluIGBwZm5jYWNoZS5jYCBhbmQgYGt2bV9tYWluLmNgIHRvIHByb3Blcmx5IHRyYWNrIEdQQyBpbnZhbGlkYXRpb24gZXZlbnRzLlxuMy4gRml4ZXMgcG90ZW50aWFsIHNwbGl0LWxvY2sgYCNBQ2AgZXhjZXB0aW9ucyBieSBjaGVja2luZyBHUEEvSFZBIDMyLWJpdCBhbGlnbm1lbnQgaW4gYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAgYW5kIHVzaW5nIDMyLWJpdCBhdG9taWMgYml0b3BzIGZvciBgdmlfcGVuZGluZ19zZWxgLlxuNC4gRml4ZXMgU1JDVSBsb2NraW5nIGluIGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGAgYW5kIGF0b21pYyByZWFkcy93cml0ZXMgZm9yIGBwb2xsX2V2dGNobmAuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gTWVtb3J5IHNhZmV0eSBhbmQgY29uY3VycmVuY3kgY29uY2VybnMgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGxvY2tpbmcsIHVzZS1hZnRlci1mcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGFuZCBjb25jdXJyZW5jeS1jcml0aWNhbCBjaGFuZ2VzIHRvIEtWTSYjMzk7cyBYZW4gZW11bGF0aW9uIGFuZCBnZm5fdG9fcGZuX2NhY2hlIChHUEMpIHN1YnN5c3RlbS4gVGhlc2UgaW5jbHVkZSBtaWdyYXRpbmcgWGVuIGV2ZW50IGNoYW5uZWwgc3RvcmFnZSBmcm9tIElEUiB0byBYQXJyYXksIGVuZm9yY2luZyBhbGlnbm1lbnQgY2hlY2tzIGZvciB2Q1BVIGluZm8gR1BBL0hWQSwgdXNpbmcgZXhwbGljaXQgMzItYml0IGF0b21pYyBiaXRvcHMgdG8gcHJldmVudCBzcGxpdC1sb2NrIEFDIGV4Y2VwdGlvbnMgb24gdW5hbGlnbmVkIHN0cnVjdHVyZXMsIGludHJvZHVjaW5nIFNSQ1UgbG9ja2luZyBpbiBfX2t2bV94ZW5faGFzX2ludGVycnVwdCwgYW5kIHNlcGFyYXRpbmcgR1BDIGludmFsaWRhdGlvbiBzZXF1ZW5jaW5nIGZyb20gZ2VuZXJhbCBNTVUgaW52YWxpZGF0aW9uIHNlcXVlbmNpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSB2aXJ0dWFsaXphdGlvbiBpb2N0bHMsIGh5cGVyY2FsbHMsIGFuZCBldmVudCBjaGFubmVsIGRlbGl2ZXJ5IG1lY2hhbmlzbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjM2UwM2ZmM2I4YzM3OWQ4YjMyODIwYzk5ZWJjMDJkODAyZTMwM2IyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwNDozODoyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggNjgzYmI4YmY0M2E5NC4uM2FmNzM5NWMyNDMwYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xNiw2ICYjNDM7MTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3hhcnJheS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1fcGFyYS5oXHUwMDNlXG5AQCAtMTExMyw3ICYjNDM7MTExNCw3IEBAIHN0cnVjdCBrdm1feGVuIHtcbiBcdGJvb2wgcnVuc3RhdGVfdXBkYXRlX2ZsYWc7XG4gXHR1OCB1cGNhbGxfdmVjdG9yO1xuIFx0c3RydWN0IGdmbl90b19wZm5fY2FjaGUgc2hpbmZvX2NhY2hlO1xuLVx0c3RydWN0IGlkciBldnRjaG5fcG9ydHM7XG4mIzQzO1x0c3RydWN0IHhhcnJheSBldnRjaG5fcG9ydHM7XG4gXHR1bnNpZ25lZCBsb25nIHBvbGxfbWFza1tCSVRTX1RPX0xPTkdTKEtWTV9NQVhfVkNQVVMpXTtcbiBcbiBcdHN0cnVjdCBrdm1feGVuX2h2bV9jb25maWcgaHZtX2NvbmZpZztcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmMgYi9hcmNoL3g4Ni9rdm0veGVuLmNcbmluZGV4IDk5OGNkY2I2YWEzMDMuLjcxODM5NjM0MGQzYzEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ZW4uY1xuQEAgLTczLDcgJiM0Mzs3Myw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zaGFyZWRfaW5mb19pbml0KHN0cnVjdCBrdm0gKmt2bSlcbiBcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2hhcmVkX2luZm8sIHdjKSAhPSAweGMwMCk7XG4gXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNoYXJlZF9pbmZvLCB3Y19zZWNfaGkpICE9IDB4YzBjKTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbiYjNDM7XHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkpIHtcbiBcdFx0c3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtXHUwMDNla2h2YTtcbiBcbiBcdFx0d2Nfc2VjX2hpID0gXHUwMDI2c2hpbmZvLVx1MDAzZXdjX3NlY19oaTtcbkBAIC0zODksNyAmIzQzOzM4OSw3IEBAIHN0YXRpYyB2b2lkIGt2bV94ZW5fdXBkYXRlX3J1bnN0YXRlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdiwgYm9vbCBhdG9taWMpXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sIHRpbWUpICE9XG4gXHRcdCAgICAgc2l6ZW9mKHZ4LVx1MDAzZXJ1bnN0YXRlX3RpbWVzKSk7XG4gXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiB2LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbiYjNDM7XHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtXHUwMDNla3ZtKSkge1xuIFx0XHR1c2VyX2xlbiA9IHNpemVvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvKTtcbiBcdFx0dGltZXNfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyxcbiBcdFx0XHRcdCAgICAgc3RhdGVfZW50cnlfdGltZSk7XG5AQCAtNjc2LDI4ICYjNDM7Njc2LDMyIEBAIHZvaWQga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2KVxuIFx0fVxuIFxuIFx0LyogTm93IGdwYy1cdTAwM2VraHZhIGlzIGEgdmFsaWQga2VybmVsIGFkZHJlc3MgZm9yIHRoZSB2Y3B1X2luZm8gKi9cbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IHYtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xuJiM0MztcdGlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8odi1cdTAwM2Vrdm0pKSB7XG4gXHRcdHN0cnVjdCB2Y3B1X2luZm8gKnZpID0gZ3BjLVx1MDAzZWtodmE7XG4mIzQzO1x0XHR2b2lkICp2aV9wZW5kaW5nX3NlbCA9IFx1MDAyNnZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbDtcbiBcbi1cdFx0YXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYIFwmIzM0O29ycSAlMCwgJTFcXG5cJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O25vdHEgJTBcXG5cJiMzNDtcbi1cdFx0XHQgICAgIExPQ0tfUFJFRklYIFwmIzM0O2FuZHEgJTAsICUyXFxuXCYjMzQ7XG4tXHRcdFx0ICAgICA6IFwmIzM0Oz1yXCYjMzQ7IChldnRjaG5fcGVuZGluZ19zZWwpLFxuLVx0XHRcdCAgICAgICBcJiMzNDsmIzQzO21cJiMzNDsgKHZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCksXG4tXHRcdFx0ICAgICAgIFwmIzM0OyYjNDM7bVwmIzM0OyAodi1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpXG4tXHRcdFx0ICAgICA6IFwmIzM0OzBcJiMzNDsgKGV2dGNobl9wZW5kaW5nX3NlbCkpO1xuJiM0MztcdFx0aWYgKElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpdmlfcGVuZGluZ19zZWwsIHNpemVvZih1NjQpKSkge1xuJiM0MztcdFx0XHRhdG9taWM2NF9vcihldnRjaG5fcGVuZGluZ19zZWwsIHZpX3BlbmRpbmdfc2VsKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGF0b21pY19vcihldnRjaG5fcGVuZGluZ19zZWwsIHZpX3BlbmRpbmdfc2VsKTtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogVGhlIGNhc3Qga2VlcHMgdGhlIHNoaWZ0IHdlbGwtZGVmaW5lZCBvbiAzMi1iaXQsXG4mIzQzO1x0XHRcdCAqIHdoZXJlIGV2dGNobl9wZW5kaW5nX3NlbCBpcyAzMiBiaXRzIHdpZGUgYW5kIHRoaXNcbiYjNDM7XHRcdFx0ICogYnJhbmNoIGlzIHVucmVhY2hhYmxlIGFueXdheSAodGhpcyBpcyBpbnNpZGVcbiYjNDM7XHRcdFx0ICoga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKCksIHdoaWNoIGlzIGdhdGVkIG9uXG4mIzQzO1x0XHRcdCAqIElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRhdG9taWNfb3IoKHU2NClldnRjaG5fcGVuZGluZ19zZWwgXHUwMDNlXHUwMDNlIDMyLFxuJiM0MztcdFx0XHRcdCAgdmlfcGVuZGluZ19zZWwgJiM0MzsgNCk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0YXRvbWljNjRfYW5kbm90KGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKilcdTAwMjZ2LVx1MDAzZWFyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCk7XG4gXHRcdFdSSVRFX09OQ0UodmktXHUwMDNlZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHUzMiBldnRjaG5fcGVuZGluZ19zZWwzMiA9IGV2dGNobl9wZW5kaW5nX3NlbDtcbiBcdFx0c3RydWN0IGNvbXBhdF92Y3B1X2luZm8gKnZpID0gZ3BjLVx1MDAzZWtodmE7XG4gXG4tXHRcdGFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCBcJiMzNDtvcmwgJTAsICUxXFxuXCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtub3RsICUwXFxuXCYjMzQ7XG4tXHRcdFx0ICAgICBMT0NLX1BSRUZJWCBcJiMzNDthbmRsICUwLCAlMlxcblwmIzM0O1xuLVx0XHRcdCAgICAgOiBcJiMzNDs9clwmIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpLFxuLVx0XHRcdCAgICAgICBcJiMzNDsmIzQzO21cJiMzNDsgKHZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCksXG4tXHRcdFx0ICAgICAgIFwmIzM0OyYjNDM7bVwmIzM0OyAodi1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpXG4tXHRcdFx0ICAgICA6IFwmIzM0OzBcJiMzNDsgKGV2dGNobl9wZW5kaW5nX3NlbDMyKSk7XG4mIzQzO1x0XHRhdG9taWNfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKVx1MDAyNnZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCk7XG4mIzQzO1x0XHRhdG9taWNfYW5kbm90KGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKilcdTAwMjZ2LVx1MDAzZWFyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCk7XG4gXHRcdFdSSVRFX09OQ0UodmktXHUwMDNlZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTtcbiBcdH1cbiBcbkBAIC03MjgsNiAmIzQzOzczMiwxNiBAQCBpbnQgX19rdm1feGVuX2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2KVxuIFx0QlVJTERfQlVHX09OKHNpemVvZihyYykgIT1cbiBcdFx0ICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF92Y3B1X2luZm8sIGV2dGNobl91cGNhbGxfcGVuZGluZykpO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICoga3ZtX2dwY19jaGVjaygpIGNoZWNrcyB0aGUgbWVtc2xvdCBnZW5lcmF0aW9uLCBzbyBrdm0tXHUwMDNlc3JjdSBtdXN0IGJlXG4mIzQzO1x0ICogaGVsZC4gTW9zdCBjYWxsZXJzIGhvbGQgaXQgYWxyZWFkeSwgYnV0IHRoaXMgaXMgYWxzbyByZWFjaGVkIGZyb21cbiYjNDM7XHQgKiBrdm1fZW11bGF0ZV9oYWx0KCkgb24gdGhlIFZNLUV4aXQgcGF0aCBhbmQgZnJvbSBrdm1fdmNwdV9ibG9jaygpLFxuJiM0MztcdCAqIHdoZXJlIHZjcHVfZW50ZXJfZ3Vlc3QoKSBoYXMgYWxyZWFkeSBkcm9wcGVkIHRoZSB2Q1BVJiMzOTtzIFNSQ1UgbG9jay5cbiYjNDM7XHQgKiBUYWtpbmcgU1JDVSBkb2VzIG5vdCBzbGVlcCwgc28gaXQgaXMgc2FmZSBldmVuIGluIHRoZSBhdG9taWMgY2FzZVxuJiM0MztcdCAqIHdoaWNoIGlzIGhhbmRsZWQgYmVsb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0Z3VhcmQoc3JjdSkoXHUwMDI2di1cdTAwM2Vrdm0tXHUwMDNlc3JjdSk7XG4mIzQzO1xuIFx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdHdoaWxlICgha3ZtX2dwY19jaGVjayhncGMsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSkpIHtcbiBcdFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZncGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuQEAgLTk0MSw2ICYjNDM7OTU1LDEwIEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXG4mIzQzO1x0XHRcdHIgPSAtRU5YSU87XG4mIzQzO1x0XHRcdGlmICghSVNfQUxJR05FRChkYXRhLVx1MDAzZXUuZ3BhLCBzaXplb2YodTMyKSkpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1xuIFx0XHRcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pbmZvX2NhY2hlLFxuIFx0XHRcdFx0XHQgICAgIGRhdGEtXHUwMDNldS5ncGEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7XG4gXHRcdH0gZWxzZSB7XG5AQCAtOTUwLDYgJiM0Mzs5NjgsMTAgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSlcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbiYjNDM7XHRcdFx0ciA9IC1FTlhJTztcbiYjNDM7XHRcdFx0aWYgKCFJU19BTElHTkVEKGRhdGEtXHUwMDNldS5odmEsIHNpemVvZih1MzIpKSlcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XG4gXHRcdFx0ciA9IGt2bV9ncGNfYWN0aXZhdGVfaHZhKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pbmZvX2NhY2hlLFxuIFx0XHRcdFx0XHRcdCBkYXRhLVx1MDAzZXUuaHZhLCBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykpO1xuIFx0XHR9XG5AQCAtOTkzLDcgJiM0MzsxMDE1LDcgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSlcbiBcdFx0ICogYWRkcmVzcywgdGhhdCYjMzk7cyBhY3R1YWxseSBPSy4ga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3QoKVxuIFx0XHQgKiB3aWxsIGNvcGUuXG4gXHRcdCAqL1xuLVx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpXG4mIzQzO1x0XHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0XHRzeiA9IHNpemVvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHN6ID0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfdmNwdV9ydW5zdGF0ZV9pbmZvKTtcbkBAIC0xNDM5LDE2ICYjNDM7MTQ2MSwyMSBAQCBzdGF0aWMgaW50IGt2bV94ZW5faHlwZXJjYWxsX2NvbXBsZXRlX3VzZXJzcGFjZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4ga3ZtX3hlbl9oeXBlcmNhbGxfc2V0X3Jlc3VsdCh2Y3B1LCBydW4tXHUwMDNleGVuLnUuaGNhbGwucmVzdWx0KTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KGJvb2wgaGFzXzY0Yml0X3NoaW5mbylcbiB7XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKVxuJiM0MztcdGlmIChoYXNfNjRiaXRfc2hpbmZvKVxuIFx0XHRyZXR1cm4gRVZUQ0hOXzJMX05SX0NIQU5ORUxTO1xuIFx0ZWxzZVxuIFx0XHRyZXR1cm4gQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUztcbiB9XG4gXG4tc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLFxuLVx0XHRcdCAgICAgICBldnRjaG5fcG9ydF90ICpwb3J0cylcbiYjNDM7c3RhdGljIGlubGluZSBpbnQga3ZtX21heF9ldnRjaG5fcG9ydChzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbWF4X2V2dGNobl9wb3J0KGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBoYXNfNjRiaXRfc2hpbmZvLFxuJiM0MztcdFx0XHQgICAgICAgaW50IG5yX3BvcnRzLCBldnRjaG5fcG9ydF90ICpwb3J0cylcbiB7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlO1xuQEAgLTE0NjMsNyAmIzQzOzE0OTAsNyBAQCBzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbnJfcG9ydHMsXG4gXHRcdGdvdG8gb3V0X3JjdTtcbiBcbiBcdHJldCA9IGZhbHNlO1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xuJiM0MztcdGlmIChoYXNfNjRiaXRfc2hpbmZvKSB7XG4gXHRcdHN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4gXHRcdHBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopXHUwMDI2c2hpbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nO1xuIFx0fSBlbHNlIHtcbkBAIC0xNDg1LDkgJiM0MzsxNTEyLDEwIEBAIHN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cyxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcbiYjNDM7c3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzXzY0Yml0LFxuIFx0XHRcdFx0IHU2NCBwYXJhbSwgdTY0ICpyKVxuIHtcbiYjNDM7XHRib29sIGhhc182NGJpdF9zaGluZm8gPSBrdm1feGVuX2hhc182NGJpdF9zaGluZm8odmNwdS1cdTAwM2Vrdm0pO1xuIFx0c3RydWN0IHNjaGVkX3BvbGwgc2NoZWRfcG9sbDtcbiBcdGV2dGNobl9wb3J0X3QgcG9ydCwgKnBvcnRzO1xuIFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcbkBAIC0xNDk3LDcgJiM0MzsxNTI1LDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxuIFx0ICAgICEodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4uaHZtX2NvbmZpZy5mbGFncyBcdTAwMjYgS1ZNX1hFTl9IVk1fQ09ORklHX0VWVENITl9TRU5EKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgIWxvbmdtb2RlKSB7XG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgIWlzXzY0Yml0KSB7XG4gXHRcdHN0cnVjdCBjb21wYXRfc2NoZWRfcG9sbCBzcDMyO1xuIFxuIFx0XHQvKiBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgY29tcGF0IHN0cnVjdCBkZWZpbml0aW9uIGlzIGNvcnJlY3QgKi9cbkBAIC0xNTQ2LDIwICYjNDM7MTU3NCwyMCBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzY2hlZF9wb2xsLm5yX3BvcnRzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAocG9ydHNbaV0gXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQodmNwdS1cdTAwM2Vrdm0pKSB7XG4mIzQzO1x0XHRpZiAocG9ydHNbaV0gXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoaGFzXzY0Yml0X3NoaW5mbykpIHtcbiBcdFx0XHQqciA9IC1FSU5WQUw7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcdH1cbiBcbiBcdGlmIChzY2hlZF9wb2xsLm5yX3BvcnRzID09IDEpXG4tXHRcdHZjcHUtXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4gPSBwb3J0O1xuJiM0MztcdFx0V1JJVEVfT05DRSh2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huLCBwb3J0KTtcbiBcdGVsc2Vcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLnhlbi5wb2xsX2V2dGNobiA9IC0xO1xuJiM0MztcdFx0V1JJVEVfT05DRSh2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huLCAtMSk7XG4gXG4gXHRzZXRfYml0KHZjcHUtXHUwMDNldmNwdV9pZHgsIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLnBvbGxfbWFzayk7XG4gXG4tXHRpZiAoIXdhaXRfcGVuZGluZ19ldmVudCh2Y3B1LCBzY2hlZF9wb2xsLm5yX3BvcnRzLCBwb3J0cykpIHtcbiYjNDM7XHRpZiAoIXdhaXRfcGVuZGluZ19ldmVudCh2Y3B1LCBoYXNfNjRiaXRfc2hpbmZvLCBzY2hlZF9wb2xsLm5yX3BvcnRzLCBwb3J0cykpIHtcbiBcdFx0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVEKTtcbiBcbiBcdFx0aWYgKHNjaGVkX3BvbGwudGltZW91dClcbkBAIC0xNTc0LDcgJiM0MzsxNjAyLDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxuIFx0XHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9SVU5OQUJMRSk7XG4gXHR9XG4gXG4tXHR2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huID0gMDtcbiYjNDM7XHRXUklURV9PTkNFKHZjcHUtXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4sIDApO1xuIFx0KnIgPSAwO1xuIG91dDpcbiBcdC8qIFJlYWxseSwgdGhpcyBpcyBvbmx5IG5lZWRlZCBpbiBjYXNlIG9mIHRpbWVvdXQgKi9cbkBAIC0xNTk0LDEyICYjNDM7MTYyMiwxMiBAQCBzdGF0aWMgdm9pZCBjYW5jZWxfZXZ0Y2huX3BvbGwoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcbiYjNDM7c3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsXG4gXHRcdFx0XHQgICBpbnQgY21kLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBTQ0hFRE9QX3BvbGw6XG4tXHRcdGlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBsb25nbW9kZSwgcGFyYW0sIHIpKVxuJiM0MztcdFx0aWYgKGt2bV94ZW5fc2NoZWRvcF9wb2xsKHZjcHUsIGlzXzY0Yml0LCBwYXJhbSwgcikpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdGZhbGx0aHJvdWdoO1xuIFx0Y2FzZSBTQ0hFRE9QX3lpZWxkOlxuQEAgLTE2MTgsNyAmIzQzOzE2NDYsNyBAQCBzdHJ1Y3QgY29tcGF0X3ZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIge1xuICAgICB1aW50MzJfdCBmbGFncztcbiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpO1xuIFxuLXN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsXG4mIzQzO3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsIGludCBjbWQsXG4gXHRcdFx0XHQgIGludCB2Y3B1X2lkLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciBvbmVzaG90O1xuQEAgLTE2NjIsNyAmIzQzOzE2OTAsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLFxuIFx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpICE9XG4gXHRcdFx0ICAgICBzaXplb2ZfZmllbGQoc3RydWN0IHZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIsIGZsYWdzKSk7XG4gXG4tXHRcdGlmIChrdm1fcmVhZF9ndWVzdF92aXJ0KHZjcHUsIHBhcmFtLCBcdTAwMjZvbmVzaG90LCBsb25nbW9kZSA/IHNpemVvZihvbmVzaG90KSA6XG4mIzQzO1x0XHRpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBwYXJhbSwgXHUwMDI2b25lc2hvdCwgaXNfNjRiaXQgPyBzaXplb2Yob25lc2hvdCkgOlxuIFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyKSwgXHUwMDI2ZSkpIHtcbiBcdFx0XHQqciA9IC1FRkFVTFQ7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG5AQCAtMTY5NCw3ICYjNDM7MTcyMiw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWludDY0X3QgdGltZW91dCxcbiBcbiBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGJvb2wgbG9uZ21vZGU7XG4mIzQzO1x0Ym9vbCBpc182NGJpdDtcbiBcdHU2NCBpbnB1dCwgcGFyYW1zWzZdLCByID0gLUVOT1NZUztcbiBcdGJvb2wgaGFuZGxlZCA9IGZhbHNlO1xuIFx0dTggY3BsO1xuQEAgLTE3MDQsOCAmIzQzOzE3MzIsOCBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICAgIGt2bV9odl9oeXBlcmNhbGxfZW5hYmxlZCh2Y3B1KSlcbiBcdFx0cmV0dXJuIGt2bV9odl9oeXBlcmNhbGwodmNwdSk7XG4gXG4tXHRsb25nbW9kZSA9IGlzXzY0X2JpdF9oeXBlcmNhbGwodmNwdSk7XG4tXHRpZiAoIWxvbmdtb2RlKSB7XG4mIzQzO1x0aXNfNjRiaXQgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xuJiM0MztcdGlmICghaXNfNjRiaXQpIHtcbiBcdFx0aW5wdXQgPSBrdm1fZWF4X3JlYWQodmNwdSk7XG4gXHRcdHBhcmFtc1swXSA9IGt2bV9lYnhfcmVhZCh2Y3B1KTtcbiBcdFx0cGFyYW1zWzFdID0ga3ZtX2VjeF9yZWFkKHZjcHUpO1xuQEAgLTE3NTEsMTcgJiM0MzsxNzc5LDE3IEBAIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfZXZ0Y2huX3NlbmQodmNwdSwgcGFyYW1zWzFdLCBcdTAwMjZyKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIF9fSFlQRVJWSVNPUl9zY2hlZF9vcDpcbi1cdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfc2NoZWRfb3AodmNwdSwgbG9uZ21vZGUsIHBhcmFtc1swXSxcbiYjNDM7XHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGlzXzY0Yml0LCBwYXJhbXNbMF0sXG4gXHRcdFx0XHRcdFx0IHBhcmFtc1sxXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1JfdmNwdV9vcDpcbi1cdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sXG4mIzQzO1x0XHRoYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHZjcHUsIGlzXzY0Yml0LCBwYXJhbXNbMF0sIHBhcmFtc1sxXSxcbiBcdFx0XHRcdFx0XHRwYXJhbXNbMl0sIFx1MDAyNnIpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgX19IWVBFUlZJU09SX3NldF90aW1lcl9vcDoge1xuIFx0XHR1NjQgdGltZW91dCA9IHBhcmFtc1swXTtcbiBcdFx0LyogSW4gMzItYml0IG1vZGUsIHRoZSA2NC1iaXQgdGltZW91dCBpcyBpbiB0d28gMzItYml0IHBhcmFtcy4gKi9cbi1cdFx0aWYgKCFsb25nbW9kZSlcbiYjNDM7XHRcdGlmICghaXNfNjRiaXQpXG4gXHRcdFx0dGltZW91dCB8PSBwYXJhbXNbMV0gXHUwMDNjXHUwMDNjIDMyO1xuIFx0XHRoYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9zZXRfdGltZXJfb3AodmNwdSwgdGltZW91dCwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuQEAgLTE3NzYsNyAmIzQzOzE4MDQsNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIGhhbmRsZV9pbl91c2Vyc3BhY2U6XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1hFTjtcbiBcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi50eXBlID0gS1ZNX0VYSVRfWEVOX0hDQUxMO1xuLVx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwubG9uZ21vZGUgPSBsb25nbW9kZTtcbiYjNDM7XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2V4ZW4udS5oY2FsbC5sb25nbW9kZSA9IGlzXzY0Yml0O1xuIFx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwuY3BsID0gY3BsO1xuIFx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwuaW5wdXQgPSBpbnB1dDtcbiBcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi51LmhjYWxsLnBhcmFtc1swXSA9IHBhcmFtc1swXTtcbkBAIC0xNzk0LDcgJiM0MzsxODIyLDcgQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KVxuIHtcbi1cdGludCBwb2xsX2V2dGNobiA9IHZjcHUtXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG47XG4mIzQzO1x0aW50IHBvbGxfZXZ0Y2huID0gUkVBRF9PTkNFKHZjcHUtXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4pO1xuIFxuIFx0aWYgKChwb2xsX2V2dGNobiA9PSBwb3J0IHx8IHBvbGxfZXZ0Y2huID09IC0xKSBcdTAwMjZcdTAwMjZcbiBcdCAgICB0ZXN0X2FuZF9jbGVhcl9iaXQodmNwdS1cdTAwM2V2Y3B1X2lkeCwgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4ucG9sbF9tYXNrKSkge1xuQEAgLTE4MTYsOCAmIzQzOzE4NDQsOSBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KVxuIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGU7XG4mIzQzO1x0Ym9vbCBoYXNfNjRiaXRfc2hpbmZvID0ga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyAqcGVuZGluZ19iaXRzLCAqbWFza19iaXRzLCB2aV9wZW5kaW5nX3NlbF9vZnM7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHR1bnNpZ25lZCBsb25nICpwZW5kaW5nX2JpdHMsICptYXNrX2JpdHM7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHBvcnRfd29yZF9iaXQ7XG4gXHRib29sIGtpY2tfdmNwdSA9IGZhbHNlO1xuQEAgLTE4MzMsNyAmIzQzOzE4NjIsNyBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuIFx0XHRXUklURV9PTkNFKHhlLVx1MDAzZXZjcHVfaWR4LCB2Y3B1LVx1MDAzZXZjcHVfaWR4KTtcbiBcdH1cbiBcbi1cdGlmICh4ZS1cdTAwM2Vwb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4mIzQzO1x0aWYgKHhlLVx1MDAzZXBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoaGFzXzY0Yml0X3NoaW5mbykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0cmMgPSAtRVdPVUxEQkxPQ0s7XG5AQCAtMTg0NCwxNiAmIzQzOzE4NzMsMjMgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdGlmICgha3ZtX2dwY19jaGVjayhncGMsIFBBR0VfU0laRSkpXG4gXHRcdGdvdG8gb3V0X3JjdTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbiYjNDM7XHRpZiAoaGFzXzY0Yml0X3NoaW5mbykge1xuIFx0XHRzdHJ1Y3Qgc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuIFx0XHRwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fcGVuZGluZztcbiBcdFx0bWFza19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZzaGluZm8tXHUwMDNlZXZ0Y2huX21hc2s7XG4gXHRcdHBvcnRfd29yZF9iaXQgPSB4ZS1cdTAwM2Vwb3J0IC8gNjQ7XG4mIzQzO1xuJiM0MztcdFx0dmlfcGVuZGluZ19zZWxfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3BlbmRpbmdfc2VsKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuIFx0XHRwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fcGVuZGluZztcbiBcdFx0bWFza19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZzaGluZm8tXHUwMDNlZXZ0Y2huX21hc2s7XG4gXHRcdHBvcnRfd29yZF9iaXQgPSB4ZS1cdTAwM2Vwb3J0IC8gMzI7XG4mIzQzO1xuJiM0MztcdFx0dmlfcGVuZGluZ19zZWxfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF92Y3B1X2luZm8sIGV2dGNobl9wZW5kaW5nX3NlbCk7XG4mIzQzO1xuJiM0MztcdFx0LyogdGVzdF9hbmRfc2V0X2JpdCgpIG5lZWRzIDY0LWJpdCBhbGlnbm1lbnQsIGJ1dCB0aGF0JiMzOTtzIE9LICovXG4mIzQzO1x0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgZXZ0Y2huX3BlbmRpbmcpIFx1MDAyNiA3KTtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtMTg2OSw2ICYjNDM7MTkwNSw4IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdHJjID0gLUVOT1RDT05OOyAvKiBNYXNrZWQgKi9cbiBcdFx0a3ZtX3hlbl9jaGVja19wb2xsZXIodmNwdSwgeGUtXHUwMDNlcG9ydCk7XG4gXHR9IGVsc2Uge1xuJiM0MztcdFx0Ym9vbCBvbGQ7XG4mIzQzO1xuIFx0XHRyYyA9IDE7IC8qIERlbGl2ZXJlZCB0byB0aGUgYml0bWFwIGluIHNoYXJlZF9pbmZvLiAqL1xuIFx0XHQvKiBOb3cgc3dpdGNoIHRvIHRoZSB2Q1BVJiMzOTtzIHZjcHVfaW5mbyB0byBzZXQgdGhlIGluZGV4IGFuZCBwZW5kaW5nX3NlbCAqL1xuIFx0XHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdwYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG5AQCAtMTg4NSwxOSAmIzQzOzE5MjMsMjkgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0XHRnb3RvIG91dF9yY3U7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xuLVx0XHRcdHN0cnVjdCB2Y3B1X2luZm8gKnZjcHVfaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuLVx0XHRcdGlmICghdGVzdF9hbmRfc2V0X2JpdChwb3J0X3dvcmRfYml0LCBcdTAwMjZ2Y3B1X2luZm8tXHUwMDNlZXZ0Y2huX3BlbmRpbmdfc2VsKSkge1xuLVx0XHRcdFx0V1JJVEVfT05DRSh2Y3B1X2luZm8tXHUwMDNlZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTtcbi1cdFx0XHRcdGtpY2tfdmNwdSA9IHRydWU7XG4tXHRcdFx0fVxuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvICp2Y3B1X2luZm8gPSBncGMtXHUwMDNla2h2YTtcbi1cdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCxcbi1cdFx0XHRcdFx0ICAgICAgKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZ2Y3B1X2luZm8tXHUwMDNlZXZ0Y2huX3BlbmRpbmdfc2VsKSkge1xuLVx0XHRcdFx0V1JJVEVfT05DRSh2Y3B1X2luZm8tXHUwMDNlZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTtcbi1cdFx0XHRcdGtpY2tfdmNwdSA9IHRydWU7XG4tXHRcdFx0fVxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEV4cGxpY2l0bHkgdXNlIGEgMzItYml0IGJ0c2wgaW5zdGVhZCBvZiB0ZXN0X2FuZF9zZXRfYml0KCksXG4mIzQzO1x0XHQgKiB3aGljaCB3b3VsZCB1c2UgYnRzcSBvbiB4ODYtNjQuIFRoZSB2Y3B1X2luZm8gaXMgZ3Vlc3QtXG4mIzQzO1x0XHQgKiBjb250cm9sbGVkIGFuZCBvbmx5IHJlcXVpcmVkIHRvIGJlIDMyLWJpdCBhbGlnbmVkLCBzbyBhXG4mIzQzO1x0XHQgKiA2NC1iaXQgYWNjZXNzIGNvdWxkIGdlbmVyYXRlIGEgc3BsaXQtbG9jayAjQUMuXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogTm90ZSwgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgdGVzdF9hbmRfc2V0X2JpdCgpIG9uXG4mIzQzO1x0XHQgKiBwZW5kaW5nX2JpdHMgYWJvdmU6IHRoYXQgaXMgaW4gdGhlIHBlci1WTSBzaGFyZWRfaW5mbywgd2hpY2hcbiYjNDM7XHRcdCAqIGlzIHBhZ2UgYWxpZ25lZCwgc28gdGhlIGFjY2VzcyBpcyBndWFyYW50ZWVkIHRvIGJlIDY0LWJpdFxuJiM0MztcdFx0ICogYWxpZ25lZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0b2xkID0gR0VOX0JJTkFSWV9STVdjYyhMT0NLX1BSRUZJWCBcJiMzNDtidHNsXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICAqKHUzMiAqKShncGMtXHUwMDNla2h2YSAmIzQzOyB2aV9wZW5kaW5nX3NlbF9vZnMpLFxuJiM0MztcdFx0XHRcdCAgICAgICBjLCBcJiMzNDtJclwmIzM0OywgcG9ydF93b3JkX2JpdCk7XG4mIzQzO1x0XHRpZiAoIW9sZCkge1xuJiM0MztcdFx0XHRzdHJ1Y3QgdmNwdV9pbmZvICp2aSA9IGdwYy1cdTAwM2VraHZhO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogTm8gbmVlZCBmb3IgY29tcGF0IGhhbmRsaW5nICovXG4mIzQzO1x0XHRcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpICE9XG4mIzQzO1x0XHRcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSk7XG4mIzQzO1xuJiM0MztcdFx0XHRXUklURV9PTkNFKHZpLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4mIzQzO1x0XHRcdGtpY2tfdmNwdSA9IHRydWU7XG4gXHRcdH1cbiBcbiBcdFx0LyogRm9yIHRoZSBwZXItdkNQVSBsYXBpYyB2ZWN0b3IsIGRlbGl2ZXIgaXQgYXMgTVNJLiAqL1xuQEAgLTE5OTUsNyAmIzQzOzIwNDMsNyBAQCBpbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFxuIFx0Lypcbi1cdCAqIERvbiYjMzk7dCBjaGVjayBmb3IgdGhlIHBvcnQgYmVpbmcgd2l0aGluIHJhbmdlIG9mIG1heF9ldnRjaG5fcG9ydCgpLlxuJiM0MztcdCAqIERvbiYjMzk7dCBjaGVjayBmb3IgdGhlIHBvcnQgYmVpbmcgd2l0aGluIHJhbmdlIG9mIGt2bV9tYXhfZXZ0Y2huX3BvcnQoKS5cbiBcdCAqIFVzZXJzcGFjZSBjYW4gY29uZmlndXJlIHdoYXQgZXZlciB0YXJnZXRzIGl0IGxpa2VzOyBldmVudHMganVzdCB3b24mIzM5O3RcbiBcdCAqIGJlIGRlbGl2ZXJlZCBpZi93aGlsZSB0aGUgdGFyZ2V0IGlzIGludmFsaWQsIGp1c3QgbGlrZSB1c2Vyc3BhY2UgY2FuXG4gXHQgKiBjb25maWd1cmUgTVNJcyB3aGljaCB0YXJnZXQgbm9uLWV4aXN0ZW50IEFQSUNzLlxuQEAgLTIwMDQsOCAmIzQzOzIwNTIsOCBAQCBpbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxuIFx0ICogY2FuIGJlIHJlc3RvcmVkICppbmRlcGVuZGVudGx5KiBvZiBvdGhlciB0aGluZ3MgbGlrZSBjcmVhdGluZyB2Q1BVcyxcbiBcdCAqIHdpdGhvdXQgaW1wb3NpbmcgYW4gb3JkZXJpbmcgZGVwZW5kZW5jeSBvbiB1c2Vyc3BhY2UuICBJbiB0aGlzXG4gXHQgKiBwYXJ0aWN1bGFyIGNhc2UsIHRoZSBwcm9ibGVtYXRpYyBvcmRlcmluZyB3b3VsZCBiZSB3aXRoIHNldHRpbmcgdGhlXG4tXHQgKiBYZW4gJiMzOTtsb25nIG1vZGUmIzM5OyBmbGFnLCB3aGljaCBjaGFuZ2VzIG1heF9ldnRjaG5fcG9ydCgpIHRvIGFsbG93IDQwOTZcbi1cdCAqIGluc3RlYWQgb2YgMTAyNCBldmVudCBjaGFubmVscy5cbiYjNDM7XHQgKiBYZW4gJiMzOTtsb25nIG1vZGUmIzM5OyBmbGFnLCB3aGljaCBjaGFuZ2VzIGt2bV9tYXhfZXZ0Y2huX3BvcnQoKSB0byBhbGxvd1xuJiM0MztcdCAqIDQwOTYgaW5zdGVhZCBvZiAxMDI0IGV2ZW50IGNoYW5uZWxzLlxuIFx0ICovXG4gXG4gXHQvKiBXZSBvbmx5IHN1cHBvcnQgMiBsZXZlbCBldmVudCBjaGFubmVscyBmb3Igbm93ICovXG5AQCAtMjA0Miw3ICYjNDM7MjA5MCw3IEBAIGludCBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfeGVuX2V2dGNobiAqXG4gXHRzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gZTtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAoIXV4ZS1cdTAwM2Vwb3J0IHx8IHV4ZS1cdTAwM2Vwb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4mIzQzO1x0aWYgKCF1eGUtXHUwMDNlcG9ydCB8fCB1eGUtXHUwMDNlcG9ydCBcdTAwM2U9IGt2bV9tYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHQvKiBXZSBvbmx5IHN1cHBvcnQgMiBsZXZlbCBldmVudCBjaGFubmVscyBmb3Igbm93ICovXG5AQCAtMjA5Myw3ICYjNDM7MjE0MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX3VwZGF0ZShzdHJ1Y3Qga3ZtICprdm0sXG4gXG4gXHQvKiBQcm90ZWN0IHdyaXRlcyB0byBldnRjaG5mZCBhcyB3ZWxsIGFzIHRoZSBpZHIgbG9va3VwLiAgKi9cbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbi1cdGV2dGNobmZkID0gaWRyX2ZpbmQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCk7XG4mIzQzO1x0ZXZ0Y2huZmQgPSB4YV9sb2FkKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIHBvcnQpO1xuIFxuIFx0cmV0ID0gLUVOT0VOVDtcbiBcdGlmICghZXZ0Y2huZmQpXG5AQCAtMjE1Miw3ICYjNDM7MjIwMCw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbihzdHJ1Y3Qga3ZtICprdm0sXG4gXG4gXHRjYXNlIEVWVENITlNUQVRfaW50ZXJkb21haW46XG4gXHRcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0KSB7XG4tXHRcdFx0aWYgKGRhdGEtXHUwMDNldS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbiYjNDM7XHRcdFx0aWYgKGRhdGEtXHUwMDNldS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQgXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4gXHRcdFx0XHRnb3RvIG91dF9ub2V2ZW50ZmQ7IC8qIC1FSU5WQUwgKi9cbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRldmVudGZkID0gZXZlbnRmZF9jdHhfZmRnZXQoZGF0YS1cdTAwM2V1LmV2dGNobi5kZWxpdmVyLmV2ZW50ZmQuZmQpO1xuQEAgLTIxODcsMTMgJiM0MzsyMjM1LDEzIEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHR9XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XG4tXHRyZXQgPSBpZHJfYWxsb2MoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQsIHBvcnQsIHBvcnQgJiM0MzsgMSxcbiYjNDM7XHRyZXQgPSB4YV9pbnNlcnQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCwgZXZ0Y2huZmQsXG4gXHRcdFx0R0ZQX0tFUk5FTCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbi1cdGlmIChyZXQgXHUwMDNlPSAwKVxuJiM0MztcdGlmICghcmV0KVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChyZXQgPT0gLUVOT1NQQylcbiYjNDM7XHRpZiAocmV0ID09IC1FQlVTWSlcbiBcdFx0cmV0ID0gLUVFWElTVDtcbiBvdXQ6XG4gXHRpZiAoZXZlbnRmZClcbkBAIC0yMjA4LDcgJiM0MzsyMjU2LDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfZGVhc3NpZ24oc3RydWN0IGt2bSAqa3ZtLCB1MzIgcG9ydClcbiBcdHN0cnVjdCBldnRjaG5mZCAqZXZ0Y2huZmQ7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XG4tXHRldnRjaG5mZCA9IGlkcl9yZW1vdmUoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCk7XG4mIzQzO1x0ZXZ0Y2huZmQgPSB4YV9lcmFzZShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBwb3J0KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4ueGVuX2xvY2spO1xuIFxuIFx0aWYgKCFldnRjaG5mZClcbkBAIC0yMjI0LDcgJiM0MzsyMjcyLDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfZGVhc3NpZ24oc3RydWN0IGt2bSAqa3ZtLCB1MzIgcG9ydClcbiBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9yZXNldChzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IGV2dGNobmZkICpldnRjaG5mZCwgKiphbGxfZXZ0Y2huZmRzO1xuLVx0aW50IGk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpO1xuIFx0aW50IG4gPSAwO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4ueGVuX2xvY2spO1xuQEAgLTIyMzQsNyAmIzQzOzIyODIsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9yZXNldChzdHJ1Y3Qga3ZtICprdm0pXG4gXHQgKiBjcml0aWNhbCBzZWN0aW9uLCBmaXJzdCBjb2xsZWN0IGFsbCB0aGUgZXZ0Y2huZmQgb2JqZWN0c1xuIFx0ICogaW4gYW4gYXJyYXkgYXMgdGhleSBhcmUgcmVtb3ZlZCBmcm9tIGV2dGNobl9wb3J0cy5cbiBcdCAqL1xuLVx0aWRyX2Zvcl9lYWNoX2VudHJ5KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLCBpKVxuJiM0MztcdHhhX2Zvcl9lYWNoKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGksIGV2dGNobmZkKVxuIFx0XHRuJiM0MzsmIzQzOztcbiBcbiBcdGFsbF9ldnRjaG5mZHMgPSBrbWFsbG9jX29ianMoc3RydWN0IGV2dGNobmZkICosIG4pO1xuQEAgLTIyNDQsOSAmIzQzOzIyOTIsOSBAQCBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9yZXNldChzdHJ1Y3Qga3ZtICprdm0pXG4gXHR9XG4gXG4gXHRuID0gMDtcbi1cdGlkcl9mb3JfZWFjaF9lbnRyeShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBldnRjaG5mZCwgaSkge1xuJiM0MztcdHhhX2Zvcl9lYWNoKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGksIGV2dGNobmZkKSB7XG4gXHRcdGFsbF9ldnRjaG5mZHNbbiYjNDM7JiM0MztdID0gZXZ0Y2huZmQ7XG4tXHRcdGlkcl9yZW1vdmUoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQtXHUwMDNlc2VuZF9wb3J0KTtcbiYjNDM7XHRcdHhhX2VyYXNlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLVx1MDAzZXNlbmRfcG9ydCk7XG4gXHR9XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbiBcbkBAIC0yMjcwLDcgJiM0MzsyMzE4LDcgQEAgc3RhdGljIGludCBrdm1feGVuX3NldGF0dHJfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGFcbiBcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmZsYWdzID09IEtWTV9YRU5fRVZUQ0hOX1JFU0VUKVxuIFx0XHRyZXR1cm4ga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KGt2bSk7XG4gXG4tXHRpZiAoIXBvcnQgfHwgcG9ydCBcdTAwM2U9IG1heF9ldnRjaG5fcG9ydChrdm0pKVxuJiM0MztcdGlmICghcG9ydCB8fCBwb3J0IFx1MDAzZT0ga3ZtX21heF9ldnRjaG5fcG9ydChrdm0pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmZsYWdzID09IEtWTV9YRU5fRVZUQ0hOX0RFQVNTSUdOKVxuQEAgLTIyOTcsMTIgJiM0MzsyMzQ1LDEwIEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfZXZ0Y2huX3NlbmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcGFyYW0sIHU2NCAqcilcbiBcdH1cbiBcbiBcdC8qXG4tXHQgKiBldnRjaG5mZCBpcyBwcm90ZWN0ZWQgYnkga3ZtLVx1MDAzZXNyY3U7IHRoZSBpZHIgbG9va3VwIGluc3RlYWRcbi1cdCAqIGlzIHByb3RlY3RlZCBieSBSQ1UuXG4mIzQzO1x0ICogZXZ0Y2huZmQgaXMgcHJvdGVjdGVkIGJ5IGt2bS1cdTAwM2VzcmN1OyB0aGUgeGFfbG9hZCBpcyBSQ1Utc2FmZVxuJiM0MztcdCAqIGludGVybmFsbHksIG5vIGV4cGxpY2l0IHJjdV9yZWFkX2xvY2soKSBuZWVkZWQuXG4gXHQgKi9cbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGV2dGNobmZkID0gaWRyX2ZpbmQoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBzZW5kLnBvcnQpO1xuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0ZXZ0Y2huZmQgPSB4YV9sb2FkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgc2VuZC5wb3J0KTtcbiBcdGlmICghZXZ0Y2huZmQpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC0yMzQ5LDIzICYjNDM7MjM5NSwyMyBAQCB2b2lkIGt2bV94ZW5fZGVzdHJveV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB2b2lkIGt2bV94ZW5faW5pdF92bShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4ueGVuX2xvY2spO1xuLVx0aWRyX2luaXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cyk7XG4mIzQzO1x0eGFfaW5pdChcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTtcbiBcdGt2bV9ncGNfaW5pdChcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlLCBrdm0pO1xuIH1cbiBcbiB2b2lkIGt2bV94ZW5fZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IGV2dGNobmZkICpldnRjaG5mZDtcbi1cdGludCBpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbiBcdGt2bV9ncGNfZGVhY3RpdmF0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlKTtcbiBcbi1cdGlkcl9mb3JfZWFjaF9lbnRyeShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBldnRjaG5mZCwgaSkge1xuJiM0MztcdHhhX2Zvcl9lYWNoKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGksIGV2dGNobmZkKSB7XG4gXHRcdGlmICghZXZ0Y2huZmQtXHUwMDNlZGVsaXZlci5wb3J0LnBvcnQpXG4gXHRcdFx0ZXZlbnRmZF9jdHhfcHV0KGV2dGNobmZkLVx1MDAzZWRlbGl2ZXIuZXZlbnRmZC5jdHgpO1xuIFx0XHRrZnJlZShldnRjaG5mZCk7XG4gXHR9XG4tXHRpZHJfZGVzdHJveShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTtcbiYjNDM7XHR4YV9kZXN0cm95KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMpO1xuIFxuIFx0aWYgKGt2bS1cdTAwM2VhcmNoLnhlbi5odm1fY29uZmlnLm1zcilcbiBcdFx0c3RhdGljX2JyYW5jaF9zbG93X2RlY19kZWZlcnJlZChcdTAwMjZrdm1feGVuX2VuYWJsZWQpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uaCBiL2FyY2gveDg2L2t2bS94ZW4uaFxuaW5kZXggZjM3Mjg1NTg1N2E4OC4uOWQwNGUzNTBiZGIxZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ZW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3hlbi5oXG5AQCAtMjM1LDYgJiM0MzsyMzUsMTEgQEAgc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbyB7XG4gI2RlZmluZSBDT01QQVRfRVZUQ0hOXzJMX05SX0NIQU5ORUxTICg4ICpcdFx0XHRcdFxcXG4gXHRcdFx0XHQgICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgXFxcbiBcdFx0XHRcdFx0XHQgICBldnRjaG5fcGVuZGluZykpXG4mIzQzO1xuJiM0MzsvKiBMYXRjaGVkIFZNLXdpZGUgbW9kZTsgdGhlIEtWTSBlcXVpdmFsZW50IG9mIFhlbiYjMzk7cyAhaGFzXzMyYml0X3NoaW5mbygpLiAqL1xuJiM0MzsjZGVmaW5lIGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pIFxcXG4mIzQzO1x0KElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgUkVBRF9PTkNFKChrdm0pLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkpXG4mIzQzO1xuIHN0cnVjdCBjb21wYXRfdmNwdV9ydW5zdGF0ZV9pbmZvIHtcbiAgICAgaW50IHN0YXRlO1xuICAgICB1aW50NjRfdCBzdGF0ZV9lbnRyeV90aW1lO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggMDNiZmM5Mjg2NGI2ZS4uM2RkMDQ2MDVmMmU1NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtODU1LDYgJiM0Mzs4NTUsOCBAQCBzdHJ1Y3Qga3ZtIHtcbiBcdGdmbl90IG1tdV9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0O1xuIFx0Z2ZuX3QgbW11X2ludmFsaWRhdGVfcmFuZ2VfZW5kO1xuIFxuJiM0MztcdHVuc2lnbmVkIGxvbmcgZ3BjX2ludmFsaWRhdGVfc2VxO1xuJiM0MztcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlcztcbiBcdHU2NCBtYW51YWxfZGlydHlfbG9nX3Byb3RlY3Q7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RlbnRyeTtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggNjVlYjI2YTA1MjBkOC4uMTA4ZDQyYzVjMWQ2YSAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbkBAIC04MTMsNiAmIzQzOzgxMywxNiBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxuIFxuIFx0LyogUGFpcnMgd2l0aCB0aGUgaW5jcmVtZW50IGluIHJhbmdlX3N0YXJ0KCkuICovXG4gXHRzcGluX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XG4mIzQzO1x0a3ZtLVx1MDAzZWdwY19pbnZhbGlkYXRlX3NlcSYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQXMgd2l0aCB0aGUgTU1VIHNlcXVlbmNlIGNvdW50ZXIgYW5kIG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzLCB0aGVcbiYjNDM7XHQgKiBHUEMgc2VxdWVuY2UgaW5jcmVhc2UgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB0aGUgaW52YWxpZGF0ZSBjb3VudFxuJiM0MztcdCAqIGdvZXMgdG8gemVyby4gIFBhaXJzIHdpdGggdGhlIHNtcF9ybWIoKSBpblxuJiM0MztcdCAqIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZSgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHNtcF93bWIoKTtcbiYjNDM7XG4gXHRpZiAoIVdBUk5fT05fT05DRSgha3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcbiBcdFx0LS1rdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQ7XG4gXHR3YWtlID0gIWt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9wZm5jYWNoZS5jIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xuaW5kZXggNzI4ZDJjMWI0ODhhOC4uMzY1OTY4NmI5N2MyNCAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbkBAIC0xMjQsNyAmIzQzOzEyNCw3IEBAIHN0YXRpYyB2b2lkIGdwY191bm1hcChrdm1fcGZuX3QgcGZuLCB2b2lkICpraHZhKVxuICNlbmRpZlxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBncGNfc2VxKVxuIHtcbiBcdC8qXG4gXHQgKiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBhY3RzIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXNcbkBAIC0xMzYsMjAgJiM0MzsxMzYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NcbiBcdCAqIE5vdGUsIGl0IGRvZXMgbm90IG1hdHRlciB0aGF0IG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50XG4gXHQgKiBpcyBub3QgcHJvdGVjdGVkIGJ5IGdwYy1cdTAwM2Vsb2NrLiAgSXQgaXMgZ3VhcmFudGVlZCB0b1xuIFx0ICogYmUgZWxldmF0ZWQgYmVmb3JlIHRoZSBtbXVfbm90aWZpZXIgYWNxdWlyZXMgZ3BjLVx1MDAzZWxvY2ssIGFuZFxuLVx0ICogaXNuJiMzOTt0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgbW11X2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuXG4mIzQzO1x0ICogaXNuJiMzOTt0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuXG4gXHQgKi9cbiBcdGlmIChrdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0LypcbiBcdCAqIEVuc3VyZSBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBpcyByZWFkIGJlZm9yZVxuLVx0ICogbW11X2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW5cbi1cdCAqIG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlXG4mIzQzO1x0ICogZ3BjX2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW5cbiYjNDM7XHQgKiBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGVcbiBcdCAqIG9sZCAobm9uLXplcm8pIHZhbHVlIG9mIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IG9yIHRoZVxuLVx0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW11X2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxuJiM0MztcdCAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIGdwY19pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cbiBcdCAqL1xuIFx0c21wX3JtYigpO1xuLVx0cmV0dXJuIGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXEgIT0gbW11X3NlcTtcbiYjNDM7XHRyZXR1cm4ga3ZtLVx1MDAzZWdwY19pbnZhbGlkYXRlX3NlcSAhPSBncGNfc2VxO1xuIH1cbiBcbiBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbkBAIC0xNTgsNyAmIzQzOzE1OCw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuIFx0dm9pZCAqb2xkX2todmEgPSAodm9pZCAqKVBBR0VfQUxJR05fRE9XTigodWludHB0cl90KWdwYy1cdTAwM2VraHZhKTtcbiBcdGt2bV9wZm5fdCBuZXdfcGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XG4gXHR2b2lkICpuZXdfa2h2YSA9IE5VTEw7XG4tXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBncGNfc2VxO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4gXHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xuQEAgLTE4MSw3ICYjNDM7MTgxLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHRncGMtXHUwMDNldmFsaWQgPSBmYWxzZTtcbiBcbiBcdGRvIHtcbi1cdFx0bW11X3NlcSA9IGdwYy1cdTAwM2Vrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuJiM0MztcdFx0Z3BjX3NlcSA9IGdwYy1cdTAwM2Vrdm0tXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxO1xuIFx0XHRzbXBfcm1iKCk7XG4gXG4gXHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2Z3BjLVx1MDAzZWxvY2spO1xuQEAgLTIzMiw3ICYjNDM7MjMyLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHRcdCAqIGF0dGVtcHRpbmcgdG8gcmVmcmVzaC5cbiBcdFx0ICovXG4gXHRcdFdBUk5fT05fT05DRShncGMtXHUwMDNldmFsaWQpO1xuLVx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cdTAwM2Vrdm0sIG1tdV9zZXEpKTtcbiYjNDM7XHR9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLVx1MDAzZWt2bSwgZ3BjX3NlcSkpO1xuIFxuIFx0Z3BjLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbiBcdGdwYy1cdTAwM2VwZm4gPSBuZXdfcGZuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fWDg2JiMzNDssCiAgICAmIzM0O0tWTV9YRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1feGVuX3ZjcHVfc2V0X2F0dHImIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9odm1fc2V0X2F0dHImIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9oeXBlcmNhbGwmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMmIzM0OywKICAgICYjMzQ7X19rdm1feGVuX2hhc19pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmQmIzM0OywKICAgICYjMzQ7a3ZtX2dwY19yZWZyZXNoJiMzNDssCiAgICAmIzM0O2t2bV9ncGNfYWN0aXZhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBhbmQgY29uY3VycmVuY3ktY3JpdGljYWwgY2hhbmdlcyB0byBLVk0mIzM5O3MgWGVuIGVtdWxhdGlvbiBhbmQgZ2ZuX3RvX3Bmbl9jYWNoZSAoR1BDKSBzdWJzeXN0ZW0uIFRoZXNlIGluY2x1ZGUgbWlncmF0aW5nIFhlbiBldmVudCBjaGFubmVsIHN0b3JhZ2UgZnJvbSBJRFIgdG8gWEFycmF5LCBlbmZvcmNpbmcgYWxpZ25tZW50IGNoZWNrcyBmb3IgdkNQVSBpbmZvIEdQQS9IVkEsIHVzaW5nIGV4cGxpY2l0IDMyLWJpdCBhdG9taWMgYml0b3BzIHRvIHByZXZlbnQgc3BsaXQtbG9jayBBQyBleGNlcHRpb25zIG9uIHVuYWxpZ25lZCBzdHJ1Y3R1cmVzLCBpbnRyb2R1Y2luZyBTUkNVIGxvY2tpbmcgaW4gX19rdm1feGVuX2hhc19pbnRlcnJ1cHQsIGFuZCBzZXBhcmF0aW5nIEdQQyBpbnZhbGlkYXRpb24gc2VxdWVuY2luZyBmcm9tIGdlbmVyYWwgTU1VIGludmFsaWRhdGlvbiBzZXF1ZW5jaW5nLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgdmlydHVhbGl6YXRpb24gaW9jdGxzLCBoeXBlcmNhbGxzLCBhbmQgZXZlbnQgY2hhbm5lbCBkZWxpdmVyeSBtZWNoYW5pc21zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzNlMDNmZjNiOGMzNzlkOGIzMjgyMGM5OWViYzAyZDgwMmUzMDNiMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMDQ6Mzg6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCA2ODNiYjhiZjQzYTk0Li4zYWY3Mzk1YzI0MzBhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTE2LDYgJiM0MzsxNiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaXJxX3dvcmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcnEuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgveGFycmF5LmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtsaW51eC9rdm0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rdm1fcGFyYS5oJmd0OwpAQCAtMTExMyw3ICYjNDM7MTExNCw3IEBAIHN0cnVjdCBrdm1feGVuIHsKIAlib29sIHJ1bnN0YXRlX3VwZGF0ZV9mbGFnOwogCXU4IHVwY2FsbF92ZWN0b3I7CiAJc3RydWN0IGdmbl90b19wZm5fY2FjaGUgc2hpbmZvX2NhY2hlOwotCXN0cnVjdCBpZHIgZXZ0Y2huX3BvcnRzOwomIzQzOwlzdHJ1Y3QgeGFycmF5IGV2dGNobl9wb3J0czsKIAl1bnNpZ25lZCBsb25nIHBvbGxfbWFza1tCSVRTX1RPX0xPTkdTKEtWTV9NQVhfVkNQVVMpXTsKIAogCXN0cnVjdCBrdm1feGVuX2h2bV9jb25maWcgaHZtX2NvbmZpZzsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uYyBiL2FyY2gveDg2L2t2bS94ZW4uYwppbmRleCA5OThjZGNiNmFhMzAzLi43MTgzOTYzNDBkM2MxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3hlbi5jCkBAIC03Myw3ICYjNDM7NzMsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChzdHJ1Y3Qga3ZtICprdm0pCiAJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBzaGFyZWRfaW5mbywgd2MpICE9IDB4YzAwKTsKIAlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNoYXJlZF9pbmZvLCB3Y19zZWNfaGkpICE9IDB4YzBjKTsKIAotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkgewomIzQzOwlpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkpIHsKIAkJc3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtJmd0O2todmE7CiAKIAkJd2Nfc2VjX2hpID0gJmFtcDtzaGluZm8tJmd0O3djX3NlY19oaTsKQEAgLTM4OSw3ICYjNDM7Mzg5LDcgQEAgc3RhdGljIHZvaWQga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2LCBib29sIGF0b21pYykKIAlCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sIHRpbWUpICE9CiAJCSAgICAgc2l6ZW9mKHZ4LSZndDtydW5zdGF0ZV90aW1lcykpOwogCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7IHYtJmd0O2t2bS0mZ3Q7YXJjaC54ZW4ubG9uZ19tb2RlKSB7CiYjNDM7CWlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8odi0mZ3Q7a3ZtKSkgewogCQl1c2VyX2xlbiA9IHNpemVvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvKTsKIAkJdGltZXNfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbywKIAkJCQkgICAgIHN0YXRlX2VudHJ5X3RpbWUpOwpAQCAtNjc2LDI4ICYjNDM7Njc2LDMyIEBAIHZvaWQga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2KQogCX0KIAogCS8qIE5vdyBncGMtJmd0O2todmEgaXMgYSB2YWxpZCBrZXJuZWwgYWRkcmVzcyBmb3IgdGhlIHZjcHVfaW5mbyAqLwotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyB2LSZndDtrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkgewomIzQzOwlpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtJmd0O2t2bSkpIHsKIAkJc3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtJmd0O2todmE7CiYjNDM7CQl2b2lkICp2aV9wZW5kaW5nX3NlbCA9ICZhbXA7dmktJmd0O2V2dGNobl9wZW5kaW5nX3NlbDsKIAotCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggJiMzNDtvcnEgJTAsICUxXG4mIzM0OwotCQkJICAgICAmIzM0O25vdHEgJTBcbiYjMzQ7Ci0JCQkgICAgIExPQ0tfUFJFRklYICYjMzQ7YW5kcSAlMCwgJTJcbiYjMzQ7Ci0JCQkgICAgIDogJiMzNDs9ciYjMzQ7IChldnRjaG5fcGVuZGluZ19zZWwpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHZpLSZndDtldnRjaG5fcGVuZGluZ19zZWwpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHYtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCkKLQkJCSAgICAgOiAmIzM0OzAmIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsKSk7CiYjNDM7CQlpZiAoSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZyl2aV9wZW5kaW5nX3NlbCwgc2l6ZW9mKHU2NCkpKSB7CiYjNDM7CQkJYXRvbWljNjRfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCB2aV9wZW5kaW5nX3NlbCk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWF0b21pY19vcihldnRjaG5fcGVuZGluZ19zZWwsIHZpX3BlbmRpbmdfc2VsKTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFRoZSBjYXN0IGtlZXBzIHRoZSBzaGlmdCB3ZWxsLWRlZmluZWQgb24gMzItYml0LAomIzQzOwkJCSAqIHdoZXJlIGV2dGNobl9wZW5kaW5nX3NlbCBpcyAzMiBiaXRzIHdpZGUgYW5kIHRoaXMKJiM0MzsJCQkgKiBicmFuY2ggaXMgdW5yZWFjaGFibGUgYW55d2F5ICh0aGlzIGlzIGluc2lkZQomIzQzOwkJCSAqIGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbygpLCB3aGljaCBpcyBnYXRlZCBvbgomIzQzOwkJCSAqIElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSkuCiYjNDM7CQkJICovCiYjNDM7CQkJYXRvbWljX29yKCh1NjQpZXZ0Y2huX3BlbmRpbmdfc2VsICZndDsmZ3Q7IDMyLAomIzQzOwkJCQkgIHZpX3BlbmRpbmdfc2VsICYjNDM7IDQpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJYXRvbWljNjRfYW5kbm90KGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKikmYW1wO3YtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCk7CiAJCVdSSVRFX09OQ0UodmktJmd0O2V2dGNobl91cGNhbGxfcGVuZGluZywgMSk7CiAJfSBlbHNlIHsKLQkJdTMyIGV2dGNobl9wZW5kaW5nX3NlbDMyID0gZXZ0Y2huX3BlbmRpbmdfc2VsOwogCQlzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmkgPSBncGMtJmd0O2todmE7CiAKLQkJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICYjMzQ7b3JsICUwLCAlMVxuJiMzNDsKLQkJCSAgICAgJiMzNDtub3RsICUwXG4mIzM0OwotCQkJICAgICBMT0NLX1BSRUZJWCAmIzM0O2FuZGwgJTAsICUyXG4mIzM0OwotCQkJICAgICA6ICYjMzQ7PXImIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHZpLSZndDtldnRjaG5fcGVuZGluZ19zZWwpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHYtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCkKLQkJCSAgICAgOiAmIzM0OzAmIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpKTsKJiM0MzsJCWF0b21pY19vcihldnRjaG5fcGVuZGluZ19zZWwsICh2b2lkICopJmFtcDt2aS0mZ3Q7ZXZ0Y2huX3BlbmRpbmdfc2VsKTsKJiM0MzsJCWF0b21pY19hbmRub3QoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKSZhbXA7di0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKTsKIAkJV1JJVEVfT05DRSh2aS0mZ3Q7ZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTsKIAl9CiAKQEAgLTcyOCw2ICYjNDM7NzMyLDE2IEBAIGludCBfX2t2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpCiAJQlVJTERfQlVHX09OKHNpemVvZihyYykgIT0KIAkJICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF92Y3B1X2luZm8sIGV2dGNobl91cGNhbGxfcGVuZGluZykpOwogCiYjNDM7CS8qCiYjNDM7CSAqIGt2bV9ncGNfY2hlY2soKSBjaGVja3MgdGhlIG1lbXNsb3QgZ2VuZXJhdGlvbiwgc28ga3ZtLSZndDtzcmN1IG11c3QgYmUKJiM0MzsJICogaGVsZC4gTW9zdCBjYWxsZXJzIGhvbGQgaXQgYWxyZWFkeSwgYnV0IHRoaXMgaXMgYWxzbyByZWFjaGVkIGZyb20KJiM0MzsJICoga3ZtX2VtdWxhdGVfaGFsdCgpIG9uIHRoZSBWTS1FeGl0IHBhdGggYW5kIGZyb20ga3ZtX3ZjcHVfYmxvY2soKSwKJiM0MzsJICogd2hlcmUgdmNwdV9lbnRlcl9ndWVzdCgpIGhhcyBhbHJlYWR5IGRyb3BwZWQgdGhlIHZDUFUmIzM5O3MgU1JDVSBsb2NrLgomIzQzOwkgKiBUYWtpbmcgU1JDVSBkb2VzIG5vdCBzbGVlcCwgc28gaXQgaXMgc2FmZSBldmVuIGluIHRoZSBhdG9taWMgY2FzZQomIzQzOwkgKiB3aGljaCBpcyBoYW5kbGVkIGJlbG93LgomIzQzOwkgKi8KJiM0MzsJZ3VhcmQoc3JjdSkoJmFtcDt2LSZndDtrdm0tJmd0O3NyY3UpOwomIzQzOwogCXJlYWRfbG9ja19pcnFzYXZlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CiAJd2hpbGUgKCFrdm1fZ3BjX2NoZWNrKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkgewogCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CkBAIC05NDEsNiAmIzQzOzk1NSwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKQogCQkJCWJyZWFrOwogCQkJfQogCiYjNDM7CQkJciA9IC1FTlhJTzsKJiM0MzsJCQlpZiAoIUlTX0FMSUdORUQoZGF0YS0mZ3Q7dS5ncGEsIHNpemVvZih1MzIpKSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiAJCQlyID0ga3ZtX2dwY19hY3RpdmF0ZSgmYW1wO3ZjcHUtJmd0O2FyY2gueGVuLnZjcHVfaW5mb19jYWNoZSwKIAkJCQkJICAgICBkYXRhLSZndDt1LmdwYSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTsKIAkJfSBlbHNlIHsKQEAgLTk1MCw2ICYjNDM7OTY4LDEwIEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpCiAJCQkJYnJlYWs7CiAJCQl9CiAKJiM0MzsJCQlyID0gLUVOWElPOwomIzQzOwkJCWlmICghSVNfQUxJR05FRChkYXRhLSZndDt1Lmh2YSwgc2l6ZW9mKHUzMikpKQomIzQzOwkJCQlicmVhazsKJiM0MzsKIAkJCXIgPSBrdm1fZ3BjX2FjdGl2YXRlX2h2YSgmYW1wO3ZjcHUtJmd0O2FyY2gueGVuLnZjcHVfaW5mb19jYWNoZSwKIAkJCQkJCSBkYXRhLSZndDt1Lmh2YSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTsKIAkJfQpAQCAtOTkzLDcgJiM0MzsxMDE1LDcgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSkKIAkJICogYWRkcmVzcywgdGhhdCYjMzk7cyBhY3R1YWxseSBPSy4ga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3QoKQogCQkgKiB3aWxsIGNvcGUuCiAJCSAqLwotCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpCiYjNDM7CQlpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtJmd0O2t2bSkpCiAJCQlzeiA9IHNpemVvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvKTsKIAkJZWxzZQogCQkJc3ogPSBzaXplb2Yoc3RydWN0IGNvbXBhdF92Y3B1X3J1bnN0YXRlX2luZm8pOwpAQCAtMTQzOSwxNiAmIzQzOzE0NjEsMjEgQEAgc3RhdGljIGludCBrdm1feGVuX2h5cGVyY2FsbF9jb21wbGV0ZV91c2Vyc3BhY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXJldHVybiBrdm1feGVuX2h5cGVyY2FsbF9zZXRfcmVzdWx0KHZjcHUsIHJ1bi0mZ3Q7eGVuLnUuaGNhbGwucmVzdWx0KTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KHN0cnVjdCBrdm0gKmt2bSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBtYXhfZXZ0Y2huX3BvcnQoYm9vbCBoYXNfNjRiaXRfc2hpbmZvKQogewotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkKJiM0MzsJaWYgKGhhc182NGJpdF9zaGluZm8pCiAJCXJldHVybiBFVlRDSE5fMkxfTlJfQ0hBTk5FTFM7CiAJZWxzZQogCQlyZXR1cm4gQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUzsKIH0KIAotc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLAotCQkJICAgICAgIGV2dGNobl9wb3J0X3QgKnBvcnRzKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGt2bV9tYXhfZXZ0Y2huX3BvcnQoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1heF9ldnRjaG5fcG9ydChrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaGFzXzY0Yml0X3NoaW5mbywKJiM0MzsJCQkgICAgICAgaW50IG5yX3BvcnRzLCBldnRjaG5fcG9ydF90ICpwb3J0cykKIHsKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAJc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyA9ICZhbXA7a3ZtLSZndDthcmNoLnhlbi5zaGluZm9fY2FjaGU7CkBAIC0xNDYzLDcgJiM0MzsxNDkwLDcgQEAgc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLAogCQlnb3RvIG91dF9yY3U7CiAKIAlyZXQgPSBmYWxzZTsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsga3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpIHsKJiM0MzsJaWYgKGhhc182NGJpdF9zaGluZm8pIHsKIAkJc3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtJmd0O2todmE7CiAJCXBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopJmFtcDtzaGluZm8tJmd0O2V2dGNobl9wZW5kaW5nOwogCX0gZWxzZSB7CkBAIC0xNDg1LDkgJiM0MzsxNTEyLDEwIEBAIHN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cywKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsCiYjNDM7c3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzXzY0Yml0LAogCQkJCSB1NjQgcGFyYW0sIHU2NCAqcikKIHsKJiM0MzsJYm9vbCBoYXNfNjRiaXRfc2hpbmZvID0ga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtJmd0O2t2bSk7CiAJc3RydWN0IHNjaGVkX3BvbGwgc2NoZWRfcG9sbDsKIAlldnRjaG5fcG9ydF90IHBvcnQsICpwb3J0czsKIAlzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlOwpAQCAtMTQ5Nyw3ICYjNDM7MTUyNSw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwKIAkgICAgISh2Y3B1LSZndDtrdm0tJmd0O2FyY2gueGVuLmh2bV9jb25maWcuZmxhZ3MgJmFtcDsgS1ZNX1hFTl9IVk1fQ09ORklHX0VWVENITl9TRU5EKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7ICFsb25nbW9kZSkgewomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsgIWlzXzY0Yml0KSB7CiAJCXN0cnVjdCBjb21wYXRfc2NoZWRfcG9sbCBzcDMyOwogCiAJCS8qIFNhbml0eSBjaGVjayB0aGF0IHRoZSBjb21wYXQgc3RydWN0IGRlZmluaXRpb24gaXMgY29ycmVjdCAqLwpAQCAtMTU0NiwyMCAmIzQzOzE1NzQsMjAgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLAogCX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBzY2hlZF9wb2xsLm5yX3BvcnRzOyBpJiM0MzsmIzQzOykgewotCQlpZiAocG9ydHNbaV0gJmd0Oz0gbWF4X2V2dGNobl9wb3J0KHZjcHUtJmd0O2t2bSkpIHsKJiM0MzsJCWlmIChwb3J0c1tpXSAmZ3Q7PSBtYXhfZXZ0Y2huX3BvcnQoaGFzXzY0Yml0X3NoaW5mbykpIHsKIAkJCSpyID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQogCiAJaWYgKHNjaGVkX3BvbGwubnJfcG9ydHMgPT0gMSkKLQkJdmNwdS0mZ3Q7YXJjaC54ZW4ucG9sbF9ldnRjaG4gPSBwb3J0OwomIzQzOwkJV1JJVEVfT05DRSh2Y3B1LSZndDthcmNoLnhlbi5wb2xsX2V2dGNobiwgcG9ydCk7CiAJZWxzZQotCQl2Y3B1LSZndDthcmNoLnhlbi5wb2xsX2V2dGNobiA9IC0xOwomIzQzOwkJV1JJVEVfT05DRSh2Y3B1LSZndDthcmNoLnhlbi5wb2xsX2V2dGNobiwgLTEpOwogCiAJc2V0X2JpdCh2Y3B1LSZndDt2Y3B1X2lkeCwgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnhlbi5wb2xsX21hc2spOwogCi0JaWYgKCF3YWl0X3BlbmRpbmdfZXZlbnQodmNwdSwgc2NoZWRfcG9sbC5ucl9wb3J0cywgcG9ydHMpKSB7CiYjNDM7CWlmICghd2FpdF9wZW5kaW5nX2V2ZW50KHZjcHUsIGhhc182NGJpdF9zaGluZm8sIHNjaGVkX3BvbGwubnJfcG9ydHMsIHBvcnRzKSkgewogCQlrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpOwogCiAJCWlmIChzY2hlZF9wb2xsLnRpbWVvdXQpCkBAIC0xNTc0LDcgJiM0MzsxNjAyLDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLAogCQlrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9SVU5OQUJMRSk7CiAJfQogCi0JdmNwdS0mZ3Q7YXJjaC54ZW4ucG9sbF9ldnRjaG4gPSAwOwomIzQzOwlXUklURV9PTkNFKHZjcHUtJmd0O2FyY2gueGVuLnBvbGxfZXZ0Y2huLCAwKTsKIAkqciA9IDA7CiBvdXQ6CiAJLyogUmVhbGx5LCB0aGlzIGlzIG9ubHkgbmVlZGVkIGluIGNhc2Ugb2YgdGltZW91dCAqLwpAQCAtMTU5NCwxMiAmIzQzOzE2MjIsMTIgQEAgc3RhdGljIHZvaWQgY2FuY2VsX2V2dGNobl9wb2xsKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCWt2bV92Y3B1X2tpY2sodmNwdSk7CiB9CiAKLXN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2NoZWRfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLAomIzQzO3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2NoZWRfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzXzY0Yml0LAogCQkJCSAgIGludCBjbWQsIHU2NCBwYXJhbSwgdTY0ICpyKQogewogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTQ0hFRE9QX3BvbGw6Ci0JCWlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBsb25nbW9kZSwgcGFyYW0sIHIpKQomIzQzOwkJaWYgKGt2bV94ZW5fc2NoZWRvcF9wb2xsKHZjcHUsIGlzXzY0Yml0LCBwYXJhbSwgcikpCiAJCQlyZXR1cm4gdHJ1ZTsKIAkJZmFsbHRocm91Z2g7CiAJY2FzZSBTQ0hFRE9QX3lpZWxkOgpAQCAtMTYxOCw3ICYjNDM7MTY0Niw3IEBAIHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciB7CiAgICAgdWludDMyX3QgZmxhZ3M7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLAomIzQzO3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsIGludCBjbWQsCiAJCQkJICBpbnQgdmNwdV9pZCwgdTY0IHBhcmFtLCB1NjQgKnIpCiB7CiAJc3RydWN0IHZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIgb25lc2hvdDsKQEAgLTE2NjIsNyAmIzQzOzE2OTAsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLAogCQlCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpICE9CiAJCQkgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpKTsKIAotCQlpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBwYXJhbSwgJmFtcDtvbmVzaG90LCBsb25nbW9kZSA/IHNpemVvZihvbmVzaG90KSA6CiYjNDM7CQlpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBwYXJhbSwgJmFtcDtvbmVzaG90LCBpc182NGJpdCA/IHNpemVvZihvbmVzaG90KSA6CiAJCQkJCXNpemVvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIpLCAmYW1wO2UpKSB7CiAJCQkqciA9IC1FRkFVTFQ7CiAJCQlyZXR1cm4gdHJ1ZTsKQEAgLTE2OTQsNyAmIzQzOzE3MjIsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3NldF90aW1lcl9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVpbnQ2NF90IHRpbWVvdXQsCiAKIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JYm9vbCBsb25nbW9kZTsKJiM0MzsJYm9vbCBpc182NGJpdDsKIAl1NjQgaW5wdXQsIHBhcmFtc1s2XSwgciA9IC1FTk9TWVM7CiAJYm9vbCBoYW5kbGVkID0gZmFsc2U7CiAJdTggY3BsOwpAQCAtMTcwNCw4ICYjNDM7MTczMiw4IEBAIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICAgIGt2bV9odl9oeXBlcmNhbGxfZW5hYmxlZCh2Y3B1KSkKIAkJcmV0dXJuIGt2bV9odl9oeXBlcmNhbGwodmNwdSk7CiAKLQlsb25nbW9kZSA9IGlzXzY0X2JpdF9oeXBlcmNhbGwodmNwdSk7Ci0JaWYgKCFsb25nbW9kZSkgewomIzQzOwlpc182NGJpdCA9IGlzXzY0X2JpdF9oeXBlcmNhbGwodmNwdSk7CiYjNDM7CWlmICghaXNfNjRiaXQpIHsKIAkJaW5wdXQgPSBrdm1fZWF4X3JlYWQodmNwdSk7CiAJCXBhcmFtc1swXSA9IGt2bV9lYnhfcmVhZCh2Y3B1KTsKIAkJcGFyYW1zWzFdID0ga3ZtX2VjeF9yZWFkKHZjcHUpOwpAQCAtMTc1MSwxNyAmIzQzOzE3NzksMTcgQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJCWhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHZjcHUsIHBhcmFtc1sxXSwgJmFtcDtyKTsKIAkJYnJlYWs7CiAJY2FzZSBfX0hZUEVSVklTT1Jfc2NoZWRfb3A6Ci0JCWhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGxvbmdtb2RlLCBwYXJhbXNbMF0sCiYjNDM7CQloYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcCh2Y3B1LCBpc182NGJpdCwgcGFyYW1zWzBdLAogCQkJCQkJIHBhcmFtc1sxXSwgJmFtcDtyKTsKIAkJYnJlYWs7CiAJY2FzZSBfX0hZUEVSVklTT1JfdmNwdV9vcDoKLQkJaGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sCiYjNDM7CQloYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHZjcHUsIGlzXzY0Yml0LCBwYXJhbXNbMF0sIHBhcmFtc1sxXSwKIAkJCQkJCXBhcmFtc1syXSwgJmFtcDtyKTsKIAkJYnJlYWs7CiAJY2FzZSBfX0hZUEVSVklTT1Jfc2V0X3RpbWVyX29wOiB7CiAJCXU2NCB0aW1lb3V0ID0gcGFyYW1zWzBdOwogCQkvKiBJbiAzMi1iaXQgbW9kZSwgdGhlIDY0LWJpdCB0aW1lb3V0IGlzIGluIHR3byAzMi1iaXQgcGFyYW1zLiAqLwotCQlpZiAoIWxvbmdtb2RlKQomIzQzOwkJaWYgKCFpc182NGJpdCkKIAkJCXRpbWVvdXQgfD0gcGFyYW1zWzFdICZsdDsmbHQ7IDMyOwogCQloYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9zZXRfdGltZXJfb3AodmNwdSwgdGltZW91dCwgJmFtcDtyKTsKIAkJYnJlYWs7CkBAIC0xNzc2LDcgJiM0MzsxODA0LDcgQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIGhhbmRsZV9pbl91c2Vyc3BhY2U6CiAJdmNwdS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9IEtWTV9FWElUX1hFTjsKIAl2Y3B1LSZndDtydW4tJmd0O3hlbi50eXBlID0gS1ZNX0VYSVRfWEVOX0hDQUxMOwotCXZjcHUtJmd0O3J1bi0mZ3Q7eGVuLnUuaGNhbGwubG9uZ21vZGUgPSBsb25nbW9kZTsKJiM0MzsJdmNwdS0mZ3Q7cnVuLSZndDt4ZW4udS5oY2FsbC5sb25nbW9kZSA9IGlzXzY0Yml0OwogCXZjcHUtJmd0O3J1bi0mZ3Q7eGVuLnUuaGNhbGwuY3BsID0gY3BsOwogCXZjcHUtJmd0O3J1bi0mZ3Q7eGVuLnUuaGNhbGwuaW5wdXQgPSBpbnB1dDsKIAl2Y3B1LSZndDtydW4tJmd0O3hlbi51LmhjYWxsLnBhcmFtc1swXSA9IHBhcmFtc1swXTsKQEAgLTE3OTQsNyAmIzQzOzE4MjIsNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBzdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KQogewotCWludCBwb2xsX2V2dGNobiA9IHZjcHUtJmd0O2FyY2gueGVuLnBvbGxfZXZ0Y2huOwomIzQzOwlpbnQgcG9sbF9ldnRjaG4gPSBSRUFEX09OQ0UodmNwdS0mZ3Q7YXJjaC54ZW4ucG9sbF9ldnRjaG4pOwogCiAJaWYgKChwb2xsX2V2dGNobiA9PSBwb3J0IHx8IHBvbGxfZXZ0Y2huID09IC0xKSAmYW1wOyZhbXA7CiAJICAgIHRlc3RfYW5kX2NsZWFyX2JpdCh2Y3B1LSZndDt2Y3B1X2lkeCwgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnhlbi5wb2xsX21hc2spKSB7CkBAIC0xODE2LDggJiM0MzsxODQ0LDkgQEAgc3RhdGljIHZvaWQga3ZtX3hlbl9jaGVja19wb2xsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG9ydCkKIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyA9ICZhbXA7a3ZtLSZndDthcmNoLnhlbi5zaGluZm9fY2FjaGU7CiYjNDM7CWJvb2wgaGFzXzY0Yml0X3NoaW5mbyA9IGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pOwomIzQzOwl1bnNpZ25lZCBsb25nICpwZW5kaW5nX2JpdHMsICptYXNrX2JpdHMsIHZpX3BlbmRpbmdfc2VsX29mczsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7Ci0JdW5zaWduZWQgbG9uZyAqcGVuZGluZ19iaXRzLCAqbWFza19iaXRzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHBvcnRfd29yZF9iaXQ7CiAJYm9vbCBraWNrX3ZjcHUgPSBmYWxzZTsKQEAgLTE4MzMsNyAmIzQzOzE4NjIsNyBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKQogCQlXUklURV9PTkNFKHhlLSZndDt2Y3B1X2lkeCwgdmNwdS0mZ3Q7dmNwdV9pZHgpOwogCX0KIAotCWlmICh4ZS0mZ3Q7cG9ydCAmZ3Q7PSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKJiM0MzsJaWYgKHhlLSZndDtwb3J0ICZndDs9IG1heF9ldnRjaG5fcG9ydChoYXNfNjRiaXRfc2hpbmZvKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyYyA9IC1FV09VTERCTE9DSzsKQEAgLTE4NDQsMTYgJiM0MzsxODczLDIzIEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pCiAJaWYgKCFrdm1fZ3BjX2NoZWNrKGdwYywgUEFHRV9TSVpFKSkKIAkJZ290byBvdXRfcmN1OwogCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7IGt2bS0mZ3Q7YXJjaC54ZW4ubG9uZ19tb2RlKSB7CiYjNDM7CWlmIChoYXNfNjRiaXRfc2hpbmZvKSB7CiAJCXN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLSZndDtraHZhOwogCQlwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKSZhbXA7c2hpbmZvLSZndDtldnRjaG5fcGVuZGluZzsKIAkJbWFza19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKikmYW1wO3NoaW5mby0mZ3Q7ZXZ0Y2huX21hc2s7CiAJCXBvcnRfd29yZF9iaXQgPSB4ZS0mZ3Q7cG9ydCAvIDY0OwomIzQzOwomIzQzOwkJdmlfcGVuZGluZ19zZWxfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3BlbmRpbmdfc2VsKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgY29tcGF0X3NoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtJmd0O2todmE7CiAJCXBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopJmFtcDtzaGluZm8tJmd0O2V2dGNobl9wZW5kaW5nOwogCQltYXNrX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKSZhbXA7c2hpbmZvLSZndDtldnRjaG5fbWFzazsKIAkJcG9ydF93b3JkX2JpdCA9IHhlLSZndDtwb3J0IC8gMzI7CiYjNDM7CiYjNDM7CQl2aV9wZW5kaW5nX3NlbF9vZnMgPSBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbywgZXZ0Y2huX3BlbmRpbmdfc2VsKTsKJiM0MzsKJiM0MzsJCS8qIHRlc3RfYW5kX3NldF9iaXQoKSBuZWVkcyA2NC1iaXQgYWxpZ25tZW50LCBidXQgdGhhdCYjMzk7cyBPSyAqLwomIzQzOwkJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8sIGV2dGNobl9wZW5kaW5nKSAmYW1wOyA3KTsKIAl9CiAKIAkvKgpAQCAtMTg2OSw2ICYjNDM7MTkwNSw4IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pCiAJCXJjID0gLUVOT1RDT05OOyAvKiBNYXNrZWQgKi8KIAkJa3ZtX3hlbl9jaGVja19wb2xsZXIodmNwdSwgeGUtJmd0O3BvcnQpOwogCX0gZWxzZSB7CiYjNDM7CQlib29sIG9sZDsKJiM0MzsKIAkJcmMgPSAxOyAvKiBEZWxpdmVyZWQgdG8gdGhlIGJpdG1hcCBpbiBzaGFyZWRfaW5mby4gKi8KIAkJLyogTm93IHN3aXRjaCB0byB0aGUgdkNQVSYjMzk7cyB2Y3B1X2luZm8gdG8gc2V0IHRoZSBpbmRleCBhbmQgcGVuZGluZ19zZWwgKi8KIAkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2dwYy0mZ3Q7bG9jaywgZmxhZ3MpOwpAQCAtMTg4NSwxOSAmIzQzOzE5MjMsMjkgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIAkJCWdvdG8gb3V0X3JjdTsKIAkJfQogCi0JCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkgewotCQkJc3RydWN0IHZjcHVfaW5mbyAqdmNwdV9pbmZvID0gZ3BjLSZndDtraHZhOwotCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnRfd29yZF9iaXQsICZhbXA7dmNwdV9pbmZvLSZndDtldnRjaG5fcGVuZGluZ19zZWwpKSB7Ci0JCQkJV1JJVEVfT05DRSh2Y3B1X2luZm8tJmd0O2V2dGNobl91cGNhbGxfcGVuZGluZywgMSk7Ci0JCQkJa2lja192Y3B1ID0gdHJ1ZTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXN0cnVjdCBjb21wYXRfdmNwdV9pbmZvICp2Y3B1X2luZm8gPSBncGMtJmd0O2todmE7Ci0JCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCwKLQkJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgKikmYW1wO3ZjcHVfaW5mby0mZ3Q7ZXZ0Y2huX3BlbmRpbmdfc2VsKSkgewotCQkJCVdSSVRFX09OQ0UodmNwdV9pbmZvLSZndDtldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpOwotCQkJCWtpY2tfdmNwdSA9IHRydWU7Ci0JCQl9CiYjNDM7CQkvKgomIzQzOwkJICogRXhwbGljaXRseSB1c2UgYSAzMi1iaXQgYnRzbCBpbnN0ZWFkIG9mIHRlc3RfYW5kX3NldF9iaXQoKSwKJiM0MzsJCSAqIHdoaWNoIHdvdWxkIHVzZSBidHNxIG9uIHg4Ni02NC4gVGhlIHZjcHVfaW5mbyBpcyBndWVzdC0KJiM0MzsJCSAqIGNvbnRyb2xsZWQgYW5kIG9ubHkgcmVxdWlyZWQgdG8gYmUgMzItYml0IGFsaWduZWQsIHNvIGEKJiM0MzsJCSAqIDY0LWJpdCBhY2Nlc3MgY291bGQgZ2VuZXJhdGUgYSBzcGxpdC1sb2NrICNBQy4KJiM0MzsJCSAqCiYjNDM7CQkgKiBOb3RlLCB0aGlzIGRvZXMgbm90IGFwcGx5IHRvIHRoZSB0ZXN0X2FuZF9zZXRfYml0KCkgb24KJiM0MzsJCSAqIHBlbmRpbmdfYml0cyBhYm92ZTogdGhhdCBpcyBpbiB0aGUgcGVyLVZNIHNoYXJlZF9pbmZvLCB3aGljaAomIzQzOwkJICogaXMgcGFnZSBhbGlnbmVkLCBzbyB0aGUgYWNjZXNzIGlzIGd1YXJhbnRlZWQgdG8gYmUgNjQtYml0CiYjNDM7CQkgKiBhbGlnbmVkLgomIzQzOwkJICovCiYjNDM7CQlvbGQgPSBHRU5fQklOQVJZX1JNV2NjKExPQ0tfUFJFRklYICYjMzQ7YnRzbCYjMzQ7LAomIzQzOwkJCQkgICAgICAgKih1MzIgKikoZ3BjLSZndDtraHZhICYjNDM7IHZpX3BlbmRpbmdfc2VsX29mcyksCiYjNDM7CQkJCSAgICAgICBjLCAmIzM0O0lyJiMzNDssIHBvcnRfd29yZF9iaXQpOwomIzQzOwkJaWYgKCFvbGQpIHsKJiM0MzsJCQlzdHJ1Y3QgdmNwdV9pbmZvICp2aSA9IGdwYy0mZ3Q7a2h2YTsKJiM0MzsKJiM0MzsJCQkvKiBObyBuZWVkIGZvciBjb21wYXQgaGFuZGxpbmcgKi8KJiM0MzsJCQlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSAhPQomIzQzOwkJCQkgICAgIG9mZnNldG9mKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpKTsKJiM0MzsKJiM0MzsJCQlXUklURV9PTkNFKHZpLSZndDtldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpOwomIzQzOwkJCWtpY2tfdmNwdSA9IHRydWU7CiAJCX0KIAogCQkvKiBGb3IgdGhlIHBlci12Q1BVIGxhcGljIHZlY3RvciwgZGVsaXZlciBpdCBhcyBNU0kuICovCkBAIC0xOTk1LDcgJiM0MzsyMDQzLDcgQEAgaW50IGt2bV94ZW5fc2V0dXBfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiAKIAkvKgotCSAqIERvbiYjMzk7dCBjaGVjayBmb3IgdGhlIHBvcnQgYmVpbmcgd2l0aGluIHJhbmdlIG9mIG1heF9ldnRjaG5fcG9ydCgpLgomIzQzOwkgKiBEb24mIzM5O3QgY2hlY2sgZm9yIHRoZSBwb3J0IGJlaW5nIHdpdGhpbiByYW5nZSBvZiBrdm1fbWF4X2V2dGNobl9wb3J0KCkuCiAJICogVXNlcnNwYWNlIGNhbiBjb25maWd1cmUgd2hhdCBldmVyIHRhcmdldHMgaXQgbGlrZXM7IGV2ZW50cyBqdXN0IHdvbiYjMzk7dAogCSAqIGJlIGRlbGl2ZXJlZCBpZi93aGlsZSB0aGUgdGFyZ2V0IGlzIGludmFsaWQsIGp1c3QgbGlrZSB1c2Vyc3BhY2UgY2FuCiAJICogY29uZmlndXJlIE1TSXMgd2hpY2ggdGFyZ2V0IG5vbi1leGlzdGVudCBBUElDcy4KQEAgLTIwMDQsOCAmIzQzOzIwNTIsOCBAQCBpbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLAogCSAqIGNhbiBiZSByZXN0b3JlZCAqaW5kZXBlbmRlbnRseSogb2Ygb3RoZXIgdGhpbmdzIGxpa2UgY3JlYXRpbmcgdkNQVXMsCiAJICogd2l0aG91dCBpbXBvc2luZyBhbiBvcmRlcmluZyBkZXBlbmRlbmN5IG9uIHVzZXJzcGFjZS4gIEluIHRoaXMKIAkgKiBwYXJ0aWN1bGFyIGNhc2UsIHRoZSBwcm9ibGVtYXRpYyBvcmRlcmluZyB3b3VsZCBiZSB3aXRoIHNldHRpbmcgdGhlCi0JICogWGVuICYjMzk7bG9uZyBtb2RlJiMzOTsgZmxhZywgd2hpY2ggY2hhbmdlcyBtYXhfZXZ0Y2huX3BvcnQoKSB0byBhbGxvdyA0MDk2Ci0JICogaW5zdGVhZCBvZiAxMDI0IGV2ZW50IGNoYW5uZWxzLgomIzQzOwkgKiBYZW4gJiMzOTtsb25nIG1vZGUmIzM5OyBmbGFnLCB3aGljaCBjaGFuZ2VzIGt2bV9tYXhfZXZ0Y2huX3BvcnQoKSB0byBhbGxvdwomIzQzOwkgKiA0MDk2IGluc3RlYWQgb2YgMTAyNCBldmVudCBjaGFubmVscy4KIAkgKi8KIAogCS8qIFdlIG9ubHkgc3VwcG9ydCAyIGxldmVsIGV2ZW50IGNoYW5uZWxzIGZvciBub3cgKi8KQEAgLTIwNDIsNyAmIzQzOzIwOTAsNyBAQCBpbnQga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX3hlbl9ldnRjaG4gKgogCXN0cnVjdCBrdm1feGVuX2V2dGNobiBlOwogCWludCByZXQ7CiAKLQlpZiAoIXV4ZS0mZ3Q7cG9ydCB8fCB1eGUtJmd0O3BvcnQgJmd0Oz0gbWF4X2V2dGNobl9wb3J0KGt2bSkpCiYjNDM7CWlmICghdXhlLSZndDtwb3J0IHx8IHV4ZS0mZ3Q7cG9ydCAmZ3Q7PSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogV2Ugb25seSBzdXBwb3J0IDIgbGV2ZWwgZXZlbnQgY2hhbm5lbHMgZm9yIG5vdyAqLwpAQCAtMjA5Myw3ICYjNDM7MjE0MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX3VwZGF0ZShzdHJ1Y3Qga3ZtICprdm0sCiAKIAkvKiBQcm90ZWN0IHdyaXRlcyB0byBldnRjaG5mZCBhcyB3ZWxsIGFzIHRoZSBpZHIgbG9va3VwLiAgKi8KIAltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDthcmNoLnhlbi54ZW5fbG9jayk7Ci0JZXZ0Y2huZmQgPSBpZHJfZmluZCgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBwb3J0KTsKJiM0MzsJZXZ0Y2huZmQgPSB4YV9sb2FkKCZhbXA7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMsIHBvcnQpOwogCiAJcmV0ID0gLUVOT0VOVDsKIAlpZiAoIWV2dGNobmZkKQpAQCAtMjE1Miw3ICYjNDM7MjIwMCw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbihzdHJ1Y3Qga3ZtICprdm0sCiAKIAljYXNlIEVWVENITlNUQVRfaW50ZXJkb21haW46CiAJCWlmIChkYXRhLSZndDt1LmV2dGNobi5kZWxpdmVyLnBvcnQucG9ydCkgewotCQkJaWYgKGRhdGEtJmd0O3UuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0ICZndDs9IG1heF9ldnRjaG5fcG9ydChrdm0pKQomIzQzOwkJCWlmIChkYXRhLSZndDt1LmV2dGNobi5kZWxpdmVyLnBvcnQucG9ydCAmZ3Q7PSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpCiAJCQkJZ290byBvdXRfbm9ldmVudGZkOyAvKiAtRUlOVkFMICovCiAJCX0gZWxzZSB7CiAJCQlldmVudGZkID0gZXZlbnRmZF9jdHhfZmRnZXQoZGF0YS0mZ3Q7dS5ldnRjaG4uZGVsaXZlci5ldmVudGZkLmZkKTsKQEAgLTIxODcsMTMgJiM0MzsyMjM1LDEzIEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbihzdHJ1Y3Qga3ZtICprdm0sCiAJfQogCiAJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4ueGVuX2xvY2spOwotCXJldCA9IGlkcl9hbGxvYygmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBldnRjaG5mZCwgcG9ydCwgcG9ydCAmIzQzOyAxLAomIzQzOwlyZXQgPSB4YV9pbnNlcnQoJmFtcDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCwgZXZ0Y2huZmQsCiAJCQlHRlBfS0VSTkVMKTsKIAltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2FyY2gueGVuLnhlbl9sb2NrKTsKLQlpZiAocmV0ICZndDs9IDApCiYjNDM7CWlmICghcmV0KQogCQlyZXR1cm4gMDsKIAotCWlmIChyZXQgPT0gLUVOT1NQQykKJiM0MzsJaWYgKHJldCA9PSAtRUJVU1kpCiAJCXJldCA9IC1FRVhJU1Q7CiBvdXQ6CiAJaWYgKGV2ZW50ZmQpCkBAIC0yMjA4LDcgJiM0MzsyMjU2LDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfZGVhc3NpZ24oc3RydWN0IGt2bSAqa3ZtLCB1MzIgcG9ydCkKIAlzdHJ1Y3QgZXZ0Y2huZmQgKmV2dGNobmZkOwogCiAJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4ueGVuX2xvY2spOwotCWV2dGNobmZkID0gaWRyX3JlbW92ZSgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBwb3J0KTsKJiM0MzsJZXZ0Y2huZmQgPSB4YV9lcmFzZSgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBwb3J0KTsKIAltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2FyY2gueGVuLnhlbl9sb2NrKTsKIAogCWlmICghZXZ0Y2huZmQpCkBAIC0yMjI0LDcgJiM0MzsyMjcyLDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfZGVhc3NpZ24oc3RydWN0IGt2bSAqa3ZtLCB1MzIgcG9ydCkKIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlzdHJ1Y3QgZXZ0Y2huZmQgKmV2dGNobmZkLCAqKmFsbF9ldnRjaG5mZHM7Ci0JaW50IGk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKIAlpbnQgbiA9IDA7CiAKIAltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDthcmNoLnhlbi54ZW5fbG9jayk7CkBAIC0yMjM0LDcgJiM0MzsyMjgyLDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKQogCSAqIGNyaXRpY2FsIHNlY3Rpb24sIGZpcnN0IGNvbGxlY3QgYWxsIHRoZSBldnRjaG5mZCBvYmplY3RzCiAJICogaW4gYW4gYXJyYXkgYXMgdGhleSBhcmUgcmVtb3ZlZCBmcm9tIGV2dGNobl9wb3J0cy4KIAkgKi8KLQlpZHJfZm9yX2VhY2hfZW50cnkoJmFtcDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQsIGkpCiYjNDM7CXhhX2Zvcl9lYWNoKCZhbXA7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGksIGV2dGNobmZkKQogCQluJiM0MzsmIzQzOzsKIAogCWFsbF9ldnRjaG5mZHMgPSBrbWFsbG9jX29ianMoc3RydWN0IGV2dGNobmZkICosIG4pOwpAQCAtMjI0NCw5ICYjNDM7MjI5Miw5IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KHN0cnVjdCBrdm0gKmt2bSkKIAl9CiAKIAluID0gMDsKLQlpZHJfZm9yX2VhY2hfZW50cnkoJmFtcDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQsIGkpIHsKJiM0MzsJeGFfZm9yX2VhY2goJmFtcDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cywgaSwgZXZ0Y2huZmQpIHsKIAkJYWxsX2V2dGNobmZkc1tuJiM0MzsmIzQzO10gPSBldnRjaG5mZDsKLQkJaWRyX3JlbW92ZSgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBldnRjaG5mZC0mZ3Q7c2VuZF9wb3J0KTsKJiM0MzsJCXhhX2VyYXNlKCZhbXA7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLSZndDtzZW5kX3BvcnQpOwogCX0KIAltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2FyY2gueGVuLnhlbl9sb2NrKTsKIApAQCAtMjI3MCw3ICYjNDM7MjMxOCw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRhdHRyX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhCiAJaWYgKGRhdGEtJmd0O3UuZXZ0Y2huLmZsYWdzID09IEtWTV9YRU5fRVZUQ0hOX1JFU0VUKQogCQlyZXR1cm4ga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KGt2bSk7CiAKLQlpZiAoIXBvcnQgfHwgcG9ydCAmZ3Q7PSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKJiM0MzsJaWYgKCFwb3J0IHx8IHBvcnQgJmd0Oz0ga3ZtX21heF9ldnRjaG5fcG9ydChrdm0pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChkYXRhLSZndDt1LmV2dGNobi5mbGFncyA9PSBLVk1fWEVOX0VWVENITl9ERUFTU0lHTikKQEAgLTIyOTcsMTIgJiM0MzsyMzQ1LDEwIEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfZXZ0Y2huX3NlbmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcGFyYW0sIHU2NCAqcikKIAl9CiAKIAkvKgotCSAqIGV2dGNobmZkIGlzIHByb3RlY3RlZCBieSBrdm0tJmd0O3NyY3U7IHRoZSBpZHIgbG9va3VwIGluc3RlYWQKLQkgKiBpcyBwcm90ZWN0ZWQgYnkgUkNVLgomIzQzOwkgKiBldnRjaG5mZCBpcyBwcm90ZWN0ZWQgYnkga3ZtLSZndDtzcmN1OyB0aGUgeGFfbG9hZCBpcyBSQ1Utc2FmZQomIzQzOwkgKiBpbnRlcm5hbGx5LCBubyBleHBsaWNpdCByY3VfcmVhZF9sb2NrKCkgbmVlZGVkLgogCSAqLwotCXJjdV9yZWFkX2xvY2soKTsKLQlldnRjaG5mZCA9IGlkcl9maW5kKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMsIHNlbmQucG9ydCk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CWV2dGNobmZkID0geGFfbG9hZCgmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBzZW5kLnBvcnQpOwogCWlmICghZXZ0Y2huZmQpCiAJCXJldHVybiBmYWxzZTsKIApAQCAtMjM0OSwyMyAmIzQzOzIzOTUsMjMgQEAgdm9pZCBrdm1feGVuX2Rlc3Ryb3lfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB2b2lkIGt2bV94ZW5faW5pdF92bShzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJbXV0ZXhfaW5pdCgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4ueGVuX2xvY2spOwotCWlkcl9pbml0KCZhbXA7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMpOwomIzQzOwl4YV9pbml0KCZhbXA7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMpOwogCWt2bV9ncGNfaW5pdCgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uc2hpbmZvX2NhY2hlLCBrdm0pOwogfQogCiB2b2lkIGt2bV94ZW5fZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IGV2dGNobmZkICpldnRjaG5mZDsKLQlpbnQgaTsKJiM0MzsJdW5zaWduZWQgbG9uZyBpOwogCiAJa3ZtX2dwY19kZWFjdGl2YXRlKCZhbXA7a3ZtLSZndDthcmNoLnhlbi5zaGluZm9fY2FjaGUpOwogCi0JaWRyX2Zvcl9lYWNoX2VudHJ5KCZhbXA7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLCBpKSB7CiYjNDM7CXhhX2Zvcl9lYWNoKCZhbXA7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGksIGV2dGNobmZkKSB7CiAJCWlmICghZXZ0Y2huZmQtJmd0O2RlbGl2ZXIucG9ydC5wb3J0KQogCQkJZXZlbnRmZF9jdHhfcHV0KGV2dGNobmZkLSZndDtkZWxpdmVyLmV2ZW50ZmQuY3R4KTsKIAkJa2ZyZWUoZXZ0Y2huZmQpOwogCX0KLQlpZHJfZGVzdHJveSgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTsKJiM0MzsJeGFfZGVzdHJveSgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTsKIAogCWlmIChrdm0tJmd0O2FyY2gueGVuLmh2bV9jb25maWcubXNyKQogCQlzdGF0aWNfYnJhbmNoX3Nsb3dfZGVjX2RlZmVycmVkKCZhbXA7a3ZtX3hlbl9lbmFibGVkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uaCBiL2FyY2gveDg2L2t2bS94ZW4uaAppbmRleCBmMzcyODU1ODU3YTg4Li45ZDA0ZTM1MGJkYjFmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3hlbi5oCkBAIC0yMzUsNiAmIzQzOzIzNSwxMSBAQCBzdHJ1Y3QgY29tcGF0X3NoYXJlZF9pbmZvIHsKICNkZWZpbmUgQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUyAoOCAqCQkJCVwKIAkJCQkgICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgXAogCQkJCQkJICAgZXZ0Y2huX3BlbmRpbmcpKQomIzQzOwomIzQzOy8qIExhdGNoZWQgVk0td2lkZSBtb2RlOyB0aGUgS1ZNIGVxdWl2YWxlbnQgb2YgWGVuJiMzOTtzICFoYXNfMzJiaXRfc2hpbmZvKCkuICovCiYjNDM7I2RlZmluZSBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKSBcCiYjNDM7CShJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyBSRUFEX09OQ0UoKGt2bSktJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkpCiYjNDM7CiBzdHJ1Y3QgY29tcGF0X3ZjcHVfcnVuc3RhdGVfaW5mbyB7CiAgICAgaW50IHN0YXRlOwogICAgIHVpbnQ2NF90IHN0YXRlX2VudHJ5X3RpbWU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggMDNiZmM5Mjg2NGI2ZS4uM2RkMDQ2MDVmMmU1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaApAQCAtODU1LDYgJiM0Mzs4NTUsOCBAQCBzdHJ1Y3Qga3ZtIHsKIAlnZm5fdCBtbXVfaW52YWxpZGF0ZV9yYW5nZV9zdGFydDsKIAlnZm5fdCBtbXVfaW52YWxpZGF0ZV9yYW5nZV9lbmQ7CiAKJiM0MzsJdW5zaWduZWQgbG9uZyBncGNfaW52YWxpZGF0ZV9zZXE7CiYjNDM7CiAJc3RydWN0IGxpc3RfaGVhZCBkZXZpY2VzOwogCXU2NCBtYW51YWxfZGlydHlfbG9nX3Byb3RlY3Q7CiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnk7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCA2NWViMjZhMDUyMGQ4Li4xMDhkNDJjNWMxZDZhIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTgxMyw2ICYjNDM7ODEzLDE2IEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sCiAKIAkvKiBQYWlycyB3aXRoIHRoZSBpbmNyZW1lbnQgaW4gcmFuZ2Vfc3RhcnQoKS4gKi8KIAlzcGluX2xvY2soJmFtcDtrdm0tJmd0O21uX2ludmFsaWRhdGVfbG9jayk7CiYjNDM7CWt2bS0mZ3Q7Z3BjX2ludmFsaWRhdGVfc2VxJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQXMgd2l0aCB0aGUgTU1VIHNlcXVlbmNlIGNvdW50ZXIgYW5kIG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzLCB0aGUKJiM0MzsJICogR1BDIHNlcXVlbmNlIGluY3JlYXNlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgdGhlIGludmFsaWRhdGUgY291bnQKJiM0MzsJICogZ29lcyB0byB6ZXJvLiAgUGFpcnMgd2l0aCB0aGUgc21wX3JtYigpIGluCiYjNDM7CSAqIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZSgpLgomIzQzOwkgKi8KJiM0MzsJc21wX3dtYigpOwomIzQzOwogCWlmICghV0FSTl9PTl9PTkNFKCFrdm0tJmd0O21uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSkKIAkJLS1rdm0tJmd0O21uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50OwogCXdha2UgPSAha3ZtLSZndDttbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMgYi92aXJ0L2t2bS9wZm5jYWNoZS5jCmluZGV4IDcyOGQyYzFiNDg4YTguLjM2NTk2ODZiOTdjMjQgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vcGZuY2FjaGUuYwpAQCAtMTI0LDcgJiM0MzsxMjQsNyBAQCBzdGF0aWMgdm9pZCBncGNfdW5tYXAoa3ZtX3Bmbl90IHBmbiwgdm9pZCAqa2h2YSkKICNlbmRpZgogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGdwY19zZXEpCiB7CiAJLyoKIAkgKiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBhY3RzIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMKQEAgLTEzNiwyMCAmIzQzOzEzNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfcwogCSAqIE5vdGUsIGl0IGRvZXMgbm90IG1hdHRlciB0aGF0IG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50CiAJICogaXMgbm90IHByb3RlY3RlZCBieSBncGMtJmd0O2xvY2suICBJdCBpcyBndWFyYW50ZWVkIHRvCiAJICogYmUgZWxldmF0ZWQgYmVmb3JlIHRoZSBtbXVfbm90aWZpZXIgYWNxdWlyZXMgZ3BjLSZndDtsb2NrLCBhbmQKLQkgKiBpc24mIzM5O3QgZHJvcHBlZCB1bnRpbCBhZnRlciBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC4KJiM0MzsJICogaXNuJiMzOTt0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuCiAJICovCiAJaWYgKGt2bS0mZ3Q7bW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpCiAJCXJldHVybiB0cnVlOwogCiAJLyoKIAkgKiBFbnN1cmUgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgaXMgcmVhZCBiZWZvcmUKLQkgKiBtbXVfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbgotCSAqIG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlCiYjNDM7CSAqIGdwY19pbnZhbGlkYXRlX3NlcS4gIFRoaXMgcGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluCiYjNDM7CSAqIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoKSB0byBndWFyYW50ZWUgZWl0aGVyIHRoZQogCSAqIG9sZCAobm9uLXplcm8pIHZhbHVlIG9mIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IG9yIHRoZQotCSAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC4KJiM0MzsJICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLgogCSAqLwogCXNtcF9ybWIoKTsKLQlyZXR1cm4ga3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXEgIT0gbW11X3NlcTsKJiM0MzsJcmV0dXJuIGt2bS0mZ3Q7Z3BjX2ludmFsaWRhdGVfc2VxICE9IGdwY19zZXE7CiB9CiAKIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQpAQCAtMTU4LDcgJiM0MzsxNTgsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKIAl2b2lkICpvbGRfa2h2YSA9ICh2b2lkICopUEFHRV9BTElHTl9ET1dOKCh1aW50cHRyX3QpZ3BjLSZndDtraHZhKTsKIAlrdm1fcGZuX3QgbmV3X3BmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUOwogCXZvaWQgKm5ld19raHZhID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIG1tdV9zZXE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZ3BjX3NlcTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCXN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7CkBAIC0xODEsNyAmIzQzOzE4MSw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQogCWdwYy0mZ3Q7dmFsaWQgPSBmYWxzZTsKIAogCWRvIHsKLQkJbW11X3NlcSA9IGdwYy0mZ3Q7a3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXE7CiYjNDM7CQlncGNfc2VxID0gZ3BjLSZndDtrdm0tJmd0O2dwY19pbnZhbGlkYXRlX3NlcTsKIAkJc21wX3JtYigpOwogCiAJCXdyaXRlX3VubG9ja19pcnEoJmFtcDtncGMtJmd0O2xvY2spOwpAQCAtMjMyLDcgJiM0MzsyMzIsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKIAkJICogYXR0ZW1wdGluZyB0byByZWZyZXNoLgogCQkgKi8KIAkJV0FSTl9PTl9PTkNFKGdwYy0mZ3Q7dmFsaWQpOwotCX0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtJmd0O2t2bSwgbW11X3NlcSkpOwomIzQzOwl9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLSZndDtrdm0sIGdwY19zZXEpKTsKIAogCWdwYy0mZ3Q7dmFsaWQgPSB0cnVlOwogCWdwYy0mZ3Q7cGZuID0gbmV3X3BmbjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyNzEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gUGF0Y2ggU2VyaWVzIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIHBhdGNoIHNlcmllcyByZXZlYWxzIHNvbWUgaW50ZXJlc3RpbmcgZmlsZXMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQ6IGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oYCwgYGFyY2gveDg2L2t2bS94ZW4uY2AsIGBhcmNoL3g4Ni9rdm0veGVuLmhgLCBgaW5jbHVkZS9saW51eC9rdm1faG9zdC5oYCwgYHZpcnQva3ZtL2t2bV9tYWluLmNgLCBhbmQgYHZpcnQva3ZtL3BmbmNhY2hlLmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgS1ZNIGludm9sdmVtZW50LCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBYZW4gZW11bGF0aW9uIHdpdGhpbiB0aGUgeDg2IEtWTSBjb250ZXh0LCBhcyB3ZWxsIGFzIHRoZSBnZW5lcmljIEtWTSBwZm5jYWNoZSBhbmQgTU1VIG5vdGlmaWVyIGxvZ2ljLiBUaGlzIHBpcXVlcyBteSBpbnRlcmVzdCDigJMgS1ZNIGlzIGEgY29yZSBjb21wb25lbnQgb2YgdmlydHVhbGl6YXRpb24sIG1ha2luZyBpdCBhIHBvdGVudGlhbGx5IGZydWl0ZnVsIHRhcmdldCBmb3IgZnV6emluZy4gSXQmIzM5O3MgYWNjZXNzaWJsZSB3aXRoaW4gUUVNVSwgVk1zIHdpdGggS1ZNLCBhbmQgcG90ZW50aWFsbHkgZXZlbiB0aHJvdWdoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvciB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHdpdGggYC9kZXYva3ZtYC4KCk5vdywgZGlnZ2luZyBpbnRvIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXM6IFdlIGhhdmUgYW4gWEFycmF5IGNvbnZlcnNpb24gcmVwbGFjaW5nIGFuIElEUiBmb3IgWGVuIGV2ZW50IGNoYW5uZWxzIGluIEtWTSBYZW4gZW11bGF0aW9uIChgZXZ0Y2huX3BvcnRzYCksIHNvbWUgYWxpZ25tZW50IGNoZWNrcyBmb3IgR1BBL0hWQSB3aGVuIGFjdGl2YXRpbmcgdGhlIGB2Y3B1X2luZm9gIGNhY2hlIChga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCksIGFuZCBhIHNwbGl0IG9mIGBtbXVfaW52YWxpZGF0ZV9zZXFgIGludG8gYGdwY19pbnZhbGlkYXRlX3NlcWAgZm9yIHRoZSBHUEMuIFRoZXJlJiMzOTtzIGFsc28gbWVudGlvbiBvZiBgYnRzbGAgZm9yIGF0b21pYyBiaXRtYXAgb3BlcmF0aW9ucywgYWltaW5nIHRvIGF2b2lkIHRob3NlIHBlc2t5IHNwbGl0LWxvY2sgI0FDIGZhdWx0cyBvbiB1bmFsaWduZWQgYHZjcHVfaW5mb2AgYGV2dGNobl9wZW5kaW5nX3NlbGAgYWNjZXNzZXMuIFRoZXJlJiMzOTtzIGEgYGd1YXJkKHNyY3UpYCB1c2FnZSwgYW5kIHNvbWUgZml4ZXMvcmVmYWN0b3JpbmdzIHJlbGF0ZWQgdG8gdGhvc2UgNjQvMzItYml0IFhlbiBzaGFyZWQgaW5mbyBtb2RlIGNoZWNrcyAoYGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mb2ApLgoKRnJvbSBhIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUsIGFsbCBvZiB0aGVzZSBjaGFuZ2VzIHRvdWNoIGNvcmUga2VybmVsIGxvZ2ljIHdpdGhpbiBLVk0sIHNwZWNpZmljYWxseSBYZW4gZW11bGF0aW9uLiBNb3Jlb3ZlciwgdGhlcmUmIzM5O3MgY29uY3VycmVuY3kgaW1wbGljYXRpb25zIGhlcmUsIHdoaWNoIGlzIGFsd2F5cyBhIHJlZCBmbGFnIHRoYXQgZHJhd3MgbWUgdG93YXJkcyBmdXp6aW5nLCBzbyBJJiMzOTtsbCBzZXQgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hpY2ggS2NvbmZpZyBvcHRpb25zIGFyZSByZXF1aXJlZCB0byBlbmFibGUgYWxsIHRoaXMgZnVuY3Rpb25hbGl0eSwgc28gSSYjMzk7bGwgY2hlY2sgYEtWTWAsIGBLVk1fWEVOYCwgYW5kIGFueSBvdGhlciByZWxldmFudCBvcHRpb25zLiBJJiMzOTtsbCB1c2UgYSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGFuZCBgdmlydC9rdm0vS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTczOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE4LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMwOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMzpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU2OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBLVk0gQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgS1ZNIGlzIGNvbmZpZ3VyZWQgaW4gdGhpcyB4ODYgZW52aXJvbm1lbnQsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBYZW4gYW5kIHRoZSBJbnRlbC9BTUQgaW1wbGVtZW50YXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgYW5kIGZvY3VzIG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgY29uZmlnIEtWTV9YRU5gLCBgY29uZmlnIEtWTWAsIGFuZCB0aGVuIHRoZSBwcm9jZXNzb3Itc3BlY2lmaWMgb3B0aW9ucywgYEtWTV9JTlRFTGAgYW5kIGBLVk1fQU1EYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZXNlIG9wdGlvbnMgaW5mbHVlbmNlIGVhY2ggb3RoZXIuIFdoZXJlIGRvZXMgdGhlIFhlbiBoeXBlcnZpc29yIGZpdCBpbiB3aXRoIGEgS1ZNIHNldHVwIGhlcmU/IEFuZCBob3cgZG8gd2UgY2hvb3NlIGJldHdlZW4gSW50ZWwgYW5kIEFNRCB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zPyBMZXQmIzM5O3MgdHJhY2UgdGhyb3VnaCB0aGVzZSBkZWZpbml0aW9ucyBhbmQgZmlndXJlIG91dCB0aGUgY29uZGl0aW9uYWwgbG9naWMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgS1ZNIGJ1aWxkIHN0cmF0ZWd5IGZvciB0aGlzIHBsYXRmb3JtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgS1ZNIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbiAgIDc6XHRcbiAgIDg6XHRtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG4gICA5Olx0XHRib29sIFwmIzM0O1ZpcnR1YWxpemF0aW9uXCYjMzQ7XG4gIDEwOlx0XHRkZWZhdWx0IHlcbiAgMTE6XHRcdGhlbHBcbiAgMTI6XHRcdCAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIHVzaW5nIHlvdXIgTGludXggaG9zdCB0byBydW4gb3RoZXJcbiAgMTM6XHRcdCAgb3BlcmF0aW5nIHN5c3RlbXMgaW5zaWRlIHZpcnR1YWwgbWFjaGluZXMgKGd1ZXN0cykuXG4gIDE0Olx0XHQgIFRoaXMgb3B0aW9uIGFsb25lIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIElmIHlvdSBzYXkgTiwgYWxsIG9wdGlvbnMgaW4gdGhpcyBzdWJtZW51IHdpbGwgYmUgc2tpcHBlZCBhbmQgZGlzYWJsZWQuXG4gIDE3Olx0XG4gIDE4Olx0aWYgVklSVFVBTElaQVRJT05cbiAgMTk6XHRcbiAgMjA6XHRjb25maWcgS1ZNX1g4NlxuICAyMTpcdFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuICAyMjpcdFx0c2VsZWN0IEtWTV9DT01NT05cbiAgMjM6XHRcdHNlbGVjdCBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXG4gIDI0Olx0XHRzZWxlY3QgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xuICAyNTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcbiAgMjY6XHRcdHNlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRVxuICAyNzpcdFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfVFNPXG4gIDI4Olx0XHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXG4gIDI5Olx0XHRzZWxlY3QgSEFWRV9LVk1fSVJRX0JZUEFTU1xuICAzMDpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9ST1VUSU5HXG4gIDMxOlx0XHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXG4gIDMyOlx0XHRzZWxlY3QgVkhPU1RfVEFTS1xuICAzMzpcdFx0c2VsZWN0IEtWTV9BU1lOQ19QRlxuICAzNDpcdFx0c2VsZWN0IFVTRVJfUkVUVVJOX05PVElGSUVSXG4gIDM1Olx0XHRzZWxlY3QgS1ZNX01NSU9cbiAgMzY6XHRcdHNlbGVjdCBTQ0hFRF9JTkZPXG4gIDM3Olx0XHRzZWxlY3QgUEVSRl9FVkVOVFNcbiAgMzg6XHRcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UU1xuICAzOTpcdFx0c2VsZWN0IFBFUkZfR1VFU1RfTUVESUFURURfUE1VXG4gIDQwOlx0XHRzZWxlY3QgSEFWRV9LVk1fTVNJXG4gIDQxOlx0XHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxuICA0MjpcdFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcbiAgNDM6XHRcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuICA0NDpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuICA0NTpcdFx0c2VsZWN0IEtWTV9WRklPXG4gIDQ2Olx0XHRzZWxlY3QgSEFWRV9LVk1fUE1fTk9USUZJRVIgaWYgUE1cbiAgNDc6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xuICA0ODpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbiAgNDk6XHRcdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxuICA1MDpcdFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCBpZiBYODZfNjRcbiAgNTE6XHRcbiAgNTI6XHRjb25maWcgS1ZNXG4gIDUzOlx0XHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbiAgNTQ6XHRcdGRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUNcbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgU3VwcG9ydCBob3N0aW5nIGZ1bGx5IHZpcnR1YWxpemVkIGd1ZXN0IG1hY2hpbmVzIHVzaW5nIGhhcmR3YXJlXG4gIDU3Olx0XHQgIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuICBZb3Ugd2lsbCBuZWVkIGEgZmFpcmx5IHJlY2VudFxuICA1ODpcdFx0ICBwcm9jZXNzb3IgZXF1aXBwZWQgd2l0aCB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiBZb3Ugd2lsbCBhbHNvXG4gIDU5Olx0XHQgIG5lZWQgdG8gc2VsZWN0IG9uZSBvciBtb3JlIG9mIHRoZSBwcm9jZXNzb3IgbW9kdWxlcyBiZWxvdy5cbiAgNjA6XHRcbiAgNjE6XHRcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgdGhyb3VnaFxuICA2MjpcdFx0ICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS5cbiAgNjM6XHRcbiAgNjQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDY1Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGt2bS5cbiAgNjY6XHRcbiAgNjc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjg6XHRcbiAgNjk6XHRjb25maWcgS1ZNX1dFUlJPUlxuICA3MDpcdFx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbiAgNzE6XHRcdCMgRGlzYWxsb3cgS1ZNJiMzOTtzIC1XZXJyb3IgaWYgS0FTQU4gaXMgZW5hYmxlZCwgZS5nLiB0byBndWFyZCBhZ2FpbnN0XG4gIDcyOlx0XHQjIHJhbmRvbWl6ZWQgY29uZmlncyBmcm9tIHNlbGVjdGluZyBLVk1fV0VSUk9SPXksIHdoaWNoIGRvZXNuJiMzOTt0IHBsYXlcbiAgNzM6XHRcdCMgbmljZSB3aXRoIEtBU0FOLiAgS0FTQU4gYnVpbGRzIGdlbmVyYXRlcyB3YXJuaW5ncyBmb3IgdGhlIGRlZmF1bHRcbiAgNzQ6XHRcdCMgRlJBTUVfV0FSTiwgaS5lLiBLVk1fV0VSUk9SPXkgd2l0aCBLQVNBTj15IHJlcXVpcmVzIHNwZWNpYWwgdHVuaW5nLlxuICA3NTpcdFx0IyBCdWlsZGluZyBLVk0gd2l0aCAtV2Vycm9yIGFuZCBLQVNBTiBpcyBzdGlsbCBkb2FibGUgdmlhIGVuYWJsaW5nXG4gIDc2Olx0XHQjIHRoZSBrZXJuZWwtd2lkZSBXRVJST1I9eS5cbiAgNzc6XHRcdGRlcGVuZHMgb24gS1ZNX1g4NiBcdTAwMjZcdTAwMjYgKChFWFBFUlQgXHUwMDI2XHUwMDI2ICFLQVNBTikgfHwgV0VSUk9SKVxuICA3ODpcdFx0aGVscFxuICA3OTpcdFx0ICBBZGQgLVdlcnJvciB0byB0aGUgYnVpbGQgZmxhZ3MgZm9yIEtWTS5cbiAgODA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAzNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgaW4gYGFyY2gveDg2L2t2bS9LY29uZmlnYCBjb25jZXJuaW5nIGBLVk1fWEVOYDoKCioqRXhhbWluaW5nIEtWTV9YRU4gaW4gYXJjaC94ODYva3ZtL0tjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBsaW5lcyAxOTAtMjI1IG9mIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgS1ZNX1hFTmAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcywgbWF5YmUgc29tZSBkZWZhdWx0IHZhbHVlcywgYW5kIHBvdGVudGlhbGx5IGEgZGVzY3JpcHRpb24gb2Ygd2hhdCBlbmFibGluZyB0aGlzIG9wdGlvbiBhY3R1YWxseSAqZG9lcyogaW4gdGhlIGNvbnRleHQgb2YgS1ZNIG9uIHg4Ni4gSSYjMzk7bSBhc3N1bWluZyB0aGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgaW50ZXJmYWNlIG9yIGludGVncmF0aW9uIHBvaW50IGJldHdlZW4gS1ZNIGFuZCBYZW4sIHByZXN1bWFibHkgYWxsb3dpbmcgS1ZNIHRvIHJ1biBhcyBhIGd1ZXN0IGluc2lkZSBhIFhlbiBoeXBlcnZpc29yLCB3aGljaCBpcyBhIHByZXR0eSBjb21tb24gdXNlLWNhc2UuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBjbHVlcyBhYm91dCB3aGV0aGVyIGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hhdCBvdGhlciBmZWF0dXJlcyBpdCBtaWdodCBkZXBlbmQgb24gKGUuZy4sIHNwZWNpZmljIENQVSBmZWF0dXJlcywgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucyksIGFuZCBhbnkgY2F2ZWF0cyBvciB3YXJuaW5ncyB0aGF0IG1pZ2h0IGJlIGluY2x1ZGVkIGluIHRoZSBjb21tZW50cy4gSSYjMzk7bGwgYWxzbyB0cnkgdG8gdW5kZXJzdGFuZCBpZiBpdCYjMzk7cyBjb25zaWRlcmVkIGV4cGVyaW1lbnRhbCBvciBzdGFibGUuIFVuZGVyc3RhbmRpbmcgdGhpcyBjb25maWd1cmF0aW9uIGlzIGltcG9ydGFudCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3IgaW50ZWdyYXRpbmcgZGlmZmVyZW50IGh5cGVydmlzb3JzIHdpdGhpbiBhIHNpbmdsZSBzeXN0ZW0uIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgdGhlcmUgaXMgYW55IG1lbnRpb24gb2Ygd2hldGhlciB0aGlzIGlzIGRlcGVuZGVudCBvbiB0aGUgYFhFTmAgY29uZmlndXJhdGlvbiBvcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkwOlx0XHQgIGZpcm13YXJlIHRvIGltcGxlbWVudCBVRUZJIHNlY3VyZSBib290LlxuIDE5MTpcdFxuIDE5MjpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuIDE5MzpcdFxuIDE5NDpcdGNvbmZpZyBLVk1fSFlQRVJWXG4gMTk1Olx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuIDE5NjpcdFx0ZGVwZW5kcyBvbiBLVk1fWDg2XG4gMTk3Olx0XHRkZWZhdWx0IHlcbiAxOTg6XHRcdGhlbHBcbiAxOTk6XHRcdCAgUHJvdmlkZXMgS1ZNIHN1cHBvcnQgZm9yIGVtdWxhdGluZyBNaWNyb3NvZnQgSHlwZXItVi4gIFRoaXMgYWxsb3dzIEtWTVxuIDIwMDpcdFx0ICB0byBleHBvc2UgYSBzdWJzZXQgb2YgdGhlIHBhcmF2aXJ0dWFsaXplZCBpbnRlcmZhY2VzIGRlZmluZWQgaW4gdGhlXG4gMjAxOlx0XHQgIEh5cGVyLVYgSHlwZXJ2aXNvciBUb3AtTGV2ZWwgRnVuY3Rpb25hbCBTcGVjaWZpY2F0aW9uIChUTEZTKTpcbiAyMDI6XHRcdCAgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvdmlydHVhbGl6YXRpb24vaHlwZXItdi1vbi13aW5kb3dzL3JlZmVyZW5jZS90bGZzXG4gMjAzOlx0XHQgIFRoZXNlIGludGVyZmFjZXMgYXJlIHJlcXVpcmVkIGZvciB0aGUgY29ycmVjdCBhbmQgcGVyZm9ybWFudCBmdW5jdGlvbmluZ1xuIDIwNDpcdFx0ICBvZiBXaW5kb3dzIGFuZCBIeXBlci1WIGd1ZXN0cyBvbiBLVk0uXG4gMjA1Olx0XG4gMjA2Olx0XHQgIElmIHVuc3VyZSwgc2F5IFwmIzM0O1lcJiMzNDsuXG4gMjA3Olx0XG4gMjA4Olx0Y29uZmlnIEtWTV9YRU5cbiAyMDk6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbiAyMTA6XHRcdGRlcGVuZHMgb24gS1ZNX1g4NlxuIDIxMTpcdFx0aGVscFxuIDIxMjpcdFx0ICBQcm92aWRlcyBLVk0gc3VwcG9ydCBmb3IgdGhlIGhvc3RpbmcgWGVuIEhWTSBndWVzdHMgYW5kXG4gMjEzOlx0XHQgIHBhc3NpbmcgWGVuIGh5cGVyY2FsbHMgdG8gdXNlcnNwYWNlLlxuIDIxNDpcdFxuIDIxNTpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IFwmIzM0O05cJiMzNDsuXG4gMjE2Olx0XG4gMjE3Olx0Y29uZmlnIEtWTV9QUk9WRV9NTVVcbiAyMTg6XHRcdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuIDIxOTpcdFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUxcbiAyMjA6XHRcdGRlcGVuZHMgb24gS1ZNX1g4NlxuIDIyMTpcdFx0ZGVwZW5kcyBvbiBFWFBFUlRcbiAyMjI6XHRcdGhlbHBcbiAyMjM6XHRcdCAgRW5hYmxlcyBydW50aW1lIGFzc2VydGlvbnMgaW4gS1ZNJiMzOTtzIE1NVSB0aGF0IGFyZSB0b28gY29zdGx5IHRvIGVuYWJsZVxuIDIyNDpcdFx0ICBpbiBhbnl0aGluZyByZW1vdGVseSByZXNlbWJsaW5nIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwgZS5nLiB0aGlzXG4gMjI1Olx0XHQgIGdhdGVzIGNvZGUgdGhhdCB2ZXJpZmllcyBhIHRvLWJlLWZyZWVkIHBhZ2UgdGFibGUgZG9lc24mIzM5O3QgaGF2ZSBhbnlcbiAyMjY6XHRcdCAgcHJlc2VudCBTUFRFcy5cbiAyMjc6XHRcbiAyMjg6XHRcdCAgSWYgaW4gZG91YnQsIHNheSBcJiMzNDtOXCYjMzQ7LlxuIDIyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDA5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyBzcGVjaWZpYyBjb2RlIHNuaXBwZXQ6CgoqKkludmVzdGlnYXRpbmcgS1ZNIENvbXBpbGF0aW9uIG9uIHg4NioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgS1ZNIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBYZW4uICBXZSBhbHJlYWR5IHVuZGVyc3RhbmQgc29tZSBvZiB0aGUgYmFzaWNzLCBidXQgaXQmIzM5O3MgdGltZSB0byBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHhlbi5vYCBhbmQgYHBmbmNhY2hlLm9gIGFyZSBhY3R1YWxseSBjb21waWxlZCB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUmIzM5O3MgS1ZNIGNvbnRleHQuICBLbm93aW5nIHRoZSBleGFjdCBidWlsZCBwcm9jZXNzIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gdGhlaXIgZGVwZW5kZW5jaWVzLCBhbnkgc3BlY2lhbCBjb21waWxlciBmbGFncywgYW5kIGhvdyB0aGV5IHVsdGltYXRlbHkgaW50ZWdyYXRlLiAgVGhlcmVmb3JlLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBvcGVuIGFuZCBjYXJlZnVsbHkgYW5hbHl6ZSB0aGUgYGFyY2gveDg2L2t2bS9NYWtlZmlsZWAuICBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb21waWxhdGlvbiBydWxlcyBmb3IgdGhlc2Ugb2JqZWN0cyB3aWxsIGJlIGRlZmluZWQsIGFuZCBpdCYjMzk7cyB0aGUga2V5IHRvIHRydWx5IHVuZGVyc3RhbmRpbmcgdGhlaXIgYnVpbGQgcHJvY2Vzcy4gVGhpcyBzaG91bGQgcHJvdmlkZSB0aGUgbG93IGxldmVsIGluZm9ybWF0aW9uIEkgbmVlZCB0byBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZW4ub3xwZm5jYWNoZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9NYWtlZmlsZT0xMz1rdm0tJChDT05GSUdfS1ZNX0hZUEVSVikgJiM0Mzs9IGh5cGVydi5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MTQ6a3ZtLSQoQ09ORklHX0tWTV9YRU4pXHQmIzQzOz0geGVuLm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xNS1rdm0tJChDT05GSUdfS1ZNX1NNTSlcdCYjNDM7PSBzbW0ub1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0yNC0jaW5jbHVkZSBcdTAwM2N4ZW4vaW50ZXJmYWNlL3NjaGVkLmhcdTAwM2VcbmFyY2gveDg2L2t2bS94ZW4uYzoyNTojaW5jbHVkZSBcdTAwM2N4ZW4veGVuLW9wcy5oXHUwMDNlXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDY3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIGBwZm5jYWNoZS5jYCBhbmQgYGt2bV9tYWluLmNgIHdpdGhpbiB0aGUgS1ZNIHZpcnR1YWxpemF0aW9uIG1vZHVsZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBNYWtlZmlsZXMgYW5kIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBhdCBgdmlydC9rdm0vTWFrZWZpbGVgIGFuZCBgdmlydC9rdm0vS2NvbmZpZ2AuIFRob3NlIGFyZSB0eXBpY2FsbHkgd2hlcmUgdGhlIGJ1aWxkIHJ1bGVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVzaWRlIGZvciBLVk0tc3BlY2lmaWMgc291cmNlIGZpbGVzLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gZGVwZW5kZW5jaWVzLCBidWlsZCBmbGFncywgYW5kIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpbnZvbHZlZCBpbiBnZXR0aW5nIHRob3NlIHR3byBmaWxlcyBjb21waWxlZCBhbmQgbGlua2VkLiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdHJhY2UgdGhlIGJ1aWxkIHByb2Nlc3MsIHNvIGxldCBtZSBkaXZlIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZm5jYWNoZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vTWFrZWZpbGUua3ZtPTEzPWt2bS0kKENPTkZJR19IQVZFX0tWTV9ESVJUWV9SSU5HKSAmIzQzOz0gJChLVk0pL2RpcnR5X3Jpbmcub1xudmlydC9rdm0vTWFrZWZpbGUua3ZtOjE0Omt2bS0kKENPTkZJR19IQVZFX0tWTV9QRk5DQUNIRSkgJiM0Mzs9ICQoS1ZNKS9wZm5jYWNoZS5vXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm0tMTUta3ZtLSQoQ09ORklHX0tWTV9HVUVTVF9NRU1GRCkgJiM0Mzs9ICQoS1ZNKS9ndWVzdF9tZW1mZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODE4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNzA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0tWGVuIEludGVncmF0aW9uIENvbmZpZ3VyYXRpb24gYW5kIENvZGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBLVk1gLCBhbmQgcG90ZW50aWFsbHkgYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgLCBhbG9uZyB3aXRoIGBLVk1fWDg2YC4gIENydWNpYWxseSwgdGhlcmUmIzM5O3MgYEtWTV9YRU5gLCB3aGljaCBkZXBlbmRzIG9uIGBLVk1fWDg2YC4gIEkgc2VlIHRoYXQgYEtWTV9YODZgIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgaWYgYW55IG9mIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIG9yIGp1c3QgYEtWTWAgYXJlIGRlZmluZWQuIFNwZWNpZmljYWxseSwgYGNvbmZpZyBLVk1fWEVOYCBpcyBhIGJvb2wgb3B0aW9uLCBhbmQgaXQmIzM5O3MgdW5kZXIgYGlmIFZJUlRVQUxJWkFUSU9OYC4gU28gSSBuZWVkIGJvdGggYEtWTWAgYW5kIGBLVk1fWEVOYCAoYXMgd2VsbCBhcyBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGApLgoKTm93LCBvbnRvIHRoZSBjb2RlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgdXNlZC4gSSBzZWUgYSBwYXRjaCBtb2RpZnlpbmcgc3ltYm9scyBhY3Jvc3MgYSBmZXcgZmlsZXMuIExldCYjMzk7cyBsb29rIGF0IGBhcmNoL3g4Ni9rdm0veGVuLmNgLiBUaGVyZSBhcmUgcXVpdGUgYSBmZXcgY2hhbmdlcyBoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9uIG5hbWVzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gSSBzZWUgYSBtaXggb2Ygc3RhdGljIGFuZCBub24tc3RhdGljIGZ1bmN0aW9ucyBiZWluZyBhbHRlcmVkLgoKSXQgbG9va3MgbGlrZSB0aGlzIGFmZmVjdHMgYSByYW5nZSBvZiBYZW4tc3BlY2lmaWMgZnVuY3Rpb25hbGl0aWVzOiBzaGFyZWQgaW5mb3JtYXRpb24gaW5pdGlhbGl6YXRpb24sIHVwZGF0aW5nIGd1ZXN0IHJ1bnN0YXRlLCBpbmplY3RpbmcgZXZlbnRzLCBjaGVja2luZyBmb3IgaW50ZXJydXB0cywgc2V0dGluZyBWQ1BVIGF0dHJpYnV0ZXMsIGNvbXBsZXRpbmcgaHlwZXJjYWxscywgc2NoZWR1bGluZyBvcGVyYXRpb25zLCBoYW5kbGluZyBldmVudCBjaGFubmVscywgYW5kIFZNIGluaXRpYWxpemF0aW9uL2Rlc3RydWN0aW9uLiBUaGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSB2YXJpb3VzIGZ1bmN0aW9uYWxpdGllcyBiZWluZyBjaGFuZ2VkLiBUaGUgc3RhdGljIGZ1bmN0aW9ucyB3aWxsIGJlIHVzZWZ1bCB0byB1bmRlcnN0YW5kIGhvdyBhbmQgd2hlcmUgdGhlIGZ1bmN0aW9ucyBhcmUgdXNlZC4KClRoZW4gdGhlcmUmIzM5O3MgYSBzbWFsbGVyIGNoYW5nZSBpbiBgdmlydC9rdm0va3ZtX21haW4uY2Agd2hlcmUgYSBzdGF0aWMgZnVuY3Rpb24gcmVsYXRlZCB0byBNTVUgaW52YWxpZGF0aW9uIGlzIGJlaW5nIG1vZGlmaWVkLiBGaW5hbGx5LCB0aGVyZSBhcmUgYWxzbyBzb21lIGNoYW5nZXMgaW4gYHZpcnQva3ZtL3BmbmNhY2hlLmNgLiBTcGVjaWZpY2FsbHksIGBodmFfdG9fcGZuX3JldHJ5YCBpcyBzdGF0aWMsIHdoaWNoIGlzIGNhbGxlZCBpbiBga3ZtX2dwY19yZWZyZXNoYCBhbmQgYGt2bV9ncGNfYWN0aXZhdGVgLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyBpbiBgcGZuY2FjaGUuY2AuIFRoaXMgY291bGQgYmUgaW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBjYXVzaW5nIHRoZSByZXRyeSBjb25kaXRpb24gYW5kIHdoeSBpdCYjMzk7cyBuZWNlc3NhcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQga3ZtX2dwY3xedm9pZCBrdm1fZ3BjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vcGZuY2FjaGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9wZm5jYWNoZS5jPTI1Nj1zdGF0aWMgaW50IF9fa3ZtX2dwY19yZWZyZXNoKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhKVxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzY1LVxudmlydC9rdm0vcGZuY2FjaGUuYzozNjY6aW50IGt2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCB1bnNpZ25lZCBsb25nIGxlbilcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzY3LXtcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM4NC1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6Mzg1OnZvaWQga3ZtX2dwY19pbml0KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHN0cnVjdCBrdm0gKmt2bSlcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzg2LXtcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTM5Nz1zdGF0aWMgaW50IF9fa3ZtX2dwY19hY3RpdmF0ZShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSxcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQyNi1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDI3OmludCBrdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBsZW4pXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQyOC17XG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYy00MzgtXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjQzOTppbnQga3ZtX2dwY19hY3RpdmF0ZV9odmEoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgdW5zaWduZWQgbG9uZyB1aHZhLCB1bnNpZ25lZCBsb25nIGxlbilcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDQwLXtcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ0Ni1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDQ3OnZvaWQga3ZtX2dwY19kZWFjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ0OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTk4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgSW50ZXJhY3Rpb25zIEJldHdlZW4gS1ZNIGFuZCBYZW4gaW4gdGhlIHg4NiBBcmNoaXRlY3R1cmUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IEtWTSBpbnRlcmFjdHMgd2l0aCBYZW4sIHNwZWNpZmljYWxseSBpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBhcmNoL3g4Ni9rdm0veGVuLmNgIGFuZCBgdmlydC9rdm0vcGZuY2FjaGUuY2AuIFNlZW1zIGxpa2UgdGhlIGZpcnN0IGZpbGUgaXMgdGhlIG1vcmUgbGlrZWx5IGNhbmRpZGF0ZSBnaXZlbiB0aGUgbmFtaW5nLgoKSW4gYGFyY2gveDg2L2t2bS94ZW4uY2AsIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHN0YW5kIG91dCBhcyBwb3RlbnRpYWxseSByZWxldmFudCB0byB0aGUgaW50ZWdyYXRpb246CgoqICAgYGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzYDogVGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIGV2ZW50IGluamVjdGlvbiBmcm9tIHRoZSBYZW4gaHlwZXJ2aXNvciBpbnRvIHRoZSBLVk0gZ3Vlc3QuCiogICBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgOiBUaGlzIHN1Z2dlc3RzIGEgbWVjaGFuaXNtIGZvciBxdWVyeWluZyBpZiB0aGVyZSBhcmUgcGVuZGluZyBpbnRlcnJ1cHRzIHJlbGF0ZWQgdG8gWGVuLgoqICAgYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmA6IFNvdW5kcyBsaWtlIHNldHRpbmcgdkNQVSBhdHRyaWJ1dGVzIHRocm91Z2ggWGVuLgoqICAgYGt2bV94ZW5faHlwZXJjYWxsYDogVGhpcyBsaWtlbHkgZGVhbHMgd2l0aCBYZW4gaHlwZXJjYWxscywgYSBmdW5kYW1lbnRhbCBpbnRlcmZhY2UgZm9yIGNvbW11bmljYXRpb24uCiogICBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgOiBUaGlzIGxvb2tzIGxpa2UgYW4gb3B0aW1pemF0aW9uIGZvciBzZXR0aW5nIGV2ZW50IGNoYW5uZWxzLgoqICAgYGt2bV94ZW5fc2V0dXBfZXZ0Y2huYDogVGhpcyBpcyBwcm9iYWJseSB0aGUgc2V0dXAgcm91dGluZSBmb3IgdGhlc2UgY2hhbm5lbHMuCiogICBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgOiBEZWZpbml0ZWx5IHNvdW5kcyByZWxhdGVkIHRvIHNlbmRpbmcgZXZlbnRzIHRocm91Z2ggdGhlIEhWTSBldmVudCBjaGFubmVsLgoqICAgYGt2bV94ZW5faHZtX3NldF9hdHRyYDogVGhpcyBpcyBwcm9iYWJseSBzZXR0aW5nIEhWTSBhdHRyaWJ1dGVzIHRocm91Z2ggWGVuLiBJdCBhbHNvIGNhbGxzIGBrdm1feGVuX3NldGF0dHJfZXZ0Y2huYCwgc28gSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgZXZlbnQgY2hhbm5lbCBhdHRyaWJ1dGVzIGFyZSBiZWluZyBzZXQuCgpJJiMzOTtsbCBrZWVwIGEgY2xvc2UgZXllIG9uIHRoZXNlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgd29yayB0b2dldGhlciwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIGlzc3VlcyBvciBpbmVmZmljaWVuY2llcyBpbiB0aGUgaW50ZXJmYWNlIGJldHdlZW4gS1ZNIGFuZCBYZW4uIEkgd2lsbCBuZWVkIHRvIGxvb2sgaW50byBgcGZuY2FjaGUuY2AgYXMgd2VsbCB0byBzZWUgaG93IGl0IG1pZ2h0IGJlIHVzZWQgdG8gb3B0aW1pemUgdGhlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV94ZW5fc2V0YXR0cl9ldnRjaG4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veGVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3hlbi5jPTMzPXN0YXRpYyBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huKHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSk7XG5hcmNoL3g4Ni9rdm0veGVuLmM6MzQ6c3RhdGljIGludCBrdm1feGVuX3NldGF0dHJfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpO1xuYXJjaC94ODYva3ZtL3hlbi5jLTM1LXN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfZXZ0Y2huX3NlbmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcGFyYW0sIHU2NCAqcik7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTc3NT1pbnQga3ZtX3hlbl9odm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSlcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtODUxLVx0Y2FzZSBLVk1fWEVOX0FUVFJfVFlQRV9FVlRDSE46XG5hcmNoL3g4Ni9rdm0veGVuLmM6ODUyOlx0XHRyID0ga3ZtX3hlbl9zZXRhdHRyX2V2dGNobihrdm0sIGRhdGEpO1xuYXJjaC94ODYva3ZtL3hlbi5jLTg1My1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTIyNzI9c3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0yMzEzLVxuYXJjaC94ODYva3ZtL3hlbi5jOjIzMTQ6c3RhdGljIGludCBrdm1feGVuX3NldGF0dHJfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjMxNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzA5CgkJCQkJCQlvdXRwdXQ6IDMwNgoJCQkJCQkJdGhvdWdodHM6IDE1NDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgS1ZNLVhlbiBDaGFuZ2VzIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgYGt2bV94ZW5faHZtX3NldF9hdHRyYCBpcyBhbiBleHBvcnRlZCBmdW5jdGlvbiBjYWxsZWQgdmlhIHRoZSBgS1ZNX1hFTl9IVk1fU0VUX0FUVFJgIGlvY3RsLiBTaW1pbGFybHksIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGhhbmRsZXMgdGhlIGBLVk1fWEVOX1ZDUFVfU0VUX0FUVFJgIGlvY3RsLCBhbmQgYGt2bV94ZW5faHlwZXJjYWxsYCBkZWFscyB3aXRoIGd1ZXN0IFhlbiBoeXBlcmNhbGxzLiBXZSBhbHNvIGhhdmUgYGt2bV9ncGNfcmVmcmVzaGAsIGBrdm1fZ3BjX2FjdGl2YXRlYCwgYW5kIGBrdm1fZ3BjX2FjdGl2YXRlX2h2YWAgaW4gYHBmbmNhY2hlLmNgIHRoYXQgYXJlIGltcG9ydGFudC4KCkkmIzM5O2xsIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlciBsb29rIGF0IGtleSBmdW5jdGlvbnMgbGlrZSBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgLCBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBga3ZtX3hlbl9zZXR1cF9ldnRjaG5gLCBga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNgLCBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgLCBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCwgYW5kIGBrdm1feGVuX2h5cGVyY2FsbGAuIEkmIzM5O2xsIGFsc28gZ2xhbmNlIG92ZXIgdGhlIG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1heSBiZSBtb2RpZmllZC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgbW9kaWZpY2F0aW9ucy4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGRpZmYuIEZpcnN0LCBpbiBgYXJjaC94ODYva3ZtL3hlbi5jYCwgdGhlcmUmIzM5O3MgYSBsb3Qgb2Ygd29yayByZWxhdGVkIHRvIHRoZSBzaGFyZWQgaW5mbyBzdHJ1Y3R1cmUgYW5kIGl0cyA2NC1iaXQgc3RhdHVzLiAgQ3J1Y2lhbGx5LCB0aGVyZSBhcmUgY2hhbmdlcyB0byBob3cgaW50ZXJydXB0cyBhcmUgaW5qZWN0ZWQsIGluY2x1ZGluZyBhdG9taWMgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIHJlZCBmbGFnLiBJIHNlZSB0aGUgdXNlIG9mIGF0b21pYyBvcGVyYXRpb25zIChgYXRvbWljNjRfb3JgLCBgYXRvbWljX29yYCwgYGF0b21pYzY0X2FuZG5vdGAsIGBhdG9taWNfYW5kbm90YCkgaW5zdGVhZCBvZiBpbmxpbmUgYXNzZW1ibHkuIFRoaXMgc3VnZ2VzdHMgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyByZWxhdGVkIHRvIGludGVycnVwdCBpbmplY3Rpb24gdGhhdCAqY291bGQqIGJlIGV4cGxvaXRlZC4gIFRoZXJlJiMzOTtzIGFsc28gYWxpZ25tZW50IGNoZWNrcyBpbiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYC4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIEdQQSBhbmQgSFZBIGFsaWdubWVudCwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGZ1enppbmcuIFRoZSByZW5hbWluZyBvZiBgbG9uZ21vZGVgIHRvIGBpc182NGJpdGAgaXMgbGVzcyBjb25jZXJuaW5nLiAgVGhlIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAgY2hhbmdlLCByZXBsYWNpbmcgdGhlIGJpdCBvcGVyYXRpb24gd2l0aCBgYnRzbGAsIHRvIGF2b2lkIHRoZSBzcGxpdC1sb2NrICNBQyBpcyBub3Rld29ydGh5OyBwb3RlbnRpYWwgZm9yIHVuYWxpZ25lZCBhY2Nlc3NlcyB0byBjYXVzZSBwcm9ibGVtcy4gVGhlIHNoaWZ0IGZyb20gYGlkcmAgdG8gYHhhcnJheWAgZm9yIGBldnRjaG5fcG9ydHNgIGFsc28gd2FycmFudHMgYSBjbG9zZXIgbG9vayBhcyBpdCB0b3VjaGVzIGNyaXRpY2FsIGV2ZW50IGNoYW5uZWwgbWFuYWdlbWVudC4KCkluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCwgSSBub3RpY2UgY2hhbmdlcyByZWxhdGVkIHRvIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYCwgc3BlY2lmaWNhbGx5IHRoZSBhZGRpdGlvbiBvZiBgZ3BjX2ludmFsaWRhdGVfc2VxYCBhbmQgYHNtcF93bWIoKWAuIFRoaXMgaW5kaWNhdGVzIGEgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBwb2ludC4gSW4gYHZpcnQva3ZtL3BmbmNhY2hlLmNgLCB0aGUgdXNlIG9mIGBncGNfc2VxYCBhbmQgYGt2bS0mZ3Q7Z3BjX2ludmFsaWRhdGVfc2VxYCBpbiBgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlYCBhbmQgYGh2YV90b19wZm5fcmV0cnlgIGluZGljYXRlcyB0aGVyZSBoYXMgYmVlbiBhIGdsb2JhbCBwYWdlIGNhY2hlIGludmFsaWRhdGlvbiBzZXF1ZW5jZSBhZGRlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgdGhlc2Ugc2VxdWVuY2VzIGFyZSBtYWludGFpbmVkIGFjcm9zcyBDUFVzLgoKVGhlIGNvcmUgb2YgdGhlc2UgY2hhbmdlcyBpcyBpbiBLVk0mIzM5O3MgWGVuIGVtdWxhdGlvbiBhbmQgdGhlIHBmbmNhY2hlLCB3aGljaCBhcmUgKnByaW1lKiB0YXJnZXRzIGZvciBmdXp6aW5nLiBUaGlzIHRvdWNoZXMgY29uY3VycmVuY3ksIHJhY2UgY29uZGl0aW9ucywgbWVtb3J5IGNvcnJ1cHRpb24sIGxvY2tpbmcsIGlvY3RsIGhhbmRsaW5nLCBhbmQgaHlwZXJjYWxscy4gRGVmaW5pdGVseSwgd29ydGh3aGlsZS4KClRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKGBLVk1gLCBgS1ZNX0lOVEVMYC9gS1ZNX0FNRGAsIGBLVk1fWDg2YCwgYEtWTV9YRU5gKSBhcmUgYWxsIHJlbGV2YW50IGFuZCBuZWVkIHRvIGJlIGVuYWJsZWQgZHVyaW5nIGZ1enppbmcuCgpNeSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgd2lsbCBiZTogYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAsIGBrdm1feGVuX2h2bV9zZXRfYXR0cmAsIGBrdm1feGVuX2h5cGVyY2FsbGAsIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AsIGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGAsIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIGBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZGAsIGBrdm1fZ3BjX3JlZnJlc2hgLCBga3ZtX2dwY19hY3RpdmF0ZWAsIGFuZCBga3ZtX2dwY19hY3RpdmF0ZV9odmFgLgoKSSYjMzk7bSBjb25maWRlbnQgd2UgaGF2ZSBhIHNvbGlkIHNldCBvZiB0YXJnZXRzIGZvciBmdXp6aW5nLCBhbmQgSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkIHdpdGggc2V0dGluZyB1cCB0aGUgZnV6emluZyBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fWDg2JiMzNDssCiAgICAmIzM0O0tWTV9YRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1feGVuX3ZjcHVfc2V0X2F0dHImIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9odm1fc2V0X2F0dHImIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9oeXBlcmNhbGwmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMmIzM0OywKICAgICYjMzQ7X19rdm1feGVuX2hhc19pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmQmIzM0OywKICAgICYjMzQ7a3ZtX2dwY19yZWZyZXNoJiMzNDssCiAgICAmIzM0O2t2bV9ncGNfYWN0aXZhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBhbmQgY29uY3VycmVuY3ktY3JpdGljYWwgY2hhbmdlcyB0byBLVk0mIzM5O3MgWGVuIGVtdWxhdGlvbiBhbmQgZ2ZuX3RvX3Bmbl9jYWNoZSAoR1BDKSBzdWJzeXN0ZW0uIFRoZXNlIGluY2x1ZGUgbWlncmF0aW5nIFhlbiBldmVudCBjaGFubmVsIHN0b3JhZ2UgZnJvbSBJRFIgdG8gWEFycmF5LCBlbmZvcmNpbmcgYWxpZ25tZW50IGNoZWNrcyBmb3IgdkNQVSBpbmZvIEdQQS9IVkEsIHVzaW5nIGV4cGxpY2l0IDMyLWJpdCBhdG9taWMgYml0b3BzIHRvIHByZXZlbnQgc3BsaXQtbG9jayBBQyBleGNlcHRpb25zIG9uIHVuYWxpZ25lZCBzdHJ1Y3R1cmVzLCBpbnRyb2R1Y2luZyBTUkNVIGxvY2tpbmcgaW4gX19rdm1feGVuX2hhc19pbnRlcnJ1cHQsIGFuZCBzZXBhcmF0aW5nIEdQQyBpbnZhbGlkYXRpb24gc2VxdWVuY2luZyBmcm9tIGdlbmVyYWwgTU1VIGludmFsaWRhdGlvbiBzZXF1ZW5jaW5nLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgdmlydHVhbGl6YXRpb24gaW9jdGxzLCBoeXBlcmNhbGxzLCBhbmQgZXZlbnQgY2hhbm5lbCBkZWxpdmVyeSBtZWNoYW5pc21zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7S1ZNX1g4NiYjMzQ7LAogICAgJiMzNDtLVk1fWEVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3hlbl92Y3B1X3NldF9hdHRyJiMzNDssCiAgICAmIzM0O2t2bV94ZW5faHZtX3NldF9hdHRyJiMzNDssCiAgICAmIzM0O2t2bV94ZW5faHlwZXJjYWxsJiMzNDssCiAgICAmIzM0O2t2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzJiMzNDssCiAgICAmIzM0O19fa3ZtX3hlbl9oYXNfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O2t2bV94ZW5fc2V0X2V2dGNobl9mYXN0JiMzNDssCiAgICAmIzM0O2t2bV94ZW5faHZtX2V2dGNobl9zZW5kJiMzNDssCiAgICAmIzM0O2t2bV9ncGNfcmVmcmVzaCYjMzQ7LAogICAgJiMzNDtrdm1fZ3BjX2FjdGl2YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgYW5kIGNvbmN1cnJlbmN5LWNyaXRpY2FsIGNoYW5nZXMgdG8gS1ZNJiMzOTtzIFhlbiBlbXVsYXRpb24gYW5kIGdmbl90b19wZm5fY2FjaGUgKEdQQykgc3Vic3lzdGVtLiBUaGVzZSBpbmNsdWRlIG1pZ3JhdGluZyBYZW4gZXZlbnQgY2hhbm5lbCBzdG9yYWdlIGZyb20gSURSIHRvIFhBcnJheSwgZW5mb3JjaW5nIGFsaWdubWVudCBjaGVja3MgZm9yIHZDUFUgaW5mbyBHUEEvSFZBLCB1c2luZyBleHBsaWNpdCAzMi1iaXQgYXRvbWljIGJpdG9wcyB0byBwcmV2ZW50IHNwbGl0LWxvY2sgQUMgZXhjZXB0aW9ucyBvbiB1bmFsaWduZWQgc3RydWN0dXJlcywgaW50cm9kdWNpbmcgU1JDVSBsb2NraW5nIGluIF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0LCBhbmQgc2VwYXJhdGluZyBHUEMgaW52YWxpZGF0aW9uIHNlcXVlbmNpbmcgZnJvbSBnZW5lcmFsIE1NVSBpbnZhbGlkYXRpb24gc2VxdWVuY2luZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIHZpcnR1YWxpemF0aW9uIGlvY3RscywgaHlwZXJjYWxscywgYW5kIGV2ZW50IGNoYW5uZWwgZGVsaXZlcnkgbWVjaGFuaXNtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSYjMzk7cyBYZW4gZW11bGF0aW9uIGFuZCBHRk4tdG8tUEZOIGNhY2hlIGludmFsaWRhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdDpcbjEuIFJlcGxhY2VzIHRoZSBJRFIgZGF0YSBzdHJ1Y3R1cmUgd2l0aCBYQXJyYXkgZm9yIGV2ZW50IGNoYW5uZWwgcG9ydCB0cmFja2luZyAoYGV2dGNobl9wb3J0c2ApLlxuMi4gSW50cm9kdWNlcyBhIGRlZGljYXRlZCBzZXF1ZW5jZSBjb3VudGVyIChgZ3BjX2ludmFsaWRhdGVfc2VxYCkgaW4gYHBmbmNhY2hlLmNgIGFuZCBga3ZtX21haW4uY2AgdG8gcHJvcGVybHkgdHJhY2sgR1BDIGludmFsaWRhdGlvbiBldmVudHMuXG4zLiBGaXhlcyBwb3RlbnRpYWwgc3BsaXQtbG9jayBgI0FDYCBleGNlcHRpb25zIGJ5IGNoZWNraW5nIEdQQS9IVkEgMzItYml0IGFsaWdubWVudCBpbiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCBhbmQgdXNpbmcgMzItYml0IGF0b21pYyBiaXRvcHMgZm9yIGB2aV9wZW5kaW5nX3NlbGAuXG40LiBGaXhlcyBTUkNVIGxvY2tpbmcgaW4gYF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0YCBhbmQgYXRvbWljIHJlYWRzL3dyaXRlcyBmb3IgYHBvbGxfZXZ0Y2huYC5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBvciBleHBvc2Uga2VybmVsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBNZW1vcnkgc2FmZXR5IGFuZCBjb25jdXJyZW5jeSBjb25jZXJucyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9ja2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMzZTAzZmYzYjhjMzc5ZDhiMzI4MjBjOTllYmMwMmQ4MDJlMzAzYjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDA0OjM4OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggNjgzYmI4YmY0M2E5NC4uM2FmNzM5NWMyNDMwYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0xNiw2ICYjNDM7MTYsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2lycV93b3JrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXJxLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3hhcnJheS5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7bGludXgva3ZtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva3ZtX3BhcmEuaCZndDsKQEAgLTExMTMsNyAmIzQzOzExMTQsNyBAQCBzdHJ1Y3Qga3ZtX3hlbiB7CiAJYm9vbCBydW5zdGF0ZV91cGRhdGVfZmxhZzsKIAl1OCB1cGNhbGxfdmVjdG9yOwogCXN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlIHNoaW5mb19jYWNoZTsKLQlzdHJ1Y3QgaWRyIGV2dGNobl9wb3J0czsKJiM0MzsJc3RydWN0IHhhcnJheSBldnRjaG5fcG9ydHM7CiAJdW5zaWduZWQgbG9uZyBwb2xsX21hc2tbQklUU19UT19MT05HUyhLVk1fTUFYX1ZDUFVTKV07CiAKIAlzdHJ1Y3Qga3ZtX3hlbl9odm1fY29uZmlnIGh2bV9jb25maWc7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmMgYi9hcmNoL3g4Ni9rdm0veGVuLmMKaW5kZXggOTk4Y2RjYjZhYTMwMy4uNzE4Mzk2MzQwZDNjMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ZW4uYwpAQCAtNzMsNyAmIzQzOzczLDcgQEAgc3RhdGljIGludCBrdm1feGVuX3NoYXJlZF9pbmZvX2luaXQoc3RydWN0IGt2bSAqa3ZtKQogCUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2hhcmVkX2luZm8sIHdjKSAhPSAweGMwMCk7CiAJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBzaGFyZWRfaW5mbywgd2Nfc2VjX2hpKSAhPSAweGMwYyk7CiAKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsga3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpIHsKJiM0MzsJaWYgKGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pKSB7CiAJCXN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLSZndDtraHZhOwogCiAJCXdjX3NlY19oaSA9ICZhbXA7c2hpbmZvLSZndDt3Y19zZWNfaGk7CkBAIC0zODksNyAmIzQzOzM4OSw3IEBAIHN0YXRpYyB2b2lkIGt2bV94ZW5fdXBkYXRlX3J1bnN0YXRlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdiwgYm9vbCBhdG9taWMpCiAJQlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvLCB0aW1lKSAhPQogCQkgICAgIHNpemVvZih2eC0mZ3Q7cnVuc3RhdGVfdGltZXMpKTsKIAotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyB2LSZndDtrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkgewomIzQzOwlpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtJmd0O2t2bSkpIHsKIAkJdXNlcl9sZW4gPSBzaXplb2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyk7CiAJCXRpbWVzX29mcyA9IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sCiAJCQkJICAgICBzdGF0ZV9lbnRyeV90aW1lKTsKQEAgLTY3NiwyOCAmIzQzOzY3NiwzMiBAQCB2b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdikKIAl9CiAKIAkvKiBOb3cgZ3BjLSZndDtraHZhIGlzIGEgdmFsaWQga2VybmVsIGFkZHJlc3MgZm9yIHRoZSB2Y3B1X2luZm8gKi8KLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsgdi0mZ3Q7a3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpIHsKJiM0MzsJaWYgKGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyh2LSZndDtrdm0pKSB7CiAJCXN0cnVjdCB2Y3B1X2luZm8gKnZpID0gZ3BjLSZndDtraHZhOwomIzQzOwkJdm9pZCAqdmlfcGVuZGluZ19zZWwgPSAmYW1wO3ZpLSZndDtldnRjaG5fcGVuZGluZ19zZWw7CiAKLQkJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICYjMzQ7b3JxICUwLCAlMVxuJiMzNDsKLQkJCSAgICAgJiMzNDtub3RxICUwXG4mIzM0OwotCQkJICAgICBMT0NLX1BSRUZJWCAmIzM0O2FuZHEgJTAsICUyXG4mIzM0OwotCQkJICAgICA6ICYjMzQ7PXImIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsKSwKLQkJCSAgICAgICAmIzM0OyYjNDM7bSYjMzQ7ICh2aS0mZ3Q7ZXZ0Y2huX3BlbmRpbmdfc2VsKSwKLQkJCSAgICAgICAmIzM0OyYjNDM7bSYjMzQ7ICh2LSZndDthcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpCi0JCQkgICAgIDogJiMzNDswJiMzNDsgKGV2dGNobl9wZW5kaW5nX3NlbCkpOwomIzQzOwkJaWYgKElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpdmlfcGVuZGluZ19zZWwsIHNpemVvZih1NjQpKSkgewomIzQzOwkJCWF0b21pYzY0X29yKGV2dGNobl9wZW5kaW5nX3NlbCwgdmlfcGVuZGluZ19zZWwpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlhdG9taWNfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCB2aV9wZW5kaW5nX3NlbCk7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBUaGUgY2FzdCBrZWVwcyB0aGUgc2hpZnQgd2VsbC1kZWZpbmVkIG9uIDMyLWJpdCwKJiM0MzsJCQkgKiB3aGVyZSBldnRjaG5fcGVuZGluZ19zZWwgaXMgMzIgYml0cyB3aWRlIGFuZCB0aGlzCiYjNDM7CQkJICogYnJhbmNoIGlzIHVucmVhY2hhYmxlIGFueXdheSAodGhpcyBpcyBpbnNpZGUKJiM0MzsJCQkgKiBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oKSwgd2hpY2ggaXMgZ2F0ZWQgb24KJiM0MzsJCQkgKiBJU19FTkFCTEVEKENPTkZJR182NEJJVCkpLgomIzQzOwkJCSAqLwomIzQzOwkJCWF0b21pY19vcigodTY0KWV2dGNobl9wZW5kaW5nX3NlbCAmZ3Q7Jmd0OyAzMiwKJiM0MzsJCQkJICB2aV9wZW5kaW5nX3NlbCAmIzQzOyA0KTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWF0b21pYzY0X2FuZG5vdChldnRjaG5fcGVuZGluZ19zZWwsICh2b2lkICopJmFtcDt2LSZndDthcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpOwogCQlXUklURV9PTkNFKHZpLSZndDtldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpOwogCX0gZWxzZSB7Ci0JCXUzMiBldnRjaG5fcGVuZGluZ19zZWwzMiA9IGV2dGNobl9wZW5kaW5nX3NlbDsKIAkJc3RydWN0IGNvbXBhdF92Y3B1X2luZm8gKnZpID0gZ3BjLSZndDtraHZhOwogCi0JCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAmIzM0O29ybCAlMCwgJTFcbiYjMzQ7Ci0JCQkgICAgICYjMzQ7bm90bCAlMFxuJiMzNDsKLQkJCSAgICAgTE9DS19QUkVGSVggJiMzNDthbmRsICUwLCAlMlxuJiMzNDsKLQkJCSAgICAgOiAmIzM0Oz1yJiMzNDsgKGV2dGNobl9wZW5kaW5nX3NlbDMyKSwKLQkJCSAgICAgICAmIzM0OyYjNDM7bSYjMzQ7ICh2aS0mZ3Q7ZXZ0Y2huX3BlbmRpbmdfc2VsKSwKLQkJCSAgICAgICAmIzM0OyYjNDM7bSYjMzQ7ICh2LSZndDthcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpCi0JCQkgICAgIDogJiMzNDswJiMzNDsgKGV2dGNobl9wZW5kaW5nX3NlbDMyKSk7CiYjNDM7CQlhdG9taWNfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKSZhbXA7dmktJmd0O2V2dGNobl9wZW5kaW5nX3NlbCk7CiYjNDM7CQlhdG9taWNfYW5kbm90KGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKikmYW1wO3YtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCk7CiAJCVdSSVRFX09OQ0UodmktJmd0O2V2dGNobl91cGNhbGxfcGVuZGluZywgMSk7CiAJfQogCkBAIC03MjgsNiAmIzQzOzczMiwxNiBAQCBpbnQgX19rdm1feGVuX2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2KQogCUJVSUxEX0JVR19PTihzaXplb2YocmMpICE9CiAJCSAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpKTsKIAomIzQzOwkvKgomIzQzOwkgKiBrdm1fZ3BjX2NoZWNrKCkgY2hlY2tzIHRoZSBtZW1zbG90IGdlbmVyYXRpb24sIHNvIGt2bS0mZ3Q7c3JjdSBtdXN0IGJlCiYjNDM7CSAqIGhlbGQuIE1vc3QgY2FsbGVycyBob2xkIGl0IGFscmVhZHksIGJ1dCB0aGlzIGlzIGFsc28gcmVhY2hlZCBmcm9tCiYjNDM7CSAqIGt2bV9lbXVsYXRlX2hhbHQoKSBvbiB0aGUgVk0tRXhpdCBwYXRoIGFuZCBmcm9tIGt2bV92Y3B1X2Jsb2NrKCksCiYjNDM7CSAqIHdoZXJlIHZjcHVfZW50ZXJfZ3Vlc3QoKSBoYXMgYWxyZWFkeSBkcm9wcGVkIHRoZSB2Q1BVJiMzOTtzIFNSQ1UgbG9jay4KJiM0MzsJICogVGFraW5nIFNSQ1UgZG9lcyBub3Qgc2xlZXAsIHNvIGl0IGlzIHNhZmUgZXZlbiBpbiB0aGUgYXRvbWljIGNhc2UKJiM0MzsJICogd2hpY2ggaXMgaGFuZGxlZCBiZWxvdy4KJiM0MzsJICovCiYjNDM7CWd1YXJkKHNyY3UpKCZhbXA7di0mZ3Q7a3ZtLSZndDtzcmN1KTsKJiM0MzsKIAlyZWFkX2xvY2tfaXJxc2F2ZSgmYW1wO2dwYy0mZ3Q7bG9jaywgZmxhZ3MpOwogCXdoaWxlICgha3ZtX2dwY19jaGVjayhncGMsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSkpIHsKIAkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2dwYy0mZ3Q7bG9jaywgZmxhZ3MpOwpAQCAtOTQxLDYgJiM0Mzs5NTUsMTAgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSkKIAkJCQlicmVhazsKIAkJCX0KIAomIzQzOwkJCXIgPSAtRU5YSU87CiYjNDM7CQkJaWYgKCFJU19BTElHTkVEKGRhdGEtJmd0O3UuZ3BhLCBzaXplb2YodTMyKSkpCiYjNDM7CQkJCWJyZWFrOwomIzQzOwogCQkJciA9IGt2bV9ncGNfYWN0aXZhdGUoJmFtcDt2Y3B1LSZndDthcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUsCiAJCQkJCSAgICAgZGF0YS0mZ3Q7dS5ncGEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7CiAJCX0gZWxzZSB7CkBAIC05NTAsNiAmIzQzOzk2OCwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKQogCQkJCWJyZWFrOwogCQkJfQogCiYjNDM7CQkJciA9IC1FTlhJTzsKJiM0MzsJCQlpZiAoIUlTX0FMSUdORUQoZGF0YS0mZ3Q7dS5odmEsIHNpemVvZih1MzIpKSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiAJCQlyID0ga3ZtX2dwY19hY3RpdmF0ZV9odmEoJmFtcDt2Y3B1LSZndDthcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUsCiAJCQkJCQkgZGF0YS0mZ3Q7dS5odmEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7CiAJCX0KQEAgLTk5Myw3ICYjNDM7MTAxNSw3IEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpCiAJCSAqIGFkZHJlc3MsIHRoYXQmIzM5O3MgYWN0dWFsbHkgT0suIGt2bV94ZW5fdXBkYXRlX3J1bnN0YXRlX2d1ZXN0KCkKIAkJICogd2lsbCBjb3BlLgogCQkgKi8KLQkJaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC54ZW4ubG9uZ19tb2RlKQomIzQzOwkJaWYgKGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyh2Y3B1LSZndDtrdm0pKQogCQkJc3ogPSBzaXplb2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyk7CiAJCWVsc2UKIAkJCXN6ID0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfdmNwdV9ydW5zdGF0ZV9pbmZvKTsKQEAgLTE0MzksMTYgJiM0MzsxNDYxLDIxIEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9oeXBlcmNhbGxfY29tcGxldGVfdXNlcnNwYWNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlyZXR1cm4ga3ZtX3hlbl9oeXBlcmNhbGxfc2V0X3Jlc3VsdCh2Y3B1LCBydW4tJmd0O3hlbi51LmhjYWxsLnJlc3VsdCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG1heF9ldnRjaG5fcG9ydChzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KGJvb2wgaGFzXzY0Yml0X3NoaW5mbykKIHsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsga3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpCiYjNDM7CWlmIChoYXNfNjRiaXRfc2hpbmZvKQogCQlyZXR1cm4gRVZUQ0hOXzJMX05SX0NIQU5ORUxTOwogCWVsc2UKIAkJcmV0dXJuIENPTVBBVF9FVlRDSE5fMkxfTlJfQ0hBTk5FTFM7CiB9CiAKLXN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cywKLQkJCSAgICAgICBldnRjaG5fcG9ydF90ICpwb3J0cykKJiM0MztzdGF0aWMgaW5saW5lIGludCBrdm1fbWF4X2V2dGNobl9wb3J0KHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt7CiYjNDM7CXJldHVybiBtYXhfZXZ0Y2huX3BvcnQoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGhhc182NGJpdF9zaGluZm8sCiYjNDM7CQkJICAgICAgIGludCBucl9wb3J0cywgZXZ0Y2huX3BvcnRfdCAqcG9ydHMpCiB7CiAJc3RydWN0IGt2bSAqa3ZtID0gdmNwdS0mZ3Q7a3ZtOwogCXN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSAmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uc2hpbmZvX2NhY2hlOwpAQCAtMTQ2Myw3ICYjNDM7MTQ5MCw3IEBAIHN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cywKIAkJZ290byBvdXRfcmN1OwogCiAJcmV0ID0gZmFsc2U7Ci0JaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7IGt2bS0mZ3Q7YXJjaC54ZW4ubG9uZ19tb2RlKSB7CiYjNDM7CWlmIChoYXNfNjRiaXRfc2hpbmZvKSB7CiAJCXN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLSZndDtraHZhOwogCQlwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKSZhbXA7c2hpbmZvLSZndDtldnRjaG5fcGVuZGluZzsKIAl9IGVsc2UgewpAQCAtMTQ4NSw5ICYjNDM7MTUxMiwxMCBAQCBzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbnJfcG9ydHMsCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLAomIzQzO3N0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpc182NGJpdCwKIAkJCQkgdTY0IHBhcmFtLCB1NjQgKnIpCiB7CiYjNDM7CWJvb2wgaGFzXzY0Yml0X3NoaW5mbyA9IGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyh2Y3B1LSZndDtrdm0pOwogCXN0cnVjdCBzY2hlZF9wb2xsIHNjaGVkX3BvbGw7CiAJZXZ0Y2huX3BvcnRfdCBwb3J0LCAqcG9ydHM7CiAJc3RydWN0IHg4Nl9leGNlcHRpb24gZTsKQEAgLTE0OTcsNyAmIzQzOzE1MjUsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsCiAJICAgICEodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnhlbi5odm1fY29uZmlnLmZsYWdzICZhbXA7IEtWTV9YRU5fSFZNX0NPTkZJR19FVlRDSE5fU0VORCkpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyAhbG9uZ21vZGUpIHsKJiM0MzsJaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7ICFpc182NGJpdCkgewogCQlzdHJ1Y3QgY29tcGF0X3NjaGVkX3BvbGwgc3AzMjsKIAogCQkvKiBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgY29tcGF0IHN0cnVjdCBkZWZpbml0aW9uIGlzIGNvcnJlY3QgKi8KQEAgLTE1NDYsMjAgJiM0MzsxNTc0LDIwIEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwKIAl9CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgc2NoZWRfcG9sbC5ucl9wb3J0czsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKHBvcnRzW2ldICZndDs9IG1heF9ldnRjaG5fcG9ydCh2Y3B1LSZndDtrdm0pKSB7CiYjNDM7CQlpZiAocG9ydHNbaV0gJmd0Oz0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKSB7CiAJCQkqciA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KIAogCWlmIChzY2hlZF9wb2xsLm5yX3BvcnRzID09IDEpCi0JCXZjcHUtJmd0O2FyY2gueGVuLnBvbGxfZXZ0Y2huID0gcG9ydDsKJiM0MzsJCVdSSVRFX09OQ0UodmNwdS0mZ3Q7YXJjaC54ZW4ucG9sbF9ldnRjaG4sIHBvcnQpOwogCWVsc2UKLQkJdmNwdS0mZ3Q7YXJjaC54ZW4ucG9sbF9ldnRjaG4gPSAtMTsKJiM0MzsJCVdSSVRFX09OQ0UodmNwdS0mZ3Q7YXJjaC54ZW4ucG9sbF9ldnRjaG4sIC0xKTsKIAogCXNldF9iaXQodmNwdS0mZ3Q7dmNwdV9pZHgsIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC54ZW4ucG9sbF9tYXNrKTsKIAotCWlmICghd2FpdF9wZW5kaW5nX2V2ZW50KHZjcHUsIHNjaGVkX3BvbGwubnJfcG9ydHMsIHBvcnRzKSkgewomIzQzOwlpZiAoIXdhaXRfcGVuZGluZ19ldmVudCh2Y3B1LCBoYXNfNjRiaXRfc2hpbmZvLCBzY2hlZF9wb2xsLm5yX3BvcnRzLCBwb3J0cykpIHsKIAkJa3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVEKTsKIAogCQlpZiAoc2NoZWRfcG9sbC50aW1lb3V0KQpAQCAtMTU3NCw3ICYjNDM7MTYwMiw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwKIAkJa3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfUlVOTkFCTEUpOwogCX0KIAotCXZjcHUtJmd0O2FyY2gueGVuLnBvbGxfZXZ0Y2huID0gMDsKJiM0MzsJV1JJVEVfT05DRSh2Y3B1LSZndDthcmNoLnhlbi5wb2xsX2V2dGNobiwgMCk7CiAJKnIgPSAwOwogb3V0OgogCS8qIFJlYWxseSwgdGhpcyBpcyBvbmx5IG5lZWRlZCBpbiBjYXNlIG9mIHRpbWVvdXQgKi8KQEAgLTE1OTQsMTIgJiM0MzsxNjIyLDEyIEBAIHN0YXRpYyB2b2lkIGNhbmNlbF9ldnRjaG5fcG9sbChzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKIAlrdm1fdmNwdV9raWNrKHZjcHUpOwogfQogCi1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwKJiM0MztzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpc182NGJpdCwKIAkJCQkgICBpbnQgY21kLCB1NjQgcGFyYW0sIHU2NCAqcikKIHsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU0NIRURPUF9wb2xsOgotCQlpZiAoa3ZtX3hlbl9zY2hlZG9wX3BvbGwodmNwdSwgbG9uZ21vZGUsIHBhcmFtLCByKSkKJiM0MzsJCWlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBpc182NGJpdCwgcGFyYW0sIHIpKQogCQkJcmV0dXJuIHRydWU7CiAJCWZhbGx0aHJvdWdoOwogCWNhc2UgU0NIRURPUF95aWVsZDoKQEAgLTE2MTgsNyAmIzQzOzE2NDYsNyBAQCBzdHJ1Y3QgY29tcGF0X3ZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIgewogICAgIHVpbnQzMl90IGZsYWdzOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwgaW50IGNtZCwKJiM0MztzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzXzY0Yml0LCBpbnQgY21kLAogCQkJCSAgaW50IHZjcHVfaWQsIHU2NCBwYXJhbSwgdTY0ICpyKQogewogCXN0cnVjdCB2Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyIG9uZXNob3Q7CkBAIC0xNjYyLDcgJiM0MzsxNjkwLDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwgaW50IGNtZCwKIAkJQlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3QgY29tcGF0X3ZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIsIGZsYWdzKSAhPQogCQkJICAgICBzaXplb2ZfZmllbGQoc3RydWN0IHZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIsIGZsYWdzKSk7CiAKLQkJaWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgcGFyYW0sICZhbXA7b25lc2hvdCwgbG9uZ21vZGUgPyBzaXplb2Yob25lc2hvdCkgOgomIzQzOwkJaWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgcGFyYW0sICZhbXA7b25lc2hvdCwgaXNfNjRiaXQgPyBzaXplb2Yob25lc2hvdCkgOgogCQkJCQlzaXplb2Yoc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyKSwgJmFtcDtlKSkgewogCQkJKnIgPSAtRUZBVUxUOwogCQkJcmV0dXJuIHRydWU7CkBAIC0xNjk0LDcgJiM0MzsxNzIyLDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zZXRfdGltZXJfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50NjRfdCB0aW1lb3V0LAogCiBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCWJvb2wgbG9uZ21vZGU7CiYjNDM7CWJvb2wgaXNfNjRiaXQ7CiAJdTY0IGlucHV0LCBwYXJhbXNbNl0sIHIgPSAtRU5PU1lTOwogCWJvb2wgaGFuZGxlZCA9IGZhbHNlOwogCXU4IGNwbDsKQEAgLTE3MDQsOCAmIzQzOzE3MzIsOCBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCSAgICBrdm1faHZfaHlwZXJjYWxsX2VuYWJsZWQodmNwdSkpCiAJCXJldHVybiBrdm1faHZfaHlwZXJjYWxsKHZjcHUpOwogCi0JbG9uZ21vZGUgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpOwotCWlmICghbG9uZ21vZGUpIHsKJiM0MzsJaXNfNjRiaXQgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpOwomIzQzOwlpZiAoIWlzXzY0Yml0KSB7CiAJCWlucHV0ID0ga3ZtX2VheF9yZWFkKHZjcHUpOwogCQlwYXJhbXNbMF0gPSBrdm1fZWJ4X3JlYWQodmNwdSk7CiAJCXBhcmFtc1sxXSA9IGt2bV9lY3hfcmVhZCh2Y3B1KTsKQEAgLTE3NTEsMTcgJiM0MzsxNzc5LDE3IEBAIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCQloYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9ldnRjaG5fc2VuZCh2Y3B1LCBwYXJhbXNbMV0sICZhbXA7cik7CiAJCWJyZWFrOwogCWNhc2UgX19IWVBFUlZJU09SX3NjaGVkX29wOgotCQloYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLAomIzQzOwkJaGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfc2NoZWRfb3AodmNwdSwgaXNfNjRiaXQsIHBhcmFtc1swXSwKIAkJCQkJCSBwYXJhbXNbMV0sICZhbXA7cik7CiAJCWJyZWFrOwogCWNhc2UgX19IWVBFUlZJU09SX3ZjcHVfb3A6Ci0JCWhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3ZjcHVfb3AodmNwdSwgbG9uZ21vZGUsIHBhcmFtc1swXSwgcGFyYW1zWzFdLAomIzQzOwkJaGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBpc182NGJpdCwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sCiAJCQkJCQlwYXJhbXNbMl0sICZhbXA7cik7CiAJCWJyZWFrOwogCWNhc2UgX19IWVBFUlZJU09SX3NldF90aW1lcl9vcDogewogCQl1NjQgdGltZW91dCA9IHBhcmFtc1swXTsKIAkJLyogSW4gMzItYml0IG1vZGUsIHRoZSA2NC1iaXQgdGltZW91dCBpcyBpbiB0d28gMzItYml0IHBhcmFtcy4gKi8KLQkJaWYgKCFsb25nbW9kZSkKJiM0MzsJCWlmICghaXNfNjRiaXQpCiAJCQl0aW1lb3V0IHw9IHBhcmFtc1sxXSAmbHQ7Jmx0OyAzMjsKIAkJaGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHZjcHUsIHRpbWVvdXQsICZhbXA7cik7CiAJCWJyZWFrOwpAQCAtMTc3Niw3ICYjNDM7MTgwNCw3IEBAIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiBoYW5kbGVfaW5fdXNlcnNwYWNlOgogCXZjcHUtJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9YRU47CiAJdmNwdS0mZ3Q7cnVuLSZndDt4ZW4udHlwZSA9IEtWTV9FWElUX1hFTl9IQ0FMTDsKLQl2Y3B1LSZndDtydW4tJmd0O3hlbi51LmhjYWxsLmxvbmdtb2RlID0gbG9uZ21vZGU7CiYjNDM7CXZjcHUtJmd0O3J1bi0mZ3Q7eGVuLnUuaGNhbGwubG9uZ21vZGUgPSBpc182NGJpdDsKIAl2Y3B1LSZndDtydW4tJmd0O3hlbi51LmhjYWxsLmNwbCA9IGNwbDsKIAl2Y3B1LSZndDtydW4tJmd0O3hlbi51LmhjYWxsLmlucHV0ID0gaW5wdXQ7CiAJdmNwdS0mZ3Q7cnVuLSZndDt4ZW4udS5oY2FsbC5wYXJhbXNbMF0gPSBwYXJhbXNbMF07CkBAIC0xNzk0LDcgJiM0MzsxODIyLDcgQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogc3RhdGljIHZvaWQga3ZtX3hlbl9jaGVja19wb2xsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG9ydCkKIHsKLQlpbnQgcG9sbF9ldnRjaG4gPSB2Y3B1LSZndDthcmNoLnhlbi5wb2xsX2V2dGNobjsKJiM0MzsJaW50IHBvbGxfZXZ0Y2huID0gUkVBRF9PTkNFKHZjcHUtJmd0O2FyY2gueGVuLnBvbGxfZXZ0Y2huKTsKIAogCWlmICgocG9sbF9ldnRjaG4gPT0gcG9ydCB8fCBwb2xsX2V2dGNobiA9PSAtMSkgJmFtcDsmYW1wOwogCSAgICB0ZXN0X2FuZF9jbGVhcl9iaXQodmNwdS0mZ3Q7dmNwdV9pZHgsIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC54ZW4ucG9sbF9tYXNrKSkgewpAQCAtMTgxNiw4ICYjNDM7MTg0NCw5IEBAIHN0YXRpYyB2b2lkIGt2bV94ZW5fY2hlY2tfcG9sbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBvcnQpCiBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKQogewogCXN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSAmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uc2hpbmZvX2NhY2hlOwomIzQzOwlib29sIGhhc182NGJpdF9zaGluZm8gPSBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKTsKJiM0MzsJdW5zaWduZWQgbG9uZyAqcGVuZGluZ19iaXRzLCAqbWFza19iaXRzLCB2aV9wZW5kaW5nX3NlbF9vZnM7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwotCXVuc2lnbmVkIGxvbmcgKnBlbmRpbmdfYml0cywgKm1hc2tfYml0czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBwb3J0X3dvcmRfYml0OwogCWJvb2wga2lja192Y3B1ID0gZmFsc2U7CkBAIC0xODMzLDcgJiM0MzsxODYyLDcgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIAkJV1JJVEVfT05DRSh4ZS0mZ3Q7dmNwdV9pZHgsIHZjcHUtJmd0O3ZjcHVfaWR4KTsKIAl9CiAKLQlpZiAoeGUtJmd0O3BvcnQgJmd0Oz0gbWF4X2V2dGNobl9wb3J0KGt2bSkpCiYjNDM7CWlmICh4ZS0mZ3Q7cG9ydCAmZ3Q7PSBtYXhfZXZ0Y2huX3BvcnQoaGFzXzY0Yml0X3NoaW5mbykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmMgPSAtRVdPVUxEQkxPQ0s7CkBAIC0xODQ0LDE2ICYjNDM7MTg3MywyMyBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKQogCWlmICgha3ZtX2dwY19jaGVjayhncGMsIFBBR0VfU0laRSkpCiAJCWdvdG8gb3V0X3JjdTsKIAotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkgewomIzQzOwlpZiAoaGFzXzY0Yml0X3NoaW5mbykgewogCQlzdHJ1Y3Qgc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy0mZ3Q7a2h2YTsKIAkJcGVuZGluZ19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKikmYW1wO3NoaW5mby0mZ3Q7ZXZ0Y2huX3BlbmRpbmc7CiAJCW1hc2tfYml0cyA9ICh1bnNpZ25lZCBsb25nICopJmFtcDtzaGluZm8tJmd0O2V2dGNobl9tYXNrOwogCQlwb3J0X3dvcmRfYml0ID0geGUtJmd0O3BvcnQgLyA2NDsKJiM0MzsKJiM0MzsJCXZpX3BlbmRpbmdfc2VsX29mcyA9IG9mZnNldG9mKHN0cnVjdCB2Y3B1X2luZm8sIGV2dGNobl9wZW5kaW5nX3NlbCk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLSZndDtraHZhOwogCQlwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKSZhbXA7c2hpbmZvLSZndDtldnRjaG5fcGVuZGluZzsKIAkJbWFza19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKikmYW1wO3NoaW5mby0mZ3Q7ZXZ0Y2huX21hc2s7CiAJCXBvcnRfd29yZF9iaXQgPSB4ZS0mZ3Q7cG9ydCAvIDMyOwomIzQzOwomIzQzOwkJdmlfcGVuZGluZ19zZWxfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF92Y3B1X2luZm8sIGV2dGNobl9wZW5kaW5nX3NlbCk7CiYjNDM7CiYjNDM7CQkvKiB0ZXN0X2FuZF9zZXRfYml0KCkgbmVlZHMgNjQtYml0IGFsaWdubWVudCwgYnV0IHRoYXQmIzM5O3MgT0sgKi8KJiM0MzsJCUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3NoYXJlZF9pbmZvLCBldnRjaG5fcGVuZGluZykgJmFtcDsgNyk7CiAJfQogCiAJLyoKQEAgLTE4NjksNiAmIzQzOzE5MDUsOCBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKQogCQlyYyA9IC1FTk9UQ09OTjsgLyogTWFza2VkICovCiAJCWt2bV94ZW5fY2hlY2tfcG9sbGVyKHZjcHUsIHhlLSZndDtwb3J0KTsKIAl9IGVsc2UgewomIzQzOwkJYm9vbCBvbGQ7CiYjNDM7CiAJCXJjID0gMTsgLyogRGVsaXZlcmVkIHRvIHRoZSBiaXRtYXAgaW4gc2hhcmVkX2luZm8uICovCiAJCS8qIE5vdyBzd2l0Y2ggdG8gdGhlIHZDUFUmIzM5O3MgdmNwdV9pbmZvIHRvIHNldCB0aGUgaW5kZXggYW5kIHBlbmRpbmdfc2VsICovCiAJCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtncGMtJmd0O2xvY2ssIGZsYWdzKTsKQEAgLTE4ODUsMTkgJiM0MzsxOTIzLDI5IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pCiAJCQlnb3RvIG91dF9yY3U7CiAJCX0KIAotCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsga3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpIHsKLQkJCXN0cnVjdCB2Y3B1X2luZm8gKnZjcHVfaW5mbyA9IGdwYy0mZ3Q7a2h2YTsKLQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChwb3J0X3dvcmRfYml0LCAmYW1wO3ZjcHVfaW5mby0mZ3Q7ZXZ0Y2huX3BlbmRpbmdfc2VsKSkgewotCQkJCVdSSVRFX09OQ0UodmNwdV9pbmZvLSZndDtldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpOwotCQkJCWtpY2tfdmNwdSA9IHRydWU7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmNwdV9pbmZvID0gZ3BjLSZndDtraHZhOwotCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnRfd29yZF9iaXQsCi0JCQkJCSAgICAgICh1bnNpZ25lZCBsb25nICopJmFtcDt2Y3B1X2luZm8tJmd0O2V2dGNobl9wZW5kaW5nX3NlbCkpIHsKLQkJCQlXUklURV9PTkNFKHZjcHVfaW5mby0mZ3Q7ZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTsKLQkJCQlraWNrX3ZjcHUgPSB0cnVlOwotCQkJfQomIzQzOwkJLyoKJiM0MzsJCSAqIEV4cGxpY2l0bHkgdXNlIGEgMzItYml0IGJ0c2wgaW5zdGVhZCBvZiB0ZXN0X2FuZF9zZXRfYml0KCksCiYjNDM7CQkgKiB3aGljaCB3b3VsZCB1c2UgYnRzcSBvbiB4ODYtNjQuIFRoZSB2Y3B1X2luZm8gaXMgZ3Vlc3QtCiYjNDM7CQkgKiBjb250cm9sbGVkIGFuZCBvbmx5IHJlcXVpcmVkIHRvIGJlIDMyLWJpdCBhbGlnbmVkLCBzbyBhCiYjNDM7CQkgKiA2NC1iaXQgYWNjZXNzIGNvdWxkIGdlbmVyYXRlIGEgc3BsaXQtbG9jayAjQUMuCiYjNDM7CQkgKgomIzQzOwkJICogTm90ZSwgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgdGVzdF9hbmRfc2V0X2JpdCgpIG9uCiYjNDM7CQkgKiBwZW5kaW5nX2JpdHMgYWJvdmU6IHRoYXQgaXMgaW4gdGhlIHBlci1WTSBzaGFyZWRfaW5mbywgd2hpY2gKJiM0MzsJCSAqIGlzIHBhZ2UgYWxpZ25lZCwgc28gdGhlIGFjY2VzcyBpcyBndWFyYW50ZWVkIHRvIGJlIDY0LWJpdAomIzQzOwkJICogYWxpZ25lZC4KJiM0MzsJCSAqLwomIzQzOwkJb2xkID0gR0VOX0JJTkFSWV9STVdjYyhMT0NLX1BSRUZJWCAmIzM0O2J0c2wmIzM0OywKJiM0MzsJCQkJICAgICAgICoodTMyICopKGdwYy0mZ3Q7a2h2YSAmIzQzOyB2aV9wZW5kaW5nX3NlbF9vZnMpLAomIzQzOwkJCQkgICAgICAgYywgJiMzNDtJciYjMzQ7LCBwb3J0X3dvcmRfYml0KTsKJiM0MzsJCWlmICghb2xkKSB7CiYjNDM7CQkJc3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtJmd0O2todmE7CiYjNDM7CiYjNDM7CQkJLyogTm8gbmVlZCBmb3IgY29tcGF0IGhhbmRsaW5nICovCiYjNDM7CQkJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCB2Y3B1X2luZm8sIGV2dGNobl91cGNhbGxfcGVuZGluZykgIT0KJiM0MzsJCQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSk7CiYjNDM7CiYjNDM7CQkJV1JJVEVfT05DRSh2aS0mZ3Q7ZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTsKJiM0MzsJCQlraWNrX3ZjcHUgPSB0cnVlOwogCQl9CiAKIAkJLyogRm9yIHRoZSBwZXItdkNQVSBsYXBpYyB2ZWN0b3IsIGRlbGl2ZXIgaXQgYXMgTVNJLiAqLwpAQCAtMTk5NSw3ICYjNDM7MjA0Myw3IEBAIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sCiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwogCiAJLyoKLQkgKiBEb24mIzM5O3QgY2hlY2sgZm9yIHRoZSBwb3J0IGJlaW5nIHdpdGhpbiByYW5nZSBvZiBtYXhfZXZ0Y2huX3BvcnQoKS4KJiM0MzsJICogRG9uJiMzOTt0IGNoZWNrIGZvciB0aGUgcG9ydCBiZWluZyB3aXRoaW4gcmFuZ2Ugb2Yga3ZtX21heF9ldnRjaG5fcG9ydCgpLgogCSAqIFVzZXJzcGFjZSBjYW4gY29uZmlndXJlIHdoYXQgZXZlciB0YXJnZXRzIGl0IGxpa2VzOyBldmVudHMganVzdCB3b24mIzM5O3QKIAkgKiBiZSBkZWxpdmVyZWQgaWYvd2hpbGUgdGhlIHRhcmdldCBpcyBpbnZhbGlkLCBqdXN0IGxpa2UgdXNlcnNwYWNlIGNhbgogCSAqIGNvbmZpZ3VyZSBNU0lzIHdoaWNoIHRhcmdldCBub24tZXhpc3RlbnQgQVBJQ3MuCkBAIC0yMDA0LDggJiM0MzsyMDUyLDggQEAgaW50IGt2bV94ZW5fc2V0dXBfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwKIAkgKiBjYW4gYmUgcmVzdG9yZWQgKmluZGVwZW5kZW50bHkqIG9mIG90aGVyIHRoaW5ncyBsaWtlIGNyZWF0aW5nIHZDUFVzLAogCSAqIHdpdGhvdXQgaW1wb3NpbmcgYW4gb3JkZXJpbmcgZGVwZW5kZW5jeSBvbiB1c2Vyc3BhY2UuICBJbiB0aGlzCiAJICogcGFydGljdWxhciBjYXNlLCB0aGUgcHJvYmxlbWF0aWMgb3JkZXJpbmcgd291bGQgYmUgd2l0aCBzZXR0aW5nIHRoZQotCSAqIFhlbiAmIzM5O2xvbmcgbW9kZSYjMzk7IGZsYWcsIHdoaWNoIGNoYW5nZXMgbWF4X2V2dGNobl9wb3J0KCkgdG8gYWxsb3cgNDA5NgotCSAqIGluc3RlYWQgb2YgMTAyNCBldmVudCBjaGFubmVscy4KJiM0MzsJICogWGVuICYjMzk7bG9uZyBtb2RlJiMzOTsgZmxhZywgd2hpY2ggY2hhbmdlcyBrdm1fbWF4X2V2dGNobl9wb3J0KCkgdG8gYWxsb3cKJiM0MzsJICogNDA5NiBpbnN0ZWFkIG9mIDEwMjQgZXZlbnQgY2hhbm5lbHMuCiAJICovCiAKIAkvKiBXZSBvbmx5IHN1cHBvcnQgMiBsZXZlbCBldmVudCBjaGFubmVscyBmb3Igbm93ICovCkBAIC0yMDQyLDcgJiM0MzsyMDkwLDcgQEAgaW50IGt2bV94ZW5faHZtX2V2dGNobl9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pcnFfcm91dGluZ194ZW5fZXZ0Y2huICoKIAlzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gZTsKIAlpbnQgcmV0OwogCi0JaWYgKCF1eGUtJmd0O3BvcnQgfHwgdXhlLSZndDtwb3J0ICZndDs9IG1heF9ldnRjaG5fcG9ydChrdm0pKQomIzQzOwlpZiAoIXV4ZS0mZ3Q7cG9ydCB8fCB1eGUtJmd0O3BvcnQgJmd0Oz0ga3ZtX21heF9ldnRjaG5fcG9ydChrdm0pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIFdlIG9ubHkgc3VwcG9ydCAyIGxldmVsIGV2ZW50IGNoYW5uZWxzIGZvciBub3cgKi8KQEAgLTIwOTMsNyAmIzQzOzIxNDEsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLAogCiAJLyogUHJvdGVjdCB3cml0ZXMgdG8gZXZ0Y2huZmQgYXMgd2VsbCBhcyB0aGUgaWRyIGxvb2t1cC4gICovCiAJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4ueGVuX2xvY2spOwotCWV2dGNobmZkID0gaWRyX2ZpbmQoJmFtcDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCk7CiYjNDM7CWV2dGNobmZkID0geGFfbG9hZCgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBwb3J0KTsKIAogCXJldCA9IC1FTk9FTlQ7CiAJaWYgKCFldnRjaG5mZCkKQEAgLTIxNTIsNyAmIzQzOzIyMDAsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9hc3NpZ24oc3RydWN0IGt2bSAqa3ZtLAogCiAJY2FzZSBFVlRDSE5TVEFUX2ludGVyZG9tYWluOgogCQlpZiAoZGF0YS0mZ3Q7dS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQpIHsKLQkJCWlmIChkYXRhLSZndDt1LmV2dGNobi5kZWxpdmVyLnBvcnQucG9ydCAmZ3Q7PSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKJiM0MzsJCQlpZiAoZGF0YS0mZ3Q7dS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQgJmd0Oz0ga3ZtX21heF9ldnRjaG5fcG9ydChrdm0pKQogCQkJCWdvdG8gb3V0X25vZXZlbnRmZDsgLyogLUVJTlZBTCAqLwogCQl9IGVsc2UgewogCQkJZXZlbnRmZCA9IGV2ZW50ZmRfY3R4X2ZkZ2V0KGRhdGEtJmd0O3UuZXZ0Y2huLmRlbGl2ZXIuZXZlbnRmZC5mZCk7CkBAIC0yMTg3LDEzICYjNDM7MjIzNSwxMyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9hc3NpZ24oc3RydWN0IGt2bSAqa3ZtLAogCX0KIAogCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O2FyY2gueGVuLnhlbl9sb2NrKTsKLQlyZXQgPSBpZHJfYWxsb2MoJmFtcDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQsIHBvcnQsIHBvcnQgJiM0MzsgMSwKJiM0MzsJcmV0ID0geGFfaW5zZXJ0KCZhbXA7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMsIHBvcnQsIGV2dGNobmZkLAogCQkJR0ZQX0tFUk5FTCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLnhlbi54ZW5fbG9jayk7Ci0JaWYgKHJldCAmZ3Q7PSAwKQomIzQzOwlpZiAoIXJldCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocmV0ID09IC1FTk9TUEMpCiYjNDM7CWlmIChyZXQgPT0gLUVCVVNZKQogCQlyZXQgPSAtRUVYSVNUOwogb3V0OgogCWlmIChldmVudGZkKQpAQCAtMjIwOCw3ICYjNDM7MjI1Niw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2RlYXNzaWduKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHBvcnQpCiAJc3RydWN0IGV2dGNobmZkICpldnRjaG5mZDsKIAogCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O2FyY2gueGVuLnhlbl9sb2NrKTsKLQlldnRjaG5mZCA9IGlkcl9yZW1vdmUoJmFtcDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCk7CiYjNDM7CWV2dGNobmZkID0geGFfZXJhc2UoJmFtcDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLnhlbi54ZW5fbG9jayk7CiAKIAlpZiAoIWV2dGNobmZkKQpAQCAtMjIyNCw3ICYjNDM7MjI3Miw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2RlYXNzaWduKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHBvcnQpCiBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9yZXNldChzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IGV2dGNobmZkICpldnRjaG5mZCwgKiphbGxfZXZ0Y2huZmRzOwotCWludCBpOwomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiAJaW50IG4gPSAwOwogCiAJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4ueGVuX2xvY2spOwpAQCAtMjIzNCw3ICYjNDM7MjI4Miw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KHN0cnVjdCBrdm0gKmt2bSkKIAkgKiBjcml0aWNhbCBzZWN0aW9uLCBmaXJzdCBjb2xsZWN0IGFsbCB0aGUgZXZ0Y2huZmQgb2JqZWN0cwogCSAqIGluIGFuIGFycmF5IGFzIHRoZXkgYXJlIHJlbW92ZWQgZnJvbSBldnRjaG5fcG9ydHMuCiAJICovCi0JaWRyX2Zvcl9lYWNoX2VudHJ5KCZhbXA7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLCBpKQomIzQzOwl4YV9mb3JfZWFjaCgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBpLCBldnRjaG5mZCkKIAkJbiYjNDM7JiM0Mzs7CiAKIAlhbGxfZXZ0Y2huZmRzID0ga21hbGxvY19vYmpzKHN0cnVjdCBldnRjaG5mZCAqLCBuKTsKQEAgLTIyNDQsOSAmIzQzOzIyOTIsOSBAQCBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9yZXNldChzdHJ1Y3Qga3ZtICprdm0pCiAJfQogCiAJbiA9IDA7Ci0JaWRyX2Zvcl9lYWNoX2VudHJ5KCZhbXA7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLCBpKSB7CiYjNDM7CXhhX2Zvcl9lYWNoKCZhbXA7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGksIGV2dGNobmZkKSB7CiAJCWFsbF9ldnRjaG5mZHNbbiYjNDM7JiM0MztdID0gZXZ0Y2huZmQ7Ci0JCWlkcl9yZW1vdmUoJmFtcDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQtJmd0O3NlbmRfcG9ydCk7CiYjNDM7CQl4YV9lcmFzZSgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBldnRjaG5mZC0mZ3Q7c2VuZF9wb3J0KTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLnhlbi54ZW5fbG9jayk7CiAKQEAgLTIyNzAsNyAmIzQzOzIzMTgsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2V0YXR0cl9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YQogCWlmIChkYXRhLSZndDt1LmV2dGNobi5mbGFncyA9PSBLVk1fWEVOX0VWVENITl9SRVNFVCkKIAkJcmV0dXJuIGt2bV94ZW5fZXZlbnRmZF9yZXNldChrdm0pOwogCi0JaWYgKCFwb3J0IHx8IHBvcnQgJmd0Oz0gbWF4X2V2dGNobl9wb3J0KGt2bSkpCiYjNDM7CWlmICghcG9ydCB8fCBwb3J0ICZndDs9IGt2bV9tYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoZGF0YS0mZ3Q7dS5ldnRjaG4uZmxhZ3MgPT0gS1ZNX1hFTl9FVlRDSE5fREVBU1NJR04pCkBAIC0yMjk3LDEyICYjNDM7MjM0NSwxMCBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBhcmFtLCB1NjQgKnIpCiAJfQogCiAJLyoKLQkgKiBldnRjaG5mZCBpcyBwcm90ZWN0ZWQgYnkga3ZtLSZndDtzcmN1OyB0aGUgaWRyIGxvb2t1cCBpbnN0ZWFkCi0JICogaXMgcHJvdGVjdGVkIGJ5IFJDVS4KJiM0MzsJICogZXZ0Y2huZmQgaXMgcHJvdGVjdGVkIGJ5IGt2bS0mZ3Q7c3JjdTsgdGhlIHhhX2xvYWQgaXMgUkNVLXNhZmUKJiM0MzsJICogaW50ZXJuYWxseSwgbm8gZXhwbGljaXQgcmN1X3JlYWRfbG9jaygpIG5lZWRlZC4KIAkgKi8KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZXZ0Y2huZmQgPSBpZHJfZmluZCgmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBzZW5kLnBvcnQpOwotCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlldnRjaG5mZCA9IHhhX2xvYWQoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cywgc2VuZC5wb3J0KTsKIAlpZiAoIWV2dGNobmZkKQogCQlyZXR1cm4gZmFsc2U7CiAKQEAgLTIzNDksMjMgJiM0MzsyMzk1LDIzIEBAIHZvaWQga3ZtX3hlbl9kZXN0cm95X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogdm9pZCBrdm1feGVuX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtKQogewogCW11dGV4X2luaXQoJmFtcDtrdm0tJmd0O2FyY2gueGVuLnhlbl9sb2NrKTsKLQlpZHJfaW5pdCgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTsKJiM0MzsJeGFfaW5pdCgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTsKIAlrdm1fZ3BjX2luaXQoJmFtcDtrdm0tJmd0O2FyY2gueGVuLnNoaW5mb19jYWNoZSwga3ZtKTsKIH0KIAogdm9pZCBrdm1feGVuX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKQogewogCXN0cnVjdCBldnRjaG5mZCAqZXZ0Y2huZmQ7Ci0JaW50IGk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKIAogCWt2bV9ncGNfZGVhY3RpdmF0ZSgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uc2hpbmZvX2NhY2hlKTsKIAotCWlkcl9mb3JfZWFjaF9lbnRyeSgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBldnRjaG5mZCwgaSkgewomIzQzOwl4YV9mb3JfZWFjaCgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBpLCBldnRjaG5mZCkgewogCQlpZiAoIWV2dGNobmZkLSZndDtkZWxpdmVyLnBvcnQucG9ydCkKIAkJCWV2ZW50ZmRfY3R4X3B1dChldnRjaG5mZC0mZ3Q7ZGVsaXZlci5ldmVudGZkLmN0eCk7CiAJCWtmcmVlKGV2dGNobmZkKTsKIAl9Ci0JaWRyX2Rlc3Ryb3koJmFtcDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cyk7CiYjNDM7CXhhX2Rlc3Ryb3koJmFtcDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cyk7CiAKIAlpZiAoa3ZtLSZndDthcmNoLnhlbi5odm1fY29uZmlnLm1zcikKIAkJc3RhdGljX2JyYW5jaF9zbG93X2RlY19kZWZlcnJlZCgmYW1wO2t2bV94ZW5fZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmggYi9hcmNoL3g4Ni9rdm0veGVuLmgKaW5kZXggZjM3Mjg1NTg1N2E4OC4uOWQwNGUzNTBiZGIxZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ZW4uaApAQCAtMjM1LDYgJiM0MzsyMzUsMTEgQEAgc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbyB7CiAjZGVmaW5lIENPTVBBVF9FVlRDSE5fMkxfTlJfQ0hBTk5FTFMgKDggKgkJCQlcCiAJCQkJICAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8sIFwKIAkJCQkJCSAgIGV2dGNobl9wZW5kaW5nKSkKJiM0MzsKJiM0MzsvKiBMYXRjaGVkIFZNLXdpZGUgbW9kZTsgdGhlIEtWTSBlcXVpdmFsZW50IG9mIFhlbiYjMzk7cyAhaGFzXzMyYml0X3NoaW5mbygpLiAqLwomIzQzOyNkZWZpbmUga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkgXAomIzQzOwkoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsgUkVBRF9PTkNFKChrdm0pLSZndDthcmNoLnhlbi5sb25nX21vZGUpKQomIzQzOwogc3RydWN0IGNvbXBhdF92Y3B1X3J1bnN0YXRlX2luZm8gewogICAgIGludCBzdGF0ZTsKICAgICB1aW50NjRfdCBzdGF0ZV9lbnRyeV90aW1lOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IDAzYmZjOTI4NjRiNmUuLjNkZDA0NjA1ZjJlNTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTg1NSw2ICYjNDM7ODU1LDggQEAgc3RydWN0IGt2bSB7CiAJZ2ZuX3QgbW11X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQ7CiAJZ2ZuX3QgbW11X2ludmFsaWRhdGVfcmFuZ2VfZW5kOwogCiYjNDM7CXVuc2lnbmVkIGxvbmcgZ3BjX2ludmFsaWRhdGVfc2VxOwomIzQzOwogCXN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlczsKIAl1NjQgbWFudWFsX2RpcnR5X2xvZ19wcm90ZWN0OwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGVudHJ5OwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggNjVlYjI2YTA1MjBkOC4uMTA4ZDQyYzVjMWQ2YSAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC04MTMsNiAmIzQzOzgxMywxNiBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLAogCiAJLyogUGFpcnMgd2l0aCB0aGUgaW5jcmVtZW50IGluIHJhbmdlX3N0YXJ0KCkuICovCiAJc3Bpbl9sb2NrKCZhbXA7a3ZtLSZndDttbl9pbnZhbGlkYXRlX2xvY2spOwomIzQzOwlrdm0tJmd0O2dwY19pbnZhbGlkYXRlX3NlcSYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEFzIHdpdGggdGhlIE1NVSBzZXF1ZW5jZSBjb3VudGVyIGFuZCBtbXVfaW52YWxpZGF0ZV9pbl9wcm9ncmVzcywgdGhlCiYjNDM7CSAqIEdQQyBzZXF1ZW5jZSBpbmNyZWFzZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHRoZSBpbnZhbGlkYXRlIGNvdW50CiYjNDM7CSAqIGdvZXMgdG8gemVyby4gIFBhaXJzIHdpdGggdGhlIHNtcF9ybWIoKSBpbgomIzQzOwkgKiBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoKS4KJiM0MzsJICovCiYjNDM7CXNtcF93bWIoKTsKJiM0MzsKIAlpZiAoIVdBUk5fT05fT05DRSgha3ZtLSZndDttbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCkpCiAJCS0ta3ZtLSZndDttbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDsKIAl3YWtlID0gIWt2bS0mZ3Q7bW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQ7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9wZm5jYWNoZS5jIGIvdmlydC9rdm0vcGZuY2FjaGUuYwppbmRleCA3MjhkMmMxYjQ4OGE4Li4zNjU5Njg2Yjk3YzI0IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9wZm5jYWNoZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmMKQEAgLTEyNCw3ICYjNDM7MTI0LDcgQEAgc3RhdGljIHZvaWQgZ3BjX3VubWFwKGt2bV9wZm5fdCBwZm4sIHZvaWQgKmtodmEpCiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NlcSkKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBncGNfc2VxKQogewogCS8qCiAJICogbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgYWN0cyBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzCkBAIC0xMzYsMjAgJiM0MzsxMzYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3MKIAkgKiBOb3RlLCBpdCBkb2VzIG5vdCBtYXR0ZXIgdGhhdCBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudAogCSAqIGlzIG5vdCBwcm90ZWN0ZWQgYnkgZ3BjLSZndDtsb2NrLiAgSXQgaXMgZ3VhcmFudGVlZCB0bwogCSAqIGJlIGVsZXZhdGVkIGJlZm9yZSB0aGUgbW11X25vdGlmaWVyIGFjcXVpcmVzIGdwYy0mZ3Q7bG9jaywgYW5kCi0JICogaXNuJiMzOTt0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgbW11X2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuCiYjNDM7CSAqIGlzbiYjMzk7dCBkcm9wcGVkIHVudGlsIGFmdGVyIGdwY19pbnZhbGlkYXRlX3NlcSBpcyB1cGRhdGVkLgogCSAqLwogCWlmIChrdm0tJmd0O21uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KQogCQlyZXR1cm4gdHJ1ZTsKIAogCS8qCiAJICogRW5zdXJlIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGlzIHJlYWQgYmVmb3JlCi0JICogbW11X2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW4KLQkgKiBtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoKSB0byBndWFyYW50ZWUgZWl0aGVyIHRoZQomIzQzOwkgKiBncGNfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbgomIzQzOwkgKiBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGUKIAkgKiBvbGQgKG5vbi16ZXJvKSB2YWx1ZSBvZiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBvciB0aGUKLQkgKiBuZXcgKGluY3JlbWVudGVkKSB2YWx1ZSBvZiBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgb2JzZXJ2ZWQuCiYjNDM7CSAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIGdwY19pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC4KIAkgKi8KIAlzbXBfcm1iKCk7Ci0JcmV0dXJuIGt2bS0mZ3Q7bW11X2ludmFsaWRhdGVfc2VxICE9IG1tdV9zZXE7CiYjNDM7CXJldHVybiBrdm0tJmd0O2dwY19pbnZhbGlkYXRlX3NlcSAhPSBncGNfc2VxOwogfQogCiBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKQEAgLTE1OCw3ICYjNDM7MTU4LDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpCiAJdm9pZCAqb2xkX2todmEgPSAodm9pZCAqKVBBR0VfQUxJR05fRE9XTigodWludHB0cl90KWdwYy0mZ3Q7a2h2YSk7CiAJa3ZtX3Bmbl90IG5ld19wZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDsKIAl2b2lkICpuZXdfa2h2YSA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBtbXVfc2VxOwomIzQzOwl1bnNpZ25lZCBsb25nIGdwY19zZXE7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKIAlzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0gewpAQCAtMTgxLDcgJiM0MzsxODEsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKIAlncGMtJmd0O3ZhbGlkID0gZmFsc2U7CiAKIAlkbyB7Ci0JCW1tdV9zZXEgPSBncGMtJmd0O2t2bS0mZ3Q7bW11X2ludmFsaWRhdGVfc2VxOwomIzQzOwkJZ3BjX3NlcSA9IGdwYy0mZ3Q7a3ZtLSZndDtncGNfaW52YWxpZGF0ZV9zZXE7CiAJCXNtcF9ybWIoKTsKIAogCQl3cml0ZV91bmxvY2tfaXJxKCZhbXA7Z3BjLSZndDtsb2NrKTsKQEAgLTIzMiw3ICYjNDM7MjMyLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpCiAJCSAqIGF0dGVtcHRpbmcgdG8gcmVmcmVzaC4KIAkJICovCiAJCVdBUk5fT05fT05DRShncGMtJmd0O3ZhbGlkKTsKLQl9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLSZndDtrdm0sIG1tdV9zZXEpKTsKJiM0MzsJfSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy0mZ3Q7a3ZtLCBncGNfc2VxKSk7CiAKIAlncGMtJmd0O3ZhbGlkID0gdHJ1ZTsKIAlncGMtJmd0O3BmbiA9IG5ld19wZm47CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI2OAoJCQkJCQkJb3V0cHV0OiAyODYKCQkJCQkJCXRob3VnaHRzOiAxNTY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBBIERlZXAgRGl2ZSBpbnRvIE1lbW9yeSBTYWZldHkgYW5kIENvbmN1cnJlbmN5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBhc3Nlc3MgcG90ZW50aWFsIHJpc2tzLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgYSBjb21tb24gc291cmNlIG9mIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBLVk0sIHNvIHdlIG5lZWQgdG8gYmUgZXh0cmEgY2F1dGlvdXMuCgpGaXJzdCwgdGhlIHBhdGNoIHRvdWNoZXMgYSBmZXcga2V5IGFyZWFzOiB0aGUgWDg2IEtWTSBjb2RlLCBYZW4gaW50ZWdyYXRpb24sIGFuZCB0aGUgS1ZNIGNvcmUuIFRoZXJlJiMzOTtzIGEgc2lnbmlmaWNhbnQgc2hpZnQgZnJvbSBgaWRyIGV2dGNobl9wb3J0c2AgdG8gYHhhcnJheSBldnRjaG5fcG9ydHNgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgdHJhbnNpdGlvbiBpcyBzb3VuZCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24uIFRoZSBhbGlnbm1lbnQgY2hlY2tzIGluIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGZvciBgZ3BhYCBhbmQgYGh2YWAgYXJlIGdvb2QsIGFuZCB0aGUgYml0d2lzZSBvcGVyYXRpb25zIHdpdGggYXRvbWljIGZ1bmN0aW9ucyBhcmUgcmVwbGFjaW5nIHNvbWUgaW5saW5lIGFzc2VtYmx5IHdoaWNoIGlzIHNlbnNpYmxlIGZvciBhdm9pZGluZyBzcGxpdCBsb2Nrcy4gVGhlIG5ldyBzZXF1ZW5jZSBjb3VudGVyIGBncGNfaW52YWxpZGF0ZV9zZXFgIGlzIGFsc28gZ29vZC4KCkkmIzM5O20gbm93IGdvaW5nIHRvIGdvIHRocm91Z2ggdGhlc2UgY2hhbmdlcyBpbiBkZXRhaWwuCgoqICAgSW4gYGFyY2gveDg2L2t2bS94ZW4uY2AsIHRoZSBuZXcgYGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdGAgdXNpbmcgYGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mb2AgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgYXRvbWljIGJpdCBvcGVyYXRpb25zIGFuZCB0aGUgU1JDVSBndWFyZCBpbiBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgIGxvb2tzIGdvb2QuIFRoZSBhbGlnbm1lbnQgY2hlY2tzIGluIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGFyZSBhcHByb3ByaWF0ZS4gSGVscGVyIHVwZGF0ZXMgc2VlbSBva2F5LiBUaGUgbG9ja2luZyB3aXRoIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgZm9yIGBwb2xsX2V2dGNobmAgYW5kIHRoZSByZW5hbWluZyBvZiBgbG9uZ21vZGVgIGlzIE9LIGFzIHdlbGwuIFRoZSBjaGFuZ2UgdG8gYXRvbWljIGBidHNsYCBtYWtlcyBzZW5zZS4gVGhlIFhBcnJheSBjb252ZXJzaW9ucyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50IGNoYW5nZSB0byB2ZXJpZnkgaGVyZS4KCiogICBJbiBgdmlydC9rdm0vcGZuY2FjaGUuY2AgYW5kIGBrdm1fbWFpbi5jYCwgdGhlIHNlcGFyYXRlIGBncGNfaW52YWxpZGF0ZV9zZXFgIGNvdW50ZXIgaXMgZmluZSwgc2luY2UgS1ZNIHVzZXMgYGt6YWxsb2NgIG9uIGNyZWF0aW9uIGFuZCB0aGVyZSBhcmUgbm8gaW5pdGlhbGl6YXRpb24gcmlza3MuCgpBcmUgYW55IHN0cnVjdHVyZXMgYWxsb2NhdGVkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24/IE5vLCB0aGUgYGttYWxsb2Nfb2Jqc2AgYW5kIGB4YV9pbml0YCB1c2FnZSBsb29rcyBjb3JyZWN0LiBJdCYjMzk7cyBwcm9wZXJseSBpbml0aWFsaXplZC4gTm8gdXNlcmNvcHkgZnJvbSBrZXJuZWwgc3RydWN0cywgd2hpY2ggaXMgZ3JlYXQuIE5vIGNvbmRpdGlvbmFscyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZWl0aGVyLiBUaGlzIGlzIGFsbCBhYm91dCBjb25jdXJyZW5jeSwgZGF0YSBzdHJ1Y3R1cmUgdHJhbnNmb3JtYXRpb25zICh0aGUgSURSIHRvIFhBcnJheSBjb252ZXJzaW9uLCB3aGljaCBpcyB0aGUgYmlnIG9uZSksIGFuZCBhbGlnbm1lbnQgY2hlY2tzLgoKTGV0IG1lIG5vdyBwZXJmb3JtIGEgZGVlcGVyIGluc3BlY3Rpb24uIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBzZWVtIHRvIGludHJvZHVjZSBhbnkgZGlyZWN0IHVzZXJjb3B5LCBsZWFraW5nIGluZm8sIG9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIGxvb2tzIGxpa2UgaXQgd291bGRuJiMzOTt0IGRldGVjdCBpc3N1ZXMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCByZWFkcyAoc3RhY2svaGVhcCkuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBpbmRpdmlkdWFsIGNoYW5nZXM6IFRoZSBpbmNyZW1lbnQgb2YgYGdwY19pbnZhbGlkYXRlX3NlcWAgbG9va3MgZmluZSwgYXMgZG9lcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGdwY19zZXFgIGZyb20gaXQuIFRoZSBhdG9taWMgb3BlcmF0aW9ucyBzZWVtIGNvcnJlY3QgYW5kIHRoZSBSQUlJIGd1YXJkIGZyb20gYHNyY3VgIHNob3VsZCBiZSBjb3JyZWN0LCBhbmQgdGhlIHhhcnJheSBBUElzIGxvb2sgc3RhbmRhcmQgYW5kIHNhZmUuCgoqKkNvbmNsdXNpb246KiogQWZ0ZXIgdGhpcyB0aG9yb3VnaCByZXZpZXcsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBpcyBzYWZlIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGxlYWtzLCBhbmQgcG90ZW50aWFsIEtBU0FOL0tNU0FOIGlzc3Vlcy4gVGhlIEtBU0FOL0xPQ0tERVAgY2hlY2tzIHdpbGwgY2F0Y2ggYW55IGNvbmN1cnJlbmN5LXJlbGF0ZWQgcHJvYmxlbXMgKGxpa2UgVUFGLCBkYXRhIHJhY2VzLCBhbmQgT09CIGFjY2VzcykuIEtNU0FOIHdpbGwgYWxzbyBjb25maXJtIHRoaXMsIGFzIHRoZXNlIGNoYW5nZXMgYXBwZWFyIHRvIGJlIHNhZmUuIFRoZXJlZm9yZSwgdGhlIHJlc3VsdCBvZiBhIEtNU0FOIGNoZWNrIHdvdWxkIGJlIG5lZ2F0aXZlLgoKS0FTQU4gZGVhbHMgd2l0aCBjb25jdXJyZW5jeSBzeW5jaHJvbml6YXRpb24sIHJlcGxhY2VtZW50IG9mIGRhdGEgc3RydWN0dXJlcywgYW5kIGFsaWdubWVudC4gS01TQU4gY2hlY2tzIGZvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW5mbyBsZWFrcywgb3IgYnJhbmNoaW5nIG9uIHN1Y2ggZGF0YS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJiMzOTtzIFhlbiBlbXVsYXRpb24gYW5kIEdGTi10by1QRk4gY2FjaGUgaW52YWxpZGF0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0OlxuMS4gUmVwbGFjZXMgdGhlIElEUiBkYXRhIHN0cnVjdHVyZSB3aXRoIFhBcnJheSBmb3IgZXZlbnQgY2hhbm5lbCBwb3J0IHRyYWNraW5nIChgZXZ0Y2huX3BvcnRzYCkuXG4yLiBJbnRyb2R1Y2VzIGEgZGVkaWNhdGVkIHNlcXVlbmNlIGNvdW50ZXIgKGBncGNfaW52YWxpZGF0ZV9zZXFgKSBpbiBgcGZuY2FjaGUuY2AgYW5kIGBrdm1fbWFpbi5jYCB0byBwcm9wZXJseSB0cmFjayBHUEMgaW52YWxpZGF0aW9uIGV2ZW50cy5cbjMuIEZpeGVzIHBvdGVudGlhbCBzcGxpdC1sb2NrIGAjQUNgIGV4Y2VwdGlvbnMgYnkgY2hlY2tpbmcgR1BBL0hWQSAzMi1iaXQgYWxpZ25tZW50IGluIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGFuZCB1c2luZyAzMi1iaXQgYXRvbWljIGJpdG9wcyBmb3IgYHZpX3BlbmRpbmdfc2VsYC5cbjQuIEZpeGVzIFNSQ1UgbG9ja2luZyBpbiBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgIGFuZCBhdG9taWMgcmVhZHMvd3JpdGVzIGZvciBgcG9sbF9ldnRjaG5gLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBidWZmZXJzLCByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG9yIGV4cG9zZSBrZXJuZWwgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIE1lbW9yeSBzYWZldHkgYW5kIGNvbmN1cnJlbmN5IGNvbmNlcm5zIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsb2NraW5nLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSYjMzk7cyBYZW4gZW11bGF0aW9uIGFuZCBHRk4tdG8tUEZOIGNhY2hlIGludmFsaWRhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdDpcbjEuIFJlcGxhY2VzIHRoZSBJRFIgZGF0YSBzdHJ1Y3R1cmUgd2l0aCBYQXJyYXkgZm9yIGV2ZW50IGNoYW5uZWwgcG9ydCB0cmFja2luZyAoYGV2dGNobl9wb3J0c2ApLlxuMi4gSW50cm9kdWNlcyBhIGRlZGljYXRlZCBzZXF1ZW5jZSBjb3VudGVyIChgZ3BjX2ludmFsaWRhdGVfc2VxYCkgaW4gYHBmbmNhY2hlLmNgIGFuZCBga3ZtX21haW4uY2AgdG8gcHJvcGVybHkgdHJhY2sgR1BDIGludmFsaWRhdGlvbiBldmVudHMuXG4zLiBGaXhlcyBwb3RlbnRpYWwgc3BsaXQtbG9jayBgI0FDYCBleGNlcHRpb25zIGJ5IGNoZWNraW5nIEdQQS9IVkEgMzItYml0IGFsaWdubWVudCBpbiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCBhbmQgdXNpbmcgMzItYml0IGF0b21pYyBiaXRvcHMgZm9yIGB2aV9wZW5kaW5nX3NlbGAuXG40LiBGaXhlcyBTUkNVIGxvY2tpbmcgaW4gYF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0YCBhbmQgYXRvbWljIHJlYWRzL3dyaXRlcyBmb3IgYHBvbGxfZXZ0Y2huYC5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBvciBleHBvc2Uga2VybmVsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBNZW1vcnkgc2FmZXR5IGFuZCBjb25jdXJyZW5jeSBjb25jZXJucyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9ja2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjM4OjIzLjQ1MjQyNjYzM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMzQ2NTA5MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJLVk1fWDg2XCIsXG4gICAgXCJLVk1fWEVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3hlbl92Y3B1X3NldF9hdHRyXCIsXG4gICAgXCJrdm1feGVuX2h2bV9zZXRfYXR0clwiLFxuICAgIFwia3ZtX3hlbl9oeXBlcmNhbGxcIixcbiAgICBcImt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzXCIsXG4gICAgXCJfX2t2bV94ZW5faGFzX2ludGVycnVwdFwiLFxuICAgIFwia3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RcIixcbiAgICBcImt2bV94ZW5faHZtX2V2dGNobl9zZW5kXCIsXG4gICAgXCJrdm1fZ3BjX3JlZnJlc2hcIixcbiAgICBcImt2bV9ncGNfYWN0aXZhdGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSdzIFhlbiBlbXVsYXRpb24gYW5kIEdGTi10by1QRk4gY2FjaGUgaW52YWxpZGF0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0OlxcbjEuIFJlcGxhY2VzIHRoZSBJRFIgZGF0YSBzdHJ1Y3R1cmUgd2l0aCBYQXJyYXkgZm9yIGV2ZW50IGNoYW5uZWwgcG9ydCB0cmFja2luZyAoYGV2dGNobl9wb3J0c2ApLlxcbjIuIEludHJvZHVjZXMgYSBkZWRpY2F0ZWQgc2VxdWVuY2UgY291bnRlciAoYGdwY19pbnZhbGlkYXRlX3NlcWApIGluIGBwZm5jYWNoZS5jYCBhbmQgYGt2bV9tYWluLmNgIHRvIHByb3Blcmx5IHRyYWNrIEdQQyBpbnZhbGlkYXRpb24gZXZlbnRzLlxcbjMuIEZpeGVzIHBvdGVudGlhbCBzcGxpdC1sb2NrIGAjQUNgIGV4Y2VwdGlvbnMgYnkgY2hlY2tpbmcgR1BBL0hWQSAzMi1iaXQgYWxpZ25tZW50IGluIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGFuZCB1c2luZyAzMi1iaXQgYXRvbWljIGJpdG9wcyBmb3IgYHZpX3BlbmRpbmdfc2VsYC5cXG40LiBGaXhlcyBTUkNVIGxvY2tpbmcgaW4gYF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0YCBhbmQgYXRvbWljIHJlYWRzL3dyaXRlcyBmb3IgYHBvbGxfZXZ0Y2huYC5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBidWZmZXJzLCByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG9yIGV4cG9zZSBrZXJuZWwgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIE1lbW9yeSBzYWZldHkgYW5kIGNvbmN1cnJlbmN5IGNvbmNlcm5zIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsb2NraW5nLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGFuZCBjb25jdXJyZW5jeS1jcml0aWNhbCBjaGFuZ2VzIHRvIEtWTSdzIFhlbiBlbXVsYXRpb24gYW5kIGdmbl90b19wZm5fY2FjaGUgKEdQQykgc3Vic3lzdGVtLiBUaGVzZSBpbmNsdWRlIG1pZ3JhdGluZyBYZW4gZXZlbnQgY2hhbm5lbCBzdG9yYWdlIGZyb20gSURSIHRvIFhBcnJheSwgZW5mb3JjaW5nIGFsaWdubWVudCBjaGVja3MgZm9yIHZDUFUgaW5mbyBHUEEvSFZBLCB1c2luZyBleHBsaWNpdCAzMi1iaXQgYXRvbWljIGJpdG9wcyB0byBwcmV2ZW50IHNwbGl0LWxvY2sgQUMgZXhjZXB0aW9ucyBvbiB1bmFsaWduZWQgc3RydWN0dXJlcywgaW50cm9kdWNpbmcgU1JDVSBsb2NraW5nIGluIF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0LCBhbmQgc2VwYXJhdGluZyBHUEMgaW52YWxpZGF0aW9uIHNlcXVlbmNpbmcgZnJvbSBnZW5lcmFsIE1NVSBpbnZhbGlkYXRpb24gc2VxdWVuY2luZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIHZpcnR1YWxpemF0aW9uIGlvY3RscywgaHlwZXJjYWxscywgYW5kIGV2ZW50IGNoYW5uZWwgZGVsaXZlcnkgbWVjaGFuaXNtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mzg6MjMuNDUyNDMxNDQzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTYwNzkyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjM2UwM2ZmM2I4YzM3OWQ4YjMyODIwYzk5ZWJjMDJkODAyZTMwM2IyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDEgMDQ6Mzg6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5pbmRleCA2ODNiYjhiZjQzYTk0Li4zYWY3Mzk1YzI0MzBhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTE2LDYgKzE2LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycV93b3JrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgveGFycmF5LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1fcGFyYS5oXFx1MDAzZVxcbkBAIC0xMTEzLDcgKzExMTQsNyBAQCBzdHJ1Y3Qga3ZtX3hlbiB7XFxuIFxcdGJvb2wgcnVuc3RhdGVfdXBkYXRlX2ZsYWc7XFxuIFxcdHU4IHVwY2FsbF92ZWN0b3I7XFxuIFxcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlIHNoaW5mb19jYWNoZTtcXG4tXFx0c3RydWN0IGlkciBldnRjaG5fcG9ydHM7XFxuK1xcdHN0cnVjdCB4YXJyYXkgZXZ0Y2huX3BvcnRzO1xcbiBcXHR1bnNpZ25lZCBsb25nIHBvbGxfbWFza1tCSVRTX1RPX0xPTkdTKEtWTV9NQVhfVkNQVVMpXTtcXG4gXFxuIFxcdHN0cnVjdCBrdm1feGVuX2h2bV9jb25maWcgaHZtX2NvbmZpZztcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5jIGIvYXJjaC94ODYva3ZtL3hlbi5jXFxuaW5kZXggOTk4Y2RjYjZhYTMwMy4uNzE4Mzk2MzQwZDNjMSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veGVuLmNcXG5AQCAtNzMsNyArNzMsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2hhcmVkX2luZm8sIHdjKSAhPSAweGMwMCk7XFxuIFxcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2hhcmVkX2luZm8sIHdjX3NlY19oaSkgIT0gMHhjMGMpO1xcbiBcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xcbitcXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkpIHtcXG4gXFx0XFx0c3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtXFx1MDAzZWtodmE7XFxuIFxcbiBcXHRcXHR3Y19zZWNfaGkgPSBcXHUwMDI2c2hpbmZvLVxcdTAwM2V3Y19zZWNfaGk7XFxuQEAgLTM4OSw3ICszODksNyBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX3VwZGF0ZV9ydW5zdGF0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIGJvb2wgYXRvbWljKVxcbiBcXHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sIHRpbWUpICE9XFxuIFxcdFxcdCAgICAgc2l6ZW9mKHZ4LVxcdTAwM2VydW5zdGF0ZV90aW1lcykpO1xcbiBcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiB2LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xcbitcXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtXFx1MDAzZWt2bSkpIHtcXG4gXFx0XFx0dXNlcl9sZW4gPSBzaXplb2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyk7XFxuIFxcdFxcdHRpbWVzX29mcyA9IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RhdGVfZW50cnlfdGltZSk7XFxuQEAgLTY3NiwyOCArNjc2LDMyIEBAIHZvaWQga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2KVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBOb3cgZ3BjLVxcdTAwM2VraHZhIGlzIGEgdmFsaWQga2VybmVsIGFkZHJlc3MgZm9yIHRoZSB2Y3B1X2luZm8gKi9cXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiB2LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xcbitcXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtXFx1MDAzZWt2bSkpIHtcXG4gXFx0XFx0c3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtXFx1MDAzZWtodmE7XFxuK1xcdFxcdHZvaWQgKnZpX3BlbmRpbmdfc2VsID0gXFx1MDAyNnZpLVxcdTAwM2VldnRjaG5fcGVuZGluZ19zZWw7XFxuIFxcbi1cXHRcXHRhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggXFxcIm9ycSAlMCwgJTFcXFxcblxcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwibm90cSAlMFxcXFxuXFxcIlxcbi1cXHRcXHRcXHQgICAgIExPQ0tfUFJFRklYIFxcXCJhbmRxICUwLCAlMlxcXFxuXFxcIlxcbi1cXHRcXHRcXHQgICAgIDogXFxcIj1yXFxcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsKSxcXG4tXFx0XFx0XFx0ICAgICAgIFxcXCIrbVxcXCIgKHZpLVxcdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpLFxcbi1cXHRcXHRcXHQgICAgICAgXFxcIittXFxcIiAodi1cXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKVxcbi1cXHRcXHRcXHQgICAgIDogXFxcIjBcXFwiIChldnRjaG5fcGVuZGluZ19zZWwpKTtcXG4rXFx0XFx0aWYgKElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpdmlfcGVuZGluZ19zZWwsIHNpemVvZih1NjQpKSkge1xcbitcXHRcXHRcXHRhdG9taWM2NF9vcihldnRjaG5fcGVuZGluZ19zZWwsIHZpX3BlbmRpbmdfc2VsKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0YXRvbWljX29yKGV2dGNobl9wZW5kaW5nX3NlbCwgdmlfcGVuZGluZ19zZWwpO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBUaGUgY2FzdCBrZWVwcyB0aGUgc2hpZnQgd2VsbC1kZWZpbmVkIG9uIDMyLWJpdCxcXG4rXFx0XFx0XFx0ICogd2hlcmUgZXZ0Y2huX3BlbmRpbmdfc2VsIGlzIDMyIGJpdHMgd2lkZSBhbmQgdGhpc1xcbitcXHRcXHRcXHQgKiBicmFuY2ggaXMgdW5yZWFjaGFibGUgYW55d2F5ICh0aGlzIGlzIGluc2lkZVxcbitcXHRcXHRcXHQgKiBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oKSwgd2hpY2ggaXMgZ2F0ZWQgb25cXG4rXFx0XFx0XFx0ICogSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpKS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGF0b21pY19vcigodTY0KWV2dGNobl9wZW5kaW5nX3NlbCBcXHUwMDNlXFx1MDAzZSAzMixcXG4rXFx0XFx0XFx0XFx0ICB2aV9wZW5kaW5nX3NlbCArIDQpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRhdG9taWM2NF9hbmRub3QoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKVxcdTAwMjZ2LVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpO1xcbiBcXHRcXHRXUklURV9PTkNFKHZpLVxcdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHR1MzIgZXZ0Y2huX3BlbmRpbmdfc2VsMzIgPSBldnRjaG5fcGVuZGluZ19zZWw7XFxuIFxcdFxcdHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvICp2aSA9IGdwYy1cXHUwMDNla2h2YTtcXG4gXFxuLVxcdFxcdGFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCBcXFwib3JsICUwLCAlMVxcXFxuXFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJub3RsICUwXFxcXG5cXFwiXFxuLVxcdFxcdFxcdCAgICAgTE9DS19QUkVGSVggXFxcImFuZGwgJTAsICUyXFxcXG5cXFwiXFxuLVxcdFxcdFxcdCAgICAgOiBcXFwiPXJcXFwiIChldnRjaG5fcGVuZGluZ19zZWwzMiksXFxuLVxcdFxcdFxcdCAgICAgICBcXFwiK21cXFwiICh2aS1cXHUwMDNlZXZ0Y2huX3BlbmRpbmdfc2VsKSxcXG4tXFx0XFx0XFx0ICAgICAgIFxcXCIrbVxcXCIgKHYtXFx1MDAzZWFyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbClcXG4tXFx0XFx0XFx0ICAgICA6IFxcXCIwXFxcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpKTtcXG4rXFx0XFx0YXRvbWljX29yKGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKilcXHUwMDI2dmktXFx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCk7XFxuK1xcdFxcdGF0b21pY19hbmRub3QoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKVxcdTAwMjZ2LVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpO1xcbiBcXHRcXHRXUklURV9PTkNFKHZpLVxcdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xcbiBcXHR9XFxuIFxcbkBAIC03MjgsNiArNzMyLDE2IEBAIGludCBfX2t2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXFxuIFxcdEJVSUxEX0JVR19PTihzaXplb2YocmMpICE9XFxuIFxcdFxcdCAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIGt2bV9ncGNfY2hlY2soKSBjaGVja3MgdGhlIG1lbXNsb3QgZ2VuZXJhdGlvbiwgc28ga3ZtLVxcdTAwM2VzcmN1IG11c3QgYmVcXG4rXFx0ICogaGVsZC4gTW9zdCBjYWxsZXJzIGhvbGQgaXQgYWxyZWFkeSwgYnV0IHRoaXMgaXMgYWxzbyByZWFjaGVkIGZyb21cXG4rXFx0ICoga3ZtX2VtdWxhdGVfaGFsdCgpIG9uIHRoZSBWTS1FeGl0IHBhdGggYW5kIGZyb20ga3ZtX3ZjcHVfYmxvY2soKSxcXG4rXFx0ICogd2hlcmUgdmNwdV9lbnRlcl9ndWVzdCgpIGhhcyBhbHJlYWR5IGRyb3BwZWQgdGhlIHZDUFUncyBTUkNVIGxvY2suXFxuK1xcdCAqIFRha2luZyBTUkNVIGRvZXMgbm90IHNsZWVwLCBzbyBpdCBpcyBzYWZlIGV2ZW4gaW4gdGhlIGF0b21pYyBjYXNlXFxuK1xcdCAqIHdoaWNoIGlzIGhhbmRsZWQgYmVsb3cuXFxuK1xcdCAqL1xcbitcXHRndWFyZChzcmN1KShcXHUwMDI2di1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1KTtcXG4rXFxuIFxcdHJlYWRfbG9ja19pcnFzYXZlKFxcdTAwMjZncGMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFx0d2hpbGUgKCFrdm1fZ3BjX2NoZWNrKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkge1xcbiBcXHRcXHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZncGMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5AQCAtOTQxLDYgKzk1NSwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbiBcXG4rXFx0XFx0XFx0ciA9IC1FTlhJTztcXG4rXFx0XFx0XFx0aWYgKCFJU19BTElHTkVEKGRhdGEtXFx1MDAzZXUuZ3BhLCBzaXplb2YodTMyKSkpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXG4gXFx0XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBkYXRhLVxcdTAwM2V1LmdwYSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTtcXG4gXFx0XFx0fSBlbHNlIHtcXG5AQCAtOTUwLDYgKzk2OCwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbiBcXG4rXFx0XFx0XFx0ciA9IC1FTlhJTztcXG4rXFx0XFx0XFx0aWYgKCFJU19BTElHTkVEKGRhdGEtXFx1MDAzZXUuaHZhLCBzaXplb2YodTMyKSkpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXG4gXFx0XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGVfaHZhKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBkYXRhLVxcdTAwM2V1Lmh2YSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTtcXG4gXFx0XFx0fVxcbkBAIC05OTMsNyArMTAxNSw3IEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXFxuIFxcdFxcdCAqIGFkZHJlc3MsIHRoYXQncyBhY3R1YWxseSBPSy4ga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3QoKVxcbiBcXHRcXHQgKiB3aWxsIGNvcGUuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFxcdTAwMjZcXHUwMDI2IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKVxcbitcXHRcXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtXFx1MDAzZWt2bSkpXFxuIFxcdFxcdFxcdHN6ID0gc2l6ZW9mKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8pO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHN6ID0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfdmNwdV9ydW5zdGF0ZV9pbmZvKTtcXG5AQCAtMTQzOSwxNiArMTQ2MSwyMSBAQCBzdGF0aWMgaW50IGt2bV94ZW5faHlwZXJjYWxsX2NvbXBsZXRlX3VzZXJzcGFjZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHJldHVybiBrdm1feGVuX2h5cGVyY2FsbF9zZXRfcmVzdWx0KHZjcHUsIHJ1bi1cXHUwMDNleGVuLnUuaGNhbGwucmVzdWx0KTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KHN0cnVjdCBrdm0gKmt2bSlcXG4rc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KGJvb2wgaGFzXzY0Yml0X3NoaW5mbylcXG4ge1xcbi1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFxcdTAwMjZcXHUwMDI2IGt2bS1cXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKVxcbitcXHRpZiAoaGFzXzY0Yml0X3NoaW5mbylcXG4gXFx0XFx0cmV0dXJuIEVWVENITl8yTF9OUl9DSEFOTkVMUztcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyZXR1cm4gQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUztcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLFxcbi1cXHRcXHRcXHQgICAgICAgZXZ0Y2huX3BvcnRfdCAqcG9ydHMpXFxuK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9tYXhfZXZ0Y2huX3BvcnQoc3RydWN0IGt2bSAqa3ZtKVxcbit7XFxuK1xcdHJldHVybiBtYXhfZXZ0Y2huX3BvcnQoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGhhc182NGJpdF9zaGluZm8sXFxuK1xcdFxcdFxcdCAgICAgICBpbnQgbnJfcG9ydHMsIGV2dGNobl9wb3J0X3QgKnBvcnRzKVxcbiB7XFxuIFxcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4gXFx0c3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyA9IFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZTtcXG5AQCAtMTQ2Myw3ICsxNDkwLDcgQEAgc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLFxcbiBcXHRcXHRnb3RvIG91dF9yY3U7XFxuIFxcbiBcXHRyZXQgPSBmYWxzZTtcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xcbitcXHRpZiAoaGFzXzY0Yml0X3NoaW5mbykge1xcbiBcXHRcXHRzdHJ1Y3Qgc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cXHUwMDNla2h2YTtcXG4gXFx0XFx0cGVuZGluZ19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2c2hpbmZvLVxcdTAwM2VldnRjaG5fcGVuZGluZztcXG4gXFx0fSBlbHNlIHtcXG5AQCAtMTQ4NSw5ICsxNTEyLDEwIEBAIHN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cyxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxcbitzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsXFxuIFxcdFxcdFxcdFxcdCB1NjQgcGFyYW0sIHU2NCAqcilcXG4ge1xcbitcXHRib29sIGhhc182NGJpdF9zaGluZm8gPSBrdm1feGVuX2hhc182NGJpdF9zaGluZm8odmNwdS1cXHUwMDNla3ZtKTtcXG4gXFx0c3RydWN0IHNjaGVkX3BvbGwgc2NoZWRfcG9sbDtcXG4gXFx0ZXZ0Y2huX3BvcnRfdCBwb3J0LCAqcG9ydHM7XFxuIFxcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XFxuQEAgLTE0OTcsNyArMTUyNSw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcXG4gXFx0ICAgICEodmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnhlbi5odm1fY29uZmlnLmZsYWdzIFxcdTAwMjYgS1ZNX1hFTl9IVk1fQ09ORklHX0VWVENITl9TRU5EKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiAhbG9uZ21vZGUpIHtcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiAhaXNfNjRiaXQpIHtcXG4gXFx0XFx0c3RydWN0IGNvbXBhdF9zY2hlZF9wb2xsIHNwMzI7XFxuIFxcbiBcXHRcXHQvKiBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgY29tcGF0IHN0cnVjdCBkZWZpbml0aW9uIGlzIGNvcnJlY3QgKi9cXG5AQCAtMTU0NiwyMCArMTU3NCwyMCBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXFxuIFxcdH1cXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzY2hlZF9wb2xsLm5yX3BvcnRzOyBpKyspIHtcXG4tXFx0XFx0aWYgKHBvcnRzW2ldIFxcdTAwM2U9IG1heF9ldnRjaG5fcG9ydCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuK1xcdFxcdGlmIChwb3J0c1tpXSBcXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoaGFzXzY0Yml0X3NoaW5mbykpIHtcXG4gXFx0XFx0XFx0KnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoc2NoZWRfcG9sbC5ucl9wb3J0cyA9PSAxKVxcbi1cXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnhlbi5wb2xsX2V2dGNobiA9IHBvcnQ7XFxuK1xcdFxcdFdSSVRFX09OQ0UodmNwdS1cXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4sIHBvcnQpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHZjcHUtXFx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huID0gLTE7XFxuK1xcdFxcdFdSSVRFX09OQ0UodmNwdS1cXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4sIC0xKTtcXG4gXFxuIFxcdHNldF9iaXQodmNwdS1cXHUwMDNldmNwdV9pZHgsIHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC54ZW4ucG9sbF9tYXNrKTtcXG4gXFxuLVxcdGlmICghd2FpdF9wZW5kaW5nX2V2ZW50KHZjcHUsIHNjaGVkX3BvbGwubnJfcG9ydHMsIHBvcnRzKSkge1xcbitcXHRpZiAoIXdhaXRfcGVuZGluZ19ldmVudCh2Y3B1LCBoYXNfNjRiaXRfc2hpbmZvLCBzY2hlZF9wb2xsLm5yX3BvcnRzLCBwb3J0cykpIHtcXG4gXFx0XFx0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVEKTtcXG4gXFxuIFxcdFxcdGlmIChzY2hlZF9wb2xsLnRpbWVvdXQpXFxuQEAgLTE1NzQsNyArMTYwMiw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcXG4gXFx0XFx0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfUlVOTkFCTEUpO1xcbiBcXHR9XFxuIFxcbi1cXHR2Y3B1LVxcdTAwM2VhcmNoLnhlbi5wb2xsX2V2dGNobiA9IDA7XFxuK1xcdFdSSVRFX09OQ0UodmNwdS1cXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4sIDApO1xcbiBcXHQqciA9IDA7XFxuIG91dDpcXG4gXFx0LyogUmVhbGx5LCB0aGlzIGlzIG9ubHkgbmVlZGVkIGluIGNhc2Ugb2YgdGltZW91dCAqL1xcbkBAIC0xNTk0LDEyICsxNjIyLDEyIEBAIHN0YXRpYyB2b2lkIGNhbmNlbF9ldnRjaG5fcG9sbChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4gXFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXFxuK3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2NoZWRfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzXzY0Yml0LFxcbiBcXHRcXHRcXHRcXHQgICBpbnQgY21kLCB1NjQgcGFyYW0sIHU2NCAqcilcXG4ge1xcbiBcXHRzd2l0Y2ggKGNtZCkge1xcbiBcXHRjYXNlIFNDSEVET1BfcG9sbDpcXG4tXFx0XFx0aWYgKGt2bV94ZW5fc2NoZWRvcF9wb2xsKHZjcHUsIGxvbmdtb2RlLCBwYXJhbSwgcikpXFxuK1xcdFxcdGlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBpc182NGJpdCwgcGFyYW0sIHIpKVxcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0XFx0ZmFsbHRocm91Z2g7XFxuIFxcdGNhc2UgU0NIRURPUF95aWVsZDpcXG5AQCAtMTYxOCw3ICsxNjQ2LDcgQEAgc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyIHtcXG4gICAgIHVpbnQzMl90IGZsYWdzO1xcbiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpO1xcbiBcXG4tc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwgaW50IGNtZCxcXG4rc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpc182NGJpdCwgaW50IGNtZCxcXG4gXFx0XFx0XFx0XFx0ICBpbnQgdmNwdV9pZCwgdTY0IHBhcmFtLCB1NjQgKnIpXFxuIHtcXG4gXFx0c3RydWN0IHZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIgb25lc2hvdDtcXG5AQCAtMTY2Miw3ICsxNjkwLDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwgaW50IGNtZCxcXG4gXFx0XFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3QgY29tcGF0X3ZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIsIGZsYWdzKSAhPVxcbiBcXHRcXHRcXHQgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpKTtcXG4gXFxuLVxcdFxcdGlmIChrdm1fcmVhZF9ndWVzdF92aXJ0KHZjcHUsIHBhcmFtLCBcXHUwMDI2b25lc2hvdCwgbG9uZ21vZGUgPyBzaXplb2Yob25lc2hvdCkgOlxcbitcXHRcXHRpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBwYXJhbSwgXFx1MDAyNm9uZXNob3QsIGlzXzY0Yml0ID8gc2l6ZW9mKG9uZXNob3QpIDpcXG4gXFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciksIFxcdTAwMjZlKSkge1xcbiBcXHRcXHRcXHQqciA9IC1FRkFVTFQ7XFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbkBAIC0xNjk0LDcgKzE3MjIsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3NldF90aW1lcl9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVpbnQ2NF90IHRpbWVvdXQsXFxuIFxcbiBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdGJvb2wgbG9uZ21vZGU7XFxuK1xcdGJvb2wgaXNfNjRiaXQ7XFxuIFxcdHU2NCBpbnB1dCwgcGFyYW1zWzZdLCByID0gLUVOT1NZUztcXG4gXFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XFxuIFxcdHU4IGNwbDtcXG5AQCAtMTcwNCw4ICsxNzMyLDggQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0ICAgIGt2bV9odl9oeXBlcmNhbGxfZW5hYmxlZCh2Y3B1KSlcXG4gXFx0XFx0cmV0dXJuIGt2bV9odl9oeXBlcmNhbGwodmNwdSk7XFxuIFxcbi1cXHRsb25nbW9kZSA9IGlzXzY0X2JpdF9oeXBlcmNhbGwodmNwdSk7XFxuLVxcdGlmICghbG9uZ21vZGUpIHtcXG4rXFx0aXNfNjRiaXQgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xcbitcXHRpZiAoIWlzXzY0Yml0KSB7XFxuIFxcdFxcdGlucHV0ID0ga3ZtX2VheF9yZWFkKHZjcHUpO1xcbiBcXHRcXHRwYXJhbXNbMF0gPSBrdm1fZWJ4X3JlYWQodmNwdSk7XFxuIFxcdFxcdHBhcmFtc1sxXSA9IGt2bV9lY3hfcmVhZCh2Y3B1KTtcXG5AQCAtMTc1MSwxNyArMTc3OSwxNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHRcXHRoYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9ldnRjaG5fc2VuZCh2Y3B1LCBwYXJhbXNbMV0sIFxcdTAwMjZyKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgX19IWVBFUlZJU09SX3NjaGVkX29wOlxcbi1cXHRcXHRoYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLFxcbitcXHRcXHRoYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcCh2Y3B1LCBpc182NGJpdCwgcGFyYW1zWzBdLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgcGFyYW1zWzFdLCBcXHUwMDI2cik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIF9fSFlQRVJWSVNPUl92Y3B1X29wOlxcbi1cXHRcXHRoYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHZjcHUsIGxvbmdtb2RlLCBwYXJhbXNbMF0sIHBhcmFtc1sxXSxcXG4rXFx0XFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBpc182NGJpdCwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHBhcmFtc1syXSwgXFx1MDAyNnIpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBfX0hZUEVSVklTT1Jfc2V0X3RpbWVyX29wOiB7XFxuIFxcdFxcdHU2NCB0aW1lb3V0ID0gcGFyYW1zWzBdO1xcbiBcXHRcXHQvKiBJbiAzMi1iaXQgbW9kZSwgdGhlIDY0LWJpdCB0aW1lb3V0IGlzIGluIHR3byAzMi1iaXQgcGFyYW1zLiAqL1xcbi1cXHRcXHRpZiAoIWxvbmdtb2RlKVxcbitcXHRcXHRpZiAoIWlzXzY0Yml0KVxcbiBcXHRcXHRcXHR0aW1lb3V0IHw9IHBhcmFtc1sxXSBcXHUwMDNjXFx1MDAzYyAzMjtcXG4gXFx0XFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHZjcHUsIHRpbWVvdXQsIFxcdTAwMjZyKTtcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTE3NzYsNyArMTgwNCw3IEBAIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIGhhbmRsZV9pbl91c2Vyc3BhY2U6XFxuIFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9YRU47XFxuIFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNleGVuLnR5cGUgPSBLVk1fRVhJVF9YRU5fSENBTEw7XFxuLVxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNleGVuLnUuaGNhbGwubG9uZ21vZGUgPSBsb25nbW9kZTtcXG4rXFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2V4ZW4udS5oY2FsbC5sb25nbW9kZSA9IGlzXzY0Yml0O1xcbiBcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZXhlbi51LmhjYWxsLmNwbCA9IGNwbDtcXG4gXFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2V4ZW4udS5oY2FsbC5pbnB1dCA9IGlucHV0O1xcbiBcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZXhlbi51LmhjYWxsLnBhcmFtc1swXSA9IHBhcmFtc1swXTtcXG5AQCAtMTc5NCw3ICsxODIyLDcgQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIHN0YXRpYyB2b2lkIGt2bV94ZW5fY2hlY2tfcG9sbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBvcnQpXFxuIHtcXG4tXFx0aW50IHBvbGxfZXZ0Y2huID0gdmNwdS1cXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG47XFxuK1xcdGludCBwb2xsX2V2dGNobiA9IFJFQURfT05DRSh2Y3B1LVxcdTAwM2VhcmNoLnhlbi5wb2xsX2V2dGNobik7XFxuIFxcbiBcXHRpZiAoKHBvbGxfZXZ0Y2huID09IHBvcnQgfHwgcG9sbF9ldnRjaG4gPT0gLTEpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICB0ZXN0X2FuZF9jbGVhcl9iaXQodmNwdS1cXHUwMDNldmNwdV9pZHgsIHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC54ZW4ucG9sbF9tYXNrKSkge1xcbkBAIC0xODE2LDggKzE4NDQsOSBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KVxcbiBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuIFxcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGU7XFxuK1xcdGJvb2wgaGFzXzY0Yml0X3NoaW5mbyA9IGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pO1xcbitcXHR1bnNpZ25lZCBsb25nICpwZW5kaW5nX2JpdHMsICptYXNrX2JpdHMsIHZpX3BlbmRpbmdfc2VsX29mcztcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbi1cXHR1bnNpZ25lZCBsb25nICpwZW5kaW5nX2JpdHMsICptYXNrX2JpdHM7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdGludCBwb3J0X3dvcmRfYml0O1xcbiBcXHRib29sIGtpY2tfdmNwdSA9IGZhbHNlO1xcbkBAIC0xODMzLDcgKzE4NjIsNyBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRcXHRXUklURV9PTkNFKHhlLVxcdTAwM2V2Y3B1X2lkeCwgdmNwdS1cXHUwMDNldmNwdV9pZHgpO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoeGUtXFx1MDAzZXBvcnQgXFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGt2bSkpXFxuK1xcdGlmICh4ZS1cXHUwMDNlcG9ydCBcXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoaGFzXzY0Yml0X3NoaW5mbykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0cmMgPSAtRVdPVUxEQkxPQ0s7XFxuQEAgLTE4NDQsMTYgKzE4NzMsMjMgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0aWYgKCFrdm1fZ3BjX2NoZWNrKGdwYywgUEFHRV9TSVpFKSlcXG4gXFx0XFx0Z290byBvdXRfcmN1O1xcbiBcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xcbitcXHRpZiAoaGFzXzY0Yml0X3NoaW5mbykge1xcbiBcXHRcXHRzdHJ1Y3Qgc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cXHUwMDNla2h2YTtcXG4gXFx0XFx0cGVuZGluZ19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2c2hpbmZvLVxcdTAwM2VldnRjaG5fcGVuZGluZztcXG4gXFx0XFx0bWFza19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2c2hpbmZvLVxcdTAwM2VldnRjaG5fbWFzaztcXG4gXFx0XFx0cG9ydF93b3JkX2JpdCA9IHhlLVxcdTAwM2Vwb3J0IC8gNjQ7XFxuK1xcbitcXHRcXHR2aV9wZW5kaW5nX3NlbF9vZnMgPSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV9pbmZvLCBldnRjaG5fcGVuZGluZ19zZWwpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRzdHJ1Y3QgY29tcGF0X3NoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtXFx1MDAzZWtodmE7XFxuIFxcdFxcdHBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopXFx1MDAyNnNoaW5mby1cXHUwMDNlZXZ0Y2huX3BlbmRpbmc7XFxuIFxcdFxcdG1hc2tfYml0cyA9ICh1bnNpZ25lZCBsb25nICopXFx1MDAyNnNoaW5mby1cXHUwMDNlZXZ0Y2huX21hc2s7XFxuIFxcdFxcdHBvcnRfd29yZF9iaXQgPSB4ZS1cXHUwMDNlcG9ydCAvIDMyO1xcbitcXG4rXFx0XFx0dmlfcGVuZGluZ19zZWxfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF92Y3B1X2luZm8sIGV2dGNobl9wZW5kaW5nX3NlbCk7XFxuK1xcbitcXHRcXHQvKiB0ZXN0X2FuZF9zZXRfYml0KCkgbmVlZHMgNjQtYml0IGFsaWdubWVudCwgYnV0IHRoYXQncyBPSyAqL1xcbitcXHRcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgZXZ0Y2huX3BlbmRpbmcpIFxcdTAwMjYgNyk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuQEAgLTE4NjksNiArMTkwNSw4IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcdFxcdHJjID0gLUVOT1RDT05OOyAvKiBNYXNrZWQgKi9cXG4gXFx0XFx0a3ZtX3hlbl9jaGVja19wb2xsZXIodmNwdSwgeGUtXFx1MDAzZXBvcnQpO1xcbiBcXHR9IGVsc2Uge1xcbitcXHRcXHRib29sIG9sZDtcXG4rXFxuIFxcdFxcdHJjID0gMTsgLyogRGVsaXZlcmVkIHRvIHRoZSBiaXRtYXAgaW4gc2hhcmVkX2luZm8uICovXFxuIFxcdFxcdC8qIE5vdyBzd2l0Y2ggdG8gdGhlIHZDUFUncyB2Y3B1X2luZm8gdG8gc2V0IHRoZSBpbmRleCBhbmQgcGVuZGluZ19zZWwgKi9cXG4gXFx0XFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Z3BjLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuQEAgLTE4ODUsMTkgKzE5MjMsMjkgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0XFx0XFx0Z290byBvdXRfcmN1O1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFxcdTAwMjZcXHUwMDI2IGt2bS1cXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSB7XFxuLVxcdFxcdFxcdHN0cnVjdCB2Y3B1X2luZm8gKnZjcHVfaW5mbyA9IGdwYy1cXHUwMDNla2h2YTtcXG4tXFx0XFx0XFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnRfd29yZF9iaXQsIFxcdTAwMjZ2Y3B1X2luZm8tXFx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCkpIHtcXG4tXFx0XFx0XFx0XFx0V1JJVEVfT05DRSh2Y3B1X2luZm8tXFx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XFxuLVxcdFxcdFxcdFxcdGtpY2tfdmNwdSA9IHRydWU7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0c3RydWN0IGNvbXBhdF92Y3B1X2luZm8gKnZjcHVfaW5mbyA9IGdwYy1cXHUwMDNla2h2YTtcXG4tXFx0XFx0XFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnRfd29yZF9iaXQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICh1bnNpZ25lZCBsb25nICopXFx1MDAyNnZjcHVfaW5mby1cXHUwMDNlZXZ0Y2huX3BlbmRpbmdfc2VsKSkge1xcbi1cXHRcXHRcXHRcXHRXUklURV9PTkNFKHZjcHVfaW5mby1cXHUwMDNlZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTtcXG4tXFx0XFx0XFx0XFx0a2lja192Y3B1ID0gdHJ1ZTtcXG4tXFx0XFx0XFx0fVxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBFeHBsaWNpdGx5IHVzZSBhIDMyLWJpdCBidHNsIGluc3RlYWQgb2YgdGVzdF9hbmRfc2V0X2JpdCgpLFxcbitcXHRcXHQgKiB3aGljaCB3b3VsZCB1c2UgYnRzcSBvbiB4ODYtNjQuIFRoZSB2Y3B1X2luZm8gaXMgZ3Vlc3QtXFxuK1xcdFxcdCAqIGNvbnRyb2xsZWQgYW5kIG9ubHkgcmVxdWlyZWQgdG8gYmUgMzItYml0IGFsaWduZWQsIHNvIGFcXG4rXFx0XFx0ICogNjQtYml0IGFjY2VzcyBjb3VsZCBnZW5lcmF0ZSBhIHNwbGl0LWxvY2sgI0FDLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBOb3RlLCB0aGlzIGRvZXMgbm90IGFwcGx5IHRvIHRoZSB0ZXN0X2FuZF9zZXRfYml0KCkgb25cXG4rXFx0XFx0ICogcGVuZGluZ19iaXRzIGFib3ZlOiB0aGF0IGlzIGluIHRoZSBwZXItVk0gc2hhcmVkX2luZm8sIHdoaWNoXFxuK1xcdFxcdCAqIGlzIHBhZ2UgYWxpZ25lZCwgc28gdGhlIGFjY2VzcyBpcyBndWFyYW50ZWVkIHRvIGJlIDY0LWJpdFxcbitcXHRcXHQgKiBhbGlnbmVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0b2xkID0gR0VOX0JJTkFSWV9STVdjYyhMT0NLX1BSRUZJWCBcXFwiYnRzbFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICAqKHUzMiAqKShncGMtXFx1MDAzZWtodmEgKyB2aV9wZW5kaW5nX3NlbF9vZnMpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgYywgXFxcIklyXFxcIiwgcG9ydF93b3JkX2JpdCk7XFxuK1xcdFxcdGlmICghb2xkKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCB2Y3B1X2luZm8gKnZpID0gZ3BjLVxcdTAwM2VraHZhO1xcbitcXG4rXFx0XFx0XFx0LyogTm8gbmVlZCBmb3IgY29tcGF0IGhhbmRsaW5nICovXFxuK1xcdFxcdFxcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpICE9XFxuK1xcdFxcdFxcdFxcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF92Y3B1X2luZm8sIGV2dGNobl91cGNhbGxfcGVuZGluZykpO1xcbitcXG4rXFx0XFx0XFx0V1JJVEVfT05DRSh2aS1cXHUwMDNlZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTtcXG4rXFx0XFx0XFx0a2lja192Y3B1ID0gdHJ1ZTtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogRm9yIHRoZSBwZXItdkNQVSBsYXBpYyB2ZWN0b3IsIGRlbGl2ZXIgaXQgYXMgTVNJLiAqL1xcbkBAIC0xOTk1LDcgKzIwNDMsNyBAQCBpbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBEb24ndCBjaGVjayBmb3IgdGhlIHBvcnQgYmVpbmcgd2l0aGluIHJhbmdlIG9mIG1heF9ldnRjaG5fcG9ydCgpLlxcbitcXHQgKiBEb24ndCBjaGVjayBmb3IgdGhlIHBvcnQgYmVpbmcgd2l0aGluIHJhbmdlIG9mIGt2bV9tYXhfZXZ0Y2huX3BvcnQoKS5cXG4gXFx0ICogVXNlcnNwYWNlIGNhbiBjb25maWd1cmUgd2hhdCBldmVyIHRhcmdldHMgaXQgbGlrZXM7IGV2ZW50cyBqdXN0IHdvbid0XFxuIFxcdCAqIGJlIGRlbGl2ZXJlZCBpZi93aGlsZSB0aGUgdGFyZ2V0IGlzIGludmFsaWQsIGp1c3QgbGlrZSB1c2Vyc3BhY2UgY2FuXFxuIFxcdCAqIGNvbmZpZ3VyZSBNU0lzIHdoaWNoIHRhcmdldCBub24tZXhpc3RlbnQgQVBJQ3MuXFxuQEAgLTIwMDQsOCArMjA1Miw4IEBAIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdCAqIGNhbiBiZSByZXN0b3JlZCAqaW5kZXBlbmRlbnRseSogb2Ygb3RoZXIgdGhpbmdzIGxpa2UgY3JlYXRpbmcgdkNQVXMsXFxuIFxcdCAqIHdpdGhvdXQgaW1wb3NpbmcgYW4gb3JkZXJpbmcgZGVwZW5kZW5jeSBvbiB1c2Vyc3BhY2UuICBJbiB0aGlzXFxuIFxcdCAqIHBhcnRpY3VsYXIgY2FzZSwgdGhlIHByb2JsZW1hdGljIG9yZGVyaW5nIHdvdWxkIGJlIHdpdGggc2V0dGluZyB0aGVcXG4tXFx0ICogWGVuICdsb25nIG1vZGUnIGZsYWcsIHdoaWNoIGNoYW5nZXMgbWF4X2V2dGNobl9wb3J0KCkgdG8gYWxsb3cgNDA5Nlxcbi1cXHQgKiBpbnN0ZWFkIG9mIDEwMjQgZXZlbnQgY2hhbm5lbHMuXFxuK1xcdCAqIFhlbiAnbG9uZyBtb2RlJyBmbGFnLCB3aGljaCBjaGFuZ2VzIGt2bV9tYXhfZXZ0Y2huX3BvcnQoKSB0byBhbGxvd1xcbitcXHQgKiA0MDk2IGluc3RlYWQgb2YgMTAyNCBldmVudCBjaGFubmVscy5cXG4gXFx0ICovXFxuIFxcbiBcXHQvKiBXZSBvbmx5IHN1cHBvcnQgMiBsZXZlbCBldmVudCBjaGFubmVscyBmb3Igbm93ICovXFxuQEAgLTIwNDIsNyArMjA5MCw3IEBAIGludCBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfeGVuX2V2dGNobiAqXFxuIFxcdHN0cnVjdCBrdm1feGVuX2V2dGNobiBlO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0aWYgKCF1eGUtXFx1MDAzZXBvcnQgfHwgdXhlLVxcdTAwM2Vwb3J0IFxcdTAwM2U9IG1heF9ldnRjaG5fcG9ydChrdm0pKVxcbitcXHRpZiAoIXV4ZS1cXHUwMDNlcG9ydCB8fCB1eGUtXFx1MDAzZXBvcnQgXFx1MDAzZT0ga3ZtX21heF9ldnRjaG5fcG9ydChrdm0pKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdC8qIFdlIG9ubHkgc3VwcG9ydCAyIGxldmVsIGV2ZW50IGNoYW5uZWxzIGZvciBub3cgKi9cXG5AQCAtMjA5Myw3ICsyMTQxLDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFxuIFxcdC8qIFByb3RlY3Qgd3JpdGVzIHRvIGV2dGNobmZkIGFzIHdlbGwgYXMgdGhlIGlkciBsb29rdXAuICAqL1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcXG4tXFx0ZXZ0Y2huZmQgPSBpZHJfZmluZChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIHBvcnQpO1xcbitcXHRldnRjaG5mZCA9IHhhX2xvYWQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBwb3J0KTtcXG4gXFxuIFxcdHJldCA9IC1FTk9FTlQ7XFxuIFxcdGlmICghZXZ0Y2huZmQpXFxuQEAgLTIxNTIsNyArMjIwMCw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcbiBcXHRjYXNlIEVWVENITlNUQVRfaW50ZXJkb21haW46XFxuIFxcdFxcdGlmIChkYXRhLVxcdTAwM2V1LmV2dGNobi5kZWxpdmVyLnBvcnQucG9ydCkge1xcbi1cXHRcXHRcXHRpZiAoZGF0YS1cXHUwMDNldS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQgXFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGt2bSkpXFxuK1xcdFxcdFxcdGlmIChkYXRhLVxcdTAwM2V1LmV2dGNobi5kZWxpdmVyLnBvcnQucG9ydCBcXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0X25vZXZlbnRmZDsgLyogLUVJTlZBTCAqL1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRldmVudGZkID0gZXZlbnRmZF9jdHhfZmRnZXQoZGF0YS1cXHUwMDNldS5ldnRjaG4uZGVsaXZlci5ldmVudGZkLmZkKTtcXG5AQCAtMjE4NywxMyArMjIzNSwxMyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9hc3NpZ24oc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHR9XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcXG4tXFx0cmV0ID0gaWRyX2FsbG9jKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQsIHBvcnQsIHBvcnQgKyAxLFxcbitcXHRyZXQgPSB4YV9pbnNlcnQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBwb3J0LCBldnRjaG5mZCxcXG4gXFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XFxuLVxcdGlmIChyZXQgXFx1MDAzZT0gMClcXG4rXFx0aWYgKCFyZXQpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKHJldCA9PSAtRU5PU1BDKVxcbitcXHRpZiAocmV0ID09IC1FQlVTWSlcXG4gXFx0XFx0cmV0ID0gLUVFWElTVDtcXG4gb3V0OlxcbiBcXHRpZiAoZXZlbnRmZClcXG5AQCAtMjIwOCw3ICsyMjU2LDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfZGVhc3NpZ24oc3RydWN0IGt2bSAqa3ZtLCB1MzIgcG9ydClcXG4gXFx0c3RydWN0IGV2dGNobmZkICpldnRjaG5mZDtcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4ueGVuX2xvY2spO1xcbi1cXHRldnRjaG5mZCA9IGlkcl9yZW1vdmUoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBwb3J0KTtcXG4rXFx0ZXZ0Y2huZmQgPSB4YV9lcmFzZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIHBvcnQpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4ueGVuX2xvY2spO1xcbiBcXG4gXFx0aWYgKCFldnRjaG5mZClcXG5AQCAtMjIyNCw3ICsyMjcyLDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfZGVhc3NpZ24oc3RydWN0IGt2bSAqa3ZtLCB1MzIgcG9ydClcXG4gc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuIFxcdHN0cnVjdCBldnRjaG5mZCAqZXZ0Y2huZmQsICoqYWxsX2V2dGNobmZkcztcXG4tXFx0aW50IGk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaTtcXG4gXFx0aW50IG4gPSAwO1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XFxuQEAgLTIyMzQsNyArMjI4Miw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0ICogY3JpdGljYWwgc2VjdGlvbiwgZmlyc3QgY29sbGVjdCBhbGwgdGhlIGV2dGNobmZkIG9iamVjdHNcXG4gXFx0ICogaW4gYW4gYXJyYXkgYXMgdGhleSBhcmUgcmVtb3ZlZCBmcm9tIGV2dGNobl9wb3J0cy5cXG4gXFx0ICovXFxuLVxcdGlkcl9mb3JfZWFjaF9lbnRyeShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLCBpKVxcbitcXHR4YV9mb3JfZWFjaChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGksIGV2dGNobmZkKVxcbiBcXHRcXHRuKys7XFxuIFxcbiBcXHRhbGxfZXZ0Y2huZmRzID0ga21hbGxvY19vYmpzKHN0cnVjdCBldnRjaG5mZCAqLCBuKTtcXG5AQCAtMjI0NCw5ICsyMjkyLDkgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHR9XFxuIFxcbiBcXHRuID0gMDtcXG4tXFx0aWRyX2Zvcl9lYWNoX2VudHJ5KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQsIGkpIHtcXG4rXFx0eGFfZm9yX2VhY2goXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBpLCBldnRjaG5mZCkge1xcbiBcXHRcXHRhbGxfZXZ0Y2huZmRzW24rK10gPSBldnRjaG5mZDtcXG4tXFx0XFx0aWRyX3JlbW92ZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLVxcdTAwM2VzZW5kX3BvcnQpO1xcbitcXHRcXHR4YV9lcmFzZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLVxcdTAwM2VzZW5kX3BvcnQpO1xcbiBcXHR9XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XFxuIFxcbkBAIC0yMjcwLDcgKzIzMTgsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2V0YXR0cl9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YVxcbiBcXHRpZiAoZGF0YS1cXHUwMDNldS5ldnRjaG4uZmxhZ3MgPT0gS1ZNX1hFTl9FVlRDSE5fUkVTRVQpXFxuIFxcdFxcdHJldHVybiBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoa3ZtKTtcXG4gXFxuLVxcdGlmICghcG9ydCB8fCBwb3J0IFxcdTAwM2U9IG1heF9ldnRjaG5fcG9ydChrdm0pKVxcbitcXHRpZiAoIXBvcnQgfHwgcG9ydCBcXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKGRhdGEtXFx1MDAzZXUuZXZ0Y2huLmZsYWdzID09IEtWTV9YRU5fRVZUQ0hOX0RFQVNTSUdOKVxcbkBAIC0yMjk3LDEyICsyMzQ1LDEwIEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfZXZ0Y2huX3NlbmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcGFyYW0sIHU2NCAqcilcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG4tXFx0ICogZXZ0Y2huZmQgaXMgcHJvdGVjdGVkIGJ5IGt2bS1cXHUwMDNlc3JjdTsgdGhlIGlkciBsb29rdXAgaW5zdGVhZFxcbi1cXHQgKiBpcyBwcm90ZWN0ZWQgYnkgUkNVLlxcbitcXHQgKiBldnRjaG5mZCBpcyBwcm90ZWN0ZWQgYnkga3ZtLVxcdTAwM2VzcmN1OyB0aGUgeGFfbG9hZCBpcyBSQ1Utc2FmZVxcbitcXHQgKiBpbnRlcm5hbGx5LCBubyBleHBsaWNpdCByY3VfcmVhZF9sb2NrKCkgbmVlZGVkLlxcbiBcXHQgKi9cXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRldnRjaG5mZCA9IGlkcl9maW5kKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgc2VuZC5wb3J0KTtcXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdGV2dGNobmZkID0geGFfbG9hZChcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIHNlbmQucG9ydCk7XFxuIFxcdGlmICghZXZ0Y2huZmQpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuQEAgLTIzNDksMjMgKzIzOTUsMjMgQEAgdm9pZCBrdm1feGVuX2Rlc3Ryb3lfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHZvaWQga3ZtX3hlbl9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSlcXG4ge1xcbiBcXHRtdXRleF9pbml0KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcXG4tXFx0aWRyX2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTtcXG4rXFx0eGFfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMpO1xcbiBcXHRrdm1fZ3BjX2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlLCBrdm0pO1xcbiB9XFxuIFxcbiB2b2lkIGt2bV94ZW5fZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4gXFx0c3RydWN0IGV2dGNobmZkICpldnRjaG5mZDtcXG4tXFx0aW50IGk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaTtcXG4gXFxuIFxcdGt2bV9ncGNfZGVhY3RpdmF0ZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGUpO1xcbiBcXG4tXFx0aWRyX2Zvcl9lYWNoX2VudHJ5KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQsIGkpIHtcXG4rXFx0eGFfZm9yX2VhY2goXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBpLCBldnRjaG5mZCkge1xcbiBcXHRcXHRpZiAoIWV2dGNobmZkLVxcdTAwM2VkZWxpdmVyLnBvcnQucG9ydClcXG4gXFx0XFx0XFx0ZXZlbnRmZF9jdHhfcHV0KGV2dGNobmZkLVxcdTAwM2VkZWxpdmVyLmV2ZW50ZmQuY3R4KTtcXG4gXFx0XFx0a2ZyZWUoZXZ0Y2huZmQpO1xcbiBcXHR9XFxuLVxcdGlkcl9kZXN0cm95KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cyk7XFxuK1xcdHhhX2Rlc3Ryb3koXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTtcXG4gXFxuIFxcdGlmIChrdm0tXFx1MDAzZWFyY2gueGVuLmh2bV9jb25maWcubXNyKVxcbiBcXHRcXHRzdGF0aWNfYnJhbmNoX3Nsb3dfZGVjX2RlZmVycmVkKFxcdTAwMjZrdm1feGVuX2VuYWJsZWQpO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmggYi9hcmNoL3g4Ni9rdm0veGVuLmhcXG5pbmRleCBmMzcyODU1ODU3YTg4Li45ZDA0ZTM1MGJkYjFmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS94ZW4uaFxcbisrKyBiL2FyY2gveDg2L2t2bS94ZW4uaFxcbkBAIC0yMzUsNiArMjM1LDExIEBAIHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8ge1xcbiAjZGVmaW5lIENPTVBBVF9FVlRDSE5fMkxfTlJfQ0hBTk5FTFMgKDggKlxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8sIFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgZXZ0Y2huX3BlbmRpbmcpKVxcbitcXG4rLyogTGF0Y2hlZCBWTS13aWRlIG1vZGU7IHRoZSBLVk0gZXF1aXZhbGVudCBvZiBYZW4ncyAhaGFzXzMyYml0X3NoaW5mbygpLiAqL1xcbisjZGVmaW5lIGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pIFxcXFxcXG4rXFx0KElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiBSRUFEX09OQ0UoKGt2bSktXFx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkpXFxuK1xcbiBzdHJ1Y3QgY29tcGF0X3ZjcHVfcnVuc3RhdGVfaW5mbyB7XFxuICAgICBpbnQgc3RhdGU7XFxuICAgICB1aW50NjRfdCBzdGF0ZV9lbnRyeV90aW1lO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5pbmRleCAwM2JmYzkyODY0YjZlLi4zZGQwNDYwNWYyZTU1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbkBAIC04NTUsNiArODU1LDggQEAgc3RydWN0IGt2bSB7XFxuIFxcdGdmbl90IG1tdV9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0O1xcbiBcXHRnZm5fdCBtbXVfaW52YWxpZGF0ZV9yYW5nZV9lbmQ7XFxuIFxcbitcXHR1bnNpZ25lZCBsb25nIGdwY19pbnZhbGlkYXRlX3NlcTtcXG4rXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlcztcXG4gXFx0dTY0IG1hbnVhbF9kaXJ0eV9sb2dfcHJvdGVjdDtcXG4gXFx0c3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnk7XFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuaW5kZXggNjVlYjI2YTA1MjBkOC4uMTA4ZDQyYzVjMWQ2YSAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xcbkBAIC04MTMsNiArODEzLDE2IEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sXFxuIFxcbiBcXHQvKiBQYWlycyB3aXRoIHRoZSBpbmNyZW1lbnQgaW4gcmFuZ2Vfc3RhcnQoKS4gKi9cXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XFxuK1xcdGt2bS1cXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxKys7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBcyB3aXRoIHRoZSBNTVUgc2VxdWVuY2UgY291bnRlciBhbmQgbW11X2ludmFsaWRhdGVfaW5fcHJvZ3Jlc3MsIHRoZVxcbitcXHQgKiBHUEMgc2VxdWVuY2UgaW5jcmVhc2UgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB0aGUgaW52YWxpZGF0ZSBjb3VudFxcbitcXHQgKiBnb2VzIHRvIHplcm8uICBQYWlycyB3aXRoIHRoZSBzbXBfcm1iKCkgaW5cXG4rXFx0ICogbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKCkuXFxuK1xcdCAqL1xcbitcXHRzbXBfd21iKCk7XFxuK1xcbiBcXHRpZiAoIVdBUk5fT05fT05DRSgha3ZtLVxcdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCkpXFxuIFxcdFxcdC0ta3ZtLVxcdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcXG4gXFx0d2FrZSA9ICFrdm0tXFx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50O1xcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9wZm5jYWNoZS5jIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xcbmluZGV4IDcyOGQyYzFiNDg4YTguLjM2NTk2ODZiOTdjMjQgMTAwNjQ0XFxuLS0tIGEvdmlydC9rdm0vcGZuY2FjaGUuY1xcbisrKyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmNcXG5AQCAtMTI0LDcgKzEyNCw3IEBAIHN0YXRpYyB2b2lkIGdwY191bm1hcChrdm1fcGZuX3QgcGZuLCB2b2lkICpraHZhKVxcbiAjZW5kaWZcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NlcSlcXG4rc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgZ3BjX3NlcSlcXG4ge1xcbiBcXHQvKlxcbiBcXHQgKiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBhY3RzIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXNcXG5AQCAtMTM2LDIwICsxMzYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NcXG4gXFx0ICogTm90ZSwgaXQgZG9lcyBub3QgbWF0dGVyIHRoYXQgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnRcXG4gXFx0ICogaXMgbm90IHByb3RlY3RlZCBieSBncGMtXFx1MDAzZWxvY2suICBJdCBpcyBndWFyYW50ZWVkIHRvXFxuIFxcdCAqIGJlIGVsZXZhdGVkIGJlZm9yZSB0aGUgbW11X25vdGlmaWVyIGFjcXVpcmVzIGdwYy1cXHUwMDNlbG9jaywgYW5kXFxuLVxcdCAqIGlzbid0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgbW11X2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuXFxuK1xcdCAqIGlzbid0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuXFxuIFxcdCAqL1xcbiBcXHRpZiAoa3ZtLVxcdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudClcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBFbnN1cmUgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgaXMgcmVhZCBiZWZvcmVcXG4tXFx0ICogbW11X2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW5cXG4tXFx0ICogbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGVcXG4rXFx0ICogZ3BjX2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW5cXG4rXFx0ICoga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlXFxuIFxcdCAqIG9sZCAobm9uLXplcm8pIHZhbHVlIG9mIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IG9yIHRoZVxcbi1cXHQgKiBuZXcgKGluY3JlbWVudGVkKSB2YWx1ZSBvZiBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgb2JzZXJ2ZWQuXFxuK1xcdCAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIGdwY19pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cXG4gXFx0ICovXFxuIFxcdHNtcF9ybWIoKTtcXG4tXFx0cmV0dXJuIGt2bS1cXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxICE9IG1tdV9zZXE7XFxuK1xcdHJldHVybiBrdm0tXFx1MDAzZWdwY19pbnZhbGlkYXRlX3NlcSAhPSBncGNfc2VxO1xcbiB9XFxuIFxcbiBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcXG5AQCAtMTU4LDcgKzE1OCw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxcbiBcXHR2b2lkICpvbGRfa2h2YSA9ICh2b2lkICopUEFHRV9BTElHTl9ET1dOKCh1aW50cHRyX3QpZ3BjLVxcdTAwM2VraHZhKTtcXG4gXFx0a3ZtX3Bmbl90IG5ld19wZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDtcXG4gXFx0dm9pZCAqbmV3X2todmEgPSBOVUxMO1xcbi1cXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZ3BjX3NlcTtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIFxcbiBcXHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xcbkBAIC0xODEsNyArMTgxLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXFxuIFxcdGdwYy1cXHUwMDNldmFsaWQgPSBmYWxzZTtcXG4gXFxuIFxcdGRvIHtcXG4tXFx0XFx0bW11X3NlcSA9IGdwYy1cXHUwMDNla3ZtLVxcdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XFxuK1xcdFxcdGdwY19zZXEgPSBncGMtXFx1MDAzZWt2bS1cXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxO1xcbiBcXHRcXHRzbXBfcm1iKCk7XFxuIFxcbiBcXHRcXHR3cml0ZV91bmxvY2tfaXJxKFxcdTAwMjZncGMtXFx1MDAzZWxvY2spO1xcbkBAIC0yMzIsNyArMjMyLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXFxuIFxcdFxcdCAqIGF0dGVtcHRpbmcgdG8gcmVmcmVzaC5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdFdBUk5fT05fT05DRShncGMtXFx1MDAzZXZhbGlkKTtcXG4tXFx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cXHUwMDNla3ZtLCBtbXVfc2VxKSk7XFxuK1xcdH0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtXFx1MDAzZWt2bSwgZ3BjX3NlcSkpO1xcbiBcXG4gXFx0Z3BjLVxcdTAwM2V2YWxpZCA9IHRydWU7XFxuIFxcdGdwYy1cXHUwMDNlcGZuID0gbmV3X3BmbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mzg6MjMuOTY5MjQ2MTQxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MDk5MzEzMTA5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX1g4NlwiLFxuICAgIFwiS1ZNX1hFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV94ZW5fdmNwdV9zZXRfYXR0clwiLFxuICAgIFwia3ZtX3hlbl9odm1fc2V0X2F0dHJcIixcbiAgICBcImt2bV94ZW5faHlwZXJjYWxsXCIsXG4gICAgXCJrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c1wiLFxuICAgIFwiX19rdm1feGVuX2hhc19pbnRlcnJ1cHRcIixcbiAgICBcImt2bV94ZW5fc2V0X2V2dGNobl9mYXN0XCIsXG4gICAgXCJrdm1feGVuX2h2bV9ldnRjaG5fc2VuZFwiLFxuICAgIFwia3ZtX2dwY19yZWZyZXNoXCIsXG4gICAgXCJrdm1fZ3BjX2FjdGl2YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBhbmQgY29uY3VycmVuY3ktY3JpdGljYWwgY2hhbmdlcyB0byBLVk0ncyBYZW4gZW11bGF0aW9uIGFuZCBnZm5fdG9fcGZuX2NhY2hlIChHUEMpIHN1YnN5c3RlbS4gVGhlc2UgaW5jbHVkZSBtaWdyYXRpbmcgWGVuIGV2ZW50IGNoYW5uZWwgc3RvcmFnZSBmcm9tIElEUiB0byBYQXJyYXksIGVuZm9yY2luZyBhbGlnbm1lbnQgY2hlY2tzIGZvciB2Q1BVIGluZm8gR1BBL0hWQSwgdXNpbmcgZXhwbGljaXQgMzItYml0IGF0b21pYyBiaXRvcHMgdG8gcHJldmVudCBzcGxpdC1sb2NrIEFDIGV4Y2VwdGlvbnMgb24gdW5hbGlnbmVkIHN0cnVjdHVyZXMsIGludHJvZHVjaW5nIFNSQ1UgbG9ja2luZyBpbiBfX2t2bV94ZW5faGFzX2ludGVycnVwdCwgYW5kIHNlcGFyYXRpbmcgR1BDIGludmFsaWRhdGlvbiBzZXF1ZW5jaW5nIGZyb20gZ2VuZXJhbCBNTVUgaW52YWxpZGF0aW9uIHNlcXVlbmNpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSB2aXJ0dWFsaXphdGlvbiBpb2N0bHMsIGh5cGVyY2FsbHMsIGFuZCBldmVudCBjaGFubmVsIGRlbGl2ZXJ5IG1lY2hhbmlzbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMzZTAzZmYzYjhjMzc5ZDhiMzI4MjBjOTllYmMwMmQ4MDJlMzAzYjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDA0OjM4OjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDY4M2JiOGJmNDNhOTQuLjNhZjczOTVjMjQzMGEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMTYsNiArMTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9wYXJhLmhcdTAwM2VcbkBAIC0xMTEzLDcgKzExMTQsNyBAQCBzdHJ1Y3Qga3ZtX3hlbiB7XG4gXHRib29sIHJ1bnN0YXRlX3VwZGF0ZV9mbGFnO1xuIFx0dTggdXBjYWxsX3ZlY3RvcjtcbiBcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlIHNoaW5mb19jYWNoZTtcbi1cdHN0cnVjdCBpZHIgZXZ0Y2huX3BvcnRzO1xuK1x0c3RydWN0IHhhcnJheSBldnRjaG5fcG9ydHM7XG4gXHR1bnNpZ25lZCBsb25nIHBvbGxfbWFza1tCSVRTX1RPX0xPTkdTKEtWTV9NQVhfVkNQVVMpXTtcbiBcbiBcdHN0cnVjdCBrdm1feGVuX2h2bV9jb25maWcgaHZtX2NvbmZpZztcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmMgYi9hcmNoL3g4Ni9rdm0veGVuLmNcbmluZGV4IDk5OGNkY2I2YWEzMDMuLjcxODM5NjM0MGQzYzEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmNcbisrKyBiL2FyY2gveDg2L2t2bS94ZW4uY1xuQEAgLTczLDcgKzczLDcgQEAgc3RhdGljIGludCBrdm1feGVuX3NoYXJlZF9pbmZvX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBzaGFyZWRfaW5mbywgd2MpICE9IDB4YzAwKTtcbiBcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2hhcmVkX2luZm8sIHdjX3NlY19oaSkgIT0gMHhjMGMpO1xuIFxuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xuK1x0aWYgKGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pKSB7XG4gXHRcdHN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4gXG4gXHRcdHdjX3NlY19oaSA9IFx1MDAyNnNoaW5mby1cdTAwM2V3Y19zZWNfaGk7XG5AQCAtMzg5LDcgKzM4OSw3IEBAIHN0YXRpYyB2b2lkIGt2bV94ZW5fdXBkYXRlX3J1bnN0YXRlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdiwgYm9vbCBhdG9taWMpXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sIHRpbWUpICE9XG4gXHRcdCAgICAgc2l6ZW9mKHZ4LVx1MDAzZXJ1bnN0YXRlX3RpbWVzKSk7XG4gXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiB2LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbitcdGlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8odi1cdTAwM2Vrdm0pKSB7XG4gXHRcdHVzZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8pO1xuIFx0XHR0aW1lc19vZnMgPSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvLFxuIFx0XHRcdFx0ICAgICBzdGF0ZV9lbnRyeV90aW1lKTtcbkBAIC02NzYsMjggKzY3NiwzMiBAQCB2b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdilcbiBcdH1cbiBcbiBcdC8qIE5vdyBncGMtXHUwMDNla2h2YSBpcyBhIHZhbGlkIGtlcm5lbCBhZGRyZXNzIGZvciB0aGUgdmNwdV9pbmZvICovXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiB2LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbitcdGlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8odi1cdTAwM2Vrdm0pKSB7XG4gXHRcdHN0cnVjdCB2Y3B1X2luZm8gKnZpID0gZ3BjLVx1MDAzZWtodmE7XG4rXHRcdHZvaWQgKnZpX3BlbmRpbmdfc2VsID0gXHUwMDI2dmktXHUwMDNlZXZ0Y2huX3BlbmRpbmdfc2VsO1xuIFxuLVx0XHRhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggXCJvcnEgJTAsICUxXFxuXCJcbi1cdFx0XHQgICAgIFwibm90cSAlMFxcblwiXG4tXHRcdFx0ICAgICBMT0NLX1BSRUZJWCBcImFuZHEgJTAsICUyXFxuXCJcbi1cdFx0XHQgICAgIDogXCI9clwiIChldnRjaG5fcGVuZGluZ19zZWwpLFxuLVx0XHRcdCAgICAgICBcIittXCIgKHZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCksXG4tXHRcdFx0ICAgICAgIFwiK21cIiAodi1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpXG4tXHRcdFx0ICAgICA6IFwiMFwiIChldnRjaG5fcGVuZGluZ19zZWwpKTtcbitcdFx0aWYgKElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpdmlfcGVuZGluZ19zZWwsIHNpemVvZih1NjQpKSkge1xuK1x0XHRcdGF0b21pYzY0X29yKGV2dGNobl9wZW5kaW5nX3NlbCwgdmlfcGVuZGluZ19zZWwpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGF0b21pY19vcihldnRjaG5fcGVuZGluZ19zZWwsIHZpX3BlbmRpbmdfc2VsKTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFRoZSBjYXN0IGtlZXBzIHRoZSBzaGlmdCB3ZWxsLWRlZmluZWQgb24gMzItYml0LFxuK1x0XHRcdCAqIHdoZXJlIGV2dGNobl9wZW5kaW5nX3NlbCBpcyAzMiBiaXRzIHdpZGUgYW5kIHRoaXNcbitcdFx0XHQgKiBicmFuY2ggaXMgdW5yZWFjaGFibGUgYW55d2F5ICh0aGlzIGlzIGluc2lkZVxuK1x0XHRcdCAqIGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbygpLCB3aGljaCBpcyBnYXRlZCBvblxuK1x0XHRcdCAqIElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSkuXG4rXHRcdFx0ICovXG4rXHRcdFx0YXRvbWljX29yKCh1NjQpZXZ0Y2huX3BlbmRpbmdfc2VsIFx1MDAzZVx1MDAzZSAzMixcbitcdFx0XHRcdCAgdmlfcGVuZGluZ19zZWwgKyA0KTtcbitcdFx0fVxuK1xuK1x0XHRhdG9taWM2NF9hbmRub3QoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKVx1MDAyNnYtXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKTtcbiBcdFx0V1JJVEVfT05DRSh2aS1cdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xuIFx0fSBlbHNlIHtcbi1cdFx0dTMyIGV2dGNobl9wZW5kaW5nX3NlbDMyID0gZXZ0Y2huX3BlbmRpbmdfc2VsO1xuIFx0XHRzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmkgPSBncGMtXHUwMDNla2h2YTtcbiBcbi1cdFx0YXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYIFwib3JsICUwLCAlMVxcblwiXG4tXHRcdFx0ICAgICBcIm5vdGwgJTBcXG5cIlxuLVx0XHRcdCAgICAgTE9DS19QUkVGSVggXCJhbmRsICUwLCAlMlxcblwiXG4tXHRcdFx0ICAgICA6IFwiPXJcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpLFxuLVx0XHRcdCAgICAgICBcIittXCIgKHZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCksXG4tXHRcdFx0ICAgICAgIFwiK21cIiAodi1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpXG4tXHRcdFx0ICAgICA6IFwiMFwiIChldnRjaG5fcGVuZGluZ19zZWwzMikpO1xuK1x0XHRhdG9taWNfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKVx1MDAyNnZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCk7XG4rXHRcdGF0b21pY19hbmRub3QoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKVx1MDAyNnYtXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKTtcbiBcdFx0V1JJVEVfT05DRSh2aS1cdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xuIFx0fVxuIFxuQEAgLTcyOCw2ICs3MzIsMTYgQEAgaW50IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdilcbiBcdEJVSUxEX0JVR19PTihzaXplb2YocmMpICE9XG4gXHRcdCAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpKTtcbiBcbitcdC8qXG4rXHQgKiBrdm1fZ3BjX2NoZWNrKCkgY2hlY2tzIHRoZSBtZW1zbG90IGdlbmVyYXRpb24sIHNvIGt2bS1cdTAwM2VzcmN1IG11c3QgYmVcbitcdCAqIGhlbGQuIE1vc3QgY2FsbGVycyBob2xkIGl0IGFscmVhZHksIGJ1dCB0aGlzIGlzIGFsc28gcmVhY2hlZCBmcm9tXG4rXHQgKiBrdm1fZW11bGF0ZV9oYWx0KCkgb24gdGhlIFZNLUV4aXQgcGF0aCBhbmQgZnJvbSBrdm1fdmNwdV9ibG9jaygpLFxuK1x0ICogd2hlcmUgdmNwdV9lbnRlcl9ndWVzdCgpIGhhcyBhbHJlYWR5IGRyb3BwZWQgdGhlIHZDUFUncyBTUkNVIGxvY2suXG4rXHQgKiBUYWtpbmcgU1JDVSBkb2VzIG5vdCBzbGVlcCwgc28gaXQgaXMgc2FmZSBldmVuIGluIHRoZSBhdG9taWMgY2FzZVxuK1x0ICogd2hpY2ggaXMgaGFuZGxlZCBiZWxvdy5cbitcdCAqL1xuK1x0Z3VhcmQoc3JjdSkoXHUwMDI2di1cdTAwM2Vrdm0tXHUwMDNlc3JjdSk7XG4rXG4gXHRyZWFkX2xvY2tfaXJxc2F2ZShcdTAwMjZncGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0d2hpbGUgKCFrdm1fZ3BjX2NoZWNrKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkge1xuIFx0XHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdwYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG5AQCAtOTQxLDYgKzk1NSwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFxuK1x0XHRcdHIgPSAtRU5YSU87XG4rXHRcdFx0aWYgKCFJU19BTElHTkVEKGRhdGEtXHUwMDNldS5ncGEsIHNpemVvZih1MzIpKSlcbitcdFx0XHRcdGJyZWFrO1xuK1xuIFx0XHRcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pbmZvX2NhY2hlLFxuIFx0XHRcdFx0XHQgICAgIGRhdGEtXHUwMDNldS5ncGEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7XG4gXHRcdH0gZWxzZSB7XG5AQCAtOTUwLDYgKzk2OCwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFxuK1x0XHRcdHIgPSAtRU5YSU87XG4rXHRcdFx0aWYgKCFJU19BTElHTkVEKGRhdGEtXHUwMDNldS5odmEsIHNpemVvZih1MzIpKSlcbitcdFx0XHRcdGJyZWFrO1xuK1xuIFx0XHRcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlX2h2YShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZSxcbiBcdFx0XHRcdFx0XHQgZGF0YS1cdTAwM2V1Lmh2YSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTtcbiBcdFx0fVxuQEAgLTk5Myw3ICsxMDE1LDcgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSlcbiBcdFx0ICogYWRkcmVzcywgdGhhdCdzIGFjdHVhbGx5IE9LLiBrdm1feGVuX3VwZGF0ZV9ydW5zdGF0ZV9ndWVzdCgpXG4gXHRcdCAqIHdpbGwgY29wZS5cbiBcdFx0ICovXG4tXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSlcbitcdFx0aWYgKGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyh2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdFx0c3ogPSBzaXplb2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRzeiA9IHNpemVvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfcnVuc3RhdGVfaW5mbyk7XG5AQCAtMTQzOSwxNiArMTQ2MSwyMSBAQCBzdGF0aWMgaW50IGt2bV94ZW5faHlwZXJjYWxsX2NvbXBsZXRlX3VzZXJzcGFjZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4ga3ZtX3hlbl9oeXBlcmNhbGxfc2V0X3Jlc3VsdCh2Y3B1LCBydW4tXHUwMDNleGVuLnUuaGNhbGwucmVzdWx0KTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KHN0cnVjdCBrdm0gKmt2bSlcbitzdGF0aWMgaW5saW5lIGludCBtYXhfZXZ0Y2huX3BvcnQoYm9vbCBoYXNfNjRiaXRfc2hpbmZvKVxuIHtcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpXG4rXHRpZiAoaGFzXzY0Yml0X3NoaW5mbylcbiBcdFx0cmV0dXJuIEVWVENITl8yTF9OUl9DSEFOTkVMUztcbiBcdGVsc2VcbiBcdFx0cmV0dXJuIENPTVBBVF9FVlRDSE5fMkxfTlJfQ0hBTk5FTFM7XG4gfVxuIFxuLXN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cyxcbi1cdFx0XHQgICAgICAgZXZ0Y2huX3BvcnRfdCAqcG9ydHMpXG4rc3RhdGljIGlubGluZSBpbnQga3ZtX21heF9ldnRjaG5fcG9ydChzdHJ1Y3Qga3ZtICprdm0pXG4re1xuK1x0cmV0dXJuIG1heF9ldnRjaG5fcG9ydChrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKSk7XG4rfVxuK1xuK3N0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaGFzXzY0Yml0X3NoaW5mbyxcbitcdFx0XHQgICAgICAgaW50IG5yX3BvcnRzLCBldnRjaG5fcG9ydF90ICpwb3J0cylcbiB7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlO1xuQEAgLTE0NjMsNyArMTQ5MCw3IEBAIHN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cyxcbiBcdFx0Z290byBvdXRfcmN1O1xuIFxuIFx0cmV0ID0gZmFsc2U7XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSB7XG4rXHRpZiAoaGFzXzY0Yml0X3NoaW5mbykge1xuIFx0XHRzdHJ1Y3Qgc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuIFx0XHRwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fcGVuZGluZztcbiBcdH0gZWxzZSB7XG5AQCAtMTQ4NSw5ICsxNTEyLDEwIEBAIHN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cyxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcbitzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsXG4gXHRcdFx0XHQgdTY0IHBhcmFtLCB1NjQgKnIpXG4ge1xuK1x0Ym9vbCBoYXNfNjRiaXRfc2hpbmZvID0ga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtXHUwMDNla3ZtKTtcbiBcdHN0cnVjdCBzY2hlZF9wb2xsIHNjaGVkX3BvbGw7XG4gXHRldnRjaG5fcG9ydF90IHBvcnQsICpwb3J0cztcbiBcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XG5AQCAtMTQ5Nyw3ICsxNTI1LDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxuIFx0ICAgICEodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4uaHZtX2NvbmZpZy5mbGFncyBcdTAwMjYgS1ZNX1hFTl9IVk1fQ09ORklHX0VWVENITl9TRU5EKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgIWxvbmdtb2RlKSB7XG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiAhaXNfNjRiaXQpIHtcbiBcdFx0c3RydWN0IGNvbXBhdF9zY2hlZF9wb2xsIHNwMzI7XG4gXG4gXHRcdC8qIFNhbml0eSBjaGVjayB0aGF0IHRoZSBjb21wYXQgc3RydWN0IGRlZmluaXRpb24gaXMgY29ycmVjdCAqL1xuQEAgLTE1NDYsMjAgKzE1NzQsMjAgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2NoZWRfcG9sbC5ucl9wb3J0czsgaSsrKSB7XG4tXHRcdGlmIChwb3J0c1tpXSBcdTAwM2U9IG1heF9ldnRjaG5fcG9ydCh2Y3B1LVx1MDAzZWt2bSkpIHtcbitcdFx0aWYgKHBvcnRzW2ldIFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKSB7XG4gXHRcdFx0KnIgPSAtRUlOVkFMO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXHR9XG4gXG4gXHRpZiAoc2NoZWRfcG9sbC5ucl9wb3J0cyA9PSAxKVxuLVx0XHR2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huID0gcG9ydDtcbitcdFx0V1JJVEVfT05DRSh2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huLCBwb3J0KTtcbiBcdGVsc2Vcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLnhlbi5wb2xsX2V2dGNobiA9IC0xO1xuK1x0XHRXUklURV9PTkNFKHZjcHUtXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4sIC0xKTtcbiBcbiBcdHNldF9iaXQodmNwdS1cdTAwM2V2Y3B1X2lkeCwgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4ucG9sbF9tYXNrKTtcbiBcbi1cdGlmICghd2FpdF9wZW5kaW5nX2V2ZW50KHZjcHUsIHNjaGVkX3BvbGwubnJfcG9ydHMsIHBvcnRzKSkge1xuK1x0aWYgKCF3YWl0X3BlbmRpbmdfZXZlbnQodmNwdSwgaGFzXzY0Yml0X3NoaW5mbywgc2NoZWRfcG9sbC5ucl9wb3J0cywgcG9ydHMpKSB7XG4gXHRcdGt2bV9zZXRfbXBfc3RhdGUodmNwdSwgS1ZNX01QX1NUQVRFX0hBTFRFRCk7XG4gXG4gXHRcdGlmIChzY2hlZF9wb2xsLnRpbWVvdXQpXG5AQCAtMTU3NCw3ICsxNjAyLDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxuIFx0XHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9SVU5OQUJMRSk7XG4gXHR9XG4gXG4tXHR2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huID0gMDtcbitcdFdSSVRFX09OQ0UodmNwdS1cdTAwM2VhcmNoLnhlbi5wb2xsX2V2dGNobiwgMCk7XG4gXHQqciA9IDA7XG4gb3V0OlxuIFx0LyogUmVhbGx5LCB0aGlzIGlzIG9ubHkgbmVlZGVkIGluIGNhc2Ugb2YgdGltZW91dCAqL1xuQEAgLTE1OTQsMTIgKzE2MjIsMTIgQEAgc3RhdGljIHZvaWQgY2FuY2VsX2V2dGNobl9wb2xsKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiB9XG4gXG4tc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4rc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsXG4gXHRcdFx0XHQgICBpbnQgY21kLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBTQ0hFRE9QX3BvbGw6XG4tXHRcdGlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBsb25nbW9kZSwgcGFyYW0sIHIpKVxuK1x0XHRpZiAoa3ZtX3hlbl9zY2hlZG9wX3BvbGwodmNwdSwgaXNfNjRiaXQsIHBhcmFtLCByKSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0ZmFsbHRocm91Z2g7XG4gXHRjYXNlIFNDSEVET1BfeWllbGQ6XG5AQCAtMTYxOCw3ICsxNjQ2LDcgQEAgc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyIHtcbiAgICAgdWludDMyX3QgZmxhZ3M7XG4gfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTtcbiBcbi1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLFxuK3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsIGludCBjbWQsXG4gXHRcdFx0XHQgIGludCB2Y3B1X2lkLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciBvbmVzaG90O1xuQEAgLTE2NjIsNyArMTY5MCw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsXG4gXHRcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyLCBmbGFncykgIT1cbiBcdFx0XHQgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpKTtcbiBcbi1cdFx0aWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgcGFyYW0sIFx1MDAyNm9uZXNob3QsIGxvbmdtb2RlID8gc2l6ZW9mKG9uZXNob3QpIDpcbitcdFx0aWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgcGFyYW0sIFx1MDAyNm9uZXNob3QsIGlzXzY0Yml0ID8gc2l6ZW9mKG9uZXNob3QpIDpcbiBcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciksIFx1MDAyNmUpKSB7XG4gXHRcdFx0KnIgPSAtRUZBVUxUO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuQEAgLTE2OTQsNyArMTcyMiw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWludDY0X3QgdGltZW91dCxcbiBcbiBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGJvb2wgbG9uZ21vZGU7XG4rXHRib29sIGlzXzY0Yml0O1xuIFx0dTY0IGlucHV0LCBwYXJhbXNbNl0sIHIgPSAtRU5PU1lTO1xuIFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XG4gXHR1OCBjcGw7XG5AQCAtMTcwNCw4ICsxNzMyLDggQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAgICBrdm1faHZfaHlwZXJjYWxsX2VuYWJsZWQodmNwdSkpXG4gXHRcdHJldHVybiBrdm1faHZfaHlwZXJjYWxsKHZjcHUpO1xuIFxuLVx0bG9uZ21vZGUgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xuLVx0aWYgKCFsb25nbW9kZSkge1xuK1x0aXNfNjRiaXQgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xuK1x0aWYgKCFpc182NGJpdCkge1xuIFx0XHRpbnB1dCA9IGt2bV9lYXhfcmVhZCh2Y3B1KTtcbiBcdFx0cGFyYW1zWzBdID0ga3ZtX2VieF9yZWFkKHZjcHUpO1xuIFx0XHRwYXJhbXNbMV0gPSBrdm1fZWN4X3JlYWQodmNwdSk7XG5AQCAtMTc1MSwxNyArMTc3OSwxNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHZjcHUsIHBhcmFtc1sxXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1Jfc2NoZWRfb3A6XG4tXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGxvbmdtb2RlLCBwYXJhbXNbMF0sXG4rXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGlzXzY0Yml0LCBwYXJhbXNbMF0sXG4gXHRcdFx0XHRcdFx0IHBhcmFtc1sxXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1JfdmNwdV9vcDpcbi1cdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sXG4rXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3ZjcHVfb3AodmNwdSwgaXNfNjRiaXQsIHBhcmFtc1swXSwgcGFyYW1zWzFdLFxuIFx0XHRcdFx0XHRcdHBhcmFtc1syXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1Jfc2V0X3RpbWVyX29wOiB7XG4gXHRcdHU2NCB0aW1lb3V0ID0gcGFyYW1zWzBdO1xuIFx0XHQvKiBJbiAzMi1iaXQgbW9kZSwgdGhlIDY0LWJpdCB0aW1lb3V0IGlzIGluIHR3byAzMi1iaXQgcGFyYW1zLiAqL1xuLVx0XHRpZiAoIWxvbmdtb2RlKVxuK1x0XHRpZiAoIWlzXzY0Yml0KVxuIFx0XHRcdHRpbWVvdXQgfD0gcGFyYW1zWzFdIFx1MDAzY1x1MDAzYyAzMjtcbiBcdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHZjcHUsIHRpbWVvdXQsIFx1MDAyNnIpO1xuIFx0XHRicmVhaztcbkBAIC0xNzc2LDcgKzE4MDQsNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIGhhbmRsZV9pbl91c2Vyc3BhY2U6XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1hFTjtcbiBcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi50eXBlID0gS1ZNX0VYSVRfWEVOX0hDQUxMO1xuLVx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwubG9uZ21vZGUgPSBsb25nbW9kZTtcbitcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi51LmhjYWxsLmxvbmdtb2RlID0gaXNfNjRiaXQ7XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2V4ZW4udS5oY2FsbC5jcGwgPSBjcGw7XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2V4ZW4udS5oY2FsbC5pbnB1dCA9IGlucHV0O1xuIFx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwucGFyYW1zWzBdID0gcGFyYW1zWzBdO1xuQEAgLTE3OTQsNyArMTgyMiw3IEBAIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gc3RhdGljIHZvaWQga3ZtX3hlbl9jaGVja19wb2xsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG9ydClcbiB7XG4tXHRpbnQgcG9sbF9ldnRjaG4gPSB2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huO1xuK1x0aW50IHBvbGxfZXZ0Y2huID0gUkVBRF9PTkNFKHZjcHUtXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4pO1xuIFxuIFx0aWYgKChwb2xsX2V2dGNobiA9PSBwb3J0IHx8IHBvbGxfZXZ0Y2huID09IC0xKSBcdTAwMjZcdTAwMjZcbiBcdCAgICB0ZXN0X2FuZF9jbGVhcl9iaXQodmNwdS1cdTAwM2V2Y3B1X2lkeCwgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4ucG9sbF9tYXNrKSkge1xuQEAgLTE4MTYsOCArMTg0NCw5IEBAIHN0YXRpYyB2b2lkIGt2bV94ZW5fY2hlY2tfcG9sbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBvcnQpXG4gaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZTtcbitcdGJvb2wgaGFzXzY0Yml0X3NoaW5mbyA9IGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pO1xuK1x0dW5zaWduZWQgbG9uZyAqcGVuZGluZ19iaXRzLCAqbWFza19iaXRzLCB2aV9wZW5kaW5nX3NlbF9vZnM7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHR1bnNpZ25lZCBsb25nICpwZW5kaW5nX2JpdHMsICptYXNrX2JpdHM7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHBvcnRfd29yZF9iaXQ7XG4gXHRib29sIGtpY2tfdmNwdSA9IGZhbHNlO1xuQEAgLTE4MzMsNyArMTg2Miw3IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdFdSSVRFX09OQ0UoeGUtXHUwMDNldmNwdV9pZHgsIHZjcHUtXHUwMDNldmNwdV9pZHgpO1xuIFx0fVxuIFxuLVx0aWYgKHhlLVx1MDAzZXBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbitcdGlmICh4ZS1cdTAwM2Vwb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHJjID0gLUVXT1VMREJMT0NLO1xuQEAgLTE4NDQsMTYgKzE4NzMsMjMgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdGlmICgha3ZtX2dwY19jaGVjayhncGMsIFBBR0VfU0laRSkpXG4gXHRcdGdvdG8gb3V0X3JjdTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbitcdGlmIChoYXNfNjRiaXRfc2hpbmZvKSB7XG4gXHRcdHN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4gXHRcdHBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopXHUwMDI2c2hpbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nO1xuIFx0XHRtYXNrX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fbWFzaztcbiBcdFx0cG9ydF93b3JkX2JpdCA9IHhlLVx1MDAzZXBvcnQgLyA2NDtcbitcbitcdFx0dmlfcGVuZGluZ19zZWxfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3BlbmRpbmdfc2VsKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuIFx0XHRwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fcGVuZGluZztcbiBcdFx0bWFza19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZzaGluZm8tXHUwMDNlZXZ0Y2huX21hc2s7XG4gXHRcdHBvcnRfd29yZF9iaXQgPSB4ZS1cdTAwM2Vwb3J0IC8gMzI7XG4rXG4rXHRcdHZpX3BlbmRpbmdfc2VsX29mcyA9IG9mZnNldG9mKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fcGVuZGluZ19zZWwpO1xuK1xuK1x0XHQvKiB0ZXN0X2FuZF9zZXRfYml0KCkgbmVlZHMgNjQtYml0IGFsaWdubWVudCwgYnV0IHRoYXQncyBPSyAqL1xuK1x0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgZXZ0Y2huX3BlbmRpbmcpIFx1MDAyNiA3KTtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtMTg2OSw2ICsxOTA1LDggQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0cmMgPSAtRU5PVENPTk47IC8qIE1hc2tlZCAqL1xuIFx0XHRrdm1feGVuX2NoZWNrX3BvbGxlcih2Y3B1LCB4ZS1cdTAwM2Vwb3J0KTtcbiBcdH0gZWxzZSB7XG4rXHRcdGJvb2wgb2xkO1xuK1xuIFx0XHRyYyA9IDE7IC8qIERlbGl2ZXJlZCB0byB0aGUgYml0bWFwIGluIHNoYXJlZF9pbmZvLiAqL1xuIFx0XHQvKiBOb3cgc3dpdGNoIHRvIHRoZSB2Q1BVJ3MgdmNwdV9pbmZvIHRvIHNldCB0aGUgaW5kZXggYW5kIHBlbmRpbmdfc2VsICovXG4gXHRcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbkBAIC0xODg1LDE5ICsxOTIzLDI5IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdFx0Z290byBvdXRfcmN1O1xuIFx0XHR9XG4gXG4tXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbi1cdFx0XHRzdHJ1Y3QgdmNwdV9pbmZvICp2Y3B1X2luZm8gPSBncGMtXHUwMDNla2h2YTtcbi1cdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCwgXHUwMDI2dmNwdV9pbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCkpIHtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodmNwdV9pbmZvLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4tXHRcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmNwdV9pbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4tXHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnRfd29yZF9iaXQsXG4tXHRcdFx0XHRcdCAgICAgICh1bnNpZ25lZCBsb25nICopXHUwMDI2dmNwdV9pbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCkpIHtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodmNwdV9pbmZvLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4tXHRcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuLVx0XHRcdH1cbitcdFx0LypcbitcdFx0ICogRXhwbGljaXRseSB1c2UgYSAzMi1iaXQgYnRzbCBpbnN0ZWFkIG9mIHRlc3RfYW5kX3NldF9iaXQoKSxcbitcdFx0ICogd2hpY2ggd291bGQgdXNlIGJ0c3Egb24geDg2LTY0LiBUaGUgdmNwdV9pbmZvIGlzIGd1ZXN0LVxuK1x0XHQgKiBjb250cm9sbGVkIGFuZCBvbmx5IHJlcXVpcmVkIHRvIGJlIDMyLWJpdCBhbGlnbmVkLCBzbyBhXG4rXHRcdCAqIDY0LWJpdCBhY2Nlc3MgY291bGQgZ2VuZXJhdGUgYSBzcGxpdC1sb2NrICNBQy5cbitcdFx0ICpcbitcdFx0ICogTm90ZSwgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgdGVzdF9hbmRfc2V0X2JpdCgpIG9uXG4rXHRcdCAqIHBlbmRpbmdfYml0cyBhYm92ZTogdGhhdCBpcyBpbiB0aGUgcGVyLVZNIHNoYXJlZF9pbmZvLCB3aGljaFxuK1x0XHQgKiBpcyBwYWdlIGFsaWduZWQsIHNvIHRoZSBhY2Nlc3MgaXMgZ3VhcmFudGVlZCB0byBiZSA2NC1iaXRcbitcdFx0ICogYWxpZ25lZC5cbitcdFx0ICovXG4rXHRcdG9sZCA9IEdFTl9CSU5BUllfUk1XY2MoTE9DS19QUkVGSVggXCJidHNsXCIsXG4rXHRcdFx0XHQgICAgICAgKih1MzIgKikoZ3BjLVx1MDAzZWtodmEgKyB2aV9wZW5kaW5nX3NlbF9vZnMpLFxuK1x0XHRcdFx0ICAgICAgIGMsIFwiSXJcIiwgcG9ydF93b3JkX2JpdCk7XG4rXHRcdGlmICghb2xkKSB7XG4rXHRcdFx0c3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtXHUwMDNla2h2YTtcbitcbitcdFx0XHQvKiBObyBuZWVkIGZvciBjb21wYXQgaGFuZGxpbmcgKi9cbitcdFx0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSAhPVxuK1x0XHRcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSk7XG4rXG4rXHRcdFx0V1JJVEVfT05DRSh2aS1cdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xuK1x0XHRcdGtpY2tfdmNwdSA9IHRydWU7XG4gXHRcdH1cbiBcbiBcdFx0LyogRm9yIHRoZSBwZXItdkNQVSBsYXBpYyB2ZWN0b3IsIGRlbGl2ZXIgaXQgYXMgTVNJLiAqL1xuQEAgLTE5OTUsNyArMjA0Myw3IEBAIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXG4gXHQvKlxuLVx0ICogRG9uJ3QgY2hlY2sgZm9yIHRoZSBwb3J0IGJlaW5nIHdpdGhpbiByYW5nZSBvZiBtYXhfZXZ0Y2huX3BvcnQoKS5cbitcdCAqIERvbid0IGNoZWNrIGZvciB0aGUgcG9ydCBiZWluZyB3aXRoaW4gcmFuZ2Ugb2Yga3ZtX21heF9ldnRjaG5fcG9ydCgpLlxuIFx0ICogVXNlcnNwYWNlIGNhbiBjb25maWd1cmUgd2hhdCBldmVyIHRhcmdldHMgaXQgbGlrZXM7IGV2ZW50cyBqdXN0IHdvbid0XG4gXHQgKiBiZSBkZWxpdmVyZWQgaWYvd2hpbGUgdGhlIHRhcmdldCBpcyBpbnZhbGlkLCBqdXN0IGxpa2UgdXNlcnNwYWNlIGNhblxuIFx0ICogY29uZmlndXJlIE1TSXMgd2hpY2ggdGFyZ2V0IG5vbi1leGlzdGVudCBBUElDcy5cbkBAIC0yMDA0LDggKzIwNTIsOCBAQCBpbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxuIFx0ICogY2FuIGJlIHJlc3RvcmVkICppbmRlcGVuZGVudGx5KiBvZiBvdGhlciB0aGluZ3MgbGlrZSBjcmVhdGluZyB2Q1BVcyxcbiBcdCAqIHdpdGhvdXQgaW1wb3NpbmcgYW4gb3JkZXJpbmcgZGVwZW5kZW5jeSBvbiB1c2Vyc3BhY2UuICBJbiB0aGlzXG4gXHQgKiBwYXJ0aWN1bGFyIGNhc2UsIHRoZSBwcm9ibGVtYXRpYyBvcmRlcmluZyB3b3VsZCBiZSB3aXRoIHNldHRpbmcgdGhlXG4tXHQgKiBYZW4gJ2xvbmcgbW9kZScgZmxhZywgd2hpY2ggY2hhbmdlcyBtYXhfZXZ0Y2huX3BvcnQoKSB0byBhbGxvdyA0MDk2XG4tXHQgKiBpbnN0ZWFkIG9mIDEwMjQgZXZlbnQgY2hhbm5lbHMuXG4rXHQgKiBYZW4gJ2xvbmcgbW9kZScgZmxhZywgd2hpY2ggY2hhbmdlcyBrdm1fbWF4X2V2dGNobl9wb3J0KCkgdG8gYWxsb3dcbitcdCAqIDQwOTYgaW5zdGVhZCBvZiAxMDI0IGV2ZW50IGNoYW5uZWxzLlxuIFx0ICovXG4gXG4gXHQvKiBXZSBvbmx5IHN1cHBvcnQgMiBsZXZlbCBldmVudCBjaGFubmVscyBmb3Igbm93ICovXG5AQCAtMjA0Miw3ICsyMDkwLDcgQEAgaW50IGt2bV94ZW5faHZtX2V2dGNobl9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pcnFfcm91dGluZ194ZW5fZXZ0Y2huICpcbiBcdHN0cnVjdCBrdm1feGVuX2V2dGNobiBlO1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICghdXhlLVx1MDAzZXBvcnQgfHwgdXhlLVx1MDAzZXBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbitcdGlmICghdXhlLVx1MDAzZXBvcnQgfHwgdXhlLVx1MDAzZXBvcnQgXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0LyogV2Ugb25seSBzdXBwb3J0IDIgbGV2ZWwgZXZlbnQgY2hhbm5lbHMgZm9yIG5vdyAqL1xuQEAgLTIwOTMsNyArMjE0MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX3VwZGF0ZShzdHJ1Y3Qga3ZtICprdm0sXG4gXG4gXHQvKiBQcm90ZWN0IHdyaXRlcyB0byBldnRjaG5mZCBhcyB3ZWxsIGFzIHRoZSBpZHIgbG9va3VwLiAgKi9cbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbi1cdGV2dGNobmZkID0gaWRyX2ZpbmQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCk7XG4rXHRldnRjaG5mZCA9IHhhX2xvYWQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCk7XG4gXG4gXHRyZXQgPSAtRU5PRU5UO1xuIFx0aWYgKCFldnRjaG5mZClcbkBAIC0yMTUyLDcgKzIyMDAsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9hc3NpZ24oc3RydWN0IGt2bSAqa3ZtLFxuIFxuIFx0Y2FzZSBFVlRDSE5TVEFUX2ludGVyZG9tYWluOlxuIFx0XHRpZiAoZGF0YS1cdTAwM2V1LmV2dGNobi5kZWxpdmVyLnBvcnQucG9ydCkge1xuLVx0XHRcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4rXHRcdFx0aWYgKGRhdGEtXHUwMDNldS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQgXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4gXHRcdFx0XHRnb3RvIG91dF9ub2V2ZW50ZmQ7IC8qIC1FSU5WQUwgKi9cbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRldmVudGZkID0gZXZlbnRmZF9jdHhfZmRnZXQoZGF0YS1cdTAwM2V1LmV2dGNobi5kZWxpdmVyLmV2ZW50ZmQuZmQpO1xuQEAgLTIxODcsMTMgKzIyMzUsMTMgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfYXNzaWduKHN0cnVjdCBrdm0gKmt2bSxcbiBcdH1cbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbi1cdHJldCA9IGlkcl9hbGxvYyhcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBldnRjaG5mZCwgcG9ydCwgcG9ydCArIDEsXG4rXHRyZXQgPSB4YV9pbnNlcnQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCwgZXZ0Y2huZmQsXG4gXHRcdFx0R0ZQX0tFUk5FTCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbi1cdGlmIChyZXQgXHUwMDNlPSAwKVxuK1x0aWYgKCFyZXQpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHJldCA9PSAtRU5PU1BDKVxuK1x0aWYgKHJldCA9PSAtRUJVU1kpXG4gXHRcdHJldCA9IC1FRVhJU1Q7XG4gb3V0OlxuIFx0aWYgKGV2ZW50ZmQpXG5AQCAtMjIwOCw3ICsyMjU2LDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfZGVhc3NpZ24oc3RydWN0IGt2bSAqa3ZtLCB1MzIgcG9ydClcbiBcdHN0cnVjdCBldnRjaG5mZCAqZXZ0Y2huZmQ7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XG4tXHRldnRjaG5mZCA9IGlkcl9yZW1vdmUoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCk7XG4rXHRldnRjaG5mZCA9IHhhX2VyYXNlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIHBvcnQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XG4gXG4gXHRpZiAoIWV2dGNobmZkKVxuQEAgLTIyMjQsNyArMjI3Miw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2RlYXNzaWduKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHBvcnQpXG4gc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCBldnRjaG5mZCAqZXZ0Y2huZmQsICoqYWxsX2V2dGNobmZkcztcbi1cdGludCBpO1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuIFx0aW50IG4gPSAwO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4ueGVuX2xvY2spO1xuQEAgLTIyMzQsNyArMjI4Miw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KHN0cnVjdCBrdm0gKmt2bSlcbiBcdCAqIGNyaXRpY2FsIHNlY3Rpb24sIGZpcnN0IGNvbGxlY3QgYWxsIHRoZSBldnRjaG5mZCBvYmplY3RzXG4gXHQgKiBpbiBhbiBhcnJheSBhcyB0aGV5IGFyZSByZW1vdmVkIGZyb20gZXZ0Y2huX3BvcnRzLlxuIFx0ICovXG4tXHRpZHJfZm9yX2VhY2hfZW50cnkoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQsIGkpXG4rXHR4YV9mb3JfZWFjaChcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBpLCBldnRjaG5mZClcbiBcdFx0bisrO1xuIFxuIFx0YWxsX2V2dGNobmZkcyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgZXZ0Y2huZmQgKiwgbik7XG5AQCAtMjI0NCw5ICsyMjkyLDkgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0fVxuIFxuIFx0biA9IDA7XG4tXHRpZHJfZm9yX2VhY2hfZW50cnkoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQsIGkpIHtcbitcdHhhX2Zvcl9lYWNoKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGksIGV2dGNobmZkKSB7XG4gXHRcdGFsbF9ldnRjaG5mZHNbbisrXSA9IGV2dGNobmZkO1xuLVx0XHRpZHJfcmVtb3ZlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLVx1MDAzZXNlbmRfcG9ydCk7XG4rXHRcdHhhX2VyYXNlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLVx1MDAzZXNlbmRfcG9ydCk7XG4gXHR9XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbiBcbkBAIC0yMjcwLDcgKzIzMTgsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2V0YXR0cl9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YVxuIFx0aWYgKGRhdGEtXHUwMDNldS5ldnRjaG4uZmxhZ3MgPT0gS1ZNX1hFTl9FVlRDSE5fUkVTRVQpXG4gXHRcdHJldHVybiBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoa3ZtKTtcbiBcbi1cdGlmICghcG9ydCB8fCBwb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4rXHRpZiAoIXBvcnQgfHwgcG9ydCBcdTAwM2U9IGt2bV9tYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoZGF0YS1cdTAwM2V1LmV2dGNobi5mbGFncyA9PSBLVk1fWEVOX0VWVENITl9ERUFTU0lHTilcbkBAIC0yMjk3LDEyICsyMzQ1LDEwIEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfZXZ0Y2huX3NlbmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcGFyYW0sIHU2NCAqcilcbiBcdH1cbiBcbiBcdC8qXG4tXHQgKiBldnRjaG5mZCBpcyBwcm90ZWN0ZWQgYnkga3ZtLVx1MDAzZXNyY3U7IHRoZSBpZHIgbG9va3VwIGluc3RlYWRcbi1cdCAqIGlzIHByb3RlY3RlZCBieSBSQ1UuXG4rXHQgKiBldnRjaG5mZCBpcyBwcm90ZWN0ZWQgYnkga3ZtLVx1MDAzZXNyY3U7IHRoZSB4YV9sb2FkIGlzIFJDVS1zYWZlXG4rXHQgKiBpbnRlcm5hbGx5LCBubyBleHBsaWNpdCByY3VfcmVhZF9sb2NrKCkgbmVlZGVkLlxuIFx0ICovXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRldnRjaG5mZCA9IGlkcl9maW5kKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgc2VuZC5wb3J0KTtcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0ZXZ0Y2huZmQgPSB4YV9sb2FkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgc2VuZC5wb3J0KTtcbiBcdGlmICghZXZ0Y2huZmQpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC0yMzQ5LDIzICsyMzk1LDIzIEBAIHZvaWQga3ZtX3hlbl9kZXN0cm95X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHZvaWQga3ZtX3hlbl9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRtdXRleF9pbml0KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XG4tXHRpZHJfaW5pdChcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTtcbitcdHhhX2luaXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cyk7XG4gXHRrdm1fZ3BjX2luaXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZSwga3ZtKTtcbiB9XG4gXG4gdm9pZCBrdm1feGVuX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCBldnRjaG5mZCAqZXZ0Y2huZmQ7XG4tXHRpbnQgaTtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbiBcdGt2bV9ncGNfZGVhY3RpdmF0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlKTtcbiBcbi1cdGlkcl9mb3JfZWFjaF9lbnRyeShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBldnRjaG5mZCwgaSkge1xuK1x0eGFfZm9yX2VhY2goXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgaSwgZXZ0Y2huZmQpIHtcbiBcdFx0aWYgKCFldnRjaG5mZC1cdTAwM2VkZWxpdmVyLnBvcnQucG9ydClcbiBcdFx0XHRldmVudGZkX2N0eF9wdXQoZXZ0Y2huZmQtXHUwMDNlZGVsaXZlci5ldmVudGZkLmN0eCk7XG4gXHRcdGtmcmVlKGV2dGNobmZkKTtcbiBcdH1cbi1cdGlkcl9kZXN0cm95KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMpO1xuK1x0eGFfZGVzdHJveShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTtcbiBcbiBcdGlmIChrdm0tXHUwMDNlYXJjaC54ZW4uaHZtX2NvbmZpZy5tc3IpXG4gXHRcdHN0YXRpY19icmFuY2hfc2xvd19kZWNfZGVmZXJyZWQoXHUwMDI2a3ZtX3hlbl9lbmFibGVkKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmggYi9hcmNoL3g4Ni9rdm0veGVuLmhcbmluZGV4IGYzNzI4NTU4NTdhODguLjlkMDRlMzUwYmRiMWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmhcbisrKyBiL2FyY2gveDg2L2t2bS94ZW4uaFxuQEAgLTIzNSw2ICsyMzUsMTEgQEAgc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbyB7XG4gI2RlZmluZSBDT01QQVRfRVZUQ0hOXzJMX05SX0NIQU5ORUxTICg4ICpcdFx0XHRcdFxcXG4gXHRcdFx0XHQgICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgXFxcbiBcdFx0XHRcdFx0XHQgICBldnRjaG5fcGVuZGluZykpXG4rXG4rLyogTGF0Y2hlZCBWTS13aWRlIG1vZGU7IHRoZSBLVk0gZXF1aXZhbGVudCBvZiBYZW4ncyAhaGFzXzMyYml0X3NoaW5mbygpLiAqL1xuKyNkZWZpbmUga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkgXFxcbitcdChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IFJFQURfT05DRSgoa3ZtKS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpKVxuK1xuIHN0cnVjdCBjb21wYXRfdmNwdV9ydW5zdGF0ZV9pbmZvIHtcbiAgICAgaW50IHN0YXRlO1xuICAgICB1aW50NjRfdCBzdGF0ZV9lbnRyeV90aW1lO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggMDNiZmM5Mjg2NGI2ZS4uM2RkMDQ2MDVmMmU1NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtODU1LDYgKzg1NSw4IEBAIHN0cnVjdCBrdm0ge1xuIFx0Z2ZuX3QgbW11X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQ7XG4gXHRnZm5fdCBtbXVfaW52YWxpZGF0ZV9yYW5nZV9lbmQ7XG4gXG4rXHR1bnNpZ25lZCBsb25nIGdwY19pbnZhbGlkYXRlX3NlcTtcbitcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlcztcbiBcdHU2NCBtYW51YWxfZGlydHlfbG9nX3Byb3RlY3Q7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RlbnRyeTtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggNjVlYjI2YTA1MjBkOC4uMTA4ZDQyYzVjMWQ2YSAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcbisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbkBAIC04MTMsNiArODEzLDE2IEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sXG4gXG4gXHQvKiBQYWlycyB3aXRoIHRoZSBpbmNyZW1lbnQgaW4gcmFuZ2Vfc3RhcnQoKS4gKi9cbiBcdHNwaW5fbG9jayhcdTAwMjZrdm0tXHUwMDNlbW5faW52YWxpZGF0ZV9sb2NrKTtcbitcdGt2bS1cdTAwM2VncGNfaW52YWxpZGF0ZV9zZXErKztcbitcbitcdC8qXG4rXHQgKiBBcyB3aXRoIHRoZSBNTVUgc2VxdWVuY2UgY291bnRlciBhbmQgbW11X2ludmFsaWRhdGVfaW5fcHJvZ3Jlc3MsIHRoZVxuK1x0ICogR1BDIHNlcXVlbmNlIGluY3JlYXNlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgdGhlIGludmFsaWRhdGUgY291bnRcbitcdCAqIGdvZXMgdG8gemVyby4gIFBhaXJzIHdpdGggdGhlIHNtcF9ybWIoKSBpblxuK1x0ICogbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKCkuXG4rXHQgKi9cbitcdHNtcF93bWIoKTtcbitcbiBcdGlmICghV0FSTl9PTl9PTkNFKCFrdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpKVxuIFx0XHQtLWt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcbiBcdHdha2UgPSAha3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50O1xuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMgYi92aXJ0L2t2bS9wZm5jYWNoZS5jXG5pbmRleCA3MjhkMmMxYjQ4OGE4Li4zNjU5Njg2Yjk3YzI0IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vcGZuY2FjaGUuY1xuKysrIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xuQEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMgdm9pZCBncGNfdW5tYXAoa3ZtX3Bmbl90IHBmbiwgdm9pZCAqa2h2YSlcbiAjZW5kaWZcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NlcSlcbitzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBncGNfc2VxKVxuIHtcbiBcdC8qXG4gXHQgKiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBhY3RzIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXNcbkBAIC0xMzYsMjAgKzEzNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc1xuIFx0ICogTm90ZSwgaXQgZG9lcyBub3QgbWF0dGVyIHRoYXQgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnRcbiBcdCAqIGlzIG5vdCBwcm90ZWN0ZWQgYnkgZ3BjLVx1MDAzZWxvY2suICBJdCBpcyBndWFyYW50ZWVkIHRvXG4gXHQgKiBiZSBlbGV2YXRlZCBiZWZvcmUgdGhlIG1tdV9ub3RpZmllciBhY3F1aXJlcyBncGMtXHUwMDNlbG9jaywgYW5kXG4tXHQgKiBpc24ndCBkcm9wcGVkIHVudGlsIGFmdGVyIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyB1cGRhdGVkLlxuK1x0ICogaXNuJ3QgZHJvcHBlZCB1bnRpbCBhZnRlciBncGNfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC5cbiBcdCAqL1xuIFx0aWYgKGt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHQvKlxuIFx0ICogRW5zdXJlIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGlzIHJlYWQgYmVmb3JlXG4tXHQgKiBtbXVfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxuLVx0ICogbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGVcbitcdCAqIGdwY19pbnZhbGlkYXRlX3NlcS4gIFRoaXMgcGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluXG4rXHQgKiBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGVcbiBcdCAqIG9sZCAobm9uLXplcm8pIHZhbHVlIG9mIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IG9yIHRoZVxuLVx0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW11X2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxuK1x0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxuIFx0ICovXG4gXHRzbXBfcm1iKCk7XG4tXHRyZXR1cm4ga3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcSAhPSBtbXVfc2VxO1xuK1x0cmV0dXJuIGt2bS1cdTAwM2VncGNfaW52YWxpZGF0ZV9zZXEgIT0gZ3BjX3NlcTtcbiB9XG4gXG4gc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG5AQCAtMTU4LDcgKzE1OCw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuIFx0dm9pZCAqb2xkX2todmEgPSAodm9pZCAqKVBBR0VfQUxJR05fRE9XTigodWludHB0cl90KWdwYy1cdTAwM2VraHZhKTtcbiBcdGt2bV9wZm5fdCBuZXdfcGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XG4gXHR2b2lkICpuZXdfa2h2YSA9IE5VTEw7XG4tXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4rXHR1bnNpZ25lZCBsb25nIGdwY19zZXE7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcbiBcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XG5AQCAtMTgxLDcgKzE4MSw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuIFx0Z3BjLVx1MDAzZXZhbGlkID0gZmFsc2U7XG4gXG4gXHRkbyB7XG4tXHRcdG1tdV9zZXEgPSBncGMtXHUwMDNla3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcbitcdFx0Z3BjX3NlcSA9IGdwYy1cdTAwM2Vrdm0tXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxO1xuIFx0XHRzbXBfcm1iKCk7XG4gXG4gXHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2Z3BjLVx1MDAzZWxvY2spO1xuQEAgLTIzMiw3ICsyMzIsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcdFx0ICogYXR0ZW1wdGluZyB0byByZWZyZXNoLlxuIFx0XHQgKi9cbiBcdFx0V0FSTl9PTl9PTkNFKGdwYy1cdTAwM2V2YWxpZCk7XG4tXHR9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLVx1MDAzZWt2bSwgbW11X3NlcSkpO1xuK1x0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cdTAwM2Vrdm0sIGdwY19zZXEpKTtcbiBcbiBcdGdwYy1cdTAwM2V2YWxpZCA9IHRydWU7XG4gXHRncGMtXHUwMDNlcGZuID0gbmV3X3BmbjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjM4OjIzLjk2OTI0NzgxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgzODc5ODcwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gUGF0Y2ggU2VyaWVzIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBwYXRjaCBzZXJpZXMgcmV2ZWFscyBzb21lIGludGVyZXN0aW5nIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkOiBgYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaGAsIGBhcmNoL3g4Ni9rdm0veGVuLmNgLCBgYXJjaC94ODYva3ZtL3hlbi5oYCwgYGluY2x1ZGUvbGludXgva3ZtX2hvc3QuaGAsIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCwgYW5kIGB2aXJ0L2t2bS9wZm5jYWNoZS5jYC4gSW1tZWRpYXRlbHksIEkgc2VlIEtWTSBpbnZvbHZlbWVudCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gWGVuIGVtdWxhdGlvbiB3aXRoaW4gdGhlIHg4NiBLVk0gY29udGV4dCwgYXMgd2VsbCBhcyB0aGUgZ2VuZXJpYyBLVk0gcGZuY2FjaGUgYW5kIE1NVSBub3RpZmllciBsb2dpYy4gVGhpcyBwaXF1ZXMgbXkgaW50ZXJlc3Qg4oCTIEtWTSBpcyBhIGNvcmUgY29tcG9uZW50IG9mIHZpcnR1YWxpemF0aW9uLCBtYWtpbmcgaXQgYSBwb3RlbnRpYWxseSBmcnVpdGZ1bCB0YXJnZXQgZm9yIGZ1enppbmcuIEl0J3MgYWNjZXNzaWJsZSB3aXRoaW4gUUVNVSwgVk1zIHdpdGggS1ZNLCBhbmQgcG90ZW50aWFsbHkgZXZlbiB0aHJvdWdoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvciB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHdpdGggYC9kZXYva3ZtYC5cblxuTm93LCBkaWdnaW5nIGludG8gdGhlIGZ1bmN0aW9uYWwgY2hhbmdlczogV2UgaGF2ZSBhbiBYQXJyYXkgY29udmVyc2lvbiByZXBsYWNpbmcgYW4gSURSIGZvciBYZW4gZXZlbnQgY2hhbm5lbHMgaW4gS1ZNIFhlbiBlbXVsYXRpb24gKGBldnRjaG5fcG9ydHNgKSwgc29tZSBhbGlnbm1lbnQgY2hlY2tzIGZvciBHUEEvSFZBIHdoZW4gYWN0aXZhdGluZyB0aGUgYHZjcHVfaW5mb2AgY2FjaGUgKGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgKSwgYW5kIGEgc3BsaXQgb2YgYG1tdV9pbnZhbGlkYXRlX3NlcWAgaW50byBgZ3BjX2ludmFsaWRhdGVfc2VxYCBmb3IgdGhlIEdQQy4gVGhlcmUncyBhbHNvIG1lbnRpb24gb2YgYGJ0c2xgIGZvciBhdG9taWMgYml0bWFwIG9wZXJhdGlvbnMsIGFpbWluZyB0byBhdm9pZCB0aG9zZSBwZXNreSBzcGxpdC1sb2NrICNBQyBmYXVsdHMgb24gdW5hbGlnbmVkIGB2Y3B1X2luZm9gIGBldnRjaG5fcGVuZGluZ19zZWxgIGFjY2Vzc2VzLiBUaGVyZSdzIGEgYGd1YXJkKHNyY3UpYCB1c2FnZSwgYW5kIHNvbWUgZml4ZXMvcmVmYWN0b3JpbmdzIHJlbGF0ZWQgdG8gdGhvc2UgNjQvMzItYml0IFhlbiBzaGFyZWQgaW5mbyBtb2RlIGNoZWNrcyAoYGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mb2ApLlxuXG5Gcm9tIGEgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZSwgYWxsIG9mIHRoZXNlIGNoYW5nZXMgdG91Y2ggY29yZSBrZXJuZWwgbG9naWMgd2l0aGluIEtWTSwgc3BlY2lmaWNhbGx5IFhlbiBlbXVsYXRpb24uIE1vcmVvdmVyLCB0aGVyZSdzIGNvbmN1cnJlbmN5IGltcGxpY2F0aW9ucyBoZXJlLCB3aGljaCBpcyBhbHdheXMgYSByZWQgZmxhZyB0aGF0IGRyYXdzIG1lIHRvd2FyZHMgZnV6emluZywgc28gSSdsbCBzZXQgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5OZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCB0byBrbm93IHdoaWNoIEtjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIGFsbCB0aGlzIGZ1bmN0aW9uYWxpdHksIHNvIEknbGwgY2hlY2sgYEtWTWAsIGBLVk1fWEVOYCwgYW5kIGFueSBvdGhlciByZWxldmFudCBvcHRpb25zLiBJJ2xsIHVzZSBhIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgYW5kIGB2aXJ0L2t2bS9LY29uZmlnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDozODozMi4zNTcyMzc1NDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4MjgwMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzM6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA4OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOC1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMzOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mzg6MzIuNDA2MDY5MjU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk2NTA2MzAwNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIEtWTSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgS1ZNIGlzIGNvbmZpZ3VyZWQgaW4gdGhpcyB4ODYgZW52aXJvbm1lbnQsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBYZW4gYW5kIHRoZSBJbnRlbC9BTUQgaW1wbGVtZW50YXRpb25zLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBhbmQgZm9jdXMgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIGBjb25maWcgS1ZNX1hFTmAsIGBjb25maWcgS1ZNYCwgYW5kIHRoZW4gdGhlIHByb2Nlc3Nvci1zcGVjaWZpYyBvcHRpb25zLCBgS1ZNX0lOVEVMYCBhbmQgYEtWTV9BTURgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhlc2Ugb3B0aW9ucyBpbmZsdWVuY2UgZWFjaCBvdGhlci4gV2hlcmUgZG9lcyB0aGUgWGVuIGh5cGVydmlzb3IgZml0IGluIHdpdGggYSBLVk0gc2V0dXAgaGVyZT8gQW5kIGhvdyBkbyB3ZSBjaG9vc2UgYmV0d2VlbiBJbnRlbCBhbmQgQU1EIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnM/IExldCdzIHRyYWNlIHRocm91Z2ggdGhlc2UgZGVmaW5pdGlvbnMgYW5kIGZpZ3VyZSBvdXQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIEtWTSBidWlsZCBzdHJhdGVneSBmb3IgdGhpcyBwbGF0Zm9ybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDozODo1Mi4wNTY3MDI1MjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEtWTSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdHNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG4gICA3OlxcdFxcbiAgIDg6XFx0bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbiAgIDk6XFx0XFx0Ym9vbCBcXFwiVmlydHVhbGl6YXRpb25cXFwiXFxuICAxMDpcXHRcXHRkZWZhdWx0IHlcXG4gIDExOlxcdFxcdGhlbHBcXG4gIDEyOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIHVzaW5nIHlvdXIgTGludXggaG9zdCB0byBydW4gb3RoZXJcXG4gIDEzOlxcdFxcdCAgb3BlcmF0aW5nIHN5c3RlbXMgaW5zaWRlIHZpcnR1YWwgbWFjaGluZXMgKGd1ZXN0cykuXFxuICAxNDpcXHRcXHQgIFRoaXMgb3B0aW9uIGFsb25lIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZC5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0aWYgVklSVFVBTElaQVRJT05cXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIEtWTV9YODZcXG4gIDIxOlxcdFxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4gIDIyOlxcdFxcdHNlbGVjdCBLVk1fQ09NTU9OXFxuICAyMzpcXHRcXHRzZWxlY3QgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xcbiAgMjQ6XFx0XFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcXG4gIDI1OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXFxuICAyNjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUEZOQ0FDSEVcXG4gIDI3OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX1RTT1xcbiAgMjg6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxcbiAgMjk6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcXG4gIDMwOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xcbiAgMzE6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTVxcbiAgMzI6XFx0XFx0c2VsZWN0IFZIT1NUX1RBU0tcXG4gIDMzOlxcdFxcdHNlbGVjdCBLVk1fQVNZTkNfUEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBVU0VSX1JFVFVSTl9OT1RJRklFUlxcbiAgMzU6XFx0XFx0c2VsZWN0IEtWTV9NTUlPXFxuICAzNjpcXHRcXHRzZWxlY3QgU0NIRURfSU5GT1xcbiAgMzc6XFx0XFx0c2VsZWN0IFBFUkZfRVZFTlRTXFxuICAzODpcXHRcXHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFNcXG4gIDM5OlxcdFxcdHNlbGVjdCBQRVJGX0dVRVNUX01FRElBVEVEX1BNVVxcbiAgNDA6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX01TSVxcbiAgNDE6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcXG4gIDQyOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9OT19QT0xMXFxuICA0MzpcXHRcXHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcXG4gIDQ0OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcXG4gIDQ1OlxcdFxcdHNlbGVjdCBLVk1fVkZJT1xcbiAgNDY6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX1BNX05PVElGSUVSIGlmIFBNXFxuICA0NzpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcXG4gIDQ4OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxuICA0OTpcXHRcXHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcXG4gIDUwOlxcdFxcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XFxuICA1MTpcXHRcXG4gIDUyOlxcdGNvbmZpZyBLVk1cXG4gIDUzOlxcdFxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuICA1NDpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9MT0NBTF9BUElDXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIFN1cHBvcnQgaG9zdGluZyBmdWxseSB2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyBoYXJkd2FyZVxcbiAgNTc6XFx0XFx0ICB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiAgWW91IHdpbGwgbmVlZCBhIGZhaXJseSByZWNlbnRcXG4gIDU4OlxcdFxcdCAgcHJvY2Vzc29yIGVxdWlwcGVkIHdpdGggdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gWW91IHdpbGwgYWxzb1xcbiAgNTk6XFx0XFx0ICBuZWVkIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBvZiB0aGUgcHJvY2Vzc29yIG1vZHVsZXMgYmVsb3cuXFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgdGhyb3VnaFxcbiAgNjI6XFx0XFx0ICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS5cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDY1OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLlxcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2ODpcXHRcXG4gIDY5OlxcdGNvbmZpZyBLVk1fV0VSUk9SXFxuICA3MDpcXHRcXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuICA3MTpcXHRcXHQjIERpc2FsbG93IEtWTSdzIC1XZXJyb3IgaWYgS0FTQU4gaXMgZW5hYmxlZCwgZS5nLiB0byBndWFyZCBhZ2FpbnN0XFxuICA3MjpcXHRcXHQjIHJhbmRvbWl6ZWQgY29uZmlncyBmcm9tIHNlbGVjdGluZyBLVk1fV0VSUk9SPXksIHdoaWNoIGRvZXNuJ3QgcGxheVxcbiAgNzM6XFx0XFx0IyBuaWNlIHdpdGggS0FTQU4uICBLQVNBTiBidWlsZHMgZ2VuZXJhdGVzIHdhcm5pbmdzIGZvciB0aGUgZGVmYXVsdFxcbiAgNzQ6XFx0XFx0IyBGUkFNRV9XQVJOLCBpLmUuIEtWTV9XRVJST1I9eSB3aXRoIEtBU0FOPXkgcmVxdWlyZXMgc3BlY2lhbCB0dW5pbmcuXFxuICA3NTpcXHRcXHQjIEJ1aWxkaW5nIEtWTSB3aXRoIC1XZXJyb3IgYW5kIEtBU0FOIGlzIHN0aWxsIGRvYWJsZSB2aWEgZW5hYmxpbmdcXG4gIDc2OlxcdFxcdCMgdGhlIGtlcm5lbC13aWRlIFdFUlJPUj15LlxcbiAgNzc6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2IFxcdTAwMjZcXHUwMDI2ICgoRVhQRVJUIFxcdTAwMjZcXHUwMDI2ICFLQVNBTikgfHwgV0VSUk9SKVxcbiAgNzg6XFx0XFx0aGVscFxcbiAgNzk6XFx0XFx0ICBBZGQgLVdlcnJvciB0byB0aGUgYnVpbGQgZmxhZ3MgZm9yIEtWTS5cXG4gIDgwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDozODo1Mi4wNTY4MjUxODRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzY2NDkzMjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBpbiBgYXJjaC94ODYva3ZtL0tjb25maWdgIGNvbmNlcm5pbmcgYEtWTV9YRU5gOlxuXG4qKkV4YW1pbmluZyBLVk1fWEVOIGluIGFyY2gveDg2L2t2bS9LY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGxpbmVzIDE5MC0yMjUgb2YgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYEtWTV9YRU5gLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcywgbWF5YmUgc29tZSBkZWZhdWx0IHZhbHVlcywgYW5kIHBvdGVudGlhbGx5IGEgZGVzY3JpcHRpb24gb2Ygd2hhdCBlbmFibGluZyB0aGlzIG9wdGlvbiBhY3R1YWxseSAqZG9lcyogaW4gdGhlIGNvbnRleHQgb2YgS1ZNIG9uIHg4Ni4gSSdtIGFzc3VtaW5nIHRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSBpbnRlcmZhY2Ugb3IgaW50ZWdyYXRpb24gcG9pbnQgYmV0d2VlbiBLVk0gYW5kIFhlbiwgcHJlc3VtYWJseSBhbGxvd2luZyBLVk0gdG8gcnVuIGFzIGEgZ3Vlc3QgaW5zaWRlIGEgWGVuIGh5cGVydmlzb3IsIHdoaWNoIGlzIGEgcHJldHR5IGNvbW1vbiB1c2UtY2FzZS4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgY2x1ZXMgYWJvdXQgd2hldGhlciBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hhdCBvdGhlciBmZWF0dXJlcyBpdCBtaWdodCBkZXBlbmQgb24gKGUuZy4sIHNwZWNpZmljIENQVSBmZWF0dXJlcywgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucyksIGFuZCBhbnkgY2F2ZWF0cyBvciB3YXJuaW5ncyB0aGF0IG1pZ2h0IGJlIGluY2x1ZGVkIGluIHRoZSBjb21tZW50cy4gSSdsbCBhbHNvIHRyeSB0byB1bmRlcnN0YW5kIGlmIGl0J3MgY29uc2lkZXJlZCBleHBlcmltZW50YWwgb3Igc3RhYmxlLiBVbmRlcnN0YW5kaW5nIHRoaXMgY29uZmlndXJhdGlvbiBpcyBpbXBvcnRhbnQsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9yIGludGVncmF0aW5nIGRpZmZlcmVudCBoeXBlcnZpc29ycyB3aXRoaW4gYSBzaW5nbGUgc3lzdGVtLiBJJ20ga2VlbiB0byBzZWUgaWYgdGhlcmUgaXMgYW55IG1lbnRpb24gb2Ygd2hldGhlciB0aGlzIGlzIGRlcGVuZGVudCBvbiB0aGUgYFhFTmAgY29uZmlndXJhdGlvbiBvcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDM3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDozODo1NS44MjMzMjA1MjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTA6XFx0XFx0ICBmaXJtd2FyZSB0byBpbXBsZW1lbnQgVUVGSSBzZWN1cmUgYm9vdC5cXG4gMTkxOlxcdFxcbiAxOTI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAxOTM6XFx0XFxuIDE5NDpcXHRjb25maWcgS1ZNX0hZUEVSVlxcbiAxOTU6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbiAxOTY6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2XFxuIDE5NzpcXHRcXHRkZWZhdWx0IHlcXG4gMTk4OlxcdFxcdGhlbHBcXG4gMTk5OlxcdFxcdCAgUHJvdmlkZXMgS1ZNIHN1cHBvcnQgZm9yIGVtdWxhdGluZyBNaWNyb3NvZnQgSHlwZXItVi4gIFRoaXMgYWxsb3dzIEtWTVxcbiAyMDA6XFx0XFx0ICB0byBleHBvc2UgYSBzdWJzZXQgb2YgdGhlIHBhcmF2aXJ0dWFsaXplZCBpbnRlcmZhY2VzIGRlZmluZWQgaW4gdGhlXFxuIDIwMTpcXHRcXHQgIEh5cGVyLVYgSHlwZXJ2aXNvciBUb3AtTGV2ZWwgRnVuY3Rpb25hbCBTcGVjaWZpY2F0aW9uIChUTEZTKTpcXG4gMjAyOlxcdFxcdCAgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvdmlydHVhbGl6YXRpb24vaHlwZXItdi1vbi13aW5kb3dzL3JlZmVyZW5jZS90bGZzXFxuIDIwMzpcXHRcXHQgIFRoZXNlIGludGVyZmFjZXMgYXJlIHJlcXVpcmVkIGZvciB0aGUgY29ycmVjdCBhbmQgcGVyZm9ybWFudCBmdW5jdGlvbmluZ1xcbiAyMDQ6XFx0XFx0ICBvZiBXaW5kb3dzIGFuZCBIeXBlci1WIGd1ZXN0cyBvbiBLVk0uXFxuIDIwNTpcXHRcXG4gMjA2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgXFxcIllcXFwiLlxcbiAyMDc6XFx0XFxuIDIwODpcXHRjb25maWcgS1ZNX1hFTlxcbiAyMDk6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuIDIxMDpcXHRcXHRkZXBlbmRzIG9uIEtWTV9YODZcXG4gMjExOlxcdFxcdGhlbHBcXG4gMjEyOlxcdFxcdCAgUHJvdmlkZXMgS1ZNIHN1cHBvcnQgZm9yIHRoZSBob3N0aW5nIFhlbiBIVk0gZ3Vlc3RzIGFuZFxcbiAyMTM6XFx0XFx0ICBwYXNzaW5nIFhlbiBoeXBlcmNhbGxzIHRvIHVzZXJzcGFjZS5cXG4gMjE0OlxcdFxcbiAyMTU6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IFxcXCJOXFxcIi5cXG4gMjE2OlxcdFxcbiAyMTc6XFx0Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG4gMjE4OlxcdFxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuIDIxOTpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTFxcbiAyMjA6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2XFxuIDIyMTpcXHRcXHRkZXBlbmRzIG9uIEVYUEVSVFxcbiAyMjI6XFx0XFx0aGVscFxcbiAyMjM6XFx0XFx0ICBFbmFibGVzIHJ1bnRpbWUgYXNzZXJ0aW9ucyBpbiBLVk0ncyBNTVUgdGhhdCBhcmUgdG9vIGNvc3RseSB0byBlbmFibGVcXG4gMjI0OlxcdFxcdCAgaW4gYW55dGhpbmcgcmVtb3RlbHkgcmVzZW1ibGluZyBhIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsIGUuZy4gdGhpc1xcbiAyMjU6XFx0XFx0ICBnYXRlcyBjb2RlIHRoYXQgdmVyaWZpZXMgYSB0by1iZS1mcmVlZCBwYWdlIHRhYmxlIGRvZXNuJ3QgaGF2ZSBhbnlcXG4gMjI2OlxcdFxcdCAgcHJlc2VudCBTUFRFcy5cXG4gMjI3OlxcdFxcbiAyMjg6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IFxcXCJOXFxcIi5cXG4gMjI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDozODo1NS44MjMzOTU5OTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDM4OTI3ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzIHNwZWNpZmljIGNvZGUgc25pcHBldDpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSBDb21waWxhdGlvbiBvbiB4ODYqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBLVk0gYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIFhlbi4gIFdlIGFscmVhZHkgdW5kZXJzdGFuZCBzb21lIG9mIHRoZSBiYXNpY3MsIGJ1dCBpdCdzIHRpbWUgdG8gZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB4ZW4ub2AgYW5kIGBwZm5jYWNoZS5vYCBhcmUgYWN0dWFsbHkgY29tcGlsZWQgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlJ3MgS1ZNIGNvbnRleHQuICBLbm93aW5nIHRoZSBleGFjdCBidWlsZCBwcm9jZXNzIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gdGhlaXIgZGVwZW5kZW5jaWVzLCBhbnkgc3BlY2lhbCBjb21waWxlciBmbGFncywgYW5kIGhvdyB0aGV5IHVsdGltYXRlbHkgaW50ZWdyYXRlLiAgVGhlcmVmb3JlLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBvcGVuIGFuZCBjYXJlZnVsbHkgYW5hbHl6ZSB0aGUgYGFyY2gveDg2L2t2bS9NYWtlZmlsZWAuICBUaGF0J3Mgd2hlcmUgdGhlIGNvbXBpbGF0aW9uIHJ1bGVzIGZvciB0aGVzZSBvYmplY3RzIHdpbGwgYmUgZGVmaW5lZCwgYW5kIGl0J3MgdGhlIGtleSB0byB0cnVseSB1bmRlcnN0YW5kaW5nIHRoZWlyIGJ1aWxkIHByb2Nlc3MuIFRoaXMgc2hvdWxkIHByb3ZpZGUgdGhlIGxvdyBsZXZlbCBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMDksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjM5OjAwLjg2MjMyNzc1MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEwNzg1NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhlbi5vfHBmbmNhY2hlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9NYWtlZmlsZT0xMz1rdm0tJChDT05GSUdfS1ZNX0hZUEVSVikgKz0gaHlwZXJ2Lm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MTQ6a3ZtLSQoQ09ORklHX0tWTV9YRU4pXFx0Kz0geGVuLm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMTUta3ZtLSQoQ09ORklHX0tWTV9TTU0pXFx0Kz0gc21tLm9cXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0yNC0jaW5jbHVkZSBcXHUwMDNjeGVuL2ludGVyZmFjZS9zY2hlZC5oXFx1MDAzZVxcbmFyY2gveDg2L2t2bS94ZW4uYzoyNTojaW5jbHVkZSBcXHUwMDNjeGVuL3hlbi1vcHMuaFxcdTAwM2VcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjM5OjAxLjE3MzExODg4OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDk5MzY1MTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIGBwZm5jYWNoZS5jYCBhbmQgYGt2bV9tYWluLmNgIHdpdGhpbiB0aGUgS1ZNIHZpcnR1YWxpemF0aW9uIG1vZHVsZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBNYWtlZmlsZXMgYW5kIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBhdCBgdmlydC9rdm0vTWFrZWZpbGVgIGFuZCBgdmlydC9rdm0vS2NvbmZpZ2AuIFRob3NlIGFyZSB0eXBpY2FsbHkgd2hlcmUgdGhlIGJ1aWxkIHJ1bGVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVzaWRlIGZvciBLVk0tc3BlY2lmaWMgc291cmNlIGZpbGVzLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gZGVwZW5kZW5jaWVzLCBidWlsZCBmbGFncywgYW5kIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpbnZvbHZlZCBpbiBnZXR0aW5nIHRob3NlIHR3byBmaWxlcyBjb21waWxlZCBhbmQgbGlua2VkLiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdHJhY2UgdGhlIGJ1aWxkIHByb2Nlc3MsIHNvIGxldCBtZSBkaXZlIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQ2NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjM5OjAzLjI3MjQ4Nzk2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkxNTM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZm5jYWNoZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL01ha2VmaWxlLmt2bT0xMz1rdm0tJChDT05GSUdfSEFWRV9LVk1fRElSVFlfUklORykgKz0gJChLVk0pL2RpcnR5X3Jpbmcub1xcbnZpcnQva3ZtL01ha2VmaWxlLmt2bToxNDprdm0tJChDT05GSUdfSEFWRV9LVk1fUEZOQ0FDSEUpICs9ICQoS1ZNKS9wZm5jYWNoZS5vXFxudmlydC9rdm0vTWFrZWZpbGUua3ZtLTE1LWt2bS0kKENPTkZJR19LVk1fR1VFU1RfTUVNRkQpICs9ICQoS1ZNKS9ndWVzdF9tZW1mZC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjM5OjAzLjMxODQwODU5OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzU3MDAxMDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0tWGVuIEludGVncmF0aW9uIENvbmZpZ3VyYXRpb24gYW5kIENvZGUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGBLVk1gLCBhbmQgcG90ZW50aWFsbHkgYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgLCBhbG9uZyB3aXRoIGBLVk1fWDg2YC4gIENydWNpYWxseSwgdGhlcmUncyBgS1ZNX1hFTmAsIHdoaWNoIGRlcGVuZHMgb24gYEtWTV9YODZgLiAgSSBzZWUgdGhhdCBgS1ZNX1g4NmAgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBpZiBhbnkgb2YgYEtWTV9JTlRFTGAsIGBLVk1fQU1EYCwgb3IganVzdCBgS1ZNYCBhcmUgZGVmaW5lZC4gU3BlY2lmaWNhbGx5LCBgY29uZmlnIEtWTV9YRU5gIGlzIGEgYm9vbCBvcHRpb24sIGFuZCBpdCdzIHVuZGVyIGBpZiBWSVJUVUFMSVpBVElPTmAuIFNvIEkgbmVlZCBib3RoIGBLVk1gIGFuZCBgS1ZNX1hFTmAgKGFzIHdlbGwgYXMgYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgKS5cblxuTm93LCBvbnRvIHRoZSBjb2RlIGNoYW5nZXMuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSB1c2VkLiBJIHNlZSBhIHBhdGNoIG1vZGlmeWluZyBzeW1ib2xzIGFjcm9zcyBhIGZldyBmaWxlcy4gTGV0J3MgbG9vayBhdCBgYXJjaC94ODYva3ZtL3hlbi5jYC4gVGhlcmUgYXJlIHF1aXRlIGEgZmV3IGNoYW5nZXMgaGVyZS4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9uIG5hbWVzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gSSBzZWUgYSBtaXggb2Ygc3RhdGljIGFuZCBub24tc3RhdGljIGZ1bmN0aW9ucyBiZWluZyBhbHRlcmVkLlxuXG5JdCBsb29rcyBsaWtlIHRoaXMgYWZmZWN0cyBhIHJhbmdlIG9mIFhlbi1zcGVjaWZpYyBmdW5jdGlvbmFsaXRpZXM6IHNoYXJlZCBpbmZvcm1hdGlvbiBpbml0aWFsaXphdGlvbiwgdXBkYXRpbmcgZ3Vlc3QgcnVuc3RhdGUsIGluamVjdGluZyBldmVudHMsIGNoZWNraW5nIGZvciBpbnRlcnJ1cHRzLCBzZXR0aW5nIFZDUFUgYXR0cmlidXRlcywgY29tcGxldGluZyBoeXBlcmNhbGxzLCBzY2hlZHVsaW5nIG9wZXJhdGlvbnMsIGhhbmRsaW5nIGV2ZW50IGNoYW5uZWxzLCBhbmQgVk0gaW5pdGlhbGl6YXRpb24vZGVzdHJ1Y3Rpb24uIFRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGJlY2F1c2UgdGhleSBhcmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIHZhcmlvdXMgZnVuY3Rpb25hbGl0aWVzIGJlaW5nIGNoYW5nZWQuIFRoZSBzdGF0aWMgZnVuY3Rpb25zIHdpbGwgYmUgdXNlZnVsIHRvIHVuZGVyc3RhbmQgaG93IGFuZCB3aGVyZSB0aGUgZnVuY3Rpb25zIGFyZSB1c2VkLlxuXG5UaGVuIHRoZXJlJ3MgYSBzbWFsbGVyIGNoYW5nZSBpbiBgdmlydC9rdm0va3ZtX21haW4uY2Agd2hlcmUgYSBzdGF0aWMgZnVuY3Rpb24gcmVsYXRlZCB0byBNTVUgaW52YWxpZGF0aW9uIGlzIGJlaW5nIG1vZGlmaWVkLiBGaW5hbGx5LCB0aGVyZSBhcmUgYWxzbyBzb21lIGNoYW5nZXMgaW4gYHZpcnQva3ZtL3BmbmNhY2hlLmNgLiBTcGVjaWZpY2FsbHksIGBodmFfdG9fcGZuX3JldHJ5YCBpcyBzdGF0aWMsIHdoaWNoIGlzIGNhbGxlZCBpbiBga3ZtX2dwY19yZWZyZXNoYCBhbmQgYGt2bV9ncGNfYWN0aXZhdGVgLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyBpbiBgcGZuY2FjaGUuY2AuIFRoaXMgY291bGQgYmUgaW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGNhdXNpbmcgdGhlIHJldHJ5IGNvbmRpdGlvbiBhbmQgd2h5IGl0J3MgbmVjZXNzYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODgxOCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDozOTowOS4wNzU0MTMyNDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODE5OTIzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGt2bV9ncGN8XnZvaWQga3ZtX2dwY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9wZm5jYWNoZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL3BmbmNhY2hlLmM9MjU2PXN0YXRpYyBpbnQgX19rdm1fZ3BjX3JlZnJlc2goc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIHVodmEpXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM2NS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjM2NjppbnQga3ZtX2dwY19yZWZyZXNoKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHVuc2lnbmVkIGxvbmcgbGVuKVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzY3LXtcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzg0LVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6Mzg1OnZvaWQga3ZtX2dwY19pbml0KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHN0cnVjdCBrdm0gKmt2bSlcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM4Ni17XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTM5Nz1zdGF0aWMgaW50IF9fa3ZtX2dwY19hY3RpdmF0ZShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSxcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDI2LVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDI3OmludCBrdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBsZW4pXFxudmlydC9rdm0vcGZuY2FjaGUuYy00Mjgte1xcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy00MzgtXFxudmlydC9rdm0vcGZuY2FjaGUuYzo0Mzk6aW50IGt2bV9ncGNfYWN0aXZhdGVfaHZhKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHVuc2lnbmVkIGxvbmcgdWh2YSwgdW5zaWduZWQgbG9uZyBsZW4pXFxudmlydC9rdm0vcGZuY2FjaGUuYy00NDAte1xcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy00NDYtXFxudmlydC9rdm0vcGZuY2FjaGUuYzo0NDc6dm9pZCBrdm1fZ3BjX2RlYWN0aXZhdGUoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ0OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjM5OjA5LjI1MzYyMDc3N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTQ4NzQ2NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgSW50ZXJhY3Rpb25zIEJldHdlZW4gS1ZNIGFuZCBYZW4gaW4gdGhlIHg4NiBBcmNoaXRlY3R1cmUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBLVk0gaW50ZXJhY3RzIHdpdGggWGVuLCBzcGVjaWZpY2FsbHkgaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBhcmNoL3g4Ni9rdm0veGVuLmNgIGFuZCBgdmlydC9rdm0vcGZuY2FjaGUuY2AuIFNlZW1zIGxpa2UgdGhlIGZpcnN0IGZpbGUgaXMgdGhlIG1vcmUgbGlrZWx5IGNhbmRpZGF0ZSBnaXZlbiB0aGUgbmFtaW5nLlxuXG5JbiBgYXJjaC94ODYva3ZtL3hlbi5jYCwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgc3RhbmQgb3V0IGFzIHBvdGVudGlhbGx5IHJlbGV2YW50IHRvIHRoZSBpbnRlZ3JhdGlvbjpcblxuKiAgIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2A6IFRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBldmVudCBpbmplY3Rpb24gZnJvbSB0aGUgWGVuIGh5cGVydmlzb3IgaW50byB0aGUgS1ZNIGd1ZXN0LlxuKiAgIGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGA6IFRoaXMgc3VnZ2VzdHMgYSBtZWNoYW5pc20gZm9yIHF1ZXJ5aW5nIGlmIHRoZXJlIGFyZSBwZW5kaW5nIGludGVycnVwdHMgcmVsYXRlZCB0byBYZW4uXG4qICAgYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmA6IFNvdW5kcyBsaWtlIHNldHRpbmcgdkNQVSBhdHRyaWJ1dGVzIHRocm91Z2ggWGVuLlxuKiAgIGBrdm1feGVuX2h5cGVyY2FsbGA6IFRoaXMgbGlrZWx5IGRlYWxzIHdpdGggWGVuIGh5cGVyY2FsbHMsIGEgZnVuZGFtZW50YWwgaW50ZXJmYWNlIGZvciBjb21tdW5pY2F0aW9uLlxuKiAgIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGA6IFRoaXMgbG9va3MgbGlrZSBhbiBvcHRpbWl6YXRpb24gZm9yIHNldHRpbmcgZXZlbnQgY2hhbm5lbHMuXG4qICAgYGt2bV94ZW5fc2V0dXBfZXZ0Y2huYDogVGhpcyBpcyBwcm9iYWJseSB0aGUgc2V0dXAgcm91dGluZSBmb3IgdGhlc2UgY2hhbm5lbHMuXG4qICAgYGt2bV94ZW5faHZtX2V2dGNobl9zZW5kYDogRGVmaW5pdGVseSBzb3VuZHMgcmVsYXRlZCB0byBzZW5kaW5nIGV2ZW50cyB0aHJvdWdoIHRoZSBIVk0gZXZlbnQgY2hhbm5lbC5cbiogICBga3ZtX3hlbl9odm1fc2V0X2F0dHJgOiBUaGlzIGlzIHByb2JhYmx5IHNldHRpbmcgSFZNIGF0dHJpYnV0ZXMgdGhyb3VnaCBYZW4uIEl0IGFsc28gY2FsbHMgYGt2bV94ZW5fc2V0YXR0cl9ldnRjaG5gLCBzbyBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBldmVudCBjaGFubmVsIGF0dHJpYnV0ZXMgYXJlIGJlaW5nIHNldC5cblxuSSdsbCBrZWVwIGEgY2xvc2UgZXllIG9uIHRoZXNlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgd29yayB0b2dldGhlciwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIGlzc3VlcyBvciBpbmVmZmljaWVuY2llcyBpbiB0aGUgaW50ZXJmYWNlIGJldHdlZW4gS1ZNIGFuZCBYZW4uIEkgd2lsbCBuZWVkIHRvIGxvb2sgaW50byBgcGZuY2FjaGUuY2AgYXMgd2VsbCB0byBzZWUgaG93IGl0IG1pZ2h0IGJlIHVzZWQgdG8gb3B0aW1pemUgdGhlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTk4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjM5OjEyLjgwMjM2OTExN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MDg4MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3hlbl9zZXRhdHRyX2V2dGNoblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0veGVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3hlbi5jPTMzPXN0YXRpYyBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huKHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSk7XFxuYXJjaC94ODYva3ZtL3hlbi5jOjM0OnN0YXRpYyBpbnQga3ZtX3hlbl9zZXRhdHRyX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMzUtc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwYXJhbSwgdTY0ICpyKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz03NzU9aW50IGt2bV94ZW5faHZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtODUxLVxcdGNhc2UgS1ZNX1hFTl9BVFRSX1RZUEVfRVZUQ0hOOlxcbmFyY2gveDg2L2t2bS94ZW4uYzo4NTI6XFx0XFx0ciA9IGt2bV94ZW5fc2V0YXR0cl9ldnRjaG4oa3ZtLCBkYXRhKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmMtODUzLVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTIyNzI9c3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTIzMTMtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjIzMTQ6c3RhdGljIGludCBrdm1feGVuX3NldGF0dHJfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpXFxuYXJjaC94ODYva3ZtL3hlbi5jLTIzMTUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDozOToxMi44NDc4ODI5NzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIwMzA4NzAyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgS1ZNLVhlbiBDaGFuZ2VzIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBrdm1feGVuX2h2bV9zZXRfYXR0cmAgaXMgYW4gZXhwb3J0ZWQgZnVuY3Rpb24gY2FsbGVkIHZpYSB0aGUgYEtWTV9YRU5fSFZNX1NFVF9BVFRSYCBpb2N0bC4gU2ltaWxhcmx5LCBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCBoYW5kbGVzIHRoZSBgS1ZNX1hFTl9WQ1BVX1NFVF9BVFRSYCBpb2N0bCwgYW5kIGBrdm1feGVuX2h5cGVyY2FsbGAgZGVhbHMgd2l0aCBndWVzdCBYZW4gaHlwZXJjYWxscy4gV2UgYWxzbyBoYXZlIGBrdm1fZ3BjX3JlZnJlc2hgLCBga3ZtX2dwY19hY3RpdmF0ZWAsIGFuZCBga3ZtX2dwY19hY3RpdmF0ZV9odmFgIGluIGBwZm5jYWNoZS5jYCB0aGF0IGFyZSBpbXBvcnRhbnQuXG5cbkknbGwgc3RhcnQgYnkgdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQga2V5IGZ1bmN0aW9ucyBsaWtlIGBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZGAsIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIGBrdm1feGVuX3NldHVwX2V2dGNobmAsIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AsIGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGAsIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgLCBhbmQgYGt2bV94ZW5faHlwZXJjYWxsYC4gSSdsbCBhbHNvIGdsYW5jZSBvdmVyIHRoZSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtYXkgYmUgbW9kaWZpZWQuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgbW9kaWZpY2F0aW9ucy5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhpcyBkaWZmLiBGaXJzdCwgaW4gYGFyY2gveDg2L2t2bS94ZW4uY2AsIHRoZXJlJ3MgYSBsb3Qgb2Ygd29yayByZWxhdGVkIHRvIHRoZSBzaGFyZWQgaW5mbyBzdHJ1Y3R1cmUgYW5kIGl0cyA2NC1iaXQgc3RhdHVzLiAgQ3J1Y2lhbGx5LCB0aGVyZSBhcmUgY2hhbmdlcyB0byBob3cgaW50ZXJydXB0cyBhcmUgaW5qZWN0ZWQsIGluY2x1ZGluZyBhdG9taWMgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIHJlZCBmbGFnLiBJIHNlZSB0aGUgdXNlIG9mIGF0b21pYyBvcGVyYXRpb25zIChgYXRvbWljNjRfb3JgLCBgYXRvbWljX29yYCwgYGF0b21pYzY0X2FuZG5vdGAsIGBhdG9taWNfYW5kbm90YCkgaW5zdGVhZCBvZiBpbmxpbmUgYXNzZW1ibHkuIFRoaXMgc3VnZ2VzdHMgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyByZWxhdGVkIHRvIGludGVycnVwdCBpbmplY3Rpb24gdGhhdCAqY291bGQqIGJlIGV4cGxvaXRlZC4gIFRoZXJlJ3MgYWxzbyBhbGlnbm1lbnQgY2hlY2tzIGluIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBHUEEgYW5kIEhWQSBhbGlnbm1lbnQsIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBmdXp6aW5nLiBUaGUgcmVuYW1pbmcgb2YgYGxvbmdtb2RlYCB0byBgaXNfNjRiaXRgIGlzIGxlc3MgY29uY2VybmluZy4gIFRoZSBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIGNoYW5nZSwgcmVwbGFjaW5nIHRoZSBiaXQgb3BlcmF0aW9uIHdpdGggYGJ0c2xgLCB0byBhdm9pZCB0aGUgc3BsaXQtbG9jayAjQUMgaXMgbm90ZXdvcnRoeTsgcG90ZW50aWFsIGZvciB1bmFsaWduZWQgYWNjZXNzZXMgdG8gY2F1c2UgcHJvYmxlbXMuIFRoZSBzaGlmdCBmcm9tIGBpZHJgIHRvIGB4YXJyYXlgIGZvciBgZXZ0Y2huX3BvcnRzYCBhbHNvIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2sgYXMgaXQgdG91Y2hlcyBjcml0aWNhbCBldmVudCBjaGFubmVsIG1hbmFnZW1lbnQuXG5cbkluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCwgSSBub3RpY2UgY2hhbmdlcyByZWxhdGVkIHRvIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYCwgc3BlY2lmaWNhbGx5IHRoZSBhZGRpdGlvbiBvZiBgZ3BjX2ludmFsaWRhdGVfc2VxYCBhbmQgYHNtcF93bWIoKWAuIFRoaXMgaW5kaWNhdGVzIGEgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBwb2ludC4gSW4gYHZpcnQva3ZtL3BmbmNhY2hlLmNgLCB0aGUgdXNlIG9mIGBncGNfc2VxYCBhbmQgYGt2bS1cdTAwM2VncGNfaW52YWxpZGF0ZV9zZXFgIGluIGBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGVgIGFuZCBgaHZhX3RvX3Bmbl9yZXRyeWAgaW5kaWNhdGVzIHRoZXJlIGhhcyBiZWVuIGEgZ2xvYmFsIHBhZ2UgY2FjaGUgaW52YWxpZGF0aW9uIHNlcXVlbmNlIGFkZGVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZXNlIHNlcXVlbmNlcyBhcmUgbWFpbnRhaW5lZCBhY3Jvc3MgQ1BVcy5cblxuVGhlIGNvcmUgb2YgdGhlc2UgY2hhbmdlcyBpcyBpbiBLVk0ncyBYZW4gZW11bGF0aW9uIGFuZCB0aGUgcGZuY2FjaGUsIHdoaWNoIGFyZSAqcHJpbWUqIHRhcmdldHMgZm9yIGZ1enppbmcuIFRoaXMgdG91Y2hlcyBjb25jdXJyZW5jeSwgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgY29ycnVwdGlvbiwgbG9ja2luZywgaW9jdGwgaGFuZGxpbmcsIGFuZCBoeXBlcmNhbGxzLiBEZWZpbml0ZWx5LCB3b3J0aHdoaWxlLlxuXG5UaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIChgS1ZNYCwgYEtWTV9JTlRFTGAvYEtWTV9BTURgLCBgS1ZNX1g4NmAsIGBLVk1fWEVOYCkgYXJlIGFsbCByZWxldmFudCBhbmQgbmVlZCB0byBiZSBlbmFibGVkIGR1cmluZyBmdXp6aW5nLlxuXG5NeSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgd2lsbCBiZTogYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAsIGBrdm1feGVuX2h2bV9zZXRfYXR0cmAsIGBrdm1feGVuX2h5cGVyY2FsbGAsIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AsIGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGAsIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIGBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZGAsIGBrdm1fZ3BjX3JlZnJlc2hgLCBga3ZtX2dwY19hY3RpdmF0ZWAsIGFuZCBga3ZtX2dwY19hY3RpdmF0ZV9odmFgLlxuXG5JJ20gY29uZmlkZW50IHdlIGhhdmUgYSBzb2xpZCBzZXQgb2YgdGFyZ2V0cyBmb3IgZnV6emluZywgYW5kIEknbSByZWFkeSB0byBwcm9jZWVkIHdpdGggc2V0dGluZyB1cCB0aGUgZnV6emluZyBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3MDksIk91dHB1dFRva2VucyI6MzA2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDozOToyNC44Nzg3NTU2MjdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzYxNzk3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9YODZcIixcbiAgICBcIktWTV9YRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1feGVuX3ZjcHVfc2V0X2F0dHJcIixcbiAgICBcImt2bV94ZW5faHZtX3NldF9hdHRyXCIsXG4gICAgXCJrdm1feGVuX2h5cGVyY2FsbFwiLFxuICAgIFwia3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNcIixcbiAgICBcIl9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0XCIsXG4gICAgXCJrdm1feGVuX3NldF9ldnRjaG5fZmFzdFwiLFxuICAgIFwia3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRcIixcbiAgICBcImt2bV9ncGNfcmVmcmVzaFwiLFxuICAgIFwia3ZtX2dwY19hY3RpdmF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgYW5kIGNvbmN1cnJlbmN5LWNyaXRpY2FsIGNoYW5nZXMgdG8gS1ZNJ3MgWGVuIGVtdWxhdGlvbiBhbmQgZ2ZuX3RvX3Bmbl9jYWNoZSAoR1BDKSBzdWJzeXN0ZW0uIFRoZXNlIGluY2x1ZGUgbWlncmF0aW5nIFhlbiBldmVudCBjaGFubmVsIHN0b3JhZ2UgZnJvbSBJRFIgdG8gWEFycmF5LCBlbmZvcmNpbmcgYWxpZ25tZW50IGNoZWNrcyBmb3IgdkNQVSBpbmZvIEdQQS9IVkEsIHVzaW5nIGV4cGxpY2l0IDMyLWJpdCBhdG9taWMgYml0b3BzIHRvIHByZXZlbnQgc3BsaXQtbG9jayBBQyBleGNlcHRpb25zIG9uIHVuYWxpZ25lZCBzdHJ1Y3R1cmVzLCBpbnRyb2R1Y2luZyBTUkNVIGxvY2tpbmcgaW4gX19rdm1feGVuX2hhc19pbnRlcnJ1cHQsIGFuZCBzZXBhcmF0aW5nIEdQQyBpbnZhbGlkYXRpb24gc2VxdWVuY2luZyBmcm9tIGdlbmVyYWwgTU1VIGludmFsaWRhdGlvbiBzZXF1ZW5jaW5nLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgdmlydHVhbGl6YXRpb24gaW9jdGxzLCBoeXBlcmNhbGxzLCBhbmQgZXZlbnQgY2hhbm5lbCBkZWxpdmVyeSBtZWNoYW5pc21zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJLVk1fWDg2XCIsXG4gICAgXCJLVk1fWEVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3hlbl92Y3B1X3NldF9hdHRyXCIsXG4gICAgXCJrdm1feGVuX2h2bV9zZXRfYXR0clwiLFxuICAgIFwia3ZtX3hlbl9oeXBlcmNhbGxcIixcbiAgICBcImt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzXCIsXG4gICAgXCJfX2t2bV94ZW5faGFzX2ludGVycnVwdFwiLFxuICAgIFwia3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RcIixcbiAgICBcImt2bV94ZW5faHZtX2V2dGNobl9zZW5kXCIsXG4gICAgXCJrdm1fZ3BjX3JlZnJlc2hcIixcbiAgICBcImt2bV9ncGNfYWN0aXZhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGFuZCBjb25jdXJyZW5jeS1jcml0aWNhbCBjaGFuZ2VzIHRvIEtWTSdzIFhlbiBlbXVsYXRpb24gYW5kIGdmbl90b19wZm5fY2FjaGUgKEdQQykgc3Vic3lzdGVtLiBUaGVzZSBpbmNsdWRlIG1pZ3JhdGluZyBYZW4gZXZlbnQgY2hhbm5lbCBzdG9yYWdlIGZyb20gSURSIHRvIFhBcnJheSwgZW5mb3JjaW5nIGFsaWdubWVudCBjaGVja3MgZm9yIHZDUFUgaW5mbyBHUEEvSFZBLCB1c2luZyBleHBsaWNpdCAzMi1iaXQgYXRvbWljIGJpdG9wcyB0byBwcmV2ZW50IHNwbGl0LWxvY2sgQUMgZXhjZXB0aW9ucyBvbiB1bmFsaWduZWQgc3RydWN0dXJlcywgaW50cm9kdWNpbmcgU1JDVSBsb2NraW5nIGluIF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0LCBhbmQgc2VwYXJhdGluZyBHUEMgaW52YWxpZGF0aW9uIHNlcXVlbmNpbmcgZnJvbSBnZW5lcmFsIE1NVSBpbnZhbGlkYXRpb24gc2VxdWVuY2luZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIHZpcnR1YWxpemF0aW9uIGlvY3RscywgaHlwZXJjYWxscywgYW5kIGV2ZW50IGNoYW5uZWwgZGVsaXZlcnkgbWVjaGFuaXNtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mzk6MjQuOTYyMzgxNTY0WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODM2NTQyODczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mzk6MjQuOTYzMDA2MjQ0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTgzNTkxNDI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJ3MgWGVuIGVtdWxhdGlvbiBhbmQgR0ZOLXRvLVBGTiBjYWNoZSBpbnZhbGlkYXRpb24gbG9naWMuIFNwZWNpZmljYWxseSwgaXQ6XFxuMS4gUmVwbGFjZXMgdGhlIElEUiBkYXRhIHN0cnVjdHVyZSB3aXRoIFhBcnJheSBmb3IgZXZlbnQgY2hhbm5lbCBwb3J0IHRyYWNraW5nIChgZXZ0Y2huX3BvcnRzYCkuXFxuMi4gSW50cm9kdWNlcyBhIGRlZGljYXRlZCBzZXF1ZW5jZSBjb3VudGVyIChgZ3BjX2ludmFsaWRhdGVfc2VxYCkgaW4gYHBmbmNhY2hlLmNgIGFuZCBga3ZtX21haW4uY2AgdG8gcHJvcGVybHkgdHJhY2sgR1BDIGludmFsaWRhdGlvbiBldmVudHMuXFxuMy4gRml4ZXMgcG90ZW50aWFsIHNwbGl0LWxvY2sgYCNBQ2AgZXhjZXB0aW9ucyBieSBjaGVja2luZyBHUEEvSFZBIDMyLWJpdCBhbGlnbm1lbnQgaW4gYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAgYW5kIHVzaW5nIDMyLWJpdCBhdG9taWMgYml0b3BzIGZvciBgdmlfcGVuZGluZ19zZWxgLlxcbjQuIEZpeGVzIFNSQ1UgbG9ja2luZyBpbiBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgIGFuZCBhdG9taWMgcmVhZHMvd3JpdGVzIGZvciBgcG9sbF9ldnRjaG5gLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gTWVtb3J5IHNhZmV0eSBhbmQgY29uY3VycmVuY3kgY29uY2VybnMgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGxvY2tpbmcsIHVzZS1hZnRlci1mcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMzZTAzZmYzYjhjMzc5ZDhiMzI4MjBjOTllYmMwMmQ4MDJlMzAzYjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDA0OjM4OjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDY4M2JiOGJmNDNhOTQuLjNhZjczOTVjMjQzMGEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMTYsNiArMTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9wYXJhLmhcdTAwM2VcbkBAIC0xMTEzLDcgKzExMTQsNyBAQCBzdHJ1Y3Qga3ZtX3hlbiB7XG4gXHRib29sIHJ1bnN0YXRlX3VwZGF0ZV9mbGFnO1xuIFx0dTggdXBjYWxsX3ZlY3RvcjtcbiBcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlIHNoaW5mb19jYWNoZTtcbi1cdHN0cnVjdCBpZHIgZXZ0Y2huX3BvcnRzO1xuK1x0c3RydWN0IHhhcnJheSBldnRjaG5fcG9ydHM7XG4gXHR1bnNpZ25lZCBsb25nIHBvbGxfbWFza1tCSVRTX1RPX0xPTkdTKEtWTV9NQVhfVkNQVVMpXTtcbiBcbiBcdHN0cnVjdCBrdm1feGVuX2h2bV9jb25maWcgaHZtX2NvbmZpZztcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmMgYi9hcmNoL3g4Ni9rdm0veGVuLmNcbmluZGV4IDk5OGNkY2I2YWEzMDMuLjcxODM5NjM0MGQzYzEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmNcbisrKyBiL2FyY2gveDg2L2t2bS94ZW4uY1xuQEAgLTczLDcgKzczLDcgQEAgc3RhdGljIGludCBrdm1feGVuX3NoYXJlZF9pbmZvX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBzaGFyZWRfaW5mbywgd2MpICE9IDB4YzAwKTtcbiBcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2hhcmVkX2luZm8sIHdjX3NlY19oaSkgIT0gMHhjMGMpO1xuIFxuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xuK1x0aWYgKGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pKSB7XG4gXHRcdHN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4gXG4gXHRcdHdjX3NlY19oaSA9IFx1MDAyNnNoaW5mby1cdTAwM2V3Y19zZWNfaGk7XG5AQCAtMzg5LDcgKzM4OSw3IEBAIHN0YXRpYyB2b2lkIGt2bV94ZW5fdXBkYXRlX3J1bnN0YXRlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdiwgYm9vbCBhdG9taWMpXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sIHRpbWUpICE9XG4gXHRcdCAgICAgc2l6ZW9mKHZ4LVx1MDAzZXJ1bnN0YXRlX3RpbWVzKSk7XG4gXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiB2LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbitcdGlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8odi1cdTAwM2Vrdm0pKSB7XG4gXHRcdHVzZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8pO1xuIFx0XHR0aW1lc19vZnMgPSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvLFxuIFx0XHRcdFx0ICAgICBzdGF0ZV9lbnRyeV90aW1lKTtcbkBAIC02NzYsMjggKzY3NiwzMiBAQCB2b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdilcbiBcdH1cbiBcbiBcdC8qIE5vdyBncGMtXHUwMDNla2h2YSBpcyBhIHZhbGlkIGtlcm5lbCBhZGRyZXNzIGZvciB0aGUgdmNwdV9pbmZvICovXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiB2LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbitcdGlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8odi1cdTAwM2Vrdm0pKSB7XG4gXHRcdHN0cnVjdCB2Y3B1X2luZm8gKnZpID0gZ3BjLVx1MDAzZWtodmE7XG4rXHRcdHZvaWQgKnZpX3BlbmRpbmdfc2VsID0gXHUwMDI2dmktXHUwMDNlZXZ0Y2huX3BlbmRpbmdfc2VsO1xuIFxuLVx0XHRhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggXCJvcnEgJTAsICUxXFxuXCJcbi1cdFx0XHQgICAgIFwibm90cSAlMFxcblwiXG4tXHRcdFx0ICAgICBMT0NLX1BSRUZJWCBcImFuZHEgJTAsICUyXFxuXCJcbi1cdFx0XHQgICAgIDogXCI9clwiIChldnRjaG5fcGVuZGluZ19zZWwpLFxuLVx0XHRcdCAgICAgICBcIittXCIgKHZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCksXG4tXHRcdFx0ICAgICAgIFwiK21cIiAodi1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpXG4tXHRcdFx0ICAgICA6IFwiMFwiIChldnRjaG5fcGVuZGluZ19zZWwpKTtcbitcdFx0aWYgKElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpdmlfcGVuZGluZ19zZWwsIHNpemVvZih1NjQpKSkge1xuK1x0XHRcdGF0b21pYzY0X29yKGV2dGNobl9wZW5kaW5nX3NlbCwgdmlfcGVuZGluZ19zZWwpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGF0b21pY19vcihldnRjaG5fcGVuZGluZ19zZWwsIHZpX3BlbmRpbmdfc2VsKTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFRoZSBjYXN0IGtlZXBzIHRoZSBzaGlmdCB3ZWxsLWRlZmluZWQgb24gMzItYml0LFxuK1x0XHRcdCAqIHdoZXJlIGV2dGNobl9wZW5kaW5nX3NlbCBpcyAzMiBiaXRzIHdpZGUgYW5kIHRoaXNcbitcdFx0XHQgKiBicmFuY2ggaXMgdW5yZWFjaGFibGUgYW55d2F5ICh0aGlzIGlzIGluc2lkZVxuK1x0XHRcdCAqIGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbygpLCB3aGljaCBpcyBnYXRlZCBvblxuK1x0XHRcdCAqIElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSkuXG4rXHRcdFx0ICovXG4rXHRcdFx0YXRvbWljX29yKCh1NjQpZXZ0Y2huX3BlbmRpbmdfc2VsIFx1MDAzZVx1MDAzZSAzMixcbitcdFx0XHRcdCAgdmlfcGVuZGluZ19zZWwgKyA0KTtcbitcdFx0fVxuK1xuK1x0XHRhdG9taWM2NF9hbmRub3QoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKVx1MDAyNnYtXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKTtcbiBcdFx0V1JJVEVfT05DRSh2aS1cdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xuIFx0fSBlbHNlIHtcbi1cdFx0dTMyIGV2dGNobl9wZW5kaW5nX3NlbDMyID0gZXZ0Y2huX3BlbmRpbmdfc2VsO1xuIFx0XHRzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmkgPSBncGMtXHUwMDNla2h2YTtcbiBcbi1cdFx0YXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYIFwib3JsICUwLCAlMVxcblwiXG4tXHRcdFx0ICAgICBcIm5vdGwgJTBcXG5cIlxuLVx0XHRcdCAgICAgTE9DS19QUkVGSVggXCJhbmRsICUwLCAlMlxcblwiXG4tXHRcdFx0ICAgICA6IFwiPXJcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpLFxuLVx0XHRcdCAgICAgICBcIittXCIgKHZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCksXG4tXHRcdFx0ICAgICAgIFwiK21cIiAodi1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpXG4tXHRcdFx0ICAgICA6IFwiMFwiIChldnRjaG5fcGVuZGluZ19zZWwzMikpO1xuK1x0XHRhdG9taWNfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKVx1MDAyNnZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCk7XG4rXHRcdGF0b21pY19hbmRub3QoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKVx1MDAyNnYtXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKTtcbiBcdFx0V1JJVEVfT05DRSh2aS1cdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xuIFx0fVxuIFxuQEAgLTcyOCw2ICs3MzIsMTYgQEAgaW50IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdilcbiBcdEJVSUxEX0JVR19PTihzaXplb2YocmMpICE9XG4gXHRcdCAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpKTtcbiBcbitcdC8qXG4rXHQgKiBrdm1fZ3BjX2NoZWNrKCkgY2hlY2tzIHRoZSBtZW1zbG90IGdlbmVyYXRpb24sIHNvIGt2bS1cdTAwM2VzcmN1IG11c3QgYmVcbitcdCAqIGhlbGQuIE1vc3QgY2FsbGVycyBob2xkIGl0IGFscmVhZHksIGJ1dCB0aGlzIGlzIGFsc28gcmVhY2hlZCBmcm9tXG4rXHQgKiBrdm1fZW11bGF0ZV9oYWx0KCkgb24gdGhlIFZNLUV4aXQgcGF0aCBhbmQgZnJvbSBrdm1fdmNwdV9ibG9jaygpLFxuK1x0ICogd2hlcmUgdmNwdV9lbnRlcl9ndWVzdCgpIGhhcyBhbHJlYWR5IGRyb3BwZWQgdGhlIHZDUFUncyBTUkNVIGxvY2suXG4rXHQgKiBUYWtpbmcgU1JDVSBkb2VzIG5vdCBzbGVlcCwgc28gaXQgaXMgc2FmZSBldmVuIGluIHRoZSBhdG9taWMgY2FzZVxuK1x0ICogd2hpY2ggaXMgaGFuZGxlZCBiZWxvdy5cbitcdCAqL1xuK1x0Z3VhcmQoc3JjdSkoXHUwMDI2di1cdTAwM2Vrdm0tXHUwMDNlc3JjdSk7XG4rXG4gXHRyZWFkX2xvY2tfaXJxc2F2ZShcdTAwMjZncGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0d2hpbGUgKCFrdm1fZ3BjX2NoZWNrKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkge1xuIFx0XHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdwYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG5AQCAtOTQxLDYgKzk1NSwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFxuK1x0XHRcdHIgPSAtRU5YSU87XG4rXHRcdFx0aWYgKCFJU19BTElHTkVEKGRhdGEtXHUwMDNldS5ncGEsIHNpemVvZih1MzIpKSlcbitcdFx0XHRcdGJyZWFrO1xuK1xuIFx0XHRcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pbmZvX2NhY2hlLFxuIFx0XHRcdFx0XHQgICAgIGRhdGEtXHUwMDNldS5ncGEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7XG4gXHRcdH0gZWxzZSB7XG5AQCAtOTUwLDYgKzk2OCwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFxuK1x0XHRcdHIgPSAtRU5YSU87XG4rXHRcdFx0aWYgKCFJU19BTElHTkVEKGRhdGEtXHUwMDNldS5odmEsIHNpemVvZih1MzIpKSlcbitcdFx0XHRcdGJyZWFrO1xuK1xuIFx0XHRcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlX2h2YShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZSxcbiBcdFx0XHRcdFx0XHQgZGF0YS1cdTAwM2V1Lmh2YSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTtcbiBcdFx0fVxuQEAgLTk5Myw3ICsxMDE1LDcgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSlcbiBcdFx0ICogYWRkcmVzcywgdGhhdCdzIGFjdHVhbGx5IE9LLiBrdm1feGVuX3VwZGF0ZV9ydW5zdGF0ZV9ndWVzdCgpXG4gXHRcdCAqIHdpbGwgY29wZS5cbiBcdFx0ICovXG4tXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSlcbitcdFx0aWYgKGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyh2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdFx0c3ogPSBzaXplb2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRzeiA9IHNpemVvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfcnVuc3RhdGVfaW5mbyk7XG5AQCAtMTQzOSwxNiArMTQ2MSwyMSBAQCBzdGF0aWMgaW50IGt2bV94ZW5faHlwZXJjYWxsX2NvbXBsZXRlX3VzZXJzcGFjZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4ga3ZtX3hlbl9oeXBlcmNhbGxfc2V0X3Jlc3VsdCh2Y3B1LCBydW4tXHUwMDNleGVuLnUuaGNhbGwucmVzdWx0KTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KHN0cnVjdCBrdm0gKmt2bSlcbitzdGF0aWMgaW5saW5lIGludCBtYXhfZXZ0Y2huX3BvcnQoYm9vbCBoYXNfNjRiaXRfc2hpbmZvKVxuIHtcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpXG4rXHRpZiAoaGFzXzY0Yml0X3NoaW5mbylcbiBcdFx0cmV0dXJuIEVWVENITl8yTF9OUl9DSEFOTkVMUztcbiBcdGVsc2VcbiBcdFx0cmV0dXJuIENPTVBBVF9FVlRDSE5fMkxfTlJfQ0hBTk5FTFM7XG4gfVxuIFxuLXN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cyxcbi1cdFx0XHQgICAgICAgZXZ0Y2huX3BvcnRfdCAqcG9ydHMpXG4rc3RhdGljIGlubGluZSBpbnQga3ZtX21heF9ldnRjaG5fcG9ydChzdHJ1Y3Qga3ZtICprdm0pXG4re1xuK1x0cmV0dXJuIG1heF9ldnRjaG5fcG9ydChrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKSk7XG4rfVxuK1xuK3N0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaGFzXzY0Yml0X3NoaW5mbyxcbitcdFx0XHQgICAgICAgaW50IG5yX3BvcnRzLCBldnRjaG5fcG9ydF90ICpwb3J0cylcbiB7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlO1xuQEAgLTE0NjMsNyArMTQ5MCw3IEBAIHN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cyxcbiBcdFx0Z290byBvdXRfcmN1O1xuIFxuIFx0cmV0ID0gZmFsc2U7XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSB7XG4rXHRpZiAoaGFzXzY0Yml0X3NoaW5mbykge1xuIFx0XHRzdHJ1Y3Qgc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuIFx0XHRwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fcGVuZGluZztcbiBcdH0gZWxzZSB7XG5AQCAtMTQ4NSw5ICsxNTEyLDEwIEBAIHN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cyxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcbitzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsXG4gXHRcdFx0XHQgdTY0IHBhcmFtLCB1NjQgKnIpXG4ge1xuK1x0Ym9vbCBoYXNfNjRiaXRfc2hpbmZvID0ga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtXHUwMDNla3ZtKTtcbiBcdHN0cnVjdCBzY2hlZF9wb2xsIHNjaGVkX3BvbGw7XG4gXHRldnRjaG5fcG9ydF90IHBvcnQsICpwb3J0cztcbiBcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XG5AQCAtMTQ5Nyw3ICsxNTI1LDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxuIFx0ICAgICEodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4uaHZtX2NvbmZpZy5mbGFncyBcdTAwMjYgS1ZNX1hFTl9IVk1fQ09ORklHX0VWVENITl9TRU5EKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgIWxvbmdtb2RlKSB7XG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiAhaXNfNjRiaXQpIHtcbiBcdFx0c3RydWN0IGNvbXBhdF9zY2hlZF9wb2xsIHNwMzI7XG4gXG4gXHRcdC8qIFNhbml0eSBjaGVjayB0aGF0IHRoZSBjb21wYXQgc3RydWN0IGRlZmluaXRpb24gaXMgY29ycmVjdCAqL1xuQEAgLTE1NDYsMjAgKzE1NzQsMjAgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2NoZWRfcG9sbC5ucl9wb3J0czsgaSsrKSB7XG4tXHRcdGlmIChwb3J0c1tpXSBcdTAwM2U9IG1heF9ldnRjaG5fcG9ydCh2Y3B1LVx1MDAzZWt2bSkpIHtcbitcdFx0aWYgKHBvcnRzW2ldIFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKSB7XG4gXHRcdFx0KnIgPSAtRUlOVkFMO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXHR9XG4gXG4gXHRpZiAoc2NoZWRfcG9sbC5ucl9wb3J0cyA9PSAxKVxuLVx0XHR2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huID0gcG9ydDtcbitcdFx0V1JJVEVfT05DRSh2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huLCBwb3J0KTtcbiBcdGVsc2Vcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLnhlbi5wb2xsX2V2dGNobiA9IC0xO1xuK1x0XHRXUklURV9PTkNFKHZjcHUtXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4sIC0xKTtcbiBcbiBcdHNldF9iaXQodmNwdS1cdTAwM2V2Y3B1X2lkeCwgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4ucG9sbF9tYXNrKTtcbiBcbi1cdGlmICghd2FpdF9wZW5kaW5nX2V2ZW50KHZjcHUsIHNjaGVkX3BvbGwubnJfcG9ydHMsIHBvcnRzKSkge1xuK1x0aWYgKCF3YWl0X3BlbmRpbmdfZXZlbnQodmNwdSwgaGFzXzY0Yml0X3NoaW5mbywgc2NoZWRfcG9sbC5ucl9wb3J0cywgcG9ydHMpKSB7XG4gXHRcdGt2bV9zZXRfbXBfc3RhdGUodmNwdSwgS1ZNX01QX1NUQVRFX0hBTFRFRCk7XG4gXG4gXHRcdGlmIChzY2hlZF9wb2xsLnRpbWVvdXQpXG5AQCAtMTU3NCw3ICsxNjAyLDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxuIFx0XHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9SVU5OQUJMRSk7XG4gXHR9XG4gXG4tXHR2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huID0gMDtcbitcdFdSSVRFX09OQ0UodmNwdS1cdTAwM2VhcmNoLnhlbi5wb2xsX2V2dGNobiwgMCk7XG4gXHQqciA9IDA7XG4gb3V0OlxuIFx0LyogUmVhbGx5LCB0aGlzIGlzIG9ubHkgbmVlZGVkIGluIGNhc2Ugb2YgdGltZW91dCAqL1xuQEAgLTE1OTQsMTIgKzE2MjIsMTIgQEAgc3RhdGljIHZvaWQgY2FuY2VsX2V2dGNobl9wb2xsKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiB9XG4gXG4tc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4rc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsXG4gXHRcdFx0XHQgICBpbnQgY21kLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBTQ0hFRE9QX3BvbGw6XG4tXHRcdGlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBsb25nbW9kZSwgcGFyYW0sIHIpKVxuK1x0XHRpZiAoa3ZtX3hlbl9zY2hlZG9wX3BvbGwodmNwdSwgaXNfNjRiaXQsIHBhcmFtLCByKSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0ZmFsbHRocm91Z2g7XG4gXHRjYXNlIFNDSEVET1BfeWllbGQ6XG5AQCAtMTYxOCw3ICsxNjQ2LDcgQEAgc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyIHtcbiAgICAgdWludDMyX3QgZmxhZ3M7XG4gfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTtcbiBcbi1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLFxuK3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsIGludCBjbWQsXG4gXHRcdFx0XHQgIGludCB2Y3B1X2lkLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciBvbmVzaG90O1xuQEAgLTE2NjIsNyArMTY5MCw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsXG4gXHRcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyLCBmbGFncykgIT1cbiBcdFx0XHQgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpKTtcbiBcbi1cdFx0aWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgcGFyYW0sIFx1MDAyNm9uZXNob3QsIGxvbmdtb2RlID8gc2l6ZW9mKG9uZXNob3QpIDpcbitcdFx0aWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgcGFyYW0sIFx1MDAyNm9uZXNob3QsIGlzXzY0Yml0ID8gc2l6ZW9mKG9uZXNob3QpIDpcbiBcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciksIFx1MDAyNmUpKSB7XG4gXHRcdFx0KnIgPSAtRUZBVUxUO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuQEAgLTE2OTQsNyArMTcyMiw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWludDY0X3QgdGltZW91dCxcbiBcbiBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGJvb2wgbG9uZ21vZGU7XG4rXHRib29sIGlzXzY0Yml0O1xuIFx0dTY0IGlucHV0LCBwYXJhbXNbNl0sIHIgPSAtRU5PU1lTO1xuIFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XG4gXHR1OCBjcGw7XG5AQCAtMTcwNCw4ICsxNzMyLDggQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAgICBrdm1faHZfaHlwZXJjYWxsX2VuYWJsZWQodmNwdSkpXG4gXHRcdHJldHVybiBrdm1faHZfaHlwZXJjYWxsKHZjcHUpO1xuIFxuLVx0bG9uZ21vZGUgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xuLVx0aWYgKCFsb25nbW9kZSkge1xuK1x0aXNfNjRiaXQgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xuK1x0aWYgKCFpc182NGJpdCkge1xuIFx0XHRpbnB1dCA9IGt2bV9lYXhfcmVhZCh2Y3B1KTtcbiBcdFx0cGFyYW1zWzBdID0ga3ZtX2VieF9yZWFkKHZjcHUpO1xuIFx0XHRwYXJhbXNbMV0gPSBrdm1fZWN4X3JlYWQodmNwdSk7XG5AQCAtMTc1MSwxNyArMTc3OSwxNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHZjcHUsIHBhcmFtc1sxXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1Jfc2NoZWRfb3A6XG4tXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGxvbmdtb2RlLCBwYXJhbXNbMF0sXG4rXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGlzXzY0Yml0LCBwYXJhbXNbMF0sXG4gXHRcdFx0XHRcdFx0IHBhcmFtc1sxXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1JfdmNwdV9vcDpcbi1cdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sXG4rXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3ZjcHVfb3AodmNwdSwgaXNfNjRiaXQsIHBhcmFtc1swXSwgcGFyYW1zWzFdLFxuIFx0XHRcdFx0XHRcdHBhcmFtc1syXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1Jfc2V0X3RpbWVyX29wOiB7XG4gXHRcdHU2NCB0aW1lb3V0ID0gcGFyYW1zWzBdO1xuIFx0XHQvKiBJbiAzMi1iaXQgbW9kZSwgdGhlIDY0LWJpdCB0aW1lb3V0IGlzIGluIHR3byAzMi1iaXQgcGFyYW1zLiAqL1xuLVx0XHRpZiAoIWxvbmdtb2RlKVxuK1x0XHRpZiAoIWlzXzY0Yml0KVxuIFx0XHRcdHRpbWVvdXQgfD0gcGFyYW1zWzFdIFx1MDAzY1x1MDAzYyAzMjtcbiBcdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHZjcHUsIHRpbWVvdXQsIFx1MDAyNnIpO1xuIFx0XHRicmVhaztcbkBAIC0xNzc2LDcgKzE4MDQsNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIGhhbmRsZV9pbl91c2Vyc3BhY2U6XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1hFTjtcbiBcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi50eXBlID0gS1ZNX0VYSVRfWEVOX0hDQUxMO1xuLVx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwubG9uZ21vZGUgPSBsb25nbW9kZTtcbitcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi51LmhjYWxsLmxvbmdtb2RlID0gaXNfNjRiaXQ7XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2V4ZW4udS5oY2FsbC5jcGwgPSBjcGw7XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2V4ZW4udS5oY2FsbC5pbnB1dCA9IGlucHV0O1xuIFx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwucGFyYW1zWzBdID0gcGFyYW1zWzBdO1xuQEAgLTE3OTQsNyArMTgyMiw3IEBAIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gc3RhdGljIHZvaWQga3ZtX3hlbl9jaGVja19wb2xsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG9ydClcbiB7XG4tXHRpbnQgcG9sbF9ldnRjaG4gPSB2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huO1xuK1x0aW50IHBvbGxfZXZ0Y2huID0gUkVBRF9PTkNFKHZjcHUtXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4pO1xuIFxuIFx0aWYgKChwb2xsX2V2dGNobiA9PSBwb3J0IHx8IHBvbGxfZXZ0Y2huID09IC0xKSBcdTAwMjZcdTAwMjZcbiBcdCAgICB0ZXN0X2FuZF9jbGVhcl9iaXQodmNwdS1cdTAwM2V2Y3B1X2lkeCwgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4ucG9sbF9tYXNrKSkge1xuQEAgLTE4MTYsOCArMTg0NCw5IEBAIHN0YXRpYyB2b2lkIGt2bV94ZW5fY2hlY2tfcG9sbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBvcnQpXG4gaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZTtcbitcdGJvb2wgaGFzXzY0Yml0X3NoaW5mbyA9IGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pO1xuK1x0dW5zaWduZWQgbG9uZyAqcGVuZGluZ19iaXRzLCAqbWFza19iaXRzLCB2aV9wZW5kaW5nX3NlbF9vZnM7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHR1bnNpZ25lZCBsb25nICpwZW5kaW5nX2JpdHMsICptYXNrX2JpdHM7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHBvcnRfd29yZF9iaXQ7XG4gXHRib29sIGtpY2tfdmNwdSA9IGZhbHNlO1xuQEAgLTE4MzMsNyArMTg2Miw3IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdFdSSVRFX09OQ0UoeGUtXHUwMDNldmNwdV9pZHgsIHZjcHUtXHUwMDNldmNwdV9pZHgpO1xuIFx0fVxuIFxuLVx0aWYgKHhlLVx1MDAzZXBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbitcdGlmICh4ZS1cdTAwM2Vwb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHJjID0gLUVXT1VMREJMT0NLO1xuQEAgLTE4NDQsMTYgKzE4NzMsMjMgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdGlmICgha3ZtX2dwY19jaGVjayhncGMsIFBBR0VfU0laRSkpXG4gXHRcdGdvdG8gb3V0X3JjdTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbitcdGlmIChoYXNfNjRiaXRfc2hpbmZvKSB7XG4gXHRcdHN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4gXHRcdHBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopXHUwMDI2c2hpbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nO1xuIFx0XHRtYXNrX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fbWFzaztcbiBcdFx0cG9ydF93b3JkX2JpdCA9IHhlLVx1MDAzZXBvcnQgLyA2NDtcbitcbitcdFx0dmlfcGVuZGluZ19zZWxfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3BlbmRpbmdfc2VsKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuIFx0XHRwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fcGVuZGluZztcbiBcdFx0bWFza19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZzaGluZm8tXHUwMDNlZXZ0Y2huX21hc2s7XG4gXHRcdHBvcnRfd29yZF9iaXQgPSB4ZS1cdTAwM2Vwb3J0IC8gMzI7XG4rXG4rXHRcdHZpX3BlbmRpbmdfc2VsX29mcyA9IG9mZnNldG9mKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fcGVuZGluZ19zZWwpO1xuK1xuK1x0XHQvKiB0ZXN0X2FuZF9zZXRfYml0KCkgbmVlZHMgNjQtYml0IGFsaWdubWVudCwgYnV0IHRoYXQncyBPSyAqL1xuK1x0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgZXZ0Y2huX3BlbmRpbmcpIFx1MDAyNiA3KTtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtMTg2OSw2ICsxOTA1LDggQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0cmMgPSAtRU5PVENPTk47IC8qIE1hc2tlZCAqL1xuIFx0XHRrdm1feGVuX2NoZWNrX3BvbGxlcih2Y3B1LCB4ZS1cdTAwM2Vwb3J0KTtcbiBcdH0gZWxzZSB7XG4rXHRcdGJvb2wgb2xkO1xuK1xuIFx0XHRyYyA9IDE7IC8qIERlbGl2ZXJlZCB0byB0aGUgYml0bWFwIGluIHNoYXJlZF9pbmZvLiAqL1xuIFx0XHQvKiBOb3cgc3dpdGNoIHRvIHRoZSB2Q1BVJ3MgdmNwdV9pbmZvIHRvIHNldCB0aGUgaW5kZXggYW5kIHBlbmRpbmdfc2VsICovXG4gXHRcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbkBAIC0xODg1LDE5ICsxOTIzLDI5IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdFx0Z290byBvdXRfcmN1O1xuIFx0XHR9XG4gXG4tXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbi1cdFx0XHRzdHJ1Y3QgdmNwdV9pbmZvICp2Y3B1X2luZm8gPSBncGMtXHUwMDNla2h2YTtcbi1cdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCwgXHUwMDI2dmNwdV9pbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCkpIHtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodmNwdV9pbmZvLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4tXHRcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmNwdV9pbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4tXHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnRfd29yZF9iaXQsXG4tXHRcdFx0XHRcdCAgICAgICh1bnNpZ25lZCBsb25nICopXHUwMDI2dmNwdV9pbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCkpIHtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodmNwdV9pbmZvLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4tXHRcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuLVx0XHRcdH1cbitcdFx0LypcbitcdFx0ICogRXhwbGljaXRseSB1c2UgYSAzMi1iaXQgYnRzbCBpbnN0ZWFkIG9mIHRlc3RfYW5kX3NldF9iaXQoKSxcbitcdFx0ICogd2hpY2ggd291bGQgdXNlIGJ0c3Egb24geDg2LTY0LiBUaGUgdmNwdV9pbmZvIGlzIGd1ZXN0LVxuK1x0XHQgKiBjb250cm9sbGVkIGFuZCBvbmx5IHJlcXVpcmVkIHRvIGJlIDMyLWJpdCBhbGlnbmVkLCBzbyBhXG4rXHRcdCAqIDY0LWJpdCBhY2Nlc3MgY291bGQgZ2VuZXJhdGUgYSBzcGxpdC1sb2NrICNBQy5cbitcdFx0ICpcbitcdFx0ICogTm90ZSwgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgdGVzdF9hbmRfc2V0X2JpdCgpIG9uXG4rXHRcdCAqIHBlbmRpbmdfYml0cyBhYm92ZTogdGhhdCBpcyBpbiB0aGUgcGVyLVZNIHNoYXJlZF9pbmZvLCB3aGljaFxuK1x0XHQgKiBpcyBwYWdlIGFsaWduZWQsIHNvIHRoZSBhY2Nlc3MgaXMgZ3VhcmFudGVlZCB0byBiZSA2NC1iaXRcbitcdFx0ICogYWxpZ25lZC5cbitcdFx0ICovXG4rXHRcdG9sZCA9IEdFTl9CSU5BUllfUk1XY2MoTE9DS19QUkVGSVggXCJidHNsXCIsXG4rXHRcdFx0XHQgICAgICAgKih1MzIgKikoZ3BjLVx1MDAzZWtodmEgKyB2aV9wZW5kaW5nX3NlbF9vZnMpLFxuK1x0XHRcdFx0ICAgICAgIGMsIFwiSXJcIiwgcG9ydF93b3JkX2JpdCk7XG4rXHRcdGlmICghb2xkKSB7XG4rXHRcdFx0c3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtXHUwMDNla2h2YTtcbitcbitcdFx0XHQvKiBObyBuZWVkIGZvciBjb21wYXQgaGFuZGxpbmcgKi9cbitcdFx0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSAhPVxuK1x0XHRcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSk7XG4rXG4rXHRcdFx0V1JJVEVfT05DRSh2aS1cdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xuK1x0XHRcdGtpY2tfdmNwdSA9IHRydWU7XG4gXHRcdH1cbiBcbiBcdFx0LyogRm9yIHRoZSBwZXItdkNQVSBsYXBpYyB2ZWN0b3IsIGRlbGl2ZXIgaXQgYXMgTVNJLiAqL1xuQEAgLTE5OTUsNyArMjA0Myw3IEBAIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXG4gXHQvKlxuLVx0ICogRG9uJ3QgY2hlY2sgZm9yIHRoZSBwb3J0IGJlaW5nIHdpdGhpbiByYW5nZSBvZiBtYXhfZXZ0Y2huX3BvcnQoKS5cbitcdCAqIERvbid0IGNoZWNrIGZvciB0aGUgcG9ydCBiZWluZyB3aXRoaW4gcmFuZ2Ugb2Yga3ZtX21heF9ldnRjaG5fcG9ydCgpLlxuIFx0ICogVXNlcnNwYWNlIGNhbiBjb25maWd1cmUgd2hhdCBldmVyIHRhcmdldHMgaXQgbGlrZXM7IGV2ZW50cyBqdXN0IHdvbid0XG4gXHQgKiBiZSBkZWxpdmVyZWQgaWYvd2hpbGUgdGhlIHRhcmdldCBpcyBpbnZhbGlkLCBqdXN0IGxpa2UgdXNlcnNwYWNlIGNhblxuIFx0ICogY29uZmlndXJlIE1TSXMgd2hpY2ggdGFyZ2V0IG5vbi1leGlzdGVudCBBUElDcy5cbkBAIC0yMDA0LDggKzIwNTIsOCBAQCBpbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxuIFx0ICogY2FuIGJlIHJlc3RvcmVkICppbmRlcGVuZGVudGx5KiBvZiBvdGhlciB0aGluZ3MgbGlrZSBjcmVhdGluZyB2Q1BVcyxcbiBcdCAqIHdpdGhvdXQgaW1wb3NpbmcgYW4gb3JkZXJpbmcgZGVwZW5kZW5jeSBvbiB1c2Vyc3BhY2UuICBJbiB0aGlzXG4gXHQgKiBwYXJ0aWN1bGFyIGNhc2UsIHRoZSBwcm9ibGVtYXRpYyBvcmRlcmluZyB3b3VsZCBiZSB3aXRoIHNldHRpbmcgdGhlXG4tXHQgKiBYZW4gJ2xvbmcgbW9kZScgZmxhZywgd2hpY2ggY2hhbmdlcyBtYXhfZXZ0Y2huX3BvcnQoKSB0byBhbGxvdyA0MDk2XG4tXHQgKiBpbnN0ZWFkIG9mIDEwMjQgZXZlbnQgY2hhbm5lbHMuXG4rXHQgKiBYZW4gJ2xvbmcgbW9kZScgZmxhZywgd2hpY2ggY2hhbmdlcyBrdm1fbWF4X2V2dGNobl9wb3J0KCkgdG8gYWxsb3dcbitcdCAqIDQwOTYgaW5zdGVhZCBvZiAxMDI0IGV2ZW50IGNoYW5uZWxzLlxuIFx0ICovXG4gXG4gXHQvKiBXZSBvbmx5IHN1cHBvcnQgMiBsZXZlbCBldmVudCBjaGFubmVscyBmb3Igbm93ICovXG5AQCAtMjA0Miw3ICsyMDkwLDcgQEAgaW50IGt2bV94ZW5faHZtX2V2dGNobl9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pcnFfcm91dGluZ194ZW5fZXZ0Y2huICpcbiBcdHN0cnVjdCBrdm1feGVuX2V2dGNobiBlO1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICghdXhlLVx1MDAzZXBvcnQgfHwgdXhlLVx1MDAzZXBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbitcdGlmICghdXhlLVx1MDAzZXBvcnQgfHwgdXhlLVx1MDAzZXBvcnQgXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0LyogV2Ugb25seSBzdXBwb3J0IDIgbGV2ZWwgZXZlbnQgY2hhbm5lbHMgZm9yIG5vdyAqL1xuQEAgLTIwOTMsNyArMjE0MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX3VwZGF0ZShzdHJ1Y3Qga3ZtICprdm0sXG4gXG4gXHQvKiBQcm90ZWN0IHdyaXRlcyB0byBldnRjaG5mZCBhcyB3ZWxsIGFzIHRoZSBpZHIgbG9va3VwLiAgKi9cbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbi1cdGV2dGNobmZkID0gaWRyX2ZpbmQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCk7XG4rXHRldnRjaG5mZCA9IHhhX2xvYWQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCk7XG4gXG4gXHRyZXQgPSAtRU5PRU5UO1xuIFx0aWYgKCFldnRjaG5mZClcbkBAIC0yMTUyLDcgKzIyMDAsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9hc3NpZ24oc3RydWN0IGt2bSAqa3ZtLFxuIFxuIFx0Y2FzZSBFVlRDSE5TVEFUX2ludGVyZG9tYWluOlxuIFx0XHRpZiAoZGF0YS1cdTAwM2V1LmV2dGNobi5kZWxpdmVyLnBvcnQucG9ydCkge1xuLVx0XHRcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4rXHRcdFx0aWYgKGRhdGEtXHUwMDNldS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQgXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4gXHRcdFx0XHRnb3RvIG91dF9ub2V2ZW50ZmQ7IC8qIC1FSU5WQUwgKi9cbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRldmVudGZkID0gZXZlbnRmZF9jdHhfZmRnZXQoZGF0YS1cdTAwM2V1LmV2dGNobi5kZWxpdmVyLmV2ZW50ZmQuZmQpO1xuQEAgLTIxODcsMTMgKzIyMzUsMTMgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfYXNzaWduKHN0cnVjdCBrdm0gKmt2bSxcbiBcdH1cbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbi1cdHJldCA9IGlkcl9hbGxvYyhcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBldnRjaG5mZCwgcG9ydCwgcG9ydCArIDEsXG4rXHRyZXQgPSB4YV9pbnNlcnQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCwgZXZ0Y2huZmQsXG4gXHRcdFx0R0ZQX0tFUk5FTCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbi1cdGlmIChyZXQgXHUwMDNlPSAwKVxuK1x0aWYgKCFyZXQpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHJldCA9PSAtRU5PU1BDKVxuK1x0aWYgKHJldCA9PSAtRUJVU1kpXG4gXHRcdHJldCA9IC1FRVhJU1Q7XG4gb3V0OlxuIFx0aWYgKGV2ZW50ZmQpXG5AQCAtMjIwOCw3ICsyMjU2LDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfZGVhc3NpZ24oc3RydWN0IGt2bSAqa3ZtLCB1MzIgcG9ydClcbiBcdHN0cnVjdCBldnRjaG5mZCAqZXZ0Y2huZmQ7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XG4tXHRldnRjaG5mZCA9IGlkcl9yZW1vdmUoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCk7XG4rXHRldnRjaG5mZCA9IHhhX2VyYXNlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIHBvcnQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XG4gXG4gXHRpZiAoIWV2dGNobmZkKVxuQEAgLTIyMjQsNyArMjI3Miw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2RlYXNzaWduKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHBvcnQpXG4gc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCBldnRjaG5mZCAqZXZ0Y2huZmQsICoqYWxsX2V2dGNobmZkcztcbi1cdGludCBpO1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuIFx0aW50IG4gPSAwO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4ueGVuX2xvY2spO1xuQEAgLTIyMzQsNyArMjI4Miw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KHN0cnVjdCBrdm0gKmt2bSlcbiBcdCAqIGNyaXRpY2FsIHNlY3Rpb24sIGZpcnN0IGNvbGxlY3QgYWxsIHRoZSBldnRjaG5mZCBvYmplY3RzXG4gXHQgKiBpbiBhbiBhcnJheSBhcyB0aGV5IGFyZSByZW1vdmVkIGZyb20gZXZ0Y2huX3BvcnRzLlxuIFx0ICovXG4tXHRpZHJfZm9yX2VhY2hfZW50cnkoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQsIGkpXG4rXHR4YV9mb3JfZWFjaChcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBpLCBldnRjaG5mZClcbiBcdFx0bisrO1xuIFxuIFx0YWxsX2V2dGNobmZkcyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgZXZ0Y2huZmQgKiwgbik7XG5AQCAtMjI0NCw5ICsyMjkyLDkgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0fVxuIFxuIFx0biA9IDA7XG4tXHRpZHJfZm9yX2VhY2hfZW50cnkoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQsIGkpIHtcbitcdHhhX2Zvcl9lYWNoKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGksIGV2dGNobmZkKSB7XG4gXHRcdGFsbF9ldnRjaG5mZHNbbisrXSA9IGV2dGNobmZkO1xuLVx0XHRpZHJfcmVtb3ZlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLVx1MDAzZXNlbmRfcG9ydCk7XG4rXHRcdHhhX2VyYXNlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLVx1MDAzZXNlbmRfcG9ydCk7XG4gXHR9XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbiBcbkBAIC0yMjcwLDcgKzIzMTgsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2V0YXR0cl9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YVxuIFx0aWYgKGRhdGEtXHUwMDNldS5ldnRjaG4uZmxhZ3MgPT0gS1ZNX1hFTl9FVlRDSE5fUkVTRVQpXG4gXHRcdHJldHVybiBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoa3ZtKTtcbiBcbi1cdGlmICghcG9ydCB8fCBwb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4rXHRpZiAoIXBvcnQgfHwgcG9ydCBcdTAwM2U9IGt2bV9tYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoZGF0YS1cdTAwM2V1LmV2dGNobi5mbGFncyA9PSBLVk1fWEVOX0VWVENITl9ERUFTU0lHTilcbkBAIC0yMjk3LDEyICsyMzQ1LDEwIEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfZXZ0Y2huX3NlbmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcGFyYW0sIHU2NCAqcilcbiBcdH1cbiBcbiBcdC8qXG4tXHQgKiBldnRjaG5mZCBpcyBwcm90ZWN0ZWQgYnkga3ZtLVx1MDAzZXNyY3U7IHRoZSBpZHIgbG9va3VwIGluc3RlYWRcbi1cdCAqIGlzIHByb3RlY3RlZCBieSBSQ1UuXG4rXHQgKiBldnRjaG5mZCBpcyBwcm90ZWN0ZWQgYnkga3ZtLVx1MDAzZXNyY3U7IHRoZSB4YV9sb2FkIGlzIFJDVS1zYWZlXG4rXHQgKiBpbnRlcm5hbGx5LCBubyBleHBsaWNpdCByY3VfcmVhZF9sb2NrKCkgbmVlZGVkLlxuIFx0ICovXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRldnRjaG5mZCA9IGlkcl9maW5kKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgc2VuZC5wb3J0KTtcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0ZXZ0Y2huZmQgPSB4YV9sb2FkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgc2VuZC5wb3J0KTtcbiBcdGlmICghZXZ0Y2huZmQpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC0yMzQ5LDIzICsyMzk1LDIzIEBAIHZvaWQga3ZtX3hlbl9kZXN0cm95X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHZvaWQga3ZtX3hlbl9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRtdXRleF9pbml0KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XG4tXHRpZHJfaW5pdChcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTtcbitcdHhhX2luaXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cyk7XG4gXHRrdm1fZ3BjX2luaXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZSwga3ZtKTtcbiB9XG4gXG4gdm9pZCBrdm1feGVuX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCBldnRjaG5mZCAqZXZ0Y2huZmQ7XG4tXHRpbnQgaTtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbiBcdGt2bV9ncGNfZGVhY3RpdmF0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlKTtcbiBcbi1cdGlkcl9mb3JfZWFjaF9lbnRyeShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBldnRjaG5mZCwgaSkge1xuK1x0eGFfZm9yX2VhY2goXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgaSwgZXZ0Y2huZmQpIHtcbiBcdFx0aWYgKCFldnRjaG5mZC1cdTAwM2VkZWxpdmVyLnBvcnQucG9ydClcbiBcdFx0XHRldmVudGZkX2N0eF9wdXQoZXZ0Y2huZmQtXHUwMDNlZGVsaXZlci5ldmVudGZkLmN0eCk7XG4gXHRcdGtmcmVlKGV2dGNobmZkKTtcbiBcdH1cbi1cdGlkcl9kZXN0cm95KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMpO1xuK1x0eGFfZGVzdHJveShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTtcbiBcbiBcdGlmIChrdm0tXHUwMDNlYXJjaC54ZW4uaHZtX2NvbmZpZy5tc3IpXG4gXHRcdHN0YXRpY19icmFuY2hfc2xvd19kZWNfZGVmZXJyZWQoXHUwMDI2a3ZtX3hlbl9lbmFibGVkKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmggYi9hcmNoL3g4Ni9rdm0veGVuLmhcbmluZGV4IGYzNzI4NTU4NTdhODguLjlkMDRlMzUwYmRiMWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmhcbisrKyBiL2FyY2gveDg2L2t2bS94ZW4uaFxuQEAgLTIzNSw2ICsyMzUsMTEgQEAgc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbyB7XG4gI2RlZmluZSBDT01QQVRfRVZUQ0hOXzJMX05SX0NIQU5ORUxTICg4ICpcdFx0XHRcdFxcXG4gXHRcdFx0XHQgICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgXFxcbiBcdFx0XHRcdFx0XHQgICBldnRjaG5fcGVuZGluZykpXG4rXG4rLyogTGF0Y2hlZCBWTS13aWRlIG1vZGU7IHRoZSBLVk0gZXF1aXZhbGVudCBvZiBYZW4ncyAhaGFzXzMyYml0X3NoaW5mbygpLiAqL1xuKyNkZWZpbmUga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkgXFxcbitcdChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IFJFQURfT05DRSgoa3ZtKS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpKVxuK1xuIHN0cnVjdCBjb21wYXRfdmNwdV9ydW5zdGF0ZV9pbmZvIHtcbiAgICAgaW50IHN0YXRlO1xuICAgICB1aW50NjRfdCBzdGF0ZV9lbnRyeV90aW1lO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggMDNiZmM5Mjg2NGI2ZS4uM2RkMDQ2MDVmMmU1NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtODU1LDYgKzg1NSw4IEBAIHN0cnVjdCBrdm0ge1xuIFx0Z2ZuX3QgbW11X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQ7XG4gXHRnZm5fdCBtbXVfaW52YWxpZGF0ZV9yYW5nZV9lbmQ7XG4gXG4rXHR1bnNpZ25lZCBsb25nIGdwY19pbnZhbGlkYXRlX3NlcTtcbitcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlcztcbiBcdHU2NCBtYW51YWxfZGlydHlfbG9nX3Byb3RlY3Q7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RlbnRyeTtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggNjVlYjI2YTA1MjBkOC4uMTA4ZDQyYzVjMWQ2YSAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcbisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbkBAIC04MTMsNiArODEzLDE2IEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sXG4gXG4gXHQvKiBQYWlycyB3aXRoIHRoZSBpbmNyZW1lbnQgaW4gcmFuZ2Vfc3RhcnQoKS4gKi9cbiBcdHNwaW5fbG9jayhcdTAwMjZrdm0tXHUwMDNlbW5faW52YWxpZGF0ZV9sb2NrKTtcbitcdGt2bS1cdTAwM2VncGNfaW52YWxpZGF0ZV9zZXErKztcbitcbitcdC8qXG4rXHQgKiBBcyB3aXRoIHRoZSBNTVUgc2VxdWVuY2UgY291bnRlciBhbmQgbW11X2ludmFsaWRhdGVfaW5fcHJvZ3Jlc3MsIHRoZVxuK1x0ICogR1BDIHNlcXVlbmNlIGluY3JlYXNlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgdGhlIGludmFsaWRhdGUgY291bnRcbitcdCAqIGdvZXMgdG8gemVyby4gIFBhaXJzIHdpdGggdGhlIHNtcF9ybWIoKSBpblxuK1x0ICogbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKCkuXG4rXHQgKi9cbitcdHNtcF93bWIoKTtcbitcbiBcdGlmICghV0FSTl9PTl9PTkNFKCFrdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpKVxuIFx0XHQtLWt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcbiBcdHdha2UgPSAha3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50O1xuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMgYi92aXJ0L2t2bS9wZm5jYWNoZS5jXG5pbmRleCA3MjhkMmMxYjQ4OGE4Li4zNjU5Njg2Yjk3YzI0IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vcGZuY2FjaGUuY1xuKysrIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xuQEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMgdm9pZCBncGNfdW5tYXAoa3ZtX3Bmbl90IHBmbiwgdm9pZCAqa2h2YSlcbiAjZW5kaWZcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NlcSlcbitzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBncGNfc2VxKVxuIHtcbiBcdC8qXG4gXHQgKiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBhY3RzIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXNcbkBAIC0xMzYsMjAgKzEzNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc1xuIFx0ICogTm90ZSwgaXQgZG9lcyBub3QgbWF0dGVyIHRoYXQgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnRcbiBcdCAqIGlzIG5vdCBwcm90ZWN0ZWQgYnkgZ3BjLVx1MDAzZWxvY2suICBJdCBpcyBndWFyYW50ZWVkIHRvXG4gXHQgKiBiZSBlbGV2YXRlZCBiZWZvcmUgdGhlIG1tdV9ub3RpZmllciBhY3F1aXJlcyBncGMtXHUwMDNlbG9jaywgYW5kXG4tXHQgKiBpc24ndCBkcm9wcGVkIHVudGlsIGFmdGVyIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyB1cGRhdGVkLlxuK1x0ICogaXNuJ3QgZHJvcHBlZCB1bnRpbCBhZnRlciBncGNfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC5cbiBcdCAqL1xuIFx0aWYgKGt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHQvKlxuIFx0ICogRW5zdXJlIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGlzIHJlYWQgYmVmb3JlXG4tXHQgKiBtbXVfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxuLVx0ICogbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGVcbitcdCAqIGdwY19pbnZhbGlkYXRlX3NlcS4gIFRoaXMgcGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluXG4rXHQgKiBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGVcbiBcdCAqIG9sZCAobm9uLXplcm8pIHZhbHVlIG9mIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IG9yIHRoZVxuLVx0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW11X2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxuK1x0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxuIFx0ICovXG4gXHRzbXBfcm1iKCk7XG4tXHRyZXR1cm4ga3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcSAhPSBtbXVfc2VxO1xuK1x0cmV0dXJuIGt2bS1cdTAwM2VncGNfaW52YWxpZGF0ZV9zZXEgIT0gZ3BjX3NlcTtcbiB9XG4gXG4gc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG5AQCAtMTU4LDcgKzE1OCw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuIFx0dm9pZCAqb2xkX2todmEgPSAodm9pZCAqKVBBR0VfQUxJR05fRE9XTigodWludHB0cl90KWdwYy1cdTAwM2VraHZhKTtcbiBcdGt2bV9wZm5fdCBuZXdfcGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XG4gXHR2b2lkICpuZXdfa2h2YSA9IE5VTEw7XG4tXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4rXHR1bnNpZ25lZCBsb25nIGdwY19zZXE7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcbiBcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XG5AQCAtMTgxLDcgKzE4MSw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuIFx0Z3BjLVx1MDAzZXZhbGlkID0gZmFsc2U7XG4gXG4gXHRkbyB7XG4tXHRcdG1tdV9zZXEgPSBncGMtXHUwMDNla3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcbitcdFx0Z3BjX3NlcSA9IGdwYy1cdTAwM2Vrdm0tXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxO1xuIFx0XHRzbXBfcm1iKCk7XG4gXG4gXHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2Z3BjLVx1MDAzZWxvY2spO1xuQEAgLTIzMiw3ICsyMzIsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcdFx0ICogYXR0ZW1wdGluZyB0byByZWZyZXNoLlxuIFx0XHQgKi9cbiBcdFx0V0FSTl9PTl9PTkNFKGdwYy1cdTAwM2V2YWxpZCk7XG4tXHR9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLVx1MDAzZWt2bSwgbW11X3NlcSkpO1xuK1x0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cdTAwM2Vrdm0sIGdwY19zZXEpKTtcbiBcbiBcdGdwYy1cdTAwM2V2YWxpZCA9IHRydWU7XG4gXHRncGMtXHUwMDNlcGZuID0gbmV3X3BmbjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjM5OjI0Ljk2MzAwNzI2NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5ODM1ODkwNDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBBIERlZXAgRGl2ZSBpbnRvIE1lbW9yeSBTYWZldHkgYW5kIENvbmN1cnJlbmN5KipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgYXNzZXNzIHBvdGVudGlhbCByaXNrcywgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGEgY29tbW9uIHNvdXJjZSBvZiBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIFdlJ3JlIGRlYWxpbmcgd2l0aCBLVk0sIHNvIHdlIG5lZWQgdG8gYmUgZXh0cmEgY2F1dGlvdXMuXG5cbkZpcnN0LCB0aGUgcGF0Y2ggdG91Y2hlcyBhIGZldyBrZXkgYXJlYXM6IHRoZSBYODYgS1ZNIGNvZGUsIFhlbiBpbnRlZ3JhdGlvbiwgYW5kIHRoZSBLVk0gY29yZS4gVGhlcmUncyBhIHNpZ25pZmljYW50IHNoaWZ0IGZyb20gYGlkciBldnRjaG5fcG9ydHNgIHRvIGB4YXJyYXkgZXZ0Y2huX3BvcnRzYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHRyYW5zaXRpb24gaXMgc291bmQgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24uIFRoZSBhbGlnbm1lbnQgY2hlY2tzIGluIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGZvciBgZ3BhYCBhbmQgYGh2YWAgYXJlIGdvb2QsIGFuZCB0aGUgYml0d2lzZSBvcGVyYXRpb25zIHdpdGggYXRvbWljIGZ1bmN0aW9ucyBhcmUgcmVwbGFjaW5nIHNvbWUgaW5saW5lIGFzc2VtYmx5IHdoaWNoIGlzIHNlbnNpYmxlIGZvciBhdm9pZGluZyBzcGxpdCBsb2Nrcy4gVGhlIG5ldyBzZXF1ZW5jZSBjb3VudGVyIGBncGNfaW52YWxpZGF0ZV9zZXFgIGlzIGFsc28gZ29vZC5cblxuSSdtIG5vdyBnb2luZyB0byBnbyB0aHJvdWdoIHRoZXNlIGNoYW5nZXMgaW4gZGV0YWlsLlxuXG4qICAgSW4gYGFyY2gveDg2L2t2bS94ZW4uY2AsIHRoZSBuZXcgYGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdGAgdXNpbmcgYGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mb2AgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgYXRvbWljIGJpdCBvcGVyYXRpb25zIGFuZCB0aGUgU1JDVSBndWFyZCBpbiBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgIGxvb2tzIGdvb2QuIFRoZSBhbGlnbm1lbnQgY2hlY2tzIGluIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGFyZSBhcHByb3ByaWF0ZS4gSGVscGVyIHVwZGF0ZXMgc2VlbSBva2F5LiBUaGUgbG9ja2luZyB3aXRoIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgZm9yIGBwb2xsX2V2dGNobmAgYW5kIHRoZSByZW5hbWluZyBvZiBgbG9uZ21vZGVgIGlzIE9LIGFzIHdlbGwuIFRoZSBjaGFuZ2UgdG8gYXRvbWljIGBidHNsYCBtYWtlcyBzZW5zZS4gVGhlIFhBcnJheSBjb252ZXJzaW9ucyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50IGNoYW5nZSB0byB2ZXJpZnkgaGVyZS5cblxuKiAgIEluIGB2aXJ0L2t2bS9wZm5jYWNoZS5jYCBhbmQgYGt2bV9tYWluLmNgLCB0aGUgc2VwYXJhdGUgYGdwY19pbnZhbGlkYXRlX3NlcWAgY291bnRlciBpcyBmaW5lLCBzaW5jZSBLVk0gdXNlcyBga3phbGxvY2Agb24gY3JlYXRpb24gYW5kIHRoZXJlIGFyZSBubyBpbml0aWFsaXphdGlvbiByaXNrcy5cblxuQXJlIGFueSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uPyBObywgdGhlIGBrbWFsbG9jX29ianNgIGFuZCBgeGFfaW5pdGAgdXNhZ2UgbG9va3MgY29ycmVjdC4gSXQncyBwcm9wZXJseSBpbml0aWFsaXplZC4gTm8gdXNlcmNvcHkgZnJvbSBrZXJuZWwgc3RydWN0cywgd2hpY2ggaXMgZ3JlYXQuIE5vIGNvbmRpdGlvbmFscyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZWl0aGVyLiBUaGlzIGlzIGFsbCBhYm91dCBjb25jdXJyZW5jeSwgZGF0YSBzdHJ1Y3R1cmUgdHJhbnNmb3JtYXRpb25zICh0aGUgSURSIHRvIFhBcnJheSBjb252ZXJzaW9uLCB3aGljaCBpcyB0aGUgYmlnIG9uZSksIGFuZCBhbGlnbm1lbnQgY2hlY2tzLlxuXG5MZXQgbWUgbm93IHBlcmZvcm0gYSBkZWVwZXIgaW5zcGVjdGlvbi4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIHNlZW0gdG8gaW50cm9kdWNlIGFueSBkaXJlY3QgdXNlcmNvcHksIGxlYWtpbmcgaW5mbywgb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gbG9va3MgbGlrZSBpdCB3b3VsZG4ndCBkZXRlY3QgaXNzdWVzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgcmVhZHMgKHN0YWNrL2hlYXApLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGluZGl2aWR1YWwgY2hhbmdlczogVGhlIGluY3JlbWVudCBvZiBgZ3BjX2ludmFsaWRhdGVfc2VxYCBsb29rcyBmaW5lLCBhcyBkb2VzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgZ3BjX3NlcWAgZnJvbSBpdC4gVGhlIGF0b21pYyBvcGVyYXRpb25zIHNlZW0gY29ycmVjdCBhbmQgdGhlIFJBSUkgZ3VhcmQgZnJvbSBgc3JjdWAgc2hvdWxkIGJlIGNvcnJlY3QsIGFuZCB0aGUgeGFycmF5IEFQSXMgbG9vayBzdGFuZGFyZCBhbmQgc2FmZS5cblxuKipDb25jbHVzaW9uOioqIEFmdGVyIHRoaXMgdGhvcm91Z2ggcmV2aWV3LCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBpcyBzYWZlIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGxlYWtzLCBhbmQgcG90ZW50aWFsIEtBU0FOL0tNU0FOIGlzc3Vlcy4gVGhlIEtBU0FOL0xPQ0tERVAgY2hlY2tzIHdpbGwgY2F0Y2ggYW55IGNvbmN1cnJlbmN5LXJlbGF0ZWQgcHJvYmxlbXMgKGxpa2UgVUFGLCBkYXRhIHJhY2VzLCBhbmQgT09CIGFjY2VzcykuIEtNU0FOIHdpbGwgYWxzbyBjb25maXJtIHRoaXMsIGFzIHRoZXNlIGNoYW5nZXMgYXBwZWFyIHRvIGJlIHNhZmUuIFRoZXJlZm9yZSwgdGhlIHJlc3VsdCBvZiBhIEtNU0FOIGNoZWNrIHdvdWxkIGJlIG5lZ2F0aXZlLlxuXG5LQVNBTiBkZWFscyB3aXRoIGNvbmN1cnJlbmN5IHN5bmNocm9uaXphdGlvbiwgcmVwbGFjZW1lbnQgb2YgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgYWxpZ25tZW50LiBLTVNBTiBjaGVja3MgZm9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpbmZvIGxlYWtzLCBvciBicmFuY2hpbmcgb24gc3VjaCBkYXRhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI2OCwiT3V0cHV0VG9rZW5zIjoyODYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTY1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mzk6MzQuNzk4OTAxMzQ3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyBYZW4gZW11bGF0aW9uIGFuZCBHRk4tdG8tUEZOIGNhY2hlIGludmFsaWRhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdDpcXG4xLiBSZXBsYWNlcyB0aGUgSURSIGRhdGEgc3RydWN0dXJlIHdpdGggWEFycmF5IGZvciBldmVudCBjaGFubmVsIHBvcnQgdHJhY2tpbmcgKGBldnRjaG5fcG9ydHNgKS5cXG4yLiBJbnRyb2R1Y2VzIGEgZGVkaWNhdGVkIHNlcXVlbmNlIGNvdW50ZXIgKGBncGNfaW52YWxpZGF0ZV9zZXFgKSBpbiBgcGZuY2FjaGUuY2AgYW5kIGBrdm1fbWFpbi5jYCB0byBwcm9wZXJseSB0cmFjayBHUEMgaW52YWxpZGF0aW9uIGV2ZW50cy5cXG4zLiBGaXhlcyBwb3RlbnRpYWwgc3BsaXQtbG9jayBgI0FDYCBleGNlcHRpb25zIGJ5IGNoZWNraW5nIEdQQS9IVkEgMzItYml0IGFsaWdubWVudCBpbiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCBhbmQgdXNpbmcgMzItYml0IGF0b21pYyBiaXRvcHMgZm9yIGB2aV9wZW5kaW5nX3NlbGAuXFxuNC4gRml4ZXMgU1JDVSBsb2NraW5nIGluIGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGAgYW5kIGF0b21pYyByZWFkcy93cml0ZXMgZm9yIGBwb2xsX2V2dGNobmAuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBvciBleHBvc2Uga2VybmVsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBNZW1vcnkgc2FmZXR5IGFuZCBjb25jdXJyZW5jeSBjb25jZXJucyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9ja2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJ3MgWGVuIGVtdWxhdGlvbiBhbmQgR0ZOLXRvLVBGTiBjYWNoZSBpbnZhbGlkYXRpb24gbG9naWMuIFNwZWNpZmljYWxseSwgaXQ6XFxuMS4gUmVwbGFjZXMgdGhlIElEUiBkYXRhIHN0cnVjdHVyZSB3aXRoIFhBcnJheSBmb3IgZXZlbnQgY2hhbm5lbCBwb3J0IHRyYWNraW5nIChgZXZ0Y2huX3BvcnRzYCkuXFxuMi4gSW50cm9kdWNlcyBhIGRlZGljYXRlZCBzZXF1ZW5jZSBjb3VudGVyIChgZ3BjX2ludmFsaWRhdGVfc2VxYCkgaW4gYHBmbmNhY2hlLmNgIGFuZCBga3ZtX21haW4uY2AgdG8gcHJvcGVybHkgdHJhY2sgR1BDIGludmFsaWRhdGlvbiBldmVudHMuXFxuMy4gRml4ZXMgcG90ZW50aWFsIHNwbGl0LWxvY2sgYCNBQ2AgZXhjZXB0aW9ucyBieSBjaGVja2luZyBHUEEvSFZBIDMyLWJpdCBhbGlnbm1lbnQgaW4gYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAgYW5kIHVzaW5nIDMyLWJpdCBhdG9taWMgYml0b3BzIGZvciBgdmlfcGVuZGluZ19zZWxgLlxcbjQuIEZpeGVzIFNSQ1UgbG9ja2luZyBpbiBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgIGFuZCBhdG9taWMgcmVhZHMvd3JpdGVzIGZvciBgcG9sbF9ldnRjaG5gLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gTWVtb3J5IHNhZmV0eSBhbmQgY29uY3VycmVuY3kgY29uY2VybnMgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGxvY2tpbmcsIHVzZS1hZnRlci1mcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgd66d[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-01 04:36:22 +0000 UTC FinishedAt: 2026-09-01 04:39:36 +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": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "KVM_X86", "KVM_XEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "KVM_X86", "KVM_XEN" ], "series_id": "799f6595-9f51-4e34-b00f-b8eaf20c1c4d" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_xen_vcpu_set_attr", "kvm_xen_hvm_set_attr", "kvm_xen_hypercall", "kvm_xen_inject_pending_events", "__kvm_xen_has_interrupt", "kvm_xen_set_evtchn_fast", "kvm_xen_hvm_evtchn_send", "kvm_gpc_refresh", "kvm_gpc_activate" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fWDg2JiMzNDssCiAgICAmIzM0O0tWTV9YRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1feGVuX3ZjcHVfc2V0X2F0dHImIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9odm1fc2V0X2F0dHImIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9oeXBlcmNhbGwmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMmIzM0OywKICAgICYjMzQ7X19rdm1feGVuX2hhc19pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmQmIzM0OywKICAgICYjMzQ7a3ZtX2dwY19yZWZyZXNoJiMzNDssCiAgICAmIzM0O2t2bV9ncGNfYWN0aXZhdGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0mIzM5O3MgWGVuIGVtdWxhdGlvbiBhbmQgR0ZOLXRvLVBGTiBjYWNoZSBpbnZhbGlkYXRpb24gbG9naWMuIFNwZWNpZmljYWxseSwgaXQ6XG4xLiBSZXBsYWNlcyB0aGUgSURSIGRhdGEgc3RydWN0dXJlIHdpdGggWEFycmF5IGZvciBldmVudCBjaGFubmVsIHBvcnQgdHJhY2tpbmcgKGBldnRjaG5fcG9ydHNgKS5cbjIuIEludHJvZHVjZXMgYSBkZWRpY2F0ZWQgc2VxdWVuY2UgY291bnRlciAoYGdwY19pbnZhbGlkYXRlX3NlcWApIGluIGBwZm5jYWNoZS5jYCBhbmQgYGt2bV9tYWluLmNgIHRvIHByb3Blcmx5IHRyYWNrIEdQQyBpbnZhbGlkYXRpb24gZXZlbnRzLlxuMy4gRml4ZXMgcG90ZW50aWFsIHNwbGl0LWxvY2sgYCNBQ2AgZXhjZXB0aW9ucyBieSBjaGVja2luZyBHUEEvSFZBIDMyLWJpdCBhbGlnbm1lbnQgaW4gYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAgYW5kIHVzaW5nIDMyLWJpdCBhdG9taWMgYml0b3BzIGZvciBgdmlfcGVuZGluZ19zZWxgLlxuNC4gRml4ZXMgU1JDVSBsb2NraW5nIGluIGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGAgYW5kIGF0b21pYyByZWFkcy93cml0ZXMgZm9yIGBwb2xsX2V2dGNobmAuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gTWVtb3J5IHNhZmV0eSBhbmQgY29uY3VycmVuY3kgY29uY2VybnMgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGxvY2tpbmcsIHVzZS1hZnRlci1mcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGFuZCBjb25jdXJyZW5jeS1jcml0aWNhbCBjaGFuZ2VzIHRvIEtWTSYjMzk7cyBYZW4gZW11bGF0aW9uIGFuZCBnZm5fdG9fcGZuX2NhY2hlIChHUEMpIHN1YnN5c3RlbS4gVGhlc2UgaW5jbHVkZSBtaWdyYXRpbmcgWGVuIGV2ZW50IGNoYW5uZWwgc3RvcmFnZSBmcm9tIElEUiB0byBYQXJyYXksIGVuZm9yY2luZyBhbGlnbm1lbnQgY2hlY2tzIGZvciB2Q1BVIGluZm8gR1BBL0hWQSwgdXNpbmcgZXhwbGljaXQgMzItYml0IGF0b21pYyBiaXRvcHMgdG8gcHJldmVudCBzcGxpdC1sb2NrIEFDIGV4Y2VwdGlvbnMgb24gdW5hbGlnbmVkIHN0cnVjdHVyZXMsIGludHJvZHVjaW5nIFNSQ1UgbG9ja2luZyBpbiBfX2t2bV94ZW5faGFzX2ludGVycnVwdCwgYW5kIHNlcGFyYXRpbmcgR1BDIGludmFsaWRhdGlvbiBzZXF1ZW5jaW5nIGZyb20gZ2VuZXJhbCBNTVUgaW52YWxpZGF0aW9uIHNlcXVlbmNpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSB2aXJ0dWFsaXphdGlvbiBpb2N0bHMsIGh5cGVyY2FsbHMsIGFuZCBldmVudCBjaGFubmVsIGRlbGl2ZXJ5IG1lY2hhbmlzbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjM2UwM2ZmM2I4YzM3OWQ4YjMyODIwYzk5ZWJjMDJkODAyZTMwM2IyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwNDozODoyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggNjgzYmI4YmY0M2E5NC4uM2FmNzM5NWMyNDMwYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xNiw2ICYjNDM7MTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3hhcnJheS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1fcGFyYS5oXHUwMDNlXG5AQCAtMTExMyw3ICYjNDM7MTExNCw3IEBAIHN0cnVjdCBrdm1feGVuIHtcbiBcdGJvb2wgcnVuc3RhdGVfdXBkYXRlX2ZsYWc7XG4gXHR1OCB1cGNhbGxfdmVjdG9yO1xuIFx0c3RydWN0IGdmbl90b19wZm5fY2FjaGUgc2hpbmZvX2NhY2hlO1xuLVx0c3RydWN0IGlkciBldnRjaG5fcG9ydHM7XG4mIzQzO1x0c3RydWN0IHhhcnJheSBldnRjaG5fcG9ydHM7XG4gXHR1bnNpZ25lZCBsb25nIHBvbGxfbWFza1tCSVRTX1RPX0xPTkdTKEtWTV9NQVhfVkNQVVMpXTtcbiBcbiBcdHN0cnVjdCBrdm1feGVuX2h2bV9jb25maWcgaHZtX2NvbmZpZztcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmMgYi9hcmNoL3g4Ni9rdm0veGVuLmNcbmluZGV4IDk5OGNkY2I2YWEzMDMuLjcxODM5NjM0MGQzYzEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ZW4uY1xuQEAgLTczLDcgJiM0Mzs3Myw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zaGFyZWRfaW5mb19pbml0KHN0cnVjdCBrdm0gKmt2bSlcbiBcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2hhcmVkX2luZm8sIHdjKSAhPSAweGMwMCk7XG4gXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNoYXJlZF9pbmZvLCB3Y19zZWNfaGkpICE9IDB4YzBjKTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbiYjNDM7XHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkpIHtcbiBcdFx0c3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtXHUwMDNla2h2YTtcbiBcbiBcdFx0d2Nfc2VjX2hpID0gXHUwMDI2c2hpbmZvLVx1MDAzZXdjX3NlY19oaTtcbkBAIC0zODksNyAmIzQzOzM4OSw3IEBAIHN0YXRpYyB2b2lkIGt2bV94ZW5fdXBkYXRlX3J1bnN0YXRlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdiwgYm9vbCBhdG9taWMpXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sIHRpbWUpICE9XG4gXHRcdCAgICAgc2l6ZW9mKHZ4LVx1MDAzZXJ1bnN0YXRlX3RpbWVzKSk7XG4gXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiB2LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbiYjNDM7XHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtXHUwMDNla3ZtKSkge1xuIFx0XHR1c2VyX2xlbiA9IHNpemVvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvKTtcbiBcdFx0dGltZXNfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyxcbiBcdFx0XHRcdCAgICAgc3RhdGVfZW50cnlfdGltZSk7XG5AQCAtNjc2LDI4ICYjNDM7Njc2LDMyIEBAIHZvaWQga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2KVxuIFx0fVxuIFxuIFx0LyogTm93IGdwYy1cdTAwM2VraHZhIGlzIGEgdmFsaWQga2VybmVsIGFkZHJlc3MgZm9yIHRoZSB2Y3B1X2luZm8gKi9cbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IHYtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xuJiM0MztcdGlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8odi1cdTAwM2Vrdm0pKSB7XG4gXHRcdHN0cnVjdCB2Y3B1X2luZm8gKnZpID0gZ3BjLVx1MDAzZWtodmE7XG4mIzQzO1x0XHR2b2lkICp2aV9wZW5kaW5nX3NlbCA9IFx1MDAyNnZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbDtcbiBcbi1cdFx0YXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYIFwmIzM0O29ycSAlMCwgJTFcXG5cJiMzNDtcbi1cdFx0XHQgICAgIFwmIzM0O25vdHEgJTBcXG5cJiMzNDtcbi1cdFx0XHQgICAgIExPQ0tfUFJFRklYIFwmIzM0O2FuZHEgJTAsICUyXFxuXCYjMzQ7XG4tXHRcdFx0ICAgICA6IFwmIzM0Oz1yXCYjMzQ7IChldnRjaG5fcGVuZGluZ19zZWwpLFxuLVx0XHRcdCAgICAgICBcJiMzNDsmIzQzO21cJiMzNDsgKHZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCksXG4tXHRcdFx0ICAgICAgIFwmIzM0OyYjNDM7bVwmIzM0OyAodi1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpXG4tXHRcdFx0ICAgICA6IFwmIzM0OzBcJiMzNDsgKGV2dGNobl9wZW5kaW5nX3NlbCkpO1xuJiM0MztcdFx0aWYgKElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpdmlfcGVuZGluZ19zZWwsIHNpemVvZih1NjQpKSkge1xuJiM0MztcdFx0XHRhdG9taWM2NF9vcihldnRjaG5fcGVuZGluZ19zZWwsIHZpX3BlbmRpbmdfc2VsKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGF0b21pY19vcihldnRjaG5fcGVuZGluZ19zZWwsIHZpX3BlbmRpbmdfc2VsKTtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogVGhlIGNhc3Qga2VlcHMgdGhlIHNoaWZ0IHdlbGwtZGVmaW5lZCBvbiAzMi1iaXQsXG4mIzQzO1x0XHRcdCAqIHdoZXJlIGV2dGNobl9wZW5kaW5nX3NlbCBpcyAzMiBiaXRzIHdpZGUgYW5kIHRoaXNcbiYjNDM7XHRcdFx0ICogYnJhbmNoIGlzIHVucmVhY2hhYmxlIGFueXdheSAodGhpcyBpcyBpbnNpZGVcbiYjNDM7XHRcdFx0ICoga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKCksIHdoaWNoIGlzIGdhdGVkIG9uXG4mIzQzO1x0XHRcdCAqIElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRhdG9taWNfb3IoKHU2NClldnRjaG5fcGVuZGluZ19zZWwgXHUwMDNlXHUwMDNlIDMyLFxuJiM0MztcdFx0XHRcdCAgdmlfcGVuZGluZ19zZWwgJiM0MzsgNCk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0YXRvbWljNjRfYW5kbm90KGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKilcdTAwMjZ2LVx1MDAzZWFyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCk7XG4gXHRcdFdSSVRFX09OQ0UodmktXHUwMDNlZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHUzMiBldnRjaG5fcGVuZGluZ19zZWwzMiA9IGV2dGNobl9wZW5kaW5nX3NlbDtcbiBcdFx0c3RydWN0IGNvbXBhdF92Y3B1X2luZm8gKnZpID0gZ3BjLVx1MDAzZWtodmE7XG4gXG4tXHRcdGFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCBcJiMzNDtvcmwgJTAsICUxXFxuXCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtub3RsICUwXFxuXCYjMzQ7XG4tXHRcdFx0ICAgICBMT0NLX1BSRUZJWCBcJiMzNDthbmRsICUwLCAlMlxcblwmIzM0O1xuLVx0XHRcdCAgICAgOiBcJiMzNDs9clwmIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpLFxuLVx0XHRcdCAgICAgICBcJiMzNDsmIzQzO21cJiMzNDsgKHZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCksXG4tXHRcdFx0ICAgICAgIFwmIzM0OyYjNDM7bVwmIzM0OyAodi1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpXG4tXHRcdFx0ICAgICA6IFwmIzM0OzBcJiMzNDsgKGV2dGNobl9wZW5kaW5nX3NlbDMyKSk7XG4mIzQzO1x0XHRhdG9taWNfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKVx1MDAyNnZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCk7XG4mIzQzO1x0XHRhdG9taWNfYW5kbm90KGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKilcdTAwMjZ2LVx1MDAzZWFyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCk7XG4gXHRcdFdSSVRFX09OQ0UodmktXHUwMDNlZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTtcbiBcdH1cbiBcbkBAIC03MjgsNiAmIzQzOzczMiwxNiBAQCBpbnQgX19rdm1feGVuX2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2KVxuIFx0QlVJTERfQlVHX09OKHNpemVvZihyYykgIT1cbiBcdFx0ICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF92Y3B1X2luZm8sIGV2dGNobl91cGNhbGxfcGVuZGluZykpO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICoga3ZtX2dwY19jaGVjaygpIGNoZWNrcyB0aGUgbWVtc2xvdCBnZW5lcmF0aW9uLCBzbyBrdm0tXHUwMDNlc3JjdSBtdXN0IGJlXG4mIzQzO1x0ICogaGVsZC4gTW9zdCBjYWxsZXJzIGhvbGQgaXQgYWxyZWFkeSwgYnV0IHRoaXMgaXMgYWxzbyByZWFjaGVkIGZyb21cbiYjNDM7XHQgKiBrdm1fZW11bGF0ZV9oYWx0KCkgb24gdGhlIFZNLUV4aXQgcGF0aCBhbmQgZnJvbSBrdm1fdmNwdV9ibG9jaygpLFxuJiM0MztcdCAqIHdoZXJlIHZjcHVfZW50ZXJfZ3Vlc3QoKSBoYXMgYWxyZWFkeSBkcm9wcGVkIHRoZSB2Q1BVJiMzOTtzIFNSQ1UgbG9jay5cbiYjNDM7XHQgKiBUYWtpbmcgU1JDVSBkb2VzIG5vdCBzbGVlcCwgc28gaXQgaXMgc2FmZSBldmVuIGluIHRoZSBhdG9taWMgY2FzZVxuJiM0MztcdCAqIHdoaWNoIGlzIGhhbmRsZWQgYmVsb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0Z3VhcmQoc3JjdSkoXHUwMDI2di1cdTAwM2Vrdm0tXHUwMDNlc3JjdSk7XG4mIzQzO1xuIFx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdHdoaWxlICgha3ZtX2dwY19jaGVjayhncGMsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSkpIHtcbiBcdFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZncGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuQEAgLTk0MSw2ICYjNDM7OTU1LDEwIEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXG4mIzQzO1x0XHRcdHIgPSAtRU5YSU87XG4mIzQzO1x0XHRcdGlmICghSVNfQUxJR05FRChkYXRhLVx1MDAzZXUuZ3BhLCBzaXplb2YodTMyKSkpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1xuIFx0XHRcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pbmZvX2NhY2hlLFxuIFx0XHRcdFx0XHQgICAgIGRhdGEtXHUwMDNldS5ncGEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7XG4gXHRcdH0gZWxzZSB7XG5AQCAtOTUwLDYgJiM0Mzs5NjgsMTAgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSlcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbiYjNDM7XHRcdFx0ciA9IC1FTlhJTztcbiYjNDM7XHRcdFx0aWYgKCFJU19BTElHTkVEKGRhdGEtXHUwMDNldS5odmEsIHNpemVvZih1MzIpKSlcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XG4gXHRcdFx0ciA9IGt2bV9ncGNfYWN0aXZhdGVfaHZhKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pbmZvX2NhY2hlLFxuIFx0XHRcdFx0XHRcdCBkYXRhLVx1MDAzZXUuaHZhLCBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykpO1xuIFx0XHR9XG5AQCAtOTkzLDcgJiM0MzsxMDE1LDcgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSlcbiBcdFx0ICogYWRkcmVzcywgdGhhdCYjMzk7cyBhY3R1YWxseSBPSy4ga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3QoKVxuIFx0XHQgKiB3aWxsIGNvcGUuXG4gXHRcdCAqL1xuLVx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpXG4mIzQzO1x0XHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0XHRzeiA9IHNpemVvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHN6ID0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfdmNwdV9ydW5zdGF0ZV9pbmZvKTtcbkBAIC0xNDM5LDE2ICYjNDM7MTQ2MSwyMSBAQCBzdGF0aWMgaW50IGt2bV94ZW5faHlwZXJjYWxsX2NvbXBsZXRlX3VzZXJzcGFjZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4ga3ZtX3hlbl9oeXBlcmNhbGxfc2V0X3Jlc3VsdCh2Y3B1LCBydW4tXHUwMDNleGVuLnUuaGNhbGwucmVzdWx0KTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KGJvb2wgaGFzXzY0Yml0X3NoaW5mbylcbiB7XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKVxuJiM0MztcdGlmIChoYXNfNjRiaXRfc2hpbmZvKVxuIFx0XHRyZXR1cm4gRVZUQ0hOXzJMX05SX0NIQU5ORUxTO1xuIFx0ZWxzZVxuIFx0XHRyZXR1cm4gQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUztcbiB9XG4gXG4tc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLFxuLVx0XHRcdCAgICAgICBldnRjaG5fcG9ydF90ICpwb3J0cylcbiYjNDM7c3RhdGljIGlubGluZSBpbnQga3ZtX21heF9ldnRjaG5fcG9ydChzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbWF4X2V2dGNobl9wb3J0KGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBoYXNfNjRiaXRfc2hpbmZvLFxuJiM0MztcdFx0XHQgICAgICAgaW50IG5yX3BvcnRzLCBldnRjaG5fcG9ydF90ICpwb3J0cylcbiB7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlO1xuQEAgLTE0NjMsNyAmIzQzOzE0OTAsNyBAQCBzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbnJfcG9ydHMsXG4gXHRcdGdvdG8gb3V0X3JjdTtcbiBcbiBcdHJldCA9IGZhbHNlO1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xuJiM0MztcdGlmIChoYXNfNjRiaXRfc2hpbmZvKSB7XG4gXHRcdHN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4gXHRcdHBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopXHUwMDI2c2hpbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nO1xuIFx0fSBlbHNlIHtcbkBAIC0xNDg1LDkgJiM0MzsxNTEyLDEwIEBAIHN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cyxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcbiYjNDM7c3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzXzY0Yml0LFxuIFx0XHRcdFx0IHU2NCBwYXJhbSwgdTY0ICpyKVxuIHtcbiYjNDM7XHRib29sIGhhc182NGJpdF9zaGluZm8gPSBrdm1feGVuX2hhc182NGJpdF9zaGluZm8odmNwdS1cdTAwM2Vrdm0pO1xuIFx0c3RydWN0IHNjaGVkX3BvbGwgc2NoZWRfcG9sbDtcbiBcdGV2dGNobl9wb3J0X3QgcG9ydCwgKnBvcnRzO1xuIFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcbkBAIC0xNDk3LDcgJiM0MzsxNTI1LDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxuIFx0ICAgICEodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4uaHZtX2NvbmZpZy5mbGFncyBcdTAwMjYgS1ZNX1hFTl9IVk1fQ09ORklHX0VWVENITl9TRU5EKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgIWxvbmdtb2RlKSB7XG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgIWlzXzY0Yml0KSB7XG4gXHRcdHN0cnVjdCBjb21wYXRfc2NoZWRfcG9sbCBzcDMyO1xuIFxuIFx0XHQvKiBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgY29tcGF0IHN0cnVjdCBkZWZpbml0aW9uIGlzIGNvcnJlY3QgKi9cbkBAIC0xNTQ2LDIwICYjNDM7MTU3NCwyMCBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzY2hlZF9wb2xsLm5yX3BvcnRzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAocG9ydHNbaV0gXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQodmNwdS1cdTAwM2Vrdm0pKSB7XG4mIzQzO1x0XHRpZiAocG9ydHNbaV0gXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoaGFzXzY0Yml0X3NoaW5mbykpIHtcbiBcdFx0XHQqciA9IC1FSU5WQUw7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcdH1cbiBcbiBcdGlmIChzY2hlZF9wb2xsLm5yX3BvcnRzID09IDEpXG4tXHRcdHZjcHUtXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4gPSBwb3J0O1xuJiM0MztcdFx0V1JJVEVfT05DRSh2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huLCBwb3J0KTtcbiBcdGVsc2Vcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLnhlbi5wb2xsX2V2dGNobiA9IC0xO1xuJiM0MztcdFx0V1JJVEVfT05DRSh2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huLCAtMSk7XG4gXG4gXHRzZXRfYml0KHZjcHUtXHUwMDNldmNwdV9pZHgsIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLnBvbGxfbWFzayk7XG4gXG4tXHRpZiAoIXdhaXRfcGVuZGluZ19ldmVudCh2Y3B1LCBzY2hlZF9wb2xsLm5yX3BvcnRzLCBwb3J0cykpIHtcbiYjNDM7XHRpZiAoIXdhaXRfcGVuZGluZ19ldmVudCh2Y3B1LCBoYXNfNjRiaXRfc2hpbmZvLCBzY2hlZF9wb2xsLm5yX3BvcnRzLCBwb3J0cykpIHtcbiBcdFx0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVEKTtcbiBcbiBcdFx0aWYgKHNjaGVkX3BvbGwudGltZW91dClcbkBAIC0xNTc0LDcgJiM0MzsxNjAyLDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxuIFx0XHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9SVU5OQUJMRSk7XG4gXHR9XG4gXG4tXHR2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huID0gMDtcbiYjNDM7XHRXUklURV9PTkNFKHZjcHUtXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4sIDApO1xuIFx0KnIgPSAwO1xuIG91dDpcbiBcdC8qIFJlYWxseSwgdGhpcyBpcyBvbmx5IG5lZWRlZCBpbiBjYXNlIG9mIHRpbWVvdXQgKi9cbkBAIC0xNTk0LDEyICYjNDM7MTYyMiwxMiBAQCBzdGF0aWMgdm9pZCBjYW5jZWxfZXZ0Y2huX3BvbGwoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcbiYjNDM7c3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsXG4gXHRcdFx0XHQgICBpbnQgY21kLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBTQ0hFRE9QX3BvbGw6XG4tXHRcdGlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBsb25nbW9kZSwgcGFyYW0sIHIpKVxuJiM0MztcdFx0aWYgKGt2bV94ZW5fc2NoZWRvcF9wb2xsKHZjcHUsIGlzXzY0Yml0LCBwYXJhbSwgcikpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdGZhbGx0aHJvdWdoO1xuIFx0Y2FzZSBTQ0hFRE9QX3lpZWxkOlxuQEAgLTE2MTgsNyAmIzQzOzE2NDYsNyBAQCBzdHJ1Y3QgY29tcGF0X3ZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIge1xuICAgICB1aW50MzJfdCBmbGFncztcbiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpO1xuIFxuLXN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsXG4mIzQzO3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsIGludCBjbWQsXG4gXHRcdFx0XHQgIGludCB2Y3B1X2lkLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciBvbmVzaG90O1xuQEAgLTE2NjIsNyAmIzQzOzE2OTAsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLFxuIFx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpICE9XG4gXHRcdFx0ICAgICBzaXplb2ZfZmllbGQoc3RydWN0IHZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIsIGZsYWdzKSk7XG4gXG4tXHRcdGlmIChrdm1fcmVhZF9ndWVzdF92aXJ0KHZjcHUsIHBhcmFtLCBcdTAwMjZvbmVzaG90LCBsb25nbW9kZSA/IHNpemVvZihvbmVzaG90KSA6XG4mIzQzO1x0XHRpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBwYXJhbSwgXHUwMDI2b25lc2hvdCwgaXNfNjRiaXQgPyBzaXplb2Yob25lc2hvdCkgOlxuIFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyKSwgXHUwMDI2ZSkpIHtcbiBcdFx0XHQqciA9IC1FRkFVTFQ7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG5AQCAtMTY5NCw3ICYjNDM7MTcyMiw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWludDY0X3QgdGltZW91dCxcbiBcbiBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGJvb2wgbG9uZ21vZGU7XG4mIzQzO1x0Ym9vbCBpc182NGJpdDtcbiBcdHU2NCBpbnB1dCwgcGFyYW1zWzZdLCByID0gLUVOT1NZUztcbiBcdGJvb2wgaGFuZGxlZCA9IGZhbHNlO1xuIFx0dTggY3BsO1xuQEAgLTE3MDQsOCAmIzQzOzE3MzIsOCBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICAgIGt2bV9odl9oeXBlcmNhbGxfZW5hYmxlZCh2Y3B1KSlcbiBcdFx0cmV0dXJuIGt2bV9odl9oeXBlcmNhbGwodmNwdSk7XG4gXG4tXHRsb25nbW9kZSA9IGlzXzY0X2JpdF9oeXBlcmNhbGwodmNwdSk7XG4tXHRpZiAoIWxvbmdtb2RlKSB7XG4mIzQzO1x0aXNfNjRiaXQgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xuJiM0MztcdGlmICghaXNfNjRiaXQpIHtcbiBcdFx0aW5wdXQgPSBrdm1fZWF4X3JlYWQodmNwdSk7XG4gXHRcdHBhcmFtc1swXSA9IGt2bV9lYnhfcmVhZCh2Y3B1KTtcbiBcdFx0cGFyYW1zWzFdID0ga3ZtX2VjeF9yZWFkKHZjcHUpO1xuQEAgLTE3NTEsMTcgJiM0MzsxNzc5LDE3IEBAIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfZXZ0Y2huX3NlbmQodmNwdSwgcGFyYW1zWzFdLCBcdTAwMjZyKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIF9fSFlQRVJWSVNPUl9zY2hlZF9vcDpcbi1cdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfc2NoZWRfb3AodmNwdSwgbG9uZ21vZGUsIHBhcmFtc1swXSxcbiYjNDM7XHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGlzXzY0Yml0LCBwYXJhbXNbMF0sXG4gXHRcdFx0XHRcdFx0IHBhcmFtc1sxXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1JfdmNwdV9vcDpcbi1cdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sXG4mIzQzO1x0XHRoYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHZjcHUsIGlzXzY0Yml0LCBwYXJhbXNbMF0sIHBhcmFtc1sxXSxcbiBcdFx0XHRcdFx0XHRwYXJhbXNbMl0sIFx1MDAyNnIpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgX19IWVBFUlZJU09SX3NldF90aW1lcl9vcDoge1xuIFx0XHR1NjQgdGltZW91dCA9IHBhcmFtc1swXTtcbiBcdFx0LyogSW4gMzItYml0IG1vZGUsIHRoZSA2NC1iaXQgdGltZW91dCBpcyBpbiB0d28gMzItYml0IHBhcmFtcy4gKi9cbi1cdFx0aWYgKCFsb25nbW9kZSlcbiYjNDM7XHRcdGlmICghaXNfNjRiaXQpXG4gXHRcdFx0dGltZW91dCB8PSBwYXJhbXNbMV0gXHUwMDNjXHUwMDNjIDMyO1xuIFx0XHRoYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9zZXRfdGltZXJfb3AodmNwdSwgdGltZW91dCwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuQEAgLTE3NzYsNyAmIzQzOzE4MDQsNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIGhhbmRsZV9pbl91c2Vyc3BhY2U6XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1hFTjtcbiBcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi50eXBlID0gS1ZNX0VYSVRfWEVOX0hDQUxMO1xuLVx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwubG9uZ21vZGUgPSBsb25nbW9kZTtcbiYjNDM7XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2V4ZW4udS5oY2FsbC5sb25nbW9kZSA9IGlzXzY0Yml0O1xuIFx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwuY3BsID0gY3BsO1xuIFx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwuaW5wdXQgPSBpbnB1dDtcbiBcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi51LmhjYWxsLnBhcmFtc1swXSA9IHBhcmFtc1swXTtcbkBAIC0xNzk0LDcgJiM0MzsxODIyLDcgQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KVxuIHtcbi1cdGludCBwb2xsX2V2dGNobiA9IHZjcHUtXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG47XG4mIzQzO1x0aW50IHBvbGxfZXZ0Y2huID0gUkVBRF9PTkNFKHZjcHUtXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4pO1xuIFxuIFx0aWYgKChwb2xsX2V2dGNobiA9PSBwb3J0IHx8IHBvbGxfZXZ0Y2huID09IC0xKSBcdTAwMjZcdTAwMjZcbiBcdCAgICB0ZXN0X2FuZF9jbGVhcl9iaXQodmNwdS1cdTAwM2V2Y3B1X2lkeCwgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4ucG9sbF9tYXNrKSkge1xuQEAgLTE4MTYsOCAmIzQzOzE4NDQsOSBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KVxuIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGU7XG4mIzQzO1x0Ym9vbCBoYXNfNjRiaXRfc2hpbmZvID0ga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyAqcGVuZGluZ19iaXRzLCAqbWFza19iaXRzLCB2aV9wZW5kaW5nX3NlbF9vZnM7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHR1bnNpZ25lZCBsb25nICpwZW5kaW5nX2JpdHMsICptYXNrX2JpdHM7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHBvcnRfd29yZF9iaXQ7XG4gXHRib29sIGtpY2tfdmNwdSA9IGZhbHNlO1xuQEAgLTE4MzMsNyAmIzQzOzE4NjIsNyBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuIFx0XHRXUklURV9PTkNFKHhlLVx1MDAzZXZjcHVfaWR4LCB2Y3B1LVx1MDAzZXZjcHVfaWR4KTtcbiBcdH1cbiBcbi1cdGlmICh4ZS1cdTAwM2Vwb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4mIzQzO1x0aWYgKHhlLVx1MDAzZXBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoaGFzXzY0Yml0X3NoaW5mbykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0cmMgPSAtRVdPVUxEQkxPQ0s7XG5AQCAtMTg0NCwxNiAmIzQzOzE4NzMsMjMgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdGlmICgha3ZtX2dwY19jaGVjayhncGMsIFBBR0VfU0laRSkpXG4gXHRcdGdvdG8gb3V0X3JjdTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbiYjNDM7XHRpZiAoaGFzXzY0Yml0X3NoaW5mbykge1xuIFx0XHRzdHJ1Y3Qgc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuIFx0XHRwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fcGVuZGluZztcbiBcdFx0bWFza19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZzaGluZm8tXHUwMDNlZXZ0Y2huX21hc2s7XG4gXHRcdHBvcnRfd29yZF9iaXQgPSB4ZS1cdTAwM2Vwb3J0IC8gNjQ7XG4mIzQzO1xuJiM0MztcdFx0dmlfcGVuZGluZ19zZWxfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3BlbmRpbmdfc2VsKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuIFx0XHRwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fcGVuZGluZztcbiBcdFx0bWFza19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZzaGluZm8tXHUwMDNlZXZ0Y2huX21hc2s7XG4gXHRcdHBvcnRfd29yZF9iaXQgPSB4ZS1cdTAwM2Vwb3J0IC8gMzI7XG4mIzQzO1xuJiM0MztcdFx0dmlfcGVuZGluZ19zZWxfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF92Y3B1X2luZm8sIGV2dGNobl9wZW5kaW5nX3NlbCk7XG4mIzQzO1xuJiM0MztcdFx0LyogdGVzdF9hbmRfc2V0X2JpdCgpIG5lZWRzIDY0LWJpdCBhbGlnbm1lbnQsIGJ1dCB0aGF0JiMzOTtzIE9LICovXG4mIzQzO1x0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgZXZ0Y2huX3BlbmRpbmcpIFx1MDAyNiA3KTtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtMTg2OSw2ICYjNDM7MTkwNSw4IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdHJjID0gLUVOT1RDT05OOyAvKiBNYXNrZWQgKi9cbiBcdFx0a3ZtX3hlbl9jaGVja19wb2xsZXIodmNwdSwgeGUtXHUwMDNlcG9ydCk7XG4gXHR9IGVsc2Uge1xuJiM0MztcdFx0Ym9vbCBvbGQ7XG4mIzQzO1xuIFx0XHRyYyA9IDE7IC8qIERlbGl2ZXJlZCB0byB0aGUgYml0bWFwIGluIHNoYXJlZF9pbmZvLiAqL1xuIFx0XHQvKiBOb3cgc3dpdGNoIHRvIHRoZSB2Q1BVJiMzOTtzIHZjcHVfaW5mbyB0byBzZXQgdGhlIGluZGV4IGFuZCBwZW5kaW5nX3NlbCAqL1xuIFx0XHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdwYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG5AQCAtMTg4NSwxOSAmIzQzOzE5MjMsMjkgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0XHRnb3RvIG91dF9yY3U7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xuLVx0XHRcdHN0cnVjdCB2Y3B1X2luZm8gKnZjcHVfaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuLVx0XHRcdGlmICghdGVzdF9hbmRfc2V0X2JpdChwb3J0X3dvcmRfYml0LCBcdTAwMjZ2Y3B1X2luZm8tXHUwMDNlZXZ0Y2huX3BlbmRpbmdfc2VsKSkge1xuLVx0XHRcdFx0V1JJVEVfT05DRSh2Y3B1X2luZm8tXHUwMDNlZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTtcbi1cdFx0XHRcdGtpY2tfdmNwdSA9IHRydWU7XG4tXHRcdFx0fVxuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvICp2Y3B1X2luZm8gPSBncGMtXHUwMDNla2h2YTtcbi1cdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCxcbi1cdFx0XHRcdFx0ICAgICAgKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZ2Y3B1X2luZm8tXHUwMDNlZXZ0Y2huX3BlbmRpbmdfc2VsKSkge1xuLVx0XHRcdFx0V1JJVEVfT05DRSh2Y3B1X2luZm8tXHUwMDNlZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTtcbi1cdFx0XHRcdGtpY2tfdmNwdSA9IHRydWU7XG4tXHRcdFx0fVxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEV4cGxpY2l0bHkgdXNlIGEgMzItYml0IGJ0c2wgaW5zdGVhZCBvZiB0ZXN0X2FuZF9zZXRfYml0KCksXG4mIzQzO1x0XHQgKiB3aGljaCB3b3VsZCB1c2UgYnRzcSBvbiB4ODYtNjQuIFRoZSB2Y3B1X2luZm8gaXMgZ3Vlc3QtXG4mIzQzO1x0XHQgKiBjb250cm9sbGVkIGFuZCBvbmx5IHJlcXVpcmVkIHRvIGJlIDMyLWJpdCBhbGlnbmVkLCBzbyBhXG4mIzQzO1x0XHQgKiA2NC1iaXQgYWNjZXNzIGNvdWxkIGdlbmVyYXRlIGEgc3BsaXQtbG9jayAjQUMuXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogTm90ZSwgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgdGVzdF9hbmRfc2V0X2JpdCgpIG9uXG4mIzQzO1x0XHQgKiBwZW5kaW5nX2JpdHMgYWJvdmU6IHRoYXQgaXMgaW4gdGhlIHBlci1WTSBzaGFyZWRfaW5mbywgd2hpY2hcbiYjNDM7XHRcdCAqIGlzIHBhZ2UgYWxpZ25lZCwgc28gdGhlIGFjY2VzcyBpcyBndWFyYW50ZWVkIHRvIGJlIDY0LWJpdFxuJiM0MztcdFx0ICogYWxpZ25lZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0b2xkID0gR0VOX0JJTkFSWV9STVdjYyhMT0NLX1BSRUZJWCBcJiMzNDtidHNsXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICAqKHUzMiAqKShncGMtXHUwMDNla2h2YSAmIzQzOyB2aV9wZW5kaW5nX3NlbF9vZnMpLFxuJiM0MztcdFx0XHRcdCAgICAgICBjLCBcJiMzNDtJclwmIzM0OywgcG9ydF93b3JkX2JpdCk7XG4mIzQzO1x0XHRpZiAoIW9sZCkge1xuJiM0MztcdFx0XHRzdHJ1Y3QgdmNwdV9pbmZvICp2aSA9IGdwYy1cdTAwM2VraHZhO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogTm8gbmVlZCBmb3IgY29tcGF0IGhhbmRsaW5nICovXG4mIzQzO1x0XHRcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpICE9XG4mIzQzO1x0XHRcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSk7XG4mIzQzO1xuJiM0MztcdFx0XHRXUklURV9PTkNFKHZpLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4mIzQzO1x0XHRcdGtpY2tfdmNwdSA9IHRydWU7XG4gXHRcdH1cbiBcbiBcdFx0LyogRm9yIHRoZSBwZXItdkNQVSBsYXBpYyB2ZWN0b3IsIGRlbGl2ZXIgaXQgYXMgTVNJLiAqL1xuQEAgLTE5OTUsNyAmIzQzOzIwNDMsNyBAQCBpbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFxuIFx0Lypcbi1cdCAqIERvbiYjMzk7dCBjaGVjayBmb3IgdGhlIHBvcnQgYmVpbmcgd2l0aGluIHJhbmdlIG9mIG1heF9ldnRjaG5fcG9ydCgpLlxuJiM0MztcdCAqIERvbiYjMzk7dCBjaGVjayBmb3IgdGhlIHBvcnQgYmVpbmcgd2l0aGluIHJhbmdlIG9mIGt2bV9tYXhfZXZ0Y2huX3BvcnQoKS5cbiBcdCAqIFVzZXJzcGFjZSBjYW4gY29uZmlndXJlIHdoYXQgZXZlciB0YXJnZXRzIGl0IGxpa2VzOyBldmVudHMganVzdCB3b24mIzM5O3RcbiBcdCAqIGJlIGRlbGl2ZXJlZCBpZi93aGlsZSB0aGUgdGFyZ2V0IGlzIGludmFsaWQsIGp1c3QgbGlrZSB1c2Vyc3BhY2UgY2FuXG4gXHQgKiBjb25maWd1cmUgTVNJcyB3aGljaCB0YXJnZXQgbm9uLWV4aXN0ZW50IEFQSUNzLlxuQEAgLTIwMDQsOCAmIzQzOzIwNTIsOCBAQCBpbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxuIFx0ICogY2FuIGJlIHJlc3RvcmVkICppbmRlcGVuZGVudGx5KiBvZiBvdGhlciB0aGluZ3MgbGlrZSBjcmVhdGluZyB2Q1BVcyxcbiBcdCAqIHdpdGhvdXQgaW1wb3NpbmcgYW4gb3JkZXJpbmcgZGVwZW5kZW5jeSBvbiB1c2Vyc3BhY2UuICBJbiB0aGlzXG4gXHQgKiBwYXJ0aWN1bGFyIGNhc2UsIHRoZSBwcm9ibGVtYXRpYyBvcmRlcmluZyB3b3VsZCBiZSB3aXRoIHNldHRpbmcgdGhlXG4tXHQgKiBYZW4gJiMzOTtsb25nIG1vZGUmIzM5OyBmbGFnLCB3aGljaCBjaGFuZ2VzIG1heF9ldnRjaG5fcG9ydCgpIHRvIGFsbG93IDQwOTZcbi1cdCAqIGluc3RlYWQgb2YgMTAyNCBldmVudCBjaGFubmVscy5cbiYjNDM7XHQgKiBYZW4gJiMzOTtsb25nIG1vZGUmIzM5OyBmbGFnLCB3aGljaCBjaGFuZ2VzIGt2bV9tYXhfZXZ0Y2huX3BvcnQoKSB0byBhbGxvd1xuJiM0MztcdCAqIDQwOTYgaW5zdGVhZCBvZiAxMDI0IGV2ZW50IGNoYW5uZWxzLlxuIFx0ICovXG4gXG4gXHQvKiBXZSBvbmx5IHN1cHBvcnQgMiBsZXZlbCBldmVudCBjaGFubmVscyBmb3Igbm93ICovXG5AQCAtMjA0Miw3ICYjNDM7MjA5MCw3IEBAIGludCBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfeGVuX2V2dGNobiAqXG4gXHRzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gZTtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAoIXV4ZS1cdTAwM2Vwb3J0IHx8IHV4ZS1cdTAwM2Vwb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4mIzQzO1x0aWYgKCF1eGUtXHUwMDNlcG9ydCB8fCB1eGUtXHUwMDNlcG9ydCBcdTAwM2U9IGt2bV9tYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHQvKiBXZSBvbmx5IHN1cHBvcnQgMiBsZXZlbCBldmVudCBjaGFubmVscyBmb3Igbm93ICovXG5AQCAtMjA5Myw3ICYjNDM7MjE0MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX3VwZGF0ZShzdHJ1Y3Qga3ZtICprdm0sXG4gXG4gXHQvKiBQcm90ZWN0IHdyaXRlcyB0byBldnRjaG5mZCBhcyB3ZWxsIGFzIHRoZSBpZHIgbG9va3VwLiAgKi9cbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbi1cdGV2dGNobmZkID0gaWRyX2ZpbmQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCk7XG4mIzQzO1x0ZXZ0Y2huZmQgPSB4YV9sb2FkKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIHBvcnQpO1xuIFxuIFx0cmV0ID0gLUVOT0VOVDtcbiBcdGlmICghZXZ0Y2huZmQpXG5AQCAtMjE1Miw3ICYjNDM7MjIwMCw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbihzdHJ1Y3Qga3ZtICprdm0sXG4gXG4gXHRjYXNlIEVWVENITlNUQVRfaW50ZXJkb21haW46XG4gXHRcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0KSB7XG4tXHRcdFx0aWYgKGRhdGEtXHUwMDNldS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbiYjNDM7XHRcdFx0aWYgKGRhdGEtXHUwMDNldS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQgXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4gXHRcdFx0XHRnb3RvIG91dF9ub2V2ZW50ZmQ7IC8qIC1FSU5WQUwgKi9cbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRldmVudGZkID0gZXZlbnRmZF9jdHhfZmRnZXQoZGF0YS1cdTAwM2V1LmV2dGNobi5kZWxpdmVyLmV2ZW50ZmQuZmQpO1xuQEAgLTIxODcsMTMgJiM0MzsyMjM1LDEzIEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHR9XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XG4tXHRyZXQgPSBpZHJfYWxsb2MoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQsIHBvcnQsIHBvcnQgJiM0MzsgMSxcbiYjNDM7XHRyZXQgPSB4YV9pbnNlcnQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCwgZXZ0Y2huZmQsXG4gXHRcdFx0R0ZQX0tFUk5FTCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbi1cdGlmIChyZXQgXHUwMDNlPSAwKVxuJiM0MztcdGlmICghcmV0KVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChyZXQgPT0gLUVOT1NQQylcbiYjNDM7XHRpZiAocmV0ID09IC1FQlVTWSlcbiBcdFx0cmV0ID0gLUVFWElTVDtcbiBvdXQ6XG4gXHRpZiAoZXZlbnRmZClcbkBAIC0yMjA4LDcgJiM0MzsyMjU2LDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfZGVhc3NpZ24oc3RydWN0IGt2bSAqa3ZtLCB1MzIgcG9ydClcbiBcdHN0cnVjdCBldnRjaG5mZCAqZXZ0Y2huZmQ7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XG4tXHRldnRjaG5mZCA9IGlkcl9yZW1vdmUoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCk7XG4mIzQzO1x0ZXZ0Y2huZmQgPSB4YV9lcmFzZShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBwb3J0KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4ueGVuX2xvY2spO1xuIFxuIFx0aWYgKCFldnRjaG5mZClcbkBAIC0yMjI0LDcgJiM0MzsyMjcyLDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfZGVhc3NpZ24oc3RydWN0IGt2bSAqa3ZtLCB1MzIgcG9ydClcbiBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9yZXNldChzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IGV2dGNobmZkICpldnRjaG5mZCwgKiphbGxfZXZ0Y2huZmRzO1xuLVx0aW50IGk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpO1xuIFx0aW50IG4gPSAwO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4ueGVuX2xvY2spO1xuQEAgLTIyMzQsNyAmIzQzOzIyODIsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9yZXNldChzdHJ1Y3Qga3ZtICprdm0pXG4gXHQgKiBjcml0aWNhbCBzZWN0aW9uLCBmaXJzdCBjb2xsZWN0IGFsbCB0aGUgZXZ0Y2huZmQgb2JqZWN0c1xuIFx0ICogaW4gYW4gYXJyYXkgYXMgdGhleSBhcmUgcmVtb3ZlZCBmcm9tIGV2dGNobl9wb3J0cy5cbiBcdCAqL1xuLVx0aWRyX2Zvcl9lYWNoX2VudHJ5KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLCBpKVxuJiM0MztcdHhhX2Zvcl9lYWNoKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGksIGV2dGNobmZkKVxuIFx0XHRuJiM0MzsmIzQzOztcbiBcbiBcdGFsbF9ldnRjaG5mZHMgPSBrbWFsbG9jX29ianMoc3RydWN0IGV2dGNobmZkICosIG4pO1xuQEAgLTIyNDQsOSAmIzQzOzIyOTIsOSBAQCBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9yZXNldChzdHJ1Y3Qga3ZtICprdm0pXG4gXHR9XG4gXG4gXHRuID0gMDtcbi1cdGlkcl9mb3JfZWFjaF9lbnRyeShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBldnRjaG5mZCwgaSkge1xuJiM0MztcdHhhX2Zvcl9lYWNoKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGksIGV2dGNobmZkKSB7XG4gXHRcdGFsbF9ldnRjaG5mZHNbbiYjNDM7JiM0MztdID0gZXZ0Y2huZmQ7XG4tXHRcdGlkcl9yZW1vdmUoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQtXHUwMDNlc2VuZF9wb3J0KTtcbiYjNDM7XHRcdHhhX2VyYXNlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLVx1MDAzZXNlbmRfcG9ydCk7XG4gXHR9XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbiBcbkBAIC0yMjcwLDcgJiM0MzsyMzE4LDcgQEAgc3RhdGljIGludCBrdm1feGVuX3NldGF0dHJfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGFcbiBcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmZsYWdzID09IEtWTV9YRU5fRVZUQ0hOX1JFU0VUKVxuIFx0XHRyZXR1cm4ga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KGt2bSk7XG4gXG4tXHRpZiAoIXBvcnQgfHwgcG9ydCBcdTAwM2U9IG1heF9ldnRjaG5fcG9ydChrdm0pKVxuJiM0MztcdGlmICghcG9ydCB8fCBwb3J0IFx1MDAzZT0ga3ZtX21heF9ldnRjaG5fcG9ydChrdm0pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmZsYWdzID09IEtWTV9YRU5fRVZUQ0hOX0RFQVNTSUdOKVxuQEAgLTIyOTcsMTIgJiM0MzsyMzQ1LDEwIEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfZXZ0Y2huX3NlbmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcGFyYW0sIHU2NCAqcilcbiBcdH1cbiBcbiBcdC8qXG4tXHQgKiBldnRjaG5mZCBpcyBwcm90ZWN0ZWQgYnkga3ZtLVx1MDAzZXNyY3U7IHRoZSBpZHIgbG9va3VwIGluc3RlYWRcbi1cdCAqIGlzIHByb3RlY3RlZCBieSBSQ1UuXG4mIzQzO1x0ICogZXZ0Y2huZmQgaXMgcHJvdGVjdGVkIGJ5IGt2bS1cdTAwM2VzcmN1OyB0aGUgeGFfbG9hZCBpcyBSQ1Utc2FmZVxuJiM0MztcdCAqIGludGVybmFsbHksIG5vIGV4cGxpY2l0IHJjdV9yZWFkX2xvY2soKSBuZWVkZWQuXG4gXHQgKi9cbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGV2dGNobmZkID0gaWRyX2ZpbmQoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBzZW5kLnBvcnQpO1xuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0ZXZ0Y2huZmQgPSB4YV9sb2FkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgc2VuZC5wb3J0KTtcbiBcdGlmICghZXZ0Y2huZmQpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC0yMzQ5LDIzICYjNDM7MjM5NSwyMyBAQCB2b2lkIGt2bV94ZW5fZGVzdHJveV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB2b2lkIGt2bV94ZW5faW5pdF92bShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4ueGVuX2xvY2spO1xuLVx0aWRyX2luaXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cyk7XG4mIzQzO1x0eGFfaW5pdChcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTtcbiBcdGt2bV9ncGNfaW5pdChcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlLCBrdm0pO1xuIH1cbiBcbiB2b2lkIGt2bV94ZW5fZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IGV2dGNobmZkICpldnRjaG5mZDtcbi1cdGludCBpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbiBcdGt2bV9ncGNfZGVhY3RpdmF0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlKTtcbiBcbi1cdGlkcl9mb3JfZWFjaF9lbnRyeShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBldnRjaG5mZCwgaSkge1xuJiM0MztcdHhhX2Zvcl9lYWNoKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGksIGV2dGNobmZkKSB7XG4gXHRcdGlmICghZXZ0Y2huZmQtXHUwMDNlZGVsaXZlci5wb3J0LnBvcnQpXG4gXHRcdFx0ZXZlbnRmZF9jdHhfcHV0KGV2dGNobmZkLVx1MDAzZWRlbGl2ZXIuZXZlbnRmZC5jdHgpO1xuIFx0XHRrZnJlZShldnRjaG5mZCk7XG4gXHR9XG4tXHRpZHJfZGVzdHJveShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTtcbiYjNDM7XHR4YV9kZXN0cm95KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMpO1xuIFxuIFx0aWYgKGt2bS1cdTAwM2VhcmNoLnhlbi5odm1fY29uZmlnLm1zcilcbiBcdFx0c3RhdGljX2JyYW5jaF9zbG93X2RlY19kZWZlcnJlZChcdTAwMjZrdm1feGVuX2VuYWJsZWQpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uaCBiL2FyY2gveDg2L2t2bS94ZW4uaFxuaW5kZXggZjM3Mjg1NTg1N2E4OC4uOWQwNGUzNTBiZGIxZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ZW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3hlbi5oXG5AQCAtMjM1LDYgJiM0MzsyMzUsMTEgQEAgc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbyB7XG4gI2RlZmluZSBDT01QQVRfRVZUQ0hOXzJMX05SX0NIQU5ORUxTICg4ICpcdFx0XHRcdFxcXG4gXHRcdFx0XHQgICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgXFxcbiBcdFx0XHRcdFx0XHQgICBldnRjaG5fcGVuZGluZykpXG4mIzQzO1xuJiM0MzsvKiBMYXRjaGVkIFZNLXdpZGUgbW9kZTsgdGhlIEtWTSBlcXVpdmFsZW50IG9mIFhlbiYjMzk7cyAhaGFzXzMyYml0X3NoaW5mbygpLiAqL1xuJiM0MzsjZGVmaW5lIGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pIFxcXG4mIzQzO1x0KElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgUkVBRF9PTkNFKChrdm0pLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkpXG4mIzQzO1xuIHN0cnVjdCBjb21wYXRfdmNwdV9ydW5zdGF0ZV9pbmZvIHtcbiAgICAgaW50IHN0YXRlO1xuICAgICB1aW50NjRfdCBzdGF0ZV9lbnRyeV90aW1lO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggMDNiZmM5Mjg2NGI2ZS4uM2RkMDQ2MDVmMmU1NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtODU1LDYgJiM0Mzs4NTUsOCBAQCBzdHJ1Y3Qga3ZtIHtcbiBcdGdmbl90IG1tdV9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0O1xuIFx0Z2ZuX3QgbW11X2ludmFsaWRhdGVfcmFuZ2VfZW5kO1xuIFxuJiM0MztcdHVuc2lnbmVkIGxvbmcgZ3BjX2ludmFsaWRhdGVfc2VxO1xuJiM0MztcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlcztcbiBcdHU2NCBtYW51YWxfZGlydHlfbG9nX3Byb3RlY3Q7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RlbnRyeTtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggNjVlYjI2YTA1MjBkOC4uMTA4ZDQyYzVjMWQ2YSAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbkBAIC04MTMsNiAmIzQzOzgxMywxNiBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxuIFxuIFx0LyogUGFpcnMgd2l0aCB0aGUgaW5jcmVtZW50IGluIHJhbmdlX3N0YXJ0KCkuICovXG4gXHRzcGluX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XG4mIzQzO1x0a3ZtLVx1MDAzZWdwY19pbnZhbGlkYXRlX3NlcSYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQXMgd2l0aCB0aGUgTU1VIHNlcXVlbmNlIGNvdW50ZXIgYW5kIG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzLCB0aGVcbiYjNDM7XHQgKiBHUEMgc2VxdWVuY2UgaW5jcmVhc2UgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB0aGUgaW52YWxpZGF0ZSBjb3VudFxuJiM0MztcdCAqIGdvZXMgdG8gemVyby4gIFBhaXJzIHdpdGggdGhlIHNtcF9ybWIoKSBpblxuJiM0MztcdCAqIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZSgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHNtcF93bWIoKTtcbiYjNDM7XG4gXHRpZiAoIVdBUk5fT05fT05DRSgha3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcbiBcdFx0LS1rdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQ7XG4gXHR3YWtlID0gIWt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9wZm5jYWNoZS5jIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xuaW5kZXggNzI4ZDJjMWI0ODhhOC4uMzY1OTY4NmI5N2MyNCAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbkBAIC0xMjQsNyAmIzQzOzEyNCw3IEBAIHN0YXRpYyB2b2lkIGdwY191bm1hcChrdm1fcGZuX3QgcGZuLCB2b2lkICpraHZhKVxuICNlbmRpZlxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBncGNfc2VxKVxuIHtcbiBcdC8qXG4gXHQgKiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBhY3RzIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXNcbkBAIC0xMzYsMjAgJiM0MzsxMzYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NcbiBcdCAqIE5vdGUsIGl0IGRvZXMgbm90IG1hdHRlciB0aGF0IG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50XG4gXHQgKiBpcyBub3QgcHJvdGVjdGVkIGJ5IGdwYy1cdTAwM2Vsb2NrLiAgSXQgaXMgZ3VhcmFudGVlZCB0b1xuIFx0ICogYmUgZWxldmF0ZWQgYmVmb3JlIHRoZSBtbXVfbm90aWZpZXIgYWNxdWlyZXMgZ3BjLVx1MDAzZWxvY2ssIGFuZFxuLVx0ICogaXNuJiMzOTt0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgbW11X2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuXG4mIzQzO1x0ICogaXNuJiMzOTt0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuXG4gXHQgKi9cbiBcdGlmIChrdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0LypcbiBcdCAqIEVuc3VyZSBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBpcyByZWFkIGJlZm9yZVxuLVx0ICogbW11X2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW5cbi1cdCAqIG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlXG4mIzQzO1x0ICogZ3BjX2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW5cbiYjNDM7XHQgKiBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGVcbiBcdCAqIG9sZCAobm9uLXplcm8pIHZhbHVlIG9mIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IG9yIHRoZVxuLVx0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW11X2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxuJiM0MztcdCAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIGdwY19pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cbiBcdCAqL1xuIFx0c21wX3JtYigpO1xuLVx0cmV0dXJuIGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXEgIT0gbW11X3NlcTtcbiYjNDM7XHRyZXR1cm4ga3ZtLVx1MDAzZWdwY19pbnZhbGlkYXRlX3NlcSAhPSBncGNfc2VxO1xuIH1cbiBcbiBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbkBAIC0xNTgsNyAmIzQzOzE1OCw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuIFx0dm9pZCAqb2xkX2todmEgPSAodm9pZCAqKVBBR0VfQUxJR05fRE9XTigodWludHB0cl90KWdwYy1cdTAwM2VraHZhKTtcbiBcdGt2bV9wZm5fdCBuZXdfcGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XG4gXHR2b2lkICpuZXdfa2h2YSA9IE5VTEw7XG4tXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBncGNfc2VxO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4gXHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xuQEAgLTE4MSw3ICYjNDM7MTgxLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHRncGMtXHUwMDNldmFsaWQgPSBmYWxzZTtcbiBcbiBcdGRvIHtcbi1cdFx0bW11X3NlcSA9IGdwYy1cdTAwM2Vrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuJiM0MztcdFx0Z3BjX3NlcSA9IGdwYy1cdTAwM2Vrdm0tXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxO1xuIFx0XHRzbXBfcm1iKCk7XG4gXG4gXHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2Z3BjLVx1MDAzZWxvY2spO1xuQEAgLTIzMiw3ICYjNDM7MjMyLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHRcdCAqIGF0dGVtcHRpbmcgdG8gcmVmcmVzaC5cbiBcdFx0ICovXG4gXHRcdFdBUk5fT05fT05DRShncGMtXHUwMDNldmFsaWQpO1xuLVx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cdTAwM2Vrdm0sIG1tdV9zZXEpKTtcbiYjNDM7XHR9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLVx1MDAzZWt2bSwgZ3BjX3NlcSkpO1xuIFxuIFx0Z3BjLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbiBcdGdwYy1cdTAwM2VwZm4gPSBuZXdfcGZuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fWDg2JiMzNDssCiAgICAmIzM0O0tWTV9YRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1feGVuX3ZjcHVfc2V0X2F0dHImIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9odm1fc2V0X2F0dHImIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9oeXBlcmNhbGwmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMmIzM0OywKICAgICYjMzQ7X19rdm1feGVuX2hhc19pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmQmIzM0OywKICAgICYjMzQ7a3ZtX2dwY19yZWZyZXNoJiMzNDssCiAgICAmIzM0O2t2bV9ncGNfYWN0aXZhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBhbmQgY29uY3VycmVuY3ktY3JpdGljYWwgY2hhbmdlcyB0byBLVk0mIzM5O3MgWGVuIGVtdWxhdGlvbiBhbmQgZ2ZuX3RvX3Bmbl9jYWNoZSAoR1BDKSBzdWJzeXN0ZW0uIFRoZXNlIGluY2x1ZGUgbWlncmF0aW5nIFhlbiBldmVudCBjaGFubmVsIHN0b3JhZ2UgZnJvbSBJRFIgdG8gWEFycmF5LCBlbmZvcmNpbmcgYWxpZ25tZW50IGNoZWNrcyBmb3IgdkNQVSBpbmZvIEdQQS9IVkEsIHVzaW5nIGV4cGxpY2l0IDMyLWJpdCBhdG9taWMgYml0b3BzIHRvIHByZXZlbnQgc3BsaXQtbG9jayBBQyBleGNlcHRpb25zIG9uIHVuYWxpZ25lZCBzdHJ1Y3R1cmVzLCBpbnRyb2R1Y2luZyBTUkNVIGxvY2tpbmcgaW4gX19rdm1feGVuX2hhc19pbnRlcnJ1cHQsIGFuZCBzZXBhcmF0aW5nIEdQQyBpbnZhbGlkYXRpb24gc2VxdWVuY2luZyBmcm9tIGdlbmVyYWwgTU1VIGludmFsaWRhdGlvbiBzZXF1ZW5jaW5nLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgdmlydHVhbGl6YXRpb24gaW9jdGxzLCBoeXBlcmNhbGxzLCBhbmQgZXZlbnQgY2hhbm5lbCBkZWxpdmVyeSBtZWNoYW5pc21zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzNlMDNmZjNiOGMzNzlkOGIzMjgyMGM5OWViYzAyZDgwMmUzMDNiMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMDQ6Mzg6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCA2ODNiYjhiZjQzYTk0Li4zYWY3Mzk1YzI0MzBhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTE2LDYgJiM0MzsxNiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaXJxX3dvcmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcnEuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgveGFycmF5LmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtsaW51eC9rdm0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rdm1fcGFyYS5oJmd0OwpAQCAtMTExMyw3ICYjNDM7MTExNCw3IEBAIHN0cnVjdCBrdm1feGVuIHsKIAlib29sIHJ1bnN0YXRlX3VwZGF0ZV9mbGFnOwogCXU4IHVwY2FsbF92ZWN0b3I7CiAJc3RydWN0IGdmbl90b19wZm5fY2FjaGUgc2hpbmZvX2NhY2hlOwotCXN0cnVjdCBpZHIgZXZ0Y2huX3BvcnRzOwomIzQzOwlzdHJ1Y3QgeGFycmF5IGV2dGNobl9wb3J0czsKIAl1bnNpZ25lZCBsb25nIHBvbGxfbWFza1tCSVRTX1RPX0xPTkdTKEtWTV9NQVhfVkNQVVMpXTsKIAogCXN0cnVjdCBrdm1feGVuX2h2bV9jb25maWcgaHZtX2NvbmZpZzsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uYyBiL2FyY2gveDg2L2t2bS94ZW4uYwppbmRleCA5OThjZGNiNmFhMzAzLi43MTgzOTYzNDBkM2MxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3hlbi5jCkBAIC03Myw3ICYjNDM7NzMsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChzdHJ1Y3Qga3ZtICprdm0pCiAJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBzaGFyZWRfaW5mbywgd2MpICE9IDB4YzAwKTsKIAlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNoYXJlZF9pbmZvLCB3Y19zZWNfaGkpICE9IDB4YzBjKTsKIAotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkgewomIzQzOwlpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkpIHsKIAkJc3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtJmd0O2todmE7CiAKIAkJd2Nfc2VjX2hpID0gJmFtcDtzaGluZm8tJmd0O3djX3NlY19oaTsKQEAgLTM4OSw3ICYjNDM7Mzg5LDcgQEAgc3RhdGljIHZvaWQga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2LCBib29sIGF0b21pYykKIAlCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sIHRpbWUpICE9CiAJCSAgICAgc2l6ZW9mKHZ4LSZndDtydW5zdGF0ZV90aW1lcykpOwogCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7IHYtJmd0O2t2bS0mZ3Q7YXJjaC54ZW4ubG9uZ19tb2RlKSB7CiYjNDM7CWlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8odi0mZ3Q7a3ZtKSkgewogCQl1c2VyX2xlbiA9IHNpemVvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvKTsKIAkJdGltZXNfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbywKIAkJCQkgICAgIHN0YXRlX2VudHJ5X3RpbWUpOwpAQCAtNjc2LDI4ICYjNDM7Njc2LDMyIEBAIHZvaWQga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2KQogCX0KIAogCS8qIE5vdyBncGMtJmd0O2todmEgaXMgYSB2YWxpZCBrZXJuZWwgYWRkcmVzcyBmb3IgdGhlIHZjcHVfaW5mbyAqLwotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyB2LSZndDtrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkgewomIzQzOwlpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtJmd0O2t2bSkpIHsKIAkJc3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtJmd0O2todmE7CiYjNDM7CQl2b2lkICp2aV9wZW5kaW5nX3NlbCA9ICZhbXA7dmktJmd0O2V2dGNobl9wZW5kaW5nX3NlbDsKIAotCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggJiMzNDtvcnEgJTAsICUxXG4mIzM0OwotCQkJICAgICAmIzM0O25vdHEgJTBcbiYjMzQ7Ci0JCQkgICAgIExPQ0tfUFJFRklYICYjMzQ7YW5kcSAlMCwgJTJcbiYjMzQ7Ci0JCQkgICAgIDogJiMzNDs9ciYjMzQ7IChldnRjaG5fcGVuZGluZ19zZWwpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHZpLSZndDtldnRjaG5fcGVuZGluZ19zZWwpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHYtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCkKLQkJCSAgICAgOiAmIzM0OzAmIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsKSk7CiYjNDM7CQlpZiAoSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZyl2aV9wZW5kaW5nX3NlbCwgc2l6ZW9mKHU2NCkpKSB7CiYjNDM7CQkJYXRvbWljNjRfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCB2aV9wZW5kaW5nX3NlbCk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWF0b21pY19vcihldnRjaG5fcGVuZGluZ19zZWwsIHZpX3BlbmRpbmdfc2VsKTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFRoZSBjYXN0IGtlZXBzIHRoZSBzaGlmdCB3ZWxsLWRlZmluZWQgb24gMzItYml0LAomIzQzOwkJCSAqIHdoZXJlIGV2dGNobl9wZW5kaW5nX3NlbCBpcyAzMiBiaXRzIHdpZGUgYW5kIHRoaXMKJiM0MzsJCQkgKiBicmFuY2ggaXMgdW5yZWFjaGFibGUgYW55d2F5ICh0aGlzIGlzIGluc2lkZQomIzQzOwkJCSAqIGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbygpLCB3aGljaCBpcyBnYXRlZCBvbgomIzQzOwkJCSAqIElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSkuCiYjNDM7CQkJICovCiYjNDM7CQkJYXRvbWljX29yKCh1NjQpZXZ0Y2huX3BlbmRpbmdfc2VsICZndDsmZ3Q7IDMyLAomIzQzOwkJCQkgIHZpX3BlbmRpbmdfc2VsICYjNDM7IDQpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJYXRvbWljNjRfYW5kbm90KGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKikmYW1wO3YtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCk7CiAJCVdSSVRFX09OQ0UodmktJmd0O2V2dGNobl91cGNhbGxfcGVuZGluZywgMSk7CiAJfSBlbHNlIHsKLQkJdTMyIGV2dGNobl9wZW5kaW5nX3NlbDMyID0gZXZ0Y2huX3BlbmRpbmdfc2VsOwogCQlzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmkgPSBncGMtJmd0O2todmE7CiAKLQkJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICYjMzQ7b3JsICUwLCAlMVxuJiMzNDsKLQkJCSAgICAgJiMzNDtub3RsICUwXG4mIzM0OwotCQkJICAgICBMT0NLX1BSRUZJWCAmIzM0O2FuZGwgJTAsICUyXG4mIzM0OwotCQkJICAgICA6ICYjMzQ7PXImIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHZpLSZndDtldnRjaG5fcGVuZGluZ19zZWwpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHYtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCkKLQkJCSAgICAgOiAmIzM0OzAmIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpKTsKJiM0MzsJCWF0b21pY19vcihldnRjaG5fcGVuZGluZ19zZWwsICh2b2lkICopJmFtcDt2aS0mZ3Q7ZXZ0Y2huX3BlbmRpbmdfc2VsKTsKJiM0MzsJCWF0b21pY19hbmRub3QoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKSZhbXA7di0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKTsKIAkJV1JJVEVfT05DRSh2aS0mZ3Q7ZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTsKIAl9CiAKQEAgLTcyOCw2ICYjNDM7NzMyLDE2IEBAIGludCBfX2t2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpCiAJQlVJTERfQlVHX09OKHNpemVvZihyYykgIT0KIAkJICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF92Y3B1X2luZm8sIGV2dGNobl91cGNhbGxfcGVuZGluZykpOwogCiYjNDM7CS8qCiYjNDM7CSAqIGt2bV9ncGNfY2hlY2soKSBjaGVja3MgdGhlIG1lbXNsb3QgZ2VuZXJhdGlvbiwgc28ga3ZtLSZndDtzcmN1IG11c3QgYmUKJiM0MzsJICogaGVsZC4gTW9zdCBjYWxsZXJzIGhvbGQgaXQgYWxyZWFkeSwgYnV0IHRoaXMgaXMgYWxzbyByZWFjaGVkIGZyb20KJiM0MzsJICoga3ZtX2VtdWxhdGVfaGFsdCgpIG9uIHRoZSBWTS1FeGl0IHBhdGggYW5kIGZyb20ga3ZtX3ZjcHVfYmxvY2soKSwKJiM0MzsJICogd2hlcmUgdmNwdV9lbnRlcl9ndWVzdCgpIGhhcyBhbHJlYWR5IGRyb3BwZWQgdGhlIHZDUFUmIzM5O3MgU1JDVSBsb2NrLgomIzQzOwkgKiBUYWtpbmcgU1JDVSBkb2VzIG5vdCBzbGVlcCwgc28gaXQgaXMgc2FmZSBldmVuIGluIHRoZSBhdG9taWMgY2FzZQomIzQzOwkgKiB3aGljaCBpcyBoYW5kbGVkIGJlbG93LgomIzQzOwkgKi8KJiM0MzsJZ3VhcmQoc3JjdSkoJmFtcDt2LSZndDtrdm0tJmd0O3NyY3UpOwomIzQzOwogCXJlYWRfbG9ja19pcnFzYXZlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CiAJd2hpbGUgKCFrdm1fZ3BjX2NoZWNrKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkgewogCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CkBAIC05NDEsNiAmIzQzOzk1NSwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKQogCQkJCWJyZWFrOwogCQkJfQogCiYjNDM7CQkJciA9IC1FTlhJTzsKJiM0MzsJCQlpZiAoIUlTX0FMSUdORUQoZGF0YS0mZ3Q7dS5ncGEsIHNpemVvZih1MzIpKSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiAJCQlyID0ga3ZtX2dwY19hY3RpdmF0ZSgmYW1wO3ZjcHUtJmd0O2FyY2gueGVuLnZjcHVfaW5mb19jYWNoZSwKIAkJCQkJICAgICBkYXRhLSZndDt1LmdwYSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTsKIAkJfSBlbHNlIHsKQEAgLTk1MCw2ICYjNDM7OTY4LDEwIEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpCiAJCQkJYnJlYWs7CiAJCQl9CiAKJiM0MzsJCQlyID0gLUVOWElPOwomIzQzOwkJCWlmICghSVNfQUxJR05FRChkYXRhLSZndDt1Lmh2YSwgc2l6ZW9mKHUzMikpKQomIzQzOwkJCQlicmVhazsKJiM0MzsKIAkJCXIgPSBrdm1fZ3BjX2FjdGl2YXRlX2h2YSgmYW1wO3ZjcHUtJmd0O2FyY2gueGVuLnZjcHVfaW5mb19jYWNoZSwKIAkJCQkJCSBkYXRhLSZndDt1Lmh2YSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTsKIAkJfQpAQCAtOTkzLDcgJiM0MzsxMDE1LDcgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSkKIAkJICogYWRkcmVzcywgdGhhdCYjMzk7cyBhY3R1YWxseSBPSy4ga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3QoKQogCQkgKiB3aWxsIGNvcGUuCiAJCSAqLwotCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpCiYjNDM7CQlpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtJmd0O2t2bSkpCiAJCQlzeiA9IHNpemVvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvKTsKIAkJZWxzZQogCQkJc3ogPSBzaXplb2Yoc3RydWN0IGNvbXBhdF92Y3B1X3J1bnN0YXRlX2luZm8pOwpAQCAtMTQzOSwxNiAmIzQzOzE0NjEsMjEgQEAgc3RhdGljIGludCBrdm1feGVuX2h5cGVyY2FsbF9jb21wbGV0ZV91c2Vyc3BhY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXJldHVybiBrdm1feGVuX2h5cGVyY2FsbF9zZXRfcmVzdWx0KHZjcHUsIHJ1bi0mZ3Q7eGVuLnUuaGNhbGwucmVzdWx0KTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KHN0cnVjdCBrdm0gKmt2bSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBtYXhfZXZ0Y2huX3BvcnQoYm9vbCBoYXNfNjRiaXRfc2hpbmZvKQogewotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkKJiM0MzsJaWYgKGhhc182NGJpdF9zaGluZm8pCiAJCXJldHVybiBFVlRDSE5fMkxfTlJfQ0hBTk5FTFM7CiAJZWxzZQogCQlyZXR1cm4gQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUzsKIH0KIAotc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLAotCQkJICAgICAgIGV2dGNobl9wb3J0X3QgKnBvcnRzKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGt2bV9tYXhfZXZ0Y2huX3BvcnQoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1heF9ldnRjaG5fcG9ydChrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaGFzXzY0Yml0X3NoaW5mbywKJiM0MzsJCQkgICAgICAgaW50IG5yX3BvcnRzLCBldnRjaG5fcG9ydF90ICpwb3J0cykKIHsKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAJc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyA9ICZhbXA7a3ZtLSZndDthcmNoLnhlbi5zaGluZm9fY2FjaGU7CkBAIC0xNDYzLDcgJiM0MzsxNDkwLDcgQEAgc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLAogCQlnb3RvIG91dF9yY3U7CiAKIAlyZXQgPSBmYWxzZTsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsga3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpIHsKJiM0MzsJaWYgKGhhc182NGJpdF9zaGluZm8pIHsKIAkJc3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtJmd0O2todmE7CiAJCXBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopJmFtcDtzaGluZm8tJmd0O2V2dGNobl9wZW5kaW5nOwogCX0gZWxzZSB7CkBAIC0xNDg1LDkgJiM0MzsxNTEyLDEwIEBAIHN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cywKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsCiYjNDM7c3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzXzY0Yml0LAogCQkJCSB1NjQgcGFyYW0sIHU2NCAqcikKIHsKJiM0MzsJYm9vbCBoYXNfNjRiaXRfc2hpbmZvID0ga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtJmd0O2t2bSk7CiAJc3RydWN0IHNjaGVkX3BvbGwgc2NoZWRfcG9sbDsKIAlldnRjaG5fcG9ydF90IHBvcnQsICpwb3J0czsKIAlzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlOwpAQCAtMTQ5Nyw3ICYjNDM7MTUyNSw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwKIAkgICAgISh2Y3B1LSZndDtrdm0tJmd0O2FyY2gueGVuLmh2bV9jb25maWcuZmxhZ3MgJmFtcDsgS1ZNX1hFTl9IVk1fQ09ORklHX0VWVENITl9TRU5EKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7ICFsb25nbW9kZSkgewomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsgIWlzXzY0Yml0KSB7CiAJCXN0cnVjdCBjb21wYXRfc2NoZWRfcG9sbCBzcDMyOwogCiAJCS8qIFNhbml0eSBjaGVjayB0aGF0IHRoZSBjb21wYXQgc3RydWN0IGRlZmluaXRpb24gaXMgY29ycmVjdCAqLwpAQCAtMTU0NiwyMCAmIzQzOzE1NzQsMjAgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLAogCX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBzY2hlZF9wb2xsLm5yX3BvcnRzOyBpJiM0MzsmIzQzOykgewotCQlpZiAocG9ydHNbaV0gJmd0Oz0gbWF4X2V2dGNobl9wb3J0KHZjcHUtJmd0O2t2bSkpIHsKJiM0MzsJCWlmIChwb3J0c1tpXSAmZ3Q7PSBtYXhfZXZ0Y2huX3BvcnQoaGFzXzY0Yml0X3NoaW5mbykpIHsKIAkJCSpyID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQogCiAJaWYgKHNjaGVkX3BvbGwubnJfcG9ydHMgPT0gMSkKLQkJdmNwdS0mZ3Q7YXJjaC54ZW4ucG9sbF9ldnRjaG4gPSBwb3J0OwomIzQzOwkJV1JJVEVfT05DRSh2Y3B1LSZndDthcmNoLnhlbi5wb2xsX2V2dGNobiwgcG9ydCk7CiAJZWxzZQotCQl2Y3B1LSZndDthcmNoLnhlbi5wb2xsX2V2dGNobiA9IC0xOwomIzQzOwkJV1JJVEVfT05DRSh2Y3B1LSZndDthcmNoLnhlbi5wb2xsX2V2dGNobiwgLTEpOwogCiAJc2V0X2JpdCh2Y3B1LSZndDt2Y3B1X2lkeCwgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnhlbi5wb2xsX21hc2spOwogCi0JaWYgKCF3YWl0X3BlbmRpbmdfZXZlbnQodmNwdSwgc2NoZWRfcG9sbC5ucl9wb3J0cywgcG9ydHMpKSB7CiYjNDM7CWlmICghd2FpdF9wZW5kaW5nX2V2ZW50KHZjcHUsIGhhc182NGJpdF9zaGluZm8sIHNjaGVkX3BvbGwubnJfcG9ydHMsIHBvcnRzKSkgewogCQlrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpOwogCiAJCWlmIChzY2hlZF9wb2xsLnRpbWVvdXQpCkBAIC0xNTc0LDcgJiM0MzsxNjAyLDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLAogCQlrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9SVU5OQUJMRSk7CiAJfQogCi0JdmNwdS0mZ3Q7YXJjaC54ZW4ucG9sbF9ldnRjaG4gPSAwOwomIzQzOwlXUklURV9PTkNFKHZjcHUtJmd0O2FyY2gueGVuLnBvbGxfZXZ0Y2huLCAwKTsKIAkqciA9IDA7CiBvdXQ6CiAJLyogUmVhbGx5LCB0aGlzIGlzIG9ubHkgbmVlZGVkIGluIGNhc2Ugb2YgdGltZW91dCAqLwpAQCAtMTU5NCwxMiAmIzQzOzE2MjIsMTIgQEAgc3RhdGljIHZvaWQgY2FuY2VsX2V2dGNobl9wb2xsKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCWt2bV92Y3B1X2tpY2sodmNwdSk7CiB9CiAKLXN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2NoZWRfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLAomIzQzO3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2NoZWRfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzXzY0Yml0LAogCQkJCSAgIGludCBjbWQsIHU2NCBwYXJhbSwgdTY0ICpyKQogewogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTQ0hFRE9QX3BvbGw6Ci0JCWlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBsb25nbW9kZSwgcGFyYW0sIHIpKQomIzQzOwkJaWYgKGt2bV94ZW5fc2NoZWRvcF9wb2xsKHZjcHUsIGlzXzY0Yml0LCBwYXJhbSwgcikpCiAJCQlyZXR1cm4gdHJ1ZTsKIAkJZmFsbHRocm91Z2g7CiAJY2FzZSBTQ0hFRE9QX3lpZWxkOgpAQCAtMTYxOCw3ICYjNDM7MTY0Niw3IEBAIHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciB7CiAgICAgdWludDMyX3QgZmxhZ3M7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLAomIzQzO3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsIGludCBjbWQsCiAJCQkJICBpbnQgdmNwdV9pZCwgdTY0IHBhcmFtLCB1NjQgKnIpCiB7CiAJc3RydWN0IHZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIgb25lc2hvdDsKQEAgLTE2NjIsNyAmIzQzOzE2OTAsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLAogCQlCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpICE9CiAJCQkgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpKTsKIAotCQlpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBwYXJhbSwgJmFtcDtvbmVzaG90LCBsb25nbW9kZSA/IHNpemVvZihvbmVzaG90KSA6CiYjNDM7CQlpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBwYXJhbSwgJmFtcDtvbmVzaG90LCBpc182NGJpdCA/IHNpemVvZihvbmVzaG90KSA6CiAJCQkJCXNpemVvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIpLCAmYW1wO2UpKSB7CiAJCQkqciA9IC1FRkFVTFQ7CiAJCQlyZXR1cm4gdHJ1ZTsKQEAgLTE2OTQsNyAmIzQzOzE3MjIsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3NldF90aW1lcl9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVpbnQ2NF90IHRpbWVvdXQsCiAKIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JYm9vbCBsb25nbW9kZTsKJiM0MzsJYm9vbCBpc182NGJpdDsKIAl1NjQgaW5wdXQsIHBhcmFtc1s2XSwgciA9IC1FTk9TWVM7CiAJYm9vbCBoYW5kbGVkID0gZmFsc2U7CiAJdTggY3BsOwpAQCAtMTcwNCw4ICYjNDM7MTczMiw4IEBAIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICAgIGt2bV9odl9oeXBlcmNhbGxfZW5hYmxlZCh2Y3B1KSkKIAkJcmV0dXJuIGt2bV9odl9oeXBlcmNhbGwodmNwdSk7CiAKLQlsb25nbW9kZSA9IGlzXzY0X2JpdF9oeXBlcmNhbGwodmNwdSk7Ci0JaWYgKCFsb25nbW9kZSkgewomIzQzOwlpc182NGJpdCA9IGlzXzY0X2JpdF9oeXBlcmNhbGwodmNwdSk7CiYjNDM7CWlmICghaXNfNjRiaXQpIHsKIAkJaW5wdXQgPSBrdm1fZWF4X3JlYWQodmNwdSk7CiAJCXBhcmFtc1swXSA9IGt2bV9lYnhfcmVhZCh2Y3B1KTsKIAkJcGFyYW1zWzFdID0ga3ZtX2VjeF9yZWFkKHZjcHUpOwpAQCAtMTc1MSwxNyAmIzQzOzE3NzksMTcgQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJCWhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHZjcHUsIHBhcmFtc1sxXSwgJmFtcDtyKTsKIAkJYnJlYWs7CiAJY2FzZSBfX0hZUEVSVklTT1Jfc2NoZWRfb3A6Ci0JCWhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGxvbmdtb2RlLCBwYXJhbXNbMF0sCiYjNDM7CQloYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcCh2Y3B1LCBpc182NGJpdCwgcGFyYW1zWzBdLAogCQkJCQkJIHBhcmFtc1sxXSwgJmFtcDtyKTsKIAkJYnJlYWs7CiAJY2FzZSBfX0hZUEVSVklTT1JfdmNwdV9vcDoKLQkJaGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sCiYjNDM7CQloYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHZjcHUsIGlzXzY0Yml0LCBwYXJhbXNbMF0sIHBhcmFtc1sxXSwKIAkJCQkJCXBhcmFtc1syXSwgJmFtcDtyKTsKIAkJYnJlYWs7CiAJY2FzZSBfX0hZUEVSVklTT1Jfc2V0X3RpbWVyX29wOiB7CiAJCXU2NCB0aW1lb3V0ID0gcGFyYW1zWzBdOwogCQkvKiBJbiAzMi1iaXQgbW9kZSwgdGhlIDY0LWJpdCB0aW1lb3V0IGlzIGluIHR3byAzMi1iaXQgcGFyYW1zLiAqLwotCQlpZiAoIWxvbmdtb2RlKQomIzQzOwkJaWYgKCFpc182NGJpdCkKIAkJCXRpbWVvdXQgfD0gcGFyYW1zWzFdICZsdDsmbHQ7IDMyOwogCQloYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9zZXRfdGltZXJfb3AodmNwdSwgdGltZW91dCwgJmFtcDtyKTsKIAkJYnJlYWs7CkBAIC0xNzc2LDcgJiM0MzsxODA0LDcgQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIGhhbmRsZV9pbl91c2Vyc3BhY2U6CiAJdmNwdS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9IEtWTV9FWElUX1hFTjsKIAl2Y3B1LSZndDtydW4tJmd0O3hlbi50eXBlID0gS1ZNX0VYSVRfWEVOX0hDQUxMOwotCXZjcHUtJmd0O3J1bi0mZ3Q7eGVuLnUuaGNhbGwubG9uZ21vZGUgPSBsb25nbW9kZTsKJiM0MzsJdmNwdS0mZ3Q7cnVuLSZndDt4ZW4udS5oY2FsbC5sb25nbW9kZSA9IGlzXzY0Yml0OwogCXZjcHUtJmd0O3J1bi0mZ3Q7eGVuLnUuaGNhbGwuY3BsID0gY3BsOwogCXZjcHUtJmd0O3J1bi0mZ3Q7eGVuLnUuaGNhbGwuaW5wdXQgPSBpbnB1dDsKIAl2Y3B1LSZndDtydW4tJmd0O3hlbi51LmhjYWxsLnBhcmFtc1swXSA9IHBhcmFtc1swXTsKQEAgLTE3OTQsNyAmIzQzOzE4MjIsNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBzdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KQogewotCWludCBwb2xsX2V2dGNobiA9IHZjcHUtJmd0O2FyY2gueGVuLnBvbGxfZXZ0Y2huOwomIzQzOwlpbnQgcG9sbF9ldnRjaG4gPSBSRUFEX09OQ0UodmNwdS0mZ3Q7YXJjaC54ZW4ucG9sbF9ldnRjaG4pOwogCiAJaWYgKChwb2xsX2V2dGNobiA9PSBwb3J0IHx8IHBvbGxfZXZ0Y2huID09IC0xKSAmYW1wOyZhbXA7CiAJICAgIHRlc3RfYW5kX2NsZWFyX2JpdCh2Y3B1LSZndDt2Y3B1X2lkeCwgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnhlbi5wb2xsX21hc2spKSB7CkBAIC0xODE2LDggJiM0MzsxODQ0LDkgQEAgc3RhdGljIHZvaWQga3ZtX3hlbl9jaGVja19wb2xsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG9ydCkKIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyA9ICZhbXA7a3ZtLSZndDthcmNoLnhlbi5zaGluZm9fY2FjaGU7CiYjNDM7CWJvb2wgaGFzXzY0Yml0X3NoaW5mbyA9IGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pOwomIzQzOwl1bnNpZ25lZCBsb25nICpwZW5kaW5nX2JpdHMsICptYXNrX2JpdHMsIHZpX3BlbmRpbmdfc2VsX29mczsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7Ci0JdW5zaWduZWQgbG9uZyAqcGVuZGluZ19iaXRzLCAqbWFza19iaXRzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHBvcnRfd29yZF9iaXQ7CiAJYm9vbCBraWNrX3ZjcHUgPSBmYWxzZTsKQEAgLTE4MzMsNyAmIzQzOzE4NjIsNyBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKQogCQlXUklURV9PTkNFKHhlLSZndDt2Y3B1X2lkeCwgdmNwdS0mZ3Q7dmNwdV9pZHgpOwogCX0KIAotCWlmICh4ZS0mZ3Q7cG9ydCAmZ3Q7PSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKJiM0MzsJaWYgKHhlLSZndDtwb3J0ICZndDs9IG1heF9ldnRjaG5fcG9ydChoYXNfNjRiaXRfc2hpbmZvKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyYyA9IC1FV09VTERCTE9DSzsKQEAgLTE4NDQsMTYgJiM0MzsxODczLDIzIEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pCiAJaWYgKCFrdm1fZ3BjX2NoZWNrKGdwYywgUEFHRV9TSVpFKSkKIAkJZ290byBvdXRfcmN1OwogCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7IGt2bS0mZ3Q7YXJjaC54ZW4ubG9uZ19tb2RlKSB7CiYjNDM7CWlmIChoYXNfNjRiaXRfc2hpbmZvKSB7CiAJCXN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLSZndDtraHZhOwogCQlwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKSZhbXA7c2hpbmZvLSZndDtldnRjaG5fcGVuZGluZzsKIAkJbWFza19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKikmYW1wO3NoaW5mby0mZ3Q7ZXZ0Y2huX21hc2s7CiAJCXBvcnRfd29yZF9iaXQgPSB4ZS0mZ3Q7cG9ydCAvIDY0OwomIzQzOwomIzQzOwkJdmlfcGVuZGluZ19zZWxfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3BlbmRpbmdfc2VsKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgY29tcGF0X3NoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtJmd0O2todmE7CiAJCXBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopJmFtcDtzaGluZm8tJmd0O2V2dGNobl9wZW5kaW5nOwogCQltYXNrX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKSZhbXA7c2hpbmZvLSZndDtldnRjaG5fbWFzazsKIAkJcG9ydF93b3JkX2JpdCA9IHhlLSZndDtwb3J0IC8gMzI7CiYjNDM7CiYjNDM7CQl2aV9wZW5kaW5nX3NlbF9vZnMgPSBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbywgZXZ0Y2huX3BlbmRpbmdfc2VsKTsKJiM0MzsKJiM0MzsJCS8qIHRlc3RfYW5kX3NldF9iaXQoKSBuZWVkcyA2NC1iaXQgYWxpZ25tZW50LCBidXQgdGhhdCYjMzk7cyBPSyAqLwomIzQzOwkJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8sIGV2dGNobl9wZW5kaW5nKSAmYW1wOyA3KTsKIAl9CiAKIAkvKgpAQCAtMTg2OSw2ICYjNDM7MTkwNSw4IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pCiAJCXJjID0gLUVOT1RDT05OOyAvKiBNYXNrZWQgKi8KIAkJa3ZtX3hlbl9jaGVja19wb2xsZXIodmNwdSwgeGUtJmd0O3BvcnQpOwogCX0gZWxzZSB7CiYjNDM7CQlib29sIG9sZDsKJiM0MzsKIAkJcmMgPSAxOyAvKiBEZWxpdmVyZWQgdG8gdGhlIGJpdG1hcCBpbiBzaGFyZWRfaW5mby4gKi8KIAkJLyogTm93IHN3aXRjaCB0byB0aGUgdkNQVSYjMzk7cyB2Y3B1X2luZm8gdG8gc2V0IHRoZSBpbmRleCBhbmQgcGVuZGluZ19zZWwgKi8KIAkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2dwYy0mZ3Q7bG9jaywgZmxhZ3MpOwpAQCAtMTg4NSwxOSAmIzQzOzE5MjMsMjkgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIAkJCWdvdG8gb3V0X3JjdTsKIAkJfQogCi0JCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkgewotCQkJc3RydWN0IHZjcHVfaW5mbyAqdmNwdV9pbmZvID0gZ3BjLSZndDtraHZhOwotCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnRfd29yZF9iaXQsICZhbXA7dmNwdV9pbmZvLSZndDtldnRjaG5fcGVuZGluZ19zZWwpKSB7Ci0JCQkJV1JJVEVfT05DRSh2Y3B1X2luZm8tJmd0O2V2dGNobl91cGNhbGxfcGVuZGluZywgMSk7Ci0JCQkJa2lja192Y3B1ID0gdHJ1ZTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXN0cnVjdCBjb21wYXRfdmNwdV9pbmZvICp2Y3B1X2luZm8gPSBncGMtJmd0O2todmE7Ci0JCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCwKLQkJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgKikmYW1wO3ZjcHVfaW5mby0mZ3Q7ZXZ0Y2huX3BlbmRpbmdfc2VsKSkgewotCQkJCVdSSVRFX09OQ0UodmNwdV9pbmZvLSZndDtldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpOwotCQkJCWtpY2tfdmNwdSA9IHRydWU7Ci0JCQl9CiYjNDM7CQkvKgomIzQzOwkJICogRXhwbGljaXRseSB1c2UgYSAzMi1iaXQgYnRzbCBpbnN0ZWFkIG9mIHRlc3RfYW5kX3NldF9iaXQoKSwKJiM0MzsJCSAqIHdoaWNoIHdvdWxkIHVzZSBidHNxIG9uIHg4Ni02NC4gVGhlIHZjcHVfaW5mbyBpcyBndWVzdC0KJiM0MzsJCSAqIGNvbnRyb2xsZWQgYW5kIG9ubHkgcmVxdWlyZWQgdG8gYmUgMzItYml0IGFsaWduZWQsIHNvIGEKJiM0MzsJCSAqIDY0LWJpdCBhY2Nlc3MgY291bGQgZ2VuZXJhdGUgYSBzcGxpdC1sb2NrICNBQy4KJiM0MzsJCSAqCiYjNDM7CQkgKiBOb3RlLCB0aGlzIGRvZXMgbm90IGFwcGx5IHRvIHRoZSB0ZXN0X2FuZF9zZXRfYml0KCkgb24KJiM0MzsJCSAqIHBlbmRpbmdfYml0cyBhYm92ZTogdGhhdCBpcyBpbiB0aGUgcGVyLVZNIHNoYXJlZF9pbmZvLCB3aGljaAomIzQzOwkJICogaXMgcGFnZSBhbGlnbmVkLCBzbyB0aGUgYWNjZXNzIGlzIGd1YXJhbnRlZWQgdG8gYmUgNjQtYml0CiYjNDM7CQkgKiBhbGlnbmVkLgomIzQzOwkJICovCiYjNDM7CQlvbGQgPSBHRU5fQklOQVJZX1JNV2NjKExPQ0tfUFJFRklYICYjMzQ7YnRzbCYjMzQ7LAomIzQzOwkJCQkgICAgICAgKih1MzIgKikoZ3BjLSZndDtraHZhICYjNDM7IHZpX3BlbmRpbmdfc2VsX29mcyksCiYjNDM7CQkJCSAgICAgICBjLCAmIzM0O0lyJiMzNDssIHBvcnRfd29yZF9iaXQpOwomIzQzOwkJaWYgKCFvbGQpIHsKJiM0MzsJCQlzdHJ1Y3QgdmNwdV9pbmZvICp2aSA9IGdwYy0mZ3Q7a2h2YTsKJiM0MzsKJiM0MzsJCQkvKiBObyBuZWVkIGZvciBjb21wYXQgaGFuZGxpbmcgKi8KJiM0MzsJCQlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSAhPQomIzQzOwkJCQkgICAgIG9mZnNldG9mKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpKTsKJiM0MzsKJiM0MzsJCQlXUklURV9PTkNFKHZpLSZndDtldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpOwomIzQzOwkJCWtpY2tfdmNwdSA9IHRydWU7CiAJCX0KIAogCQkvKiBGb3IgdGhlIHBlci12Q1BVIGxhcGljIHZlY3RvciwgZGVsaXZlciBpdCBhcyBNU0kuICovCkBAIC0xOTk1LDcgJiM0MzsyMDQzLDcgQEAgaW50IGt2bV94ZW5fc2V0dXBfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiAKIAkvKgotCSAqIERvbiYjMzk7dCBjaGVjayBmb3IgdGhlIHBvcnQgYmVpbmcgd2l0aGluIHJhbmdlIG9mIG1heF9ldnRjaG5fcG9ydCgpLgomIzQzOwkgKiBEb24mIzM5O3QgY2hlY2sgZm9yIHRoZSBwb3J0IGJlaW5nIHdpdGhpbiByYW5nZSBvZiBrdm1fbWF4X2V2dGNobl9wb3J0KCkuCiAJICogVXNlcnNwYWNlIGNhbiBjb25maWd1cmUgd2hhdCBldmVyIHRhcmdldHMgaXQgbGlrZXM7IGV2ZW50cyBqdXN0IHdvbiYjMzk7dAogCSAqIGJlIGRlbGl2ZXJlZCBpZi93aGlsZSB0aGUgdGFyZ2V0IGlzIGludmFsaWQsIGp1c3QgbGlrZSB1c2Vyc3BhY2UgY2FuCiAJICogY29uZmlndXJlIE1TSXMgd2hpY2ggdGFyZ2V0IG5vbi1leGlzdGVudCBBUElDcy4KQEAgLTIwMDQsOCAmIzQzOzIwNTIsOCBAQCBpbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLAogCSAqIGNhbiBiZSByZXN0b3JlZCAqaW5kZXBlbmRlbnRseSogb2Ygb3RoZXIgdGhpbmdzIGxpa2UgY3JlYXRpbmcgdkNQVXMsCiAJICogd2l0aG91dCBpbXBvc2luZyBhbiBvcmRlcmluZyBkZXBlbmRlbmN5IG9uIHVzZXJzcGFjZS4gIEluIHRoaXMKIAkgKiBwYXJ0aWN1bGFyIGNhc2UsIHRoZSBwcm9ibGVtYXRpYyBvcmRlcmluZyB3b3VsZCBiZSB3aXRoIHNldHRpbmcgdGhlCi0JICogWGVuICYjMzk7bG9uZyBtb2RlJiMzOTsgZmxhZywgd2hpY2ggY2hhbmdlcyBtYXhfZXZ0Y2huX3BvcnQoKSB0byBhbGxvdyA0MDk2Ci0JICogaW5zdGVhZCBvZiAxMDI0IGV2ZW50IGNoYW5uZWxzLgomIzQzOwkgKiBYZW4gJiMzOTtsb25nIG1vZGUmIzM5OyBmbGFnLCB3aGljaCBjaGFuZ2VzIGt2bV9tYXhfZXZ0Y2huX3BvcnQoKSB0byBhbGxvdwomIzQzOwkgKiA0MDk2IGluc3RlYWQgb2YgMTAyNCBldmVudCBjaGFubmVscy4KIAkgKi8KIAogCS8qIFdlIG9ubHkgc3VwcG9ydCAyIGxldmVsIGV2ZW50IGNoYW5uZWxzIGZvciBub3cgKi8KQEAgLTIwNDIsNyAmIzQzOzIwOTAsNyBAQCBpbnQga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX3hlbl9ldnRjaG4gKgogCXN0cnVjdCBrdm1feGVuX2V2dGNobiBlOwogCWludCByZXQ7CiAKLQlpZiAoIXV4ZS0mZ3Q7cG9ydCB8fCB1eGUtJmd0O3BvcnQgJmd0Oz0gbWF4X2V2dGNobl9wb3J0KGt2bSkpCiYjNDM7CWlmICghdXhlLSZndDtwb3J0IHx8IHV4ZS0mZ3Q7cG9ydCAmZ3Q7PSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogV2Ugb25seSBzdXBwb3J0IDIgbGV2ZWwgZXZlbnQgY2hhbm5lbHMgZm9yIG5vdyAqLwpAQCAtMjA5Myw3ICYjNDM7MjE0MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX3VwZGF0ZShzdHJ1Y3Qga3ZtICprdm0sCiAKIAkvKiBQcm90ZWN0IHdyaXRlcyB0byBldnRjaG5mZCBhcyB3ZWxsIGFzIHRoZSBpZHIgbG9va3VwLiAgKi8KIAltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDthcmNoLnhlbi54ZW5fbG9jayk7Ci0JZXZ0Y2huZmQgPSBpZHJfZmluZCgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBwb3J0KTsKJiM0MzsJZXZ0Y2huZmQgPSB4YV9sb2FkKCZhbXA7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMsIHBvcnQpOwogCiAJcmV0ID0gLUVOT0VOVDsKIAlpZiAoIWV2dGNobmZkKQpAQCAtMjE1Miw3ICYjNDM7MjIwMCw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbihzdHJ1Y3Qga3ZtICprdm0sCiAKIAljYXNlIEVWVENITlNUQVRfaW50ZXJkb21haW46CiAJCWlmIChkYXRhLSZndDt1LmV2dGNobi5kZWxpdmVyLnBvcnQucG9ydCkgewotCQkJaWYgKGRhdGEtJmd0O3UuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0ICZndDs9IG1heF9ldnRjaG5fcG9ydChrdm0pKQomIzQzOwkJCWlmIChkYXRhLSZndDt1LmV2dGNobi5kZWxpdmVyLnBvcnQucG9ydCAmZ3Q7PSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpCiAJCQkJZ290byBvdXRfbm9ldmVudGZkOyAvKiAtRUlOVkFMICovCiAJCX0gZWxzZSB7CiAJCQlldmVudGZkID0gZXZlbnRmZF9jdHhfZmRnZXQoZGF0YS0mZ3Q7dS5ldnRjaG4uZGVsaXZlci5ldmVudGZkLmZkKTsKQEAgLTIxODcsMTMgJiM0MzsyMjM1LDEzIEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbihzdHJ1Y3Qga3ZtICprdm0sCiAJfQogCiAJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4ueGVuX2xvY2spOwotCXJldCA9IGlkcl9hbGxvYygmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBldnRjaG5mZCwgcG9ydCwgcG9ydCAmIzQzOyAxLAomIzQzOwlyZXQgPSB4YV9pbnNlcnQoJmFtcDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCwgZXZ0Y2huZmQsCiAJCQlHRlBfS0VSTkVMKTsKIAltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2FyY2gueGVuLnhlbl9sb2NrKTsKLQlpZiAocmV0ICZndDs9IDApCiYjNDM7CWlmICghcmV0KQogCQlyZXR1cm4gMDsKIAotCWlmIChyZXQgPT0gLUVOT1NQQykKJiM0MzsJaWYgKHJldCA9PSAtRUJVU1kpCiAJCXJldCA9IC1FRVhJU1Q7CiBvdXQ6CiAJaWYgKGV2ZW50ZmQpCkBAIC0yMjA4LDcgJiM0MzsyMjU2LDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfZGVhc3NpZ24oc3RydWN0IGt2bSAqa3ZtLCB1MzIgcG9ydCkKIAlzdHJ1Y3QgZXZ0Y2huZmQgKmV2dGNobmZkOwogCiAJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4ueGVuX2xvY2spOwotCWV2dGNobmZkID0gaWRyX3JlbW92ZSgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBwb3J0KTsKJiM0MzsJZXZ0Y2huZmQgPSB4YV9lcmFzZSgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBwb3J0KTsKIAltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2FyY2gueGVuLnhlbl9sb2NrKTsKIAogCWlmICghZXZ0Y2huZmQpCkBAIC0yMjI0LDcgJiM0MzsyMjcyLDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfZGVhc3NpZ24oc3RydWN0IGt2bSAqa3ZtLCB1MzIgcG9ydCkKIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlzdHJ1Y3QgZXZ0Y2huZmQgKmV2dGNobmZkLCAqKmFsbF9ldnRjaG5mZHM7Ci0JaW50IGk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKIAlpbnQgbiA9IDA7CiAKIAltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDthcmNoLnhlbi54ZW5fbG9jayk7CkBAIC0yMjM0LDcgJiM0MzsyMjgyLDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKQogCSAqIGNyaXRpY2FsIHNlY3Rpb24sIGZpcnN0IGNvbGxlY3QgYWxsIHRoZSBldnRjaG5mZCBvYmplY3RzCiAJICogaW4gYW4gYXJyYXkgYXMgdGhleSBhcmUgcmVtb3ZlZCBmcm9tIGV2dGNobl9wb3J0cy4KIAkgKi8KLQlpZHJfZm9yX2VhY2hfZW50cnkoJmFtcDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQsIGkpCiYjNDM7CXhhX2Zvcl9lYWNoKCZhbXA7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGksIGV2dGNobmZkKQogCQluJiM0MzsmIzQzOzsKIAogCWFsbF9ldnRjaG5mZHMgPSBrbWFsbG9jX29ianMoc3RydWN0IGV2dGNobmZkICosIG4pOwpAQCAtMjI0NCw5ICYjNDM7MjI5Miw5IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KHN0cnVjdCBrdm0gKmt2bSkKIAl9CiAKIAluID0gMDsKLQlpZHJfZm9yX2VhY2hfZW50cnkoJmFtcDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQsIGkpIHsKJiM0MzsJeGFfZm9yX2VhY2goJmFtcDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cywgaSwgZXZ0Y2huZmQpIHsKIAkJYWxsX2V2dGNobmZkc1tuJiM0MzsmIzQzO10gPSBldnRjaG5mZDsKLQkJaWRyX3JlbW92ZSgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBldnRjaG5mZC0mZ3Q7c2VuZF9wb3J0KTsKJiM0MzsJCXhhX2VyYXNlKCZhbXA7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLSZndDtzZW5kX3BvcnQpOwogCX0KIAltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2FyY2gueGVuLnhlbl9sb2NrKTsKIApAQCAtMjI3MCw3ICYjNDM7MjMxOCw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRhdHRyX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhCiAJaWYgKGRhdGEtJmd0O3UuZXZ0Y2huLmZsYWdzID09IEtWTV9YRU5fRVZUQ0hOX1JFU0VUKQogCQlyZXR1cm4ga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KGt2bSk7CiAKLQlpZiAoIXBvcnQgfHwgcG9ydCAmZ3Q7PSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKJiM0MzsJaWYgKCFwb3J0IHx8IHBvcnQgJmd0Oz0ga3ZtX21heF9ldnRjaG5fcG9ydChrdm0pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChkYXRhLSZndDt1LmV2dGNobi5mbGFncyA9PSBLVk1fWEVOX0VWVENITl9ERUFTU0lHTikKQEAgLTIyOTcsMTIgJiM0MzsyMzQ1LDEwIEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfZXZ0Y2huX3NlbmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcGFyYW0sIHU2NCAqcikKIAl9CiAKIAkvKgotCSAqIGV2dGNobmZkIGlzIHByb3RlY3RlZCBieSBrdm0tJmd0O3NyY3U7IHRoZSBpZHIgbG9va3VwIGluc3RlYWQKLQkgKiBpcyBwcm90ZWN0ZWQgYnkgUkNVLgomIzQzOwkgKiBldnRjaG5mZCBpcyBwcm90ZWN0ZWQgYnkga3ZtLSZndDtzcmN1OyB0aGUgeGFfbG9hZCBpcyBSQ1Utc2FmZQomIzQzOwkgKiBpbnRlcm5hbGx5LCBubyBleHBsaWNpdCByY3VfcmVhZF9sb2NrKCkgbmVlZGVkLgogCSAqLwotCXJjdV9yZWFkX2xvY2soKTsKLQlldnRjaG5mZCA9IGlkcl9maW5kKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMsIHNlbmQucG9ydCk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CWV2dGNobmZkID0geGFfbG9hZCgmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBzZW5kLnBvcnQpOwogCWlmICghZXZ0Y2huZmQpCiAJCXJldHVybiBmYWxzZTsKIApAQCAtMjM0OSwyMyAmIzQzOzIzOTUsMjMgQEAgdm9pZCBrdm1feGVuX2Rlc3Ryb3lfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB2b2lkIGt2bV94ZW5faW5pdF92bShzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJbXV0ZXhfaW5pdCgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4ueGVuX2xvY2spOwotCWlkcl9pbml0KCZhbXA7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMpOwomIzQzOwl4YV9pbml0KCZhbXA7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMpOwogCWt2bV9ncGNfaW5pdCgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uc2hpbmZvX2NhY2hlLCBrdm0pOwogfQogCiB2b2lkIGt2bV94ZW5fZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IGV2dGNobmZkICpldnRjaG5mZDsKLQlpbnQgaTsKJiM0MzsJdW5zaWduZWQgbG9uZyBpOwogCiAJa3ZtX2dwY19kZWFjdGl2YXRlKCZhbXA7a3ZtLSZndDthcmNoLnhlbi5zaGluZm9fY2FjaGUpOwogCi0JaWRyX2Zvcl9lYWNoX2VudHJ5KCZhbXA7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLCBpKSB7CiYjNDM7CXhhX2Zvcl9lYWNoKCZhbXA7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGksIGV2dGNobmZkKSB7CiAJCWlmICghZXZ0Y2huZmQtJmd0O2RlbGl2ZXIucG9ydC5wb3J0KQogCQkJZXZlbnRmZF9jdHhfcHV0KGV2dGNobmZkLSZndDtkZWxpdmVyLmV2ZW50ZmQuY3R4KTsKIAkJa2ZyZWUoZXZ0Y2huZmQpOwogCX0KLQlpZHJfZGVzdHJveSgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTsKJiM0MzsJeGFfZGVzdHJveSgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTsKIAogCWlmIChrdm0tJmd0O2FyY2gueGVuLmh2bV9jb25maWcubXNyKQogCQlzdGF0aWNfYnJhbmNoX3Nsb3dfZGVjX2RlZmVycmVkKCZhbXA7a3ZtX3hlbl9lbmFibGVkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uaCBiL2FyY2gveDg2L2t2bS94ZW4uaAppbmRleCBmMzcyODU1ODU3YTg4Li45ZDA0ZTM1MGJkYjFmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3hlbi5oCkBAIC0yMzUsNiAmIzQzOzIzNSwxMSBAQCBzdHJ1Y3QgY29tcGF0X3NoYXJlZF9pbmZvIHsKICNkZWZpbmUgQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUyAoOCAqCQkJCVwKIAkJCQkgICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgXAogCQkJCQkJICAgZXZ0Y2huX3BlbmRpbmcpKQomIzQzOwomIzQzOy8qIExhdGNoZWQgVk0td2lkZSBtb2RlOyB0aGUgS1ZNIGVxdWl2YWxlbnQgb2YgWGVuJiMzOTtzICFoYXNfMzJiaXRfc2hpbmZvKCkuICovCiYjNDM7I2RlZmluZSBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKSBcCiYjNDM7CShJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyBSRUFEX09OQ0UoKGt2bSktJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkpCiYjNDM7CiBzdHJ1Y3QgY29tcGF0X3ZjcHVfcnVuc3RhdGVfaW5mbyB7CiAgICAgaW50IHN0YXRlOwogICAgIHVpbnQ2NF90IHN0YXRlX2VudHJ5X3RpbWU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggMDNiZmM5Mjg2NGI2ZS4uM2RkMDQ2MDVmMmU1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaApAQCAtODU1LDYgJiM0Mzs4NTUsOCBAQCBzdHJ1Y3Qga3ZtIHsKIAlnZm5fdCBtbXVfaW52YWxpZGF0ZV9yYW5nZV9zdGFydDsKIAlnZm5fdCBtbXVfaW52YWxpZGF0ZV9yYW5nZV9lbmQ7CiAKJiM0MzsJdW5zaWduZWQgbG9uZyBncGNfaW52YWxpZGF0ZV9zZXE7CiYjNDM7CiAJc3RydWN0IGxpc3RfaGVhZCBkZXZpY2VzOwogCXU2NCBtYW51YWxfZGlydHlfbG9nX3Byb3RlY3Q7CiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnk7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCA2NWViMjZhMDUyMGQ4Li4xMDhkNDJjNWMxZDZhIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTgxMyw2ICYjNDM7ODEzLDE2IEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sCiAKIAkvKiBQYWlycyB3aXRoIHRoZSBpbmNyZW1lbnQgaW4gcmFuZ2Vfc3RhcnQoKS4gKi8KIAlzcGluX2xvY2soJmFtcDtrdm0tJmd0O21uX2ludmFsaWRhdGVfbG9jayk7CiYjNDM7CWt2bS0mZ3Q7Z3BjX2ludmFsaWRhdGVfc2VxJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQXMgd2l0aCB0aGUgTU1VIHNlcXVlbmNlIGNvdW50ZXIgYW5kIG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzLCB0aGUKJiM0MzsJICogR1BDIHNlcXVlbmNlIGluY3JlYXNlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgdGhlIGludmFsaWRhdGUgY291bnQKJiM0MzsJICogZ29lcyB0byB6ZXJvLiAgUGFpcnMgd2l0aCB0aGUgc21wX3JtYigpIGluCiYjNDM7CSAqIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZSgpLgomIzQzOwkgKi8KJiM0MzsJc21wX3dtYigpOwomIzQzOwogCWlmICghV0FSTl9PTl9PTkNFKCFrdm0tJmd0O21uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSkKIAkJLS1rdm0tJmd0O21uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50OwogCXdha2UgPSAha3ZtLSZndDttbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMgYi92aXJ0L2t2bS9wZm5jYWNoZS5jCmluZGV4IDcyOGQyYzFiNDg4YTguLjM2NTk2ODZiOTdjMjQgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vcGZuY2FjaGUuYwpAQCAtMTI0LDcgJiM0MzsxMjQsNyBAQCBzdGF0aWMgdm9pZCBncGNfdW5tYXAoa3ZtX3Bmbl90IHBmbiwgdm9pZCAqa2h2YSkKICNlbmRpZgogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGdwY19zZXEpCiB7CiAJLyoKIAkgKiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBhY3RzIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMKQEAgLTEzNiwyMCAmIzQzOzEzNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfcwogCSAqIE5vdGUsIGl0IGRvZXMgbm90IG1hdHRlciB0aGF0IG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50CiAJICogaXMgbm90IHByb3RlY3RlZCBieSBncGMtJmd0O2xvY2suICBJdCBpcyBndWFyYW50ZWVkIHRvCiAJICogYmUgZWxldmF0ZWQgYmVmb3JlIHRoZSBtbXVfbm90aWZpZXIgYWNxdWlyZXMgZ3BjLSZndDtsb2NrLCBhbmQKLQkgKiBpc24mIzM5O3QgZHJvcHBlZCB1bnRpbCBhZnRlciBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC4KJiM0MzsJICogaXNuJiMzOTt0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuCiAJICovCiAJaWYgKGt2bS0mZ3Q7bW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpCiAJCXJldHVybiB0cnVlOwogCiAJLyoKIAkgKiBFbnN1cmUgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgaXMgcmVhZCBiZWZvcmUKLQkgKiBtbXVfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbgotCSAqIG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlCiYjNDM7CSAqIGdwY19pbnZhbGlkYXRlX3NlcS4gIFRoaXMgcGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluCiYjNDM7CSAqIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoKSB0byBndWFyYW50ZWUgZWl0aGVyIHRoZQogCSAqIG9sZCAobm9uLXplcm8pIHZhbHVlIG9mIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IG9yIHRoZQotCSAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC4KJiM0MzsJICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLgogCSAqLwogCXNtcF9ybWIoKTsKLQlyZXR1cm4ga3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXEgIT0gbW11X3NlcTsKJiM0MzsJcmV0dXJuIGt2bS0mZ3Q7Z3BjX2ludmFsaWRhdGVfc2VxICE9IGdwY19zZXE7CiB9CiAKIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQpAQCAtMTU4LDcgJiM0MzsxNTgsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKIAl2b2lkICpvbGRfa2h2YSA9ICh2b2lkICopUEFHRV9BTElHTl9ET1dOKCh1aW50cHRyX3QpZ3BjLSZndDtraHZhKTsKIAlrdm1fcGZuX3QgbmV3X3BmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUOwogCXZvaWQgKm5ld19raHZhID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIG1tdV9zZXE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZ3BjX3NlcTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCXN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7CkBAIC0xODEsNyAmIzQzOzE4MSw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQogCWdwYy0mZ3Q7dmFsaWQgPSBmYWxzZTsKIAogCWRvIHsKLQkJbW11X3NlcSA9IGdwYy0mZ3Q7a3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXE7CiYjNDM7CQlncGNfc2VxID0gZ3BjLSZndDtrdm0tJmd0O2dwY19pbnZhbGlkYXRlX3NlcTsKIAkJc21wX3JtYigpOwogCiAJCXdyaXRlX3VubG9ja19pcnEoJmFtcDtncGMtJmd0O2xvY2spOwpAQCAtMjMyLDcgJiM0MzsyMzIsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKIAkJICogYXR0ZW1wdGluZyB0byByZWZyZXNoLgogCQkgKi8KIAkJV0FSTl9PTl9PTkNFKGdwYy0mZ3Q7dmFsaWQpOwotCX0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtJmd0O2t2bSwgbW11X3NlcSkpOwomIzQzOwl9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLSZndDtrdm0sIGdwY19zZXEpKTsKIAogCWdwYy0mZ3Q7dmFsaWQgPSB0cnVlOwogCWdwYy0mZ3Q7cGZuID0gbmV3X3BmbjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyNzEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gUGF0Y2ggU2VyaWVzIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIHBhdGNoIHNlcmllcyByZXZlYWxzIHNvbWUgaW50ZXJlc3RpbmcgZmlsZXMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQ6IGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oYCwgYGFyY2gveDg2L2t2bS94ZW4uY2AsIGBhcmNoL3g4Ni9rdm0veGVuLmhgLCBgaW5jbHVkZS9saW51eC9rdm1faG9zdC5oYCwgYHZpcnQva3ZtL2t2bV9tYWluLmNgLCBhbmQgYHZpcnQva3ZtL3BmbmNhY2hlLmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgS1ZNIGludm9sdmVtZW50LCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBYZW4gZW11bGF0aW9uIHdpdGhpbiB0aGUgeDg2IEtWTSBjb250ZXh0LCBhcyB3ZWxsIGFzIHRoZSBnZW5lcmljIEtWTSBwZm5jYWNoZSBhbmQgTU1VIG5vdGlmaWVyIGxvZ2ljLiBUaGlzIHBpcXVlcyBteSBpbnRlcmVzdCDigJMgS1ZNIGlzIGEgY29yZSBjb21wb25lbnQgb2YgdmlydHVhbGl6YXRpb24sIG1ha2luZyBpdCBhIHBvdGVudGlhbGx5IGZydWl0ZnVsIHRhcmdldCBmb3IgZnV6emluZy4gSXQmIzM5O3MgYWNjZXNzaWJsZSB3aXRoaW4gUUVNVSwgVk1zIHdpdGggS1ZNLCBhbmQgcG90ZW50aWFsbHkgZXZlbiB0aHJvdWdoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvciB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHdpdGggYC9kZXYva3ZtYC4KCk5vdywgZGlnZ2luZyBpbnRvIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXM6IFdlIGhhdmUgYW4gWEFycmF5IGNvbnZlcnNpb24gcmVwbGFjaW5nIGFuIElEUiBmb3IgWGVuIGV2ZW50IGNoYW5uZWxzIGluIEtWTSBYZW4gZW11bGF0aW9uIChgZXZ0Y2huX3BvcnRzYCksIHNvbWUgYWxpZ25tZW50IGNoZWNrcyBmb3IgR1BBL0hWQSB3aGVuIGFjdGl2YXRpbmcgdGhlIGB2Y3B1X2luZm9gIGNhY2hlIChga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCksIGFuZCBhIHNwbGl0IG9mIGBtbXVfaW52YWxpZGF0ZV9zZXFgIGludG8gYGdwY19pbnZhbGlkYXRlX3NlcWAgZm9yIHRoZSBHUEMuIFRoZXJlJiMzOTtzIGFsc28gbWVudGlvbiBvZiBgYnRzbGAgZm9yIGF0b21pYyBiaXRtYXAgb3BlcmF0aW9ucywgYWltaW5nIHRvIGF2b2lkIHRob3NlIHBlc2t5IHNwbGl0LWxvY2sgI0FDIGZhdWx0cyBvbiB1bmFsaWduZWQgYHZjcHVfaW5mb2AgYGV2dGNobl9wZW5kaW5nX3NlbGAgYWNjZXNzZXMuIFRoZXJlJiMzOTtzIGEgYGd1YXJkKHNyY3UpYCB1c2FnZSwgYW5kIHNvbWUgZml4ZXMvcmVmYWN0b3JpbmdzIHJlbGF0ZWQgdG8gdGhvc2UgNjQvMzItYml0IFhlbiBzaGFyZWQgaW5mbyBtb2RlIGNoZWNrcyAoYGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mb2ApLgoKRnJvbSBhIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUsIGFsbCBvZiB0aGVzZSBjaGFuZ2VzIHRvdWNoIGNvcmUga2VybmVsIGxvZ2ljIHdpdGhpbiBLVk0sIHNwZWNpZmljYWxseSBYZW4gZW11bGF0aW9uLiBNb3Jlb3ZlciwgdGhlcmUmIzM5O3MgY29uY3VycmVuY3kgaW1wbGljYXRpb25zIGhlcmUsIHdoaWNoIGlzIGFsd2F5cyBhIHJlZCBmbGFnIHRoYXQgZHJhd3MgbWUgdG93YXJkcyBmdXp6aW5nLCBzbyBJJiMzOTtsbCBzZXQgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hpY2ggS2NvbmZpZyBvcHRpb25zIGFyZSByZXF1aXJlZCB0byBlbmFibGUgYWxsIHRoaXMgZnVuY3Rpb25hbGl0eSwgc28gSSYjMzk7bGwgY2hlY2sgYEtWTWAsIGBLVk1fWEVOYCwgYW5kIGFueSBvdGhlciByZWxldmFudCBvcHRpb25zLiBJJiMzOTtsbCB1c2UgYSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGFuZCBgdmlydC9rdm0vS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTczOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE4LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMwOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMzpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU2OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBLVk0gQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgS1ZNIGlzIGNvbmZpZ3VyZWQgaW4gdGhpcyB4ODYgZW52aXJvbm1lbnQsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBYZW4gYW5kIHRoZSBJbnRlbC9BTUQgaW1wbGVtZW50YXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgYW5kIGZvY3VzIG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgY29uZmlnIEtWTV9YRU5gLCBgY29uZmlnIEtWTWAsIGFuZCB0aGVuIHRoZSBwcm9jZXNzb3Itc3BlY2lmaWMgb3B0aW9ucywgYEtWTV9JTlRFTGAgYW5kIGBLVk1fQU1EYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZXNlIG9wdGlvbnMgaW5mbHVlbmNlIGVhY2ggb3RoZXIuIFdoZXJlIGRvZXMgdGhlIFhlbiBoeXBlcnZpc29yIGZpdCBpbiB3aXRoIGEgS1ZNIHNldHVwIGhlcmU/IEFuZCBob3cgZG8gd2UgY2hvb3NlIGJldHdlZW4gSW50ZWwgYW5kIEFNRCB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zPyBMZXQmIzM5O3MgdHJhY2UgdGhyb3VnaCB0aGVzZSBkZWZpbml0aW9ucyBhbmQgZmlndXJlIG91dCB0aGUgY29uZGl0aW9uYWwgbG9naWMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgS1ZNIGJ1aWxkIHN0cmF0ZWd5IGZvciB0aGlzIHBsYXRmb3JtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgS1ZNIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbiAgIDc6XHRcbiAgIDg6XHRtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG4gICA5Olx0XHRib29sIFwmIzM0O1ZpcnR1YWxpemF0aW9uXCYjMzQ7XG4gIDEwOlx0XHRkZWZhdWx0IHlcbiAgMTE6XHRcdGhlbHBcbiAgMTI6XHRcdCAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIHVzaW5nIHlvdXIgTGludXggaG9zdCB0byBydW4gb3RoZXJcbiAgMTM6XHRcdCAgb3BlcmF0aW5nIHN5c3RlbXMgaW5zaWRlIHZpcnR1YWwgbWFjaGluZXMgKGd1ZXN0cykuXG4gIDE0Olx0XHQgIFRoaXMgb3B0aW9uIGFsb25lIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIElmIHlvdSBzYXkgTiwgYWxsIG9wdGlvbnMgaW4gdGhpcyBzdWJtZW51IHdpbGwgYmUgc2tpcHBlZCBhbmQgZGlzYWJsZWQuXG4gIDE3Olx0XG4gIDE4Olx0aWYgVklSVFVBTElaQVRJT05cbiAgMTk6XHRcbiAgMjA6XHRjb25maWcgS1ZNX1g4NlxuICAyMTpcdFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuICAyMjpcdFx0c2VsZWN0IEtWTV9DT01NT05cbiAgMjM6XHRcdHNlbGVjdCBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXG4gIDI0Olx0XHRzZWxlY3QgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xuICAyNTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcbiAgMjY6XHRcdHNlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRVxuICAyNzpcdFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfVFNPXG4gIDI4Olx0XHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXG4gIDI5Olx0XHRzZWxlY3QgSEFWRV9LVk1fSVJRX0JZUEFTU1xuICAzMDpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9ST1VUSU5HXG4gIDMxOlx0XHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXG4gIDMyOlx0XHRzZWxlY3QgVkhPU1RfVEFTS1xuICAzMzpcdFx0c2VsZWN0IEtWTV9BU1lOQ19QRlxuICAzNDpcdFx0c2VsZWN0IFVTRVJfUkVUVVJOX05PVElGSUVSXG4gIDM1Olx0XHRzZWxlY3QgS1ZNX01NSU9cbiAgMzY6XHRcdHNlbGVjdCBTQ0hFRF9JTkZPXG4gIDM3Olx0XHRzZWxlY3QgUEVSRl9FVkVOVFNcbiAgMzg6XHRcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UU1xuICAzOTpcdFx0c2VsZWN0IFBFUkZfR1VFU1RfTUVESUFURURfUE1VXG4gIDQwOlx0XHRzZWxlY3QgSEFWRV9LVk1fTVNJXG4gIDQxOlx0XHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxuICA0MjpcdFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcbiAgNDM6XHRcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuICA0NDpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuICA0NTpcdFx0c2VsZWN0IEtWTV9WRklPXG4gIDQ2Olx0XHRzZWxlY3QgSEFWRV9LVk1fUE1fTk9USUZJRVIgaWYgUE1cbiAgNDc6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xuICA0ODpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbiAgNDk6XHRcdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxuICA1MDpcdFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCBpZiBYODZfNjRcbiAgNTE6XHRcbiAgNTI6XHRjb25maWcgS1ZNXG4gIDUzOlx0XHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbiAgNTQ6XHRcdGRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUNcbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgU3VwcG9ydCBob3N0aW5nIGZ1bGx5IHZpcnR1YWxpemVkIGd1ZXN0IG1hY2hpbmVzIHVzaW5nIGhhcmR3YXJlXG4gIDU3Olx0XHQgIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuICBZb3Ugd2lsbCBuZWVkIGEgZmFpcmx5IHJlY2VudFxuICA1ODpcdFx0ICBwcm9jZXNzb3IgZXF1aXBwZWQgd2l0aCB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiBZb3Ugd2lsbCBhbHNvXG4gIDU5Olx0XHQgIG5lZWQgdG8gc2VsZWN0IG9uZSBvciBtb3JlIG9mIHRoZSBwcm9jZXNzb3IgbW9kdWxlcyBiZWxvdy5cbiAgNjA6XHRcbiAgNjE6XHRcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgdGhyb3VnaFxuICA2MjpcdFx0ICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS5cbiAgNjM6XHRcbiAgNjQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDY1Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGt2bS5cbiAgNjY6XHRcbiAgNjc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjg6XHRcbiAgNjk6XHRjb25maWcgS1ZNX1dFUlJPUlxuICA3MDpcdFx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbiAgNzE6XHRcdCMgRGlzYWxsb3cgS1ZNJiMzOTtzIC1XZXJyb3IgaWYgS0FTQU4gaXMgZW5hYmxlZCwgZS5nLiB0byBndWFyZCBhZ2FpbnN0XG4gIDcyOlx0XHQjIHJhbmRvbWl6ZWQgY29uZmlncyBmcm9tIHNlbGVjdGluZyBLVk1fV0VSUk9SPXksIHdoaWNoIGRvZXNuJiMzOTt0IHBsYXlcbiAgNzM6XHRcdCMgbmljZSB3aXRoIEtBU0FOLiAgS0FTQU4gYnVpbGRzIGdlbmVyYXRlcyB3YXJuaW5ncyBmb3IgdGhlIGRlZmF1bHRcbiAgNzQ6XHRcdCMgRlJBTUVfV0FSTiwgaS5lLiBLVk1fV0VSUk9SPXkgd2l0aCBLQVNBTj15IHJlcXVpcmVzIHNwZWNpYWwgdHVuaW5nLlxuICA3NTpcdFx0IyBCdWlsZGluZyBLVk0gd2l0aCAtV2Vycm9yIGFuZCBLQVNBTiBpcyBzdGlsbCBkb2FibGUgdmlhIGVuYWJsaW5nXG4gIDc2Olx0XHQjIHRoZSBrZXJuZWwtd2lkZSBXRVJST1I9eS5cbiAgNzc6XHRcdGRlcGVuZHMgb24gS1ZNX1g4NiBcdTAwMjZcdTAwMjYgKChFWFBFUlQgXHUwMDI2XHUwMDI2ICFLQVNBTikgfHwgV0VSUk9SKVxuICA3ODpcdFx0aGVscFxuICA3OTpcdFx0ICBBZGQgLVdlcnJvciB0byB0aGUgYnVpbGQgZmxhZ3MgZm9yIEtWTS5cbiAgODA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAzNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgaW4gYGFyY2gveDg2L2t2bS9LY29uZmlnYCBjb25jZXJuaW5nIGBLVk1fWEVOYDoKCioqRXhhbWluaW5nIEtWTV9YRU4gaW4gYXJjaC94ODYva3ZtL0tjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBsaW5lcyAxOTAtMjI1IG9mIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgS1ZNX1hFTmAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcywgbWF5YmUgc29tZSBkZWZhdWx0IHZhbHVlcywgYW5kIHBvdGVudGlhbGx5IGEgZGVzY3JpcHRpb24gb2Ygd2hhdCBlbmFibGluZyB0aGlzIG9wdGlvbiBhY3R1YWxseSAqZG9lcyogaW4gdGhlIGNvbnRleHQgb2YgS1ZNIG9uIHg4Ni4gSSYjMzk7bSBhc3N1bWluZyB0aGlzIHNlY3Rpb24gZGVmaW5lcyB0aGUgaW50ZXJmYWNlIG9yIGludGVncmF0aW9uIHBvaW50IGJldHdlZW4gS1ZNIGFuZCBYZW4sIHByZXN1bWFibHkgYWxsb3dpbmcgS1ZNIHRvIHJ1biBhcyBhIGd1ZXN0IGluc2lkZSBhIFhlbiBoeXBlcnZpc29yLCB3aGljaCBpcyBhIHByZXR0eSBjb21tb24gdXNlLWNhc2UuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBjbHVlcyBhYm91dCB3aGV0aGVyIGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hhdCBvdGhlciBmZWF0dXJlcyBpdCBtaWdodCBkZXBlbmQgb24gKGUuZy4sIHNwZWNpZmljIENQVSBmZWF0dXJlcywgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucyksIGFuZCBhbnkgY2F2ZWF0cyBvciB3YXJuaW5ncyB0aGF0IG1pZ2h0IGJlIGluY2x1ZGVkIGluIHRoZSBjb21tZW50cy4gSSYjMzk7bGwgYWxzbyB0cnkgdG8gdW5kZXJzdGFuZCBpZiBpdCYjMzk7cyBjb25zaWRlcmVkIGV4cGVyaW1lbnRhbCBvciBzdGFibGUuIFVuZGVyc3RhbmRpbmcgdGhpcyBjb25maWd1cmF0aW9uIGlzIGltcG9ydGFudCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3IgaW50ZWdyYXRpbmcgZGlmZmVyZW50IGh5cGVydmlzb3JzIHdpdGhpbiBhIHNpbmdsZSBzeXN0ZW0uIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgdGhlcmUgaXMgYW55IG1lbnRpb24gb2Ygd2hldGhlciB0aGlzIGlzIGRlcGVuZGVudCBvbiB0aGUgYFhFTmAgY29uZmlndXJhdGlvbiBvcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkwOlx0XHQgIGZpcm13YXJlIHRvIGltcGxlbWVudCBVRUZJIHNlY3VyZSBib290LlxuIDE5MTpcdFxuIDE5MjpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuIDE5MzpcdFxuIDE5NDpcdGNvbmZpZyBLVk1fSFlQRVJWXG4gMTk1Olx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuIDE5NjpcdFx0ZGVwZW5kcyBvbiBLVk1fWDg2XG4gMTk3Olx0XHRkZWZhdWx0IHlcbiAxOTg6XHRcdGhlbHBcbiAxOTk6XHRcdCAgUHJvdmlkZXMgS1ZNIHN1cHBvcnQgZm9yIGVtdWxhdGluZyBNaWNyb3NvZnQgSHlwZXItVi4gIFRoaXMgYWxsb3dzIEtWTVxuIDIwMDpcdFx0ICB0byBleHBvc2UgYSBzdWJzZXQgb2YgdGhlIHBhcmF2aXJ0dWFsaXplZCBpbnRlcmZhY2VzIGRlZmluZWQgaW4gdGhlXG4gMjAxOlx0XHQgIEh5cGVyLVYgSHlwZXJ2aXNvciBUb3AtTGV2ZWwgRnVuY3Rpb25hbCBTcGVjaWZpY2F0aW9uIChUTEZTKTpcbiAyMDI6XHRcdCAgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvdmlydHVhbGl6YXRpb24vaHlwZXItdi1vbi13aW5kb3dzL3JlZmVyZW5jZS90bGZzXG4gMjAzOlx0XHQgIFRoZXNlIGludGVyZmFjZXMgYXJlIHJlcXVpcmVkIGZvciB0aGUgY29ycmVjdCBhbmQgcGVyZm9ybWFudCBmdW5jdGlvbmluZ1xuIDIwNDpcdFx0ICBvZiBXaW5kb3dzIGFuZCBIeXBlci1WIGd1ZXN0cyBvbiBLVk0uXG4gMjA1Olx0XG4gMjA2Olx0XHQgIElmIHVuc3VyZSwgc2F5IFwmIzM0O1lcJiMzNDsuXG4gMjA3Olx0XG4gMjA4Olx0Y29uZmlnIEtWTV9YRU5cbiAyMDk6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbiAyMTA6XHRcdGRlcGVuZHMgb24gS1ZNX1g4NlxuIDIxMTpcdFx0aGVscFxuIDIxMjpcdFx0ICBQcm92aWRlcyBLVk0gc3VwcG9ydCBmb3IgdGhlIGhvc3RpbmcgWGVuIEhWTSBndWVzdHMgYW5kXG4gMjEzOlx0XHQgIHBhc3NpbmcgWGVuIGh5cGVyY2FsbHMgdG8gdXNlcnNwYWNlLlxuIDIxNDpcdFxuIDIxNTpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IFwmIzM0O05cJiMzNDsuXG4gMjE2Olx0XG4gMjE3Olx0Y29uZmlnIEtWTV9QUk9WRV9NTVVcbiAyMTg6XHRcdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuIDIxOTpcdFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUxcbiAyMjA6XHRcdGRlcGVuZHMgb24gS1ZNX1g4NlxuIDIyMTpcdFx0ZGVwZW5kcyBvbiBFWFBFUlRcbiAyMjI6XHRcdGhlbHBcbiAyMjM6XHRcdCAgRW5hYmxlcyBydW50aW1lIGFzc2VydGlvbnMgaW4gS1ZNJiMzOTtzIE1NVSB0aGF0IGFyZSB0b28gY29zdGx5IHRvIGVuYWJsZVxuIDIyNDpcdFx0ICBpbiBhbnl0aGluZyByZW1vdGVseSByZXNlbWJsaW5nIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwgZS5nLiB0aGlzXG4gMjI1Olx0XHQgIGdhdGVzIGNvZGUgdGhhdCB2ZXJpZmllcyBhIHRvLWJlLWZyZWVkIHBhZ2UgdGFibGUgZG9lc24mIzM5O3QgaGF2ZSBhbnlcbiAyMjY6XHRcdCAgcHJlc2VudCBTUFRFcy5cbiAyMjc6XHRcbiAyMjg6XHRcdCAgSWYgaW4gZG91YnQsIHNheSBcJiMzNDtOXCYjMzQ7LlxuIDIyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDA5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyBzcGVjaWZpYyBjb2RlIHNuaXBwZXQ6CgoqKkludmVzdGlnYXRpbmcgS1ZNIENvbXBpbGF0aW9uIG9uIHg4NioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgS1ZNIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBYZW4uICBXZSBhbHJlYWR5IHVuZGVyc3RhbmQgc29tZSBvZiB0aGUgYmFzaWNzLCBidXQgaXQmIzM5O3MgdGltZSB0byBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHhlbi5vYCBhbmQgYHBmbmNhY2hlLm9gIGFyZSBhY3R1YWxseSBjb21waWxlZCB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUmIzM5O3MgS1ZNIGNvbnRleHQuICBLbm93aW5nIHRoZSBleGFjdCBidWlsZCBwcm9jZXNzIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gdGhlaXIgZGVwZW5kZW5jaWVzLCBhbnkgc3BlY2lhbCBjb21waWxlciBmbGFncywgYW5kIGhvdyB0aGV5IHVsdGltYXRlbHkgaW50ZWdyYXRlLiAgVGhlcmVmb3JlLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBvcGVuIGFuZCBjYXJlZnVsbHkgYW5hbHl6ZSB0aGUgYGFyY2gveDg2L2t2bS9NYWtlZmlsZWAuICBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb21waWxhdGlvbiBydWxlcyBmb3IgdGhlc2Ugb2JqZWN0cyB3aWxsIGJlIGRlZmluZWQsIGFuZCBpdCYjMzk7cyB0aGUga2V5IHRvIHRydWx5IHVuZGVyc3RhbmRpbmcgdGhlaXIgYnVpbGQgcHJvY2Vzcy4gVGhpcyBzaG91bGQgcHJvdmlkZSB0aGUgbG93IGxldmVsIGluZm9ybWF0aW9uIEkgbmVlZCB0byBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZW4ub3xwZm5jYWNoZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9NYWtlZmlsZT0xMz1rdm0tJChDT05GSUdfS1ZNX0hZUEVSVikgJiM0Mzs9IGh5cGVydi5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MTQ6a3ZtLSQoQ09ORklHX0tWTV9YRU4pXHQmIzQzOz0geGVuLm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xNS1rdm0tJChDT05GSUdfS1ZNX1NNTSlcdCYjNDM7PSBzbW0ub1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0yNC0jaW5jbHVkZSBcdTAwM2N4ZW4vaW50ZXJmYWNlL3NjaGVkLmhcdTAwM2VcbmFyY2gveDg2L2t2bS94ZW4uYzoyNTojaW5jbHVkZSBcdTAwM2N4ZW4veGVuLW9wcy5oXHUwMDNlXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDY3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIGBwZm5jYWNoZS5jYCBhbmQgYGt2bV9tYWluLmNgIHdpdGhpbiB0aGUgS1ZNIHZpcnR1YWxpemF0aW9uIG1vZHVsZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBNYWtlZmlsZXMgYW5kIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBhdCBgdmlydC9rdm0vTWFrZWZpbGVgIGFuZCBgdmlydC9rdm0vS2NvbmZpZ2AuIFRob3NlIGFyZSB0eXBpY2FsbHkgd2hlcmUgdGhlIGJ1aWxkIHJ1bGVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVzaWRlIGZvciBLVk0tc3BlY2lmaWMgc291cmNlIGZpbGVzLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gZGVwZW5kZW5jaWVzLCBidWlsZCBmbGFncywgYW5kIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpbnZvbHZlZCBpbiBnZXR0aW5nIHRob3NlIHR3byBmaWxlcyBjb21waWxlZCBhbmQgbGlua2VkLiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdHJhY2UgdGhlIGJ1aWxkIHByb2Nlc3MsIHNvIGxldCBtZSBkaXZlIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZm5jYWNoZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vTWFrZWZpbGUua3ZtPTEzPWt2bS0kKENPTkZJR19IQVZFX0tWTV9ESVJUWV9SSU5HKSAmIzQzOz0gJChLVk0pL2RpcnR5X3Jpbmcub1xudmlydC9rdm0vTWFrZWZpbGUua3ZtOjE0Omt2bS0kKENPTkZJR19IQVZFX0tWTV9QRk5DQUNIRSkgJiM0Mzs9ICQoS1ZNKS9wZm5jYWNoZS5vXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm0tMTUta3ZtLSQoQ09ORklHX0tWTV9HVUVTVF9NRU1GRCkgJiM0Mzs9ICQoS1ZNKS9ndWVzdF9tZW1mZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODE4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNzA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0tWGVuIEludGVncmF0aW9uIENvbmZpZ3VyYXRpb24gYW5kIENvZGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBLVk1gLCBhbmQgcG90ZW50aWFsbHkgYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgLCBhbG9uZyB3aXRoIGBLVk1fWDg2YC4gIENydWNpYWxseSwgdGhlcmUmIzM5O3MgYEtWTV9YRU5gLCB3aGljaCBkZXBlbmRzIG9uIGBLVk1fWDg2YC4gIEkgc2VlIHRoYXQgYEtWTV9YODZgIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgaWYgYW55IG9mIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIG9yIGp1c3QgYEtWTWAgYXJlIGRlZmluZWQuIFNwZWNpZmljYWxseSwgYGNvbmZpZyBLVk1fWEVOYCBpcyBhIGJvb2wgb3B0aW9uLCBhbmQgaXQmIzM5O3MgdW5kZXIgYGlmIFZJUlRVQUxJWkFUSU9OYC4gU28gSSBuZWVkIGJvdGggYEtWTWAgYW5kIGBLVk1fWEVOYCAoYXMgd2VsbCBhcyBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGApLgoKTm93LCBvbnRvIHRoZSBjb2RlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgdXNlZC4gSSBzZWUgYSBwYXRjaCBtb2RpZnlpbmcgc3ltYm9scyBhY3Jvc3MgYSBmZXcgZmlsZXMuIExldCYjMzk7cyBsb29rIGF0IGBhcmNoL3g4Ni9rdm0veGVuLmNgLiBUaGVyZSBhcmUgcXVpdGUgYSBmZXcgY2hhbmdlcyBoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9uIG5hbWVzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gSSBzZWUgYSBtaXggb2Ygc3RhdGljIGFuZCBub24tc3RhdGljIGZ1bmN0aW9ucyBiZWluZyBhbHRlcmVkLgoKSXQgbG9va3MgbGlrZSB0aGlzIGFmZmVjdHMgYSByYW5nZSBvZiBYZW4tc3BlY2lmaWMgZnVuY3Rpb25hbGl0aWVzOiBzaGFyZWQgaW5mb3JtYXRpb24gaW5pdGlhbGl6YXRpb24sIHVwZGF0aW5nIGd1ZXN0IHJ1bnN0YXRlLCBpbmplY3RpbmcgZXZlbnRzLCBjaGVja2luZyBmb3IgaW50ZXJydXB0cywgc2V0dGluZyBWQ1BVIGF0dHJpYnV0ZXMsIGNvbXBsZXRpbmcgaHlwZXJjYWxscywgc2NoZWR1bGluZyBvcGVyYXRpb25zLCBoYW5kbGluZyBldmVudCBjaGFubmVscywgYW5kIFZNIGluaXRpYWxpemF0aW9uL2Rlc3RydWN0aW9uLiBUaGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSB2YXJpb3VzIGZ1bmN0aW9uYWxpdGllcyBiZWluZyBjaGFuZ2VkLiBUaGUgc3RhdGljIGZ1bmN0aW9ucyB3aWxsIGJlIHVzZWZ1bCB0byB1bmRlcnN0YW5kIGhvdyBhbmQgd2hlcmUgdGhlIGZ1bmN0aW9ucyBhcmUgdXNlZC4KClRoZW4gdGhlcmUmIzM5O3MgYSBzbWFsbGVyIGNoYW5nZSBpbiBgdmlydC9rdm0va3ZtX21haW4uY2Agd2hlcmUgYSBzdGF0aWMgZnVuY3Rpb24gcmVsYXRlZCB0byBNTVUgaW52YWxpZGF0aW9uIGlzIGJlaW5nIG1vZGlmaWVkLiBGaW5hbGx5LCB0aGVyZSBhcmUgYWxzbyBzb21lIGNoYW5nZXMgaW4gYHZpcnQva3ZtL3BmbmNhY2hlLmNgLiBTcGVjaWZpY2FsbHksIGBodmFfdG9fcGZuX3JldHJ5YCBpcyBzdGF0aWMsIHdoaWNoIGlzIGNhbGxlZCBpbiBga3ZtX2dwY19yZWZyZXNoYCBhbmQgYGt2bV9ncGNfYWN0aXZhdGVgLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyBpbiBgcGZuY2FjaGUuY2AuIFRoaXMgY291bGQgYmUgaW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBjYXVzaW5nIHRoZSByZXRyeSBjb25kaXRpb24gYW5kIHdoeSBpdCYjMzk7cyBuZWNlc3NhcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQga3ZtX2dwY3xedm9pZCBrdm1fZ3BjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vcGZuY2FjaGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9wZm5jYWNoZS5jPTI1Nj1zdGF0aWMgaW50IF9fa3ZtX2dwY19yZWZyZXNoKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhKVxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzY1LVxudmlydC9rdm0vcGZuY2FjaGUuYzozNjY6aW50IGt2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCB1bnNpZ25lZCBsb25nIGxlbilcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzY3LXtcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM4NC1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6Mzg1OnZvaWQga3ZtX2dwY19pbml0KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHN0cnVjdCBrdm0gKmt2bSlcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzg2LXtcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTM5Nz1zdGF0aWMgaW50IF9fa3ZtX2dwY19hY3RpdmF0ZShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSxcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQyNi1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDI3OmludCBrdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBsZW4pXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQyOC17XG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYy00MzgtXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjQzOTppbnQga3ZtX2dwY19hY3RpdmF0ZV9odmEoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgdW5zaWduZWQgbG9uZyB1aHZhLCB1bnNpZ25lZCBsb25nIGxlbilcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDQwLXtcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ0Ni1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDQ3OnZvaWQga3ZtX2dwY19kZWFjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ0OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTk4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgSW50ZXJhY3Rpb25zIEJldHdlZW4gS1ZNIGFuZCBYZW4gaW4gdGhlIHg4NiBBcmNoaXRlY3R1cmUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IEtWTSBpbnRlcmFjdHMgd2l0aCBYZW4sIHNwZWNpZmljYWxseSBpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBhcmNoL3g4Ni9rdm0veGVuLmNgIGFuZCBgdmlydC9rdm0vcGZuY2FjaGUuY2AuIFNlZW1zIGxpa2UgdGhlIGZpcnN0IGZpbGUgaXMgdGhlIG1vcmUgbGlrZWx5IGNhbmRpZGF0ZSBnaXZlbiB0aGUgbmFtaW5nLgoKSW4gYGFyY2gveDg2L2t2bS94ZW4uY2AsIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHN0YW5kIG91dCBhcyBwb3RlbnRpYWxseSByZWxldmFudCB0byB0aGUgaW50ZWdyYXRpb246CgoqICAgYGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzYDogVGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIGV2ZW50IGluamVjdGlvbiBmcm9tIHRoZSBYZW4gaHlwZXJ2aXNvciBpbnRvIHRoZSBLVk0gZ3Vlc3QuCiogICBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgOiBUaGlzIHN1Z2dlc3RzIGEgbWVjaGFuaXNtIGZvciBxdWVyeWluZyBpZiB0aGVyZSBhcmUgcGVuZGluZyBpbnRlcnJ1cHRzIHJlbGF0ZWQgdG8gWGVuLgoqICAgYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmA6IFNvdW5kcyBsaWtlIHNldHRpbmcgdkNQVSBhdHRyaWJ1dGVzIHRocm91Z2ggWGVuLgoqICAgYGt2bV94ZW5faHlwZXJjYWxsYDogVGhpcyBsaWtlbHkgZGVhbHMgd2l0aCBYZW4gaHlwZXJjYWxscywgYSBmdW5kYW1lbnRhbCBpbnRlcmZhY2UgZm9yIGNvbW11bmljYXRpb24uCiogICBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgOiBUaGlzIGxvb2tzIGxpa2UgYW4gb3B0aW1pemF0aW9uIGZvciBzZXR0aW5nIGV2ZW50IGNoYW5uZWxzLgoqICAgYGt2bV94ZW5fc2V0dXBfZXZ0Y2huYDogVGhpcyBpcyBwcm9iYWJseSB0aGUgc2V0dXAgcm91dGluZSBmb3IgdGhlc2UgY2hhbm5lbHMuCiogICBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgOiBEZWZpbml0ZWx5IHNvdW5kcyByZWxhdGVkIHRvIHNlbmRpbmcgZXZlbnRzIHRocm91Z2ggdGhlIEhWTSBldmVudCBjaGFubmVsLgoqICAgYGt2bV94ZW5faHZtX3NldF9hdHRyYDogVGhpcyBpcyBwcm9iYWJseSBzZXR0aW5nIEhWTSBhdHRyaWJ1dGVzIHRocm91Z2ggWGVuLiBJdCBhbHNvIGNhbGxzIGBrdm1feGVuX3NldGF0dHJfZXZ0Y2huYCwgc28gSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgZXZlbnQgY2hhbm5lbCBhdHRyaWJ1dGVzIGFyZSBiZWluZyBzZXQuCgpJJiMzOTtsbCBrZWVwIGEgY2xvc2UgZXllIG9uIHRoZXNlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgd29yayB0b2dldGhlciwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIGlzc3VlcyBvciBpbmVmZmljaWVuY2llcyBpbiB0aGUgaW50ZXJmYWNlIGJldHdlZW4gS1ZNIGFuZCBYZW4uIEkgd2lsbCBuZWVkIHRvIGxvb2sgaW50byBgcGZuY2FjaGUuY2AgYXMgd2VsbCB0byBzZWUgaG93IGl0IG1pZ2h0IGJlIHVzZWQgdG8gb3B0aW1pemUgdGhlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV94ZW5fc2V0YXR0cl9ldnRjaG4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veGVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3hlbi5jPTMzPXN0YXRpYyBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huKHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSk7XG5hcmNoL3g4Ni9rdm0veGVuLmM6MzQ6c3RhdGljIGludCBrdm1feGVuX3NldGF0dHJfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpO1xuYXJjaC94ODYva3ZtL3hlbi5jLTM1LXN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfZXZ0Y2huX3NlbmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcGFyYW0sIHU2NCAqcik7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTc3NT1pbnQga3ZtX3hlbl9odm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSlcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtODUxLVx0Y2FzZSBLVk1fWEVOX0FUVFJfVFlQRV9FVlRDSE46XG5hcmNoL3g4Ni9rdm0veGVuLmM6ODUyOlx0XHRyID0ga3ZtX3hlbl9zZXRhdHRyX2V2dGNobihrdm0sIGRhdGEpO1xuYXJjaC94ODYva3ZtL3hlbi5jLTg1My1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTIyNzI9c3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0yMzEzLVxuYXJjaC94ODYva3ZtL3hlbi5jOjIzMTQ6c3RhdGljIGludCBrdm1feGVuX3NldGF0dHJfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjMxNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzA5CgkJCQkJCQlvdXRwdXQ6IDMwNgoJCQkJCQkJdGhvdWdodHM6IDE1NDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgS1ZNLVhlbiBDaGFuZ2VzIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgYGt2bV94ZW5faHZtX3NldF9hdHRyYCBpcyBhbiBleHBvcnRlZCBmdW5jdGlvbiBjYWxsZWQgdmlhIHRoZSBgS1ZNX1hFTl9IVk1fU0VUX0FUVFJgIGlvY3RsLiBTaW1pbGFybHksIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGhhbmRsZXMgdGhlIGBLVk1fWEVOX1ZDUFVfU0VUX0FUVFJgIGlvY3RsLCBhbmQgYGt2bV94ZW5faHlwZXJjYWxsYCBkZWFscyB3aXRoIGd1ZXN0IFhlbiBoeXBlcmNhbGxzLiBXZSBhbHNvIGhhdmUgYGt2bV9ncGNfcmVmcmVzaGAsIGBrdm1fZ3BjX2FjdGl2YXRlYCwgYW5kIGBrdm1fZ3BjX2FjdGl2YXRlX2h2YWAgaW4gYHBmbmNhY2hlLmNgIHRoYXQgYXJlIGltcG9ydGFudC4KCkkmIzM5O2xsIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlciBsb29rIGF0IGtleSBmdW5jdGlvbnMgbGlrZSBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgLCBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBga3ZtX3hlbl9zZXR1cF9ldnRjaG5gLCBga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNgLCBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgLCBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCwgYW5kIGBrdm1feGVuX2h5cGVyY2FsbGAuIEkmIzM5O2xsIGFsc28gZ2xhbmNlIG92ZXIgdGhlIG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1heSBiZSBtb2RpZmllZC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgbW9kaWZpY2F0aW9ucy4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGRpZmYuIEZpcnN0LCBpbiBgYXJjaC94ODYva3ZtL3hlbi5jYCwgdGhlcmUmIzM5O3MgYSBsb3Qgb2Ygd29yayByZWxhdGVkIHRvIHRoZSBzaGFyZWQgaW5mbyBzdHJ1Y3R1cmUgYW5kIGl0cyA2NC1iaXQgc3RhdHVzLiAgQ3J1Y2lhbGx5LCB0aGVyZSBhcmUgY2hhbmdlcyB0byBob3cgaW50ZXJydXB0cyBhcmUgaW5qZWN0ZWQsIGluY2x1ZGluZyBhdG9taWMgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIHJlZCBmbGFnLiBJIHNlZSB0aGUgdXNlIG9mIGF0b21pYyBvcGVyYXRpb25zIChgYXRvbWljNjRfb3JgLCBgYXRvbWljX29yYCwgYGF0b21pYzY0X2FuZG5vdGAsIGBhdG9taWNfYW5kbm90YCkgaW5zdGVhZCBvZiBpbmxpbmUgYXNzZW1ibHkuIFRoaXMgc3VnZ2VzdHMgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyByZWxhdGVkIHRvIGludGVycnVwdCBpbmplY3Rpb24gdGhhdCAqY291bGQqIGJlIGV4cGxvaXRlZC4gIFRoZXJlJiMzOTtzIGFsc28gYWxpZ25tZW50IGNoZWNrcyBpbiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYC4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIEdQQSBhbmQgSFZBIGFsaWdubWVudCwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGZ1enppbmcuIFRoZSByZW5hbWluZyBvZiBgbG9uZ21vZGVgIHRvIGBpc182NGJpdGAgaXMgbGVzcyBjb25jZXJuaW5nLiAgVGhlIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAgY2hhbmdlLCByZXBsYWNpbmcgdGhlIGJpdCBvcGVyYXRpb24gd2l0aCBgYnRzbGAsIHRvIGF2b2lkIHRoZSBzcGxpdC1sb2NrICNBQyBpcyBub3Rld29ydGh5OyBwb3RlbnRpYWwgZm9yIHVuYWxpZ25lZCBhY2Nlc3NlcyB0byBjYXVzZSBwcm9ibGVtcy4gVGhlIHNoaWZ0IGZyb20gYGlkcmAgdG8gYHhhcnJheWAgZm9yIGBldnRjaG5fcG9ydHNgIGFsc28gd2FycmFudHMgYSBjbG9zZXIgbG9vayBhcyBpdCB0b3VjaGVzIGNyaXRpY2FsIGV2ZW50IGNoYW5uZWwgbWFuYWdlbWVudC4KCkluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCwgSSBub3RpY2UgY2hhbmdlcyByZWxhdGVkIHRvIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYCwgc3BlY2lmaWNhbGx5IHRoZSBhZGRpdGlvbiBvZiBgZ3BjX2ludmFsaWRhdGVfc2VxYCBhbmQgYHNtcF93bWIoKWAuIFRoaXMgaW5kaWNhdGVzIGEgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBwb2ludC4gSW4gYHZpcnQva3ZtL3BmbmNhY2hlLmNgLCB0aGUgdXNlIG9mIGBncGNfc2VxYCBhbmQgYGt2bS0mZ3Q7Z3BjX2ludmFsaWRhdGVfc2VxYCBpbiBgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlYCBhbmQgYGh2YV90b19wZm5fcmV0cnlgIGluZGljYXRlcyB0aGVyZSBoYXMgYmVlbiBhIGdsb2JhbCBwYWdlIGNhY2hlIGludmFsaWRhdGlvbiBzZXF1ZW5jZSBhZGRlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgdGhlc2Ugc2VxdWVuY2VzIGFyZSBtYWludGFpbmVkIGFjcm9zcyBDUFVzLgoKVGhlIGNvcmUgb2YgdGhlc2UgY2hhbmdlcyBpcyBpbiBLVk0mIzM5O3MgWGVuIGVtdWxhdGlvbiBhbmQgdGhlIHBmbmNhY2hlLCB3aGljaCBhcmUgKnByaW1lKiB0YXJnZXRzIGZvciBmdXp6aW5nLiBUaGlzIHRvdWNoZXMgY29uY3VycmVuY3ksIHJhY2UgY29uZGl0aW9ucywgbWVtb3J5IGNvcnJ1cHRpb24sIGxvY2tpbmcsIGlvY3RsIGhhbmRsaW5nLCBhbmQgaHlwZXJjYWxscy4gRGVmaW5pdGVseSwgd29ydGh3aGlsZS4KClRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKGBLVk1gLCBgS1ZNX0lOVEVMYC9gS1ZNX0FNRGAsIGBLVk1fWDg2YCwgYEtWTV9YRU5gKSBhcmUgYWxsIHJlbGV2YW50IGFuZCBuZWVkIHRvIGJlIGVuYWJsZWQgZHVyaW5nIGZ1enppbmcuCgpNeSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgd2lsbCBiZTogYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAsIGBrdm1feGVuX2h2bV9zZXRfYXR0cmAsIGBrdm1feGVuX2h5cGVyY2FsbGAsIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AsIGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGAsIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIGBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZGAsIGBrdm1fZ3BjX3JlZnJlc2hgLCBga3ZtX2dwY19hY3RpdmF0ZWAsIGFuZCBga3ZtX2dwY19hY3RpdmF0ZV9odmFgLgoKSSYjMzk7bSBjb25maWRlbnQgd2UgaGF2ZSBhIHNvbGlkIHNldCBvZiB0YXJnZXRzIGZvciBmdXp6aW5nLCBhbmQgSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkIHdpdGggc2V0dGluZyB1cCB0aGUgZnV6emluZyBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fWDg2JiMzNDssCiAgICAmIzM0O0tWTV9YRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1feGVuX3ZjcHVfc2V0X2F0dHImIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9odm1fc2V0X2F0dHImIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9oeXBlcmNhbGwmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMmIzM0OywKICAgICYjMzQ7X19rdm1feGVuX2hhc19pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmQmIzM0OywKICAgICYjMzQ7a3ZtX2dwY19yZWZyZXNoJiMzNDssCiAgICAmIzM0O2t2bV9ncGNfYWN0aXZhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBhbmQgY29uY3VycmVuY3ktY3JpdGljYWwgY2hhbmdlcyB0byBLVk0mIzM5O3MgWGVuIGVtdWxhdGlvbiBhbmQgZ2ZuX3RvX3Bmbl9jYWNoZSAoR1BDKSBzdWJzeXN0ZW0uIFRoZXNlIGluY2x1ZGUgbWlncmF0aW5nIFhlbiBldmVudCBjaGFubmVsIHN0b3JhZ2UgZnJvbSBJRFIgdG8gWEFycmF5LCBlbmZvcmNpbmcgYWxpZ25tZW50IGNoZWNrcyBmb3IgdkNQVSBpbmZvIEdQQS9IVkEsIHVzaW5nIGV4cGxpY2l0IDMyLWJpdCBhdG9taWMgYml0b3BzIHRvIHByZXZlbnQgc3BsaXQtbG9jayBBQyBleGNlcHRpb25zIG9uIHVuYWxpZ25lZCBzdHJ1Y3R1cmVzLCBpbnRyb2R1Y2luZyBTUkNVIGxvY2tpbmcgaW4gX19rdm1feGVuX2hhc19pbnRlcnJ1cHQsIGFuZCBzZXBhcmF0aW5nIEdQQyBpbnZhbGlkYXRpb24gc2VxdWVuY2luZyBmcm9tIGdlbmVyYWwgTU1VIGludmFsaWRhdGlvbiBzZXF1ZW5jaW5nLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgdmlydHVhbGl6YXRpb24gaW9jdGxzLCBoeXBlcmNhbGxzLCBhbmQgZXZlbnQgY2hhbm5lbCBkZWxpdmVyeSBtZWNoYW5pc21zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7S1ZNX1g4NiYjMzQ7LAogICAgJiMzNDtLVk1fWEVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3hlbl92Y3B1X3NldF9hdHRyJiMzNDssCiAgICAmIzM0O2t2bV94ZW5faHZtX3NldF9hdHRyJiMzNDssCiAgICAmIzM0O2t2bV94ZW5faHlwZXJjYWxsJiMzNDssCiAgICAmIzM0O2t2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzJiMzNDssCiAgICAmIzM0O19fa3ZtX3hlbl9oYXNfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O2t2bV94ZW5fc2V0X2V2dGNobl9mYXN0JiMzNDssCiAgICAmIzM0O2t2bV94ZW5faHZtX2V2dGNobl9zZW5kJiMzNDssCiAgICAmIzM0O2t2bV9ncGNfcmVmcmVzaCYjMzQ7LAogICAgJiMzNDtrdm1fZ3BjX2FjdGl2YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgYW5kIGNvbmN1cnJlbmN5LWNyaXRpY2FsIGNoYW5nZXMgdG8gS1ZNJiMzOTtzIFhlbiBlbXVsYXRpb24gYW5kIGdmbl90b19wZm5fY2FjaGUgKEdQQykgc3Vic3lzdGVtLiBUaGVzZSBpbmNsdWRlIG1pZ3JhdGluZyBYZW4gZXZlbnQgY2hhbm5lbCBzdG9yYWdlIGZyb20gSURSIHRvIFhBcnJheSwgZW5mb3JjaW5nIGFsaWdubWVudCBjaGVja3MgZm9yIHZDUFUgaW5mbyBHUEEvSFZBLCB1c2luZyBleHBsaWNpdCAzMi1iaXQgYXRvbWljIGJpdG9wcyB0byBwcmV2ZW50IHNwbGl0LWxvY2sgQUMgZXhjZXB0aW9ucyBvbiB1bmFsaWduZWQgc3RydWN0dXJlcywgaW50cm9kdWNpbmcgU1JDVSBsb2NraW5nIGluIF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0LCBhbmQgc2VwYXJhdGluZyBHUEMgaW52YWxpZGF0aW9uIHNlcXVlbmNpbmcgZnJvbSBnZW5lcmFsIE1NVSBpbnZhbGlkYXRpb24gc2VxdWVuY2luZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIHZpcnR1YWxpemF0aW9uIGlvY3RscywgaHlwZXJjYWxscywgYW5kIGV2ZW50IGNoYW5uZWwgZGVsaXZlcnkgbWVjaGFuaXNtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSYjMzk7cyBYZW4gZW11bGF0aW9uIGFuZCBHRk4tdG8tUEZOIGNhY2hlIGludmFsaWRhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdDpcbjEuIFJlcGxhY2VzIHRoZSBJRFIgZGF0YSBzdHJ1Y3R1cmUgd2l0aCBYQXJyYXkgZm9yIGV2ZW50IGNoYW5uZWwgcG9ydCB0cmFja2luZyAoYGV2dGNobl9wb3J0c2ApLlxuMi4gSW50cm9kdWNlcyBhIGRlZGljYXRlZCBzZXF1ZW5jZSBjb3VudGVyIChgZ3BjX2ludmFsaWRhdGVfc2VxYCkgaW4gYHBmbmNhY2hlLmNgIGFuZCBga3ZtX21haW4uY2AgdG8gcHJvcGVybHkgdHJhY2sgR1BDIGludmFsaWRhdGlvbiBldmVudHMuXG4zLiBGaXhlcyBwb3RlbnRpYWwgc3BsaXQtbG9jayBgI0FDYCBleGNlcHRpb25zIGJ5IGNoZWNraW5nIEdQQS9IVkEgMzItYml0IGFsaWdubWVudCBpbiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCBhbmQgdXNpbmcgMzItYml0IGF0b21pYyBiaXRvcHMgZm9yIGB2aV9wZW5kaW5nX3NlbGAuXG40LiBGaXhlcyBTUkNVIGxvY2tpbmcgaW4gYF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0YCBhbmQgYXRvbWljIHJlYWRzL3dyaXRlcyBmb3IgYHBvbGxfZXZ0Y2huYC5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBvciBleHBvc2Uga2VybmVsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBNZW1vcnkgc2FmZXR5IGFuZCBjb25jdXJyZW5jeSBjb25jZXJucyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9ja2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMzZTAzZmYzYjhjMzc5ZDhiMzI4MjBjOTllYmMwMmQ4MDJlMzAzYjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDA0OjM4OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggNjgzYmI4YmY0M2E5NC4uM2FmNzM5NWMyNDMwYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0xNiw2ICYjNDM7MTYsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2lycV93b3JrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXJxLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3hhcnJheS5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7bGludXgva3ZtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva3ZtX3BhcmEuaCZndDsKQEAgLTExMTMsNyAmIzQzOzExMTQsNyBAQCBzdHJ1Y3Qga3ZtX3hlbiB7CiAJYm9vbCBydW5zdGF0ZV91cGRhdGVfZmxhZzsKIAl1OCB1cGNhbGxfdmVjdG9yOwogCXN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlIHNoaW5mb19jYWNoZTsKLQlzdHJ1Y3QgaWRyIGV2dGNobl9wb3J0czsKJiM0MzsJc3RydWN0IHhhcnJheSBldnRjaG5fcG9ydHM7CiAJdW5zaWduZWQgbG9uZyBwb2xsX21hc2tbQklUU19UT19MT05HUyhLVk1fTUFYX1ZDUFVTKV07CiAKIAlzdHJ1Y3Qga3ZtX3hlbl9odm1fY29uZmlnIGh2bV9jb25maWc7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmMgYi9hcmNoL3g4Ni9rdm0veGVuLmMKaW5kZXggOTk4Y2RjYjZhYTMwMy4uNzE4Mzk2MzQwZDNjMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ZW4uYwpAQCAtNzMsNyAmIzQzOzczLDcgQEAgc3RhdGljIGludCBrdm1feGVuX3NoYXJlZF9pbmZvX2luaXQoc3RydWN0IGt2bSAqa3ZtKQogCUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2hhcmVkX2luZm8sIHdjKSAhPSAweGMwMCk7CiAJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBzaGFyZWRfaW5mbywgd2Nfc2VjX2hpKSAhPSAweGMwYyk7CiAKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsga3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpIHsKJiM0MzsJaWYgKGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pKSB7CiAJCXN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLSZndDtraHZhOwogCiAJCXdjX3NlY19oaSA9ICZhbXA7c2hpbmZvLSZndDt3Y19zZWNfaGk7CkBAIC0zODksNyAmIzQzOzM4OSw3IEBAIHN0YXRpYyB2b2lkIGt2bV94ZW5fdXBkYXRlX3J1bnN0YXRlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdiwgYm9vbCBhdG9taWMpCiAJQlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvLCB0aW1lKSAhPQogCQkgICAgIHNpemVvZih2eC0mZ3Q7cnVuc3RhdGVfdGltZXMpKTsKIAotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyB2LSZndDtrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkgewomIzQzOwlpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtJmd0O2t2bSkpIHsKIAkJdXNlcl9sZW4gPSBzaXplb2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyk7CiAJCXRpbWVzX29mcyA9IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sCiAJCQkJICAgICBzdGF0ZV9lbnRyeV90aW1lKTsKQEAgLTY3NiwyOCAmIzQzOzY3NiwzMiBAQCB2b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdikKIAl9CiAKIAkvKiBOb3cgZ3BjLSZndDtraHZhIGlzIGEgdmFsaWQga2VybmVsIGFkZHJlc3MgZm9yIHRoZSB2Y3B1X2luZm8gKi8KLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsgdi0mZ3Q7a3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpIHsKJiM0MzsJaWYgKGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyh2LSZndDtrdm0pKSB7CiAJCXN0cnVjdCB2Y3B1X2luZm8gKnZpID0gZ3BjLSZndDtraHZhOwomIzQzOwkJdm9pZCAqdmlfcGVuZGluZ19zZWwgPSAmYW1wO3ZpLSZndDtldnRjaG5fcGVuZGluZ19zZWw7CiAKLQkJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICYjMzQ7b3JxICUwLCAlMVxuJiMzNDsKLQkJCSAgICAgJiMzNDtub3RxICUwXG4mIzM0OwotCQkJICAgICBMT0NLX1BSRUZJWCAmIzM0O2FuZHEgJTAsICUyXG4mIzM0OwotCQkJICAgICA6ICYjMzQ7PXImIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsKSwKLQkJCSAgICAgICAmIzM0OyYjNDM7bSYjMzQ7ICh2aS0mZ3Q7ZXZ0Y2huX3BlbmRpbmdfc2VsKSwKLQkJCSAgICAgICAmIzM0OyYjNDM7bSYjMzQ7ICh2LSZndDthcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpCi0JCQkgICAgIDogJiMzNDswJiMzNDsgKGV2dGNobl9wZW5kaW5nX3NlbCkpOwomIzQzOwkJaWYgKElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpdmlfcGVuZGluZ19zZWwsIHNpemVvZih1NjQpKSkgewomIzQzOwkJCWF0b21pYzY0X29yKGV2dGNobl9wZW5kaW5nX3NlbCwgdmlfcGVuZGluZ19zZWwpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlhdG9taWNfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCB2aV9wZW5kaW5nX3NlbCk7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBUaGUgY2FzdCBrZWVwcyB0aGUgc2hpZnQgd2VsbC1kZWZpbmVkIG9uIDMyLWJpdCwKJiM0MzsJCQkgKiB3aGVyZSBldnRjaG5fcGVuZGluZ19zZWwgaXMgMzIgYml0cyB3aWRlIGFuZCB0aGlzCiYjNDM7CQkJICogYnJhbmNoIGlzIHVucmVhY2hhYmxlIGFueXdheSAodGhpcyBpcyBpbnNpZGUKJiM0MzsJCQkgKiBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oKSwgd2hpY2ggaXMgZ2F0ZWQgb24KJiM0MzsJCQkgKiBJU19FTkFCTEVEKENPTkZJR182NEJJVCkpLgomIzQzOwkJCSAqLwomIzQzOwkJCWF0b21pY19vcigodTY0KWV2dGNobl9wZW5kaW5nX3NlbCAmZ3Q7Jmd0OyAzMiwKJiM0MzsJCQkJICB2aV9wZW5kaW5nX3NlbCAmIzQzOyA0KTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWF0b21pYzY0X2FuZG5vdChldnRjaG5fcGVuZGluZ19zZWwsICh2b2lkICopJmFtcDt2LSZndDthcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpOwogCQlXUklURV9PTkNFKHZpLSZndDtldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpOwogCX0gZWxzZSB7Ci0JCXUzMiBldnRjaG5fcGVuZGluZ19zZWwzMiA9IGV2dGNobl9wZW5kaW5nX3NlbDsKIAkJc3RydWN0IGNvbXBhdF92Y3B1X2luZm8gKnZpID0gZ3BjLSZndDtraHZhOwogCi0JCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAmIzM0O29ybCAlMCwgJTFcbiYjMzQ7Ci0JCQkgICAgICYjMzQ7bm90bCAlMFxuJiMzNDsKLQkJCSAgICAgTE9DS19QUkVGSVggJiMzNDthbmRsICUwLCAlMlxuJiMzNDsKLQkJCSAgICAgOiAmIzM0Oz1yJiMzNDsgKGV2dGNobl9wZW5kaW5nX3NlbDMyKSwKLQkJCSAgICAgICAmIzM0OyYjNDM7bSYjMzQ7ICh2aS0mZ3Q7ZXZ0Y2huX3BlbmRpbmdfc2VsKSwKLQkJCSAgICAgICAmIzM0OyYjNDM7bSYjMzQ7ICh2LSZndDthcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpCi0JCQkgICAgIDogJiMzNDswJiMzNDsgKGV2dGNobl9wZW5kaW5nX3NlbDMyKSk7CiYjNDM7CQlhdG9taWNfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKSZhbXA7dmktJmd0O2V2dGNobl9wZW5kaW5nX3NlbCk7CiYjNDM7CQlhdG9taWNfYW5kbm90KGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKikmYW1wO3YtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCk7CiAJCVdSSVRFX09OQ0UodmktJmd0O2V2dGNobl91cGNhbGxfcGVuZGluZywgMSk7CiAJfQogCkBAIC03MjgsNiAmIzQzOzczMiwxNiBAQCBpbnQgX19rdm1feGVuX2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2KQogCUJVSUxEX0JVR19PTihzaXplb2YocmMpICE9CiAJCSAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpKTsKIAomIzQzOwkvKgomIzQzOwkgKiBrdm1fZ3BjX2NoZWNrKCkgY2hlY2tzIHRoZSBtZW1zbG90IGdlbmVyYXRpb24sIHNvIGt2bS0mZ3Q7c3JjdSBtdXN0IGJlCiYjNDM7CSAqIGhlbGQuIE1vc3QgY2FsbGVycyBob2xkIGl0IGFscmVhZHksIGJ1dCB0aGlzIGlzIGFsc28gcmVhY2hlZCBmcm9tCiYjNDM7CSAqIGt2bV9lbXVsYXRlX2hhbHQoKSBvbiB0aGUgVk0tRXhpdCBwYXRoIGFuZCBmcm9tIGt2bV92Y3B1X2Jsb2NrKCksCiYjNDM7CSAqIHdoZXJlIHZjcHVfZW50ZXJfZ3Vlc3QoKSBoYXMgYWxyZWFkeSBkcm9wcGVkIHRoZSB2Q1BVJiMzOTtzIFNSQ1UgbG9jay4KJiM0MzsJICogVGFraW5nIFNSQ1UgZG9lcyBub3Qgc2xlZXAsIHNvIGl0IGlzIHNhZmUgZXZlbiBpbiB0aGUgYXRvbWljIGNhc2UKJiM0MzsJICogd2hpY2ggaXMgaGFuZGxlZCBiZWxvdy4KJiM0MzsJICovCiYjNDM7CWd1YXJkKHNyY3UpKCZhbXA7di0mZ3Q7a3ZtLSZndDtzcmN1KTsKJiM0MzsKIAlyZWFkX2xvY2tfaXJxc2F2ZSgmYW1wO2dwYy0mZ3Q7bG9jaywgZmxhZ3MpOwogCXdoaWxlICgha3ZtX2dwY19jaGVjayhncGMsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSkpIHsKIAkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2dwYy0mZ3Q7bG9jaywgZmxhZ3MpOwpAQCAtOTQxLDYgJiM0Mzs5NTUsMTAgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSkKIAkJCQlicmVhazsKIAkJCX0KIAomIzQzOwkJCXIgPSAtRU5YSU87CiYjNDM7CQkJaWYgKCFJU19BTElHTkVEKGRhdGEtJmd0O3UuZ3BhLCBzaXplb2YodTMyKSkpCiYjNDM7CQkJCWJyZWFrOwomIzQzOwogCQkJciA9IGt2bV9ncGNfYWN0aXZhdGUoJmFtcDt2Y3B1LSZndDthcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUsCiAJCQkJCSAgICAgZGF0YS0mZ3Q7dS5ncGEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7CiAJCX0gZWxzZSB7CkBAIC05NTAsNiAmIzQzOzk2OCwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKQogCQkJCWJyZWFrOwogCQkJfQogCiYjNDM7CQkJciA9IC1FTlhJTzsKJiM0MzsJCQlpZiAoIUlTX0FMSUdORUQoZGF0YS0mZ3Q7dS5odmEsIHNpemVvZih1MzIpKSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiAJCQlyID0ga3ZtX2dwY19hY3RpdmF0ZV9odmEoJmFtcDt2Y3B1LSZndDthcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUsCiAJCQkJCQkgZGF0YS0mZ3Q7dS5odmEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7CiAJCX0KQEAgLTk5Myw3ICYjNDM7MTAxNSw3IEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpCiAJCSAqIGFkZHJlc3MsIHRoYXQmIzM5O3MgYWN0dWFsbHkgT0suIGt2bV94ZW5fdXBkYXRlX3J1bnN0YXRlX2d1ZXN0KCkKIAkJICogd2lsbCBjb3BlLgogCQkgKi8KLQkJaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC54ZW4ubG9uZ19tb2RlKQomIzQzOwkJaWYgKGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyh2Y3B1LSZndDtrdm0pKQogCQkJc3ogPSBzaXplb2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyk7CiAJCWVsc2UKIAkJCXN6ID0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfdmNwdV9ydW5zdGF0ZV9pbmZvKTsKQEAgLTE0MzksMTYgJiM0MzsxNDYxLDIxIEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9oeXBlcmNhbGxfY29tcGxldGVfdXNlcnNwYWNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlyZXR1cm4ga3ZtX3hlbl9oeXBlcmNhbGxfc2V0X3Jlc3VsdCh2Y3B1LCBydW4tJmd0O3hlbi51LmhjYWxsLnJlc3VsdCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG1heF9ldnRjaG5fcG9ydChzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KGJvb2wgaGFzXzY0Yml0X3NoaW5mbykKIHsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsga3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpCiYjNDM7CWlmIChoYXNfNjRiaXRfc2hpbmZvKQogCQlyZXR1cm4gRVZUQ0hOXzJMX05SX0NIQU5ORUxTOwogCWVsc2UKIAkJcmV0dXJuIENPTVBBVF9FVlRDSE5fMkxfTlJfQ0hBTk5FTFM7CiB9CiAKLXN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cywKLQkJCSAgICAgICBldnRjaG5fcG9ydF90ICpwb3J0cykKJiM0MztzdGF0aWMgaW5saW5lIGludCBrdm1fbWF4X2V2dGNobl9wb3J0KHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt7CiYjNDM7CXJldHVybiBtYXhfZXZ0Y2huX3BvcnQoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGhhc182NGJpdF9zaGluZm8sCiYjNDM7CQkJICAgICAgIGludCBucl9wb3J0cywgZXZ0Y2huX3BvcnRfdCAqcG9ydHMpCiB7CiAJc3RydWN0IGt2bSAqa3ZtID0gdmNwdS0mZ3Q7a3ZtOwogCXN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSAmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uc2hpbmZvX2NhY2hlOwpAQCAtMTQ2Myw3ICYjNDM7MTQ5MCw3IEBAIHN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cywKIAkJZ290byBvdXRfcmN1OwogCiAJcmV0ID0gZmFsc2U7Ci0JaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7IGt2bS0mZ3Q7YXJjaC54ZW4ubG9uZ19tb2RlKSB7CiYjNDM7CWlmIChoYXNfNjRiaXRfc2hpbmZvKSB7CiAJCXN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLSZndDtraHZhOwogCQlwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKSZhbXA7c2hpbmZvLSZndDtldnRjaG5fcGVuZGluZzsKIAl9IGVsc2UgewpAQCAtMTQ4NSw5ICYjNDM7MTUxMiwxMCBAQCBzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbnJfcG9ydHMsCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLAomIzQzO3N0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpc182NGJpdCwKIAkJCQkgdTY0IHBhcmFtLCB1NjQgKnIpCiB7CiYjNDM7CWJvb2wgaGFzXzY0Yml0X3NoaW5mbyA9IGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyh2Y3B1LSZndDtrdm0pOwogCXN0cnVjdCBzY2hlZF9wb2xsIHNjaGVkX3BvbGw7CiAJZXZ0Y2huX3BvcnRfdCBwb3J0LCAqcG9ydHM7CiAJc3RydWN0IHg4Nl9leGNlcHRpb24gZTsKQEAgLTE0OTcsNyAmIzQzOzE1MjUsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsCiAJICAgICEodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnhlbi5odm1fY29uZmlnLmZsYWdzICZhbXA7IEtWTV9YRU5fSFZNX0NPTkZJR19FVlRDSE5fU0VORCkpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyAhbG9uZ21vZGUpIHsKJiM0MzsJaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7ICFpc182NGJpdCkgewogCQlzdHJ1Y3QgY29tcGF0X3NjaGVkX3BvbGwgc3AzMjsKIAogCQkvKiBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgY29tcGF0IHN0cnVjdCBkZWZpbml0aW9uIGlzIGNvcnJlY3QgKi8KQEAgLTE1NDYsMjAgJiM0MzsxNTc0LDIwIEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwKIAl9CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgc2NoZWRfcG9sbC5ucl9wb3J0czsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKHBvcnRzW2ldICZndDs9IG1heF9ldnRjaG5fcG9ydCh2Y3B1LSZndDtrdm0pKSB7CiYjNDM7CQlpZiAocG9ydHNbaV0gJmd0Oz0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKSB7CiAJCQkqciA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KIAogCWlmIChzY2hlZF9wb2xsLm5yX3BvcnRzID09IDEpCi0JCXZjcHUtJmd0O2FyY2gueGVuLnBvbGxfZXZ0Y2huID0gcG9ydDsKJiM0MzsJCVdSSVRFX09OQ0UodmNwdS0mZ3Q7YXJjaC54ZW4ucG9sbF9ldnRjaG4sIHBvcnQpOwogCWVsc2UKLQkJdmNwdS0mZ3Q7YXJjaC54ZW4ucG9sbF9ldnRjaG4gPSAtMTsKJiM0MzsJCVdSSVRFX09OQ0UodmNwdS0mZ3Q7YXJjaC54ZW4ucG9sbF9ldnRjaG4sIC0xKTsKIAogCXNldF9iaXQodmNwdS0mZ3Q7dmNwdV9pZHgsIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC54ZW4ucG9sbF9tYXNrKTsKIAotCWlmICghd2FpdF9wZW5kaW5nX2V2ZW50KHZjcHUsIHNjaGVkX3BvbGwubnJfcG9ydHMsIHBvcnRzKSkgewomIzQzOwlpZiAoIXdhaXRfcGVuZGluZ19ldmVudCh2Y3B1LCBoYXNfNjRiaXRfc2hpbmZvLCBzY2hlZF9wb2xsLm5yX3BvcnRzLCBwb3J0cykpIHsKIAkJa3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVEKTsKIAogCQlpZiAoc2NoZWRfcG9sbC50aW1lb3V0KQpAQCAtMTU3NCw3ICYjNDM7MTYwMiw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwKIAkJa3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfUlVOTkFCTEUpOwogCX0KIAotCXZjcHUtJmd0O2FyY2gueGVuLnBvbGxfZXZ0Y2huID0gMDsKJiM0MzsJV1JJVEVfT05DRSh2Y3B1LSZndDthcmNoLnhlbi5wb2xsX2V2dGNobiwgMCk7CiAJKnIgPSAwOwogb3V0OgogCS8qIFJlYWxseSwgdGhpcyBpcyBvbmx5IG5lZWRlZCBpbiBjYXNlIG9mIHRpbWVvdXQgKi8KQEAgLTE1OTQsMTIgJiM0MzsxNjIyLDEyIEBAIHN0YXRpYyB2b2lkIGNhbmNlbF9ldnRjaG5fcG9sbChzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKIAlrdm1fdmNwdV9raWNrKHZjcHUpOwogfQogCi1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwKJiM0MztzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpc182NGJpdCwKIAkJCQkgICBpbnQgY21kLCB1NjQgcGFyYW0sIHU2NCAqcikKIHsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU0NIRURPUF9wb2xsOgotCQlpZiAoa3ZtX3hlbl9zY2hlZG9wX3BvbGwodmNwdSwgbG9uZ21vZGUsIHBhcmFtLCByKSkKJiM0MzsJCWlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBpc182NGJpdCwgcGFyYW0sIHIpKQogCQkJcmV0dXJuIHRydWU7CiAJCWZhbGx0aHJvdWdoOwogCWNhc2UgU0NIRURPUF95aWVsZDoKQEAgLTE2MTgsNyAmIzQzOzE2NDYsNyBAQCBzdHJ1Y3QgY29tcGF0X3ZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIgewogICAgIHVpbnQzMl90IGZsYWdzOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwgaW50IGNtZCwKJiM0MztzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzXzY0Yml0LCBpbnQgY21kLAogCQkJCSAgaW50IHZjcHVfaWQsIHU2NCBwYXJhbSwgdTY0ICpyKQogewogCXN0cnVjdCB2Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyIG9uZXNob3Q7CkBAIC0xNjYyLDcgJiM0MzsxNjkwLDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwgaW50IGNtZCwKIAkJQlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3QgY29tcGF0X3ZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIsIGZsYWdzKSAhPQogCQkJICAgICBzaXplb2ZfZmllbGQoc3RydWN0IHZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIsIGZsYWdzKSk7CiAKLQkJaWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgcGFyYW0sICZhbXA7b25lc2hvdCwgbG9uZ21vZGUgPyBzaXplb2Yob25lc2hvdCkgOgomIzQzOwkJaWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgcGFyYW0sICZhbXA7b25lc2hvdCwgaXNfNjRiaXQgPyBzaXplb2Yob25lc2hvdCkgOgogCQkJCQlzaXplb2Yoc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyKSwgJmFtcDtlKSkgewogCQkJKnIgPSAtRUZBVUxUOwogCQkJcmV0dXJuIHRydWU7CkBAIC0xNjk0LDcgJiM0MzsxNzIyLDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zZXRfdGltZXJfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50NjRfdCB0aW1lb3V0LAogCiBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCWJvb2wgbG9uZ21vZGU7CiYjNDM7CWJvb2wgaXNfNjRiaXQ7CiAJdTY0IGlucHV0LCBwYXJhbXNbNl0sIHIgPSAtRU5PU1lTOwogCWJvb2wgaGFuZGxlZCA9IGZhbHNlOwogCXU4IGNwbDsKQEAgLTE3MDQsOCAmIzQzOzE3MzIsOCBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCSAgICBrdm1faHZfaHlwZXJjYWxsX2VuYWJsZWQodmNwdSkpCiAJCXJldHVybiBrdm1faHZfaHlwZXJjYWxsKHZjcHUpOwogCi0JbG9uZ21vZGUgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpOwotCWlmICghbG9uZ21vZGUpIHsKJiM0MzsJaXNfNjRiaXQgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpOwomIzQzOwlpZiAoIWlzXzY0Yml0KSB7CiAJCWlucHV0ID0ga3ZtX2VheF9yZWFkKHZjcHUpOwogCQlwYXJhbXNbMF0gPSBrdm1fZWJ4X3JlYWQodmNwdSk7CiAJCXBhcmFtc1sxXSA9IGt2bV9lY3hfcmVhZCh2Y3B1KTsKQEAgLTE3NTEsMTcgJiM0MzsxNzc5LDE3IEBAIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCQloYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9ldnRjaG5fc2VuZCh2Y3B1LCBwYXJhbXNbMV0sICZhbXA7cik7CiAJCWJyZWFrOwogCWNhc2UgX19IWVBFUlZJU09SX3NjaGVkX29wOgotCQloYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLAomIzQzOwkJaGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfc2NoZWRfb3AodmNwdSwgaXNfNjRiaXQsIHBhcmFtc1swXSwKIAkJCQkJCSBwYXJhbXNbMV0sICZhbXA7cik7CiAJCWJyZWFrOwogCWNhc2UgX19IWVBFUlZJU09SX3ZjcHVfb3A6Ci0JCWhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3ZjcHVfb3AodmNwdSwgbG9uZ21vZGUsIHBhcmFtc1swXSwgcGFyYW1zWzFdLAomIzQzOwkJaGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBpc182NGJpdCwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sCiAJCQkJCQlwYXJhbXNbMl0sICZhbXA7cik7CiAJCWJyZWFrOwogCWNhc2UgX19IWVBFUlZJU09SX3NldF90aW1lcl9vcDogewogCQl1NjQgdGltZW91dCA9IHBhcmFtc1swXTsKIAkJLyogSW4gMzItYml0IG1vZGUsIHRoZSA2NC1iaXQgdGltZW91dCBpcyBpbiB0d28gMzItYml0IHBhcmFtcy4gKi8KLQkJaWYgKCFsb25nbW9kZSkKJiM0MzsJCWlmICghaXNfNjRiaXQpCiAJCQl0aW1lb3V0IHw9IHBhcmFtc1sxXSAmbHQ7Jmx0OyAzMjsKIAkJaGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHZjcHUsIHRpbWVvdXQsICZhbXA7cik7CiAJCWJyZWFrOwpAQCAtMTc3Niw3ICYjNDM7MTgwNCw3IEBAIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiBoYW5kbGVfaW5fdXNlcnNwYWNlOgogCXZjcHUtJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9YRU47CiAJdmNwdS0mZ3Q7cnVuLSZndDt4ZW4udHlwZSA9IEtWTV9FWElUX1hFTl9IQ0FMTDsKLQl2Y3B1LSZndDtydW4tJmd0O3hlbi51LmhjYWxsLmxvbmdtb2RlID0gbG9uZ21vZGU7CiYjNDM7CXZjcHUtJmd0O3J1bi0mZ3Q7eGVuLnUuaGNhbGwubG9uZ21vZGUgPSBpc182NGJpdDsKIAl2Y3B1LSZndDtydW4tJmd0O3hlbi51LmhjYWxsLmNwbCA9IGNwbDsKIAl2Y3B1LSZndDtydW4tJmd0O3hlbi51LmhjYWxsLmlucHV0ID0gaW5wdXQ7CiAJdmNwdS0mZ3Q7cnVuLSZndDt4ZW4udS5oY2FsbC5wYXJhbXNbMF0gPSBwYXJhbXNbMF07CkBAIC0xNzk0LDcgJiM0MzsxODIyLDcgQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogc3RhdGljIHZvaWQga3ZtX3hlbl9jaGVja19wb2xsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG9ydCkKIHsKLQlpbnQgcG9sbF9ldnRjaG4gPSB2Y3B1LSZndDthcmNoLnhlbi5wb2xsX2V2dGNobjsKJiM0MzsJaW50IHBvbGxfZXZ0Y2huID0gUkVBRF9PTkNFKHZjcHUtJmd0O2FyY2gueGVuLnBvbGxfZXZ0Y2huKTsKIAogCWlmICgocG9sbF9ldnRjaG4gPT0gcG9ydCB8fCBwb2xsX2V2dGNobiA9PSAtMSkgJmFtcDsmYW1wOwogCSAgICB0ZXN0X2FuZF9jbGVhcl9iaXQodmNwdS0mZ3Q7dmNwdV9pZHgsIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC54ZW4ucG9sbF9tYXNrKSkgewpAQCAtMTgxNiw4ICYjNDM7MTg0NCw5IEBAIHN0YXRpYyB2b2lkIGt2bV94ZW5fY2hlY2tfcG9sbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBvcnQpCiBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKQogewogCXN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSAmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uc2hpbmZvX2NhY2hlOwomIzQzOwlib29sIGhhc182NGJpdF9zaGluZm8gPSBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKTsKJiM0MzsJdW5zaWduZWQgbG9uZyAqcGVuZGluZ19iaXRzLCAqbWFza19iaXRzLCB2aV9wZW5kaW5nX3NlbF9vZnM7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwotCXVuc2lnbmVkIGxvbmcgKnBlbmRpbmdfYml0cywgKm1hc2tfYml0czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBwb3J0X3dvcmRfYml0OwogCWJvb2wga2lja192Y3B1ID0gZmFsc2U7CkBAIC0xODMzLDcgJiM0MzsxODYyLDcgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIAkJV1JJVEVfT05DRSh4ZS0mZ3Q7dmNwdV9pZHgsIHZjcHUtJmd0O3ZjcHVfaWR4KTsKIAl9CiAKLQlpZiAoeGUtJmd0O3BvcnQgJmd0Oz0gbWF4X2V2dGNobl9wb3J0KGt2bSkpCiYjNDM7CWlmICh4ZS0mZ3Q7cG9ydCAmZ3Q7PSBtYXhfZXZ0Y2huX3BvcnQoaGFzXzY0Yml0X3NoaW5mbykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmMgPSAtRVdPVUxEQkxPQ0s7CkBAIC0xODQ0LDE2ICYjNDM7MTg3MywyMyBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKQogCWlmICgha3ZtX2dwY19jaGVjayhncGMsIFBBR0VfU0laRSkpCiAJCWdvdG8gb3V0X3JjdTsKIAotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkgewomIzQzOwlpZiAoaGFzXzY0Yml0X3NoaW5mbykgewogCQlzdHJ1Y3Qgc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy0mZ3Q7a2h2YTsKIAkJcGVuZGluZ19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKikmYW1wO3NoaW5mby0mZ3Q7ZXZ0Y2huX3BlbmRpbmc7CiAJCW1hc2tfYml0cyA9ICh1bnNpZ25lZCBsb25nICopJmFtcDtzaGluZm8tJmd0O2V2dGNobl9tYXNrOwogCQlwb3J0X3dvcmRfYml0ID0geGUtJmd0O3BvcnQgLyA2NDsKJiM0MzsKJiM0MzsJCXZpX3BlbmRpbmdfc2VsX29mcyA9IG9mZnNldG9mKHN0cnVjdCB2Y3B1X2luZm8sIGV2dGNobl9wZW5kaW5nX3NlbCk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLSZndDtraHZhOwogCQlwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKSZhbXA7c2hpbmZvLSZndDtldnRjaG5fcGVuZGluZzsKIAkJbWFza19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKikmYW1wO3NoaW5mby0mZ3Q7ZXZ0Y2huX21hc2s7CiAJCXBvcnRfd29yZF9iaXQgPSB4ZS0mZ3Q7cG9ydCAvIDMyOwomIzQzOwomIzQzOwkJdmlfcGVuZGluZ19zZWxfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF92Y3B1X2luZm8sIGV2dGNobl9wZW5kaW5nX3NlbCk7CiYjNDM7CiYjNDM7CQkvKiB0ZXN0X2FuZF9zZXRfYml0KCkgbmVlZHMgNjQtYml0IGFsaWdubWVudCwgYnV0IHRoYXQmIzM5O3MgT0sgKi8KJiM0MzsJCUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3NoYXJlZF9pbmZvLCBldnRjaG5fcGVuZGluZykgJmFtcDsgNyk7CiAJfQogCiAJLyoKQEAgLTE4NjksNiAmIzQzOzE5MDUsOCBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKQogCQlyYyA9IC1FTk9UQ09OTjsgLyogTWFza2VkICovCiAJCWt2bV94ZW5fY2hlY2tfcG9sbGVyKHZjcHUsIHhlLSZndDtwb3J0KTsKIAl9IGVsc2UgewomIzQzOwkJYm9vbCBvbGQ7CiYjNDM7CiAJCXJjID0gMTsgLyogRGVsaXZlcmVkIHRvIHRoZSBiaXRtYXAgaW4gc2hhcmVkX2luZm8uICovCiAJCS8qIE5vdyBzd2l0Y2ggdG8gdGhlIHZDUFUmIzM5O3MgdmNwdV9pbmZvIHRvIHNldCB0aGUgaW5kZXggYW5kIHBlbmRpbmdfc2VsICovCiAJCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtncGMtJmd0O2xvY2ssIGZsYWdzKTsKQEAgLTE4ODUsMTkgJiM0MzsxOTIzLDI5IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pCiAJCQlnb3RvIG91dF9yY3U7CiAJCX0KIAotCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsga3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpIHsKLQkJCXN0cnVjdCB2Y3B1X2luZm8gKnZjcHVfaW5mbyA9IGdwYy0mZ3Q7a2h2YTsKLQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChwb3J0X3dvcmRfYml0LCAmYW1wO3ZjcHVfaW5mby0mZ3Q7ZXZ0Y2huX3BlbmRpbmdfc2VsKSkgewotCQkJCVdSSVRFX09OQ0UodmNwdV9pbmZvLSZndDtldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpOwotCQkJCWtpY2tfdmNwdSA9IHRydWU7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmNwdV9pbmZvID0gZ3BjLSZndDtraHZhOwotCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnRfd29yZF9iaXQsCi0JCQkJCSAgICAgICh1bnNpZ25lZCBsb25nICopJmFtcDt2Y3B1X2luZm8tJmd0O2V2dGNobl9wZW5kaW5nX3NlbCkpIHsKLQkJCQlXUklURV9PTkNFKHZjcHVfaW5mby0mZ3Q7ZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTsKLQkJCQlraWNrX3ZjcHUgPSB0cnVlOwotCQkJfQomIzQzOwkJLyoKJiM0MzsJCSAqIEV4cGxpY2l0bHkgdXNlIGEgMzItYml0IGJ0c2wgaW5zdGVhZCBvZiB0ZXN0X2FuZF9zZXRfYml0KCksCiYjNDM7CQkgKiB3aGljaCB3b3VsZCB1c2UgYnRzcSBvbiB4ODYtNjQuIFRoZSB2Y3B1X2luZm8gaXMgZ3Vlc3QtCiYjNDM7CQkgKiBjb250cm9sbGVkIGFuZCBvbmx5IHJlcXVpcmVkIHRvIGJlIDMyLWJpdCBhbGlnbmVkLCBzbyBhCiYjNDM7CQkgKiA2NC1iaXQgYWNjZXNzIGNvdWxkIGdlbmVyYXRlIGEgc3BsaXQtbG9jayAjQUMuCiYjNDM7CQkgKgomIzQzOwkJICogTm90ZSwgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgdGVzdF9hbmRfc2V0X2JpdCgpIG9uCiYjNDM7CQkgKiBwZW5kaW5nX2JpdHMgYWJvdmU6IHRoYXQgaXMgaW4gdGhlIHBlci1WTSBzaGFyZWRfaW5mbywgd2hpY2gKJiM0MzsJCSAqIGlzIHBhZ2UgYWxpZ25lZCwgc28gdGhlIGFjY2VzcyBpcyBndWFyYW50ZWVkIHRvIGJlIDY0LWJpdAomIzQzOwkJICogYWxpZ25lZC4KJiM0MzsJCSAqLwomIzQzOwkJb2xkID0gR0VOX0JJTkFSWV9STVdjYyhMT0NLX1BSRUZJWCAmIzM0O2J0c2wmIzM0OywKJiM0MzsJCQkJICAgICAgICoodTMyICopKGdwYy0mZ3Q7a2h2YSAmIzQzOyB2aV9wZW5kaW5nX3NlbF9vZnMpLAomIzQzOwkJCQkgICAgICAgYywgJiMzNDtJciYjMzQ7LCBwb3J0X3dvcmRfYml0KTsKJiM0MzsJCWlmICghb2xkKSB7CiYjNDM7CQkJc3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtJmd0O2todmE7CiYjNDM7CiYjNDM7CQkJLyogTm8gbmVlZCBmb3IgY29tcGF0IGhhbmRsaW5nICovCiYjNDM7CQkJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCB2Y3B1X2luZm8sIGV2dGNobl91cGNhbGxfcGVuZGluZykgIT0KJiM0MzsJCQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSk7CiYjNDM7CiYjNDM7CQkJV1JJVEVfT05DRSh2aS0mZ3Q7ZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTsKJiM0MzsJCQlraWNrX3ZjcHUgPSB0cnVlOwogCQl9CiAKIAkJLyogRm9yIHRoZSBwZXItdkNQVSBsYXBpYyB2ZWN0b3IsIGRlbGl2ZXIgaXQgYXMgTVNJLiAqLwpAQCAtMTk5NSw3ICYjNDM7MjA0Myw3IEBAIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sCiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwogCiAJLyoKLQkgKiBEb24mIzM5O3QgY2hlY2sgZm9yIHRoZSBwb3J0IGJlaW5nIHdpdGhpbiByYW5nZSBvZiBtYXhfZXZ0Y2huX3BvcnQoKS4KJiM0MzsJICogRG9uJiMzOTt0IGNoZWNrIGZvciB0aGUgcG9ydCBiZWluZyB3aXRoaW4gcmFuZ2Ugb2Yga3ZtX21heF9ldnRjaG5fcG9ydCgpLgogCSAqIFVzZXJzcGFjZSBjYW4gY29uZmlndXJlIHdoYXQgZXZlciB0YXJnZXRzIGl0IGxpa2VzOyBldmVudHMganVzdCB3b24mIzM5O3QKIAkgKiBiZSBkZWxpdmVyZWQgaWYvd2hpbGUgdGhlIHRhcmdldCBpcyBpbnZhbGlkLCBqdXN0IGxpa2UgdXNlcnNwYWNlIGNhbgogCSAqIGNvbmZpZ3VyZSBNU0lzIHdoaWNoIHRhcmdldCBub24tZXhpc3RlbnQgQVBJQ3MuCkBAIC0yMDA0LDggJiM0MzsyMDUyLDggQEAgaW50IGt2bV94ZW5fc2V0dXBfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwKIAkgKiBjYW4gYmUgcmVzdG9yZWQgKmluZGVwZW5kZW50bHkqIG9mIG90aGVyIHRoaW5ncyBsaWtlIGNyZWF0aW5nIHZDUFVzLAogCSAqIHdpdGhvdXQgaW1wb3NpbmcgYW4gb3JkZXJpbmcgZGVwZW5kZW5jeSBvbiB1c2Vyc3BhY2UuICBJbiB0aGlzCiAJICogcGFydGljdWxhciBjYXNlLCB0aGUgcHJvYmxlbWF0aWMgb3JkZXJpbmcgd291bGQgYmUgd2l0aCBzZXR0aW5nIHRoZQotCSAqIFhlbiAmIzM5O2xvbmcgbW9kZSYjMzk7IGZsYWcsIHdoaWNoIGNoYW5nZXMgbWF4X2V2dGNobl9wb3J0KCkgdG8gYWxsb3cgNDA5NgotCSAqIGluc3RlYWQgb2YgMTAyNCBldmVudCBjaGFubmVscy4KJiM0MzsJICogWGVuICYjMzk7bG9uZyBtb2RlJiMzOTsgZmxhZywgd2hpY2ggY2hhbmdlcyBrdm1fbWF4X2V2dGNobl9wb3J0KCkgdG8gYWxsb3cKJiM0MzsJICogNDA5NiBpbnN0ZWFkIG9mIDEwMjQgZXZlbnQgY2hhbm5lbHMuCiAJICovCiAKIAkvKiBXZSBvbmx5IHN1cHBvcnQgMiBsZXZlbCBldmVudCBjaGFubmVscyBmb3Igbm93ICovCkBAIC0yMDQyLDcgJiM0MzsyMDkwLDcgQEAgaW50IGt2bV94ZW5faHZtX2V2dGNobl9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pcnFfcm91dGluZ194ZW5fZXZ0Y2huICoKIAlzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gZTsKIAlpbnQgcmV0OwogCi0JaWYgKCF1eGUtJmd0O3BvcnQgfHwgdXhlLSZndDtwb3J0ICZndDs9IG1heF9ldnRjaG5fcG9ydChrdm0pKQomIzQzOwlpZiAoIXV4ZS0mZ3Q7cG9ydCB8fCB1eGUtJmd0O3BvcnQgJmd0Oz0ga3ZtX21heF9ldnRjaG5fcG9ydChrdm0pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIFdlIG9ubHkgc3VwcG9ydCAyIGxldmVsIGV2ZW50IGNoYW5uZWxzIGZvciBub3cgKi8KQEAgLTIwOTMsNyAmIzQzOzIxNDEsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLAogCiAJLyogUHJvdGVjdCB3cml0ZXMgdG8gZXZ0Y2huZmQgYXMgd2VsbCBhcyB0aGUgaWRyIGxvb2t1cC4gICovCiAJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4ueGVuX2xvY2spOwotCWV2dGNobmZkID0gaWRyX2ZpbmQoJmFtcDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCk7CiYjNDM7CWV2dGNobmZkID0geGFfbG9hZCgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBwb3J0KTsKIAogCXJldCA9IC1FTk9FTlQ7CiAJaWYgKCFldnRjaG5mZCkKQEAgLTIxNTIsNyAmIzQzOzIyMDAsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9hc3NpZ24oc3RydWN0IGt2bSAqa3ZtLAogCiAJY2FzZSBFVlRDSE5TVEFUX2ludGVyZG9tYWluOgogCQlpZiAoZGF0YS0mZ3Q7dS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQpIHsKLQkJCWlmIChkYXRhLSZndDt1LmV2dGNobi5kZWxpdmVyLnBvcnQucG9ydCAmZ3Q7PSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKJiM0MzsJCQlpZiAoZGF0YS0mZ3Q7dS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQgJmd0Oz0ga3ZtX21heF9ldnRjaG5fcG9ydChrdm0pKQogCQkJCWdvdG8gb3V0X25vZXZlbnRmZDsgLyogLUVJTlZBTCAqLwogCQl9IGVsc2UgewogCQkJZXZlbnRmZCA9IGV2ZW50ZmRfY3R4X2ZkZ2V0KGRhdGEtJmd0O3UuZXZ0Y2huLmRlbGl2ZXIuZXZlbnRmZC5mZCk7CkBAIC0yMTg3LDEzICYjNDM7MjIzNSwxMyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9hc3NpZ24oc3RydWN0IGt2bSAqa3ZtLAogCX0KIAogCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O2FyY2gueGVuLnhlbl9sb2NrKTsKLQlyZXQgPSBpZHJfYWxsb2MoJmFtcDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQsIHBvcnQsIHBvcnQgJiM0MzsgMSwKJiM0MzsJcmV0ID0geGFfaW5zZXJ0KCZhbXA7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMsIHBvcnQsIGV2dGNobmZkLAogCQkJR0ZQX0tFUk5FTCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLnhlbi54ZW5fbG9jayk7Ci0JaWYgKHJldCAmZ3Q7PSAwKQomIzQzOwlpZiAoIXJldCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocmV0ID09IC1FTk9TUEMpCiYjNDM7CWlmIChyZXQgPT0gLUVCVVNZKQogCQlyZXQgPSAtRUVYSVNUOwogb3V0OgogCWlmIChldmVudGZkKQpAQCAtMjIwOCw3ICYjNDM7MjI1Niw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2RlYXNzaWduKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHBvcnQpCiAJc3RydWN0IGV2dGNobmZkICpldnRjaG5mZDsKIAogCW11dGV4X2xvY2soJmFtcDtrdm0tJmd0O2FyY2gueGVuLnhlbl9sb2NrKTsKLQlldnRjaG5mZCA9IGlkcl9yZW1vdmUoJmFtcDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCk7CiYjNDM7CWV2dGNobmZkID0geGFfZXJhc2UoJmFtcDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLnhlbi54ZW5fbG9jayk7CiAKIAlpZiAoIWV2dGNobmZkKQpAQCAtMjIyNCw3ICYjNDM7MjI3Miw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2RlYXNzaWduKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHBvcnQpCiBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9yZXNldChzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IGV2dGNobmZkICpldnRjaG5mZCwgKiphbGxfZXZ0Y2huZmRzOwotCWludCBpOwomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiAJaW50IG4gPSAwOwogCiAJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4ueGVuX2xvY2spOwpAQCAtMjIzNCw3ICYjNDM7MjI4Miw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KHN0cnVjdCBrdm0gKmt2bSkKIAkgKiBjcml0aWNhbCBzZWN0aW9uLCBmaXJzdCBjb2xsZWN0IGFsbCB0aGUgZXZ0Y2huZmQgb2JqZWN0cwogCSAqIGluIGFuIGFycmF5IGFzIHRoZXkgYXJlIHJlbW92ZWQgZnJvbSBldnRjaG5fcG9ydHMuCiAJICovCi0JaWRyX2Zvcl9lYWNoX2VudHJ5KCZhbXA7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLCBpKQomIzQzOwl4YV9mb3JfZWFjaCgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBpLCBldnRjaG5mZCkKIAkJbiYjNDM7JiM0Mzs7CiAKIAlhbGxfZXZ0Y2huZmRzID0ga21hbGxvY19vYmpzKHN0cnVjdCBldnRjaG5mZCAqLCBuKTsKQEAgLTIyNDQsOSAmIzQzOzIyOTIsOSBAQCBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9yZXNldChzdHJ1Y3Qga3ZtICprdm0pCiAJfQogCiAJbiA9IDA7Ci0JaWRyX2Zvcl9lYWNoX2VudHJ5KCZhbXA7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLCBpKSB7CiYjNDM7CXhhX2Zvcl9lYWNoKCZhbXA7a3ZtLSZndDthcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGksIGV2dGNobmZkKSB7CiAJCWFsbF9ldnRjaG5mZHNbbiYjNDM7JiM0MztdID0gZXZ0Y2huZmQ7Ci0JCWlkcl9yZW1vdmUoJmFtcDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQtJmd0O3NlbmRfcG9ydCk7CiYjNDM7CQl4YV9lcmFzZSgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBldnRjaG5mZC0mZ3Q7c2VuZF9wb3J0KTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDthcmNoLnhlbi54ZW5fbG9jayk7CiAKQEAgLTIyNzAsNyAmIzQzOzIzMTgsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2V0YXR0cl9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YQogCWlmIChkYXRhLSZndDt1LmV2dGNobi5mbGFncyA9PSBLVk1fWEVOX0VWVENITl9SRVNFVCkKIAkJcmV0dXJuIGt2bV94ZW5fZXZlbnRmZF9yZXNldChrdm0pOwogCi0JaWYgKCFwb3J0IHx8IHBvcnQgJmd0Oz0gbWF4X2V2dGNobl9wb3J0KGt2bSkpCiYjNDM7CWlmICghcG9ydCB8fCBwb3J0ICZndDs9IGt2bV9tYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoZGF0YS0mZ3Q7dS5ldnRjaG4uZmxhZ3MgPT0gS1ZNX1hFTl9FVlRDSE5fREVBU1NJR04pCkBAIC0yMjk3LDEyICYjNDM7MjM0NSwxMCBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBhcmFtLCB1NjQgKnIpCiAJfQogCiAJLyoKLQkgKiBldnRjaG5mZCBpcyBwcm90ZWN0ZWQgYnkga3ZtLSZndDtzcmN1OyB0aGUgaWRyIGxvb2t1cCBpbnN0ZWFkCi0JICogaXMgcHJvdGVjdGVkIGJ5IFJDVS4KJiM0MzsJICogZXZ0Y2huZmQgaXMgcHJvdGVjdGVkIGJ5IGt2bS0mZ3Q7c3JjdTsgdGhlIHhhX2xvYWQgaXMgUkNVLXNhZmUKJiM0MzsJICogaW50ZXJuYWxseSwgbm8gZXhwbGljaXQgcmN1X3JlYWRfbG9jaygpIG5lZWRlZC4KIAkgKi8KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZXZ0Y2huZmQgPSBpZHJfZmluZCgmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBzZW5kLnBvcnQpOwotCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwlldnRjaG5mZCA9IHhhX2xvYWQoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cywgc2VuZC5wb3J0KTsKIAlpZiAoIWV2dGNobmZkKQogCQlyZXR1cm4gZmFsc2U7CiAKQEAgLTIzNDksMjMgJiM0MzsyMzk1LDIzIEBAIHZvaWQga3ZtX3hlbl9kZXN0cm95X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogdm9pZCBrdm1feGVuX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtKQogewogCW11dGV4X2luaXQoJmFtcDtrdm0tJmd0O2FyY2gueGVuLnhlbl9sb2NrKTsKLQlpZHJfaW5pdCgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTsKJiM0MzsJeGFfaW5pdCgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTsKIAlrdm1fZ3BjX2luaXQoJmFtcDtrdm0tJmd0O2FyY2gueGVuLnNoaW5mb19jYWNoZSwga3ZtKTsKIH0KIAogdm9pZCBrdm1feGVuX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKQogewogCXN0cnVjdCBldnRjaG5mZCAqZXZ0Y2huZmQ7Ci0JaW50IGk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKIAogCWt2bV9ncGNfZGVhY3RpdmF0ZSgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uc2hpbmZvX2NhY2hlKTsKIAotCWlkcl9mb3JfZWFjaF9lbnRyeSgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBldnRjaG5mZCwgaSkgewomIzQzOwl4YV9mb3JfZWFjaCgmYW1wO2t2bS0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBpLCBldnRjaG5mZCkgewogCQlpZiAoIWV2dGNobmZkLSZndDtkZWxpdmVyLnBvcnQucG9ydCkKIAkJCWV2ZW50ZmRfY3R4X3B1dChldnRjaG5mZC0mZ3Q7ZGVsaXZlci5ldmVudGZkLmN0eCk7CiAJCWtmcmVlKGV2dGNobmZkKTsKIAl9Ci0JaWRyX2Rlc3Ryb3koJmFtcDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cyk7CiYjNDM7CXhhX2Rlc3Ryb3koJmFtcDtrdm0tJmd0O2FyY2gueGVuLmV2dGNobl9wb3J0cyk7CiAKIAlpZiAoa3ZtLSZndDthcmNoLnhlbi5odm1fY29uZmlnLm1zcikKIAkJc3RhdGljX2JyYW5jaF9zbG93X2RlY19kZWZlcnJlZCgmYW1wO2t2bV94ZW5fZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmggYi9hcmNoL3g4Ni9rdm0veGVuLmgKaW5kZXggZjM3Mjg1NTg1N2E4OC4uOWQwNGUzNTBiZGIxZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ZW4uaApAQCAtMjM1LDYgJiM0MzsyMzUsMTEgQEAgc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbyB7CiAjZGVmaW5lIENPTVBBVF9FVlRDSE5fMkxfTlJfQ0hBTk5FTFMgKDggKgkJCQlcCiAJCQkJICAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8sIFwKIAkJCQkJCSAgIGV2dGNobl9wZW5kaW5nKSkKJiM0MzsKJiM0MzsvKiBMYXRjaGVkIFZNLXdpZGUgbW9kZTsgdGhlIEtWTSBlcXVpdmFsZW50IG9mIFhlbiYjMzk7cyAhaGFzXzMyYml0X3NoaW5mbygpLiAqLwomIzQzOyNkZWZpbmUga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkgXAomIzQzOwkoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsgUkVBRF9PTkNFKChrdm0pLSZndDthcmNoLnhlbi5sb25nX21vZGUpKQomIzQzOwogc3RydWN0IGNvbXBhdF92Y3B1X3J1bnN0YXRlX2luZm8gewogICAgIGludCBzdGF0ZTsKICAgICB1aW50NjRfdCBzdGF0ZV9lbnRyeV90aW1lOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IDAzYmZjOTI4NjRiNmUuLjNkZDA0NjA1ZjJlNTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTg1NSw2ICYjNDM7ODU1LDggQEAgc3RydWN0IGt2bSB7CiAJZ2ZuX3QgbW11X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQ7CiAJZ2ZuX3QgbW11X2ludmFsaWRhdGVfcmFuZ2VfZW5kOwogCiYjNDM7CXVuc2lnbmVkIGxvbmcgZ3BjX2ludmFsaWRhdGVfc2VxOwomIzQzOwogCXN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlczsKIAl1NjQgbWFudWFsX2RpcnR5X2xvZ19wcm90ZWN0OwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGVudHJ5OwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggNjVlYjI2YTA1MjBkOC4uMTA4ZDQyYzVjMWQ2YSAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC04MTMsNiAmIzQzOzgxMywxNiBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLAogCiAJLyogUGFpcnMgd2l0aCB0aGUgaW5jcmVtZW50IGluIHJhbmdlX3N0YXJ0KCkuICovCiAJc3Bpbl9sb2NrKCZhbXA7a3ZtLSZndDttbl9pbnZhbGlkYXRlX2xvY2spOwomIzQzOwlrdm0tJmd0O2dwY19pbnZhbGlkYXRlX3NlcSYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEFzIHdpdGggdGhlIE1NVSBzZXF1ZW5jZSBjb3VudGVyIGFuZCBtbXVfaW52YWxpZGF0ZV9pbl9wcm9ncmVzcywgdGhlCiYjNDM7CSAqIEdQQyBzZXF1ZW5jZSBpbmNyZWFzZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHRoZSBpbnZhbGlkYXRlIGNvdW50CiYjNDM7CSAqIGdvZXMgdG8gemVyby4gIFBhaXJzIHdpdGggdGhlIHNtcF9ybWIoKSBpbgomIzQzOwkgKiBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoKS4KJiM0MzsJICovCiYjNDM7CXNtcF93bWIoKTsKJiM0MzsKIAlpZiAoIVdBUk5fT05fT05DRSgha3ZtLSZndDttbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCkpCiAJCS0ta3ZtLSZndDttbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDsKIAl3YWtlID0gIWt2bS0mZ3Q7bW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQ7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9wZm5jYWNoZS5jIGIvdmlydC9rdm0vcGZuY2FjaGUuYwppbmRleCA3MjhkMmMxYjQ4OGE4Li4zNjU5Njg2Yjk3YzI0IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9wZm5jYWNoZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmMKQEAgLTEyNCw3ICYjNDM7MTI0LDcgQEAgc3RhdGljIHZvaWQgZ3BjX3VubWFwKGt2bV9wZm5fdCBwZm4sIHZvaWQgKmtodmEpCiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NlcSkKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBncGNfc2VxKQogewogCS8qCiAJICogbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgYWN0cyBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzCkBAIC0xMzYsMjAgJiM0MzsxMzYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3MKIAkgKiBOb3RlLCBpdCBkb2VzIG5vdCBtYXR0ZXIgdGhhdCBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudAogCSAqIGlzIG5vdCBwcm90ZWN0ZWQgYnkgZ3BjLSZndDtsb2NrLiAgSXQgaXMgZ3VhcmFudGVlZCB0bwogCSAqIGJlIGVsZXZhdGVkIGJlZm9yZSB0aGUgbW11X25vdGlmaWVyIGFjcXVpcmVzIGdwYy0mZ3Q7bG9jaywgYW5kCi0JICogaXNuJiMzOTt0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgbW11X2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuCiYjNDM7CSAqIGlzbiYjMzk7dCBkcm9wcGVkIHVudGlsIGFmdGVyIGdwY19pbnZhbGlkYXRlX3NlcSBpcyB1cGRhdGVkLgogCSAqLwogCWlmIChrdm0tJmd0O21uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KQogCQlyZXR1cm4gdHJ1ZTsKIAogCS8qCiAJICogRW5zdXJlIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGlzIHJlYWQgYmVmb3JlCi0JICogbW11X2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW4KLQkgKiBtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoKSB0byBndWFyYW50ZWUgZWl0aGVyIHRoZQomIzQzOwkgKiBncGNfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbgomIzQzOwkgKiBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGUKIAkgKiBvbGQgKG5vbi16ZXJvKSB2YWx1ZSBvZiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBvciB0aGUKLQkgKiBuZXcgKGluY3JlbWVudGVkKSB2YWx1ZSBvZiBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgb2JzZXJ2ZWQuCiYjNDM7CSAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIGdwY19pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC4KIAkgKi8KIAlzbXBfcm1iKCk7Ci0JcmV0dXJuIGt2bS0mZ3Q7bW11X2ludmFsaWRhdGVfc2VxICE9IG1tdV9zZXE7CiYjNDM7CXJldHVybiBrdm0tJmd0O2dwY19pbnZhbGlkYXRlX3NlcSAhPSBncGNfc2VxOwogfQogCiBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKQEAgLTE1OCw3ICYjNDM7MTU4LDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpCiAJdm9pZCAqb2xkX2todmEgPSAodm9pZCAqKVBBR0VfQUxJR05fRE9XTigodWludHB0cl90KWdwYy0mZ3Q7a2h2YSk7CiAJa3ZtX3Bmbl90IG5ld19wZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDsKIAl2b2lkICpuZXdfa2h2YSA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBtbXVfc2VxOwomIzQzOwl1bnNpZ25lZCBsb25nIGdwY19zZXE7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKIAlzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0gewpAQCAtMTgxLDcgJiM0MzsxODEsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKIAlncGMtJmd0O3ZhbGlkID0gZmFsc2U7CiAKIAlkbyB7Ci0JCW1tdV9zZXEgPSBncGMtJmd0O2t2bS0mZ3Q7bW11X2ludmFsaWRhdGVfc2VxOwomIzQzOwkJZ3BjX3NlcSA9IGdwYy0mZ3Q7a3ZtLSZndDtncGNfaW52YWxpZGF0ZV9zZXE7CiAJCXNtcF9ybWIoKTsKIAogCQl3cml0ZV91bmxvY2tfaXJxKCZhbXA7Z3BjLSZndDtsb2NrKTsKQEAgLTIzMiw3ICYjNDM7MjMyLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpCiAJCSAqIGF0dGVtcHRpbmcgdG8gcmVmcmVzaC4KIAkJICovCiAJCVdBUk5fT05fT05DRShncGMtJmd0O3ZhbGlkKTsKLQl9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLSZndDtrdm0sIG1tdV9zZXEpKTsKJiM0MzsJfSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy0mZ3Q7a3ZtLCBncGNfc2VxKSk7CiAKIAlncGMtJmd0O3ZhbGlkID0gdHJ1ZTsKIAlncGMtJmd0O3BmbiA9IG5ld19wZm47CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI2OAoJCQkJCQkJb3V0cHV0OiAyODYKCQkJCQkJCXRob3VnaHRzOiAxNTY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBBIERlZXAgRGl2ZSBpbnRvIE1lbW9yeSBTYWZldHkgYW5kIENvbmN1cnJlbmN5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBhc3Nlc3MgcG90ZW50aWFsIHJpc2tzLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgYSBjb21tb24gc291cmNlIG9mIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBLVk0sIHNvIHdlIG5lZWQgdG8gYmUgZXh0cmEgY2F1dGlvdXMuCgpGaXJzdCwgdGhlIHBhdGNoIHRvdWNoZXMgYSBmZXcga2V5IGFyZWFzOiB0aGUgWDg2IEtWTSBjb2RlLCBYZW4gaW50ZWdyYXRpb24sIGFuZCB0aGUgS1ZNIGNvcmUuIFRoZXJlJiMzOTtzIGEgc2lnbmlmaWNhbnQgc2hpZnQgZnJvbSBgaWRyIGV2dGNobl9wb3J0c2AgdG8gYHhhcnJheSBldnRjaG5fcG9ydHNgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgdHJhbnNpdGlvbiBpcyBzb3VuZCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24uIFRoZSBhbGlnbm1lbnQgY2hlY2tzIGluIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGZvciBgZ3BhYCBhbmQgYGh2YWAgYXJlIGdvb2QsIGFuZCB0aGUgYml0d2lzZSBvcGVyYXRpb25zIHdpdGggYXRvbWljIGZ1bmN0aW9ucyBhcmUgcmVwbGFjaW5nIHNvbWUgaW5saW5lIGFzc2VtYmx5IHdoaWNoIGlzIHNlbnNpYmxlIGZvciBhdm9pZGluZyBzcGxpdCBsb2Nrcy4gVGhlIG5ldyBzZXF1ZW5jZSBjb3VudGVyIGBncGNfaW52YWxpZGF0ZV9zZXFgIGlzIGFsc28gZ29vZC4KCkkmIzM5O20gbm93IGdvaW5nIHRvIGdvIHRocm91Z2ggdGhlc2UgY2hhbmdlcyBpbiBkZXRhaWwuCgoqICAgSW4gYGFyY2gveDg2L2t2bS94ZW4uY2AsIHRoZSBuZXcgYGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdGAgdXNpbmcgYGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mb2AgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgYXRvbWljIGJpdCBvcGVyYXRpb25zIGFuZCB0aGUgU1JDVSBndWFyZCBpbiBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgIGxvb2tzIGdvb2QuIFRoZSBhbGlnbm1lbnQgY2hlY2tzIGluIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGFyZSBhcHByb3ByaWF0ZS4gSGVscGVyIHVwZGF0ZXMgc2VlbSBva2F5LiBUaGUgbG9ja2luZyB3aXRoIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgZm9yIGBwb2xsX2V2dGNobmAgYW5kIHRoZSByZW5hbWluZyBvZiBgbG9uZ21vZGVgIGlzIE9LIGFzIHdlbGwuIFRoZSBjaGFuZ2UgdG8gYXRvbWljIGBidHNsYCBtYWtlcyBzZW5zZS4gVGhlIFhBcnJheSBjb252ZXJzaW9ucyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50IGNoYW5nZSB0byB2ZXJpZnkgaGVyZS4KCiogICBJbiBgdmlydC9rdm0vcGZuY2FjaGUuY2AgYW5kIGBrdm1fbWFpbi5jYCwgdGhlIHNlcGFyYXRlIGBncGNfaW52YWxpZGF0ZV9zZXFgIGNvdW50ZXIgaXMgZmluZSwgc2luY2UgS1ZNIHVzZXMgYGt6YWxsb2NgIG9uIGNyZWF0aW9uIGFuZCB0aGVyZSBhcmUgbm8gaW5pdGlhbGl6YXRpb24gcmlza3MuCgpBcmUgYW55IHN0cnVjdHVyZXMgYWxsb2NhdGVkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24/IE5vLCB0aGUgYGttYWxsb2Nfb2Jqc2AgYW5kIGB4YV9pbml0YCB1c2FnZSBsb29rcyBjb3JyZWN0LiBJdCYjMzk7cyBwcm9wZXJseSBpbml0aWFsaXplZC4gTm8gdXNlcmNvcHkgZnJvbSBrZXJuZWwgc3RydWN0cywgd2hpY2ggaXMgZ3JlYXQuIE5vIGNvbmRpdGlvbmFscyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZWl0aGVyLiBUaGlzIGlzIGFsbCBhYm91dCBjb25jdXJyZW5jeSwgZGF0YSBzdHJ1Y3R1cmUgdHJhbnNmb3JtYXRpb25zICh0aGUgSURSIHRvIFhBcnJheSBjb252ZXJzaW9uLCB3aGljaCBpcyB0aGUgYmlnIG9uZSksIGFuZCBhbGlnbm1lbnQgY2hlY2tzLgoKTGV0IG1lIG5vdyBwZXJmb3JtIGEgZGVlcGVyIGluc3BlY3Rpb24uIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBzZWVtIHRvIGludHJvZHVjZSBhbnkgZGlyZWN0IHVzZXJjb3B5LCBsZWFraW5nIGluZm8sIG9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIGxvb2tzIGxpa2UgaXQgd291bGRuJiMzOTt0IGRldGVjdCBpc3N1ZXMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCByZWFkcyAoc3RhY2svaGVhcCkuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBpbmRpdmlkdWFsIGNoYW5nZXM6IFRoZSBpbmNyZW1lbnQgb2YgYGdwY19pbnZhbGlkYXRlX3NlcWAgbG9va3MgZmluZSwgYXMgZG9lcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGdwY19zZXFgIGZyb20gaXQuIFRoZSBhdG9taWMgb3BlcmF0aW9ucyBzZWVtIGNvcnJlY3QgYW5kIHRoZSBSQUlJIGd1YXJkIGZyb20gYHNyY3VgIHNob3VsZCBiZSBjb3JyZWN0LCBhbmQgdGhlIHhhcnJheSBBUElzIGxvb2sgc3RhbmRhcmQgYW5kIHNhZmUuCgoqKkNvbmNsdXNpb246KiogQWZ0ZXIgdGhpcyB0aG9yb3VnaCByZXZpZXcsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBpcyBzYWZlIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGxlYWtzLCBhbmQgcG90ZW50aWFsIEtBU0FOL0tNU0FOIGlzc3Vlcy4gVGhlIEtBU0FOL0xPQ0tERVAgY2hlY2tzIHdpbGwgY2F0Y2ggYW55IGNvbmN1cnJlbmN5LXJlbGF0ZWQgcHJvYmxlbXMgKGxpa2UgVUFGLCBkYXRhIHJhY2VzLCBhbmQgT09CIGFjY2VzcykuIEtNU0FOIHdpbGwgYWxzbyBjb25maXJtIHRoaXMsIGFzIHRoZXNlIGNoYW5nZXMgYXBwZWFyIHRvIGJlIHNhZmUuIFRoZXJlZm9yZSwgdGhlIHJlc3VsdCBvZiBhIEtNU0FOIGNoZWNrIHdvdWxkIGJlIG5lZ2F0aXZlLgoKS0FTQU4gZGVhbHMgd2l0aCBjb25jdXJyZW5jeSBzeW5jaHJvbml6YXRpb24sIHJlcGxhY2VtZW50IG9mIGRhdGEgc3RydWN0dXJlcywgYW5kIGFsaWdubWVudC4gS01TQU4gY2hlY2tzIGZvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW5mbyBsZWFrcywgb3IgYnJhbmNoaW5nIG9uIHN1Y2ggZGF0YS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJiMzOTtzIFhlbiBlbXVsYXRpb24gYW5kIEdGTi10by1QRk4gY2FjaGUgaW52YWxpZGF0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0OlxuMS4gUmVwbGFjZXMgdGhlIElEUiBkYXRhIHN0cnVjdHVyZSB3aXRoIFhBcnJheSBmb3IgZXZlbnQgY2hhbm5lbCBwb3J0IHRyYWNraW5nIChgZXZ0Y2huX3BvcnRzYCkuXG4yLiBJbnRyb2R1Y2VzIGEgZGVkaWNhdGVkIHNlcXVlbmNlIGNvdW50ZXIgKGBncGNfaW52YWxpZGF0ZV9zZXFgKSBpbiBgcGZuY2FjaGUuY2AgYW5kIGBrdm1fbWFpbi5jYCB0byBwcm9wZXJseSB0cmFjayBHUEMgaW52YWxpZGF0aW9uIGV2ZW50cy5cbjMuIEZpeGVzIHBvdGVudGlhbCBzcGxpdC1sb2NrIGAjQUNgIGV4Y2VwdGlvbnMgYnkgY2hlY2tpbmcgR1BBL0hWQSAzMi1iaXQgYWxpZ25tZW50IGluIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGFuZCB1c2luZyAzMi1iaXQgYXRvbWljIGJpdG9wcyBmb3IgYHZpX3BlbmRpbmdfc2VsYC5cbjQuIEZpeGVzIFNSQ1UgbG9ja2luZyBpbiBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgIGFuZCBhdG9taWMgcmVhZHMvd3JpdGVzIGZvciBgcG9sbF9ldnRjaG5gLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBidWZmZXJzLCByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG9yIGV4cG9zZSBrZXJuZWwgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIE1lbW9yeSBzYWZldHkgYW5kIGNvbmN1cnJlbmN5IGNvbmNlcm5zIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsb2NraW5nLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSYjMzk7cyBYZW4gZW11bGF0aW9uIGFuZCBHRk4tdG8tUEZOIGNhY2hlIGludmFsaWRhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdDpcbjEuIFJlcGxhY2VzIHRoZSBJRFIgZGF0YSBzdHJ1Y3R1cmUgd2l0aCBYQXJyYXkgZm9yIGV2ZW50IGNoYW5uZWwgcG9ydCB0cmFja2luZyAoYGV2dGNobl9wb3J0c2ApLlxuMi4gSW50cm9kdWNlcyBhIGRlZGljYXRlZCBzZXF1ZW5jZSBjb3VudGVyIChgZ3BjX2ludmFsaWRhdGVfc2VxYCkgaW4gYHBmbmNhY2hlLmNgIGFuZCBga3ZtX21haW4uY2AgdG8gcHJvcGVybHkgdHJhY2sgR1BDIGludmFsaWRhdGlvbiBldmVudHMuXG4zLiBGaXhlcyBwb3RlbnRpYWwgc3BsaXQtbG9jayBgI0FDYCBleGNlcHRpb25zIGJ5IGNoZWNraW5nIEdQQS9IVkEgMzItYml0IGFsaWdubWVudCBpbiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCBhbmQgdXNpbmcgMzItYml0IGF0b21pYyBiaXRvcHMgZm9yIGB2aV9wZW5kaW5nX3NlbGAuXG40LiBGaXhlcyBTUkNVIGxvY2tpbmcgaW4gYF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0YCBhbmQgYXRvbWljIHJlYWRzL3dyaXRlcyBmb3IgYHBvbGxfZXZ0Y2huYC5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBvciBleHBvc2Uga2VybmVsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBNZW1vcnkgc2FmZXR5IGFuZCBjb25jdXJyZW5jeSBjb25jZXJucyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9ja2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjM4OjIzLjQ1MjQyNjYzM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMzQ2NTA5MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJLVk1fWDg2XCIsXG4gICAgXCJLVk1fWEVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3hlbl92Y3B1X3NldF9hdHRyXCIsXG4gICAgXCJrdm1feGVuX2h2bV9zZXRfYXR0clwiLFxuICAgIFwia3ZtX3hlbl9oeXBlcmNhbGxcIixcbiAgICBcImt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzXCIsXG4gICAgXCJfX2t2bV94ZW5faGFzX2ludGVycnVwdFwiLFxuICAgIFwia3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RcIixcbiAgICBcImt2bV94ZW5faHZtX2V2dGNobl9zZW5kXCIsXG4gICAgXCJrdm1fZ3BjX3JlZnJlc2hcIixcbiAgICBcImt2bV9ncGNfYWN0aXZhdGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSdzIFhlbiBlbXVsYXRpb24gYW5kIEdGTi10by1QRk4gY2FjaGUgaW52YWxpZGF0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0OlxcbjEuIFJlcGxhY2VzIHRoZSBJRFIgZGF0YSBzdHJ1Y3R1cmUgd2l0aCBYQXJyYXkgZm9yIGV2ZW50IGNoYW5uZWwgcG9ydCB0cmFja2luZyAoYGV2dGNobl9wb3J0c2ApLlxcbjIuIEludHJvZHVjZXMgYSBkZWRpY2F0ZWQgc2VxdWVuY2UgY291bnRlciAoYGdwY19pbnZhbGlkYXRlX3NlcWApIGluIGBwZm5jYWNoZS5jYCBhbmQgYGt2bV9tYWluLmNgIHRvIHByb3Blcmx5IHRyYWNrIEdQQyBpbnZhbGlkYXRpb24gZXZlbnRzLlxcbjMuIEZpeGVzIHBvdGVudGlhbCBzcGxpdC1sb2NrIGAjQUNgIGV4Y2VwdGlvbnMgYnkgY2hlY2tpbmcgR1BBL0hWQSAzMi1iaXQgYWxpZ25tZW50IGluIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGFuZCB1c2luZyAzMi1iaXQgYXRvbWljIGJpdG9wcyBmb3IgYHZpX3BlbmRpbmdfc2VsYC5cXG40LiBGaXhlcyBTUkNVIGxvY2tpbmcgaW4gYF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0YCBhbmQgYXRvbWljIHJlYWRzL3dyaXRlcyBmb3IgYHBvbGxfZXZ0Y2huYC5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBidWZmZXJzLCByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG9yIGV4cG9zZSBrZXJuZWwgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIE1lbW9yeSBzYWZldHkgYW5kIGNvbmN1cnJlbmN5IGNvbmNlcm5zIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsb2NraW5nLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGFuZCBjb25jdXJyZW5jeS1jcml0aWNhbCBjaGFuZ2VzIHRvIEtWTSdzIFhlbiBlbXVsYXRpb24gYW5kIGdmbl90b19wZm5fY2FjaGUgKEdQQykgc3Vic3lzdGVtLiBUaGVzZSBpbmNsdWRlIG1pZ3JhdGluZyBYZW4gZXZlbnQgY2hhbm5lbCBzdG9yYWdlIGZyb20gSURSIHRvIFhBcnJheSwgZW5mb3JjaW5nIGFsaWdubWVudCBjaGVja3MgZm9yIHZDUFUgaW5mbyBHUEEvSFZBLCB1c2luZyBleHBsaWNpdCAzMi1iaXQgYXRvbWljIGJpdG9wcyB0byBwcmV2ZW50IHNwbGl0LWxvY2sgQUMgZXhjZXB0aW9ucyBvbiB1bmFsaWduZWQgc3RydWN0dXJlcywgaW50cm9kdWNpbmcgU1JDVSBsb2NraW5nIGluIF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0LCBhbmQgc2VwYXJhdGluZyBHUEMgaW52YWxpZGF0aW9uIHNlcXVlbmNpbmcgZnJvbSBnZW5lcmFsIE1NVSBpbnZhbGlkYXRpb24gc2VxdWVuY2luZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIHZpcnR1YWxpemF0aW9uIGlvY3RscywgaHlwZXJjYWxscywgYW5kIGV2ZW50IGNoYW5uZWwgZGVsaXZlcnkgbWVjaGFuaXNtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mzg6MjMuNDUyNDMxNDQzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTYwNzkyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjM2UwM2ZmM2I4YzM3OWQ4YjMyODIwYzk5ZWJjMDJkODAyZTMwM2IyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDEgMDQ6Mzg6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5pbmRleCA2ODNiYjhiZjQzYTk0Li4zYWY3Mzk1YzI0MzBhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTE2LDYgKzE2LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycV93b3JrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgveGFycmF5LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1fcGFyYS5oXFx1MDAzZVxcbkBAIC0xMTEzLDcgKzExMTQsNyBAQCBzdHJ1Y3Qga3ZtX3hlbiB7XFxuIFxcdGJvb2wgcnVuc3RhdGVfdXBkYXRlX2ZsYWc7XFxuIFxcdHU4IHVwY2FsbF92ZWN0b3I7XFxuIFxcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlIHNoaW5mb19jYWNoZTtcXG4tXFx0c3RydWN0IGlkciBldnRjaG5fcG9ydHM7XFxuK1xcdHN0cnVjdCB4YXJyYXkgZXZ0Y2huX3BvcnRzO1xcbiBcXHR1bnNpZ25lZCBsb25nIHBvbGxfbWFza1tCSVRTX1RPX0xPTkdTKEtWTV9NQVhfVkNQVVMpXTtcXG4gXFxuIFxcdHN0cnVjdCBrdm1feGVuX2h2bV9jb25maWcgaHZtX2NvbmZpZztcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5jIGIvYXJjaC94ODYva3ZtL3hlbi5jXFxuaW5kZXggOTk4Y2RjYjZhYTMwMy4uNzE4Mzk2MzQwZDNjMSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veGVuLmNcXG5AQCAtNzMsNyArNzMsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2hhcmVkX2luZm8sIHdjKSAhPSAweGMwMCk7XFxuIFxcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2hhcmVkX2luZm8sIHdjX3NlY19oaSkgIT0gMHhjMGMpO1xcbiBcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xcbitcXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkpIHtcXG4gXFx0XFx0c3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtXFx1MDAzZWtodmE7XFxuIFxcbiBcXHRcXHR3Y19zZWNfaGkgPSBcXHUwMDI2c2hpbmZvLVxcdTAwM2V3Y19zZWNfaGk7XFxuQEAgLTM4OSw3ICszODksNyBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX3VwZGF0ZV9ydW5zdGF0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIGJvb2wgYXRvbWljKVxcbiBcXHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sIHRpbWUpICE9XFxuIFxcdFxcdCAgICAgc2l6ZW9mKHZ4LVxcdTAwM2VydW5zdGF0ZV90aW1lcykpO1xcbiBcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiB2LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xcbitcXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtXFx1MDAzZWt2bSkpIHtcXG4gXFx0XFx0dXNlcl9sZW4gPSBzaXplb2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyk7XFxuIFxcdFxcdHRpbWVzX29mcyA9IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RhdGVfZW50cnlfdGltZSk7XFxuQEAgLTY3NiwyOCArNjc2LDMyIEBAIHZvaWQga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2KVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBOb3cgZ3BjLVxcdTAwM2VraHZhIGlzIGEgdmFsaWQga2VybmVsIGFkZHJlc3MgZm9yIHRoZSB2Y3B1X2luZm8gKi9cXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiB2LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xcbitcXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtXFx1MDAzZWt2bSkpIHtcXG4gXFx0XFx0c3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtXFx1MDAzZWtodmE7XFxuK1xcdFxcdHZvaWQgKnZpX3BlbmRpbmdfc2VsID0gXFx1MDAyNnZpLVxcdTAwM2VldnRjaG5fcGVuZGluZ19zZWw7XFxuIFxcbi1cXHRcXHRhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggXFxcIm9ycSAlMCwgJTFcXFxcblxcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwibm90cSAlMFxcXFxuXFxcIlxcbi1cXHRcXHRcXHQgICAgIExPQ0tfUFJFRklYIFxcXCJhbmRxICUwLCAlMlxcXFxuXFxcIlxcbi1cXHRcXHRcXHQgICAgIDogXFxcIj1yXFxcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsKSxcXG4tXFx0XFx0XFx0ICAgICAgIFxcXCIrbVxcXCIgKHZpLVxcdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpLFxcbi1cXHRcXHRcXHQgICAgICAgXFxcIittXFxcIiAodi1cXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKVxcbi1cXHRcXHRcXHQgICAgIDogXFxcIjBcXFwiIChldnRjaG5fcGVuZGluZ19zZWwpKTtcXG4rXFx0XFx0aWYgKElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpdmlfcGVuZGluZ19zZWwsIHNpemVvZih1NjQpKSkge1xcbitcXHRcXHRcXHRhdG9taWM2NF9vcihldnRjaG5fcGVuZGluZ19zZWwsIHZpX3BlbmRpbmdfc2VsKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0YXRvbWljX29yKGV2dGNobl9wZW5kaW5nX3NlbCwgdmlfcGVuZGluZ19zZWwpO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBUaGUgY2FzdCBrZWVwcyB0aGUgc2hpZnQgd2VsbC1kZWZpbmVkIG9uIDMyLWJpdCxcXG4rXFx0XFx0XFx0ICogd2hlcmUgZXZ0Y2huX3BlbmRpbmdfc2VsIGlzIDMyIGJpdHMgd2lkZSBhbmQgdGhpc1xcbitcXHRcXHRcXHQgKiBicmFuY2ggaXMgdW5yZWFjaGFibGUgYW55d2F5ICh0aGlzIGlzIGluc2lkZVxcbitcXHRcXHRcXHQgKiBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oKSwgd2hpY2ggaXMgZ2F0ZWQgb25cXG4rXFx0XFx0XFx0ICogSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpKS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGF0b21pY19vcigodTY0KWV2dGNobl9wZW5kaW5nX3NlbCBcXHUwMDNlXFx1MDAzZSAzMixcXG4rXFx0XFx0XFx0XFx0ICB2aV9wZW5kaW5nX3NlbCArIDQpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRhdG9taWM2NF9hbmRub3QoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKVxcdTAwMjZ2LVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpO1xcbiBcXHRcXHRXUklURV9PTkNFKHZpLVxcdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHR1MzIgZXZ0Y2huX3BlbmRpbmdfc2VsMzIgPSBldnRjaG5fcGVuZGluZ19zZWw7XFxuIFxcdFxcdHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvICp2aSA9IGdwYy1cXHUwMDNla2h2YTtcXG4gXFxuLVxcdFxcdGFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCBcXFwib3JsICUwLCAlMVxcXFxuXFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJub3RsICUwXFxcXG5cXFwiXFxuLVxcdFxcdFxcdCAgICAgTE9DS19QUkVGSVggXFxcImFuZGwgJTAsICUyXFxcXG5cXFwiXFxuLVxcdFxcdFxcdCAgICAgOiBcXFwiPXJcXFwiIChldnRjaG5fcGVuZGluZ19zZWwzMiksXFxuLVxcdFxcdFxcdCAgICAgICBcXFwiK21cXFwiICh2aS1cXHUwMDNlZXZ0Y2huX3BlbmRpbmdfc2VsKSxcXG4tXFx0XFx0XFx0ICAgICAgIFxcXCIrbVxcXCIgKHYtXFx1MDAzZWFyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbClcXG4tXFx0XFx0XFx0ICAgICA6IFxcXCIwXFxcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpKTtcXG4rXFx0XFx0YXRvbWljX29yKGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKilcXHUwMDI2dmktXFx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCk7XFxuK1xcdFxcdGF0b21pY19hbmRub3QoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKVxcdTAwMjZ2LVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpO1xcbiBcXHRcXHRXUklURV9PTkNFKHZpLVxcdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xcbiBcXHR9XFxuIFxcbkBAIC03MjgsNiArNzMyLDE2IEBAIGludCBfX2t2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXFxuIFxcdEJVSUxEX0JVR19PTihzaXplb2YocmMpICE9XFxuIFxcdFxcdCAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIGt2bV9ncGNfY2hlY2soKSBjaGVja3MgdGhlIG1lbXNsb3QgZ2VuZXJhdGlvbiwgc28ga3ZtLVxcdTAwM2VzcmN1IG11c3QgYmVcXG4rXFx0ICogaGVsZC4gTW9zdCBjYWxsZXJzIGhvbGQgaXQgYWxyZWFkeSwgYnV0IHRoaXMgaXMgYWxzbyByZWFjaGVkIGZyb21cXG4rXFx0ICoga3ZtX2VtdWxhdGVfaGFsdCgpIG9uIHRoZSBWTS1FeGl0IHBhdGggYW5kIGZyb20ga3ZtX3ZjcHVfYmxvY2soKSxcXG4rXFx0ICogd2hlcmUgdmNwdV9lbnRlcl9ndWVzdCgpIGhhcyBhbHJlYWR5IGRyb3BwZWQgdGhlIHZDUFUncyBTUkNVIGxvY2suXFxuK1xcdCAqIFRha2luZyBTUkNVIGRvZXMgbm90IHNsZWVwLCBzbyBpdCBpcyBzYWZlIGV2ZW4gaW4gdGhlIGF0b21pYyBjYXNlXFxuK1xcdCAqIHdoaWNoIGlzIGhhbmRsZWQgYmVsb3cuXFxuK1xcdCAqL1xcbitcXHRndWFyZChzcmN1KShcXHUwMDI2di1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1KTtcXG4rXFxuIFxcdHJlYWRfbG9ja19pcnFzYXZlKFxcdTAwMjZncGMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFx0d2hpbGUgKCFrdm1fZ3BjX2NoZWNrKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkge1xcbiBcXHRcXHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZncGMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5AQCAtOTQxLDYgKzk1NSwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbiBcXG4rXFx0XFx0XFx0ciA9IC1FTlhJTztcXG4rXFx0XFx0XFx0aWYgKCFJU19BTElHTkVEKGRhdGEtXFx1MDAzZXUuZ3BhLCBzaXplb2YodTMyKSkpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXG4gXFx0XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBkYXRhLVxcdTAwM2V1LmdwYSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTtcXG4gXFx0XFx0fSBlbHNlIHtcXG5AQCAtOTUwLDYgKzk2OCwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbiBcXG4rXFx0XFx0XFx0ciA9IC1FTlhJTztcXG4rXFx0XFx0XFx0aWYgKCFJU19BTElHTkVEKGRhdGEtXFx1MDAzZXUuaHZhLCBzaXplb2YodTMyKSkpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXG4gXFx0XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGVfaHZhKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBkYXRhLVxcdTAwM2V1Lmh2YSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTtcXG4gXFx0XFx0fVxcbkBAIC05OTMsNyArMTAxNSw3IEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXFxuIFxcdFxcdCAqIGFkZHJlc3MsIHRoYXQncyBhY3R1YWxseSBPSy4ga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3QoKVxcbiBcXHRcXHQgKiB3aWxsIGNvcGUuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFxcdTAwMjZcXHUwMDI2IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKVxcbitcXHRcXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtXFx1MDAzZWt2bSkpXFxuIFxcdFxcdFxcdHN6ID0gc2l6ZW9mKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8pO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHN6ID0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfdmNwdV9ydW5zdGF0ZV9pbmZvKTtcXG5AQCAtMTQzOSwxNiArMTQ2MSwyMSBAQCBzdGF0aWMgaW50IGt2bV94ZW5faHlwZXJjYWxsX2NvbXBsZXRlX3VzZXJzcGFjZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHJldHVybiBrdm1feGVuX2h5cGVyY2FsbF9zZXRfcmVzdWx0KHZjcHUsIHJ1bi1cXHUwMDNleGVuLnUuaGNhbGwucmVzdWx0KTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KHN0cnVjdCBrdm0gKmt2bSlcXG4rc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KGJvb2wgaGFzXzY0Yml0X3NoaW5mbylcXG4ge1xcbi1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFxcdTAwMjZcXHUwMDI2IGt2bS1cXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKVxcbitcXHRpZiAoaGFzXzY0Yml0X3NoaW5mbylcXG4gXFx0XFx0cmV0dXJuIEVWVENITl8yTF9OUl9DSEFOTkVMUztcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyZXR1cm4gQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUztcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLFxcbi1cXHRcXHRcXHQgICAgICAgZXZ0Y2huX3BvcnRfdCAqcG9ydHMpXFxuK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9tYXhfZXZ0Y2huX3BvcnQoc3RydWN0IGt2bSAqa3ZtKVxcbit7XFxuK1xcdHJldHVybiBtYXhfZXZ0Y2huX3BvcnQoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGhhc182NGJpdF9zaGluZm8sXFxuK1xcdFxcdFxcdCAgICAgICBpbnQgbnJfcG9ydHMsIGV2dGNobl9wb3J0X3QgKnBvcnRzKVxcbiB7XFxuIFxcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4gXFx0c3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyA9IFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZTtcXG5AQCAtMTQ2Myw3ICsxNDkwLDcgQEAgc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLFxcbiBcXHRcXHRnb3RvIG91dF9yY3U7XFxuIFxcbiBcXHRyZXQgPSBmYWxzZTtcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xcbitcXHRpZiAoaGFzXzY0Yml0X3NoaW5mbykge1xcbiBcXHRcXHRzdHJ1Y3Qgc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cXHUwMDNla2h2YTtcXG4gXFx0XFx0cGVuZGluZ19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2c2hpbmZvLVxcdTAwM2VldnRjaG5fcGVuZGluZztcXG4gXFx0fSBlbHNlIHtcXG5AQCAtMTQ4NSw5ICsxNTEyLDEwIEBAIHN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cyxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxcbitzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsXFxuIFxcdFxcdFxcdFxcdCB1NjQgcGFyYW0sIHU2NCAqcilcXG4ge1xcbitcXHRib29sIGhhc182NGJpdF9zaGluZm8gPSBrdm1feGVuX2hhc182NGJpdF9zaGluZm8odmNwdS1cXHUwMDNla3ZtKTtcXG4gXFx0c3RydWN0IHNjaGVkX3BvbGwgc2NoZWRfcG9sbDtcXG4gXFx0ZXZ0Y2huX3BvcnRfdCBwb3J0LCAqcG9ydHM7XFxuIFxcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XFxuQEAgLTE0OTcsNyArMTUyNSw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcXG4gXFx0ICAgICEodmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnhlbi5odm1fY29uZmlnLmZsYWdzIFxcdTAwMjYgS1ZNX1hFTl9IVk1fQ09ORklHX0VWVENITl9TRU5EKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiAhbG9uZ21vZGUpIHtcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiAhaXNfNjRiaXQpIHtcXG4gXFx0XFx0c3RydWN0IGNvbXBhdF9zY2hlZF9wb2xsIHNwMzI7XFxuIFxcbiBcXHRcXHQvKiBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgY29tcGF0IHN0cnVjdCBkZWZpbml0aW9uIGlzIGNvcnJlY3QgKi9cXG5AQCAtMTU0NiwyMCArMTU3NCwyMCBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXFxuIFxcdH1cXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzY2hlZF9wb2xsLm5yX3BvcnRzOyBpKyspIHtcXG4tXFx0XFx0aWYgKHBvcnRzW2ldIFxcdTAwM2U9IG1heF9ldnRjaG5fcG9ydCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuK1xcdFxcdGlmIChwb3J0c1tpXSBcXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoaGFzXzY0Yml0X3NoaW5mbykpIHtcXG4gXFx0XFx0XFx0KnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoc2NoZWRfcG9sbC5ucl9wb3J0cyA9PSAxKVxcbi1cXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnhlbi5wb2xsX2V2dGNobiA9IHBvcnQ7XFxuK1xcdFxcdFdSSVRFX09OQ0UodmNwdS1cXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4sIHBvcnQpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHZjcHUtXFx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huID0gLTE7XFxuK1xcdFxcdFdSSVRFX09OQ0UodmNwdS1cXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4sIC0xKTtcXG4gXFxuIFxcdHNldF9iaXQodmNwdS1cXHUwMDNldmNwdV9pZHgsIHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC54ZW4ucG9sbF9tYXNrKTtcXG4gXFxuLVxcdGlmICghd2FpdF9wZW5kaW5nX2V2ZW50KHZjcHUsIHNjaGVkX3BvbGwubnJfcG9ydHMsIHBvcnRzKSkge1xcbitcXHRpZiAoIXdhaXRfcGVuZGluZ19ldmVudCh2Y3B1LCBoYXNfNjRiaXRfc2hpbmZvLCBzY2hlZF9wb2xsLm5yX3BvcnRzLCBwb3J0cykpIHtcXG4gXFx0XFx0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVEKTtcXG4gXFxuIFxcdFxcdGlmIChzY2hlZF9wb2xsLnRpbWVvdXQpXFxuQEAgLTE1NzQsNyArMTYwMiw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcXG4gXFx0XFx0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfUlVOTkFCTEUpO1xcbiBcXHR9XFxuIFxcbi1cXHR2Y3B1LVxcdTAwM2VhcmNoLnhlbi5wb2xsX2V2dGNobiA9IDA7XFxuK1xcdFdSSVRFX09OQ0UodmNwdS1cXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4sIDApO1xcbiBcXHQqciA9IDA7XFxuIG91dDpcXG4gXFx0LyogUmVhbGx5LCB0aGlzIGlzIG9ubHkgbmVlZGVkIGluIGNhc2Ugb2YgdGltZW91dCAqL1xcbkBAIC0xNTk0LDEyICsxNjIyLDEyIEBAIHN0YXRpYyB2b2lkIGNhbmNlbF9ldnRjaG5fcG9sbChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4gXFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXFxuK3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2NoZWRfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzXzY0Yml0LFxcbiBcXHRcXHRcXHRcXHQgICBpbnQgY21kLCB1NjQgcGFyYW0sIHU2NCAqcilcXG4ge1xcbiBcXHRzd2l0Y2ggKGNtZCkge1xcbiBcXHRjYXNlIFNDSEVET1BfcG9sbDpcXG4tXFx0XFx0aWYgKGt2bV94ZW5fc2NoZWRvcF9wb2xsKHZjcHUsIGxvbmdtb2RlLCBwYXJhbSwgcikpXFxuK1xcdFxcdGlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBpc182NGJpdCwgcGFyYW0sIHIpKVxcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0XFx0ZmFsbHRocm91Z2g7XFxuIFxcdGNhc2UgU0NIRURPUF95aWVsZDpcXG5AQCAtMTYxOCw3ICsxNjQ2LDcgQEAgc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyIHtcXG4gICAgIHVpbnQzMl90IGZsYWdzO1xcbiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpO1xcbiBcXG4tc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwgaW50IGNtZCxcXG4rc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpc182NGJpdCwgaW50IGNtZCxcXG4gXFx0XFx0XFx0XFx0ICBpbnQgdmNwdV9pZCwgdTY0IHBhcmFtLCB1NjQgKnIpXFxuIHtcXG4gXFx0c3RydWN0IHZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIgb25lc2hvdDtcXG5AQCAtMTY2Miw3ICsxNjkwLDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwgaW50IGNtZCxcXG4gXFx0XFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3QgY29tcGF0X3ZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIsIGZsYWdzKSAhPVxcbiBcXHRcXHRcXHQgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpKTtcXG4gXFxuLVxcdFxcdGlmIChrdm1fcmVhZF9ndWVzdF92aXJ0KHZjcHUsIHBhcmFtLCBcXHUwMDI2b25lc2hvdCwgbG9uZ21vZGUgPyBzaXplb2Yob25lc2hvdCkgOlxcbitcXHRcXHRpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBwYXJhbSwgXFx1MDAyNm9uZXNob3QsIGlzXzY0Yml0ID8gc2l6ZW9mKG9uZXNob3QpIDpcXG4gXFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciksIFxcdTAwMjZlKSkge1xcbiBcXHRcXHRcXHQqciA9IC1FRkFVTFQ7XFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbkBAIC0xNjk0LDcgKzE3MjIsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3NldF90aW1lcl9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVpbnQ2NF90IHRpbWVvdXQsXFxuIFxcbiBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdGJvb2wgbG9uZ21vZGU7XFxuK1xcdGJvb2wgaXNfNjRiaXQ7XFxuIFxcdHU2NCBpbnB1dCwgcGFyYW1zWzZdLCByID0gLUVOT1NZUztcXG4gXFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XFxuIFxcdHU4IGNwbDtcXG5AQCAtMTcwNCw4ICsxNzMyLDggQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0ICAgIGt2bV9odl9oeXBlcmNhbGxfZW5hYmxlZCh2Y3B1KSlcXG4gXFx0XFx0cmV0dXJuIGt2bV9odl9oeXBlcmNhbGwodmNwdSk7XFxuIFxcbi1cXHRsb25nbW9kZSA9IGlzXzY0X2JpdF9oeXBlcmNhbGwodmNwdSk7XFxuLVxcdGlmICghbG9uZ21vZGUpIHtcXG4rXFx0aXNfNjRiaXQgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xcbitcXHRpZiAoIWlzXzY0Yml0KSB7XFxuIFxcdFxcdGlucHV0ID0ga3ZtX2VheF9yZWFkKHZjcHUpO1xcbiBcXHRcXHRwYXJhbXNbMF0gPSBrdm1fZWJ4X3JlYWQodmNwdSk7XFxuIFxcdFxcdHBhcmFtc1sxXSA9IGt2bV9lY3hfcmVhZCh2Y3B1KTtcXG5AQCAtMTc1MSwxNyArMTc3OSwxNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHRcXHRoYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9ldnRjaG5fc2VuZCh2Y3B1LCBwYXJhbXNbMV0sIFxcdTAwMjZyKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgX19IWVBFUlZJU09SX3NjaGVkX29wOlxcbi1cXHRcXHRoYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLFxcbitcXHRcXHRoYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcCh2Y3B1LCBpc182NGJpdCwgcGFyYW1zWzBdLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgcGFyYW1zWzFdLCBcXHUwMDI2cik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIF9fSFlQRVJWSVNPUl92Y3B1X29wOlxcbi1cXHRcXHRoYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHZjcHUsIGxvbmdtb2RlLCBwYXJhbXNbMF0sIHBhcmFtc1sxXSxcXG4rXFx0XFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBpc182NGJpdCwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHBhcmFtc1syXSwgXFx1MDAyNnIpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBfX0hZUEVSVklTT1Jfc2V0X3RpbWVyX29wOiB7XFxuIFxcdFxcdHU2NCB0aW1lb3V0ID0gcGFyYW1zWzBdO1xcbiBcXHRcXHQvKiBJbiAzMi1iaXQgbW9kZSwgdGhlIDY0LWJpdCB0aW1lb3V0IGlzIGluIHR3byAzMi1iaXQgcGFyYW1zLiAqL1xcbi1cXHRcXHRpZiAoIWxvbmdtb2RlKVxcbitcXHRcXHRpZiAoIWlzXzY0Yml0KVxcbiBcXHRcXHRcXHR0aW1lb3V0IHw9IHBhcmFtc1sxXSBcXHUwMDNjXFx1MDAzYyAzMjtcXG4gXFx0XFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHZjcHUsIHRpbWVvdXQsIFxcdTAwMjZyKTtcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTE3NzYsNyArMTgwNCw3IEBAIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIGhhbmRsZV9pbl91c2Vyc3BhY2U6XFxuIFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9YRU47XFxuIFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNleGVuLnR5cGUgPSBLVk1fRVhJVF9YRU5fSENBTEw7XFxuLVxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNleGVuLnUuaGNhbGwubG9uZ21vZGUgPSBsb25nbW9kZTtcXG4rXFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2V4ZW4udS5oY2FsbC5sb25nbW9kZSA9IGlzXzY0Yml0O1xcbiBcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZXhlbi51LmhjYWxsLmNwbCA9IGNwbDtcXG4gXFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2V4ZW4udS5oY2FsbC5pbnB1dCA9IGlucHV0O1xcbiBcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZXhlbi51LmhjYWxsLnBhcmFtc1swXSA9IHBhcmFtc1swXTtcXG5AQCAtMTc5NCw3ICsxODIyLDcgQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIHN0YXRpYyB2b2lkIGt2bV94ZW5fY2hlY2tfcG9sbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBvcnQpXFxuIHtcXG4tXFx0aW50IHBvbGxfZXZ0Y2huID0gdmNwdS1cXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG47XFxuK1xcdGludCBwb2xsX2V2dGNobiA9IFJFQURfT05DRSh2Y3B1LVxcdTAwM2VhcmNoLnhlbi5wb2xsX2V2dGNobik7XFxuIFxcbiBcXHRpZiAoKHBvbGxfZXZ0Y2huID09IHBvcnQgfHwgcG9sbF9ldnRjaG4gPT0gLTEpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICB0ZXN0X2FuZF9jbGVhcl9iaXQodmNwdS1cXHUwMDNldmNwdV9pZHgsIHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC54ZW4ucG9sbF9tYXNrKSkge1xcbkBAIC0xODE2LDggKzE4NDQsOSBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KVxcbiBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuIFxcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGU7XFxuK1xcdGJvb2wgaGFzXzY0Yml0X3NoaW5mbyA9IGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pO1xcbitcXHR1bnNpZ25lZCBsb25nICpwZW5kaW5nX2JpdHMsICptYXNrX2JpdHMsIHZpX3BlbmRpbmdfc2VsX29mcztcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbi1cXHR1bnNpZ25lZCBsb25nICpwZW5kaW5nX2JpdHMsICptYXNrX2JpdHM7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdGludCBwb3J0X3dvcmRfYml0O1xcbiBcXHRib29sIGtpY2tfdmNwdSA9IGZhbHNlO1xcbkBAIC0xODMzLDcgKzE4NjIsNyBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRcXHRXUklURV9PTkNFKHhlLVxcdTAwM2V2Y3B1X2lkeCwgdmNwdS1cXHUwMDNldmNwdV9pZHgpO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoeGUtXFx1MDAzZXBvcnQgXFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGt2bSkpXFxuK1xcdGlmICh4ZS1cXHUwMDNlcG9ydCBcXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoaGFzXzY0Yml0X3NoaW5mbykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0cmMgPSAtRVdPVUxEQkxPQ0s7XFxuQEAgLTE4NDQsMTYgKzE4NzMsMjMgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0aWYgKCFrdm1fZ3BjX2NoZWNrKGdwYywgUEFHRV9TSVpFKSlcXG4gXFx0XFx0Z290byBvdXRfcmN1O1xcbiBcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xcbitcXHRpZiAoaGFzXzY0Yml0X3NoaW5mbykge1xcbiBcXHRcXHRzdHJ1Y3Qgc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cXHUwMDNla2h2YTtcXG4gXFx0XFx0cGVuZGluZ19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2c2hpbmZvLVxcdTAwM2VldnRjaG5fcGVuZGluZztcXG4gXFx0XFx0bWFza19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2c2hpbmZvLVxcdTAwM2VldnRjaG5fbWFzaztcXG4gXFx0XFx0cG9ydF93b3JkX2JpdCA9IHhlLVxcdTAwM2Vwb3J0IC8gNjQ7XFxuK1xcbitcXHRcXHR2aV9wZW5kaW5nX3NlbF9vZnMgPSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV9pbmZvLCBldnRjaG5fcGVuZGluZ19zZWwpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRzdHJ1Y3QgY29tcGF0X3NoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtXFx1MDAzZWtodmE7XFxuIFxcdFxcdHBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopXFx1MDAyNnNoaW5mby1cXHUwMDNlZXZ0Y2huX3BlbmRpbmc7XFxuIFxcdFxcdG1hc2tfYml0cyA9ICh1bnNpZ25lZCBsb25nICopXFx1MDAyNnNoaW5mby1cXHUwMDNlZXZ0Y2huX21hc2s7XFxuIFxcdFxcdHBvcnRfd29yZF9iaXQgPSB4ZS1cXHUwMDNlcG9ydCAvIDMyO1xcbitcXG4rXFx0XFx0dmlfcGVuZGluZ19zZWxfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF92Y3B1X2luZm8sIGV2dGNobl9wZW5kaW5nX3NlbCk7XFxuK1xcbitcXHRcXHQvKiB0ZXN0X2FuZF9zZXRfYml0KCkgbmVlZHMgNjQtYml0IGFsaWdubWVudCwgYnV0IHRoYXQncyBPSyAqL1xcbitcXHRcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgZXZ0Y2huX3BlbmRpbmcpIFxcdTAwMjYgNyk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuQEAgLTE4NjksNiArMTkwNSw4IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcdFxcdHJjID0gLUVOT1RDT05OOyAvKiBNYXNrZWQgKi9cXG4gXFx0XFx0a3ZtX3hlbl9jaGVja19wb2xsZXIodmNwdSwgeGUtXFx1MDAzZXBvcnQpO1xcbiBcXHR9IGVsc2Uge1xcbitcXHRcXHRib29sIG9sZDtcXG4rXFxuIFxcdFxcdHJjID0gMTsgLyogRGVsaXZlcmVkIHRvIHRoZSBiaXRtYXAgaW4gc2hhcmVkX2luZm8uICovXFxuIFxcdFxcdC8qIE5vdyBzd2l0Y2ggdG8gdGhlIHZDUFUncyB2Y3B1X2luZm8gdG8gc2V0IHRoZSBpbmRleCBhbmQgcGVuZGluZ19zZWwgKi9cXG4gXFx0XFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Z3BjLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuQEAgLTE4ODUsMTkgKzE5MjMsMjkgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0XFx0XFx0Z290byBvdXRfcmN1O1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFxcdTAwMjZcXHUwMDI2IGt2bS1cXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSB7XFxuLVxcdFxcdFxcdHN0cnVjdCB2Y3B1X2luZm8gKnZjcHVfaW5mbyA9IGdwYy1cXHUwMDNla2h2YTtcXG4tXFx0XFx0XFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnRfd29yZF9iaXQsIFxcdTAwMjZ2Y3B1X2luZm8tXFx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCkpIHtcXG4tXFx0XFx0XFx0XFx0V1JJVEVfT05DRSh2Y3B1X2luZm8tXFx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XFxuLVxcdFxcdFxcdFxcdGtpY2tfdmNwdSA9IHRydWU7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0c3RydWN0IGNvbXBhdF92Y3B1X2luZm8gKnZjcHVfaW5mbyA9IGdwYy1cXHUwMDNla2h2YTtcXG4tXFx0XFx0XFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnRfd29yZF9iaXQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICh1bnNpZ25lZCBsb25nICopXFx1MDAyNnZjcHVfaW5mby1cXHUwMDNlZXZ0Y2huX3BlbmRpbmdfc2VsKSkge1xcbi1cXHRcXHRcXHRcXHRXUklURV9PTkNFKHZjcHVfaW5mby1cXHUwMDNlZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTtcXG4tXFx0XFx0XFx0XFx0a2lja192Y3B1ID0gdHJ1ZTtcXG4tXFx0XFx0XFx0fVxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBFeHBsaWNpdGx5IHVzZSBhIDMyLWJpdCBidHNsIGluc3RlYWQgb2YgdGVzdF9hbmRfc2V0X2JpdCgpLFxcbitcXHRcXHQgKiB3aGljaCB3b3VsZCB1c2UgYnRzcSBvbiB4ODYtNjQuIFRoZSB2Y3B1X2luZm8gaXMgZ3Vlc3QtXFxuK1xcdFxcdCAqIGNvbnRyb2xsZWQgYW5kIG9ubHkgcmVxdWlyZWQgdG8gYmUgMzItYml0IGFsaWduZWQsIHNvIGFcXG4rXFx0XFx0ICogNjQtYml0IGFjY2VzcyBjb3VsZCBnZW5lcmF0ZSBhIHNwbGl0LWxvY2sgI0FDLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBOb3RlLCB0aGlzIGRvZXMgbm90IGFwcGx5IHRvIHRoZSB0ZXN0X2FuZF9zZXRfYml0KCkgb25cXG4rXFx0XFx0ICogcGVuZGluZ19iaXRzIGFib3ZlOiB0aGF0IGlzIGluIHRoZSBwZXItVk0gc2hhcmVkX2luZm8sIHdoaWNoXFxuK1xcdFxcdCAqIGlzIHBhZ2UgYWxpZ25lZCwgc28gdGhlIGFjY2VzcyBpcyBndWFyYW50ZWVkIHRvIGJlIDY0LWJpdFxcbitcXHRcXHQgKiBhbGlnbmVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0b2xkID0gR0VOX0JJTkFSWV9STVdjYyhMT0NLX1BSRUZJWCBcXFwiYnRzbFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICAqKHUzMiAqKShncGMtXFx1MDAzZWtodmEgKyB2aV9wZW5kaW5nX3NlbF9vZnMpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgYywgXFxcIklyXFxcIiwgcG9ydF93b3JkX2JpdCk7XFxuK1xcdFxcdGlmICghb2xkKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCB2Y3B1X2luZm8gKnZpID0gZ3BjLVxcdTAwM2VraHZhO1xcbitcXG4rXFx0XFx0XFx0LyogTm8gbmVlZCBmb3IgY29tcGF0IGhhbmRsaW5nICovXFxuK1xcdFxcdFxcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpICE9XFxuK1xcdFxcdFxcdFxcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF92Y3B1X2luZm8sIGV2dGNobl91cGNhbGxfcGVuZGluZykpO1xcbitcXG4rXFx0XFx0XFx0V1JJVEVfT05DRSh2aS1cXHUwMDNlZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTtcXG4rXFx0XFx0XFx0a2lja192Y3B1ID0gdHJ1ZTtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogRm9yIHRoZSBwZXItdkNQVSBsYXBpYyB2ZWN0b3IsIGRlbGl2ZXIgaXQgYXMgTVNJLiAqL1xcbkBAIC0xOTk1LDcgKzIwNDMsNyBAQCBpbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBEb24ndCBjaGVjayBmb3IgdGhlIHBvcnQgYmVpbmcgd2l0aGluIHJhbmdlIG9mIG1heF9ldnRjaG5fcG9ydCgpLlxcbitcXHQgKiBEb24ndCBjaGVjayBmb3IgdGhlIHBvcnQgYmVpbmcgd2l0aGluIHJhbmdlIG9mIGt2bV9tYXhfZXZ0Y2huX3BvcnQoKS5cXG4gXFx0ICogVXNlcnNwYWNlIGNhbiBjb25maWd1cmUgd2hhdCBldmVyIHRhcmdldHMgaXQgbGlrZXM7IGV2ZW50cyBqdXN0IHdvbid0XFxuIFxcdCAqIGJlIGRlbGl2ZXJlZCBpZi93aGlsZSB0aGUgdGFyZ2V0IGlzIGludmFsaWQsIGp1c3QgbGlrZSB1c2Vyc3BhY2UgY2FuXFxuIFxcdCAqIGNvbmZpZ3VyZSBNU0lzIHdoaWNoIHRhcmdldCBub24tZXhpc3RlbnQgQVBJQ3MuXFxuQEAgLTIwMDQsOCArMjA1Miw4IEBAIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdCAqIGNhbiBiZSByZXN0b3JlZCAqaW5kZXBlbmRlbnRseSogb2Ygb3RoZXIgdGhpbmdzIGxpa2UgY3JlYXRpbmcgdkNQVXMsXFxuIFxcdCAqIHdpdGhvdXQgaW1wb3NpbmcgYW4gb3JkZXJpbmcgZGVwZW5kZW5jeSBvbiB1c2Vyc3BhY2UuICBJbiB0aGlzXFxuIFxcdCAqIHBhcnRpY3VsYXIgY2FzZSwgdGhlIHByb2JsZW1hdGljIG9yZGVyaW5nIHdvdWxkIGJlIHdpdGggc2V0dGluZyB0aGVcXG4tXFx0ICogWGVuICdsb25nIG1vZGUnIGZsYWcsIHdoaWNoIGNoYW5nZXMgbWF4X2V2dGNobl9wb3J0KCkgdG8gYWxsb3cgNDA5Nlxcbi1cXHQgKiBpbnN0ZWFkIG9mIDEwMjQgZXZlbnQgY2hhbm5lbHMuXFxuK1xcdCAqIFhlbiAnbG9uZyBtb2RlJyBmbGFnLCB3aGljaCBjaGFuZ2VzIGt2bV9tYXhfZXZ0Y2huX3BvcnQoKSB0byBhbGxvd1xcbitcXHQgKiA0MDk2IGluc3RlYWQgb2YgMTAyNCBldmVudCBjaGFubmVscy5cXG4gXFx0ICovXFxuIFxcbiBcXHQvKiBXZSBvbmx5IHN1cHBvcnQgMiBsZXZlbCBldmVudCBjaGFubmVscyBmb3Igbm93ICovXFxuQEAgLTIwNDIsNyArMjA5MCw3IEBAIGludCBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfeGVuX2V2dGNobiAqXFxuIFxcdHN0cnVjdCBrdm1feGVuX2V2dGNobiBlO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0aWYgKCF1eGUtXFx1MDAzZXBvcnQgfHwgdXhlLVxcdTAwM2Vwb3J0IFxcdTAwM2U9IG1heF9ldnRjaG5fcG9ydChrdm0pKVxcbitcXHRpZiAoIXV4ZS1cXHUwMDNlcG9ydCB8fCB1eGUtXFx1MDAzZXBvcnQgXFx1MDAzZT0ga3ZtX21heF9ldnRjaG5fcG9ydChrdm0pKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdC8qIFdlIG9ubHkgc3VwcG9ydCAyIGxldmVsIGV2ZW50IGNoYW5uZWxzIGZvciBub3cgKi9cXG5AQCAtMjA5Myw3ICsyMTQxLDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFxuIFxcdC8qIFByb3RlY3Qgd3JpdGVzIHRvIGV2dGNobmZkIGFzIHdlbGwgYXMgdGhlIGlkciBsb29rdXAuICAqL1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcXG4tXFx0ZXZ0Y2huZmQgPSBpZHJfZmluZChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIHBvcnQpO1xcbitcXHRldnRjaG5mZCA9IHhhX2xvYWQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBwb3J0KTtcXG4gXFxuIFxcdHJldCA9IC1FTk9FTlQ7XFxuIFxcdGlmICghZXZ0Y2huZmQpXFxuQEAgLTIxNTIsNyArMjIwMCw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcbiBcXHRjYXNlIEVWVENITlNUQVRfaW50ZXJkb21haW46XFxuIFxcdFxcdGlmIChkYXRhLVxcdTAwM2V1LmV2dGNobi5kZWxpdmVyLnBvcnQucG9ydCkge1xcbi1cXHRcXHRcXHRpZiAoZGF0YS1cXHUwMDNldS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQgXFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGt2bSkpXFxuK1xcdFxcdFxcdGlmIChkYXRhLVxcdTAwM2V1LmV2dGNobi5kZWxpdmVyLnBvcnQucG9ydCBcXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0X25vZXZlbnRmZDsgLyogLUVJTlZBTCAqL1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRldmVudGZkID0gZXZlbnRmZF9jdHhfZmRnZXQoZGF0YS1cXHUwMDNldS5ldnRjaG4uZGVsaXZlci5ldmVudGZkLmZkKTtcXG5AQCAtMjE4NywxMyArMjIzNSwxMyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9hc3NpZ24oc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHR9XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcXG4tXFx0cmV0ID0gaWRyX2FsbG9jKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQsIHBvcnQsIHBvcnQgKyAxLFxcbitcXHRyZXQgPSB4YV9pbnNlcnQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBwb3J0LCBldnRjaG5mZCxcXG4gXFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XFxuLVxcdGlmIChyZXQgXFx1MDAzZT0gMClcXG4rXFx0aWYgKCFyZXQpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKHJldCA9PSAtRU5PU1BDKVxcbitcXHRpZiAocmV0ID09IC1FQlVTWSlcXG4gXFx0XFx0cmV0ID0gLUVFWElTVDtcXG4gb3V0OlxcbiBcXHRpZiAoZXZlbnRmZClcXG5AQCAtMjIwOCw3ICsyMjU2LDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfZGVhc3NpZ24oc3RydWN0IGt2bSAqa3ZtLCB1MzIgcG9ydClcXG4gXFx0c3RydWN0IGV2dGNobmZkICpldnRjaG5mZDtcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4ueGVuX2xvY2spO1xcbi1cXHRldnRjaG5mZCA9IGlkcl9yZW1vdmUoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBwb3J0KTtcXG4rXFx0ZXZ0Y2huZmQgPSB4YV9lcmFzZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIHBvcnQpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4ueGVuX2xvY2spO1xcbiBcXG4gXFx0aWYgKCFldnRjaG5mZClcXG5AQCAtMjIyNCw3ICsyMjcyLDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfZGVhc3NpZ24oc3RydWN0IGt2bSAqa3ZtLCB1MzIgcG9ydClcXG4gc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuIFxcdHN0cnVjdCBldnRjaG5mZCAqZXZ0Y2huZmQsICoqYWxsX2V2dGNobmZkcztcXG4tXFx0aW50IGk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaTtcXG4gXFx0aW50IG4gPSAwO1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XFxuQEAgLTIyMzQsNyArMjI4Miw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0ICogY3JpdGljYWwgc2VjdGlvbiwgZmlyc3QgY29sbGVjdCBhbGwgdGhlIGV2dGNobmZkIG9iamVjdHNcXG4gXFx0ICogaW4gYW4gYXJyYXkgYXMgdGhleSBhcmUgcmVtb3ZlZCBmcm9tIGV2dGNobl9wb3J0cy5cXG4gXFx0ICovXFxuLVxcdGlkcl9mb3JfZWFjaF9lbnRyeShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLCBpKVxcbitcXHR4YV9mb3JfZWFjaChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGksIGV2dGNobmZkKVxcbiBcXHRcXHRuKys7XFxuIFxcbiBcXHRhbGxfZXZ0Y2huZmRzID0ga21hbGxvY19vYmpzKHN0cnVjdCBldnRjaG5mZCAqLCBuKTtcXG5AQCAtMjI0NCw5ICsyMjkyLDkgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHR9XFxuIFxcbiBcXHRuID0gMDtcXG4tXFx0aWRyX2Zvcl9lYWNoX2VudHJ5KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQsIGkpIHtcXG4rXFx0eGFfZm9yX2VhY2goXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBpLCBldnRjaG5mZCkge1xcbiBcXHRcXHRhbGxfZXZ0Y2huZmRzW24rK10gPSBldnRjaG5mZDtcXG4tXFx0XFx0aWRyX3JlbW92ZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLVxcdTAwM2VzZW5kX3BvcnQpO1xcbitcXHRcXHR4YV9lcmFzZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLVxcdTAwM2VzZW5kX3BvcnQpO1xcbiBcXHR9XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XFxuIFxcbkBAIC0yMjcwLDcgKzIzMTgsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2V0YXR0cl9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YVxcbiBcXHRpZiAoZGF0YS1cXHUwMDNldS5ldnRjaG4uZmxhZ3MgPT0gS1ZNX1hFTl9FVlRDSE5fUkVTRVQpXFxuIFxcdFxcdHJldHVybiBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoa3ZtKTtcXG4gXFxuLVxcdGlmICghcG9ydCB8fCBwb3J0IFxcdTAwM2U9IG1heF9ldnRjaG5fcG9ydChrdm0pKVxcbitcXHRpZiAoIXBvcnQgfHwgcG9ydCBcXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKGRhdGEtXFx1MDAzZXUuZXZ0Y2huLmZsYWdzID09IEtWTV9YRU5fRVZUQ0hOX0RFQVNTSUdOKVxcbkBAIC0yMjk3LDEyICsyMzQ1LDEwIEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfZXZ0Y2huX3NlbmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcGFyYW0sIHU2NCAqcilcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG4tXFx0ICogZXZ0Y2huZmQgaXMgcHJvdGVjdGVkIGJ5IGt2bS1cXHUwMDNlc3JjdTsgdGhlIGlkciBsb29rdXAgaW5zdGVhZFxcbi1cXHQgKiBpcyBwcm90ZWN0ZWQgYnkgUkNVLlxcbitcXHQgKiBldnRjaG5mZCBpcyBwcm90ZWN0ZWQgYnkga3ZtLVxcdTAwM2VzcmN1OyB0aGUgeGFfbG9hZCBpcyBSQ1Utc2FmZVxcbitcXHQgKiBpbnRlcm5hbGx5LCBubyBleHBsaWNpdCByY3VfcmVhZF9sb2NrKCkgbmVlZGVkLlxcbiBcXHQgKi9cXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRldnRjaG5mZCA9IGlkcl9maW5kKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgc2VuZC5wb3J0KTtcXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdGV2dGNobmZkID0geGFfbG9hZChcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIHNlbmQucG9ydCk7XFxuIFxcdGlmICghZXZ0Y2huZmQpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuQEAgLTIzNDksMjMgKzIzOTUsMjMgQEAgdm9pZCBrdm1feGVuX2Rlc3Ryb3lfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHZvaWQga3ZtX3hlbl9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSlcXG4ge1xcbiBcXHRtdXRleF9pbml0KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcXG4tXFx0aWRyX2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTtcXG4rXFx0eGFfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMpO1xcbiBcXHRrdm1fZ3BjX2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlLCBrdm0pO1xcbiB9XFxuIFxcbiB2b2lkIGt2bV94ZW5fZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4gXFx0c3RydWN0IGV2dGNobmZkICpldnRjaG5mZDtcXG4tXFx0aW50IGk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaTtcXG4gXFxuIFxcdGt2bV9ncGNfZGVhY3RpdmF0ZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGUpO1xcbiBcXG4tXFx0aWRyX2Zvcl9lYWNoX2VudHJ5KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQsIGkpIHtcXG4rXFx0eGFfZm9yX2VhY2goXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBpLCBldnRjaG5mZCkge1xcbiBcXHRcXHRpZiAoIWV2dGNobmZkLVxcdTAwM2VkZWxpdmVyLnBvcnQucG9ydClcXG4gXFx0XFx0XFx0ZXZlbnRmZF9jdHhfcHV0KGV2dGNobmZkLVxcdTAwM2VkZWxpdmVyLmV2ZW50ZmQuY3R4KTtcXG4gXFx0XFx0a2ZyZWUoZXZ0Y2huZmQpO1xcbiBcXHR9XFxuLVxcdGlkcl9kZXN0cm95KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cyk7XFxuK1xcdHhhX2Rlc3Ryb3koXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTtcXG4gXFxuIFxcdGlmIChrdm0tXFx1MDAzZWFyY2gueGVuLmh2bV9jb25maWcubXNyKVxcbiBcXHRcXHRzdGF0aWNfYnJhbmNoX3Nsb3dfZGVjX2RlZmVycmVkKFxcdTAwMjZrdm1feGVuX2VuYWJsZWQpO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmggYi9hcmNoL3g4Ni9rdm0veGVuLmhcXG5pbmRleCBmMzcyODU1ODU3YTg4Li45ZDA0ZTM1MGJkYjFmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS94ZW4uaFxcbisrKyBiL2FyY2gveDg2L2t2bS94ZW4uaFxcbkBAIC0yMzUsNiArMjM1LDExIEBAIHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8ge1xcbiAjZGVmaW5lIENPTVBBVF9FVlRDSE5fMkxfTlJfQ0hBTk5FTFMgKDggKlxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8sIFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgZXZ0Y2huX3BlbmRpbmcpKVxcbitcXG4rLyogTGF0Y2hlZCBWTS13aWRlIG1vZGU7IHRoZSBLVk0gZXF1aXZhbGVudCBvZiBYZW4ncyAhaGFzXzMyYml0X3NoaW5mbygpLiAqL1xcbisjZGVmaW5lIGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pIFxcXFxcXG4rXFx0KElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiBSRUFEX09OQ0UoKGt2bSktXFx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkpXFxuK1xcbiBzdHJ1Y3QgY29tcGF0X3ZjcHVfcnVuc3RhdGVfaW5mbyB7XFxuICAgICBpbnQgc3RhdGU7XFxuICAgICB1aW50NjRfdCBzdGF0ZV9lbnRyeV90aW1lO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5pbmRleCAwM2JmYzkyODY0YjZlLi4zZGQwNDYwNWYyZTU1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbkBAIC04NTUsNiArODU1LDggQEAgc3RydWN0IGt2bSB7XFxuIFxcdGdmbl90IG1tdV9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0O1xcbiBcXHRnZm5fdCBtbXVfaW52YWxpZGF0ZV9yYW5nZV9lbmQ7XFxuIFxcbitcXHR1bnNpZ25lZCBsb25nIGdwY19pbnZhbGlkYXRlX3NlcTtcXG4rXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlcztcXG4gXFx0dTY0IG1hbnVhbF9kaXJ0eV9sb2dfcHJvdGVjdDtcXG4gXFx0c3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnk7XFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuaW5kZXggNjVlYjI2YTA1MjBkOC4uMTA4ZDQyYzVjMWQ2YSAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xcbkBAIC04MTMsNiArODEzLDE2IEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sXFxuIFxcbiBcXHQvKiBQYWlycyB3aXRoIHRoZSBpbmNyZW1lbnQgaW4gcmFuZ2Vfc3RhcnQoKS4gKi9cXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XFxuK1xcdGt2bS1cXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxKys7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBcyB3aXRoIHRoZSBNTVUgc2VxdWVuY2UgY291bnRlciBhbmQgbW11X2ludmFsaWRhdGVfaW5fcHJvZ3Jlc3MsIHRoZVxcbitcXHQgKiBHUEMgc2VxdWVuY2UgaW5jcmVhc2UgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB0aGUgaW52YWxpZGF0ZSBjb3VudFxcbitcXHQgKiBnb2VzIHRvIHplcm8uICBQYWlycyB3aXRoIHRoZSBzbXBfcm1iKCkgaW5cXG4rXFx0ICogbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKCkuXFxuK1xcdCAqL1xcbitcXHRzbXBfd21iKCk7XFxuK1xcbiBcXHRpZiAoIVdBUk5fT05fT05DRSgha3ZtLVxcdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCkpXFxuIFxcdFxcdC0ta3ZtLVxcdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcXG4gXFx0d2FrZSA9ICFrdm0tXFx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50O1xcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9wZm5jYWNoZS5jIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xcbmluZGV4IDcyOGQyYzFiNDg4YTguLjM2NTk2ODZiOTdjMjQgMTAwNjQ0XFxuLS0tIGEvdmlydC9rdm0vcGZuY2FjaGUuY1xcbisrKyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmNcXG5AQCAtMTI0LDcgKzEyNCw3IEBAIHN0YXRpYyB2b2lkIGdwY191bm1hcChrdm1fcGZuX3QgcGZuLCB2b2lkICpraHZhKVxcbiAjZW5kaWZcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NlcSlcXG4rc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgZ3BjX3NlcSlcXG4ge1xcbiBcXHQvKlxcbiBcXHQgKiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBhY3RzIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXNcXG5AQCAtMTM2LDIwICsxMzYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NcXG4gXFx0ICogTm90ZSwgaXQgZG9lcyBub3QgbWF0dGVyIHRoYXQgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnRcXG4gXFx0ICogaXMgbm90IHByb3RlY3RlZCBieSBncGMtXFx1MDAzZWxvY2suICBJdCBpcyBndWFyYW50ZWVkIHRvXFxuIFxcdCAqIGJlIGVsZXZhdGVkIGJlZm9yZSB0aGUgbW11X25vdGlmaWVyIGFjcXVpcmVzIGdwYy1cXHUwMDNlbG9jaywgYW5kXFxuLVxcdCAqIGlzbid0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgbW11X2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuXFxuK1xcdCAqIGlzbid0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuXFxuIFxcdCAqL1xcbiBcXHRpZiAoa3ZtLVxcdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudClcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBFbnN1cmUgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgaXMgcmVhZCBiZWZvcmVcXG4tXFx0ICogbW11X2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW5cXG4tXFx0ICogbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGVcXG4rXFx0ICogZ3BjX2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW5cXG4rXFx0ICoga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlXFxuIFxcdCAqIG9sZCAobm9uLXplcm8pIHZhbHVlIG9mIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IG9yIHRoZVxcbi1cXHQgKiBuZXcgKGluY3JlbWVudGVkKSB2YWx1ZSBvZiBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgb2JzZXJ2ZWQuXFxuK1xcdCAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIGdwY19pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cXG4gXFx0ICovXFxuIFxcdHNtcF9ybWIoKTtcXG4tXFx0cmV0dXJuIGt2bS1cXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxICE9IG1tdV9zZXE7XFxuK1xcdHJldHVybiBrdm0tXFx1MDAzZWdwY19pbnZhbGlkYXRlX3NlcSAhPSBncGNfc2VxO1xcbiB9XFxuIFxcbiBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcXG5AQCAtMTU4LDcgKzE1OCw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxcbiBcXHR2b2lkICpvbGRfa2h2YSA9ICh2b2lkICopUEFHRV9BTElHTl9ET1dOKCh1aW50cHRyX3QpZ3BjLVxcdTAwM2VraHZhKTtcXG4gXFx0a3ZtX3Bmbl90IG5ld19wZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDtcXG4gXFx0dm9pZCAqbmV3X2todmEgPSBOVUxMO1xcbi1cXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZ3BjX3NlcTtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIFxcbiBcXHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xcbkBAIC0xODEsNyArMTgxLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXFxuIFxcdGdwYy1cXHUwMDNldmFsaWQgPSBmYWxzZTtcXG4gXFxuIFxcdGRvIHtcXG4tXFx0XFx0bW11X3NlcSA9IGdwYy1cXHUwMDNla3ZtLVxcdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XFxuK1xcdFxcdGdwY19zZXEgPSBncGMtXFx1MDAzZWt2bS1cXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxO1xcbiBcXHRcXHRzbXBfcm1iKCk7XFxuIFxcbiBcXHRcXHR3cml0ZV91bmxvY2tfaXJxKFxcdTAwMjZncGMtXFx1MDAzZWxvY2spO1xcbkBAIC0yMzIsNyArMjMyLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXFxuIFxcdFxcdCAqIGF0dGVtcHRpbmcgdG8gcmVmcmVzaC5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdFdBUk5fT05fT05DRShncGMtXFx1MDAzZXZhbGlkKTtcXG4tXFx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cXHUwMDNla3ZtLCBtbXVfc2VxKSk7XFxuK1xcdH0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtXFx1MDAzZWt2bSwgZ3BjX3NlcSkpO1xcbiBcXG4gXFx0Z3BjLVxcdTAwM2V2YWxpZCA9IHRydWU7XFxuIFxcdGdwYy1cXHUwMDNlcGZuID0gbmV3X3BmbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mzg6MjMuOTY5MjQ2MTQxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MDk5MzEzMTA5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX1g4NlwiLFxuICAgIFwiS1ZNX1hFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV94ZW5fdmNwdV9zZXRfYXR0clwiLFxuICAgIFwia3ZtX3hlbl9odm1fc2V0X2F0dHJcIixcbiAgICBcImt2bV94ZW5faHlwZXJjYWxsXCIsXG4gICAgXCJrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c1wiLFxuICAgIFwiX19rdm1feGVuX2hhc19pbnRlcnJ1cHRcIixcbiAgICBcImt2bV94ZW5fc2V0X2V2dGNobl9mYXN0XCIsXG4gICAgXCJrdm1feGVuX2h2bV9ldnRjaG5fc2VuZFwiLFxuICAgIFwia3ZtX2dwY19yZWZyZXNoXCIsXG4gICAgXCJrdm1fZ3BjX2FjdGl2YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBhbmQgY29uY3VycmVuY3ktY3JpdGljYWwgY2hhbmdlcyB0byBLVk0ncyBYZW4gZW11bGF0aW9uIGFuZCBnZm5fdG9fcGZuX2NhY2hlIChHUEMpIHN1YnN5c3RlbS4gVGhlc2UgaW5jbHVkZSBtaWdyYXRpbmcgWGVuIGV2ZW50IGNoYW5uZWwgc3RvcmFnZSBmcm9tIElEUiB0byBYQXJyYXksIGVuZm9yY2luZyBhbGlnbm1lbnQgY2hlY2tzIGZvciB2Q1BVIGluZm8gR1BBL0hWQSwgdXNpbmcgZXhwbGljaXQgMzItYml0IGF0b21pYyBiaXRvcHMgdG8gcHJldmVudCBzcGxpdC1sb2NrIEFDIGV4Y2VwdGlvbnMgb24gdW5hbGlnbmVkIHN0cnVjdHVyZXMsIGludHJvZHVjaW5nIFNSQ1UgbG9ja2luZyBpbiBfX2t2bV94ZW5faGFzX2ludGVycnVwdCwgYW5kIHNlcGFyYXRpbmcgR1BDIGludmFsaWRhdGlvbiBzZXF1ZW5jaW5nIGZyb20gZ2VuZXJhbCBNTVUgaW52YWxpZGF0aW9uIHNlcXVlbmNpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSB2aXJ0dWFsaXphdGlvbiBpb2N0bHMsIGh5cGVyY2FsbHMsIGFuZCBldmVudCBjaGFubmVsIGRlbGl2ZXJ5IG1lY2hhbmlzbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMzZTAzZmYzYjhjMzc5ZDhiMzI4MjBjOTllYmMwMmQ4MDJlMzAzYjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDA0OjM4OjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDY4M2JiOGJmNDNhOTQuLjNhZjczOTVjMjQzMGEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMTYsNiArMTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9wYXJhLmhcdTAwM2VcbkBAIC0xMTEzLDcgKzExMTQsNyBAQCBzdHJ1Y3Qga3ZtX3hlbiB7XG4gXHRib29sIHJ1bnN0YXRlX3VwZGF0ZV9mbGFnO1xuIFx0dTggdXBjYWxsX3ZlY3RvcjtcbiBcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlIHNoaW5mb19jYWNoZTtcbi1cdHN0cnVjdCBpZHIgZXZ0Y2huX3BvcnRzO1xuK1x0c3RydWN0IHhhcnJheSBldnRjaG5fcG9ydHM7XG4gXHR1bnNpZ25lZCBsb25nIHBvbGxfbWFza1tCSVRTX1RPX0xPTkdTKEtWTV9NQVhfVkNQVVMpXTtcbiBcbiBcdHN0cnVjdCBrdm1feGVuX2h2bV9jb25maWcgaHZtX2NvbmZpZztcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmMgYi9hcmNoL3g4Ni9rdm0veGVuLmNcbmluZGV4IDk5OGNkY2I2YWEzMDMuLjcxODM5NjM0MGQzYzEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmNcbisrKyBiL2FyY2gveDg2L2t2bS94ZW4uY1xuQEAgLTczLDcgKzczLDcgQEAgc3RhdGljIGludCBrdm1feGVuX3NoYXJlZF9pbmZvX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBzaGFyZWRfaW5mbywgd2MpICE9IDB4YzAwKTtcbiBcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2hhcmVkX2luZm8sIHdjX3NlY19oaSkgIT0gMHhjMGMpO1xuIFxuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xuK1x0aWYgKGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pKSB7XG4gXHRcdHN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4gXG4gXHRcdHdjX3NlY19oaSA9IFx1MDAyNnNoaW5mby1cdTAwM2V3Y19zZWNfaGk7XG5AQCAtMzg5LDcgKzM4OSw3IEBAIHN0YXRpYyB2b2lkIGt2bV94ZW5fdXBkYXRlX3J1bnN0YXRlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdiwgYm9vbCBhdG9taWMpXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sIHRpbWUpICE9XG4gXHRcdCAgICAgc2l6ZW9mKHZ4LVx1MDAzZXJ1bnN0YXRlX3RpbWVzKSk7XG4gXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiB2LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbitcdGlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8odi1cdTAwM2Vrdm0pKSB7XG4gXHRcdHVzZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8pO1xuIFx0XHR0aW1lc19vZnMgPSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvLFxuIFx0XHRcdFx0ICAgICBzdGF0ZV9lbnRyeV90aW1lKTtcbkBAIC02NzYsMjggKzY3NiwzMiBAQCB2b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdilcbiBcdH1cbiBcbiBcdC8qIE5vdyBncGMtXHUwMDNla2h2YSBpcyBhIHZhbGlkIGtlcm5lbCBhZGRyZXNzIGZvciB0aGUgdmNwdV9pbmZvICovXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiB2LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbitcdGlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8odi1cdTAwM2Vrdm0pKSB7XG4gXHRcdHN0cnVjdCB2Y3B1X2luZm8gKnZpID0gZ3BjLVx1MDAzZWtodmE7XG4rXHRcdHZvaWQgKnZpX3BlbmRpbmdfc2VsID0gXHUwMDI2dmktXHUwMDNlZXZ0Y2huX3BlbmRpbmdfc2VsO1xuIFxuLVx0XHRhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggXCJvcnEgJTAsICUxXFxuXCJcbi1cdFx0XHQgICAgIFwibm90cSAlMFxcblwiXG4tXHRcdFx0ICAgICBMT0NLX1BSRUZJWCBcImFuZHEgJTAsICUyXFxuXCJcbi1cdFx0XHQgICAgIDogXCI9clwiIChldnRjaG5fcGVuZGluZ19zZWwpLFxuLVx0XHRcdCAgICAgICBcIittXCIgKHZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCksXG4tXHRcdFx0ICAgICAgIFwiK21cIiAodi1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpXG4tXHRcdFx0ICAgICA6IFwiMFwiIChldnRjaG5fcGVuZGluZ19zZWwpKTtcbitcdFx0aWYgKElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpdmlfcGVuZGluZ19zZWwsIHNpemVvZih1NjQpKSkge1xuK1x0XHRcdGF0b21pYzY0X29yKGV2dGNobl9wZW5kaW5nX3NlbCwgdmlfcGVuZGluZ19zZWwpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGF0b21pY19vcihldnRjaG5fcGVuZGluZ19zZWwsIHZpX3BlbmRpbmdfc2VsKTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFRoZSBjYXN0IGtlZXBzIHRoZSBzaGlmdCB3ZWxsLWRlZmluZWQgb24gMzItYml0LFxuK1x0XHRcdCAqIHdoZXJlIGV2dGNobl9wZW5kaW5nX3NlbCBpcyAzMiBiaXRzIHdpZGUgYW5kIHRoaXNcbitcdFx0XHQgKiBicmFuY2ggaXMgdW5yZWFjaGFibGUgYW55d2F5ICh0aGlzIGlzIGluc2lkZVxuK1x0XHRcdCAqIGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbygpLCB3aGljaCBpcyBnYXRlZCBvblxuK1x0XHRcdCAqIElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSkuXG4rXHRcdFx0ICovXG4rXHRcdFx0YXRvbWljX29yKCh1NjQpZXZ0Y2huX3BlbmRpbmdfc2VsIFx1MDAzZVx1MDAzZSAzMixcbitcdFx0XHRcdCAgdmlfcGVuZGluZ19zZWwgKyA0KTtcbitcdFx0fVxuK1xuK1x0XHRhdG9taWM2NF9hbmRub3QoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKVx1MDAyNnYtXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKTtcbiBcdFx0V1JJVEVfT05DRSh2aS1cdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xuIFx0fSBlbHNlIHtcbi1cdFx0dTMyIGV2dGNobl9wZW5kaW5nX3NlbDMyID0gZXZ0Y2huX3BlbmRpbmdfc2VsO1xuIFx0XHRzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmkgPSBncGMtXHUwMDNla2h2YTtcbiBcbi1cdFx0YXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYIFwib3JsICUwLCAlMVxcblwiXG4tXHRcdFx0ICAgICBcIm5vdGwgJTBcXG5cIlxuLVx0XHRcdCAgICAgTE9DS19QUkVGSVggXCJhbmRsICUwLCAlMlxcblwiXG4tXHRcdFx0ICAgICA6IFwiPXJcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpLFxuLVx0XHRcdCAgICAgICBcIittXCIgKHZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCksXG4tXHRcdFx0ICAgICAgIFwiK21cIiAodi1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpXG4tXHRcdFx0ICAgICA6IFwiMFwiIChldnRjaG5fcGVuZGluZ19zZWwzMikpO1xuK1x0XHRhdG9taWNfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKVx1MDAyNnZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCk7XG4rXHRcdGF0b21pY19hbmRub3QoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKVx1MDAyNnYtXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKTtcbiBcdFx0V1JJVEVfT05DRSh2aS1cdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xuIFx0fVxuIFxuQEAgLTcyOCw2ICs3MzIsMTYgQEAgaW50IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdilcbiBcdEJVSUxEX0JVR19PTihzaXplb2YocmMpICE9XG4gXHRcdCAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpKTtcbiBcbitcdC8qXG4rXHQgKiBrdm1fZ3BjX2NoZWNrKCkgY2hlY2tzIHRoZSBtZW1zbG90IGdlbmVyYXRpb24sIHNvIGt2bS1cdTAwM2VzcmN1IG11c3QgYmVcbitcdCAqIGhlbGQuIE1vc3QgY2FsbGVycyBob2xkIGl0IGFscmVhZHksIGJ1dCB0aGlzIGlzIGFsc28gcmVhY2hlZCBmcm9tXG4rXHQgKiBrdm1fZW11bGF0ZV9oYWx0KCkgb24gdGhlIFZNLUV4aXQgcGF0aCBhbmQgZnJvbSBrdm1fdmNwdV9ibG9jaygpLFxuK1x0ICogd2hlcmUgdmNwdV9lbnRlcl9ndWVzdCgpIGhhcyBhbHJlYWR5IGRyb3BwZWQgdGhlIHZDUFUncyBTUkNVIGxvY2suXG4rXHQgKiBUYWtpbmcgU1JDVSBkb2VzIG5vdCBzbGVlcCwgc28gaXQgaXMgc2FmZSBldmVuIGluIHRoZSBhdG9taWMgY2FzZVxuK1x0ICogd2hpY2ggaXMgaGFuZGxlZCBiZWxvdy5cbitcdCAqL1xuK1x0Z3VhcmQoc3JjdSkoXHUwMDI2di1cdTAwM2Vrdm0tXHUwMDNlc3JjdSk7XG4rXG4gXHRyZWFkX2xvY2tfaXJxc2F2ZShcdTAwMjZncGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0d2hpbGUgKCFrdm1fZ3BjX2NoZWNrKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkge1xuIFx0XHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdwYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG5AQCAtOTQxLDYgKzk1NSwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFxuK1x0XHRcdHIgPSAtRU5YSU87XG4rXHRcdFx0aWYgKCFJU19BTElHTkVEKGRhdGEtXHUwMDNldS5ncGEsIHNpemVvZih1MzIpKSlcbitcdFx0XHRcdGJyZWFrO1xuK1xuIFx0XHRcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pbmZvX2NhY2hlLFxuIFx0XHRcdFx0XHQgICAgIGRhdGEtXHUwMDNldS5ncGEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7XG4gXHRcdH0gZWxzZSB7XG5AQCAtOTUwLDYgKzk2OCwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFxuK1x0XHRcdHIgPSAtRU5YSU87XG4rXHRcdFx0aWYgKCFJU19BTElHTkVEKGRhdGEtXHUwMDNldS5odmEsIHNpemVvZih1MzIpKSlcbitcdFx0XHRcdGJyZWFrO1xuK1xuIFx0XHRcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlX2h2YShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZSxcbiBcdFx0XHRcdFx0XHQgZGF0YS1cdTAwM2V1Lmh2YSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTtcbiBcdFx0fVxuQEAgLTk5Myw3ICsxMDE1LDcgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSlcbiBcdFx0ICogYWRkcmVzcywgdGhhdCdzIGFjdHVhbGx5IE9LLiBrdm1feGVuX3VwZGF0ZV9ydW5zdGF0ZV9ndWVzdCgpXG4gXHRcdCAqIHdpbGwgY29wZS5cbiBcdFx0ICovXG4tXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSlcbitcdFx0aWYgKGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyh2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdFx0c3ogPSBzaXplb2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRzeiA9IHNpemVvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfcnVuc3RhdGVfaW5mbyk7XG5AQCAtMTQzOSwxNiArMTQ2MSwyMSBAQCBzdGF0aWMgaW50IGt2bV94ZW5faHlwZXJjYWxsX2NvbXBsZXRlX3VzZXJzcGFjZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4ga3ZtX3hlbl9oeXBlcmNhbGxfc2V0X3Jlc3VsdCh2Y3B1LCBydW4tXHUwMDNleGVuLnUuaGNhbGwucmVzdWx0KTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KHN0cnVjdCBrdm0gKmt2bSlcbitzdGF0aWMgaW5saW5lIGludCBtYXhfZXZ0Y2huX3BvcnQoYm9vbCBoYXNfNjRiaXRfc2hpbmZvKVxuIHtcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpXG4rXHRpZiAoaGFzXzY0Yml0X3NoaW5mbylcbiBcdFx0cmV0dXJuIEVWVENITl8yTF9OUl9DSEFOTkVMUztcbiBcdGVsc2VcbiBcdFx0cmV0dXJuIENPTVBBVF9FVlRDSE5fMkxfTlJfQ0hBTk5FTFM7XG4gfVxuIFxuLXN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cyxcbi1cdFx0XHQgICAgICAgZXZ0Y2huX3BvcnRfdCAqcG9ydHMpXG4rc3RhdGljIGlubGluZSBpbnQga3ZtX21heF9ldnRjaG5fcG9ydChzdHJ1Y3Qga3ZtICprdm0pXG4re1xuK1x0cmV0dXJuIG1heF9ldnRjaG5fcG9ydChrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKSk7XG4rfVxuK1xuK3N0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaGFzXzY0Yml0X3NoaW5mbyxcbitcdFx0XHQgICAgICAgaW50IG5yX3BvcnRzLCBldnRjaG5fcG9ydF90ICpwb3J0cylcbiB7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlO1xuQEAgLTE0NjMsNyArMTQ5MCw3IEBAIHN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cyxcbiBcdFx0Z290byBvdXRfcmN1O1xuIFxuIFx0cmV0ID0gZmFsc2U7XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSB7XG4rXHRpZiAoaGFzXzY0Yml0X3NoaW5mbykge1xuIFx0XHRzdHJ1Y3Qgc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuIFx0XHRwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fcGVuZGluZztcbiBcdH0gZWxzZSB7XG5AQCAtMTQ4NSw5ICsxNTEyLDEwIEBAIHN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cyxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcbitzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsXG4gXHRcdFx0XHQgdTY0IHBhcmFtLCB1NjQgKnIpXG4ge1xuK1x0Ym9vbCBoYXNfNjRiaXRfc2hpbmZvID0ga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtXHUwMDNla3ZtKTtcbiBcdHN0cnVjdCBzY2hlZF9wb2xsIHNjaGVkX3BvbGw7XG4gXHRldnRjaG5fcG9ydF90IHBvcnQsICpwb3J0cztcbiBcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XG5AQCAtMTQ5Nyw3ICsxNTI1LDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxuIFx0ICAgICEodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4uaHZtX2NvbmZpZy5mbGFncyBcdTAwMjYgS1ZNX1hFTl9IVk1fQ09ORklHX0VWVENITl9TRU5EKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgIWxvbmdtb2RlKSB7XG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiAhaXNfNjRiaXQpIHtcbiBcdFx0c3RydWN0IGNvbXBhdF9zY2hlZF9wb2xsIHNwMzI7XG4gXG4gXHRcdC8qIFNhbml0eSBjaGVjayB0aGF0IHRoZSBjb21wYXQgc3RydWN0IGRlZmluaXRpb24gaXMgY29ycmVjdCAqL1xuQEAgLTE1NDYsMjAgKzE1NzQsMjAgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2NoZWRfcG9sbC5ucl9wb3J0czsgaSsrKSB7XG4tXHRcdGlmIChwb3J0c1tpXSBcdTAwM2U9IG1heF9ldnRjaG5fcG9ydCh2Y3B1LVx1MDAzZWt2bSkpIHtcbitcdFx0aWYgKHBvcnRzW2ldIFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKSB7XG4gXHRcdFx0KnIgPSAtRUlOVkFMO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXHR9XG4gXG4gXHRpZiAoc2NoZWRfcG9sbC5ucl9wb3J0cyA9PSAxKVxuLVx0XHR2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huID0gcG9ydDtcbitcdFx0V1JJVEVfT05DRSh2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huLCBwb3J0KTtcbiBcdGVsc2Vcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLnhlbi5wb2xsX2V2dGNobiA9IC0xO1xuK1x0XHRXUklURV9PTkNFKHZjcHUtXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4sIC0xKTtcbiBcbiBcdHNldF9iaXQodmNwdS1cdTAwM2V2Y3B1X2lkeCwgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4ucG9sbF9tYXNrKTtcbiBcbi1cdGlmICghd2FpdF9wZW5kaW5nX2V2ZW50KHZjcHUsIHNjaGVkX3BvbGwubnJfcG9ydHMsIHBvcnRzKSkge1xuK1x0aWYgKCF3YWl0X3BlbmRpbmdfZXZlbnQodmNwdSwgaGFzXzY0Yml0X3NoaW5mbywgc2NoZWRfcG9sbC5ucl9wb3J0cywgcG9ydHMpKSB7XG4gXHRcdGt2bV9zZXRfbXBfc3RhdGUodmNwdSwgS1ZNX01QX1NUQVRFX0hBTFRFRCk7XG4gXG4gXHRcdGlmIChzY2hlZF9wb2xsLnRpbWVvdXQpXG5AQCAtMTU3NCw3ICsxNjAyLDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxuIFx0XHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9SVU5OQUJMRSk7XG4gXHR9XG4gXG4tXHR2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huID0gMDtcbitcdFdSSVRFX09OQ0UodmNwdS1cdTAwM2VhcmNoLnhlbi5wb2xsX2V2dGNobiwgMCk7XG4gXHQqciA9IDA7XG4gb3V0OlxuIFx0LyogUmVhbGx5LCB0aGlzIGlzIG9ubHkgbmVlZGVkIGluIGNhc2Ugb2YgdGltZW91dCAqL1xuQEAgLTE1OTQsMTIgKzE2MjIsMTIgQEAgc3RhdGljIHZvaWQgY2FuY2VsX2V2dGNobl9wb2xsKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiB9XG4gXG4tc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4rc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsXG4gXHRcdFx0XHQgICBpbnQgY21kLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBTQ0hFRE9QX3BvbGw6XG4tXHRcdGlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBsb25nbW9kZSwgcGFyYW0sIHIpKVxuK1x0XHRpZiAoa3ZtX3hlbl9zY2hlZG9wX3BvbGwodmNwdSwgaXNfNjRiaXQsIHBhcmFtLCByKSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0ZmFsbHRocm91Z2g7XG4gXHRjYXNlIFNDSEVET1BfeWllbGQ6XG5AQCAtMTYxOCw3ICsxNjQ2LDcgQEAgc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyIHtcbiAgICAgdWludDMyX3QgZmxhZ3M7XG4gfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTtcbiBcbi1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLFxuK3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsIGludCBjbWQsXG4gXHRcdFx0XHQgIGludCB2Y3B1X2lkLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciBvbmVzaG90O1xuQEAgLTE2NjIsNyArMTY5MCw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsXG4gXHRcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyLCBmbGFncykgIT1cbiBcdFx0XHQgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpKTtcbiBcbi1cdFx0aWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgcGFyYW0sIFx1MDAyNm9uZXNob3QsIGxvbmdtb2RlID8gc2l6ZW9mKG9uZXNob3QpIDpcbitcdFx0aWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgcGFyYW0sIFx1MDAyNm9uZXNob3QsIGlzXzY0Yml0ID8gc2l6ZW9mKG9uZXNob3QpIDpcbiBcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciksIFx1MDAyNmUpKSB7XG4gXHRcdFx0KnIgPSAtRUZBVUxUO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuQEAgLTE2OTQsNyArMTcyMiw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWludDY0X3QgdGltZW91dCxcbiBcbiBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGJvb2wgbG9uZ21vZGU7XG4rXHRib29sIGlzXzY0Yml0O1xuIFx0dTY0IGlucHV0LCBwYXJhbXNbNl0sIHIgPSAtRU5PU1lTO1xuIFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XG4gXHR1OCBjcGw7XG5AQCAtMTcwNCw4ICsxNzMyLDggQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAgICBrdm1faHZfaHlwZXJjYWxsX2VuYWJsZWQodmNwdSkpXG4gXHRcdHJldHVybiBrdm1faHZfaHlwZXJjYWxsKHZjcHUpO1xuIFxuLVx0bG9uZ21vZGUgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xuLVx0aWYgKCFsb25nbW9kZSkge1xuK1x0aXNfNjRiaXQgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xuK1x0aWYgKCFpc182NGJpdCkge1xuIFx0XHRpbnB1dCA9IGt2bV9lYXhfcmVhZCh2Y3B1KTtcbiBcdFx0cGFyYW1zWzBdID0ga3ZtX2VieF9yZWFkKHZjcHUpO1xuIFx0XHRwYXJhbXNbMV0gPSBrdm1fZWN4X3JlYWQodmNwdSk7XG5AQCAtMTc1MSwxNyArMTc3OSwxNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHZjcHUsIHBhcmFtc1sxXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1Jfc2NoZWRfb3A6XG4tXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGxvbmdtb2RlLCBwYXJhbXNbMF0sXG4rXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGlzXzY0Yml0LCBwYXJhbXNbMF0sXG4gXHRcdFx0XHRcdFx0IHBhcmFtc1sxXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1JfdmNwdV9vcDpcbi1cdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sXG4rXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3ZjcHVfb3AodmNwdSwgaXNfNjRiaXQsIHBhcmFtc1swXSwgcGFyYW1zWzFdLFxuIFx0XHRcdFx0XHRcdHBhcmFtc1syXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1Jfc2V0X3RpbWVyX29wOiB7XG4gXHRcdHU2NCB0aW1lb3V0ID0gcGFyYW1zWzBdO1xuIFx0XHQvKiBJbiAzMi1iaXQgbW9kZSwgdGhlIDY0LWJpdCB0aW1lb3V0IGlzIGluIHR3byAzMi1iaXQgcGFyYW1zLiAqL1xuLVx0XHRpZiAoIWxvbmdtb2RlKVxuK1x0XHRpZiAoIWlzXzY0Yml0KVxuIFx0XHRcdHRpbWVvdXQgfD0gcGFyYW1zWzFdIFx1MDAzY1x1MDAzYyAzMjtcbiBcdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHZjcHUsIHRpbWVvdXQsIFx1MDAyNnIpO1xuIFx0XHRicmVhaztcbkBAIC0xNzc2LDcgKzE4MDQsNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIGhhbmRsZV9pbl91c2Vyc3BhY2U6XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1hFTjtcbiBcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi50eXBlID0gS1ZNX0VYSVRfWEVOX0hDQUxMO1xuLVx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwubG9uZ21vZGUgPSBsb25nbW9kZTtcbitcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi51LmhjYWxsLmxvbmdtb2RlID0gaXNfNjRiaXQ7XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2V4ZW4udS5oY2FsbC5jcGwgPSBjcGw7XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2V4ZW4udS5oY2FsbC5pbnB1dCA9IGlucHV0O1xuIFx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwucGFyYW1zWzBdID0gcGFyYW1zWzBdO1xuQEAgLTE3OTQsNyArMTgyMiw3IEBAIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gc3RhdGljIHZvaWQga3ZtX3hlbl9jaGVja19wb2xsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG9ydClcbiB7XG4tXHRpbnQgcG9sbF9ldnRjaG4gPSB2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huO1xuK1x0aW50IHBvbGxfZXZ0Y2huID0gUkVBRF9PTkNFKHZjcHUtXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4pO1xuIFxuIFx0aWYgKChwb2xsX2V2dGNobiA9PSBwb3J0IHx8IHBvbGxfZXZ0Y2huID09IC0xKSBcdTAwMjZcdTAwMjZcbiBcdCAgICB0ZXN0X2FuZF9jbGVhcl9iaXQodmNwdS1cdTAwM2V2Y3B1X2lkeCwgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4ucG9sbF9tYXNrKSkge1xuQEAgLTE4MTYsOCArMTg0NCw5IEBAIHN0YXRpYyB2b2lkIGt2bV94ZW5fY2hlY2tfcG9sbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBvcnQpXG4gaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZTtcbitcdGJvb2wgaGFzXzY0Yml0X3NoaW5mbyA9IGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pO1xuK1x0dW5zaWduZWQgbG9uZyAqcGVuZGluZ19iaXRzLCAqbWFza19iaXRzLCB2aV9wZW5kaW5nX3NlbF9vZnM7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHR1bnNpZ25lZCBsb25nICpwZW5kaW5nX2JpdHMsICptYXNrX2JpdHM7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHBvcnRfd29yZF9iaXQ7XG4gXHRib29sIGtpY2tfdmNwdSA9IGZhbHNlO1xuQEAgLTE4MzMsNyArMTg2Miw3IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdFdSSVRFX09OQ0UoeGUtXHUwMDNldmNwdV9pZHgsIHZjcHUtXHUwMDNldmNwdV9pZHgpO1xuIFx0fVxuIFxuLVx0aWYgKHhlLVx1MDAzZXBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbitcdGlmICh4ZS1cdTAwM2Vwb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHJjID0gLUVXT1VMREJMT0NLO1xuQEAgLTE4NDQsMTYgKzE4NzMsMjMgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdGlmICgha3ZtX2dwY19jaGVjayhncGMsIFBBR0VfU0laRSkpXG4gXHRcdGdvdG8gb3V0X3JjdTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbitcdGlmIChoYXNfNjRiaXRfc2hpbmZvKSB7XG4gXHRcdHN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4gXHRcdHBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopXHUwMDI2c2hpbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nO1xuIFx0XHRtYXNrX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fbWFzaztcbiBcdFx0cG9ydF93b3JkX2JpdCA9IHhlLVx1MDAzZXBvcnQgLyA2NDtcbitcbitcdFx0dmlfcGVuZGluZ19zZWxfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3BlbmRpbmdfc2VsKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuIFx0XHRwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fcGVuZGluZztcbiBcdFx0bWFza19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZzaGluZm8tXHUwMDNlZXZ0Y2huX21hc2s7XG4gXHRcdHBvcnRfd29yZF9iaXQgPSB4ZS1cdTAwM2Vwb3J0IC8gMzI7XG4rXG4rXHRcdHZpX3BlbmRpbmdfc2VsX29mcyA9IG9mZnNldG9mKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fcGVuZGluZ19zZWwpO1xuK1xuK1x0XHQvKiB0ZXN0X2FuZF9zZXRfYml0KCkgbmVlZHMgNjQtYml0IGFsaWdubWVudCwgYnV0IHRoYXQncyBPSyAqL1xuK1x0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgZXZ0Y2huX3BlbmRpbmcpIFx1MDAyNiA3KTtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtMTg2OSw2ICsxOTA1LDggQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0cmMgPSAtRU5PVENPTk47IC8qIE1hc2tlZCAqL1xuIFx0XHRrdm1feGVuX2NoZWNrX3BvbGxlcih2Y3B1LCB4ZS1cdTAwM2Vwb3J0KTtcbiBcdH0gZWxzZSB7XG4rXHRcdGJvb2wgb2xkO1xuK1xuIFx0XHRyYyA9IDE7IC8qIERlbGl2ZXJlZCB0byB0aGUgYml0bWFwIGluIHNoYXJlZF9pbmZvLiAqL1xuIFx0XHQvKiBOb3cgc3dpdGNoIHRvIHRoZSB2Q1BVJ3MgdmNwdV9pbmZvIHRvIHNldCB0aGUgaW5kZXggYW5kIHBlbmRpbmdfc2VsICovXG4gXHRcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbkBAIC0xODg1LDE5ICsxOTIzLDI5IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdFx0Z290byBvdXRfcmN1O1xuIFx0XHR9XG4gXG4tXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbi1cdFx0XHRzdHJ1Y3QgdmNwdV9pbmZvICp2Y3B1X2luZm8gPSBncGMtXHUwMDNla2h2YTtcbi1cdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCwgXHUwMDI2dmNwdV9pbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCkpIHtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodmNwdV9pbmZvLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4tXHRcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmNwdV9pbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4tXHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnRfd29yZF9iaXQsXG4tXHRcdFx0XHRcdCAgICAgICh1bnNpZ25lZCBsb25nICopXHUwMDI2dmNwdV9pbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCkpIHtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodmNwdV9pbmZvLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4tXHRcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuLVx0XHRcdH1cbitcdFx0LypcbitcdFx0ICogRXhwbGljaXRseSB1c2UgYSAzMi1iaXQgYnRzbCBpbnN0ZWFkIG9mIHRlc3RfYW5kX3NldF9iaXQoKSxcbitcdFx0ICogd2hpY2ggd291bGQgdXNlIGJ0c3Egb24geDg2LTY0LiBUaGUgdmNwdV9pbmZvIGlzIGd1ZXN0LVxuK1x0XHQgKiBjb250cm9sbGVkIGFuZCBvbmx5IHJlcXVpcmVkIHRvIGJlIDMyLWJpdCBhbGlnbmVkLCBzbyBhXG4rXHRcdCAqIDY0LWJpdCBhY2Nlc3MgY291bGQgZ2VuZXJhdGUgYSBzcGxpdC1sb2NrICNBQy5cbitcdFx0ICpcbitcdFx0ICogTm90ZSwgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgdGVzdF9hbmRfc2V0X2JpdCgpIG9uXG4rXHRcdCAqIHBlbmRpbmdfYml0cyBhYm92ZTogdGhhdCBpcyBpbiB0aGUgcGVyLVZNIHNoYXJlZF9pbmZvLCB3aGljaFxuK1x0XHQgKiBpcyBwYWdlIGFsaWduZWQsIHNvIHRoZSBhY2Nlc3MgaXMgZ3VhcmFudGVlZCB0byBiZSA2NC1iaXRcbitcdFx0ICogYWxpZ25lZC5cbitcdFx0ICovXG4rXHRcdG9sZCA9IEdFTl9CSU5BUllfUk1XY2MoTE9DS19QUkVGSVggXCJidHNsXCIsXG4rXHRcdFx0XHQgICAgICAgKih1MzIgKikoZ3BjLVx1MDAzZWtodmEgKyB2aV9wZW5kaW5nX3NlbF9vZnMpLFxuK1x0XHRcdFx0ICAgICAgIGMsIFwiSXJcIiwgcG9ydF93b3JkX2JpdCk7XG4rXHRcdGlmICghb2xkKSB7XG4rXHRcdFx0c3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtXHUwMDNla2h2YTtcbitcbitcdFx0XHQvKiBObyBuZWVkIGZvciBjb21wYXQgaGFuZGxpbmcgKi9cbitcdFx0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSAhPVxuK1x0XHRcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSk7XG4rXG4rXHRcdFx0V1JJVEVfT05DRSh2aS1cdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xuK1x0XHRcdGtpY2tfdmNwdSA9IHRydWU7XG4gXHRcdH1cbiBcbiBcdFx0LyogRm9yIHRoZSBwZXItdkNQVSBsYXBpYyB2ZWN0b3IsIGRlbGl2ZXIgaXQgYXMgTVNJLiAqL1xuQEAgLTE5OTUsNyArMjA0Myw3IEBAIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXG4gXHQvKlxuLVx0ICogRG9uJ3QgY2hlY2sgZm9yIHRoZSBwb3J0IGJlaW5nIHdpdGhpbiByYW5nZSBvZiBtYXhfZXZ0Y2huX3BvcnQoKS5cbitcdCAqIERvbid0IGNoZWNrIGZvciB0aGUgcG9ydCBiZWluZyB3aXRoaW4gcmFuZ2Ugb2Yga3ZtX21heF9ldnRjaG5fcG9ydCgpLlxuIFx0ICogVXNlcnNwYWNlIGNhbiBjb25maWd1cmUgd2hhdCBldmVyIHRhcmdldHMgaXQgbGlrZXM7IGV2ZW50cyBqdXN0IHdvbid0XG4gXHQgKiBiZSBkZWxpdmVyZWQgaWYvd2hpbGUgdGhlIHRhcmdldCBpcyBpbnZhbGlkLCBqdXN0IGxpa2UgdXNlcnNwYWNlIGNhblxuIFx0ICogY29uZmlndXJlIE1TSXMgd2hpY2ggdGFyZ2V0IG5vbi1leGlzdGVudCBBUElDcy5cbkBAIC0yMDA0LDggKzIwNTIsOCBAQCBpbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxuIFx0ICogY2FuIGJlIHJlc3RvcmVkICppbmRlcGVuZGVudGx5KiBvZiBvdGhlciB0aGluZ3MgbGlrZSBjcmVhdGluZyB2Q1BVcyxcbiBcdCAqIHdpdGhvdXQgaW1wb3NpbmcgYW4gb3JkZXJpbmcgZGVwZW5kZW5jeSBvbiB1c2Vyc3BhY2UuICBJbiB0aGlzXG4gXHQgKiBwYXJ0aWN1bGFyIGNhc2UsIHRoZSBwcm9ibGVtYXRpYyBvcmRlcmluZyB3b3VsZCBiZSB3aXRoIHNldHRpbmcgdGhlXG4tXHQgKiBYZW4gJ2xvbmcgbW9kZScgZmxhZywgd2hpY2ggY2hhbmdlcyBtYXhfZXZ0Y2huX3BvcnQoKSB0byBhbGxvdyA0MDk2XG4tXHQgKiBpbnN0ZWFkIG9mIDEwMjQgZXZlbnQgY2hhbm5lbHMuXG4rXHQgKiBYZW4gJ2xvbmcgbW9kZScgZmxhZywgd2hpY2ggY2hhbmdlcyBrdm1fbWF4X2V2dGNobl9wb3J0KCkgdG8gYWxsb3dcbitcdCAqIDQwOTYgaW5zdGVhZCBvZiAxMDI0IGV2ZW50IGNoYW5uZWxzLlxuIFx0ICovXG4gXG4gXHQvKiBXZSBvbmx5IHN1cHBvcnQgMiBsZXZlbCBldmVudCBjaGFubmVscyBmb3Igbm93ICovXG5AQCAtMjA0Miw3ICsyMDkwLDcgQEAgaW50IGt2bV94ZW5faHZtX2V2dGNobl9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pcnFfcm91dGluZ194ZW5fZXZ0Y2huICpcbiBcdHN0cnVjdCBrdm1feGVuX2V2dGNobiBlO1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICghdXhlLVx1MDAzZXBvcnQgfHwgdXhlLVx1MDAzZXBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbitcdGlmICghdXhlLVx1MDAzZXBvcnQgfHwgdXhlLVx1MDAzZXBvcnQgXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0LyogV2Ugb25seSBzdXBwb3J0IDIgbGV2ZWwgZXZlbnQgY2hhbm5lbHMgZm9yIG5vdyAqL1xuQEAgLTIwOTMsNyArMjE0MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX3VwZGF0ZShzdHJ1Y3Qga3ZtICprdm0sXG4gXG4gXHQvKiBQcm90ZWN0IHdyaXRlcyB0byBldnRjaG5mZCBhcyB3ZWxsIGFzIHRoZSBpZHIgbG9va3VwLiAgKi9cbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbi1cdGV2dGNobmZkID0gaWRyX2ZpbmQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCk7XG4rXHRldnRjaG5mZCA9IHhhX2xvYWQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCk7XG4gXG4gXHRyZXQgPSAtRU5PRU5UO1xuIFx0aWYgKCFldnRjaG5mZClcbkBAIC0yMTUyLDcgKzIyMDAsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9hc3NpZ24oc3RydWN0IGt2bSAqa3ZtLFxuIFxuIFx0Y2FzZSBFVlRDSE5TVEFUX2ludGVyZG9tYWluOlxuIFx0XHRpZiAoZGF0YS1cdTAwM2V1LmV2dGNobi5kZWxpdmVyLnBvcnQucG9ydCkge1xuLVx0XHRcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4rXHRcdFx0aWYgKGRhdGEtXHUwMDNldS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQgXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4gXHRcdFx0XHRnb3RvIG91dF9ub2V2ZW50ZmQ7IC8qIC1FSU5WQUwgKi9cbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRldmVudGZkID0gZXZlbnRmZF9jdHhfZmRnZXQoZGF0YS1cdTAwM2V1LmV2dGNobi5kZWxpdmVyLmV2ZW50ZmQuZmQpO1xuQEAgLTIxODcsMTMgKzIyMzUsMTMgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfYXNzaWduKHN0cnVjdCBrdm0gKmt2bSxcbiBcdH1cbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbi1cdHJldCA9IGlkcl9hbGxvYyhcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBldnRjaG5mZCwgcG9ydCwgcG9ydCArIDEsXG4rXHRyZXQgPSB4YV9pbnNlcnQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCwgZXZ0Y2huZmQsXG4gXHRcdFx0R0ZQX0tFUk5FTCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbi1cdGlmIChyZXQgXHUwMDNlPSAwKVxuK1x0aWYgKCFyZXQpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHJldCA9PSAtRU5PU1BDKVxuK1x0aWYgKHJldCA9PSAtRUJVU1kpXG4gXHRcdHJldCA9IC1FRVhJU1Q7XG4gb3V0OlxuIFx0aWYgKGV2ZW50ZmQpXG5AQCAtMjIwOCw3ICsyMjU2LDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfZGVhc3NpZ24oc3RydWN0IGt2bSAqa3ZtLCB1MzIgcG9ydClcbiBcdHN0cnVjdCBldnRjaG5mZCAqZXZ0Y2huZmQ7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XG4tXHRldnRjaG5mZCA9IGlkcl9yZW1vdmUoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCk7XG4rXHRldnRjaG5mZCA9IHhhX2VyYXNlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIHBvcnQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XG4gXG4gXHRpZiAoIWV2dGNobmZkKVxuQEAgLTIyMjQsNyArMjI3Miw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2RlYXNzaWduKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHBvcnQpXG4gc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCBldnRjaG5mZCAqZXZ0Y2huZmQsICoqYWxsX2V2dGNobmZkcztcbi1cdGludCBpO1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuIFx0aW50IG4gPSAwO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4ueGVuX2xvY2spO1xuQEAgLTIyMzQsNyArMjI4Miw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KHN0cnVjdCBrdm0gKmt2bSlcbiBcdCAqIGNyaXRpY2FsIHNlY3Rpb24sIGZpcnN0IGNvbGxlY3QgYWxsIHRoZSBldnRjaG5mZCBvYmplY3RzXG4gXHQgKiBpbiBhbiBhcnJheSBhcyB0aGV5IGFyZSByZW1vdmVkIGZyb20gZXZ0Y2huX3BvcnRzLlxuIFx0ICovXG4tXHRpZHJfZm9yX2VhY2hfZW50cnkoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQsIGkpXG4rXHR4YV9mb3JfZWFjaChcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBpLCBldnRjaG5mZClcbiBcdFx0bisrO1xuIFxuIFx0YWxsX2V2dGNobmZkcyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgZXZ0Y2huZmQgKiwgbik7XG5AQCAtMjI0NCw5ICsyMjkyLDkgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0fVxuIFxuIFx0biA9IDA7XG4tXHRpZHJfZm9yX2VhY2hfZW50cnkoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQsIGkpIHtcbitcdHhhX2Zvcl9lYWNoKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGksIGV2dGNobmZkKSB7XG4gXHRcdGFsbF9ldnRjaG5mZHNbbisrXSA9IGV2dGNobmZkO1xuLVx0XHRpZHJfcmVtb3ZlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLVx1MDAzZXNlbmRfcG9ydCk7XG4rXHRcdHhhX2VyYXNlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLVx1MDAzZXNlbmRfcG9ydCk7XG4gXHR9XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbiBcbkBAIC0yMjcwLDcgKzIzMTgsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2V0YXR0cl9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YVxuIFx0aWYgKGRhdGEtXHUwMDNldS5ldnRjaG4uZmxhZ3MgPT0gS1ZNX1hFTl9FVlRDSE5fUkVTRVQpXG4gXHRcdHJldHVybiBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoa3ZtKTtcbiBcbi1cdGlmICghcG9ydCB8fCBwb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4rXHRpZiAoIXBvcnQgfHwgcG9ydCBcdTAwM2U9IGt2bV9tYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoZGF0YS1cdTAwM2V1LmV2dGNobi5mbGFncyA9PSBLVk1fWEVOX0VWVENITl9ERUFTU0lHTilcbkBAIC0yMjk3LDEyICsyMzQ1LDEwIEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfZXZ0Y2huX3NlbmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcGFyYW0sIHU2NCAqcilcbiBcdH1cbiBcbiBcdC8qXG4tXHQgKiBldnRjaG5mZCBpcyBwcm90ZWN0ZWQgYnkga3ZtLVx1MDAzZXNyY3U7IHRoZSBpZHIgbG9va3VwIGluc3RlYWRcbi1cdCAqIGlzIHByb3RlY3RlZCBieSBSQ1UuXG4rXHQgKiBldnRjaG5mZCBpcyBwcm90ZWN0ZWQgYnkga3ZtLVx1MDAzZXNyY3U7IHRoZSB4YV9sb2FkIGlzIFJDVS1zYWZlXG4rXHQgKiBpbnRlcm5hbGx5LCBubyBleHBsaWNpdCByY3VfcmVhZF9sb2NrKCkgbmVlZGVkLlxuIFx0ICovXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRldnRjaG5mZCA9IGlkcl9maW5kKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgc2VuZC5wb3J0KTtcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0ZXZ0Y2huZmQgPSB4YV9sb2FkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgc2VuZC5wb3J0KTtcbiBcdGlmICghZXZ0Y2huZmQpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC0yMzQ5LDIzICsyMzk1LDIzIEBAIHZvaWQga3ZtX3hlbl9kZXN0cm95X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHZvaWQga3ZtX3hlbl9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRtdXRleF9pbml0KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XG4tXHRpZHJfaW5pdChcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTtcbitcdHhhX2luaXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cyk7XG4gXHRrdm1fZ3BjX2luaXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZSwga3ZtKTtcbiB9XG4gXG4gdm9pZCBrdm1feGVuX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCBldnRjaG5mZCAqZXZ0Y2huZmQ7XG4tXHRpbnQgaTtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbiBcdGt2bV9ncGNfZGVhY3RpdmF0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlKTtcbiBcbi1cdGlkcl9mb3JfZWFjaF9lbnRyeShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBldnRjaG5mZCwgaSkge1xuK1x0eGFfZm9yX2VhY2goXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgaSwgZXZ0Y2huZmQpIHtcbiBcdFx0aWYgKCFldnRjaG5mZC1cdTAwM2VkZWxpdmVyLnBvcnQucG9ydClcbiBcdFx0XHRldmVudGZkX2N0eF9wdXQoZXZ0Y2huZmQtXHUwMDNlZGVsaXZlci5ldmVudGZkLmN0eCk7XG4gXHRcdGtmcmVlKGV2dGNobmZkKTtcbiBcdH1cbi1cdGlkcl9kZXN0cm95KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMpO1xuK1x0eGFfZGVzdHJveShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTtcbiBcbiBcdGlmIChrdm0tXHUwMDNlYXJjaC54ZW4uaHZtX2NvbmZpZy5tc3IpXG4gXHRcdHN0YXRpY19icmFuY2hfc2xvd19kZWNfZGVmZXJyZWQoXHUwMDI2a3ZtX3hlbl9lbmFibGVkKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmggYi9hcmNoL3g4Ni9rdm0veGVuLmhcbmluZGV4IGYzNzI4NTU4NTdhODguLjlkMDRlMzUwYmRiMWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmhcbisrKyBiL2FyY2gveDg2L2t2bS94ZW4uaFxuQEAgLTIzNSw2ICsyMzUsMTEgQEAgc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbyB7XG4gI2RlZmluZSBDT01QQVRfRVZUQ0hOXzJMX05SX0NIQU5ORUxTICg4ICpcdFx0XHRcdFxcXG4gXHRcdFx0XHQgICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgXFxcbiBcdFx0XHRcdFx0XHQgICBldnRjaG5fcGVuZGluZykpXG4rXG4rLyogTGF0Y2hlZCBWTS13aWRlIG1vZGU7IHRoZSBLVk0gZXF1aXZhbGVudCBvZiBYZW4ncyAhaGFzXzMyYml0X3NoaW5mbygpLiAqL1xuKyNkZWZpbmUga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkgXFxcbitcdChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IFJFQURfT05DRSgoa3ZtKS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpKVxuK1xuIHN0cnVjdCBjb21wYXRfdmNwdV9ydW5zdGF0ZV9pbmZvIHtcbiAgICAgaW50IHN0YXRlO1xuICAgICB1aW50NjRfdCBzdGF0ZV9lbnRyeV90aW1lO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggMDNiZmM5Mjg2NGI2ZS4uM2RkMDQ2MDVmMmU1NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtODU1LDYgKzg1NSw4IEBAIHN0cnVjdCBrdm0ge1xuIFx0Z2ZuX3QgbW11X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQ7XG4gXHRnZm5fdCBtbXVfaW52YWxpZGF0ZV9yYW5nZV9lbmQ7XG4gXG4rXHR1bnNpZ25lZCBsb25nIGdwY19pbnZhbGlkYXRlX3NlcTtcbitcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlcztcbiBcdHU2NCBtYW51YWxfZGlydHlfbG9nX3Byb3RlY3Q7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RlbnRyeTtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggNjVlYjI2YTA1MjBkOC4uMTA4ZDQyYzVjMWQ2YSAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcbisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbkBAIC04MTMsNiArODEzLDE2IEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sXG4gXG4gXHQvKiBQYWlycyB3aXRoIHRoZSBpbmNyZW1lbnQgaW4gcmFuZ2Vfc3RhcnQoKS4gKi9cbiBcdHNwaW5fbG9jayhcdTAwMjZrdm0tXHUwMDNlbW5faW52YWxpZGF0ZV9sb2NrKTtcbitcdGt2bS1cdTAwM2VncGNfaW52YWxpZGF0ZV9zZXErKztcbitcbitcdC8qXG4rXHQgKiBBcyB3aXRoIHRoZSBNTVUgc2VxdWVuY2UgY291bnRlciBhbmQgbW11X2ludmFsaWRhdGVfaW5fcHJvZ3Jlc3MsIHRoZVxuK1x0ICogR1BDIHNlcXVlbmNlIGluY3JlYXNlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgdGhlIGludmFsaWRhdGUgY291bnRcbitcdCAqIGdvZXMgdG8gemVyby4gIFBhaXJzIHdpdGggdGhlIHNtcF9ybWIoKSBpblxuK1x0ICogbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKCkuXG4rXHQgKi9cbitcdHNtcF93bWIoKTtcbitcbiBcdGlmICghV0FSTl9PTl9PTkNFKCFrdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpKVxuIFx0XHQtLWt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcbiBcdHdha2UgPSAha3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50O1xuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMgYi92aXJ0L2t2bS9wZm5jYWNoZS5jXG5pbmRleCA3MjhkMmMxYjQ4OGE4Li4zNjU5Njg2Yjk3YzI0IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vcGZuY2FjaGUuY1xuKysrIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xuQEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMgdm9pZCBncGNfdW5tYXAoa3ZtX3Bmbl90IHBmbiwgdm9pZCAqa2h2YSlcbiAjZW5kaWZcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NlcSlcbitzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBncGNfc2VxKVxuIHtcbiBcdC8qXG4gXHQgKiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBhY3RzIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXNcbkBAIC0xMzYsMjAgKzEzNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc1xuIFx0ICogTm90ZSwgaXQgZG9lcyBub3QgbWF0dGVyIHRoYXQgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnRcbiBcdCAqIGlzIG5vdCBwcm90ZWN0ZWQgYnkgZ3BjLVx1MDAzZWxvY2suICBJdCBpcyBndWFyYW50ZWVkIHRvXG4gXHQgKiBiZSBlbGV2YXRlZCBiZWZvcmUgdGhlIG1tdV9ub3RpZmllciBhY3F1aXJlcyBncGMtXHUwMDNlbG9jaywgYW5kXG4tXHQgKiBpc24ndCBkcm9wcGVkIHVudGlsIGFmdGVyIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyB1cGRhdGVkLlxuK1x0ICogaXNuJ3QgZHJvcHBlZCB1bnRpbCBhZnRlciBncGNfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC5cbiBcdCAqL1xuIFx0aWYgKGt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHQvKlxuIFx0ICogRW5zdXJlIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGlzIHJlYWQgYmVmb3JlXG4tXHQgKiBtbXVfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxuLVx0ICogbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGVcbitcdCAqIGdwY19pbnZhbGlkYXRlX3NlcS4gIFRoaXMgcGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluXG4rXHQgKiBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGVcbiBcdCAqIG9sZCAobm9uLXplcm8pIHZhbHVlIG9mIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IG9yIHRoZVxuLVx0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW11X2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxuK1x0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxuIFx0ICovXG4gXHRzbXBfcm1iKCk7XG4tXHRyZXR1cm4ga3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcSAhPSBtbXVfc2VxO1xuK1x0cmV0dXJuIGt2bS1cdTAwM2VncGNfaW52YWxpZGF0ZV9zZXEgIT0gZ3BjX3NlcTtcbiB9XG4gXG4gc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG5AQCAtMTU4LDcgKzE1OCw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuIFx0dm9pZCAqb2xkX2todmEgPSAodm9pZCAqKVBBR0VfQUxJR05fRE9XTigodWludHB0cl90KWdwYy1cdTAwM2VraHZhKTtcbiBcdGt2bV9wZm5fdCBuZXdfcGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XG4gXHR2b2lkICpuZXdfa2h2YSA9IE5VTEw7XG4tXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4rXHR1bnNpZ25lZCBsb25nIGdwY19zZXE7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcbiBcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XG5AQCAtMTgxLDcgKzE4MSw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuIFx0Z3BjLVx1MDAzZXZhbGlkID0gZmFsc2U7XG4gXG4gXHRkbyB7XG4tXHRcdG1tdV9zZXEgPSBncGMtXHUwMDNla3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcbitcdFx0Z3BjX3NlcSA9IGdwYy1cdTAwM2Vrdm0tXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxO1xuIFx0XHRzbXBfcm1iKCk7XG4gXG4gXHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2Z3BjLVx1MDAzZWxvY2spO1xuQEAgLTIzMiw3ICsyMzIsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcdFx0ICogYXR0ZW1wdGluZyB0byByZWZyZXNoLlxuIFx0XHQgKi9cbiBcdFx0V0FSTl9PTl9PTkNFKGdwYy1cdTAwM2V2YWxpZCk7XG4tXHR9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLVx1MDAzZWt2bSwgbW11X3NlcSkpO1xuK1x0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cdTAwM2Vrdm0sIGdwY19zZXEpKTtcbiBcbiBcdGdwYy1cdTAwM2V2YWxpZCA9IHRydWU7XG4gXHRncGMtXHUwMDNlcGZuID0gbmV3X3BmbjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjM4OjIzLjk2OTI0NzgxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgzODc5ODcwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gUGF0Y2ggU2VyaWVzIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBwYXRjaCBzZXJpZXMgcmV2ZWFscyBzb21lIGludGVyZXN0aW5nIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkOiBgYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaGAsIGBhcmNoL3g4Ni9rdm0veGVuLmNgLCBgYXJjaC94ODYva3ZtL3hlbi5oYCwgYGluY2x1ZGUvbGludXgva3ZtX2hvc3QuaGAsIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCwgYW5kIGB2aXJ0L2t2bS9wZm5jYWNoZS5jYC4gSW1tZWRpYXRlbHksIEkgc2VlIEtWTSBpbnZvbHZlbWVudCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gWGVuIGVtdWxhdGlvbiB3aXRoaW4gdGhlIHg4NiBLVk0gY29udGV4dCwgYXMgd2VsbCBhcyB0aGUgZ2VuZXJpYyBLVk0gcGZuY2FjaGUgYW5kIE1NVSBub3RpZmllciBsb2dpYy4gVGhpcyBwaXF1ZXMgbXkgaW50ZXJlc3Qg4oCTIEtWTSBpcyBhIGNvcmUgY29tcG9uZW50IG9mIHZpcnR1YWxpemF0aW9uLCBtYWtpbmcgaXQgYSBwb3RlbnRpYWxseSBmcnVpdGZ1bCB0YXJnZXQgZm9yIGZ1enppbmcuIEl0J3MgYWNjZXNzaWJsZSB3aXRoaW4gUUVNVSwgVk1zIHdpdGggS1ZNLCBhbmQgcG90ZW50aWFsbHkgZXZlbiB0aHJvdWdoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvciB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHdpdGggYC9kZXYva3ZtYC5cblxuTm93LCBkaWdnaW5nIGludG8gdGhlIGZ1bmN0aW9uYWwgY2hhbmdlczogV2UgaGF2ZSBhbiBYQXJyYXkgY29udmVyc2lvbiByZXBsYWNpbmcgYW4gSURSIGZvciBYZW4gZXZlbnQgY2hhbm5lbHMgaW4gS1ZNIFhlbiBlbXVsYXRpb24gKGBldnRjaG5fcG9ydHNgKSwgc29tZSBhbGlnbm1lbnQgY2hlY2tzIGZvciBHUEEvSFZBIHdoZW4gYWN0aXZhdGluZyB0aGUgYHZjcHVfaW5mb2AgY2FjaGUgKGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgKSwgYW5kIGEgc3BsaXQgb2YgYG1tdV9pbnZhbGlkYXRlX3NlcWAgaW50byBgZ3BjX2ludmFsaWRhdGVfc2VxYCBmb3IgdGhlIEdQQy4gVGhlcmUncyBhbHNvIG1lbnRpb24gb2YgYGJ0c2xgIGZvciBhdG9taWMgYml0bWFwIG9wZXJhdGlvbnMsIGFpbWluZyB0byBhdm9pZCB0aG9zZSBwZXNreSBzcGxpdC1sb2NrICNBQyBmYXVsdHMgb24gdW5hbGlnbmVkIGB2Y3B1X2luZm9gIGBldnRjaG5fcGVuZGluZ19zZWxgIGFjY2Vzc2VzLiBUaGVyZSdzIGEgYGd1YXJkKHNyY3UpYCB1c2FnZSwgYW5kIHNvbWUgZml4ZXMvcmVmYWN0b3JpbmdzIHJlbGF0ZWQgdG8gdGhvc2UgNjQvMzItYml0IFhlbiBzaGFyZWQgaW5mbyBtb2RlIGNoZWNrcyAoYGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mb2ApLlxuXG5Gcm9tIGEgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZSwgYWxsIG9mIHRoZXNlIGNoYW5nZXMgdG91Y2ggY29yZSBrZXJuZWwgbG9naWMgd2l0aGluIEtWTSwgc3BlY2lmaWNhbGx5IFhlbiBlbXVsYXRpb24uIE1vcmVvdmVyLCB0aGVyZSdzIGNvbmN1cnJlbmN5IGltcGxpY2F0aW9ucyBoZXJlLCB3aGljaCBpcyBhbHdheXMgYSByZWQgZmxhZyB0aGF0IGRyYXdzIG1lIHRvd2FyZHMgZnV6emluZywgc28gSSdsbCBzZXQgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5OZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCB0byBrbm93IHdoaWNoIEtjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIGFsbCB0aGlzIGZ1bmN0aW9uYWxpdHksIHNvIEknbGwgY2hlY2sgYEtWTWAsIGBLVk1fWEVOYCwgYW5kIGFueSBvdGhlciByZWxldmFudCBvcHRpb25zLiBJJ2xsIHVzZSBhIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgYW5kIGB2aXJ0L2t2bS9LY29uZmlnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDozODozMi4zNTcyMzc1NDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4MjgwMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzM6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA4OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOC1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMzOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mzg6MzIuNDA2MDY5MjU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk2NTA2MzAwNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIEtWTSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgS1ZNIGlzIGNvbmZpZ3VyZWQgaW4gdGhpcyB4ODYgZW52aXJvbm1lbnQsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBYZW4gYW5kIHRoZSBJbnRlbC9BTUQgaW1wbGVtZW50YXRpb25zLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBhbmQgZm9jdXMgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIGBjb25maWcgS1ZNX1hFTmAsIGBjb25maWcgS1ZNYCwgYW5kIHRoZW4gdGhlIHByb2Nlc3Nvci1zcGVjaWZpYyBvcHRpb25zLCBgS1ZNX0lOVEVMYCBhbmQgYEtWTV9BTURgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhlc2Ugb3B0aW9ucyBpbmZsdWVuY2UgZWFjaCBvdGhlci4gV2hlcmUgZG9lcyB0aGUgWGVuIGh5cGVydmlzb3IgZml0IGluIHdpdGggYSBLVk0gc2V0dXAgaGVyZT8gQW5kIGhvdyBkbyB3ZSBjaG9vc2UgYmV0d2VlbiBJbnRlbCBhbmQgQU1EIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnM/IExldCdzIHRyYWNlIHRocm91Z2ggdGhlc2UgZGVmaW5pdGlvbnMgYW5kIGZpZ3VyZSBvdXQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIEtWTSBidWlsZCBzdHJhdGVneSBmb3IgdGhpcyBwbGF0Zm9ybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDozODo1Mi4wNTY3MDI1MjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEtWTSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdHNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG4gICA3OlxcdFxcbiAgIDg6XFx0bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbiAgIDk6XFx0XFx0Ym9vbCBcXFwiVmlydHVhbGl6YXRpb25cXFwiXFxuICAxMDpcXHRcXHRkZWZhdWx0IHlcXG4gIDExOlxcdFxcdGhlbHBcXG4gIDEyOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIHVzaW5nIHlvdXIgTGludXggaG9zdCB0byBydW4gb3RoZXJcXG4gIDEzOlxcdFxcdCAgb3BlcmF0aW5nIHN5c3RlbXMgaW5zaWRlIHZpcnR1YWwgbWFjaGluZXMgKGd1ZXN0cykuXFxuICAxNDpcXHRcXHQgIFRoaXMgb3B0aW9uIGFsb25lIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZC5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0aWYgVklSVFVBTElaQVRJT05cXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIEtWTV9YODZcXG4gIDIxOlxcdFxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4gIDIyOlxcdFxcdHNlbGVjdCBLVk1fQ09NTU9OXFxuICAyMzpcXHRcXHRzZWxlY3QgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xcbiAgMjQ6XFx0XFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcXG4gIDI1OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXFxuICAyNjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUEZOQ0FDSEVcXG4gIDI3OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX1RTT1xcbiAgMjg6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxcbiAgMjk6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcXG4gIDMwOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xcbiAgMzE6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTVxcbiAgMzI6XFx0XFx0c2VsZWN0IFZIT1NUX1RBU0tcXG4gIDMzOlxcdFxcdHNlbGVjdCBLVk1fQVNZTkNfUEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBVU0VSX1JFVFVSTl9OT1RJRklFUlxcbiAgMzU6XFx0XFx0c2VsZWN0IEtWTV9NTUlPXFxuICAzNjpcXHRcXHRzZWxlY3QgU0NIRURfSU5GT1xcbiAgMzc6XFx0XFx0c2VsZWN0IFBFUkZfRVZFTlRTXFxuICAzODpcXHRcXHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFNcXG4gIDM5OlxcdFxcdHNlbGVjdCBQRVJGX0dVRVNUX01FRElBVEVEX1BNVVxcbiAgNDA6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX01TSVxcbiAgNDE6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcXG4gIDQyOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9OT19QT0xMXFxuICA0MzpcXHRcXHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcXG4gIDQ0OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcXG4gIDQ1OlxcdFxcdHNlbGVjdCBLVk1fVkZJT1xcbiAgNDY6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX1BNX05PVElGSUVSIGlmIFBNXFxuICA0NzpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcXG4gIDQ4OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxuICA0OTpcXHRcXHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcXG4gIDUwOlxcdFxcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XFxuICA1MTpcXHRcXG4gIDUyOlxcdGNvbmZpZyBLVk1cXG4gIDUzOlxcdFxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuICA1NDpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9MT0NBTF9BUElDXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIFN1cHBvcnQgaG9zdGluZyBmdWxseSB2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyBoYXJkd2FyZVxcbiAgNTc6XFx0XFx0ICB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiAgWW91IHdpbGwgbmVlZCBhIGZhaXJseSByZWNlbnRcXG4gIDU4OlxcdFxcdCAgcHJvY2Vzc29yIGVxdWlwcGVkIHdpdGggdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gWW91IHdpbGwgYWxzb1xcbiAgNTk6XFx0XFx0ICBuZWVkIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBvZiB0aGUgcHJvY2Vzc29yIG1vZHVsZXMgYmVsb3cuXFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgdGhyb3VnaFxcbiAgNjI6XFx0XFx0ICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS5cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDY1OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLlxcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2ODpcXHRcXG4gIDY5OlxcdGNvbmZpZyBLVk1fV0VSUk9SXFxuICA3MDpcXHRcXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuICA3MTpcXHRcXHQjIERpc2FsbG93IEtWTSdzIC1XZXJyb3IgaWYgS0FTQU4gaXMgZW5hYmxlZCwgZS5nLiB0byBndWFyZCBhZ2FpbnN0XFxuICA3MjpcXHRcXHQjIHJhbmRvbWl6ZWQgY29uZmlncyBmcm9tIHNlbGVjdGluZyBLVk1fV0VSUk9SPXksIHdoaWNoIGRvZXNuJ3QgcGxheVxcbiAgNzM6XFx0XFx0IyBuaWNlIHdpdGggS0FTQU4uICBLQVNBTiBidWlsZHMgZ2VuZXJhdGVzIHdhcm5pbmdzIGZvciB0aGUgZGVmYXVsdFxcbiAgNzQ6XFx0XFx0IyBGUkFNRV9XQVJOLCBpLmUuIEtWTV9XRVJST1I9eSB3aXRoIEtBU0FOPXkgcmVxdWlyZXMgc3BlY2lhbCB0dW5pbmcuXFxuICA3NTpcXHRcXHQjIEJ1aWxkaW5nIEtWTSB3aXRoIC1XZXJyb3IgYW5kIEtBU0FOIGlzIHN0aWxsIGRvYWJsZSB2aWEgZW5hYmxpbmdcXG4gIDc2OlxcdFxcdCMgdGhlIGtlcm5lbC13aWRlIFdFUlJPUj15LlxcbiAgNzc6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2IFxcdTAwMjZcXHUwMDI2ICgoRVhQRVJUIFxcdTAwMjZcXHUwMDI2ICFLQVNBTikgfHwgV0VSUk9SKVxcbiAgNzg6XFx0XFx0aGVscFxcbiAgNzk6XFx0XFx0ICBBZGQgLVdlcnJvciB0byB0aGUgYnVpbGQgZmxhZ3MgZm9yIEtWTS5cXG4gIDgwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDozODo1Mi4wNTY4MjUxODRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzY2NDkzMjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBpbiBgYXJjaC94ODYva3ZtL0tjb25maWdgIGNvbmNlcm5pbmcgYEtWTV9YRU5gOlxuXG4qKkV4YW1pbmluZyBLVk1fWEVOIGluIGFyY2gveDg2L2t2bS9LY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGxpbmVzIDE5MC0yMjUgb2YgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYEtWTV9YRU5gLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcywgbWF5YmUgc29tZSBkZWZhdWx0IHZhbHVlcywgYW5kIHBvdGVudGlhbGx5IGEgZGVzY3JpcHRpb24gb2Ygd2hhdCBlbmFibGluZyB0aGlzIG9wdGlvbiBhY3R1YWxseSAqZG9lcyogaW4gdGhlIGNvbnRleHQgb2YgS1ZNIG9uIHg4Ni4gSSdtIGFzc3VtaW5nIHRoaXMgc2VjdGlvbiBkZWZpbmVzIHRoZSBpbnRlcmZhY2Ugb3IgaW50ZWdyYXRpb24gcG9pbnQgYmV0d2VlbiBLVk0gYW5kIFhlbiwgcHJlc3VtYWJseSBhbGxvd2luZyBLVk0gdG8gcnVuIGFzIGEgZ3Vlc3QgaW5zaWRlIGEgWGVuIGh5cGVydmlzb3IsIHdoaWNoIGlzIGEgcHJldHR5IGNvbW1vbiB1c2UtY2FzZS4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgY2x1ZXMgYWJvdXQgd2hldGhlciBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hhdCBvdGhlciBmZWF0dXJlcyBpdCBtaWdodCBkZXBlbmQgb24gKGUuZy4sIHNwZWNpZmljIENQVSBmZWF0dXJlcywgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucyksIGFuZCBhbnkgY2F2ZWF0cyBvciB3YXJuaW5ncyB0aGF0IG1pZ2h0IGJlIGluY2x1ZGVkIGluIHRoZSBjb21tZW50cy4gSSdsbCBhbHNvIHRyeSB0byB1bmRlcnN0YW5kIGlmIGl0J3MgY29uc2lkZXJlZCBleHBlcmltZW50YWwgb3Igc3RhYmxlLiBVbmRlcnN0YW5kaW5nIHRoaXMgY29uZmlndXJhdGlvbiBpcyBpbXBvcnRhbnQsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9yIGludGVncmF0aW5nIGRpZmZlcmVudCBoeXBlcnZpc29ycyB3aXRoaW4gYSBzaW5nbGUgc3lzdGVtLiBJJ20ga2VlbiB0byBzZWUgaWYgdGhlcmUgaXMgYW55IG1lbnRpb24gb2Ygd2hldGhlciB0aGlzIGlzIGRlcGVuZGVudCBvbiB0aGUgYFhFTmAgY29uZmlndXJhdGlvbiBvcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDM3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDozODo1NS44MjMzMjA1MjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTA6XFx0XFx0ICBmaXJtd2FyZSB0byBpbXBsZW1lbnQgVUVGSSBzZWN1cmUgYm9vdC5cXG4gMTkxOlxcdFxcbiAxOTI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAxOTM6XFx0XFxuIDE5NDpcXHRjb25maWcgS1ZNX0hZUEVSVlxcbiAxOTU6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbiAxOTY6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2XFxuIDE5NzpcXHRcXHRkZWZhdWx0IHlcXG4gMTk4OlxcdFxcdGhlbHBcXG4gMTk5OlxcdFxcdCAgUHJvdmlkZXMgS1ZNIHN1cHBvcnQgZm9yIGVtdWxhdGluZyBNaWNyb3NvZnQgSHlwZXItVi4gIFRoaXMgYWxsb3dzIEtWTVxcbiAyMDA6XFx0XFx0ICB0byBleHBvc2UgYSBzdWJzZXQgb2YgdGhlIHBhcmF2aXJ0dWFsaXplZCBpbnRlcmZhY2VzIGRlZmluZWQgaW4gdGhlXFxuIDIwMTpcXHRcXHQgIEh5cGVyLVYgSHlwZXJ2aXNvciBUb3AtTGV2ZWwgRnVuY3Rpb25hbCBTcGVjaWZpY2F0aW9uIChUTEZTKTpcXG4gMjAyOlxcdFxcdCAgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvdmlydHVhbGl6YXRpb24vaHlwZXItdi1vbi13aW5kb3dzL3JlZmVyZW5jZS90bGZzXFxuIDIwMzpcXHRcXHQgIFRoZXNlIGludGVyZmFjZXMgYXJlIHJlcXVpcmVkIGZvciB0aGUgY29ycmVjdCBhbmQgcGVyZm9ybWFudCBmdW5jdGlvbmluZ1xcbiAyMDQ6XFx0XFx0ICBvZiBXaW5kb3dzIGFuZCBIeXBlci1WIGd1ZXN0cyBvbiBLVk0uXFxuIDIwNTpcXHRcXG4gMjA2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgXFxcIllcXFwiLlxcbiAyMDc6XFx0XFxuIDIwODpcXHRjb25maWcgS1ZNX1hFTlxcbiAyMDk6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuIDIxMDpcXHRcXHRkZXBlbmRzIG9uIEtWTV9YODZcXG4gMjExOlxcdFxcdGhlbHBcXG4gMjEyOlxcdFxcdCAgUHJvdmlkZXMgS1ZNIHN1cHBvcnQgZm9yIHRoZSBob3N0aW5nIFhlbiBIVk0gZ3Vlc3RzIGFuZFxcbiAyMTM6XFx0XFx0ICBwYXNzaW5nIFhlbiBoeXBlcmNhbGxzIHRvIHVzZXJzcGFjZS5cXG4gMjE0OlxcdFxcbiAyMTU6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IFxcXCJOXFxcIi5cXG4gMjE2OlxcdFxcbiAyMTc6XFx0Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG4gMjE4OlxcdFxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuIDIxOTpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTFxcbiAyMjA6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2XFxuIDIyMTpcXHRcXHRkZXBlbmRzIG9uIEVYUEVSVFxcbiAyMjI6XFx0XFx0aGVscFxcbiAyMjM6XFx0XFx0ICBFbmFibGVzIHJ1bnRpbWUgYXNzZXJ0aW9ucyBpbiBLVk0ncyBNTVUgdGhhdCBhcmUgdG9vIGNvc3RseSB0byBlbmFibGVcXG4gMjI0OlxcdFxcdCAgaW4gYW55dGhpbmcgcmVtb3RlbHkgcmVzZW1ibGluZyBhIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsIGUuZy4gdGhpc1xcbiAyMjU6XFx0XFx0ICBnYXRlcyBjb2RlIHRoYXQgdmVyaWZpZXMgYSB0by1iZS1mcmVlZCBwYWdlIHRhYmxlIGRvZXNuJ3QgaGF2ZSBhbnlcXG4gMjI2OlxcdFxcdCAgcHJlc2VudCBTUFRFcy5cXG4gMjI3OlxcdFxcbiAyMjg6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IFxcXCJOXFxcIi5cXG4gMjI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDozODo1NS44MjMzOTU5OTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDM4OTI3ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzIHNwZWNpZmljIGNvZGUgc25pcHBldDpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSBDb21waWxhdGlvbiBvbiB4ODYqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBLVk0gYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIFhlbi4gIFdlIGFscmVhZHkgdW5kZXJzdGFuZCBzb21lIG9mIHRoZSBiYXNpY3MsIGJ1dCBpdCdzIHRpbWUgdG8gZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB4ZW4ub2AgYW5kIGBwZm5jYWNoZS5vYCBhcmUgYWN0dWFsbHkgY29tcGlsZWQgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlJ3MgS1ZNIGNvbnRleHQuICBLbm93aW5nIHRoZSBleGFjdCBidWlsZCBwcm9jZXNzIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gdGhlaXIgZGVwZW5kZW5jaWVzLCBhbnkgc3BlY2lhbCBjb21waWxlciBmbGFncywgYW5kIGhvdyB0aGV5IHVsdGltYXRlbHkgaW50ZWdyYXRlLiAgVGhlcmVmb3JlLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBvcGVuIGFuZCBjYXJlZnVsbHkgYW5hbHl6ZSB0aGUgYGFyY2gveDg2L2t2bS9NYWtlZmlsZWAuICBUaGF0J3Mgd2hlcmUgdGhlIGNvbXBpbGF0aW9uIHJ1bGVzIGZvciB0aGVzZSBvYmplY3RzIHdpbGwgYmUgZGVmaW5lZCwgYW5kIGl0J3MgdGhlIGtleSB0byB0cnVseSB1bmRlcnN0YW5kaW5nIHRoZWlyIGJ1aWxkIHByb2Nlc3MuIFRoaXMgc2hvdWxkIHByb3ZpZGUgdGhlIGxvdyBsZXZlbCBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMDksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjM5OjAwLjg2MjMyNzc1MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEwNzg1NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhlbi5vfHBmbmNhY2hlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9NYWtlZmlsZT0xMz1rdm0tJChDT05GSUdfS1ZNX0hZUEVSVikgKz0gaHlwZXJ2Lm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MTQ6a3ZtLSQoQ09ORklHX0tWTV9YRU4pXFx0Kz0geGVuLm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMTUta3ZtLSQoQ09ORklHX0tWTV9TTU0pXFx0Kz0gc21tLm9cXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0yNC0jaW5jbHVkZSBcXHUwMDNjeGVuL2ludGVyZmFjZS9zY2hlZC5oXFx1MDAzZVxcbmFyY2gveDg2L2t2bS94ZW4uYzoyNTojaW5jbHVkZSBcXHUwMDNjeGVuL3hlbi1vcHMuaFxcdTAwM2VcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjM5OjAxLjE3MzExODg4OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDk5MzY1MTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIGBwZm5jYWNoZS5jYCBhbmQgYGt2bV9tYWluLmNgIHdpdGhpbiB0aGUgS1ZNIHZpcnR1YWxpemF0aW9uIG1vZHVsZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBNYWtlZmlsZXMgYW5kIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBhdCBgdmlydC9rdm0vTWFrZWZpbGVgIGFuZCBgdmlydC9rdm0vS2NvbmZpZ2AuIFRob3NlIGFyZSB0eXBpY2FsbHkgd2hlcmUgdGhlIGJ1aWxkIHJ1bGVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVzaWRlIGZvciBLVk0tc3BlY2lmaWMgc291cmNlIGZpbGVzLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gZGVwZW5kZW5jaWVzLCBidWlsZCBmbGFncywgYW5kIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpbnZvbHZlZCBpbiBnZXR0aW5nIHRob3NlIHR3byBmaWxlcyBjb21waWxlZCBhbmQgbGlua2VkLiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdHJhY2UgdGhlIGJ1aWxkIHByb2Nlc3MsIHNvIGxldCBtZSBkaXZlIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQ2NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjM5OjAzLjI3MjQ4Nzk2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkxNTM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZm5jYWNoZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL01ha2VmaWxlLmt2bT0xMz1rdm0tJChDT05GSUdfSEFWRV9LVk1fRElSVFlfUklORykgKz0gJChLVk0pL2RpcnR5X3Jpbmcub1xcbnZpcnQva3ZtL01ha2VmaWxlLmt2bToxNDprdm0tJChDT05GSUdfSEFWRV9LVk1fUEZOQ0FDSEUpICs9ICQoS1ZNKS9wZm5jYWNoZS5vXFxudmlydC9rdm0vTWFrZWZpbGUua3ZtLTE1LWt2bS0kKENPTkZJR19LVk1fR1VFU1RfTUVNRkQpICs9ICQoS1ZNKS9ndWVzdF9tZW1mZC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjM5OjAzLjMxODQwODU5OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzU3MDAxMDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0tWGVuIEludGVncmF0aW9uIENvbmZpZ3VyYXRpb24gYW5kIENvZGUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGBLVk1gLCBhbmQgcG90ZW50aWFsbHkgYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgLCBhbG9uZyB3aXRoIGBLVk1fWDg2YC4gIENydWNpYWxseSwgdGhlcmUncyBgS1ZNX1hFTmAsIHdoaWNoIGRlcGVuZHMgb24gYEtWTV9YODZgLiAgSSBzZWUgdGhhdCBgS1ZNX1g4NmAgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBpZiBhbnkgb2YgYEtWTV9JTlRFTGAsIGBLVk1fQU1EYCwgb3IganVzdCBgS1ZNYCBhcmUgZGVmaW5lZC4gU3BlY2lmaWNhbGx5LCBgY29uZmlnIEtWTV9YRU5gIGlzIGEgYm9vbCBvcHRpb24sIGFuZCBpdCdzIHVuZGVyIGBpZiBWSVJUVUFMSVpBVElPTmAuIFNvIEkgbmVlZCBib3RoIGBLVk1gIGFuZCBgS1ZNX1hFTmAgKGFzIHdlbGwgYXMgYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgKS5cblxuTm93LCBvbnRvIHRoZSBjb2RlIGNoYW5nZXMuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSB1c2VkLiBJIHNlZSBhIHBhdGNoIG1vZGlmeWluZyBzeW1ib2xzIGFjcm9zcyBhIGZldyBmaWxlcy4gTGV0J3MgbG9vayBhdCBgYXJjaC94ODYva3ZtL3hlbi5jYC4gVGhlcmUgYXJlIHF1aXRlIGEgZmV3IGNoYW5nZXMgaGVyZS4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9uIG5hbWVzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gSSBzZWUgYSBtaXggb2Ygc3RhdGljIGFuZCBub24tc3RhdGljIGZ1bmN0aW9ucyBiZWluZyBhbHRlcmVkLlxuXG5JdCBsb29rcyBsaWtlIHRoaXMgYWZmZWN0cyBhIHJhbmdlIG9mIFhlbi1zcGVjaWZpYyBmdW5jdGlvbmFsaXRpZXM6IHNoYXJlZCBpbmZvcm1hdGlvbiBpbml0aWFsaXphdGlvbiwgdXBkYXRpbmcgZ3Vlc3QgcnVuc3RhdGUsIGluamVjdGluZyBldmVudHMsIGNoZWNraW5nIGZvciBpbnRlcnJ1cHRzLCBzZXR0aW5nIFZDUFUgYXR0cmlidXRlcywgY29tcGxldGluZyBoeXBlcmNhbGxzLCBzY2hlZHVsaW5nIG9wZXJhdGlvbnMsIGhhbmRsaW5nIGV2ZW50IGNoYW5uZWxzLCBhbmQgVk0gaW5pdGlhbGl6YXRpb24vZGVzdHJ1Y3Rpb24uIFRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGJlY2F1c2UgdGhleSBhcmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIHZhcmlvdXMgZnVuY3Rpb25hbGl0aWVzIGJlaW5nIGNoYW5nZWQuIFRoZSBzdGF0aWMgZnVuY3Rpb25zIHdpbGwgYmUgdXNlZnVsIHRvIHVuZGVyc3RhbmQgaG93IGFuZCB3aGVyZSB0aGUgZnVuY3Rpb25zIGFyZSB1c2VkLlxuXG5UaGVuIHRoZXJlJ3MgYSBzbWFsbGVyIGNoYW5nZSBpbiBgdmlydC9rdm0va3ZtX21haW4uY2Agd2hlcmUgYSBzdGF0aWMgZnVuY3Rpb24gcmVsYXRlZCB0byBNTVUgaW52YWxpZGF0aW9uIGlzIGJlaW5nIG1vZGlmaWVkLiBGaW5hbGx5LCB0aGVyZSBhcmUgYWxzbyBzb21lIGNoYW5nZXMgaW4gYHZpcnQva3ZtL3BmbmNhY2hlLmNgLiBTcGVjaWZpY2FsbHksIGBodmFfdG9fcGZuX3JldHJ5YCBpcyBzdGF0aWMsIHdoaWNoIGlzIGNhbGxlZCBpbiBga3ZtX2dwY19yZWZyZXNoYCBhbmQgYGt2bV9ncGNfYWN0aXZhdGVgLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyBpbiBgcGZuY2FjaGUuY2AuIFRoaXMgY291bGQgYmUgaW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGNhdXNpbmcgdGhlIHJldHJ5IGNvbmRpdGlvbiBhbmQgd2h5IGl0J3MgbmVjZXNzYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODgxOCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDozOTowOS4wNzU0MTMyNDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODE5OTIzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGt2bV9ncGN8XnZvaWQga3ZtX2dwY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9wZm5jYWNoZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL3BmbmNhY2hlLmM9MjU2PXN0YXRpYyBpbnQgX19rdm1fZ3BjX3JlZnJlc2goc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIHVodmEpXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM2NS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjM2NjppbnQga3ZtX2dwY19yZWZyZXNoKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHVuc2lnbmVkIGxvbmcgbGVuKVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzY3LXtcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzg0LVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6Mzg1OnZvaWQga3ZtX2dwY19pbml0KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHN0cnVjdCBrdm0gKmt2bSlcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM4Ni17XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTM5Nz1zdGF0aWMgaW50IF9fa3ZtX2dwY19hY3RpdmF0ZShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSxcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDI2LVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDI3OmludCBrdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBsZW4pXFxudmlydC9rdm0vcGZuY2FjaGUuYy00Mjgte1xcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy00MzgtXFxudmlydC9rdm0vcGZuY2FjaGUuYzo0Mzk6aW50IGt2bV9ncGNfYWN0aXZhdGVfaHZhKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHVuc2lnbmVkIGxvbmcgdWh2YSwgdW5zaWduZWQgbG9uZyBsZW4pXFxudmlydC9rdm0vcGZuY2FjaGUuYy00NDAte1xcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy00NDYtXFxudmlydC9rdm0vcGZuY2FjaGUuYzo0NDc6dm9pZCBrdm1fZ3BjX2RlYWN0aXZhdGUoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ0OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjM5OjA5LjI1MzYyMDc3N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTQ4NzQ2NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgSW50ZXJhY3Rpb25zIEJldHdlZW4gS1ZNIGFuZCBYZW4gaW4gdGhlIHg4NiBBcmNoaXRlY3R1cmUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBLVk0gaW50ZXJhY3RzIHdpdGggWGVuLCBzcGVjaWZpY2FsbHkgaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBhcmNoL3g4Ni9rdm0veGVuLmNgIGFuZCBgdmlydC9rdm0vcGZuY2FjaGUuY2AuIFNlZW1zIGxpa2UgdGhlIGZpcnN0IGZpbGUgaXMgdGhlIG1vcmUgbGlrZWx5IGNhbmRpZGF0ZSBnaXZlbiB0aGUgbmFtaW5nLlxuXG5JbiBgYXJjaC94ODYva3ZtL3hlbi5jYCwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgc3RhbmQgb3V0IGFzIHBvdGVudGlhbGx5IHJlbGV2YW50IHRvIHRoZSBpbnRlZ3JhdGlvbjpcblxuKiAgIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2A6IFRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBldmVudCBpbmplY3Rpb24gZnJvbSB0aGUgWGVuIGh5cGVydmlzb3IgaW50byB0aGUgS1ZNIGd1ZXN0LlxuKiAgIGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGA6IFRoaXMgc3VnZ2VzdHMgYSBtZWNoYW5pc20gZm9yIHF1ZXJ5aW5nIGlmIHRoZXJlIGFyZSBwZW5kaW5nIGludGVycnVwdHMgcmVsYXRlZCB0byBYZW4uXG4qICAgYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmA6IFNvdW5kcyBsaWtlIHNldHRpbmcgdkNQVSBhdHRyaWJ1dGVzIHRocm91Z2ggWGVuLlxuKiAgIGBrdm1feGVuX2h5cGVyY2FsbGA6IFRoaXMgbGlrZWx5IGRlYWxzIHdpdGggWGVuIGh5cGVyY2FsbHMsIGEgZnVuZGFtZW50YWwgaW50ZXJmYWNlIGZvciBjb21tdW5pY2F0aW9uLlxuKiAgIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGA6IFRoaXMgbG9va3MgbGlrZSBhbiBvcHRpbWl6YXRpb24gZm9yIHNldHRpbmcgZXZlbnQgY2hhbm5lbHMuXG4qICAgYGt2bV94ZW5fc2V0dXBfZXZ0Y2huYDogVGhpcyBpcyBwcm9iYWJseSB0aGUgc2V0dXAgcm91dGluZSBmb3IgdGhlc2UgY2hhbm5lbHMuXG4qICAgYGt2bV94ZW5faHZtX2V2dGNobl9zZW5kYDogRGVmaW5pdGVseSBzb3VuZHMgcmVsYXRlZCB0byBzZW5kaW5nIGV2ZW50cyB0aHJvdWdoIHRoZSBIVk0gZXZlbnQgY2hhbm5lbC5cbiogICBga3ZtX3hlbl9odm1fc2V0X2F0dHJgOiBUaGlzIGlzIHByb2JhYmx5IHNldHRpbmcgSFZNIGF0dHJpYnV0ZXMgdGhyb3VnaCBYZW4uIEl0IGFsc28gY2FsbHMgYGt2bV94ZW5fc2V0YXR0cl9ldnRjaG5gLCBzbyBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBldmVudCBjaGFubmVsIGF0dHJpYnV0ZXMgYXJlIGJlaW5nIHNldC5cblxuSSdsbCBrZWVwIGEgY2xvc2UgZXllIG9uIHRoZXNlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgd29yayB0b2dldGhlciwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIGlzc3VlcyBvciBpbmVmZmljaWVuY2llcyBpbiB0aGUgaW50ZXJmYWNlIGJldHdlZW4gS1ZNIGFuZCBYZW4uIEkgd2lsbCBuZWVkIHRvIGxvb2sgaW50byBgcGZuY2FjaGUuY2AgYXMgd2VsbCB0byBzZWUgaG93IGl0IG1pZ2h0IGJlIHVzZWQgdG8gb3B0aW1pemUgdGhlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTk4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjM5OjEyLjgwMjM2OTExN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MDg4MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3hlbl9zZXRhdHRyX2V2dGNoblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0veGVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3hlbi5jPTMzPXN0YXRpYyBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huKHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSk7XFxuYXJjaC94ODYva3ZtL3hlbi5jOjM0OnN0YXRpYyBpbnQga3ZtX3hlbl9zZXRhdHRyX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMzUtc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwYXJhbSwgdTY0ICpyKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz03NzU9aW50IGt2bV94ZW5faHZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtODUxLVxcdGNhc2UgS1ZNX1hFTl9BVFRSX1RZUEVfRVZUQ0hOOlxcbmFyY2gveDg2L2t2bS94ZW4uYzo4NTI6XFx0XFx0ciA9IGt2bV94ZW5fc2V0YXR0cl9ldnRjaG4oa3ZtLCBkYXRhKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmMtODUzLVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTIyNzI9c3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTIzMTMtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjIzMTQ6c3RhdGljIGludCBrdm1feGVuX3NldGF0dHJfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpXFxuYXJjaC94ODYva3ZtL3hlbi5jLTIzMTUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDozOToxMi44NDc4ODI5NzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIwMzA4NzAyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgS1ZNLVhlbiBDaGFuZ2VzIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBrdm1feGVuX2h2bV9zZXRfYXR0cmAgaXMgYW4gZXhwb3J0ZWQgZnVuY3Rpb24gY2FsbGVkIHZpYSB0aGUgYEtWTV9YRU5fSFZNX1NFVF9BVFRSYCBpb2N0bC4gU2ltaWxhcmx5LCBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCBoYW5kbGVzIHRoZSBgS1ZNX1hFTl9WQ1BVX1NFVF9BVFRSYCBpb2N0bCwgYW5kIGBrdm1feGVuX2h5cGVyY2FsbGAgZGVhbHMgd2l0aCBndWVzdCBYZW4gaHlwZXJjYWxscy4gV2UgYWxzbyBoYXZlIGBrdm1fZ3BjX3JlZnJlc2hgLCBga3ZtX2dwY19hY3RpdmF0ZWAsIGFuZCBga3ZtX2dwY19hY3RpdmF0ZV9odmFgIGluIGBwZm5jYWNoZS5jYCB0aGF0IGFyZSBpbXBvcnRhbnQuXG5cbkknbGwgc3RhcnQgYnkgdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQga2V5IGZ1bmN0aW9ucyBsaWtlIGBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZGAsIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIGBrdm1feGVuX3NldHVwX2V2dGNobmAsIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AsIGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGAsIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgLCBhbmQgYGt2bV94ZW5faHlwZXJjYWxsYC4gSSdsbCBhbHNvIGdsYW5jZSBvdmVyIHRoZSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtYXkgYmUgbW9kaWZpZWQuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgbW9kaWZpY2F0aW9ucy5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhpcyBkaWZmLiBGaXJzdCwgaW4gYGFyY2gveDg2L2t2bS94ZW4uY2AsIHRoZXJlJ3MgYSBsb3Qgb2Ygd29yayByZWxhdGVkIHRvIHRoZSBzaGFyZWQgaW5mbyBzdHJ1Y3R1cmUgYW5kIGl0cyA2NC1iaXQgc3RhdHVzLiAgQ3J1Y2lhbGx5LCB0aGVyZSBhcmUgY2hhbmdlcyB0byBob3cgaW50ZXJydXB0cyBhcmUgaW5qZWN0ZWQsIGluY2x1ZGluZyBhdG9taWMgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIHJlZCBmbGFnLiBJIHNlZSB0aGUgdXNlIG9mIGF0b21pYyBvcGVyYXRpb25zIChgYXRvbWljNjRfb3JgLCBgYXRvbWljX29yYCwgYGF0b21pYzY0X2FuZG5vdGAsIGBhdG9taWNfYW5kbm90YCkgaW5zdGVhZCBvZiBpbmxpbmUgYXNzZW1ibHkuIFRoaXMgc3VnZ2VzdHMgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyByZWxhdGVkIHRvIGludGVycnVwdCBpbmplY3Rpb24gdGhhdCAqY291bGQqIGJlIGV4cGxvaXRlZC4gIFRoZXJlJ3MgYWxzbyBhbGlnbm1lbnQgY2hlY2tzIGluIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBHUEEgYW5kIEhWQSBhbGlnbm1lbnQsIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBmdXp6aW5nLiBUaGUgcmVuYW1pbmcgb2YgYGxvbmdtb2RlYCB0byBgaXNfNjRiaXRgIGlzIGxlc3MgY29uY2VybmluZy4gIFRoZSBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIGNoYW5nZSwgcmVwbGFjaW5nIHRoZSBiaXQgb3BlcmF0aW9uIHdpdGggYGJ0c2xgLCB0byBhdm9pZCB0aGUgc3BsaXQtbG9jayAjQUMgaXMgbm90ZXdvcnRoeTsgcG90ZW50aWFsIGZvciB1bmFsaWduZWQgYWNjZXNzZXMgdG8gY2F1c2UgcHJvYmxlbXMuIFRoZSBzaGlmdCBmcm9tIGBpZHJgIHRvIGB4YXJyYXlgIGZvciBgZXZ0Y2huX3BvcnRzYCBhbHNvIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2sgYXMgaXQgdG91Y2hlcyBjcml0aWNhbCBldmVudCBjaGFubmVsIG1hbmFnZW1lbnQuXG5cbkluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCwgSSBub3RpY2UgY2hhbmdlcyByZWxhdGVkIHRvIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYCwgc3BlY2lmaWNhbGx5IHRoZSBhZGRpdGlvbiBvZiBgZ3BjX2ludmFsaWRhdGVfc2VxYCBhbmQgYHNtcF93bWIoKWAuIFRoaXMgaW5kaWNhdGVzIGEgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBwb2ludC4gSW4gYHZpcnQva3ZtL3BmbmNhY2hlLmNgLCB0aGUgdXNlIG9mIGBncGNfc2VxYCBhbmQgYGt2bS1cdTAwM2VncGNfaW52YWxpZGF0ZV9zZXFgIGluIGBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGVgIGFuZCBgaHZhX3RvX3Bmbl9yZXRyeWAgaW5kaWNhdGVzIHRoZXJlIGhhcyBiZWVuIGEgZ2xvYmFsIHBhZ2UgY2FjaGUgaW52YWxpZGF0aW9uIHNlcXVlbmNlIGFkZGVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZXNlIHNlcXVlbmNlcyBhcmUgbWFpbnRhaW5lZCBhY3Jvc3MgQ1BVcy5cblxuVGhlIGNvcmUgb2YgdGhlc2UgY2hhbmdlcyBpcyBpbiBLVk0ncyBYZW4gZW11bGF0aW9uIGFuZCB0aGUgcGZuY2FjaGUsIHdoaWNoIGFyZSAqcHJpbWUqIHRhcmdldHMgZm9yIGZ1enppbmcuIFRoaXMgdG91Y2hlcyBjb25jdXJyZW5jeSwgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgY29ycnVwdGlvbiwgbG9ja2luZywgaW9jdGwgaGFuZGxpbmcsIGFuZCBoeXBlcmNhbGxzLiBEZWZpbml0ZWx5LCB3b3J0aHdoaWxlLlxuXG5UaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIChgS1ZNYCwgYEtWTV9JTlRFTGAvYEtWTV9BTURgLCBgS1ZNX1g4NmAsIGBLVk1fWEVOYCkgYXJlIGFsbCByZWxldmFudCBhbmQgbmVlZCB0byBiZSBlbmFibGVkIGR1cmluZyBmdXp6aW5nLlxuXG5NeSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgd2lsbCBiZTogYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAsIGBrdm1feGVuX2h2bV9zZXRfYXR0cmAsIGBrdm1feGVuX2h5cGVyY2FsbGAsIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AsIGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGAsIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIGBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZGAsIGBrdm1fZ3BjX3JlZnJlc2hgLCBga3ZtX2dwY19hY3RpdmF0ZWAsIGFuZCBga3ZtX2dwY19hY3RpdmF0ZV9odmFgLlxuXG5JJ20gY29uZmlkZW50IHdlIGhhdmUgYSBzb2xpZCBzZXQgb2YgdGFyZ2V0cyBmb3IgZnV6emluZywgYW5kIEknbSByZWFkeSB0byBwcm9jZWVkIHdpdGggc2V0dGluZyB1cCB0aGUgZnV6emluZyBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3MDksIk91dHB1dFRva2VucyI6MzA2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNDozOToyNC44Nzg3NTU2MjdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzYxNzk3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9YODZcIixcbiAgICBcIktWTV9YRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1feGVuX3ZjcHVfc2V0X2F0dHJcIixcbiAgICBcImt2bV94ZW5faHZtX3NldF9hdHRyXCIsXG4gICAgXCJrdm1feGVuX2h5cGVyY2FsbFwiLFxuICAgIFwia3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNcIixcbiAgICBcIl9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0XCIsXG4gICAgXCJrdm1feGVuX3NldF9ldnRjaG5fZmFzdFwiLFxuICAgIFwia3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRcIixcbiAgICBcImt2bV9ncGNfcmVmcmVzaFwiLFxuICAgIFwia3ZtX2dwY19hY3RpdmF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgYW5kIGNvbmN1cnJlbmN5LWNyaXRpY2FsIGNoYW5nZXMgdG8gS1ZNJ3MgWGVuIGVtdWxhdGlvbiBhbmQgZ2ZuX3RvX3Bmbl9jYWNoZSAoR1BDKSBzdWJzeXN0ZW0uIFRoZXNlIGluY2x1ZGUgbWlncmF0aW5nIFhlbiBldmVudCBjaGFubmVsIHN0b3JhZ2UgZnJvbSBJRFIgdG8gWEFycmF5LCBlbmZvcmNpbmcgYWxpZ25tZW50IGNoZWNrcyBmb3IgdkNQVSBpbmZvIEdQQS9IVkEsIHVzaW5nIGV4cGxpY2l0IDMyLWJpdCBhdG9taWMgYml0b3BzIHRvIHByZXZlbnQgc3BsaXQtbG9jayBBQyBleGNlcHRpb25zIG9uIHVuYWxpZ25lZCBzdHJ1Y3R1cmVzLCBpbnRyb2R1Y2luZyBTUkNVIGxvY2tpbmcgaW4gX19rdm1feGVuX2hhc19pbnRlcnJ1cHQsIGFuZCBzZXBhcmF0aW5nIEdQQyBpbnZhbGlkYXRpb24gc2VxdWVuY2luZyBmcm9tIGdlbmVyYWwgTU1VIGludmFsaWRhdGlvbiBzZXF1ZW5jaW5nLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgdmlydHVhbGl6YXRpb24gaW9jdGxzLCBoeXBlcmNhbGxzLCBhbmQgZXZlbnQgY2hhbm5lbCBkZWxpdmVyeSBtZWNoYW5pc21zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJLVk1fWDg2XCIsXG4gICAgXCJLVk1fWEVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3hlbl92Y3B1X3NldF9hdHRyXCIsXG4gICAgXCJrdm1feGVuX2h2bV9zZXRfYXR0clwiLFxuICAgIFwia3ZtX3hlbl9oeXBlcmNhbGxcIixcbiAgICBcImt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzXCIsXG4gICAgXCJfX2t2bV94ZW5faGFzX2ludGVycnVwdFwiLFxuICAgIFwia3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RcIixcbiAgICBcImt2bV94ZW5faHZtX2V2dGNobl9zZW5kXCIsXG4gICAgXCJrdm1fZ3BjX3JlZnJlc2hcIixcbiAgICBcImt2bV9ncGNfYWN0aXZhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGFuZCBjb25jdXJyZW5jeS1jcml0aWNhbCBjaGFuZ2VzIHRvIEtWTSdzIFhlbiBlbXVsYXRpb24gYW5kIGdmbl90b19wZm5fY2FjaGUgKEdQQykgc3Vic3lzdGVtLiBUaGVzZSBpbmNsdWRlIG1pZ3JhdGluZyBYZW4gZXZlbnQgY2hhbm5lbCBzdG9yYWdlIGZyb20gSURSIHRvIFhBcnJheSwgZW5mb3JjaW5nIGFsaWdubWVudCBjaGVja3MgZm9yIHZDUFUgaW5mbyBHUEEvSFZBLCB1c2luZyBleHBsaWNpdCAzMi1iaXQgYXRvbWljIGJpdG9wcyB0byBwcmV2ZW50IHNwbGl0LWxvY2sgQUMgZXhjZXB0aW9ucyBvbiB1bmFsaWduZWQgc3RydWN0dXJlcywgaW50cm9kdWNpbmcgU1JDVSBsb2NraW5nIGluIF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0LCBhbmQgc2VwYXJhdGluZyBHUEMgaW52YWxpZGF0aW9uIHNlcXVlbmNpbmcgZnJvbSBnZW5lcmFsIE1NVSBpbnZhbGlkYXRpb24gc2VxdWVuY2luZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIHZpcnR1YWxpemF0aW9uIGlvY3RscywgaHlwZXJjYWxscywgYW5kIGV2ZW50IGNoYW5uZWwgZGVsaXZlcnkgbWVjaGFuaXNtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mzk6MjQuOTYyMzgxNTY0WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODM2NTQyODczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mzk6MjQuOTYzMDA2MjQ0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTgzNTkxNDI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJ3MgWGVuIGVtdWxhdGlvbiBhbmQgR0ZOLXRvLVBGTiBjYWNoZSBpbnZhbGlkYXRpb24gbG9naWMuIFNwZWNpZmljYWxseSwgaXQ6XFxuMS4gUmVwbGFjZXMgdGhlIElEUiBkYXRhIHN0cnVjdHVyZSB3aXRoIFhBcnJheSBmb3IgZXZlbnQgY2hhbm5lbCBwb3J0IHRyYWNraW5nIChgZXZ0Y2huX3BvcnRzYCkuXFxuMi4gSW50cm9kdWNlcyBhIGRlZGljYXRlZCBzZXF1ZW5jZSBjb3VudGVyIChgZ3BjX2ludmFsaWRhdGVfc2VxYCkgaW4gYHBmbmNhY2hlLmNgIGFuZCBga3ZtX21haW4uY2AgdG8gcHJvcGVybHkgdHJhY2sgR1BDIGludmFsaWRhdGlvbiBldmVudHMuXFxuMy4gRml4ZXMgcG90ZW50aWFsIHNwbGl0LWxvY2sgYCNBQ2AgZXhjZXB0aW9ucyBieSBjaGVja2luZyBHUEEvSFZBIDMyLWJpdCBhbGlnbm1lbnQgaW4gYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAgYW5kIHVzaW5nIDMyLWJpdCBhdG9taWMgYml0b3BzIGZvciBgdmlfcGVuZGluZ19zZWxgLlxcbjQuIEZpeGVzIFNSQ1UgbG9ja2luZyBpbiBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgIGFuZCBhdG9taWMgcmVhZHMvd3JpdGVzIGZvciBgcG9sbF9ldnRjaG5gLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gTWVtb3J5IHNhZmV0eSBhbmQgY29uY3VycmVuY3kgY29uY2VybnMgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGxvY2tpbmcsIHVzZS1hZnRlci1mcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMzZTAzZmYzYjhjMzc5ZDhiMzI4MjBjOTllYmMwMmQ4MDJlMzAzYjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDA0OjM4OjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDY4M2JiOGJmNDNhOTQuLjNhZjczOTVjMjQzMGEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMTYsNiArMTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9wYXJhLmhcdTAwM2VcbkBAIC0xMTEzLDcgKzExMTQsNyBAQCBzdHJ1Y3Qga3ZtX3hlbiB7XG4gXHRib29sIHJ1bnN0YXRlX3VwZGF0ZV9mbGFnO1xuIFx0dTggdXBjYWxsX3ZlY3RvcjtcbiBcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlIHNoaW5mb19jYWNoZTtcbi1cdHN0cnVjdCBpZHIgZXZ0Y2huX3BvcnRzO1xuK1x0c3RydWN0IHhhcnJheSBldnRjaG5fcG9ydHM7XG4gXHR1bnNpZ25lZCBsb25nIHBvbGxfbWFza1tCSVRTX1RPX0xPTkdTKEtWTV9NQVhfVkNQVVMpXTtcbiBcbiBcdHN0cnVjdCBrdm1feGVuX2h2bV9jb25maWcgaHZtX2NvbmZpZztcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmMgYi9hcmNoL3g4Ni9rdm0veGVuLmNcbmluZGV4IDk5OGNkY2I2YWEzMDMuLjcxODM5NjM0MGQzYzEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmNcbisrKyBiL2FyY2gveDg2L2t2bS94ZW4uY1xuQEAgLTczLDcgKzczLDcgQEAgc3RhdGljIGludCBrdm1feGVuX3NoYXJlZF9pbmZvX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBzaGFyZWRfaW5mbywgd2MpICE9IDB4YzAwKTtcbiBcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2hhcmVkX2luZm8sIHdjX3NlY19oaSkgIT0gMHhjMGMpO1xuIFxuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xuK1x0aWYgKGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pKSB7XG4gXHRcdHN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4gXG4gXHRcdHdjX3NlY19oaSA9IFx1MDAyNnNoaW5mby1cdTAwM2V3Y19zZWNfaGk7XG5AQCAtMzg5LDcgKzM4OSw3IEBAIHN0YXRpYyB2b2lkIGt2bV94ZW5fdXBkYXRlX3J1bnN0YXRlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdiwgYm9vbCBhdG9taWMpXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sIHRpbWUpICE9XG4gXHRcdCAgICAgc2l6ZW9mKHZ4LVx1MDAzZXJ1bnN0YXRlX3RpbWVzKSk7XG4gXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiB2LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbitcdGlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8odi1cdTAwM2Vrdm0pKSB7XG4gXHRcdHVzZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8pO1xuIFx0XHR0aW1lc19vZnMgPSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvLFxuIFx0XHRcdFx0ICAgICBzdGF0ZV9lbnRyeV90aW1lKTtcbkBAIC02NzYsMjggKzY3NiwzMiBAQCB2b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdilcbiBcdH1cbiBcbiBcdC8qIE5vdyBncGMtXHUwMDNla2h2YSBpcyBhIHZhbGlkIGtlcm5lbCBhZGRyZXNzIGZvciB0aGUgdmNwdV9pbmZvICovXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiB2LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbitcdGlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8odi1cdTAwM2Vrdm0pKSB7XG4gXHRcdHN0cnVjdCB2Y3B1X2luZm8gKnZpID0gZ3BjLVx1MDAzZWtodmE7XG4rXHRcdHZvaWQgKnZpX3BlbmRpbmdfc2VsID0gXHUwMDI2dmktXHUwMDNlZXZ0Y2huX3BlbmRpbmdfc2VsO1xuIFxuLVx0XHRhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggXCJvcnEgJTAsICUxXFxuXCJcbi1cdFx0XHQgICAgIFwibm90cSAlMFxcblwiXG4tXHRcdFx0ICAgICBMT0NLX1BSRUZJWCBcImFuZHEgJTAsICUyXFxuXCJcbi1cdFx0XHQgICAgIDogXCI9clwiIChldnRjaG5fcGVuZGluZ19zZWwpLFxuLVx0XHRcdCAgICAgICBcIittXCIgKHZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCksXG4tXHRcdFx0ICAgICAgIFwiK21cIiAodi1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpXG4tXHRcdFx0ICAgICA6IFwiMFwiIChldnRjaG5fcGVuZGluZ19zZWwpKTtcbitcdFx0aWYgKElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpdmlfcGVuZGluZ19zZWwsIHNpemVvZih1NjQpKSkge1xuK1x0XHRcdGF0b21pYzY0X29yKGV2dGNobl9wZW5kaW5nX3NlbCwgdmlfcGVuZGluZ19zZWwpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGF0b21pY19vcihldnRjaG5fcGVuZGluZ19zZWwsIHZpX3BlbmRpbmdfc2VsKTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFRoZSBjYXN0IGtlZXBzIHRoZSBzaGlmdCB3ZWxsLWRlZmluZWQgb24gMzItYml0LFxuK1x0XHRcdCAqIHdoZXJlIGV2dGNobl9wZW5kaW5nX3NlbCBpcyAzMiBiaXRzIHdpZGUgYW5kIHRoaXNcbitcdFx0XHQgKiBicmFuY2ggaXMgdW5yZWFjaGFibGUgYW55d2F5ICh0aGlzIGlzIGluc2lkZVxuK1x0XHRcdCAqIGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbygpLCB3aGljaCBpcyBnYXRlZCBvblxuK1x0XHRcdCAqIElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSkuXG4rXHRcdFx0ICovXG4rXHRcdFx0YXRvbWljX29yKCh1NjQpZXZ0Y2huX3BlbmRpbmdfc2VsIFx1MDAzZVx1MDAzZSAzMixcbitcdFx0XHRcdCAgdmlfcGVuZGluZ19zZWwgKyA0KTtcbitcdFx0fVxuK1xuK1x0XHRhdG9taWM2NF9hbmRub3QoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKVx1MDAyNnYtXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKTtcbiBcdFx0V1JJVEVfT05DRSh2aS1cdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xuIFx0fSBlbHNlIHtcbi1cdFx0dTMyIGV2dGNobl9wZW5kaW5nX3NlbDMyID0gZXZ0Y2huX3BlbmRpbmdfc2VsO1xuIFx0XHRzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmkgPSBncGMtXHUwMDNla2h2YTtcbiBcbi1cdFx0YXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYIFwib3JsICUwLCAlMVxcblwiXG4tXHRcdFx0ICAgICBcIm5vdGwgJTBcXG5cIlxuLVx0XHRcdCAgICAgTE9DS19QUkVGSVggXCJhbmRsICUwLCAlMlxcblwiXG4tXHRcdFx0ICAgICA6IFwiPXJcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpLFxuLVx0XHRcdCAgICAgICBcIittXCIgKHZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCksXG4tXHRcdFx0ICAgICAgIFwiK21cIiAodi1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpXG4tXHRcdFx0ICAgICA6IFwiMFwiIChldnRjaG5fcGVuZGluZ19zZWwzMikpO1xuK1x0XHRhdG9taWNfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKVx1MDAyNnZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCk7XG4rXHRcdGF0b21pY19hbmRub3QoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKVx1MDAyNnYtXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKTtcbiBcdFx0V1JJVEVfT05DRSh2aS1cdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xuIFx0fVxuIFxuQEAgLTcyOCw2ICs3MzIsMTYgQEAgaW50IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdilcbiBcdEJVSUxEX0JVR19PTihzaXplb2YocmMpICE9XG4gXHRcdCAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpKTtcbiBcbitcdC8qXG4rXHQgKiBrdm1fZ3BjX2NoZWNrKCkgY2hlY2tzIHRoZSBtZW1zbG90IGdlbmVyYXRpb24sIHNvIGt2bS1cdTAwM2VzcmN1IG11c3QgYmVcbitcdCAqIGhlbGQuIE1vc3QgY2FsbGVycyBob2xkIGl0IGFscmVhZHksIGJ1dCB0aGlzIGlzIGFsc28gcmVhY2hlZCBmcm9tXG4rXHQgKiBrdm1fZW11bGF0ZV9oYWx0KCkgb24gdGhlIFZNLUV4aXQgcGF0aCBhbmQgZnJvbSBrdm1fdmNwdV9ibG9jaygpLFxuK1x0ICogd2hlcmUgdmNwdV9lbnRlcl9ndWVzdCgpIGhhcyBhbHJlYWR5IGRyb3BwZWQgdGhlIHZDUFUncyBTUkNVIGxvY2suXG4rXHQgKiBUYWtpbmcgU1JDVSBkb2VzIG5vdCBzbGVlcCwgc28gaXQgaXMgc2FmZSBldmVuIGluIHRoZSBhdG9taWMgY2FzZVxuK1x0ICogd2hpY2ggaXMgaGFuZGxlZCBiZWxvdy5cbitcdCAqL1xuK1x0Z3VhcmQoc3JjdSkoXHUwMDI2di1cdTAwM2Vrdm0tXHUwMDNlc3JjdSk7XG4rXG4gXHRyZWFkX2xvY2tfaXJxc2F2ZShcdTAwMjZncGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0d2hpbGUgKCFrdm1fZ3BjX2NoZWNrKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkge1xuIFx0XHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdwYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG5AQCAtOTQxLDYgKzk1NSwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFxuK1x0XHRcdHIgPSAtRU5YSU87XG4rXHRcdFx0aWYgKCFJU19BTElHTkVEKGRhdGEtXHUwMDNldS5ncGEsIHNpemVvZih1MzIpKSlcbitcdFx0XHRcdGJyZWFrO1xuK1xuIFx0XHRcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pbmZvX2NhY2hlLFxuIFx0XHRcdFx0XHQgICAgIGRhdGEtXHUwMDNldS5ncGEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7XG4gXHRcdH0gZWxzZSB7XG5AQCAtOTUwLDYgKzk2OCwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFxuK1x0XHRcdHIgPSAtRU5YSU87XG4rXHRcdFx0aWYgKCFJU19BTElHTkVEKGRhdGEtXHUwMDNldS5odmEsIHNpemVvZih1MzIpKSlcbitcdFx0XHRcdGJyZWFrO1xuK1xuIFx0XHRcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlX2h2YShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZSxcbiBcdFx0XHRcdFx0XHQgZGF0YS1cdTAwM2V1Lmh2YSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTtcbiBcdFx0fVxuQEAgLTk5Myw3ICsxMDE1LDcgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSlcbiBcdFx0ICogYWRkcmVzcywgdGhhdCdzIGFjdHVhbGx5IE9LLiBrdm1feGVuX3VwZGF0ZV9ydW5zdGF0ZV9ndWVzdCgpXG4gXHRcdCAqIHdpbGwgY29wZS5cbiBcdFx0ICovXG4tXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSlcbitcdFx0aWYgKGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyh2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdFx0c3ogPSBzaXplb2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRzeiA9IHNpemVvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfcnVuc3RhdGVfaW5mbyk7XG5AQCAtMTQzOSwxNiArMTQ2MSwyMSBAQCBzdGF0aWMgaW50IGt2bV94ZW5faHlwZXJjYWxsX2NvbXBsZXRlX3VzZXJzcGFjZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4ga3ZtX3hlbl9oeXBlcmNhbGxfc2V0X3Jlc3VsdCh2Y3B1LCBydW4tXHUwMDNleGVuLnUuaGNhbGwucmVzdWx0KTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KHN0cnVjdCBrdm0gKmt2bSlcbitzdGF0aWMgaW5saW5lIGludCBtYXhfZXZ0Y2huX3BvcnQoYm9vbCBoYXNfNjRiaXRfc2hpbmZvKVxuIHtcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpXG4rXHRpZiAoaGFzXzY0Yml0X3NoaW5mbylcbiBcdFx0cmV0dXJuIEVWVENITl8yTF9OUl9DSEFOTkVMUztcbiBcdGVsc2VcbiBcdFx0cmV0dXJuIENPTVBBVF9FVlRDSE5fMkxfTlJfQ0hBTk5FTFM7XG4gfVxuIFxuLXN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cyxcbi1cdFx0XHQgICAgICAgZXZ0Y2huX3BvcnRfdCAqcG9ydHMpXG4rc3RhdGljIGlubGluZSBpbnQga3ZtX21heF9ldnRjaG5fcG9ydChzdHJ1Y3Qga3ZtICprdm0pXG4re1xuK1x0cmV0dXJuIG1heF9ldnRjaG5fcG9ydChrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKSk7XG4rfVxuK1xuK3N0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaGFzXzY0Yml0X3NoaW5mbyxcbitcdFx0XHQgICAgICAgaW50IG5yX3BvcnRzLCBldnRjaG5fcG9ydF90ICpwb3J0cylcbiB7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlO1xuQEAgLTE0NjMsNyArMTQ5MCw3IEBAIHN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cyxcbiBcdFx0Z290byBvdXRfcmN1O1xuIFxuIFx0cmV0ID0gZmFsc2U7XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSB7XG4rXHRpZiAoaGFzXzY0Yml0X3NoaW5mbykge1xuIFx0XHRzdHJ1Y3Qgc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuIFx0XHRwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fcGVuZGluZztcbiBcdH0gZWxzZSB7XG5AQCAtMTQ4NSw5ICsxNTEyLDEwIEBAIHN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cyxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcbitzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsXG4gXHRcdFx0XHQgdTY0IHBhcmFtLCB1NjQgKnIpXG4ge1xuK1x0Ym9vbCBoYXNfNjRiaXRfc2hpbmZvID0ga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtXHUwMDNla3ZtKTtcbiBcdHN0cnVjdCBzY2hlZF9wb2xsIHNjaGVkX3BvbGw7XG4gXHRldnRjaG5fcG9ydF90IHBvcnQsICpwb3J0cztcbiBcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XG5AQCAtMTQ5Nyw3ICsxNTI1LDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxuIFx0ICAgICEodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4uaHZtX2NvbmZpZy5mbGFncyBcdTAwMjYgS1ZNX1hFTl9IVk1fQ09ORklHX0VWVENITl9TRU5EKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgIWxvbmdtb2RlKSB7XG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiAhaXNfNjRiaXQpIHtcbiBcdFx0c3RydWN0IGNvbXBhdF9zY2hlZF9wb2xsIHNwMzI7XG4gXG4gXHRcdC8qIFNhbml0eSBjaGVjayB0aGF0IHRoZSBjb21wYXQgc3RydWN0IGRlZmluaXRpb24gaXMgY29ycmVjdCAqL1xuQEAgLTE1NDYsMjAgKzE1NzQsMjAgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2NoZWRfcG9sbC5ucl9wb3J0czsgaSsrKSB7XG4tXHRcdGlmIChwb3J0c1tpXSBcdTAwM2U9IG1heF9ldnRjaG5fcG9ydCh2Y3B1LVx1MDAzZWt2bSkpIHtcbitcdFx0aWYgKHBvcnRzW2ldIFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKSB7XG4gXHRcdFx0KnIgPSAtRUlOVkFMO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXHR9XG4gXG4gXHRpZiAoc2NoZWRfcG9sbC5ucl9wb3J0cyA9PSAxKVxuLVx0XHR2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huID0gcG9ydDtcbitcdFx0V1JJVEVfT05DRSh2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huLCBwb3J0KTtcbiBcdGVsc2Vcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLnhlbi5wb2xsX2V2dGNobiA9IC0xO1xuK1x0XHRXUklURV9PTkNFKHZjcHUtXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4sIC0xKTtcbiBcbiBcdHNldF9iaXQodmNwdS1cdTAwM2V2Y3B1X2lkeCwgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4ucG9sbF9tYXNrKTtcbiBcbi1cdGlmICghd2FpdF9wZW5kaW5nX2V2ZW50KHZjcHUsIHNjaGVkX3BvbGwubnJfcG9ydHMsIHBvcnRzKSkge1xuK1x0aWYgKCF3YWl0X3BlbmRpbmdfZXZlbnQodmNwdSwgaGFzXzY0Yml0X3NoaW5mbywgc2NoZWRfcG9sbC5ucl9wb3J0cywgcG9ydHMpKSB7XG4gXHRcdGt2bV9zZXRfbXBfc3RhdGUodmNwdSwgS1ZNX01QX1NUQVRFX0hBTFRFRCk7XG4gXG4gXHRcdGlmIChzY2hlZF9wb2xsLnRpbWVvdXQpXG5AQCAtMTU3NCw3ICsxNjAyLDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxuIFx0XHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9SVU5OQUJMRSk7XG4gXHR9XG4gXG4tXHR2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huID0gMDtcbitcdFdSSVRFX09OQ0UodmNwdS1cdTAwM2VhcmNoLnhlbi5wb2xsX2V2dGNobiwgMCk7XG4gXHQqciA9IDA7XG4gb3V0OlxuIFx0LyogUmVhbGx5LCB0aGlzIGlzIG9ubHkgbmVlZGVkIGluIGNhc2Ugb2YgdGltZW91dCAqL1xuQEAgLTE1OTQsMTIgKzE2MjIsMTIgQEAgc3RhdGljIHZvaWQgY2FuY2VsX2V2dGNobl9wb2xsKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiB9XG4gXG4tc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4rc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsXG4gXHRcdFx0XHQgICBpbnQgY21kLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBTQ0hFRE9QX3BvbGw6XG4tXHRcdGlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBsb25nbW9kZSwgcGFyYW0sIHIpKVxuK1x0XHRpZiAoa3ZtX3hlbl9zY2hlZG9wX3BvbGwodmNwdSwgaXNfNjRiaXQsIHBhcmFtLCByKSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0ZmFsbHRocm91Z2g7XG4gXHRjYXNlIFNDSEVET1BfeWllbGQ6XG5AQCAtMTYxOCw3ICsxNjQ2LDcgQEAgc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyIHtcbiAgICAgdWludDMyX3QgZmxhZ3M7XG4gfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTtcbiBcbi1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLFxuK3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsIGludCBjbWQsXG4gXHRcdFx0XHQgIGludCB2Y3B1X2lkLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciBvbmVzaG90O1xuQEAgLTE2NjIsNyArMTY5MCw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsXG4gXHRcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyLCBmbGFncykgIT1cbiBcdFx0XHQgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpKTtcbiBcbi1cdFx0aWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgcGFyYW0sIFx1MDAyNm9uZXNob3QsIGxvbmdtb2RlID8gc2l6ZW9mKG9uZXNob3QpIDpcbitcdFx0aWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgcGFyYW0sIFx1MDAyNm9uZXNob3QsIGlzXzY0Yml0ID8gc2l6ZW9mKG9uZXNob3QpIDpcbiBcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciksIFx1MDAyNmUpKSB7XG4gXHRcdFx0KnIgPSAtRUZBVUxUO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuQEAgLTE2OTQsNyArMTcyMiw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWludDY0X3QgdGltZW91dCxcbiBcbiBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGJvb2wgbG9uZ21vZGU7XG4rXHRib29sIGlzXzY0Yml0O1xuIFx0dTY0IGlucHV0LCBwYXJhbXNbNl0sIHIgPSAtRU5PU1lTO1xuIFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XG4gXHR1OCBjcGw7XG5AQCAtMTcwNCw4ICsxNzMyLDggQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAgICBrdm1faHZfaHlwZXJjYWxsX2VuYWJsZWQodmNwdSkpXG4gXHRcdHJldHVybiBrdm1faHZfaHlwZXJjYWxsKHZjcHUpO1xuIFxuLVx0bG9uZ21vZGUgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xuLVx0aWYgKCFsb25nbW9kZSkge1xuK1x0aXNfNjRiaXQgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xuK1x0aWYgKCFpc182NGJpdCkge1xuIFx0XHRpbnB1dCA9IGt2bV9lYXhfcmVhZCh2Y3B1KTtcbiBcdFx0cGFyYW1zWzBdID0ga3ZtX2VieF9yZWFkKHZjcHUpO1xuIFx0XHRwYXJhbXNbMV0gPSBrdm1fZWN4X3JlYWQodmNwdSk7XG5AQCAtMTc1MSwxNyArMTc3OSwxNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHZjcHUsIHBhcmFtc1sxXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1Jfc2NoZWRfb3A6XG4tXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGxvbmdtb2RlLCBwYXJhbXNbMF0sXG4rXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGlzXzY0Yml0LCBwYXJhbXNbMF0sXG4gXHRcdFx0XHRcdFx0IHBhcmFtc1sxXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1JfdmNwdV9vcDpcbi1cdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sXG4rXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3ZjcHVfb3AodmNwdSwgaXNfNjRiaXQsIHBhcmFtc1swXSwgcGFyYW1zWzFdLFxuIFx0XHRcdFx0XHRcdHBhcmFtc1syXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1Jfc2V0X3RpbWVyX29wOiB7XG4gXHRcdHU2NCB0aW1lb3V0ID0gcGFyYW1zWzBdO1xuIFx0XHQvKiBJbiAzMi1iaXQgbW9kZSwgdGhlIDY0LWJpdCB0aW1lb3V0IGlzIGluIHR3byAzMi1iaXQgcGFyYW1zLiAqL1xuLVx0XHRpZiAoIWxvbmdtb2RlKVxuK1x0XHRpZiAoIWlzXzY0Yml0KVxuIFx0XHRcdHRpbWVvdXQgfD0gcGFyYW1zWzFdIFx1MDAzY1x1MDAzYyAzMjtcbiBcdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHZjcHUsIHRpbWVvdXQsIFx1MDAyNnIpO1xuIFx0XHRicmVhaztcbkBAIC0xNzc2LDcgKzE4MDQsNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIGhhbmRsZV9pbl91c2Vyc3BhY2U6XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1hFTjtcbiBcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi50eXBlID0gS1ZNX0VYSVRfWEVOX0hDQUxMO1xuLVx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwubG9uZ21vZGUgPSBsb25nbW9kZTtcbitcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi51LmhjYWxsLmxvbmdtb2RlID0gaXNfNjRiaXQ7XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2V4ZW4udS5oY2FsbC5jcGwgPSBjcGw7XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2V4ZW4udS5oY2FsbC5pbnB1dCA9IGlucHV0O1xuIFx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwucGFyYW1zWzBdID0gcGFyYW1zWzBdO1xuQEAgLTE3OTQsNyArMTgyMiw3IEBAIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gc3RhdGljIHZvaWQga3ZtX3hlbl9jaGVja19wb2xsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG9ydClcbiB7XG4tXHRpbnQgcG9sbF9ldnRjaG4gPSB2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfZXZ0Y2huO1xuK1x0aW50IHBvbGxfZXZ0Y2huID0gUkVBRF9PTkNFKHZjcHUtXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4pO1xuIFxuIFx0aWYgKChwb2xsX2V2dGNobiA9PSBwb3J0IHx8IHBvbGxfZXZ0Y2huID09IC0xKSBcdTAwMjZcdTAwMjZcbiBcdCAgICB0ZXN0X2FuZF9jbGVhcl9iaXQodmNwdS1cdTAwM2V2Y3B1X2lkeCwgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4ucG9sbF9tYXNrKSkge1xuQEAgLTE4MTYsOCArMTg0NCw5IEBAIHN0YXRpYyB2b2lkIGt2bV94ZW5fY2hlY2tfcG9sbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBvcnQpXG4gaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZTtcbitcdGJvb2wgaGFzXzY0Yml0X3NoaW5mbyA9IGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pO1xuK1x0dW5zaWduZWQgbG9uZyAqcGVuZGluZ19iaXRzLCAqbWFza19iaXRzLCB2aV9wZW5kaW5nX3NlbF9vZnM7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHR1bnNpZ25lZCBsb25nICpwZW5kaW5nX2JpdHMsICptYXNrX2JpdHM7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHBvcnRfd29yZF9iaXQ7XG4gXHRib29sIGtpY2tfdmNwdSA9IGZhbHNlO1xuQEAgLTE4MzMsNyArMTg2Miw3IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdFdSSVRFX09OQ0UoeGUtXHUwMDNldmNwdV9pZHgsIHZjcHUtXHUwMDNldmNwdV9pZHgpO1xuIFx0fVxuIFxuLVx0aWYgKHhlLVx1MDAzZXBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbitcdGlmICh4ZS1cdTAwM2Vwb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHJjID0gLUVXT1VMREJMT0NLO1xuQEAgLTE4NDQsMTYgKzE4NzMsMjMgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdGlmICgha3ZtX2dwY19jaGVjayhncGMsIFBBR0VfU0laRSkpXG4gXHRcdGdvdG8gb3V0X3JjdTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbitcdGlmIChoYXNfNjRiaXRfc2hpbmZvKSB7XG4gXHRcdHN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4gXHRcdHBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopXHUwMDI2c2hpbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nO1xuIFx0XHRtYXNrX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fbWFzaztcbiBcdFx0cG9ydF93b3JkX2JpdCA9IHhlLVx1MDAzZXBvcnQgLyA2NDtcbitcbitcdFx0dmlfcGVuZGluZ19zZWxfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3BlbmRpbmdfc2VsKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuIFx0XHRwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fcGVuZGluZztcbiBcdFx0bWFza19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZzaGluZm8tXHUwMDNlZXZ0Y2huX21hc2s7XG4gXHRcdHBvcnRfd29yZF9iaXQgPSB4ZS1cdTAwM2Vwb3J0IC8gMzI7XG4rXG4rXHRcdHZpX3BlbmRpbmdfc2VsX29mcyA9IG9mZnNldG9mKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fcGVuZGluZ19zZWwpO1xuK1xuK1x0XHQvKiB0ZXN0X2FuZF9zZXRfYml0KCkgbmVlZHMgNjQtYml0IGFsaWdubWVudCwgYnV0IHRoYXQncyBPSyAqL1xuK1x0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgZXZ0Y2huX3BlbmRpbmcpIFx1MDAyNiA3KTtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtMTg2OSw2ICsxOTA1LDggQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0cmMgPSAtRU5PVENPTk47IC8qIE1hc2tlZCAqL1xuIFx0XHRrdm1feGVuX2NoZWNrX3BvbGxlcih2Y3B1LCB4ZS1cdTAwM2Vwb3J0KTtcbiBcdH0gZWxzZSB7XG4rXHRcdGJvb2wgb2xkO1xuK1xuIFx0XHRyYyA9IDE7IC8qIERlbGl2ZXJlZCB0byB0aGUgYml0bWFwIGluIHNoYXJlZF9pbmZvLiAqL1xuIFx0XHQvKiBOb3cgc3dpdGNoIHRvIHRoZSB2Q1BVJ3MgdmNwdV9pbmZvIHRvIHNldCB0aGUgaW5kZXggYW5kIHBlbmRpbmdfc2VsICovXG4gXHRcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbkBAIC0xODg1LDE5ICsxOTIzLDI5IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdFx0Z290byBvdXRfcmN1O1xuIFx0XHR9XG4gXG4tXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbi1cdFx0XHRzdHJ1Y3QgdmNwdV9pbmZvICp2Y3B1X2luZm8gPSBncGMtXHUwMDNla2h2YTtcbi1cdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCwgXHUwMDI2dmNwdV9pbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCkpIHtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodmNwdV9pbmZvLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4tXHRcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmNwdV9pbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4tXHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnRfd29yZF9iaXQsXG4tXHRcdFx0XHRcdCAgICAgICh1bnNpZ25lZCBsb25nICopXHUwMDI2dmNwdV9pbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCkpIHtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodmNwdV9pbmZvLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4tXHRcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuLVx0XHRcdH1cbitcdFx0LypcbitcdFx0ICogRXhwbGljaXRseSB1c2UgYSAzMi1iaXQgYnRzbCBpbnN0ZWFkIG9mIHRlc3RfYW5kX3NldF9iaXQoKSxcbitcdFx0ICogd2hpY2ggd291bGQgdXNlIGJ0c3Egb24geDg2LTY0LiBUaGUgdmNwdV9pbmZvIGlzIGd1ZXN0LVxuK1x0XHQgKiBjb250cm9sbGVkIGFuZCBvbmx5IHJlcXVpcmVkIHRvIGJlIDMyLWJpdCBhbGlnbmVkLCBzbyBhXG4rXHRcdCAqIDY0LWJpdCBhY2Nlc3MgY291bGQgZ2VuZXJhdGUgYSBzcGxpdC1sb2NrICNBQy5cbitcdFx0ICpcbitcdFx0ICogTm90ZSwgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgdGVzdF9hbmRfc2V0X2JpdCgpIG9uXG4rXHRcdCAqIHBlbmRpbmdfYml0cyBhYm92ZTogdGhhdCBpcyBpbiB0aGUgcGVyLVZNIHNoYXJlZF9pbmZvLCB3aGljaFxuK1x0XHQgKiBpcyBwYWdlIGFsaWduZWQsIHNvIHRoZSBhY2Nlc3MgaXMgZ3VhcmFudGVlZCB0byBiZSA2NC1iaXRcbitcdFx0ICogYWxpZ25lZC5cbitcdFx0ICovXG4rXHRcdG9sZCA9IEdFTl9CSU5BUllfUk1XY2MoTE9DS19QUkVGSVggXCJidHNsXCIsXG4rXHRcdFx0XHQgICAgICAgKih1MzIgKikoZ3BjLVx1MDAzZWtodmEgKyB2aV9wZW5kaW5nX3NlbF9vZnMpLFxuK1x0XHRcdFx0ICAgICAgIGMsIFwiSXJcIiwgcG9ydF93b3JkX2JpdCk7XG4rXHRcdGlmICghb2xkKSB7XG4rXHRcdFx0c3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtXHUwMDNla2h2YTtcbitcbitcdFx0XHQvKiBObyBuZWVkIGZvciBjb21wYXQgaGFuZGxpbmcgKi9cbitcdFx0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSAhPVxuK1x0XHRcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSk7XG4rXG4rXHRcdFx0V1JJVEVfT05DRSh2aS1cdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xuK1x0XHRcdGtpY2tfdmNwdSA9IHRydWU7XG4gXHRcdH1cbiBcbiBcdFx0LyogRm9yIHRoZSBwZXItdkNQVSBsYXBpYyB2ZWN0b3IsIGRlbGl2ZXIgaXQgYXMgTVNJLiAqL1xuQEAgLTE5OTUsNyArMjA0Myw3IEBAIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXG4gXHQvKlxuLVx0ICogRG9uJ3QgY2hlY2sgZm9yIHRoZSBwb3J0IGJlaW5nIHdpdGhpbiByYW5nZSBvZiBtYXhfZXZ0Y2huX3BvcnQoKS5cbitcdCAqIERvbid0IGNoZWNrIGZvciB0aGUgcG9ydCBiZWluZyB3aXRoaW4gcmFuZ2Ugb2Yga3ZtX21heF9ldnRjaG5fcG9ydCgpLlxuIFx0ICogVXNlcnNwYWNlIGNhbiBjb25maWd1cmUgd2hhdCBldmVyIHRhcmdldHMgaXQgbGlrZXM7IGV2ZW50cyBqdXN0IHdvbid0XG4gXHQgKiBiZSBkZWxpdmVyZWQgaWYvd2hpbGUgdGhlIHRhcmdldCBpcyBpbnZhbGlkLCBqdXN0IGxpa2UgdXNlcnNwYWNlIGNhblxuIFx0ICogY29uZmlndXJlIE1TSXMgd2hpY2ggdGFyZ2V0IG5vbi1leGlzdGVudCBBUElDcy5cbkBAIC0yMDA0LDggKzIwNTIsOCBAQCBpbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxuIFx0ICogY2FuIGJlIHJlc3RvcmVkICppbmRlcGVuZGVudGx5KiBvZiBvdGhlciB0aGluZ3MgbGlrZSBjcmVhdGluZyB2Q1BVcyxcbiBcdCAqIHdpdGhvdXQgaW1wb3NpbmcgYW4gb3JkZXJpbmcgZGVwZW5kZW5jeSBvbiB1c2Vyc3BhY2UuICBJbiB0aGlzXG4gXHQgKiBwYXJ0aWN1bGFyIGNhc2UsIHRoZSBwcm9ibGVtYXRpYyBvcmRlcmluZyB3b3VsZCBiZSB3aXRoIHNldHRpbmcgdGhlXG4tXHQgKiBYZW4gJ2xvbmcgbW9kZScgZmxhZywgd2hpY2ggY2hhbmdlcyBtYXhfZXZ0Y2huX3BvcnQoKSB0byBhbGxvdyA0MDk2XG4tXHQgKiBpbnN0ZWFkIG9mIDEwMjQgZXZlbnQgY2hhbm5lbHMuXG4rXHQgKiBYZW4gJ2xvbmcgbW9kZScgZmxhZywgd2hpY2ggY2hhbmdlcyBrdm1fbWF4X2V2dGNobl9wb3J0KCkgdG8gYWxsb3dcbitcdCAqIDQwOTYgaW5zdGVhZCBvZiAxMDI0IGV2ZW50IGNoYW5uZWxzLlxuIFx0ICovXG4gXG4gXHQvKiBXZSBvbmx5IHN1cHBvcnQgMiBsZXZlbCBldmVudCBjaGFubmVscyBmb3Igbm93ICovXG5AQCAtMjA0Miw3ICsyMDkwLDcgQEAgaW50IGt2bV94ZW5faHZtX2V2dGNobl9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pcnFfcm91dGluZ194ZW5fZXZ0Y2huICpcbiBcdHN0cnVjdCBrdm1feGVuX2V2dGNobiBlO1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICghdXhlLVx1MDAzZXBvcnQgfHwgdXhlLVx1MDAzZXBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbitcdGlmICghdXhlLVx1MDAzZXBvcnQgfHwgdXhlLVx1MDAzZXBvcnQgXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0LyogV2Ugb25seSBzdXBwb3J0IDIgbGV2ZWwgZXZlbnQgY2hhbm5lbHMgZm9yIG5vdyAqL1xuQEAgLTIwOTMsNyArMjE0MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX3VwZGF0ZShzdHJ1Y3Qga3ZtICprdm0sXG4gXG4gXHQvKiBQcm90ZWN0IHdyaXRlcyB0byBldnRjaG5mZCBhcyB3ZWxsIGFzIHRoZSBpZHIgbG9va3VwLiAgKi9cbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbi1cdGV2dGNobmZkID0gaWRyX2ZpbmQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCk7XG4rXHRldnRjaG5mZCA9IHhhX2xvYWQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCk7XG4gXG4gXHRyZXQgPSAtRU5PRU5UO1xuIFx0aWYgKCFldnRjaG5mZClcbkBAIC0yMTUyLDcgKzIyMDAsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9hc3NpZ24oc3RydWN0IGt2bSAqa3ZtLFxuIFxuIFx0Y2FzZSBFVlRDSE5TVEFUX2ludGVyZG9tYWluOlxuIFx0XHRpZiAoZGF0YS1cdTAwM2V1LmV2dGNobi5kZWxpdmVyLnBvcnQucG9ydCkge1xuLVx0XHRcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4rXHRcdFx0aWYgKGRhdGEtXHUwMDNldS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQgXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4gXHRcdFx0XHRnb3RvIG91dF9ub2V2ZW50ZmQ7IC8qIC1FSU5WQUwgKi9cbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRldmVudGZkID0gZXZlbnRmZF9jdHhfZmRnZXQoZGF0YS1cdTAwM2V1LmV2dGNobi5kZWxpdmVyLmV2ZW50ZmQuZmQpO1xuQEAgLTIxODcsMTMgKzIyMzUsMTMgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfYXNzaWduKHN0cnVjdCBrdm0gKmt2bSxcbiBcdH1cbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbi1cdHJldCA9IGlkcl9hbGxvYyhcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBldnRjaG5mZCwgcG9ydCwgcG9ydCArIDEsXG4rXHRyZXQgPSB4YV9pbnNlcnQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCwgZXZ0Y2huZmQsXG4gXHRcdFx0R0ZQX0tFUk5FTCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbi1cdGlmIChyZXQgXHUwMDNlPSAwKVxuK1x0aWYgKCFyZXQpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHJldCA9PSAtRU5PU1BDKVxuK1x0aWYgKHJldCA9PSAtRUJVU1kpXG4gXHRcdHJldCA9IC1FRVhJU1Q7XG4gb3V0OlxuIFx0aWYgKGV2ZW50ZmQpXG5AQCAtMjIwOCw3ICsyMjU2LDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfZGVhc3NpZ24oc3RydWN0IGt2bSAqa3ZtLCB1MzIgcG9ydClcbiBcdHN0cnVjdCBldnRjaG5mZCAqZXZ0Y2huZmQ7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XG4tXHRldnRjaG5mZCA9IGlkcl9yZW1vdmUoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgcG9ydCk7XG4rXHRldnRjaG5mZCA9IHhhX2VyYXNlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIHBvcnQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XG4gXG4gXHRpZiAoIWV2dGNobmZkKVxuQEAgLTIyMjQsNyArMjI3Miw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2RlYXNzaWduKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHBvcnQpXG4gc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCBldnRjaG5mZCAqZXZ0Y2huZmQsICoqYWxsX2V2dGNobmZkcztcbi1cdGludCBpO1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuIFx0aW50IG4gPSAwO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4ueGVuX2xvY2spO1xuQEAgLTIyMzQsNyArMjI4Miw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KHN0cnVjdCBrdm0gKmt2bSlcbiBcdCAqIGNyaXRpY2FsIHNlY3Rpb24sIGZpcnN0IGNvbGxlY3QgYWxsIHRoZSBldnRjaG5mZCBvYmplY3RzXG4gXHQgKiBpbiBhbiBhcnJheSBhcyB0aGV5IGFyZSByZW1vdmVkIGZyb20gZXZ0Y2huX3BvcnRzLlxuIFx0ICovXG4tXHRpZHJfZm9yX2VhY2hfZW50cnkoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQsIGkpXG4rXHR4YV9mb3JfZWFjaChcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBpLCBldnRjaG5mZClcbiBcdFx0bisrO1xuIFxuIFx0YWxsX2V2dGNobmZkcyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgZXZ0Y2huZmQgKiwgbik7XG5AQCAtMjI0NCw5ICsyMjkyLDkgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0fVxuIFxuIFx0biA9IDA7XG4tXHRpZHJfZm9yX2VhY2hfZW50cnkoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgZXZ0Y2huZmQsIGkpIHtcbitcdHhhX2Zvcl9lYWNoKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGksIGV2dGNobmZkKSB7XG4gXHRcdGFsbF9ldnRjaG5mZHNbbisrXSA9IGV2dGNobmZkO1xuLVx0XHRpZHJfcmVtb3ZlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLVx1MDAzZXNlbmRfcG9ydCk7XG4rXHRcdHhhX2VyYXNlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMsIGV2dGNobmZkLVx1MDAzZXNlbmRfcG9ydCk7XG4gXHR9XG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbiBcbkBAIC0yMjcwLDcgKzIzMTgsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2V0YXR0cl9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YVxuIFx0aWYgKGRhdGEtXHUwMDNldS5ldnRjaG4uZmxhZ3MgPT0gS1ZNX1hFTl9FVlRDSE5fUkVTRVQpXG4gXHRcdHJldHVybiBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoa3ZtKTtcbiBcbi1cdGlmICghcG9ydCB8fCBwb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4rXHRpZiAoIXBvcnQgfHwgcG9ydCBcdTAwM2U9IGt2bV9tYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoZGF0YS1cdTAwM2V1LmV2dGNobi5mbGFncyA9PSBLVk1fWEVOX0VWVENITl9ERUFTU0lHTilcbkBAIC0yMjk3LDEyICsyMzQ1LDEwIEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfZXZ0Y2huX3NlbmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcGFyYW0sIHU2NCAqcilcbiBcdH1cbiBcbiBcdC8qXG4tXHQgKiBldnRjaG5mZCBpcyBwcm90ZWN0ZWQgYnkga3ZtLVx1MDAzZXNyY3U7IHRoZSBpZHIgbG9va3VwIGluc3RlYWRcbi1cdCAqIGlzIHByb3RlY3RlZCBieSBSQ1UuXG4rXHQgKiBldnRjaG5mZCBpcyBwcm90ZWN0ZWQgYnkga3ZtLVx1MDAzZXNyY3U7IHRoZSB4YV9sb2FkIGlzIFJDVS1zYWZlXG4rXHQgKiBpbnRlcm5hbGx5LCBubyBleHBsaWNpdCByY3VfcmVhZF9sb2NrKCkgbmVlZGVkLlxuIFx0ICovXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRldnRjaG5mZCA9IGlkcl9maW5kKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgc2VuZC5wb3J0KTtcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0ZXZ0Y2huZmQgPSB4YV9sb2FkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgc2VuZC5wb3J0KTtcbiBcdGlmICghZXZ0Y2huZmQpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC0yMzQ5LDIzICsyMzk1LDIzIEBAIHZvaWQga3ZtX3hlbl9kZXN0cm95X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHZvaWQga3ZtX3hlbl9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRtdXRleF9pbml0KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XG4tXHRpZHJfaW5pdChcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTtcbitcdHhhX2luaXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cyk7XG4gXHRrdm1fZ3BjX2luaXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZSwga3ZtKTtcbiB9XG4gXG4gdm9pZCBrdm1feGVuX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCBldnRjaG5mZCAqZXZ0Y2huZmQ7XG4tXHRpbnQgaTtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbiBcdGt2bV9ncGNfZGVhY3RpdmF0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlKTtcbiBcbi1cdGlkcl9mb3JfZWFjaF9lbnRyeShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzLCBldnRjaG5mZCwgaSkge1xuK1x0eGFfZm9yX2VhY2goXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLmV2dGNobl9wb3J0cywgaSwgZXZ0Y2huZmQpIHtcbiBcdFx0aWYgKCFldnRjaG5mZC1cdTAwM2VkZWxpdmVyLnBvcnQucG9ydClcbiBcdFx0XHRldmVudGZkX2N0eF9wdXQoZXZ0Y2huZmQtXHUwMDNlZGVsaXZlci5ldmVudGZkLmN0eCk7XG4gXHRcdGtmcmVlKGV2dGNobmZkKTtcbiBcdH1cbi1cdGlkcl9kZXN0cm95KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcG9ydHMpO1xuK1x0eGFfZGVzdHJveShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BvcnRzKTtcbiBcbiBcdGlmIChrdm0tXHUwMDNlYXJjaC54ZW4uaHZtX2NvbmZpZy5tc3IpXG4gXHRcdHN0YXRpY19icmFuY2hfc2xvd19kZWNfZGVmZXJyZWQoXHUwMDI2a3ZtX3hlbl9lbmFibGVkKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmggYi9hcmNoL3g4Ni9rdm0veGVuLmhcbmluZGV4IGYzNzI4NTU4NTdhODguLjlkMDRlMzUwYmRiMWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmhcbisrKyBiL2FyY2gveDg2L2t2bS94ZW4uaFxuQEAgLTIzNSw2ICsyMzUsMTEgQEAgc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbyB7XG4gI2RlZmluZSBDT01QQVRfRVZUQ0hOXzJMX05SX0NIQU5ORUxTICg4ICpcdFx0XHRcdFxcXG4gXHRcdFx0XHQgICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgXFxcbiBcdFx0XHRcdFx0XHQgICBldnRjaG5fcGVuZGluZykpXG4rXG4rLyogTGF0Y2hlZCBWTS13aWRlIG1vZGU7IHRoZSBLVk0gZXF1aXZhbGVudCBvZiBYZW4ncyAhaGFzXzMyYml0X3NoaW5mbygpLiAqL1xuKyNkZWZpbmUga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkgXFxcbitcdChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IFJFQURfT05DRSgoa3ZtKS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpKVxuK1xuIHN0cnVjdCBjb21wYXRfdmNwdV9ydW5zdGF0ZV9pbmZvIHtcbiAgICAgaW50IHN0YXRlO1xuICAgICB1aW50NjRfdCBzdGF0ZV9lbnRyeV90aW1lO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggMDNiZmM5Mjg2NGI2ZS4uM2RkMDQ2MDVmMmU1NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtODU1LDYgKzg1NSw4IEBAIHN0cnVjdCBrdm0ge1xuIFx0Z2ZuX3QgbW11X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQ7XG4gXHRnZm5fdCBtbXVfaW52YWxpZGF0ZV9yYW5nZV9lbmQ7XG4gXG4rXHR1bnNpZ25lZCBsb25nIGdwY19pbnZhbGlkYXRlX3NlcTtcbitcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlcztcbiBcdHU2NCBtYW51YWxfZGlydHlfbG9nX3Byb3RlY3Q7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RlbnRyeTtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggNjVlYjI2YTA1MjBkOC4uMTA4ZDQyYzVjMWQ2YSAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcbisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbkBAIC04MTMsNiArODEzLDE2IEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sXG4gXG4gXHQvKiBQYWlycyB3aXRoIHRoZSBpbmNyZW1lbnQgaW4gcmFuZ2Vfc3RhcnQoKS4gKi9cbiBcdHNwaW5fbG9jayhcdTAwMjZrdm0tXHUwMDNlbW5faW52YWxpZGF0ZV9sb2NrKTtcbitcdGt2bS1cdTAwM2VncGNfaW52YWxpZGF0ZV9zZXErKztcbitcbitcdC8qXG4rXHQgKiBBcyB3aXRoIHRoZSBNTVUgc2VxdWVuY2UgY291bnRlciBhbmQgbW11X2ludmFsaWRhdGVfaW5fcHJvZ3Jlc3MsIHRoZVxuK1x0ICogR1BDIHNlcXVlbmNlIGluY3JlYXNlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgdGhlIGludmFsaWRhdGUgY291bnRcbitcdCAqIGdvZXMgdG8gemVyby4gIFBhaXJzIHdpdGggdGhlIHNtcF9ybWIoKSBpblxuK1x0ICogbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKCkuXG4rXHQgKi9cbitcdHNtcF93bWIoKTtcbitcbiBcdGlmICghV0FSTl9PTl9PTkNFKCFrdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpKVxuIFx0XHQtLWt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcbiBcdHdha2UgPSAha3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50O1xuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMgYi92aXJ0L2t2bS9wZm5jYWNoZS5jXG5pbmRleCA3MjhkMmMxYjQ4OGE4Li4zNjU5Njg2Yjk3YzI0IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vcGZuY2FjaGUuY1xuKysrIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xuQEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMgdm9pZCBncGNfdW5tYXAoa3ZtX3Bmbl90IHBmbiwgdm9pZCAqa2h2YSlcbiAjZW5kaWZcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NlcSlcbitzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBncGNfc2VxKVxuIHtcbiBcdC8qXG4gXHQgKiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBhY3RzIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXNcbkBAIC0xMzYsMjAgKzEzNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc1xuIFx0ICogTm90ZSwgaXQgZG9lcyBub3QgbWF0dGVyIHRoYXQgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnRcbiBcdCAqIGlzIG5vdCBwcm90ZWN0ZWQgYnkgZ3BjLVx1MDAzZWxvY2suICBJdCBpcyBndWFyYW50ZWVkIHRvXG4gXHQgKiBiZSBlbGV2YXRlZCBiZWZvcmUgdGhlIG1tdV9ub3RpZmllciBhY3F1aXJlcyBncGMtXHUwMDNlbG9jaywgYW5kXG4tXHQgKiBpc24ndCBkcm9wcGVkIHVudGlsIGFmdGVyIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyB1cGRhdGVkLlxuK1x0ICogaXNuJ3QgZHJvcHBlZCB1bnRpbCBhZnRlciBncGNfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC5cbiBcdCAqL1xuIFx0aWYgKGt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHQvKlxuIFx0ICogRW5zdXJlIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGlzIHJlYWQgYmVmb3JlXG4tXHQgKiBtbXVfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxuLVx0ICogbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGVcbitcdCAqIGdwY19pbnZhbGlkYXRlX3NlcS4gIFRoaXMgcGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluXG4rXHQgKiBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGVcbiBcdCAqIG9sZCAobm9uLXplcm8pIHZhbHVlIG9mIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IG9yIHRoZVxuLVx0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW11X2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxuK1x0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxuIFx0ICovXG4gXHRzbXBfcm1iKCk7XG4tXHRyZXR1cm4ga3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcSAhPSBtbXVfc2VxO1xuK1x0cmV0dXJuIGt2bS1cdTAwM2VncGNfaW52YWxpZGF0ZV9zZXEgIT0gZ3BjX3NlcTtcbiB9XG4gXG4gc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG5AQCAtMTU4LDcgKzE1OCw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuIFx0dm9pZCAqb2xkX2todmEgPSAodm9pZCAqKVBBR0VfQUxJR05fRE9XTigodWludHB0cl90KWdwYy1cdTAwM2VraHZhKTtcbiBcdGt2bV9wZm5fdCBuZXdfcGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XG4gXHR2b2lkICpuZXdfa2h2YSA9IE5VTEw7XG4tXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4rXHR1bnNpZ25lZCBsb25nIGdwY19zZXE7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcbiBcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XG5AQCAtMTgxLDcgKzE4MSw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuIFx0Z3BjLVx1MDAzZXZhbGlkID0gZmFsc2U7XG4gXG4gXHRkbyB7XG4tXHRcdG1tdV9zZXEgPSBncGMtXHUwMDNla3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcbitcdFx0Z3BjX3NlcSA9IGdwYy1cdTAwM2Vrdm0tXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxO1xuIFx0XHRzbXBfcm1iKCk7XG4gXG4gXHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2Z3BjLVx1MDAzZWxvY2spO1xuQEAgLTIzMiw3ICsyMzIsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcdFx0ICogYXR0ZW1wdGluZyB0byByZWZyZXNoLlxuIFx0XHQgKi9cbiBcdFx0V0FSTl9PTl9PTkNFKGdwYy1cdTAwM2V2YWxpZCk7XG4tXHR9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLVx1MDAzZWt2bSwgbW11X3NlcSkpO1xuK1x0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cdTAwM2Vrdm0sIGdwY19zZXEpKTtcbiBcbiBcdGdwYy1cdTAwM2V2YWxpZCA9IHRydWU7XG4gXHRncGMtXHUwMDNlcGZuID0gbmV3X3BmbjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA0OjM5OjI0Ljk2MzAwNzI2NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5ODM1ODkwNDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBBIERlZXAgRGl2ZSBpbnRvIE1lbW9yeSBTYWZldHkgYW5kIENvbmN1cnJlbmN5KipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgYXNzZXNzIHBvdGVudGlhbCByaXNrcywgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGEgY29tbW9uIHNvdXJjZSBvZiBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIFdlJ3JlIGRlYWxpbmcgd2l0aCBLVk0sIHNvIHdlIG5lZWQgdG8gYmUgZXh0cmEgY2F1dGlvdXMuXG5cbkZpcnN0LCB0aGUgcGF0Y2ggdG91Y2hlcyBhIGZldyBrZXkgYXJlYXM6IHRoZSBYODYgS1ZNIGNvZGUsIFhlbiBpbnRlZ3JhdGlvbiwgYW5kIHRoZSBLVk0gY29yZS4gVGhlcmUncyBhIHNpZ25pZmljYW50IHNoaWZ0IGZyb20gYGlkciBldnRjaG5fcG9ydHNgIHRvIGB4YXJyYXkgZXZ0Y2huX3BvcnRzYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHRyYW5zaXRpb24gaXMgc291bmQgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24uIFRoZSBhbGlnbm1lbnQgY2hlY2tzIGluIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGZvciBgZ3BhYCBhbmQgYGh2YWAgYXJlIGdvb2QsIGFuZCB0aGUgYml0d2lzZSBvcGVyYXRpb25zIHdpdGggYXRvbWljIGZ1bmN0aW9ucyBhcmUgcmVwbGFjaW5nIHNvbWUgaW5saW5lIGFzc2VtYmx5IHdoaWNoIGlzIHNlbnNpYmxlIGZvciBhdm9pZGluZyBzcGxpdCBsb2Nrcy4gVGhlIG5ldyBzZXF1ZW5jZSBjb3VudGVyIGBncGNfaW52YWxpZGF0ZV9zZXFgIGlzIGFsc28gZ29vZC5cblxuSSdtIG5vdyBnb2luZyB0byBnbyB0aHJvdWdoIHRoZXNlIGNoYW5nZXMgaW4gZGV0YWlsLlxuXG4qICAgSW4gYGFyY2gveDg2L2t2bS94ZW4uY2AsIHRoZSBuZXcgYGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdGAgdXNpbmcgYGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mb2AgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgYXRvbWljIGJpdCBvcGVyYXRpb25zIGFuZCB0aGUgU1JDVSBndWFyZCBpbiBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgIGxvb2tzIGdvb2QuIFRoZSBhbGlnbm1lbnQgY2hlY2tzIGluIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGFyZSBhcHByb3ByaWF0ZS4gSGVscGVyIHVwZGF0ZXMgc2VlbSBva2F5LiBUaGUgbG9ja2luZyB3aXRoIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgZm9yIGBwb2xsX2V2dGNobmAgYW5kIHRoZSByZW5hbWluZyBvZiBgbG9uZ21vZGVgIGlzIE9LIGFzIHdlbGwuIFRoZSBjaGFuZ2UgdG8gYXRvbWljIGBidHNsYCBtYWtlcyBzZW5zZS4gVGhlIFhBcnJheSBjb252ZXJzaW9ucyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50IGNoYW5nZSB0byB2ZXJpZnkgaGVyZS5cblxuKiAgIEluIGB2aXJ0L2t2bS9wZm5jYWNoZS5jYCBhbmQgYGt2bV9tYWluLmNgLCB0aGUgc2VwYXJhdGUgYGdwY19pbnZhbGlkYXRlX3NlcWAgY291bnRlciBpcyBmaW5lLCBzaW5jZSBLVk0gdXNlcyBga3phbGxvY2Agb24gY3JlYXRpb24gYW5kIHRoZXJlIGFyZSBubyBpbml0aWFsaXphdGlvbiByaXNrcy5cblxuQXJlIGFueSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uPyBObywgdGhlIGBrbWFsbG9jX29ianNgIGFuZCBgeGFfaW5pdGAgdXNhZ2UgbG9va3MgY29ycmVjdC4gSXQncyBwcm9wZXJseSBpbml0aWFsaXplZC4gTm8gdXNlcmNvcHkgZnJvbSBrZXJuZWwgc3RydWN0cywgd2hpY2ggaXMgZ3JlYXQuIE5vIGNvbmRpdGlvbmFscyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZWl0aGVyLiBUaGlzIGlzIGFsbCBhYm91dCBjb25jdXJyZW5jeSwgZGF0YSBzdHJ1Y3R1cmUgdHJhbnNmb3JtYXRpb25zICh0aGUgSURSIHRvIFhBcnJheSBjb252ZXJzaW9uLCB3aGljaCBpcyB0aGUgYmlnIG9uZSksIGFuZCBhbGlnbm1lbnQgY2hlY2tzLlxuXG5MZXQgbWUgbm93IHBlcmZvcm0gYSBkZWVwZXIgaW5zcGVjdGlvbi4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIHNlZW0gdG8gaW50cm9kdWNlIGFueSBkaXJlY3QgdXNlcmNvcHksIGxlYWtpbmcgaW5mbywgb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gbG9va3MgbGlrZSBpdCB3b3VsZG4ndCBkZXRlY3QgaXNzdWVzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgcmVhZHMgKHN0YWNrL2hlYXApLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGluZGl2aWR1YWwgY2hhbmdlczogVGhlIGluY3JlbWVudCBvZiBgZ3BjX2ludmFsaWRhdGVfc2VxYCBsb29rcyBmaW5lLCBhcyBkb2VzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgZ3BjX3NlcWAgZnJvbSBpdC4gVGhlIGF0b21pYyBvcGVyYXRpb25zIHNlZW0gY29ycmVjdCBhbmQgdGhlIFJBSUkgZ3VhcmQgZnJvbSBgc3JjdWAgc2hvdWxkIGJlIGNvcnJlY3QsIGFuZCB0aGUgeGFycmF5IEFQSXMgbG9vayBzdGFuZGFyZCBhbmQgc2FmZS5cblxuKipDb25jbHVzaW9uOioqIEFmdGVyIHRoaXMgdGhvcm91Z2ggcmV2aWV3LCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBpcyBzYWZlIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGxlYWtzLCBhbmQgcG90ZW50aWFsIEtBU0FOL0tNU0FOIGlzc3Vlcy4gVGhlIEtBU0FOL0xPQ0tERVAgY2hlY2tzIHdpbGwgY2F0Y2ggYW55IGNvbmN1cnJlbmN5LXJlbGF0ZWQgcHJvYmxlbXMgKGxpa2UgVUFGLCBkYXRhIHJhY2VzLCBhbmQgT09CIGFjY2VzcykuIEtNU0FOIHdpbGwgYWxzbyBjb25maXJtIHRoaXMsIGFzIHRoZXNlIGNoYW5nZXMgYXBwZWFyIHRvIGJlIHNhZmUuIFRoZXJlZm9yZSwgdGhlIHJlc3VsdCBvZiBhIEtNU0FOIGNoZWNrIHdvdWxkIGJlIG5lZ2F0aXZlLlxuXG5LQVNBTiBkZWFscyB3aXRoIGNvbmN1cnJlbmN5IHN5bmNocm9uaXphdGlvbiwgcmVwbGFjZW1lbnQgb2YgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgYWxpZ25tZW50LiBLTVNBTiBjaGVja3MgZm9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpbmZvIGxlYWtzLCBvciBicmFuY2hpbmcgb24gc3VjaCBkYXRhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI2OCwiT3V0cHV0VG9rZW5zIjoyODYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTY1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDQ6Mzk6MzQuNzk4OTAxMzQ3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyBYZW4gZW11bGF0aW9uIGFuZCBHRk4tdG8tUEZOIGNhY2hlIGludmFsaWRhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdDpcXG4xLiBSZXBsYWNlcyB0aGUgSURSIGRhdGEgc3RydWN0dXJlIHdpdGggWEFycmF5IGZvciBldmVudCBjaGFubmVsIHBvcnQgdHJhY2tpbmcgKGBldnRjaG5fcG9ydHNgKS5cXG4yLiBJbnRyb2R1Y2VzIGEgZGVkaWNhdGVkIHNlcXVlbmNlIGNvdW50ZXIgKGBncGNfaW52YWxpZGF0ZV9zZXFgKSBpbiBgcGZuY2FjaGUuY2AgYW5kIGBrdm1fbWFpbi5jYCB0byBwcm9wZXJseSB0cmFjayBHUEMgaW52YWxpZGF0aW9uIGV2ZW50cy5cXG4zLiBGaXhlcyBwb3RlbnRpYWwgc3BsaXQtbG9jayBgI0FDYCBleGNlcHRpb25zIGJ5IGNoZWNraW5nIEdQQS9IVkEgMzItYml0IGFsaWdubWVudCBpbiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCBhbmQgdXNpbmcgMzItYml0IGF0b21pYyBiaXRvcHMgZm9yIGB2aV9wZW5kaW5nX3NlbGAuXFxuNC4gRml4ZXMgU1JDVSBsb2NraW5nIGluIGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGAgYW5kIGF0b21pYyByZWFkcy93cml0ZXMgZm9yIGBwb2xsX2V2dGNobmAuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBvciBleHBvc2Uga2VybmVsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBNZW1vcnkgc2FmZXR5IGFuZCBjb25jdXJyZW5jeSBjb25jZXJucyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9ja2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJ3MgWGVuIGVtdWxhdGlvbiBhbmQgR0ZOLXRvLVBGTiBjYWNoZSBpbnZhbGlkYXRpb24gbG9naWMuIFNwZWNpZmljYWxseSwgaXQ6XFxuMS4gUmVwbGFjZXMgdGhlIElEUiBkYXRhIHN0cnVjdHVyZSB3aXRoIFhBcnJheSBmb3IgZXZlbnQgY2hhbm5lbCBwb3J0IHRyYWNraW5nIChgZXZ0Y2huX3BvcnRzYCkuXFxuMi4gSW50cm9kdWNlcyBhIGRlZGljYXRlZCBzZXF1ZW5jZSBjb3VudGVyIChgZ3BjX2ludmFsaWRhdGVfc2VxYCkgaW4gYHBmbmNhY2hlLmNgIGFuZCBga3ZtX21haW4uY2AgdG8gcHJvcGVybHkgdHJhY2sgR1BDIGludmFsaWRhdGlvbiBldmVudHMuXFxuMy4gRml4ZXMgcG90ZW50aWFsIHNwbGl0LWxvY2sgYCNBQ2AgZXhjZXB0aW9ucyBieSBjaGVja2luZyBHUEEvSFZBIDMyLWJpdCBhbGlnbm1lbnQgaW4gYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAgYW5kIHVzaW5nIDMyLWJpdCBhdG9taWMgYml0b3BzIGZvciBgdmlfcGVuZGluZ19zZWxgLlxcbjQuIEZpeGVzIFNSQ1UgbG9ja2luZyBpbiBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgIGFuZCBhdG9taWMgcmVhZHMvd3JpdGVzIGZvciBgcG9sbF9ldnRjaG5gLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgb3IgZXhwb3NlIGtlcm5lbCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gTWVtb3J5IHNhZmV0eSBhbmQgY29uY3VycmVuY3kgY29uY2VybnMgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGxvY2tpbmcsIHVzZS1hZnRlci1mcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgd66d[1] Phase: Succeeded StartedAt: 2026-09-01 04:39:46 +0000 UTC FinishedAt: 2026-09-01 04:39:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-01 04:39:46 +0000 UTC FinishedAt: 2026-09-01 04:39:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[2] Phase: Succeeded StartedAt: 2026-09-01 04:39:46 +0000 UTC FinishedAt: 2026-09-01 08:17:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 04:39:46 +0000 UTC FinishedAt: 2026-09-01 08:17:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 04:39:46 +0000 UTC FinishedAt: 2026-09-01 04:39:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 04:39:46 +0000 UTC FinishedAt: 2026-09-01 04:39:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-workflowgd66d/series-workflowgd66d-convert-artifact-3458034426/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 04:39:56 +0000 UTC FinishedAt: 2026-09-01 04:56:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 04:39:56 +0000 UTC FinishedAt: 2026-09-01 04:56:02 +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:*b2b16174-388b-4ccd-b5d2-cdfdfed0eb1e,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-workflowgd66d/series-workflowgd66d-convert-artifact-3458034426/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": "dfe89570-cb8f-42cd-8be0-6fd3ddb010a9", "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-workflowgd66d/series-workflowgd66d-build-action-1497840552/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 04:39:56 +0000 UTC FinishedAt: 2026-09-01 04:55:52 +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:*b2b16174-388b-4ccd-b5d2-cdfdfed0eb1e,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-workflowgd66d/series-workflowgd66d-convert-artifact-3458034426/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": "dfe89570-cb8f-42cd-8be0-6fd3ddb010a9", "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-workflowgd66d/series-workflowgd66d-build-action-1497840552/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 04:56:02 +0000 UTC FinishedAt: 2026-09-01 04:56:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 04:56:02 +0000 UTC FinishedAt: 2026-09-01 04:56:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 04:56:02 +0000 UTC FinishedAt: 2026-09-01 04:56:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 04:56:02 +0000 UTC FinishedAt: 2026-09-01 04:56:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-workflowgd66d/series-workflowgd66d-convert-artifact-1812489557/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 04:56:12 +0000 UTC FinishedAt: 2026-09-01 04:58:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 04:56:12 +0000 UTC FinishedAt: 2026-09-01 04:57:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dfe89570-cb8f-42cd-8be0-6fd3ddb010a9,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-workflowgd66d/series-workflowgd66d-build-action-1497840552/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-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 04:58:07 +0000 UTC FinishedAt: 2026-09-01 04:58:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 04:58:07 +0000 UTC FinishedAt: 2026-09-01 04:58:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 04:58:07 +0000 UTC FinishedAt: 2026-09-01 05:14:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 04:58:07 +0000 UTC FinishedAt: 2026-09-01 05:14:05 +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:*b2b16174-388b-4ccd-b5d2-cdfdfed0eb1e,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-workflowgd66d/series-workflowgd66d-convert-artifact-1812489557/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": "ba81c7f1-b071-47d7-b0cd-8dc742d0cc1b", "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-workflowgd66d/series-workflowgd66d-build-action-3388573409/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 04:58:07 +0000 UTC FinishedAt: 2026-09-01 05:13:55 +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:*b2b16174-388b-4ccd-b5d2-cdfdfed0eb1e,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-workflowgd66d/series-workflowgd66d-convert-artifact-1812489557/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": "ba81c7f1-b071-47d7-b0cd-8dc742d0cc1b", "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-workflowgd66d/series-workflowgd66d-build-action-3388573409/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 05:14:05 +0000 UTC FinishedAt: 2026-09-01 05:14:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 05:14:05 +0000 UTC FinishedAt: 2026-09-01 05:14:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 05:14:05 +0000 UTC FinishedAt: 2026-09-01 05:16:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 05:14:05 +0000 UTC FinishedAt: 2026-09-01 05:16:11 +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:*ba81c7f1-b071-47d7-b0cd-8dc742d0cc1b,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-workflowgd66d/series-workflowgd66d-build-action-3388573409/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-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 05:16:21 +0000 UTC FinishedAt: 2026-09-01 08:17:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 05:16:21 +0000 UTC FinishedAt: 2026-09-01 08:17:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"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:*dfe89570-cb8f-42cd-8be0-6fd3ddb010a9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ba81c7f1-b071-47d7-b0cd-8dc742d0cc1b,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-workflowgd66d/series-workflowgd66d-build-action-1497840552/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-workflowgd66d/series-workflowgd66d-build-action-3388573409/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 05:16:21 +0000 UTC FinishedAt: 2026-09-01 05:16:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 05:16:21 +0000 UTC FinishedAt: 2026-09-01 05:16:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"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-workflowgd66d/series-workflowgd66d-convert-artifact-1562160954/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 05:16:21 +0000 UTC FinishedAt: 2026-09-01 05:16:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 05:16:21 +0000 UTC FinishedAt: 2026-09-01 05:16:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 05:16:21 +0000 UTC FinishedAt: 2026-09-01 05:16:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 05:16:31 +0000 UTC FinishedAt: 2026-09-01 08:17:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgd66d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","kvm_xen_hvm_set_attr","kvm_xen_hypercall","kvm_xen_inject_pending_events","__kvm_xen_has_interrupt","kvm_xen_set_evtchn_fast","kvm_xen_hvm_evtchn_send","kvm_gpc_refresh","kvm_gpc_activate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_X86","KVM_XEN"],"series_id":"799f6595-9f51-4e34-b00f-b8eaf20c1c4d","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-09-01 05:16:31 +0000 UTC FinishedAt: 2026-09-01 08:17:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dfe89570-cb8f-42cd-8be0-6fd3ddb010a9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ba81c7f1-b071-47d7-b0cd-8dc742d0cc1b,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-workflowgd66d/series-workflowgd66d-build-action-1497840552/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-workflowgd66d/series-workflowgd66d-build-action-3388573409/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-workflowgd66d/series-workflowgd66d-convert-artifact-1562160954/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,}