Name: series-workflowsg9m8 Phase: Running StartedAt: 2026-07-24 08:57:19 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsg9m8[0] Phase: Running StartedAt: 2026-07-24 08:57:19 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsg9m8[0].run-triage Phase: Running StartedAt: 2026-07-24 08:57:19 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsg9m8[0].run-triage(0) Phase: Running StartedAt: 2026-07-24 08:57:19 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "7c25590d03abcb5424723f90641fda5b6cefffc8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "7c25590d03abcb5424723f90641fda5b6cefffc8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "series_id": "b71bee3a-7fcf-4c5b-a308-2abfd435ca36" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "gen_kfunc_arg_proto", "get_kfunc_arg_type", "process_map_ptr_arg", "check_kfunc_args", "check_func_arg", "check_mem_size_reg", "check_mem_reg", "process_const_arg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VuX2tmdW5jX2FyZ19wcm90byYjMzQ7LAogICAgJiMzNDtnZXRfa2Z1bmNfYXJnX3R5cGUmIzM0OywKICAgICYjMzQ7cHJvY2Vzc19tYXBfcHRyX2FyZyYjMzQ7LAogICAgJiMzNDtjaGVja19rZnVuY19hcmdzJiMzNDssCiAgICAmIzM0O2NoZWNrX2Z1bmNfYXJnJiMzNDssCiAgICAmIzM0O2NoZWNrX21lbV9zaXplX3JlZyYjMzQ7LAogICAgJiMzNDtjaGVja19tZW1fcmVnJiMzNDssCiAgICAmIzM0O3Byb2Nlc3NfY29uc3RfYXJnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpZ25pZmljYW50bHkgcmVmYWN0b3JzIGhvdyB0aGUgZUJQRiB2ZXJpZmllciBoYW5kbGVzIGFyZ3VtZW50cyBmb3Iga2Z1bmNzIGFuZCBoZWxwZXIgZnVuY3Rpb25zLCBpbnRyb2R1Y2luZyBuZXcgYXJndW1lbnQgdHlwZXMgKEFSR19NRU1fU0laRSwgQVJHX01FTV9TSVpFX09SX1pFUk8pIGFuZCBhIG5ldyB3YXkgdG8gZ2VuZXJhdGUga2Z1bmMgcHJvdG90eXBlcyAoZ2VuX2tmdW5jX2FyZ19wcm90bykuIFRoaXMgaXMgY29yZSB2ZXJpZmllciBsb2dpYyB0aGF0IGlzIGhpZ2hseSBjb21wbGV4IGFuZCBwcm9uZSB0byBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG1ha2luZyBpdCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwOToxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE0OWM1N2EzZTY5ZTJmM2FhYzU2YmEyMjMxZjQ5ZjJhYWQxMTU2YTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAyNCAwOToxNzowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuaW5kZXggYzgwMWEzMzBhZWNlMDguLmNiZGU4NmQwODJjY2VhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuQEAgLTI1MCw2ICYjNDM7MjUwLDM0IEBAIE9yOjpcbiAgICAgICAgICAgICAgICAgLi4uXG4gICAgICAgICB9XG4gXG4mIzQzOzIuMy43IF9fY29uc3RfbWFwIGFuZCBfX21hcCBBbm5vdGF0aW9uc1xuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7XG4mIzQzO1RoZXNlIGFubm90YXRpb25zIGFyZSB1c2VkIGZvciBgYHN0cnVjdCBicGZfbWFwICpgYCBhcmd1bWVudHMgYW5kIGRpc3Rpbmd1aXNoIGFcbiYjNDM7dmVyaWZpZXIta25vd24gbWFwIGZyb20gYW4gb3BhcXVlIG9uZS5cbiYjNDM7XG4mIzQzO2BgX19jb25zdF9tYXBgYCBpbmRpY2F0ZXMgYSBtYXAgbXVzdCBiZSBrbm93biBhdCB0aGUgdmVyaWZpY2F0aW9uIHRpbWUsIGkuZS4gYVxuJiM0Mztjb25jcmV0ZSBtYXAgZmQgdGhlIEJQRiBwcm9ncmFtIHJlZmVyZW5jZXMgZGlyZWN0bHkuXG4mIzQzO1xuJiM0MztBbiBleGFtcGxlIGlzIGdpdmVuIGJlbG93OjpcbiYjNDM7XG4mIzQzOyAgICAgICAgX19icGZfa2Z1bmMgaW50IGJwZl93cV9pbml0KHN0cnVjdCBicGZfd3EgKndxLCB2b2lkICpwX19jb25zdF9tYXAsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7ICAgICAgICB7XG4mIzQzOyAgICAgICAgICAgICAgICAuLi5cbiYjNDM7ICAgICAgICB9XG4mIzQzO1xuJiM0MztgYF9fbWFwYGAgaW5kaWNhdGVzIGFuIG9wYXF1ZSBgYHN0cnVjdCBicGZfbWFwICpgYCB0aGF0IG1heSBiZSByZXNvbHZlZFxuJiM0MzthdCBydW4gdGltZS4gVGhlIGFyZ3VtZW50IG1heSB0YWtlIGVpdGhlciBhIG1hcCBmZCBvciBhIGBgUFRSX1RPX0JURl9JRGBgXG4mIzQzO2Bgc3RydWN0IGJwZl9tYXBgYCBwb2ludGVyLlxuJiM0MztcbiYjNDM7QW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XG4mIzQzO1xuJiM0MzsgICAgICAgIF9fYnBmX2tmdW5jIHZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlcyh2b2lkICpwX19tYXAsIC4uLilcbiYjNDM7ICAgICAgICB7XG4mIzQzOyAgICAgICAgICAgICAgICAuLi5cbiYjNDM7ICAgICAgICB9XG4mIzQzO1xuIC4uIF9CUEZfa2Z1bmNfbm9kZWY6XG4gXG4gMi40IFVzaW5nIGFuIGV4aXN0aW5nIGtlcm5lbCBmdW5jdGlvblxuQEAgLTQxMSw3ICYjNDM7NDM5LDcgQEAgRXhhbXBsZSBkZWNsYXJhdGlvbjpcbiAuLiBjb2RlLWJsb2NrOjogY1xuIFxuIFx0X19icGZfa2Z1bmMgaW50IGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LFxuLVx0XHRcdFx0XHRcdCAgICAgIHZvaWQgKm1hcF9fbWFwLCBicGZfdGFza193b3JrX2NhbGxiYWNrX3QgY2FsbGJhY2ssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIHZvaWQgKm1hcF9fY29uc3RfbWFwLCBicGZfdGFza193b3JrX2NhbGxiYWNrX3QgY2FsbGJhY2ssXG4gXHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KSB7IC4uLiB9XG4gXG4gRXhhbXBsZSB1c2FnZSBpbiBCUEYgcHJvZ3JhbTpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggZDk1NDIxMjdkZmRmYzAuLjJlYTVjZTMwZjcyOWJiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGYuaFxuQEAgLTc0OCw2ICYjNDM7NzQ4LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBicGZfbWFwX29mZmxvYWRfb3BzO1xuIGVudW0gYnBmX3R5cGVfZmxhZyB7XG4gXHQvKiBQVFIgbWF5IGJlIE5VTEwuICovXG4gXHRQVFJfTUFZQkVfTlVMTFx0XHQ9IEJJVCgwICYjNDM7IEJQRl9CQVNFX1RZUEVfQklUUyksXG4mIzQzO1x0U0NBTEFSX01BWUJFX1pFUk9cdD0gUFRSX01BWUJFX05VTEwsXG4gXG4gXHQvKiBNRU0gaXMgcmVhZC1vbmx5LiBXaGVuIGFwcGxpZWQgb24gYnBmX2FyZywgaXQgaW5kaWNhdGVzIHRoZSBhcmcgaXNcbiBcdCAqIGNvbXBhdGlibGUgd2l0aCBib3RoIG11dGFibGUgYW5kIGltbXV0YWJsZSBtZW1vcnkuXG5AQCAtODg4LDggJiM0Mzs4ODksNyBAQCBlbnVtIGJwZl9hcmdfdHlwZSB7XG4gXHRBUkdfUFRSX1RPX01FTSxcdFx0LyogcG9pbnRlciB0byB2YWxpZCBtZW1vcnkgKHN0YWNrLCBwYWNrZXQsIG1hcCB2YWx1ZSkgKi9cbiBcdEFSR19QVFJfVE9fQVJFTkEsXG4gXG4tXHRBUkdfQ09OU1RfU0laRSxcdFx0LyogbnVtYmVyIG9mIGJ5dGVzIGFjY2Vzc2VkIGZyb20gbWVtb3J5ICovXG4tXHRBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFx0LyogbnVtYmVyIG9mIGJ5dGVzIGFjY2Vzc2VkIGZyb20gbWVtb3J5IG9yIDAgKi9cbiYjNDM7XHRBUkdfTUVNX1NJWkUsXHRcdC8qIG51bWJlciBvZiBieXRlcyBhY2Nlc3NlZCBmcm9tIG1lbW9yeSAqL1xuIFxuIFx0QVJHX1BUUl9UT19DVFgsXHRcdC8qIHBvaW50ZXIgdG8gY29udGV4dCAqL1xuIFx0QVJHX0FOWVRISU5HLFx0XHQvKiBhbnkgKGluaXRpYWxpemVkKSBhcmd1bWVudCBpcyBvayAqL1xuQEAgLTkyMiw2ICYjNDM7OTIyLDggQEAgZW51bSBicGZfYXJnX3R5cGUge1xuIFx0QVJHX1BUUl9UT19VTklOSVRfTUVNXHRcdD0gTUVNX1VOSU5JVCB8IE1FTV9XUklURSB8IEFSR19QVFJfVE9fTUVNLFxuIFx0LyogUG9pbnRlciB0byB2YWxpZCBtZW1vcnkgb2Ygc2l6ZSBrbm93biBhdCBjb21waWxlIHRpbWUuICovXG4gXHRBUkdfUFRSX1RPX0ZJWEVEX1NJWkVfTUVNXHQ9IE1FTV9GSVhFRF9TSVpFIHwgQVJHX1BUUl9UT19NRU0sXG4mIzQzO1x0LyogTnVtYmVyIG9mIGJ5dGVzIGFjY2Vzc2VkIGZyb20gbWVtb3J5LCBvciAwLiAqL1xuJiM0MztcdEFSR19NRU1fU0laRV9PUl9aRVJPXHRcdD0gU0NBTEFSX01BWUJFX1pFUk8gfCBBUkdfTUVNX1NJWkUsXG4gXG4gXHQvKiBUaGlzIG11c3QgYmUgdGhlIGxhc3QgZW50cnkuIEl0cyBwdXJwb3NlIGlzIHRvIGVuc3VyZSB0aGUgZW51bSBpc1xuIFx0ICogd2lkZSBlbm91Z2ggdG8gaG9sZCB0aGUgaGlnaGVyIGJpdHMgcmVzZXJ2ZWQgZm9yIGJwZl90eXBlX2ZsYWcuXG5AQCAtOTYwLDYgJiM0Mzs5NjIsMjEgQEAgZW51bSBicGZfcmV0dXJuX3R5cGUge1xuIH07XG4gc3RhdGljX2Fzc2VydChfX0JQRl9SRVRfVFlQRV9NQVggXHUwMDNjPSBCUEZfQkFTRV9UWVBFX0xJTUlUKTtcbiBcbiYjNDM7LyogVGhlIGxvbmdlc3QgdHJhY2Vwb2ludCBoYXMgMTIgYXJncy5cbiYjNDM7ICogU2VlIGluY2x1ZGUvdHJhY2UvYnBmX3Byb2JlLmhcbiYjNDM7ICpcbiYjNDM7ICogQWxzbyByZXVzZSB0aGlzIG1hY3JvIGZvciBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMgYSBCUEYgZnVuY3Rpb25cbiYjNDM7ICogb3IgYSBrZnVuYyBjYW4gaGF2ZS4gQXJncyAxLTUgYXJlIHBhc3NlZCBpbiByZWdpc3RlcnMsIGFyZ3MgNi0xMiB2aWFcbiYjNDM7ICogc3RhY2sgYXJnIHNsb3RzLiBUaGUgSklUIG1heSBtYXAgc29tZSBzdGFjayBhcmcgc2xvdHMgdG8gcmVnaXN0ZXJzIGJhc2VkXG4mIzQzOyAqIG9uIHRoZSBuYXRpdmUgY2FsbGluZyBjb252ZW50aW9uIChlLmcuLCBhcmcgNiB0byBSOSBvbiB4ODYtNjQpLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBNQVhfQlBGX0ZVTkNfQVJHUyAxMlxuJiM0MztcbiYjNDM7LyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgdGhyb3VnaCByZWdpc3RlcnNcbiYjNDM7ICogYSBzaW5nbGUgZnVuY3Rpb24gbWF5IGhhdmUuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyA1XG4mIzQzO1xuIC8qIGVCUEYgZnVuY3Rpb24gcHJvdG90eXBlIHVzZWQgYnkgdmVyaWZpZXIgdG8gYWxsb3cgQlBGX0NBTExzIGZyb20gZUJQRiBwcm9ncmFtc1xuICAqIHRvIGluLWtlcm5lbCBoZWxwZXIgZnVuY3Rpb25zIGFuZCBmb3IgYWRqdXN0aW5nIGltbTMyIGZpZWxkIGluIEJQRl9DQUxMXG4gICogaW5zdHJ1Y3Rpb25zIGFmdGVyIHZlcmlmeWluZ1xuQEAgLTk4NCw3ICYjNDM7MTAwMSw3IEBAIHN0cnVjdCBicGZfZnVuY19wcm90byB7XG4gXHRcdFx0ZW51bSBicGZfYXJnX3R5cGUgYXJnNF90eXBlO1xuIFx0XHRcdGVudW0gYnBmX2FyZ190eXBlIGFyZzVfdHlwZTtcbiBcdFx0fTtcbi1cdFx0ZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGVbNV07XG4mIzQzO1x0XHRlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZVtNQVhfQlBGX0ZVTkNfQVJHU107XG4gXHR9O1xuIFx0dW5pb24ge1xuIFx0XHRzdHJ1Y3Qge1xuQEAgLTk5NCw3ICYjNDM7MTAxMSw3IEBAIHN0cnVjdCBicGZfZnVuY19wcm90byB7XG4gXHRcdFx0dTMyICphcmc0X2J0Zl9pZDtcbiBcdFx0XHR1MzIgKmFyZzVfYnRmX2lkO1xuIFx0XHR9O1xuLVx0XHR1MzIgKmFyZ19idGZfaWRbNV07XG4mIzQzO1x0XHR1MzIgKmFyZ19idGZfaWRbTUFYX0JQRl9GVU5DX0FSR1NdO1xuIFx0XHRzdHJ1Y3Qge1xuIFx0XHRcdHNpemVfdCBhcmcxX3NpemU7XG4gXHRcdFx0c2l6ZV90IGFyZzJfc2l6ZTtcbkBAIC0xMDAyLDcgJiM0MzsxMDE5LDcgQEAgc3RydWN0IGJwZl9mdW5jX3Byb3RvIHtcbiBcdFx0XHRzaXplX3QgYXJnNF9zaXplO1xuIFx0XHRcdHNpemVfdCBhcmc1X3NpemU7XG4gXHRcdH07XG4tXHRcdHNpemVfdCBhcmdfc2l6ZVs1XTtcbiYjNDM7XHRcdHNpemVfdCBhcmdfc2l6ZVtNQVhfQlBGX0ZVTkNfQVJHU107XG4gXHR9O1xuIFx0aW50ICpyZXRfYnRmX2lkOyAvKiByZXR1cm4gdmFsdWUgYnRmX2lkICovXG4gXHRib29sICgqYWxsb3dlZCkoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbkBAIC0xMTkyLDIxICYjNDM7MTIwOSw2IEBAIHN0cnVjdCBicGZfcHJvZ19vZmZsb2FkIHtcbiBcdHUzMlx0XHRcdGppdGVkX2xlbjtcbiB9O1xuIFxuLS8qIFRoZSBsb25nZXN0IHRyYWNlcG9pbnQgaGFzIDEyIGFyZ3MuXG4tICogU2VlIGluY2x1ZGUvdHJhY2UvYnBmX3Byb2JlLmhcbi0gKlxuLSAqIEFsc28gcmV1c2UgdGhpcyBtYWNybyBmb3IgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzIGEgQlBGIGZ1bmN0aW9uXG4tICogb3IgYSBrZnVuYyBjYW4gaGF2ZS4gQXJncyAxLTUgYXJlIHBhc3NlZCBpbiByZWdpc3RlcnMsIGFyZ3MgNi0xMiB2aWFcbi0gKiBzdGFjayBhcmcgc2xvdHMuIFRoZSBKSVQgbWF5IG1hcCBzb21lIHN0YWNrIGFyZyBzbG90cyB0byByZWdpc3RlcnMgYmFzZWRcbi0gKiBvbiB0aGUgbmF0aXZlIGNhbGxpbmcgY29udmVudGlvbiAoZS5nLiwgYXJnIDYgdG8gUjkgb24geDg2LTY0KS5cbi0gKi9cbi0jZGVmaW5lIE1BWF9CUEZfRlVOQ19BUkdTIDEyXG4tXG4tLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgdGhyb3VnaCByZWdpc3RlcnNcbi0gKiBhIHNpbmdsZSBmdW5jdGlvbiBtYXkgaGF2ZS5cbi0gKi9cbi0jZGVmaW5lIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyA1XG4tXG4gLyogVGhlIGFyZ3VtZW50IGlzIGEgc3RydWN0dXJlIG9yIGEgdW5pb24uICovXG4gI2RlZmluZSBCVEZfRk1PREVMX1NUUlVDVF9BUkdcdFx0QklUKDApXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IDY4MmMyY2QzYjg0NDMwLi4wNjU1MTY0ZTZhZjJlYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC0xNSw3ICYjNDM7MTUsNyBAQFxuICAqIGVuc3VyZXMgdGhhdCB1bWF4X3ZhbHVlICYjNDM7IChpbnQpb2ZmICYjNDM7IChpbnQpc2l6ZSBjYW5ub3Qgb3ZlcmZsb3cgYSB1NjQuXG4gICovXG4gI2RlZmluZSBCUEZfTUFYX1ZBUl9PRkZcdCgxIFx1MDAzY1x1MDAzYyAyOSlcbi0vKiBNYXhpbXVtIHZhcmlhYmxlIHNpemUgcGVybWl0dGVkIGZvciBBUkdfQ09OU1RfU0laRVtfT1JfWkVST10uICBUaGlzIGVuc3VyZXNcbiYjNDM7LyogTWF4aW11bSB2YXJpYWJsZSBzaXplIHBlcm1pdHRlZCBmb3IgQVJHX01FTV9TSVpFW19PUl9aRVJPXS4gIFRoaXMgZW5zdXJlc1xuICAqIHRoYXQgY29udmVydGluZyB1bWF4X3ZhbHVlIHRvIGludCBjYW5ub3Qgb3ZlcmZsb3cuXG4gICovXG4gI2RlZmluZSBCUEZfTUFYX1ZBUl9TSVpcdCgxIFx1MDAzY1x1MDAzYyAyOSlcbkBAIC0xMTg4LDYgJiM0MzsxMTg4LDcgQEAgaW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4gXHRcdFx0ICAgIHUzMiBidGZfaWQsXG4gXHRcdFx0ICAgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbyk7XG4gdm9pZCBicGZfZnJlZV9rZnVuY19idGZfdGFiKHN0cnVjdCBicGZfa2Z1bmNfYnRmX3RhYiAqdGFiKTtcbiYjNDM7dm9pZCBicGZfZnJlZV9rZnVuY19kZXNjX3RhYihzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2NfdGFiICp0YWIpO1xuIFxuIGludCBtYXJrX2NoYWluX3ByZWNpc2lvbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcmVnbm8pO1xuIFxuQEAgLTEzMDUsOCAmIzQzOzEzMDYsMTkgQEAgc3RhdGljIGlubGluZSB1MzIgdHlwZV9mbGFnKHUzMiB0eXBlKVxuIC8qIG9ubHkgdXNlIGFmdGVyIGNoZWNrX2F0dGFjaF9idGZfaWQoKSAqL1xuIHN0YXRpYyBpbmxpbmUgZW51bSBicGZfcHJvZ190eXBlIHJlc29sdmVfcHJvZ190eXBlKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiB7XG4tXHRyZXR1cm4gKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0VYVCBcdTAwMjZcdTAwMjYgcHJvZy1cdTAwM2VhdXgtXHUwMDNlc2F2ZWRfZHN0X3Byb2dfdHlwZSkgP1xuLVx0XHRwcm9nLVx1MDAzZWF1eC1cdTAwM2VzYXZlZF9kc3RfcHJvZ190eXBlIDogcHJvZy1cdTAwM2V0eXBlO1xuJiM0MztcdGlmIChwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9FWFQpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBzYXZlZF9kc3RfcHJvZ190eXBlIGlzIG9ubHkgc2V0IG9uY2UgY2hlY2tfYXR0YWNoX2J0Zl9pZCgpXG4mIzQzO1x0XHQgKiBydW5zLiBCZWZvcmUgdGhhdCAtLSBlLmcuIHdoZW4gZ2VuZXJhdGluZyBrZnVuYyBwcm90b3R5cGVzIGF0XG4mIzQzO1x0XHQgKiBhZGQtY2FsbCB0aW1lIC0tIGZhbGwgYmFjayB0byB0aGUgYXR0YWNoIHRhcmdldCYjMzk7cyB0eXBlLCB3aGljaFxuJiM0MztcdFx0ICogaXMgYXZhaWxhYmxlIGZyb20gbG9hZCB0aW1lIGFuZCBob2xkcyB0aGUgc2FtZSB2YWx1ZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHByb2ctXHUwMDNlYXV4LVx1MDAzZXNhdmVkX2RzdF9wcm9nX3R5cGUpXG4mIzQzO1x0XHRcdHJldHVybiBwcm9nLVx1MDAzZWF1eC1cdTAwM2VzYXZlZF9kc3RfcHJvZ190eXBlO1xuJiM0MztcdFx0aWYgKHByb2ctXHUwMDNlYXV4LVx1MDAzZWRzdF9wcm9nKVxuJiM0MztcdFx0XHRyZXR1cm4gcHJvZy1cdTAwM2VhdXgtXHUwMDNlZHN0X3Byb2ctXHUwMDNldHlwZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHByb2ctXHUwMDNldHlwZTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2NoZWNrX3JlY3VyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbkBAIC0xNDc5LDEwICYjNDM7MTQ5MSwxNyBAQCBzdHJ1Y3QgcmV0X21lbV9kZXNjIHtcbiBcdGJvb2wgZm91bmQ7XG4gfTtcbiBcbiYjNDM7LyogQSBjb25zdGFudCBzY2FsYXIgYXJndW1lbnQ7IFBvcHVsYXRlZCBieSBwcm9jZXNzX2NvbnN0X2FyZygpICovXG4mIzQzO3N0cnVjdCBhcmdfY29uc3RhbnRfZGVzYyB7XG4mIzQzO1x0dTY0IHZhbHVlO1xuJiM0MztcdGJvb2wgZm91bmQ7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSB7XG4gXHQvKiBDb21tb24gKi9cbiBcdHN0cnVjdCBidGYgKmJ0ZjtcbiBcdHUzMiBmdW5jX2lkO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm47XG4gXHR1OCByZWxlYXNlX3JlZ25vO1xuIFx0dTMyIHJldF9idGZfaWQ7XG4gXHR1MzIgc3VicHJvZ25vO1xuQEAgLTE0OTYsMTAgJiM0MzsxNTE1LDcgQEAgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhIHtcbiBcdHUzMiBrZnVuY19mbGFncztcbiBcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZnVuY19wcm90bztcbiBcdGNvbnN0IGNoYXIgKmZ1bmNfbmFtZTtcbi1cdHN0cnVjdCB7XG4tXHRcdHU2NCB2YWx1ZTtcbi1cdFx0Ym9vbCBmb3VuZDtcbi1cdH0gYXJnX2NvbnN0YW50O1xuJiM0MztcdHN0cnVjdCBhcmdfY29uc3RhbnRfZGVzYyBhcmdfY29uc3RhbnQ7XG4gXG4gXHQvKiBhcmdfe2J0ZixidGZfaWQsb3duaW5nX3JlZn0gYXJlIHVzZWQgYnkga2Z1bmMtc3BlY2lmaWMgaGFuZGxpbmcsXG4gXHQgKiBnZW5lcmFsbHkgdG8gcGFzcyBpbmZvIGFib3V0IHVzZXItZGVmaW5lZCBsb2NhbCBrcHRyIHR5cGVzIHRvIGxhdGVyXG5AQCAtMTYxNCw2ICYjNDM7MTYzMCw3IEBAIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB7XG4gXG4gc3RydWN0IGJwZl9rZnVuY19kZXNjIHtcbiBcdHN0cnVjdCBidGZfZnVuY19tb2RlbCBmdW5jX21vZGVsO1xuJiM0MztcdHN0cnVjdCBicGZfZnVuY19wcm90byAqcHJvdG87XG4gXHR1MzIgZnVuY19pZDtcbiBcdHMzMiBpbW07XG4gXHR1MTYgb2Zmc2V0O1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmMgYi9rZXJuZWwvYnBmL2JhY2t0cmFjay5jXG5pbmRleCAyZTRhZTBlZjA4NjA5ZC4uMmY0NzNhZDRmZDdjMWMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2JhY2t0cmFjay5jXG5AQCAtNjM2LDcgJiM0Mzs2MzYsNyBAQCBzdGF0aWMgaW50IGJhY2t0cmFja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZHgsIGludCBzdWJzZXFfaWR4LFxuICAqIHI1ICYjNDM7PSAxXG4gICogLi4uXG4gICogY2FsbCBicGZfcGVyZl9ldmVudF9vdXRwdXQjMjVcbi0gKiAgIHdoZXJlIC5hcmc1X3R5cGUgPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPXG4mIzQzOyAqICAgd2hlcmUgLmFyZzVfdHlwZSA9IEFSR19NRU1fU0laRV9PUl9aRVJPXG4gICpcbiAgKiBhbmQgdGhpcyBjYXNlOlxuICAqIHI2ID0gMVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnBmX2xzbS5jIGIva2VybmVsL2JwZi9icGZfbHNtLmNcbmluZGV4IDM5ODNiNGNlNzNjODExLi44MmM1OTg4NDE3YTBjZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnBmX2xzbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2JwZl9sc20uY1xuQEAgLTE4Niw3ICYjNDM7MTg2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfaW1hX2lub2RlX2hhc2hfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxuIFx0LmFyZzFfYnRmX2lkXHQ9IFx1MDAyNmJwZl9pbWFfaW5vZGVfaGFzaF9idGZfaWRzWzBdLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFsbG93ZWRcdD0gYnBmX2ltYV9pbm9kZV9oYXNoX2FsbG93ZWQsXG4gfTtcbiBcbkBAIC0yMDUsNyAmIzQzOzIwNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2ltYV9maWxlX2hhc2hfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxuIFx0LmFyZzFfYnRmX2lkXHQ9IFx1MDAyNmJwZl9pbWFfZmlsZV9oYXNoX2J0Zl9pZHNbMF0sXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYWxsb3dlZFx0PSBicGZfaW1hX2lub2RlX2hhc2hfYWxsb3dlZCxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jXG5pbmRleCBjYmIxZTQ5YjliY2JmNS4uYTIzYTQyY2JlM2IxMzUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2J0Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2J0Zi5jXG5AQCAtODcwNyw3ICYjNDM7ODcwNyw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfYnRmX2ZpbmRfYnlfbmFtZV9raW5kX3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5pbmRleCA0MzU1Y2NiNzhhOWM2Ny4uZmI5MzU3YjY0Y2FkYmMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtMjMwNSw3ICYjNDM7MjMwNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3N5c2N0bF9nZXRfbmFtZV9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1dSSVRFLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtMjM0Nyw3ICYjNDM7MjM0Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3N5c2N0bF9nZXRfY3VycmVudF92YWx1ZV9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBCUEZfQ0FMTF8zKGJwZl9zeXNjdGxfZ2V0X25ld192YWx1ZSwgc3RydWN0IGJwZl9zeXNjdGxfa2VybiAqLCBjdHgsIGNoYXIgKiwgYnVmLFxuQEAgLTIzNjcsNyAmIzQzOzIzNjcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zeXNjdGxfZ2V0X25ld192YWx1ZV9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBCUEZfQ0FMTF8zKGJwZl9zeXNjdGxfc2V0X25ld192YWx1ZSwgc3RydWN0IGJwZl9zeXNjdGxfa2VybiAqLCBjdHgsXG5AQCAtMjM5Myw3ICYjNDM7MjM5Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3N5c2N0bF9zZXRfbmV3X3ZhbHVlX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmNcbmluZGV4IDQ3ZmUwNDdhZDMwYjg4Li5hMzBlNzQ3MWU5ZDgxZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2NvcmUuY1xuQEAgLTE5OCw3ICYjNDM7MTk4LDkgQEAgdm9pZCBicGZfcHJvZ19qaXRfYXR0ZW1wdF9kb25lKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdFx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlaml0ZWRfbGluZm8gPSBOVUxMO1xuIFx0fVxuIFxuLVx0a2ZyZWUocHJvZy1cdTAwM2VhdXgtXHUwMDNla2Z1bmNfdGFiKTtcbiYjNDM7I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuJiM0MztcdGJwZl9mcmVlX2tmdW5jX2Rlc2NfdGFiKHByb2ctXHUwMDNlYXV4LVx1MDAzZWtmdW5jX3RhYik7XG4mIzQzOyNlbmRpZlxuIFx0cHJvZy1cdTAwM2VhdXgtXHUwMDNla2Z1bmNfdGFiID0gTlVMTDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuaW5kZXggYzE4ZjFlMTZlZGVlNGMuLjE4YmU1ZDZlNGY5YzI5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5AQCAtMjc4LDcgJiM0MzsyNzgsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9jdXJyZW50X2NvbW1fcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfUVVFVUVEX1NQSU5MT0NLUykgfHwgZGVmaW5lZChDT05GSUdfQlBGX0FSQ0hfU1BJTkxPQ0spXG5AQCAtNTM5LDcgJiM0Mzs1MzksNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3N0cnRvbF9wcm90byA9IHtcbiBcdC5ncGxfb25seVx0PSBmYWxzZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX0ZJWEVEX1NJWkVfTUVNIHwgTUVNX1VOSU5JVCB8IE1FTV9XUklURSB8IE1FTV9BTElHTkVELFxuIFx0LmFyZzRfc2l6ZVx0PSBzaXplb2YoczY0KSxcbkBAIC01NjcsNyAmIzQzOzU2Nyw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc3RydG91bF9wcm90byA9IHtcbiBcdC5ncGxfb25seVx0PSBmYWxzZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX0ZJWEVEX1NJWkVfTUVNIHwgTUVNX1VOSU5JVCB8IE1FTV9XUklURSB8IE1FTV9BTElHTkVELFxuIFx0LmFyZzRfc2l6ZVx0PSBzaXplb2YodTY0KSxcbkBAIC01ODMsNyAmIzQzOzU4Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3N0cm5jbXBfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fQ09OU1RfU1RSLFxuIH07XG4gXG5AQCAtNjI3LDcgJiM0Mzs2MjcsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9uc19jdXJyZW50X3BpZF90Z2lkX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGUgICAgICA9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmc0X3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmc0X3R5cGUgICAgICA9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9yYXdfc21wX3Byb2Nlc3Nvcl9pZF9wcm90byA9IHtcbkBAIC02NTMsNyAmIzQzOzY1Myw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZXZlbnRfb3V0cHV0X2RhdGFfcHJvdG8gPSAge1xuIFx0LmFyZzJfdHlwZSAgICAgID0gQVJHX0NPTlNUX01BUF9QVFIsXG4gXHQuYXJnM190eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmc1X3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIH07XG4gXG4gQlBGX0NBTExfMyhicGZfY29weV9mcm9tX3VzZXIsIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsXG5AQCAtNjc1LDcgJiM0Mzs2NzUsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Byb3RvID0ge1xuIFx0Lm1pZ2h0X3NsZWVwXHQ9IHRydWUsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC03MDYsNyAmIzQzOzcwNiw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY29weV9mcm9tX3VzZXJfdGFza19wcm90byA9IHtcbiBcdC5taWdodF9zbGVlcFx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbiBcdC5hcmc0X2J0Zl9pZFx0PSBcdTAwMjZidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9UQVNLXSxcbkBAIC0xMDkzLDEwICYjNDM7MTA5MywxMCBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NucHJpbnRmX3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IHRydWUsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fTUVNX09SX05VTEwgfCBNRU1fV1JJVEUsXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19DT05TVF9TVFIsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgUFRSX01BWUJFX05VTEwgfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCAqbWFwX2tleV9mcm9tX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlLCB1MzIgKmFycl9pZHgpXG5AQCAtMTg4OCw3ICYjNDM7MTg4OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2R5bnB0cl9mcm9tX21lbV9wcm90byA9IHtcbiBcdC5ncGxfb25seVx0PSBmYWxzZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19EWU5QVFIgfCBEWU5QVFJfVFlQRV9MT0NBTCB8IE1FTV9VTklOSVQgfCBNRU1fV1JJVEUsXG4gfTtcbkBAIC0xOTQzLDcgJiM0MzsxOTQzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZHlucHRyX3JlYWRfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX0RZTlBUUixcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG5AQCAtMjAwNCw3ICYjNDM7MjAwNCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2R5bnB0cl93cml0ZV9wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19EWU5QVFIsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTM0MDQsMTAgJiM0MzszNDA0LDEwIEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX3Rocm93KHU2NCBjb29raWUpXG4gXHRXQVJOKDEsIFwmIzM0O0EgY2FsbCB0byBCUEYgZXhjZXB0aW9uIGNhbGxiYWNrIHNob3VsZCBuZXZlciByZXR1cm5cXG5cJiMzNDspO1xuIH1cbiBcbi1fX2JwZl9rZnVuYyBpbnQgYnBmX3dxX2luaXQoc3RydWN0IGJwZl93cSAqd3EsIHZvaWQgKnBfX21hcCwgdW5zaWduZWQgaW50IGZsYWdzKVxuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3dxX2luaXQoc3RydWN0IGJwZl93cSAqd3EsIHZvaWQgKnBfX2NvbnN0X21hcCwgdW5zaWduZWQgaW50IGZsYWdzKVxuIHtcbiBcdHN0cnVjdCBicGZfYXN5bmNfa2VybiAqYXN5bmMgPSAoc3RydWN0IGJwZl9hc3luY19rZXJuICopd3E7XG4tXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gcF9fbWFwO1xuJiM0MztcdHN0cnVjdCBicGZfbWFwICptYXAgPSBwX19jb25zdF9tYXA7XG4gXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBicGZfYXN5bmNfa2VybikgXHUwMDNlIHNpemVvZihzdHJ1Y3QgYnBmX3dxKSk7XG4gXHRCVUlMRF9CVUdfT04oX19hbGlnbm9mX18oc3RydWN0IGJwZl9hc3luY19rZXJuKSAhPSBfX2FsaWdub2ZfXyhzdHJ1Y3QgYnBmX3dxKSk7XG5AQCAtNDY0MiwxNyAmIzQzOzQ2NDIsMTcgQEAgc3RhdGljIGludCBicGZfdGFza193b3JrX3NjaGVkdWxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IGJwZl90YXNrX3dvcmtcbiAgKiBtb2RlXG4gICogQHRhc2s6IFRhc2sgc3RydWN0IGZvciB3aGljaCBjYWxsYmFjayBzaG91bGQgYmUgc2NoZWR1bGVkXG4gICogQHR3OiBQb2ludGVyIHRvIHN0cnVjdCBicGZfdGFza193b3JrIGluIEJQRiBtYXAgdmFsdWUgZm9yIGludGVybmFsIGJvb2trZWVwaW5nXG4tICogQG1hcF9fbWFwOiBicGZfbWFwIHRoYXQgZW1iZWRzIHN0cnVjdCBicGZfdGFza193b3JrIGluIHRoZSB2YWx1ZXNcbiYjNDM7ICogQG1hcF9fY29uc3RfbWFwOiBicGZfbWFwIHRoYXQgZW1iZWRzIHN0cnVjdCBicGZfdGFza193b3JrIGluIHRoZSB2YWx1ZXNcbiAgKiBAY2FsbGJhY2s6IHBvaW50ZXIgdG8gQlBGIHN1YnByb2dyYW0gdG8gY2FsbFxuICAqIEBhdXg6IHBvaW50ZXIgdG8gYnBmX3Byb2dfYXV4IG9mIHRoZSBjYWxsZXIgQlBGIHByb2dyYW0sIGltcGxpY2l0bHkgc2V0IGJ5IHRoZSB2ZXJpZmllclxuICAqXG4gICogUmV0dXJuOiAwIGlmIHRhc2sgd29yayBoYXMgYmVlbiBzY2hlZHVsZWQgc3VjY2Vzc2Z1bGx5LCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZVxuICAqL1xuIF9fYnBmX2tmdW5jIGludCBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBicGZfdGFza193b3JrICp0dyxcbi1cdFx0XHRcdFx0ICAgICAgdm9pZCAqbWFwX19tYXAsIGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFjayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHZvaWQgKm1hcF9fY29uc3RfbWFwLCBicGZfdGFza193b3JrX2NhbGxiYWNrX3QgY2FsbGJhY2ssXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eClcbiB7XG4tXHRyZXR1cm4gYnBmX3Rhc2tfd29ya19zY2hlZHVsZSh0YXNrLCB0dywgbWFwX19tYXAsIGNhbGxiYWNrLCBhdXgsIFRXQV9TSUdOQUwpO1xuJiM0MztcdHJldHVybiBicGZfdGFza193b3JrX3NjaGVkdWxlKHRhc2ssIHR3LCBtYXBfX2NvbnN0X21hcCwgY2FsbGJhY2ssIGF1eCwgVFdBX1NJR05BTCk7XG4gfVxuIFxuIC8qKlxuQEAgLTQ2NjAsMTcgJiM0Mzs0NjYwLDE3IEBAIF9fYnBmX2tmdW5jIGludCBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBiXG4gICogbW9kZVxuICAqIEB0YXNrOiBUYXNrIHN0cnVjdCBmb3Igd2hpY2ggY2FsbGJhY2sgc2hvdWxkIGJlIHNjaGVkdWxlZFxuICAqIEB0dzogUG9pbnRlciB0byBzdHJ1Y3QgYnBmX3Rhc2tfd29yayBpbiBCUEYgbWFwIHZhbHVlIGZvciBpbnRlcm5hbCBib29ra2VlcGluZ1xuLSAqIEBtYXBfX21hcDogYnBmX21hcCB0aGF0IGVtYmVkcyBzdHJ1Y3QgYnBmX3Rhc2tfd29yayBpbiB0aGUgdmFsdWVzXG4mIzQzOyAqIEBtYXBfX2NvbnN0X21hcDogYnBmX21hcCB0aGF0IGVtYmVkcyBzdHJ1Y3QgYnBmX3Rhc2tfd29yayBpbiB0aGUgdmFsdWVzXG4gICogQGNhbGxiYWNrOiBwb2ludGVyIHRvIEJQRiBzdWJwcm9ncmFtIHRvIGNhbGxcbiAgKiBAYXV4OiBwb2ludGVyIHRvIGJwZl9wcm9nX2F1eCBvZiB0aGUgY2FsbGVyIEJQRiBwcm9ncmFtLCBpbXBsaWNpdGx5IHNldCBieSB0aGUgdmVyaWZpZXJcbiAgKlxuICAqIFJldHVybjogMCBpZiB0YXNrIHdvcmsgaGFzIGJlZW4gc2NoZWR1bGVkIHN1Y2Nlc3NmdWxseSwgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2VcbiAgKi9cbiBfX2JwZl9rZnVuYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgYnBmX3Rhc2tfd29yayAqdHcsXG4tXHRcdFx0XHRcdCAgICAgIHZvaWQgKm1hcF9fbWFwLCBicGZfdGFza193b3JrX2NhbGxiYWNrX3QgY2FsbGJhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICAgICB2b2lkICptYXBfX2NvbnN0X21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXG4ge1xuLVx0cmV0dXJuIGJwZl90YXNrX3dvcmtfc2NoZWR1bGUodGFzaywgdHcsIG1hcF9fbWFwLCBjYWxsYmFjaywgYXV4LCBUV0FfUkVTVU1FKTtcbiYjNDM7XHRyZXR1cm4gYnBmX3Rhc2tfd29ya19zY2hlZHVsZSh0YXNrLCB0dywgbWFwX19jb25zdF9tYXAsIGNhbGxiYWNrLCBhdXgsIFRXQV9SRVNVTUUpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1ha2VfZmlsZV9keW5wdHIoc3RydWN0IGZpbGUgKmZpbGUsIHUzMiBmbGFncywgYm9vbCBtYXlfc2xlZXAsXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9yaW5nYnVmLmMgYi9rZXJuZWwvYnBmL3JpbmdidWYuY1xuaW5kZXggMzVhZTY0YWRlMzZiODMuLmMxYmY3YTE5N2E5NmYzIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9yaW5nYnVmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvcmluZ2J1Zi5jXG5AQCAtNjM0LDcgJiM0Mzs2MzQsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JpbmdidWZfb3V0cHV0X3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfQ09OU1RfTUFQX1BUUixcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhY2ttYXAuYyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xuaW5kZXggNDFmZTg3ZDczMDJmMjIuLjQ2M2Y5NGJhMWNjNDc4IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zdGFja21hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbkBAIC03ODEsNyAmIzQzOzc4MSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTc5Nyw3ICYjNDM7Nzk3LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTgzMSw3ICYjNDM7ODMxLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfdGFza19zdGFja19wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19CVEZfSUQsXG4gXHQuYXJnMV9idGZfaWRcdD0gXHUwMDI2YnRmX3RyYWNpbmdfaWRzW0JURl9UUkFDSU5HX1RZUEVfVEFTS10sXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC04NDgsNyAmIzQzOzg0OCw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbiBcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9UQVNLXSxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTkxMSw3ICYjNDM7OTExLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfcHJvdG9fcGUgPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuaW5kZXggMGZmOWUzYWEyOTNkNTcuLjBiNWRjNjc4OGJhMjdmIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtMjQ0NCw3ICYjNDM7MjQ0NCw3IEBAIHN0YXRpYyB2b2lkIF9fYnBmX3Byb2dfcHV0X25vcmVmKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgYm9vbCBkZWZlcnJlZClcbiBcdG1vZHVsZV9wdXQocHJvZy1cdTAwM2VhdXgtXHUwMDNlbW9kKTtcbiBcdGt2ZnJlZShwcm9nLVx1MDAzZWF1eC1cdTAwM2VqaXRlZF9saW5mbyk7XG4gXHRrdmZyZWUocHJvZy1cdTAwM2VhdXgtXHUwMDNlbGluZm8pO1xuLVx0a2ZyZWUocHJvZy1cdTAwM2VhdXgtXHUwMDNla2Z1bmNfdGFiKTtcbiYjNDM7XHRicGZfZnJlZV9rZnVuY19kZXNjX3RhYihwcm9nLVx1MDAzZWF1eC1cdTAwM2VrZnVuY190YWIpO1xuIFx0a2ZyZWUocHJvZy1cdTAwM2VhdXgtXHUwMDNlY3R4X2FyZ19pbmZvKTtcbiBcdGlmIChwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmKVxuIFx0XHRidGZfcHV0KHByb2ctXHUwMDNlYXV4LVx1MDAzZWF0dGFjaF9idGYpO1xuQEAgLTY1NDQsNyAmIzQzOzY1NDQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zeXNfYnBmX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKiBfX3dlYWtcbkBAIC02NTkxLDcgJiM0Mzs2NTkxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfa2FsbHN5bXNfbG9va3VwX25hbWVfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fRklYRURfU0laRV9NRU0gfCBNRU1fVU5JTklUIHwgTUVNX1dSSVRFIHwgTUVNX0FMSUdORUQsXG4gXHQuYXJnNF9zaXplXHQ9IHNpemVvZih1NjQpLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNTJiZTBhMTE4Y2NlMDcuLmFjYTM3YTdiZjJjYmM3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0yNzE5LDggJiM0MzsyNzE5LDI1IEBAIHN0YXRpYyBpbnQgZmV0Y2hfa2Z1bmNfbWV0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGdlbl9rZnVuY19hcmdfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfZnVuY19wcm90byAqcHJvdG8pO1xuJiM0MztcbiYjNDM7dm9pZCBicGZfZnJlZV9rZnVuY19kZXNjX3RhYihzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2NfdGFiICp0YWIpXG4mIzQzO3tcbiYjNDM7XHR1MzIgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0YWIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGFiLVx1MDAzZW5yX2Rlc2NzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGtmcmVlKHRhYi1cdTAwM2VkZXNjc1tpXS5wcm90byk7XG4mIzQzO1x0a2ZyZWUodGFiKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgbWV0YTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKnByb3RvO1xuIFx0c3RydWN0IGJwZl9rZnVuY19idGZfdGFiICpidGZfdGFiO1xuIFx0c3RydWN0IGJ0Zl9mdW5jX21vZGVsIGZ1bmNfbW9kZWw7XG4gXHRzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2NfdGFiICp0YWI7XG5AQCAtMjgwNiwxMSAmIzQzOzI4MjMsMjkgQEAgaW50IGJwZl9hZGRfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgZnVuY19pZCwgdTE2IG9mZnNldClcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4mIzQzO1x0cHJvdG8gPSBremFsbG9jX29iaigqcHJvdG8sIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4mIzQzO1x0aWYgKCFwcm90bylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoXHUwMDI2bWV0YSwgMCwgc2l6ZW9mKG1ldGEpKTtcbiYjNDM7XHRtZXRhLmJ0ZiA9IGtmdW5jLmJ0ZjtcbiYjNDM7XHRtZXRhLmZ1bmNfaWQgPSBrZnVuYy5pZDtcbiYjNDM7XHRtZXRhLmZ1bmNfcHJvdG8gPSBrZnVuYy5wcm90bztcbiYjNDM7XHRtZXRhLmZ1bmNfbmFtZSA9IGtmdW5jLm5hbWU7XG4mIzQzO1x0bWV0YS5rZnVuY19mbGFncyA9IGtmdW5jLmZsYWdzID8gKmtmdW5jLmZsYWdzIDogMDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZ2VuX2tmdW5jX2FyZ19wcm90byhlbnYsIFx1MDAyNm1ldGEsIHByb3RvKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRrZnJlZShwcm90byk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRkZXNjID0gXHUwMDI2dGFiLVx1MDAzZWRlc2NzW3RhYi1cdTAwM2Vucl9kZXNjcyYjNDM7JiM0MztdO1xuIFx0ZGVzYy1cdTAwM2VmdW5jX2lkID0gZnVuY19pZDtcbiBcdGRlc2MtXHUwMDNlb2Zmc2V0ID0gb2Zmc2V0O1xuIFx0ZGVzYy1cdTAwM2VhZGRyID0gYWRkcjtcbiBcdGRlc2MtXHUwMDNlZnVuY19tb2RlbCA9IGZ1bmNfbW9kZWw7XG4mIzQzO1x0ZGVzYy1cdTAwM2Vwcm90byA9IHByb3RvO1xuIFx0c29ydCh0YWItXHUwMDNlZGVzY3MsIHRhYi1cdTAwM2Vucl9kZXNjcywgc2l6ZW9mKHRhYi1cdTAwM2VkZXNjc1swXSksXG4gXHQgICAgIGtmdW5jX2Rlc2NfY21wX2J5X2lkX29mZiwgTlVMTCk7XG4gXHRyZXR1cm4gMDtcbkBAIC00OTI0LDYgJiM0Mzs0OTU5LDE5IEBAIHN0YXRpYyB1MzIgKnJlZzJidGZfaWRzW19fQlBGX1JFR19UWVBFX01BWF0gPSB7XG4gXHRbQ09OU1RfUFRSX1RPX01BUF0gPSBidGZfYnBmX21hcF9pZCxcbiB9O1xuIFxuJiM0MztzdGF0aWMgZW51bSBicGZfcmVnX3R5cGUgbG9va3VwX3JlZzJidGZfaWRzKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqcmVmX3QpXG4mIzQzO3tcbiYjNDM7XHRlbnVtIGJwZl9yZWdfdHlwZSB0eXBlO1xuJiM0MztcbiYjNDM7XHRmb3IgKHR5cGUgPSAwOyB0eXBlIFx1MDAzYyBfX0JQRl9SRUdfVFlQRV9NQVg7IHR5cGUmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAocmVnMmJ0Zl9pZHNbdHlwZV0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgYnRmX3R5cGVfYnlfaWQoYnRmX3ZtbGludXgsICpyZWcyYnRmX2lkc1t0eXBlXSkgPT0gcmVmX3QpXG4mIzQzO1x0XHRcdHJldHVybiB0eXBlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5PVF9JTklUO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIGlzX3RydXN0ZWRfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4ge1xuIFx0LyogQSByZWZlcmVuY2VkIHJlZ2lzdGVyIGlzIGFsd2F5cyB0cnVzdGVkLiAqL1xuQEAgLTY4NzMsNyAmIzQzOzY5MjEsMTQgQEAgc3RhdGljIGludCBjaGVja19tZW1fc2l6ZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHQgICAgICBib29sIHplcm9fc2l6ZV9hbGxvd2VkLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbiB7XG4tXHRpbnQgZXJyO1xuJiM0MztcdGJvb2wgbWF5X2JlX251bGwgPSB0eXBlX21heV9iZV9udWxsKG1lbV9yZWctXHUwMDNldHlwZSk7XG4mIzQzO1x0c3RydWN0IGJwZl9yZWdfc3RhdGUgc2F2ZWRfcmVnO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAobWF5X2JlX251bGwpIHtcbiYjNDM7XHRcdHNhdmVkX3JlZyA9ICptZW1fcmVnO1xuJiM0MztcdFx0bWFya19wdHJfbm90X251bGxfcmVnKG1lbV9yZWcpO1xuJiM0MztcdH1cbiBcbiBcdC8qIFRoaXMgaXMgdXNlZCB0byByZWZpbmUgcjAgcmV0dXJuIHZhbHVlIGJvdW5kcyBmb3IgaGVscGVyc1xuIFx0ICogdGhhdCBlbmZvcmNlIHRoaXMgdmFsdWUgYXMgYW4gdXBwZXIgYm91bmQgb24gcmV0dXJuIHZhbHVlcy5cbkBAIC02OTEwLDggJiM0Mzs2OTY1LDE0IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX3NpemVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgc2l6ZV9hcmdubykpO1xuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdH1cbi1cdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgbWVtX3JlZywgbWVtX2FyZ25vLCByZWdfdW1heChzaXplX3JlZyksXG4tXHRcdFx0XHQgICAgICBhY2Nlc3NfdHlwZSwgemVyb19zaXplX2FsbG93ZWQsIG1ldGEpO1xuJiM0MztcbiYjNDM7XHRpZiAoYWNjZXNzX3R5cGUgXHUwMDI2IEJQRl9SRUFEKVxuJiM0MztcdFx0ZXJyID0gY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCBtZW1fcmVnLCBtZW1fYXJnbm8sIHJlZ191bWF4KHNpemVfcmVnKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIEJQRl9SRUFELCB6ZXJvX3NpemVfYWxsb3dlZCwgbWV0YSk7XG4mIzQzO1x0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IGFjY2Vzc190eXBlIFx1MDAyNiBCUEZfV1JJVEUpXG4mIzQzO1x0XHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIG1lbV9yZWcsIG1lbV9hcmdubywgcmVnX3VtYXgoc2l6ZV9yZWcpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgQlBGX1dSSVRFLCB6ZXJvX3NpemVfYWxsb3dlZCwgbWV0YSk7XG4mIzQzO1xuIFx0aWYgKCFlcnIpIHtcbiBcdFx0aW50IHJlZ25vID0gcmVnX2Zyb21fYXJnbm8oc2l6ZV9hcmdubyk7XG4gXG5AQCAtNjkyMCwxNSAmIzQzOzY5ODEsMjIgQEAgc3RhdGljIGludCBjaGVja19tZW1fc2l6ZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0ZWxzZVxuIFx0XHRcdGVyciA9IG1hcmtfc3RhY2tfYXJnX3ByZWNpc2lvbihlbnYsIGFyZ19pZHhfZnJvbV9hcmdubyhzaXplX2FyZ25vKSk7XG4gXHR9XG4mIzQzO1xuJiM0MztcdGlmIChtYXlfYmVfbnVsbClcbiYjNDM7XHRcdCptZW1fcmVnID0gc2F2ZWRfcmVnO1xuJiM0MztcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbnQgY2hlY2tfbWVtX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuLVx0XHRcdCBhcmdub190IGFyZ25vLCB1MzIgbWVtX3NpemUpXG4mIzQzO1x0XHRcdCBhcmdub190IGFyZ25vLCB1MzIgbWVtX3NpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIGFjY2Vzc190eXBlLFxuJiM0MztcdFx0XHQgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuIHtcbiYjNDM7XHQvKiBtZXRhLVx1MDAzZWJ0ZiBpcyBzZXQgb25seSBmb3Iga2Z1bmNzOyBhIE5VTEwgbWV0YSBtZWFucyBhIGdsb2JhbCBzdWJwcm9nLiAqL1xuJiM0MztcdGJvb2wgaGVscGVyID0gbWV0YSBcdTAwMjZcdTAwMjYgIW1ldGEtXHUwMDNlYnRmO1xuIFx0Ym9vbCBtYXlfYmVfbnVsbCA9IHR5cGVfbWF5X2JlX251bGwocmVnLVx1MDAzZXR5cGUpO1xuIFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgc2F2ZWRfcmVnO1xuLVx0aW50IGVycjtcbiYjNDM7XHRpbnQgc2l6ZSwgZXJyID0gMDtcbiBcbiBcdGlmIChicGZfcmVnaXN0ZXJfaXNfbnVsbChyZWcpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC02OTQ4LDEwICYjNDM7NzAxNiwxMiBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ1xuIFx0XHRtYXJrX3B0cl9ub3RfbnVsbF9yZWcocmVnKTtcbiBcdH1cbiBcbi1cdGludCBzaXplID0gYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKSA9PSBQVFJfVE9fU1RBQ0sgPyAtKGludCltZW1fc2l6ZSA6IG1lbV9zaXplO1xuJiM0MztcdHNpemUgPSAoIWhlbHBlciBcdTAwMjZcdTAwMjYgYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKSA9PSBQVFJfVE9fU1RBQ0spID8gLShpbnQpbWVtX3NpemUgOiBtZW1fc2l6ZTtcbiBcbi1cdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgc2l6ZSwgQlBGX1JFQUQsIHRydWUsIE5VTEwpO1xuLVx0ZXJyID0gZXJyID86IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgc2l6ZSwgQlBGX1dSSVRFLCB0cnVlLCBOVUxMKTtcbiYjNDM7XHRpZiAoYWNjZXNzX3R5cGUgXHUwMDI2IEJQRl9SRUFEKVxuJiM0MztcdFx0ZXJyID0gY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBzaXplLCBCUEZfUkVBRCwgdHJ1ZSwgbWV0YSk7XG4mIzQzO1x0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IChhY2Nlc3NfdHlwZSBcdTAwMjYgQlBGX1dSSVRFKSlcbiYjNDM7XHRcdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgc2l6ZSwgQlBGX1dSSVRFLCB0cnVlLCBtZXRhKTtcbiBcbiBcdGlmIChtYXlfYmVfbnVsbClcbiBcdFx0KnJlZyA9IHNhdmVkX3JlZztcbkBAIC02OTkzLDI4ICYjNDM7NzA2MywzMyBAQCBzdGF0aWMgaW50IHByb2Nlc3NfY29uc3RfYWxsb2NfbWVtX3NpemUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZlxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfbWVtX3NpemVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICptZW1fcmVnLFxuLVx0XHRcdFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpzaXplX3JlZywgYXJnbm9fdCBtZW1fYXJnbm8sIGFyZ25vX3Qgc2l6ZV9hcmdubylcbiYjNDM7c3RhdGljIGludCBwcm9jZXNzX2NvbnN0X2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuJiM0MztcdFx0XHQgICAgIGFyZ25vX3QgYXJnbm8sIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbiB7XG4tXHRib29sIG1heV9iZV9udWxsID0gdHlwZV9tYXlfYmVfbnVsbChtZW1fcmVnLVx1MDAzZXR5cGUpO1xuLVx0c3RydWN0IGJwZl9yZWdfc3RhdGUgc2F2ZWRfcmVnO1xuLVx0c3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhIG1ldGE7XG4mIzQzO1x0aW50IHJlZ25vID0gcmVnX2Zyb21fYXJnbm8oYXJnbm8pO1xuIFx0aW50IGVycjtcbiBcbi1cdG1lbXNldChcdTAwMjZtZXRhLCAwLCBzaXplb2YobWV0YSkpO1xuJiM0MztcdGlmIChtZXRhLVx1MDAzZWFyZ19jb25zdGFudC5mb3VuZCkge1xuJiM0MztcdFx0dmVyaWZpZXJfYnVnKGVudiwgXCYjMzQ7b25seSBvbmUgY29uc3RhbnQgYXJndW1lbnQgcGVybWl0dGVkXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdH1cbiBcbi1cdGlmIChtYXlfYmVfbnVsbCkge1xuLVx0XHRzYXZlZF9yZWcgPSAqbWVtX3JlZztcbi1cdFx0bWFya19wdHJfbm90X251bGxfcmVnKG1lbV9yZWcpO1xuJiM0MztcdGlmICghdG51bV9pc19jb25zdChyZWctXHUwMDNldmFyX29mZikpIHtcbiYjNDM7XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBtdXN0IGJlIGEga25vd24gY29uc3RhbnRcXG5cJiMzNDssIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdGVyciA9IGNoZWNrX21lbV9zaXplX3JlZyhlbnYsIG1lbV9yZWcsIHNpemVfcmVnLCBtZW1fYXJnbm8sIHNpemVfYXJnbm8sIEJQRl9SRUFELCB0cnVlLCBcdTAwMjZtZXRhKTtcbi1cdGVyciA9IGVyciA/OiBjaGVja19tZW1fc2l6ZV9yZWcoZW52LCBtZW1fcmVnLCBzaXplX3JlZywgbWVtX2FyZ25vLCBzaXplX2FyZ25vLCBCUEZfV1JJVEUsIHRydWUsIFx1MDAyNm1ldGEpO1xuJiM0MztcdGlmIChyZWdubyBcdTAwM2U9IDApXG4mIzQzO1x0XHRlcnIgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIHJlZ25vKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRlcnIgPSBtYXJrX3N0YWNrX2FyZ19wcmVjaXNpb24oZW52LCBhcmdfaWR4X2Zyb21fYXJnbm8oYXJnbm8pKTtcbiYjNDM7XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGlmIChtYXlfYmVfbnVsbClcbi1cdFx0Km1lbV9yZWcgPSBzYXZlZF9yZWc7XG4mIzQzO1x0bWV0YS1cdTAwM2VhcmdfY29uc3RhbnQuZm91bmQgPSB0cnVlO1xuJiM0MztcdG1ldGEtXHUwMDNlYXJnX2NvbnN0YW50LnZhbHVlID0gcmVnLVx1MDAzZXZhcl9vZmYudmFsdWU7XG4gXG4tXHRyZXR1cm4gZXJyO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBlbnVtIHtcbkBAIC03MjI0LDE4ICYjNDM7NzI5OSw2IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc190aW1lcl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlXG4gXHRyZXR1cm4gY2hlY2tfbWFwX2ZpZWxkX3BvaW50ZXIoZW52LCByZWcsIGFyZ25vLCBCUEZfVElNRVIsIG1hcCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcHJvY2Vzc190aW1lcl9oZWxwZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcbi1cdFx0XHRcdHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbi17XG4tXHRyZXR1cm4gcHJvY2Vzc190aW1lcl9mdW5jKGVudiwgcmVnLCBhcmdubywgXHUwMDI2bWV0YS1cdTAwM2VtYXApO1xuLX1cbi1cbi1zdGF0aWMgaW50IHByb2Nlc3NfdGltZXJfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcbi1cdFx0XHQgICAgICAgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuLXtcbi1cdHJldHVybiBwcm9jZXNzX3RpbWVyX2Z1bmMoZW52LCByZWcsIGFyZ25vLCBcdTAwMjZtZXRhLVx1MDAzZW1hcCk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgcHJvY2Vzc19rcHRyX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLFxuIFx0XHRcdCAgICAgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuIHtcbkBAIC03NzM4LDggJiM0Mzs3ODAxLDcgQEAgc3RhdGljIGludCBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCxcbiBcbiBzdGF0aWMgYm9vbCBhcmdfdHlwZV9pc19tZW1fc2l6ZShlbnVtIGJwZl9hcmdfdHlwZSB0eXBlKVxuIHtcbi1cdHJldHVybiB0eXBlID09IEFSR19DT05TVF9TSVpFIHx8XG4tXHQgICAgICAgdHlwZSA9PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPO1xuJiM0MztcdHJldHVybiBiYXNlX3R5cGUodHlwZSkgPT0gQVJHX01FTV9TSVpFO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBhcmdfdHlwZV9pc19yYXdfbWVtKGVudW0gYnBmX2FyZ190eXBlIHR5cGUpXG5AQCAtNzg4NSw4ICYjNDM7Nzk0Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3JlZ190eXBlcyBkeW5wdHJfdHlwZXMgPSB7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfcmVnX3R5cGVzICpjb21wYXRpYmxlX3JlZ190eXBlc1tfX0JQRl9BUkdfVFlQRV9NQVhdID0ge1xuIFx0W0FSR19QVFJfVE9fTUFQX0tFWV1cdFx0PSBcdTAwMjZtZW1fdHlwZXMsXG4gXHRbQVJHX1BUUl9UT19NQVBfVkFMVUVdXHRcdD0gXHUwMDI2bWVtX3R5cGVzLFxuLVx0W0FSR19DT05TVF9TSVpFXVx0XHQ9IFx1MDAyNnNjYWxhcl90eXBlcyxcbi1cdFtBUkdfQ09OU1RfU0laRV9PUl9aRVJPXVx0PSBcdTAwMjZzY2FsYXJfdHlwZXMsXG4mIzQzO1x0W0FSR19NRU1fU0laRV1cdFx0XHQ9IFx1MDAyNnNjYWxhcl90eXBlcyxcbiBcdFtBUkdfQ09OU1RfQUxMT0NfU0laRV9PUl9aRVJPXVx0PSBcdTAwMjZzY2FsYXJfdHlwZXMsXG4gXHRbQVJHX0NPTlNUX01BUF9QVFJdXHRcdD0gXHUwMDI2Y29uc3RfbWFwX3B0cl90eXBlcyxcbiBcdFtBUkdfUFRSX1RPX0NUWF1cdFx0PSBcdTAwMjZjb250ZXh0X3R5cGVzLFxuQEAgLTgyODYsMTEgJiM0Mzs4MzQ3LDU1IEBAIHN0YXRpYyBpbnQgZ2V0X2NvbnN0YW50X21hcF9rZXkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcbiBzdGF0aWMgYm9vbCBjYW5fZWxpZGVfdmFsdWVfbnVsbG5lc3MoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCk7XG4gXG4mIzQzOy8qIFJlY29yZCB0aGUgYnBmX21hcCBhcmd1bWVudCBvZiBhIGhlbHBlciBvciBrZnVuYyBjYWxsIGluIG1ldGEtXHUwMDNlbWFwLlxuJiM0MzsgKlxuJiM0MzsgKiBXaGVuIG1ldGEtXHUwMDNlbWFwIGlzIGFscmVhZHkgc2V0IGZyb20gYW4gZWFybGllciBhcmd1bWVudCAoYSB0aW1lciwgd29ya3F1ZXVlIG9yXG4mIzQzOyAqIHRhc2tfd29yayBvYmplY3QgdGhhdCBpcyBib3VuZCB0byBhIG1hcCksIHJlamVjdCBhIG1hcCBwb2ludGVyIHRoYXQgZG9lcyBub3RcbiYjNDM7ICogbWF0Y2ggaXQuIFRoYXQgb2JqZWN0IHNpdHMgaW4gdGhlIHJlZ2lzdGVyIHJpZ2h0IGJlZm9yZSB0aGUgbWFwIGFyZ3VtZW50LCBhbmRcbiYjNDM7ICogaXRzIHR5cGUgaXMgdGFrZW4gZnJvbSB0aGUgYm91bmQgbWFwJiMzOTtzIHJlY29yZCBmb3IgdGhlIGRpYWdub3N0aWMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHByb2Nlc3NfbWFwX3B0cl9hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbiYjNDM7XHRcdFx0ICAgICAgIGFyZ25vX3QgYXJnbm8sIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbiYjNDM7e1xuJiM0MztcdGludCBtYXBfcmVnbm8gPSByZWdfZnJvbV9hcmdubyhhcmdubyk7XG4mIzQzO1xuJiM0MztcdC8qIFVzZSBtYXBfdWlkICh3aGljaCBpcyB1bmlxdWUgaWQgb2YgaW5uZXIgbWFwKSB0byByZWplY3Q6XG4mIzQzO1x0ICogaW5uZXJfbWFwMSA9IGJwZl9tYXBfbG9va3VwX2VsZW0ob3V0ZXJfbWFwLCBrZXkxKVxuJiM0MztcdCAqIGlubmVyX21hcDIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5MilcbiYjNDM7XHQgKiBpZiAoaW5uZXJfbWFwMSBcdTAwMjZcdTAwMjYgaW5uZXJfbWFwMikge1xuJiM0MztcdCAqICAgICB0aW1lciA9IGJwZl9tYXBfbG9va3VwX2VsZW0oaW5uZXJfbWFwMSk7XG4mIzQzO1x0ICogICAgIGlmICh0aW1lcilcbiYjNDM7XHQgKiAgICAgICAgIC8vIG1pc21hdGNoIHdvdWxkIGhhdmUgYmVlbiBhbGxvd2VkXG4mIzQzO1x0ICogICAgICAgICBicGZfdGltZXJfaW5pdCh0aW1lciwgaW5uZXJfbWFwMik7XG4mIzQzO1x0ICogfVxuJiM0MztcdCAqXG4mIzQzO1x0ICogQ29tcGFyaW5nIG1hcF9wdHIgaXMgZW5vdWdoIHRvIGRpc3Rpbmd1aXNoIG5vcm1hbCBhbmQgb3V0ZXIgbWFwcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobWV0YS1cdTAwM2VtYXAucHRyIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAobWV0YS1cdTAwM2VtYXAucHRyICE9IHJlZy1cdTAwM2VtYXBfcHRyIHx8IG1ldGEtXHUwMDNlbWFwLnVpZCAhPSByZWctXHUwMDNlbWFwX3VpZCkpIHtcbiYjNDM7XHRcdHN0cnVjdCBidGZfcmVjb3JkICpyZWMgPSBtZXRhLVx1MDAzZW1hcC5wdHItXHUwMDNlcmVjb3JkO1xuJiM0MztcdFx0Y29uc3QgY2hhciAqb2JqX25hbWUgPSBcJiMzNDt3b3JrcXVldWVcJiMzNDs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJlYy1cdTAwM2V0aW1lcl9vZmYgXHUwMDNlPSAwKVxuJiM0MztcdFx0XHRvYmpfbmFtZSA9IFwmIzM0O3RpbWVyXCYjMzQ7O1xuJiM0MztcdFx0ZWxzZSBpZiAocmVjLVx1MDAzZXRhc2tfd29ya19vZmYgXHUwMDNlPSAwKVxuJiM0MztcdFx0XHRvYmpfbmFtZSA9IFwmIzM0O2JwZl90YXNrX3dvcmtcJiMzNDs7XG4mIzQzO1xuJiM0MztcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIHBvaW50ZXIgaW4gUiVkIG1hcF91aWQ9JWQgZG9lc24mIzM5O3QgbWF0Y2ggbWFwIHBvaW50ZXIgaW4gUiVkIG1hcF91aWQ9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdG9ial9uYW1lLCBtYXBfcmVnbm8gLSAxLCBtZXRhLVx1MDAzZW1hcC51aWQsIG1hcF9yZWdubywgcmVnLVx1MDAzZW1hcF91aWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtZXRhLVx1MDAzZW1hcC5wdHIgPSByZWctXHUwMDNlbWFwX3B0cjtcbiYjNDM7XHRtZXRhLVx1MDAzZW1hcC51aWQgPSByZWctXHUwMDNlbWFwX3VpZDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsXG4gXHRcdFx0ICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4tXHRcdFx0ICBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmZuLFxuIFx0XHRcdCAgaW50IGluc25faWR4KVxuIHtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmZuID0gbWV0YS1cdTAwM2VmbjtcbiBcdHUzMiByZWdubyA9IEJQRl9SRUdfMSAmIzQzOyBhcmc7XG4gXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnID0gcmVnX3N0YXRlKGVudiwgcmVnbm8pO1xuIFx0ZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUgPSBmbi1cdTAwM2VhcmdfdHlwZVthcmddO1xuQEAgLTgzNjEsMjkgJiM0Mzs4NDY2LDkgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgYXJnLFxuIFx0c3dpdGNoIChiYXNlX3R5cGUoYXJnX3R5cGUpKSB7XG4gXHRjYXNlIEFSR19DT05TVF9NQVBfUFRSOlxuIFx0XHQvKiBicGZfbWFwX3h4eChtYXBfcHRyKSBjYWxsOiByZW1lbWJlciB0aGF0IG1hcF9wdHIgKi9cbi1cdFx0aWYgKG1ldGEtXHUwMDNlbWFwLnB0cikge1xuLVx0XHRcdC8qIFVzZSBtYXBfdWlkICh3aGljaCBpcyB1bmlxdWUgaWQgb2YgaW5uZXIgbWFwKSB0byByZWplY3Q6XG4tXHRcdFx0ICogaW5uZXJfbWFwMSA9IGJwZl9tYXBfbG9va3VwX2VsZW0ob3V0ZXJfbWFwLCBrZXkxKVxuLVx0XHRcdCAqIGlubmVyX21hcDIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5Milcbi1cdFx0XHQgKiBpZiAoaW5uZXJfbWFwMSBcdTAwMjZcdTAwMjYgaW5uZXJfbWFwMikge1xuLVx0XHRcdCAqICAgICB0aW1lciA9IGJwZl9tYXBfbG9va3VwX2VsZW0oaW5uZXJfbWFwMSk7XG4tXHRcdFx0ICogICAgIGlmICh0aW1lcilcbi1cdFx0XHQgKiAgICAgICAgIC8vIG1pc21hdGNoIHdvdWxkIGhhdmUgYmVlbiBhbGxvd2VkXG4tXHRcdFx0ICogICAgICAgICBicGZfdGltZXJfaW5pdCh0aW1lciwgaW5uZXJfbWFwMik7XG4tXHRcdFx0ICogfVxuLVx0XHRcdCAqXG4tXHRcdFx0ICogQ29tcGFyaW5nIG1hcF9wdHIgaXMgZW5vdWdoIHRvIGRpc3Rpbmd1aXNoIG5vcm1hbCBhbmQgb3V0ZXIgbWFwcy5cbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAobWV0YS1cdTAwM2VtYXAucHRyICE9IHJlZy1cdTAwM2VtYXBfcHRyIHx8XG4tXHRcdFx0ICAgIG1ldGEtXHUwMDNlbWFwLnVpZCAhPSByZWctXHUwMDNlbWFwX3VpZCkge1xuLVx0XHRcdFx0dmVyYm9zZShlbnYsXG4tXHRcdFx0XHRcdFwmIzM0O3RpbWVyIHBvaW50ZXIgaW4gUjEgbWFwX3VpZD0lZCBkb2VzbiYjMzk7dCBtYXRjaCBtYXAgcG9pbnRlciBpbiBSMiBtYXBfdWlkPSVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0XHRtZXRhLVx1MDAzZW1hcC51aWQsIHJlZy1cdTAwM2VtYXBfdWlkKTtcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVx0XHRtZXRhLVx1MDAzZW1hcC5wdHIgPSByZWctXHUwMDNlbWFwX3B0cjtcbi1cdFx0bWV0YS1cdTAwM2VtYXAudWlkID0gcmVnLVx1MDAzZW1hcF91aWQ7XG4mIzQzO1x0XHRlcnIgPSBwcm9jZXNzX21hcF9wdHJfYXJnKGVudiwgcmVnLCBhcmdubywgbWV0YSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgQVJHX1BUUl9UT19NQVBfS0VZOlxuIFx0XHQvKiBicGZfbWFwX3h4eCguLi4sIG1hcF9wdHIsIC4uLiwga2V5KSBjYWxsOlxuQEAgLTg0NjYsNyAmIzQzOzg1NTEsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsXG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEFSR19QVFJfVE9fVElNRVI6XG4tXHRcdGVyciA9IHByb2Nlc3NfdGltZXJfaGVscGVyKGVudiwgcmVnLCBhcmdubywgbWV0YSk7XG4mIzQzO1x0XHRlcnIgPSBwcm9jZXNzX3RpbWVyX2Z1bmMoZW52LCByZWcsIGFyZ25vLCBcdTAwMjZtZXRhLVx1MDAzZW1hcCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0YnJlYWs7XG5AQCAtODQ3NCwzMSAmIzQzOzg1NTksMjIgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgYXJnLFxuIFx0XHRtZXRhLVx1MDAzZXN1YnByb2dubyA9IHJlZy1cdTAwM2VzdWJwcm9nbm87XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBBUkdfUFRSX1RPX01FTTpcbi1cdFx0LyogVGhlIGFjY2VzcyB0byB0aGlzIHBvaW50ZXIgaXMgb25seSBjaGVja2VkIHdoZW4gd2UgaGl0IHRoZVxuLVx0XHQgKiBuZXh0IGlzX21lbV9zaXplIGFyZ3VtZW50IGJlbG93LlxuLVx0XHQgKi9cbiBcdFx0aWYgKGFyZ190eXBlIFx1MDAyNiBNRU1fRklYRURfU0laRSkge1xuLVx0XHRcdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgZm4tXHUwMDNlYXJnX3NpemVbYXJnXSxcbi1cdFx0XHRcdFx0XHQgICAgICBhcmdfdHlwZSBcdTAwMjYgTUVNX1dSSVRFID8gQlBGX1dSSVRFIDogQlBGX1JFQUQsXG4tXHRcdFx0XHRcdFx0ICAgICAgZmFsc2UsIG1ldGEpO1xuJiM0MztcdFx0XHRlcnIgPSBjaGVja19tZW1fcmVnKGVudiwgcmVnLCBhcmdub19mcm9tX3JlZyhyZWdubyksIGZuLVx1MDAzZWFyZ19zaXplW2FyZ10sXG4mIzQzO1x0XHRcdFx0XHQgICAgYXJnX3R5cGUgXHUwMDI2IE1FTV9XUklURSA/IEJQRl9XUklURSA6IEJQRl9SRUFELCBtZXRhKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHRpZiAoYXJnX3R5cGUgXHUwMDI2IE1FTV9BTElHTkVEKVxuIFx0XHRcdFx0ZXJyID0gY2hlY2tfcHRyX2FsaWdubWVudChlbnYsIHJlZywgMCwgZm4tXHUwMDNlYXJnX3NpemVbYXJnXSwgdHJ1ZSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc2l6ZV9yZWcgPSByZWdfc3RhdGUoZW52LCByZWdubyAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGVyciA9IGNoZWNrX21lbV9zaXplX3JlZyhlbnYsIHJlZywgc2l6ZV9yZWcsIGFyZ25vLFxuJiM0MztcdFx0XHRcdFx0XHQgYXJnbm9fZnJvbV9yZWcocmVnbm8gJiM0MzsgMSksXG4mIzQzO1x0XHRcdFx0XHRcdCBhcmdfdHlwZSBcdTAwMjYgTUVNX1dSSVRFID8gQlBGX1dSSVRFIDogQlBGX1JFQUQsXG4mIzQzO1x0XHRcdFx0XHRcdCBmbi1cdTAwM2VhcmdfdHlwZVthcmcgJiM0MzsgMV0gXHUwMDI2IFNDQUxBUl9NQVlCRV9aRVJPLCBtZXRhKTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbi1cdGNhc2UgQVJHX0NPTlNUX1NJWkU6XG4tXHRcdGVyciA9IGNoZWNrX21lbV9zaXplX3JlZyhlbnYsIHJlZ19zdGF0ZShlbnYsIHJlZ25vIC0gMSksIHJlZyxcbi1cdFx0XHRcdFx0IGFyZ25vX2Zyb21fcmVnKHJlZ25vIC0gMSksIGFyZ25vLFxuLVx0XHRcdFx0XHQgZm4tXHUwMDNlYXJnX3R5cGVbYXJnIC0gMV0gXHUwMDI2IE1FTV9XUklURSA/IEJQRl9XUklURSA6IEJQRl9SRUFELFxuLVx0XHRcdFx0XHQgZmFsc2UsIG1ldGEpO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgQVJHX0NPTlNUX1NJWkVfT1JfWkVSTzpcbi1cdFx0ZXJyID0gY2hlY2tfbWVtX3NpemVfcmVnKGVudiwgcmVnX3N0YXRlKGVudiwgcmVnbm8gLSAxKSwgcmVnLFxuLVx0XHRcdFx0XHQgYXJnbm9fZnJvbV9yZWcocmVnbm8gLSAxKSwgYXJnbm8sXG4tXHRcdFx0XHRcdCBmbi1cdTAwM2VhcmdfdHlwZVthcmcgLSAxXSBcdTAwMjYgTUVNX1dSSVRFID8gQlBGX1dSSVRFIDogQlBGX1JFQUQsXG4tXHRcdFx0XHRcdCB0cnVlLCBtZXRhKTtcbi1cdFx0YnJlYWs7XG4gXHRjYXNlIEFSR19QVFJfVE9fRFlOUFRSOlxuIFx0XHRlcnIgPSBwcm9jZXNzX2R5bnB0cl9mdW5jKGVudiwgcmVnLCBhcmdubywgaW5zbl9pZHgsIGFyZ190eXBlLCBcdTAwMjZtZXRhLVx1MDAzZXJlZl9vYmosXG4gXHRcdFx0XHRcdCAgXHUwMDI2bWV0YS1cdTAwM2VkeW5wdHIpO1xuQEAgLTg4MjMsNyAmIzQzOzg4OTksNyBAQCBzdGF0aWMgYm9vbCBjaGVja19yYXdfbW9kZV9vayhjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmZuLCBzdHJ1Y3QgYnBmX2NhbGxfYVxuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShmbi1cdTAwM2VhcmdfdHlwZSk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX0JQRl9GVU5DX1JFR19BUkdTOyBpJiM0MzsmIzQzOykge1xuIFx0XHRpZiAoIWFyZ190eXBlX2lzX3Jhd19tZW0oZm4tXHUwMDNlYXJnX3R5cGVbaV0pKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAobWV0YS1cdTAwM2VhcmdfcmF3X21lbS5yZWdubylcbkBAIC04ODQwLDcgJiM0Mzs4OTE2LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfYXJnc19wYWlyX2ludmFsaWQoY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbiwgaW50IGFyZylcbiBcdGJvb2wgaGFzX3NpemUgPSBmbi1cdTAwM2Vhcmdfc2l6ZVthcmddICE9IDA7XG4gXHRib29sIGlzX25leHRfc2l6ZSA9IGZhbHNlO1xuIFxuLVx0aWYgKGFyZyAmIzQzOyAxIFx1MDAzYyBBUlJBWV9TSVpFKGZuLVx1MDAzZWFyZ190eXBlKSlcbiYjNDM7XHRpZiAoYXJnICYjNDM7IDEgXHUwMDNjIE1BWF9CUEZfRlVOQ19SRUdfQVJHUylcbiBcdFx0aXNfbmV4dF9zaXplID0gYXJnX3R5cGVfaXNfbWVtX3NpemUoZm4tXHUwMDNlYXJnX3R5cGVbYXJnICYjNDM7IDFdKTtcbiBcbiBcdGlmIChiYXNlX3R5cGUoZm4tXHUwMDNlYXJnX3R5cGVbYXJnXSkgIT0gQVJHX1BUUl9UT19NRU0pXG5AQCAtODg3MSw3ICYjNDM7ODk0Nyw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2J0Zl9pZF9vayhjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmZuKVxuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShmbi1cdTAwM2VhcmdfdHlwZSk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX0JQRl9GVU5DX1JFR19BUkdTOyBpJiM0MzsmIzQzOykge1xuIFx0XHRpZiAoYmFzZV90eXBlKGZuLVx1MDAzZWFyZ190eXBlW2ldKSA9PSBBUkdfUFRSX1RPX0JURl9JRClcbiBcdFx0XHRyZXR1cm4gISFmbi1cdTAwM2VhcmdfYnRmX2lkW2ldO1xuIFx0XHRpZiAoYmFzZV90eXBlKGZuLVx1MDAzZWFyZ190eXBlW2ldKSA9PSBBUkdfUFRSX1RPX1NQSU5fTE9DSylcbkBAIC04ODkwLDcgJiM0Mzs4OTY2LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfbWVtX2FyZ19yd19mbGFnX29rKGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm4pXG4ge1xuIFx0aW50IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGZuLVx1MDAzZWFyZ190eXBlKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQVhfQlBGX0ZVTkNfUkVHX0FSR1M7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlID0gZm4tXHUwMDNlYXJnX3R5cGVbaV07XG4gXG4gXHRcdGlmIChiYXNlX3R5cGUoYXJnX3R5cGUpICE9IEFSR19QVFJfVE9fTUVNKVxuQEAgLTg5MDYsNyAmIzQzOzg5ODIsNyBAQCBzdGF0aWMgYm9vbCBjaGVja19wcm90b19yZWxlYXNlX3JlZyhjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmZuLCBzdHJ1Y3QgYnBmX1xuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShmbi1cdTAwM2VhcmdfdHlwZSk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX0JQRl9GVU5DX1JFR19BUkdTOyBpJiM0MzsmIzQzOykge1xuIFx0XHRlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSA9IGZuLVx1MDAzZWFyZ190eXBlW2ldO1xuIFxuIFx0XHRpZiAoYXJnX3R5cGVfaXNfcmVsZWFzZShhcmdfdHlwZSkpIHtcbkBAIC05MjUyLDcgJiM0Mzs5MzI4LDcgQEAgc3RhdGljIGludCBidGZfY2hlY2tfZnVuY19hcmdfbWF0Y2goc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2csXG4gXHRcdFx0cmV0ID0gY2hlY2tfZnVuY19hcmdfcmVnX29mZihlbnYsIHJlZywgYXJnbm8sIEFSR19ET05UQ0FSRSk7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdFx0aWYgKGNoZWNrX21lbV9yZWcoZW52LCByZWcsIGFyZ25vLCBhcmctXHUwMDNlbWVtX3NpemUpKVxuJiM0MztcdFx0XHRpZiAoY2hlY2tfbWVtX3JlZyhlbnYsIHJlZywgYXJnbm8sIGFyZy1cdTAwM2VtZW1fc2l6ZSwgQlBGX1JFQUQgfCBCUEZfV1JJVEUsIE5VTEwpKVxuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0aWYgKCEoYXJnLVx1MDAzZWFyZ190eXBlIFx1MDAyNiBQVFJfTUFZQkVfTlVMTCkgXHUwMDI2XHUwMDI2IChyZWctXHUwMDNldHlwZSBcdTAwMjYgUFRSX01BWUJFX05VTEwpKSB7XG4gXHRcdFx0XHRicGZfbG9nKGxvZywgXCYjMzQ7JXMgaXMgZXhwZWN0ZWQgdG8gYmUgbm9uLU5VTExcXG5cJiMzNDssXG5AQCAtMTAyOTcsOSAmIzQzOzEwMzczLDEwIEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXG4gXHRcdGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5ub25fc2xlZXBhYmxlID0gdHJ1ZTtcbiBcbiBcdG1ldGEuZnVuY19pZCA9IGZ1bmNfaWQ7XG4mIzQzO1x0bWV0YS5mbiA9IGZuO1xuIFx0LyogY2hlY2sgYXJncyAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX0JQRl9GVU5DX1JFR19BUkdTOyBpJiM0MzsmIzQzOykge1xuLVx0XHRlcnIgPSBjaGVja19mdW5jX2FyZyhlbnYsIGksIFx1MDAyNm1ldGEsIGZuLCBpbnNuX2lkeCk7XG4mIzQzO1x0XHRlcnIgPSBjaGVja19mdW5jX2FyZyhlbnYsIGksIFx1MDAyNm1ldGEsIGluc25faWR4KTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuQEAgLTEwNzcxLDI2ICYjNDM7MTA4NDgsMjQgQEAgc3RhdGljIGJvb2wgaXNfa2Z1bmNfcmN1X3Byb3RlY3RlZChzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG4gfVxuIFxuIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19tZW1fc2l6ZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4tXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZyxcbi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiYjNDM7XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQ7XG4gXG4gXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmctXHUwMDNldHlwZSwgTlVMTCk7XG4tXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcih0KSB8fCByZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpXG4mIzQzO1x0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIodCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcJiMzNDtfX3N6XCYjMzQ7KTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnLFxuLVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuJiM0MztcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdDtcbiBcbiBcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFyZy1cdTAwM2V0eXBlLCBOVUxMKTtcbi1cdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKHQpIHx8IHJlZy1cdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSlcbiYjNDM7XHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcih0KSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwmIzM0O19fc3prXCYjMzQ7KTtcbkBAIC0xMDgxMSw2ICYjNDM7MTA4ODYsMTEgQEAgc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX21hcChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbiBcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcJiMzNDtfX21hcFwmIzM0Oyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfY29uc3RfbWFwKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwmIzM0O19fY29uc3RfbWFwXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfYWxsb2Nfb2JqKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxuIHtcbiBcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcJiMzNDtfX2FsbG9jXCYjMzQ7KTtcbkBAIC0xMTA1MSwxOCAmIzQzOzExMTMxLDIxIEBAIGVudW0ga2Z1bmNfcHRyX2FyZ190eXBlIHtcbiBcdEtGX0FSR19QVFJfVE9fTElTVF9OT0RFLFxuIFx0S0ZfQVJHX1BUUl9UT19CVEZfSUQsXHQgICAgICAgLyogQWxzbyBjb3ZlcnMgcmVnMmJ0Zl9pZHMgY29udmVyc2lvbnMgKi9cbiBcdEtGX0FSR19QVFJfVE9fTUVNLFxuLVx0S0ZfQVJHX1BUUl9UT19NRU1fU0laRSxcdCAgICAgICAvKiBTaXplIGRlcml2ZWQgZnJvbSBuZXh0IGFyZ3VtZW50LCBza2lwIGl0ICovXG4gXHRLRl9BUkdfUFRSX1RPX0NBTExCQUNLLFxuIFx0S0ZfQVJHX1BUUl9UT19SQl9ST09ULFxuIFx0S0ZfQVJHX1BUUl9UT19SQl9OT0RFLFxuLVx0S0ZfQVJHX1BUUl9UT19OVUxMLFxuIFx0S0ZfQVJHX1BUUl9UT19DT05TVF9TVFIsXG4tXHRLRl9BUkdfUFRSX1RPX01BUCxcbiYjNDM7XHRLRl9BUkdfQ09OU1RfTUFQX1BUUixcbiBcdEtGX0FSR19QVFJfVE9fVElNRVIsXG4gXHRLRl9BUkdfUFRSX1RPX1dPUktRVUVVRSxcbiBcdEtGX0FSR19QVFJfVE9fSVJRX0ZMQUcsXG4gXHRLRl9BUkdfUFRSX1RPX1JFU19TUElOX0xPQ0ssXG4gXHRLRl9BUkdfUFRSX1RPX1RBU0tfV09SSyxcbiYjNDM7XHRLRl9BUkdfQ09OU1RfQlRGX0lELFx0ICAgICAgIC8qIGNvbnN0IHNjYWxhciBjYXJyeWluZyBhIEJURiB0eXBlIGlkICovXG4mIzQzO1x0S0ZfQVJHX0NPTlNUX01FTV9TSVpFLFx0ICAgICAgIC8qIGNvbnN0IHNjYWxhciBzaXppbmcgYSBwcmVjZWRpbmcgbWVtb3J5IGFyZyAqL1xuJiM0MztcdEtGX0FSR19DT05TVF9BTExPQ19TSVpFX09SX1pFUk8sIC8qIGNvbnN0IHNjYWxhciBzaXppbmcgYSByZXR1cm5lZCBidWZmZXIgKi9cbiYjNDM7XHRLRl9BUkdfTUVNX1NJWkUsXHQgICAgICAgLyogc2NhbGFyIHNpemluZyBhIHByZWNlZGluZyBtZW1vcnkgYXJnICovXG4mIzQzO1x0S0ZfQVJHX0FOWVRISU5HLFx0ICAgICAgIC8qIHVuY29uc3RyYWluZWQgc2NhbGFyICovXG4gfTtcbiBcbiBlbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7XG5AQCAtMTEzMTgsMTA4ICYjNDM7MTE0MDEsMTU2IEBAIGJvb2wgYnBmX2lzX2tmdW5jX3BrdF9jaGFuZ2luZyhzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG4gXHRyZXR1cm4gbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfeGRwX3B1bGxfZGF0YV07XG4gfVxuIFxuLXN0YXRpYyBlbnVtIGtmdW5jX3B0cl9hcmdfdHlwZVxuLWdldF9rZnVuY19wdHJfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZXIsXG4tXHRcdCAgICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuLVx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnJlZl90LFxuLVx0XHQgICAgICAgY29uc3QgY2hhciAqcmVmX3RuYW1lLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmdzLFxuLVx0XHQgICAgICAgaW50IGFyZywgaW50IG5hcmdzLCBhcmdub190IGFyZ25vLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuJiM0MztzdGF0aWMgaW50XG4mIzQzO2dldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4mIzQzO1x0XHQgICBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmdzLCBpbnQgYXJnLCBpbnQgbmFyZ3MsIGFyZ25vX3QgYXJnbm8pXG4ge1xuJiM0MztcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgKnJlZl90ID0gTlVMTDtcbiYjNDM7XHRjb25zdCBjaGFyICpyZWZfdG5hbWUgPSBOVUxMO1xuIFx0Ym9vbCBhcmdfbWVtX3NpemUgPSBmYWxzZTtcbiYjNDM7XHRpbnQgYXJnX3R5cGU7XG4gXG4tXHRpZiAobWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfY2FzdF90b19rZXJuX2N0eF0gfHxcbi1cdCAgICBtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zZXNzaW9uX2lzX3JldHVybl0gfHxcbi1cdCAgICBtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zZXNzaW9uX2Nvb2tpZV0pXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX0NUWDtcbiYjNDM7XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMobWV0YS1cdTAwM2VidGYsIGFyZ3NbYXJnXS50eXBlLCBOVUxMKTtcbiBcbi1cdGlmIChhcmcgJiM0MzsgMSBcdTAwM2MgbmFyZ3MgXHUwMDI2XHUwMDI2XG4tXHQgICAgKGlzX2tmdW5jX2FyZ19tZW1fc2l6ZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmcgJiM0MzsgMV0sIGdldF9mdW5jX2FyZ19yZWcoY2FsbGVyLCByZWdzLCBhcmcgJiM0MzsgMSkpIHx8XG4tXHQgICAgIGlzX2tmdW5jX2FyZ19jb25zdF9tZW1fc2l6ZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmcgJiM0MzsgMV0sIGdldF9mdW5jX2FyZ19yZWcoY2FsbGVyLCByZWdzLCBhcmcgJiM0MzsgMSkpKSlcbi1cdFx0YXJnX21lbV9zaXplID0gdHJ1ZTtcbiYjNDM7XHQvKiBTY2FsYXIgYXJndW1lbnRzIGFyZSBjbGFzc2lmaWVkIGZyb20gdGhlaXIgQlRGIHN1ZmZpeC9uYW1lIGFsb25lLiAqL1xuJiM0MztcdGlmIChidGZfdHlwZV9pc19zY2FsYXIodCkpIHtcbiYjNDM7XHRcdGlmIChpc19rZnVuY19hcmdfY29uc3RhbnQobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4mIzQzO1x0XHRcdHJldHVybiBLRl9BUkdfQ09OU1RfQlRGX0lEO1xuJiM0MztcdFx0aWYgKGlzX2tmdW5jX2FyZ19jb25zdF9tZW1fc2l6ZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbiYjNDM7XHRcdFx0cmV0dXJuIEtGX0FSR19DT05TVF9NRU1fU0laRTtcbiYjNDM7XHRcdGlmIChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4mIzQzO1x0XHRcdHJldHVybiBLRl9BUkdfTUVNX1NJWkU7XG4mIzQzO1x0XHRpZiAoaXNfa2Z1bmNfYXJnX3NjYWxhcl93aXRoX25hbWUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSwgXCYjMzQ7cmRvbmx5X2J1Zl9zaXplXCYjMzQ7KSB8fFxuJiM0MztcdFx0ICAgIGlzX2tmdW5jX2FyZ19zY2FsYXJfd2l0aF9uYW1lKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10sIFwmIzM0O3Jkd3JfYnVmX3NpemVcJiMzNDspKVxuJiM0MztcdFx0XHRyZXR1cm4gS0ZfQVJHX0NPTlNUX0FMTE9DX1NJWkVfT1JfWkVSTztcbiYjNDM7XHRcdHJldHVybiBLRl9BUkdfQU5ZVEhJTkc7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWJ0Zl90eXBlX2lzX3B0cih0KSkge1xuJiM0MztcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1VucmVjb2duaXplZCAlcyB0eXBlICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ0Zl90eXBlX3N0cih0KSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMobWV0YS1cdTAwM2VidGYsIHQtXHUwMDNldHlwZSwgTlVMTCk7XG4mIzQzO1x0cmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KG1ldGEtXHUwMDNlYnRmLCByZWZfdC1cdTAwM2VuYW1lX29mZik7XG4gXG4gXHQvKiBJbiB0aGlzIGZ1bmN0aW9uLCB3ZSB2ZXJpZnkgdGhlIGtmdW5jJiMzOTtzIEJURiBhcyBwZXIgdGhlIGFyZ3VtZW50IHR5cGUsXG4gXHQgKiBsZWF2aW5nIHRoZSByZXN0IG9mIHRoZSB2ZXJpZmljYXRpb24gd2l0aCByZXNwZWN0IHRvIHRoZSByZWdpc3RlclxuIFx0ICogdHlwZSB0byBvdXIgY2FsbGVyLiBXaGVuIGEgc2V0IG9mIGNvbmRpdGlvbnMgaG9sZCBpbiB0aGUgQlRGIHR5cGUgb2ZcbiBcdCAqIGFyZ3VtZW50cywgd2UgcmVzb2x2ZSBpdCB0byBhIGtub3duIGtmdW5jX3B0cl9hcmdfdHlwZS5cbiBcdCAqL1xuLVx0aWYgKGJ0Zl9pc19wcm9nX2N0eF90eXBlKFx1MDAyNmVudi1cdTAwM2Vsb2csIG1ldGEtXHUwMDNlYnRmLCB0LCByZXNvbHZlX3Byb2dfdHlwZShlbnYtXHUwMDNlcHJvZyksIGFyZykpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX0NUWDtcbi1cbi1cdGlmIChpc19rZnVuY19hcmdfbnVsbGFibGUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkgXHUwMDI2XHUwMDI2IGJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykgXHUwMDI2XHUwMDI2XG4tXHQgICAgIWFyZ19tZW1fc2l6ZSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fTlVMTDtcbi1cbi1cdGlmIChpc19rZnVuY19hcmdfYWxsb2Nfb2JqKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19BTExPQ19CVEZfSUQ7XG4tXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX3JlZmNvdW50ZWRfa3B0cihtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSO1xuLVxuLVx0aWYgKGlzX2tmdW5jX2FyZ19keW5wdHIobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX0RZTlBUUjtcbi1cbi1cdGlmIChpc19rZnVuY19hcmdfaXRlcihtZXRhLCBhcmcsIFx1MDAyNmFyZ3NbYXJnXSkpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX0lURVI7XG4tXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX2xpc3RfaGVhZChtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fTElTVF9IRUFEO1xuLVxuLVx0aWYgKGlzX2tmdW5jX2FyZ19saXN0X25vZGUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX0xJU1RfTk9ERTtcbi1cbi1cdGlmIChpc19rZnVuY19hcmdfcmJ0cmVlX3Jvb3QobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX1JCX1JPT1Q7XG4tXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX3JidHJlZV9ub2RlKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19SQl9OT0RFO1xuJiM0MztcdGlmIChtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9jYXN0X3RvX2tlcm5fY3R4XSB8fFxuJiM0MztcdCAgICBtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zZXNzaW9uX2lzX3JldHVybl0gfHxcbiYjNDM7XHQgICAgbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2Vzc2lvbl9jb29raWVdKVxuJiM0MztcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0NUWDtcbiYjNDM7XHRlbHNlIGlmIChidGZfaXNfcHJvZ19jdHhfdHlwZShcdTAwMjZlbnYtXHUwMDNlbG9nLCBtZXRhLVx1MDAzZWJ0ZiwgdCwgcmVzb2x2ZV9wcm9nX3R5cGUoZW52LVx1MDAzZXByb2cpLCBhcmcpKVxuJiM0MztcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0NUWDtcbiYjNDM7XHRlbHNlIGlmIChpc19rZnVuY19hcmdfYWxsb2Nfb2JqKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuJiM0MztcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0FMTE9DX0JURl9JRDtcbiYjNDM7XHRlbHNlIGlmIChpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuJiM0MztcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjtcbiYjNDM7XHRlbHNlIGlmIChpc19rZnVuY19hcmdfZHlucHRyKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuJiM0MztcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0RZTlBUUjtcbiYjNDM7XHRlbHNlIGlmIChpc19rZnVuY19hcmdfaXRlcihtZXRhLCBhcmcsIFx1MDAyNmFyZ3NbYXJnXSkpXG4mIzQzO1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fSVRFUjtcbiYjNDM7XHRlbHNlIGlmIChpc19rZnVuY19hcmdfbGlzdF9oZWFkKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuJiM0MztcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0xJU1RfSEVBRDtcbiYjNDM7XHRlbHNlIGlmIChpc19rZnVuY19hcmdfbGlzdF9ub2RlKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuJiM0MztcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0xJU1RfTk9ERTtcbiYjNDM7XHRlbHNlIGlmIChpc19rZnVuY19hcmdfcmJ0cmVlX3Jvb3QobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4mIzQzO1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fUkJfUk9PVDtcbiYjNDM7XHRlbHNlIGlmIChpc19rZnVuY19hcmdfcmJ0cmVlX25vZGUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4mIzQzO1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fUkJfTk9ERTtcbiYjNDM7XHRlbHNlIGlmIChpc19rZnVuY19hcmdfY29uc3Rfc3RyKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuJiM0MztcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0NPTlNUX1NUUjtcbiYjNDM7XHRlbHNlIGlmIChpc19rZnVuY19hcmdfY29uc3RfbWFwKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuJiM0MztcdFx0YXJnX3R5cGUgPSBLRl9BUkdfQ09OU1RfTUFQX1BUUjtcbiYjNDM7XHRlbHNlIGlmIChpc19rZnVuY19hcmdfbWFwKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuJiM0MztcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0JURl9JRDtcbiYjNDM7XHRlbHNlIGlmIChpc19rZnVuY19hcmdfd3EobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4mIzQzO1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fV09SS1FVRVVFO1xuJiM0MztcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ190aW1lcihtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbiYjNDM7XHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19USU1FUjtcbiYjNDM7XHRlbHNlIGlmIChpc19rZnVuY19hcmdfdGFza193b3JrKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuJiM0MztcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX1RBU0tfV09SSztcbiYjNDM7XHRlbHNlIGlmIChpc19rZnVuY19hcmdfaXJxX2ZsYWcobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4mIzQzO1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fSVJRX0ZMQUc7XG4mIzQzO1x0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3Jlc19zcGluX2xvY2sobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4mIzQzO1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSztcbiYjNDM7XHRlbHNlIGlmIChpc19rZnVuY19hcmdfY2FsbGJhY2soZW52LCBtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbiYjNDM7XHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19DQUxMQkFDSztcbiYjNDM7XHRlbHNlIHtcbiYjNDM7XHRcdGlmIChhcmcgJiM0MzsgMSBcdTAwM2MgbmFyZ3MgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKGlzX2tmdW5jX2FyZ19tZW1fc2l6ZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmcgJiM0MzsgMV0pIHx8XG4mIzQzO1x0XHQgICAgIGlzX2tmdW5jX2FyZ19jb25zdF9tZW1fc2l6ZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmcgJiM0MzsgMV0pKSlcbiYjNDM7XHRcdFx0YXJnX21lbV9zaXplID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoYnRmX3R5cGVfaXNfc3RydWN0KHJlZl90KSBcdTAwMjZcdTAwMjYgIWFyZ19tZW1fc2l6ZSkge1xuJiM0MztcdFx0XHQvKiBBIHBvaW50ZXIgdG8gYSBzdHJ1Y3Qgd2l0aG91dCBhIHNpemUgYXJndW1lbnQgaXMgY2xhc3NpZmllZFxuJiM0MztcdFx0XHQgKiBhcyBLRl9BUkdfUFRSX1RPX0JURl9JRC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19CVEZfSUQ7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFidGZfdHlwZV9pc19zY2FsYXIocmVmX3QpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAhX19idGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS1cdTAwM2VidGYsIHJlZl90LCAwKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgKGFyZ19tZW1fc2l6ZSA/ICFidGZfdHlwZV9pc192b2lkKHJlZl90KSA6IDEpKSB7XG4mIzQzO1x0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBwb2ludGVyIHR5cGUgJXMgJXMgbXVzdCBwb2ludCB0byAlc3NjYWxhciwgb3Igc3RydWN0IHdpdGggc2NhbGFyXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSxcbiYjNDM7XHRcdFx0XHRidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUsIGFyZ19tZW1fc2l6ZSA/IFwmIzM0O3ZvaWQsIFwmIzM0OyA6IFwmIzM0O1wmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0LyogT3RoZXJ3aXNlIHRoaXMgaXMgYSBtZW1vcnkgYnVmZmVyIHN1cHBvcnRlZCBieVxuJiM0MztcdFx0XHQgKiBjaGVja19oZWxwZXJfbWVtX2FjY2VzcygpOiBhIHBvaW50ZXIgdG8gYSBzY2FsYXIsIG9yIHRvIHZvaWRcbiYjNDM7XHRcdFx0ICogd2hlbiBwYWlyZWQgd2l0aCBhIHNpemUgYXJndW1lbnQuIFRoZSBhY2Nlc3Mgc2l6ZSBpcyBkZXJpdmVkXG4mIzQzO1x0XHRcdCAqIGZyb20gdGhlIHBvaW50ZWQtdG8gQlRGIHR5cGUgdW5sZXNzIGEgc2l6ZSBhcmd1bWVudCBmb2xsb3dzLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0YXJnX3R5cGUgPSBhcmdfbWVtX3NpemUgPyBLRl9BUkdfUFRSX1RPX01FTSA6IEtGX0FSR19QVFJfVE9fTUVNIHwgTUVNX0ZJWEVEX1NJWkU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFxuLVx0aWYgKGlzX2tmdW5jX2FyZ19jb25zdF9zdHIobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX0NPTlNUX1NUUjtcbiYjNDM7XHRpZiAoaXNfa2Z1bmNfYXJnX251bGxhYmxlKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuJiM0MztcdFx0YXJnX3R5cGUgfD0gUFRSX01BWUJFX05VTEw7XG4gXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX21hcChtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fTUFQO1xuJiM0MztcdHJldHVybiBhcmdfdHlwZTtcbiYjNDM7fVxuIFxuLVx0aWYgKGlzX2tmdW5jX2FyZ193cShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fV09SS1FVRVVFO1xuJiM0MztzdGF0aWMgaW50IGdlbl9rZnVuY19hcmdfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpwcm90bylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiA9IG1ldGEtXHUwMDNlYnRmO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZ3M7XG4mIzQzO1x0dTMyIGksIG5hcmdzO1xuJiM0MztcdGludCBhcmdfdHlwZTtcbiBcbi1cdGlmIChpc19rZnVuY19hcmdfdGltZXIobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX1RJTUVSO1xuJiM0MztcdGFyZ3MgPSAoY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqKShtZXRhLVx1MDAzZWZ1bmNfcHJvdG8gJiM0MzsgMSk7XG4mIzQzO1x0bmFyZ3MgPSBidGZfdHlwZV92bGVuKG1ldGEtXHUwMDNlZnVuY19wcm90byk7XG4mIzQzO1x0aWYgKG5hcmdzIFx1MDAzZSBNQVhfQlBGX0ZVTkNfQVJHUykge1xuJiM0MztcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0Z1bmN0aW9uICVzIGhhcyAlZCBcdTAwM2UgJWQgYXJnc1xcblwmIzM0OywgbWV0YS1cdTAwM2VmdW5jX25hbWUsXG4mIzQzO1x0XHRcdG5hcmdzLCBNQVhfQlBGX0ZVTkNfQVJHUyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKG5hcmdzIFx1MDAzZSBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MgXHUwMDI2XHUwMDI2ICFicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3MoKSkge1xuJiM0MztcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0IGtmdW5jICVzKCkgd2l0aCAlZCBhcmdzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRtZXRhLVx1MDAzZWZ1bmNfbmFtZSwgbmFyZ3MpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbiYjNDM7XHR9XG4gXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX3Rhc2tfd29yayhtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fVEFTS19XT1JLO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5hcmdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0YXJnbm9fdCBhcmdubyA9IGFyZ25vX2Zyb21fYXJnKGkgJiM0MzsgMSk7XG4gXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX2lycV9mbGFnKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19JUlFfRkxBRztcbiYjNDM7XHRcdGlmIChpc19rZnVuY19hcmdfcHJvZ19hdXgoYnRmLCBcdTAwMjZhcmdzW2ldKSB8fFxuJiM0MztcdFx0ICAgIGlzX2tmdW5jX2FyZ19pZ25vcmUoYnRmLCBcdTAwMjZhcmdzW2ldKSB8fFxuJiM0MztcdFx0ICAgIGlzX2tmdW5jX2FyZ19pbXBsaWNpdChtZXRhLCBpKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX3Jlc19zcGluX2xvY2sobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX1JFU19TUElOX0xPQ0s7XG4mIzQzO1x0XHRhcmdfdHlwZSA9IGdldF9rZnVuY19hcmdfdHlwZShlbnYsIG1ldGEsIGFyZ3MsIGksIG5hcmdzLCBhcmdubyk7XG4mIzQzO1x0XHRpZiAoYXJnX3R5cGUgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiBhcmdfdHlwZTtcbiBcbi1cdGlmICgoYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKSA9PSBQVFJfVE9fQlRGX0lEIHx8IHJlZzJidGZfaWRzW2Jhc2VfdHlwZShyZWctXHUwMDNldHlwZSldKSkge1xuLVx0XHRpZiAoIWJ0Zl90eXBlX2lzX3N0cnVjdChyZWZfdCkpIHtcbi1cdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7a2VybmVsIGZ1bmN0aW9uICVzICVzIHBvaW50ZXIgdHlwZSAlcyAlcyBpcyBub3Qgc3VwcG9ydGVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0bWV0YS1cdTAwM2VmdW5jX25hbWUsIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSxcbi1cdFx0XHRcdGJ0Zl90eXBlX3N0cihyZWZfdCksIHJlZl90bmFtZSk7XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdH1cbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fQlRGX0lEO1xuJiM0MztcdFx0cHJvdG8tXHUwMDNlYXJnX3R5cGVbaV0gPSBhcmdfdHlwZTtcbiBcdH1cbiBcbi1cdGlmIChpc19rZnVuY19hcmdfY2FsbGJhY2soZW52LCBtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s7XG4tXG4tXHQvKiBUaGlzIGlzIHRoZSBjYXRjaCBhbGwgYXJndW1lbnQgdHlwZSBvZiByZWdpc3RlciB0eXBlcyBzdXBwb3J0ZWQgYnlcbi1cdCAqIGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzLiBIb3dldmVyLCB3ZSBvbmx5IGFsbG93IHdoZW4gYXJndW1lbnQgdHlwZSBpc1xuLVx0ICogcG9pbnRlciB0byBzY2FsYXIsIG9yIHN0cnVjdCBjb21wb3NlZCAocmVjdXJzaXZlbHkpIG9mIHNjYWxhcnMuIFdoZW5cbi1cdCAqIGFyZ19tZW1fc2l6ZSBpcyB0cnVlLCB0aGUgcG9pbnRlciBjYW4gYmUgdm9pZCAqLlxuLVx0ICovXG4tXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcihyZWZfdCkgXHUwMDI2XHUwMDI2ICFfX2J0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVx1MDAzZWJ0ZiwgcmVmX3QsIDApIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChhcmdfbWVtX3NpemUgPyAhYnRmX3R5cGVfaXNfdm9pZChyZWZfdCkgOiAxKSkge1xuLVx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgcG9pbnRlciB0eXBlICVzICVzIG11c3QgcG9pbnQgdG8gJXNzY2FsYXIsIG9yIHN0cnVjdCB3aXRoIHNjYWxhclxcblwmIzM0Oyxcbi1cdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksXG4tXHRcdFx0YnRmX3R5cGVfc3RyKHJlZl90KSwgcmVmX3RuYW1lLCBhcmdfbWVtX3NpemUgPyBcJiMzNDt2b2lkLCBcJiMzNDsgOiBcJiMzNDtcJiMzNDspO1xuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdH1cbi1cdHJldHVybiBhcmdfbWVtX3NpemUgPyBLRl9BUkdfUFRSX1RPX01FTV9TSVpFIDogS0ZfQVJHX1BUUl9UT19NRU07XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcHJvY2Vzc19rZl9hcmdfcHRyX3RvX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuQEAgLTEyMDA1LDE2ICYjNDM7MTIxMzYsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFxuIFx0YXJncyA9IChjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICopKG1ldGEtXHUwMDNlZnVuY19wcm90byAmIzQzOyAxKTtcbiBcdG5hcmdzID0gYnRmX3R5cGVfdmxlbihtZXRhLVx1MDAzZWZ1bmNfcHJvdG8pO1xuLVx0aWYgKG5hcmdzIFx1MDAzZSBNQVhfQlBGX0ZVTkNfQVJHUykge1xuLVx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7RnVuY3Rpb24gJXMgaGFzICVkIFx1MDAzZSAlZCBhcmdzXFxuXCYjMzQ7LCBmdW5jX25hbWUsIG5hcmdzLFxuLVx0XHRcdE1BWF9CUEZfRlVOQ19BUkdTKTtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4tXHRpZiAobmFyZ3MgXHUwMDNlIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyBcdTAwMjZcdTAwMjYgIWJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncygpKSB7XG4tXHRcdHZlcmJvc2UoZW52LCBcJiMzNDtKSVQgZG9lcyBub3Qgc3VwcG9ydCBrZnVuYyAlcygpIHdpdGggJWQgYXJnc1xcblwmIzM0Oyxcbi1cdFx0XHRmdW5jX25hbWUsIG5hcmdzKTtcbi1cdFx0cmV0dXJuIC1FTk9UU1VQUDtcbi1cdH1cbiBcbiBcdHJldCA9IGNoZWNrX291dGdvaW5nX3N0YWNrX2FyZ3MoZW52LCBjYWxsZXIsIG5hcmdzKTtcbiBcdGlmIChyZXQpXG5AQCAtMTIwMzEsOCAmIzQzOzEyMTUyLDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0aW50IHJlZ25vID0gcmVnX2Zyb21fYXJnbm8oYXJnbm8pO1xuIFx0XHRib29sIGJ0Zl9pZF9maXhlZF9vZmZfb2sgPSB0cnVlO1xuIFx0XHR1MzIgcmVmX2lkLCB0eXBlX3NpemU7XG4tXHRcdGJvb2wgaXNfcmV0X2J1Zl9zeiA9IGZhbHNlO1xuLVx0XHRpbnQga2ZfYXJnX3R5cGU7XG4mIzQzO1x0XHRpbnQga2ZfYXJnX3R5cGUgPSBtZXRhLVx1MDAzZWZuLVx1MDAzZWFyZ190eXBlW2ldO1xuIFxuIFx0XHRpZiAoaXNfa2Z1bmNfYXJnX3Byb2dfYXV4KGJ0ZiwgXHUwMDI2YXJnc1tpXSkpIHtcbiBcdFx0XHQvKiBSZWplY3QgcmVwZWF0ZWQgdXNlIGJwZl9wcm9nX2F1eCAqL1xuQEAgLTEyMDU1LDUyICYjNDM7MTIxNzUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFxuIFx0XHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmdzW2ldLnR5cGUsIE5VTEwpO1xuIFxuLVx0XHRpZiAoYnRmX3R5cGVfaXNfc2NhbGFyKHQpKSB7XG4tXHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSkge1xuLVx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIGlzIG5vdCBhIHNjYWxhclxcblwmIzM0OywgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRpZiAoaXNfa2Z1bmNfYXJnX2NvbnN0YW50KG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2ldKSkge1xuLVx0XHRcdFx0aWYgKG1ldGEtXHUwMDNlYXJnX2NvbnN0YW50LmZvdW5kKSB7XG4tXHRcdFx0XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwmIzM0O29ubHkgb25lIGNvbnN0YW50IGFyZ3VtZW50IHBlcm1pdHRlZFwmIzM0Oyk7XG4tXHRcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuLVx0XHRcdFx0fVxuLVx0XHRcdFx0aWYgKCF0bnVtX2lzX2NvbnN0KHJlZy1cdTAwM2V2YXJfb2ZmKSkge1xuLVx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgbXVzdCBiZSBhIGtub3duIGNvbnN0YW50XFxuXCYjMzQ7LFxuLVx0XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4tXHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdFx0fVxuLVx0XHRcdFx0aWYgKHJlZ25vIFx1MDAzZT0gMClcbi1cdFx0XHRcdFx0cmV0ID0gbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCByZWdubyk7XG4tXHRcdFx0XHRlbHNlXG4tXHRcdFx0XHRcdHJldCA9IG1hcmtfc3RhY2tfYXJnX3ByZWNpc2lvbihlbnYsIGkpO1xuLVx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0XHRcdG1ldGEtXHUwMDNlYXJnX2NvbnN0YW50LmZvdW5kID0gdHJ1ZTtcbi1cdFx0XHRcdG1ldGEtXHUwMDNlYXJnX2NvbnN0YW50LnZhbHVlID0gcmVnLVx1MDAzZXZhcl9vZmYudmFsdWU7XG4tXHRcdFx0fSBlbHNlIGlmIChpc19rZnVuY19hcmdfc2NhbGFyX3dpdGhfbmFtZShidGYsIFx1MDAyNmFyZ3NbaV0sIFwmIzM0O3Jkb25seV9idWZfc2l6ZVwmIzM0OykpIHtcbi1cdFx0XHRcdG1ldGEtXHUwMDNlcjBfcmRvbmx5ID0gdHJ1ZTtcbi1cdFx0XHRcdGlzX3JldF9idWZfc3ogPSB0cnVlO1xuLVx0XHRcdH0gZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3NjYWxhcl93aXRoX25hbWUoYnRmLCBcdTAwMjZhcmdzW2ldLCBcJiMzNDtyZHdyX2J1Zl9zaXplXCYjMzQ7KSkge1xuLVx0XHRcdFx0aXNfcmV0X2J1Zl9zeiA9IHRydWU7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdGlmIChpc19yZXRfYnVmX3N6KSB7XG4tXHRcdFx0XHRyZXQgPSBwcm9jZXNzX2NvbnN0X2FsbG9jX21lbV9zaXplKGVudiwgcmVnLCBhcmdubywgXHUwMDI2bWV0YS1cdTAwM2VyZXRfbWVtKTtcbi1cdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdFx0fVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4tXHRcdGlmICghYnRmX3R5cGVfaXNfcHRyKHQpKSB7XG4tXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1VucmVjb2duaXplZCAlcyB0eXBlICVzXFxuXCYjMzQ7LFxuLVx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIodCkpO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHR9XG4tXG4tXHRcdGlmICgoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSB8fCB0eXBlX21heV9iZV9udWxsKHJlZy1cdTAwM2V0eXBlKSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRpZiAoYnRmX3R5cGVfaXNfcHRyKHQpIFx1MDAyNlx1MDAyNiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSB8fCB0eXBlX21heV9iZV9udWxsKHJlZy1cdTAwM2V0eXBlKSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhaXNfa2Z1bmNfYXJnX251bGxhYmxlKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2ldKSkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgJXNcXG5cJiMzNDssXG4gXHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuQEAgLTEyMTE3LDc2ICYjNDM7MTIxOTIsMzUgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0aWYgKHJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSlcbiBcdFx0XHR1cGRhdGVfcmVmX29iaihcdTAwMjZtZXRhLVx1MDAzZXJlZl9vYmosIHJlZyk7XG4gXG4tXHRcdHJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVx1MDAzZXR5cGUsIFx1MDAyNnJlZl9pZCk7XG4tXHRcdHJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHJlZl90LVx1MDAzZW5hbWVfb2ZmKTtcbi1cbi1cdFx0a2ZfYXJnX3R5cGUgPSBnZXRfa2Z1bmNfcHRyX2FyZ190eXBlKGVudiwgY2FsbGVyLCByZWdzLCBtZXRhLCB0LCByZWZfdCwgcmVmX3RuYW1lLFxuLVx0XHRcdFx0XHRcdCAgICAgYXJncywgaSwgbmFyZ3MsIGFyZ25vLCByZWcpO1xuLVx0XHRpZiAoa2ZfYXJnX3R5cGUgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIGtmX2FyZ190eXBlO1xuJiM0MztcdFx0aWYgKGJ0Zl90eXBlX2lzX3B0cih0KSkge1xuJiM0MztcdFx0XHRyZWZfdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdC1cdTAwM2V0eXBlLCBcdTAwMjZyZWZfaWQpO1xuJiM0MztcdFx0XHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCByZWZfdC1cdTAwM2VuYW1lX29mZik7XG4mIzQzO1x0XHR9XG4gXG4tXHRcdHN3aXRjaCAoa2ZfYXJnX3R5cGUpIHtcbi1cdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX05VTEw6XG4mIzQzO1x0XHRpZiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSBcdTAwMjZcdTAwMjYgdHlwZV9tYXlfYmVfbnVsbChrZl9hcmdfdHlwZSkpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19NQVA6XG4tXHRcdFx0aWYgKCFyZWctXHUwMDNlbWFwX3B0cikge1xuLVx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3BvaW50ZXIgaW4gJXMgaXNuJiMzOTt0IG1hcCBwb2ludGVyXFxuXCYjMzQ7LFxuLVx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0fVxuLVx0XHRcdGlmIChtZXRhLVx1MDAzZW1hcC5wdHIgXHUwMDI2XHUwMDI2IChyZWctXHUwMDNlbWFwX3B0ci1cdTAwM2VyZWNvcmQtXHUwMDNld3Ffb2ZmIFx1MDAzZT0gMCB8fFxuLVx0XHRcdFx0XHQgICAgICByZWctXHUwMDNlbWFwX3B0ci1cdTAwM2VyZWNvcmQtXHUwMDNldGFza193b3JrX29mZiBcdTAwM2U9IDApKSB7XG4tXHRcdFx0XHQvKiBVc2UgbWFwX3VpZCAod2hpY2ggaXMgdW5pcXVlIGlkIG9mIGlubmVyIG1hcCkgdG8gcmVqZWN0OlxuLVx0XHRcdFx0ICogaW5uZXJfbWFwMSA9IGJwZl9tYXBfbG9va3VwX2VsZW0ob3V0ZXJfbWFwLCBrZXkxKVxuLVx0XHRcdFx0ICogaW5uZXJfbWFwMiA9IGJwZl9tYXBfbG9va3VwX2VsZW0ob3V0ZXJfbWFwLCBrZXkyKVxuLVx0XHRcdFx0ICogaWYgKGlubmVyX21hcDEgXHUwMDI2XHUwMDI2IGlubmVyX21hcDIpIHtcbi1cdFx0XHRcdCAqICAgICB3cSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oaW5uZXJfbWFwMSk7XG4tXHRcdFx0XHQgKiAgICAgaWYgKHdxKVxuLVx0XHRcdFx0ICogICAgICAgICAvLyBtaXNtYXRjaCB3b3VsZCBoYXZlIGJlZW4gYWxsb3dlZFxuLVx0XHRcdFx0ICogICAgICAgICBicGZfd3FfaW5pdCh3cSwgaW5uZXJfbWFwMik7XG4tXHRcdFx0XHQgKiB9XG4tXHRcdFx0XHQgKlxuLVx0XHRcdFx0ICogQ29tcGFyaW5nIG1hcF9wdHIgaXMgZW5vdWdoIHRvIGRpc3Rpbmd1aXNoIG5vcm1hbCBhbmQgb3V0ZXIgbWFwcy5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0aWYgKG1ldGEtXHUwMDNlbWFwLnB0ciAhPSByZWctXHUwMDNlbWFwX3B0ciB8fFxuLVx0XHRcdFx0ICAgIG1ldGEtXHUwMDNlbWFwLnVpZCAhPSByZWctXHUwMDNlbWFwX3VpZCkge1xuLVx0XHRcdFx0XHRpZiAocmVnLVx1MDAzZW1hcF9wdHItXHUwMDNlcmVjb3JkLVx1MDAzZXRhc2tfd29ya19vZmYgXHUwMDNlPSAwKSB7XG4tXHRcdFx0XHRcdFx0dmVyYm9zZShlbnYsXG4tXHRcdFx0XHRcdFx0XHRcJiMzNDticGZfdGFza193b3JrIHBvaW50ZXIgaW4gUjIgbWFwX3VpZD0lZCBkb2VzbiYjMzk7dCBtYXRjaCBtYXAgcG9pbnRlciBpbiBSMyBtYXBfdWlkPSVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0XHRcdFx0bWV0YS1cdTAwM2VtYXAudWlkLCByZWctXHUwMDNlbWFwX3VpZCk7XG4tXHRcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0XHRcdH1cbi1cdFx0XHRcdFx0dmVyYm9zZShlbnYsXG4tXHRcdFx0XHRcdFx0XCYjMzQ7d29ya3F1ZXVlIHBvaW50ZXIgaW4gUjEgbWFwX3VpZD0lZCBkb2VzbiYjMzk7dCBtYXRjaCBtYXAgcG9pbnRlciBpbiBSMiBtYXBfdWlkPSVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0XHRcdG1ldGEtXHUwMDNlbWFwLnVpZCwgcmVnLVx1MDAzZW1hcF91aWQpO1xuLVx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0XHRcdH1cbi1cdFx0XHR9XG4tXHRcdFx0bWV0YS1cdTAwM2VtYXAucHRyID0gcmVnLVx1MDAzZW1hcF9wdHI7XG4tXHRcdFx0bWV0YS1cdTAwM2VtYXAudWlkID0gcmVnLVx1MDAzZW1hcF91aWQ7XG4tXHRcdFx0ZmFsbHRocm91Z2g7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlzX2tmdW5jX2FyZ19tYXAoYnRmLCBcdTAwMjZhcmdzW2ldKSkge1xuJiM0MztcdFx0XHRyZWZfaWQgPSAqcmVnMmJ0Zl9pZHNbQ09OU1RfUFRSX1RPX01BUF07XG4mIzQzO1x0XHRcdHJlZl90ID0gYnRmX3R5cGVfYnlfaWQoYnRmX3ZtbGludXgsIHJlZl9pZCk7XG4mIzQzO1x0XHRcdHJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHJlZl90LVx1MDAzZW5hbWVfb2ZmKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRzd2l0Y2ggKGJhc2VfdHlwZShrZl9hcmdfdHlwZSkpIHtcbiYjNDM7XHRcdGNhc2UgS0ZfQVJHX0NPTlNUX0JURl9JRDpcbiYjNDM7XHRcdGNhc2UgS0ZfQVJHX0NPTlNUX0FMTE9DX1NJWkVfT1JfWkVSTzpcbiYjNDM7XHRcdGNhc2UgS0ZfQVJHX0FOWVRISU5HOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fQUxMT0NfQlRGX0lEOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fQlRGX0lEOlxuLVx0XHRcdGlmICghaXNfdHJ1c3RlZF9yZWcoZW52LCByZWcpKSB7XG4tXHRcdFx0XHRpZiAoIWlzX2tmdW5jX3JjdShtZXRhKSkge1xuLVx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgbXVzdCBiZSByZWZlcmVuY2VkIG9yIHRydXN0ZWRcXG5cJiMzNDssXG4tXHRcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbi1cdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0XHR9XG4tXHRcdFx0XHRpZiAoIWlzX3JjdV9yZWcocmVnKSkge1xuLVx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgbXVzdCBiZSBhIHJjdSBwb2ludGVyXFxuXCYjMzQ7LFxuLVx0XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4tXHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbi1cdFx0XHRmYWxsdGhyb3VnaDtcbiYjNDM7XHRcdGNhc2UgS0ZfQVJHX0NPTlNUX01BUF9QVFI6XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19JVEVSOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTElTVF9IRUFEOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTElTVF9OT0RFOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fUkJfUk9PVDpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JCX05PREU6XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU06XG4tXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU1fU0laRTpcbiYjNDM7XHRcdGNhc2UgS0ZfQVJHX0NPTlNUX01FTV9TSVpFOlxuJiM0MztcdFx0Y2FzZSBLRl9BUkdfTUVNX1NJWkU6XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19DQUxMQkFDSzpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NPTlNUX1NUUjpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1dPUktRVUVVRTpcbkBAIC0xMjIxNyw3ICYjNDM7MTIyNTEsMzUgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0XHRzd2l0Y2ggKGtmX2FyZ190eXBlKSB7XG4mIzQzO1x0XHRzd2l0Y2ggKGJhc2VfdHlwZShrZl9hcmdfdHlwZSkpIHtcbiYjNDM7XHRcdGNhc2UgS0ZfQVJHX0NPTlNUX0JURl9JRDpcbiYjNDM7XHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSkge1xuJiM0MztcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBpcyBub3QgYSBzY2FsYXJcXG5cJiMzNDssIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHByb2Nlc3NfY29uc3RfYXJnKGVudiwgcmVnLCBhcmdubywgbWV0YSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEtGX0FSR19DT05TVF9BTExPQ19TSVpFX09SX1pFUk86XG4mIzQzO1x0XHRcdGlmIChyZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpIHtcbiYjNDM7XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgaXMgbm90IGEgc2NhbGFyXFxuXCYjMzQ7LCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoaXNfa2Z1bmNfYXJnX3NjYWxhcl93aXRoX25hbWUoYnRmLCBcdTAwMjZhcmdzW2ldLCBcJiMzNDtyZG9ubHlfYnVmX3NpemVcJiMzNDspKVxuJiM0MztcdFx0XHRcdG1ldGEtXHUwMDNlcjBfcmRvbmx5ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0cmV0ID0gcHJvY2Vzc19jb25zdF9hbGxvY19tZW1fc2l6ZShlbnYsIHJlZywgYXJnbm8sIFx1MDAyNm1ldGEtXHUwMDNlcmV0X21lbSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEtGX0FSR19BTllUSElORzpcbiYjNDM7XHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSkge1xuJiM0MztcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBpcyBub3QgYSBzY2FsYXJcXG5cJiMzNDssIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19DVFg6XG4gXHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19DVFgpIHtcbiBcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBleHBlY3RlZCBwb2ludGVyIHRvIGN0eCwgYnV0IGdvdCAlc1xcblwmIzM0OyxcbkBAIC0xMjM4Niw1MSAmIzQzOzEyNDQ4LDc3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXG4gXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19NQVA6XG4tXHRcdFx0LyogSWYgYXJndW1lbnQgaGFzICYjMzk7X19tYXAmIzM5OyBzdWZmaXggZXhwZWN0ICYjMzk7c3RydWN0IGJwZl9tYXAgKiYjMzk7ICovXG4tXHRcdFx0cmVmX2lkID0gKnJlZzJidGZfaWRzW0NPTlNUX1BUUl9UT19NQVBdO1xuLVx0XHRcdHJlZl90ID0gYnRmX3R5cGVfYnlfaWQoYnRmX3ZtbGludXgsIHJlZl9pZCk7XG4tXHRcdFx0cmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgcmVmX3QtXHUwMDNlbmFtZV9vZmYpO1xuLVx0XHRcdGZhbGx0aHJvdWdoO1xuLVx0XHRjYXNlIEtGX0FSR19QVFJfVE9fQlRGX0lEOlxuLVx0XHRcdC8qIE9ubHkgYmFzZV90eXBlIGlzIGNoZWNrZWQsIGZ1cnRoZXIgY2hlY2tzIGFyZSBkb25lIGhlcmUgKi9cbi1cdFx0XHRpZiAoKGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgIT0gUFRSX1RPX0JURl9JRCB8fFxuLVx0XHRcdCAgICAgKGJwZl90eXBlX2hhc191bnNhZmVfbW9kaWZpZXJzKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjYgIWlzX3JjdV9yZWcocmVnKSkpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAhcmVnMmJ0Zl9pZHNbYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKV0pIHtcbi1cdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBpcyAlcyBcJiMzNDssIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSxcbi1cdFx0XHRcdFx0cmVnX3R5cGVfc3RyKGVudiwgcmVnLVx1MDAzZXR5cGUpKTtcbi1cdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtleHBlY3RlZCAlcyBvciBzb2NrZXRcXG5cJiMzNDssXG4tXHRcdFx0XHRcdHJlZ190eXBlX3N0cihlbnYsIGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgfFxuLVx0XHRcdFx0XHRcdFx0ICAodHlwZV9mbGFnKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjYgQlBGX1JFR19UUlVTVEVEX01PRElGSUVSUykpKTtcbiYjNDM7XHRcdGNhc2UgS0ZfQVJHX0NPTlNUX01BUF9QVFI6XG4mIzQzO1x0XHRcdGlmICghcmVnLVx1MDAzZW1hcF9wdHIpIHtcbiYjNDM7XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7cG9pbnRlciBpbiAlcyBpc24mIzM5O3QgbWFwIHBvaW50ZXJcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuLVx0XHRcdHJldCA9IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19idGZfaWQoZW52LCByZWcsIHJlZl90LCByZWZfdG5hbWUsIHJlZl9pZCwgbWV0YSwgaSwgYXJnbm8pO1xuJiM0MztcdFx0XHRyZXQgPSBwcm9jZXNzX21hcF9wdHJfYXJnKGVudiwgcmVnLCBhcmdubywgbWV0YSk7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU06XG4tXHRcdFx0cmVzb2x2ZV9yZXQgPSBidGZfcmVzb2x2ZV9zaXplKGJ0ZiwgcmVmX3QsIFx1MDAyNnR5cGVfc2l6ZSk7XG4tXHRcdFx0aWYgKElTX0VSUihyZXNvbHZlX3JldCkpIHtcbi1cdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyByZWZlcmVuY2UgdHlwZSgmIzM5OyVzICVzJiMzOTspIHNpemUgY2Fubm90IGJlIGRldGVybWluZWQ6ICVsZFxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLFxuLVx0XHRcdFx0XHRyZWZfdG5hbWUsIFBUUl9FUlIocmVzb2x2ZV9yZXQpKTtcbiYjNDM7XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19CVEZfSUQ6XG4mIzQzO1x0XHRcdC8qIE9ubHkgYmFzZV90eXBlIGlzIGNoZWNrZWQsIGZ1cnRoZXIgY2hlY2tzIGFyZSBkb25lIGhlcmUgKi9cbiYjNDM7XHRcdFx0aWYgKGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgPT0gUFRSX1RPX0JURl9JRCB8fFxuJiM0MztcdFx0XHQgICAgcmVnMmJ0Zl9pZHNbYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKV0pIHtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0aWYgKCFpc190cnVzdGVkX3JlZyhlbnYsIHJlZykpIHtcbiYjNDM7XHRcdFx0XHRcdGlmICghaXNfa2Z1bmNfcmN1KG1ldGEpKSB7XG4mIzQzO1x0XHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuJiM0MztcdFx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0XHRcdH1cbiYjNDM7XHRcdFx0XHRcdGlmICghaXNfcmN1X3JlZyhyZWcpKSB7XG4mIzQzO1x0XHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBtdXN0IGJlIGEgcmN1IHBvaW50ZXJcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiYjNDM7XHRcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdFx0XHR9XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0XHRyZXQgPSBwcm9jZXNzX2tmX2FyZ19wdHJfdG9fYnRmX2lkKGVudiwgcmVnLCByZWZfdCwgcmVmX3RuYW1lLCByZWZfaWQsIG1ldGEsIGksIGFyZ25vKTtcbiYjNDM7XHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCFfX2J0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVx1MDAzZWJ0ZiwgcmVmX3QsIDApKSB7XG4mIzQzO1x0XHRcdFx0ZW51bSBicGZfcmVnX3R5cGUgcmVnMmJ0Zl90eXBlID0gbG9va3VwX3JlZzJidGZfaWRzKHJlZl90KTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIGlzICVzIGV4cGVjdGVkICVzICVzXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCByZWdfdHlwZV9zdHIoZW52LCByZWctXHUwMDNldHlwZSksXG4mIzQzO1x0XHRcdFx0XHRidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUpO1xuJiM0MztcdFx0XHRcdGlmIChyZWcyYnRmX3R5cGUgIT0gTk9UX0lOSVQpXG4mIzQzO1x0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7IG9yICVzXCYjMzQ7LCByZWdfdHlwZV9zdHIoZW52LCByZWcyYnRmX3R5cGUpKTtcbiYjNDM7XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7XFxuXCYjMzQ7KTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRyZXQgPSBjaGVja19tZW1fcmVnKGVudiwgcmVnLCBhcmdubywgdHlwZV9zaXplKTtcbi1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX01FTV9TSVpFOlxuLVx0XHR7XG4tXHRcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKmJ1ZmZfcmVnID0gcmVnO1xuLVx0XHRcdGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmJ1ZmZfYXJnID0gXHUwMDI2YXJnc1tpXTtcbi1cdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc2l6ZV9yZWcgPSBnZXRfZnVuY19hcmdfcmVnKGNhbGxlciwgcmVncywgaSAmIzQzOyAxKTtcbi1cdFx0XHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICpzaXplX2FyZyA9IFx1MDAyNmFyZ3NbaSAmIzQzOyAxXTtcbi1cdFx0XHRhcmdub190IG5leHRfYXJnbm8gPSBhcmdub19mcm9tX2FyZyhpICYjNDM7IDIpO1xuLVxuLVx0XHRcdGlmICghYnBmX3JlZ2lzdGVyX2lzX251bGwoYnVmZl9yZWcpIHx8ICFpc19rZnVuY19hcmdfbnVsbGFibGUobWV0YS1cdTAwM2VidGYsIGJ1ZmZfYXJnKSkge1xuLVx0XHRcdFx0cmV0ID0gY2hlY2tfa2Z1bmNfbWVtX3NpemVfcmVnKGVudiwgYnVmZl9yZWcsIHNpemVfcmVnLFxuLVx0XHRcdFx0XHRcdFx0ICAgICAgIGFyZ25vLCBuZXh0X2FyZ25vKTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIElmIHRoZSByZWdpc3RlciBkb2VzIG5vdCBjb250YWluIGJ0ZiBpZCBidXQgdGhlIGFyZ3VtZW50IHR5cGUgaXMgYSBwb2ludGVyIHRvXG4mIzQzO1x0XHRcdCAqIHNjYWxhci1vbmx5IHN0cnVjdCwgYWxsb3cgdmVyaWZ5aW5nIGl0IGFzIGEgZml4ZWQgc2l6ZSBtZW1vcnkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRrZl9hcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fTUVNIHwgTUVNX0ZJWEVEX1NJWkU7XG4mIzQzO1x0XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX01FTTpcbiYjNDM7XHRcdFx0aWYgKGtmX2FyZ190eXBlIFx1MDAyNiBNRU1fRklYRURfU0laRSkge1xuJiM0MztcdFx0XHRcdHJlc29sdmVfcmV0ID0gYnRmX3Jlc29sdmVfc2l6ZShidGYsIHJlZl90LCBcdTAwMjZ0eXBlX3NpemUpO1xuJiM0MztcdFx0XHRcdGlmIChJU19FUlIocmVzb2x2ZV9yZXQpKSB7XG4mIzQzO1x0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgcmVmZXJlbmNlIHR5cGUoJiMzOTslcyAlcyYjMzk7KSBzaXplIGNhbm5vdCBiZSBkZXRlcm1pbmVkOiAlbGRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnRmX3R5cGVfc3RyKHJlZl90KSxcbiYjNDM7XHRcdFx0XHRcdFx0cmVmX3RuYW1lLCBQVFJfRVJSKHJlc29sdmVfcmV0KSk7XG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdFx0cmV0ID0gY2hlY2tfbWVtX3JlZyhlbnYsIHJlZywgYXJnbm8sIHR5cGVfc2l6ZSwgQlBGX1JFQUQgfCBCUEZfV1JJVEUsIG1ldGEpO1xuJiM0MztcdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpidWZmX3JlZyA9IHJlZztcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc2l6ZV9yZWcgPSBnZXRfZnVuY19hcmdfcmVnKGNhbGxlciwgcmVncywgaSAmIzQzOyAxKTtcbiYjNDM7XHRcdFx0XHRhcmdub190IG5leHRfYXJnbm8gPSBhcmdub19mcm9tX2FyZyhpICYjNDM7IDIpO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRyZXQgPSBjaGVja19tZW1fc2l6ZV9yZWcoZW52LCBidWZmX3JlZywgc2l6ZV9yZWcsIGFyZ25vLCBuZXh0X2FyZ25vLFxuJiM0MztcdFx0XHRcdFx0XHRcdCBCUEZfUkVBRCB8IEJQRl9XUklURSwgdHJ1ZSwgbWV0YSk7XG4gXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBhbmQgXCYjMzQ7LCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuIFx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgbWVtb3J5LCBsZW4gcGFpciBsZWFkcyB0byBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NcXG5cJiMzNDssXG5AQCAtMTI0MzgsMjUgJiM0MzsxMjUyNiwyMCBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbi1cbi1cdFx0XHRpZiAoaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBzaXplX2FyZywgc2l6ZV9yZWcpKSB7XG4tXHRcdFx0XHRpZiAobWV0YS1cdTAwM2VhcmdfY29uc3RhbnQuZm91bmQpIHtcbi1cdFx0XHRcdFx0dmVyaWZpZXJfYnVnKGVudiwgXCYjMzQ7b25seSBvbmUgY29uc3RhbnQgYXJndW1lbnQgcGVybWl0dGVkXCYjMzQ7KTtcbi1cdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHRcdFx0XHR9XG4tXHRcdFx0XHRpZiAoIXRudW1faXNfY29uc3Qoc2l6ZV9yZWctXHUwMDNldmFyX29mZikpIHtcbi1cdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIG11c3QgYmUgYSBrbm93biBjb25zdGFudFxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBuZXh0X2FyZ25vKSk7XG4tXHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdFx0fVxuLVx0XHRcdFx0bWV0YS1cdTAwM2VhcmdfY29uc3RhbnQuZm91bmQgPSB0cnVlO1xuLVx0XHRcdFx0bWV0YS1cdTAwM2VhcmdfY29uc3RhbnQudmFsdWUgPSBzaXplX3JlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgS0ZfQVJHX0NPTlNUX01FTV9TSVpFOlxuJiM0MztcdFx0XHRpZiAocmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKSB7XG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIGlzIG5vdCBhIHNjYWxhclxcblwmIzM0OywgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0LyogU2tpcCBuZXh0ICYjMzk7X19zeiYjMzk7IG9yICYjMzk7X19zemsmIzM5OyBhcmd1bWVudCAqL1xuLVx0XHRcdGkmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRyZXQgPSBwcm9jZXNzX2NvbnN0X2FyZyhlbnYsIHJlZywgYXJnbm8sIG1ldGEpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0XHRmYWxsdGhyb3VnaDtcbiYjNDM7XHRcdGNhc2UgS0ZfQVJHX01FTV9TSVpFOlxuIFx0XHRcdGJyZWFrO1xuLVx0XHR9XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19DQUxMQkFDSzpcbiBcdFx0XHRpZiAocmVnLVx1MDAzZXR5cGUgIT0gUFRSX1RPX0ZVTkMpIHtcbiBcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBleHBlY3RlZCBwb2ludGVyIHRvIGZ1bmNcXG5cJiMzNDssIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG5AQCAtMTI1MTQsNyAmIzQzOzEyNTk3LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRyZXQgPSBwcm9jZXNzX3RpbWVyX2tmdW5jKGVudiwgcmVnLCBhcmdubywgbWV0YSk7XG4mIzQzO1x0XHRcdHJldCA9IHByb2Nlc3NfdGltZXJfZnVuYyhlbnYsIHJlZywgYXJnbm8sIFx1MDAyNm1ldGEtXHUwMDNlbWFwKTtcbiBcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0XHRicmVhaztcbkBAIC0xMjY3Niw3ICYjNDM7MTI3NTksNyBAQCBzNjQgYnBmX2hlbHBlcl9zdGFja19hY2Nlc3NfYnl0ZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuXG4gXHRcdFx0c2l6ZSA9IGZuLVx1MDAzZWFyZ19zaXplW2FyZ107XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbi1cdFx0aWYgKGFyZyAmIzQzOyAxIFx1MDAzYyBBUlJBWV9TSVpFKGZuLVx1MDAzZWFyZ190eXBlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdGlmIChhcmcgJiM0MzsgMSBcdTAwM2MgTUFYX0JQRl9GVU5DX1JFR19BUkdTIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYXJnX3R5cGVfaXNfbWVtX3NpemUoZm4tXHUwMDNlYXJnX3R5cGVbYXJnICYjNDM7IDFdKSkge1xuIFx0XHRcdGludCBzaXplX3JlZyA9IEJQRl9SRUdfMSAmIzQzOyBhcmcgJiM0MzsgMTtcbiBcbkBAIC0xMjk3NSw2ICYjNDM7MTMwNTgsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0aW50IGVyciwgaW5zbl9pZHggPSAqaW5zbl9pZHhfcDtcbiBcdGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZ3M7XG4gXHR1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkO1xuJiM0MztcdHN0cnVjdCBicGZfa2Z1bmNfZGVzYyAqZGVzYztcbiBcdHN0cnVjdCBidGYgKmRlc2NfYnRmO1xuIFx0aW50IGlkO1xuIFxuQEAgLTEyOTkxLDYgJiM0MzsxMzA3NSwxMyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0ZnVuY19uYW1lID0gbWV0YS5mdW5jX25hbWU7XG4gXHRpbnNuX2F1eCA9IFx1MDAyNmVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XTtcbiBcbiYjNDM7XHRkZXNjID0gZmluZF9rZnVuY19kZXNjKGVudi1cdTAwM2Vwcm9nLCBpbnNuLVx1MDAzZWltbSwgaW5zbi1cdTAwM2VvZmYpO1xuJiM0MztcdGlmICghZGVzYykge1xuJiM0MztcdFx0dmVyaWZpZXJfYnVnKGVudiwgXCYjMzQ7a2Z1bmMgZGVzY3JpcHRvciBub3QgZm91bmQgZm9yIGZ1bmNfaWQgJXVcJiMzNDssIGluc24tXHUwMDNlaW1tKTtcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdH1cbiYjNDM7XHRtZXRhLmZuID0gZGVzYy1cdTAwM2Vwcm90bztcbiYjNDM7XG4gXHRpbnNuX2F1eC1cdTAwM2Vpc19pdGVyX25leHQgPSBicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFx1MDAyNm1ldGEpO1xuIFxuIFx0aWYgKCFpbnNuLVx1MDAzZW9mZiBcdTAwMjZcdTAwMjZcbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbmluZGV4IDc2YWI1MWRlYWE2Yjk1Li44OTE4OTdmOGExYjM1NyAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG5AQCAtMjIxLDcgJiM0MzsyMjEsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3Byb2JlX3JlYWRfdXNlcl9wcm90byA9IHtcbiBcdC5ncGxfb25seVx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtMjU4LDcgJiM0MzsyNTgsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHJfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTI3Myw3ICYjNDM7MjczLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX2tlcm5lbF9wcm90byA9IHtcbiBcdC5ncGxfb25seVx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtMzA4LDcgJiM0MzszMDgsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3Byb2JlX3JlYWRfa2VybmVsX3N0cl9wcm90byA9IHtcbiBcdC5ncGxfb25seVx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtMzI4LDcgJiM0MzszMjgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX2NvbXBhdF9wcm90byA9IHtcbiBcdC5ncGxfb25seVx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtMzQ3LDcgJiM0MzszNDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX2NvbXBhdF9zdHJfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuICNlbmRpZiAvKiBDT05GSUdfQVJDSF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0UgKi9cbkBAIC0zODMsNyAmIzQzOzM4Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3Byb2JlX3dyaXRlX3VzZXJfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuICNkZWZpbmUgTUFYX1RSQUNFX1BSSU5US19WQVJBUkdTXHQzXG5AQCAtNDE4LDcgJiM0Mzs0MTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90cmFjZV9wcmludGtfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIF9fc2V0X3ByaW50a19jbHJfZXZlbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuQEAgLTQ3NCw5ICYjNDM7NDc0LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdHJhY2VfdnByaW50a19wcm90byA9IHtcbiBcdC5ncGxfb25seVx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IFBUUl9NQVlCRV9OVUxMIHwgTUVNX1JET05MWSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpicGZfZ2V0X3RyYWNlX3ZwcmludGtfcHJvdG8odm9pZClcbkBAIC01MTgsOSAmIzQzOzUxOCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NlcV9wcmludGZfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxuIFx0LmFyZzFfYnRmX2lkXHQ9IFx1MDAyNmJ0Zl9zZXFfZmlsZV9pZHNbMF0sXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnNF90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IFBUUl9NQVlCRV9OVUxMIHwgTUVNX1JET05MWSxcbi1cdC5hcmc1X3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzVfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gfTtcbiBcbiBCUEZfQ0FMTF8zKGJwZl9zZXFfd3JpdGUsIHN0cnVjdCBzZXFfZmlsZSAqLCBtLCBjb25zdCB2b2lkICosIGRhdGEsIHUzMiwgbGVuKVxuQEAgLTUzNSw3ICYjNDM7NTM1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2VxX3dyaXRlX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbiBcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZidGZfc2VxX2ZpbGVfaWRzWzBdLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIEJQRl9DQUxMXzQoYnBmX3NlcV9wcmludGZfYnRmLCBzdHJ1Y3Qgc2VxX2ZpbGUgKiwgbSwgc3RydWN0IGJ0Zl9wdHIgKiwgcHRyLFxuQEAgLTU1OSw3ICYjNDM7NTU5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2VxX3ByaW50Zl9idGZfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxuIFx0LmFyZzFfYnRmX2lkXHQ9IFx1MDAyNmJ0Zl9zZXFfZmlsZV9pZHNbMF0sXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC02MzMsNyAmIzQzOzYzMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3BlcmZfZXZlbnRfcmVhZF92YWx1ZV9wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX0NPTlNUX01BUF9QVFIsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqYnBmX2dldF9wZXJmX2V2ZW50X3JlYWRfdmFsdWVfcHJvdG8odm9pZClcbkBAIC03MzAsNyAmIzQzOzczMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3BlcmZfZXZlbnRfb3V0cHV0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfTUFQX1BUUixcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIHN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIGJwZl9ldmVudF9vdXRwdXRfbmVzdF9sZXZlbCk7XG5AQCAtOTk2LDcgJiM0Mzs5OTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9kX3BhdGhfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxuIFx0LmFyZzFfYnRmX2lkXHQ9IFx1MDAyNmJwZl9kX3BhdGhfYnRmX2lkc1swXSxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fV1JJVEUsXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hbGxvd2VkXHQ9IGJwZl9kX3BhdGhfYWxsb3dlZCxcbiB9O1xuIFxuQEAgLTEwNTMsOSAmIzQzOzEwNTMsOSBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NucHJpbnRmX2J0Zl9wcm90byA9IHtcbiBcdC5ncGxfb25seVx0PSBmYWxzZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fV1JJVEUsXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNF90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC0xMjE4LDcgJiM0MzsxMjE4LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfYnJhbmNoX3NuYXBzaG90X3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IHRydWUsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIH07XG4gXG4gQlBGX0NBTExfMyhnZXRfZnVuY19hcmcsIHZvaWQgKiwgY3R4LCB1MzIsIG4sIHU2NCAqLCB2YWx1ZSlcbkBAIC0xNDIxLDcgJiM0MzsxNDIxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcGVyZl9ldmVudF9vdXRwdXRfcHJvdG9fdHAgPSB7XG4gXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9NQVBfUFRSLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIH07XG4gXG4gQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWRfdHAsIHZvaWQgKiwgdHBfYnVmZiwgc3RydWN0IGJwZl9tYXAgKiwgbWFwLFxuQEAgLTE0NjIsNyAmIzQzOzE0NjIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfcHJvdG9fdHAgPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtMTUyNCwxMiAmIzQzOzE1MjQsMTIgQEAgQlBGX0NBTExfMyhicGZfcGVyZl9wcm9nX3JlYWRfdmFsdWUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wZXJmX3Byb2dfcmVhZF92YWx1ZV9wcm90byA9IHtcbi0gICAgICAgICAuZnVuYyAgICAgICAgICAgPSBicGZfcGVyZl9wcm9nX3JlYWRfdmFsdWUsXG4tICAgICAgICAgLmdwbF9vbmx5ICAgICAgID0gdHJ1ZSxcbi0gICAgICAgICAucmV0X3R5cGUgICAgICAgPSBSRVRfSU5URUdFUixcbi0gICAgICAgICAuYXJnMV90eXBlICAgICAgPSBBUkdfUFRSX1RPX0NUWCxcbi0gICAgICAgICAuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tICAgICAgICAgLmFyZzNfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmZ1bmMgICAgICAgICAgID0gYnBmX3BlcmZfcHJvZ19yZWFkX3ZhbHVlLFxuJiM0MztcdC5ncGxfb25seSAgICAgICA9IHRydWUsXG4mIzQzO1x0LnJldF90eXBlICAgICAgID0gUkVUX0lOVEVHRVIsXG4mIzQzO1x0LmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsXG4mIzQzO1x0LmFyZzJfdHlwZSAgICAgID0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuJiM0MztcdC5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzQoYnBmX3JlYWRfYnJhbmNoX3JlY29yZHMsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxuQEAgLTE1NjYsNyAmIzQzOzE1NjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9yZWFkX2JyYW5jaF9yZWNvcmRzX3Byb3RvID0ge1xuIFx0LnJldF90eXBlICAgICAgID0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlICAgICAgPSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGUgICAgICA9IEFSR19QVFJfVE9fTUVNX09SX05VTEwgfCBNRU1fV1JJVEUsXG4tXHQuYXJnM190eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtMTY0Niw3ICYjNDM7MTY0Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3BlcmZfZXZlbnRfb3V0cHV0X3Byb3RvX3Jhd190cCA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX01BUF9QVFIsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gfTtcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2Jfb3V0cHV0X3Byb3RvO1xuQEAgLTE3MDEsNyAmIzQzOzE3MDEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfcHJvdG9fcmF3X3RwID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDBiN2FmZGQwYWU0NzQ4Li5lYjBiNzA2YWY0YjI5NiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTE3NDcsNyAmIzQzOzE3NDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2Jfc3RvcmVfYnl0ZXNfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTE3ODQsNyAmIzQzOzE3ODQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfbG9hZF9ieXRlc19wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIGludCBfX2JwZl9za2JfbG9hZF9ieXRlcyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb2Zmc2V0LCB2b2lkICp0bywgdTMyIGxlbilcbkBAIC0xODIzLDcgJiM0MzsxODIzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZmxvd19kaXNzZWN0b3JfbG9hZF9ieXRlc19wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzUoYnBmX3NrYl9sb2FkX2J5dGVzX3JlbGF0aXZlLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG5AQCAtMTg2Nyw3ICYjNDM7MTg2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9sb2FkX2J5dGVzX3JlbGF0aXZlX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnNF90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC0yMDYzLDkgJiM0MzsyMDYzLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY3N1bV9kaWZmX3Byb3RvID0ge1xuIFx0LnBrdF9hY2Nlc3NcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBQVFJfTUFZQkVfTlVMTCB8IE1FTV9SRE9OTFksXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBQVFJfTUFZQkVfTlVMTCB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNF90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc1X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtMjYyMSw3ICYjNDM7MjYyMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlZGlyZWN0X25laWdoX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IFBUUl9NQVlCRV9OVUxMIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzNfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTQxOTQsNyAmIzQzOzQxOTQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfbG9hZF9ieXRlc19wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIGludCBfX2JwZl94ZHBfbG9hZF9ieXRlcyhzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIG9mZnNldCwgdm9pZCAqYnVmLCB1MzIgbGVuKVxuQEAgLTQyMjYsNyAmIzQzOzQyMjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfc3RvcmVfYnl0ZXNfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBpbnQgX19icGZfeGRwX3N0b3JlX2J5dGVzKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgb2Zmc2V0LCB2b2lkICpidWYsIHUzMiBsZW4pXG5AQCAtNDc4OSw3ICYjNDM7NDc4OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9ldmVudF9vdXRwdXRfcHJvdG8gPSB7XG4gXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9NQVBfUFRSLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIH07XG4gXG4gQlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9za2Jfb3V0cHV0X2J0Zl9pZHMsIHN0cnVjdCwgc2tfYnVmZilcbkBAIC00ODAzLDcgJiM0Mzs0ODAzLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2Jfb3V0cHV0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfTUFQX1BUUixcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBicGZfdHVubmVsX2tleV9hZih1NjQgZmxhZ3MpXG5AQCAtNDg4Niw3ICYjNDM7NDg4Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfdHVubmVsX2tleV9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTQ5MjEsNyAmIzQzOzQ5MjEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3R1bm5lbF9vcHRfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBtZXRhZGF0YV9kc3QgX19wZXJjcHUgKm1kX2RzdDtcbkBAIC01MDAzLDcgJiM0Mzs1MDAzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX3NldF90dW5uZWxfa2V5X3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtNTAzMSw3ICYjNDM7NTAzMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9zZXRfdHVubmVsX29wdF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcbkBAIC01MjAzLDcgJiM0Mzs1MjAzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2V2ZW50X291dHB1dF9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX01BUF9QVFIsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gfTtcbiBcbiBCVEZfSURfTElTVF9TSU5HTEUoYnBmX3hkcF9vdXRwdXRfYnRmX2lkcywgc3RydWN0LCB4ZHBfYnVmZilcbkBAIC01MjE3LDcgJiM0Mzs1MjE3LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfb3V0cHV0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfTUFQX1BUUixcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIEJQRl9DQUxMXzEoYnBmX2dldF9zb2NrZXRfY29va2llLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IpXG5AQCAtNTc2NCw3ICYjNDM7NTc2NCw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfc2V0c29ja29wdF9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBCUEZfQ0FMTF81KGJwZl9za19nZXRzb2Nrb3B0LCBzdHJ1Y3Qgc29jayAqLCBzaywgaW50LCBsZXZlbCxcbkBAIC01NzgxLDcgJiM0Mzs1NzgxLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19nZXRzb2Nrb3B0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzUoYnBmX3NrX3NldHNvY2tvcHRfbm9kZWxheSwgc3RydWN0IHNvY2sgKiwgc2ssIGludCwgbGV2ZWwsXG5AQCAtNTgwNSw3ICYjNDM7NTgwNSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfc2V0c29ja29wdF9ub2RlbGF5X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzUoYnBmX3VubG9ja2VkX3NrX3NldHNvY2tvcHQsIHN0cnVjdCBzb2NrICosIHNrLCBpbnQsIGxldmVsLFxuQEAgLTU4MjIsNyAmIzQzOzU4MjIsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3VubG9ja2VkX3NrX3NldHNvY2tvcHRfcHJvdG8gPSB7XG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gQlBGX0NBTExfNShicGZfdW5sb2NrZWRfc2tfZ2V0c29ja29wdCwgc3RydWN0IHNvY2sgKiwgc2ssIGludCwgbGV2ZWwsXG5AQCAtNTgzOSw3ICYjNDM7NTgzOSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdW5sb2NrZWRfc2tfZ2V0c29ja29wdF9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBCUEZfQ0FMTF81KGJwZl9zb2NrX2FkZHJfc2V0c29ja29wdCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsXG5AQCAtNTg1Niw3ICYjNDM7NTg1Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9zZXRzb2Nrb3B0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzUoYnBmX3NvY2tfYWRkcl9nZXRzb2Nrb3B0LCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICosIGN0eCxcbkBAIC01ODczLDcgJiM0Mzs1ODczLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19hZGRyX2dldHNvY2tvcHRfcHJvdG8gPSB7XG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gc3RhdGljIGludCBza19icGZfc2V0X2dldF9ieXBhc3NfcHJvdF9tZW0oc3RydWN0IHNvY2sgKnNrLFxuQEAgLTU5MTgsNyAmIzQzOzU5MTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2NyZWF0ZV9zZXRzb2Nrb3B0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzUoYnBmX3NvY2tfY3JlYXRlX2dldHNvY2tvcHQsIHN0cnVjdCBzb2NrICosIHNrLCBpbnQsIGxldmVsLFxuQEAgLTU5NDQsNyAmIzQzOzU5NDQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2NyZWF0ZV9nZXRzb2Nrb3B0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzUoYnBmX3NvY2tfb3BzX3NldHNvY2tvcHQsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqLCBicGZfc29jayxcbkBAIC01OTcwLDcgJiM0Mzs1OTcwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19vcHNfc2V0c29ja29wdF9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBzdGF0aWMgaW50IGJwZl9zb2NrX29wc19nZXRfc3luKHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqYnBmX3NvY2ssXG5AQCAtNjA4MCw3ICYjNDM7NjA4MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfb3BzX2dldHNvY2tvcHRfcHJvdG8gPSB7XG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gQlBGX0NBTExfMihicGZfc29ja19vcHNfY2JfZmxhZ3Nfc2V0LCBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKiwgYnBmX3NvY2ssXG5AQCAtNjE0Nyw3ICYjNDM7NjE0Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2JpbmRfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gI2lmZGVmIENPTkZJR19YRlJNXG5AQCAtNjIwMCw3ICYjNDM7NjIwMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfeGZybV9zdGF0ZV9wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmc1X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gI2VuZGlmXG5AQCAtNjYwNyw3ICYjNDM7NjYwNyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9maWJfbG9va3VwX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9XUklURSxcbi1cdC5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRSxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtNjY2Nyw3ICYjNDM7NjY2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9maWJfbG9va3VwX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9XUklURSxcbi1cdC5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRSxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtNjg2NSw3ICYjNDM7Njg2NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9pbl9wdXNoX2VuY2FwX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNF90eXBlXHQ9IEFSR19DT05TVF9TSVpFXG4mIzQzO1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkVcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF94bWl0X3B1c2hfZW5jYXBfcHJvdG8gPSB7XG5AQCAtNjg3NSw3ICYjNDM7Njg3NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF94bWl0X3B1c2hfZW5jYXBfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVcbiYjNDM7XHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRVxuIH07XG4gXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXG5AQCAtNjkxOSw3ICYjNDM7NjkxOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNF90eXBlXHQ9IEFSR19DT05TVF9TSVpFXG4mIzQzO1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkVcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXG5AQCAtNzAwOCw3ICYjNDM7NzAwOCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X2FjdGlvbl9wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRVxuJiM0MztcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFXG4gfTtcbiBcbiBCUEZfQ0FMTF8zKGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxuQEAgLTcyNDksNyAmIzQzOzcyNDksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX1NPQ0tfQ09NTU9OX09SX05VTEwsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbkBAIC03MjY4LDcgJiM0Mzs3MjY4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX1NPQ0tFVF9PUl9OVUxMLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc1X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG5AQCAtNzI4Nyw3ICYjNDM7NzI4Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX2xvb2t1cF91ZHBfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX1BUUl9UT19TT0NLRVRfT1JfTlVMTCxcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuQEAgLTczMTEsNyAmIzQzOzczMTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za2NfbG9va3VwX3RjcF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX1NPQ0tfQ09NTU9OX09SX05VTEwsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbkBAIC03MzM1LDcgJiM0Mzs3MzM1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX1NPQ0tFVF9PUl9OVUxMLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc1X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG5AQCAtNzM1OSw3ICYjNDM7NzM1OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjX3NrX2xvb2t1cF91ZHBfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX1BUUl9UT19TT0NLRVRfT1JfTlVMTCxcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuQEAgLTczOTcsNyAmIzQzOzczOTcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfc2tfbG9va3VwX3VkcF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZSAgICAgICA9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsXG4gXHQuYXJnMV90eXBlICAgICAgPSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGUgICAgICA9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzNfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNV90eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsXG4gfTtcbkBAIC03NDIxLDcgJiM0Mzs3NDIxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX3NrY19sb29rdXBfdGNwX3Byb3RvID0ge1xuIFx0LnJldF90eXBlICAgICAgID0gUkVUX1BUUl9UT19TT0NLX0NPTU1PTl9PUl9OVUxMLFxuIFx0LmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzVfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLFxuIH07XG5AQCAtNzQ0NSw3ICYjNDM7NzQ0NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za19sb29rdXBfdGNwX3Byb3RvID0ge1xuIFx0LnJldF90eXBlICAgICAgID0gUkVUX1BUUl9UT19TT0NLRVRfT1JfTlVMTCxcbiBcdC5hcmcxX3R5cGUgICAgICA9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZSAgICAgID0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnM190eXBlICAgICAgPSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGUgICAgICA9IEFSR19BTllUSElORyxcbiBcdC5hcmc1X3R5cGUgICAgICA9IEFSR19BTllUSElORyxcbiB9O1xuQEAgLTc0NjUsNyAmIzQzOzc0NjUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX1BUUl9UT19TT0NLX0NPTU1PTl9PUl9OVUxMLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc1X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG5AQCAtNzQ4NCw3ICYjNDM7NzQ4NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbkBAIC03NTAzLDcgJiM0Mzs3NTAzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHBfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX1BUUl9UT19TT0NLRVRfT1JfTlVMTCxcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuQEAgLTc4MjMsOSAmIzQzOzc4MjMsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y3BfY2hlY2tfc3luY29va2llX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzUoYnBmX3RjcF9nZW5fc3luY29va2llLCBzdHJ1Y3Qgc29jayAqLCBzaywgdm9pZCAqLCBpcGgsIHUzMiwgaXBoX2xlbixcbkBAIC03ODkyLDkgJiM0Mzs3ODkyLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX2dlbl9zeW5jb29raWVfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQlRGX0lEX1NPQ0tfQ09NTU9OLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuJiM0MztcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gQlBGX0NBTExfMyhicGZfc2tfYXNzaWduLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHN0cnVjdCBzb2NrICosIHNrLCB1NjQsIGZsYWdzKVxuQEAgLTgwNDgsNyAmIzQzOzgwNDgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX29wc19sb2FkX2hkcl9vcHRfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9XUklURSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTgxMjYsNyAmIzQzOzgxMjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX29wc19zdG9yZV9oZHJfb3B0X3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtODIyMSw3ICYjNDM7ODIyMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjcF9yYXdfZ2VuX3N5bmNvb2tpZV9pcHY0X3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0ZJWEVEX1NJWkVfTUVNIHwgTUVNX1JET05MWSxcbiBcdC5hcmcxX3NpemVcdD0gc2l6ZW9mKHN0cnVjdCBpcGhkciksXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbiYjNDM7XHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIH07XG4gXG4gQlBGX0NBTExfMyhicGZfdGNwX3Jhd19nZW5fc3luY29va2llX2lwdjYsIHN0cnVjdCBpcHY2aGRyICosIGlwaCxcbkBAIC04MjUzLDcgJiM0Mzs4MjUzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX3Jhd19nZW5fc3luY29va2llX2lwdjZfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fRklYRURfU0laRV9NRU0gfCBNRU1fUkRPTkxZLFxuIFx0LmFyZzFfc2l6ZVx0PSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4mIzQzO1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIEJQRl9DQUxMXzIoYnBmX3RjcF9yYXdfY2hlY2tfc3luY29va2llX2lwdjQsIHN0cnVjdCBpcGhkciAqLCBpcGgsXG5AQCAtMTE3MjYsNyAmIzQzOzExNzI2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBza19yZXVzZXBvcnRfbG9hZF9ieXRlc19wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzUoc2tfcmV1c2Vwb3J0X2xvYWRfYnl0ZXNfcmVsYXRpdmUsXG5AQCAtMTE3NDQsNyAmIzQzOzExNzQ0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBza19yZXVzZXBvcnRfbG9hZF9ieXRlc19yZWxhdGl2ZV9wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbiYjNDM7XHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmc1X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbmluZGV4IGJlOTdmNjg4N2YwZTdmLi5hODFmYWE3MDlkZDViYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbkBAIC02Nyw2ICYjNDM7NjcsNyBAQFxuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX21hc2tpbmcuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfbWF5X2dvdG9fMS5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9tYXlfZ290b18yLnNrZWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9tZW1fc2l6ZV9yZWcuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfbWV0YV9hY2Nlc3Muc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfbW92c3guc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfbXR1LnNrZWwuaFwmIzM0O1xuQEAgLTIyMSw2ICYjNDM7MjIyLDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX21hcF9yZXRfdmFsKHZvaWQpICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX21hcF9yZXRfdmFsKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9tYXNraW5nKHZvaWQpICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9tYXNraW5nKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9tYXlfZ290b18xKHZvaWQpICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9tYXlfZ290b18xKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9tYXlfZ290b18yKHZvaWQpICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9tYXlfZ290b18yKTsgfVxuJiM0Mzt2b2lkIHRlc3RfdmVyaWZpZXJfbWVtX3NpemVfcmVnKHZvaWQpICAgICAgICAgeyBSVU4odmVyaWZpZXJfbWVtX3NpemVfcmVnKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9tZXRhX2FjY2Vzcyh2b2lkKSAgICAgICAgICB7IFJVTih2ZXJpZmllcl9tZXRhX2FjY2Vzcyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfbW92c3godm9pZCkgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX21vdnN4KTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9tdWwodm9pZCkgICAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9tdWwpOyB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NncnBfa2Z1bmNfZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NncnBfa2Z1bmNfZmFpbHVyZS5jXG5pbmRleCBkMGQ2NWQ2ZDQ1MGNmNS4uZWZlN2JjYWU3MGY4NWEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY2dycF9rZnVuY19mYWlsdXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jZ3JwX2tmdW5jX2ZhaWx1cmUuY1xuQEAgLTY0LDcgJiM0Mzs2NCw3IEBAIGludCBCUEZfUFJPRyhjZ3JwX2tmdW5jX2FjcXVpcmVfbm9fbnVsbF9jaGVjaywgc3RydWN0IGNncm91cCAqY2dycCwgY29uc3QgY2hhciAqXG4gfVxuIFxuIFNFQyhcJiMzNDt0cF9idGYvY2dyb3VwX21rZGlyXCYjMzQ7KVxuLV9fZmFpbHVyZSBfX21zZyhcJiMzNDtSMSBwb2ludGVyIHR5cGUgU1RSVUNUIGNncm91cCBtdXN0IHBvaW50XCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjEgaXMgZnAgZXhwZWN0ZWQgU1RSVUNUIGNncm91cFwmIzM0OylcbiBpbnQgQlBGX1BST0coY2dycF9rZnVuY19hY3F1aXJlX2ZwLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBjb25zdCBjaGFyICpwYXRoKVxuIHtcbiBcdHN0cnVjdCBjZ3JvdXAgKmFjcXVpcmVkLCAqc3RhY2tfY2dycCA9IChzdHJ1Y3QgY2dyb3VwICopXHUwMDI2cGF0aDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWVtX3Jkb25seV91bnRydXN0ZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tZW1fcmRvbmx5X3VudHJ1c3RlZC5jXG5pbmRleCA1YjQ0NTM3NDdjMjMwOC4uMDk1MmQxZWJmMGYxN2EgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWVtX3Jkb25seV91bnRydXN0ZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21lbV9yZG9ubHlfdW50cnVzdGVkLmNcbkBAIC0xMzcsNyAmIzQzOzEzNyw3IEBAIGludCBoZWxwZXJfcGFyYW1fbm90X29rKHZvaWQgKmN0eClcbiBcbiBcdHAgPSBicGZfcmRvbmx5X2Nhc3QoMCwgMCk7XG4gXHQvKlxuLVx0ICogQW55IGhlbHBlciB3aXRoIEFSR19DT05TVF9TSVpFX09SX1pFUk8gY29uc3RyYWludCB3aWxsIGRvLFxuJiM0MztcdCAqIEFueSBoZWxwZXIgd2l0aCBBUkdfTUVNX1NJWkVfT1JfWkVSTyBjb25zdHJhaW50IHdpbGwgZG8sXG4gXHQgKiB0aGUgbW9zdCBwZXJtaXNzaXZlIGNvbnN0cmFpbnRcbiBcdCAqL1xuIFx0YnBmX2NvcHlfZnJvbV91c2VyKHAsIDAsICh2b2lkICopNDIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX2tmdW5jX2ZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX2tmdW5jX2ZhaWx1cmUuY1xuaW5kZXggODk0MmI1NDc4MTI5MTcuLjVjOTliMWU2NTMyYmZkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfa2Z1bmNfZmFpbHVyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmNcbkBAIC01MCw3ICYjNDM7NTAsNyBAQCBpbnQgQlBGX1BST0codGFza19rZnVuY19hY3F1aXJlX3VudHJ1c3RlZCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1NjQgY2xvbmVfZlxuIH1cbiBcbiBTRUMoXCYjMzQ7dHBfYnRmL3Rhc2tfbmV3dGFza1wmIzM0Oylcbi1fX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjEgcG9pbnRlciB0eXBlIFNUUlVDVCB0YXNrX3N0cnVjdCBtdXN0IHBvaW50XCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjEgaXMgZnAgZXhwZWN0ZWQgU1RSVUNUIHRhc2tfc3RydWN0XCYjMzQ7KVxuIGludCBCUEZfUFJPRyh0YXNrX2tmdW5jX2FjcXVpcmVfZnAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IGNsb25lX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCB0YXNrX3N0cnVjdCAqYWNxdWlyZWQsICpzdGFja190YXNrID0gKHN0cnVjdCB0YXNrX3N0cnVjdCAqKVx1MDAyNmNsb25lX2ZsYWdzO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9ib3VuZHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9ib3VuZHMuY1xuaW5kZXggYmMwMzhhYzJkZjk4ZTIuLjFhMjczZTQxNmZlZGZmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2JvdW5kcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYm91bmRzLmNcbkBAIC0xMTk1LDcgJiM0MzsxMTk1LDcgQEAgbDBfJT06XHRyMSA9IHI2O1x0XHRcdFx0XHRcXFxuIFx0cjMgJiM0Mzs9IC04O1x0XHRcdFx0XHRcXFxuIFx0cjUgPSAwO1x0XHRcdFx0XHRcdFxcXG4gXHQvKiBUaGUgNHRoIGFyZ3VtZW50IG9mIGJwZl9za2Jfc3RvcmVfYnl0ZXMgaXMgZGVmaW5lZCBhcyBcXFxuLVx0ICogQVJHX0NPTlNUX1NJWkUsIHNvIDAgaXMgbm90IGFsbG93ZWQuIFRoZSAmIzM5O3I0ICE9IDAmIzM5OyBcXFxuJiM0MztcdCAqIEFSR19NRU1fU0laRSwgc28gMCBpcyBub3QgYWxsb3dlZC4gVGhlICYjMzk7cjQgIT0gMCYjMzk7IFxcXG4gXHQgKiBpcyBwcm92aWRpbmcgdXMgdGhpcyBleGNsdXNpb24gb2YgemVybyBmcm9tIGluaXRpYWwgXFxcbiBcdCAqIFswLCA3XSByYW5nZS5cdFx0XHRcdFxcXG4gXHQgKi9cdFx0XHRcdFx0XHRcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfYWNjZXNzX3Zhcl9sZW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfYWNjZXNzX3Zhcl9sZW4uY1xuaW5kZXggZjJjNTRlNGQ4OWViZWYuLjM0M2ZjMDhkOTc0Nzk4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2hlbHBlcl9hY2Nlc3NfdmFyX2xlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfaGVscGVyX2FjY2Vzc192YXJfbGVuLmNcbkBAIC04NSw3ICYjNDM7ODUsNyBAQCBfX25ha2VkIHZvaWQgc3RhY2tfYml0d2lzZV9hbmRfemVyb19pbmNsdWRlZCh2b2lkKVxuIFx0cjIgJiM0Mzs9IC02NDtcdFx0XHRcdFx0XFxcbiBcdHI0ID0gMDtcdFx0XHRcdFx0XHRcXFxuIFx0LyogQ2FsbCBicGZfcmluZ2J1Zl9vdXRwdXQoKSwgaXQgaXMgb25lIG9mIGEgZmV3IGhlbHBlciBmdW5jdGlvbnMgd2l0aFxcXG4tXHQgKiBBUkdfQ09OU1RfU0laRV9PUl9aRVJPIHBhcmFtZXRlciBhbGxvd2VkIGluIHVucHJpdiBtb2RlLlxcXG4mIzQzO1x0ICogQVJHX01FTV9TSVpFX09SX1pFUk8gcGFyYW1ldGVyIGFsbG93ZWQgaW4gdW5wcml2IG1vZGUuXFxcbiBcdCAqIEZvciB1bnByaXYgdGhpcyBzaG91bGQgc2lnbmFsIGFuIGVycm9yLCBiZWNhdXNlIG1lbW9yeSBhdCBcdTAwMjZmcFstNjRdIGlzXFxcbiBcdCAqIG5vdCBpbml0aWFsaXplZC5cdFx0XHRcdFxcXG4gXHQgKi9cdFx0XHRcdFx0XHRcXFxuQEAgLTI3OCw3ICYjNDM7Mjc4LDcgQEAgX19uYWtlZCB2b2lkIHN0YWNrX2ptcF9ub19taW5fY2hlY2sodm9pZClcbiBcdHIyICYjNDM7PSAtNjQ7XHRcdFx0XHRcdFxcXG4gXHRyNCA9IDA7XHRcdFx0XHRcdFx0XFxcbiBcdC8qIENhbGwgYnBmX3JpbmdidWZfb3V0cHV0KCksIGl0IGlzIG9uZSBvZiBhIGZldyBoZWxwZXIgZnVuY3Rpb25zIHdpdGhcXFxuLVx0ICogQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyBwYXJhbWV0ZXIgYWxsb3dlZCBpbiB1bnByaXYgbW9kZS5cXFxuJiM0MztcdCAqIEFSR19NRU1fU0laRV9PUl9aRVJPIHBhcmFtZXRlciBhbGxvd2VkIGluIHVucHJpdiBtb2RlLlxcXG4gXHQgKiBGb3IgdW5wcml2IHRoaXMgc2hvdWxkIHNpZ25hbCBhbiBlcnJvciwgYmVjYXVzZSBtZW1vcnkgYXQgXHUwMDI2ZnBbLTY0XSBpc1xcXG4gXHQgKiBub3QgaW5pdGlhbGl6ZWQuXHRcdFx0XHRcXFxuIFx0ICovXHRcdFx0XHRcdFx0XFxcbkBAIC03NzgsNyAmIzQzOzc3OCw3IEBAIF9fbmFrZWQgdm9pZCB2YXJpYWJsZV9tZW1vcnlfOF9ieXRlc19sZWFrKHZvaWQpXG4gXHRyMyAmIzQzOz0gMTtcdFx0XHRcdFx0XFxcbiBcdHI0ID0gMDtcdFx0XHRcdFx0XHRcXFxuIFx0LyogQ2FsbCBicGZfcmluZ2J1Zl9vdXRwdXQoKSwgaXQgaXMgb25lIG9mIGEgZmV3IGhlbHBlciBmdW5jdGlvbnMgd2l0aFxcXG4tXHQgKiBBUkdfQ09OU1RfU0laRV9PUl9aRVJPIHBhcmFtZXRlciBhbGxvd2VkIGluIHVucHJpdiBtb2RlLlxcXG4mIzQzO1x0ICogQVJHX01FTV9TSVpFX09SX1pFUk8gcGFyYW1ldGVyIGFsbG93ZWQgaW4gdW5wcml2IG1vZGUuXFxcbiBcdCAqIEZvciB1bnByaXYgdGhpcyBzaG91bGQgc2lnbmFsIGFuIGVycm9yLCBiZWNhdXNlIG1lbW9yeSByZWdpb24gWzEsIDY0XVxcXG4gXHQgKiBhdCBcdTAwMjZmcFstNjRdIGlzIG5vdCBmdWxseSBpbml0aWFsaXplZC5cdFxcXG4gXHQgKi9cdFx0XHRcdFx0XHRcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfdmFsdWVfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfaGVscGVyX3ZhbHVlX2FjY2Vzcy5jXG5pbmRleCA2ZDJhMzg1OTdjMzRmNC4uYzY2MDNhMTE4ZmRjMzkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfaGVscGVyX3ZhbHVlX2FjY2Vzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfaGVscGVyX3ZhbHVlX2FjY2Vzcy5jXG5AQCAtOTEsNyAmIzQzOzkxLDcgQEAgbDBfJT06XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4gXG4gLyogQ2FsbCBhIGZ1bmN0aW9uIHRha2luZyBhIHBvaW50ZXIgYW5kIGEgc2l6ZSB3aGljaCBkb2VzbiYjMzk7dCBhbGxvdyB0aGUgc2l6ZSB0b1xuICAqIGJlIHplcm8gKGkuZS4gYnBmX3RyYWNlX3ByaW50aygpIGRlY2xhcmVzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYmVcbi0gKiBBUkdfQ09OU1RfU0laRSwgbm90IEFSR19DT05TVF9TSVpFX09SX1pFUk8pLiBXZSBhdHRlbXB0IHRvIHBhc3MgemVybyBmb3IgdGhlXG4mIzQzOyAqIEFSR19NRU1fU0laRSwgbm90IEFSR19NRU1fU0laRV9PUl9aRVJPKS4gV2UgYXR0ZW1wdCB0byBwYXNzIHplcm8gZm9yIHRoZVxuICAqIHNpemUgYW5kIGV4cGVjdCB0byBmYWlsLlxuICAqL1xuIFNFQyhcJiMzNDt0cmFjZXBvaW50XCYjMzQ7KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tZW1fc2l6ZV9yZWcuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tZW1fc2l6ZV9yZWcuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43OGE5YWQyMmIxMGRmZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21lbV9zaXplX3JlZy5jXG5AQCAtMCwwICYjNDM7MSw2MCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX2tmdW5jcy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiM0MztcbiYjNDM7c3RydWN0IGlubmVyX21hcCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBpbnQpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgaW50KTtcbiYjNDM7fSBpbm5lcl9tYXAgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWV9PRl9NQVBTKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0MztcdF9fdHlwZShrZXksIGludCk7XG4mIzQzO1x0X19hcnJheSh2YWx1ZXMsIHN0cnVjdCBpbm5lcl9tYXApO1xuJiM0Mzt9IG91dGVyX21hcCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspID0ge1xuJiM0MztcdC52YWx1ZXMgPSB7IFswXSA9IFx1MDAyNmlubmVyX21hcCB9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogQW4gdW4tbmFycm93ZWQgbWFwLW9mLW1hcHMgdmFsdWUgbXVzdCBiZSByZWplY3RlZCBhcyBhIF9fbnVsbGFibGUga2Z1bmMgbWVtIGJ1ZmZlciAqL1xuJiM0MztTRUMoXCYjMzQ7P3RjXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmVcbiYjNDM7aW50IG1hcG9mbWFwc192YWx1ZV9hc19rZnVuY19tZW1fYnVmKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfZHlucHRyIGRwdHI7XG4mIzQzO1x0X191MzIga2V5ID0gMDtcbiYjNDM7XHR2b2lkICppbm5lcjtcbiYjNDM7XHRjaGFyICpwO1xuJiM0MztcbiYjNDM7XHRpbm5lciA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2b3V0ZXJfbWFwLCBcdTAwMjZrZXkpO1xuJiM0MztcdC8qIGludGVudGlvbmFsbHkgTk9UIE5VTEwtY2hlY2tlZDogcmVnIHN0YXlzIFBUUl9UT19NQVBfVkFMVUVfT1JfTlVMTCAqL1xuJiM0MztcbiYjNDM7XHRicGZfZHlucHRyX2Zyb21fc2tiKHNrYiwgMCwgXHUwMDI2ZHB0cik7XG4mIzQzO1x0LyogcGFzcyB0aGUgdW4tbmFycm93ZWQgbWFwLW9mLW1hcHMgdmFsdWUgYXMgdGhlIHNjcmF0Y2ggYnVmZmVyICovXG4mIzQzO1x0cCA9IGJwZl9keW5wdHJfc2xpY2UoXHUwMDI2ZHB0ciwgMCwgaW5uZXIsIDgpO1xuJiM0MztcdGlmIChwKVxuJiM0MztcdFx0cmV0dXJuIHBbMF07XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEFuIHVuLW5hcnJvd2VkIG1hcC1vZi1tYXBzIHZhbHVlIG11c3QgYmUgcmVqZWN0ZWQgYXMgYSBQVFJfTUFZQkVfTlVMTCBoZWxwZXIgbWVtIGJ1ZmZlciAqL1xuJiM0MztTRUMoXCYjMzQ7P3RjXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmVcbiYjNDM7aW50IG1hcG9mbWFwc192YWx1ZV9hc19oZWxwZXJfbWVtX2J1ZihzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRfX3UzMiBrZXkgPSAwO1xuJiM0MztcdHZvaWQgKmlubmVyO1xuJiM0MztcbiYjNDM7XHRpbm5lciA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2b3V0ZXJfbWFwLCBcdTAwMjZrZXkpO1xuJiM0MztcdC8qIGludGVudGlvbmFsbHkgTk9UIE5VTEwtY2hlY2tlZDogcmVnIHN0YXlzIFBUUl9UT19NQVBfVkFMVUVfT1JfTlVMTCAqL1xuJiM0MztcbiYjNDM7XHQvKiBAZnJvbSBpcyBhIG51bGxhYmxlIHJlYWQtb25seSBtZW0mIzQzO3NpemUgYXJnOyBvdXRlciB2YWx1ZV9zaXplIGlzIDQgKi9cbiYjNDM7XHRyZXR1cm4gYnBmX2NzdW1fZGlmZihpbm5lciwgNCwgTlVMTCwgMCwgMCkgJiM0Mzsgc2tiLVx1MDAzZWxlbjtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jXG5pbmRleCAyODcwNzM4ZDkzZjdlYy4uOGYwYzQ1NDIxZjg5MzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jXG5AQCAtMjgsNyAmIzQzOzI4LDcgQEAgaW50IEJQRl9QUk9HKGdldF90YXNrX2V4ZV9maWxlX2tmdW5jX251bGwpXG4gfVxuIFxuIFNFQyhcJiMzNDtsc20ucy9pbm9kZV9nZXR4YXR0clwmIzM0Oylcbi1fX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjEgcG9pbnRlciB0eXBlIFNUUlVDVCB0YXNrX3N0cnVjdCBtdXN0IHBvaW50IHRvIHNjYWxhciwgb3Igc3RydWN0IHdpdGggc2NhbGFyXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjEgaXMgZnAgZXhwZWN0ZWQgU1RSVUNUIHRhc2tfc3RydWN0XCYjMzQ7KVxuIGludCBCUEZfUFJPRyhnZXRfdGFza19leGVfZmlsZV9rZnVuY19mcClcbiB7XG4gXHR1NjQgeDtcbkBAIC05OCw3ICYjNDM7OTgsNyBAQCBpbnQgQlBGX1BST0cocGF0aF9kX3BhdGhfa2Z1bmNfbnVsbClcbiB9XG4gXG4gU0VDKFwmIzM0O2xzbS5zL3Rhc2tfYWxsb2NcJiMzNDspXG4tX19mYWlsdXJlIF9fbXNnKFwmIzM0O1IxIG11c3QgYmUgcmVmZXJlbmNlZCBvciB0cnVzdGVkXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7ZGVyZWZlcmVuY2Ugb2YgbW9kaWZpZWQgdW50cnVzdGVkX3B0cl9cJiMzNDspXG4gaW50IEJQRl9QUk9HKHBhdGhfZF9wYXRoX2tmdW5jX3VudHJ1c3RlZF9mcm9tX2FyZ3VtZW50LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4ge1xuIFx0c3RydWN0IHBhdGggKnJvb3Q7XG5AQCAtMTEyLDcgJiM0MzsxMTIsNyBAQCBpbnQgQlBGX1BST0cocGF0aF9kX3BhdGhfa2Z1bmNfdW50cnVzdGVkX2Zyb21fYXJndW1lbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza1xuIH1cbiBcbiBTRUMoXCYjMzQ7bHNtLnMvZmlsZV9vcGVuXCYjMzQ7KVxuLV9fZmFpbHVyZSBfX21zZyhcJiMzNDtSMSBtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2RlcmVmZXJlbmNlIG9mIG1vZGlmaWVkIHVudHJ1c3RlZF9wdHJfXCYjMzQ7KVxuIGludCBCUEZfUFJPRyhwYXRoX2RfcGF0aF9rZnVuY191bnRydXN0ZWRfZnJvbV9jdXJyZW50KVxuIHtcbiBcdHN0cnVjdCBwYXRoICpwd2Q7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL2NhbGxzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvY2FsbHMuY1xuaW5kZXggMzAyZDcxMmUwZDdlZDIuLjhjZDYyNmUwNDU1MTU3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL2NhbGxzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9jYWxscy5jXG5AQCAtMzEsNyAmIzQzOzMxLDcgQEBcbiBcdH0sXG4gXHQucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXG4gXHQucmVzdWx0ID0gUkVKRUNULFxuLVx0LmVycnN0ciA9IFwmIzM0O1IxIHBvaW50ZXIgdHlwZSBTVFJVQ1QgcHJvZ190ZXN0X2ZhaWwxIG11c3QgcG9pbnQgdG8gc2NhbGFyXCYjMzQ7LFxuJiM0MztcdC5lcnJzdHIgPSBcJiMzNDtSMSBpcyBmcCBleHBlY3RlZCBTVFJVQ1QgcHJvZ190ZXN0X2ZhaWwxXCYjMzQ7LFxuIFx0LmZpeHVwX2tmdW5jX2J0Zl9pZCA9IHtcbiBcdFx0eyBcJiMzNDticGZfa2Z1bmNfY2FsbF90ZXN0X2ZhaWwxXCYjMzQ7LCAyIH0sXG4gXHR9LFxuQEAgLTQ2LDcgJiM0Mzs0Niw3IEBAXG4gXHR9LFxuIFx0LnByb2dfdHlwZSA9IEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLFxuIFx0LnJlc3VsdCA9IFJFSkVDVCxcbi1cdC5lcnJzdHIgPSBcJiMzNDttYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcXG5SMSBwb2ludGVyIHR5cGUgU1RSVUNUIHByb2dfdGVzdF9mYWlsMlwmIzM0OyxcbiYjNDM7XHQuZXJyc3RyID0gXCYjMzQ7bWF4IHN0cnVjdCBuZXN0aW5nIGRlcHRoIGV4Y2VlZGVkXFxuUjEgaXMgZnAgZXhwZWN0ZWQgU1RSVUNUIHByb2dfdGVzdF9mYWlsMlwmIzM0OyxcbiBcdC5maXh1cF9rZnVuY19idGZfaWQgPSB7XG4gXHRcdHsgXCYjMzQ7YnBmX2tmdW5jX2NhbGxfdGVzdF9mYWlsMlwmIzM0OywgMiB9LFxuIFx0fSxcbkBAIC02MSw3ICYjNDM7NjEsNyBAQFxuIFx0fSxcbiBcdC5wcm9nX3R5cGUgPSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyxcbiBcdC5yZXN1bHQgPSBSRUpFQ1QsXG4tXHQuZXJyc3RyID0gXCYjMzQ7UjEgcG9pbnRlciB0eXBlIFNUUlVDVCBwcm9nX3Rlc3RfZmFpbDMgbXVzdCBwb2ludCB0byBzY2FsYXJcJiMzNDssXG4mIzQzO1x0LmVycnN0ciA9IFwmIzM0O1IxIGlzIGZwIGV4cGVjdGVkIFNUUlVDVCBwcm9nX3Rlc3RfZmFpbDNcJiMzNDssXG4gXHQuZml4dXBfa2Z1bmNfYnRmX2lkID0ge1xuIFx0XHR7IFwmIzM0O2JwZl9rZnVuY19jYWxsX3Rlc3RfZmFpbDNcJiMzNDssIDIgfSxcbiBcdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDk6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VuX2tmdW5jX2FyZ19wcm90byYjMzQ7LAogICAgJiMzNDtnZXRfa2Z1bmNfYXJnX3R5cGUmIzM0OywKICAgICYjMzQ7cHJvY2Vzc19tYXBfcHRyX2FyZyYjMzQ7LAogICAgJiMzNDtjaGVja19rZnVuY19hcmdzJiMzNDssCiAgICAmIzM0O2NoZWNrX2Z1bmNfYXJnJiMzNDssCiAgICAmIzM0O2NoZWNrX21lbV9zaXplX3JlZyYjMzQ7LAogICAgJiMzNDtjaGVja19tZW1fcmVnJiMzNDssCiAgICAmIzM0O3Byb2Nlc3NfY29uc3RfYXJnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpZ25pZmljYW50bHkgcmVmYWN0b3JzIGhvdyB0aGUgZUJQRiB2ZXJpZmllciBoYW5kbGVzIGFyZ3VtZW50cyBmb3Iga2Z1bmNzIGFuZCBoZWxwZXIgZnVuY3Rpb25zLCBpbnRyb2R1Y2luZyBuZXcgYXJndW1lbnQgdHlwZXMgKEFSR19NRU1fU0laRSwgQVJHX01FTV9TSVpFX09SX1pFUk8pIGFuZCBhIG5ldyB3YXkgdG8gZ2VuZXJhdGUga2Z1bmMgcHJvdG90eXBlcyAoZ2VuX2tmdW5jX2FyZ19wcm90bykuIFRoaXMgaXMgY29yZSB2ZXJpZmllciBsb2dpYyB0aGF0IGlzIGhpZ2hseSBjb21wbGV4IGFuZCBwcm9uZSB0byBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG1ha2luZyBpdCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTQ5YzU3YTNlNjllMmYzYWFjNTZiYTIyMzFmNDlmMmFhZDExNTZhNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDI0IDA5OjE3OjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdCBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QKaW5kZXggYzgwMWEzMzBhZWNlMDguLmNiZGU4NmQwODJjY2VhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QKQEAgLTI1MCw2ICYjNDM7MjUwLDM0IEBAIE9yOjoKICAgICAgICAgICAgICAgICAuLi4KICAgICAgICAgfQogCiYjNDM7Mi4zLjcgX19jb25zdF9tYXAgYW5kIF9fbWFwIEFubm90YXRpb25zCiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7VGhlc2UgYW5ub3RhdGlvbnMgYXJlIHVzZWQgZm9yIGBgc3RydWN0IGJwZl9tYXAgKmBgIGFyZ3VtZW50cyBhbmQgZGlzdGluZ3Vpc2ggYQomIzQzO3ZlcmlmaWVyLWtub3duIG1hcCBmcm9tIGFuIG9wYXF1ZSBvbmUuCiYjNDM7CiYjNDM7YGBfX2NvbnN0X21hcGBgIGluZGljYXRlcyBhIG1hcCBtdXN0IGJlIGtub3duIGF0IHRoZSB2ZXJpZmljYXRpb24gdGltZSwgaS5lLiBhCiYjNDM7Y29uY3JldGUgbWFwIGZkIHRoZSBCUEYgcHJvZ3JhbSByZWZlcmVuY2VzIGRpcmVjdGx5LgomIzQzOwomIzQzO0FuIGV4YW1wbGUgaXMgZ2l2ZW4gYmVsb3c6OgomIzQzOwomIzQzOyAgICAgICAgX19icGZfa2Z1bmMgaW50IGJwZl93cV9pbml0KHN0cnVjdCBicGZfd3EgKndxLCB2b2lkICpwX19jb25zdF9tYXAsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQomIzQzOyAgICAgICAgewomIzQzOyAgICAgICAgICAgICAgICAuLi4KJiM0MzsgICAgICAgIH0KJiM0MzsKJiM0MztgYF9fbWFwYGAgaW5kaWNhdGVzIGFuIG9wYXF1ZSBgYHN0cnVjdCBicGZfbWFwICpgYCB0aGF0IG1heSBiZSByZXNvbHZlZAomIzQzO2F0IHJ1biB0aW1lLiBUaGUgYXJndW1lbnQgbWF5IHRha2UgZWl0aGVyIGEgbWFwIGZkIG9yIGEgYGBQVFJfVE9fQlRGX0lEYGAKJiM0MztgYHN0cnVjdCBicGZfbWFwYGAgcG9pbnRlci4KJiM0MzsKJiM0MztBbiBleGFtcGxlIGlzIGdpdmVuIGJlbG93OjoKJiM0MzsKJiM0MzsgICAgICAgIF9fYnBmX2tmdW5jIHZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlcyh2b2lkICpwX19tYXAsIC4uLikKJiM0MzsgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgLi4uCiYjNDM7ICAgICAgICB9CiYjNDM7CiAuLiBfQlBGX2tmdW5jX25vZGVmOgogCiAyLjQgVXNpbmcgYW4gZXhpc3Rpbmcga2VybmVsIGZ1bmN0aW9uCkBAIC00MTEsNyAmIzQzOzQzOSw3IEBAIEV4YW1wbGUgZGVjbGFyYXRpb246CiAuLiBjb2RlLWJsb2NrOjogYwogCiAJX19icGZfa2Z1bmMgaW50IGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LAotCQkJCQkJICAgICAgdm9pZCAqbWFwX19tYXAsIGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFjaywKJiM0MzsJCQkJCQkgICAgICB2b2lkICptYXBfX2NvbnN0X21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLAogCQkJCQkJICAgICAgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KSB7IC4uLiB9CiAKIEV4YW1wbGUgdXNhZ2UgaW4gQlBGIHByb2dyYW06CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCBkOTU0MjEyN2RmZGZjMC4uMmVhNWNlMzBmNzI5YmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGYuaApAQCAtNzQ4LDYgJiM0Mzs3NDgsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGJwZl9tYXBfb2ZmbG9hZF9vcHM7CiBlbnVtIGJwZl90eXBlX2ZsYWcgewogCS8qIFBUUiBtYXkgYmUgTlVMTC4gKi8KIAlQVFJfTUFZQkVfTlVMTAkJPSBCSVQoMCAmIzQzOyBCUEZfQkFTRV9UWVBFX0JJVFMpLAomIzQzOwlTQ0FMQVJfTUFZQkVfWkVSTwk9IFBUUl9NQVlCRV9OVUxMLAogCiAJLyogTUVNIGlzIHJlYWQtb25seS4gV2hlbiBhcHBsaWVkIG9uIGJwZl9hcmcsIGl0IGluZGljYXRlcyB0aGUgYXJnIGlzCiAJICogY29tcGF0aWJsZSB3aXRoIGJvdGggbXV0YWJsZSBhbmQgaW1tdXRhYmxlIG1lbW9yeS4KQEAgLTg4OCw4ICYjNDM7ODg5LDcgQEAgZW51bSBicGZfYXJnX3R5cGUgewogCUFSR19QVFJfVE9fTUVNLAkJLyogcG9pbnRlciB0byB2YWxpZCBtZW1vcnkgKHN0YWNrLCBwYWNrZXQsIG1hcCB2YWx1ZSkgKi8KIAlBUkdfUFRSX1RPX0FSRU5BLAogCi0JQVJHX0NPTlNUX1NJWkUsCQkvKiBudW1iZXIgb2YgYnl0ZXMgYWNjZXNzZWQgZnJvbSBtZW1vcnkgKi8KLQlBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAkvKiBudW1iZXIgb2YgYnl0ZXMgYWNjZXNzZWQgZnJvbSBtZW1vcnkgb3IgMCAqLwomIzQzOwlBUkdfTUVNX1NJWkUsCQkvKiBudW1iZXIgb2YgYnl0ZXMgYWNjZXNzZWQgZnJvbSBtZW1vcnkgKi8KIAogCUFSR19QVFJfVE9fQ1RYLAkJLyogcG9pbnRlciB0byBjb250ZXh0ICovCiAJQVJHX0FOWVRISU5HLAkJLyogYW55IChpbml0aWFsaXplZCkgYXJndW1lbnQgaXMgb2sgKi8KQEAgLTkyMiw2ICYjNDM7OTIyLDggQEAgZW51bSBicGZfYXJnX3R5cGUgewogCUFSR19QVFJfVE9fVU5JTklUX01FTQkJPSBNRU1fVU5JTklUIHwgTUVNX1dSSVRFIHwgQVJHX1BUUl9UT19NRU0sCiAJLyogUG9pbnRlciB0byB2YWxpZCBtZW1vcnkgb2Ygc2l6ZSBrbm93biBhdCBjb21waWxlIHRpbWUuICovCiAJQVJHX1BUUl9UT19GSVhFRF9TSVpFX01FTQk9IE1FTV9GSVhFRF9TSVpFIHwgQVJHX1BUUl9UT19NRU0sCiYjNDM7CS8qIE51bWJlciBvZiBieXRlcyBhY2Nlc3NlZCBmcm9tIG1lbW9yeSwgb3IgMC4gKi8KJiM0MzsJQVJHX01FTV9TSVpFX09SX1pFUk8JCT0gU0NBTEFSX01BWUJFX1pFUk8gfCBBUkdfTUVNX1NJWkUsCiAKIAkvKiBUaGlzIG11c3QgYmUgdGhlIGxhc3QgZW50cnkuIEl0cyBwdXJwb3NlIGlzIHRvIGVuc3VyZSB0aGUgZW51bSBpcwogCSAqIHdpZGUgZW5vdWdoIHRvIGhvbGQgdGhlIGhpZ2hlciBiaXRzIHJlc2VydmVkIGZvciBicGZfdHlwZV9mbGFnLgpAQCAtOTYwLDYgJiM0Mzs5NjIsMjEgQEAgZW51bSBicGZfcmV0dXJuX3R5cGUgewogfTsKIHN0YXRpY19hc3NlcnQoX19CUEZfUkVUX1RZUEVfTUFYICZsdDs9IEJQRl9CQVNFX1RZUEVfTElNSVQpOwogCiYjNDM7LyogVGhlIGxvbmdlc3QgdHJhY2Vwb2ludCBoYXMgMTIgYXJncy4KJiM0MzsgKiBTZWUgaW5jbHVkZS90cmFjZS9icGZfcHJvYmUuaAomIzQzOyAqCiYjNDM7ICogQWxzbyByZXVzZSB0aGlzIG1hY3JvIGZvciBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMgYSBCUEYgZnVuY3Rpb24KJiM0MzsgKiBvciBhIGtmdW5jIGNhbiBoYXZlLiBBcmdzIDEtNSBhcmUgcGFzc2VkIGluIHJlZ2lzdGVycywgYXJncyA2LTEyIHZpYQomIzQzOyAqIHN0YWNrIGFyZyBzbG90cy4gVGhlIEpJVCBtYXkgbWFwIHNvbWUgc3RhY2sgYXJnIHNsb3RzIHRvIHJlZ2lzdGVycyBiYXNlZAomIzQzOyAqIG9uIHRoZSBuYXRpdmUgY2FsbGluZyBjb252ZW50aW9uIChlLmcuLCBhcmcgNiB0byBSOSBvbiB4ODYtNjQpLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgTUFYX0JQRl9GVU5DX0FSR1MgMTIKJiM0MzsKJiM0MzsvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzIHBhc3NlZCB0aHJvdWdoIHJlZ2lzdGVycwomIzQzOyAqIGEgc2luZ2xlIGZ1bmN0aW9uIG1heSBoYXZlLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgTUFYX0JQRl9GVU5DX1JFR19BUkdTIDUKJiM0MzsKIC8qIGVCUEYgZnVuY3Rpb24gcHJvdG90eXBlIHVzZWQgYnkgdmVyaWZpZXIgdG8gYWxsb3cgQlBGX0NBTExzIGZyb20gZUJQRiBwcm9ncmFtcwogICogdG8gaW4ta2VybmVsIGhlbHBlciBmdW5jdGlvbnMgYW5kIGZvciBhZGp1c3RpbmcgaW1tMzIgZmllbGQgaW4gQlBGX0NBTEwKICAqIGluc3RydWN0aW9ucyBhZnRlciB2ZXJpZnlpbmcKQEAgLTk4NCw3ICYjNDM7MTAwMSw3IEBAIHN0cnVjdCBicGZfZnVuY19wcm90byB7CiAJCQllbnVtIGJwZl9hcmdfdHlwZSBhcmc0X3R5cGU7CiAJCQllbnVtIGJwZl9hcmdfdHlwZSBhcmc1X3R5cGU7CiAJCX07Ci0JCWVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlWzVdOwomIzQzOwkJZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGVbTUFYX0JQRl9GVU5DX0FSR1NdOwogCX07CiAJdW5pb24gewogCQlzdHJ1Y3QgewpAQCAtOTk0LDcgJiM0MzsxMDExLDcgQEAgc3RydWN0IGJwZl9mdW5jX3Byb3RvIHsKIAkJCXUzMiAqYXJnNF9idGZfaWQ7CiAJCQl1MzIgKmFyZzVfYnRmX2lkOwogCQl9OwotCQl1MzIgKmFyZ19idGZfaWRbNV07CiYjNDM7CQl1MzIgKmFyZ19idGZfaWRbTUFYX0JQRl9GVU5DX0FSR1NdOwogCQlzdHJ1Y3QgewogCQkJc2l6ZV90IGFyZzFfc2l6ZTsKIAkJCXNpemVfdCBhcmcyX3NpemU7CkBAIC0xMDAyLDcgJiM0MzsxMDE5LDcgQEAgc3RydWN0IGJwZl9mdW5jX3Byb3RvIHsKIAkJCXNpemVfdCBhcmc0X3NpemU7CiAJCQlzaXplX3QgYXJnNV9zaXplOwogCQl9OwotCQlzaXplX3QgYXJnX3NpemVbNV07CiYjNDM7CQlzaXplX3QgYXJnX3NpemVbTUFYX0JQRl9GVU5DX0FSR1NdOwogCX07CiAJaW50ICpyZXRfYnRmX2lkOyAvKiByZXR1cm4gdmFsdWUgYnRmX2lkICovCiAJYm9vbCAoKmFsbG93ZWQpKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7CkBAIC0xMTkyLDIxICYjNDM7MTIwOSw2IEBAIHN0cnVjdCBicGZfcHJvZ19vZmZsb2FkIHsKIAl1MzIJCQlqaXRlZF9sZW47CiB9OwogCi0vKiBUaGUgbG9uZ2VzdCB0cmFjZXBvaW50IGhhcyAxMiBhcmdzLgotICogU2VlIGluY2x1ZGUvdHJhY2UvYnBmX3Byb2JlLmgKLSAqCi0gKiBBbHNvIHJldXNlIHRoaXMgbWFjcm8gZm9yIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyBhIEJQRiBmdW5jdGlvbgotICogb3IgYSBrZnVuYyBjYW4gaGF2ZS4gQXJncyAxLTUgYXJlIHBhc3NlZCBpbiByZWdpc3RlcnMsIGFyZ3MgNi0xMiB2aWEKLSAqIHN0YWNrIGFyZyBzbG90cy4gVGhlIEpJVCBtYXkgbWFwIHNvbWUgc3RhY2sgYXJnIHNsb3RzIHRvIHJlZ2lzdGVycyBiYXNlZAotICogb24gdGhlIG5hdGl2ZSBjYWxsaW5nIGNvbnZlbnRpb24gKGUuZy4sIGFyZyA2IHRvIFI5IG9uIHg4Ni02NCkuCi0gKi8KLSNkZWZpbmUgTUFYX0JQRl9GVU5DX0FSR1MgMTIKLQotLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgdGhyb3VnaCByZWdpc3RlcnMKLSAqIGEgc2luZ2xlIGZ1bmN0aW9uIG1heSBoYXZlLgotICovCi0jZGVmaW5lIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyA1Ci0KIC8qIFRoZSBhcmd1bWVudCBpcyBhIHN0cnVjdHVyZSBvciBhIHVuaW9uLiAqLwogI2RlZmluZSBCVEZfRk1PREVMX1NUUlVDVF9BUkcJCUJJVCgwKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCA2ODJjMmNkM2I4NDQzMC4uMDY1NTE2NGU2YWYyZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaApAQCAtMTUsNyAmIzQzOzE1LDcgQEAKICAqIGVuc3VyZXMgdGhhdCB1bWF4X3ZhbHVlICYjNDM7IChpbnQpb2ZmICYjNDM7IChpbnQpc2l6ZSBjYW5ub3Qgb3ZlcmZsb3cgYSB1NjQuCiAgKi8KICNkZWZpbmUgQlBGX01BWF9WQVJfT0ZGCSgxICZsdDsmbHQ7IDI5KQotLyogTWF4aW11bSB2YXJpYWJsZSBzaXplIHBlcm1pdHRlZCBmb3IgQVJHX0NPTlNUX1NJWkVbX09SX1pFUk9dLiAgVGhpcyBlbnN1cmVzCiYjNDM7LyogTWF4aW11bSB2YXJpYWJsZSBzaXplIHBlcm1pdHRlZCBmb3IgQVJHX01FTV9TSVpFW19PUl9aRVJPXS4gIFRoaXMgZW5zdXJlcwogICogdGhhdCBjb252ZXJ0aW5nIHVtYXhfdmFsdWUgdG8gaW50IGNhbm5vdCBvdmVyZmxvdy4KICAqLwogI2RlZmluZSBCUEZfTUFYX1ZBUl9TSVoJKDEgJmx0OyZsdDsgMjkpCkBAIC0xMTg4LDYgJiM0MzsxMTg4LDcgQEAgaW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csCiAJCQkgICAgdTMyIGJ0Zl9pZCwKIAkJCSAgICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pOwogdm9pZCBicGZfZnJlZV9rZnVuY19idGZfdGFiKHN0cnVjdCBicGZfa2Z1bmNfYnRmX3RhYiAqdGFiKTsKJiM0Mzt2b2lkIGJwZl9mcmVlX2tmdW5jX2Rlc2NfdGFiKHN0cnVjdCBicGZfa2Z1bmNfZGVzY190YWIgKnRhYik7CiAKIGludCBtYXJrX2NoYWluX3ByZWNpc2lvbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcmVnbm8pOwogCkBAIC0xMzA1LDggJiM0MzsxMzA2LDE5IEBAIHN0YXRpYyBpbmxpbmUgdTMyIHR5cGVfZmxhZyh1MzIgdHlwZSkKIC8qIG9ubHkgdXNlIGFmdGVyIGNoZWNrX2F0dGFjaF9idGZfaWQoKSAqLwogc3RhdGljIGlubGluZSBlbnVtIGJwZl9wcm9nX3R5cGUgcmVzb2x2ZV9wcm9nX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKQogewotCXJldHVybiAocHJvZy0mZ3Q7dHlwZSA9PSBCUEZfUFJPR19UWVBFX0VYVCAmYW1wOyZhbXA7IHByb2ctJmd0O2F1eC0mZ3Q7c2F2ZWRfZHN0X3Byb2dfdHlwZSkgPwotCQlwcm9nLSZndDthdXgtJmd0O3NhdmVkX2RzdF9wcm9nX3R5cGUgOiBwcm9nLSZndDt0eXBlOwomIzQzOwlpZiAocHJvZy0mZ3Q7dHlwZSA9PSBCUEZfUFJPR19UWVBFX0VYVCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIHNhdmVkX2RzdF9wcm9nX3R5cGUgaXMgb25seSBzZXQgb25jZSBjaGVja19hdHRhY2hfYnRmX2lkKCkKJiM0MzsJCSAqIHJ1bnMuIEJlZm9yZSB0aGF0IC0tIGUuZy4gd2hlbiBnZW5lcmF0aW5nIGtmdW5jIHByb3RvdHlwZXMgYXQKJiM0MzsJCSAqIGFkZC1jYWxsIHRpbWUgLS0gZmFsbCBiYWNrIHRvIHRoZSBhdHRhY2ggdGFyZ2V0JiMzOTtzIHR5cGUsIHdoaWNoCiYjNDM7CQkgKiBpcyBhdmFpbGFibGUgZnJvbSBsb2FkIHRpbWUgYW5kIGhvbGRzIHRoZSBzYW1lIHZhbHVlLgomIzQzOwkJICovCiYjNDM7CQlpZiAocHJvZy0mZ3Q7YXV4LSZndDtzYXZlZF9kc3RfcHJvZ190eXBlKQomIzQzOwkJCXJldHVybiBwcm9nLSZndDthdXgtJmd0O3NhdmVkX2RzdF9wcm9nX3R5cGU7CiYjNDM7CQlpZiAocHJvZy0mZ3Q7YXV4LSZndDtkc3RfcHJvZykKJiM0MzsJCQlyZXR1cm4gcHJvZy0mZ3Q7YXV4LSZndDtkc3RfcHJvZy0mZ3Q7dHlwZTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcHJvZy0mZ3Q7dHlwZTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2NoZWNrX3JlY3VyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZykKQEAgLTE0NzksMTAgJiM0MzsxNDkxLDE3IEBAIHN0cnVjdCByZXRfbWVtX2Rlc2MgewogCWJvb2wgZm91bmQ7CiB9OwogCiYjNDM7LyogQSBjb25zdGFudCBzY2FsYXIgYXJndW1lbnQ7IFBvcHVsYXRlZCBieSBwcm9jZXNzX2NvbnN0X2FyZygpICovCiYjNDM7c3RydWN0IGFyZ19jb25zdGFudF9kZXNjIHsKJiM0MzsJdTY0IHZhbHVlOwomIzQzOwlib29sIGZvdW5kOwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgewogCS8qIENvbW1vbiAqLwogCXN0cnVjdCBidGYgKmJ0ZjsKIAl1MzIgZnVuY19pZDsKJiM0MzsJY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbjsKIAl1OCByZWxlYXNlX3JlZ25vOwogCXUzMiByZXRfYnRmX2lkOwogCXUzMiBzdWJwcm9nbm87CkBAIC0xNDk2LDEwICYjNDM7MTUxNSw3IEBAIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSB7CiAJdTMyIGtmdW5jX2ZsYWdzOwogCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZnVuY19wcm90bzsKIAljb25zdCBjaGFyICpmdW5jX25hbWU7Ci0Jc3RydWN0IHsKLQkJdTY0IHZhbHVlOwotCQlib29sIGZvdW5kOwotCX0gYXJnX2NvbnN0YW50OwomIzQzOwlzdHJ1Y3QgYXJnX2NvbnN0YW50X2Rlc2MgYXJnX2NvbnN0YW50OwogCiAJLyogYXJnX3tidGYsYnRmX2lkLG93bmluZ19yZWZ9IGFyZSB1c2VkIGJ5IGtmdW5jLXNwZWNpZmljIGhhbmRsaW5nLAogCSAqIGdlbmVyYWxseSB0byBwYXNzIGluZm8gYWJvdXQgdXNlci1kZWZpbmVkIGxvY2FsIGtwdHIgdHlwZXMgdG8gbGF0ZXIKQEAgLTE2MTQsNiAmIzQzOzE2MzAsNyBAQCBlbnVtIGJwZl9yZWdfYXJnX3R5cGUgewogCiBzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2MgewogCXN0cnVjdCBidGZfZnVuY19tb2RlbCBmdW5jX21vZGVsOwomIzQzOwlzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKnByb3RvOwogCXUzMiBmdW5jX2lkOwogCXMzMiBpbW07CiAJdTE2IG9mZnNldDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmMgYi9rZXJuZWwvYnBmL2JhY2t0cmFjay5jCmluZGV4IDJlNGFlMGVmMDg2MDlkLi4yZjQ3M2FkNGZkN2MxYyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9iYWNrdHJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2JhY2t0cmFjay5jCkBAIC02MzYsNyAmIzQzOzYzNiw3IEBAIHN0YXRpYyBpbnQgYmFja3RyYWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCwgaW50IHN1YnNlcV9pZHgsCiAgKiByNSAmIzQzOz0gMQogICogLi4uCiAgKiBjYWxsIGJwZl9wZXJmX2V2ZW50X291dHB1dCMyNQotICogICB3aGVyZSAuYXJnNV90eXBlID0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTwomIzQzOyAqICAgd2hlcmUgLmFyZzVfdHlwZSA9IEFSR19NRU1fU0laRV9PUl9aRVJPCiAgKgogICogYW5kIHRoaXMgY2FzZToKICAqIHI2ID0gMQpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9icGZfbHNtLmMgYi9rZXJuZWwvYnBmL2JwZl9sc20uYwppbmRleCAzOTgzYjRjZTczYzgxMS4uODJjNTk4ODQxN2EwY2YgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYnBmX2xzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnBmX2xzbS5jCkBAIC0xODYsNyAmIzQzOzE4Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2ltYV9pbm9kZV9oYXNoX3Byb3RvID0gewogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0JURl9JRCwKIAkuYXJnMV9idGZfaWQJPSAmYW1wO2JwZl9pbWFfaW5vZGVfaGFzaF9idGZfaWRzWzBdLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFLAogCS5hbGxvd2VkCT0gYnBmX2ltYV9pbm9kZV9oYXNoX2FsbG93ZWQsCiB9OwogCkBAIC0yMDUsNyAmIzQzOzIwNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2ltYV9maWxlX2hhc2hfcHJvdG8gPSB7CiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQlRGX0lELAogCS5hcmcxX2J0Zl9pZAk9ICZhbXA7YnBmX2ltYV9maWxlX2hhc2hfYnRmX2lkc1swXSwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRSwKIAkuYWxsb3dlZAk9IGJwZl9pbWFfaW5vZGVfaGFzaF9hbGxvd2VkLAogfTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9idGYuYyBiL2tlcm5lbC9icGYvYnRmLmMKaW5kZXggY2JiMWU0OWI5YmNiZjUuLmEyM2E0MmNiZTNiMTM1IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2J0Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnRmLmMKQEAgLTg3MDcsNyAmIzQzOzg3MDcsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90byA9IHsKIAkuZ3BsX29ubHkJPSBmYWxzZSwKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmcyX3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzJfdHlwZQk9IEFSR19NRU1fU0laRSwKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc0X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmMKaW5kZXggNDM1NWNjYjc4YTljNjcuLmZiOTM1N2I2NGNhZGJjIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2dyb3VwLmMKQEAgLTIzMDUsNyAmIzQzOzIzMDUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zeXNjdGxfZ2V0X25hbWVfcHJvdG8gPSB7CiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9XUklURSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkUsCiAJLmFyZzRfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKQEAgLTIzNDcsNyAmIzQzOzIzNDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zeXNjdGxfZ2V0X2N1cnJlbnRfdmFsdWVfcHJvdG8gPSB7CiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFLAogfTsKIAogQlBGX0NBTExfMyhicGZfc3lzY3RsX2dldF9uZXdfdmFsdWUsIHN0cnVjdCBicGZfc3lzY3RsX2tlcm4gKiwgY3R4LCBjaGFyICosIGJ1ZiwKQEAgLTIzNjcsNyAmIzQzOzIzNjcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zeXNjdGxfZ2V0X25ld192YWx1ZV9wcm90byA9IHsKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkUsCiB9OwogCiBCUEZfQ0FMTF8zKGJwZl9zeXNjdGxfc2V0X25ld192YWx1ZSwgc3RydWN0IGJwZl9zeXNjdGxfa2VybiAqLCBjdHgsCkBAIC0yMzkzLDcgJiM0MzsyMzkzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc3lzY3RsX3NldF9uZXdfdmFsdWVfcHJvdG8gPSB7CiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvcmUuYyBiL2tlcm5lbC9icGYvY29yZS5jCmluZGV4IDQ3ZmUwNDdhZDMwYjg4Li5hMzBlNzQ3MWU5ZDgxZSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jb3JlLmMKQEAgLTE5OCw3ICYjNDM7MTk4LDkgQEAgdm9pZCBicGZfcHJvZ19qaXRfYXR0ZW1wdF9kb25lKHN0cnVjdCBicGZfcHJvZyAqcHJvZykKIAkJcHJvZy0mZ3Q7YXV4LSZndDtqaXRlZF9saW5mbyA9IE5VTEw7CiAJfQogCi0Ja2ZyZWUocHJvZy0mZ3Q7YXV4LSZndDtrZnVuY190YWIpOwomIzQzOyNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTEwKJiM0MzsJYnBmX2ZyZWVfa2Z1bmNfZGVzY190YWIocHJvZy0mZ3Q7YXV4LSZndDtrZnVuY190YWIpOwomIzQzOyNlbmRpZgogCXByb2ctJmd0O2F1eC0mZ3Q7a2Z1bmNfdGFiID0gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuYwppbmRleCBjMThmMWUxNmVkZWU0Yy4uMThiZTVkNmU0ZjljMjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGVscGVycy5jCkBAIC0yNzgsNyAmIzQzOzI3OCw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X2N1cnJlbnRfY29tbV9wcm90byA9IHsKIAkuZ3BsX29ubHkJPSBmYWxzZSwKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmcyX3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzJfdHlwZQk9IEFSR19NRU1fU0laRSwKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19RVUVVRURfU1BJTkxPQ0tTKSB8fCBkZWZpbmVkKENPTkZJR19CUEZfQVJDSF9TUElOTE9DSykKQEAgLTUzOSw3ICYjNDM7NTM5LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zdHJ0b2xfcHJvdG8gPSB7CiAJLmdwbF9vbmx5CT0gZmFsc2UsCiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnMl90eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmcyX3R5cGUJPSBBUkdfTUVNX1NJWkUsCiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnNF90eXBlCT0gQVJHX1BUUl9UT19GSVhFRF9TSVpFX01FTSB8IE1FTV9VTklOSVQgfCBNRU1fV1JJVEUgfCBNRU1fQUxJR05FRCwKIAkuYXJnNF9zaXplCT0gc2l6ZW9mKHM2NCksCkBAIC01NjcsNyAmIzQzOzU2Nyw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc3RydG91bF9wcm90byA9IHsKIAkuZ3BsX29ubHkJPSBmYWxzZSwKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmcyX3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzJfdHlwZQk9IEFSR19NRU1fU0laRSwKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc0X3R5cGUJPSBBUkdfUFRSX1RPX0ZJWEVEX1NJWkVfTUVNIHwgTUVNX1VOSU5JVCB8IE1FTV9XUklURSB8IE1FTV9BTElHTkVELAogCS5hcmc0X3NpemUJPSBzaXplb2YodTY0KSwKQEAgLTU4Myw3ICYjNDM7NTgzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc3RybmNtcF9wcm90byA9IHsKIAkuZ3BsX29ubHkJPSBmYWxzZSwKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmcyX3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzJfdHlwZQk9IEFSR19NRU1fU0laRSwKIAkuYXJnM190eXBlCT0gQVJHX1BUUl9UT19DT05TVF9TVFIsCiB9OwogCkBAIC02MjcsNyAmIzQzOzYyNyw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X25zX2N1cnJlbnRfcGlkX3RnaWRfcHJvdG8gPSB7CiAJLmFyZzFfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnMl90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmczX3R5cGUgICAgICA9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLQkuYXJnNF90eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzRfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3Jhd19zbXBfcHJvY2Vzc29yX2lkX3Byb3RvID0gewpAQCAtNjUzLDcgJiM0Mzs2NTMsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2V2ZW50X291dHB1dF9kYXRhX3Byb3RvID0gIHsKIAkuYXJnMl90eXBlICAgICAgPSBBUkdfQ09OU1RfTUFQX1BUUiwKIAkuYXJnM190eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzRfdHlwZSAgICAgID0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmc1X3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmc1X3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogfTsKIAogQlBGX0NBTExfMyhicGZfY29weV9mcm9tX3VzZXIsIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsCkBAIC02NzUsNyAmIzQzOzY3NSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY29weV9mcm9tX3VzZXJfcHJvdG8gPSB7CiAJLm1pZ2h0X3NsZWVwCT0gdHJ1ZSwKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmcyX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnMl90eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKQEAgLTcwNiw3ICYjNDM7NzA2LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3Byb3RvID0gewogCS5taWdodF9zbGVlcAk9IHRydWUsCiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLQkuYXJnMl90eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzJfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmczX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzRfdHlwZQk9IEFSR19QVFJfVE9fQlRGX0lELAogCS5hcmc0X2J0Zl9pZAk9ICZhbXA7YnRmX3RyYWNpbmdfaWRzW0JURl9UUkFDSU5HX1RZUEVfVEFTS10sCkBAIC0xMDkzLDEwICYjNDM7MTA5MywxMCBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NucHJpbnRmX3Byb3RvID0gewogCS5ncGxfb25seQk9IHRydWUsCiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fTUVNX09SX05VTEwgfCBNRU1fV1JJVEUsCi0JLmFyZzJfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmcyX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnM190eXBlCT0gQVJHX1BUUl9UT19DT05TVF9TVFIsCiAJLmFyZzRfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgUFRSX01BWUJFX05VTEwgfCBNRU1fUkRPTkxZLAotCS5hcmc1X3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnNV90eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiB9OwogCiBzdGF0aWMgdm9pZCAqbWFwX2tleV9mcm9tX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlLCB1MzIgKmFycl9pZHgpCkBAIC0xODg4LDcgJiM0MzsxODg4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZHlucHRyX2Zyb21fbWVtX3Byb3RvID0gewogCS5ncGxfb25seQk9IGZhbHNlLAogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzJfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmcyX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc0X3R5cGUJPSBBUkdfUFRSX1RPX0RZTlBUUiB8IERZTlBUUl9UWVBFX0xPQ0FMIHwgTUVNX1VOSU5JVCB8IE1FTV9XUklURSwKIH07CkBAIC0xOTQzLDcgJiM0MzsxOTQzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZHlucHRyX3JlYWRfcHJvdG8gPSB7CiAJLmdwbF9vbmx5CT0gZmFsc2UsCiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLQkuYXJnMl90eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzJfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmczX3R5cGUJPSBBUkdfUFRSX1RPX0RZTlBUUiwKIAkuYXJnNF90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc1X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCkBAIC0yMDA0LDcgJiM0MzsyMDA0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZHlucHRyX3dyaXRlX3Byb3RvID0gewogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0RZTlBUUiwKIAkuYXJnMl90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmczX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzRfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmc0X3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnNV90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIApAQCAtMzQwNCwxMCAmIzQzOzM0MDQsMTAgQEAgX19icGZfa2Z1bmMgdm9pZCBicGZfdGhyb3codTY0IGNvb2tpZSkKIAlXQVJOKDEsICYjMzQ7QSBjYWxsIHRvIEJQRiBleGNlcHRpb24gY2FsbGJhY2sgc2hvdWxkIG5ldmVyIHJldHVyblxuJiMzNDspOwogfQogCi1fX2JwZl9rZnVuYyBpbnQgYnBmX3dxX2luaXQoc3RydWN0IGJwZl93cSAqd3EsIHZvaWQgKnBfX21hcCwgdW5zaWduZWQgaW50IGZsYWdzKQomIzQzO19fYnBmX2tmdW5jIGludCBicGZfd3FfaW5pdChzdHJ1Y3QgYnBmX3dxICp3cSwgdm9pZCAqcF9fY29uc3RfbWFwLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGJwZl9hc3luY19rZXJuICphc3luYyA9IChzdHJ1Y3QgYnBmX2FzeW5jX2tlcm4gKil3cTsKLQlzdHJ1Y3QgYnBmX21hcCAqbWFwID0gcF9fbWFwOwomIzQzOwlzdHJ1Y3QgYnBmX21hcCAqbWFwID0gcF9fY29uc3RfbWFwOwogCiAJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgYnBmX2FzeW5jX2tlcm4pICZndDsgc2l6ZW9mKHN0cnVjdCBicGZfd3EpKTsKIAlCVUlMRF9CVUdfT04oX19hbGlnbm9mX18oc3RydWN0IGJwZl9hc3luY19rZXJuKSAhPSBfX2FsaWdub2ZfXyhzdHJ1Y3QgYnBmX3dxKSk7CkBAIC00NjQyLDE3ICYjNDM7NDY0MiwxNyBAQCBzdGF0aWMgaW50IGJwZl90YXNrX3dvcmtfc2NoZWR1bGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgYnBmX3Rhc2tfd29yawogICogbW9kZQogICogQHRhc2s6IFRhc2sgc3RydWN0IGZvciB3aGljaCBjYWxsYmFjayBzaG91bGQgYmUgc2NoZWR1bGVkCiAgKiBAdHc6IFBvaW50ZXIgdG8gc3RydWN0IGJwZl90YXNrX3dvcmsgaW4gQlBGIG1hcCB2YWx1ZSBmb3IgaW50ZXJuYWwgYm9va2tlZXBpbmcKLSAqIEBtYXBfX21hcDogYnBmX21hcCB0aGF0IGVtYmVkcyBzdHJ1Y3QgYnBmX3Rhc2tfd29yayBpbiB0aGUgdmFsdWVzCiYjNDM7ICogQG1hcF9fY29uc3RfbWFwOiBicGZfbWFwIHRoYXQgZW1iZWRzIHN0cnVjdCBicGZfdGFza193b3JrIGluIHRoZSB2YWx1ZXMKICAqIEBjYWxsYmFjazogcG9pbnRlciB0byBCUEYgc3VicHJvZ3JhbSB0byBjYWxsCiAgKiBAYXV4OiBwb2ludGVyIHRvIGJwZl9wcm9nX2F1eCBvZiB0aGUgY2FsbGVyIEJQRiBwcm9ncmFtLCBpbXBsaWNpdGx5IHNldCBieSB0aGUgdmVyaWZpZXIKICAqCiAgKiBSZXR1cm46IDAgaWYgdGFzayB3b3JrIGhhcyBiZWVuIHNjaGVkdWxlZCBzdWNjZXNzZnVsbHksIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlCiAgKi8KIF9fYnBmX2tmdW5jIGludCBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBicGZfdGFza193b3JrICp0dywKLQkJCQkJICAgICAgdm9pZCAqbWFwX19tYXAsIGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFjaywKJiM0MzsJCQkJCSAgICAgIHZvaWQgKm1hcF9fY29uc3RfbWFwLCBicGZfdGFza193b3JrX2NhbGxiYWNrX3QgY2FsbGJhY2ssCiAJCQkJCSAgICAgIHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eCkKIHsKLQlyZXR1cm4gYnBmX3Rhc2tfd29ya19zY2hlZHVsZSh0YXNrLCB0dywgbWFwX19tYXAsIGNhbGxiYWNrLCBhdXgsIFRXQV9TSUdOQUwpOwomIzQzOwlyZXR1cm4gYnBmX3Rhc2tfd29ya19zY2hlZHVsZSh0YXNrLCB0dywgbWFwX19jb25zdF9tYXAsIGNhbGxiYWNrLCBhdXgsIFRXQV9TSUdOQUwpOwogfQogCiAvKioKQEAgLTQ2NjAsMTcgJiM0Mzs0NjYwLDE3IEBAIF9fYnBmX2tmdW5jIGludCBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBiCiAgKiBtb2RlCiAgKiBAdGFzazogVGFzayBzdHJ1Y3QgZm9yIHdoaWNoIGNhbGxiYWNrIHNob3VsZCBiZSBzY2hlZHVsZWQKICAqIEB0dzogUG9pbnRlciB0byBzdHJ1Y3QgYnBmX3Rhc2tfd29yayBpbiBCUEYgbWFwIHZhbHVlIGZvciBpbnRlcm5hbCBib29ra2VlcGluZwotICogQG1hcF9fbWFwOiBicGZfbWFwIHRoYXQgZW1iZWRzIHN0cnVjdCBicGZfdGFza193b3JrIGluIHRoZSB2YWx1ZXMKJiM0MzsgKiBAbWFwX19jb25zdF9tYXA6IGJwZl9tYXAgdGhhdCBlbWJlZHMgc3RydWN0IGJwZl90YXNrX3dvcmsgaW4gdGhlIHZhbHVlcwogICogQGNhbGxiYWNrOiBwb2ludGVyIHRvIEJQRiBzdWJwcm9ncmFtIHRvIGNhbGwKICAqIEBhdXg6IHBvaW50ZXIgdG8gYnBmX3Byb2dfYXV4IG9mIHRoZSBjYWxsZXIgQlBGIHByb2dyYW0sIGltcGxpY2l0bHkgc2V0IGJ5IHRoZSB2ZXJpZmllcgogICoKICAqIFJldHVybjogMCBpZiB0YXNrIHdvcmsgaGFzIGJlZW4gc2NoZWR1bGVkIHN1Y2Nlc3NmdWxseSwgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UKICAqLwogX19icGZfa2Z1bmMgaW50IGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LAotCQkJCQkgICAgICB2b2lkICptYXBfX21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLAomIzQzOwkJCQkJICAgICAgdm9pZCAqbWFwX19jb25zdF9tYXAsIGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFjaywKIAkJCQkJICAgICAgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KQogewotCXJldHVybiBicGZfdGFza193b3JrX3NjaGVkdWxlKHRhc2ssIHR3LCBtYXBfX21hcCwgY2FsbGJhY2ssIGF1eCwgVFdBX1JFU1VNRSk7CiYjNDM7CXJldHVybiBicGZfdGFza193b3JrX3NjaGVkdWxlKHRhc2ssIHR3LCBtYXBfX2NvbnN0X21hcCwgY2FsbGJhY2ssIGF1eCwgVFdBX1JFU1VNRSk7CiB9CiAKIHN0YXRpYyBpbnQgbWFrZV9maWxlX2R5bnB0cihzdHJ1Y3QgZmlsZSAqZmlsZSwgdTMyIGZsYWdzLCBib29sIG1heV9zbGVlcCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvcmluZ2J1Zi5jIGIva2VybmVsL2JwZi9yaW5nYnVmLmMKaW5kZXggMzVhZTY0YWRlMzZiODMuLmMxYmY3YTE5N2E5NmYzIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3JpbmdidWYuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3JpbmdidWYuYwpAQCAtNjM0LDcgJiM0Mzs2MzQsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JpbmdidWZfb3V0cHV0X3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfQ09OU1RfTUFQX1BUUiwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzRfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhY2ttYXAuYyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuYwppbmRleCA0MWZlODdkNzMwMmYyMi4uNDYzZjk0YmExY2M0NzggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3RhY2ttYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmMKQEAgLTc4MSw3ICYjNDM7NzgxLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfcHJvdG8gPSB7CiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnNF90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIApAQCAtNzk3LDcgJiM0Mzs3OTcsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19zbGVlcGFibGVfcHJvdG8gPSB7CiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnNF90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIApAQCAtODMxLDcgJiM0Mzs4MzEsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF90YXNrX3N0YWNrX3Byb3RvID0gewogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0JURl9JRCwKIAkuYXJnMV9idGZfaWQJPSAmYW1wO2J0Zl90cmFjaW5nX2lkc1tCVEZfVFJBQ0lOR19UWVBFX1RBU0tdLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnNF90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIApAQCAtODQ4LDcgJiM0Mzs4NDgsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHsKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19CVEZfSUQsCiAJLmFyZzFfYnRmX2lkCT0gJmFtcDtidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9UQVNLXSwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzRfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKQEAgLTkxMSw3ICYjNDM7OTExLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfcHJvdG9fcGUgPSB7CiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnNF90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwppbmRleCAwZmY5ZTNhYTI5M2Q1Ny4uMGI1ZGM2Nzg4YmEyN2YgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCkBAIC0yNDQ0LDcgJiM0MzsyNDQ0LDcgQEAgc3RhdGljIHZvaWQgX19icGZfcHJvZ19wdXRfbm9yZWYoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBib29sIGRlZmVycmVkKQogCW1vZHVsZV9wdXQocHJvZy0mZ3Q7YXV4LSZndDttb2QpOwogCWt2ZnJlZShwcm9nLSZndDthdXgtJmd0O2ppdGVkX2xpbmZvKTsKIAlrdmZyZWUocHJvZy0mZ3Q7YXV4LSZndDtsaW5mbyk7Ci0Ja2ZyZWUocHJvZy0mZ3Q7YXV4LSZndDtrZnVuY190YWIpOwomIzQzOwlicGZfZnJlZV9rZnVuY19kZXNjX3RhYihwcm9nLSZndDthdXgtJmd0O2tmdW5jX3RhYik7CiAJa2ZyZWUocHJvZy0mZ3Q7YXV4LSZndDtjdHhfYXJnX2luZm8pOwogCWlmIChwcm9nLSZndDthdXgtJmd0O2F0dGFjaF9idGYpCiAJCWJ0Zl9wdXQocHJvZy0mZ3Q7YXV4LSZndDthdHRhY2hfYnRmKTsKQEAgLTY1NDQsNyAmIzQzOzY1NDQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zeXNfYnBmX3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkUsCiB9OwogCiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKiBfX3dlYWsKQEAgLTY1OTEsNyAmIzQzOzY1OTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9rYWxsc3ltc19sb29rdXBfbmFtZV9wcm90byA9IHsKIAkuZ3BsX29ubHkJPSBmYWxzZSwKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmcyX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnMl90eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnNF90eXBlCT0gQVJHX1BUUl9UT19GSVhFRF9TSVpFX01FTSB8IE1FTV9VTklOSVQgfCBNRU1fV1JJVEUgfCBNRU1fQUxJR05FRCwKIAkuYXJnNF9zaXplCT0gc2l6ZW9mKHU2NCksCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggNTJiZTBhMTE4Y2NlMDcuLmFjYTM3YTdiZjJjYmM3IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0yNzE5LDggJiM0MzsyNzE5LDI1IEBAIHN0YXRpYyBpbnQgZmV0Y2hfa2Z1bmNfbWV0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBnZW5fa2Z1bmNfYXJnX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSwKJiM0MzsJCQkgICAgICAgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpwcm90byk7CiYjNDM7CiYjNDM7dm9pZCBicGZfZnJlZV9rZnVuY19kZXNjX3RhYihzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2NfdGFiICp0YWIpCiYjNDM7ewomIzQzOwl1MzIgaTsKJiM0MzsKJiM0MzsJaWYgKCF0YWIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0YWItJmd0O25yX2Rlc2NzOyBpJiM0MzsmIzQzOykKJiM0MzsJCWtmcmVlKHRhYi0mZ3Q7ZGVzY3NbaV0ucHJvdG8pOwomIzQzOwlrZnJlZSh0YWIpOwomIzQzO30KJiM0MzsKIGludCBicGZfYWRkX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGZ1bmNfaWQsIHUxNiBvZmZzZXQpCiB7CiYjNDM7CXN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSBtZXRhOwomIzQzOwlzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKnByb3RvOwogCXN0cnVjdCBicGZfa2Z1bmNfYnRmX3RhYiAqYnRmX3RhYjsKIAlzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgZnVuY19tb2RlbDsKIAlzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2NfdGFiICp0YWI7CkBAIC0yODA2LDExICYjNDM7MjgyMywyOSBAQCBpbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KQogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKJiM0MzsJcHJvdG8gPSBremFsbG9jX29iaigqcHJvdG8sIEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CWlmICghcHJvdG8pCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJbWVtc2V0KCZhbXA7bWV0YSwgMCwgc2l6ZW9mKG1ldGEpKTsKJiM0MzsJbWV0YS5idGYgPSBrZnVuYy5idGY7CiYjNDM7CW1ldGEuZnVuY19pZCA9IGtmdW5jLmlkOwomIzQzOwltZXRhLmZ1bmNfcHJvdG8gPSBrZnVuYy5wcm90bzsKJiM0MzsJbWV0YS5mdW5jX25hbWUgPSBrZnVuYy5uYW1lOwomIzQzOwltZXRhLmtmdW5jX2ZsYWdzID0ga2Z1bmMuZmxhZ3MgPyAqa2Z1bmMuZmxhZ3MgOiAwOwomIzQzOwomIzQzOwllcnIgPSBnZW5fa2Z1bmNfYXJnX3Byb3RvKGVudiwgJmFtcDttZXRhLCBwcm90byk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWtmcmVlKHByb3RvKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKIAlkZXNjID0gJmFtcDt0YWItJmd0O2Rlc2NzW3RhYi0mZ3Q7bnJfZGVzY3MmIzQzOyYjNDM7XTsKIAlkZXNjLSZndDtmdW5jX2lkID0gZnVuY19pZDsKIAlkZXNjLSZndDtvZmZzZXQgPSBvZmZzZXQ7CiAJZGVzYy0mZ3Q7YWRkciA9IGFkZHI7CiAJZGVzYy0mZ3Q7ZnVuY19tb2RlbCA9IGZ1bmNfbW9kZWw7CiYjNDM7CWRlc2MtJmd0O3Byb3RvID0gcHJvdG87CiAJc29ydCh0YWItJmd0O2Rlc2NzLCB0YWItJmd0O25yX2Rlc2NzLCBzaXplb2YodGFiLSZndDtkZXNjc1swXSksCiAJICAgICBrZnVuY19kZXNjX2NtcF9ieV9pZF9vZmYsIE5VTEwpOwogCXJldHVybiAwOwpAQCAtNDkyNCw2ICYjNDM7NDk1OSwxOSBAQCBzdGF0aWMgdTMyICpyZWcyYnRmX2lkc1tfX0JQRl9SRUdfVFlQRV9NQVhdID0gewogCVtDT05TVF9QVFJfVE9fTUFQXSA9IGJ0Zl9icGZfbWFwX2lkLAogfTsKIAomIzQzO3N0YXRpYyBlbnVtIGJwZl9yZWdfdHlwZSBsb29rdXBfcmVnMmJ0Zl9pZHMoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpyZWZfdCkKJiM0Mzt7CiYjNDM7CWVudW0gYnBmX3JlZ190eXBlIHR5cGU7CiYjNDM7CiYjNDM7CWZvciAodHlwZSA9IDA7IHR5cGUgJmx0OyBfX0JQRl9SRUdfVFlQRV9NQVg7IHR5cGUmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAocmVnMmJ0Zl9pZHNbdHlwZV0gJmFtcDsmYW1wOwomIzQzOwkJICAgIGJ0Zl90eXBlX2J5X2lkKGJ0Zl92bWxpbnV4LCAqcmVnMmJ0Zl9pZHNbdHlwZV0pID09IHJlZl90KQomIzQzOwkJCXJldHVybiB0eXBlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBOT1RfSU5JVDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBpc190cnVzdGVkX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQogewogCS8qIEEgcmVmZXJlbmNlZCByZWdpc3RlciBpcyBhbHdheXMgdHJ1c3RlZC4gKi8KQEAgLTY4NzMsNyAmIzQzOzY5MjEsMTQgQEAgc3RhdGljIGludCBjaGVja19tZW1fc2l6ZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCSAgICAgIGJvb2wgemVyb19zaXplX2FsbG93ZWQsCiAJCQkgICAgICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpCiB7Ci0JaW50IGVycjsKJiM0MzsJYm9vbCBtYXlfYmVfbnVsbCA9IHR5cGVfbWF5X2JlX251bGwobWVtX3JlZy0mZ3Q7dHlwZSk7CiYjNDM7CXN0cnVjdCBicGZfcmVnX3N0YXRlIHNhdmVkX3JlZzsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWlmIChtYXlfYmVfbnVsbCkgewomIzQzOwkJc2F2ZWRfcmVnID0gKm1lbV9yZWc7CiYjNDM7CQltYXJrX3B0cl9ub3RfbnVsbF9yZWcobWVtX3JlZyk7CiYjNDM7CX0KIAogCS8qIFRoaXMgaXMgdXNlZCB0byByZWZpbmUgcjAgcmV0dXJuIHZhbHVlIGJvdW5kcyBmb3IgaGVscGVycwogCSAqIHRoYXQgZW5mb3JjZSB0aGlzIHZhbHVlIGFzIGFuIHVwcGVyIGJvdW5kIG9uIHJldHVybiB2YWx1ZXMuCkBAIC02OTEwLDggJiM0Mzs2OTY1LDE0IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX3NpemVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQlyZWdfYXJnX25hbWUoZW52LCBzaXplX2FyZ25vKSk7CiAJCXJldHVybiAtRUFDQ0VTOwogCX0KLQllcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIG1lbV9yZWcsIG1lbV9hcmdubywgcmVnX3VtYXgoc2l6ZV9yZWcpLAotCQkJCSAgICAgIGFjY2Vzc190eXBlLCB6ZXJvX3NpemVfYWxsb3dlZCwgbWV0YSk7CiYjNDM7CiYjNDM7CWlmIChhY2Nlc3NfdHlwZSAmYW1wOyBCUEZfUkVBRCkKJiM0MzsJCWVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgbWVtX3JlZywgbWVtX2FyZ25vLCByZWdfdW1heChzaXplX3JlZyksCiYjNDM7CQkJCQkgICAgICBCUEZfUkVBRCwgemVyb19zaXplX2FsbG93ZWQsIG1ldGEpOwomIzQzOwlpZiAoIWVyciAmYW1wOyZhbXA7IGFjY2Vzc190eXBlICZhbXA7IEJQRl9XUklURSkKJiM0MzsJCWVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgbWVtX3JlZywgbWVtX2FyZ25vLCByZWdfdW1heChzaXplX3JlZyksCiYjNDM7CQkJCQkgICAgICBCUEZfV1JJVEUsIHplcm9fc2l6ZV9hbGxvd2VkLCBtZXRhKTsKJiM0MzsKIAlpZiAoIWVycikgewogCQlpbnQgcmVnbm8gPSByZWdfZnJvbV9hcmdubyhzaXplX2FyZ25vKTsKIApAQCAtNjkyMCwxNSAmIzQzOzY5ODEsMjIgQEAgc3RhdGljIGludCBjaGVja19tZW1fc2l6ZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJZWxzZQogCQkJZXJyID0gbWFya19zdGFja19hcmdfcHJlY2lzaW9uKGVudiwgYXJnX2lkeF9mcm9tX2FyZ25vKHNpemVfYXJnbm8pKTsKIAl9CiYjNDM7CiYjNDM7CWlmIChtYXlfYmVfbnVsbCkKJiM0MzsJCSptZW1fcmVnID0gc2F2ZWRfcmVnOwomIzQzOwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgY2hlY2tfbWVtX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLAotCQkJIGFyZ25vX3QgYXJnbm8sIHUzMiBtZW1fc2l6ZSkKJiM0MzsJCQkgYXJnbm9fdCBhcmdubywgdTMyIG1lbV9zaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSBhY2Nlc3NfdHlwZSwKJiM0MzsJCQkgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKQogewomIzQzOwkvKiBtZXRhLSZndDtidGYgaXMgc2V0IG9ubHkgZm9yIGtmdW5jczsgYSBOVUxMIG1ldGEgbWVhbnMgYSBnbG9iYWwgc3VicHJvZy4gKi8KJiM0MzsJYm9vbCBoZWxwZXIgPSBtZXRhICZhbXA7JmFtcDsgIW1ldGEtJmd0O2J0ZjsKIAlib29sIG1heV9iZV9udWxsID0gdHlwZV9tYXlfYmVfbnVsbChyZWctJmd0O3R5cGUpOwogCXN0cnVjdCBicGZfcmVnX3N0YXRlIHNhdmVkX3JlZzsKLQlpbnQgZXJyOwomIzQzOwlpbnQgc2l6ZSwgZXJyID0gMDsKIAogCWlmIChicGZfcmVnaXN0ZXJfaXNfbnVsbChyZWcpKQogCQlyZXR1cm4gMDsKQEAgLTY5NDgsMTAgJiM0Mzs3MDE2LDEyIEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnCiAJCW1hcmtfcHRyX25vdF9udWxsX3JlZyhyZWcpOwogCX0KIAotCWludCBzaXplID0gYmFzZV90eXBlKHJlZy0mZ3Q7dHlwZSkgPT0gUFRSX1RPX1NUQUNLID8gLShpbnQpbWVtX3NpemUgOiBtZW1fc2l6ZTsKJiM0MzsJc2l6ZSA9ICghaGVscGVyICZhbXA7JmFtcDsgYmFzZV90eXBlKHJlZy0mZ3Q7dHlwZSkgPT0gUFRSX1RPX1NUQUNLKSA/IC0oaW50KW1lbV9zaXplIDogbWVtX3NpemU7CiAKLQllcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIHNpemUsIEJQRl9SRUFELCB0cnVlLCBOVUxMKTsKLQllcnIgPSBlcnIgPzogY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBzaXplLCBCUEZfV1JJVEUsIHRydWUsIE5VTEwpOwomIzQzOwlpZiAoYWNjZXNzX3R5cGUgJmFtcDsgQlBGX1JFQUQpCiYjNDM7CQllcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIHNpemUsIEJQRl9SRUFELCB0cnVlLCBtZXRhKTsKJiM0MzsJaWYgKCFlcnIgJmFtcDsmYW1wOyAoYWNjZXNzX3R5cGUgJmFtcDsgQlBGX1dSSVRFKSkKJiM0MzsJCWVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgc2l6ZSwgQlBGX1dSSVRFLCB0cnVlLCBtZXRhKTsKIAogCWlmIChtYXlfYmVfbnVsbCkKIAkJKnJlZyA9IHNhdmVkX3JlZzsKQEAgLTY5OTMsMjggJiM0Mzs3MDYzLDMzIEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19jb25zdF9hbGxvY19tZW1fc2l6ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfbWVtX3NpemVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICptZW1fcmVnLAotCQkJCSAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc2l6ZV9yZWcsIGFyZ25vX3QgbWVtX2FyZ25vLCBhcmdub190IHNpemVfYXJnbm8pCiYjNDM7c3RhdGljIGludCBwcm9jZXNzX2NvbnN0X2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLAomIzQzOwkJCSAgICAgYXJnbm9fdCBhcmdubywgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKQogewotCWJvb2wgbWF5X2JlX251bGwgPSB0eXBlX21heV9iZV9udWxsKG1lbV9yZWctJmd0O3R5cGUpOwotCXN0cnVjdCBicGZfcmVnX3N0YXRlIHNhdmVkX3JlZzsKLQlzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgbWV0YTsKJiM0MzsJaW50IHJlZ25vID0gcmVnX2Zyb21fYXJnbm8oYXJnbm8pOwogCWludCBlcnI7CiAKLQltZW1zZXQoJmFtcDttZXRhLCAwLCBzaXplb2YobWV0YSkpOwomIzQzOwlpZiAobWV0YS0mZ3Q7YXJnX2NvbnN0YW50LmZvdW5kKSB7CiYjNDM7CQl2ZXJpZmllcl9idWcoZW52LCAmIzM0O29ubHkgb25lIGNvbnN0YW50IGFyZ3VtZW50IHBlcm1pdHRlZCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwl9CiAKLQlpZiAobWF5X2JlX251bGwpIHsKLQkJc2F2ZWRfcmVnID0gKm1lbV9yZWc7Ci0JCW1hcmtfcHRyX25vdF9udWxsX3JlZyhtZW1fcmVnKTsKJiM0MzsJaWYgKCF0bnVtX2lzX2NvbnN0KHJlZy0mZ3Q7dmFyX29mZikpIHsKJiM0MzsJCXZlcmJvc2UoZW52LCAmIzM0OyVzIG11c3QgYmUgYSBrbm93biBjb25zdGFudFxuJiMzNDssIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQllcnIgPSBjaGVja19tZW1fc2l6ZV9yZWcoZW52LCBtZW1fcmVnLCBzaXplX3JlZywgbWVtX2FyZ25vLCBzaXplX2FyZ25vLCBCUEZfUkVBRCwgdHJ1ZSwgJmFtcDttZXRhKTsKLQllcnIgPSBlcnIgPzogY2hlY2tfbWVtX3NpemVfcmVnKGVudiwgbWVtX3JlZywgc2l6ZV9yZWcsIG1lbV9hcmdubywgc2l6ZV9hcmdubywgQlBGX1dSSVRFLCB0cnVlLCAmYW1wO21ldGEpOwomIzQzOwlpZiAocmVnbm8gJmd0Oz0gMCkKJiM0MzsJCWVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgcmVnbm8pOwomIzQzOwllbHNlCiYjNDM7CQllcnIgPSBtYXJrX3N0YWNrX2FyZ19wcmVjaXNpb24oZW52LCBhcmdfaWR4X2Zyb21fYXJnbm8oYXJnbm8pKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyOwogCi0JaWYgKG1heV9iZV9udWxsKQotCQkqbWVtX3JlZyA9IHNhdmVkX3JlZzsKJiM0MzsJbWV0YS0mZ3Q7YXJnX2NvbnN0YW50LmZvdW5kID0gdHJ1ZTsKJiM0MzsJbWV0YS0mZ3Q7YXJnX2NvbnN0YW50LnZhbHVlID0gcmVnLSZndDt2YXJfb2ZmLnZhbHVlOwogCi0JcmV0dXJuIGVycjsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIGVudW0gewpAQCAtNzIyNCwxOCAmIzQzOzcyOTksNiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfdGltZXJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZQogCXJldHVybiBjaGVja19tYXBfZmllbGRfcG9pbnRlcihlbnYsIHJlZywgYXJnbm8sIEJQRl9USU1FUiwgbWFwKTsKIH0KIAotc3RhdGljIGludCBwcm9jZXNzX3RpbWVyX2hlbHBlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLAotCQkJCXN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSkKLXsKLQlyZXR1cm4gcHJvY2Vzc190aW1lcl9mdW5jKGVudiwgcmVnLCBhcmdubywgJmFtcDttZXRhLSZndDttYXApOwotfQotCi1zdGF0aWMgaW50IHByb2Nlc3NfdGltZXJfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubywKLQkJCSAgICAgICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpCi17Ci0JcmV0dXJuIHByb2Nlc3NfdGltZXJfZnVuYyhlbnYsIHJlZywgYXJnbm8sICZhbXA7bWV0YS0mZ3Q7bWFwKTsKLX0KLQogc3RhdGljIGludCBwcm9jZXNzX2twdHJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcmVnbm8sCiAJCQkgICAgIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSkKIHsKQEAgLTc3MzgsOCAmIzQzOzc4MDEsNyBAQCBzdGF0aWMgaW50IHByb2Nlc3NfaXRlcl9uZXh0X2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LAogCiBzdGF0aWMgYm9vbCBhcmdfdHlwZV9pc19tZW1fc2l6ZShlbnVtIGJwZl9hcmdfdHlwZSB0eXBlKQogewotCXJldHVybiB0eXBlID09IEFSR19DT05TVF9TSVpFIHx8Ci0JICAgICAgIHR5cGUgPT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTzsKJiM0MzsJcmV0dXJuIGJhc2VfdHlwZSh0eXBlKSA9PSBBUkdfTUVNX1NJWkU7CiB9CiAKIHN0YXRpYyBib29sIGFyZ190eXBlX2lzX3Jhd19tZW0oZW51bSBicGZfYXJnX3R5cGUgdHlwZSkKQEAgLTc4ODUsOCAmIzQzOzc5NDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9yZWdfdHlwZXMgZHlucHRyX3R5cGVzID0gewogc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfcmVnX3R5cGVzICpjb21wYXRpYmxlX3JlZ190eXBlc1tfX0JQRl9BUkdfVFlQRV9NQVhdID0gewogCVtBUkdfUFRSX1RPX01BUF9LRVldCQk9ICZhbXA7bWVtX3R5cGVzLAogCVtBUkdfUFRSX1RPX01BUF9WQUxVRV0JCT0gJmFtcDttZW1fdHlwZXMsCi0JW0FSR19DT05TVF9TSVpFXQkJPSAmYW1wO3NjYWxhcl90eXBlcywKLQlbQVJHX0NPTlNUX1NJWkVfT1JfWkVST10JPSAmYW1wO3NjYWxhcl90eXBlcywKJiM0MzsJW0FSR19NRU1fU0laRV0JCQk9ICZhbXA7c2NhbGFyX3R5cGVzLAogCVtBUkdfQ09OU1RfQUxMT0NfU0laRV9PUl9aRVJPXQk9ICZhbXA7c2NhbGFyX3R5cGVzLAogCVtBUkdfQ09OU1RfTUFQX1BUUl0JCT0gJmFtcDtjb25zdF9tYXBfcHRyX3R5cGVzLAogCVtBUkdfUFRSX1RPX0NUWF0JCT0gJmFtcDtjb250ZXh0X3R5cGVzLApAQCAtODI4NiwxMSAmIzQzOzgzNDcsNTUgQEAgc3RhdGljIGludCBnZXRfY29uc3RhbnRfbWFwX2tleShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCiBzdGF0aWMgYm9vbCBjYW5fZWxpZGVfdmFsdWVfbnVsbG5lc3MoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCk7CiAKJiM0MzsvKiBSZWNvcmQgdGhlIGJwZl9tYXAgYXJndW1lbnQgb2YgYSBoZWxwZXIgb3Iga2Z1bmMgY2FsbCBpbiBtZXRhLSZndDttYXAuCiYjNDM7ICoKJiM0MzsgKiBXaGVuIG1ldGEtJmd0O21hcCBpcyBhbHJlYWR5IHNldCBmcm9tIGFuIGVhcmxpZXIgYXJndW1lbnQgKGEgdGltZXIsIHdvcmtxdWV1ZSBvcgomIzQzOyAqIHRhc2tfd29yayBvYmplY3QgdGhhdCBpcyBib3VuZCB0byBhIG1hcCksIHJlamVjdCBhIG1hcCBwb2ludGVyIHRoYXQgZG9lcyBub3QKJiM0MzsgKiBtYXRjaCBpdC4gVGhhdCBvYmplY3Qgc2l0cyBpbiB0aGUgcmVnaXN0ZXIgcmlnaHQgYmVmb3JlIHRoZSBtYXAgYXJndW1lbnQsIGFuZAomIzQzOyAqIGl0cyB0eXBlIGlzIHRha2VuIGZyb20gdGhlIGJvdW5kIG1hcCYjMzk7cyByZWNvcmQgZm9yIHRoZSBkaWFnbm9zdGljLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcHJvY2Vzc19tYXBfcHRyX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLAomIzQzOwkJCSAgICAgICBhcmdub190IGFyZ25vLCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpCiYjNDM7ewomIzQzOwlpbnQgbWFwX3JlZ25vID0gcmVnX2Zyb21fYXJnbm8oYXJnbm8pOwomIzQzOwomIzQzOwkvKiBVc2UgbWFwX3VpZCAod2hpY2ggaXMgdW5pcXVlIGlkIG9mIGlubmVyIG1hcCkgdG8gcmVqZWN0OgomIzQzOwkgKiBpbm5lcl9tYXAxID0gYnBmX21hcF9sb29rdXBfZWxlbShvdXRlcl9tYXAsIGtleTEpCiYjNDM7CSAqIGlubmVyX21hcDIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5MikKJiM0MzsJICogaWYgKGlubmVyX21hcDEgJmFtcDsmYW1wOyBpbm5lcl9tYXAyKSB7CiYjNDM7CSAqICAgICB0aW1lciA9IGJwZl9tYXBfbG9va3VwX2VsZW0oaW5uZXJfbWFwMSk7CiYjNDM7CSAqICAgICBpZiAodGltZXIpCiYjNDM7CSAqICAgICAgICAgLy8gbWlzbWF0Y2ggd291bGQgaGF2ZSBiZWVuIGFsbG93ZWQKJiM0MzsJICogICAgICAgICBicGZfdGltZXJfaW5pdCh0aW1lciwgaW5uZXJfbWFwMik7CiYjNDM7CSAqIH0KJiM0MzsJICoKJiM0MzsJICogQ29tcGFyaW5nIG1hcF9wdHIgaXMgZW5vdWdoIHRvIGRpc3Rpbmd1aXNoIG5vcm1hbCBhbmQgb3V0ZXIgbWFwcy4KJiM0MzsJICovCiYjNDM7CWlmIChtZXRhLSZndDttYXAucHRyICZhbXA7JmFtcDsKJiM0MzsJICAgIChtZXRhLSZndDttYXAucHRyICE9IHJlZy0mZ3Q7bWFwX3B0ciB8fCBtZXRhLSZndDttYXAudWlkICE9IHJlZy0mZ3Q7bWFwX3VpZCkpIHsKJiM0MzsJCXN0cnVjdCBidGZfcmVjb3JkICpyZWMgPSBtZXRhLSZndDttYXAucHRyLSZndDtyZWNvcmQ7CiYjNDM7CQljb25zdCBjaGFyICpvYmpfbmFtZSA9ICYjMzQ7d29ya3F1ZXVlJiMzNDs7CiYjNDM7CiYjNDM7CQlpZiAocmVjLSZndDt0aW1lcl9vZmYgJmd0Oz0gMCkKJiM0MzsJCQlvYmpfbmFtZSA9ICYjMzQ7dGltZXImIzM0OzsKJiM0MzsJCWVsc2UgaWYgKHJlYy0mZ3Q7dGFza193b3JrX29mZiAmZ3Q7PSAwKQomIzQzOwkJCW9ial9uYW1lID0gJiMzNDticGZfdGFza193b3JrJiMzNDs7CiYjNDM7CiYjNDM7CQl2ZXJib3NlKGVudiwgJiMzNDslcyBwb2ludGVyIGluIFIlZCBtYXBfdWlkPSVkIGRvZXNuJiMzOTt0IG1hdGNoIG1hcCBwb2ludGVyIGluIFIlZCBtYXBfdWlkPSVkXG4mIzM0OywKJiM0MzsJCQlvYmpfbmFtZSwgbWFwX3JlZ25vIC0gMSwgbWV0YS0mZ3Q7bWFwLnVpZCwgbWFwX3JlZ25vLCByZWctJmd0O21hcF91aWQpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWV0YS0mZ3Q7bWFwLnB0ciA9IHJlZy0mZ3Q7bWFwX3B0cjsKJiM0MzsJbWV0YS0mZ3Q7bWFwLnVpZCA9IHJlZy0mZ3Q7bWFwX3VpZDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBjaGVja19mdW5jX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgYXJnLAogCQkJICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsCi0JCQkgIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm4sCiAJCQkgIGludCBpbnNuX2lkeCkKIHsKJiM0MzsJY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbiA9IG1ldGEtJmd0O2ZuOwogCXUzMiByZWdubyA9IEJQRl9SRUdfMSAmIzQzOyBhcmc7CiAJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyA9IHJlZ19zdGF0ZShlbnYsIHJlZ25vKTsKIAllbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSA9IGZuLSZndDthcmdfdHlwZVthcmddOwpAQCAtODM2MSwyOSAmIzQzOzg0NjYsOSBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsCiAJc3dpdGNoIChiYXNlX3R5cGUoYXJnX3R5cGUpKSB7CiAJY2FzZSBBUkdfQ09OU1RfTUFQX1BUUjoKIAkJLyogYnBmX21hcF94eHgobWFwX3B0cikgY2FsbDogcmVtZW1iZXIgdGhhdCBtYXBfcHRyICovCi0JCWlmIChtZXRhLSZndDttYXAucHRyKSB7Ci0JCQkvKiBVc2UgbWFwX3VpZCAod2hpY2ggaXMgdW5pcXVlIGlkIG9mIGlubmVyIG1hcCkgdG8gcmVqZWN0OgotCQkJICogaW5uZXJfbWFwMSA9IGJwZl9tYXBfbG9va3VwX2VsZW0ob3V0ZXJfbWFwLCBrZXkxKQotCQkJICogaW5uZXJfbWFwMiA9IGJwZl9tYXBfbG9va3VwX2VsZW0ob3V0ZXJfbWFwLCBrZXkyKQotCQkJICogaWYgKGlubmVyX21hcDEgJmFtcDsmYW1wOyBpbm5lcl9tYXAyKSB7Ci0JCQkgKiAgICAgdGltZXIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGlubmVyX21hcDEpOwotCQkJICogICAgIGlmICh0aW1lcikKLQkJCSAqICAgICAgICAgLy8gbWlzbWF0Y2ggd291bGQgaGF2ZSBiZWVuIGFsbG93ZWQKLQkJCSAqICAgICAgICAgYnBmX3RpbWVyX2luaXQodGltZXIsIGlubmVyX21hcDIpOwotCQkJICogfQotCQkJICoKLQkJCSAqIENvbXBhcmluZyBtYXBfcHRyIGlzIGVub3VnaCB0byBkaXN0aW5ndWlzaCBub3JtYWwgYW5kIG91dGVyIG1hcHMuCi0JCQkgKi8KLQkJCWlmIChtZXRhLSZndDttYXAucHRyICE9IHJlZy0mZ3Q7bWFwX3B0ciB8fAotCQkJICAgIG1ldGEtJmd0O21hcC51aWQgIT0gcmVnLSZndDttYXBfdWlkKSB7Ci0JCQkJdmVyYm9zZShlbnYsCi0JCQkJCSYjMzQ7dGltZXIgcG9pbnRlciBpbiBSMSBtYXBfdWlkPSVkIGRvZXNuJiMzOTt0IG1hdGNoIG1hcCBwb2ludGVyIGluIFIyIG1hcF91aWQ9JWRcbiYjMzQ7LAotCQkJCQltZXRhLSZndDttYXAudWlkLCByZWctJmd0O21hcF91aWQpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQl9Ci0JCW1ldGEtJmd0O21hcC5wdHIgPSByZWctJmd0O21hcF9wdHI7Ci0JCW1ldGEtJmd0O21hcC51aWQgPSByZWctJmd0O21hcF91aWQ7CiYjNDM7CQllcnIgPSBwcm9jZXNzX21hcF9wdHJfYXJnKGVudiwgcmVnLCBhcmdubywgbWV0YSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiAJCWJyZWFrOwogCWNhc2UgQVJHX1BUUl9UT19NQVBfS0VZOgogCQkvKiBicGZfbWFwX3h4eCguLi4sIG1hcF9wdHIsIC4uLiwga2V5KSBjYWxsOgpAQCAtODQ2Niw3ICYjNDM7ODU1MSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGFyZywKIAkJfQogCQlicmVhazsKIAljYXNlIEFSR19QVFJfVE9fVElNRVI6Ci0JCWVyciA9IHByb2Nlc3NfdGltZXJfaGVscGVyKGVudiwgcmVnLCBhcmdubywgbWV0YSk7CiYjNDM7CQllcnIgPSBwcm9jZXNzX3RpbWVyX2Z1bmMoZW52LCByZWcsIGFyZ25vLCAmYW1wO21ldGEtJmd0O21hcCk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCQlicmVhazsKQEAgLTg0NzQsMzEgJiM0Mzs4NTU5LDIyIEBAIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGFyZywKIAkJbWV0YS0mZ3Q7c3VicHJvZ25vID0gcmVnLSZndDtzdWJwcm9nbm87CiAJCWJyZWFrOwogCWNhc2UgQVJHX1BUUl9UT19NRU06Ci0JCS8qIFRoZSBhY2Nlc3MgdG8gdGhpcyBwb2ludGVyIGlzIG9ubHkgY2hlY2tlZCB3aGVuIHdlIGhpdCB0aGUKLQkJICogbmV4dCBpc19tZW1fc2l6ZSBhcmd1bWVudCBiZWxvdy4KLQkJICovCiAJCWlmIChhcmdfdHlwZSAmYW1wOyBNRU1fRklYRURfU0laRSkgewotCQkJZXJyID0gY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBmbi0mZ3Q7YXJnX3NpemVbYXJnXSwKLQkJCQkJCSAgICAgIGFyZ190eXBlICZhbXA7IE1FTV9XUklURSA/IEJQRl9XUklURSA6IEJQRl9SRUFELAotCQkJCQkJICAgICAgZmFsc2UsIG1ldGEpOwomIzQzOwkJCWVyciA9IGNoZWNrX21lbV9yZWcoZW52LCByZWcsIGFyZ25vX2Zyb21fcmVnKHJlZ25vKSwgZm4tJmd0O2FyZ19zaXplW2FyZ10sCiYjNDM7CQkJCQkgICAgYXJnX3R5cGUgJmFtcDsgTUVNX1dSSVRFID8gQlBGX1dSSVRFIDogQlBGX1JFQUQsIG1ldGEpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQkJaWYgKGFyZ190eXBlICZhbXA7IE1FTV9BTElHTkVEKQogCQkJCWVyciA9IGNoZWNrX3B0cl9hbGlnbm1lbnQoZW52LCByZWcsIDAsIGZuLSZndDthcmdfc2l6ZVthcmddLCB0cnVlKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnNpemVfcmVnID0gcmVnX3N0YXRlKGVudiwgcmVnbm8gJiM0MzsgMSk7CiYjNDM7CiYjNDM7CQkJZXJyID0gY2hlY2tfbWVtX3NpemVfcmVnKGVudiwgcmVnLCBzaXplX3JlZywgYXJnbm8sCiYjNDM7CQkJCQkJIGFyZ25vX2Zyb21fcmVnKHJlZ25vICYjNDM7IDEpLAomIzQzOwkJCQkJCSBhcmdfdHlwZSAmYW1wOyBNRU1fV1JJVEUgPyBCUEZfV1JJVEUgOiBCUEZfUkVBRCwKJiM0MzsJCQkJCQkgZm4tJmd0O2FyZ190eXBlW2FyZyAmIzQzOyAxXSAmYW1wOyBTQ0FMQVJfTUFZQkVfWkVSTywgbWV0YSk7CiAJCX0KIAkJYnJlYWs7Ci0JY2FzZSBBUkdfQ09OU1RfU0laRToKLQkJZXJyID0gY2hlY2tfbWVtX3NpemVfcmVnKGVudiwgcmVnX3N0YXRlKGVudiwgcmVnbm8gLSAxKSwgcmVnLAotCQkJCQkgYXJnbm9fZnJvbV9yZWcocmVnbm8gLSAxKSwgYXJnbm8sCi0JCQkJCSBmbi0mZ3Q7YXJnX3R5cGVbYXJnIC0gMV0gJmFtcDsgTUVNX1dSSVRFID8gQlBGX1dSSVRFIDogQlBGX1JFQUQsCi0JCQkJCSBmYWxzZSwgbWV0YSk7Ci0JCWJyZWFrOwotCWNhc2UgQVJHX0NPTlNUX1NJWkVfT1JfWkVSTzoKLQkJZXJyID0gY2hlY2tfbWVtX3NpemVfcmVnKGVudiwgcmVnX3N0YXRlKGVudiwgcmVnbm8gLSAxKSwgcmVnLAotCQkJCQkgYXJnbm9fZnJvbV9yZWcocmVnbm8gLSAxKSwgYXJnbm8sCi0JCQkJCSBmbi0mZ3Q7YXJnX3R5cGVbYXJnIC0gMV0gJmFtcDsgTUVNX1dSSVRFID8gQlBGX1dSSVRFIDogQlBGX1JFQUQsCi0JCQkJCSB0cnVlLCBtZXRhKTsKLQkJYnJlYWs7CiAJY2FzZSBBUkdfUFRSX1RPX0RZTlBUUjoKIAkJZXJyID0gcHJvY2Vzc19keW5wdHJfZnVuYyhlbnYsIHJlZywgYXJnbm8sIGluc25faWR4LCBhcmdfdHlwZSwgJmFtcDttZXRhLSZndDtyZWZfb2JqLAogCQkJCQkgICZhbXA7bWV0YS0mZ3Q7ZHlucHRyKTsKQEAgLTg4MjMsNyAmIzQzOzg4OTksNyBAQCBzdGF0aWMgYm9vbCBjaGVja19yYXdfbW9kZV9vayhjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmZuLCBzdHJ1Y3QgYnBmX2NhbGxfYQogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoZm4tJmd0O2FyZ190eXBlKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1BWF9CUEZfRlVOQ19SRUdfQVJHUzsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKCFhcmdfdHlwZV9pc19yYXdfbWVtKGZuLSZndDthcmdfdHlwZVtpXSkpCiAJCQljb250aW51ZTsKIAkJaWYgKG1ldGEtJmd0O2FyZ19yYXdfbWVtLnJlZ25vKQpAQCAtODg0MCw3ICYjNDM7ODkxNiw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2FyZ3NfcGFpcl9pbnZhbGlkKGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm4sIGludCBhcmcpCiAJYm9vbCBoYXNfc2l6ZSA9IGZuLSZndDthcmdfc2l6ZVthcmddICE9IDA7CiAJYm9vbCBpc19uZXh0X3NpemUgPSBmYWxzZTsKIAotCWlmIChhcmcgJiM0MzsgMSAmbHQ7IEFSUkFZX1NJWkUoZm4tJmd0O2FyZ190eXBlKSkKJiM0MzsJaWYgKGFyZyAmIzQzOyAxICZsdDsgTUFYX0JQRl9GVU5DX1JFR19BUkdTKQogCQlpc19uZXh0X3NpemUgPSBhcmdfdHlwZV9pc19tZW1fc2l6ZShmbi0mZ3Q7YXJnX3R5cGVbYXJnICYjNDM7IDFdKTsKIAogCWlmIChiYXNlX3R5cGUoZm4tJmd0O2FyZ190eXBlW2FyZ10pICE9IEFSR19QVFJfVE9fTUVNKQpAQCAtODg3MSw3ICYjNDM7ODk0Nyw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2J0Zl9pZF9vayhjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmZuKQogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoZm4tJmd0O2FyZ190eXBlKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1BWF9CUEZfRlVOQ19SRUdfQVJHUzsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKGJhc2VfdHlwZShmbi0mZ3Q7YXJnX3R5cGVbaV0pID09IEFSR19QVFJfVE9fQlRGX0lEKQogCQkJcmV0dXJuICEhZm4tJmd0O2FyZ19idGZfaWRbaV07CiAJCWlmIChiYXNlX3R5cGUoZm4tJmd0O2FyZ190eXBlW2ldKSA9PSBBUkdfUFRSX1RPX1NQSU5fTE9DSykKQEAgLTg4OTAsNyAmIzQzOzg5NjYsNyBAQCBzdGF0aWMgYm9vbCBjaGVja19tZW1fYXJnX3J3X2ZsYWdfb2soY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbikKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGZuLSZndDthcmdfdHlwZSk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBNQVhfQlBGX0ZVTkNfUkVHX0FSR1M7IGkmIzQzOyYjNDM7KSB7CiAJCWVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlID0gZm4tJmd0O2FyZ190eXBlW2ldOwogCiAJCWlmIChiYXNlX3R5cGUoYXJnX3R5cGUpICE9IEFSR19QVFJfVE9fTUVNKQpAQCAtODkwNiw3ICYjNDM7ODk4Miw3IEBAIHN0YXRpYyBib29sIGNoZWNrX3Byb3RvX3JlbGVhc2VfcmVnKGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm4sIHN0cnVjdCBicGZfCiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShmbi0mZ3Q7YXJnX3R5cGUpOyBpJiM0MzsmIzQzOykgewomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTUFYX0JQRl9GVU5DX1JFR19BUkdTOyBpJiM0MzsmIzQzOykgewogCQllbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSA9IGZuLSZndDthcmdfdHlwZVtpXTsKIAogCQlpZiAoYXJnX3R5cGVfaXNfcmVsZWFzZShhcmdfdHlwZSkpIHsKQEAgLTkyNTIsNyAmIzQzOzkzMjgsNyBAQCBzdGF0aWMgaW50IGJ0Zl9jaGVja19mdW5jX2FyZ19tYXRjaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZywKIAkJCXJldCA9IGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmYoZW52LCByZWcsIGFyZ25vLCBBUkdfRE9OVENBUkUpOwogCQkJaWYgKHJldCAmbHQ7IDApCiAJCQkJcmV0dXJuIHJldDsKLQkJCWlmIChjaGVja19tZW1fcmVnKGVudiwgcmVnLCBhcmdubywgYXJnLSZndDttZW1fc2l6ZSkpCiYjNDM7CQkJaWYgKGNoZWNrX21lbV9yZWcoZW52LCByZWcsIGFyZ25vLCBhcmctJmd0O21lbV9zaXplLCBCUEZfUkVBRCB8IEJQRl9XUklURSwgTlVMTCkpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlpZiAoIShhcmctJmd0O2FyZ190eXBlICZhbXA7IFBUUl9NQVlCRV9OVUxMKSAmYW1wOyZhbXA7IChyZWctJmd0O3R5cGUgJmFtcDsgUFRSX01BWUJFX05VTEwpKSB7CiAJCQkJYnBmX2xvZyhsb2csICYjMzQ7JXMgaXMgZXhwZWN0ZWQgdG8gYmUgbm9uLU5VTExcbiYjMzQ7LApAQCAtMTAyOTcsOSAmIzQzOzEwMzczLDEwIEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuCiAJCWVudi0mZ3Q7aW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3NsZWVwYWJsZSA9IHRydWU7CiAKIAltZXRhLmZ1bmNfaWQgPSBmdW5jX2lkOwomIzQzOwltZXRhLmZuID0gZm47CiAJLyogY2hlY2sgYXJncyAqLwogCWZvciAoaSA9IDA7IGkgJmx0OyBNQVhfQlBGX0ZVTkNfUkVHX0FSR1M7IGkmIzQzOyYjNDM7KSB7Ci0JCWVyciA9IGNoZWNrX2Z1bmNfYXJnKGVudiwgaSwgJmFtcDttZXRhLCBmbiwgaW5zbl9pZHgpOwomIzQzOwkJZXJyID0gY2hlY2tfZnVuY19hcmcoZW52LCBpLCAmYW1wO21ldGEsIGluc25faWR4KTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMTA3NzEsMjYgJiM0MzsxMDg0OCwyNCBAQCBzdGF0aWMgYm9vbCBpc19rZnVuY19yY3VfcHJvdGVjdGVkKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSkKIH0KIAogc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX21lbV9zaXplKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwKLQkJCQkgIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZywKLQkJCQkgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpCiYjNDM7CQkJCSAgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKQogewogCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdDsKIAogCXQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFyZy0mZ3Q7dHlwZSwgTlVMTCk7Ci0JaWYgKCFidGZfdHlwZV9pc19zY2FsYXIodCkgfHwgcmVnLSZndDt0eXBlICE9IFNDQUxBUl9WQUxVRSkKJiM0MzsJaWYgKCFidGZfdHlwZV9pc19zY2FsYXIodCkpCiAJCXJldHVybiBmYWxzZTsKIAogCXJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCAmIzM0O19fc3omIzM0Oyk7CiB9CiAKIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19jb25zdF9tZW1fc2l6ZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsCi0JCQkJCWNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZywKLQkJCQkJY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZykKJiM0MzsJCQkJCWNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZykKIHsKIAljb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQ7CiAKIAl0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmctJmd0O3R5cGUsIE5VTEwpOwotCWlmICghYnRmX3R5cGVfaXNfc2NhbGFyKHQpIHx8IHJlZy0mZ3Q7dHlwZSAhPSBTQ0FMQVJfVkFMVUUpCiYjNDM7CWlmICghYnRmX3R5cGVfaXNfc2NhbGFyKHQpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgJiMzNDtfX3N6ayYjMzQ7KTsKQEAgLTEwODExLDYgJiM0MzsxMDg4NiwxMSBAQCBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfbWFwKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKQogCXJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCAmIzM0O19fbWFwJiMzNDspOwogfQogCiYjNDM7c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2NvbnN0X21hcChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZykKJiM0Mzt7CiYjNDM7CXJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCAmIzM0O19fY29uc3RfbWFwJiMzNDspOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19hbGxvY19vYmooY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpCiB7CiAJcmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsICYjMzQ7X19hbGxvYyYjMzQ7KTsKQEAgLTExMDUxLDE4ICYjNDM7MTExMzEsMjEgQEAgZW51bSBrZnVuY19wdHJfYXJnX3R5cGUgewogCUtGX0FSR19QVFJfVE9fTElTVF9OT0RFLAogCUtGX0FSR19QVFJfVE9fQlRGX0lELAkgICAgICAgLyogQWxzbyBjb3ZlcnMgcmVnMmJ0Zl9pZHMgY29udmVyc2lvbnMgKi8KIAlLRl9BUkdfUFRSX1RPX01FTSwKLQlLRl9BUkdfUFRSX1RPX01FTV9TSVpFLAkgICAgICAgLyogU2l6ZSBkZXJpdmVkIGZyb20gbmV4dCBhcmd1bWVudCwgc2tpcCBpdCAqLwogCUtGX0FSR19QVFJfVE9fQ0FMTEJBQ0ssCiAJS0ZfQVJHX1BUUl9UT19SQl9ST09ULAogCUtGX0FSR19QVFJfVE9fUkJfTk9ERSwKLQlLRl9BUkdfUFRSX1RPX05VTEwsCiAJS0ZfQVJHX1BUUl9UT19DT05TVF9TVFIsCi0JS0ZfQVJHX1BUUl9UT19NQVAsCiYjNDM7CUtGX0FSR19DT05TVF9NQVBfUFRSLAogCUtGX0FSR19QVFJfVE9fVElNRVIsCiAJS0ZfQVJHX1BUUl9UT19XT1JLUVVFVUUsCiAJS0ZfQVJHX1BUUl9UT19JUlFfRkxBRywKIAlLRl9BUkdfUFRSX1RPX1JFU19TUElOX0xPQ0ssCiAJS0ZfQVJHX1BUUl9UT19UQVNLX1dPUkssCiYjNDM7CUtGX0FSR19DT05TVF9CVEZfSUQsCSAgICAgICAvKiBjb25zdCBzY2FsYXIgY2FycnlpbmcgYSBCVEYgdHlwZSBpZCAqLwomIzQzOwlLRl9BUkdfQ09OU1RfTUVNX1NJWkUsCSAgICAgICAvKiBjb25zdCBzY2FsYXIgc2l6aW5nIGEgcHJlY2VkaW5nIG1lbW9yeSBhcmcgKi8KJiM0MzsJS0ZfQVJHX0NPTlNUX0FMTE9DX1NJWkVfT1JfWkVSTywgLyogY29uc3Qgc2NhbGFyIHNpemluZyBhIHJldHVybmVkIGJ1ZmZlciAqLwomIzQzOwlLRl9BUkdfTUVNX1NJWkUsCSAgICAgICAvKiBzY2FsYXIgc2l6aW5nIGEgcHJlY2VkaW5nIG1lbW9yeSBhcmcgKi8KJiM0MzsJS0ZfQVJHX0FOWVRISU5HLAkgICAgICAgLyogdW5jb25zdHJhaW5lZCBzY2FsYXIgKi8KIH07CiAKIGVudW0gc3BlY2lhbF9rZnVuY190eXBlIHsKQEAgLTExMzE4LDEwOCAmIzQzOzExNDAxLDE1NiBAQCBib29sIGJwZl9pc19rZnVuY19wa3RfY2hhbmdpbmcoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKQogCXJldHVybiBtZXRhLSZndDtmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfeGRwX3B1bGxfZGF0YV07CiB9CiAKLXN0YXRpYyBlbnVtIGtmdW5jX3B0cl9hcmdfdHlwZQotZ2V0X2tmdW5jX3B0cl9hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlciwKLQkJICAgICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsCi0JCSAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqcmVmX3QsCi0JCSAgICAgICBjb25zdCBjaGFyICpyZWZfdG5hbWUsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZ3MsCi0JCSAgICAgICBpbnQgYXJnLCBpbnQgbmFyZ3MsIGFyZ25vX3QgYXJnbm8sIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpCiYjNDM7c3RhdGljIGludAomIzQzO2dldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsCiYjNDM7CQkgICBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmdzLCBpbnQgYXJnLCBpbnQgbmFyZ3MsIGFyZ25vX3QgYXJnbm8pCiB7CiYjNDM7CWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgKnJlZl90ID0gTlVMTDsKJiM0MzsJY29uc3QgY2hhciAqcmVmX3RuYW1lID0gTlVMTDsKIAlib29sIGFyZ19tZW1fc2l6ZSA9IGZhbHNlOwomIzQzOwlpbnQgYXJnX3R5cGU7CiAKLQlpZiAobWV0YS0mZ3Q7ZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2Nhc3RfdG9fa2Vybl9jdHhdIHx8Ci0JICAgIG1ldGEtJmd0O2Z1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zZXNzaW9uX2lzX3JldHVybl0gfHwKLQkgICAgbWV0YS0mZ3Q7ZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Nlc3Npb25fY29va2llXSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fQ1RYOwomIzQzOwl0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMobWV0YS0mZ3Q7YnRmLCBhcmdzW2FyZ10udHlwZSwgTlVMTCk7CiAKLQlpZiAoYXJnICYjNDM7IDEgJmx0OyBuYXJncyAmYW1wOyZhbXA7Ci0JICAgIChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnICYjNDM7IDFdLCBnZXRfZnVuY19hcmdfcmVnKGNhbGxlciwgcmVncywgYXJnICYjNDM7IDEpKSB8fAotCSAgICAgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZyAmIzQzOyAxXSwgZ2V0X2Z1bmNfYXJnX3JlZyhjYWxsZXIsIHJlZ3MsIGFyZyAmIzQzOyAxKSkpKQotCQlhcmdfbWVtX3NpemUgPSB0cnVlOwomIzQzOwkvKiBTY2FsYXIgYXJndW1lbnRzIGFyZSBjbGFzc2lmaWVkIGZyb20gdGhlaXIgQlRGIHN1ZmZpeC9uYW1lIGFsb25lLiAqLwomIzQzOwlpZiAoYnRmX3R5cGVfaXNfc2NhbGFyKHQpKSB7CiYjNDM7CQlpZiAoaXNfa2Z1bmNfYXJnX2NvbnN0YW50KG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10pKQomIzQzOwkJCXJldHVybiBLRl9BUkdfQ09OU1RfQlRGX0lEOwomIzQzOwkJaWYgKGlzX2tmdW5jX2FyZ19jb25zdF9tZW1fc2l6ZShtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKJiM0MzsJCQlyZXR1cm4gS0ZfQVJHX0NPTlNUX01FTV9TSVpFOwomIzQzOwkJaWYgKGlzX2tmdW5jX2FyZ19tZW1fc2l6ZShtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKJiM0MzsJCQlyZXR1cm4gS0ZfQVJHX01FTV9TSVpFOwomIzQzOwkJaWYgKGlzX2tmdW5jX2FyZ19zY2FsYXJfd2l0aF9uYW1lKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10sICYjMzQ7cmRvbmx5X2J1Zl9zaXplJiMzNDspIHx8CiYjNDM7CQkgICAgaXNfa2Z1bmNfYXJnX3NjYWxhcl93aXRoX25hbWUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnXSwgJiMzNDtyZHdyX2J1Zl9zaXplJiMzNDspKQomIzQzOwkJCXJldHVybiBLRl9BUkdfQ09OU1RfQUxMT0NfU0laRV9PUl9aRVJPOwomIzQzOwkJcmV0dXJuIEtGX0FSR19BTllUSElORzsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWJ0Zl90eXBlX2lzX3B0cih0KSkgewomIzQzOwkJdmVyYm9zZShlbnYsICYjMzQ7VW5yZWNvZ25pemVkICVzIHR5cGUgJXNcbiYjMzQ7LAomIzQzOwkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnRmX3R5cGVfc3RyKHQpKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMobWV0YS0mZ3Q7YnRmLCB0LSZndDt0eXBlLCBOVUxMKTsKJiM0MzsJcmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KG1ldGEtJmd0O2J0ZiwgcmVmX3QtJmd0O25hbWVfb2ZmKTsKIAogCS8qIEluIHRoaXMgZnVuY3Rpb24sIHdlIHZlcmlmeSB0aGUga2Z1bmMmIzM5O3MgQlRGIGFzIHBlciB0aGUgYXJndW1lbnQgdHlwZSwKIAkgKiBsZWF2aW5nIHRoZSByZXN0IG9mIHRoZSB2ZXJpZmljYXRpb24gd2l0aCByZXNwZWN0IHRvIHRoZSByZWdpc3RlcgogCSAqIHR5cGUgdG8gb3VyIGNhbGxlci4gV2hlbiBhIHNldCBvZiBjb25kaXRpb25zIGhvbGQgaW4gdGhlIEJURiB0eXBlIG9mCiAJICogYXJndW1lbnRzLCB3ZSByZXNvbHZlIGl0IHRvIGEga25vd24ga2Z1bmNfcHRyX2FyZ190eXBlLgogCSAqLwotCWlmIChidGZfaXNfcHJvZ19jdHhfdHlwZSgmYW1wO2Vudi0mZ3Q7bG9nLCBtZXRhLSZndDtidGYsIHQsIHJlc29sdmVfcHJvZ190eXBlKGVudi0mZ3Q7cHJvZyksIGFyZykpCi0JCXJldHVybiBLRl9BUkdfUFRSX1RPX0NUWDsKLQotCWlmIChpc19rZnVuY19hcmdfbnVsbGFibGUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnXSkgJmFtcDsmYW1wOyBicGZfcmVnaXN0ZXJfaXNfbnVsbChyZWcpICZhbXA7JmFtcDsKLQkgICAgIWFyZ19tZW1fc2l6ZSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fTlVMTDsKLQotCWlmIChpc19rZnVuY19hcmdfYWxsb2Nfb2JqKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10pKQotCQlyZXR1cm4gS0ZfQVJHX1BUUl9UT19BTExPQ19CVEZfSUQ7Ci0KLQlpZiAoaXNfa2Z1bmNfYXJnX3JlZmNvdW50ZWRfa3B0cihtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOwotCi0JaWYgKGlzX2tmdW5jX2FyZ19keW5wdHIobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnXSkpCi0JCXJldHVybiBLRl9BUkdfUFRSX1RPX0RZTlBUUjsKLQotCWlmIChpc19rZnVuY19hcmdfaXRlcihtZXRhLCBhcmcsICZhbXA7YXJnc1thcmddKSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fSVRFUjsKLQotCWlmIChpc19rZnVuY19hcmdfbGlzdF9oZWFkKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10pKQotCQlyZXR1cm4gS0ZfQVJHX1BUUl9UT19MSVNUX0hFQUQ7Ci0KLQlpZiAoaXNfa2Z1bmNfYXJnX2xpc3Rfbm9kZShtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fTElTVF9OT0RFOwotCi0JaWYgKGlzX2tmdW5jX2FyZ19yYnRyZWVfcm9vdChtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fUkJfUk9PVDsKLQotCWlmIChpc19rZnVuY19hcmdfcmJ0cmVlX25vZGUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnXSkpCi0JCXJldHVybiBLRl9BUkdfUFRSX1RPX1JCX05PREU7CiYjNDM7CWlmIChtZXRhLSZndDtmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfY2FzdF90b19rZXJuX2N0eF0gfHwKJiM0MzsJICAgIG1ldGEtJmd0O2Z1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zZXNzaW9uX2lzX3JldHVybl0gfHwKJiM0MzsJICAgIG1ldGEtJmd0O2Z1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zZXNzaW9uX2Nvb2tpZV0pCiYjNDM7CQlhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ1RYOwomIzQzOwllbHNlIGlmIChidGZfaXNfcHJvZ19jdHhfdHlwZSgmYW1wO2Vudi0mZ3Q7bG9nLCBtZXRhLSZndDtidGYsIHQsIHJlc29sdmVfcHJvZ190eXBlKGVudi0mZ3Q7cHJvZyksIGFyZykpCiYjNDM7CQlhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ1RYOwomIzQzOwllbHNlIGlmIChpc19rZnVuY19hcmdfYWxsb2Nfb2JqKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10pKQomIzQzOwkJYXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0FMTE9DX0JURl9JRDsKJiM0MzsJZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3JlZmNvdW50ZWRfa3B0cihtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKJiM0MzsJCWFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFI7CiYjNDM7CWVsc2UgaWYgKGlzX2tmdW5jX2FyZ19keW5wdHIobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnXSkpCiYjNDM7CQlhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fRFlOUFRSOwomIzQzOwllbHNlIGlmIChpc19rZnVuY19hcmdfaXRlcihtZXRhLCBhcmcsICZhbXA7YXJnc1thcmddKSkKJiM0MzsJCWFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19JVEVSOwomIzQzOwllbHNlIGlmIChpc19rZnVuY19hcmdfbGlzdF9oZWFkKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10pKQomIzQzOwkJYXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0xJU1RfSEVBRDsKJiM0MzsJZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2xpc3Rfbm9kZShtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKJiM0MzsJCWFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19MSVNUX05PREU7CiYjNDM7CWVsc2UgaWYgKGlzX2tmdW5jX2FyZ19yYnRyZWVfcm9vdChtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKJiM0MzsJCWFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19SQl9ST09UOwomIzQzOwllbHNlIGlmIChpc19rZnVuY19hcmdfcmJ0cmVlX25vZGUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnXSkpCiYjNDM7CQlhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fUkJfTk9ERTsKJiM0MzsJZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2NvbnN0X3N0cihtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKJiM0MzsJCWFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19DT05TVF9TVFI7CiYjNDM7CWVsc2UgaWYgKGlzX2tmdW5jX2FyZ19jb25zdF9tYXAobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnXSkpCiYjNDM7CQlhcmdfdHlwZSA9IEtGX0FSR19DT05TVF9NQVBfUFRSOwomIzQzOwllbHNlIGlmIChpc19rZnVuY19hcmdfbWFwKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10pKQomIzQzOwkJYXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0JURl9JRDsKJiM0MzsJZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3dxKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10pKQomIzQzOwkJYXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX1dPUktRVUVVRTsKJiM0MzsJZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3RpbWVyKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10pKQomIzQzOwkJYXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX1RJTUVSOwomIzQzOwllbHNlIGlmIChpc19rZnVuY19hcmdfdGFza193b3JrKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10pKQomIzQzOwkJYXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX1RBU0tfV09SSzsKJiM0MzsJZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2lycV9mbGFnKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10pKQomIzQzOwkJYXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0lSUV9GTEFHOwomIzQzOwllbHNlIGlmIChpc19rZnVuY19hcmdfcmVzX3NwaW5fbG9jayhtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKJiM0MzsJCWFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLOwomIzQzOwllbHNlIGlmIChpc19rZnVuY19hcmdfY2FsbGJhY2soZW52LCBtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKJiM0MzsJCWFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19DQUxMQkFDSzsKJiM0MzsJZWxzZSB7CiYjNDM7CQlpZiAoYXJnICYjNDM7IDEgJmx0OyBuYXJncyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKGlzX2tmdW5jX2FyZ19tZW1fc2l6ZShtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmcgJiM0MzsgMV0pIHx8CiYjNDM7CQkgICAgIGlzX2tmdW5jX2FyZ19jb25zdF9tZW1fc2l6ZShtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmcgJiM0MzsgMV0pKSkKJiM0MzsJCQlhcmdfbWVtX3NpemUgPSB0cnVlOwomIzQzOwomIzQzOwkJaWYgKGJ0Zl90eXBlX2lzX3N0cnVjdChyZWZfdCkgJmFtcDsmYW1wOyAhYXJnX21lbV9zaXplKSB7CiYjNDM7CQkJLyogQSBwb2ludGVyIHRvIGEgc3RydWN0IHdpdGhvdXQgYSBzaXplIGFyZ3VtZW50IGlzIGNsYXNzaWZpZWQKJiM0MzsJCQkgKiBhcyBLRl9BUkdfUFRSX1RPX0JURl9JRC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQlRGX0lEOwomIzQzOwkJfSBlbHNlIGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKHJlZl90KSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIV9fYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtJmd0O2J0ZiwgcmVmX3QsIDApICZhbXA7JmFtcDsKJiM0MzsJCQkgICAoYXJnX21lbV9zaXplID8gIWJ0Zl90eXBlX2lzX3ZvaWQocmVmX3QpIDogMSkpIHsKJiM0MzsJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBwb2ludGVyIHR5cGUgJXMgJXMgbXVzdCBwb2ludCB0byAlc3NjYWxhciwgb3Igc3RydWN0IHdpdGggc2NhbGFyXG4mIzM0OywKJiM0MzsJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLAomIzQzOwkJCQlidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUsIGFyZ19tZW1fc2l6ZSA/ICYjMzQ7dm9pZCwgJiMzNDsgOiAmIzM0OyYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJLyogT3RoZXJ3aXNlIHRoaXMgaXMgYSBtZW1vcnkgYnVmZmVyIHN1cHBvcnRlZCBieQomIzQzOwkJCSAqIGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKCk6IGEgcG9pbnRlciB0byBhIHNjYWxhciwgb3IgdG8gdm9pZAomIzQzOwkJCSAqIHdoZW4gcGFpcmVkIHdpdGggYSBzaXplIGFyZ3VtZW50LiBUaGUgYWNjZXNzIHNpemUgaXMgZGVyaXZlZAomIzQzOwkJCSAqIGZyb20gdGhlIHBvaW50ZWQtdG8gQlRGIHR5cGUgdW5sZXNzIGEgc2l6ZSBhcmd1bWVudCBmb2xsb3dzLgomIzQzOwkJCSAqLwomIzQzOwkJCWFyZ190eXBlID0gYXJnX21lbV9zaXplID8gS0ZfQVJHX1BUUl9UT19NRU0gOiBLRl9BUkdfUFRSX1RPX01FTSB8IE1FTV9GSVhFRF9TSVpFOwomIzQzOwkJfQomIzQzOwl9CiAKLQlpZiAoaXNfa2Z1bmNfYXJnX2NvbnN0X3N0cihtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fQ09OU1RfU1RSOwomIzQzOwlpZiAoaXNfa2Z1bmNfYXJnX251bGxhYmxlKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10pKQomIzQzOwkJYXJnX3R5cGUgfD0gUFRSX01BWUJFX05VTEw7CiAKLQlpZiAoaXNfa2Z1bmNfYXJnX21hcChtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fTUFQOwomIzQzOwlyZXR1cm4gYXJnX3R5cGU7CiYjNDM7fQogCi0JaWYgKGlzX2tmdW5jX2FyZ193cShtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fV09SS1FVRVVFOwomIzQzO3N0YXRpYyBpbnQgZ2VuX2tmdW5jX2FyZ19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBicGZfZnVuY19wcm90byAqcHJvdG8pCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYnRmICpidGYgPSBtZXRhLSZndDtidGY7CiYjNDM7CWNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZ3M7CiYjNDM7CXUzMiBpLCBuYXJnczsKJiM0MzsJaW50IGFyZ190eXBlOwogCi0JaWYgKGlzX2tmdW5jX2FyZ190aW1lcihtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fVElNRVI7CiYjNDM7CWFyZ3MgPSAoY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqKShtZXRhLSZndDtmdW5jX3Byb3RvICYjNDM7IDEpOwomIzQzOwluYXJncyA9IGJ0Zl90eXBlX3ZsZW4obWV0YS0mZ3Q7ZnVuY19wcm90byk7CiYjNDM7CWlmIChuYXJncyAmZ3Q7IE1BWF9CUEZfRlVOQ19BUkdTKSB7CiYjNDM7CQl2ZXJib3NlKGVudiwgJiMzNDtGdW5jdGlvbiAlcyBoYXMgJWQgJmd0OyAlZCBhcmdzXG4mIzM0OywgbWV0YS0mZ3Q7ZnVuY19uYW1lLAomIzQzOwkJCW5hcmdzLCBNQVhfQlBGX0ZVTkNfQVJHUyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwlpZiAobmFyZ3MgJmd0OyBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MgJmFtcDsmYW1wOyAhYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKCkpIHsKJiM0MzsJCXZlcmJvc2UoZW52LCAmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0IGtmdW5jICVzKCkgd2l0aCAlZCBhcmdzXG4mIzM0OywKJiM0MzsJCQltZXRhLSZndDtmdW5jX25hbWUsIG5hcmdzKTsKJiM0MzsJCXJldHVybiAtRU5PVFNVUFA7CiYjNDM7CX0KIAotCWlmIChpc19rZnVuY19hcmdfdGFza193b3JrKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10pKQotCQlyZXR1cm4gS0ZfQVJHX1BUUl9UT19UQVNLX1dPUks7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBuYXJnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWFyZ25vX3QgYXJnbm8gPSBhcmdub19mcm9tX2FyZyhpICYjNDM7IDEpOwogCi0JaWYgKGlzX2tmdW5jX2FyZ19pcnFfZmxhZyhtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fSVJRX0ZMQUc7CiYjNDM7CQlpZiAoaXNfa2Z1bmNfYXJnX3Byb2dfYXV4KGJ0ZiwgJmFtcDthcmdzW2ldKSB8fAomIzQzOwkJICAgIGlzX2tmdW5jX2FyZ19pZ25vcmUoYnRmLCAmYW1wO2FyZ3NbaV0pIHx8CiYjNDM7CQkgICAgaXNfa2Z1bmNfYXJnX2ltcGxpY2l0KG1ldGEsIGkpKQomIzQzOwkJCWNvbnRpbnVlOwogCi0JaWYgKGlzX2tmdW5jX2FyZ19yZXNfc3Bpbl9sb2NrKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZ10pKQotCQlyZXR1cm4gS0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLOwomIzQzOwkJYXJnX3R5cGUgPSBnZXRfa2Z1bmNfYXJnX3R5cGUoZW52LCBtZXRhLCBhcmdzLCBpLCBuYXJncywgYXJnbm8pOwomIzQzOwkJaWYgKGFyZ190eXBlICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gYXJnX3R5cGU7CiAKLQlpZiAoKGJhc2VfdHlwZShyZWctJmd0O3R5cGUpID09IFBUUl9UT19CVEZfSUQgfHwgcmVnMmJ0Zl9pZHNbYmFzZV90eXBlKHJlZy0mZ3Q7dHlwZSldKSkgewotCQlpZiAoIWJ0Zl90eXBlX2lzX3N0cnVjdChyZWZfdCkpIHsKLQkJCXZlcmJvc2UoZW52LCAmIzM0O2tlcm5lbCBmdW5jdGlvbiAlcyAlcyBwb2ludGVyIHR5cGUgJXMgJXMgaXMgbm90IHN1cHBvcnRlZFxuJiMzNDssCi0JCQkJbWV0YS0mZ3Q7ZnVuY19uYW1lLCByZWdfYXJnX25hbWUoZW52LCBhcmdubyksCi0JCQkJYnRmX3R5cGVfc3RyKHJlZl90KSwgcmVmX3RuYW1lKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXJldHVybiBLRl9BUkdfUFRSX1RPX0JURl9JRDsKJiM0MzsJCXByb3RvLSZndDthcmdfdHlwZVtpXSA9IGFyZ190eXBlOwogCX0KIAotCWlmIChpc19rZnVuY19hcmdfY2FsbGJhY2soZW52LCBtZXRhLSZndDtidGYsICZhbXA7YXJnc1thcmddKSkKLQkJcmV0dXJuIEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s7Ci0KLQkvKiBUaGlzIGlzIHRoZSBjYXRjaCBhbGwgYXJndW1lbnQgdHlwZSBvZiByZWdpc3RlciB0eXBlcyBzdXBwb3J0ZWQgYnkKLQkgKiBjaGVja19oZWxwZXJfbWVtX2FjY2Vzcy4gSG93ZXZlciwgd2Ugb25seSBhbGxvdyB3aGVuIGFyZ3VtZW50IHR5cGUgaXMKLQkgKiBwb2ludGVyIHRvIHNjYWxhciwgb3Igc3RydWN0IGNvbXBvc2VkIChyZWN1cnNpdmVseSkgb2Ygc2NhbGFycy4gV2hlbgotCSAqIGFyZ19tZW1fc2l6ZSBpcyB0cnVlLCB0aGUgcG9pbnRlciBjYW4gYmUgdm9pZCAqLgotCSAqLwotCWlmICghYnRmX3R5cGVfaXNfc2NhbGFyKHJlZl90KSAmYW1wOyZhbXA7ICFfX2J0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLSZndDtidGYsIHJlZl90LCAwKSAmYW1wOyZhbXA7Ci0JICAgIChhcmdfbWVtX3NpemUgPyAhYnRmX3R5cGVfaXNfdm9pZChyZWZfdCkgOiAxKSkgewotCQl2ZXJib3NlKGVudiwgJiMzNDslcyBwb2ludGVyIHR5cGUgJXMgJXMgbXVzdCBwb2ludCB0byAlc3NjYWxhciwgb3Igc3RydWN0IHdpdGggc2NhbGFyXG4mIzM0OywKLQkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwKLQkJCWJ0Zl90eXBlX3N0cihyZWZfdCksIHJlZl90bmFtZSwgYXJnX21lbV9zaXplID8gJiMzNDt2b2lkLCAmIzM0OyA6ICYjMzQ7JiMzNDspOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIGFyZ19tZW1fc2l6ZSA/IEtGX0FSR19QVFJfVE9fTUVNX1NJWkUgOiBLRl9BUkdfUFRSX1RPX01FTTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcHJvY2Vzc19rZl9hcmdfcHRyX3RvX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LApAQCAtMTIwMDUsMTYgJiM0MzsxMjEzNiw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lCiAKIAlhcmdzID0gKGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKikobWV0YS0mZ3Q7ZnVuY19wcm90byAmIzQzOyAxKTsKIAluYXJncyA9IGJ0Zl90eXBlX3ZsZW4obWV0YS0mZ3Q7ZnVuY19wcm90byk7Ci0JaWYgKG5hcmdzICZndDsgTUFYX0JQRl9GVU5DX0FSR1MpIHsKLQkJdmVyYm9zZShlbnYsICYjMzQ7RnVuY3Rpb24gJXMgaGFzICVkICZndDsgJWQgYXJnc1xuJiMzNDssIGZ1bmNfbmFtZSwgbmFyZ3MsCi0JCQlNQVhfQlBGX0ZVTkNfQVJHUyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAobmFyZ3MgJmd0OyBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MgJmFtcDsmYW1wOyAhYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKCkpIHsKLQkJdmVyYm9zZShlbnYsICYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQga2Z1bmMgJXMoKSB3aXRoICVkIGFyZ3NcbiYjMzQ7LAotCQkJZnVuY19uYW1lLCBuYXJncyk7Ci0JCXJldHVybiAtRU5PVFNVUFA7Ci0JfQogCiAJcmV0ID0gY2hlY2tfb3V0Z29pbmdfc3RhY2tfYXJncyhlbnYsIGNhbGxlciwgbmFyZ3MpOwogCWlmIChyZXQpCkBAIC0xMjAzMSw4ICYjNDM7MTIxNTIsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCQlpbnQgcmVnbm8gPSByZWdfZnJvbV9hcmdubyhhcmdubyk7CiAJCWJvb2wgYnRmX2lkX2ZpeGVkX29mZl9vayA9IHRydWU7CiAJCXUzMiByZWZfaWQsIHR5cGVfc2l6ZTsKLQkJYm9vbCBpc19yZXRfYnVmX3N6ID0gZmFsc2U7Ci0JCWludCBrZl9hcmdfdHlwZTsKJiM0MzsJCWludCBrZl9hcmdfdHlwZSA9IG1ldGEtJmd0O2ZuLSZndDthcmdfdHlwZVtpXTsKIAogCQlpZiAoaXNfa2Z1bmNfYXJnX3Byb2dfYXV4KGJ0ZiwgJmFtcDthcmdzW2ldKSkgewogCQkJLyogUmVqZWN0IHJlcGVhdGVkIHVzZSBicGZfcHJvZ19hdXggKi8KQEAgLTEyMDU1LDUyICYjNDM7MTIxNzUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCiAJCXQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFyZ3NbaV0udHlwZSwgTlVMTCk7CiAKLQkJaWYgKGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkgewotCQkJaWYgKHJlZy0mZ3Q7dHlwZSAhPSBTQ0FMQVJfVkFMVUUpIHsKLQkJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBpcyBub3QgYSBzY2FsYXJcbiYjMzQ7LCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCi0JCQlpZiAoaXNfa2Z1bmNfYXJnX2NvbnN0YW50KG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2ldKSkgewotCQkJCWlmIChtZXRhLSZndDthcmdfY29uc3RhbnQuZm91bmQpIHsKLQkJCQkJdmVyaWZpZXJfYnVnKGVudiwgJiMzNDtvbmx5IG9uZSBjb25zdGFudCBhcmd1bWVudCBwZXJtaXR0ZWQmIzM0Oyk7Ci0JCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCX0KLQkJCQlpZiAoIXRudW1faXNfY29uc3QocmVnLSZndDt2YXJfb2ZmKSkgewotCQkJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBtdXN0IGJlIGEga25vd24gY29uc3RhbnRcbiYjMzQ7LAotCQkJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkJfQotCQkJCWlmIChyZWdubyAmZ3Q7PSAwKQotCQkJCQlyZXQgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIHJlZ25vKTsKLQkJCQllbHNlCi0JCQkJCXJldCA9IG1hcmtfc3RhY2tfYXJnX3ByZWNpc2lvbihlbnYsIGkpOwotCQkJCWlmIChyZXQgJmx0OyAwKQotCQkJCQlyZXR1cm4gcmV0OwotCQkJCW1ldGEtJmd0O2FyZ19jb25zdGFudC5mb3VuZCA9IHRydWU7Ci0JCQkJbWV0YS0mZ3Q7YXJnX2NvbnN0YW50LnZhbHVlID0gcmVnLSZndDt2YXJfb2ZmLnZhbHVlOwotCQkJfSBlbHNlIGlmIChpc19rZnVuY19hcmdfc2NhbGFyX3dpdGhfbmFtZShidGYsICZhbXA7YXJnc1tpXSwgJiMzNDtyZG9ubHlfYnVmX3NpemUmIzM0OykpIHsKLQkJCQltZXRhLSZndDtyMF9yZG9ubHkgPSB0cnVlOwotCQkJCWlzX3JldF9idWZfc3ogPSB0cnVlOwotCQkJfSBlbHNlIGlmIChpc19rZnVuY19hcmdfc2NhbGFyX3dpdGhfbmFtZShidGYsICZhbXA7YXJnc1tpXSwgJiMzNDtyZHdyX2J1Zl9zaXplJiMzNDspKSB7Ci0JCQkJaXNfcmV0X2J1Zl9zeiA9IHRydWU7Ci0JCQl9Ci0KLQkJCWlmIChpc19yZXRfYnVmX3N6KSB7Ci0JCQkJcmV0ID0gcHJvY2Vzc19jb25zdF9hbGxvY19tZW1fc2l6ZShlbnYsIHJlZywgYXJnbm8sICZhbXA7bWV0YS0mZ3Q7cmV0X21lbSk7Ci0JCQkJaWYgKHJldCAmbHQ7IDApCi0JCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmICghYnRmX3R5cGVfaXNfcHRyKHQpKSB7Ci0JCQl2ZXJib3NlKGVudiwgJiMzNDtVbnJlY29nbml6ZWQgJXMgdHlwZSAlc1xuJiMzNDssCi0JCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIodCkpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAoKGJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykgfHwgdHlwZV9tYXlfYmVfbnVsbChyZWctJmd0O3R5cGUpKSAmYW1wOyZhbXA7CiYjNDM7CQlpZiAoYnRmX3R5cGVfaXNfcHRyKHQpICZhbXA7JmFtcDsgKGJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykgfHwgdHlwZV9tYXlfYmVfbnVsbChyZWctJmd0O3R5cGUpKSAmYW1wOyZhbXA7CiAJCSAgICAhaXNfa2Z1bmNfYXJnX251bGxhYmxlKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2ldKSkgewogCQkJdmVyYm9zZShlbnYsICYjMzQ7UG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkICVzXG4mIzM0OywKIAkJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubykpOwpAQCAtMTIxMTcsNzYgJiM0MzsxMjE5MiwzNSBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCQlpZiAocmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpKQogCQkJdXBkYXRlX3JlZl9vYmooJmFtcDttZXRhLSZndDtyZWZfb2JqLCByZWcpOwogCi0JCXJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LSZndDt0eXBlLCAmYW1wO3JlZl9pZCk7Ci0JCXJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHJlZl90LSZndDtuYW1lX29mZik7Ci0KLQkJa2ZfYXJnX3R5cGUgPSBnZXRfa2Z1bmNfcHRyX2FyZ190eXBlKGVudiwgY2FsbGVyLCByZWdzLCBtZXRhLCB0LCByZWZfdCwgcmVmX3RuYW1lLAotCQkJCQkJICAgICBhcmdzLCBpLCBuYXJncywgYXJnbm8sIHJlZyk7Ci0JCWlmIChrZl9hcmdfdHlwZSAmbHQ7IDApCi0JCQlyZXR1cm4ga2ZfYXJnX3R5cGU7CiYjNDM7CQlpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7CiYjNDM7CQkJcmVmX3QgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtJmd0O3R5cGUsICZhbXA7cmVmX2lkKTsKJiM0MzsJCQlyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCByZWZfdC0mZ3Q7bmFtZV9vZmYpOwomIzQzOwkJfQogCi0JCXN3aXRjaCAoa2ZfYXJnX3R5cGUpIHsKLQkJY2FzZSBLRl9BUkdfUFRSX1RPX05VTEw6CiYjNDM7CQlpZiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSAmYW1wOyZhbXA7IHR5cGVfbWF5X2JlX251bGwoa2ZfYXJnX3R5cGUpKQogCQkJY29udGludWU7Ci0JCWNhc2UgS0ZfQVJHX1BUUl9UT19NQVA6Ci0JCQlpZiAoIXJlZy0mZ3Q7bWFwX3B0cikgewotCQkJCXZlcmJvc2UoZW52LCAmIzM0O3BvaW50ZXIgaW4gJXMgaXNuJiMzOTt0IG1hcCBwb2ludGVyXG4mIzM0OywKLQkJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJCWlmIChtZXRhLSZndDttYXAucHRyICZhbXA7JmFtcDsgKHJlZy0mZ3Q7bWFwX3B0ci0mZ3Q7cmVjb3JkLSZndDt3cV9vZmYgJmd0Oz0gMCB8fAotCQkJCQkgICAgICByZWctJmd0O21hcF9wdHItJmd0O3JlY29yZC0mZ3Q7dGFza193b3JrX29mZiAmZ3Q7PSAwKSkgewotCQkJCS8qIFVzZSBtYXBfdWlkICh3aGljaCBpcyB1bmlxdWUgaWQgb2YgaW5uZXIgbWFwKSB0byByZWplY3Q6Ci0JCQkJICogaW5uZXJfbWFwMSA9IGJwZl9tYXBfbG9va3VwX2VsZW0ob3V0ZXJfbWFwLCBrZXkxKQotCQkJCSAqIGlubmVyX21hcDIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5MikKLQkJCQkgKiBpZiAoaW5uZXJfbWFwMSAmYW1wOyZhbXA7IGlubmVyX21hcDIpIHsKLQkJCQkgKiAgICAgd3EgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGlubmVyX21hcDEpOwotCQkJCSAqICAgICBpZiAod3EpCi0JCQkJICogICAgICAgICAvLyBtaXNtYXRjaCB3b3VsZCBoYXZlIGJlZW4gYWxsb3dlZAotCQkJCSAqICAgICAgICAgYnBmX3dxX2luaXQod3EsIGlubmVyX21hcDIpOwotCQkJCSAqIH0KLQkJCQkgKgotCQkJCSAqIENvbXBhcmluZyBtYXBfcHRyIGlzIGVub3VnaCB0byBkaXN0aW5ndWlzaCBub3JtYWwgYW5kIG91dGVyIG1hcHMuCi0JCQkJICovCi0JCQkJaWYgKG1ldGEtJmd0O21hcC5wdHIgIT0gcmVnLSZndDttYXBfcHRyIHx8Ci0JCQkJICAgIG1ldGEtJmd0O21hcC51aWQgIT0gcmVnLSZndDttYXBfdWlkKSB7Ci0JCQkJCWlmIChyZWctJmd0O21hcF9wdHItJmd0O3JlY29yZC0mZ3Q7dGFza193b3JrX29mZiAmZ3Q7PSAwKSB7Ci0JCQkJCQl2ZXJib3NlKGVudiwKLQkJCQkJCQkmIzM0O2JwZl90YXNrX3dvcmsgcG9pbnRlciBpbiBSMiBtYXBfdWlkPSVkIGRvZXNuJiMzOTt0IG1hdGNoIG1hcCBwb2ludGVyIGluIFIzIG1hcF91aWQ9JWRcbiYjMzQ7LAotCQkJCQkJCW1ldGEtJmd0O21hcC51aWQsIHJlZy0mZ3Q7bWFwX3VpZCk7Ci0JCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQkJfQotCQkJCQl2ZXJib3NlKGVudiwKLQkJCQkJCSYjMzQ7d29ya3F1ZXVlIHBvaW50ZXIgaW4gUjEgbWFwX3VpZD0lZCBkb2VzbiYjMzk7dCBtYXRjaCBtYXAgcG9pbnRlciBpbiBSMiBtYXBfdWlkPSVkXG4mIzM0OywKLQkJCQkJCW1ldGEtJmd0O21hcC51aWQsIHJlZy0mZ3Q7bWFwX3VpZCk7Ci0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCX0KLQkJCX0KLQkJCW1ldGEtJmd0O21hcC5wdHIgPSByZWctJmd0O21hcF9wdHI7Ci0JCQltZXRhLSZndDttYXAudWlkID0gcmVnLSZndDttYXBfdWlkOwotCQkJZmFsbHRocm91Z2g7CiYjNDM7CiYjNDM7CQlpZiAoaXNfa2Z1bmNfYXJnX21hcChidGYsICZhbXA7YXJnc1tpXSkpIHsKJiM0MzsJCQlyZWZfaWQgPSAqcmVnMmJ0Zl9pZHNbQ09OU1RfUFRSX1RPX01BUF07CiYjNDM7CQkJcmVmX3QgPSBidGZfdHlwZV9ieV9pZChidGZfdm1saW51eCwgcmVmX2lkKTsKJiM0MzsJCQlyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCByZWZfdC0mZ3Q7bmFtZV9vZmYpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJc3dpdGNoIChiYXNlX3R5cGUoa2ZfYXJnX3R5cGUpKSB7CiYjNDM7CQljYXNlIEtGX0FSR19DT05TVF9CVEZfSUQ6CiYjNDM7CQljYXNlIEtGX0FSR19DT05TVF9BTExPQ19TSVpFX09SX1pFUk86CiYjNDM7CQljYXNlIEtGX0FSR19BTllUSElORzoKIAkJY2FzZSBLRl9BUkdfUFRSX1RPX0FMTE9DX0JURl9JRDoKIAkJY2FzZSBLRl9BUkdfUFRSX1RPX0JURl9JRDoKLQkJCWlmICghaXNfdHJ1c3RlZF9yZWcoZW52LCByZWcpKSB7Ci0JCQkJaWYgKCFpc19rZnVuY19yY3UobWV0YSkpIHsKLQkJCQkJdmVyYm9zZShlbnYsICYjMzQ7JXMgbXVzdCBiZSByZWZlcmVuY2VkIG9yIHRydXN0ZWRcbiYjMzQ7LAotCQkJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkJfQotCQkJCWlmICghaXNfcmN1X3JlZyhyZWcpKSB7Ci0JCQkJCXZlcmJvc2UoZW52LCAmIzM0OyVzIG11c3QgYmUgYSByY3UgcG9pbnRlclxuJiMzNDssCi0JCQkJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubykpOwotCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQl9Ci0JCQl9Ci0JCQlmYWxsdGhyb3VnaDsKJiM0MzsJCWNhc2UgS0ZfQVJHX0NPTlNUX01BUF9QVFI6CiAJCWNhc2UgS0ZfQVJHX1BUUl9UT19JVEVSOgogCQljYXNlIEtGX0FSR19QVFJfVE9fTElTVF9IRUFEOgogCQljYXNlIEtGX0FSR19QVFJfVE9fTElTVF9OT0RFOgogCQljYXNlIEtGX0FSR19QVFJfVE9fUkJfUk9PVDoKIAkJY2FzZSBLRl9BUkdfUFRSX1RPX1JCX05PREU6CiAJCWNhc2UgS0ZfQVJHX1BUUl9UT19NRU06Ci0JCWNhc2UgS0ZfQVJHX1BUUl9UT19NRU1fU0laRToKJiM0MzsJCWNhc2UgS0ZfQVJHX0NPTlNUX01FTV9TSVpFOgomIzQzOwkJY2FzZSBLRl9BUkdfTUVNX1NJWkU6CiAJCWNhc2UgS0ZfQVJHX1BUUl9UT19DQUxMQkFDSzoKIAkJY2FzZSBLRl9BUkdfUFRSX1RPX0NPTlNUX1NUUjoKIAkJY2FzZSBLRl9BUkdfUFRSX1RPX1dPUktRVUVVRToKQEAgLTEyMjE3LDcgJiM0MzsxMjI1MSwzNSBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7CiAKLQkJc3dpdGNoIChrZl9hcmdfdHlwZSkgewomIzQzOwkJc3dpdGNoIChiYXNlX3R5cGUoa2ZfYXJnX3R5cGUpKSB7CiYjNDM7CQljYXNlIEtGX0FSR19DT05TVF9CVEZfSUQ6CiYjNDM7CQkJaWYgKHJlZy0mZ3Q7dHlwZSAhPSBTQ0FMQVJfVkFMVUUpIHsKJiM0MzsJCQkJdmVyYm9zZShlbnYsICYjMzQ7JXMgaXMgbm90IGEgc2NhbGFyXG4mIzM0OywgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCXJldCA9IHByb2Nlc3NfY29uc3RfYXJnKGVudiwgcmVnLCBhcmdubywgbWV0YSk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIEtGX0FSR19DT05TVF9BTExPQ19TSVpFX09SX1pFUk86CiYjNDM7CQkJaWYgKHJlZy0mZ3Q7dHlwZSAhPSBTQ0FMQVJfVkFMVUUpIHsKJiM0MzsJCQkJdmVyYm9zZShlbnYsICYjMzQ7JXMgaXMgbm90IGEgc2NhbGFyXG4mIzM0OywgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCWlmIChpc19rZnVuY19hcmdfc2NhbGFyX3dpdGhfbmFtZShidGYsICZhbXA7YXJnc1tpXSwgJiMzNDtyZG9ubHlfYnVmX3NpemUmIzM0OykpCiYjNDM7CQkJCW1ldGEtJmd0O3IwX3Jkb25seSA9IHRydWU7CiYjNDM7CQkJcmV0ID0gcHJvY2Vzc19jb25zdF9hbGxvY19tZW1fc2l6ZShlbnYsIHJlZywgYXJnbm8sICZhbXA7bWV0YS0mZ3Q7cmV0X21lbSk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIEtGX0FSR19BTllUSElORzoKJiM0MzsJCQlpZiAocmVnLSZndDt0eXBlICE9IFNDQUxBUl9WQUxVRSkgewomIzQzOwkJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBpcyBub3QgYSBzY2FsYXJcbiYjMzQ7LCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpOwomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQl9CiYjNDM7CQkJYnJlYWs7CiAJCWNhc2UgS0ZfQVJHX1BUUl9UT19DVFg6CiAJCQlpZiAocmVnLSZndDt0eXBlICE9IFBUUl9UT19DVFgpIHsKIAkJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBleHBlY3RlZCBwb2ludGVyIHRvIGN0eCwgYnV0IGdvdCAlc1xuJiMzNDssCkBAIC0xMjM4Niw1MSAmIzQzOzEyNDQ4LDc3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lCiAJCQlpZiAocmV0ICZsdDsgMCkKIAkJCQlyZXR1cm4gcmV0OwogCQkJYnJlYWs7Ci0JCWNhc2UgS0ZfQVJHX1BUUl9UT19NQVA6Ci0JCQkvKiBJZiBhcmd1bWVudCBoYXMgJiMzOTtfX21hcCYjMzk7IHN1ZmZpeCBleHBlY3QgJiMzOTtzdHJ1Y3QgYnBmX21hcCAqJiMzOTsgKi8KLQkJCXJlZl9pZCA9ICpyZWcyYnRmX2lkc1tDT05TVF9QVFJfVE9fTUFQXTsKLQkJCXJlZl90ID0gYnRmX3R5cGVfYnlfaWQoYnRmX3ZtbGludXgsIHJlZl9pZCk7Ci0JCQlyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCByZWZfdC0mZ3Q7bmFtZV9vZmYpOwotCQkJZmFsbHRocm91Z2g7Ci0JCWNhc2UgS0ZfQVJHX1BUUl9UT19CVEZfSUQ6Ci0JCQkvKiBPbmx5IGJhc2VfdHlwZSBpcyBjaGVja2VkLCBmdXJ0aGVyIGNoZWNrcyBhcmUgZG9uZSBoZXJlICovCi0JCQlpZiAoKGJhc2VfdHlwZShyZWctJmd0O3R5cGUpICE9IFBUUl9UT19CVEZfSUQgfHwKLQkJCSAgICAgKGJwZl90eXBlX2hhc191bnNhZmVfbW9kaWZpZXJzKHJlZy0mZ3Q7dHlwZSkgJmFtcDsmYW1wOyAhaXNfcmN1X3JlZyhyZWcpKSkgJmFtcDsmYW1wOwotCQkJICAgICFyZWcyYnRmX2lkc1tiYXNlX3R5cGUocmVnLSZndDt0eXBlKV0pIHsKLQkJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBpcyAlcyAmIzM0OywgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLAotCQkJCQlyZWdfdHlwZV9zdHIoZW52LCByZWctJmd0O3R5cGUpKTsKLQkJCQl2ZXJib3NlKGVudiwgJiMzNDtleHBlY3RlZCAlcyBvciBzb2NrZXRcbiYjMzQ7LAotCQkJCQlyZWdfdHlwZV9zdHIoZW52LCBiYXNlX3R5cGUocmVnLSZndDt0eXBlKSB8Ci0JCQkJCQkJICAodHlwZV9mbGFnKHJlZy0mZ3Q7dHlwZSkgJmFtcDsgQlBGX1JFR19UUlVTVEVEX01PRElGSUVSUykpKTsKJiM0MzsJCWNhc2UgS0ZfQVJHX0NPTlNUX01BUF9QVFI6CiYjNDM7CQkJaWYgKCFyZWctJmd0O21hcF9wdHIpIHsKJiM0MzsJCQkJdmVyYm9zZShlbnYsICYjMzQ7cG9pbnRlciBpbiAlcyBpc24mIzM5O3QgbWFwIHBvaW50ZXJcbiYjMzQ7LAomIzQzOwkJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KLQkJCXJldCA9IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19idGZfaWQoZW52LCByZWcsIHJlZl90LCByZWZfdG5hbWUsIHJlZl9pZCwgbWV0YSwgaSwgYXJnbm8pOwomIzQzOwkJCXJldCA9IHByb2Nlc3NfbWFwX3B0cl9hcmcoZW52LCByZWcsIGFyZ25vLCBtZXRhKTsKIAkJCWlmIChyZXQgJmx0OyAwKQogCQkJCXJldHVybiByZXQ7CiAJCQlicmVhazsKLQkJY2FzZSBLRl9BUkdfUFRSX1RPX01FTToKLQkJCXJlc29sdmVfcmV0ID0gYnRmX3Jlc29sdmVfc2l6ZShidGYsIHJlZl90LCAmYW1wO3R5cGVfc2l6ZSk7Ci0JCQlpZiAoSVNfRVJSKHJlc29sdmVfcmV0KSkgewotCQkJCXZlcmJvc2UoZW52LCAmIzM0OyVzIHJlZmVyZW5jZSB0eXBlKCYjMzk7JXMgJXMmIzM5Oykgc2l6ZSBjYW5ub3QgYmUgZGV0ZXJtaW5lZDogJWxkXG4mIzM0OywKLQkJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLAotCQkJCQlyZWZfdG5hbWUsIFBUUl9FUlIocmVzb2x2ZV9yZXQpKTsKJiM0MzsJCWNhc2UgS0ZfQVJHX1BUUl9UT19CVEZfSUQ6CiYjNDM7CQkJLyogT25seSBiYXNlX3R5cGUgaXMgY2hlY2tlZCwgZnVydGhlciBjaGVja3MgYXJlIGRvbmUgaGVyZSAqLwomIzQzOwkJCWlmIChiYXNlX3R5cGUocmVnLSZndDt0eXBlKSA9PSBQVFJfVE9fQlRGX0lEIHx8CiYjNDM7CQkJICAgIHJlZzJidGZfaWRzW2Jhc2VfdHlwZShyZWctJmd0O3R5cGUpXSkgewomIzQzOwomIzQzOwkJCQlpZiAoIWlzX3RydXN0ZWRfcmVnKGVudiwgcmVnKSkgewomIzQzOwkJCQkJaWYgKCFpc19rZnVuY19yY3UobWV0YSkpIHsKJiM0MzsJCQkJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFxuJiMzNDssCiYjNDM7CQkJCQkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7CiYjNDM7CQkJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJCQl9CiYjNDM7CQkJCQlpZiAoIWlzX3JjdV9yZWcocmVnKSkgewomIzQzOwkJCQkJCXZlcmJvc2UoZW52LCAmIzM0OyVzIG11c3QgYmUgYSByY3UgcG9pbnRlclxuJiMzNDssCiYjNDM7CQkJCQkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7CiYjNDM7CQkJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJCQl9CiYjNDM7CQkJCX0KJiM0MzsKJiM0MzsJCQkJcmV0ID0gcHJvY2Vzc19rZl9hcmdfcHRyX3RvX2J0Zl9pZChlbnYsIHJlZywgcmVmX3QsIHJlZl90bmFtZSwgcmVmX2lkLCBtZXRhLCBpLCBhcmdubyk7CiYjNDM7CQkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQkJcmV0dXJuIHJldDsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCWlmICghX19idGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS0mZ3Q7YnRmLCByZWZfdCwgMCkpIHsKJiM0MzsJCQkJZW51bSBicGZfcmVnX3R5cGUgcmVnMmJ0Zl90eXBlID0gbG9va3VwX3JlZzJidGZfaWRzKHJlZl90KTsKJiM0MzsKJiM0MzsJCQkJdmVyYm9zZShlbnYsICYjMzQ7JXMgaXMgJXMgZXhwZWN0ZWQgJXMgJXMmIzM0OywKJiM0MzsJCQkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgcmVnX3R5cGVfc3RyKGVudiwgcmVnLSZndDt0eXBlKSwKJiM0MzsJCQkJCWJ0Zl90eXBlX3N0cihyZWZfdCksIHJlZl90bmFtZSk7CiYjNDM7CQkJCWlmIChyZWcyYnRmX3R5cGUgIT0gTk9UX0lOSVQpCiYjNDM7CQkJCQl2ZXJib3NlKGVudiwgJiMzNDsgb3IgJXMmIzM0OywgcmVnX3R5cGVfc3RyKGVudiwgcmVnMmJ0Zl90eXBlKSk7CiYjNDM7CQkJCXZlcmJvc2UoZW52LCAmIzM0O1xuJiMzNDspOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQkJcmV0ID0gY2hlY2tfbWVtX3JlZyhlbnYsIHJlZywgYXJnbm8sIHR5cGVfc2l6ZSk7Ci0JCQlpZiAocmV0ICZsdDsgMCkKLQkJCQlyZXR1cm4gcmV0OwotCQkJYnJlYWs7Ci0JCWNhc2UgS0ZfQVJHX1BUUl9UT19NRU1fU0laRToKLQkJewotCQkJc3RydWN0IGJwZl9yZWdfc3RhdGUgKmJ1ZmZfcmVnID0gcmVnOwotCQkJY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYnVmZl9hcmcgPSAmYW1wO2FyZ3NbaV07Ci0JCQlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc2l6ZV9yZWcgPSBnZXRfZnVuY19hcmdfcmVnKGNhbGxlciwgcmVncywgaSAmIzQzOyAxKTsKLQkJCWNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKnNpemVfYXJnID0gJmFtcDthcmdzW2kgJiM0MzsgMV07Ci0JCQlhcmdub190IG5leHRfYXJnbm8gPSBhcmdub19mcm9tX2FyZyhpICYjNDM7IDIpOwotCi0JCQlpZiAoIWJwZl9yZWdpc3Rlcl9pc19udWxsKGJ1ZmZfcmVnKSB8fCAhaXNfa2Z1bmNfYXJnX251bGxhYmxlKG1ldGEtJmd0O2J0ZiwgYnVmZl9hcmcpKSB7Ci0JCQkJcmV0ID0gY2hlY2tfa2Z1bmNfbWVtX3NpemVfcmVnKGVudiwgYnVmZl9yZWcsIHNpemVfcmVnLAotCQkJCQkJCSAgICAgICBhcmdubywgbmV4dF9hcmdubyk7CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBJZiB0aGUgcmVnaXN0ZXIgZG9lcyBub3QgY29udGFpbiBidGYgaWQgYnV0IHRoZSBhcmd1bWVudCB0eXBlIGlzIGEgcG9pbnRlciB0bwomIzQzOwkJCSAqIHNjYWxhci1vbmx5IHN0cnVjdCwgYWxsb3cgdmVyaWZ5aW5nIGl0IGFzIGEgZml4ZWQgc2l6ZSBtZW1vcnkuCiYjNDM7CQkJICovCiYjNDM7CQkJa2ZfYXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX01FTSB8IE1FTV9GSVhFRF9TSVpFOwomIzQzOwkJCWZhbGx0aHJvdWdoOwomIzQzOwkJY2FzZSBLRl9BUkdfUFRSX1RPX01FTToKJiM0MzsJCQlpZiAoa2ZfYXJnX3R5cGUgJmFtcDsgTUVNX0ZJWEVEX1NJWkUpIHsKJiM0MzsJCQkJcmVzb2x2ZV9yZXQgPSBidGZfcmVzb2x2ZV9zaXplKGJ0ZiwgcmVmX3QsICZhbXA7dHlwZV9zaXplKTsKJiM0MzsJCQkJaWYgKElTX0VSUihyZXNvbHZlX3JldCkpIHsKJiM0MzsJCQkJCXZlcmJvc2UoZW52LCAmIzM0OyVzIHJlZmVyZW5jZSB0eXBlKCYjMzk7JXMgJXMmIzM5Oykgc2l6ZSBjYW5ub3QgYmUgZGV0ZXJtaW5lZDogJWxkXG4mIzM0OywKJiM0MzsJCQkJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ0Zl90eXBlX3N0cihyZWZfdCksCiYjNDM7CQkJCQkJcmVmX3RuYW1lLCBQVFJfRVJSKHJlc29sdmVfcmV0KSk7CiYjNDM7CQkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQkJfQomIzQzOwkJCQlyZXQgPSBjaGVja19tZW1fcmVnKGVudiwgcmVnLCBhcmdubywgdHlwZV9zaXplLCBCUEZfUkVBRCB8IEJQRl9XUklURSwgbWV0YSk7CiYjNDM7CQkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQkJcmV0dXJuIHJldDsKJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqYnVmZl9yZWcgPSByZWc7CiYjNDM7CQkJCXN0cnVjdCBicGZfcmVnX3N0YXRlICpzaXplX3JlZyA9IGdldF9mdW5jX2FyZ19yZWcoY2FsbGVyLCByZWdzLCBpICYjNDM7IDEpOwomIzQzOwkJCQlhcmdub190IG5leHRfYXJnbm8gPSBhcmdub19mcm9tX2FyZyhpICYjNDM7IDIpOwomIzQzOwomIzQzOwkJCQlyZXQgPSBjaGVja19tZW1fc2l6ZV9yZWcoZW52LCBidWZmX3JlZywgc2l6ZV9yZWcsIGFyZ25vLCBuZXh0X2FyZ25vLAomIzQzOwkJCQkJCQkgQlBGX1JFQUQgfCBCUEZfV1JJVEUsIHRydWUsIG1ldGEpOwogCQkJCWlmIChyZXQgJmx0OyAwKSB7CiAJCQkJCXZlcmJvc2UoZW52LCAmIzM0OyVzIGFuZCAmIzM0OywgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKIAkJCQkJdmVyYm9zZShlbnYsICYjMzQ7JXMgbWVtb3J5LCBsZW4gcGFpciBsZWFkcyB0byBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NcbiYjMzQ7LApAQCAtMTI0MzgsMjUgJiM0MzsxMjUyNiwyMCBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCQkJCQlyZXR1cm4gcmV0OwogCQkJCX0KIAkJCX0KLQotCQkJaWYgKGlzX2tmdW5jX2FyZ19jb25zdF9tZW1fc2l6ZShtZXRhLSZndDtidGYsIHNpemVfYXJnLCBzaXplX3JlZykpIHsKLQkJCQlpZiAobWV0YS0mZ3Q7YXJnX2NvbnN0YW50LmZvdW5kKSB7Ci0JCQkJCXZlcmlmaWVyX2J1ZyhlbnYsICYjMzQ7b25seSBvbmUgY29uc3RhbnQgYXJndW1lbnQgcGVybWl0dGVkJiMzNDspOwotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQl9Ci0JCQkJaWYgKCF0bnVtX2lzX2NvbnN0KHNpemVfcmVnLSZndDt2YXJfb2ZmKSkgewotCQkJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBtdXN0IGJlIGEga25vd24gY29uc3RhbnRcbiYjMzQ7LAotCQkJCQkJcmVnX2FyZ19uYW1lKGVudiwgbmV4dF9hcmdubykpOwotCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQl9Ci0JCQkJbWV0YS0mZ3Q7YXJnX2NvbnN0YW50LmZvdW5kID0gdHJ1ZTsKLQkJCQltZXRhLSZndDthcmdfY29uc3RhbnQudmFsdWUgPSBzaXplX3JlZy0mZ3Q7dmFyX29mZi52YWx1ZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgS0ZfQVJHX0NPTlNUX01FTV9TSVpFOgomIzQzOwkJCWlmIChyZWctJmd0O3R5cGUgIT0gU0NBTEFSX1ZBTFVFKSB7CiYjNDM7CQkJCXZlcmJvc2UoZW52LCAmIzM0OyVzIGlzIG5vdCBhIHNjYWxhclxuJiMzNDssIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7CiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCi0JCQkvKiBTa2lwIG5leHQgJiMzOTtfX3N6JiMzOTsgb3IgJiMzOTtfX3N6ayYjMzk7IGFyZ3VtZW50ICovCi0JCQlpJiM0MzsmIzQzOzsKJiM0MzsJCQlyZXQgPSBwcm9jZXNzX2NvbnN0X2FyZyhlbnYsIHJlZywgYXJnbm8sIG1ldGEpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJCWZhbGx0aHJvdWdoOwomIzQzOwkJY2FzZSBLRl9BUkdfTUVNX1NJWkU6CiAJCQlicmVhazsKLQkJfQogCQljYXNlIEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s6CiAJCQlpZiAocmVnLSZndDt0eXBlICE9IFBUUl9UT19GVU5DKSB7CiAJCQkJdmVyYm9zZShlbnYsICYjMzQ7JXMgZXhwZWN0ZWQgcG9pbnRlciB0byBmdW5jXG4mIzM0OywgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKQEAgLTEyNTE0LDcgJiM0MzsxMjU5Nyw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lCiAJCQkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9Ci0JCQlyZXQgPSBwcm9jZXNzX3RpbWVyX2tmdW5jKGVudiwgcmVnLCBhcmdubywgbWV0YSk7CiYjNDM7CQkJcmV0ID0gcHJvY2Vzc190aW1lcl9mdW5jKGVudiwgcmVnLCBhcmdubywgJmFtcDttZXRhLSZndDttYXApOwogCQkJaWYgKHJldCAmbHQ7IDApCiAJCQkJcmV0dXJuIHJldDsKIAkJCWJyZWFrOwpAQCAtMTI2NzYsNyAmIzQzOzEyNzU5LDcgQEAgczY0IGJwZl9oZWxwZXJfc3RhY2tfYWNjZXNzX2J5dGVzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbgogCQkJc2l6ZSA9IGZuLSZndDthcmdfc2l6ZVthcmddOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJaWYgKGFyZyAmIzQzOyAxICZsdDsgQVJSQVlfU0laRShmbi0mZ3Q7YXJnX3R5cGUpICZhbXA7JmFtcDsKJiM0MzsJCWlmIChhcmcgJiM0MzsgMSAmbHQ7IE1BWF9CUEZfRlVOQ19SRUdfQVJHUyAmYW1wOyZhbXA7CiAJCSAgICBhcmdfdHlwZV9pc19tZW1fc2l6ZShmbi0mZ3Q7YXJnX3R5cGVbYXJnICYjNDM7IDFdKSkgewogCQkJaW50IHNpemVfcmVnID0gQlBGX1JFR18xICYjNDM7IGFyZyAmIzQzOyAxOwogCkBAIC0xMjk3NSw2ICYjNDM7MTMwNTgsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCWludCBlcnIsIGluc25faWR4ID0gKmluc25faWR4X3A7CiAJY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnczsKIAl1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkOwomIzQzOwlzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2MgKmRlc2M7CiAJc3RydWN0IGJ0ZiAqZGVzY19idGY7CiAJaW50IGlkOwogCkBAIC0xMjk5MSw2ICYjNDM7MTMwNzUsMTMgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwKIAlmdW5jX25hbWUgPSBtZXRhLmZ1bmNfbmFtZTsKIAlpbnNuX2F1eCA9ICZhbXA7ZW52LSZndDtpbnNuX2F1eF9kYXRhW2luc25faWR4XTsKIAomIzQzOwlkZXNjID0gZmluZF9rZnVuY19kZXNjKGVudi0mZ3Q7cHJvZywgaW5zbi0mZ3Q7aW1tLCBpbnNuLSZndDtvZmYpOwomIzQzOwlpZiAoIWRlc2MpIHsKJiM0MzsJCXZlcmlmaWVyX2J1ZyhlbnYsICYjMzQ7a2Z1bmMgZGVzY3JpcHRvciBub3QgZm91bmQgZm9yIGZ1bmNfaWQgJXUmIzM0OywgaW5zbi0mZ3Q7aW1tKTsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwl9CiYjNDM7CW1ldGEuZm4gPSBkZXNjLSZndDtwcm90bzsKJiM0MzsKIAlpbnNuX2F1eC0mZ3Q7aXNfaXRlcl9uZXh0ID0gYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYygmYW1wO21ldGEpOwogCiAJaWYgKCFpbnNuLSZndDtvZmYgJmFtcDsmYW1wOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jCmluZGV4IDc2YWI1MWRlYWE2Yjk1Li44OTE4OTdmOGExYjM1NyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYwpAQCAtMjIxLDcgJiM0MzsyMjEsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3Byb2JlX3JlYWRfdXNlcl9wcm90byA9IHsKIAkuZ3BsX29ubHkJPSB0cnVlLAogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzJfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmcyX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIApAQCAtMjU4LDcgJiM0MzsyNTgsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHJfcHJvdG8gPSB7CiAJLmdwbF9vbmx5CT0gdHJ1ZSwKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmcyX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnMl90eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKQEAgLTI3Myw3ICYjNDM7MjczLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX2tlcm5lbF9wcm90byA9IHsKIAkuZ3BsX29ubHkJPSB0cnVlLAogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzJfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmcyX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIApAQCAtMzA4LDcgJiM0MzszMDgsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3Byb2JlX3JlYWRfa2VybmVsX3N0cl9wcm90byA9IHsKIAkuZ3BsX29ubHkJPSB0cnVlLAogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzJfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmcyX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIApAQCAtMzI4LDcgJiM0MzszMjgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX2NvbXBhdF9wcm90byA9IHsKIAkuZ3BsX29ubHkJPSB0cnVlLAogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzJfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmcyX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIApAQCAtMzQ3LDcgJiM0MzszNDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX2NvbXBhdF9zdHJfcHJvdG8gPSB7CiAJLmdwbF9vbmx5CT0gdHJ1ZSwKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmcyX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnMl90eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfSEFTX05PTl9PVkVSTEFQUElOR19BRERSRVNTX1NQQUNFICovCkBAIC0zODMsNyAmIzQzOzM4Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3Byb2JlX3dyaXRlX3VzZXJfcHJvdG8gPSB7CiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRSwKIH07CiAKICNkZWZpbmUgTUFYX1RSQUNFX1BSSU5US19WQVJBUkdTCTMKQEAgLTQxOCw3ICYjNDM7NDE4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdHJhY2VfcHJpbnRrX3Byb3RvID0gewogCS5ncGxfb25seQk9IHRydWUsCiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnMl90eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmcyX3R5cGUJPSBBUkdfTUVNX1NJWkUsCiB9OwogCiBzdGF0aWMgdm9pZCBfX3NldF9wcmludGtfY2xyX2V2ZW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTQ3NCw5ICYjNDM7NDc0LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdHJhY2VfdnByaW50a19wcm90byA9IHsKIAkuZ3BsX29ubHkJPSB0cnVlLAogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzJfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnMl90eXBlCT0gQVJHX01FTV9TSVpFLAogCS5hcmczX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IFBUUl9NQVlCRV9OVUxMIHwgTUVNX1JET05MWSwKLQkuYXJnNF90eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzRfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogfTsKIAogY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpicGZfZ2V0X3RyYWNlX3ZwcmludGtfcHJvdG8odm9pZCkKQEAgLTUxOCw5ICYjNDM7NTE4LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2VxX3ByaW50Zl9wcm90byA9IHsKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19CVEZfSUQsCiAJLmFyZzFfYnRmX2lkCT0gJmFtcDtidGZfc2VxX2ZpbGVfaWRzWzBdLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFLAogCS5hcmc0X3R5cGUgICAgICA9IEFSR19QVFJfVE9fTUVNIHwgUFRSX01BWUJFX05VTEwgfCBNRU1fUkRPTkxZLAotCS5hcmc1X3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmc1X3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogfTsKIAogQlBGX0NBTExfMyhicGZfc2VxX3dyaXRlLCBzdHJ1Y3Qgc2VxX2ZpbGUgKiwgbSwgY29uc3Qgdm9pZCAqLCBkYXRhLCB1MzIsIGxlbikKQEAgLTUzNSw3ICYjNDM7NTM1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2VxX3dyaXRlX3Byb3RvID0gewogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0JURl9JRCwKIAkuYXJnMV9idGZfaWQJPSAmYW1wO2J0Zl9zZXFfZmlsZV9pZHNbMF0sCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogfTsKIAogQlBGX0NBTExfNChicGZfc2VxX3ByaW50Zl9idGYsIHN0cnVjdCBzZXFfZmlsZSAqLCBtLCBzdHJ1Y3QgYnRmX3B0ciAqLCBwdHIsCkBAIC01NTksNyAmIzQzOzU1OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NlcV9wcmludGZfYnRmX3Byb3RvID0gewogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0JURl9JRCwKIAkuYXJnMV9idGZfaWQJPSAmYW1wO2J0Zl9zZXFfZmlsZV9pZHNbMF0sCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmc0X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwogCkBAIC02MzMsNyAmIzQzOzYzMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3BlcmZfZXZlbnRfcmVhZF92YWx1ZV9wcm90byA9IHsKIAkuYXJnMV90eXBlCT0gQVJHX0NPTlNUX01BUF9QVFIsCiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmc0X3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzRfdHlwZQk9IEFSR19NRU1fU0laRSwKIH07CiAKIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqYnBmX2dldF9wZXJmX2V2ZW50X3JlYWRfdmFsdWVfcHJvdG8odm9pZCkKQEAgLTczMCw3ICYjNDM7NzMwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcGVyZl9ldmVudF9vdXRwdXRfcHJvdG8gPSB7CiAJLmFyZzJfdHlwZQk9IEFSR19DT05TVF9NQVBfUFRSLAogCS5hcmczX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzRfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnNV90eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzVfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogfTsKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgYnBmX2V2ZW50X291dHB1dF9uZXN0X2xldmVsKTsKQEAgLTk5Niw3ICYjNDM7OTk2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZF9wYXRoX3Byb3RvID0gewogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0JURl9JRCwKIAkuYXJnMV9idGZfaWQJPSAmYW1wO2JwZl9kX3BhdGhfYnRmX2lkc1swXSwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fV1JJVEUsCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYWxsb3dlZAk9IGJwZl9kX3BhdGhfYWxsb3dlZCwKIH07CiAKQEAgLTEwNTMsOSAmIzQzOzEwNTMsOSBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NucHJpbnRmX2J0Zl9wcm90byA9IHsKIAkuZ3BsX29ubHkJPSBmYWxzZSwKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fV1JJVEUsCi0JLmFyZzJfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnMl90eXBlCT0gQVJHX01FTV9TSVpFLAogCS5hcmczX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzRfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnNF90eXBlCT0gQVJHX01FTV9TSVpFLAogCS5hcmc1X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwogCkBAIC0xMjE4LDcgJiM0MzsxMjE4LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfYnJhbmNoX3NuYXBzaG90X3Byb3RvID0gewogCS5ncGxfb25seQk9IHRydWUsCiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLQkuYXJnMl90eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzJfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogfTsKIAogQlBGX0NBTExfMyhnZXRfZnVuY19hcmcsIHZvaWQgKiwgY3R4LCB1MzIsIG4sIHU2NCAqLCB2YWx1ZSkKQEAgLTE0MjEsNyAmIzQzOzE0MjEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wZXJmX2V2ZW50X291dHB1dF9wcm90b190cCA9IHsKIAkuYXJnMl90eXBlCT0gQVJHX0NPTlNUX01BUF9QVFIsCiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnNF90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmc1X3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnNV90eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiB9OwogCiBCUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZF90cCwgdm9pZCAqLCB0cF9idWZmLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsCkBAIC0xNDYyLDcgJiM0MzsxNDYyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvX3RwID0gewogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzRfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKQEAgLTE1MjQsMTIgJiM0MzsxNTI0LDEyIEBAIEJQRl9DQUxMXzMoYnBmX3BlcmZfcHJvZ19yZWFkX3ZhbHVlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCwKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcGVyZl9wcm9nX3JlYWRfdmFsdWVfcHJvdG8gPSB7Ci0gICAgICAgICAuZnVuYyAgICAgICAgICAgPSBicGZfcGVyZl9wcm9nX3JlYWRfdmFsdWUsCi0gICAgICAgICAuZ3BsX29ubHkgICAgICAgPSB0cnVlLAotICAgICAgICAgLnJldF90eXBlICAgICAgID0gUkVUX0lOVEVHRVIsCi0gICAgICAgICAuYXJnMV90eXBlICAgICAgPSBBUkdfUFRSX1RPX0NUWCwKLSAgICAgICAgIC5hcmcyX3R5cGUgICAgICA9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLSAgICAgICAgIC5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuZnVuYyAgICAgICAgICAgPSBicGZfcGVyZl9wcm9nX3JlYWRfdmFsdWUsCiYjNDM7CS5ncGxfb25seSAgICAgICA9IHRydWUsCiYjNDM7CS5yZXRfdHlwZSAgICAgICA9IFJFVF9JTlRFR0VSLAomIzQzOwkuYXJnMV90eXBlICAgICAgPSBBUkdfUFRSX1RPX0NUWCwKJiM0MzsJLmFyZzJfdHlwZSAgICAgID0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAomIzQzOwkuYXJnM190eXBlICAgICAgPSBBUkdfTUVNX1NJWkUsCiB9OwogCiBCUEZfQ0FMTF80KGJwZl9yZWFkX2JyYW5jaF9yZWNvcmRzLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCwKQEAgLTE1NjYsNyAmIzQzOzE1NjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9yZWFkX2JyYW5jaF9yZWNvcmRzX3Byb3RvID0gewogCS5yZXRfdHlwZSAgICAgICA9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUgICAgICA9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUgICAgICA9IEFSR19QVFJfVE9fTUVNX09SX05VTEwgfCBNRU1fV1JJVEUsCi0JLmFyZzNfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzNfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzRfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLAogfTsKIApAQCAtMTY0Niw3ICYjNDM7MTY0Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3BlcmZfZXZlbnRfb3V0cHV0X3Byb3RvX3Jhd190cCA9IHsKIAkuYXJnMl90eXBlCT0gQVJHX0NPTlNUX01BUF9QVFIsCiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnNF90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmc1X3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnNV90eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiB9OwogCiBleHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2Jfb3V0cHV0X3Byb3RvOwpAQCAtMTcwMSw3ICYjNDM7MTcwMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19wcm90b19yYXdfdHAgPSB7CiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnNF90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCAwYjdhZmRkMGFlNDc0OC4uZWIwYjcwNmFmNGIyOTYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC0xNzQ3LDcgJiM0MzsxNzQ3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX3N0b3JlX2J5dGVzX3Byb3RvID0gewogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmczX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzRfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnNF90eXBlCT0gQVJHX01FTV9TSVpFLAogCS5hcmc1X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwogCkBAIC0xNzg0LDcgJiM0MzsxNzg0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2xvYWRfYnl0ZXNfcHJvdG8gPSB7CiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzNfdHlwZQk9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLQkuYXJnNF90eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmc0X3R5cGUJPSBBUkdfTUVNX1NJWkUsCiB9OwogCiBpbnQgX19icGZfc2tiX2xvYWRfYnl0ZXMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZnNldCwgdm9pZCAqdG8sIHUzMiBsZW4pCkBAIC0xODIzLDcgJiM0MzsxODIzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZmxvd19kaXNzZWN0b3JfbG9hZF9ieXRlc19wcm90byA9IHsKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmc0X3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzRfdHlwZQk9IEFSR19NRU1fU0laRSwKIH07CiAKIEJQRl9DQUxMXzUoYnBmX3NrYl9sb2FkX2J5dGVzX3JlbGF0aXZlLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsCkBAIC0xODY3LDcgJiM0MzsxODY3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2xvYWRfYnl0ZXNfcmVsYXRpdmVfcHJvdG8gPSB7CiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzNfdHlwZQk9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLQkuYXJnNF90eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmc0X3R5cGUJPSBBUkdfTUVNX1NJWkUsCiAJLmFyZzVfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKQEAgLTIwNjMsOSAmIzQzOzIwNjMsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jc3VtX2RpZmZfcHJvdG8gPSB7CiAJLnBrdF9hY2Nlc3MJPSB0cnVlLAogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IFBUUl9NQVlCRV9OVUxMIHwgTUVNX1JET05MWSwKLQkuYXJnMl90eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzJfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmczX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IFBUUl9NQVlCRV9OVUxMIHwgTUVNX1JET05MWSwKLQkuYXJnNF90eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzRfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmc1X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwogCkBAIC0yNjIxLDcgJiM0MzsyNjIxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcmVkaXJlY3RfbmVpZ2hfcHJvdG8gPSB7CiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IFBUUl9NQVlCRV9OVUxMIHwgTUVNX1JET05MWSwKLQkuYXJnM190eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnM190eXBlICAgICAgPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnNF90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIApAQCAtNDE5NCw3ICYjNDM7NDE5NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9sb2FkX2J5dGVzX3Byb3RvID0gewogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmczX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzRfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnNF90eXBlCT0gQVJHX01FTV9TSVpFLAogfTsKIAogaW50IF9fYnBmX3hkcF9sb2FkX2J5dGVzKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgb2Zmc2V0LCB2b2lkICpidWYsIHUzMiBsZW4pCkBAIC00MjI2LDcgJiM0Mzs0MjI2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX3N0b3JlX2J5dGVzX3Byb3RvID0gewogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmczX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzRfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnNF90eXBlCT0gQVJHX01FTV9TSVpFLAogfTsKIAogaW50IF9fYnBmX3hkcF9zdG9yZV9ieXRlcyhzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIG9mZnNldCwgdm9pZCAqYnVmLCB1MzIgbGVuKQpAQCAtNDc4OSw3ICYjNDM7NDc4OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9ldmVudF9vdXRwdXRfcHJvdG8gPSB7CiAJLmFyZzJfdHlwZQk9IEFSR19DT05TVF9NQVBfUFRSLAogCS5hcmczX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzRfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnNV90eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzVfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogfTsKIAogQlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9za2Jfb3V0cHV0X2J0Zl9pZHMsIHN0cnVjdCwgc2tfYnVmZikKQEAgLTQ4MDMsNyAmIzQzOzQ4MDMsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9vdXRwdXRfcHJvdG8gPSB7CiAJLmFyZzJfdHlwZQk9IEFSR19DT05TVF9NQVBfUFRSLAogCS5hcmczX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzRfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnNV90eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzVfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogfTsKIAogc3RhdGljIHVuc2lnbmVkIHNob3J0IGJwZl90dW5uZWxfa2V5X2FmKHU2NCBmbGFncykKQEAgLTQ4ODYsNyAmIzQzOzQ4ODYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3R1bm5lbF9rZXlfcHJvdG8gPSB7CiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFLAogCS5hcmc0X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwogCkBAIC00OTIxLDcgJiM0Mzs0OTIxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2dldF90dW5uZWxfb3B0X3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWV0YWRhdGFfZHN0IF9fcGVyY3B1ICptZF9kc3Q7CkBAIC01MDAzLDcgJiM0Mzs1MDAzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX3NldF90dW5uZWxfa2V5X3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRSwKIAkuYXJnNF90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIApAQCAtNTAzMSw3ICYjNDM7NTAzMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9zZXRfdHVubmVsX29wdF9wcm90byA9IHsKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkUsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICoKQEAgLTUyMDMsNyAmIzQzOzUyMDMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfZXZlbnRfb3V0cHV0X3Byb3RvID0gewogCS5hcmcyX3R5cGUJPSBBUkdfQ09OU1RfTUFQX1BUUiwKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc0X3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzVfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmc1X3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIH07CiAKIEJURl9JRF9MSVNUX1NJTkdMRShicGZfeGRwX291dHB1dF9idGZfaWRzLCBzdHJ1Y3QsIHhkcF9idWZmKQpAQCAtNTIxNyw3ICYjNDM7NTIxNyw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX291dHB1dF9wcm90byA9IHsKIAkuYXJnMl90eXBlCT0gQVJHX0NPTlNUX01BUF9QVFIsCiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnNF90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmc1X3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnNV90eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiB9OwogCiBCUEZfQ0FMTF8xKGJwZl9nZXRfc29ja2V0X2Nvb2tpZSwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiKQpAQCAtNTc2NCw3ICYjNDM7NTc2NCw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfc2V0c29ja29wdF9wcm90byA9IHsKIAkuYXJnMl90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmczX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzRfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnNV90eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmc1X3R5cGUJPSBBUkdfTUVNX1NJWkUsCiB9OwogCiBCUEZfQ0FMTF81KGJwZl9za19nZXRzb2Nrb3B0LCBzdHJ1Y3Qgc29jayAqLCBzaywgaW50LCBsZXZlbCwKQEAgLTU3ODEsNyAmIzQzOzU3ODEsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX2dldHNvY2tvcHRfcHJvdG8gPSB7CiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc0X3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzVfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnNV90eXBlCT0gQVJHX01FTV9TSVpFLAogfTsKIAogQlBGX0NBTExfNShicGZfc2tfc2V0c29ja29wdF9ub2RlbGF5LCBzdHJ1Y3Qgc29jayAqLCBzaywgaW50LCBsZXZlbCwKQEAgLTU4MDUsNyAmIzQzOzU4MDUsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX3NldHNvY2tvcHRfbm9kZWxheV9wcm90byA9IHsKIAkuYXJnMl90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmczX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzRfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnNV90eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmc1X3R5cGUJPSBBUkdfTUVNX1NJWkUsCiB9OwogCiBCUEZfQ0FMTF81KGJwZl91bmxvY2tlZF9za19zZXRzb2Nrb3B0LCBzdHJ1Y3Qgc29jayAqLCBzaywgaW50LCBsZXZlbCwKQEAgLTU4MjIsNyAmIzQzOzU4MjIsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3VubG9ja2VkX3NrX3NldHNvY2tvcHRfcHJvdG8gPSB7CiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc0X3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzVfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnNV90eXBlCT0gQVJHX01FTV9TSVpFLAogfTsKIAogQlBGX0NBTExfNShicGZfdW5sb2NrZWRfc2tfZ2V0c29ja29wdCwgc3RydWN0IHNvY2sgKiwgc2ssIGludCwgbGV2ZWwsCkBAIC01ODM5LDcgJiM0Mzs1ODM5LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl91bmxvY2tlZF9za19nZXRzb2Nrb3B0X3Byb3RvID0gewogCS5hcmcyX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzNfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnNF90eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmc1X3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzVfdHlwZQk9IEFSR19NRU1fU0laRSwKIH07CiAKIEJQRl9DQUxMXzUoYnBmX3NvY2tfYWRkcl9zZXRzb2Nrb3B0LCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICosIGN0eCwKQEAgLTU4NTYsNyAmIzQzOzU4NTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2V0c29ja29wdF9wcm90byA9IHsKIAkuYXJnMl90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmczX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzRfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnNV90eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmc1X3R5cGUJPSBBUkdfTUVNX1NJWkUsCiB9OwogCiBCUEZfQ0FMTF81KGJwZl9zb2NrX2FkZHJfZ2V0c29ja29wdCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsCkBAIC01ODczLDcgJiM0Mzs1ODczLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19hZGRyX2dldHNvY2tvcHRfcHJvdG8gPSB7CiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc0X3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzVfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnNV90eXBlCT0gQVJHX01FTV9TSVpFLAogfTsKIAogc3RhdGljIGludCBza19icGZfc2V0X2dldF9ieXBhc3NfcHJvdF9tZW0oc3RydWN0IHNvY2sgKnNrLApAQCAtNTkxOCw3ICYjNDM7NTkxOCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfY3JlYXRlX3NldHNvY2tvcHRfcHJvdG8gPSB7CiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc0X3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzVfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnNV90eXBlCT0gQVJHX01FTV9TSVpFLAogfTsKIAogQlBGX0NBTExfNShicGZfc29ja19jcmVhdGVfZ2V0c29ja29wdCwgc3RydWN0IHNvY2sgKiwgc2ssIGludCwgbGV2ZWwsCkBAIC01OTQ0LDcgJiM0Mzs1OTQ0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19jcmVhdGVfZ2V0c29ja29wdF9wcm90byA9IHsKIAkuYXJnMl90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmczX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzRfdHlwZQk9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLQkuYXJnNV90eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmc1X3R5cGUJPSBBUkdfTUVNX1NJWkUsCiB9OwogCiBCUEZfQ0FMTF81KGJwZl9zb2NrX29wc19zZXRzb2Nrb3B0LCBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKiwgYnBmX3NvY2ssCkBAIC01OTcwLDcgJiM0Mzs1OTcwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19vcHNfc2V0c29ja29wdF9wcm90byA9IHsKIAkuYXJnMl90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmczX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzRfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnNV90eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmc1X3R5cGUJPSBBUkdfTUVNX1NJWkUsCiB9OwogCiBzdGF0aWMgaW50IGJwZl9zb2NrX29wc19nZXRfc3luKHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqYnBmX3NvY2ssCkBAIC02MDgwLDcgJiM0Mzs2MDgwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19vcHNfZ2V0c29ja29wdF9wcm90byA9IHsKIAkuYXJnMl90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmczX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzRfdHlwZQk9IEFSR19QVFJfVE9fVU5JTklUX01FTSwKLQkuYXJnNV90eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmc1X3R5cGUJPSBBUkdfTUVNX1NJWkUsCiB9OwogCiBCUEZfQ0FMTF8yKGJwZl9zb2NrX29wc19jYl9mbGFnc19zZXQsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqLCBicGZfc29jaywKQEAgLTYxNDcsNyAmIzQzOzYxNDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9iaW5kX3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRSwKIH07CiAKICNpZmRlZiBDT05GSUdfWEZSTQpAQCAtNjIwMCw3ICYjNDM7NjIwMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfeGZybV9zdGF0ZV9wcm90byA9IHsKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmc0X3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzRfdHlwZQk9IEFSR19NRU1fU0laRSwKIAkuYXJnNV90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKICNlbmRpZgpAQCAtNjYwNyw3ICYjNDM7NjYwNyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9maWJfbG9va3VwX3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9JTlRFR0VSLAogCS5hcmcxX3R5cGUgICAgICA9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUgICAgICA9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1dSSVRFLAotCS5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnM190eXBlICAgICAgPSBBUkdfTUVNX1NJWkUsCiAJLmFyZzRfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKQEAgLTY2NjcsNyAmIzQzOzY2NjcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZmliX2xvb2t1cF9wcm90byA9IHsKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlICAgICAgPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9XUklURSwKLQkuYXJnM190eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzNfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFLAogCS5hcmc0X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwogCkBAIC02ODY1LDcgJiM0Mzs2ODY1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X2luX3B1c2hfZW5jYXBfcHJvdG8gPSB7CiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzNfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnNF90eXBlCT0gQVJHX0NPTlNUX1NJWkUKJiM0MzsJLmFyZzRfdHlwZQk9IEFSR19NRU1fU0laRQogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3htaXRfcHVzaF9lbmNhcF9wcm90byA9IHsKQEAgLTY4NzUsNyAmIzQzOzY4NzUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3RfeG1pdF9wdXNoX2VuY2FwX3Byb3RvID0gewogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmczX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzRfdHlwZQk9IEFSR19DT05TVF9TSVpFCiYjNDM7CS5hcmc0X3R5cGUJPSBBUkdfTUVNX1NJWkUKIH07CiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKQpAQCAtNjkxOSw3ICYjNDM7NjkxOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzX3Byb3RvID0gewogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmczX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzRfdHlwZQk9IEFSR19DT05TVF9TSVpFCiYjNDM7CS5hcmc0X3R5cGUJPSBBUkdfTUVNX1NJWkUKIH07CiAKIHN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpCkBAIC03MDA4LDcgJiM0Mzs3MDA4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3NlZzZfYWN0aW9uX3Byb3RvID0gewogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmczX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzRfdHlwZQk9IEFSR19DT05TVF9TSVpFCiYjNDM7CS5hcmc0X3R5cGUJPSBBUkdfTUVNX1NJWkUKIH07CiAKIEJQRl9DQUxMXzMoYnBmX2x3dF9zZWc2X2FkanVzdF9zcmgsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBvZmZzZXQsCkBAIC03MjQ5LDcgJiM0Mzs3MjQ5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7CiAJLnJldF90eXBlCT0gUkVUX1BUUl9UT19TT0NLX0NPTU1PTl9PUl9OVUxMLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzRfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnNV90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKQEAgLTcyNjgsNyAmIzQzOzcyNjgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19sb29rdXBfdGNwX3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnNF90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc1X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwpAQCAtNzI4Nyw3ICYjNDM7NzI4Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX2xvb2t1cF91ZHBfcHJvdG8gPSB7CiAJLnJldF90eXBlCT0gUkVUX1BUUl9UT19TT0NLRVRfT1JfTlVMTCwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmc0X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzVfdHlwZQk9IEFSR19BTllUSElORywKIH07CkBAIC03MzExLDcgJiM0Mzs3MzExLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7CiAJLnJldF90eXBlCT0gUkVUX1BUUl9UT19TT0NLX0NPTU1PTl9PUl9OVUxMLAogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzRfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnNV90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKQEAgLTczMzUsNyAmIzQzOzczMzUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za19sb29rdXBfdGNwX3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkVfT1JfWkVSTywKIAkuYXJnNF90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmc1X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwpAQCAtNzM1OSw3ICYjNDM7NzM1OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjX3NrX2xvb2t1cF91ZHBfcHJvdG8gPSB7CiAJLnJldF90eXBlCT0gUkVUX1BUUl9UT19TT0NLRVRfT1JfTlVMTCwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmc0X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzVfdHlwZQk9IEFSR19BTllUSElORywKIH07CkBAIC03Mzk3LDcgJiM0Mzs3Mzk3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX3NrX2xvb2t1cF91ZHBfcHJvdG8gPSB7CiAJLnJldF90eXBlICAgICAgID0gUkVUX1BUUl9UT19TT0NLRVRfT1JfTlVMTCwKIAkuYXJnMV90eXBlICAgICAgPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzNfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzNfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzRfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLAogCS5hcmc1X3R5cGUgICAgICA9IEFSR19BTllUSElORywKIH07CkBAIC03NDIxLDcgJiM0Mzs3NDIxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX3NrY19sb29rdXBfdGNwX3Byb3RvID0gewogCS5yZXRfdHlwZSAgICAgICA9IFJFVF9QVFJfVE9fU09DS19DT01NT05fT1JfTlVMTCwKIAkuYXJnMV90eXBlICAgICAgPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzNfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzNfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzRfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLAogCS5hcmc1X3R5cGUgICAgICA9IEFSR19BTllUSElORywKIH07CkBAIC03NDQ1LDcgJiM0Mzs3NDQ1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX3NrX2xvb2t1cF90Y3BfcHJvdG8gPSB7CiAJLnJldF90eXBlICAgICAgID0gUkVUX1BUUl9UT19TT0NLRVRfT1JfTlVMTCwKIAkuYXJnMV90eXBlICAgICAgPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzNfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzNfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiAJLmFyZzRfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLAogCS5hcmc1X3R5cGUgICAgICA9IEFSR19BTllUSElORywKIH07CkBAIC03NDY1LDcgJiM0Mzs3NDY1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19hZGRyX3NrY19sb29rdXBfdGNwX3Byb3RvID0gewogCS5yZXRfdHlwZQk9IFJFVF9QVFJfVE9fU09DS19DT01NT05fT1JfTlVMTCwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmc0X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzVfdHlwZQk9IEFSR19BTllUSElORywKIH07CkBAIC03NDg0LDcgJiM0Mzs3NDg0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3BfcHJvdG8gPSB7CiAJLnJldF90eXBlCT0gUkVUX1BUUl9UT19TT0NLRVRfT1JfTlVMTCwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmc0X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzVfdHlwZQk9IEFSR19BTllUSElORywKIH07CkBAIC03NTAzLDcgJiM0Mzs3NTAzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHBfcHJvdG8gPSB7CiAJLnJldF90eXBlCT0gUkVUX1BUUl9UT19TT0NLRVRfT1JfTlVMTCwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTywKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRV9PUl9aRVJPLAogCS5hcmc0X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiAJLmFyZzVfdHlwZQk9IEFSR19BTllUSElORywKIH07CkBAIC03ODIzLDkgJiM0Mzs3ODIzLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX2NoZWNrX3N5bmNvb2tpZV9wcm90byA9IHsKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT04sCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnM190eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmczX3R5cGUJPSBBUkdfTUVNX1NJWkUsCiAJLmFyZzRfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSwKLQkuYXJnNV90eXBlCT0gQVJHX0NPTlNUX1NJWkUsCiYjNDM7CS5hcmc1X3R5cGUJPSBBUkdfTUVNX1NJWkUsCiB9OwogCiBCUEZfQ0FMTF81KGJwZl90Y3BfZ2VuX3N5bmNvb2tpZSwgc3RydWN0IHNvY2sgKiwgc2ssIHZvaWQgKiwgaXBoLCB1MzIsIGlwaF9sZW4sCkBAIC03ODkyLDkgJiM0Mzs3ODkyLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX2dlbl9zeW5jb29raWVfcHJvdG8gPSB7CiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQlRGX0lEX1NPQ0tfQ09NTU9OLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFLAogCS5hcmc0X3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzVfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnNV90eXBlCT0gQVJHX01FTV9TSVpFLAogfTsKIAogQlBGX0NBTExfMyhicGZfc2tfYXNzaWduLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHN0cnVjdCBzb2NrICosIHNrLCB1NjQsIGZsYWdzKQpAQCAtODA0OCw3ICYjNDM7ODA0OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfb3BzX2xvYWRfaGRyX29wdF9wcm90byA9IHsKIAkucmV0X3R5cGUJPSBSRVRfSU5URUdFUiwKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1dSSVRFLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzNfdHlwZQk9IEFSR19NRU1fU0laRSwKIAkuYXJnNF90eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIApAQCAtODEyNiw3ICYjNDM7ODEyNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfb3BzX3N0b3JlX2hkcl9vcHRfcHJvdG8gPSB7CiAJLnJldF90eXBlCT0gUkVUX0lOVEVHRVIsCiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fQ1RYLAogCS5hcmcyX3R5cGUJPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksCi0JLmFyZzNfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFLAogCS5hcmc0X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwogCkBAIC04MjIxLDcgJiM0Mzs4MjIxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX3Jhd19nZW5fc3luY29va2llX2lwdjRfcHJvdG8gPSB7CiAJLmFyZzFfdHlwZQk9IEFSR19QVFJfVE9fRklYRURfU0laRV9NRU0gfCBNRU1fUkRPTkxZLAogCS5hcmcxX3NpemUJPSBzaXplb2Yoc3RydWN0IGlwaGRyKSwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiB9OwogCiBCUEZfQ0FMTF8zKGJwZl90Y3BfcmF3X2dlbl9zeW5jb29raWVfaXB2Niwgc3RydWN0IGlwdjZoZHIgKiwgaXBoLApAQCAtODI1Myw3ICYjNDM7ODI1Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjcF9yYXdfZ2VuX3N5bmNvb2tpZV9pcHY2X3Byb3RvID0gewogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0ZJWEVEX1NJWkVfTUVNIHwgTUVNX1JET05MWSwKIAkuYXJnMV9zaXplCT0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwKIAkuYXJnMl90eXBlCT0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLAotCS5hcmczX3R5cGUJPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLAomIzQzOwkuYXJnM190eXBlCT0gQVJHX01FTV9TSVpFX09SX1pFUk8sCiB9OwogCiBCUEZfQ0FMTF8yKGJwZl90Y3BfcmF3X2NoZWNrX3N5bmNvb2tpZV9pcHY0LCBzdHJ1Y3QgaXBoZHIgKiwgaXBoLApAQCAtMTE3MjYsNyAmIzQzOzExNzI2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBza19yZXVzZXBvcnRfbG9hZF9ieXRlc19wcm90byA9IHsKIAkuYXJnMV90eXBlCT0gQVJHX1BUUl9UT19DVFgsCiAJLmFyZzJfdHlwZQk9IEFSR19BTllUSElORywKIAkuYXJnM190eXBlCT0gQVJHX1BUUl9UT19VTklOSVRfTUVNLAotCS5hcmc0X3R5cGUJPSBBUkdfQ09OU1RfU0laRSwKJiM0MzsJLmFyZzRfdHlwZQk9IEFSR19NRU1fU0laRSwKIH07CiAKIEJQRl9DQUxMXzUoc2tfcmV1c2Vwb3J0X2xvYWRfYnl0ZXNfcmVsYXRpdmUsCkBAIC0xMTc0NCw3ICYjNDM7MTE3NDQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIHNrX3JldXNlcG9ydF9sb2FkX2J5dGVzX3JlbGF0aXZlX3Byb3RvID0gewogCS5hcmcxX3R5cGUJPSBBUkdfUFRSX1RPX0NUWCwKIAkuYXJnMl90eXBlCT0gQVJHX0FOWVRISU5HLAogCS5hcmczX3R5cGUJPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sCi0JLmFyZzRfdHlwZQk9IEFSR19DT05TVF9TSVpFLAomIzQzOwkuYXJnNF90eXBlCT0gQVJHX01FTV9TSVpFLAogCS5hcmc1X3R5cGUJPSBBUkdfQU5ZVEhJTkcsCiB9OwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwppbmRleCBiZTk3ZjY4ODdmMGU3Zi4uYTgxZmFhNzA5ZGQ1YmIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwpAQCAtNjcsNiAmIzQzOzY3LDcgQEAKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfbWFza2luZy5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9tYXlfZ290b18xLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX21heV9nb3RvXzIuc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX21lbV9zaXplX3JlZy5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9tZXRhX2FjY2Vzcy5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9tb3ZzeC5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9tdHUuc2tlbC5oJiMzNDsKQEAgLTIyMSw2ICYjNDM7MjIyLDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX21hcF9yZXRfdmFsKHZvaWQpICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX21hcF9yZXRfdmFsKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX21hc2tpbmcodm9pZCkgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX21hc2tpbmcpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfbWF5X2dvdG9fMSh2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfbWF5X2dvdG9fMSk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9tYXlfZ290b18yKHZvaWQpICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9tYXlfZ290b18yKTsgfQomIzQzO3ZvaWQgdGVzdF92ZXJpZmllcl9tZW1fc2l6ZV9yZWcodm9pZCkgICAgICAgICB7IFJVTih2ZXJpZmllcl9tZW1fc2l6ZV9yZWcpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfbWV0YV9hY2Nlc3Modm9pZCkgICAgICAgICAgeyBSVU4odmVyaWZpZXJfbWV0YV9hY2Nlc3MpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfbW92c3godm9pZCkgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX21vdnN4KTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX211bCh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX211bCk7IH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jZ3JwX2tmdW5jX2ZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jZ3JwX2tmdW5jX2ZhaWx1cmUuYwppbmRleCBkMGQ2NWQ2ZDQ1MGNmNS4uZWZlN2JjYWU3MGY4NWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jZ3JwX2tmdW5jX2ZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY2dycF9rZnVuY19mYWlsdXJlLmMKQEAgLTY0LDcgJiM0Mzs2NCw3IEBAIGludCBCUEZfUFJPRyhjZ3JwX2tmdW5jX2FjcXVpcmVfbm9fbnVsbF9jaGVjaywgc3RydWN0IGNncm91cCAqY2dycCwgY29uc3QgY2hhciAqCiB9CiAKIFNFQygmIzM0O3RwX2J0Zi9jZ3JvdXBfbWtkaXImIzM0OykKLV9fZmFpbHVyZSBfX21zZygmIzM0O1IxIHBvaW50ZXIgdHlwZSBTVFJVQ1QgY2dyb3VwIG11c3QgcG9pbnQmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtSMSBpcyBmcCBleHBlY3RlZCBTVFJVQ1QgY2dyb3VwJiMzNDspCiBpbnQgQlBGX1BST0coY2dycF9rZnVuY19hY3F1aXJlX2ZwLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBjb25zdCBjaGFyICpwYXRoKQogewogCXN0cnVjdCBjZ3JvdXAgKmFjcXVpcmVkLCAqc3RhY2tfY2dycCA9IChzdHJ1Y3QgY2dyb3VwICopJmFtcDtwYXRoOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21lbV9yZG9ubHlfdW50cnVzdGVkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWVtX3Jkb25seV91bnRydXN0ZWQuYwppbmRleCA1YjQ0NTM3NDdjMjMwOC4uMDk1MmQxZWJmMGYxN2EgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tZW1fcmRvbmx5X3VudHJ1c3RlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tZW1fcmRvbmx5X3VudHJ1c3RlZC5jCkBAIC0xMzcsNyAmIzQzOzEzNyw3IEBAIGludCBoZWxwZXJfcGFyYW1fbm90X29rKHZvaWQgKmN0eCkKIAogCXAgPSBicGZfcmRvbmx5X2Nhc3QoMCwgMCk7CiAJLyoKLQkgKiBBbnkgaGVscGVyIHdpdGggQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyBjb25zdHJhaW50IHdpbGwgZG8sCiYjNDM7CSAqIEFueSBoZWxwZXIgd2l0aCBBUkdfTUVNX1NJWkVfT1JfWkVSTyBjb25zdHJhaW50IHdpbGwgZG8sCiAJICogdGhlIG1vc3QgcGVybWlzc2l2ZSBjb25zdHJhaW50CiAJICovCiAJYnBmX2NvcHlfZnJvbV91c2VyKHAsIDAsICh2b2lkICopNDIpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfa2Z1bmNfZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfa2Z1bmNfZmFpbHVyZS5jCmluZGV4IDg5NDJiNTQ3ODEyOTE3Li41Yzk5YjFlNjUzMmJmZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfa2Z1bmNfZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX2tmdW5jX2ZhaWx1cmUuYwpAQCAtNTAsNyAmIzQzOzUwLDcgQEAgaW50IEJQRl9QUk9HKHRhc2tfa2Z1bmNfYWNxdWlyZV91bnRydXN0ZWQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IGNsb25lX2YKIH0KIAogU0VDKCYjMzQ7dHBfYnRmL3Rhc2tfbmV3dGFzayYjMzQ7KQotX19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgcG9pbnRlciB0eXBlIFNUUlVDVCB0YXNrX3N0cnVjdCBtdXN0IHBvaW50JiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgaXMgZnAgZXhwZWN0ZWQgU1RSVUNUIHRhc2tfc3RydWN0JiMzNDspCiBpbnQgQlBGX1BST0codGFza19rZnVuY19hY3F1aXJlX2ZwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHU2NCBjbG9uZV9mbGFncykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmFjcXVpcmVkLCAqc3RhY2tfdGFzayA9IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKikmYW1wO2Nsb25lX2ZsYWdzOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2JvdW5kcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2JvdW5kcy5jCmluZGV4IGJjMDM4YWMyZGY5OGUyLi4xYTI3M2U0MTZmZWRmZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2JvdW5kcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9ib3VuZHMuYwpAQCAtMTE5NSw3ICYjNDM7MTE5NSw3IEBAIGwwXyU9OglyMSA9IHI2OwkJCQkJXAogCXIzICYjNDM7PSAtODsJCQkJCVwKIAlyNSA9IDA7CQkJCQkJXAogCS8qIFRoZSA0dGggYXJndW1lbnQgb2YgYnBmX3NrYl9zdG9yZV9ieXRlcyBpcyBkZWZpbmVkIGFzIFwKLQkgKiBBUkdfQ09OU1RfU0laRSwgc28gMCBpcyBub3QgYWxsb3dlZC4gVGhlICYjMzk7cjQgIT0gMCYjMzk7IFwKJiM0MzsJICogQVJHX01FTV9TSVpFLCBzbyAwIGlzIG5vdCBhbGxvd2VkLiBUaGUgJiMzOTtyNCAhPSAwJiMzOTsgXAogCSAqIGlzIHByb3ZpZGluZyB1cyB0aGlzIGV4Y2x1c2lvbiBvZiB6ZXJvIGZyb20gaW5pdGlhbCBcCiAJICogWzAsIDddIHJhbmdlLgkJCQlcCiAJICovCQkJCQkJXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2hlbHBlcl9hY2Nlc3NfdmFyX2xlbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2hlbHBlcl9hY2Nlc3NfdmFyX2xlbi5jCmluZGV4IGYyYzU0ZTRkODllYmVmLi4zNDNmYzA4ZDk3NDc5OCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2hlbHBlcl9hY2Nlc3NfdmFyX2xlbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfYWNjZXNzX3Zhcl9sZW4uYwpAQCAtODUsNyAmIzQzOzg1LDcgQEAgX19uYWtlZCB2b2lkIHN0YWNrX2JpdHdpc2VfYW5kX3plcm9faW5jbHVkZWQodm9pZCkKIAlyMiAmIzQzOz0gLTY0OwkJCQkJXAogCXI0ID0gMDsJCQkJCQlcCiAJLyogQ2FsbCBicGZfcmluZ2J1Zl9vdXRwdXQoKSwgaXQgaXMgb25lIG9mIGEgZmV3IGhlbHBlciBmdW5jdGlvbnMgd2l0aFwKLQkgKiBBUkdfQ09OU1RfU0laRV9PUl9aRVJPIHBhcmFtZXRlciBhbGxvd2VkIGluIHVucHJpdiBtb2RlLlwKJiM0MzsJICogQVJHX01FTV9TSVpFX09SX1pFUk8gcGFyYW1ldGVyIGFsbG93ZWQgaW4gdW5wcml2IG1vZGUuXAogCSAqIEZvciB1bnByaXYgdGhpcyBzaG91bGQgc2lnbmFsIGFuIGVycm9yLCBiZWNhdXNlIG1lbW9yeSBhdCAmYW1wO2ZwWy02NF0gaXNcCiAJICogbm90IGluaXRpYWxpemVkLgkJCQlcCiAJICovCQkJCQkJXApAQCAtMjc4LDcgJiM0MzsyNzgsNyBAQCBfX25ha2VkIHZvaWQgc3RhY2tfam1wX25vX21pbl9jaGVjayh2b2lkKQogCXIyICYjNDM7PSAtNjQ7CQkJCQlcCiAJcjQgPSAwOwkJCQkJCVwKIAkvKiBDYWxsIGJwZl9yaW5nYnVmX291dHB1dCgpLCBpdCBpcyBvbmUgb2YgYSBmZXcgaGVscGVyIGZ1bmN0aW9ucyB3aXRoXAotCSAqIEFSR19DT05TVF9TSVpFX09SX1pFUk8gcGFyYW1ldGVyIGFsbG93ZWQgaW4gdW5wcml2IG1vZGUuXAomIzQzOwkgKiBBUkdfTUVNX1NJWkVfT1JfWkVSTyBwYXJhbWV0ZXIgYWxsb3dlZCBpbiB1bnByaXYgbW9kZS5cCiAJICogRm9yIHVucHJpdiB0aGlzIHNob3VsZCBzaWduYWwgYW4gZXJyb3IsIGJlY2F1c2UgbWVtb3J5IGF0ICZhbXA7ZnBbLTY0XSBpc1wKIAkgKiBub3QgaW5pdGlhbGl6ZWQuCQkJCVwKIAkgKi8JCQkJCQlcCkBAIC03NzgsNyAmIzQzOzc3OCw3IEBAIF9fbmFrZWQgdm9pZCB2YXJpYWJsZV9tZW1vcnlfOF9ieXRlc19sZWFrKHZvaWQpCiAJcjMgJiM0Mzs9IDE7CQkJCQlcCiAJcjQgPSAwOwkJCQkJCVwKIAkvKiBDYWxsIGJwZl9yaW5nYnVmX291dHB1dCgpLCBpdCBpcyBvbmUgb2YgYSBmZXcgaGVscGVyIGZ1bmN0aW9ucyB3aXRoXAotCSAqIEFSR19DT05TVF9TSVpFX09SX1pFUk8gcGFyYW1ldGVyIGFsbG93ZWQgaW4gdW5wcml2IG1vZGUuXAomIzQzOwkgKiBBUkdfTUVNX1NJWkVfT1JfWkVSTyBwYXJhbWV0ZXIgYWxsb3dlZCBpbiB1bnByaXYgbW9kZS5cCiAJICogRm9yIHVucHJpdiB0aGlzIHNob3VsZCBzaWduYWwgYW4gZXJyb3IsIGJlY2F1c2UgbWVtb3J5IHJlZ2lvbiBbMSwgNjRdXAogCSAqIGF0ICZhbXA7ZnBbLTY0XSBpcyBub3QgZnVsbHkgaW5pdGlhbGl6ZWQuCVwKIAkgKi8JCQkJCQlcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfaGVscGVyX3ZhbHVlX2FjY2Vzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2hlbHBlcl92YWx1ZV9hY2Nlc3MuYwppbmRleCA2ZDJhMzg1OTdjMzRmNC4uYzY2MDNhMTE4ZmRjMzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfdmFsdWVfYWNjZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2hlbHBlcl92YWx1ZV9hY2Nlc3MuYwpAQCAtOTEsNyAmIzQzOzkxLDcgQEAgbDBfJT06CWV4aXQ7CQkJCQkJXAogCiAvKiBDYWxsIGEgZnVuY3Rpb24gdGFraW5nIGEgcG9pbnRlciBhbmQgYSBzaXplIHdoaWNoIGRvZXNuJiMzOTt0IGFsbG93IHRoZSBzaXplIHRvCiAgKiBiZSB6ZXJvIChpLmUuIGJwZl90cmFjZV9wcmludGsoKSBkZWNsYXJlcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGJlCi0gKiBBUkdfQ09OU1RfU0laRSwgbm90IEFSR19DT05TVF9TSVpFX09SX1pFUk8pLiBXZSBhdHRlbXB0IHRvIHBhc3MgemVybyBmb3IgdGhlCiYjNDM7ICogQVJHX01FTV9TSVpFLCBub3QgQVJHX01FTV9TSVpFX09SX1pFUk8pLiBXZSBhdHRlbXB0IHRvIHBhc3MgemVybyBmb3IgdGhlCiAgKiBzaXplIGFuZCBleHBlY3QgdG8gZmFpbC4KICAqLwogU0VDKCYjMzQ7dHJhY2Vwb2ludCYjMzQ7KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21lbV9zaXplX3JlZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21lbV9zaXplX3JlZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi43OGE5YWQyMmIxMGRmZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tZW1fc2l6ZV9yZWcuYwpAQCAtMCwwICYjNDM7MSw2MCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9rZnVuY3MuaCYjMzQ7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzO3N0cnVjdCBpbm5lcl9tYXAgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBpbnQpOwomIzQzO30gaW5uZXJfbWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVlfT0ZfTUFQUyk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMSk7CiYjNDM7CV9fdHlwZShrZXksIGludCk7CiYjNDM7CV9fYXJyYXkodmFsdWVzLCBzdHJ1Y3QgaW5uZXJfbWFwKTsKJiM0Mzt9IG91dGVyX21hcCBTRUMoJiMzNDsubWFwcyYjMzQ7KSA9IHsKJiM0MzsJLnZhbHVlcyA9IHsgWzBdID0gJmFtcDtpbm5lcl9tYXAgfSwKJiM0Mzt9OwomIzQzOwomIzQzOy8qIEFuIHVuLW5hcnJvd2VkIG1hcC1vZi1tYXBzIHZhbHVlIG11c3QgYmUgcmVqZWN0ZWQgYXMgYSBfX251bGxhYmxlIGtmdW5jIG1lbSBidWZmZXIgKi8KJiM0MztTRUMoJiMzNDs/dGMmIzM0OykKJiM0MztfX2ZhaWx1cmUKJiM0MztpbnQgbWFwb2ZtYXBzX3ZhbHVlX2FzX2tmdW5jX21lbV9idWYoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgZHB0cjsKJiM0MzsJX191MzIga2V5ID0gMDsKJiM0MzsJdm9pZCAqaW5uZXI7CiYjNDM7CWNoYXIgKnA7CiYjNDM7CiYjNDM7CWlubmVyID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO291dGVyX21hcCwgJmFtcDtrZXkpOwomIzQzOwkvKiBpbnRlbnRpb25hbGx5IE5PVCBOVUxMLWNoZWNrZWQ6IHJlZyBzdGF5cyBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTEwgKi8KJiM0MzsKJiM0MzsJYnBmX2R5bnB0cl9mcm9tX3NrYihza2IsIDAsICZhbXA7ZHB0cik7CiYjNDM7CS8qIHBhc3MgdGhlIHVuLW5hcnJvd2VkIG1hcC1vZi1tYXBzIHZhbHVlIGFzIHRoZSBzY3JhdGNoIGJ1ZmZlciAqLwomIzQzOwlwID0gYnBmX2R5bnB0cl9zbGljZSgmYW1wO2RwdHIsIDAsIGlubmVyLCA4KTsKJiM0MzsJaWYgKHApCiYjNDM7CQlyZXR1cm4gcFswXTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIEFuIHVuLW5hcnJvd2VkIG1hcC1vZi1tYXBzIHZhbHVlIG11c3QgYmUgcmVqZWN0ZWQgYXMgYSBQVFJfTUFZQkVfTlVMTCBoZWxwZXIgbWVtIGJ1ZmZlciAqLwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZmFpbHVyZQomIzQzO2ludCBtYXBvZm1hcHNfdmFsdWVfYXNfaGVscGVyX21lbV9idWYoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJX191MzIga2V5ID0gMDsKJiM0MzsJdm9pZCAqaW5uZXI7CiYjNDM7CiYjNDM7CWlubmVyID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO291dGVyX21hcCwgJmFtcDtrZXkpOwomIzQzOwkvKiBpbnRlbnRpb25hbGx5IE5PVCBOVUxMLWNoZWNrZWQ6IHJlZyBzdGF5cyBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTEwgKi8KJiM0MzsKJiM0MzsJLyogQGZyb20gaXMgYSBudWxsYWJsZSByZWFkLW9ubHkgbWVtJiM0MztzaXplIGFyZzsgb3V0ZXIgdmFsdWVfc2l6ZSBpcyA0ICovCiYjNDM7CXJldHVybiBicGZfY3N1bV9kaWZmKGlubmVyLCA0LCBOVUxMLCAwLCAwKSAmIzQzOyBza2ItJmd0O2xlbjsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuYwppbmRleCAyODcwNzM4ZDkzZjdlYy4uOGYwYzQ1NDIxZjg5MzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuYwpAQCAtMjgsNyAmIzQzOzI4LDcgQEAgaW50IEJQRl9QUk9HKGdldF90YXNrX2V4ZV9maWxlX2tmdW5jX251bGwpCiB9CiAKIFNFQygmIzM0O2xzbS5zL2lub2RlX2dldHhhdHRyJiMzNDspCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtSMSBwb2ludGVyIHR5cGUgU1RSVUNUIHRhc2tfc3RydWN0IG11c3QgcG9pbnQgdG8gc2NhbGFyLCBvciBzdHJ1Y3Qgd2l0aCBzY2FsYXImIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtSMSBpcyBmcCBleHBlY3RlZCBTVFJVQ1QgdGFza19zdHJ1Y3QmIzM0OykKIGludCBCUEZfUFJPRyhnZXRfdGFza19leGVfZmlsZV9rZnVuY19mcCkKIHsKIAl1NjQgeDsKQEAgLTk4LDcgJiM0Mzs5OCw3IEBAIGludCBCUEZfUFJPRyhwYXRoX2RfcGF0aF9rZnVuY19udWxsKQogfQogCiBTRUMoJiMzNDtsc20ucy90YXNrX2FsbG9jJiMzNDspCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtSMSBtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2RlcmVmZXJlbmNlIG9mIG1vZGlmaWVkIHVudHJ1c3RlZF9wdHJfJiMzNDspCiBpbnQgQlBGX1BST0cocGF0aF9kX3BhdGhfa2Z1bmNfdW50cnVzdGVkX2Zyb21fYXJndW1lbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAlzdHJ1Y3QgcGF0aCAqcm9vdDsKQEAgLTExMiw3ICYjNDM7MTEyLDcgQEAgaW50IEJQRl9QUk9HKHBhdGhfZF9wYXRoX2tmdW5jX3VudHJ1c3RlZF9mcm9tX2FyZ3VtZW50LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sKIH0KIAogU0VDKCYjMzQ7bHNtLnMvZmlsZV9vcGVuJiMzNDspCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtSMSBtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2RlcmVmZXJlbmNlIG9mIG1vZGlmaWVkIHVudHJ1c3RlZF9wdHJfJiMzNDspCiBpbnQgQlBGX1BST0cocGF0aF9kX3BhdGhfa2Z1bmNfdW50cnVzdGVkX2Zyb21fY3VycmVudCkKIHsKIAlzdHJ1Y3QgcGF0aCAqcHdkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL2NhbGxzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvY2FsbHMuYwppbmRleCAzMDJkNzEyZTBkN2VkMi4uOGNkNjI2ZTA0NTUxNTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9jYWxscy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9jYWxscy5jCkBAIC0zMSw3ICYjNDM7MzEsNyBAQAogCX0sCiAJLnByb2dfdHlwZSA9IEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLAogCS5yZXN1bHQgPSBSRUpFQ1QsCi0JLmVycnN0ciA9ICYjMzQ7UjEgcG9pbnRlciB0eXBlIFNUUlVDVCBwcm9nX3Rlc3RfZmFpbDEgbXVzdCBwb2ludCB0byBzY2FsYXImIzM0OywKJiM0MzsJLmVycnN0ciA9ICYjMzQ7UjEgaXMgZnAgZXhwZWN0ZWQgU1RSVUNUIHByb2dfdGVzdF9mYWlsMSYjMzQ7LAogCS5maXh1cF9rZnVuY19idGZfaWQgPSB7CiAJCXsgJiMzNDticGZfa2Z1bmNfY2FsbF90ZXN0X2ZhaWwxJiMzNDssIDIgfSwKIAl9LApAQCAtNDYsNyAmIzQzOzQ2LDcgQEAKIAl9LAogCS5wcm9nX3R5cGUgPSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywKIAkucmVzdWx0ID0gUkVKRUNULAotCS5lcnJzdHIgPSAmIzM0O21heCBzdHJ1Y3QgbmVzdGluZyBkZXB0aCBleGNlZWRlZFxuUjEgcG9pbnRlciB0eXBlIFNUUlVDVCBwcm9nX3Rlc3RfZmFpbDImIzM0OywKJiM0MzsJLmVycnN0ciA9ICYjMzQ7bWF4IHN0cnVjdCBuZXN0aW5nIGRlcHRoIGV4Y2VlZGVkXG5SMSBpcyBmcCBleHBlY3RlZCBTVFJVQ1QgcHJvZ190ZXN0X2ZhaWwyJiMzNDssCiAJLmZpeHVwX2tmdW5jX2J0Zl9pZCA9IHsKIAkJeyAmIzM0O2JwZl9rZnVuY19jYWxsX3Rlc3RfZmFpbDImIzM0OywgMiB9LAogCX0sCkBAIC02MSw3ICYjNDM7NjEsNyBAQAogCX0sCiAJLnByb2dfdHlwZSA9IEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLAogCS5yZXN1bHQgPSBSRUpFQ1QsCi0JLmVycnN0ciA9ICYjMzQ7UjEgcG9pbnRlciB0eXBlIFNUUlVDVCBwcm9nX3Rlc3RfZmFpbDMgbXVzdCBwb2ludCB0byBzY2FsYXImIzM0OywKJiM0MzsJLmVycnN0ciA9ICYjMzQ7UjEgaXMgZnAgZXhwZWN0ZWQgU1RSVUNUIHByb2dfdGVzdF9mYWlsMyYjMzQ7LAogCS5maXh1cF9rZnVuY19idGZfaWQgPSB7CiAJCXsgJiMzNDticGZfa2Z1bmNfY2FsbF90ZXN0X2ZhaWwzJiMzNDssIDIgfSwKIAl9LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njk1NAoJCQkJCQkJb3V0cHV0OiAyMDgKCQkJCQkJCXRob3VnaHRzOiA4OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQ6IGVCUEYgVmVyaWZpZXIgS2Z1bmMgQXJndW1lbnQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIGhvdyB0aGUgZUJQRiB2ZXJpZmllciBkZWFscyB3aXRoIGFyZ3VtZW50cyB0byBrZnVuY3MgYW5kIGhlbHBlciBmdW5jdGlvbnMuIEl0IHNlZW1zIGxpa2UgYSBsb3Qgb2YgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIGFyZ3VtZW50IHZhbGlkYXRpb24gaXMgYmVpbmcgcmV2YW1wZWQuIFRoZXkmIzM5O3JlIGludHJvZHVjaW5nIGBfX2NvbnN0X21hcGAgYW5kIGBfX21hcGAgYW5ub3RhdGlvbnMgZm9yIGtmdW5jcywgcmVwbGFjaW5nIHNvbWUgb2YgdGhlIG9sZGVyIHN0dWZmLiAgRXNzZW50aWFsbHksIHRoZXJlJiMzOTtzIGEgc2hpZnQgaW4gaG93IHRoZSB2ZXJpZmllciBkZXRlcm1pbmVzIGFuZCB1c2VzIGluZm9ybWF0aW9uIGFib3V0IGNvbnN0YW50IG1hcHMsIHBhcnRpY3VsYXJseSBkdXJpbmcgdGhlIGhhbmRsaW5nIG9mIGtmdW5jcy4KClNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gdW5pZnkgdGhlIGFyZ3VtZW50IGNoZWNraW5nIHByb2Nlc3MuICBXZSYjMzk7cmUgZ29pbmcgZnJvbSBgQVJHX0NPTlNUX1NJWkVgIGFuZCBgQVJHX0NPTlNUX1NJWkVfT1JfWkVST2AgdG8gYEFSR19NRU1fU0laRWAgYW5kIGBBUkdfTUVNX1NJWkVfT1JfWkVST2AuICBUaGlzIHdob2xlIGFyZWEgaXMgc3VwZXIgc2Vuc2l0aXZlLCBhbmQgYW55IGNoYW5nZSBoYXMgdG8gYmUgY2FyZWZ1bGx5IHNjcnV0aW5pemVkLiAgVGhlcmUmIzM5O3MgYWxzbyB0aGlzIG5ldyBmdW5jdGlvbiwgYGdlbl9rZnVuY19hcmdfcHJvdG8oKWAsIHdoaWNoIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYGJwZl9mdW5jX3Byb3RvYCBzdHJ1Y3R1cmVzIGZvciBrZnVuY3MsIHNpbWlsYXIgdG8gaG93IGl04oCZcyBkb25lIGZvciBoZWxwZXIgZnVuY3Rpb25zLiAgVGhpcyBkZWZpbml0ZWx5IGxvb2tzIGxpa2UgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIHZlcmlmaWVyLgoKSXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIHZlcmlmaWVyIGlzIGdvaW5nIHRvIGJlIGFsdGVyZWQgc2lnbmlmaWNhbnRseSwgZXNwZWNpYWxseSBpbiBob3cgaXQgdmFsaWRhdGVzIHRob3NlIGFsbC1pbXBvcnRhbnQgYXJndW1lbnRzIGZvciBib3RoIEJQRiBoZWxwZXJzIGFuZCBrZnVuY3MuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBgZ2VuX2tmdW5jX2FyZ19wcm90b2AgaXMgYSBjcml0aWNhbCBuZXcgcG9pbnQsIGFuZCBJIG5lZWQgdG8gc2VlIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIGV4aXN0aW5nIGFyZ3VtZW50IHZhbGlkYXRpb24gcm91dGluZXMuICBTcGVjaWZpY2FsbHksIGBjaGVja19mdW5jX2FyZygpYCBhbmQgYGNoZWNrX2tmdW5jX2FyZ3MoKWAgYXJlIGJlaW5nIG1vZGlmaWVkIHRvIGRvIGEgbW9yZSB1bmlmaWVkIGFyZ3VtZW50IGNoZWNrLiAgYHByb2Nlc3NfbWFwX3B0cl9hcmcoKWAgaXMgYWxzbyBiZWluZyB0d2Vha2VkIHRvIGhhbmRsZSBtYXAgcG9pbnRlciBhcmd1bWVudHMgZm9yIGJvdGggaGVscGVycyBhbmQga2Z1bmNzLiBUaGlzIGlzIGEgbG90IG9mIHRvdWNocG9pbnRzIHRvIGNoZWNrLgoKVGhlIGVCUEYgdmVyaWZpZXIgaXMgYSBjb3JlIGNvbXBvbmVudCwgYW5kIGl0JiMzOTtzIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQsIHNvICphbnkqIGNoYW5nZXMgaW4gdGhpcyBhcmVhIGFyZSBnb2luZyB0byBuZWVkIGEgbG90IG9mIGF0dGVudGlvbi4gR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMsIGFuZCB0aGUgY3JpdGljYWxpdHkgb2YgdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwsIEkmIzM5O20gdGhpbmtpbmcgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgbmV3IGZ1bmN0aW9uYWxpdHkgYW5kIGFsc28gcmV1c2VzIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlIGluIG5ldyB3YXlzLiBUaGUgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBhcmVhcyBpbXBhY3RlZDoKCiogICBgZ2VuX2tmdW5jX2FyZ19wcm90b2AgLSBUaGlzIG9uZSBpcyBicmFuZCBuZXcsIHNvIGl04oCZcyBjcml0aWNhbCB0byB2ZXJpZnkgaXRzIGJlaGF2aW9yLgoqICAgYGdldF9rZnVuY19hcmdfdHlwZWAgLSBUaGlzIGlzIHJlbGF0ZWQgdG8gdGhlIGFyZ3VtZW50IHR5cGVzLgoqICAgYHByb2Nlc3NfbWFwX3B0cl9hcmdgIC0gSXQmIzM5O3MgZGVhbGluZyB3aXRoIG1hcCBwb2ludGVycyBmb3IgYm90aCBoZWxwZXJzIGFuZCBrZnVuY3MsIHdoaWNoIGlzIGEga2V5IGFyZWEuCiogICBgY2hlY2tfa2Z1bmNfYXJnc2AgLSBUaGlzIGlzIHRoZSBjb3JlIGtmdW5jIGFyZ3VtZW50IHZhbGlkYXRpb24uCiogICBgY2hlY2tfZnVuY19hcmdgIC0gSXQgaXMgdGhlIGNvcmUgZnVuY3Rpb24gYXJndW1lbnQgdmFsaWRhdGlvbi4KKiAgIGBjaGVja19tZW1fc2l6ZV9yZWdgIC0gRm9yIG1lbW9yeSBzaXplIGNoZWNrcy4KKiAgIGBjaGVja19tZW1fcmVnYCAtIEZvciBtZW1vcnkgcmVnaXN0ZXIgY2hlY2tzLgoqICAgYHByb2Nlc3NfY29uc3RfYXJnYCAtIFRoaXMgaXMgcmVsYXRlZCB0byBob3cgY29uc3RhbnQgYXJndW1lbnRzIGFyZSBwcm9jZXNzZWQuCgpJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0aGF0IGBCUEZfU1lTQ0FMTGAgYW5kIGBERUJVR19JTkZPX0JURmAgYXJlIGVuYWJsZWQgZm9yIHByb3BlciB0ZXN0aW5nIGFuZCBjb3ZlcmFnZSwgcGFydGljdWxhcmx5IGJlY2F1c2Ugb2YgdGhlIEJURiBkZXBlbmRlbmN5IG9uIGtmdW5jcy4KClNvLCBsZXQmIzM5O3MgZmlyZSB1cCB0aGUgYHNldC1yZXN1bHRzYCB0b29sLi4uIEl0IGxvb2tzIGxpa2UgYSBnb29kIHBsYW4gdG8gZnV6eiB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbl9rZnVuY19hcmdfcHJvdG8mIzM0OywKICAgICYjMzQ7Z2V0X2tmdW5jX2FyZ190eXBlJiMzNDssCiAgICAmIzM0O3Byb2Nlc3NfbWFwX3B0cl9hcmcmIzM0OywKICAgICYjMzQ7Y2hlY2tfa2Z1bmNfYXJncyYjMzQ7LAogICAgJiMzNDtjaGVja19mdW5jX2FyZyYjMzQ7LAogICAgJiMzNDtjaGVja19tZW1fc2l6ZV9yZWcmIzM0OywKICAgICYjMzQ7Y2hlY2tfbWVtX3JlZyYjMzQ7LAogICAgJiMzNDtwcm9jZXNzX2NvbnN0X2FyZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaWduaWZpY2FudGx5IHJlZmFjdG9ycyBob3cgdGhlIGVCUEYgdmVyaWZpZXIgaGFuZGxlcyBhcmd1bWVudHMgZm9yIGtmdW5jcyBhbmQgaGVscGVyIGZ1bmN0aW9ucywgaW50cm9kdWNpbmcgbmV3IGFyZ3VtZW50IHR5cGVzIChBUkdfTUVNX1NJWkUsIEFSR19NRU1fU0laRV9PUl9aRVJPKSBhbmQgYSBuZXcgd2F5IHRvIGdlbmVyYXRlIGtmdW5jIHByb3RvdHlwZXMgKGdlbl9rZnVuY19hcmdfcHJvdG8pLiBUaGlzIGlzIGNvcmUgdmVyaWZpZXIgbG9naWMgdGhhdCBpcyBoaWdobHkgY29tcGxleCBhbmQgcHJvbmUgdG8gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VuX2tmdW5jX2FyZ19wcm90byYjMzQ7LAogICAgJiMzNDtnZXRfa2Z1bmNfYXJnX3R5cGUmIzM0OywKICAgICYjMzQ7cHJvY2Vzc19tYXBfcHRyX2FyZyYjMzQ7LAogICAgJiMzNDtjaGVja19rZnVuY19hcmdzJiMzNDssCiAgICAmIzM0O2NoZWNrX2Z1bmNfYXJnJiMzNDssCiAgICAmIzM0O2NoZWNrX21lbV9zaXplX3JlZyYjMzQ7LAogICAgJiMzNDtjaGVja19tZW1fcmVnJiMzNDssCiAgICAmIzM0O3Byb2Nlc3NfY29uc3RfYXJnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpZ25pZmljYW50bHkgcmVmYWN0b3JzIGhvdyB0aGUgZUJQRiB2ZXJpZmllciBoYW5kbGVzIGFyZ3VtZW50cyBmb3Iga2Z1bmNzIGFuZCBoZWxwZXIgZnVuY3Rpb25zLCBpbnRyb2R1Y2luZyBuZXcgYXJndW1lbnQgdHlwZXMgKEFSR19NRU1fU0laRSwgQVJHX01FTV9TSVpFX09SX1pFUk8pIGFuZCBhIG5ldyB3YXkgdG8gZ2VuZXJhdGUga2Z1bmMgcHJvdG90eXBlcyAoZ2VuX2tmdW5jX2FyZ19wcm90bykuIFRoaXMgaXMgY29yZSB2ZXJpZmllciBsb2dpYyB0aGF0IGlzIGhpZ2hseSBjb21wbGV4IGFuZCBwcm9uZSB0byBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG1ha2luZyBpdCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA5OjE3OjA3LjM1MTgwMDQ1NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDg4OTU5NjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbl9rZnVuY19hcmdfcHJvdG9cIixcbiAgICBcImdldF9rZnVuY19hcmdfdHlwZVwiLFxuICAgIFwicHJvY2Vzc19tYXBfcHRyX2FyZ1wiLFxuICAgIFwiY2hlY2tfa2Z1bmNfYXJnc1wiLFxuICAgIFwiY2hlY2tfZnVuY19hcmdcIixcbiAgICBcImNoZWNrX21lbV9zaXplX3JlZ1wiLFxuICAgIFwiY2hlY2tfbWVtX3JlZ1wiLFxuICAgIFwicHJvY2Vzc19jb25zdF9hcmdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaWduaWZpY2FudGx5IHJlZmFjdG9ycyBob3cgdGhlIGVCUEYgdmVyaWZpZXIgaGFuZGxlcyBhcmd1bWVudHMgZm9yIGtmdW5jcyBhbmQgaGVscGVyIGZ1bmN0aW9ucywgaW50cm9kdWNpbmcgbmV3IGFyZ3VtZW50IHR5cGVzIChBUkdfTUVNX1NJWkUsIEFSR19NRU1fU0laRV9PUl9aRVJPKSBhbmQgYSBuZXcgd2F5IHRvIGdlbmVyYXRlIGtmdW5jIHByb3RvdHlwZXMgKGdlbl9rZnVuY19hcmdfcHJvdG8pLiBUaGlzIGlzIGNvcmUgdmVyaWZpZXIgbG9naWMgdGhhdCBpcyBoaWdobHkgY29tcGxleCBhbmQgcHJvbmUgdG8gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA5OjE3OjA3LjM1MTgwOTEwNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMwODQ1OTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTQ5YzU3YTNlNjllMmYzYWFjNTZiYTIyMzFmNDlmMmFhZDExNTZhNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAyNCAwOToxNzowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxcbmluZGV4IGM4MDFhMzMwYWVjZTA4Li5jYmRlODZkMDgyY2NlYSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxcbkBAIC0yNTAsNiArMjUwLDM0IEBAIE9yOjpcXG4gICAgICAgICAgICAgICAgIC4uLlxcbiAgICAgICAgIH1cXG4gXFxuKzIuMy43IF9fY29uc3RfbWFwIGFuZCBfX21hcCBBbm5vdGF0aW9uc1xcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rXFxuK1RoZXNlIGFubm90YXRpb25zIGFyZSB1c2VkIGZvciBgYHN0cnVjdCBicGZfbWFwICpgYCBhcmd1bWVudHMgYW5kIGRpc3Rpbmd1aXNoIGFcXG4rdmVyaWZpZXIta25vd24gbWFwIGZyb20gYW4gb3BhcXVlIG9uZS5cXG4rXFxuK2BgX19jb25zdF9tYXBgYCBpbmRpY2F0ZXMgYSBtYXAgbXVzdCBiZSBrbm93biBhdCB0aGUgdmVyaWZpY2F0aW9uIHRpbWUsIGkuZS4gYVxcbitjb25jcmV0ZSBtYXAgZmQgdGhlIEJQRiBwcm9ncmFtIHJlZmVyZW5jZXMgZGlyZWN0bHkuXFxuK1xcbitBbiBleGFtcGxlIGlzIGdpdmVuIGJlbG93OjpcXG4rXFxuKyAgICAgICAgX19icGZfa2Z1bmMgaW50IGJwZl93cV9pbml0KHN0cnVjdCBicGZfd3EgKndxLCB2b2lkICpwX19jb25zdF9tYXAsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncylcXG4rICAgICAgICB7XFxuKyAgICAgICAgICAgICAgICAuLi5cXG4rICAgICAgICB9XFxuK1xcbitgYF9fbWFwYGAgaW5kaWNhdGVzIGFuIG9wYXF1ZSBgYHN0cnVjdCBicGZfbWFwICpgYCB0aGF0IG1heSBiZSByZXNvbHZlZFxcbithdCBydW4gdGltZS4gVGhlIGFyZ3VtZW50IG1heSB0YWtlIGVpdGhlciBhIG1hcCBmZCBvciBhIGBgUFRSX1RPX0JURl9JRGBgXFxuK2Bgc3RydWN0IGJwZl9tYXBgYCBwb2ludGVyLlxcbitcXG4rQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XFxuK1xcbisgICAgICAgIF9fYnBmX2tmdW5jIHZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlcyh2b2lkICpwX19tYXAsIC4uLilcXG4rICAgICAgICB7XFxuKyAgICAgICAgICAgICAgICAuLi5cXG4rICAgICAgICB9XFxuK1xcbiAuLiBfQlBGX2tmdW5jX25vZGVmOlxcbiBcXG4gMi40IFVzaW5nIGFuIGV4aXN0aW5nIGtlcm5lbCBmdW5jdGlvblxcbkBAIC00MTEsNyArNDM5LDcgQEAgRXhhbXBsZSBkZWNsYXJhdGlvbjpcXG4gLi4gY29kZS1ibG9jazo6IGNcXG4gXFxuIFxcdF9fYnBmX2tmdW5jIGludCBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBicGZfdGFza193b3JrICp0dyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqbWFwX19tYXAsIGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFjayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqbWFwX19jb25zdF9tYXAsIGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFjayxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KSB7IC4uLiB9XFxuIFxcbiBFeGFtcGxlIHVzYWdlIGluIEJQRiBwcm9ncmFtOlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxcbmluZGV4IGQ5NTQyMTI3ZGZkZmMwLi4yZWE1Y2UzMGY3MjliYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYuaFxcbkBAIC03NDgsNiArNzQ4LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBicGZfbWFwX29mZmxvYWRfb3BzO1xcbiBlbnVtIGJwZl90eXBlX2ZsYWcge1xcbiBcXHQvKiBQVFIgbWF5IGJlIE5VTEwuICovXFxuIFxcdFBUUl9NQVlCRV9OVUxMXFx0XFx0PSBCSVQoMCArIEJQRl9CQVNFX1RZUEVfQklUUyksXFxuK1xcdFNDQUxBUl9NQVlCRV9aRVJPXFx0PSBQVFJfTUFZQkVfTlVMTCxcXG4gXFxuIFxcdC8qIE1FTSBpcyByZWFkLW9ubHkuIFdoZW4gYXBwbGllZCBvbiBicGZfYXJnLCBpdCBpbmRpY2F0ZXMgdGhlIGFyZyBpc1xcbiBcXHQgKiBjb21wYXRpYmxlIHdpdGggYm90aCBtdXRhYmxlIGFuZCBpbW11dGFibGUgbWVtb3J5LlxcbkBAIC04ODgsOCArODg5LDcgQEAgZW51bSBicGZfYXJnX3R5cGUge1xcbiBcXHRBUkdfUFRSX1RPX01FTSxcXHRcXHQvKiBwb2ludGVyIHRvIHZhbGlkIG1lbW9yeSAoc3RhY2ssIHBhY2tldCwgbWFwIHZhbHVlKSAqL1xcbiBcXHRBUkdfUFRSX1RPX0FSRU5BLFxcbiBcXG4tXFx0QVJHX0NPTlNUX1NJWkUsXFx0XFx0LyogbnVtYmVyIG9mIGJ5dGVzIGFjY2Vzc2VkIGZyb20gbWVtb3J5ICovXFxuLVxcdEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFx0LyogbnVtYmVyIG9mIGJ5dGVzIGFjY2Vzc2VkIGZyb20gbWVtb3J5IG9yIDAgKi9cXG4rXFx0QVJHX01FTV9TSVpFLFxcdFxcdC8qIG51bWJlciBvZiBieXRlcyBhY2Nlc3NlZCBmcm9tIG1lbW9yeSAqL1xcbiBcXG4gXFx0QVJHX1BUUl9UT19DVFgsXFx0XFx0LyogcG9pbnRlciB0byBjb250ZXh0ICovXFxuIFxcdEFSR19BTllUSElORyxcXHRcXHQvKiBhbnkgKGluaXRpYWxpemVkKSBhcmd1bWVudCBpcyBvayAqL1xcbkBAIC05MjIsNiArOTIyLDggQEAgZW51bSBicGZfYXJnX3R5cGUge1xcbiBcXHRBUkdfUFRSX1RPX1VOSU5JVF9NRU1cXHRcXHQ9IE1FTV9VTklOSVQgfCBNRU1fV1JJVEUgfCBBUkdfUFRSX1RPX01FTSxcXG4gXFx0LyogUG9pbnRlciB0byB2YWxpZCBtZW1vcnkgb2Ygc2l6ZSBrbm93biBhdCBjb21waWxlIHRpbWUuICovXFxuIFxcdEFSR19QVFJfVE9fRklYRURfU0laRV9NRU1cXHQ9IE1FTV9GSVhFRF9TSVpFIHwgQVJHX1BUUl9UT19NRU0sXFxuK1xcdC8qIE51bWJlciBvZiBieXRlcyBhY2Nlc3NlZCBmcm9tIG1lbW9yeSwgb3IgMC4gKi9cXG4rXFx0QVJHX01FTV9TSVpFX09SX1pFUk9cXHRcXHQ9IFNDQUxBUl9NQVlCRV9aRVJPIHwgQVJHX01FTV9TSVpFLFxcbiBcXG4gXFx0LyogVGhpcyBtdXN0IGJlIHRoZSBsYXN0IGVudHJ5LiBJdHMgcHVycG9zZSBpcyB0byBlbnN1cmUgdGhlIGVudW0gaXNcXG4gXFx0ICogd2lkZSBlbm91Z2ggdG8gaG9sZCB0aGUgaGlnaGVyIGJpdHMgcmVzZXJ2ZWQgZm9yIGJwZl90eXBlX2ZsYWcuXFxuQEAgLTk2MCw2ICs5NjIsMjEgQEAgZW51bSBicGZfcmV0dXJuX3R5cGUge1xcbiB9O1xcbiBzdGF0aWNfYXNzZXJ0KF9fQlBGX1JFVF9UWVBFX01BWCBcXHUwMDNjPSBCUEZfQkFTRV9UWVBFX0xJTUlUKTtcXG4gXFxuKy8qIFRoZSBsb25nZXN0IHRyYWNlcG9pbnQgaGFzIDEyIGFyZ3MuXFxuKyAqIFNlZSBpbmNsdWRlL3RyYWNlL2JwZl9wcm9iZS5oXFxuKyAqXFxuKyAqIEFsc28gcmV1c2UgdGhpcyBtYWNybyBmb3IgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzIGEgQlBGIGZ1bmN0aW9uXFxuKyAqIG9yIGEga2Z1bmMgY2FuIGhhdmUuIEFyZ3MgMS01IGFyZSBwYXNzZWQgaW4gcmVnaXN0ZXJzLCBhcmdzIDYtMTIgdmlhXFxuKyAqIHN0YWNrIGFyZyBzbG90cy4gVGhlIEpJVCBtYXkgbWFwIHNvbWUgc3RhY2sgYXJnIHNsb3RzIHRvIHJlZ2lzdGVycyBiYXNlZFxcbisgKiBvbiB0aGUgbmF0aXZlIGNhbGxpbmcgY29udmVudGlvbiAoZS5nLiwgYXJnIDYgdG8gUjkgb24geDg2LTY0KS5cXG4rICovXFxuKyNkZWZpbmUgTUFYX0JQRl9GVU5DX0FSR1MgMTJcXG4rXFxuKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRocm91Z2ggcmVnaXN0ZXJzXFxuKyAqIGEgc2luZ2xlIGZ1bmN0aW9uIG1heSBoYXZlLlxcbisgKi9cXG4rI2RlZmluZSBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MgNVxcbitcXG4gLyogZUJQRiBmdW5jdGlvbiBwcm90b3R5cGUgdXNlZCBieSB2ZXJpZmllciB0byBhbGxvdyBCUEZfQ0FMTHMgZnJvbSBlQlBGIHByb2dyYW1zXFxuICAqIHRvIGluLWtlcm5lbCBoZWxwZXIgZnVuY3Rpb25zIGFuZCBmb3IgYWRqdXN0aW5nIGltbTMyIGZpZWxkIGluIEJQRl9DQUxMXFxuICAqIGluc3RydWN0aW9ucyBhZnRlciB2ZXJpZnlpbmdcXG5AQCAtOTg0LDcgKzEwMDEsNyBAQCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8ge1xcbiBcXHRcXHRcXHRlbnVtIGJwZl9hcmdfdHlwZSBhcmc0X3R5cGU7XFxuIFxcdFxcdFxcdGVudW0gYnBmX2FyZ190eXBlIGFyZzVfdHlwZTtcXG4gXFx0XFx0fTtcXG4tXFx0XFx0ZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGVbNV07XFxuK1xcdFxcdGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlW01BWF9CUEZfRlVOQ19BUkdTXTtcXG4gXFx0fTtcXG4gXFx0dW5pb24ge1xcbiBcXHRcXHRzdHJ1Y3Qge1xcbkBAIC05OTQsNyArMTAxMSw3IEBAIHN0cnVjdCBicGZfZnVuY19wcm90byB7XFxuIFxcdFxcdFxcdHUzMiAqYXJnNF9idGZfaWQ7XFxuIFxcdFxcdFxcdHUzMiAqYXJnNV9idGZfaWQ7XFxuIFxcdFxcdH07XFxuLVxcdFxcdHUzMiAqYXJnX2J0Zl9pZFs1XTtcXG4rXFx0XFx0dTMyICphcmdfYnRmX2lkW01BWF9CUEZfRlVOQ19BUkdTXTtcXG4gXFx0XFx0c3RydWN0IHtcXG4gXFx0XFx0XFx0c2l6ZV90IGFyZzFfc2l6ZTtcXG4gXFx0XFx0XFx0c2l6ZV90IGFyZzJfc2l6ZTtcXG5AQCAtMTAwMiw3ICsxMDE5LDcgQEAgc3RydWN0IGJwZl9mdW5jX3Byb3RvIHtcXG4gXFx0XFx0XFx0c2l6ZV90IGFyZzRfc2l6ZTtcXG4gXFx0XFx0XFx0c2l6ZV90IGFyZzVfc2l6ZTtcXG4gXFx0XFx0fTtcXG4tXFx0XFx0c2l6ZV90IGFyZ19zaXplWzVdO1xcbitcXHRcXHRzaXplX3QgYXJnX3NpemVbTUFYX0JQRl9GVU5DX0FSR1NdO1xcbiBcXHR9O1xcbiBcXHRpbnQgKnJldF9idGZfaWQ7IC8qIHJldHVybiB2YWx1ZSBidGZfaWQgKi9cXG4gXFx0Ym9vbCAoKmFsbG93ZWQpKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuQEAgLTExOTIsMjEgKzEyMDksNiBAQCBzdHJ1Y3QgYnBmX3Byb2dfb2ZmbG9hZCB7XFxuIFxcdHUzMlxcdFxcdFxcdGppdGVkX2xlbjtcXG4gfTtcXG4gXFxuLS8qIFRoZSBsb25nZXN0IHRyYWNlcG9pbnQgaGFzIDEyIGFyZ3MuXFxuLSAqIFNlZSBpbmNsdWRlL3RyYWNlL2JwZl9wcm9iZS5oXFxuLSAqXFxuLSAqIEFsc28gcmV1c2UgdGhpcyBtYWNybyBmb3IgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzIGEgQlBGIGZ1bmN0aW9uXFxuLSAqIG9yIGEga2Z1bmMgY2FuIGhhdmUuIEFyZ3MgMS01IGFyZSBwYXNzZWQgaW4gcmVnaXN0ZXJzLCBhcmdzIDYtMTIgdmlhXFxuLSAqIHN0YWNrIGFyZyBzbG90cy4gVGhlIEpJVCBtYXkgbWFwIHNvbWUgc3RhY2sgYXJnIHNsb3RzIHRvIHJlZ2lzdGVycyBiYXNlZFxcbi0gKiBvbiB0aGUgbmF0aXZlIGNhbGxpbmcgY29udmVudGlvbiAoZS5nLiwgYXJnIDYgdG8gUjkgb24geDg2LTY0KS5cXG4tICovXFxuLSNkZWZpbmUgTUFYX0JQRl9GVU5DX0FSR1MgMTJcXG4tXFxuLS8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRocm91Z2ggcmVnaXN0ZXJzXFxuLSAqIGEgc2luZ2xlIGZ1bmN0aW9uIG1heSBoYXZlLlxcbi0gKi9cXG4tI2RlZmluZSBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MgNVxcbi1cXG4gLyogVGhlIGFyZ3VtZW50IGlzIGEgc3RydWN0dXJlIG9yIGEgdW5pb24uICovXFxuICNkZWZpbmUgQlRGX0ZNT0RFTF9TVFJVQ1RfQVJHXFx0XFx0QklUKDApXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbmluZGV4IDY4MmMyY2QzYjg0NDMwLi4wNjU1MTY0ZTZhZjJlYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbkBAIC0xNSw3ICsxNSw3IEBAXFxuICAqIGVuc3VyZXMgdGhhdCB1bWF4X3ZhbHVlICsgKGludClvZmYgKyAoaW50KXNpemUgY2Fubm90IG92ZXJmbG93IGEgdTY0LlxcbiAgKi9cXG4gI2RlZmluZSBCUEZfTUFYX1ZBUl9PRkZcXHQoMSBcXHUwMDNjXFx1MDAzYyAyOSlcXG4tLyogTWF4aW11bSB2YXJpYWJsZSBzaXplIHBlcm1pdHRlZCBmb3IgQVJHX0NPTlNUX1NJWkVbX09SX1pFUk9dLiAgVGhpcyBlbnN1cmVzXFxuKy8qIE1heGltdW0gdmFyaWFibGUgc2l6ZSBwZXJtaXR0ZWQgZm9yIEFSR19NRU1fU0laRVtfT1JfWkVST10uICBUaGlzIGVuc3VyZXNcXG4gICogdGhhdCBjb252ZXJ0aW5nIHVtYXhfdmFsdWUgdG8gaW50IGNhbm5vdCBvdmVyZmxvdy5cXG4gICovXFxuICNkZWZpbmUgQlBGX01BWF9WQVJfU0laXFx0KDEgXFx1MDAzY1xcdTAwM2MgMjkpXFxuQEAgLTExODgsNiArMTE4OCw3IEBAIGludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbiBcXHRcXHRcXHQgICAgdTMyIGJ0Zl9pZCxcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbyk7XFxuIHZvaWQgYnBmX2ZyZWVfa2Z1bmNfYnRmX3RhYihzdHJ1Y3QgYnBmX2tmdW5jX2J0Zl90YWIgKnRhYik7XFxuK3ZvaWQgYnBmX2ZyZWVfa2Z1bmNfZGVzY190YWIoc3RydWN0IGJwZl9rZnVuY19kZXNjX3RhYiAqdGFiKTtcXG4gXFxuIGludCBtYXJrX2NoYWluX3ByZWNpc2lvbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcmVnbm8pO1xcbiBcXG5AQCAtMTMwNSw4ICsxMzA2LDE5IEBAIHN0YXRpYyBpbmxpbmUgdTMyIHR5cGVfZmxhZyh1MzIgdHlwZSlcXG4gLyogb25seSB1c2UgYWZ0ZXIgY2hlY2tfYXR0YWNoX2J0Zl9pZCgpICovXFxuIHN0YXRpYyBpbmxpbmUgZW51bSBicGZfcHJvZ190eXBlIHJlc29sdmVfcHJvZ190eXBlKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4ge1xcbi1cXHRyZXR1cm4gKHByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9FWFQgXFx1MDAyNlxcdTAwMjYgcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VzYXZlZF9kc3RfcHJvZ190eXBlKSA/XFxuLVxcdFxcdHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlc2F2ZWRfZHN0X3Byb2dfdHlwZSA6IHByb2ctXFx1MDAzZXR5cGU7XFxuK1xcdGlmIChwcm9nLVxcdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfRVhUKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIHNhdmVkX2RzdF9wcm9nX3R5cGUgaXMgb25seSBzZXQgb25jZSBjaGVja19hdHRhY2hfYnRmX2lkKClcXG4rXFx0XFx0ICogcnVucy4gQmVmb3JlIHRoYXQgLS0gZS5nLiB3aGVuIGdlbmVyYXRpbmcga2Z1bmMgcHJvdG90eXBlcyBhdFxcbitcXHRcXHQgKiBhZGQtY2FsbCB0aW1lIC0tIGZhbGwgYmFjayB0byB0aGUgYXR0YWNoIHRhcmdldCdzIHR5cGUsIHdoaWNoXFxuK1xcdFxcdCAqIGlzIGF2YWlsYWJsZSBmcm9tIGxvYWQgdGltZSBhbmQgaG9sZHMgdGhlIHNhbWUgdmFsdWUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VzYXZlZF9kc3RfcHJvZ190eXBlKVxcbitcXHRcXHRcXHRyZXR1cm4gcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VzYXZlZF9kc3RfcHJvZ190eXBlO1xcbitcXHRcXHRpZiAocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2Vkc3RfcHJvZylcXG4rXFx0XFx0XFx0cmV0dXJuIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlZHN0X3Byb2ctXFx1MDAzZXR5cGU7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHByb2ctXFx1MDAzZXR5cGU7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19jaGVja19yZWN1cihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuQEAgLTE0NzksMTAgKzE0OTEsMTcgQEAgc3RydWN0IHJldF9tZW1fZGVzYyB7XFxuIFxcdGJvb2wgZm91bmQ7XFxuIH07XFxuIFxcbisvKiBBIGNvbnN0YW50IHNjYWxhciBhcmd1bWVudDsgUG9wdWxhdGVkIGJ5IHByb2Nlc3NfY29uc3RfYXJnKCkgKi9cXG4rc3RydWN0IGFyZ19jb25zdGFudF9kZXNjIHtcXG4rXFx0dTY0IHZhbHVlO1xcbitcXHRib29sIGZvdW5kO1xcbit9O1xcbitcXG4gc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhIHtcXG4gXFx0LyogQ29tbW9uICovXFxuIFxcdHN0cnVjdCBidGYgKmJ0ZjtcXG4gXFx0dTMyIGZ1bmNfaWQ7XFxuK1xcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm47XFxuIFxcdHU4IHJlbGVhc2VfcmVnbm87XFxuIFxcdHUzMiByZXRfYnRmX2lkO1xcbiBcXHR1MzIgc3VicHJvZ25vO1xcbkBAIC0xNDk2LDEwICsxNTE1LDcgQEAgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhIHtcXG4gXFx0dTMyIGtmdW5jX2ZsYWdzO1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmZ1bmNfcHJvdG87XFxuIFxcdGNvbnN0IGNoYXIgKmZ1bmNfbmFtZTtcXG4tXFx0c3RydWN0IHtcXG4tXFx0XFx0dTY0IHZhbHVlO1xcbi1cXHRcXHRib29sIGZvdW5kO1xcbi1cXHR9IGFyZ19jb25zdGFudDtcXG4rXFx0c3RydWN0IGFyZ19jb25zdGFudF9kZXNjIGFyZ19jb25zdGFudDtcXG4gXFxuIFxcdC8qIGFyZ197YnRmLGJ0Zl9pZCxvd25pbmdfcmVmfSBhcmUgdXNlZCBieSBrZnVuYy1zcGVjaWZpYyBoYW5kbGluZyxcXG4gXFx0ICogZ2VuZXJhbGx5IHRvIHBhc3MgaW5mbyBhYm91dCB1c2VyLWRlZmluZWQgbG9jYWwga3B0ciB0eXBlcyB0byBsYXRlclxcbkBAIC0xNjE0LDYgKzE2MzAsNyBAQCBlbnVtIGJwZl9yZWdfYXJnX3R5cGUge1xcbiBcXG4gc3RydWN0IGJwZl9rZnVuY19kZXNjIHtcXG4gXFx0c3RydWN0IGJ0Zl9mdW5jX21vZGVsIGZ1bmNfbW9kZWw7XFxuK1xcdHN0cnVjdCBicGZfZnVuY19wcm90byAqcHJvdG87XFxuIFxcdHUzMiBmdW5jX2lkO1xcbiBcXHRzMzIgaW1tO1xcbiBcXHR1MTYgb2Zmc2V0O1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xcbmluZGV4IDJlNGFlMGVmMDg2MDlkLi4yZjQ3M2FkNGZkN2MxYyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jXFxuKysrIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xcbkBAIC02MzYsNyArNjM2LDcgQEAgc3RhdGljIGludCBiYWNrdHJhY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LCBpbnQgc3Vic2VxX2lkeCxcXG4gICogcjUgKz0gMVxcbiAgKiAuLi5cXG4gICogY2FsbCBicGZfcGVyZl9ldmVudF9vdXRwdXQjMjVcXG4tICogICB3aGVyZSAuYXJnNV90eXBlID0gQVJHX0NPTlNUX1NJWkVfT1JfWkVST1xcbisgKiAgIHdoZXJlIC5hcmc1X3R5cGUgPSBBUkdfTUVNX1NJWkVfT1JfWkVST1xcbiAgKlxcbiAgKiBhbmQgdGhpcyBjYXNlOlxcbiAgKiByNiA9IDFcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9icGZfbHNtLmMgYi9rZXJuZWwvYnBmL2JwZl9sc20uY1xcbmluZGV4IDM5ODNiNGNlNzNjODExLi44MmM1OTg4NDE3YTBjZiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2JwZl9sc20uY1xcbisrKyBiL2tlcm5lbC9icGYvYnBmX2xzbS5jXFxuQEAgLTE4Niw3ICsxODYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9pbWFfaW5vZGVfaGFzaF9wcm90byA9IHtcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19CVEZfSUQsXFxuIFxcdC5hcmcxX2J0Zl9pZFxcdD0gXFx1MDAyNmJwZl9pbWFfaW5vZGVfaGFzaF9idGZfaWRzWzBdLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIFxcdC5hbGxvd2VkXFx0PSBicGZfaW1hX2lub2RlX2hhc2hfYWxsb3dlZCxcXG4gfTtcXG4gXFxuQEAgLTIwNSw3ICsyMDUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9pbWFfZmlsZV9oYXNoX3Byb3RvID0ge1xcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0JURl9JRCxcXG4gXFx0LmFyZzFfYnRmX2lkXFx0PSBcXHUwMDI2YnBmX2ltYV9maWxlX2hhc2hfYnRmX2lkc1swXSxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiBcXHQuYWxsb3dlZFxcdD0gYnBmX2ltYV9pbm9kZV9oYXNoX2FsbG93ZWQsXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuY1xcbmluZGV4IGNiYjFlNDliOWJjYmY1Li5hMjNhNDJjYmUzYjEzNSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2J0Zi5jXFxuKysrIGIva2VybmVsL2JwZi9idGYuY1xcbkBAIC04NzA3LDcgKzg3MDcsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2J0Zl9maW5kX2J5X25hbWVfa2luZF9wcm90byA9IHtcXG4gXFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnMl90eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzJfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcXG5pbmRleCA0MzU1Y2NiNzhhOWM2Ny4uZmI5MzU3YjY0Y2FkYmMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9jZ3JvdXAuY1xcbisrKyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcXG5AQCAtMjMwNSw3ICsyMzA1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc3lzY3RsX2dldF9uYW1lX3Byb3RvID0ge1xcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fV1JJVEUsXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG4gXFxuQEAgLTIzNDcsNyArMjM0Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3N5c2N0bF9nZXRfY3VycmVudF92YWx1ZV9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gfTtcXG4gXFxuIEJQRl9DQUxMXzMoYnBmX3N5c2N0bF9nZXRfbmV3X3ZhbHVlLCBzdHJ1Y3QgYnBmX3N5c2N0bF9rZXJuICosIGN0eCwgY2hhciAqLCBidWYsXFxuQEAgLTIzNjcsNyArMjM2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3N5c2N0bF9nZXRfbmV3X3ZhbHVlX3Byb3RvID0ge1xcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiB9O1xcbiBcXG4gQlBGX0NBTExfMyhicGZfc3lzY3RsX3NldF9uZXdfdmFsdWUsIHN0cnVjdCBicGZfc3lzY3RsX2tlcm4gKiwgY3R4LFxcbkBAIC0yMzkzLDcgKzIzOTMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zeXNjdGxfc2V0X25ld192YWx1ZV9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvcmUuYyBiL2tlcm5lbC9icGYvY29yZS5jXFxuaW5kZXggNDdmZTA0N2FkMzBiODguLmEzMGU3NDcxZTlkODFlIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvY29yZS5jXFxuKysrIGIva2VybmVsL2JwZi9jb3JlLmNcXG5AQCAtMTk4LDcgKzE5OCw5IEBAIHZvaWQgYnBmX3Byb2dfaml0X2F0dGVtcHRfZG9uZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuIFxcdFxcdHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlaml0ZWRfbGluZm8gPSBOVUxMO1xcbiBcXHR9XFxuIFxcbi1cXHRrZnJlZShwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWtmdW5jX3RhYik7XFxuKyNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG4rXFx0YnBmX2ZyZWVfa2Z1bmNfZGVzY190YWIocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VrZnVuY190YWIpO1xcbisjZW5kaWZcXG4gXFx0cHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VrZnVuY190YWIgPSBOVUxMO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXFxuaW5kZXggYzE4ZjFlMTZlZGVlNGMuLjE4YmU1ZDZlNGY5YzI5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jXFxuKysrIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcXG5AQCAtMjc4LDcgKzI3OCw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X2N1cnJlbnRfY29tbV9wcm90byA9IHtcXG4gXFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnMl90eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzJfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiB9O1xcbiBcXG4gI2lmIGRlZmluZWQoQ09ORklHX1FVRVVFRF9TUElOTE9DS1MpIHx8IGRlZmluZWQoQ09ORklHX0JQRl9BUkNIX1NQSU5MT0NLKVxcbkBAIC01MzksNyArNTM5LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zdHJ0b2xfcHJvdG8gPSB7XFxuIFxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmcyX3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfUFRSX1RPX0ZJWEVEX1NJWkVfTUVNIHwgTUVNX1VOSU5JVCB8IE1FTV9XUklURSB8IE1FTV9BTElHTkVELFxcbiBcXHQuYXJnNF9zaXplXFx0PSBzaXplb2YoczY0KSxcXG5AQCAtNTY3LDcgKzU2Nyw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc3RydG91bF9wcm90byA9IHtcXG4gXFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnMl90eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzJfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19QVFJfVE9fRklYRURfU0laRV9NRU0gfCBNRU1fVU5JTklUIHwgTUVNX1dSSVRFIHwgTUVNX0FMSUdORUQsXFxuIFxcdC5hcmc0X3NpemVcXHQ9IHNpemVvZih1NjQpLFxcbkBAIC01ODMsNyArNTgzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc3RybmNtcF9wcm90byA9IHtcXG4gXFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnMl90eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzJfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfUFRSX1RPX0NPTlNUX1NUUixcXG4gfTtcXG4gXFxuQEAgLTYyNyw3ICs2MjcsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9uc19jdXJyZW50X3BpZF90Z2lkX3Byb3RvID0ge1xcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzNfdHlwZSAgICAgID0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnNF90eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzRfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFLFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3Jhd19zbXBfcHJvY2Vzc29yX2lkX3Byb3RvID0ge1xcbkBAIC02NTMsNyArNjUzLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9ldmVudF9vdXRwdXRfZGF0YV9wcm90byA9ICB7XFxuIFxcdC5hcmcyX3R5cGUgICAgICA9IEFSR19DT05TVF9NQVBfUFRSLFxcbiBcXHQuYXJnM190eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc0X3R5cGUgICAgICA9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzVfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzVfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIH07XFxuIFxcbiBCUEZfQ0FMTF8zKGJwZl9jb3B5X2Zyb21fdXNlciwgdm9pZCAqLCBkc3QsIHUzMiwgc2l6ZSxcXG5AQCAtNjc1LDcgKzY3NSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY29weV9mcm9tX3VzZXJfcHJvdG8gPSB7XFxuIFxcdC5taWdodF9zbGVlcFxcdD0gdHJ1ZSxcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnMl90eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnMl90eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiBcXG5AQCAtNzA2LDcgKzcwNiw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY29weV9mcm9tX3VzZXJfdGFza19wcm90byA9IHtcXG4gXFx0Lm1pZ2h0X3NsZWVwXFx0PSB0cnVlLFxcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmcyX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmcyX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxcbiBcXHQuYXJnNF9idGZfaWRcXHQ9IFxcdTAwMjZidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9UQVNLXSxcXG5AQCAtMTA5MywxMCArMTA5MywxMCBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NucHJpbnRmX3Byb3RvID0ge1xcbiBcXHQuZ3BsX29ubHlcXHQ9IHRydWUsXFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNX09SX05VTEwgfCBNRU1fV1JJVEUsXFxuLVxcdC5hcmcyX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmcyX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfUFRSX1RPX0NPTlNUX1NUUixcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBQVFJfTUFZQkVfTlVMTCB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmc1X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmc1X3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiB9O1xcbiBcXG4gc3RhdGljIHZvaWQgKm1hcF9rZXlfZnJvbV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSwgdTMyICphcnJfaWR4KVxcbkBAIC0xODg4LDcgKzE4ODgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9keW5wdHJfZnJvbV9tZW1fcHJvdG8gPSB7XFxuIFxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzJfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX1BUUl9UT19EWU5QVFIgfCBEWU5QVFJfVFlQRV9MT0NBTCB8IE1FTV9VTklOSVQgfCBNRU1fV1JJVEUsXFxuIH07XFxuQEAgLTE5NDMsNyArMTk0Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2R5bnB0cl9yZWFkX3Byb3RvID0ge1xcbiBcXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmcyX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmcyX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfUFRSX1RPX0RZTlBUUixcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNV90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuQEAgLTIwMDQsNyArMjAwNCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2R5bnB0cl93cml0ZV9wcm90byA9IHtcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19EWU5QVFIsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnNF90eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnNF90eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiBcXG5AQCAtMzQwNCwxMCArMzQwNCwxMCBAQCBfX2JwZl9rZnVuYyB2b2lkIGJwZl90aHJvdyh1NjQgY29va2llKVxcbiBcXHRXQVJOKDEsIFxcXCJBIGNhbGwgdG8gQlBGIGV4Y2VwdGlvbiBjYWxsYmFjayBzaG91bGQgbmV2ZXIgcmV0dXJuXFxcXG5cXFwiKTtcXG4gfVxcbiBcXG4tX19icGZfa2Z1bmMgaW50IGJwZl93cV9pbml0KHN0cnVjdCBicGZfd3EgKndxLCB2b2lkICpwX19tYXAsIHVuc2lnbmVkIGludCBmbGFncylcXG4rX19icGZfa2Z1bmMgaW50IGJwZl93cV9pbml0KHN0cnVjdCBicGZfd3EgKndxLCB2b2lkICpwX19jb25zdF9tYXAsIHVuc2lnbmVkIGludCBmbGFncylcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX2FzeW5jX2tlcm4gKmFzeW5jID0gKHN0cnVjdCBicGZfYXN5bmNfa2VybiAqKXdxO1xcbi1cXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gcF9fbWFwO1xcbitcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gcF9fY29uc3RfbWFwO1xcbiBcXG4gXFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgYnBmX2FzeW5jX2tlcm4pIFxcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBicGZfd3EpKTtcXG4gXFx0QlVJTERfQlVHX09OKF9fYWxpZ25vZl9fKHN0cnVjdCBicGZfYXN5bmNfa2VybikgIT0gX19hbGlnbm9mX18oc3RydWN0IGJwZl93cSkpO1xcbkBAIC00NjQyLDE3ICs0NjQyLDE3IEBAIHN0YXRpYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBicGZfdGFza193b3JrXFxuICAqIG1vZGVcXG4gICogQHRhc2s6IFRhc2sgc3RydWN0IGZvciB3aGljaCBjYWxsYmFjayBzaG91bGQgYmUgc2NoZWR1bGVkXFxuICAqIEB0dzogUG9pbnRlciB0byBzdHJ1Y3QgYnBmX3Rhc2tfd29yayBpbiBCUEYgbWFwIHZhbHVlIGZvciBpbnRlcm5hbCBib29ra2VlcGluZ1xcbi0gKiBAbWFwX19tYXA6IGJwZl9tYXAgdGhhdCBlbWJlZHMgc3RydWN0IGJwZl90YXNrX3dvcmsgaW4gdGhlIHZhbHVlc1xcbisgKiBAbWFwX19jb25zdF9tYXA6IGJwZl9tYXAgdGhhdCBlbWJlZHMgc3RydWN0IGJwZl90YXNrX3dvcmsgaW4gdGhlIHZhbHVlc1xcbiAgKiBAY2FsbGJhY2s6IHBvaW50ZXIgdG8gQlBGIHN1YnByb2dyYW0gdG8gY2FsbFxcbiAgKiBAYXV4OiBwb2ludGVyIHRvIGJwZl9wcm9nX2F1eCBvZiB0aGUgY2FsbGVyIEJQRiBwcm9ncmFtLCBpbXBsaWNpdGx5IHNldCBieSB0aGUgdmVyaWZpZXJcXG4gICpcXG4gICogUmV0dXJuOiAwIGlmIHRhc2sgd29yayBoYXMgYmVlbiBzY2hlZHVsZWQgc3VjY2Vzc2Z1bGx5LCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZVxcbiAgKi9cXG4gX19icGZfa2Z1bmMgaW50IGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICB2b2lkICptYXBfX21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICB2b2lkICptYXBfX2NvbnN0X21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXFxuIHtcXG4tXFx0cmV0dXJuIGJwZl90YXNrX3dvcmtfc2NoZWR1bGUodGFzaywgdHcsIG1hcF9fbWFwLCBjYWxsYmFjaywgYXV4LCBUV0FfU0lHTkFMKTtcXG4rXFx0cmV0dXJuIGJwZl90YXNrX3dvcmtfc2NoZWR1bGUodGFzaywgdHcsIG1hcF9fY29uc3RfbWFwLCBjYWxsYmFjaywgYXV4LCBUV0FfU0lHTkFMKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTQ2NjAsMTcgKzQ2NjAsMTcgQEAgX19icGZfa2Z1bmMgaW50IGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IGJcXG4gICogbW9kZVxcbiAgKiBAdGFzazogVGFzayBzdHJ1Y3QgZm9yIHdoaWNoIGNhbGxiYWNrIHNob3VsZCBiZSBzY2hlZHVsZWRcXG4gICogQHR3OiBQb2ludGVyIHRvIHN0cnVjdCBicGZfdGFza193b3JrIGluIEJQRiBtYXAgdmFsdWUgZm9yIGludGVybmFsIGJvb2trZWVwaW5nXFxuLSAqIEBtYXBfX21hcDogYnBmX21hcCB0aGF0IGVtYmVkcyBzdHJ1Y3QgYnBmX3Rhc2tfd29yayBpbiB0aGUgdmFsdWVzXFxuKyAqIEBtYXBfX2NvbnN0X21hcDogYnBmX21hcCB0aGF0IGVtYmVkcyBzdHJ1Y3QgYnBmX3Rhc2tfd29yayBpbiB0aGUgdmFsdWVzXFxuICAqIEBjYWxsYmFjazogcG9pbnRlciB0byBCUEYgc3VicHJvZ3JhbSB0byBjYWxsXFxuICAqIEBhdXg6IHBvaW50ZXIgdG8gYnBmX3Byb2dfYXV4IG9mIHRoZSBjYWxsZXIgQlBGIHByb2dyYW0sIGltcGxpY2l0bHkgc2V0IGJ5IHRoZSB2ZXJpZmllclxcbiAgKlxcbiAgKiBSZXR1cm46IDAgaWYgdGFzayB3b3JrIGhhcyBiZWVuIHNjaGVkdWxlZCBzdWNjZXNzZnVsbHksIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlXFxuICAqL1xcbiBfX2JwZl9rZnVuYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgYnBmX3Rhc2tfd29yayAqdHcsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKm1hcF9fbWFwLCBicGZfdGFza193b3JrX2NhbGxiYWNrX3QgY2FsbGJhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKm1hcF9fY29uc3RfbWFwLCBicGZfdGFza193b3JrX2NhbGxiYWNrX3QgY2FsbGJhY2ssXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eClcXG4ge1xcbi1cXHRyZXR1cm4gYnBmX3Rhc2tfd29ya19zY2hlZHVsZSh0YXNrLCB0dywgbWFwX19tYXAsIGNhbGxiYWNrLCBhdXgsIFRXQV9SRVNVTUUpO1xcbitcXHRyZXR1cm4gYnBmX3Rhc2tfd29ya19zY2hlZHVsZSh0YXNrLCB0dywgbWFwX19jb25zdF9tYXAsIGNhbGxiYWNrLCBhdXgsIFRXQV9SRVNVTUUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG1ha2VfZmlsZV9keW5wdHIoc3RydWN0IGZpbGUgKmZpbGUsIHUzMiBmbGFncywgYm9vbCBtYXlfc2xlZXAsXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvcmluZ2J1Zi5jIGIva2VybmVsL2JwZi9yaW5nYnVmLmNcXG5pbmRleCAzNWFlNjRhZGUzNmI4My4uYzFiZjdhMTk3YTk2ZjMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9yaW5nYnVmLmNcXG4rKysgYi9rZXJuZWwvYnBmL3JpbmdidWYuY1xcbkBAIC02MzQsNyArNjM0LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9yaW5nYnVmX291dHB1dF9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX0NPTlNUX01BUF9QVFIsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhY2ttYXAuYyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xcbmluZGV4IDQxZmU4N2Q3MzAyZjIyLi40NjNmOTRiYTFjYzQ3OCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcXG5AQCAtNzgxLDcgKzc4MSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvID0ge1xcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiBcXG5AQCAtNzk3LDcgKzc5Nyw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG4gXFxuQEAgLTgzMSw3ICs4MzEsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF90YXNrX3N0YWNrX3Byb3RvID0ge1xcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0JURl9JRCxcXG4gXFx0LmFyZzFfYnRmX2lkXFx0PSBcXHUwMDI2YnRmX3RyYWNpbmdfaWRzW0JURl9UUkFDSU5HX1RZUEVfVEFTS10sXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG4gXFxuQEAgLTg0OCw3ICs4NDgsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHtcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19CVEZfSUQsXFxuIFxcdC5hcmcxX2J0Zl9pZFxcdD0gXFx1MDAyNmJ0Zl90cmFjaW5nX2lkc1tCVEZfVFJBQ0lOR19UWVBFX1RBU0tdLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbkBAIC05MTEsNyArOTExLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfcHJvdG9fcGUgPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuaW5kZXggMGZmOWUzYWEyOTNkNTcuLjBiNWRjNjc4OGJhMjdmIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcXG5AQCAtMjQ0NCw3ICsyNDQ0LDcgQEAgc3RhdGljIHZvaWQgX19icGZfcHJvZ19wdXRfbm9yZWYoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBib29sIGRlZmVycmVkKVxcbiBcXHRtb2R1bGVfcHV0KHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlbW9kKTtcXG4gXFx0a3ZmcmVlKHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlaml0ZWRfbGluZm8pO1xcbiBcXHRrdmZyZWUocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VsaW5mbyk7XFxuLVxcdGtmcmVlKHByb2ctXFx1MDAzZWF1eC1cXHUwMDNla2Z1bmNfdGFiKTtcXG4rXFx0YnBmX2ZyZWVfa2Z1bmNfZGVzY190YWIocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VrZnVuY190YWIpO1xcbiBcXHRrZnJlZShwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWN0eF9hcmdfaW5mbyk7XFxuIFxcdGlmIChwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9idGYpXFxuIFxcdFxcdGJ0Zl9wdXQocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VhdHRhY2hfYnRmKTtcXG5AQCAtNjU0NCw3ICs2NTQ0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc3lzX2JwZl9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIH07XFxuIFxcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKiBfX3dlYWtcXG5AQCAtNjU5MSw3ICs2NTkxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfa2FsbHN5bXNfbG9va3VwX25hbWVfcHJvdG8gPSB7XFxuIFxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzJfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX1BUUl9UT19GSVhFRF9TSVpFX01FTSB8IE1FTV9VTklOSVQgfCBNRU1fV1JJVEUgfCBNRU1fQUxJR05FRCxcXG4gXFx0LmFyZzRfc2l6ZVxcdD0gc2l6ZW9mKHU2NCksXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbmluZGV4IDUyYmUwYTExOGNjZTA3Li5hY2EzN2E3YmYyY2JjNyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMjcxOSw4ICsyNzE5LDI1IEBAIHN0YXRpYyBpbnQgZmV0Y2hfa2Z1bmNfbWV0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBnZW5fa2Z1bmNfYXJnX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKnByb3RvKTtcXG4rXFxuK3ZvaWQgYnBmX2ZyZWVfa2Z1bmNfZGVzY190YWIoc3RydWN0IGJwZl9rZnVuY19kZXNjX3RhYiAqdGFiKVxcbit7XFxuK1xcdHUzMiBpO1xcbitcXG4rXFx0aWYgKCF0YWIpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRhYi1cXHUwMDNlbnJfZGVzY3M7IGkrKylcXG4rXFx0XFx0a2ZyZWUodGFiLVxcdTAwM2VkZXNjc1tpXS5wcm90byk7XFxuK1xcdGtmcmVlKHRhYik7XFxuK31cXG4rXFxuIGludCBicGZfYWRkX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGZ1bmNfaWQsIHUxNiBvZmZzZXQpXFxuIHtcXG4rXFx0c3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhIG1ldGE7XFxuK1xcdHN0cnVjdCBicGZfZnVuY19wcm90byAqcHJvdG87XFxuIFxcdHN0cnVjdCBicGZfa2Z1bmNfYnRmX3RhYiAqYnRmX3RhYjtcXG4gXFx0c3RydWN0IGJ0Zl9mdW5jX21vZGVsIGZ1bmNfbW9kZWw7XFxuIFxcdHN0cnVjdCBicGZfa2Z1bmNfZGVzY190YWIgKnRhYjtcXG5AQCAtMjgwNiwxMSArMjgyMywyOSBAQCBpbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4rXFx0cHJvdG8gPSBremFsbG9jX29iaigqcHJvdG8sIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK1xcdGlmICghcHJvdG8pXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0bWVtc2V0KFxcdTAwMjZtZXRhLCAwLCBzaXplb2YobWV0YSkpO1xcbitcXHRtZXRhLmJ0ZiA9IGtmdW5jLmJ0ZjtcXG4rXFx0bWV0YS5mdW5jX2lkID0ga2Z1bmMuaWQ7XFxuK1xcdG1ldGEuZnVuY19wcm90byA9IGtmdW5jLnByb3RvO1xcbitcXHRtZXRhLmZ1bmNfbmFtZSA9IGtmdW5jLm5hbWU7XFxuK1xcdG1ldGEua2Z1bmNfZmxhZ3MgPSBrZnVuYy5mbGFncyA/ICprZnVuYy5mbGFncyA6IDA7XFxuK1xcbitcXHRlcnIgPSBnZW5fa2Z1bmNfYXJnX3Byb3RvKGVudiwgXFx1MDAyNm1ldGEsIHByb3RvKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRrZnJlZShwcm90byk7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuIFxcdGRlc2MgPSBcXHUwMDI2dGFiLVxcdTAwM2VkZXNjc1t0YWItXFx1MDAzZW5yX2Rlc2NzKytdO1xcbiBcXHRkZXNjLVxcdTAwM2VmdW5jX2lkID0gZnVuY19pZDtcXG4gXFx0ZGVzYy1cXHUwMDNlb2Zmc2V0ID0gb2Zmc2V0O1xcbiBcXHRkZXNjLVxcdTAwM2VhZGRyID0gYWRkcjtcXG4gXFx0ZGVzYy1cXHUwMDNlZnVuY19tb2RlbCA9IGZ1bmNfbW9kZWw7XFxuK1xcdGRlc2MtXFx1MDAzZXByb3RvID0gcHJvdG87XFxuIFxcdHNvcnQodGFiLVxcdTAwM2VkZXNjcywgdGFiLVxcdTAwM2Vucl9kZXNjcywgc2l6ZW9mKHRhYi1cXHUwMDNlZGVzY3NbMF0pLFxcbiBcXHQgICAgIGtmdW5jX2Rlc2NfY21wX2J5X2lkX29mZiwgTlVMTCk7XFxuIFxcdHJldHVybiAwO1xcbkBAIC00OTI0LDYgKzQ5NTksMTkgQEAgc3RhdGljIHUzMiAqcmVnMmJ0Zl9pZHNbX19CUEZfUkVHX1RZUEVfTUFYXSA9IHtcXG4gXFx0W0NPTlNUX1BUUl9UT19NQVBdID0gYnRmX2JwZl9tYXBfaWQsXFxuIH07XFxuIFxcbitzdGF0aWMgZW51bSBicGZfcmVnX3R5cGUgbG9va3VwX3JlZzJidGZfaWRzKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqcmVmX3QpXFxuK3tcXG4rXFx0ZW51bSBicGZfcmVnX3R5cGUgdHlwZTtcXG4rXFxuK1xcdGZvciAodHlwZSA9IDA7IHR5cGUgXFx1MDAzYyBfX0JQRl9SRUdfVFlQRV9NQVg7IHR5cGUrKykge1xcbitcXHRcXHRpZiAocmVnMmJ0Zl9pZHNbdHlwZV0gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGJ0Zl90eXBlX2J5X2lkKGJ0Zl92bWxpbnV4LCAqcmVnMmJ0Zl9pZHNbdHlwZV0pID09IHJlZl90KVxcbitcXHRcXHRcXHRyZXR1cm4gdHlwZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5PVF9JTklUO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBpc190cnVzdGVkX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbiB7XFxuIFxcdC8qIEEgcmVmZXJlbmNlZCByZWdpc3RlciBpcyBhbHdheXMgdHJ1c3RlZC4gKi9cXG5AQCAtNjg3Myw3ICs2OTIxLDE0IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX3NpemVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdCAgICAgIGJvb2wgemVyb19zaXplX2FsbG93ZWQsXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcXG4ge1xcbi1cXHRpbnQgZXJyO1xcbitcXHRib29sIG1heV9iZV9udWxsID0gdHlwZV9tYXlfYmVfbnVsbChtZW1fcmVnLVxcdTAwM2V0eXBlKTtcXG4rXFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgc2F2ZWRfcmVnO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFxuK1xcdGlmIChtYXlfYmVfbnVsbCkge1xcbitcXHRcXHRzYXZlZF9yZWcgPSAqbWVtX3JlZztcXG4rXFx0XFx0bWFya19wdHJfbm90X251bGxfcmVnKG1lbV9yZWcpO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBUaGlzIGlzIHVzZWQgdG8gcmVmaW5lIHIwIHJldHVybiB2YWx1ZSBib3VuZHMgZm9yIGhlbHBlcnNcXG4gXFx0ICogdGhhdCBlbmZvcmNlIHRoaXMgdmFsdWUgYXMgYW4gdXBwZXIgYm91bmQgb24gcmV0dXJuIHZhbHVlcy5cXG5AQCAtNjkxMCw4ICs2OTY1LDE0IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX3NpemVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIHNpemVfYXJnbm8pKTtcXG4gXFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuIFxcdH1cXG4tXFx0ZXJyID0gY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCBtZW1fcmVnLCBtZW1fYXJnbm8sIHJlZ191bWF4KHNpemVfcmVnKSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgYWNjZXNzX3R5cGUsIHplcm9fc2l6ZV9hbGxvd2VkLCBtZXRhKTtcXG4rXFxuK1xcdGlmIChhY2Nlc3NfdHlwZSBcXHUwMDI2IEJQRl9SRUFEKVxcbitcXHRcXHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIG1lbV9yZWcsIG1lbV9hcmdubywgcmVnX3VtYXgoc2l6ZV9yZWcpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBCUEZfUkVBRCwgemVyb19zaXplX2FsbG93ZWQsIG1ldGEpO1xcbitcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiBhY2Nlc3NfdHlwZSBcXHUwMDI2IEJQRl9XUklURSlcXG4rXFx0XFx0ZXJyID0gY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCBtZW1fcmVnLCBtZW1fYXJnbm8sIHJlZ191bWF4KHNpemVfcmVnKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgQlBGX1dSSVRFLCB6ZXJvX3NpemVfYWxsb3dlZCwgbWV0YSk7XFxuK1xcbiBcXHRpZiAoIWVycikge1xcbiBcXHRcXHRpbnQgcmVnbm8gPSByZWdfZnJvbV9hcmdubyhzaXplX2FyZ25vKTtcXG4gXFxuQEAgLTY5MjAsMTUgKzY5ODEsMjIgQEAgc3RhdGljIGludCBjaGVja19tZW1fc2l6ZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRlcnIgPSBtYXJrX3N0YWNrX2FyZ19wcmVjaXNpb24oZW52LCBhcmdfaWR4X2Zyb21fYXJnbm8oc2l6ZV9hcmdubykpO1xcbiBcXHR9XFxuK1xcbitcXHRpZiAobWF5X2JlX251bGwpXFxuK1xcdFxcdCptZW1fcmVnID0gc2F2ZWRfcmVnO1xcbitcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBjaGVja19tZW1fcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLVxcdFxcdFxcdCBhcmdub190IGFyZ25vLCB1MzIgbWVtX3NpemUpXFxuK1xcdFxcdFxcdCBhcmdub190IGFyZ25vLCB1MzIgbWVtX3NpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIGFjY2Vzc190eXBlLFxcbitcXHRcXHRcXHQgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxcbiB7XFxuK1xcdC8qIG1ldGEtXFx1MDAzZWJ0ZiBpcyBzZXQgb25seSBmb3Iga2Z1bmNzOyBhIE5VTEwgbWV0YSBtZWFucyBhIGdsb2JhbCBzdWJwcm9nLiAqL1xcbitcXHRib29sIGhlbHBlciA9IG1ldGEgXFx1MDAyNlxcdTAwMjYgIW1ldGEtXFx1MDAzZWJ0ZjtcXG4gXFx0Ym9vbCBtYXlfYmVfbnVsbCA9IHR5cGVfbWF5X2JlX251bGwocmVnLVxcdTAwM2V0eXBlKTtcXG4gXFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgc2F2ZWRfcmVnO1xcbi1cXHRpbnQgZXJyO1xcbitcXHRpbnQgc2l6ZSwgZXJyID0gMDtcXG4gXFxuIFxcdGlmIChicGZfcmVnaXN0ZXJfaXNfbnVsbChyZWcpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG5AQCAtNjk0OCwxMCArNzAxNiwxMiBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ1xcbiBcXHRcXHRtYXJrX3B0cl9ub3RfbnVsbF9yZWcocmVnKTtcXG4gXFx0fVxcbiBcXG4tXFx0aW50IHNpemUgPSBiYXNlX3R5cGUocmVnLVxcdTAwM2V0eXBlKSA9PSBQVFJfVE9fU1RBQ0sgPyAtKGludCltZW1fc2l6ZSA6IG1lbV9zaXplO1xcbitcXHRzaXplID0gKCFoZWxwZXIgXFx1MDAyNlxcdTAwMjYgYmFzZV90eXBlKHJlZy1cXHUwMDNldHlwZSkgPT0gUFRSX1RPX1NUQUNLKSA/IC0oaW50KW1lbV9zaXplIDogbWVtX3NpemU7XFxuIFxcbi1cXHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIHNpemUsIEJQRl9SRUFELCB0cnVlLCBOVUxMKTtcXG4tXFx0ZXJyID0gZXJyID86IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgc2l6ZSwgQlBGX1dSSVRFLCB0cnVlLCBOVUxMKTtcXG4rXFx0aWYgKGFjY2Vzc190eXBlIFxcdTAwMjYgQlBGX1JFQUQpXFxuK1xcdFxcdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgc2l6ZSwgQlBGX1JFQUQsIHRydWUsIG1ldGEpO1xcbitcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiAoYWNjZXNzX3R5cGUgXFx1MDAyNiBCUEZfV1JJVEUpKVxcbitcXHRcXHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIHNpemUsIEJQRl9XUklURSwgdHJ1ZSwgbWV0YSk7XFxuIFxcbiBcXHRpZiAobWF5X2JlX251bGwpXFxuIFxcdFxcdCpyZWcgPSBzYXZlZF9yZWc7XFxuQEAgLTY5OTMsMjggKzcwNjMsMzMgQEAgc3RhdGljIGludCBwcm9jZXNzX2NvbnN0X2FsbG9jX21lbV9zaXplKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfbWVtX3NpemVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICptZW1fcmVnLFxcbi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnNpemVfcmVnLCBhcmdub190IG1lbV9hcmdubywgYXJnbm9fdCBzaXplX2FyZ25vKVxcbitzdGF0aWMgaW50IHByb2Nlc3NfY29uc3RfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuK1xcdFxcdFxcdCAgICAgYXJnbm9fdCBhcmdubywgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxcbiB7XFxuLVxcdGJvb2wgbWF5X2JlX251bGwgPSB0eXBlX21heV9iZV9udWxsKG1lbV9yZWctXFx1MDAzZXR5cGUpO1xcbi1cXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSBzYXZlZF9yZWc7XFxuLVxcdHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSBtZXRhO1xcbitcXHRpbnQgcmVnbm8gPSByZWdfZnJvbV9hcmdubyhhcmdubyk7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRtZW1zZXQoXFx1MDAyNm1ldGEsIDAsIHNpemVvZihtZXRhKSk7XFxuK1xcdGlmIChtZXRhLVxcdTAwM2VhcmdfY29uc3RhbnQuZm91bmQpIHtcXG4rXFx0XFx0dmVyaWZpZXJfYnVnKGVudiwgXFxcIm9ubHkgb25lIGNvbnN0YW50IGFyZ3VtZW50IHBlcm1pdHRlZFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0fVxcbiBcXG4tXFx0aWYgKG1heV9iZV9udWxsKSB7XFxuLVxcdFxcdHNhdmVkX3JlZyA9ICptZW1fcmVnO1xcbi1cXHRcXHRtYXJrX3B0cl9ub3RfbnVsbF9yZWcobWVtX3JlZyk7XFxuK1xcdGlmICghdG51bV9pc19jb25zdChyZWctXFx1MDAzZXZhcl9vZmYpKSB7XFxuK1xcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgbXVzdCBiZSBhIGtub3duIGNvbnN0YW50XFxcXG5cXFwiLCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4tXFx0ZXJyID0gY2hlY2tfbWVtX3NpemVfcmVnKGVudiwgbWVtX3JlZywgc2l6ZV9yZWcsIG1lbV9hcmdubywgc2l6ZV9hcmdubywgQlBGX1JFQUQsIHRydWUsIFxcdTAwMjZtZXRhKTtcXG4tXFx0ZXJyID0gZXJyID86IGNoZWNrX21lbV9zaXplX3JlZyhlbnYsIG1lbV9yZWcsIHNpemVfcmVnLCBtZW1fYXJnbm8sIHNpemVfYXJnbm8sIEJQRl9XUklURSwgdHJ1ZSwgXFx1MDAyNm1ldGEpO1xcbitcXHRpZiAocmVnbm8gXFx1MDAzZT0gMClcXG4rXFx0XFx0ZXJyID0gbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCByZWdubyk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZXJyID0gbWFya19zdGFja19hcmdfcHJlY2lzaW9uKGVudiwgYXJnX2lkeF9mcm9tX2FyZ25vKGFyZ25vKSk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0aWYgKG1heV9iZV9udWxsKVxcbi1cXHRcXHQqbWVtX3JlZyA9IHNhdmVkX3JlZztcXG4rXFx0bWV0YS1cXHUwMDNlYXJnX2NvbnN0YW50LmZvdW5kID0gdHJ1ZTtcXG4rXFx0bWV0YS1cXHUwMDNlYXJnX2NvbnN0YW50LnZhbHVlID0gcmVnLVxcdTAwM2V2YXJfb2ZmLnZhbHVlO1xcbiBcXG4tXFx0cmV0dXJuIGVycjtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIGVudW0ge1xcbkBAIC03MjI0LDE4ICs3Mjk5LDYgQEAgc3RhdGljIGludCBwcm9jZXNzX3RpbWVyX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGVcXG4gXFx0cmV0dXJuIGNoZWNrX21hcF9maWVsZF9wb2ludGVyKGVudiwgcmVnLCBhcmdubywgQlBGX1RJTUVSLCBtYXApO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHByb2Nlc3NfdGltZXJfaGVscGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcXG4te1xcbi1cXHRyZXR1cm4gcHJvY2Vzc190aW1lcl9mdW5jKGVudiwgcmVnLCBhcmdubywgXFx1MDAyNm1ldGEtXFx1MDAzZW1hcCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgcHJvY2Vzc190aW1lcl9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxcbi17XFxuLVxcdHJldHVybiBwcm9jZXNzX3RpbWVyX2Z1bmMoZW52LCByZWcsIGFyZ25vLCBcXHUwMDI2bWV0YS1cXHUwMDNlbWFwKTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBwcm9jZXNzX2twdHJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcmVnbm8sXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxcbiB7XFxuQEAgLTc3MzgsOCArNzgwMSw3IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19pdGVyX25leHRfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsXFxuIFxcbiBzdGF0aWMgYm9vbCBhcmdfdHlwZV9pc19tZW1fc2l6ZShlbnVtIGJwZl9hcmdfdHlwZSB0eXBlKVxcbiB7XFxuLVxcdHJldHVybiB0eXBlID09IEFSR19DT05TVF9TSVpFIHx8XFxuLVxcdCAgICAgICB0eXBlID09IEFSR19DT05TVF9TSVpFX09SX1pFUk87XFxuK1xcdHJldHVybiBiYXNlX3R5cGUodHlwZSkgPT0gQVJHX01FTV9TSVpFO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBhcmdfdHlwZV9pc19yYXdfbWVtKGVudW0gYnBmX2FyZ190eXBlIHR5cGUpXFxuQEAgLTc4ODUsOCArNzk0Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3JlZ190eXBlcyBkeW5wdHJfdHlwZXMgPSB7XFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3JlZ190eXBlcyAqY29tcGF0aWJsZV9yZWdfdHlwZXNbX19CUEZfQVJHX1RZUEVfTUFYXSA9IHtcXG4gXFx0W0FSR19QVFJfVE9fTUFQX0tFWV1cXHRcXHQ9IFxcdTAwMjZtZW1fdHlwZXMsXFxuIFxcdFtBUkdfUFRSX1RPX01BUF9WQUxVRV1cXHRcXHQ9IFxcdTAwMjZtZW1fdHlwZXMsXFxuLVxcdFtBUkdfQ09OU1RfU0laRV1cXHRcXHQ9IFxcdTAwMjZzY2FsYXJfdHlwZXMsXFxuLVxcdFtBUkdfQ09OU1RfU0laRV9PUl9aRVJPXVxcdD0gXFx1MDAyNnNjYWxhcl90eXBlcyxcXG4rXFx0W0FSR19NRU1fU0laRV1cXHRcXHRcXHQ9IFxcdTAwMjZzY2FsYXJfdHlwZXMsXFxuIFxcdFtBUkdfQ09OU1RfQUxMT0NfU0laRV9PUl9aRVJPXVxcdD0gXFx1MDAyNnNjYWxhcl90eXBlcyxcXG4gXFx0W0FSR19DT05TVF9NQVBfUFRSXVxcdFxcdD0gXFx1MDAyNmNvbnN0X21hcF9wdHJfdHlwZXMsXFxuIFxcdFtBUkdfUFRSX1RPX0NUWF1cXHRcXHQ9IFxcdTAwMjZjb250ZXh0X3R5cGVzLFxcbkBAIC04Mjg2LDExICs4MzQ3LDU1IEBAIHN0YXRpYyBpbnQgZ2V0X2NvbnN0YW50X21hcF9rZXkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFxuIHN0YXRpYyBib29sIGNhbl9lbGlkZV92YWx1ZV9udWxsbmVzcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcXG4gXFxuKy8qIFJlY29yZCB0aGUgYnBmX21hcCBhcmd1bWVudCBvZiBhIGhlbHBlciBvciBrZnVuYyBjYWxsIGluIG1ldGEtXFx1MDAzZW1hcC5cXG4rICpcXG4rICogV2hlbiBtZXRhLVxcdTAwM2VtYXAgaXMgYWxyZWFkeSBzZXQgZnJvbSBhbiBlYXJsaWVyIGFyZ3VtZW50IChhIHRpbWVyLCB3b3JrcXVldWUgb3JcXG4rICogdGFza193b3JrIG9iamVjdCB0aGF0IGlzIGJvdW5kIHRvIGEgbWFwKSwgcmVqZWN0IGEgbWFwIHBvaW50ZXIgdGhhdCBkb2VzIG5vdFxcbisgKiBtYXRjaCBpdC4gVGhhdCBvYmplY3Qgc2l0cyBpbiB0aGUgcmVnaXN0ZXIgcmlnaHQgYmVmb3JlIHRoZSBtYXAgYXJndW1lbnQsIGFuZFxcbisgKiBpdHMgdHlwZSBpcyB0YWtlbiBmcm9tIHRoZSBib3VuZCBtYXAncyByZWNvcmQgZm9yIHRoZSBkaWFnbm9zdGljLlxcbisgKi9cXG4rc3RhdGljIGludCBwcm9jZXNzX21hcF9wdHJfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuK1xcdFxcdFxcdCAgICAgICBhcmdub190IGFyZ25vLCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXFxuK3tcXG4rXFx0aW50IG1hcF9yZWdubyA9IHJlZ19mcm9tX2FyZ25vKGFyZ25vKTtcXG4rXFxuK1xcdC8qIFVzZSBtYXBfdWlkICh3aGljaCBpcyB1bmlxdWUgaWQgb2YgaW5uZXIgbWFwKSB0byByZWplY3Q6XFxuK1xcdCAqIGlubmVyX21hcDEgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5MSlcXG4rXFx0ICogaW5uZXJfbWFwMiA9IGJwZl9tYXBfbG9va3VwX2VsZW0ob3V0ZXJfbWFwLCBrZXkyKVxcbitcXHQgKiBpZiAoaW5uZXJfbWFwMSBcXHUwMDI2XFx1MDAyNiBpbm5lcl9tYXAyKSB7XFxuK1xcdCAqICAgICB0aW1lciA9IGJwZl9tYXBfbG9va3VwX2VsZW0oaW5uZXJfbWFwMSk7XFxuK1xcdCAqICAgICBpZiAodGltZXIpXFxuK1xcdCAqICAgICAgICAgLy8gbWlzbWF0Y2ggd291bGQgaGF2ZSBiZWVuIGFsbG93ZWRcXG4rXFx0ICogICAgICAgICBicGZfdGltZXJfaW5pdCh0aW1lciwgaW5uZXJfbWFwMik7XFxuK1xcdCAqIH1cXG4rXFx0ICpcXG4rXFx0ICogQ29tcGFyaW5nIG1hcF9wdHIgaXMgZW5vdWdoIHRvIGRpc3Rpbmd1aXNoIG5vcm1hbCBhbmQgb3V0ZXIgbWFwcy5cXG4rXFx0ICovXFxuK1xcdGlmIChtZXRhLVxcdTAwM2VtYXAucHRyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAobWV0YS1cXHUwMDNlbWFwLnB0ciAhPSByZWctXFx1MDAzZW1hcF9wdHIgfHwgbWV0YS1cXHUwMDNlbWFwLnVpZCAhPSByZWctXFx1MDAzZW1hcF91aWQpKSB7XFxuK1xcdFxcdHN0cnVjdCBidGZfcmVjb3JkICpyZWMgPSBtZXRhLVxcdTAwM2VtYXAucHRyLVxcdTAwM2VyZWNvcmQ7XFxuK1xcdFxcdGNvbnN0IGNoYXIgKm9ial9uYW1lID0gXFxcIndvcmtxdWV1ZVxcXCI7XFxuK1xcbitcXHRcXHRpZiAocmVjLVxcdTAwM2V0aW1lcl9vZmYgXFx1MDAzZT0gMClcXG4rXFx0XFx0XFx0b2JqX25hbWUgPSBcXFwidGltZXJcXFwiO1xcbitcXHRcXHRlbHNlIGlmIChyZWMtXFx1MDAzZXRhc2tfd29ya19vZmYgXFx1MDAzZT0gMClcXG4rXFx0XFx0XFx0b2JqX25hbWUgPSBcXFwiYnBmX3Rhc2tfd29ya1xcXCI7XFxuK1xcbitcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIHBvaW50ZXIgaW4gUiVkIG1hcF91aWQ9JWQgZG9lc24ndCBtYXRjaCBtYXAgcG9pbnRlciBpbiBSJWQgbWFwX3VpZD0lZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0b2JqX25hbWUsIG1hcF9yZWdubyAtIDEsIG1ldGEtXFx1MDAzZW1hcC51aWQsIG1hcF9yZWdubywgcmVnLVxcdTAwM2VtYXBfdWlkKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdG1ldGEtXFx1MDAzZW1hcC5wdHIgPSByZWctXFx1MDAzZW1hcF9wdHI7XFxuK1xcdG1ldGEtXFx1MDAzZW1hcC51aWQgPSByZWctXFx1MDAzZW1hcF91aWQ7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsXFxuIFxcdFxcdFxcdCAgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbi1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm4sXFxuIFxcdFxcdFxcdCAgaW50IGluc25faWR4KVxcbiB7XFxuK1xcdGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm4gPSBtZXRhLVxcdTAwM2VmbjtcXG4gXFx0dTMyIHJlZ25vID0gQlBGX1JFR18xICsgYXJnO1xcbiBcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnID0gcmVnX3N0YXRlKGVudiwgcmVnbm8pO1xcbiBcXHRlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSA9IGZuLVxcdTAwM2VhcmdfdHlwZVthcmddO1xcbkBAIC04MzYxLDI5ICs4NDY2LDkgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgYXJnLFxcbiBcXHRzd2l0Y2ggKGJhc2VfdHlwZShhcmdfdHlwZSkpIHtcXG4gXFx0Y2FzZSBBUkdfQ09OU1RfTUFQX1BUUjpcXG4gXFx0XFx0LyogYnBmX21hcF94eHgobWFwX3B0cikgY2FsbDogcmVtZW1iZXIgdGhhdCBtYXBfcHRyICovXFxuLVxcdFxcdGlmIChtZXRhLVxcdTAwM2VtYXAucHRyKSB7XFxuLVxcdFxcdFxcdC8qIFVzZSBtYXBfdWlkICh3aGljaCBpcyB1bmlxdWUgaWQgb2YgaW5uZXIgbWFwKSB0byByZWplY3Q6XFxuLVxcdFxcdFxcdCAqIGlubmVyX21hcDEgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5MSlcXG4tXFx0XFx0XFx0ICogaW5uZXJfbWFwMiA9IGJwZl9tYXBfbG9va3VwX2VsZW0ob3V0ZXJfbWFwLCBrZXkyKVxcbi1cXHRcXHRcXHQgKiBpZiAoaW5uZXJfbWFwMSBcXHUwMDI2XFx1MDAyNiBpbm5lcl9tYXAyKSB7XFxuLVxcdFxcdFxcdCAqICAgICB0aW1lciA9IGJwZl9tYXBfbG9va3VwX2VsZW0oaW5uZXJfbWFwMSk7XFxuLVxcdFxcdFxcdCAqICAgICBpZiAodGltZXIpXFxuLVxcdFxcdFxcdCAqICAgICAgICAgLy8gbWlzbWF0Y2ggd291bGQgaGF2ZSBiZWVuIGFsbG93ZWRcXG4tXFx0XFx0XFx0ICogICAgICAgICBicGZfdGltZXJfaW5pdCh0aW1lciwgaW5uZXJfbWFwMik7XFxuLVxcdFxcdFxcdCAqIH1cXG4tXFx0XFx0XFx0ICpcXG4tXFx0XFx0XFx0ICogQ29tcGFyaW5nIG1hcF9wdHIgaXMgZW5vdWdoIHRvIGRpc3Rpbmd1aXNoIG5vcm1hbCBhbmQgb3V0ZXIgbWFwcy5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGlmIChtZXRhLVxcdTAwM2VtYXAucHRyICE9IHJlZy1cXHUwMDNlbWFwX3B0ciB8fFxcbi1cXHRcXHRcXHQgICAgbWV0YS1cXHUwMDNlbWFwLnVpZCAhPSByZWctXFx1MDAzZW1hcF91aWQpIHtcXG4tXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcXCJ0aW1lciBwb2ludGVyIGluIFIxIG1hcF91aWQ9JWQgZG9lc24ndCBtYXRjaCBtYXAgcG9pbnRlciBpbiBSMiBtYXBfdWlkPSVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRtZXRhLVxcdTAwM2VtYXAudWlkLCByZWctXFx1MDAzZW1hcF91aWQpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuLVxcdFxcdG1ldGEtXFx1MDAzZW1hcC5wdHIgPSByZWctXFx1MDAzZW1hcF9wdHI7XFxuLVxcdFxcdG1ldGEtXFx1MDAzZW1hcC51aWQgPSByZWctXFx1MDAzZW1hcF91aWQ7XFxuK1xcdFxcdGVyciA9IHByb2Nlc3NfbWFwX3B0cl9hcmcoZW52LCByZWcsIGFyZ25vLCBtZXRhKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgQVJHX1BUUl9UT19NQVBfS0VZOlxcbiBcXHRcXHQvKiBicGZfbWFwX3h4eCguLi4sIG1hcF9wdHIsIC4uLiwga2V5KSBjYWxsOlxcbkBAIC04NDY2LDcgKzg1NTEsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsXFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgQVJHX1BUUl9UT19USU1FUjpcXG4tXFx0XFx0ZXJyID0gcHJvY2Vzc190aW1lcl9oZWxwZXIoZW52LCByZWcsIGFyZ25vLCBtZXRhKTtcXG4rXFx0XFx0ZXJyID0gcHJvY2Vzc190aW1lcl9mdW5jKGVudiwgcmVnLCBhcmdubywgXFx1MDAyNm1ldGEtXFx1MDAzZW1hcCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC04NDc0LDMxICs4NTU5LDIyIEBAIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGFyZyxcXG4gXFx0XFx0bWV0YS1cXHUwMDNlc3VicHJvZ25vID0gcmVnLVxcdTAwM2VzdWJwcm9nbm87XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEFSR19QVFJfVE9fTUVNOlxcbi1cXHRcXHQvKiBUaGUgYWNjZXNzIHRvIHRoaXMgcG9pbnRlciBpcyBvbmx5IGNoZWNrZWQgd2hlbiB3ZSBoaXQgdGhlXFxuLVxcdFxcdCAqIG5leHQgaXNfbWVtX3NpemUgYXJndW1lbnQgYmVsb3cuXFxuLVxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoYXJnX3R5cGUgXFx1MDAyNiBNRU1fRklYRURfU0laRSkge1xcbi1cXHRcXHRcXHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIGZuLVxcdTAwM2Vhcmdfc2l6ZVthcmddLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBhcmdfdHlwZSBcXHUwMDI2IE1FTV9XUklURSA/IEJQRl9XUklURSA6IEJQRl9SRUFELFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBmYWxzZSwgbWV0YSk7XFxuK1xcdFxcdFxcdGVyciA9IGNoZWNrX21lbV9yZWcoZW52LCByZWcsIGFyZ25vX2Zyb21fcmVnKHJlZ25vKSwgZm4tXFx1MDAzZWFyZ19zaXplW2FyZ10sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBhcmdfdHlwZSBcXHUwMDI2IE1FTV9XUklURSA/IEJQRl9XUklURSA6IEJQRl9SRUFELCBtZXRhKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0XFx0aWYgKGFyZ190eXBlIFxcdTAwMjYgTUVNX0FMSUdORUQpXFxuIFxcdFxcdFxcdFxcdGVyciA9IGNoZWNrX3B0cl9hbGlnbm1lbnQoZW52LCByZWcsIDAsIGZuLVxcdTAwM2Vhcmdfc2l6ZVthcmddLCB0cnVlKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnNpemVfcmVnID0gcmVnX3N0YXRlKGVudiwgcmVnbm8gKyAxKTtcXG4rXFxuK1xcdFxcdFxcdGVyciA9IGNoZWNrX21lbV9zaXplX3JlZyhlbnYsIHJlZywgc2l6ZV9yZWcsIGFyZ25vLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgYXJnbm9fZnJvbV9yZWcocmVnbm8gKyAxKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGFyZ190eXBlIFxcdTAwMjYgTUVNX1dSSVRFID8gQlBGX1dSSVRFIDogQlBGX1JFQUQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBmbi1cXHUwMDNlYXJnX3R5cGVbYXJnICsgMV0gXFx1MDAyNiBTQ0FMQVJfTUFZQkVfWkVSTywgbWV0YSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgQVJHX0NPTlNUX1NJWkU6XFxuLVxcdFxcdGVyciA9IGNoZWNrX21lbV9zaXplX3JlZyhlbnYsIHJlZ19zdGF0ZShlbnYsIHJlZ25vIC0gMSksIHJlZyxcXG4tXFx0XFx0XFx0XFx0XFx0IGFyZ25vX2Zyb21fcmVnKHJlZ25vIC0gMSksIGFyZ25vLFxcbi1cXHRcXHRcXHRcXHRcXHQgZm4tXFx1MDAzZWFyZ190eXBlW2FyZyAtIDFdIFxcdTAwMjYgTUVNX1dSSVRFID8gQlBGX1dSSVRFIDogQlBGX1JFQUQsXFxuLVxcdFxcdFxcdFxcdFxcdCBmYWxzZSwgbWV0YSk7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIEFSR19DT05TVF9TSVpFX09SX1pFUk86XFxuLVxcdFxcdGVyciA9IGNoZWNrX21lbV9zaXplX3JlZyhlbnYsIHJlZ19zdGF0ZShlbnYsIHJlZ25vIC0gMSksIHJlZyxcXG4tXFx0XFx0XFx0XFx0XFx0IGFyZ25vX2Zyb21fcmVnKHJlZ25vIC0gMSksIGFyZ25vLFxcbi1cXHRcXHRcXHRcXHRcXHQgZm4tXFx1MDAzZWFyZ190eXBlW2FyZyAtIDFdIFxcdTAwMjYgTUVNX1dSSVRFID8gQlBGX1dSSVRFIDogQlBGX1JFQUQsXFxuLVxcdFxcdFxcdFxcdFxcdCB0cnVlLCBtZXRhKTtcXG4tXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgQVJHX1BUUl9UT19EWU5QVFI6XFxuIFxcdFxcdGVyciA9IHByb2Nlc3NfZHlucHRyX2Z1bmMoZW52LCByZWcsIGFyZ25vLCBpbnNuX2lkeCwgYXJnX3R5cGUsIFxcdTAwMjZtZXRhLVxcdTAwM2VyZWZfb2JqLFxcbiBcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZtZXRhLVxcdTAwM2VkeW5wdHIpO1xcbkBAIC04ODIzLDcgKzg4OTksNyBAQCBzdGF0aWMgYm9vbCBjaGVja19yYXdfbW9kZV9vayhjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmZuLCBzdHJ1Y3QgYnBmX2NhbGxfYVxcbiB7XFxuIFxcdGludCBpO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoZm4tXFx1MDAzZWFyZ190eXBlKTsgaSsrKSB7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNQVhfQlBGX0ZVTkNfUkVHX0FSR1M7IGkrKykge1xcbiBcXHRcXHRpZiAoIWFyZ190eXBlX2lzX3Jhd19tZW0oZm4tXFx1MDAzZWFyZ190eXBlW2ldKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGlmIChtZXRhLVxcdTAwM2VhcmdfcmF3X21lbS5yZWdubylcXG5AQCAtODg0MCw3ICs4OTE2LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfYXJnc19wYWlyX2ludmFsaWQoY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbiwgaW50IGFyZylcXG4gXFx0Ym9vbCBoYXNfc2l6ZSA9IGZuLVxcdTAwM2Vhcmdfc2l6ZVthcmddICE9IDA7XFxuIFxcdGJvb2wgaXNfbmV4dF9zaXplID0gZmFsc2U7XFxuIFxcbi1cXHRpZiAoYXJnICsgMSBcXHUwMDNjIEFSUkFZX1NJWkUoZm4tXFx1MDAzZWFyZ190eXBlKSlcXG4rXFx0aWYgKGFyZyArIDEgXFx1MDAzYyBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpXFxuIFxcdFxcdGlzX25leHRfc2l6ZSA9IGFyZ190eXBlX2lzX21lbV9zaXplKGZuLVxcdTAwM2VhcmdfdHlwZVthcmcgKyAxXSk7XFxuIFxcbiBcXHRpZiAoYmFzZV90eXBlKGZuLVxcdTAwM2VhcmdfdHlwZVthcmddKSAhPSBBUkdfUFRSX1RPX01FTSlcXG5AQCAtODg3MSw3ICs4OTQ3LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfYnRmX2lkX29rKGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm4pXFxuIHtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShmbi1cXHUwMDNlYXJnX3R5cGUpOyBpKyspIHtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1BWF9CUEZfRlVOQ19SRUdfQVJHUzsgaSsrKSB7XFxuIFxcdFxcdGlmIChiYXNlX3R5cGUoZm4tXFx1MDAzZWFyZ190eXBlW2ldKSA9PSBBUkdfUFRSX1RPX0JURl9JRClcXG4gXFx0XFx0XFx0cmV0dXJuICEhZm4tXFx1MDAzZWFyZ19idGZfaWRbaV07XFxuIFxcdFxcdGlmIChiYXNlX3R5cGUoZm4tXFx1MDAzZWFyZ190eXBlW2ldKSA9PSBBUkdfUFRSX1RPX1NQSU5fTE9DSylcXG5AQCAtODg5MCw3ICs4OTY2LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfbWVtX2FyZ19yd19mbGFnX29rKGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm4pXFxuIHtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShmbi1cXHUwMDNlYXJnX3R5cGUpOyBpKyspIHtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1BWF9CUEZfRlVOQ19SRUdfQVJHUzsgaSsrKSB7XFxuIFxcdFxcdGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlID0gZm4tXFx1MDAzZWFyZ190eXBlW2ldO1xcbiBcXG4gXFx0XFx0aWYgKGJhc2VfdHlwZShhcmdfdHlwZSkgIT0gQVJHX1BUUl9UT19NRU0pXFxuQEAgLTg5MDYsNyArODk4Miw3IEBAIHN0YXRpYyBib29sIGNoZWNrX3Byb3RvX3JlbGVhc2VfcmVnKGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm4sIHN0cnVjdCBicGZfXFxuIHtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShmbi1cXHUwMDNlYXJnX3R5cGUpOyBpKyspIHtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1BWF9CUEZfRlVOQ19SRUdfQVJHUzsgaSsrKSB7XFxuIFxcdFxcdGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlID0gZm4tXFx1MDAzZWFyZ190eXBlW2ldO1xcbiBcXG4gXFx0XFx0aWYgKGFyZ190eXBlX2lzX3JlbGVhc2UoYXJnX3R5cGUpKSB7XFxuQEAgLTkyNTIsNyArOTMyOCw3IEBAIHN0YXRpYyBpbnQgYnRmX2NoZWNrX2Z1bmNfYXJnX21hdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLFxcbiBcXHRcXHRcXHRyZXQgPSBjaGVja19mdW5jX2FyZ19yZWdfb2ZmKGVudiwgcmVnLCBhcmdubywgQVJHX0RPTlRDQVJFKTtcXG4gXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdFxcdGlmIChjaGVja19tZW1fcmVnKGVudiwgcmVnLCBhcmdubywgYXJnLVxcdTAwM2VtZW1fc2l6ZSkpXFxuK1xcdFxcdFxcdGlmIChjaGVja19tZW1fcmVnKGVudiwgcmVnLCBhcmdubywgYXJnLVxcdTAwM2VtZW1fc2l6ZSwgQlBGX1JFQUQgfCBCUEZfV1JJVEUsIE5VTEwpKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0aWYgKCEoYXJnLVxcdTAwM2VhcmdfdHlwZSBcXHUwMDI2IFBUUl9NQVlCRV9OVUxMKSBcXHUwMDI2XFx1MDAyNiAocmVnLVxcdTAwM2V0eXBlIFxcdTAwMjYgUFRSX01BWUJFX05VTEwpKSB7XFxuIFxcdFxcdFxcdFxcdGJwZl9sb2cobG9nLCBcXFwiJXMgaXMgZXhwZWN0ZWQgdG8gYmUgbm9uLU5VTExcXFxcblxcXCIsXFxuQEAgLTEwMjk3LDkgKzEwMzczLDEwIEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXFxuIFxcdFxcdGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3NsZWVwYWJsZSA9IHRydWU7XFxuIFxcbiBcXHRtZXRhLmZ1bmNfaWQgPSBmdW5jX2lkO1xcbitcXHRtZXRhLmZuID0gZm47XFxuIFxcdC8qIGNoZWNrIGFyZ3MgKi9cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1BWF9CUEZfRlVOQ19SRUdfQVJHUzsgaSsrKSB7XFxuLVxcdFxcdGVyciA9IGNoZWNrX2Z1bmNfYXJnKGVudiwgaSwgXFx1MDAyNm1ldGEsIGZuLCBpbnNuX2lkeCk7XFxuK1xcdFxcdGVyciA9IGNoZWNrX2Z1bmNfYXJnKGVudiwgaSwgXFx1MDAyNm1ldGEsIGluc25faWR4KTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbkBAIC0xMDc3MSwyNiArMTA4NDgsMjQgQEAgc3RhdGljIGJvb2wgaXNfa2Z1bmNfcmN1X3Byb3RlY3RlZChzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19tZW1fc2l6ZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnLFxcbi1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuK1xcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdDtcXG4gXFxuIFxcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFyZy1cXHUwMDNldHlwZSwgTlVMTCk7XFxuLVxcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKHQpIHx8IHJlZy1cXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpXFxuK1xcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKHQpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXFxcIl9fc3pcXFwiKTtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnLFxcbi1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbitcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0O1xcbiBcXG4gXFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG4tXFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIodCkgfHwgcmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSlcXG4rXFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIodCkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcXFwiX19zemtcXFwiKTtcXG5AQCAtMTA4MTEsNiArMTA4ODYsMTEgQEAgc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX21hcChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcXG4gXFx0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFxcXCJfX21hcFxcXCIpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfY29uc3RfbWFwKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxcbit7XFxuK1xcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcXFwiX19jb25zdF9tYXBcXFwiKTtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2FsbG9jX29iaihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcXG4ge1xcbiBcXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXFxcIl9fYWxsb2NcXFwiKTtcXG5AQCAtMTEwNTEsMTggKzExMTMxLDIxIEBAIGVudW0ga2Z1bmNfcHRyX2FyZ190eXBlIHtcXG4gXFx0S0ZfQVJHX1BUUl9UT19MSVNUX05PREUsXFxuIFxcdEtGX0FSR19QVFJfVE9fQlRGX0lELFxcdCAgICAgICAvKiBBbHNvIGNvdmVycyByZWcyYnRmX2lkcyBjb252ZXJzaW9ucyAqL1xcbiBcXHRLRl9BUkdfUFRSX1RPX01FTSxcXG4tXFx0S0ZfQVJHX1BUUl9UT19NRU1fU0laRSxcXHQgICAgICAgLyogU2l6ZSBkZXJpdmVkIGZyb20gbmV4dCBhcmd1bWVudCwgc2tpcCBpdCAqL1xcbiBcXHRLRl9BUkdfUFRSX1RPX0NBTExCQUNLLFxcbiBcXHRLRl9BUkdfUFRSX1RPX1JCX1JPT1QsXFxuIFxcdEtGX0FSR19QVFJfVE9fUkJfTk9ERSxcXG4tXFx0S0ZfQVJHX1BUUl9UT19OVUxMLFxcbiBcXHRLRl9BUkdfUFRSX1RPX0NPTlNUX1NUUixcXG4tXFx0S0ZfQVJHX1BUUl9UT19NQVAsXFxuK1xcdEtGX0FSR19DT05TVF9NQVBfUFRSLFxcbiBcXHRLRl9BUkdfUFRSX1RPX1RJTUVSLFxcbiBcXHRLRl9BUkdfUFRSX1RPX1dPUktRVUVVRSxcXG4gXFx0S0ZfQVJHX1BUUl9UT19JUlFfRkxBRyxcXG4gXFx0S0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLLFxcbiBcXHRLRl9BUkdfUFRSX1RPX1RBU0tfV09SSyxcXG4rXFx0S0ZfQVJHX0NPTlNUX0JURl9JRCxcXHQgICAgICAgLyogY29uc3Qgc2NhbGFyIGNhcnJ5aW5nIGEgQlRGIHR5cGUgaWQgKi9cXG4rXFx0S0ZfQVJHX0NPTlNUX01FTV9TSVpFLFxcdCAgICAgICAvKiBjb25zdCBzY2FsYXIgc2l6aW5nIGEgcHJlY2VkaW5nIG1lbW9yeSBhcmcgKi9cXG4rXFx0S0ZfQVJHX0NPTlNUX0FMTE9DX1NJWkVfT1JfWkVSTywgLyogY29uc3Qgc2NhbGFyIHNpemluZyBhIHJldHVybmVkIGJ1ZmZlciAqL1xcbitcXHRLRl9BUkdfTUVNX1NJWkUsXFx0ICAgICAgIC8qIHNjYWxhciBzaXppbmcgYSBwcmVjZWRpbmcgbWVtb3J5IGFyZyAqL1xcbitcXHRLRl9BUkdfQU5ZVEhJTkcsXFx0ICAgICAgIC8qIHVuY29uc3RyYWluZWQgc2NhbGFyICovXFxuIH07XFxuIFxcbiBlbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7XFxuQEAgLTExMzE4LDEwOCArMTE0MDEsMTU2IEBAIGJvb2wgYnBmX2lzX2tmdW5jX3BrdF9jaGFuZ2luZyhzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXFxuIFxcdHJldHVybiBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfeGRwX3B1bGxfZGF0YV07XFxuIH1cXG4gXFxuLXN0YXRpYyBlbnVtIGtmdW5jX3B0cl9hcmdfdHlwZVxcbi1nZXRfa2Z1bmNfcHRyX2FyZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVyLFxcbi1cXHRcXHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4tXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICpyZWZfdCxcXG4tXFx0XFx0ICAgICAgIGNvbnN0IGNoYXIgKnJlZl90bmFtZSwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJncyxcXG4tXFx0XFx0ICAgICAgIGludCBhcmcsIGludCBuYXJncywgYXJnbm9fdCBhcmdubywgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4rc3RhdGljIGludFxcbitnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbitcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmdzLCBpbnQgYXJnLCBpbnQgbmFyZ3MsIGFyZ25vX3QgYXJnbm8pXFxuIHtcXG4rXFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCAqcmVmX3QgPSBOVUxMO1xcbitcXHRjb25zdCBjaGFyICpyZWZfdG5hbWUgPSBOVUxMO1xcbiBcXHRib29sIGFyZ19tZW1fc2l6ZSA9IGZhbHNlO1xcbitcXHRpbnQgYXJnX3R5cGU7XFxuIFxcbi1cXHRpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2Nhc3RfdG9fa2Vybl9jdHhdIHx8XFxuLVxcdCAgICBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2Vzc2lvbl9pc19yZXR1cm5dIHx8XFxuLVxcdCAgICBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2Vzc2lvbl9jb29raWVdKVxcbi1cXHRcXHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19DVFg7XFxuK1xcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhtZXRhLVxcdTAwM2VidGYsIGFyZ3NbYXJnXS50eXBlLCBOVUxMKTtcXG4gXFxuLVxcdGlmIChhcmcgKyAxIFxcdTAwM2MgbmFyZ3MgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmcgKyAxXSwgZ2V0X2Z1bmNfYXJnX3JlZyhjYWxsZXIsIHJlZ3MsIGFyZyArIDEpKSB8fFxcbi1cXHQgICAgIGlzX2tmdW5jX2FyZ19jb25zdF9tZW1fc2l6ZShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZyArIDFdLCBnZXRfZnVuY19hcmdfcmVnKGNhbGxlciwgcmVncywgYXJnICsgMSkpKSlcXG4tXFx0XFx0YXJnX21lbV9zaXplID0gdHJ1ZTtcXG4rXFx0LyogU2NhbGFyIGFyZ3VtZW50cyBhcmUgY2xhc3NpZmllZCBmcm9tIHRoZWlyIEJURiBzdWZmaXgvbmFtZSBhbG9uZS4gKi9cXG4rXFx0aWYgKGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkge1xcbitcXHRcXHRpZiAoaXNfa2Z1bmNfYXJnX2NvbnN0YW50KG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuK1xcdFxcdFxcdHJldHVybiBLRl9BUkdfQ09OU1RfQlRGX0lEO1xcbitcXHRcXHRpZiAoaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuK1xcdFxcdFxcdHJldHVybiBLRl9BUkdfQ09OU1RfTUVNX1NJWkU7XFxuK1xcdFxcdGlmIChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4rXFx0XFx0XFx0cmV0dXJuIEtGX0FSR19NRU1fU0laRTtcXG4rXFx0XFx0aWYgKGlzX2tmdW5jX2FyZ19zY2FsYXJfd2l0aF9uYW1lKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSwgXFxcInJkb25seV9idWZfc2l6ZVxcXCIpIHx8XFxuK1xcdFxcdCAgICBpc19rZnVuY19hcmdfc2NhbGFyX3dpdGhfbmFtZShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10sIFxcXCJyZHdyX2J1Zl9zaXplXFxcIikpXFxuK1xcdFxcdFxcdHJldHVybiBLRl9BUkdfQ09OU1RfQUxMT0NfU0laRV9PUl9aRVJPO1xcbitcXHRcXHRyZXR1cm4gS0ZfQVJHX0FOWVRISU5HO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWJ0Zl90eXBlX2lzX3B0cih0KSkge1xcbitcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlVucmVjb2duaXplZCAlcyB0eXBlICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ0Zl90eXBlX3N0cih0KSk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRyZWZfdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKG1ldGEtXFx1MDAzZWJ0ZiwgdC1cXHUwMDNldHlwZSwgTlVMTCk7XFxuK1xcdHJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChtZXRhLVxcdTAwM2VidGYsIHJlZl90LVxcdTAwM2VuYW1lX29mZik7XFxuIFxcbiBcXHQvKiBJbiB0aGlzIGZ1bmN0aW9uLCB3ZSB2ZXJpZnkgdGhlIGtmdW5jJ3MgQlRGIGFzIHBlciB0aGUgYXJndW1lbnQgdHlwZSxcXG4gXFx0ICogbGVhdmluZyB0aGUgcmVzdCBvZiB0aGUgdmVyaWZpY2F0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgcmVnaXN0ZXJcXG4gXFx0ICogdHlwZSB0byBvdXIgY2FsbGVyLiBXaGVuIGEgc2V0IG9mIGNvbmRpdGlvbnMgaG9sZCBpbiB0aGUgQlRGIHR5cGUgb2ZcXG4gXFx0ICogYXJndW1lbnRzLCB3ZSByZXNvbHZlIGl0IHRvIGEga25vd24ga2Z1bmNfcHRyX2FyZ190eXBlLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGJ0Zl9pc19wcm9nX2N0eF90eXBlKFxcdTAwMjZlbnYtXFx1MDAzZWxvZywgbWV0YS1cXHUwMDNlYnRmLCB0LCByZXNvbHZlX3Byb2dfdHlwZShlbnYtXFx1MDAzZXByb2cpLCBhcmcpKVxcbi1cXHRcXHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19DVFg7XFxuLVxcbi1cXHRpZiAoaXNfa2Z1bmNfYXJnX251bGxhYmxlKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkgXFx1MDAyNlxcdTAwMjYgYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgIWFyZ19tZW1fc2l6ZSlcXG4tXFx0XFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fTlVMTDtcXG4tXFxuLVxcdGlmIChpc19rZnVuY19hcmdfYWxsb2Nfb2JqKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuLVxcdFxcdHJldHVybiBLRl9BUkdfUFRSX1RPX0FMTE9DX0JURl9JRDtcXG4tXFxuLVxcdGlmIChpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuLVxcdFxcdHJldHVybiBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjtcXG4tXFxuLVxcdGlmIChpc19rZnVuY19hcmdfZHlucHRyKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuLVxcdFxcdHJldHVybiBLRl9BUkdfUFRSX1RPX0RZTlBUUjtcXG4tXFxuLVxcdGlmIChpc19rZnVuY19hcmdfaXRlcihtZXRhLCBhcmcsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbi1cXHRcXHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19JVEVSO1xcbi1cXG4tXFx0aWYgKGlzX2tmdW5jX2FyZ19saXN0X2hlYWQobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4tXFx0XFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fTElTVF9IRUFEO1xcbi1cXG4tXFx0aWYgKGlzX2tmdW5jX2FyZ19saXN0X25vZGUobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4tXFx0XFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fTElTVF9OT0RFO1xcbi1cXG4tXFx0aWYgKGlzX2tmdW5jX2FyZ19yYnRyZWVfcm9vdChtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbi1cXHRcXHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19SQl9ST09UO1xcbi1cXG4tXFx0aWYgKGlzX2tmdW5jX2FyZ19yYnRyZWVfbm9kZShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbi1cXHRcXHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19SQl9OT0RFO1xcbitcXHRpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2Nhc3RfdG9fa2Vybl9jdHhdIHx8XFxuK1xcdCAgICBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2Vzc2lvbl9pc19yZXR1cm5dIHx8XFxuK1xcdCAgICBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfc2Vzc2lvbl9jb29raWVdKVxcbitcXHRcXHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ1RYO1xcbitcXHRlbHNlIGlmIChidGZfaXNfcHJvZ19jdHhfdHlwZShcXHUwMDI2ZW52LVxcdTAwM2Vsb2csIG1ldGEtXFx1MDAzZWJ0ZiwgdCwgcmVzb2x2ZV9wcm9nX3R5cGUoZW52LVxcdTAwM2Vwcm9nKSwgYXJnKSlcXG4rXFx0XFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0NUWDtcXG4rXFx0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2FsbG9jX29iaihtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbitcXHRcXHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQUxMT0NfQlRGX0lEO1xcbitcXHRlbHNlIGlmIChpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuK1xcdFxcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFI7XFxuK1xcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19keW5wdHIobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4rXFx0XFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0RZTlBUUjtcXG4rXFx0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2l0ZXIobWV0YSwgYXJnLCBcXHUwMDI2YXJnc1thcmddKSlcXG4rXFx0XFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0lURVI7XFxuK1xcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19saXN0X2hlYWQobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4rXFx0XFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0xJU1RfSEVBRDtcXG4rXFx0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2xpc3Rfbm9kZShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbitcXHRcXHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fTElTVF9OT0RFO1xcbitcXHRlbHNlIGlmIChpc19rZnVuY19hcmdfcmJ0cmVlX3Jvb3QobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4rXFx0XFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX1JCX1JPT1Q7XFxuK1xcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19yYnRyZWVfbm9kZShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbitcXHRcXHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fUkJfTk9ERTtcXG4rXFx0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2NvbnN0X3N0cihtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbitcXHRcXHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQ09OU1RfU1RSO1xcbitcXHRlbHNlIGlmIChpc19rZnVuY19hcmdfY29uc3RfbWFwKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuK1xcdFxcdGFyZ190eXBlID0gS0ZfQVJHX0NPTlNUX01BUF9QVFI7XFxuK1xcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19tYXAobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4rXFx0XFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0JURl9JRDtcXG4rXFx0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3dxKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuK1xcdFxcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19XT1JLUVVFVUU7XFxuK1xcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ190aW1lcihtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbitcXHRcXHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fVElNRVI7XFxuK1xcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ190YXNrX3dvcmsobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4rXFx0XFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX1RBU0tfV09SSztcXG4rXFx0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2lycV9mbGFnKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuK1xcdFxcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19JUlFfRkxBRztcXG4rXFx0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3Jlc19zcGluX2xvY2sobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4rXFx0XFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX1JFU19TUElOX0xPQ0s7XFxuK1xcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19jYWxsYmFjayhlbnYsIG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuK1xcdFxcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19DQUxMQkFDSztcXG4rXFx0ZWxzZSB7XFxuK1xcdFxcdGlmIChhcmcgKyAxIFxcdTAwM2MgbmFyZ3MgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmcgKyAxXSkgfHxcXG4rXFx0XFx0ICAgICBpc19rZnVuY19hcmdfY29uc3RfbWVtX3NpemUobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmcgKyAxXSkpKVxcbitcXHRcXHRcXHRhcmdfbWVtX3NpemUgPSB0cnVlO1xcbitcXG4rXFx0XFx0aWYgKGJ0Zl90eXBlX2lzX3N0cnVjdChyZWZfdCkgXFx1MDAyNlxcdTAwMjYgIWFyZ19tZW1fc2l6ZSkge1xcbitcXHRcXHRcXHQvKiBBIHBvaW50ZXIgdG8gYSBzdHJ1Y3Qgd2l0aG91dCBhIHNpemUgYXJndW1lbnQgaXMgY2xhc3NpZmllZFxcbitcXHRcXHRcXHQgKiBhcyBLRl9BUkdfUFRSX1RPX0JURl9JRC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19CVEZfSUQ7XFxuK1xcdFxcdH0gZWxzZSBpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcihyZWZfdCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIV9fYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtXFx1MDAzZWJ0ZiwgcmVmX3QsIDApIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgIChhcmdfbWVtX3NpemUgPyAhYnRmX3R5cGVfaXNfdm9pZChyZWZfdCkgOiAxKSkge1xcbitcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIHBvaW50ZXIgdHlwZSAlcyAlcyBtdXN0IHBvaW50IHRvICVzc2NhbGFyLCBvciBzdHJ1Y3Qgd2l0aCBzY2FsYXJcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSxcXG4rXFx0XFx0XFx0XFx0YnRmX3R5cGVfc3RyKHJlZl90KSwgcmVmX3RuYW1lLCBhcmdfbWVtX3NpemUgPyBcXFwidm9pZCwgXFxcIiA6IFxcXCJcXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdC8qIE90aGVyd2lzZSB0aGlzIGlzIGEgbWVtb3J5IGJ1ZmZlciBzdXBwb3J0ZWQgYnlcXG4rXFx0XFx0XFx0ICogY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoKTogYSBwb2ludGVyIHRvIGEgc2NhbGFyLCBvciB0byB2b2lkXFxuK1xcdFxcdFxcdCAqIHdoZW4gcGFpcmVkIHdpdGggYSBzaXplIGFyZ3VtZW50LiBUaGUgYWNjZXNzIHNpemUgaXMgZGVyaXZlZFxcbitcXHRcXHRcXHQgKiBmcm9tIHRoZSBwb2ludGVkLXRvIEJURiB0eXBlIHVubGVzcyBhIHNpemUgYXJndW1lbnQgZm9sbG93cy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGFyZ190eXBlID0gYXJnX21lbV9zaXplID8gS0ZfQVJHX1BUUl9UT19NRU0gOiBLRl9BUkdfUFRSX1RPX01FTSB8IE1FTV9GSVhFRF9TSVpFO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFxuLVxcdGlmIChpc19rZnVuY19hcmdfY29uc3Rfc3RyKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuLVxcdFxcdHJldHVybiBLRl9BUkdfUFRSX1RPX0NPTlNUX1NUUjtcXG4rXFx0aWYgKGlzX2tmdW5jX2FyZ19udWxsYWJsZShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKVxcbitcXHRcXHRhcmdfdHlwZSB8PSBQVFJfTUFZQkVfTlVMTDtcXG4gXFxuLVxcdGlmIChpc19rZnVuY19hcmdfbWFwKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuLVxcdFxcdHJldHVybiBLRl9BUkdfUFRSX1RPX01BUDtcXG4rXFx0cmV0dXJuIGFyZ190eXBlO1xcbit9XFxuIFxcbi1cXHRpZiAoaXNfa2Z1bmNfYXJnX3dxKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuLVxcdFxcdHJldHVybiBLRl9BUkdfUFRSX1RPX1dPUktRVUVVRTtcXG4rc3RhdGljIGludCBnZW5fa2Z1bmNfYXJnX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfZnVuY19wcm90byAqcHJvdG8pXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGJ0ZiAqYnRmID0gbWV0YS1cXHUwMDNlYnRmO1xcbitcXHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmdzO1xcbitcXHR1MzIgaSwgbmFyZ3M7XFxuK1xcdGludCBhcmdfdHlwZTtcXG4gXFxuLVxcdGlmIChpc19rZnVuY19hcmdfdGltZXIobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4tXFx0XFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fVElNRVI7XFxuK1xcdGFyZ3MgPSAoY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqKShtZXRhLVxcdTAwM2VmdW5jX3Byb3RvICsgMSk7XFxuK1xcdG5hcmdzID0gYnRmX3R5cGVfdmxlbihtZXRhLVxcdTAwM2VmdW5jX3Byb3RvKTtcXG4rXFx0aWYgKG5hcmdzIFxcdTAwM2UgTUFYX0JQRl9GVU5DX0FSR1MpIHtcXG4rXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJGdW5jdGlvbiAlcyBoYXMgJWQgXFx1MDAzZSAlZCBhcmdzXFxcXG5cXFwiLCBtZXRhLVxcdTAwM2VmdW5jX25hbWUsXFxuK1xcdFxcdFxcdG5hcmdzLCBNQVhfQlBGX0ZVTkNfQVJHUyk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcdGlmIChuYXJncyBcXHUwMDNlIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyBcXHUwMDI2XFx1MDAyNiAhYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKCkpIHtcXG4rXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJKSVQgZG9lcyBub3Qgc3VwcG9ydCBrZnVuYyAlcygpIHdpdGggJWQgYXJnc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0bWV0YS1cXHUwMDNlZnVuY19uYW1lLCBuYXJncyk7XFxuK1xcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuK1xcdH1cXG4gXFxuLVxcdGlmIChpc19rZnVuY19hcmdfdGFza193b3JrKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxuLVxcdFxcdHJldHVybiBLRl9BUkdfUFRSX1RPX1RBU0tfV09SSztcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5hcmdzOyBpKyspIHtcXG4rXFx0XFx0YXJnbm9fdCBhcmdubyA9IGFyZ25vX2Zyb21fYXJnKGkgKyAxKTtcXG4gXFxuLVxcdGlmIChpc19rZnVuY19hcmdfaXJxX2ZsYWcobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4tXFx0XFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fSVJRX0ZMQUc7XFxuK1xcdFxcdGlmIChpc19rZnVuY19hcmdfcHJvZ19hdXgoYnRmLCBcXHUwMDI2YXJnc1tpXSkgfHxcXG4rXFx0XFx0ICAgIGlzX2tmdW5jX2FyZ19pZ25vcmUoYnRmLCBcXHUwMDI2YXJnc1tpXSkgfHxcXG4rXFx0XFx0ICAgIGlzX2tmdW5jX2FyZ19pbXBsaWNpdChtZXRhLCBpKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRpZiAoaXNfa2Z1bmNfYXJnX3Jlc19zcGluX2xvY2sobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4tXFx0XFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSztcXG4rXFx0XFx0YXJnX3R5cGUgPSBnZXRfa2Z1bmNfYXJnX3R5cGUoZW52LCBtZXRhLCBhcmdzLCBpLCBuYXJncywgYXJnbm8pO1xcbitcXHRcXHRpZiAoYXJnX3R5cGUgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gYXJnX3R5cGU7XFxuIFxcbi1cXHRpZiAoKGJhc2VfdHlwZShyZWctXFx1MDAzZXR5cGUpID09IFBUUl9UT19CVEZfSUQgfHwgcmVnMmJ0Zl9pZHNbYmFzZV90eXBlKHJlZy1cXHUwMDNldHlwZSldKSkge1xcbi1cXHRcXHRpZiAoIWJ0Zl90eXBlX2lzX3N0cnVjdChyZWZfdCkpIHtcXG4tXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJrZXJuZWwgZnVuY3Rpb24gJXMgJXMgcG9pbnRlciB0eXBlICVzICVzIGlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdG1ldGEtXFx1MDAzZWZ1bmNfbmFtZSwgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLFxcbi1cXHRcXHRcXHRcXHRidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUpO1xcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0fVxcbi1cXHRcXHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19CVEZfSUQ7XFxuK1xcdFxcdHByb3RvLVxcdTAwM2VhcmdfdHlwZVtpXSA9IGFyZ190eXBlO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoaXNfa2Z1bmNfYXJnX2NhbGxiYWNrKGVudiwgbWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG4tXFx0XFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s7XFxuLVxcbi1cXHQvKiBUaGlzIGlzIHRoZSBjYXRjaCBhbGwgYXJndW1lbnQgdHlwZSBvZiByZWdpc3RlciB0eXBlcyBzdXBwb3J0ZWQgYnlcXG4tXFx0ICogY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MuIEhvd2V2ZXIsIHdlIG9ubHkgYWxsb3cgd2hlbiBhcmd1bWVudCB0eXBlIGlzXFxuLVxcdCAqIHBvaW50ZXIgdG8gc2NhbGFyLCBvciBzdHJ1Y3QgY29tcG9zZWQgKHJlY3Vyc2l2ZWx5KSBvZiBzY2FsYXJzLiBXaGVuXFxuLVxcdCAqIGFyZ19tZW1fc2l6ZSBpcyB0cnVlLCB0aGUgcG9pbnRlciBjYW4gYmUgdm9pZCAqLlxcbi1cXHQgKi9cXG4tXFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIocmVmX3QpIFxcdTAwMjZcXHUwMDI2ICFfX2J0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVxcdTAwM2VidGYsIHJlZl90LCAwKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKGFyZ19tZW1fc2l6ZSA/ICFidGZfdHlwZV9pc192b2lkKHJlZl90KSA6IDEpKSB7XFxuLVxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgcG9pbnRlciB0eXBlICVzICVzIG11c3QgcG9pbnQgdG8gJXNzY2FsYXIsIG9yIHN0cnVjdCB3aXRoIHNjYWxhclxcXFxuXFxcIixcXG4tXFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLFxcbi1cXHRcXHRcXHRidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUsIGFyZ19tZW1fc2l6ZSA/IFxcXCJ2b2lkLCBcXFwiIDogXFxcIlxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0fVxcbi1cXHRyZXR1cm4gYXJnX21lbV9zaXplID8gS0ZfQVJHX1BUUl9UT19NRU1fU0laRSA6IEtGX0FSR19QVFJfVE9fTUVNO1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBwcm9jZXNzX2tmX2FyZ19wdHJfdG9fYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuQEAgLTEyMDA1LDE2ICsxMjEzNiw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXFxuIFxcbiBcXHRhcmdzID0gKGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKikobWV0YS1cXHUwMDNlZnVuY19wcm90byArIDEpO1xcbiBcXHRuYXJncyA9IGJ0Zl90eXBlX3ZsZW4obWV0YS1cXHUwMDNlZnVuY19wcm90byk7XFxuLVxcdGlmIChuYXJncyBcXHUwMDNlIE1BWF9CUEZfRlVOQ19BUkdTKSB7XFxuLVxcdFxcdHZlcmJvc2UoZW52LCBcXFwiRnVuY3Rpb24gJXMgaGFzICVkIFxcdTAwM2UgJWQgYXJnc1xcXFxuXFxcIiwgZnVuY19uYW1lLCBuYXJncyxcXG4tXFx0XFx0XFx0TUFYX0JQRl9GVU5DX0FSR1MpO1xcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0fVxcbi1cXHRpZiAobmFyZ3MgXFx1MDAzZSBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MgXFx1MDAyNlxcdTAwMjYgIWJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncygpKSB7XFxuLVxcdFxcdHZlcmJvc2UoZW52LCBcXFwiSklUIGRvZXMgbm90IHN1cHBvcnQga2Z1bmMgJXMoKSB3aXRoICVkIGFyZ3NcXFxcblxcXCIsXFxuLVxcdFxcdFxcdGZ1bmNfbmFtZSwgbmFyZ3MpO1xcbi1cXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbi1cXHR9XFxuIFxcbiBcXHRyZXQgPSBjaGVja19vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY2FsbGVyLCBuYXJncyk7XFxuIFxcdGlmIChyZXQpXFxuQEAgLTEyMDMxLDggKzEyMTUyLDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcXG4gXFx0XFx0aW50IHJlZ25vID0gcmVnX2Zyb21fYXJnbm8oYXJnbm8pO1xcbiBcXHRcXHRib29sIGJ0Zl9pZF9maXhlZF9vZmZfb2sgPSB0cnVlO1xcbiBcXHRcXHR1MzIgcmVmX2lkLCB0eXBlX3NpemU7XFxuLVxcdFxcdGJvb2wgaXNfcmV0X2J1Zl9zeiA9IGZhbHNlO1xcbi1cXHRcXHRpbnQga2ZfYXJnX3R5cGU7XFxuK1xcdFxcdGludCBrZl9hcmdfdHlwZSA9IG1ldGEtXFx1MDAzZWZuLVxcdTAwM2VhcmdfdHlwZVtpXTtcXG4gXFxuIFxcdFxcdGlmIChpc19rZnVuY19hcmdfcHJvZ19hdXgoYnRmLCBcXHUwMDI2YXJnc1tpXSkpIHtcXG4gXFx0XFx0XFx0LyogUmVqZWN0IHJlcGVhdGVkIHVzZSBicGZfcHJvZ19hdXggKi9cXG5AQCAtMTIwNTUsNTIgKzEyMTc1LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcXG4gXFxuIFxcdFxcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFyZ3NbaV0udHlwZSwgTlVMTCk7XFxuIFxcbi1cXHRcXHRpZiAoYnRmX3R5cGVfaXNfc2NhbGFyKHQpKSB7XFxuLVxcdFxcdFxcdGlmIChyZWctXFx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKSB7XFxuLVxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgaXMgbm90IGEgc2NhbGFyXFxcXG5cXFwiLCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0XFx0fVxcbi1cXG4tXFx0XFx0XFx0aWYgKGlzX2tmdW5jX2FyZ19jb25zdGFudChtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2ldKSkge1xcbi1cXHRcXHRcXHRcXHRpZiAobWV0YS1cXHUwMDNlYXJnX2NvbnN0YW50LmZvdW5kKSB7XFxuLVxcdFxcdFxcdFxcdFxcdHZlcmlmaWVyX2J1ZyhlbnYsIFxcXCJvbmx5IG9uZSBjb25zdGFudCBhcmd1bWVudCBwZXJtaXR0ZWRcXFwiKTtcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0aWYgKCF0bnVtX2lzX2NvbnN0KHJlZy1cXHUwMDNldmFyX29mZikpIHtcXG4tXFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBtdXN0IGJlIGEga25vd24gY29uc3RhbnRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuLVxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdFxcdGlmIChyZWdubyBcXHUwMDNlPSAwKVxcbi1cXHRcXHRcXHRcXHRcXHRyZXQgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIHJlZ25vKTtcXG4tXFx0XFx0XFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRcXHRcXHRyZXQgPSBtYXJrX3N0YWNrX2FyZ19wcmVjaXNpb24oZW52LCBpKTtcXG4tXFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdFxcdFxcdG1ldGEtXFx1MDAzZWFyZ19jb25zdGFudC5mb3VuZCA9IHRydWU7XFxuLVxcdFxcdFxcdFxcdG1ldGEtXFx1MDAzZWFyZ19jb25zdGFudC52YWx1ZSA9IHJlZy1cXHUwMDNldmFyX29mZi52YWx1ZTtcXG4tXFx0XFx0XFx0fSBlbHNlIGlmIChpc19rZnVuY19hcmdfc2NhbGFyX3dpdGhfbmFtZShidGYsIFxcdTAwMjZhcmdzW2ldLCBcXFwicmRvbmx5X2J1Zl9zaXplXFxcIikpIHtcXG4tXFx0XFx0XFx0XFx0bWV0YS1cXHUwMDNlcjBfcmRvbmx5ID0gdHJ1ZTtcXG4tXFx0XFx0XFx0XFx0aXNfcmV0X2J1Zl9zeiA9IHRydWU7XFxuLVxcdFxcdFxcdH0gZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3NjYWxhcl93aXRoX25hbWUoYnRmLCBcXHUwMDI2YXJnc1tpXSwgXFxcInJkd3JfYnVmX3NpemVcXFwiKSkge1xcbi1cXHRcXHRcXHRcXHRpc19yZXRfYnVmX3N6ID0gdHJ1ZTtcXG4tXFx0XFx0XFx0fVxcbi1cXG4tXFx0XFx0XFx0aWYgKGlzX3JldF9idWZfc3opIHtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gcHJvY2Vzc19jb25zdF9hbGxvY19tZW1fc2l6ZShlbnYsIHJlZywgYXJnbm8sIFxcdTAwMjZtZXRhLVxcdTAwM2VyZXRfbWVtKTtcXG4tXFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdGlmICghYnRmX3R5cGVfaXNfcHRyKHQpKSB7XFxuLVxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiVW5yZWNvZ25pemVkICVzIHR5cGUgJXNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnRmX3R5cGVfc3RyKHQpKTtcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdGlmICgoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSB8fCB0eXBlX21heV9iZV9udWxsKHJlZy1cXHUwMDNldHlwZSkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdGlmIChidGZfdHlwZV9pc19wdHIodCkgXFx1MDAyNlxcdTAwMjYgKGJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykgfHwgdHlwZV9tYXlfYmVfbnVsbChyZWctXFx1MDAzZXR5cGUpKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgIWlzX2tmdW5jX2FyZ19udWxsYWJsZShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2ldKSkge1xcbiBcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCAlc1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG5AQCAtMTIxMTcsNzYgKzEyMTkyLDM1IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXFxuIFxcdFxcdGlmIChyZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykpXFxuIFxcdFxcdFxcdHVwZGF0ZV9yZWZfb2JqKFxcdTAwMjZtZXRhLVxcdTAwM2VyZWZfb2JqLCByZWcpO1xcbiBcXG4tXFx0XFx0cmVmX3QgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXFx1MDAzZXR5cGUsIFxcdTAwMjZyZWZfaWQpO1xcbi1cXHRcXHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCByZWZfdC1cXHUwMDNlbmFtZV9vZmYpO1xcbi1cXG4tXFx0XFx0a2ZfYXJnX3R5cGUgPSBnZXRfa2Z1bmNfcHRyX2FyZ190eXBlKGVudiwgY2FsbGVyLCByZWdzLCBtZXRhLCB0LCByZWZfdCwgcmVmX3RuYW1lLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGFyZ3MsIGksIG5hcmdzLCBhcmdubywgcmVnKTtcXG4tXFx0XFx0aWYgKGtmX2FyZ190eXBlIFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cmV0dXJuIGtmX2FyZ190eXBlO1xcbitcXHRcXHRpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7XFxuK1xcdFxcdFxcdHJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVxcdTAwM2V0eXBlLCBcXHUwMDI2cmVmX2lkKTtcXG4rXFx0XFx0XFx0cmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgcmVmX3QtXFx1MDAzZW5hbWVfb2ZmKTtcXG4rXFx0XFx0fVxcbiBcXG4tXFx0XFx0c3dpdGNoIChrZl9hcmdfdHlwZSkge1xcbi1cXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fTlVMTDpcXG4rXFx0XFx0aWYgKGJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykgXFx1MDAyNlxcdTAwMjYgdHlwZV9tYXlfYmVfbnVsbChrZl9hcmdfdHlwZSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fTUFQOlxcbi1cXHRcXHRcXHRpZiAoIXJlZy1cXHUwMDNlbWFwX3B0cikge1xcbi1cXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcInBvaW50ZXIgaW4gJXMgaXNuJ3QgbWFwIHBvaW50ZXJcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuLVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlmIChtZXRhLVxcdTAwM2VtYXAucHRyIFxcdTAwMjZcXHUwMDI2IChyZWctXFx1MDAzZW1hcF9wdHItXFx1MDAzZXJlY29yZC1cXHUwMDNld3Ffb2ZmIFxcdTAwM2U9IDAgfHxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgcmVnLVxcdTAwM2VtYXBfcHRyLVxcdTAwM2VyZWNvcmQtXFx1MDAzZXRhc2tfd29ya19vZmYgXFx1MDAzZT0gMCkpIHtcXG4tXFx0XFx0XFx0XFx0LyogVXNlIG1hcF91aWQgKHdoaWNoIGlzIHVuaXF1ZSBpZCBvZiBpbm5lciBtYXApIHRvIHJlamVjdDpcXG4tXFx0XFx0XFx0XFx0ICogaW5uZXJfbWFwMSA9IGJwZl9tYXBfbG9va3VwX2VsZW0ob3V0ZXJfbWFwLCBrZXkxKVxcbi1cXHRcXHRcXHRcXHQgKiBpbm5lcl9tYXAyID0gYnBmX21hcF9sb29rdXBfZWxlbShvdXRlcl9tYXAsIGtleTIpXFxuLVxcdFxcdFxcdFxcdCAqIGlmIChpbm5lcl9tYXAxIFxcdTAwMjZcXHUwMDI2IGlubmVyX21hcDIpIHtcXG4tXFx0XFx0XFx0XFx0ICogICAgIHdxID0gYnBmX21hcF9sb29rdXBfZWxlbShpbm5lcl9tYXAxKTtcXG4tXFx0XFx0XFx0XFx0ICogICAgIGlmICh3cSlcXG4tXFx0XFx0XFx0XFx0ICogICAgICAgICAvLyBtaXNtYXRjaCB3b3VsZCBoYXZlIGJlZW4gYWxsb3dlZFxcbi1cXHRcXHRcXHRcXHQgKiAgICAgICAgIGJwZl93cV9pbml0KHdxLCBpbm5lcl9tYXAyKTtcXG4tXFx0XFx0XFx0XFx0ICogfVxcbi1cXHRcXHRcXHRcXHQgKlxcbi1cXHRcXHRcXHRcXHQgKiBDb21wYXJpbmcgbWFwX3B0ciBpcyBlbm91Z2ggdG8gZGlzdGluZ3Vpc2ggbm9ybWFsIGFuZCBvdXRlciBtYXBzLlxcbi1cXHRcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0XFx0aWYgKG1ldGEtXFx1MDAzZW1hcC5wdHIgIT0gcmVnLVxcdTAwM2VtYXBfcHRyIHx8XFxuLVxcdFxcdFxcdFxcdCAgICBtZXRhLVxcdTAwM2VtYXAudWlkICE9IHJlZy1cXHUwMDNlbWFwX3VpZCkge1xcbi1cXHRcXHRcXHRcXHRcXHRpZiAocmVnLVxcdTAwM2VtYXBfcHRyLVxcdTAwM2VyZWNvcmQtXFx1MDAzZXRhc2tfd29ya19vZmYgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcImJwZl90YXNrX3dvcmsgcG9pbnRlciBpbiBSMiBtYXBfdWlkPSVkIGRvZXNuJ3QgbWF0Y2ggbWFwIHBvaW50ZXIgaW4gUjMgbWFwX3VpZD0lZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0bWV0YS1cXHUwMDNlbWFwLnVpZCwgcmVnLVxcdTAwM2VtYXBfdWlkKTtcXG4tXFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcXCJ3b3JrcXVldWUgcG9pbnRlciBpbiBSMSBtYXBfdWlkPSVkIGRvZXNuJ3QgbWF0Y2ggbWFwIHBvaW50ZXIgaW4gUjIgbWFwX3VpZD0lZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0bWV0YS1cXHUwMDNlbWFwLnVpZCwgcmVnLVxcdTAwM2VtYXBfdWlkKTtcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRtZXRhLVxcdTAwM2VtYXAucHRyID0gcmVnLVxcdTAwM2VtYXBfcHRyO1xcbi1cXHRcXHRcXHRtZXRhLVxcdTAwM2VtYXAudWlkID0gcmVnLVxcdTAwM2VtYXBfdWlkO1xcbi1cXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFxuK1xcdFxcdGlmIChpc19rZnVuY19hcmdfbWFwKGJ0ZiwgXFx1MDAyNmFyZ3NbaV0pKSB7XFxuK1xcdFxcdFxcdHJlZl9pZCA9ICpyZWcyYnRmX2lkc1tDT05TVF9QVFJfVE9fTUFQXTtcXG4rXFx0XFx0XFx0cmVmX3QgPSBidGZfdHlwZV9ieV9pZChidGZfdm1saW51eCwgcmVmX2lkKTtcXG4rXFx0XFx0XFx0cmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgcmVmX3QtXFx1MDAzZW5hbWVfb2ZmKTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0c3dpdGNoIChiYXNlX3R5cGUoa2ZfYXJnX3R5cGUpKSB7XFxuK1xcdFxcdGNhc2UgS0ZfQVJHX0NPTlNUX0JURl9JRDpcXG4rXFx0XFx0Y2FzZSBLRl9BUkdfQ09OU1RfQUxMT0NfU0laRV9PUl9aRVJPOlxcbitcXHRcXHRjYXNlIEtGX0FSR19BTllUSElORzpcXG4gXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0FMTE9DX0JURl9JRDpcXG4gXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0JURl9JRDpcXG4tXFx0XFx0XFx0aWYgKCFpc190cnVzdGVkX3JlZyhlbnYsIHJlZykpIHtcXG4tXFx0XFx0XFx0XFx0aWYgKCFpc19rZnVuY19yY3UobWV0YSkpIHtcXG4tXFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0aWYgKCFpc19yY3VfcmVnKHJlZykpIHtcXG4tXFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBtdXN0IGJlIGEgcmN1IHBvaW50ZXJcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuLVxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuK1xcdFxcdGNhc2UgS0ZfQVJHX0NPTlNUX01BUF9QVFI6XFxuIFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19JVEVSOlxcbiBcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fTElTVF9IRUFEOlxcbiBcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fTElTVF9OT0RFOlxcbiBcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fUkJfUk9PVDpcXG4gXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JCX05PREU6XFxuIFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU06XFxuLVxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU1fU0laRTpcXG4rXFx0XFx0Y2FzZSBLRl9BUkdfQ09OU1RfTUVNX1NJWkU6XFxuK1xcdFxcdGNhc2UgS0ZfQVJHX01FTV9TSVpFOlxcbiBcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s6XFxuIFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19DT05TVF9TVFI6XFxuIFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19XT1JLUVVFVUU6XFxuQEAgLTEyMjE3LDcgKzEyMjUxLDM1IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0XFx0c3dpdGNoIChrZl9hcmdfdHlwZSkge1xcbitcXHRcXHRzd2l0Y2ggKGJhc2VfdHlwZShrZl9hcmdfdHlwZSkpIHtcXG4rXFx0XFx0Y2FzZSBLRl9BUkdfQ09OU1RfQlRGX0lEOlxcbitcXHRcXHRcXHRpZiAocmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSkge1xcbitcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIGlzIG5vdCBhIHNjYWxhclxcXFxuXFxcIiwgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdHJldCA9IHByb2Nlc3NfY29uc3RfYXJnKGVudiwgcmVnLCBhcmdubywgbWV0YSk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBLRl9BUkdfQ09OU1RfQUxMT0NfU0laRV9PUl9aRVJPOlxcbitcXHRcXHRcXHRpZiAocmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSkge1xcbitcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIGlzIG5vdCBhIHNjYWxhclxcXFxuXFxcIiwgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdGlmIChpc19rZnVuY19hcmdfc2NhbGFyX3dpdGhfbmFtZShidGYsIFxcdTAwMjZhcmdzW2ldLCBcXFwicmRvbmx5X2J1Zl9zaXplXFxcIikpXFxuK1xcdFxcdFxcdFxcdG1ldGEtXFx1MDAzZXIwX3Jkb25seSA9IHRydWU7XFxuK1xcdFxcdFxcdHJldCA9IHByb2Nlc3NfY29uc3RfYWxsb2NfbWVtX3NpemUoZW52LCByZWcsIGFyZ25vLCBcXHUwMDI2bWV0YS1cXHUwMDNlcmV0X21lbSk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBLRl9BUkdfQU5ZVEhJTkc6XFxuK1xcdFxcdFxcdGlmIChyZWctXFx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKSB7XFxuK1xcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgaXMgbm90IGEgc2NhbGFyXFxcXG5cXFwiLCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NUWDpcXG4gXFx0XFx0XFx0aWYgKHJlZy1cXHUwMDNldHlwZSAhPSBQVFJfVE9fQ1RYKSB7XFxuIFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgZXhwZWN0ZWQgcG9pbnRlciB0byBjdHgsIGJ1dCBnb3QgJXNcXFxcblxcXCIsXFxuQEAgLTEyMzg2LDUxICsxMjQ0OCw3NyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxcbiBcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19NQVA6XFxuLVxcdFxcdFxcdC8qIElmIGFyZ3VtZW50IGhhcyAnX19tYXAnIHN1ZmZpeCBleHBlY3QgJ3N0cnVjdCBicGZfbWFwIConICovXFxuLVxcdFxcdFxcdHJlZl9pZCA9ICpyZWcyYnRmX2lkc1tDT05TVF9QVFJfVE9fTUFQXTtcXG4tXFx0XFx0XFx0cmVmX3QgPSBidGZfdHlwZV9ieV9pZChidGZfdm1saW51eCwgcmVmX2lkKTtcXG4tXFx0XFx0XFx0cmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgcmVmX3QtXFx1MDAzZW5hbWVfb2ZmKTtcXG4tXFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuLVxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19CVEZfSUQ6XFxuLVxcdFxcdFxcdC8qIE9ubHkgYmFzZV90eXBlIGlzIGNoZWNrZWQsIGZ1cnRoZXIgY2hlY2tzIGFyZSBkb25lIGhlcmUgKi9cXG4tXFx0XFx0XFx0aWYgKChiYXNlX3R5cGUocmVnLVxcdTAwM2V0eXBlKSAhPSBQVFJfVE9fQlRGX0lEIHx8XFxuLVxcdFxcdFxcdCAgICAgKGJwZl90eXBlX2hhc191bnNhZmVfbW9kaWZpZXJzKHJlZy1cXHUwMDNldHlwZSkgXFx1MDAyNlxcdTAwMjYgIWlzX3JjdV9yZWcocmVnKSkpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICAhcmVnMmJ0Zl9pZHNbYmFzZV90eXBlKHJlZy1cXHUwMDNldHlwZSldKSB7XFxuLVxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgaXMgJXMgXFxcIiwgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLFxcbi1cXHRcXHRcXHRcXHRcXHRyZWdfdHlwZV9zdHIoZW52LCByZWctXFx1MDAzZXR5cGUpKTtcXG4tXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJleHBlY3RlZCAlcyBvciBzb2NrZXRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdHJlZ190eXBlX3N0cihlbnYsIGJhc2VfdHlwZShyZWctXFx1MDAzZXR5cGUpIHxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAodHlwZV9mbGFnKHJlZy1cXHUwMDNldHlwZSkgXFx1MDAyNiBCUEZfUkVHX1RSVVNURURfTU9ESUZJRVJTKSkpO1xcbitcXHRcXHRjYXNlIEtGX0FSR19DT05TVF9NQVBfUFRSOlxcbitcXHRcXHRcXHRpZiAoIXJlZy1cXHUwMDNlbWFwX3B0cikge1xcbitcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcInBvaW50ZXIgaW4gJXMgaXNuJ3QgbWFwIHBvaW50ZXJcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHJldCA9IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19idGZfaWQoZW52LCByZWcsIHJlZl90LCByZWZfdG5hbWUsIHJlZl9pZCwgbWV0YSwgaSwgYXJnbm8pO1xcbitcXHRcXHRcXHRyZXQgPSBwcm9jZXNzX21hcF9wdHJfYXJnKGVudiwgcmVnLCBhcmdubywgbWV0YSk7XFxuIFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX01FTTpcXG4tXFx0XFx0XFx0cmVzb2x2ZV9yZXQgPSBidGZfcmVzb2x2ZV9zaXplKGJ0ZiwgcmVmX3QsIFxcdTAwMjZ0eXBlX3NpemUpO1xcbi1cXHRcXHRcXHRpZiAoSVNfRVJSKHJlc29sdmVfcmV0KSkge1xcbi1cXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIHJlZmVyZW5jZSB0eXBlKCclcyAlcycpIHNpemUgY2Fubm90IGJlIGRldGVybWluZWQ6ICVsZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLFxcbi1cXHRcXHRcXHRcXHRcXHRyZWZfdG5hbWUsIFBUUl9FUlIocmVzb2x2ZV9yZXQpKTtcXG4rXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0JURl9JRDpcXG4rXFx0XFx0XFx0LyogT25seSBiYXNlX3R5cGUgaXMgY2hlY2tlZCwgZnVydGhlciBjaGVja3MgYXJlIGRvbmUgaGVyZSAqL1xcbitcXHRcXHRcXHRpZiAoYmFzZV90eXBlKHJlZy1cXHUwMDNldHlwZSkgPT0gUFRSX1RPX0JURl9JRCB8fFxcbitcXHRcXHRcXHQgICAgcmVnMmJ0Zl9pZHNbYmFzZV90eXBlKHJlZy1cXHUwMDNldHlwZSldKSB7XFxuK1xcbitcXHRcXHRcXHRcXHRpZiAoIWlzX3RydXN0ZWRfcmVnKGVudiwgcmVnKSkge1xcbitcXHRcXHRcXHRcXHRcXHRpZiAoIWlzX2tmdW5jX3JjdShtZXRhKSkge1xcbitcXHRcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIG11c3QgYmUgcmVmZXJlbmNlZCBvciB0cnVzdGVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHRcXHRcXHRpZiAoIWlzX3JjdV9yZWcocmVnKSkge1xcbitcXHRcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIG11c3QgYmUgYSByY3UgcG9pbnRlclxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0XFx0cmV0ID0gcHJvY2Vzc19rZl9hcmdfcHRyX3RvX2J0Zl9pZChlbnYsIHJlZywgcmVmX3QsIHJlZl90bmFtZSwgcmVmX2lkLCBtZXRhLCBpLCBhcmdubyk7XFxuK1xcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0aWYgKCFfX2J0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVxcdTAwM2VidGYsIHJlZl90LCAwKSkge1xcbitcXHRcXHRcXHRcXHRlbnVtIGJwZl9yZWdfdHlwZSByZWcyYnRmX3R5cGUgPSBsb29rdXBfcmVnMmJ0Zl9pZHMocmVmX3QpO1xcbitcXG4rXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBpcyAlcyBleHBlY3RlZCAlcyAlc1xcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgcmVnX3R5cGVfc3RyKGVudiwgcmVnLVxcdTAwM2V0eXBlKSxcXG4rXFx0XFx0XFx0XFx0XFx0YnRmX3R5cGVfc3RyKHJlZl90KSwgcmVmX3RuYW1lKTtcXG4rXFx0XFx0XFx0XFx0aWYgKHJlZzJidGZfdHlwZSAhPSBOT1RfSU5JVClcXG4rXFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIgb3IgJXNcXFwiLCByZWdfdHlwZV9zdHIoZW52LCByZWcyYnRmX3R5cGUpKTtcXG4rXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRyZXQgPSBjaGVja19tZW1fcmVnKGVudiwgcmVnLCBhcmdubywgdHlwZV9zaXplKTtcXG4tXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNX1NJWkU6XFxuLVxcdFxcdHtcXG4tXFx0XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKmJ1ZmZfcmVnID0gcmVnO1xcbi1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICpidWZmX2FyZyA9IFxcdTAwMjZhcmdzW2ldO1xcbi1cXHRcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc2l6ZV9yZWcgPSBnZXRfZnVuY19hcmdfcmVnKGNhbGxlciwgcmVncywgaSArIDEpO1xcbi1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICpzaXplX2FyZyA9IFxcdTAwMjZhcmdzW2kgKyAxXTtcXG4tXFx0XFx0XFx0YXJnbm9fdCBuZXh0X2FyZ25vID0gYXJnbm9fZnJvbV9hcmcoaSArIDIpO1xcbi1cXG4tXFx0XFx0XFx0aWYgKCFicGZfcmVnaXN0ZXJfaXNfbnVsbChidWZmX3JlZykgfHwgIWlzX2tmdW5jX2FyZ19udWxsYWJsZShtZXRhLVxcdTAwM2VidGYsIGJ1ZmZfYXJnKSkge1xcbi1cXHRcXHRcXHRcXHRyZXQgPSBjaGVja19rZnVuY19tZW1fc2l6ZV9yZWcoZW52LCBidWZmX3JlZywgc2l6ZV9yZWcsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBhcmdubywgbmV4dF9hcmdubyk7XFxuK1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBJZiB0aGUgcmVnaXN0ZXIgZG9lcyBub3QgY29udGFpbiBidGYgaWQgYnV0IHRoZSBhcmd1bWVudCB0eXBlIGlzIGEgcG9pbnRlciB0b1xcbitcXHRcXHRcXHQgKiBzY2FsYXItb25seSBzdHJ1Y3QsIGFsbG93IHZlcmlmeWluZyBpdCBhcyBhIGZpeGVkIHNpemUgbWVtb3J5LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0a2ZfYXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX01FTSB8IE1FTV9GSVhFRF9TSVpFO1xcbitcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX01FTTpcXG4rXFx0XFx0XFx0aWYgKGtmX2FyZ190eXBlIFxcdTAwMjYgTUVNX0ZJWEVEX1NJWkUpIHtcXG4rXFx0XFx0XFx0XFx0cmVzb2x2ZV9yZXQgPSBidGZfcmVzb2x2ZV9zaXplKGJ0ZiwgcmVmX3QsIFxcdTAwMjZ0eXBlX3NpemUpO1xcbitcXHRcXHRcXHRcXHRpZiAoSVNfRVJSKHJlc29sdmVfcmV0KSkge1xcbitcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIHJlZmVyZW5jZSB0eXBlKCclcyAlcycpIHNpemUgY2Fubm90IGJlIGRldGVybWluZWQ6ICVsZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRyZWZfdG5hbWUsIFBUUl9FUlIocmVzb2x2ZV9yZXQpKTtcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0XFx0cmV0ID0gY2hlY2tfbWVtX3JlZyhlbnYsIHJlZywgYXJnbm8sIHR5cGVfc2l6ZSwgQlBGX1JFQUQgfCBCUEZfV1JJVEUsIG1ldGEpO1xcbitcXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKmJ1ZmZfcmVnID0gcmVnO1xcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc2l6ZV9yZWcgPSBnZXRfZnVuY19hcmdfcmVnKGNhbGxlciwgcmVncywgaSArIDEpO1xcbitcXHRcXHRcXHRcXHRhcmdub190IG5leHRfYXJnbm8gPSBhcmdub19mcm9tX2FyZyhpICsgMik7XFxuK1xcbitcXHRcXHRcXHRcXHRyZXQgPSBjaGVja19tZW1fc2l6ZV9yZWcoZW52LCBidWZmX3JlZywgc2l6ZV9yZWcsIGFyZ25vLCBuZXh0X2FyZ25vLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgQlBGX1JFQUQgfCBCUEZfV1JJVEUsIHRydWUsIG1ldGEpO1xcbiBcXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIGFuZCBcXFwiLCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbiBcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIG1lbW9yeSwgbGVuIHBhaXIgbGVhZHMgdG8gaW52YWxpZCBtZW1vcnkgYWNjZXNzXFxcXG5cXFwiLFxcbkBAIC0xMjQzOCwyNSArMTI1MjYsMjAgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcXG4gXFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHR9XFxuLVxcbi1cXHRcXHRcXHRpZiAoaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtXFx1MDAzZWJ0Ziwgc2l6ZV9hcmcsIHNpemVfcmVnKSkge1xcbi1cXHRcXHRcXHRcXHRpZiAobWV0YS1cXHUwMDNlYXJnX2NvbnN0YW50LmZvdW5kKSB7XFxuLVxcdFxcdFxcdFxcdFxcdHZlcmlmaWVyX2J1ZyhlbnYsIFxcXCJvbmx5IG9uZSBjb25zdGFudCBhcmd1bWVudCBwZXJtaXR0ZWRcXFwiKTtcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0aWYgKCF0bnVtX2lzX2NvbnN0KHNpemVfcmVnLVxcdTAwM2V2YXJfb2ZmKSkge1xcbi1cXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIG11c3QgYmUgYSBrbm93biBjb25zdGFudFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgbmV4dF9hcmdubykpO1xcbi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRcXHRtZXRhLVxcdTAwM2VhcmdfY29uc3RhbnQuZm91bmQgPSB0cnVlO1xcbi1cXHRcXHRcXHRcXHRtZXRhLVxcdTAwM2VhcmdfY29uc3RhbnQudmFsdWUgPSBzaXplX3JlZy1cXHUwMDNldmFyX29mZi52YWx1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgS0ZfQVJHX0NPTlNUX01FTV9TSVpFOlxcbitcXHRcXHRcXHRpZiAocmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSkge1xcbitcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIGlzIG5vdCBhIHNjYWxhclxcXFxuXFxcIiwgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdFxcdH1cXG4gXFxuLVxcdFxcdFxcdC8qIFNraXAgbmV4dCAnX19zeicgb3IgJ19fc3prJyBhcmd1bWVudCAqL1xcbi1cXHRcXHRcXHRpKys7XFxuK1xcdFxcdFxcdHJldCA9IHByb2Nlc3NfY29uc3RfYXJnKGVudiwgcmVnLCBhcmdubywgbWV0YSk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuK1xcdFxcdGNhc2UgS0ZfQVJHX01FTV9TSVpFOlxcbiBcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbiBcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s6XFxuIFxcdFxcdFxcdGlmIChyZWctXFx1MDAzZXR5cGUgIT0gUFRSX1RPX0ZVTkMpIHtcXG4gXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBleHBlY3RlZCBwb2ludGVyIHRvIGZ1bmNcXFxcblxcXCIsIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuQEAgLTEyNTE0LDcgKzEyNTk3LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcXG4gXFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0cmV0ID0gcHJvY2Vzc190aW1lcl9rZnVuYyhlbnYsIHJlZywgYXJnbm8sIG1ldGEpO1xcbitcXHRcXHRcXHRyZXQgPSBwcm9jZXNzX3RpbWVyX2Z1bmMoZW52LCByZWcsIGFyZ25vLCBcXHUwMDI2bWV0YS1cXHUwMDNlbWFwKTtcXG4gXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0xMjY3Niw3ICsxMjc1OSw3IEBAIHM2NCBicGZfaGVscGVyX3N0YWNrX2FjY2Vzc19ieXRlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc25cXG4gXFx0XFx0XFx0c2l6ZSA9IGZuLVxcdTAwM2Vhcmdfc2l6ZVthcmddO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbi1cXHRcXHRpZiAoYXJnICsgMSBcXHUwMDNjIEFSUkFZX1NJWkUoZm4tXFx1MDAzZWFyZ190eXBlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRpZiAoYXJnICsgMSBcXHUwMDNjIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgYXJnX3R5cGVfaXNfbWVtX3NpemUoZm4tXFx1MDAzZWFyZ190eXBlW2FyZyArIDFdKSkge1xcbiBcXHRcXHRcXHRpbnQgc2l6ZV9yZWcgPSBCUEZfUkVHXzEgKyBhcmcgKyAxO1xcbiBcXG5AQCAtMTI5NzUsNiArMTMwNTgsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHRpbnQgZXJyLCBpbnNuX2lkeCA9ICppbnNuX2lkeF9wO1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmdzO1xcbiBcXHR1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkO1xcbitcXHRzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2MgKmRlc2M7XFxuIFxcdHN0cnVjdCBidGYgKmRlc2NfYnRmO1xcbiBcXHRpbnQgaWQ7XFxuIFxcbkBAIC0xMjk5MSw2ICsxMzA3NSwxMyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHRmdW5jX25hbWUgPSBtZXRhLmZ1bmNfbmFtZTtcXG4gXFx0aW5zbl9hdXggPSBcXHUwMDI2ZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XTtcXG4gXFxuK1xcdGRlc2MgPSBmaW5kX2tmdW5jX2Rlc2MoZW52LVxcdTAwM2Vwcm9nLCBpbnNuLVxcdTAwM2VpbW0sIGluc24tXFx1MDAzZW9mZik7XFxuK1xcdGlmICghZGVzYykge1xcbitcXHRcXHR2ZXJpZmllcl9idWcoZW52LCBcXFwia2Z1bmMgZGVzY3JpcHRvciBub3QgZm91bmQgZm9yIGZ1bmNfaWQgJXVcXFwiLCBpbnNuLVxcdTAwM2VpbW0pO1xcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0fVxcbitcXHRtZXRhLmZuID0gZGVzYy1cXHUwMDNlcHJvdG87XFxuK1xcbiBcXHRpbnNuX2F1eC1cXHUwMDNlaXNfaXRlcl9uZXh0ID0gYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcXHUwMDI2bWV0YSk7XFxuIFxcbiBcXHRpZiAoIWluc24tXFx1MDAzZW9mZiBcXHUwMDI2XFx1MDAyNlxcbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcXG5pbmRleCA3NmFiNTFkZWFhNmI5NS4uODkxODk3ZjhhMWIzNTcgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXFxuKysrIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXFxuQEAgLTIyMSw3ICsyMjEsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3Byb2JlX3JlYWRfdXNlcl9wcm90byA9IHtcXG4gXFx0LmdwbF9vbmx5XFx0PSB0cnVlLFxcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmcyX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmcyX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbkBAIC0yNTgsNyArMjU4LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX3VzZXJfc3RyX3Byb3RvID0ge1xcbiBcXHQuZ3BsX29ubHlcXHQ9IHRydWUsXFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzJfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG4gXFxuQEAgLTI3Myw3ICsyNzMsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3Byb2JlX3JlYWRfa2VybmVsX3Byb3RvID0ge1xcbiBcXHQuZ3BsX29ubHlcXHQ9IHRydWUsXFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzJfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG4gXFxuQEAgLTMwOCw3ICszMDgsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3Byb2JlX3JlYWRfa2VybmVsX3N0cl9wcm90byA9IHtcXG4gXFx0LmdwbF9vbmx5XFx0PSB0cnVlLFxcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmcyX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmcyX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbkBAIC0zMjgsNyArMzI4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcHJvYmVfcmVhZF9jb21wYXRfcHJvdG8gPSB7XFxuIFxcdC5ncGxfb25seVxcdD0gdHJ1ZSxcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnMl90eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnMl90eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiBcXG5AQCAtMzQ3LDcgKzM0Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3Byb2JlX3JlYWRfY29tcGF0X3N0cl9wcm90byA9IHtcXG4gXFx0LmdwbF9vbmx5XFx0PSB0cnVlLFxcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmcyX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmcyX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuICNlbmRpZiAvKiBDT05GSUdfQVJDSF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0UgKi9cXG5AQCAtMzgzLDcgKzM4Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3Byb2JlX3dyaXRlX3VzZXJfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiB9O1xcbiBcXG4gI2RlZmluZSBNQVhfVFJBQ0VfUFJJTlRLX1ZBUkFSR1NcXHQzXFxuQEAgLTQxOCw3ICs0MTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90cmFjZV9wcmludGtfcHJvdG8gPSB7XFxuIFxcdC5ncGxfb25seVxcdD0gdHJ1ZSxcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnMl90eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzJfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiB9O1xcbiBcXG4gc3RhdGljIHZvaWQgX19zZXRfcHJpbnRrX2Nscl9ldmVudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuQEAgLTQ3NCw5ICs0NzQsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90cmFjZV92cHJpbnRrX3Byb3RvID0ge1xcbiBcXHQuZ3BsX29ubHlcXHQ9IHRydWUsXFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmcyX3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBQVFJfTUFZQkVfTlVMTCB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmc0X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmc0X3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiB9O1xcbiBcXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpicGZfZ2V0X3RyYWNlX3ZwcmludGtfcHJvdG8odm9pZClcXG5AQCAtNTE4LDkgKzUxOCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NlcV9wcmludGZfcHJvdG8gPSB7XFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxcbiBcXHQuYXJnMV9idGZfaWRcXHQ9IFxcdTAwMjZidGZfc2VxX2ZpbGVfaWRzWzBdLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIFxcdC5hcmc0X3R5cGUgICAgICA9IEFSR19QVFJfVE9fTUVNIHwgUFRSX01BWUJFX05VTEwgfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnNV90eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnNV90eXBlICAgICAgPSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gfTtcXG4gXFxuIEJQRl9DQUxMXzMoYnBmX3NlcV93cml0ZSwgc3RydWN0IHNlcV9maWxlICosIG0sIGNvbnN0IHZvaWQgKiwgZGF0YSwgdTMyLCBsZW4pXFxuQEAgLTUzNSw3ICs1MzUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zZXFfd3JpdGVfcHJvdG8gPSB7XFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxcbiBcXHQuYXJnMV9idGZfaWRcXHQ9IFxcdTAwMjZidGZfc2VxX2ZpbGVfaWRzWzBdLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiB9O1xcbiBcXG4gQlBGX0NBTExfNChicGZfc2VxX3ByaW50Zl9idGYsIHN0cnVjdCBzZXFfZmlsZSAqLCBtLCBzdHJ1Y3QgYnRmX3B0ciAqLCBwdHIsXFxuQEAgLTU1OSw3ICs1NTksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zZXFfcHJpbnRmX2J0Zl9wcm90byA9IHtcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19CVEZfSUQsXFxuIFxcdC5hcmcxX2J0Zl9pZFxcdD0gXFx1MDAyNmJ0Zl9zZXFfZmlsZV9pZHNbMF0sXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG4gXFxuQEAgLTYzMyw3ICs2MzMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wZXJmX2V2ZW50X3JlYWRfdmFsdWVfcHJvdG8gPSB7XFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19DT05TVF9NQVBfUFRSLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmc0X3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gfTtcXG4gXFxuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqYnBmX2dldF9wZXJmX2V2ZW50X3JlYWRfdmFsdWVfcHJvdG8odm9pZClcXG5AQCAtNzMwLDcgKzczMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3BlcmZfZXZlbnRfb3V0cHV0X3Byb3RvID0ge1xcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQ09OU1RfTUFQX1BUUixcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmc1X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmc1X3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiB9O1xcbiBcXG4gc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgYnBmX2V2ZW50X291dHB1dF9uZXN0X2xldmVsKTtcXG5AQCAtOTk2LDcgKzk5Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2RfcGF0aF9wcm90byA9IHtcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19CVEZfSUQsXFxuIFxcdC5hcmcxX2J0Zl9pZFxcdD0gXFx1MDAyNmJwZl9kX3BhdGhfYnRmX2lkc1swXSxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fV1JJVEUsXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYWxsb3dlZFxcdD0gYnBmX2RfcGF0aF9hbGxvd2VkLFxcbiB9O1xcbiBcXG5AQCAtMTA1Myw5ICsxMDUzLDkgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zbnByaW50Zl9idGZfcHJvdG8gPSB7XFxuIFxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1dSSVRFLFxcbi1cXHQuYXJnMl90eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzJfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmc0X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnNF90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIFxcdC5hcmc1X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG4gXFxuQEAgLTEyMTgsNyArMTIxOCw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X2JyYW5jaF9zbmFwc2hvdF9wcm90byA9IHtcXG4gXFx0LmdwbF9vbmx5XFx0PSB0cnVlLFxcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmcyX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmcyX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiB9O1xcbiBcXG4gQlBGX0NBTExfMyhnZXRfZnVuY19hcmcsIHZvaWQgKiwgY3R4LCB1MzIsIG4sIHU2NCAqLCB2YWx1ZSlcXG5AQCAtMTQyMSw3ICsxNDIxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcGVyZl9ldmVudF9vdXRwdXRfcHJvdG9fdHAgPSB7XFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19DT05TVF9NQVBfUFRSLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzVfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIH07XFxuIFxcbiBCUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZF90cCwgdm9pZCAqLCB0cF9idWZmLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsXFxuQEAgLTE0NjIsNyArMTQ2Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19wcm90b190cCA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG4gXFxuQEAgLTE1MjQsMTIgKzE1MjQsMTIgQEAgQlBGX0NBTExfMyhicGZfcGVyZl9wcm9nX3JlYWRfdmFsdWUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wZXJmX3Byb2dfcmVhZF92YWx1ZV9wcm90byA9IHtcXG4tICAgICAgICAgLmZ1bmMgICAgICAgICAgID0gYnBmX3BlcmZfcHJvZ19yZWFkX3ZhbHVlLFxcbi0gICAgICAgICAuZ3BsX29ubHkgICAgICAgPSB0cnVlLFxcbi0gICAgICAgICAucmV0X3R5cGUgICAgICAgPSBSRVRfSU5URUdFUixcXG4tICAgICAgICAgLmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsXFxuLSAgICAgICAgIC5hcmcyX3R5cGUgICAgICA9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tICAgICAgICAgLmFyZzNfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5mdW5jICAgICAgICAgICA9IGJwZl9wZXJmX3Byb2dfcmVhZF92YWx1ZSxcXG4rXFx0LmdwbF9vbmx5ICAgICAgID0gdHJ1ZSxcXG4rXFx0LnJldF90eXBlICAgICAgID0gUkVUX0lOVEVHRVIsXFxuK1xcdC5hcmcxX3R5cGUgICAgICA9IEFSR19QVFJfVE9fQ1RYLFxcbitcXHQuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuK1xcdC5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRSxcXG4gfTtcXG4gXFxuIEJQRl9DQUxMXzQoYnBmX3JlYWRfYnJhbmNoX3JlY29yZHMsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxcbkBAIC0xNTY2LDcgKzE1NjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9yZWFkX2JyYW5jaF9yZWNvcmRzX3Byb3RvID0ge1xcbiBcXHQucmV0X3R5cGUgICAgICAgPSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGUgICAgICA9IEFSR19QVFJfVE9fTUVNX09SX05VTEwgfCBNRU1fV1JJVEUsXFxuLVxcdC5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnNF90eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbkBAIC0xNjQ2LDcgKzE2NDYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wZXJmX2V2ZW50X291dHB1dF9wcm90b19yYXdfdHAgPSB7XFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19DT05TVF9NQVBfUFRSLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzVfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIH07XFxuIFxcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2Jfb3V0cHV0X3Byb3RvO1xcbkBAIC0xNzAxLDcgKzE3MDEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfcHJvdG9fcmF3X3RwID0ge1xcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDBiN2FmZGQwYWU0NzQ4Li5lYjBiNzA2YWY0YjI5NiAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXFxuQEAgLTE3NDcsNyArMTc0Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9zdG9yZV9ieXRlc19wcm90byA9IHtcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnNF90eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzRfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiBcXHQuYXJnNV90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbkBAIC0xNzg0LDcgKzE3ODQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfbG9hZF9ieXRlc19wcm90byA9IHtcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnNF90eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzRfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiB9O1xcbiBcXG4gaW50IF9fYnBmX3NrYl9sb2FkX2J5dGVzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmZzZXQsIHZvaWQgKnRvLCB1MzIgbGVuKVxcbkBAIC0xODIzLDcgKzE4MjMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9mbG93X2Rpc3NlY3Rvcl9sb2FkX2J5dGVzX3Byb3RvID0ge1xcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmc0X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnNF90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIH07XFxuIFxcbiBCUEZfQ0FMTF81KGJwZl9za2JfbG9hZF9ieXRlc19yZWxhdGl2ZSwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbkBAIC0xODY3LDcgKzE4NjcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfbG9hZF9ieXRlc19yZWxhdGl2ZV9wcm90byA9IHtcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnNF90eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzRfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiBcXHQuYXJnNV90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbkBAIC0yMDYzLDkgKzIwNjMsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jc3VtX2RpZmZfcHJvdG8gPSB7XFxuIFxcdC5wa3RfYWNjZXNzXFx0PSB0cnVlLFxcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IFBUUl9NQVlCRV9OVUxMIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzJfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgUFRSX01BWUJFX05VTEwgfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnNF90eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnNF90eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiBcXG5AQCAtMjYyMSw3ICsyNjIxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcmVkaXJlY3RfbmVpZ2hfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzJfdHlwZSAgICAgID0gQVJHX1BUUl9UT19NRU0gfCBQVFJfTUFZQkVfTlVMTCB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbkBAIC00MTk0LDcgKzQxOTQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfbG9hZF9ieXRlc19wcm90byA9IHtcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnNF90eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzRfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiB9O1xcbiBcXG4gaW50IF9fYnBmX3hkcF9sb2FkX2J5dGVzKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgb2Zmc2V0LCB2b2lkICpidWYsIHUzMiBsZW4pXFxuQEAgLTQyMjYsNyArNDIyNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9zdG9yZV9ieXRlc19wcm90byA9IHtcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnNF90eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzRfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiB9O1xcbiBcXG4gaW50IF9fYnBmX3hkcF9zdG9yZV9ieXRlcyhzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIG9mZnNldCwgdm9pZCAqYnVmLCB1MzIgbGVuKVxcbkBAIC00Nzg5LDcgKzQ3ODksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZXZlbnRfb3V0cHV0X3Byb3RvID0ge1xcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQ09OU1RfTUFQX1BUUixcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmc1X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmc1X3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiB9O1xcbiBcXG4gQlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9za2Jfb3V0cHV0X2J0Zl9pZHMsIHN0cnVjdCwgc2tfYnVmZilcXG5AQCAtNDgwMyw3ICs0ODAzLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2Jfb3V0cHV0X3Byb3RvID0ge1xcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQ09OU1RfTUFQX1BUUixcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmc1X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmc1X3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiB9O1xcbiBcXG4gc3RhdGljIHVuc2lnbmVkIHNob3J0IGJwZl90dW5uZWxfa2V5X2FmKHU2NCBmbGFncylcXG5AQCAtNDg4Niw3ICs0ODg2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2dldF90dW5uZWxfa2V5X3Byb3RvID0ge1xcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbkBAIC00OTIxLDcgKzQ5MjEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3R1bm5lbF9vcHRfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIH07XFxuIFxcbiBzdGF0aWMgc3RydWN0IG1ldGFkYXRhX2RzdCBfX3BlcmNwdSAqbWRfZHN0O1xcbkBAIC01MDAzLDcgKzUwMDMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2Jfc2V0X3R1bm5lbF9rZXlfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG4gXFxuQEAgLTUwMzEsNyArNTAzMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9zZXRfdHVubmVsX29wdF9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxcbkBAIC01MjAzLDcgKzUyMDMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfZXZlbnRfb3V0cHV0X3Byb3RvID0ge1xcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQ09OU1RfTUFQX1BUUixcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmc1X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmc1X3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiB9O1xcbiBcXG4gQlRGX0lEX0xJU1RfU0lOR0xFKGJwZl94ZHBfb3V0cHV0X2J0Zl9pZHMsIHN0cnVjdCwgeGRwX2J1ZmYpXFxuQEAgLTUyMTcsNyArNTIxNyw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX291dHB1dF9wcm90byA9IHtcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0NPTlNUX01BUF9QVFIsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnNV90eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnNV90eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gfTtcXG4gXFxuIEJQRl9DQUxMXzEoYnBmX2dldF9zb2NrZXRfY29va2llLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IpXFxuQEAgLTU3NjQsNyArNTc2NCw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfc2V0c29ja29wdF9wcm90byA9IHtcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmc1X3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gfTtcXG4gXFxuIEJQRl9DQUxMXzUoYnBmX3NrX2dldHNvY2tvcHQsIHN0cnVjdCBzb2NrICosIHNrLCBpbnQsIGxldmVsLFxcbkBAIC01NzgxLDcgKzU3ODEsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX2dldHNvY2tvcHRfcHJvdG8gPSB7XFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmc1X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnNV90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIH07XFxuIFxcbiBCUEZfQ0FMTF81KGJwZl9za19zZXRzb2Nrb3B0X25vZGVsYXksIHN0cnVjdCBzb2NrICosIHNrLCBpbnQsIGxldmVsLFxcbkBAIC01ODA1LDcgKzU4MDUsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX3NldHNvY2tvcHRfbm9kZWxheV9wcm90byA9IHtcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmc1X3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gfTtcXG4gXFxuIEJQRl9DQUxMXzUoYnBmX3VubG9ja2VkX3NrX3NldHNvY2tvcHQsIHN0cnVjdCBzb2NrICosIHNrLCBpbnQsIGxldmVsLFxcbkBAIC01ODIyLDcgKzU4MjIsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3VubG9ja2VkX3NrX3NldHNvY2tvcHRfcHJvdG8gPSB7XFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmc1X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnNV90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIH07XFxuIFxcbiBCUEZfQ0FMTF81KGJwZl91bmxvY2tlZF9za19nZXRzb2Nrb3B0LCBzdHJ1Y3Qgc29jayAqLCBzaywgaW50LCBsZXZlbCxcXG5AQCAtNTgzOSw3ICs1ODM5LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl91bmxvY2tlZF9za19nZXRzb2Nrb3B0X3Byb3RvID0ge1xcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnNV90eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzVfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiB9O1xcbiBcXG4gQlBGX0NBTExfNShicGZfc29ja19hZGRyX3NldHNvY2tvcHQsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKiwgY3R4LFxcbkBAIC01ODU2LDcgKzU4NTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2V0c29ja29wdF9wcm90byA9IHtcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmc1X3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gfTtcXG4gXFxuIEJQRl9DQUxMXzUoYnBmX3NvY2tfYWRkcl9nZXRzb2Nrb3B0LCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICosIGN0eCxcXG5AQCAtNTg3Myw3ICs1ODczLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19hZGRyX2dldHNvY2tvcHRfcHJvdG8gPSB7XFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmc1X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnNV90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IHNrX2JwZl9zZXRfZ2V0X2J5cGFzc19wcm90X21lbShzdHJ1Y3Qgc29jayAqc2ssXFxuQEAgLTU5MTgsNyArNTkxOCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfY3JlYXRlX3NldHNvY2tvcHRfcHJvdG8gPSB7XFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmc1X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnNV90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIH07XFxuIFxcbiBCUEZfQ0FMTF81KGJwZl9zb2NrX2NyZWF0ZV9nZXRzb2Nrb3B0LCBzdHJ1Y3Qgc29jayAqLCBzaywgaW50LCBsZXZlbCxcXG5AQCAtNTk0NCw3ICs1OTQ0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19jcmVhdGVfZ2V0c29ja29wdF9wcm90byA9IHtcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmc1X3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gfTtcXG4gXFxuIEJQRl9DQUxMXzUoYnBmX3NvY2tfb3BzX3NldHNvY2tvcHQsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqLCBicGZfc29jayxcXG5AQCAtNTk3MCw3ICs1OTcwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19vcHNfc2V0c29ja29wdF9wcm90byA9IHtcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmc1X3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgYnBmX3NvY2tfb3BzX2dldF9zeW4oc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICpicGZfc29jayxcXG5AQCAtNjA4MCw3ICs2MDgwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19vcHNfZ2V0c29ja29wdF9wcm90byA9IHtcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmc1X3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gfTtcXG4gXFxuIEJQRl9DQUxMXzIoYnBmX3NvY2tfb3BzX2NiX2ZsYWdzX3NldCwgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICosIGJwZl9zb2NrLFxcbkBAIC02MTQ3LDcgKzYxNDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9iaW5kX3Byb3RvID0ge1xcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiB9O1xcbiBcXG4gI2lmZGVmIENPTkZJR19YRlJNXFxuQEAgLTYyMDAsNyArNjIwMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfeGZybV9zdGF0ZV9wcm90byA9IHtcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxcbi1cXHQuYXJnNF90eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzRfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiBcXHQuYXJnNV90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuICNlbmRpZlxcbkBAIC02NjA3LDcgKzY2MDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfZmliX2xvb2t1cF9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGUgICAgICA9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1dSSVRFLFxcbi1cXHQuYXJnM190eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzNfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbkBAIC02NjY3LDcgKzY2NjcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZmliX2xvb2t1cF9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGUgICAgICA9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1dSSVRFLFxcbi1cXHQuYXJnM190eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzNfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbkBAIC02ODY1LDcgKzY4NjUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3RfaW5fcHVzaF9lbmNhcF9wcm90byA9IHtcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnNF90eXBlXFx0PSBBUkdfQ09OU1RfU0laRVxcbitcXHQuYXJnNF90eXBlXFx0PSBBUkdfTUVNX1NJWkVcXG4gfTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF94bWl0X3B1c2hfZW5jYXBfcHJvdG8gPSB7XFxuQEAgLTY4NzUsNyArNjg3NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF94bWl0X3B1c2hfZW5jYXBfcHJvdG8gPSB7XFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVcXG4rXFx0LmFyZzRfdHlwZVxcdD0gQVJHX01FTV9TSVpFXFxuIH07XFxuIFxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG5AQCAtNjkxOSw3ICs2OTE5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3NlZzZfc3RvcmVfYnl0ZXNfcHJvdG8gPSB7XFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVcXG4rXFx0LmFyZzRfdHlwZVxcdD0gQVJHX01FTV9TSVpFXFxuIH07XFxuIFxcbiBzdGF0aWMgdm9pZCBicGZfdXBkYXRlX3NyaF9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbkBAIC03MDA4LDcgKzcwMDgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hY3Rpb25fcHJvdG8gPSB7XFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVcXG4rXFx0LmFyZzRfdHlwZVxcdD0gQVJHX01FTV9TSVpFXFxuIH07XFxuIFxcbiBCUEZfQ0FMTF8zKGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxcbkBAIC03MjQ5LDcgKzcyNDksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfUFRSX1RPX1NPQ0tfQ09NTU9OX09SX05VTEwsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc1X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG5AQCAtNzI2OCw3ICs3MjY4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfUFRSX1RPX1NPQ0tFVF9PUl9OVUxMLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNV90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuQEAgLTcyODcsNyArNzI4Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX2xvb2t1cF91ZHBfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX1BUUl9UT19TT0NLRVRfT1JfTlVMTCxcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbkBAIC03MzExLDcgKzczMTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za2NfbG9va3VwX3RjcF9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfUFRSX1RPX1NPQ0tfQ09NTU9OX09SX05VTEwsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc1X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG5AQCAtNzMzNSw3ICs3MzM1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfUFRSX1RPX1NPQ0tFVF9PUl9OVUxMLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNV90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuQEAgLTczNTksNyArNzM1OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjX3NrX2xvb2t1cF91ZHBfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX1BUUl9UT19TT0NLRVRfT1JfTlVMTCxcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbkBAIC03Mzk3LDcgKzczOTcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfc2tfbG9va3VwX3VkcF9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlICAgICAgID0gUkVUX1BUUl9UT19TT0NLRVRfT1JfTlVMTCxcXG4gXFx0LmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGUgICAgICA9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzNfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzNfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmc0X3R5cGUgICAgICA9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzVfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbkBAIC03NDIxLDcgKzc0MjEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZSAgICAgICA9IFJFVF9QVFJfVE9fU09DS19DT01NT05fT1JfTlVMTCxcXG4gXFx0LmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGUgICAgICA9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzNfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzNfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmc0X3R5cGUgICAgICA9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzVfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbkBAIC03NDQ1LDcgKzc0NDUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlICAgICAgID0gUkVUX1BUUl9UT19TT0NLRVRfT1JfTlVMTCxcXG4gXFx0LmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGUgICAgICA9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzNfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzNfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmc0X3R5cGUgICAgICA9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzVfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbkBAIC03NDY1LDcgKzc0NjUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX1BUUl9UT19TT0NLX0NPTU1PTl9PUl9OVUxMLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxcbitcXHQuYXJnM190eXBlXFx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcXG4gXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnNV90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuQEAgLTc0ODQsNyArNzQ4NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwX3Byb3RvID0ge1xcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsXFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmc1X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gfTtcXG5AQCAtNzUwMyw3ICs3NTAzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHBfcHJvdG8gPSB7XFxuIFxcdC5yZXRfdHlwZVxcdD0gUkVUX1BUUl9UT19TT0NLRVRfT1JfTlVMTCxcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcXG4tXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXFxuIFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4gXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbkBAIC03ODIzLDkgKzc4MjMsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y3BfY2hlY2tfc3luY29va2llX3Byb3RvID0ge1xcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmc1X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnNV90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIH07XFxuIFxcbiBCUEZfQ0FMTF81KGJwZl90Y3BfZ2VuX3N5bmNvb2tpZSwgc3RydWN0IHNvY2sgKiwgc2ssIHZvaWQgKiwgaXBoLCB1MzIsIGlwaF9sZW4sXFxuQEAgLTc4OTIsOSArNzg5Miw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjcF9nZW5fc3luY29va2llX3Byb3RvID0ge1xcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmc1X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnNV90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIH07XFxuIFxcbiBCUEZfQ0FMTF8zKGJwZl9za19hc3NpZ24sIHN0cnVjdCBza19idWZmICosIHNrYiwgc3RydWN0IHNvY2sgKiwgc2ssIHU2NCwgZmxhZ3MpXFxuQEAgLTgwNDgsNyArODA0OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfb3BzX2xvYWRfaGRyX29wdF9wcm90byA9IHtcXG4gXFx0LnJldF90eXBlXFx0PSBSRVRfSU5URUdFUixcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuIFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1dSSVRFLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbkBAIC04MTI2LDcgKzgxMjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX29wc19zdG9yZV9oZHJfb3B0X3Byb3RvID0ge1xcbiBcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxcbi1cXHQuYXJnM190eXBlXFx0PSBBUkdfQ09OU1RfU0laRSxcXG4rXFx0LmFyZzNfdHlwZVxcdD0gQVJHX01FTV9TSVpFLFxcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbkBAIC04MjIxLDcgKzgyMjEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y3BfcmF3X2dlbl9zeW5jb29raWVfaXB2NF9wcm90byA9IHtcXG4gXFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19GSVhFRF9TSVpFX01FTSB8IE1FTV9SRE9OTFksXFxuIFxcdC5hcmcxX3NpemVcXHQ9IHNpemVvZihzdHJ1Y3QgaXBoZHIpLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiB9O1xcbiBcXG4gQlBGX0NBTExfMyhicGZfdGNwX3Jhd19nZW5fc3luY29va2llX2lwdjYsIHN0cnVjdCBpcHY2aGRyICosIGlwaCxcXG5AQCAtODI1Myw3ICs4MjUzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX3Jhd19nZW5fc3luY29va2llX2lwdjZfcHJvdG8gPSB7XFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fRklYRURfU0laRV9NRU0gfCBNRU1fUkRPTkxZLFxcbiBcXHQuYXJnMV9zaXplXFx0PSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXFxuLVxcdC5hcmczX3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXFxuK1xcdC5hcmczX3R5cGVcXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxcbiB9O1xcbiBcXG4gQlBGX0NBTExfMihicGZfdGNwX3Jhd19jaGVja19zeW5jb29raWVfaXB2NCwgc3RydWN0IGlwaGRyICosIGlwaCxcXG5AQCAtMTE3MjYsNyArMTE3MjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIHNrX3JldXNlcG9ydF9sb2FkX2J5dGVzX3Byb3RvID0ge1xcbiBcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4gXFx0LmFyZzJfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiBcXHQuYXJnM190eXBlXFx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXFxuLVxcdC5hcmc0X3R5cGVcXHQ9IEFSR19DT05TVF9TSVpFLFxcbitcXHQuYXJnNF90eXBlXFx0PSBBUkdfTUVNX1NJWkUsXFxuIH07XFxuIFxcbiBCUEZfQ0FMTF81KHNrX3JldXNlcG9ydF9sb2FkX2J5dGVzX3JlbGF0aXZlLFxcbkBAIC0xMTc0NCw3ICsxMTc0NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gc2tfcmV1c2Vwb3J0X2xvYWRfYnl0ZXNfcmVsYXRpdmVfcHJvdG8gPSB7XFxuIFxcdC5hcmcxX3R5cGVcXHQ9IEFSR19QVFJfVE9fQ1RYLFxcbiBcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIFxcdC5hcmczX3R5cGVcXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcXG4tXFx0LmFyZzRfdHlwZVxcdD0gQVJHX0NPTlNUX1NJWkUsXFxuK1xcdC5hcmc0X3R5cGVcXHQ9IEFSR19NRU1fU0laRSxcXG4gXFx0LmFyZzVfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcXG5pbmRleCBiZTk3ZjY4ODdmMGU3Zi4uYTgxZmFhNzA5ZGQ1YmIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcXG5AQCAtNjcsNiArNjcsNyBAQFxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfbWFza2luZy5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9tYXlfZ290b18xLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX21heV9nb3RvXzIuc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwidmVyaWZpZXJfbWVtX3NpemVfcmVnLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX21ldGFfYWNjZXNzLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX21vdnN4LnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX210dS5za2VsLmhcXFwiXFxuQEAgLTIyMSw2ICsyMjIsNyBAQCB2b2lkIHRlc3RfdmVyaWZpZXJfbWFwX3JldF92YWwodm9pZCkgICAgICAgICAgeyBSVU4odmVyaWZpZXJfbWFwX3JldF92YWwpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9tYXNraW5nKHZvaWQpICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9tYXNraW5nKTsgfVxcbiB2b2lkIHRlc3RfdmVyaWZpZXJfbWF5X2dvdG9fMSh2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfbWF5X2dvdG9fMSk7IH1cXG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX21heV9nb3RvXzIodm9pZCkgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX21heV9nb3RvXzIpOyB9XFxuK3ZvaWQgdGVzdF92ZXJpZmllcl9tZW1fc2l6ZV9yZWcodm9pZCkgICAgICAgICB7IFJVTih2ZXJpZmllcl9tZW1fc2l6ZV9yZWcpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9tZXRhX2FjY2Vzcyh2b2lkKSAgICAgICAgICB7IFJVTih2ZXJpZmllcl9tZXRhX2FjY2Vzcyk7IH1cXG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX21vdnN4KHZvaWQpICAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9tb3ZzeCk7IH1cXG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX211bCh2b2lkKSAgICAgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX211bCk7IH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NncnBfa2Z1bmNfZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NncnBfa2Z1bmNfZmFpbHVyZS5jXFxuaW5kZXggZDBkNjVkNmQ0NTBjZjUuLmVmZTdiY2FlNzBmODVhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jZ3JwX2tmdW5jX2ZhaWx1cmUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jZ3JwX2tmdW5jX2ZhaWx1cmUuY1xcbkBAIC02NCw3ICs2NCw3IEBAIGludCBCUEZfUFJPRyhjZ3JwX2tmdW5jX2FjcXVpcmVfbm9fbnVsbF9jaGVjaywgc3RydWN0IGNncm91cCAqY2dycCwgY29uc3QgY2hhciAqXFxuIH1cXG4gXFxuIFNFQyhcXFwidHBfYnRmL2Nncm91cF9ta2RpclxcXCIpXFxuLV9fZmFpbHVyZSBfX21zZyhcXFwiUjEgcG9pbnRlciB0eXBlIFNUUlVDVCBjZ3JvdXAgbXVzdCBwb2ludFxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiUjEgaXMgZnAgZXhwZWN0ZWQgU1RSVUNUIGNncm91cFxcXCIpXFxuIGludCBCUEZfUFJPRyhjZ3JwX2tmdW5jX2FjcXVpcmVfZnAsIHN0cnVjdCBjZ3JvdXAgKmNncnAsIGNvbnN0IGNoYXIgKnBhdGgpXFxuIHtcXG4gXFx0c3RydWN0IGNncm91cCAqYWNxdWlyZWQsICpzdGFja19jZ3JwID0gKHN0cnVjdCBjZ3JvdXAgKilcXHUwMDI2cGF0aDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21lbV9yZG9ubHlfdW50cnVzdGVkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWVtX3Jkb25seV91bnRydXN0ZWQuY1xcbmluZGV4IDViNDQ1Mzc0N2MyMzA4Li4wOTUyZDFlYmYwZjE3YSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWVtX3Jkb25seV91bnRydXN0ZWQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tZW1fcmRvbmx5X3VudHJ1c3RlZC5jXFxuQEAgLTEzNyw3ICsxMzcsNyBAQCBpbnQgaGVscGVyX3BhcmFtX25vdF9vayh2b2lkICpjdHgpXFxuIFxcbiBcXHRwID0gYnBmX3Jkb25seV9jYXN0KDAsIDApO1xcbiBcXHQvKlxcbi1cXHQgKiBBbnkgaGVscGVyIHdpdGggQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyBjb25zdHJhaW50IHdpbGwgZG8sXFxuK1xcdCAqIEFueSBoZWxwZXIgd2l0aCBBUkdfTUVNX1NJWkVfT1JfWkVSTyBjb25zdHJhaW50IHdpbGwgZG8sXFxuIFxcdCAqIHRoZSBtb3N0IHBlcm1pc3NpdmUgY29uc3RyYWludFxcbiBcXHQgKi9cXG4gXFx0YnBmX2NvcHlfZnJvbV91c2VyKHAsIDAsICh2b2lkICopNDIpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmNcXG5pbmRleCA4OTQyYjU0NzgxMjkxNy4uNWM5OWIxZTY1MzJiZmQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfa2Z1bmNfZmFpbHVyZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfa2Z1bmNfZmFpbHVyZS5jXFxuQEAgLTUwLDcgKzUwLDcgQEAgaW50IEJQRl9QUk9HKHRhc2tfa2Z1bmNfYWNxdWlyZV91bnRydXN0ZWQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IGNsb25lX2ZcXG4gfVxcbiBcXG4gU0VDKFxcXCJ0cF9idGYvdGFza19uZXd0YXNrXFxcIilcXG4tX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBwb2ludGVyIHR5cGUgU1RSVUNUIHRhc2tfc3RydWN0IG11c3QgcG9pbnRcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcIlIxIGlzIGZwIGV4cGVjdGVkIFNUUlVDVCB0YXNrX3N0cnVjdFxcXCIpXFxuIGludCBCUEZfUFJPRyh0YXNrX2tmdW5jX2FjcXVpcmVfZnAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTY0IGNsb25lX2ZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqYWNxdWlyZWQsICpzdGFja190YXNrID0gKHN0cnVjdCB0YXNrX3N0cnVjdCAqKVxcdTAwMjZjbG9uZV9mbGFncztcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2JvdW5kcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2JvdW5kcy5jXFxuaW5kZXggYmMwMzhhYzJkZjk4ZTIuLjFhMjczZTQxNmZlZGZmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9ib3VuZHMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9ib3VuZHMuY1xcbkBAIC0xMTk1LDcgKzExOTUsNyBAQCBsMF8lPTpcXHRyMSA9IHI2O1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0cjMgKz0gLTg7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRyNSA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQvKiBUaGUgNHRoIGFyZ3VtZW50IG9mIGJwZl9za2Jfc3RvcmVfYnl0ZXMgaXMgZGVmaW5lZCBhcyBcXFxcXFxuLVxcdCAqIEFSR19DT05TVF9TSVpFLCBzbyAwIGlzIG5vdCBhbGxvd2VkLiBUaGUgJ3I0ICE9IDAnIFxcXFxcXG4rXFx0ICogQVJHX01FTV9TSVpFLCBzbyAwIGlzIG5vdCBhbGxvd2VkLiBUaGUgJ3I0ICE9IDAnIFxcXFxcXG4gXFx0ICogaXMgcHJvdmlkaW5nIHVzIHRoaXMgZXhjbHVzaW9uIG9mIHplcm8gZnJvbSBpbml0aWFsIFxcXFxcXG4gXFx0ICogWzAsIDddIHJhbmdlLlxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0ICovXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfaGVscGVyX2FjY2Vzc192YXJfbGVuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfaGVscGVyX2FjY2Vzc192YXJfbGVuLmNcXG5pbmRleCBmMmM1NGU0ZDg5ZWJlZi4uMzQzZmMwOGQ5NzQ3OTggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2hlbHBlcl9hY2Nlc3NfdmFyX2xlbi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2hlbHBlcl9hY2Nlc3NfdmFyX2xlbi5jXFxuQEAgLTg1LDcgKzg1LDcgQEAgX19uYWtlZCB2b2lkIHN0YWNrX2JpdHdpc2VfYW5kX3plcm9faW5jbHVkZWQodm9pZClcXG4gXFx0cjIgKz0gLTY0O1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0cjQgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0LyogQ2FsbCBicGZfcmluZ2J1Zl9vdXRwdXQoKSwgaXQgaXMgb25lIG9mIGEgZmV3IGhlbHBlciBmdW5jdGlvbnMgd2l0aFxcXFxcXG4tXFx0ICogQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyBwYXJhbWV0ZXIgYWxsb3dlZCBpbiB1bnByaXYgbW9kZS5cXFxcXFxuK1xcdCAqIEFSR19NRU1fU0laRV9PUl9aRVJPIHBhcmFtZXRlciBhbGxvd2VkIGluIHVucHJpdiBtb2RlLlxcXFxcXG4gXFx0ICogRm9yIHVucHJpdiB0aGlzIHNob3VsZCBzaWduYWwgYW4gZXJyb3IsIGJlY2F1c2UgbWVtb3J5IGF0IFxcdTAwMjZmcFstNjRdIGlzXFxcXFxcbiBcXHQgKiBub3QgaW5pdGlhbGl6ZWQuXFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQgKi9cXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuQEAgLTI3OCw3ICsyNzgsNyBAQCBfX25ha2VkIHZvaWQgc3RhY2tfam1wX25vX21pbl9jaGVjayh2b2lkKVxcbiBcXHRyMiArPSAtNjQ7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRyNCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQvKiBDYWxsIGJwZl9yaW5nYnVmX291dHB1dCgpLCBpdCBpcyBvbmUgb2YgYSBmZXcgaGVscGVyIGZ1bmN0aW9ucyB3aXRoXFxcXFxcbi1cXHQgKiBBUkdfQ09OU1RfU0laRV9PUl9aRVJPIHBhcmFtZXRlciBhbGxvd2VkIGluIHVucHJpdiBtb2RlLlxcXFxcXG4rXFx0ICogQVJHX01FTV9TSVpFX09SX1pFUk8gcGFyYW1ldGVyIGFsbG93ZWQgaW4gdW5wcml2IG1vZGUuXFxcXFxcbiBcXHQgKiBGb3IgdW5wcml2IHRoaXMgc2hvdWxkIHNpZ25hbCBhbiBlcnJvciwgYmVjYXVzZSBtZW1vcnkgYXQgXFx1MDAyNmZwWy02NF0gaXNcXFxcXFxuIFxcdCAqIG5vdCBpbml0aWFsaXplZC5cXHRcXHRcXHRcXHRcXFxcXFxuIFxcdCAqL1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtNzc4LDcgKzc3OCw3IEBAIF9fbmFrZWQgdm9pZCB2YXJpYWJsZV9tZW1vcnlfOF9ieXRlc19sZWFrKHZvaWQpXFxuIFxcdHIzICs9IDE7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRyNCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQvKiBDYWxsIGJwZl9yaW5nYnVmX291dHB1dCgpLCBpdCBpcyBvbmUgb2YgYSBmZXcgaGVscGVyIGZ1bmN0aW9ucyB3aXRoXFxcXFxcbi1cXHQgKiBBUkdfQ09OU1RfU0laRV9PUl9aRVJPIHBhcmFtZXRlciBhbGxvd2VkIGluIHVucHJpdiBtb2RlLlxcXFxcXG4rXFx0ICogQVJHX01FTV9TSVpFX09SX1pFUk8gcGFyYW1ldGVyIGFsbG93ZWQgaW4gdW5wcml2IG1vZGUuXFxcXFxcbiBcXHQgKiBGb3IgdW5wcml2IHRoaXMgc2hvdWxkIHNpZ25hbCBhbiBlcnJvciwgYmVjYXVzZSBtZW1vcnkgcmVnaW9uIFsxLCA2NF1cXFxcXFxuIFxcdCAqIGF0IFxcdTAwMjZmcFstNjRdIGlzIG5vdCBmdWxseSBpbml0aWFsaXplZC5cXHRcXFxcXFxuIFxcdCAqL1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2hlbHBlcl92YWx1ZV9hY2Nlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfdmFsdWVfYWNjZXNzLmNcXG5pbmRleCA2ZDJhMzg1OTdjMzRmNC4uYzY2MDNhMTE4ZmRjMzkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2hlbHBlcl92YWx1ZV9hY2Nlc3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfdmFsdWVfYWNjZXNzLmNcXG5AQCAtOTEsNyArOTEsNyBAQCBsMF8lPTpcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFxuIC8qIENhbGwgYSBmdW5jdGlvbiB0YWtpbmcgYSBwb2ludGVyIGFuZCBhIHNpemUgd2hpY2ggZG9lc24ndCBhbGxvdyB0aGUgc2l6ZSB0b1xcbiAgKiBiZSB6ZXJvIChpLmUuIGJwZl90cmFjZV9wcmludGsoKSBkZWNsYXJlcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGJlXFxuLSAqIEFSR19DT05TVF9TSVpFLCBub3QgQVJHX0NPTlNUX1NJWkVfT1JfWkVSTykuIFdlIGF0dGVtcHQgdG8gcGFzcyB6ZXJvIGZvciB0aGVcXG4rICogQVJHX01FTV9TSVpFLCBub3QgQVJHX01FTV9TSVpFX09SX1pFUk8pLiBXZSBhdHRlbXB0IHRvIHBhc3MgemVybyBmb3IgdGhlXFxuICAqIHNpemUgYW5kIGV4cGVjdCB0byBmYWlsLlxcbiAgKi9cXG4gU0VDKFxcXCJ0cmFjZXBvaW50XFxcIilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21lbV9zaXplX3JlZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21lbV9zaXplX3JlZy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNzhhOWFkMjJiMTBkZmRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX21lbV9zaXplX3JlZy5jXFxuQEAgLTAsMCArMSw2MCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3ZtbGludXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImJwZl9rZnVuY3MuaFxcXCJcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4rc3RydWN0IGlubmVyX21hcCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbitcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbitcXHRfX3R5cGUodmFsdWUsIGludCk7XFxuK30gaW5uZXJfbWFwIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVlfT0ZfTUFQUyk7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgMSk7XFxuK1xcdF9fdHlwZShrZXksIGludCk7XFxuK1xcdF9fYXJyYXkodmFsdWVzLCBzdHJ1Y3QgaW5uZXJfbWFwKTtcXG4rfSBvdXRlcl9tYXAgU0VDKFxcXCIubWFwc1xcXCIpID0ge1xcbitcXHQudmFsdWVzID0geyBbMF0gPSBcXHUwMDI2aW5uZXJfbWFwIH0sXFxuK307XFxuK1xcbisvKiBBbiB1bi1uYXJyb3dlZCBtYXAtb2YtbWFwcyB2YWx1ZSBtdXN0IGJlIHJlamVjdGVkIGFzIGEgX19udWxsYWJsZSBrZnVuYyBtZW0gYnVmZmVyICovXFxuK1NFQyhcXFwiP3RjXFxcIilcXG4rX19mYWlsdXJlXFxuK2ludCBtYXBvZm1hcHNfdmFsdWVfYXNfa2Z1bmNfbWVtX2J1ZihzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9keW5wdHIgZHB0cjtcXG4rXFx0X191MzIga2V5ID0gMDtcXG4rXFx0dm9pZCAqaW5uZXI7XFxuK1xcdGNoYXIgKnA7XFxuK1xcbitcXHRpbm5lciA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNm91dGVyX21hcCwgXFx1MDAyNmtleSk7XFxuK1xcdC8qIGludGVudGlvbmFsbHkgTk9UIE5VTEwtY2hlY2tlZDogcmVnIHN0YXlzIFBUUl9UT19NQVBfVkFMVUVfT1JfTlVMTCAqL1xcbitcXG4rXFx0YnBmX2R5bnB0cl9mcm9tX3NrYihza2IsIDAsIFxcdTAwMjZkcHRyKTtcXG4rXFx0LyogcGFzcyB0aGUgdW4tbmFycm93ZWQgbWFwLW9mLW1hcHMgdmFsdWUgYXMgdGhlIHNjcmF0Y2ggYnVmZmVyICovXFxuK1xcdHAgPSBicGZfZHlucHRyX3NsaWNlKFxcdTAwMjZkcHRyLCAwLCBpbm5lciwgOCk7XFxuK1xcdGlmIChwKVxcbitcXHRcXHRyZXR1cm4gcFswXTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIEFuIHVuLW5hcnJvd2VkIG1hcC1vZi1tYXBzIHZhbHVlIG11c3QgYmUgcmVqZWN0ZWQgYXMgYSBQVFJfTUFZQkVfTlVMTCBoZWxwZXIgbWVtIGJ1ZmZlciAqL1xcbitTRUMoXFxcIj90Y1xcXCIpXFxuK19fZmFpbHVyZVxcbitpbnQgbWFwb2ZtYXBzX3ZhbHVlX2FzX2hlbHBlcl9tZW1fYnVmKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRfX3UzMiBrZXkgPSAwO1xcbitcXHR2b2lkICppbm5lcjtcXG4rXFxuK1xcdGlubmVyID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2b3V0ZXJfbWFwLCBcXHUwMDI2a2V5KTtcXG4rXFx0LyogaW50ZW50aW9uYWxseSBOT1QgTlVMTC1jaGVja2VkOiByZWcgc3RheXMgUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMICovXFxuK1xcbitcXHQvKiBAZnJvbSBpcyBhIG51bGxhYmxlIHJlYWQtb25seSBtZW0rc2l6ZSBhcmc7IG91dGVyIHZhbHVlX3NpemUgaXMgNCAqL1xcbitcXHRyZXR1cm4gYnBmX2NzdW1fZGlmZihpbm5lciwgNCwgTlVMTCwgMCwgMCkgKyBza2ItXFx1MDAzZWxlbjtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuY1xcbmluZGV4IDI4NzA3MzhkOTNmN2VjLi44ZjBjNDU0MjFmODkzOCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuY1xcbkBAIC0yOCw3ICsyOCw3IEBAIGludCBCUEZfUFJPRyhnZXRfdGFza19leGVfZmlsZV9rZnVuY19udWxsKVxcbiB9XFxuIFxcbiBTRUMoXFxcImxzbS5zL2lub2RlX2dldHhhdHRyXFxcIilcXG4tX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBwb2ludGVyIHR5cGUgU1RSVUNUIHRhc2tfc3RydWN0IG11c3QgcG9pbnQgdG8gc2NhbGFyLCBvciBzdHJ1Y3Qgd2l0aCBzY2FsYXJcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcIlIxIGlzIGZwIGV4cGVjdGVkIFNUUlVDVCB0YXNrX3N0cnVjdFxcXCIpXFxuIGludCBCUEZfUFJPRyhnZXRfdGFza19leGVfZmlsZV9rZnVuY19mcClcXG4ge1xcbiBcXHR1NjQgeDtcXG5AQCAtOTgsNyArOTgsNyBAQCBpbnQgQlBGX1BST0cocGF0aF9kX3BhdGhfa2Z1bmNfbnVsbClcXG4gfVxcbiBcXG4gU0VDKFxcXCJsc20ucy90YXNrX2FsbG9jXFxcIilcXG4tX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiZGVyZWZlcmVuY2Ugb2YgbW9kaWZpZWQgdW50cnVzdGVkX3B0cl9cXFwiKVxcbiBpbnQgQlBGX1BST0cocGF0aF9kX3BhdGhfa2Z1bmNfdW50cnVzdGVkX2Zyb21fYXJndW1lbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4ge1xcbiBcXHRzdHJ1Y3QgcGF0aCAqcm9vdDtcXG5AQCAtMTEyLDcgKzExMiw3IEBAIGludCBCUEZfUFJPRyhwYXRoX2RfcGF0aF9rZnVuY191bnRydXN0ZWRfZnJvbV9hcmd1bWVudCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrXFxuIH1cXG4gXFxuIFNFQyhcXFwibHNtLnMvZmlsZV9vcGVuXFxcIilcXG4tX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiZGVyZWZlcmVuY2Ugb2YgbW9kaWZpZWQgdW50cnVzdGVkX3B0cl9cXFwiKVxcbiBpbnQgQlBGX1BST0cocGF0aF9kX3BhdGhfa2Z1bmNfdW50cnVzdGVkX2Zyb21fY3VycmVudClcXG4ge1xcbiBcXHRzdHJ1Y3QgcGF0aCAqcHdkO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvY2FsbHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9jYWxscy5jXFxuaW5kZXggMzAyZDcxMmUwZDdlZDIuLjhjZDYyNmUwNDU1MTU3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9jYWxscy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL2NhbGxzLmNcXG5AQCAtMzEsNyArMzEsNyBAQFxcbiBcXHR9LFxcbiBcXHQucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXFxuIFxcdC5yZXN1bHQgPSBSRUpFQ1QsXFxuLVxcdC5lcnJzdHIgPSBcXFwiUjEgcG9pbnRlciB0eXBlIFNUUlVDVCBwcm9nX3Rlc3RfZmFpbDEgbXVzdCBwb2ludCB0byBzY2FsYXJcXFwiLFxcbitcXHQuZXJyc3RyID0gXFxcIlIxIGlzIGZwIGV4cGVjdGVkIFNUUlVDVCBwcm9nX3Rlc3RfZmFpbDFcXFwiLFxcbiBcXHQuZml4dXBfa2Z1bmNfYnRmX2lkID0ge1xcbiBcXHRcXHR7IFxcXCJicGZfa2Z1bmNfY2FsbF90ZXN0X2ZhaWwxXFxcIiwgMiB9LFxcbiBcXHR9LFxcbkBAIC00Niw3ICs0Niw3IEBAXFxuIFxcdH0sXFxuIFxcdC5wcm9nX3R5cGUgPSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyxcXG4gXFx0LnJlc3VsdCA9IFJFSkVDVCxcXG4tXFx0LmVycnN0ciA9IFxcXCJtYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcXFxcblIxIHBvaW50ZXIgdHlwZSBTVFJVQ1QgcHJvZ190ZXN0X2ZhaWwyXFxcIixcXG4rXFx0LmVycnN0ciA9IFxcXCJtYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcXFxcblIxIGlzIGZwIGV4cGVjdGVkIFNUUlVDVCBwcm9nX3Rlc3RfZmFpbDJcXFwiLFxcbiBcXHQuZml4dXBfa2Z1bmNfYnRmX2lkID0ge1xcbiBcXHRcXHR7IFxcXCJicGZfa2Z1bmNfY2FsbF90ZXN0X2ZhaWwyXFxcIiwgMiB9LFxcbiBcXHR9LFxcbkBAIC02MSw3ICs2MSw3IEBAXFxuIFxcdH0sXFxuIFxcdC5wcm9nX3R5cGUgPSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyxcXG4gXFx0LnJlc3VsdCA9IFJFSkVDVCxcXG4tXFx0LmVycnN0ciA9IFxcXCJSMSBwb2ludGVyIHR5cGUgU1RSVUNUIHByb2dfdGVzdF9mYWlsMyBtdXN0IHBvaW50IHRvIHNjYWxhclxcXCIsXFxuK1xcdC5lcnJzdHIgPSBcXFwiUjEgaXMgZnAgZXhwZWN0ZWQgU1RSVUNUIHByb2dfdGVzdF9mYWlsM1xcXCIsXFxuIFxcdC5maXh1cF9rZnVuY19idGZfaWQgPSB7XFxuIFxcdFxcdHsgXFxcImJwZl9rZnVuY19jYWxsX3Rlc3RfZmFpbDNcXFwiLCAyIH0sXFxuIFxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA5OjE3OjA4LjE4MzI0ODkxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTU2NTc0OTc2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2VuX2tmdW5jX2FyZ19wcm90b1wiLFxuICAgIFwiZ2V0X2tmdW5jX2FyZ190eXBlXCIsXG4gICAgXCJwcm9jZXNzX21hcF9wdHJfYXJnXCIsXG4gICAgXCJjaGVja19rZnVuY19hcmdzXCIsXG4gICAgXCJjaGVja19mdW5jX2FyZ1wiLFxuICAgIFwiY2hlY2tfbWVtX3NpemVfcmVnXCIsXG4gICAgXCJjaGVja19tZW1fcmVnXCIsXG4gICAgXCJwcm9jZXNzX2NvbnN0X2FyZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpZ25pZmljYW50bHkgcmVmYWN0b3JzIGhvdyB0aGUgZUJQRiB2ZXJpZmllciBoYW5kbGVzIGFyZ3VtZW50cyBmb3Iga2Z1bmNzIGFuZCBoZWxwZXIgZnVuY3Rpb25zLCBpbnRyb2R1Y2luZyBuZXcgYXJndW1lbnQgdHlwZXMgKEFSR19NRU1fU0laRSwgQVJHX01FTV9TSVpFX09SX1pFUk8pIGFuZCBhIG5ldyB3YXkgdG8gZ2VuZXJhdGUga2Z1bmMgcHJvdG90eXBlcyAoZ2VuX2tmdW5jX2FyZ19wcm90bykuIFRoaXMgaXMgY29yZSB2ZXJpZmllciBsb2dpYyB0aGF0IGlzIGhpZ2hseSBjb21wbGV4IGFuZCBwcm9uZSB0byBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG1ha2luZyBpdCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNDljNTdhM2U2OWUyZjNhYWM1NmJhMjIzMWY0OWYyYWFkMTE1NmE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMDk6MTc6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuaW5kZXggYzgwMWEzMzBhZWNlMDguLmNiZGU4NmQwODJjY2VhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuQEAgLTI1MCw2ICsyNTAsMzQgQEAgT3I6OlxuICAgICAgICAgICAgICAgICAuLi5cbiAgICAgICAgIH1cbiBcbisyLjMuNyBfX2NvbnN0X21hcCBhbmQgX19tYXAgQW5ub3RhdGlvbnNcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbitcbitUaGVzZSBhbm5vdGF0aW9ucyBhcmUgdXNlZCBmb3IgYGBzdHJ1Y3QgYnBmX21hcCAqYGAgYXJndW1lbnRzIGFuZCBkaXN0aW5ndWlzaCBhXG4rdmVyaWZpZXIta25vd24gbWFwIGZyb20gYW4gb3BhcXVlIG9uZS5cbitcbitgYF9fY29uc3RfbWFwYGAgaW5kaWNhdGVzIGEgbWFwIG11c3QgYmUga25vd24gYXQgdGhlIHZlcmlmaWNhdGlvbiB0aW1lLCBpLmUuIGFcbitjb25jcmV0ZSBtYXAgZmQgdGhlIEJQRiBwcm9ncmFtIHJlZmVyZW5jZXMgZGlyZWN0bHkuXG4rXG4rQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XG4rXG4rICAgICAgICBfX2JwZl9rZnVuYyBpbnQgYnBmX3dxX2luaXQoc3RydWN0IGJwZl93cSAqd3EsIHZvaWQgKnBfX2NvbnN0X21hcCxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4rICAgICAgICB7XG4rICAgICAgICAgICAgICAgIC4uLlxuKyAgICAgICAgfVxuK1xuK2BgX19tYXBgYCBpbmRpY2F0ZXMgYW4gb3BhcXVlIGBgc3RydWN0IGJwZl9tYXAgKmBgIHRoYXQgbWF5IGJlIHJlc29sdmVkXG4rYXQgcnVuIHRpbWUuIFRoZSBhcmd1bWVudCBtYXkgdGFrZSBlaXRoZXIgYSBtYXAgZmQgb3IgYSBgYFBUUl9UT19CVEZfSURgYFxuK2Bgc3RydWN0IGJwZl9tYXBgYCBwb2ludGVyLlxuK1xuK0FuIGV4YW1wbGUgaXMgZ2l2ZW4gYmVsb3c6OlxuK1xuKyAgICAgICAgX19icGZfa2Z1bmMgdm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKnBfX21hcCwgLi4uKVxuKyAgICAgICAge1xuKyAgICAgICAgICAgICAgICAuLi5cbisgICAgICAgIH1cbitcbiAuLiBfQlBGX2tmdW5jX25vZGVmOlxuIFxuIDIuNCBVc2luZyBhbiBleGlzdGluZyBrZXJuZWwgZnVuY3Rpb25cbkBAIC00MTEsNyArNDM5LDcgQEAgRXhhbXBsZSBkZWNsYXJhdGlvbjpcbiAuLiBjb2RlLWJsb2NrOjogY1xuIFxuIFx0X19icGZfa2Z1bmMgaW50IGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LFxuLVx0XHRcdFx0XHRcdCAgICAgIHZvaWQgKm1hcF9fbWFwLCBicGZfdGFza193b3JrX2NhbGxiYWNrX3QgY2FsbGJhY2ssXG4rXHRcdFx0XHRcdFx0ICAgICAgdm9pZCAqbWFwX19jb25zdF9tYXAsIGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFjayxcbiBcdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpIHsgLi4uIH1cbiBcbiBFeGFtcGxlIHVzYWdlIGluIEJQRiBwcm9ncmFtOlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5pbmRleCBkOTU0MjEyN2RmZGZjMC4uMmVhNWNlMzBmNzI5YmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtNzQ4LDYgKzc0OCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYnBmX21hcF9vZmZsb2FkX29wcztcbiBlbnVtIGJwZl90eXBlX2ZsYWcge1xuIFx0LyogUFRSIG1heSBiZSBOVUxMLiAqL1xuIFx0UFRSX01BWUJFX05VTExcdFx0PSBCSVQoMCArIEJQRl9CQVNFX1RZUEVfQklUUyksXG4rXHRTQ0FMQVJfTUFZQkVfWkVST1x0PSBQVFJfTUFZQkVfTlVMTCxcbiBcbiBcdC8qIE1FTSBpcyByZWFkLW9ubHkuIFdoZW4gYXBwbGllZCBvbiBicGZfYXJnLCBpdCBpbmRpY2F0ZXMgdGhlIGFyZyBpc1xuIFx0ICogY29tcGF0aWJsZSB3aXRoIGJvdGggbXV0YWJsZSBhbmQgaW1tdXRhYmxlIG1lbW9yeS5cbkBAIC04ODgsOCArODg5LDcgQEAgZW51bSBicGZfYXJnX3R5cGUge1xuIFx0QVJHX1BUUl9UT19NRU0sXHRcdC8qIHBvaW50ZXIgdG8gdmFsaWQgbWVtb3J5IChzdGFjaywgcGFja2V0LCBtYXAgdmFsdWUpICovXG4gXHRBUkdfUFRSX1RPX0FSRU5BLFxuIFxuLVx0QVJHX0NPTlNUX1NJWkUsXHRcdC8qIG51bWJlciBvZiBieXRlcyBhY2Nlc3NlZCBmcm9tIG1lbW9yeSAqL1xuLVx0QVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcdC8qIG51bWJlciBvZiBieXRlcyBhY2Nlc3NlZCBmcm9tIG1lbW9yeSBvciAwICovXG4rXHRBUkdfTUVNX1NJWkUsXHRcdC8qIG51bWJlciBvZiBieXRlcyBhY2Nlc3NlZCBmcm9tIG1lbW9yeSAqL1xuIFxuIFx0QVJHX1BUUl9UT19DVFgsXHRcdC8qIHBvaW50ZXIgdG8gY29udGV4dCAqL1xuIFx0QVJHX0FOWVRISU5HLFx0XHQvKiBhbnkgKGluaXRpYWxpemVkKSBhcmd1bWVudCBpcyBvayAqL1xuQEAgLTkyMiw2ICs5MjIsOCBAQCBlbnVtIGJwZl9hcmdfdHlwZSB7XG4gXHRBUkdfUFRSX1RPX1VOSU5JVF9NRU1cdFx0PSBNRU1fVU5JTklUIHwgTUVNX1dSSVRFIHwgQVJHX1BUUl9UT19NRU0sXG4gXHQvKiBQb2ludGVyIHRvIHZhbGlkIG1lbW9yeSBvZiBzaXplIGtub3duIGF0IGNvbXBpbGUgdGltZS4gKi9cbiBcdEFSR19QVFJfVE9fRklYRURfU0laRV9NRU1cdD0gTUVNX0ZJWEVEX1NJWkUgfCBBUkdfUFRSX1RPX01FTSxcbitcdC8qIE51bWJlciBvZiBieXRlcyBhY2Nlc3NlZCBmcm9tIG1lbW9yeSwgb3IgMC4gKi9cbitcdEFSR19NRU1fU0laRV9PUl9aRVJPXHRcdD0gU0NBTEFSX01BWUJFX1pFUk8gfCBBUkdfTUVNX1NJWkUsXG4gXG4gXHQvKiBUaGlzIG11c3QgYmUgdGhlIGxhc3QgZW50cnkuIEl0cyBwdXJwb3NlIGlzIHRvIGVuc3VyZSB0aGUgZW51bSBpc1xuIFx0ICogd2lkZSBlbm91Z2ggdG8gaG9sZCB0aGUgaGlnaGVyIGJpdHMgcmVzZXJ2ZWQgZm9yIGJwZl90eXBlX2ZsYWcuXG5AQCAtOTYwLDYgKzk2MiwyMSBAQCBlbnVtIGJwZl9yZXR1cm5fdHlwZSB7XG4gfTtcbiBzdGF0aWNfYXNzZXJ0KF9fQlBGX1JFVF9UWVBFX01BWCBcdTAwM2M9IEJQRl9CQVNFX1RZUEVfTElNSVQpO1xuIFxuKy8qIFRoZSBsb25nZXN0IHRyYWNlcG9pbnQgaGFzIDEyIGFyZ3MuXG4rICogU2VlIGluY2x1ZGUvdHJhY2UvYnBmX3Byb2JlLmhcbisgKlxuKyAqIEFsc28gcmV1c2UgdGhpcyBtYWNybyBmb3IgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzIGEgQlBGIGZ1bmN0aW9uXG4rICogb3IgYSBrZnVuYyBjYW4gaGF2ZS4gQXJncyAxLTUgYXJlIHBhc3NlZCBpbiByZWdpc3RlcnMsIGFyZ3MgNi0xMiB2aWFcbisgKiBzdGFjayBhcmcgc2xvdHMuIFRoZSBKSVQgbWF5IG1hcCBzb21lIHN0YWNrIGFyZyBzbG90cyB0byByZWdpc3RlcnMgYmFzZWRcbisgKiBvbiB0aGUgbmF0aXZlIGNhbGxpbmcgY29udmVudGlvbiAoZS5nLiwgYXJnIDYgdG8gUjkgb24geDg2LTY0KS5cbisgKi9cbisjZGVmaW5lIE1BWF9CUEZfRlVOQ19BUkdTIDEyXG4rXG4rLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgdGhyb3VnaCByZWdpc3RlcnNcbisgKiBhIHNpbmdsZSBmdW5jdGlvbiBtYXkgaGF2ZS5cbisgKi9cbisjZGVmaW5lIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyA1XG4rXG4gLyogZUJQRiBmdW5jdGlvbiBwcm90b3R5cGUgdXNlZCBieSB2ZXJpZmllciB0byBhbGxvdyBCUEZfQ0FMTHMgZnJvbSBlQlBGIHByb2dyYW1zXG4gICogdG8gaW4ta2VybmVsIGhlbHBlciBmdW5jdGlvbnMgYW5kIGZvciBhZGp1c3RpbmcgaW1tMzIgZmllbGQgaW4gQlBGX0NBTExcbiAgKiBpbnN0cnVjdGlvbnMgYWZ0ZXIgdmVyaWZ5aW5nXG5AQCAtOTg0LDcgKzEwMDEsNyBAQCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8ge1xuIFx0XHRcdGVudW0gYnBmX2FyZ190eXBlIGFyZzRfdHlwZTtcbiBcdFx0XHRlbnVtIGJwZl9hcmdfdHlwZSBhcmc1X3R5cGU7XG4gXHRcdH07XG4tXHRcdGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlWzVdO1xuK1x0XHRlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZVtNQVhfQlBGX0ZVTkNfQVJHU107XG4gXHR9O1xuIFx0dW5pb24ge1xuIFx0XHRzdHJ1Y3Qge1xuQEAgLTk5NCw3ICsxMDExLDcgQEAgc3RydWN0IGJwZl9mdW5jX3Byb3RvIHtcbiBcdFx0XHR1MzIgKmFyZzRfYnRmX2lkO1xuIFx0XHRcdHUzMiAqYXJnNV9idGZfaWQ7XG4gXHRcdH07XG4tXHRcdHUzMiAqYXJnX2J0Zl9pZFs1XTtcbitcdFx0dTMyICphcmdfYnRmX2lkW01BWF9CUEZfRlVOQ19BUkdTXTtcbiBcdFx0c3RydWN0IHtcbiBcdFx0XHRzaXplX3QgYXJnMV9zaXplO1xuIFx0XHRcdHNpemVfdCBhcmcyX3NpemU7XG5AQCAtMTAwMiw3ICsxMDE5LDcgQEAgc3RydWN0IGJwZl9mdW5jX3Byb3RvIHtcbiBcdFx0XHRzaXplX3QgYXJnNF9zaXplO1xuIFx0XHRcdHNpemVfdCBhcmc1X3NpemU7XG4gXHRcdH07XG4tXHRcdHNpemVfdCBhcmdfc2l6ZVs1XTtcbitcdFx0c2l6ZV90IGFyZ19zaXplW01BWF9CUEZfRlVOQ19BUkdTXTtcbiBcdH07XG4gXHRpbnQgKnJldF9idGZfaWQ7IC8qIHJldHVybiB2YWx1ZSBidGZfaWQgKi9cbiBcdGJvb2wgKCphbGxvd2VkKShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xuQEAgLTExOTIsMjEgKzEyMDksNiBAQCBzdHJ1Y3QgYnBmX3Byb2dfb2ZmbG9hZCB7XG4gXHR1MzJcdFx0XHRqaXRlZF9sZW47XG4gfTtcbiBcbi0vKiBUaGUgbG9uZ2VzdCB0cmFjZXBvaW50IGhhcyAxMiBhcmdzLlxuLSAqIFNlZSBpbmNsdWRlL3RyYWNlL2JwZl9wcm9iZS5oXG4tICpcbi0gKiBBbHNvIHJldXNlIHRoaXMgbWFjcm8gZm9yIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyBhIEJQRiBmdW5jdGlvblxuLSAqIG9yIGEga2Z1bmMgY2FuIGhhdmUuIEFyZ3MgMS01IGFyZSBwYXNzZWQgaW4gcmVnaXN0ZXJzLCBhcmdzIDYtMTIgdmlhXG4tICogc3RhY2sgYXJnIHNsb3RzLiBUaGUgSklUIG1heSBtYXAgc29tZSBzdGFjayBhcmcgc2xvdHMgdG8gcmVnaXN0ZXJzIGJhc2VkXG4tICogb24gdGhlIG5hdGl2ZSBjYWxsaW5nIGNvbnZlbnRpb24gKGUuZy4sIGFyZyA2IHRvIFI5IG9uIHg4Ni02NCkuXG4tICovXG4tI2RlZmluZSBNQVhfQlBGX0ZVTkNfQVJHUyAxMlxuLVxuLS8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRocm91Z2ggcmVnaXN0ZXJzXG4tICogYSBzaW5nbGUgZnVuY3Rpb24gbWF5IGhhdmUuXG4tICovXG4tI2RlZmluZSBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MgNVxuLVxuIC8qIFRoZSBhcmd1bWVudCBpcyBhIHN0cnVjdHVyZSBvciBhIHVuaW9uLiAqL1xuICNkZWZpbmUgQlRGX0ZNT0RFTF9TVFJVQ1RfQVJHXHRcdEJJVCgwKVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCA2ODJjMmNkM2I4NDQzMC4uMDY1NTE2NGU2YWYyZWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5AQCAtMTUsNyArMTUsNyBAQFxuICAqIGVuc3VyZXMgdGhhdCB1bWF4X3ZhbHVlICsgKGludClvZmYgKyAoaW50KXNpemUgY2Fubm90IG92ZXJmbG93IGEgdTY0LlxuICAqL1xuICNkZWZpbmUgQlBGX01BWF9WQVJfT0ZGXHQoMSBcdTAwM2NcdTAwM2MgMjkpXG4tLyogTWF4aW11bSB2YXJpYWJsZSBzaXplIHBlcm1pdHRlZCBmb3IgQVJHX0NPTlNUX1NJWkVbX09SX1pFUk9dLiAgVGhpcyBlbnN1cmVzXG4rLyogTWF4aW11bSB2YXJpYWJsZSBzaXplIHBlcm1pdHRlZCBmb3IgQVJHX01FTV9TSVpFW19PUl9aRVJPXS4gIFRoaXMgZW5zdXJlc1xuICAqIHRoYXQgY29udmVydGluZyB1bWF4X3ZhbHVlIHRvIGludCBjYW5ub3Qgb3ZlcmZsb3cuXG4gICovXG4gI2RlZmluZSBCUEZfTUFYX1ZBUl9TSVpcdCgxIFx1MDAzY1x1MDAzYyAyOSlcbkBAIC0xMTg4LDYgKzExODgsNyBAQCBpbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbiBcdFx0XHQgICAgdTMyIGJ0Zl9pZCxcbiBcdFx0XHQgICAgc3RydWN0IGJwZl9hdHRhY2hfdGFyZ2V0X2luZm8gKnRndF9pbmZvKTtcbiB2b2lkIGJwZl9mcmVlX2tmdW5jX2J0Zl90YWIoc3RydWN0IGJwZl9rZnVuY19idGZfdGFiICp0YWIpO1xuK3ZvaWQgYnBmX2ZyZWVfa2Z1bmNfZGVzY190YWIoc3RydWN0IGJwZl9rZnVuY19kZXNjX3RhYiAqdGFiKTtcbiBcbiBpbnQgbWFya19jaGFpbl9wcmVjaXNpb24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vKTtcbiBcbkBAIC0xMzA1LDggKzEzMDYsMTkgQEAgc3RhdGljIGlubGluZSB1MzIgdHlwZV9mbGFnKHUzMiB0eXBlKVxuIC8qIG9ubHkgdXNlIGFmdGVyIGNoZWNrX2F0dGFjaF9idGZfaWQoKSAqL1xuIHN0YXRpYyBpbmxpbmUgZW51bSBicGZfcHJvZ190eXBlIHJlc29sdmVfcHJvZ190eXBlKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiB7XG4tXHRyZXR1cm4gKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0VYVCBcdTAwMjZcdTAwMjYgcHJvZy1cdTAwM2VhdXgtXHUwMDNlc2F2ZWRfZHN0X3Byb2dfdHlwZSkgP1xuLVx0XHRwcm9nLVx1MDAzZWF1eC1cdTAwM2VzYXZlZF9kc3RfcHJvZ190eXBlIDogcHJvZy1cdTAwM2V0eXBlO1xuK1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0VYVCkge1xuK1x0XHQvKlxuK1x0XHQgKiBzYXZlZF9kc3RfcHJvZ190eXBlIGlzIG9ubHkgc2V0IG9uY2UgY2hlY2tfYXR0YWNoX2J0Zl9pZCgpXG4rXHRcdCAqIHJ1bnMuIEJlZm9yZSB0aGF0IC0tIGUuZy4gd2hlbiBnZW5lcmF0aW5nIGtmdW5jIHByb3RvdHlwZXMgYXRcbitcdFx0ICogYWRkLWNhbGwgdGltZSAtLSBmYWxsIGJhY2sgdG8gdGhlIGF0dGFjaCB0YXJnZXQncyB0eXBlLCB3aGljaFxuK1x0XHQgKiBpcyBhdmFpbGFibGUgZnJvbSBsb2FkIHRpbWUgYW5kIGhvbGRzIHRoZSBzYW1lIHZhbHVlLlxuK1x0XHQgKi9cbitcdFx0aWYgKHByb2ctXHUwMDNlYXV4LVx1MDAzZXNhdmVkX2RzdF9wcm9nX3R5cGUpXG4rXHRcdFx0cmV0dXJuIHByb2ctXHUwMDNlYXV4LVx1MDAzZXNhdmVkX2RzdF9wcm9nX3R5cGU7XG4rXHRcdGlmIChwcm9nLVx1MDAzZWF1eC1cdTAwM2Vkc3RfcHJvZylcbitcdFx0XHRyZXR1cm4gcHJvZy1cdTAwM2VhdXgtXHUwMDNlZHN0X3Byb2ctXHUwMDNldHlwZTtcbitcdH1cbitcdHJldHVybiBwcm9nLVx1MDAzZXR5cGU7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19jaGVja19yZWN1cihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5AQCAtMTQ3OSwxMCArMTQ5MSwxNyBAQCBzdHJ1Y3QgcmV0X21lbV9kZXNjIHtcbiBcdGJvb2wgZm91bmQ7XG4gfTtcbiBcbisvKiBBIGNvbnN0YW50IHNjYWxhciBhcmd1bWVudDsgUG9wdWxhdGVkIGJ5IHByb2Nlc3NfY29uc3RfYXJnKCkgKi9cbitzdHJ1Y3QgYXJnX2NvbnN0YW50X2Rlc2Mge1xuK1x0dTY0IHZhbHVlO1xuK1x0Ym9vbCBmb3VuZDtcbit9O1xuK1xuIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSB7XG4gXHQvKiBDb21tb24gKi9cbiBcdHN0cnVjdCBidGYgKmJ0ZjtcbiBcdHUzMiBmdW5jX2lkO1xuK1x0Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbjtcbiBcdHU4IHJlbGVhc2VfcmVnbm87XG4gXHR1MzIgcmV0X2J0Zl9pZDtcbiBcdHUzMiBzdWJwcm9nbm87XG5AQCAtMTQ5NiwxMCArMTUxNSw3IEBAIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSB7XG4gXHR1MzIga2Z1bmNfZmxhZ3M7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmZ1bmNfcHJvdG87XG4gXHRjb25zdCBjaGFyICpmdW5jX25hbWU7XG4tXHRzdHJ1Y3Qge1xuLVx0XHR1NjQgdmFsdWU7XG4tXHRcdGJvb2wgZm91bmQ7XG4tXHR9IGFyZ19jb25zdGFudDtcbitcdHN0cnVjdCBhcmdfY29uc3RhbnRfZGVzYyBhcmdfY29uc3RhbnQ7XG4gXG4gXHQvKiBhcmdfe2J0ZixidGZfaWQsb3duaW5nX3JlZn0gYXJlIHVzZWQgYnkga2Z1bmMtc3BlY2lmaWMgaGFuZGxpbmcsXG4gXHQgKiBnZW5lcmFsbHkgdG8gcGFzcyBpbmZvIGFib3V0IHVzZXItZGVmaW5lZCBsb2NhbCBrcHRyIHR5cGVzIHRvIGxhdGVyXG5AQCAtMTYxNCw2ICsxNjMwLDcgQEAgZW51bSBicGZfcmVnX2FyZ190eXBlIHtcbiBcbiBzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2Mge1xuIFx0c3RydWN0IGJ0Zl9mdW5jX21vZGVsIGZ1bmNfbW9kZWw7XG4rXHRzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKnByb3RvO1xuIFx0dTMyIGZ1bmNfaWQ7XG4gXHRzMzIgaW1tO1xuIFx0dTE2IG9mZnNldDtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuaW5kZXggMmU0YWUwZWYwODYwOWQuLjJmNDczYWQ0ZmQ3YzFjIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuKysrIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuQEAgLTYzNiw3ICs2MzYsNyBAQCBzdGF0aWMgaW50IGJhY2t0cmFja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZHgsIGludCBzdWJzZXFfaWR4LFxuICAqIHI1ICs9IDFcbiAgKiAuLi5cbiAgKiBjYWxsIGJwZl9wZXJmX2V2ZW50X291dHB1dCMyNVxuLSAqICAgd2hlcmUgLmFyZzVfdHlwZSA9IEFSR19DT05TVF9TSVpFX09SX1pFUk9cbisgKiAgIHdoZXJlIC5hcmc1X3R5cGUgPSBBUkdfTUVNX1NJWkVfT1JfWkVST1xuICAqXG4gICogYW5kIHRoaXMgY2FzZTpcbiAgKiByNiA9IDFcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JwZl9sc20uYyBiL2tlcm5lbC9icGYvYnBmX2xzbS5jXG5pbmRleCAzOTgzYjRjZTczYzgxMS4uODJjNTk4ODQxN2EwY2YgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2JwZl9sc20uY1xuKysrIGIva2VybmVsL2JwZi9icGZfbHNtLmNcbkBAIC0xODYsNyArMTg2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfaW1hX2lub2RlX2hhc2hfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxuIFx0LmFyZzFfYnRmX2lkXHQ9IFx1MDAyNmJwZl9pbWFfaW5vZGVfaGFzaF9idGZfaWRzWzBdLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYWxsb3dlZFx0PSBicGZfaW1hX2lub2RlX2hhc2hfYWxsb3dlZCxcbiB9O1xuIFxuQEAgLTIwNSw3ICsyMDUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9pbWFfZmlsZV9oYXNoX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbiBcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZicGZfaW1hX2ZpbGVfaGFzaF9idGZfaWRzWzBdLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYWxsb3dlZFx0PSBicGZfaW1hX2lub2RlX2hhc2hfYWxsb3dlZCxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jXG5pbmRleCBjYmIxZTQ5YjliY2JmNS4uYTIzYTQyY2JlM2IxMzUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2J0Zi5jXG4rKysgYi9rZXJuZWwvYnBmL2J0Zi5jXG5AQCAtODcwNyw3ICs4NzA3LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9idGZfZmluZF9ieV9uYW1lX2tpbmRfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Nncm91cC5jIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xuaW5kZXggNDM1NWNjYjc4YTljNjcuLmZiOTM1N2I2NGNhZGJjIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jZ3JvdXAuY1xuKysrIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xuQEAgLTIzMDUsNyArMjMwNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3N5c2N0bF9nZXRfbmFtZV9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1dSSVRFLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC0yMzQ3LDcgKzIzNDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zeXNjdGxfZ2V0X2N1cnJlbnRfdmFsdWVfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBCUEZfQ0FMTF8zKGJwZl9zeXNjdGxfZ2V0X25ld192YWx1ZSwgc3RydWN0IGJwZl9zeXNjdGxfa2VybiAqLCBjdHgsIGNoYXIgKiwgYnVmLFxuQEAgLTIzNjcsNyArMjM2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3N5c2N0bF9nZXRfbmV3X3ZhbHVlX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gQlBGX0NBTExfMyhicGZfc3lzY3RsX3NldF9uZXdfdmFsdWUsIHN0cnVjdCBicGZfc3lzY3RsX2tlcm4gKiwgY3R4LFxuQEAgLTIzOTMsNyArMjM5Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3N5c2N0bF9zZXRfbmV3X3ZhbHVlX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuY1xuaW5kZXggNDdmZTA0N2FkMzBiODguLmEzMGU3NDcxZTlkODFlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jb3JlLmNcbisrKyBiL2tlcm5lbC9icGYvY29yZS5jXG5AQCAtMTk4LDcgKzE5OCw5IEBAIHZvaWQgYnBmX3Byb2dfaml0X2F0dGVtcHRfZG9uZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4gXHRcdHByb2ctXHUwMDNlYXV4LVx1MDAzZWppdGVkX2xpbmZvID0gTlVMTDtcbiBcdH1cbiBcbi1cdGtmcmVlKHByb2ctXHUwMDNlYXV4LVx1MDAzZWtmdW5jX3RhYik7XG4rI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuK1x0YnBmX2ZyZWVfa2Z1bmNfZGVzY190YWIocHJvZy1cdTAwM2VhdXgtXHUwMDNla2Z1bmNfdGFiKTtcbisjZW5kaWZcbiBcdHByb2ctXHUwMDNlYXV4LVx1MDAzZWtmdW5jX3RhYiA9IE5VTEw7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGVscGVycy5jIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcbmluZGV4IGMxOGYxZTE2ZWRlZTRjLi4xOGJlNWQ2ZTRmOWMyOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jXG4rKysgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuQEAgLTI3OCw3ICsyNzgsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9jdXJyZW50X2NvbW1fcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuICNpZiBkZWZpbmVkKENPTkZJR19RVUVVRURfU1BJTkxPQ0tTKSB8fCBkZWZpbmVkKENPTkZJR19CUEZfQVJDSF9TUElOTE9DSylcbkBAIC01MzksNyArNTM5LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zdHJ0b2xfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX0ZJWEVEX1NJWkVfTUVNIHwgTUVNX1VOSU5JVCB8IE1FTV9XUklURSB8IE1FTV9BTElHTkVELFxuIFx0LmFyZzRfc2l6ZVx0PSBzaXplb2YoczY0KSxcbkBAIC01NjcsNyArNTY3LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zdHJ0b3VsX3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19GSVhFRF9TSVpFX01FTSB8IE1FTV9VTklOSVQgfCBNRU1fV1JJVEUgfCBNRU1fQUxJR05FRCxcbiBcdC5hcmc0X3NpemVcdD0gc2l6ZW9mKHU2NCksXG5AQCAtNTgzLDcgKzU4Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3N0cm5jbXBfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19DT05TVF9TVFIsXG4gfTtcbiBcbkBAIC02MjcsNyArNjI3LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfbnNfY3VycmVudF9waWRfdGdpZF9wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlICAgICAgPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnNF90eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmc0X3R5cGUgICAgICA9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9yYXdfc21wX3Byb2Nlc3Nvcl9pZF9wcm90byA9IHtcbkBAIC02NTMsNyArNjUzLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9ldmVudF9vdXRwdXRfZGF0YV9wcm90byA9ICB7XG4gXHQuYXJnMl90eXBlICAgICAgPSBBUkdfQ09OU1RfTUFQX1BUUixcbiBcdC5hcmczX3R5cGUgICAgICA9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGUgICAgICA9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc1X3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnNV90eXBlICAgICAgPSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIEJQRl9DQUxMXzMoYnBmX2NvcHlfZnJvbV91c2VyLCB2b2lkICosIGRzdCwgdTMyLCBzaXplLFxuQEAgLTY3NSw3ICs2NzUsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Byb3RvID0ge1xuIFx0Lm1pZ2h0X3NsZWVwXHQ9IHRydWUsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTcwNiw3ICs3MDYsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfcHJvdG8gPSB7XG4gXHQubWlnaHRfc2xlZXBcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbiBcdC5hcmc0X2J0Zl9pZFx0PSBcdTAwMjZidGZfdHJhY2luZ19pZHNbQlRGX1RSQUNJTkdfVFlQRV9UQVNLXSxcbkBAIC0xMDkzLDEwICsxMDkzLDEwIEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc25wcmludGZfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19NRU1fT1JfTlVMTCB8IE1FTV9XUklURSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fQ09OU1RfU1RSLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IFBUUl9NQVlCRV9OVUxMIHwgTUVNX1JET05MWSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCAqbWFwX2tleV9mcm9tX3ZhbHVlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlLCB1MzIgKmFycl9pZHgpXG5AQCAtMTg4OCw3ICsxODg4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZHlucHRyX2Zyb21fbWVtX3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fRFlOUFRSIHwgRFlOUFRSX1RZUEVfTE9DQUwgfCBNRU1fVU5JTklUIHwgTUVNX1dSSVRFLFxuIH07XG5AQCAtMTk0Myw3ICsxOTQzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZHlucHRyX3JlYWRfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fRFlOUFRSLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbkBAIC0yMDA0LDcgKzIwMDQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9keW5wdHJfd3JpdGVfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fRFlOUFRSLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTM0MDQsMTAgKzM0MDQsMTAgQEAgX19icGZfa2Z1bmMgdm9pZCBicGZfdGhyb3codTY0IGNvb2tpZSlcbiBcdFdBUk4oMSwgXCJBIGNhbGwgdG8gQlBGIGV4Y2VwdGlvbiBjYWxsYmFjayBzaG91bGQgbmV2ZXIgcmV0dXJuXFxuXCIpO1xuIH1cbiBcbi1fX2JwZl9rZnVuYyBpbnQgYnBmX3dxX2luaXQoc3RydWN0IGJwZl93cSAqd3EsIHZvaWQgKnBfX21hcCwgdW5zaWduZWQgaW50IGZsYWdzKVxuK19fYnBmX2tmdW5jIGludCBicGZfd3FfaW5pdChzdHJ1Y3QgYnBmX3dxICp3cSwgdm9pZCAqcF9fY29uc3RfbWFwLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGJwZl9hc3luY19rZXJuICphc3luYyA9IChzdHJ1Y3QgYnBmX2FzeW5jX2tlcm4gKil3cTtcbi1cdHN0cnVjdCBicGZfbWFwICptYXAgPSBwX19tYXA7XG4rXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gcF9fY29uc3RfbWFwO1xuIFxuIFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgYnBmX2FzeW5jX2tlcm4pIFx1MDAzZSBzaXplb2Yoc3RydWN0IGJwZl93cSkpO1xuIFx0QlVJTERfQlVHX09OKF9fYWxpZ25vZl9fKHN0cnVjdCBicGZfYXN5bmNfa2VybikgIT0gX19hbGlnbm9mX18oc3RydWN0IGJwZl93cSkpO1xuQEAgLTQ2NDIsMTcgKzQ2NDIsMTcgQEAgc3RhdGljIGludCBicGZfdGFza193b3JrX3NjaGVkdWxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IGJwZl90YXNrX3dvcmtcbiAgKiBtb2RlXG4gICogQHRhc2s6IFRhc2sgc3RydWN0IGZvciB3aGljaCBjYWxsYmFjayBzaG91bGQgYmUgc2NoZWR1bGVkXG4gICogQHR3OiBQb2ludGVyIHRvIHN0cnVjdCBicGZfdGFza193b3JrIGluIEJQRiBtYXAgdmFsdWUgZm9yIGludGVybmFsIGJvb2trZWVwaW5nXG4tICogQG1hcF9fbWFwOiBicGZfbWFwIHRoYXQgZW1iZWRzIHN0cnVjdCBicGZfdGFza193b3JrIGluIHRoZSB2YWx1ZXNcbisgKiBAbWFwX19jb25zdF9tYXA6IGJwZl9tYXAgdGhhdCBlbWJlZHMgc3RydWN0IGJwZl90YXNrX3dvcmsgaW4gdGhlIHZhbHVlc1xuICAqIEBjYWxsYmFjazogcG9pbnRlciB0byBCUEYgc3VicHJvZ3JhbSB0byBjYWxsXG4gICogQGF1eDogcG9pbnRlciB0byBicGZfcHJvZ19hdXggb2YgdGhlIGNhbGxlciBCUEYgcHJvZ3JhbSwgaW1wbGljaXRseSBzZXQgYnkgdGhlIHZlcmlmaWVyXG4gICpcbiAgKiBSZXR1cm46IDAgaWYgdGFzayB3b3JrIGhhcyBiZWVuIHNjaGVkdWxlZCBzdWNjZXNzZnVsbHksIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4gICovXG4gX19icGZfa2Z1bmMgaW50IGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LFxuLVx0XHRcdFx0XHQgICAgICB2b2lkICptYXBfX21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLFxuK1x0XHRcdFx0XHQgICAgICB2b2lkICptYXBfX2NvbnN0X21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXG4ge1xuLVx0cmV0dXJuIGJwZl90YXNrX3dvcmtfc2NoZWR1bGUodGFzaywgdHcsIG1hcF9fbWFwLCBjYWxsYmFjaywgYXV4LCBUV0FfU0lHTkFMKTtcbitcdHJldHVybiBicGZfdGFza193b3JrX3NjaGVkdWxlKHRhc2ssIHR3LCBtYXBfX2NvbnN0X21hcCwgY2FsbGJhY2ssIGF1eCwgVFdBX1NJR05BTCk7XG4gfVxuIFxuIC8qKlxuQEAgLTQ2NjAsMTcgKzQ2NjAsMTcgQEAgX19icGZfa2Z1bmMgaW50IGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IGJcbiAgKiBtb2RlXG4gICogQHRhc2s6IFRhc2sgc3RydWN0IGZvciB3aGljaCBjYWxsYmFjayBzaG91bGQgYmUgc2NoZWR1bGVkXG4gICogQHR3OiBQb2ludGVyIHRvIHN0cnVjdCBicGZfdGFza193b3JrIGluIEJQRiBtYXAgdmFsdWUgZm9yIGludGVybmFsIGJvb2trZWVwaW5nXG4tICogQG1hcF9fbWFwOiBicGZfbWFwIHRoYXQgZW1iZWRzIHN0cnVjdCBicGZfdGFza193b3JrIGluIHRoZSB2YWx1ZXNcbisgKiBAbWFwX19jb25zdF9tYXA6IGJwZl9tYXAgdGhhdCBlbWJlZHMgc3RydWN0IGJwZl90YXNrX3dvcmsgaW4gdGhlIHZhbHVlc1xuICAqIEBjYWxsYmFjazogcG9pbnRlciB0byBCUEYgc3VicHJvZ3JhbSB0byBjYWxsXG4gICogQGF1eDogcG9pbnRlciB0byBicGZfcHJvZ19hdXggb2YgdGhlIGNhbGxlciBCUEYgcHJvZ3JhbSwgaW1wbGljaXRseSBzZXQgYnkgdGhlIHZlcmlmaWVyXG4gICpcbiAgKiBSZXR1cm46IDAgaWYgdGFzayB3b3JrIGhhcyBiZWVuIHNjaGVkdWxlZCBzdWNjZXNzZnVsbHksIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4gICovXG4gX19icGZfa2Z1bmMgaW50IGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LFxuLVx0XHRcdFx0XHQgICAgICB2b2lkICptYXBfX21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLFxuK1x0XHRcdFx0XHQgICAgICB2b2lkICptYXBfX2NvbnN0X21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXG4ge1xuLVx0cmV0dXJuIGJwZl90YXNrX3dvcmtfc2NoZWR1bGUodGFzaywgdHcsIG1hcF9fbWFwLCBjYWxsYmFjaywgYXV4LCBUV0FfUkVTVU1FKTtcbitcdHJldHVybiBicGZfdGFza193b3JrX3NjaGVkdWxlKHRhc2ssIHR3LCBtYXBfX2NvbnN0X21hcCwgY2FsbGJhY2ssIGF1eCwgVFdBX1JFU1VNRSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbWFrZV9maWxlX2R5bnB0cihzdHJ1Y3QgZmlsZSAqZmlsZSwgdTMyIGZsYWdzLCBib29sIG1heV9zbGVlcCxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3JpbmdidWYuYyBiL2tlcm5lbC9icGYvcmluZ2J1Zi5jXG5pbmRleCAzNWFlNjRhZGUzNmI4My4uYzFiZjdhMTk3YTk2ZjMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3JpbmdidWYuY1xuKysrIGIva2VybmVsL2JwZi9yaW5nYnVmLmNcbkBAIC02MzQsNyArNjM0LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9yaW5nYnVmX291dHB1dF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX0NPTlNUX01BUF9QVFIsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhY2ttYXAuYyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xuaW5kZXggNDFmZTg3ZDczMDJmMjIuLjQ2M2Y5NGJhMWNjNDc4IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zdGFja21hcC5jXG4rKysgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbkBAIC03ODEsNyArNzgxLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC03OTcsNyArNzk3LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtODMxLDcgKzgzMSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3Rhc2tfc3RhY2tfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxuIFx0LmFyZzFfYnRmX2lkXHQ9IFx1MDAyNmJ0Zl90cmFjaW5nX2lkc1tCVEZfVFJBQ0lOR19UWVBFX1RBU0tdLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC04NDgsNyArODQ4LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQlRGX0lELFxuIFx0LmFyZzFfYnRmX2lkXHQ9IFx1MDAyNmJ0Zl90cmFjaW5nX2lkc1tCVEZfVFJBQ0lOR19UWVBFX1RBU0tdLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC05MTEsNyArOTExLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfcHJvdG9fcGUgPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCAwZmY5ZTNhYTI5M2Q1Ny4uMGI1ZGM2Nzg4YmEyN2YgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC0yNDQ0LDcgKzI0NDQsNyBAQCBzdGF0aWMgdm9pZCBfX2JwZl9wcm9nX3B1dF9ub3JlZihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGJvb2wgZGVmZXJyZWQpXG4gXHRtb2R1bGVfcHV0KHByb2ctXHUwMDNlYXV4LVx1MDAzZW1vZCk7XG4gXHRrdmZyZWUocHJvZy1cdTAwM2VhdXgtXHUwMDNlaml0ZWRfbGluZm8pO1xuIFx0a3ZmcmVlKHByb2ctXHUwMDNlYXV4LVx1MDAzZWxpbmZvKTtcbi1cdGtmcmVlKHByb2ctXHUwMDNlYXV4LVx1MDAzZWtmdW5jX3RhYik7XG4rXHRicGZfZnJlZV9rZnVuY19kZXNjX3RhYihwcm9nLVx1MDAzZWF1eC1cdTAwM2VrZnVuY190YWIpO1xuIFx0a2ZyZWUocHJvZy1cdTAwM2VhdXgtXHUwMDNlY3R4X2FyZ19pbmZvKTtcbiBcdGlmIChwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmKVxuIFx0XHRidGZfcHV0KHByb2ctXHUwMDNlYXV4LVx1MDAzZWF0dGFjaF9idGYpO1xuQEAgLTY1NDQsNyArNjU0NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3N5c19icGZfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICogX193ZWFrXG5AQCAtNjU5MSw3ICs2NTkxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfa2FsbHN5bXNfbG9va3VwX25hbWVfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19GSVhFRF9TSVpFX01FTSB8IE1FTV9VTklOSVQgfCBNRU1fV1JJVEUgfCBNRU1fQUxJR05FRCxcbiBcdC5hcmc0X3NpemVcdD0gc2l6ZW9mKHU2NCksXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA1MmJlMGExMThjY2UwNy4uYWNhMzdhN2JmMmNiYzcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTI3MTksOCArMjcxOSwyNSBAQCBzdGF0aWMgaW50IGZldGNoX2tmdW5jX21ldGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGdlbl9rZnVuY19hcmdfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbitcdFx0XHQgICAgICAgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKnByb3RvKTtcbitcbit2b2lkIGJwZl9mcmVlX2tmdW5jX2Rlc2NfdGFiKHN0cnVjdCBicGZfa2Z1bmNfZGVzY190YWIgKnRhYilcbit7XG4rXHR1MzIgaTtcbitcbitcdGlmICghdGFiKVxuK1x0XHRyZXR1cm47XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0YWItXHUwMDNlbnJfZGVzY3M7IGkrKylcbitcdFx0a2ZyZWUodGFiLVx1MDAzZWRlc2NzW2ldLnByb3RvKTtcbitcdGtmcmVlKHRhYik7XG4rfVxuK1xuIGludCBicGZfYWRkX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGZ1bmNfaWQsIHUxNiBvZmZzZXQpXG4ge1xuK1x0c3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhIG1ldGE7XG4rXHRzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKnByb3RvO1xuIFx0c3RydWN0IGJwZl9rZnVuY19idGZfdGFiICpidGZfdGFiO1xuIFx0c3RydWN0IGJ0Zl9mdW5jX21vZGVsIGZ1bmNfbW9kZWw7XG4gXHRzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2NfdGFiICp0YWI7XG5AQCAtMjgwNiwxMSArMjgyMywyOSBAQCBpbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KVxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbitcdHByb3RvID0ga3phbGxvY19vYmooKnByb3RvLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuK1x0aWYgKCFwcm90bylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRtZW1zZXQoXHUwMDI2bWV0YSwgMCwgc2l6ZW9mKG1ldGEpKTtcbitcdG1ldGEuYnRmID0ga2Z1bmMuYnRmO1xuK1x0bWV0YS5mdW5jX2lkID0ga2Z1bmMuaWQ7XG4rXHRtZXRhLmZ1bmNfcHJvdG8gPSBrZnVuYy5wcm90bztcbitcdG1ldGEuZnVuY19uYW1lID0ga2Z1bmMubmFtZTtcbitcdG1ldGEua2Z1bmNfZmxhZ3MgPSBrZnVuYy5mbGFncyA/ICprZnVuYy5mbGFncyA6IDA7XG4rXG4rXHRlcnIgPSBnZW5fa2Z1bmNfYXJnX3Byb3RvKGVudiwgXHUwMDI2bWV0YSwgcHJvdG8pO1xuK1x0aWYgKGVycikge1xuK1x0XHRrZnJlZShwcm90byk7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4gXHRkZXNjID0gXHUwMDI2dGFiLVx1MDAzZWRlc2NzW3RhYi1cdTAwM2Vucl9kZXNjcysrXTtcbiBcdGRlc2MtXHUwMDNlZnVuY19pZCA9IGZ1bmNfaWQ7XG4gXHRkZXNjLVx1MDAzZW9mZnNldCA9IG9mZnNldDtcbiBcdGRlc2MtXHUwMDNlYWRkciA9IGFkZHI7XG4gXHRkZXNjLVx1MDAzZWZ1bmNfbW9kZWwgPSBmdW5jX21vZGVsO1xuK1x0ZGVzYy1cdTAwM2Vwcm90byA9IHByb3RvO1xuIFx0c29ydCh0YWItXHUwMDNlZGVzY3MsIHRhYi1cdTAwM2Vucl9kZXNjcywgc2l6ZW9mKHRhYi1cdTAwM2VkZXNjc1swXSksXG4gXHQgICAgIGtmdW5jX2Rlc2NfY21wX2J5X2lkX29mZiwgTlVMTCk7XG4gXHRyZXR1cm4gMDtcbkBAIC00OTI0LDYgKzQ5NTksMTkgQEAgc3RhdGljIHUzMiAqcmVnMmJ0Zl9pZHNbX19CUEZfUkVHX1RZUEVfTUFYXSA9IHtcbiBcdFtDT05TVF9QVFJfVE9fTUFQXSA9IGJ0Zl9icGZfbWFwX2lkLFxuIH07XG4gXG4rc3RhdGljIGVudW0gYnBmX3JlZ190eXBlIGxvb2t1cF9yZWcyYnRmX2lkcyhjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnJlZl90KVxuK3tcbitcdGVudW0gYnBmX3JlZ190eXBlIHR5cGU7XG4rXG4rXHRmb3IgKHR5cGUgPSAwOyB0eXBlIFx1MDAzYyBfX0JQRl9SRUdfVFlQRV9NQVg7IHR5cGUrKykge1xuK1x0XHRpZiAocmVnMmJ0Zl9pZHNbdHlwZV0gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBidGZfdHlwZV9ieV9pZChidGZfdm1saW51eCwgKnJlZzJidGZfaWRzW3R5cGVdKSA9PSByZWZfdClcbitcdFx0XHRyZXR1cm4gdHlwZTtcbitcdH1cbitcbitcdHJldHVybiBOT1RfSU5JVDtcbit9XG4rXG4gc3RhdGljIGJvb2wgaXNfdHJ1c3RlZF9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiB7XG4gXHQvKiBBIHJlZmVyZW5jZWQgcmVnaXN0ZXIgaXMgYWx3YXlzIHRydXN0ZWQuICovXG5AQCAtNjg3Myw3ICs2OTIxLDE0IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX3NpemVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0ICAgICAgYm9vbCB6ZXJvX3NpemVfYWxsb3dlZCxcbiBcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG4ge1xuLVx0aW50IGVycjtcbitcdGJvb2wgbWF5X2JlX251bGwgPSB0eXBlX21heV9iZV9udWxsKG1lbV9yZWctXHUwMDNldHlwZSk7XG4rXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSBzYXZlZF9yZWc7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGlmIChtYXlfYmVfbnVsbCkge1xuK1x0XHRzYXZlZF9yZWcgPSAqbWVtX3JlZztcbitcdFx0bWFya19wdHJfbm90X251bGxfcmVnKG1lbV9yZWcpO1xuK1x0fVxuIFxuIFx0LyogVGhpcyBpcyB1c2VkIHRvIHJlZmluZSByMCByZXR1cm4gdmFsdWUgYm91bmRzIGZvciBoZWxwZXJzXG4gXHQgKiB0aGF0IGVuZm9yY2UgdGhpcyB2YWx1ZSBhcyBhbiB1cHBlciBib3VuZCBvbiByZXR1cm4gdmFsdWVzLlxuQEAgLTY5MTAsOCArNjk2NSwxNCBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9zaXplX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIHNpemVfYXJnbm8pKTtcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHR9XG4tXHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIG1lbV9yZWcsIG1lbV9hcmdubywgcmVnX3VtYXgoc2l6ZV9yZWcpLFxuLVx0XHRcdFx0ICAgICAgYWNjZXNzX3R5cGUsIHplcm9fc2l6ZV9hbGxvd2VkLCBtZXRhKTtcbitcbitcdGlmIChhY2Nlc3NfdHlwZSBcdTAwMjYgQlBGX1JFQUQpXG4rXHRcdGVyciA9IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKGVudiwgbWVtX3JlZywgbWVtX2FyZ25vLCByZWdfdW1heChzaXplX3JlZyksXG4rXHRcdFx0XHRcdCAgICAgIEJQRl9SRUFELCB6ZXJvX3NpemVfYWxsb3dlZCwgbWV0YSk7XG4rXHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgYWNjZXNzX3R5cGUgXHUwMDI2IEJQRl9XUklURSlcbitcdFx0ZXJyID0gY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCBtZW1fcmVnLCBtZW1fYXJnbm8sIHJlZ191bWF4KHNpemVfcmVnKSxcbitcdFx0XHRcdFx0ICAgICAgQlBGX1dSSVRFLCB6ZXJvX3NpemVfYWxsb3dlZCwgbWV0YSk7XG4rXG4gXHRpZiAoIWVycikge1xuIFx0XHRpbnQgcmVnbm8gPSByZWdfZnJvbV9hcmdubyhzaXplX2FyZ25vKTtcbiBcbkBAIC02OTIwLDE1ICs2OTgxLDIyIEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX3NpemVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdGVsc2VcbiBcdFx0XHRlcnIgPSBtYXJrX3N0YWNrX2FyZ19wcmVjaXNpb24oZW52LCBhcmdfaWR4X2Zyb21fYXJnbm8oc2l6ZV9hcmdubykpO1xuIFx0fVxuK1xuK1x0aWYgKG1heV9iZV9udWxsKVxuK1x0XHQqbWVtX3JlZyA9IHNhdmVkX3JlZztcbitcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbnQgY2hlY2tfbWVtX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuLVx0XHRcdCBhcmdub190IGFyZ25vLCB1MzIgbWVtX3NpemUpXG4rXHRcdFx0IGFyZ25vX3QgYXJnbm8sIHUzMiBtZW1fc2l6ZSwgZW51bSBicGZfYWNjZXNzX3R5cGUgYWNjZXNzX3R5cGUsXG4rXHRcdFx0IHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbiB7XG4rXHQvKiBtZXRhLVx1MDAzZWJ0ZiBpcyBzZXQgb25seSBmb3Iga2Z1bmNzOyBhIE5VTEwgbWV0YSBtZWFucyBhIGdsb2JhbCBzdWJwcm9nLiAqL1xuK1x0Ym9vbCBoZWxwZXIgPSBtZXRhIFx1MDAyNlx1MDAyNiAhbWV0YS1cdTAwM2VidGY7XG4gXHRib29sIG1heV9iZV9udWxsID0gdHlwZV9tYXlfYmVfbnVsbChyZWctXHUwMDNldHlwZSk7XG4gXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSBzYXZlZF9yZWc7XG4tXHRpbnQgZXJyO1xuK1x0aW50IHNpemUsIGVyciA9IDA7XG4gXG4gXHRpZiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtNjk0OCwxMCArNzAxNiwxMiBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ1xuIFx0XHRtYXJrX3B0cl9ub3RfbnVsbF9yZWcocmVnKTtcbiBcdH1cbiBcbi1cdGludCBzaXplID0gYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKSA9PSBQVFJfVE9fU1RBQ0sgPyAtKGludCltZW1fc2l6ZSA6IG1lbV9zaXplO1xuK1x0c2l6ZSA9ICghaGVscGVyIFx1MDAyNlx1MDAyNiBiYXNlX3R5cGUocmVnLVx1MDAzZXR5cGUpID09IFBUUl9UT19TVEFDSykgPyAtKGludCltZW1fc2l6ZSA6IG1lbV9zaXplO1xuIFxuLVx0ZXJyID0gY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBzaXplLCBCUEZfUkVBRCwgdHJ1ZSwgTlVMTCk7XG4tXHRlcnIgPSBlcnIgPzogY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBzaXplLCBCUEZfV1JJVEUsIHRydWUsIE5VTEwpO1xuK1x0aWYgKGFjY2Vzc190eXBlIFx1MDAyNiBCUEZfUkVBRClcbitcdFx0ZXJyID0gY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCBzaXplLCBCUEZfUkVBRCwgdHJ1ZSwgbWV0YSk7XG4rXHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgKGFjY2Vzc190eXBlIFx1MDAyNiBCUEZfV1JJVEUpKVxuK1x0XHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIHNpemUsIEJQRl9XUklURSwgdHJ1ZSwgbWV0YSk7XG4gXG4gXHRpZiAobWF5X2JlX251bGwpXG4gXHRcdCpyZWcgPSBzYXZlZF9yZWc7XG5AQCAtNjk5MywyOCArNzA2MywzMyBAQCBzdGF0aWMgaW50IHByb2Nlc3NfY29uc3RfYWxsb2NfbWVtX3NpemUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZlxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfbWVtX3NpemVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICptZW1fcmVnLFxuLVx0XHRcdFx0ICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpzaXplX3JlZywgYXJnbm9fdCBtZW1fYXJnbm8sIGFyZ25vX3Qgc2l6ZV9hcmdubylcbitzdGF0aWMgaW50IHByb2Nlc3NfY29uc3RfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4rXHRcdFx0ICAgICBhcmdub190IGFyZ25vLCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG4ge1xuLVx0Ym9vbCBtYXlfYmVfbnVsbCA9IHR5cGVfbWF5X2JlX251bGwobWVtX3JlZy1cdTAwM2V0eXBlKTtcbi1cdHN0cnVjdCBicGZfcmVnX3N0YXRlIHNhdmVkX3JlZztcbi1cdHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSBtZXRhO1xuK1x0aW50IHJlZ25vID0gcmVnX2Zyb21fYXJnbm8oYXJnbm8pO1xuIFx0aW50IGVycjtcbiBcbi1cdG1lbXNldChcdTAwMjZtZXRhLCAwLCBzaXplb2YobWV0YSkpO1xuK1x0aWYgKG1ldGEtXHUwMDNlYXJnX2NvbnN0YW50LmZvdW5kKSB7XG4rXHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwib25seSBvbmUgY29uc3RhbnQgYXJndW1lbnQgcGVybWl0dGVkXCIpO1xuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcdH1cbiBcbi1cdGlmIChtYXlfYmVfbnVsbCkge1xuLVx0XHRzYXZlZF9yZWcgPSAqbWVtX3JlZztcbi1cdFx0bWFya19wdHJfbm90X251bGxfcmVnKG1lbV9yZWcpO1xuK1x0aWYgKCF0bnVtX2lzX2NvbnN0KHJlZy1cdTAwM2V2YXJfb2ZmKSkge1xuK1x0XHR2ZXJib3NlKGVudiwgXCIlcyBtdXN0IGJlIGEga25vd24gY29uc3RhbnRcXG5cIiwgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRlcnIgPSBjaGVja19tZW1fc2l6ZV9yZWcoZW52LCBtZW1fcmVnLCBzaXplX3JlZywgbWVtX2FyZ25vLCBzaXplX2FyZ25vLCBCUEZfUkVBRCwgdHJ1ZSwgXHUwMDI2bWV0YSk7XG4tXHRlcnIgPSBlcnIgPzogY2hlY2tfbWVtX3NpemVfcmVnKGVudiwgbWVtX3JlZywgc2l6ZV9yZWcsIG1lbV9hcmdubywgc2l6ZV9hcmdubywgQlBGX1dSSVRFLCB0cnVlLCBcdTAwMjZtZXRhKTtcbitcdGlmIChyZWdubyBcdTAwM2U9IDApXG4rXHRcdGVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgcmVnbm8pO1xuK1x0ZWxzZVxuK1x0XHRlcnIgPSBtYXJrX3N0YWNrX2FyZ19wcmVjaXNpb24oZW52LCBhcmdfaWR4X2Zyb21fYXJnbm8oYXJnbm8pKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAobWF5X2JlX251bGwpXG4tXHRcdCptZW1fcmVnID0gc2F2ZWRfcmVnO1xuK1x0bWV0YS1cdTAwM2VhcmdfY29uc3RhbnQuZm91bmQgPSB0cnVlO1xuK1x0bWV0YS1cdTAwM2VhcmdfY29uc3RhbnQudmFsdWUgPSByZWctXHUwMDNldmFyX29mZi52YWx1ZTtcbiBcbi1cdHJldHVybiBlcnI7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gZW51bSB7XG5AQCAtNzIyNCwxOCArNzI5OSw2IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc190aW1lcl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlXG4gXHRyZXR1cm4gY2hlY2tfbWFwX2ZpZWxkX3BvaW50ZXIoZW52LCByZWcsIGFyZ25vLCBCUEZfVElNRVIsIG1hcCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcHJvY2Vzc190aW1lcl9oZWxwZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcbi1cdFx0XHRcdHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbi17XG4tXHRyZXR1cm4gcHJvY2Vzc190aW1lcl9mdW5jKGVudiwgcmVnLCBhcmdubywgXHUwMDI2bWV0YS1cdTAwM2VtYXApO1xuLX1cbi1cbi1zdGF0aWMgaW50IHByb2Nlc3NfdGltZXJfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcbi1cdFx0XHQgICAgICAgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuLXtcbi1cdHJldHVybiBwcm9jZXNzX3RpbWVyX2Z1bmMoZW52LCByZWcsIGFyZ25vLCBcdTAwMjZtZXRhLVx1MDAzZW1hcCk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgcHJvY2Vzc19rcHRyX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLFxuIFx0XHRcdCAgICAgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuIHtcbkBAIC03NzM4LDggKzc4MDEsNyBAQCBzdGF0aWMgaW50IHByb2Nlc3NfaXRlcl9uZXh0X2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LFxuIFxuIHN0YXRpYyBib29sIGFyZ190eXBlX2lzX21lbV9zaXplKGVudW0gYnBmX2FyZ190eXBlIHR5cGUpXG4ge1xuLVx0cmV0dXJuIHR5cGUgPT0gQVJHX0NPTlNUX1NJWkUgfHxcbi1cdCAgICAgICB0eXBlID09IEFSR19DT05TVF9TSVpFX09SX1pFUk87XG4rXHRyZXR1cm4gYmFzZV90eXBlKHR5cGUpID09IEFSR19NRU1fU0laRTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgYXJnX3R5cGVfaXNfcmF3X21lbShlbnVtIGJwZl9hcmdfdHlwZSB0eXBlKVxuQEAgLTc4ODUsOCArNzk0Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3JlZ190eXBlcyBkeW5wdHJfdHlwZXMgPSB7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfcmVnX3R5cGVzICpjb21wYXRpYmxlX3JlZ190eXBlc1tfX0JQRl9BUkdfVFlQRV9NQVhdID0ge1xuIFx0W0FSR19QVFJfVE9fTUFQX0tFWV1cdFx0PSBcdTAwMjZtZW1fdHlwZXMsXG4gXHRbQVJHX1BUUl9UT19NQVBfVkFMVUVdXHRcdD0gXHUwMDI2bWVtX3R5cGVzLFxuLVx0W0FSR19DT05TVF9TSVpFXVx0XHQ9IFx1MDAyNnNjYWxhcl90eXBlcyxcbi1cdFtBUkdfQ09OU1RfU0laRV9PUl9aRVJPXVx0PSBcdTAwMjZzY2FsYXJfdHlwZXMsXG4rXHRbQVJHX01FTV9TSVpFXVx0XHRcdD0gXHUwMDI2c2NhbGFyX3R5cGVzLFxuIFx0W0FSR19DT05TVF9BTExPQ19TSVpFX09SX1pFUk9dXHQ9IFx1MDAyNnNjYWxhcl90eXBlcyxcbiBcdFtBUkdfQ09OU1RfTUFQX1BUUl1cdFx0PSBcdTAwMjZjb25zdF9tYXBfcHRyX3R5cGVzLFxuIFx0W0FSR19QVFJfVE9fQ1RYXVx0XHQ9IFx1MDAyNmNvbnRleHRfdHlwZXMsXG5AQCAtODI4NiwxMSArODM0Nyw1NSBAQCBzdGF0aWMgaW50IGdldF9jb25zdGFudF9tYXBfa2V5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gc3RhdGljIGJvb2wgY2FuX2VsaWRlX3ZhbHVlX251bGxuZXNzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApO1xuIFxuKy8qIFJlY29yZCB0aGUgYnBmX21hcCBhcmd1bWVudCBvZiBhIGhlbHBlciBvciBrZnVuYyBjYWxsIGluIG1ldGEtXHUwMDNlbWFwLlxuKyAqXG4rICogV2hlbiBtZXRhLVx1MDAzZW1hcCBpcyBhbHJlYWR5IHNldCBmcm9tIGFuIGVhcmxpZXIgYXJndW1lbnQgKGEgdGltZXIsIHdvcmtxdWV1ZSBvclxuKyAqIHRhc2tfd29yayBvYmplY3QgdGhhdCBpcyBib3VuZCB0byBhIG1hcCksIHJlamVjdCBhIG1hcCBwb2ludGVyIHRoYXQgZG9lcyBub3RcbisgKiBtYXRjaCBpdC4gVGhhdCBvYmplY3Qgc2l0cyBpbiB0aGUgcmVnaXN0ZXIgcmlnaHQgYmVmb3JlIHRoZSBtYXAgYXJndW1lbnQsIGFuZFxuKyAqIGl0cyB0eXBlIGlzIHRha2VuIGZyb20gdGhlIGJvdW5kIG1hcCdzIHJlY29yZCBmb3IgdGhlIGRpYWdub3N0aWMuXG4rICovXG4rc3RhdGljIGludCBwcm9jZXNzX21hcF9wdHJfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4rXHRcdFx0ICAgICAgIGFyZ25vX3QgYXJnbm8sIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbit7XG4rXHRpbnQgbWFwX3JlZ25vID0gcmVnX2Zyb21fYXJnbm8oYXJnbm8pO1xuK1xuK1x0LyogVXNlIG1hcF91aWQgKHdoaWNoIGlzIHVuaXF1ZSBpZCBvZiBpbm5lciBtYXApIHRvIHJlamVjdDpcbitcdCAqIGlubmVyX21hcDEgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5MSlcbitcdCAqIGlubmVyX21hcDIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5MilcbitcdCAqIGlmIChpbm5lcl9tYXAxIFx1MDAyNlx1MDAyNiBpbm5lcl9tYXAyKSB7XG4rXHQgKiAgICAgdGltZXIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGlubmVyX21hcDEpO1xuK1x0ICogICAgIGlmICh0aW1lcilcbitcdCAqICAgICAgICAgLy8gbWlzbWF0Y2ggd291bGQgaGF2ZSBiZWVuIGFsbG93ZWRcbitcdCAqICAgICAgICAgYnBmX3RpbWVyX2luaXQodGltZXIsIGlubmVyX21hcDIpO1xuK1x0ICogfVxuK1x0ICpcbitcdCAqIENvbXBhcmluZyBtYXBfcHRyIGlzIGVub3VnaCB0byBkaXN0aW5ndWlzaCBub3JtYWwgYW5kIG91dGVyIG1hcHMuXG4rXHQgKi9cbitcdGlmIChtZXRhLVx1MDAzZW1hcC5wdHIgXHUwMDI2XHUwMDI2XG4rXHQgICAgKG1ldGEtXHUwMDNlbWFwLnB0ciAhPSByZWctXHUwMDNlbWFwX3B0ciB8fCBtZXRhLVx1MDAzZW1hcC51aWQgIT0gcmVnLVx1MDAzZW1hcF91aWQpKSB7XG4rXHRcdHN0cnVjdCBidGZfcmVjb3JkICpyZWMgPSBtZXRhLVx1MDAzZW1hcC5wdHItXHUwMDNlcmVjb3JkO1xuK1x0XHRjb25zdCBjaGFyICpvYmpfbmFtZSA9IFwid29ya3F1ZXVlXCI7XG4rXG4rXHRcdGlmIChyZWMtXHUwMDNldGltZXJfb2ZmIFx1MDAzZT0gMClcbitcdFx0XHRvYmpfbmFtZSA9IFwidGltZXJcIjtcbitcdFx0ZWxzZSBpZiAocmVjLVx1MDAzZXRhc2tfd29ya19vZmYgXHUwMDNlPSAwKVxuK1x0XHRcdG9ial9uYW1lID0gXCJicGZfdGFza193b3JrXCI7XG4rXG4rXHRcdHZlcmJvc2UoZW52LCBcIiVzIHBvaW50ZXIgaW4gUiVkIG1hcF91aWQ9JWQgZG9lc24ndCBtYXRjaCBtYXAgcG9pbnRlciBpbiBSJWQgbWFwX3VpZD0lZFxcblwiLFxuK1x0XHRcdG9ial9uYW1lLCBtYXBfcmVnbm8gLSAxLCBtZXRhLVx1MDAzZW1hcC51aWQsIG1hcF9yZWdubywgcmVnLVx1MDAzZW1hcF91aWQpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdG1ldGEtXHUwMDNlbWFwLnB0ciA9IHJlZy1cdTAwM2VtYXBfcHRyO1xuK1x0bWV0YS1cdTAwM2VtYXAudWlkID0gcmVnLVx1MDAzZW1hcF91aWQ7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBjaGVja19mdW5jX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgYXJnLFxuIFx0XHRcdCAgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuLVx0XHRcdCAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbixcbiBcdFx0XHQgIGludCBpbnNuX2lkeClcbiB7XG4rXHRjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmZuID0gbWV0YS1cdTAwM2VmbjtcbiBcdHUzMiByZWdubyA9IEJQRl9SRUdfMSArIGFyZztcbiBcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcgPSByZWdfc3RhdGUoZW52LCByZWdubyk7XG4gXHRlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSA9IGZuLVx1MDAzZWFyZ190eXBlW2FyZ107XG5AQCAtODM2MSwyOSArODQ2Niw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGFyZyxcbiBcdHN3aXRjaCAoYmFzZV90eXBlKGFyZ190eXBlKSkge1xuIFx0Y2FzZSBBUkdfQ09OU1RfTUFQX1BUUjpcbiBcdFx0LyogYnBmX21hcF94eHgobWFwX3B0cikgY2FsbDogcmVtZW1iZXIgdGhhdCBtYXBfcHRyICovXG4tXHRcdGlmIChtZXRhLVx1MDAzZW1hcC5wdHIpIHtcbi1cdFx0XHQvKiBVc2UgbWFwX3VpZCAod2hpY2ggaXMgdW5pcXVlIGlkIG9mIGlubmVyIG1hcCkgdG8gcmVqZWN0OlxuLVx0XHRcdCAqIGlubmVyX21hcDEgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5MSlcbi1cdFx0XHQgKiBpbm5lcl9tYXAyID0gYnBmX21hcF9sb29rdXBfZWxlbShvdXRlcl9tYXAsIGtleTIpXG4tXHRcdFx0ICogaWYgKGlubmVyX21hcDEgXHUwMDI2XHUwMDI2IGlubmVyX21hcDIpIHtcbi1cdFx0XHQgKiAgICAgdGltZXIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGlubmVyX21hcDEpO1xuLVx0XHRcdCAqICAgICBpZiAodGltZXIpXG4tXHRcdFx0ICogICAgICAgICAvLyBtaXNtYXRjaCB3b3VsZCBoYXZlIGJlZW4gYWxsb3dlZFxuLVx0XHRcdCAqICAgICAgICAgYnBmX3RpbWVyX2luaXQodGltZXIsIGlubmVyX21hcDIpO1xuLVx0XHRcdCAqIH1cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIENvbXBhcmluZyBtYXBfcHRyIGlzIGVub3VnaCB0byBkaXN0aW5ndWlzaCBub3JtYWwgYW5kIG91dGVyIG1hcHMuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKG1ldGEtXHUwMDNlbWFwLnB0ciAhPSByZWctXHUwMDNlbWFwX3B0ciB8fFxuLVx0XHRcdCAgICBtZXRhLVx1MDAzZW1hcC51aWQgIT0gcmVnLVx1MDAzZW1hcF91aWQpIHtcbi1cdFx0XHRcdHZlcmJvc2UoZW52LFxuLVx0XHRcdFx0XHRcInRpbWVyIHBvaW50ZXIgaW4gUjEgbWFwX3VpZD0lZCBkb2Vzbid0IG1hdGNoIG1hcCBwb2ludGVyIGluIFIyIG1hcF91aWQ9JWRcXG5cIixcbi1cdFx0XHRcdFx0bWV0YS1cdTAwM2VtYXAudWlkLCByZWctXHUwMDNlbWFwX3VpZCk7XG4tXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdFx0bWV0YS1cdTAwM2VtYXAucHRyID0gcmVnLVx1MDAzZW1hcF9wdHI7XG4tXHRcdG1ldGEtXHUwMDNlbWFwLnVpZCA9IHJlZy1cdTAwM2VtYXBfdWlkO1xuK1x0XHRlcnIgPSBwcm9jZXNzX21hcF9wdHJfYXJnKGVudiwgcmVnLCBhcmdubywgbWV0YSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEFSR19QVFJfVE9fTUFQX0tFWTpcbiBcdFx0LyogYnBmX21hcF94eHgoLi4uLCBtYXBfcHRyLCAuLi4sIGtleSkgY2FsbDpcbkBAIC04NDY2LDcgKzg1NTEsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsXG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEFSR19QVFJfVE9fVElNRVI6XG4tXHRcdGVyciA9IHByb2Nlc3NfdGltZXJfaGVscGVyKGVudiwgcmVnLCBhcmdubywgbWV0YSk7XG4rXHRcdGVyciA9IHByb2Nlc3NfdGltZXJfZnVuYyhlbnYsIHJlZywgYXJnbm8sIFx1MDAyNm1ldGEtXHUwMDNlbWFwKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRicmVhaztcbkBAIC04NDc0LDMxICs4NTU5LDIyIEBAIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGFyZyxcbiBcdFx0bWV0YS1cdTAwM2VzdWJwcm9nbm8gPSByZWctXHUwMDNlc3VicHJvZ25vO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgQVJHX1BUUl9UT19NRU06XG4tXHRcdC8qIFRoZSBhY2Nlc3MgdG8gdGhpcyBwb2ludGVyIGlzIG9ubHkgY2hlY2tlZCB3aGVuIHdlIGhpdCB0aGVcbi1cdFx0ICogbmV4dCBpc19tZW1fc2l6ZSBhcmd1bWVudCBiZWxvdy5cbi1cdFx0ICovXG4gXHRcdGlmIChhcmdfdHlwZSBcdTAwMjYgTUVNX0ZJWEVEX1NJWkUpIHtcbi1cdFx0XHRlcnIgPSBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIGZuLVx1MDAzZWFyZ19zaXplW2FyZ10sXG4tXHRcdFx0XHRcdFx0ICAgICAgYXJnX3R5cGUgXHUwMDI2IE1FTV9XUklURSA/IEJQRl9XUklURSA6IEJQRl9SRUFELFxuLVx0XHRcdFx0XHRcdCAgICAgIGZhbHNlLCBtZXRhKTtcbitcdFx0XHRlcnIgPSBjaGVja19tZW1fcmVnKGVudiwgcmVnLCBhcmdub19mcm9tX3JlZyhyZWdubyksIGZuLVx1MDAzZWFyZ19zaXplW2FyZ10sXG4rXHRcdFx0XHRcdCAgICBhcmdfdHlwZSBcdTAwMjYgTUVNX1dSSVRFID8gQlBGX1dSSVRFIDogQlBGX1JFQUQsIG1ldGEpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRcdGlmIChhcmdfdHlwZSBcdTAwMjYgTUVNX0FMSUdORUQpXG4gXHRcdFx0XHRlcnIgPSBjaGVja19wdHJfYWxpZ25tZW50KGVudiwgcmVnLCAwLCBmbi1cdTAwM2Vhcmdfc2l6ZVthcmddLCB0cnVlKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc2l6ZV9yZWcgPSByZWdfc3RhdGUoZW52LCByZWdubyArIDEpO1xuK1xuK1x0XHRcdGVyciA9IGNoZWNrX21lbV9zaXplX3JlZyhlbnYsIHJlZywgc2l6ZV9yZWcsIGFyZ25vLFxuK1x0XHRcdFx0XHRcdCBhcmdub19mcm9tX3JlZyhyZWdubyArIDEpLFxuK1x0XHRcdFx0XHRcdCBhcmdfdHlwZSBcdTAwMjYgTUVNX1dSSVRFID8gQlBGX1dSSVRFIDogQlBGX1JFQUQsXG4rXHRcdFx0XHRcdFx0IGZuLVx1MDAzZWFyZ190eXBlW2FyZyArIDFdIFx1MDAyNiBTQ0FMQVJfTUFZQkVfWkVSTywgbWV0YSk7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4tXHRjYXNlIEFSR19DT05TVF9TSVpFOlxuLVx0XHRlcnIgPSBjaGVja19tZW1fc2l6ZV9yZWcoZW52LCByZWdfc3RhdGUoZW52LCByZWdubyAtIDEpLCByZWcsXG4tXHRcdFx0XHRcdCBhcmdub19mcm9tX3JlZyhyZWdubyAtIDEpLCBhcmdubyxcbi1cdFx0XHRcdFx0IGZuLVx1MDAzZWFyZ190eXBlW2FyZyAtIDFdIFx1MDAyNiBNRU1fV1JJVEUgPyBCUEZfV1JJVEUgOiBCUEZfUkVBRCxcbi1cdFx0XHRcdFx0IGZhbHNlLCBtZXRhKTtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIEFSR19DT05TVF9TSVpFX09SX1pFUk86XG4tXHRcdGVyciA9IGNoZWNrX21lbV9zaXplX3JlZyhlbnYsIHJlZ19zdGF0ZShlbnYsIHJlZ25vIC0gMSksIHJlZyxcbi1cdFx0XHRcdFx0IGFyZ25vX2Zyb21fcmVnKHJlZ25vIC0gMSksIGFyZ25vLFxuLVx0XHRcdFx0XHQgZm4tXHUwMDNlYXJnX3R5cGVbYXJnIC0gMV0gXHUwMDI2IE1FTV9XUklURSA/IEJQRl9XUklURSA6IEJQRl9SRUFELFxuLVx0XHRcdFx0XHQgdHJ1ZSwgbWV0YSk7XG4tXHRcdGJyZWFrO1xuIFx0Y2FzZSBBUkdfUFRSX1RPX0RZTlBUUjpcbiBcdFx0ZXJyID0gcHJvY2Vzc19keW5wdHJfZnVuYyhlbnYsIHJlZywgYXJnbm8sIGluc25faWR4LCBhcmdfdHlwZSwgXHUwMDI2bWV0YS1cdTAwM2VyZWZfb2JqLFxuIFx0XHRcdFx0XHQgIFx1MDAyNm1ldGEtXHUwMDNlZHlucHRyKTtcbkBAIC04ODIzLDcgKzg4OTksNyBAQCBzdGF0aWMgYm9vbCBjaGVja19yYXdfbW9kZV9vayhjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmZuLCBzdHJ1Y3QgYnBmX2NhbGxfYVxuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShmbi1cdTAwM2VhcmdfdHlwZSk7IGkrKykge1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX0JQRl9GVU5DX1JFR19BUkdTOyBpKyspIHtcbiBcdFx0aWYgKCFhcmdfdHlwZV9pc19yYXdfbWVtKGZuLVx1MDAzZWFyZ190eXBlW2ldKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKG1ldGEtXHUwMDNlYXJnX3Jhd19tZW0ucmVnbm8pXG5AQCAtODg0MCw3ICs4OTE2LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfYXJnc19wYWlyX2ludmFsaWQoY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbiwgaW50IGFyZylcbiBcdGJvb2wgaGFzX3NpemUgPSBmbi1cdTAwM2Vhcmdfc2l6ZVthcmddICE9IDA7XG4gXHRib29sIGlzX25leHRfc2l6ZSA9IGZhbHNlO1xuIFxuLVx0aWYgKGFyZyArIDEgXHUwMDNjIEFSUkFZX1NJWkUoZm4tXHUwMDNlYXJnX3R5cGUpKVxuK1x0aWYgKGFyZyArIDEgXHUwMDNjIE1BWF9CUEZfRlVOQ19SRUdfQVJHUylcbiBcdFx0aXNfbmV4dF9zaXplID0gYXJnX3R5cGVfaXNfbWVtX3NpemUoZm4tXHUwMDNlYXJnX3R5cGVbYXJnICsgMV0pO1xuIFxuIFx0aWYgKGJhc2VfdHlwZShmbi1cdTAwM2VhcmdfdHlwZVthcmddKSAhPSBBUkdfUFRSX1RPX01FTSlcbkBAIC04ODcxLDcgKzg5NDcsNyBAQCBzdGF0aWMgYm9vbCBjaGVja19idGZfaWRfb2soY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbilcbiB7XG4gXHRpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZm4tXHUwMDNlYXJnX3R5cGUpOyBpKyspIHtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BWF9CUEZfRlVOQ19SRUdfQVJHUzsgaSsrKSB7XG4gXHRcdGlmIChiYXNlX3R5cGUoZm4tXHUwMDNlYXJnX3R5cGVbaV0pID09IEFSR19QVFJfVE9fQlRGX0lEKVxuIFx0XHRcdHJldHVybiAhIWZuLVx1MDAzZWFyZ19idGZfaWRbaV07XG4gXHRcdGlmIChiYXNlX3R5cGUoZm4tXHUwMDNlYXJnX3R5cGVbaV0pID09IEFSR19QVFJfVE9fU1BJTl9MT0NLKVxuQEAgLTg4OTAsNyArODk2Niw3IEBAIHN0YXRpYyBib29sIGNoZWNrX21lbV9hcmdfcndfZmxhZ19vayhjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmZuKVxuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShmbi1cdTAwM2VhcmdfdHlwZSk7IGkrKykge1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX0JQRl9GVU5DX1JFR19BUkdTOyBpKyspIHtcbiBcdFx0ZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUgPSBmbi1cdTAwM2VhcmdfdHlwZVtpXTtcbiBcbiBcdFx0aWYgKGJhc2VfdHlwZShhcmdfdHlwZSkgIT0gQVJHX1BUUl9UT19NRU0pXG5AQCAtODkwNiw3ICs4OTgyLDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfcHJvdG9fcmVsZWFzZV9yZWcoY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpmbiwgc3RydWN0IGJwZl9cbiB7XG4gXHRpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZm4tXHUwMDNlYXJnX3R5cGUpOyBpKyspIHtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BWF9CUEZfRlVOQ19SRUdfQVJHUzsgaSsrKSB7XG4gXHRcdGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlID0gZm4tXHUwMDNlYXJnX3R5cGVbaV07XG4gXG4gXHRcdGlmIChhcmdfdHlwZV9pc19yZWxlYXNlKGFyZ190eXBlKSkge1xuQEAgLTkyNTIsNyArOTMyOCw3IEBAIHN0YXRpYyBpbnQgYnRmX2NoZWNrX2Z1bmNfYXJnX21hdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLFxuIFx0XHRcdHJldCA9IGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmYoZW52LCByZWcsIGFyZ25vLCBBUkdfRE9OVENBUkUpO1xuIFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRcdGlmIChjaGVja19tZW1fcmVnKGVudiwgcmVnLCBhcmdubywgYXJnLVx1MDAzZW1lbV9zaXplKSlcbitcdFx0XHRpZiAoY2hlY2tfbWVtX3JlZyhlbnYsIHJlZywgYXJnbm8sIGFyZy1cdTAwM2VtZW1fc2l6ZSwgQlBGX1JFQUQgfCBCUEZfV1JJVEUsIE5VTEwpKVxuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0aWYgKCEoYXJnLVx1MDAzZWFyZ190eXBlIFx1MDAyNiBQVFJfTUFZQkVfTlVMTCkgXHUwMDI2XHUwMDI2IChyZWctXHUwMDNldHlwZSBcdTAwMjYgUFRSX01BWUJFX05VTEwpKSB7XG4gXHRcdFx0XHRicGZfbG9nKGxvZywgXCIlcyBpcyBleHBlY3RlZCB0byBiZSBub24tTlVMTFxcblwiLFxuQEAgLTEwMjk3LDkgKzEwMzczLDEwIEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXG4gXHRcdGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5ub25fc2xlZXBhYmxlID0gdHJ1ZTtcbiBcbiBcdG1ldGEuZnVuY19pZCA9IGZ1bmNfaWQ7XG4rXHRtZXRhLmZuID0gZm47XG4gXHQvKiBjaGVjayBhcmdzICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQVhfQlBGX0ZVTkNfUkVHX0FSR1M7IGkrKykge1xuLVx0XHRlcnIgPSBjaGVja19mdW5jX2FyZyhlbnYsIGksIFx1MDAyNm1ldGEsIGZuLCBpbnNuX2lkeCk7XG4rXHRcdGVyciA9IGNoZWNrX2Z1bmNfYXJnKGVudiwgaSwgXHUwMDI2bWV0YSwgaW5zbl9pZHgpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtMTA3NzEsMjYgKzEwODQ4LDI0IEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX3JjdV9wcm90ZWN0ZWQoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuIH1cbiBcbiBzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfbWVtX3NpemUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcsXG4tXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4rXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQ7XG4gXG4gXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBhcmctXHUwMDNldHlwZSwgTlVMTCk7XG4tXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcih0KSB8fCByZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpXG4rXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcih0KSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwiX19zelwiKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnLFxuLVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuK1x0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0O1xuIFxuIFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnLVx1MDAzZXR5cGUsIE5VTEwpO1xuLVx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIodCkgfHwgcmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKVxuK1x0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIodCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcIl9fc3prXCIpO1xuQEAgLTEwODExLDYgKzEwODg2LDExIEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19tYXAoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXG4gXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCJfX21hcFwiKTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2NvbnN0X21hcChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbit7XG4rXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCJfX2NvbnN0X21hcFwiKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2FsbG9jX29iaihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbiB7XG4gXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCJfX2FsbG9jXCIpO1xuQEAgLTExMDUxLDE4ICsxMTEzMSwyMSBAQCBlbnVtIGtmdW5jX3B0cl9hcmdfdHlwZSB7XG4gXHRLRl9BUkdfUFRSX1RPX0xJU1RfTk9ERSxcbiBcdEtGX0FSR19QVFJfVE9fQlRGX0lELFx0ICAgICAgIC8qIEFsc28gY292ZXJzIHJlZzJidGZfaWRzIGNvbnZlcnNpb25zICovXG4gXHRLRl9BUkdfUFRSX1RPX01FTSxcbi1cdEtGX0FSR19QVFJfVE9fTUVNX1NJWkUsXHQgICAgICAgLyogU2l6ZSBkZXJpdmVkIGZyb20gbmV4dCBhcmd1bWVudCwgc2tpcCBpdCAqL1xuIFx0S0ZfQVJHX1BUUl9UT19DQUxMQkFDSyxcbiBcdEtGX0FSR19QVFJfVE9fUkJfUk9PVCxcbiBcdEtGX0FSR19QVFJfVE9fUkJfTk9ERSxcbi1cdEtGX0FSR19QVFJfVE9fTlVMTCxcbiBcdEtGX0FSR19QVFJfVE9fQ09OU1RfU1RSLFxuLVx0S0ZfQVJHX1BUUl9UT19NQVAsXG4rXHRLRl9BUkdfQ09OU1RfTUFQX1BUUixcbiBcdEtGX0FSR19QVFJfVE9fVElNRVIsXG4gXHRLRl9BUkdfUFRSX1RPX1dPUktRVUVVRSxcbiBcdEtGX0FSR19QVFJfVE9fSVJRX0ZMQUcsXG4gXHRLRl9BUkdfUFRSX1RPX1JFU19TUElOX0xPQ0ssXG4gXHRLRl9BUkdfUFRSX1RPX1RBU0tfV09SSyxcbitcdEtGX0FSR19DT05TVF9CVEZfSUQsXHQgICAgICAgLyogY29uc3Qgc2NhbGFyIGNhcnJ5aW5nIGEgQlRGIHR5cGUgaWQgKi9cbitcdEtGX0FSR19DT05TVF9NRU1fU0laRSxcdCAgICAgICAvKiBjb25zdCBzY2FsYXIgc2l6aW5nIGEgcHJlY2VkaW5nIG1lbW9yeSBhcmcgKi9cbitcdEtGX0FSR19DT05TVF9BTExPQ19TSVpFX09SX1pFUk8sIC8qIGNvbnN0IHNjYWxhciBzaXppbmcgYSByZXR1cm5lZCBidWZmZXIgKi9cbitcdEtGX0FSR19NRU1fU0laRSxcdCAgICAgICAvKiBzY2FsYXIgc2l6aW5nIGEgcHJlY2VkaW5nIG1lbW9yeSBhcmcgKi9cbitcdEtGX0FSR19BTllUSElORyxcdCAgICAgICAvKiB1bmNvbnN0cmFpbmVkIHNjYWxhciAqL1xuIH07XG4gXG4gZW51bSBzcGVjaWFsX2tmdW5jX3R5cGUge1xuQEAgLTExMzE4LDEwOCArMTE0MDEsMTU2IEBAIGJvb2wgYnBmX2lzX2tmdW5jX3BrdF9jaGFuZ2luZyhzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG4gXHRyZXR1cm4gbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfeGRwX3B1bGxfZGF0YV07XG4gfVxuIFxuLXN0YXRpYyBlbnVtIGtmdW5jX3B0cl9hcmdfdHlwZVxuLWdldF9rZnVuY19wdHJfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZXIsXG4tXHRcdCAgICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuLVx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnJlZl90LFxuLVx0XHQgICAgICAgY29uc3QgY2hhciAqcmVmX3RuYW1lLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmdzLFxuLVx0XHQgICAgICAgaW50IGFyZywgaW50IG5hcmdzLCBhcmdub190IGFyZ25vLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuK3N0YXRpYyBpbnRcbitnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuK1x0XHQgICBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmdzLCBpbnQgYXJnLCBpbnQgbmFyZ3MsIGFyZ25vX3QgYXJnbm8pXG4ge1xuK1x0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCAqcmVmX3QgPSBOVUxMO1xuK1x0Y29uc3QgY2hhciAqcmVmX3RuYW1lID0gTlVMTDtcbiBcdGJvb2wgYXJnX21lbV9zaXplID0gZmFsc2U7XG4rXHRpbnQgYXJnX3R5cGU7XG4gXG4tXHRpZiAobWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfY2FzdF90b19rZXJuX2N0eF0gfHxcbi1cdCAgICBtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zZXNzaW9uX2lzX3JldHVybl0gfHxcbi1cdCAgICBtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9zZXNzaW9uX2Nvb2tpZV0pXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX0NUWDtcbitcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhtZXRhLVx1MDAzZWJ0ZiwgYXJnc1thcmddLnR5cGUsIE5VTEwpO1xuIFxuLVx0aWYgKGFyZyArIDEgXHUwMDNjIG5hcmdzIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnICsgMV0sIGdldF9mdW5jX2FyZ19yZWcoY2FsbGVyLCByZWdzLCBhcmcgKyAxKSkgfHxcbi1cdCAgICAgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZyArIDFdLCBnZXRfZnVuY19hcmdfcmVnKGNhbGxlciwgcmVncywgYXJnICsgMSkpKSlcbi1cdFx0YXJnX21lbV9zaXplID0gdHJ1ZTtcbitcdC8qIFNjYWxhciBhcmd1bWVudHMgYXJlIGNsYXNzaWZpZWQgZnJvbSB0aGVpciBCVEYgc3VmZml4L25hbWUgYWxvbmUuICovXG4rXHRpZiAoYnRmX3R5cGVfaXNfc2NhbGFyKHQpKSB7XG4rXHRcdGlmIChpc19rZnVuY19hcmdfY29uc3RhbnQobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4rXHRcdFx0cmV0dXJuIEtGX0FSR19DT05TVF9CVEZfSUQ7XG4rXHRcdGlmIChpc19rZnVuY19hcmdfY29uc3RfbWVtX3NpemUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4rXHRcdFx0cmV0dXJuIEtGX0FSR19DT05TVF9NRU1fU0laRTtcbitcdFx0aWYgKGlzX2tmdW5jX2FyZ19tZW1fc2l6ZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbitcdFx0XHRyZXR1cm4gS0ZfQVJHX01FTV9TSVpFO1xuK1x0XHRpZiAoaXNfa2Z1bmNfYXJnX3NjYWxhcl93aXRoX25hbWUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSwgXCJyZG9ubHlfYnVmX3NpemVcIikgfHxcbitcdFx0ICAgIGlzX2tmdW5jX2FyZ19zY2FsYXJfd2l0aF9uYW1lKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10sIFwicmR3cl9idWZfc2l6ZVwiKSlcbitcdFx0XHRyZXR1cm4gS0ZfQVJHX0NPTlNUX0FMTE9DX1NJWkVfT1JfWkVSTztcbitcdFx0cmV0dXJuIEtGX0FSR19BTllUSElORztcbitcdH1cbitcbitcdGlmICghYnRmX3R5cGVfaXNfcHRyKHQpKSB7XG4rXHRcdHZlcmJvc2UoZW52LCBcIlVucmVjb2duaXplZCAlcyB0eXBlICVzXFxuXCIsXG4rXHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIodCkpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMobWV0YS1cdTAwM2VidGYsIHQtXHUwMDNldHlwZSwgTlVMTCk7XG4rXHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQobWV0YS1cdTAwM2VidGYsIHJlZl90LVx1MDAzZW5hbWVfb2ZmKTtcbiBcbiBcdC8qIEluIHRoaXMgZnVuY3Rpb24sIHdlIHZlcmlmeSB0aGUga2Z1bmMncyBCVEYgYXMgcGVyIHRoZSBhcmd1bWVudCB0eXBlLFxuIFx0ICogbGVhdmluZyB0aGUgcmVzdCBvZiB0aGUgdmVyaWZpY2F0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgcmVnaXN0ZXJcbiBcdCAqIHR5cGUgdG8gb3VyIGNhbGxlci4gV2hlbiBhIHNldCBvZiBjb25kaXRpb25zIGhvbGQgaW4gdGhlIEJURiB0eXBlIG9mXG4gXHQgKiBhcmd1bWVudHMsIHdlIHJlc29sdmUgaXQgdG8gYSBrbm93biBrZnVuY19wdHJfYXJnX3R5cGUuXG4gXHQgKi9cbi1cdGlmIChidGZfaXNfcHJvZ19jdHhfdHlwZShcdTAwMjZlbnYtXHUwMDNlbG9nLCBtZXRhLVx1MDAzZWJ0ZiwgdCwgcmVzb2x2ZV9wcm9nX3R5cGUoZW52LVx1MDAzZXByb2cpLCBhcmcpKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19DVFg7XG4tXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX251bGxhYmxlKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pIFx1MDAyNlx1MDAyNiBicGZfcmVnaXN0ZXJfaXNfbnVsbChyZWcpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFhcmdfbWVtX3NpemUpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX05VTEw7XG4tXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX2FsbG9jX29iaihtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fQUxMT0NfQlRGX0lEO1xuLVxuLVx0aWYgKGlzX2tmdW5jX2FyZ19yZWZjb3VudGVkX2twdHIobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjtcbi1cbi1cdGlmIChpc19rZnVuY19hcmdfZHlucHRyKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19EWU5QVFI7XG4tXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX2l0ZXIobWV0YSwgYXJnLCBcdTAwMjZhcmdzW2FyZ10pKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19JVEVSO1xuLVxuLVx0aWYgKGlzX2tmdW5jX2FyZ19saXN0X2hlYWQobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX0xJU1RfSEVBRDtcbi1cbi1cdGlmIChpc19rZnVuY19hcmdfbGlzdF9ub2RlKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19MSVNUX05PREU7XG4tXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX3JidHJlZV9yb290KG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19SQl9ST09UO1xuLVxuLVx0aWYgKGlzX2tmdW5jX2FyZ19yYnRyZWVfbm9kZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fUkJfTk9ERTtcbitcdGlmIChtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9jYXN0X3RvX2tlcm5fY3R4XSB8fFxuK1x0ICAgIG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Nlc3Npb25faXNfcmV0dXJuXSB8fFxuK1x0ICAgIG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Nlc3Npb25fY29va2llXSlcbitcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0NUWDtcbitcdGVsc2UgaWYgKGJ0Zl9pc19wcm9nX2N0eF90eXBlKFx1MDAyNmVudi1cdTAwM2Vsb2csIG1ldGEtXHUwMDNlYnRmLCB0LCByZXNvbHZlX3Byb2dfdHlwZShlbnYtXHUwMDNlcHJvZyksIGFyZykpXG4rXHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19DVFg7XG4rXHRlbHNlIGlmIChpc19rZnVuY19hcmdfYWxsb2Nfb2JqKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuK1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQUxMT0NfQlRGX0lEO1xuK1x0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3JlZmNvdW50ZWRfa3B0cihtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbitcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjtcbitcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19keW5wdHIobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4rXHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19EWU5QVFI7XG4rXHRlbHNlIGlmIChpc19rZnVuY19hcmdfaXRlcihtZXRhLCBhcmcsIFx1MDAyNmFyZ3NbYXJnXSkpXG4rXHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19JVEVSO1xuK1x0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2xpc3RfaGVhZChtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbitcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0xJU1RfSEVBRDtcbitcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19saXN0X25vZGUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4rXHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19MSVNUX05PREU7XG4rXHRlbHNlIGlmIChpc19rZnVuY19hcmdfcmJ0cmVlX3Jvb3QobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4rXHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19SQl9ST09UO1xuK1x0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3JidHJlZV9ub2RlKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuK1x0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fUkJfTk9ERTtcbitcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19jb25zdF9zdHIobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4rXHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19DT05TVF9TVFI7XG4rXHRlbHNlIGlmIChpc19rZnVuY19hcmdfY29uc3RfbWFwKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuK1x0XHRhcmdfdHlwZSA9IEtGX0FSR19DT05TVF9NQVBfUFRSO1xuK1x0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX21hcChtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbitcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0JURl9JRDtcbitcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ193cShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbitcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX1dPUktRVUVVRTtcbitcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ190aW1lcihtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbitcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX1RJTUVSO1xuK1x0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3Rhc2tfd29yayhtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbitcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX1RBU0tfV09SSztcbitcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19pcnFfZmxhZyhtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbitcdFx0YXJnX3R5cGUgPSBLRl9BUkdfUFRSX1RPX0lSUV9GTEFHO1xuK1x0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3Jlc19zcGluX2xvY2sobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4rXHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLO1xuK1x0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2NhbGxiYWNrKGVudiwgbWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4rXHRcdGFyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19DQUxMQkFDSztcbitcdGVsc2Uge1xuK1x0XHRpZiAoYXJnICsgMSBcdTAwM2MgbmFyZ3MgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoaXNfa2Z1bmNfYXJnX21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZyArIDFdKSB8fFxuK1x0XHQgICAgIGlzX2tmdW5jX2FyZ19jb25zdF9tZW1fc2l6ZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmcgKyAxXSkpKVxuK1x0XHRcdGFyZ19tZW1fc2l6ZSA9IHRydWU7XG4rXG4rXHRcdGlmIChidGZfdHlwZV9pc19zdHJ1Y3QocmVmX3QpIFx1MDAyNlx1MDAyNiAhYXJnX21lbV9zaXplKSB7XG4rXHRcdFx0LyogQSBwb2ludGVyIHRvIGEgc3RydWN0IHdpdGhvdXQgYSBzaXplIGFyZ3VtZW50IGlzIGNsYXNzaWZpZWRcbitcdFx0XHQgKiBhcyBLRl9BUkdfUFRSX1RPX0JURl9JRC5cbitcdFx0XHQgKi9cbitcdFx0XHRhcmdfdHlwZSA9IEtGX0FSR19QVFJfVE9fQlRGX0lEO1xuK1x0XHR9IGVsc2UgaWYgKCFidGZfdHlwZV9pc19zY2FsYXIocmVmX3QpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICFfX2J0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVx1MDAzZWJ0ZiwgcmVmX3QsIDApIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgIChhcmdfbWVtX3NpemUgPyAhYnRmX3R5cGVfaXNfdm9pZChyZWZfdCkgOiAxKSkge1xuK1x0XHRcdHZlcmJvc2UoZW52LCBcIiVzIHBvaW50ZXIgdHlwZSAlcyAlcyBtdXN0IHBvaW50IHRvICVzc2NhbGFyLCBvciBzdHJ1Y3Qgd2l0aCBzY2FsYXJcXG5cIixcbitcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSxcbitcdFx0XHRcdGJ0Zl90eXBlX3N0cihyZWZfdCksIHJlZl90bmFtZSwgYXJnX21lbV9zaXplID8gXCJ2b2lkLCBcIiA6IFwiXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdC8qIE90aGVyd2lzZSB0aGlzIGlzIGEgbWVtb3J5IGJ1ZmZlciBzdXBwb3J0ZWQgYnlcbitcdFx0XHQgKiBjaGVja19oZWxwZXJfbWVtX2FjY2VzcygpOiBhIHBvaW50ZXIgdG8gYSBzY2FsYXIsIG9yIHRvIHZvaWRcbitcdFx0XHQgKiB3aGVuIHBhaXJlZCB3aXRoIGEgc2l6ZSBhcmd1bWVudC4gVGhlIGFjY2VzcyBzaXplIGlzIGRlcml2ZWRcbitcdFx0XHQgKiBmcm9tIHRoZSBwb2ludGVkLXRvIEJURiB0eXBlIHVubGVzcyBhIHNpemUgYXJndW1lbnQgZm9sbG93cy5cbitcdFx0XHQgKi9cbitcdFx0XHRhcmdfdHlwZSA9IGFyZ19tZW1fc2l6ZSA/IEtGX0FSR19QVFJfVE9fTUVNIDogS0ZfQVJHX1BUUl9UT19NRU0gfCBNRU1fRklYRURfU0laRTtcbitcdFx0fVxuK1x0fVxuIFxuLVx0aWYgKGlzX2tmdW5jX2FyZ19jb25zdF9zdHIobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX0NPTlNUX1NUUjtcbitcdGlmIChpc19rZnVuY19hcmdfbnVsbGFibGUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4rXHRcdGFyZ190eXBlIHw9IFBUUl9NQVlCRV9OVUxMO1xuIFxuLVx0aWYgKGlzX2tmdW5jX2FyZ19tYXAobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG4tXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX01BUDtcbitcdHJldHVybiBhcmdfdHlwZTtcbit9XG4gXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX3dxKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19XT1JLUVVFVUU7XG4rc3RhdGljIGludCBnZW5fa2Z1bmNfYXJnX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbitcdFx0XHQgICAgICAgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpwcm90bylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmICpidGYgPSBtZXRhLVx1MDAzZWJ0ZjtcbitcdGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZ3M7XG4rXHR1MzIgaSwgbmFyZ3M7XG4rXHRpbnQgYXJnX3R5cGU7XG4gXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX3RpbWVyKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19USU1FUjtcbitcdGFyZ3MgPSAoY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqKShtZXRhLVx1MDAzZWZ1bmNfcHJvdG8gKyAxKTtcbitcdG5hcmdzID0gYnRmX3R5cGVfdmxlbihtZXRhLVx1MDAzZWZ1bmNfcHJvdG8pO1xuK1x0aWYgKG5hcmdzIFx1MDAzZSBNQVhfQlBGX0ZVTkNfQVJHUykge1xuK1x0XHR2ZXJib3NlKGVudiwgXCJGdW5jdGlvbiAlcyBoYXMgJWQgXHUwMDNlICVkIGFyZ3NcXG5cIiwgbWV0YS1cdTAwM2VmdW5jX25hbWUsXG4rXHRcdFx0bmFyZ3MsIE1BWF9CUEZfRlVOQ19BUkdTKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXHRpZiAobmFyZ3MgXHUwMDNlIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyBcdTAwMjZcdTAwMjYgIWJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncygpKSB7XG4rXHRcdHZlcmJvc2UoZW52LCBcIkpJVCBkb2VzIG5vdCBzdXBwb3J0IGtmdW5jICVzKCkgd2l0aCAlZCBhcmdzXFxuXCIsXG4rXHRcdFx0bWV0YS1cdTAwM2VmdW5jX25hbWUsIG5hcmdzKTtcbitcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbitcdH1cbiBcbi1cdGlmIChpc19rZnVuY19hcmdfdGFza193b3JrKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19UQVNLX1dPUks7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuYXJnczsgaSsrKSB7XG4rXHRcdGFyZ25vX3QgYXJnbm8gPSBhcmdub19mcm9tX2FyZyhpICsgMSk7XG4gXG4tXHRpZiAoaXNfa2Z1bmNfYXJnX2lycV9mbGFnKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19JUlFfRkxBRztcbitcdFx0aWYgKGlzX2tmdW5jX2FyZ19wcm9nX2F1eChidGYsIFx1MDAyNmFyZ3NbaV0pIHx8XG4rXHRcdCAgICBpc19rZnVuY19hcmdfaWdub3JlKGJ0ZiwgXHUwMDI2YXJnc1tpXSkgfHxcbitcdFx0ICAgIGlzX2tmdW5jX2FyZ19pbXBsaWNpdChtZXRhLCBpKSlcbitcdFx0XHRjb250aW51ZTtcbiBcbi1cdGlmIChpc19rZnVuY19hcmdfcmVzX3NwaW5fbG9jayhtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSlcbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSztcbitcdFx0YXJnX3R5cGUgPSBnZXRfa2Z1bmNfYXJnX3R5cGUoZW52LCBtZXRhLCBhcmdzLCBpLCBuYXJncywgYXJnbm8pO1xuK1x0XHRpZiAoYXJnX3R5cGUgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIGFyZ190eXBlO1xuIFxuLVx0aWYgKChiYXNlX3R5cGUocmVnLVx1MDAzZXR5cGUpID09IFBUUl9UT19CVEZfSUQgfHwgcmVnMmJ0Zl9pZHNbYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKV0pKSB7XG4tXHRcdGlmICghYnRmX3R5cGVfaXNfc3RydWN0KHJlZl90KSkge1xuLVx0XHRcdHZlcmJvc2UoZW52LCBcImtlcm5lbCBmdW5jdGlvbiAlcyAlcyBwb2ludGVyIHR5cGUgJXMgJXMgaXMgbm90IHN1cHBvcnRlZFxcblwiLFxuLVx0XHRcdFx0bWV0YS1cdTAwM2VmdW5jX25hbWUsIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSxcbi1cdFx0XHRcdGJ0Zl90eXBlX3N0cihyZWZfdCksIHJlZl90bmFtZSk7XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdH1cbi1cdFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fQlRGX0lEO1xuK1x0XHRwcm90by1cdTAwM2VhcmdfdHlwZVtpXSA9IGFyZ190eXBlO1xuIFx0fVxuIFxuLVx0aWYgKGlzX2tmdW5jX2FyZ19jYWxsYmFjayhlbnYsIG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxuLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19DQUxMQkFDSztcbi1cbi1cdC8qIFRoaXMgaXMgdGhlIGNhdGNoIGFsbCBhcmd1bWVudCB0eXBlIG9mIHJlZ2lzdGVyIHR5cGVzIHN1cHBvcnRlZCBieVxuLVx0ICogY2hlY2tfaGVscGVyX21lbV9hY2Nlc3MuIEhvd2V2ZXIsIHdlIG9ubHkgYWxsb3cgd2hlbiBhcmd1bWVudCB0eXBlIGlzXG4tXHQgKiBwb2ludGVyIHRvIHNjYWxhciwgb3Igc3RydWN0IGNvbXBvc2VkIChyZWN1cnNpdmVseSkgb2Ygc2NhbGFycy4gV2hlblxuLVx0ICogYXJnX21lbV9zaXplIGlzIHRydWUsIHRoZSBwb2ludGVyIGNhbiBiZSB2b2lkICouXG4tXHQgKi9cbi1cdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKHJlZl90KSBcdTAwMjZcdTAwMjYgIV9fYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtXHUwMDNlYnRmLCByZWZfdCwgMCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgKGFyZ19tZW1fc2l6ZSA/ICFidGZfdHlwZV9pc192b2lkKHJlZl90KSA6IDEpKSB7XG4tXHRcdHZlcmJvc2UoZW52LCBcIiVzIHBvaW50ZXIgdHlwZSAlcyAlcyBtdXN0IHBvaW50IHRvICVzc2NhbGFyLCBvciBzdHJ1Y3Qgd2l0aCBzY2FsYXJcXG5cIixcbi1cdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksXG4tXHRcdFx0YnRmX3R5cGVfc3RyKHJlZl90KSwgcmVmX3RuYW1lLCBhcmdfbWVtX3NpemUgPyBcInZvaWQsIFwiIDogXCJcIik7XG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuLVx0cmV0dXJuIGFyZ19tZW1fc2l6ZSA/IEtGX0FSR19QVFJfVE9fTUVNX1NJWkUgOiBLRl9BUkdfUFRSX1RPX01FTTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbkBAIC0xMjAwNSwxNiArMTIxMzYsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFxuIFx0YXJncyA9IChjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICopKG1ldGEtXHUwMDNlZnVuY19wcm90byArIDEpO1xuIFx0bmFyZ3MgPSBidGZfdHlwZV92bGVuKG1ldGEtXHUwMDNlZnVuY19wcm90byk7XG4tXHRpZiAobmFyZ3MgXHUwMDNlIE1BWF9CUEZfRlVOQ19BUkdTKSB7XG4tXHRcdHZlcmJvc2UoZW52LCBcIkZ1bmN0aW9uICVzIGhhcyAlZCBcdTAwM2UgJWQgYXJnc1xcblwiLCBmdW5jX25hbWUsIG5hcmdzLFxuLVx0XHRcdE1BWF9CUEZfRlVOQ19BUkdTKTtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4tXHRpZiAobmFyZ3MgXHUwMDNlIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyBcdTAwMjZcdTAwMjYgIWJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncygpKSB7XG4tXHRcdHZlcmJvc2UoZW52LCBcIkpJVCBkb2VzIG5vdCBzdXBwb3J0IGtmdW5jICVzKCkgd2l0aCAlZCBhcmdzXFxuXCIsXG4tXHRcdFx0ZnVuY19uYW1lLCBuYXJncyk7XG4tXHRcdHJldHVybiAtRU5PVFNVUFA7XG4tXHR9XG4gXG4gXHRyZXQgPSBjaGVja19vdXRnb2luZ19zdGFja19hcmdzKGVudiwgY2FsbGVyLCBuYXJncyk7XG4gXHRpZiAocmV0KVxuQEAgLTEyMDMxLDggKzEyMTUyLDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0aW50IHJlZ25vID0gcmVnX2Zyb21fYXJnbm8oYXJnbm8pO1xuIFx0XHRib29sIGJ0Zl9pZF9maXhlZF9vZmZfb2sgPSB0cnVlO1xuIFx0XHR1MzIgcmVmX2lkLCB0eXBlX3NpemU7XG4tXHRcdGJvb2wgaXNfcmV0X2J1Zl9zeiA9IGZhbHNlO1xuLVx0XHRpbnQga2ZfYXJnX3R5cGU7XG4rXHRcdGludCBrZl9hcmdfdHlwZSA9IG1ldGEtXHUwMDNlZm4tXHUwMDNlYXJnX3R5cGVbaV07XG4gXG4gXHRcdGlmIChpc19rZnVuY19hcmdfcHJvZ19hdXgoYnRmLCBcdTAwMjZhcmdzW2ldKSkge1xuIFx0XHRcdC8qIFJlamVjdCByZXBlYXRlZCB1c2UgYnBmX3Byb2dfYXV4ICovXG5AQCAtMTIwNTUsNTIgKzEyMTc1LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcbiBcdFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJnc1tpXS50eXBlLCBOVUxMKTtcbiBcbi1cdFx0aWYgKGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkge1xuLVx0XHRcdGlmIChyZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpIHtcbi1cdFx0XHRcdHZlcmJvc2UoZW52LCBcIiVzIGlzIG5vdCBhIHNjYWxhclxcblwiLCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdGlmIChpc19rZnVuY19hcmdfY29uc3RhbnQobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbaV0pKSB7XG4tXHRcdFx0XHRpZiAobWV0YS1cdTAwM2VhcmdfY29uc3RhbnQuZm91bmQpIHtcbi1cdFx0XHRcdFx0dmVyaWZpZXJfYnVnKGVudiwgXCJvbmx5IG9uZSBjb25zdGFudCBhcmd1bWVudCBwZXJtaXR0ZWRcIik7XG4tXHRcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuLVx0XHRcdFx0fVxuLVx0XHRcdFx0aWYgKCF0bnVtX2lzX2NvbnN0KHJlZy1cdTAwM2V2YXJfb2ZmKSkge1xuLVx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBtdXN0IGJlIGEga25vd24gY29uc3RhbnRcXG5cIixcbi1cdFx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuLVx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0XHRcdH1cbi1cdFx0XHRcdGlmIChyZWdubyBcdTAwM2U9IDApXG4tXHRcdFx0XHRcdHJldCA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgcmVnbm8pO1xuLVx0XHRcdFx0ZWxzZVxuLVx0XHRcdFx0XHRyZXQgPSBtYXJrX3N0YWNrX2FyZ19wcmVjaXNpb24oZW52LCBpKTtcbi1cdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdFx0XHRtZXRhLVx1MDAzZWFyZ19jb25zdGFudC5mb3VuZCA9IHRydWU7XG4tXHRcdFx0XHRtZXRhLVx1MDAzZWFyZ19jb25zdGFudC52YWx1ZSA9IHJlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlO1xuLVx0XHRcdH0gZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX3NjYWxhcl93aXRoX25hbWUoYnRmLCBcdTAwMjZhcmdzW2ldLCBcInJkb25seV9idWZfc2l6ZVwiKSkge1xuLVx0XHRcdFx0bWV0YS1cdTAwM2VyMF9yZG9ubHkgPSB0cnVlO1xuLVx0XHRcdFx0aXNfcmV0X2J1Zl9zeiA9IHRydWU7XG4tXHRcdFx0fSBlbHNlIGlmIChpc19rZnVuY19hcmdfc2NhbGFyX3dpdGhfbmFtZShidGYsIFx1MDAyNmFyZ3NbaV0sIFwicmR3cl9idWZfc2l6ZVwiKSkge1xuLVx0XHRcdFx0aXNfcmV0X2J1Zl9zeiA9IHRydWU7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdGlmIChpc19yZXRfYnVmX3N6KSB7XG4tXHRcdFx0XHRyZXQgPSBwcm9jZXNzX2NvbnN0X2FsbG9jX21lbV9zaXplKGVudiwgcmVnLCBhcmdubywgXHUwMDI2bWV0YS1cdTAwM2VyZXRfbWVtKTtcbi1cdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdFx0fVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4tXHRcdGlmICghYnRmX3R5cGVfaXNfcHRyKHQpKSB7XG4tXHRcdFx0dmVyYm9zZShlbnYsIFwiVW5yZWNvZ25pemVkICVzIHR5cGUgJXNcXG5cIixcbi1cdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnRmX3R5cGVfc3RyKHQpKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuLVxuLVx0XHRpZiAoKGJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykgfHwgdHlwZV9tYXlfYmVfbnVsbChyZWctXHUwMDNldHlwZSkpIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAoYnRmX3R5cGVfaXNfcHRyKHQpIFx1MDAyNlx1MDAyNiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSB8fCB0eXBlX21heV9iZV9udWxsKHJlZy1cdTAwM2V0eXBlKSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhaXNfa2Z1bmNfYXJnX251bGxhYmxlKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2ldKSkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCAlc1xcblwiLFxuIFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbkBAIC0xMjExNyw3NiArMTIxOTIsMzUgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0aWYgKHJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSlcbiBcdFx0XHR1cGRhdGVfcmVmX29iaihcdTAwMjZtZXRhLVx1MDAzZXJlZl9vYmosIHJlZyk7XG4gXG4tXHRcdHJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVx1MDAzZXR5cGUsIFx1MDAyNnJlZl9pZCk7XG4tXHRcdHJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHJlZl90LVx1MDAzZW5hbWVfb2ZmKTtcbi1cbi1cdFx0a2ZfYXJnX3R5cGUgPSBnZXRfa2Z1bmNfcHRyX2FyZ190eXBlKGVudiwgY2FsbGVyLCByZWdzLCBtZXRhLCB0LCByZWZfdCwgcmVmX3RuYW1lLFxuLVx0XHRcdFx0XHRcdCAgICAgYXJncywgaSwgbmFyZ3MsIGFyZ25vLCByZWcpO1xuLVx0XHRpZiAoa2ZfYXJnX3R5cGUgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIGtmX2FyZ190eXBlO1xuK1x0XHRpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7XG4rXHRcdFx0cmVmX3QgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXHUwMDNldHlwZSwgXHUwMDI2cmVmX2lkKTtcbitcdFx0XHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCByZWZfdC1cdTAwM2VuYW1lX29mZik7XG4rXHRcdH1cbiBcbi1cdFx0c3dpdGNoIChrZl9hcmdfdHlwZSkge1xuLVx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTlVMTDpcbitcdFx0aWYgKGJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykgXHUwMDI2XHUwMDI2IHR5cGVfbWF5X2JlX251bGwoa2ZfYXJnX3R5cGUpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTUFQOlxuLVx0XHRcdGlmICghcmVnLVx1MDAzZW1hcF9wdHIpIHtcbi1cdFx0XHRcdHZlcmJvc2UoZW52LCBcInBvaW50ZXIgaW4gJXMgaXNuJ3QgbWFwIHBvaW50ZXJcXG5cIixcbi1cdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAobWV0YS1cdTAwM2VtYXAucHRyIFx1MDAyNlx1MDAyNiAocmVnLVx1MDAzZW1hcF9wdHItXHUwMDNlcmVjb3JkLVx1MDAzZXdxX29mZiBcdTAwM2U9IDAgfHxcbi1cdFx0XHRcdFx0ICAgICAgcmVnLVx1MDAzZW1hcF9wdHItXHUwMDNlcmVjb3JkLVx1MDAzZXRhc2tfd29ya19vZmYgXHUwMDNlPSAwKSkge1xuLVx0XHRcdFx0LyogVXNlIG1hcF91aWQgKHdoaWNoIGlzIHVuaXF1ZSBpZCBvZiBpbm5lciBtYXApIHRvIHJlamVjdDpcbi1cdFx0XHRcdCAqIGlubmVyX21hcDEgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5MSlcbi1cdFx0XHRcdCAqIGlubmVyX21hcDIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5Milcbi1cdFx0XHRcdCAqIGlmIChpbm5lcl9tYXAxIFx1MDAyNlx1MDAyNiBpbm5lcl9tYXAyKSB7XG4tXHRcdFx0XHQgKiAgICAgd3EgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGlubmVyX21hcDEpO1xuLVx0XHRcdFx0ICogICAgIGlmICh3cSlcbi1cdFx0XHRcdCAqICAgICAgICAgLy8gbWlzbWF0Y2ggd291bGQgaGF2ZSBiZWVuIGFsbG93ZWRcbi1cdFx0XHRcdCAqICAgICAgICAgYnBmX3dxX2luaXQod3EsIGlubmVyX21hcDIpO1xuLVx0XHRcdFx0ICogfVxuLVx0XHRcdFx0ICpcbi1cdFx0XHRcdCAqIENvbXBhcmluZyBtYXBfcHRyIGlzIGVub3VnaCB0byBkaXN0aW5ndWlzaCBub3JtYWwgYW5kIG91dGVyIG1hcHMuXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdGlmIChtZXRhLVx1MDAzZW1hcC5wdHIgIT0gcmVnLVx1MDAzZW1hcF9wdHIgfHxcbi1cdFx0XHRcdCAgICBtZXRhLVx1MDAzZW1hcC51aWQgIT0gcmVnLVx1MDAzZW1hcF91aWQpIHtcbi1cdFx0XHRcdFx0aWYgKHJlZy1cdTAwM2VtYXBfcHRyLVx1MDAzZXJlY29yZC1cdTAwM2V0YXNrX3dvcmtfb2ZmIFx1MDAzZT0gMCkge1xuLVx0XHRcdFx0XHRcdHZlcmJvc2UoZW52LFxuLVx0XHRcdFx0XHRcdFx0XCJicGZfdGFza193b3JrIHBvaW50ZXIgaW4gUjIgbWFwX3VpZD0lZCBkb2Vzbid0IG1hdGNoIG1hcCBwb2ludGVyIGluIFIzIG1hcF91aWQ9JWRcXG5cIixcbi1cdFx0XHRcdFx0XHRcdG1ldGEtXHUwMDNlbWFwLnVpZCwgcmVnLVx1MDAzZW1hcF91aWQpO1xuLVx0XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdFx0XHR9XG4tXHRcdFx0XHRcdHZlcmJvc2UoZW52LFxuLVx0XHRcdFx0XHRcdFwid29ya3F1ZXVlIHBvaW50ZXIgaW4gUjEgbWFwX3VpZD0lZCBkb2Vzbid0IG1hdGNoIG1hcCBwb2ludGVyIGluIFIyIG1hcF91aWQ9JWRcXG5cIixcbi1cdFx0XHRcdFx0XHRtZXRhLVx1MDAzZW1hcC51aWQsIHJlZy1cdTAwM2VtYXBfdWlkKTtcbi1cdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0XHR9XG4tXHRcdFx0fVxuLVx0XHRcdG1ldGEtXHUwMDNlbWFwLnB0ciA9IHJlZy1cdTAwM2VtYXBfcHRyO1xuLVx0XHRcdG1ldGEtXHUwMDNlbWFwLnVpZCA9IHJlZy1cdTAwM2VtYXBfdWlkO1xuLVx0XHRcdGZhbGx0aHJvdWdoO1xuK1xuK1x0XHRpZiAoaXNfa2Z1bmNfYXJnX21hcChidGYsIFx1MDAyNmFyZ3NbaV0pKSB7XG4rXHRcdFx0cmVmX2lkID0gKnJlZzJidGZfaWRzW0NPTlNUX1BUUl9UT19NQVBdO1xuK1x0XHRcdHJlZl90ID0gYnRmX3R5cGVfYnlfaWQoYnRmX3ZtbGludXgsIHJlZl9pZCk7XG4rXHRcdFx0cmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgcmVmX3QtXHUwMDNlbmFtZV9vZmYpO1xuK1x0XHR9XG4rXG4rXHRcdHN3aXRjaCAoYmFzZV90eXBlKGtmX2FyZ190eXBlKSkge1xuK1x0XHRjYXNlIEtGX0FSR19DT05TVF9CVEZfSUQ6XG4rXHRcdGNhc2UgS0ZfQVJHX0NPTlNUX0FMTE9DX1NJWkVfT1JfWkVSTzpcbitcdFx0Y2FzZSBLRl9BUkdfQU5ZVEhJTkc6XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19BTExPQ19CVEZfSUQ6XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19CVEZfSUQ6XG4tXHRcdFx0aWYgKCFpc190cnVzdGVkX3JlZyhlbnYsIHJlZykpIHtcbi1cdFx0XHRcdGlmICghaXNfa2Z1bmNfcmN1KG1ldGEpKSB7XG4tXHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcIiVzIG11c3QgYmUgcmVmZXJlbmNlZCBvciB0cnVzdGVkXFxuXCIsXG4tXHRcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbi1cdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0XHR9XG4tXHRcdFx0XHRpZiAoIWlzX3JjdV9yZWcocmVnKSkge1xuLVx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBtdXN0IGJlIGEgcmN1IHBvaW50ZXJcXG5cIixcbi1cdFx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuLVx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0XHRcdH1cbi1cdFx0XHR9XG4tXHRcdFx0ZmFsbHRocm91Z2g7XG4rXHRcdGNhc2UgS0ZfQVJHX0NPTlNUX01BUF9QVFI6XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19JVEVSOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTElTVF9IRUFEOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTElTVF9OT0RFOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fUkJfUk9PVDpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JCX05PREU6XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU06XG4tXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU1fU0laRTpcbitcdFx0Y2FzZSBLRl9BUkdfQ09OU1RfTUVNX1NJWkU6XG4rXHRcdGNhc2UgS0ZfQVJHX01FTV9TSVpFOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s6XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19DT05TVF9TVFI6XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19XT1JLUVVFVUU6XG5AQCAtMTIyMTcsNyArMTIyNTEsMzUgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0XHRzd2l0Y2ggKGtmX2FyZ190eXBlKSB7XG4rXHRcdHN3aXRjaCAoYmFzZV90eXBlKGtmX2FyZ190eXBlKSkge1xuK1x0XHRjYXNlIEtGX0FSR19DT05TVF9CVEZfSUQ6XG4rXHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSkge1xuK1x0XHRcdFx0dmVyYm9zZShlbnYsIFwiJXMgaXMgbm90IGEgc2NhbGFyXFxuXCIsIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHR9XG4rXG4rXHRcdFx0cmV0ID0gcHJvY2Vzc19jb25zdF9hcmcoZW52LCByZWcsIGFyZ25vLCBtZXRhKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBLRl9BUkdfQ09OU1RfQUxMT0NfU0laRV9PUl9aRVJPOlxuK1x0XHRcdGlmIChyZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpIHtcbitcdFx0XHRcdHZlcmJvc2UoZW52LCBcIiVzIGlzIG5vdCBhIHNjYWxhclxcblwiLCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdGlmIChpc19rZnVuY19hcmdfc2NhbGFyX3dpdGhfbmFtZShidGYsIFx1MDAyNmFyZ3NbaV0sIFwicmRvbmx5X2J1Zl9zaXplXCIpKVxuK1x0XHRcdFx0bWV0YS1cdTAwM2VyMF9yZG9ubHkgPSB0cnVlO1xuK1x0XHRcdHJldCA9IHByb2Nlc3NfY29uc3RfYWxsb2NfbWVtX3NpemUoZW52LCByZWcsIGFyZ25vLCBcdTAwMjZtZXRhLVx1MDAzZXJldF9tZW0pO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEtGX0FSR19BTllUSElORzpcbitcdFx0XHRpZiAocmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKSB7XG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBpcyBub3QgYSBzY2FsYXJcXG5cIiwgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdH1cbitcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NUWDpcbiBcdFx0XHRpZiAocmVnLVx1MDAzZXR5cGUgIT0gUFRSX1RPX0NUWCkge1xuIFx0XHRcdFx0dmVyYm9zZShlbnYsIFwiJXMgZXhwZWN0ZWQgcG9pbnRlciB0byBjdHgsIGJ1dCBnb3QgJXNcXG5cIixcbkBAIC0xMjM4Niw1MSArMTI0NDgsNzcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX01BUDpcbi1cdFx0XHQvKiBJZiBhcmd1bWVudCBoYXMgJ19fbWFwJyBzdWZmaXggZXhwZWN0ICdzdHJ1Y3QgYnBmX21hcCAqJyAqL1xuLVx0XHRcdHJlZl9pZCA9ICpyZWcyYnRmX2lkc1tDT05TVF9QVFJfVE9fTUFQXTtcbi1cdFx0XHRyZWZfdCA9IGJ0Zl90eXBlX2J5X2lkKGJ0Zl92bWxpbnV4LCByZWZfaWQpO1xuLVx0XHRcdHJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHJlZl90LVx1MDAzZW5hbWVfb2ZmKTtcbi1cdFx0XHRmYWxsdGhyb3VnaDtcbi1cdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0JURl9JRDpcbi1cdFx0XHQvKiBPbmx5IGJhc2VfdHlwZSBpcyBjaGVja2VkLCBmdXJ0aGVyIGNoZWNrcyBhcmUgZG9uZSBoZXJlICovXG4tXHRcdFx0aWYgKChiYXNlX3R5cGUocmVnLVx1MDAzZXR5cGUpICE9IFBUUl9UT19CVEZfSUQgfHxcbi1cdFx0XHQgICAgIChicGZfdHlwZV9oYXNfdW5zYWZlX21vZGlmaWVycyhyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2ICFpc19yY3VfcmVnKHJlZykpKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgIXJlZzJidGZfaWRzW2Jhc2VfdHlwZShyZWctXHUwMDNldHlwZSldKSB7XG4tXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBpcyAlcyBcIiwgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLFxuLVx0XHRcdFx0XHRyZWdfdHlwZV9zdHIoZW52LCByZWctXHUwMDNldHlwZSkpO1xuLVx0XHRcdFx0dmVyYm9zZShlbnYsIFwiZXhwZWN0ZWQgJXMgb3Igc29ja2V0XFxuXCIsXG4tXHRcdFx0XHRcdHJlZ190eXBlX3N0cihlbnYsIGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgfFxuLVx0XHRcdFx0XHRcdFx0ICAodHlwZV9mbGFnKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjYgQlBGX1JFR19UUlVTVEVEX01PRElGSUVSUykpKTtcbitcdFx0Y2FzZSBLRl9BUkdfQ09OU1RfTUFQX1BUUjpcbitcdFx0XHRpZiAoIXJlZy1cdTAwM2VtYXBfcHRyKSB7XG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCJwb2ludGVyIGluICVzIGlzbid0IG1hcCBwb2ludGVyXFxuXCIsXG4rXHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG4tXHRcdFx0cmV0ID0gcHJvY2Vzc19rZl9hcmdfcHRyX3RvX2J0Zl9pZChlbnYsIHJlZywgcmVmX3QsIHJlZl90bmFtZSwgcmVmX2lkLCBtZXRhLCBpLCBhcmdubyk7XG4rXHRcdFx0cmV0ID0gcHJvY2Vzc19tYXBfcHRyX2FyZyhlbnYsIHJlZywgYXJnbm8sIG1ldGEpO1xuIFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNOlxuLVx0XHRcdHJlc29sdmVfcmV0ID0gYnRmX3Jlc29sdmVfc2l6ZShidGYsIHJlZl90LCBcdTAwMjZ0eXBlX3NpemUpO1xuLVx0XHRcdGlmIChJU19FUlIocmVzb2x2ZV9yZXQpKSB7XG4tXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyByZWZlcmVuY2UgdHlwZSgnJXMgJXMnKSBzaXplIGNhbm5vdCBiZSBkZXRlcm1pbmVkOiAlbGRcXG5cIixcbi1cdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLFxuLVx0XHRcdFx0XHRyZWZfdG5hbWUsIFBUUl9FUlIocmVzb2x2ZV9yZXQpKTtcbitcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0JURl9JRDpcbitcdFx0XHQvKiBPbmx5IGJhc2VfdHlwZSBpcyBjaGVja2VkLCBmdXJ0aGVyIGNoZWNrcyBhcmUgZG9uZSBoZXJlICovXG4rXHRcdFx0aWYgKGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgPT0gUFRSX1RPX0JURl9JRCB8fFxuK1x0XHRcdCAgICByZWcyYnRmX2lkc1tiYXNlX3R5cGUocmVnLVx1MDAzZXR5cGUpXSkge1xuK1xuK1x0XHRcdFx0aWYgKCFpc190cnVzdGVkX3JlZyhlbnYsIHJlZykpIHtcbitcdFx0XHRcdFx0aWYgKCFpc19rZnVuY19yY3UobWV0YSkpIHtcbitcdFx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFxcblwiLFxuK1x0XHRcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbitcdFx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRcdFx0fVxuK1x0XHRcdFx0XHRpZiAoIWlzX3JjdV9yZWcocmVnKSkge1xuK1x0XHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcIiVzIG11c3QgYmUgYSByY3UgcG9pbnRlclxcblwiLFxuK1x0XHRcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbitcdFx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRcdFx0fVxuK1x0XHRcdFx0fVxuK1xuK1x0XHRcdFx0cmV0ID0gcHJvY2Vzc19rZl9hcmdfcHRyX3RvX2J0Zl9pZChlbnYsIHJlZywgcmVmX3QsIHJlZl90bmFtZSwgcmVmX2lkLCBtZXRhLCBpLCBhcmdubyk7XG4rXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdGlmICghX19idGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS1cdTAwM2VidGYsIHJlZl90LCAwKSkge1xuK1x0XHRcdFx0ZW51bSBicGZfcmVnX3R5cGUgcmVnMmJ0Zl90eXBlID0gbG9va3VwX3JlZzJidGZfaWRzKHJlZl90KTtcbitcbitcdFx0XHRcdHZlcmJvc2UoZW52LCBcIiVzIGlzICVzIGV4cGVjdGVkICVzICVzXCIsXG4rXHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgcmVnX3R5cGVfc3RyKGVudiwgcmVnLVx1MDAzZXR5cGUpLFxuK1x0XHRcdFx0XHRidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUpO1xuK1x0XHRcdFx0aWYgKHJlZzJidGZfdHlwZSAhPSBOT1RfSU5JVClcbitcdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwiIG9yICVzXCIsIHJlZ190eXBlX3N0cihlbnYsIHJlZzJidGZfdHlwZSkpO1xuK1x0XHRcdFx0dmVyYm9zZShlbnYsIFwiXFxuXCIpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuLVx0XHRcdHJldCA9IGNoZWNrX21lbV9yZWcoZW52LCByZWcsIGFyZ25vLCB0eXBlX3NpemUpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNX1NJWkU6XG4tXHRcdHtcbi1cdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqYnVmZl9yZWcgPSByZWc7XG4tXHRcdFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYnVmZl9hcmcgPSBcdTAwMjZhcmdzW2ldO1xuLVx0XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpzaXplX3JlZyA9IGdldF9mdW5jX2FyZ19yZWcoY2FsbGVyLCByZWdzLCBpICsgMSk7XG4tXHRcdFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqc2l6ZV9hcmcgPSBcdTAwMjZhcmdzW2kgKyAxXTtcbi1cdFx0XHRhcmdub190IG5leHRfYXJnbm8gPSBhcmdub19mcm9tX2FyZyhpICsgMik7XG4tXG4tXHRcdFx0aWYgKCFicGZfcmVnaXN0ZXJfaXNfbnVsbChidWZmX3JlZykgfHwgIWlzX2tmdW5jX2FyZ19udWxsYWJsZShtZXRhLVx1MDAzZWJ0ZiwgYnVmZl9hcmcpKSB7XG4tXHRcdFx0XHRyZXQgPSBjaGVja19rZnVuY19tZW1fc2l6ZV9yZWcoZW52LCBidWZmX3JlZywgc2l6ZV9yZWcsXG4tXHRcdFx0XHRcdFx0XHQgICAgICAgYXJnbm8sIG5leHRfYXJnbm8pO1xuK1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogSWYgdGhlIHJlZ2lzdGVyIGRvZXMgbm90IGNvbnRhaW4gYnRmIGlkIGJ1dCB0aGUgYXJndW1lbnQgdHlwZSBpcyBhIHBvaW50ZXIgdG9cbitcdFx0XHQgKiBzY2FsYXItb25seSBzdHJ1Y3QsIGFsbG93IHZlcmlmeWluZyBpdCBhcyBhIGZpeGVkIHNpemUgbWVtb3J5LlxuK1x0XHRcdCAqL1xuK1x0XHRcdGtmX2FyZ190eXBlID0gS0ZfQVJHX1BUUl9UT19NRU0gfCBNRU1fRklYRURfU0laRTtcbitcdFx0XHRmYWxsdGhyb3VnaDtcbitcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX01FTTpcbitcdFx0XHRpZiAoa2ZfYXJnX3R5cGUgXHUwMDI2IE1FTV9GSVhFRF9TSVpFKSB7XG4rXHRcdFx0XHRyZXNvbHZlX3JldCA9IGJ0Zl9yZXNvbHZlX3NpemUoYnRmLCByZWZfdCwgXHUwMDI2dHlwZV9zaXplKTtcbitcdFx0XHRcdGlmIChJU19FUlIocmVzb2x2ZV9yZXQpKSB7XG4rXHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcIiVzIHJlZmVyZW5jZSB0eXBlKCclcyAlcycpIHNpemUgY2Fubm90IGJlIGRldGVybWluZWQ6ICVsZFxcblwiLFxuK1x0XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnRmX3R5cGVfc3RyKHJlZl90KSxcbitcdFx0XHRcdFx0XHRyZWZfdG5hbWUsIFBUUl9FUlIocmVzb2x2ZV9yZXQpKTtcbitcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0XHR9XG4rXHRcdFx0XHRyZXQgPSBjaGVja19tZW1fcmVnKGVudiwgcmVnLCBhcmdubywgdHlwZV9zaXplLCBCUEZfUkVBRCB8IEJQRl9XUklURSwgbWV0YSk7XG4rXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqYnVmZl9yZWcgPSByZWc7XG4rXHRcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc2l6ZV9yZWcgPSBnZXRfZnVuY19hcmdfcmVnKGNhbGxlciwgcmVncywgaSArIDEpO1xuK1x0XHRcdFx0YXJnbm9fdCBuZXh0X2FyZ25vID0gYXJnbm9fZnJvbV9hcmcoaSArIDIpO1xuK1xuK1x0XHRcdFx0cmV0ID0gY2hlY2tfbWVtX3NpemVfcmVnKGVudiwgYnVmZl9yZWcsIHNpemVfcmVnLCBhcmdubywgbmV4dF9hcmdubyxcbitcdFx0XHRcdFx0XHRcdCBCUEZfUkVBRCB8IEJQRl9XUklURSwgdHJ1ZSwgbWV0YSk7XG4gXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcIiVzIGFuZCBcIiwgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwiJXMgbWVtb3J5LCBsZW4gcGFpciBsZWFkcyB0byBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NcXG5cIixcbkBAIC0xMjQzOCwyNSArMTI1MjYsMjAgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4tXG4tXHRcdFx0aWYgKGlzX2tmdW5jX2FyZ19jb25zdF9tZW1fc2l6ZShtZXRhLVx1MDAzZWJ0Ziwgc2l6ZV9hcmcsIHNpemVfcmVnKSkge1xuLVx0XHRcdFx0aWYgKG1ldGEtXHUwMDNlYXJnX2NvbnN0YW50LmZvdW5kKSB7XG4tXHRcdFx0XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwib25seSBvbmUgY29uc3RhbnQgYXJndW1lbnQgcGVybWl0dGVkXCIpO1xuLVx0XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdFx0XHRcdH1cbi1cdFx0XHRcdGlmICghdG51bV9pc19jb25zdChzaXplX3JlZy1cdTAwM2V2YXJfb2ZmKSkge1xuLVx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBtdXN0IGJlIGEga25vd24gY29uc3RhbnRcXG5cIixcbi1cdFx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBuZXh0X2FyZ25vKSk7XG4tXHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdFx0fVxuLVx0XHRcdFx0bWV0YS1cdTAwM2VhcmdfY29uc3RhbnQuZm91bmQgPSB0cnVlO1xuLVx0XHRcdFx0bWV0YS1cdTAwM2VhcmdfY29uc3RhbnQudmFsdWUgPSBzaXplX3JlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEtGX0FSR19DT05TVF9NRU1fU0laRTpcbitcdFx0XHRpZiAocmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFKSB7XG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBpcyBub3QgYSBzY2FsYXJcXG5cIiwgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHQvKiBTa2lwIG5leHQgJ19fc3onIG9yICdfX3N6aycgYXJndW1lbnQgKi9cbi1cdFx0XHRpKys7XG4rXHRcdFx0cmV0ID0gcHJvY2Vzc19jb25zdF9hcmcoZW52LCByZWcsIGFyZ25vLCBtZXRhKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0XHRmYWxsdGhyb3VnaDtcbitcdFx0Y2FzZSBLRl9BUkdfTUVNX1NJWkU6XG4gXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NBTExCQUNLOlxuIFx0XHRcdGlmIChyZWctXHUwMDNldHlwZSAhPSBQVFJfVE9fRlVOQykge1xuIFx0XHRcdFx0dmVyYm9zZShlbnYsIFwiJXMgZXhwZWN0ZWQgcG9pbnRlciB0byBmdW5jXFxuXCIsIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG5AQCAtMTI1MTQsNyArMTI1OTcsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuLVx0XHRcdHJldCA9IHByb2Nlc3NfdGltZXJfa2Z1bmMoZW52LCByZWcsIGFyZ25vLCBtZXRhKTtcbitcdFx0XHRyZXQgPSBwcm9jZXNzX3RpbWVyX2Z1bmMoZW52LCByZWcsIGFyZ25vLCBcdTAwMjZtZXRhLVx1MDAzZW1hcCk7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMTI2NzYsNyArMTI3NTksNyBAQCBzNjQgYnBmX2hlbHBlcl9zdGFja19hY2Nlc3NfYnl0ZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuXG4gXHRcdFx0c2l6ZSA9IGZuLVx1MDAzZWFyZ19zaXplW2FyZ107XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbi1cdFx0aWYgKGFyZyArIDEgXHUwMDNjIEFSUkFZX1NJWkUoZm4tXHUwMDNlYXJnX3R5cGUpIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAoYXJnICsgMSBcdTAwM2MgTUFYX0JQRl9GVU5DX1JFR19BUkdTIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYXJnX3R5cGVfaXNfbWVtX3NpemUoZm4tXHUwMDNlYXJnX3R5cGVbYXJnICsgMV0pKSB7XG4gXHRcdFx0aW50IHNpemVfcmVnID0gQlBGX1JFR18xICsgYXJnICsgMTtcbiBcbkBAIC0xMjk3NSw2ICsxMzA1OCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRpbnQgZXJyLCBpbnNuX2lkeCA9ICppbnNuX2lkeF9wO1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJncztcbiBcdHUzMiBpLCBuYXJncywgcHRyX3R5cGVfaWQ7XG4rXHRzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2MgKmRlc2M7XG4gXHRzdHJ1Y3QgYnRmICpkZXNjX2J0ZjtcbiBcdGludCBpZDtcbiBcbkBAIC0xMjk5MSw2ICsxMzA3NSwxMyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0ZnVuY19uYW1lID0gbWV0YS5mdW5jX25hbWU7XG4gXHRpbnNuX2F1eCA9IFx1MDAyNmVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XTtcbiBcbitcdGRlc2MgPSBmaW5kX2tmdW5jX2Rlc2MoZW52LVx1MDAzZXByb2csIGluc24tXHUwMDNlaW1tLCBpbnNuLVx1MDAzZW9mZik7XG4rXHRpZiAoIWRlc2MpIHtcbitcdFx0dmVyaWZpZXJfYnVnKGVudiwgXCJrZnVuYyBkZXNjcmlwdG9yIG5vdCBmb3VuZCBmb3IgZnVuY19pZCAldVwiLCBpbnNuLVx1MDAzZWltbSk7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuK1x0bWV0YS5mbiA9IGRlc2MtXHUwMDNlcHJvdG87XG4rXG4gXHRpbnNuX2F1eC1cdTAwM2Vpc19pdGVyX25leHQgPSBicGZfaXNfaXRlcl9uZXh0X2tmdW5jKFx1MDAyNm1ldGEpO1xuIFxuIFx0aWYgKCFpbnNuLVx1MDAzZW9mZiBcdTAwMjZcdTAwMjZcbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbmluZGV4IDc2YWI1MWRlYWE2Yjk1Li44OTE4OTdmOGExYjM1NyAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuKysrIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG5AQCAtMjIxLDcgKzIyMSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcHJvYmVfcmVhZF91c2VyX3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IHRydWUsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTI1OCw3ICsyNTgsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHJfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtMjczLDcgKzI3Myw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcHJvYmVfcmVhZF9rZXJuZWxfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtMzA4LDcgKzMwOCw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcHJvYmVfcmVhZF9rZXJuZWxfc3RyX3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IHRydWUsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTMyOCw3ICszMjgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX2NvbXBhdF9wcm90byA9IHtcbiBcdC5ncGxfb25seVx0PSB0cnVlLFxuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC0zNDcsNyArMzQ3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcHJvYmVfcmVhZF9jb21wYXRfc3RyX3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IHRydWUsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuICNlbmRpZiAvKiBDT05GSUdfQVJDSF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0UgKi9cbkBAIC0zODMsNyArMzgzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcHJvYmVfd3JpdGVfdXNlcl9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiAjZGVmaW5lIE1BWF9UUkFDRV9QUklOVEtfVkFSQVJHU1x0M1xuQEAgLTQxOCw3ICs0MTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90cmFjZV9wcmludGtfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gc3RhdGljIHZvaWQgX19zZXRfcHJpbnRrX2Nscl9ldmVudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5AQCAtNDc0LDkgKzQ3NCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RyYWNlX3ZwcmludGtfcHJvdG8gPSB7XG4gXHQuZ3BsX29ubHlcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IFBUUl9NQVlCRV9OVUxMIHwgTUVNX1JET05MWSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gfTtcbiBcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmJwZl9nZXRfdHJhY2VfdnByaW50a19wcm90byh2b2lkKVxuQEAgLTUxOCw5ICs1MTgsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zZXFfcHJpbnRmX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRCxcbiBcdC5hcmcxX2J0Zl9pZFx0PSBcdTAwMjZidGZfc2VxX2ZpbGVfaWRzWzBdLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnNF90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IFBUUl9NQVlCRV9OVUxMIHwgTUVNX1JET05MWSxcbi1cdC5hcmc1X3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnNV90eXBlICAgICAgPSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIEJQRl9DQUxMXzMoYnBmX3NlcV93cml0ZSwgc3RydWN0IHNlcV9maWxlICosIG0sIGNvbnN0IHZvaWQgKiwgZGF0YSwgdTMyLCBsZW4pXG5AQCAtNTM1LDcgKzUzNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NlcV93cml0ZV9wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19CVEZfSUQsXG4gXHQuYXJnMV9idGZfaWRcdD0gXHUwMDI2YnRmX3NlcV9maWxlX2lkc1swXSxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIEJQRl9DQUxMXzQoYnBmX3NlcV9wcmludGZfYnRmLCBzdHJ1Y3Qgc2VxX2ZpbGUgKiwgbSwgc3RydWN0IGJ0Zl9wdHIgKiwgcHRyLFxuQEAgLTU1OSw3ICs1NTksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zZXFfcHJpbnRmX2J0Zl9wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19CVEZfSUQsXG4gXHQuYXJnMV9idGZfaWRcdD0gXHUwMDI2YnRmX3NlcV9maWxlX2lkc1swXSxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtNjMzLDcgKzYzMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3BlcmZfZXZlbnRfcmVhZF92YWx1ZV9wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX0NPTlNUX01BUF9QVFIsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpicGZfZ2V0X3BlcmZfZXZlbnRfcmVhZF92YWx1ZV9wcm90byh2b2lkKVxuQEAgLTczMCw3ICs3MzAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wZXJmX2V2ZW50X291dHB1dF9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX01BUF9QVFIsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIHN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIGJwZl9ldmVudF9vdXRwdXRfbmVzdF9sZXZlbCk7XG5AQCAtOTk2LDcgKzk5Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2RfcGF0aF9wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19CVEZfSUQsXG4gXHQuYXJnMV9idGZfaWRcdD0gXHUwMDI2YnBmX2RfcGF0aF9idGZfaWRzWzBdLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9XUklURSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYWxsb3dlZFx0PSBicGZfZF9wYXRoX2FsbG93ZWQsXG4gfTtcbiBcbkBAIC0xMDUzLDkgKzEwNTMsOSBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NucHJpbnRmX2J0Zl9wcm90byA9IHtcbiBcdC5ncGxfb25seVx0PSBmYWxzZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fV1JJVEUsXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzJfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmc1X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtMTIxOCw3ICsxMjE4LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfYnJhbmNoX3NuYXBzaG90X3Byb3RvID0ge1xuIFx0LmdwbF9vbmx5XHQ9IHRydWUsXG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmcyX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gfTtcbiBcbiBCUEZfQ0FMTF8zKGdldF9mdW5jX2FyZywgdm9pZCAqLCBjdHgsIHUzMiwgbiwgdTY0ICosIHZhbHVlKVxuQEAgLTE0MjEsNyArMTQyMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3BlcmZfZXZlbnRfb3V0cHV0X3Byb3RvX3RwID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQ09OU1RfTUFQX1BUUixcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIH07XG4gXG4gQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWRfdHAsIHZvaWQgKiwgdHBfYnVmZiwgc3RydWN0IGJwZl9tYXAgKiwgbWFwLFxuQEAgLTE0NjIsNyArMTQ2Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19wcm90b190cCA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTE1MjQsMTIgKzE1MjQsMTIgQEAgQlBGX0NBTExfMyhicGZfcGVyZl9wcm9nX3JlYWRfdmFsdWUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wZXJmX3Byb2dfcmVhZF92YWx1ZV9wcm90byA9IHtcbi0gICAgICAgICAuZnVuYyAgICAgICAgICAgPSBicGZfcGVyZl9wcm9nX3JlYWRfdmFsdWUsXG4tICAgICAgICAgLmdwbF9vbmx5ICAgICAgID0gdHJ1ZSxcbi0gICAgICAgICAucmV0X3R5cGUgICAgICAgPSBSRVRfSU5URUdFUixcbi0gICAgICAgICAuYXJnMV90eXBlICAgICAgPSBBUkdfUFRSX1RPX0NUWCxcbi0gICAgICAgICAuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tICAgICAgICAgLmFyZzNfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuZnVuYyAgICAgICAgICAgPSBicGZfcGVyZl9wcm9nX3JlYWRfdmFsdWUsXG4rXHQuZ3BsX29ubHkgICAgICAgPSB0cnVlLFxuK1x0LnJldF90eXBlICAgICAgID0gUkVUX0lOVEVHRVIsXG4rXHQuYXJnMV90eXBlICAgICAgPSBBUkdfUFRSX1RPX0NUWCxcbitcdC5hcmcyX3R5cGUgICAgICA9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbitcdC5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzQoYnBmX3JlYWRfYnJhbmNoX3JlY29yZHMsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxuQEAgLTE1NjYsNyArMTU2Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlYWRfYnJhbmNoX3JlY29yZHNfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGUgICAgICAgPSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGUgICAgICA9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZSAgICAgID0gQVJHX1BUUl9UT19NRU1fT1JfTlVMTCB8IE1FTV9XUklURSxcbi1cdC5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnM190eXBlICAgICAgPSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGUgICAgICA9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTE2NDYsNyArMTY0Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3BlcmZfZXZlbnRfb3V0cHV0X3Byb3RvX3Jhd190cCA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX01BUF9QVFIsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9vdXRwdXRfcHJvdG87XG5AQCAtMTcwMSw3ICsxNzAxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvX3Jhd190cCA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDBiN2FmZGQwYWU0NzQ4Li5lYjBiNzA2YWY0YjI5NiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTE3NDcsNyArMTc0Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9zdG9yZV9ieXRlc19wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC0xNzg0LDcgKzE3ODQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfbG9hZF9ieXRlc19wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gaW50IF9fYnBmX3NrYl9sb2FkX2J5dGVzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvZmZzZXQsIHZvaWQgKnRvLCB1MzIgbGVuKVxuQEAgLTE4MjMsNyArMTgyMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2Zsb3dfZGlzc2VjdG9yX2xvYWRfYnl0ZXNfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzUoYnBmX3NrYl9sb2FkX2J5dGVzX3JlbGF0aXZlLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG5AQCAtMTg2Nyw3ICsxODY3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2xvYWRfYnl0ZXNfcmVsYXRpdmVfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmc1X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtMjA2Myw5ICsyMDYzLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY3N1bV9kaWZmX3Byb3RvID0ge1xuIFx0LnBrdF9hY2Nlc3NcdD0gdHJ1ZSxcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBQVFJfTUFZQkVfTlVMTCB8IE1FTV9SRE9OTFksXG4tXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnMl90eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IFBUUl9NQVlCRV9OVUxMIHwgTUVNX1JET05MWSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuQEAgLTI2MjEsNyArMjYyMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlZGlyZWN0X25laWdoX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IFBUUl9NQVlCRV9OVUxMIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnM190eXBlICAgICAgPSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtNDE5NCw3ICs0MTk0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2xvYWRfYnl0ZXNfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIGludCBfX2JwZl94ZHBfbG9hZF9ieXRlcyhzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIG9mZnNldCwgdm9pZCAqYnVmLCB1MzIgbGVuKVxuQEAgLTQyMjYsNyArNDIyNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9zdG9yZV9ieXRlc19wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gaW50IF9fYnBmX3hkcF9zdG9yZV9ieXRlcyhzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIG9mZnNldCwgdm9pZCAqYnVmLCB1MzIgbGVuKVxuQEAgLTQ3ODksNyArNDc4OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9ldmVudF9vdXRwdXRfcHJvdG8gPSB7XG4gXHQuYXJnMl90eXBlXHQ9IEFSR19DT05TVF9NQVBfUFRSLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gfTtcbiBcbiBCVEZfSURfTElTVF9TSU5HTEUoYnBmX3NrYl9vdXRwdXRfYnRmX2lkcywgc3RydWN0LCBza19idWZmKVxuQEAgLTQ4MDMsNyArNDgwMyw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX291dHB1dF9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX01BUF9QVFIsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBicGZfdHVubmVsX2tleV9hZih1NjQgZmxhZ3MpXG5AQCAtNDg4Niw3ICs0ODg2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2dldF90dW5uZWxfa2V5X3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC00OTIxLDcgKzQ5MjEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3R1bm5lbF9vcHRfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBzdGF0aWMgc3RydWN0IG1ldGFkYXRhX2RzdCBfX3BlcmNwdSAqbWRfZHN0O1xuQEAgLTUwMDMsNyArNTAwMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9zZXRfdHVubmVsX2tleV9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtNTAzMSw3ICs1MDMxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX3NldF90dW5uZWxfb3B0X3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG5AQCAtNTIwMyw3ICs1MjAzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2V2ZW50X291dHB1dF9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX01BUF9QVFIsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIEJURl9JRF9MSVNUX1NJTkdMRShicGZfeGRwX291dHB1dF9idGZfaWRzLCBzdHJ1Y3QsIHhkcF9idWZmKVxuQEAgLTUyMTcsNyArNTIxNyw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX291dHB1dF9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0NPTlNUX01BUF9QVFIsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIEJQRl9DQUxMXzEoYnBmX2dldF9zb2NrZXRfY29va2llLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IpXG5AQCAtNTc2NCw3ICs1NzY0LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19zZXRzb2Nrb3B0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gQlBGX0NBTExfNShicGZfc2tfZ2V0c29ja29wdCwgc3RydWN0IHNvY2sgKiwgc2ssIGludCwgbGV2ZWwsXG5AQCAtNTc4MSw3ICs1NzgxLDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19nZXRzb2Nrb3B0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19VTklOSVRfTUVNLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gQlBGX0NBTExfNShicGZfc2tfc2V0c29ja29wdF9ub2RlbGF5LCBzdHJ1Y3Qgc29jayAqLCBzaywgaW50LCBsZXZlbCxcbkBAIC01ODA1LDcgKzU4MDUsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX3NldHNvY2tvcHRfbm9kZWxheV9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzUoYnBmX3VubG9ja2VkX3NrX3NldHNvY2tvcHQsIHN0cnVjdCBzb2NrICosIHNrLCBpbnQsIGxldmVsLFxuQEAgLTU4MjIsNyArNTgyMiw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdW5sb2NrZWRfc2tfc2V0c29ja29wdF9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzUoYnBmX3VubG9ja2VkX3NrX2dldHNvY2tvcHQsIHN0cnVjdCBzb2NrICosIHNrLCBpbnQsIGxldmVsLFxuQEAgLTU4MzksNyArNTgzOSw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdW5sb2NrZWRfc2tfZ2V0c29ja29wdF9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzUoYnBmX3NvY2tfYWRkcl9zZXRzb2Nrb3B0LCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICosIGN0eCxcbkBAIC01ODU2LDcgKzU4NTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2V0c29ja29wdF9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzUoYnBmX3NvY2tfYWRkcl9nZXRzb2Nrb3B0LCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICosIGN0eCxcbkBAIC01ODczLDcgKzU4NzMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfZ2V0c29ja29wdF9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgc2tfYnBmX3NldF9nZXRfYnlwYXNzX3Byb3RfbWVtKHN0cnVjdCBzb2NrICpzayxcbkBAIC01OTE4LDcgKzU5MTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2NyZWF0ZV9zZXRzb2Nrb3B0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gQlBGX0NBTExfNShicGZfc29ja19jcmVhdGVfZ2V0c29ja29wdCwgc3RydWN0IHNvY2sgKiwgc2ssIGludCwgbGV2ZWwsXG5AQCAtNTk0NCw3ICs1OTQ0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19jcmVhdGVfZ2V0c29ja29wdF9wcm90byA9IHtcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzUoYnBmX3NvY2tfb3BzX3NldHNvY2tvcHQsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqLCBicGZfc29jayxcbkBAIC01OTcwLDcgKzU5NzAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX29wc19zZXRzb2Nrb3B0X3Byb3RvID0ge1xuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzVfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmc1X3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gc3RhdGljIGludCBicGZfc29ja19vcHNfZ2V0X3N5bihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKmJwZl9zb2NrLFxuQEAgLTYwODAsNyArNjA4MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfb3BzX2dldHNvY2tvcHRfcHJvdG8gPSB7XG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBCUEZfQ0FMTF8yKGJwZl9zb2NrX29wc19jYl9mbGFnc19zZXQsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqLCBicGZfc29jayxcbkBAIC02MTQ3LDcgKzYxNDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9iaW5kX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIH07XG4gXG4gI2lmZGVmIENPTkZJR19YRlJNXG5AQCAtNjIwMCw3ICs2MjAwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2dldF94ZnJtX3N0YXRlX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnNF90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuICNlbmRpZlxuQEAgLTY2MDcsNyArNjYwNyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9maWJfbG9va3VwX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9XUklURSxcbi1cdC5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzNfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbkBAIC02NjY3LDcgKzY2NjcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZmliX2xvb2t1cF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGUgICAgICA9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZSAgICAgID0gQVJHX1BUUl9UT19NRU0gfCBNRU1fV1JJVEUsXG4tXHQuYXJnM190eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRSxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtNjg2NSw3ICs2ODY1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X2luX3B1c2hfZW5jYXBfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVcbitcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3RfeG1pdF9wdXNoX2VuY2FwX3Byb3RvID0ge1xuQEAgLTY4NzUsNyArNjg3NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF94bWl0X3B1c2hfZW5jYXBfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVcbitcdC5hcmc0X3R5cGVcdD0gQVJHX01FTV9TSVpFXG4gfTtcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcbkBAIC02OTE5LDcgKzY5MTksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlc19wcm90byA9IHtcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmczX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzRfdHlwZVx0PSBBUkdfQ09OU1RfU0laRVxuK1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkVcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGJwZl91cGRhdGVfc3JoX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpXG5AQCAtNzAwOCw3ICs3MDA4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3NlZzZfYWN0aW9uX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNF90eXBlXHQ9IEFSR19DT05TVF9TSVpFXG4rXHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRVxuIH07XG4gXG4gQlBGX0NBTExfMyhicGZfbHd0X3NlZzZfYWRqdXN0X3NyaCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcbkBAIC03MjQ5LDcgKzcyNDksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX1NPQ0tfQ09NTU9OX09SX05VTEwsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuQEAgLTcyNjgsNyArNzI2OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX1BUUl9UT19TT0NLRVRfT1JfTlVMTCxcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc1X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG5AQCAtNzI4Nyw3ICs3Mjg3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfbG9va3VwX3VkcF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX1NPQ0tFVF9PUl9OVUxMLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbkBAIC03MzExLDcgKzczMTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za2NfbG9va3VwX3RjcF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX1NPQ0tfQ09NTU9OX09SX05VTEwsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuQEAgLTczMzUsNyArNzMzNSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjX3NrX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX1BUUl9UT19TT0NLRVRfT1JfTlVMTCxcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbiBcdC5hcmc1X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG5AQCAtNzM1OSw3ICs3MzU5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNfc2tfbG9va3VwX3VkcF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX1NPQ0tFVF9PUl9OVUxMLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbkBAIC03Mzk3LDcgKzczOTcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfc2tfbG9va3VwX3VkcF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZSAgICAgICA9IFJFVF9QVFJfVE9fU09DS0VUX09SX05VTEwsXG4gXHQuYXJnMV90eXBlICAgICAgPSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGUgICAgICA9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGUgICAgICA9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnM190eXBlICAgICAgPSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGUgICAgICA9IEFSR19BTllUSElORyxcbiBcdC5hcmc1X3R5cGUgICAgICA9IEFSR19BTllUSElORyxcbiB9O1xuQEAgLTc0MjEsNyArNzQyMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZSAgICAgICA9IFJFVF9QVFJfVE9fU09DS19DT01NT05fT1JfTlVMTCxcbiBcdC5hcmcxX3R5cGUgICAgICA9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZSAgICAgID0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZSAgICAgID0gQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyxcbitcdC5hcmczX3R5cGUgICAgICA9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIFx0LmFyZzRfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzVfdHlwZSAgICAgID0gQVJHX0FOWVRISU5HLFxuIH07XG5AQCAtNzQ0NSw3ICs3NDQ1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX3NrX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGUgICAgICAgPSBSRVRfUFRSX1RPX1NPQ0tFVF9PUl9OVUxMLFxuIFx0LmFyZzFfdHlwZSAgICAgID0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlICAgICAgPSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlICAgICAgPSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzNfdHlwZSAgICAgID0gQVJHX01FTV9TSVpFX09SX1pFUk8sXG4gXHQuYXJnNF90eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnNV90eXBlICAgICAgPSBBUkdfQU5ZVEhJTkcsXG4gfTtcbkBAIC03NDY1LDcgKzc0NjUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX1BUUl9UT19TT0NLX0NPTU1PTl9PUl9OVUxMLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbkBAIC03NDg0LDcgKzc0ODQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX1NPQ0tFVF9PUl9OVUxMLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbkBAIC03NTAzLDcgKzc1MDMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfUFRSX1RPX1NPQ0tFVF9PUl9OVUxMLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzVfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbkBAIC03ODIzLDkgKzc4MjMsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y3BfY2hlY2tfc3luY29va2llX3Byb3RvID0ge1xuIFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0JURl9JRF9TT0NLX0NPTU1PTixcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRSxcbitcdC5hcmczX3R5cGVcdD0gQVJHX01FTV9TSVpFLFxuIFx0LmFyZzRfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnNV90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzVfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gfTtcbiBcbiBCUEZfQ0FMTF81KGJwZl90Y3BfZ2VuX3N5bmNvb2tpZSwgc3RydWN0IHNvY2sgKiwgc2ssIHZvaWQgKiwgaXBoLCB1MzIsIGlwaF9sZW4sXG5AQCAtNzg5Miw5ICs3ODkyLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX2dlbl9zeW5jb29raWVfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQlRGX0lEX1NPQ0tfQ09NTU9OLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnNF90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmc1X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnNV90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzMoYnBmX3NrX2Fzc2lnbiwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCBzdHJ1Y3Qgc29jayAqLCBzaywgdTY0LCBmbGFncylcbkBAIC04MDQ4LDcgKzgwNDgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX29wc19sb2FkX2hkcl9vcHRfcHJvdG8gPSB7XG4gXHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9XUklURSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtODEyNiw3ICs4MTI2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc29ja19vcHNfc3RvcmVfaGRyX29wdF9wcm90byA9IHtcbiBcdC5yZXRfdHlwZVx0PSBSRVRfSU5URUdFUixcbiBcdC5hcmcxX3R5cGVcdD0gQVJHX1BUUl9UT19DVFgsXG4gXHQuYXJnMl90eXBlXHQ9IEFSR19QVFJfVE9fTUVNIHwgTUVNX1JET05MWSxcbi1cdC5hcmczX3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRSxcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG5AQCAtODIyMSw3ICs4MjIxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX3Jhd19nZW5fc3luY29va2llX2lwdjRfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fRklYRURfU0laRV9NRU0gfCBNRU1fUkRPTkxZLFxuIFx0LmFyZzFfc2l6ZVx0PSBzaXplb2Yoc3RydWN0IGlwaGRyKSxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX1BUUl9UT19NRU0gfCBNRU1fUkRPTkxZLFxuLVx0LmFyZzNfdHlwZVx0PSBBUkdfQ09OU1RfU0laRV9PUl9aRVJPLFxuK1x0LmFyZzNfdHlwZVx0PSBBUkdfTUVNX1NJWkVfT1JfWkVSTyxcbiB9O1xuIFxuIEJQRl9DQUxMXzMoYnBmX3RjcF9yYXdfZ2VuX3N5bmNvb2tpZV9pcHY2LCBzdHJ1Y3QgaXB2NmhkciAqLCBpcGgsXG5AQCAtODI1Myw3ICs4MjUzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNwX3Jhd19nZW5fc3luY29va2llX2lwdjZfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fRklYRURfU0laRV9NRU0gfCBNRU1fUkRPTkxZLFxuIFx0LmFyZzFfc2l6ZVx0PSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfUFRSX1RPX01FTSB8IE1FTV9SRE9OTFksXG4tXHQuYXJnM190eXBlXHQ9IEFSR19DT05TVF9TSVpFX09SX1pFUk8sXG4rXHQuYXJnM190eXBlXHQ9IEFSR19NRU1fU0laRV9PUl9aRVJPLFxuIH07XG4gXG4gQlBGX0NBTExfMihicGZfdGNwX3Jhd19jaGVja19zeW5jb29raWVfaXB2NCwgc3RydWN0IGlwaGRyICosIGlwaCxcbkBAIC0xMTcyNiw3ICsxMTcyNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gc2tfcmV1c2Vwb3J0X2xvYWRfYnl0ZXNfcHJvdG8gPSB7XG4gXHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuIFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gXHQuYXJnM190eXBlXHQ9IEFSR19QVFJfVE9fVU5JTklUX01FTSxcbi1cdC5hcmc0X3R5cGVcdD0gQVJHX0NPTlNUX1NJWkUsXG4rXHQuYXJnNF90eXBlXHQ9IEFSR19NRU1fU0laRSxcbiB9O1xuIFxuIEJQRl9DQUxMXzUoc2tfcmV1c2Vwb3J0X2xvYWRfYnl0ZXNfcmVsYXRpdmUsXG5AQCAtMTE3NDQsNyArMTE3NDQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIHNrX3JldXNlcG9ydF9sb2FkX2J5dGVzX3JlbGF0aXZlX3Byb3RvID0ge1xuIFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbiBcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIFx0LmFyZzNfdHlwZVx0PSBBUkdfUFRSX1RPX1VOSU5JVF9NRU0sXG4tXHQuYXJnNF90eXBlXHQ9IEFSR19DT05TVF9TSVpFLFxuK1x0LmFyZzRfdHlwZVx0PSBBUkdfTUVNX1NJWkUsXG4gXHQuYXJnNV90eXBlXHQ9IEFSR19BTllUSElORyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5pbmRleCBiZTk3ZjY4ODdmMGU3Zi4uYTgxZmFhNzA5ZGQ1YmIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5AQCAtNjcsNiArNjcsNyBAQFxuICNpbmNsdWRlIFwidmVyaWZpZXJfbWFza2luZy5za2VsLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfbWF5X2dvdG9fMS5za2VsLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfbWF5X2dvdG9fMi5za2VsLmhcIlxuKyNpbmNsdWRlIFwidmVyaWZpZXJfbWVtX3NpemVfcmVnLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9tZXRhX2FjY2Vzcy5za2VsLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfbW92c3guc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX210dS5za2VsLmhcIlxuQEAgLTIyMSw2ICsyMjIsNyBAQCB2b2lkIHRlc3RfdmVyaWZpZXJfbWFwX3JldF92YWwodm9pZCkgICAgICAgICAgeyBSVU4odmVyaWZpZXJfbWFwX3JldF92YWwpOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX21hc2tpbmcodm9pZCkgICAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX21hc2tpbmcpOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX21heV9nb3RvXzEodm9pZCkgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX21heV9nb3RvXzEpOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX21heV9nb3RvXzIodm9pZCkgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX21heV9nb3RvXzIpOyB9XG4rdm9pZCB0ZXN0X3ZlcmlmaWVyX21lbV9zaXplX3JlZyh2b2lkKSAgICAgICAgIHsgUlVOKHZlcmlmaWVyX21lbV9zaXplX3JlZyk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfbWV0YV9hY2Nlc3Modm9pZCkgICAgICAgICAgeyBSVU4odmVyaWZpZXJfbWV0YV9hY2Nlc3MpOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX21vdnN4KHZvaWQpICAgICAgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9tb3ZzeCk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfbXVsKHZvaWQpICAgICAgICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfbXVsKTsgfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jZ3JwX2tmdW5jX2ZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jZ3JwX2tmdW5jX2ZhaWx1cmUuY1xuaW5kZXggZDBkNjVkNmQ0NTBjZjUuLmVmZTdiY2FlNzBmODVhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NncnBfa2Z1bmNfZmFpbHVyZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY2dycF9rZnVuY19mYWlsdXJlLmNcbkBAIC02NCw3ICs2NCw3IEBAIGludCBCUEZfUFJPRyhjZ3JwX2tmdW5jX2FjcXVpcmVfbm9fbnVsbF9jaGVjaywgc3RydWN0IGNncm91cCAqY2dycCwgY29uc3QgY2hhciAqXG4gfVxuIFxuIFNFQyhcInRwX2J0Zi9jZ3JvdXBfbWtkaXJcIilcbi1fX2ZhaWx1cmUgX19tc2coXCJSMSBwb2ludGVyIHR5cGUgU1RSVUNUIGNncm91cCBtdXN0IHBvaW50XCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiUjEgaXMgZnAgZXhwZWN0ZWQgU1RSVUNUIGNncm91cFwiKVxuIGludCBCUEZfUFJPRyhjZ3JwX2tmdW5jX2FjcXVpcmVfZnAsIHN0cnVjdCBjZ3JvdXAgKmNncnAsIGNvbnN0IGNoYXIgKnBhdGgpXG4ge1xuIFx0c3RydWN0IGNncm91cCAqYWNxdWlyZWQsICpzdGFja19jZ3JwID0gKHN0cnVjdCBjZ3JvdXAgKilcdTAwMjZwYXRoO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tZW1fcmRvbmx5X3VudHJ1c3RlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21lbV9yZG9ubHlfdW50cnVzdGVkLmNcbmluZGV4IDViNDQ1Mzc0N2MyMzA4Li4wOTUyZDFlYmYwZjE3YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tZW1fcmRvbmx5X3VudHJ1c3RlZC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWVtX3Jkb25seV91bnRydXN0ZWQuY1xuQEAgLTEzNyw3ICsxMzcsNyBAQCBpbnQgaGVscGVyX3BhcmFtX25vdF9vayh2b2lkICpjdHgpXG4gXG4gXHRwID0gYnBmX3Jkb25seV9jYXN0KDAsIDApO1xuIFx0Lypcbi1cdCAqIEFueSBoZWxwZXIgd2l0aCBBUkdfQ09OU1RfU0laRV9PUl9aRVJPIGNvbnN0cmFpbnQgd2lsbCBkbyxcbitcdCAqIEFueSBoZWxwZXIgd2l0aCBBUkdfTUVNX1NJWkVfT1JfWkVSTyBjb25zdHJhaW50IHdpbGwgZG8sXG4gXHQgKiB0aGUgbW9zdCBwZXJtaXNzaXZlIGNvbnN0cmFpbnRcbiBcdCAqL1xuIFx0YnBmX2NvcHlfZnJvbV91c2VyKHAsIDAsICh2b2lkICopNDIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX2tmdW5jX2ZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX2tmdW5jX2ZhaWx1cmUuY1xuaW5kZXggODk0MmI1NDc4MTI5MTcuLjVjOTliMWU2NTMyYmZkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfa2Z1bmNfZmFpbHVyZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmNcbkBAIC01MCw3ICs1MCw3IEBAIGludCBCUEZfUFJPRyh0YXNrX2tmdW5jX2FjcXVpcmVfdW50cnVzdGVkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHU2NCBjbG9uZV9mXG4gfVxuIFxuIFNFQyhcInRwX2J0Zi90YXNrX25ld3Rhc2tcIilcbi1fX2ZhaWx1cmUgX19tc2coXCJSMSBwb2ludGVyIHR5cGUgU1RSVUNUIHRhc2tfc3RydWN0IG11c3QgcG9pbnRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJSMSBpcyBmcCBleHBlY3RlZCBTVFJVQ1QgdGFza19zdHJ1Y3RcIilcbiBpbnQgQlBGX1BST0codGFza19rZnVuY19hY3F1aXJlX2ZwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHU2NCBjbG9uZV9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmFjcXVpcmVkLCAqc3RhY2tfdGFzayA9IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKilcdTAwMjZjbG9uZV9mbGFncztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYm91bmRzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYm91bmRzLmNcbmluZGV4IGJjMDM4YWMyZGY5OGUyLi4xYTI3M2U0MTZmZWRmZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9ib3VuZHMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2JvdW5kcy5jXG5AQCAtMTE5NSw3ICsxMTk1LDcgQEAgbDBfJT06XHRyMSA9IHI2O1x0XHRcdFx0XHRcXFxuIFx0cjMgKz0gLTg7XHRcdFx0XHRcdFxcXG4gXHRyNSA9IDA7XHRcdFx0XHRcdFx0XFxcbiBcdC8qIFRoZSA0dGggYXJndW1lbnQgb2YgYnBmX3NrYl9zdG9yZV9ieXRlcyBpcyBkZWZpbmVkIGFzIFxcXG4tXHQgKiBBUkdfQ09OU1RfU0laRSwgc28gMCBpcyBub3QgYWxsb3dlZC4gVGhlICdyNCAhPSAwJyBcXFxuK1x0ICogQVJHX01FTV9TSVpFLCBzbyAwIGlzIG5vdCBhbGxvd2VkLiBUaGUgJ3I0ICE9IDAnIFxcXG4gXHQgKiBpcyBwcm92aWRpbmcgdXMgdGhpcyBleGNsdXNpb24gb2YgemVybyBmcm9tIGluaXRpYWwgXFxcbiBcdCAqIFswLCA3XSByYW5nZS5cdFx0XHRcdFxcXG4gXHQgKi9cdFx0XHRcdFx0XHRcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfYWNjZXNzX3Zhcl9sZW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfYWNjZXNzX3Zhcl9sZW4uY1xuaW5kZXggZjJjNTRlNGQ4OWViZWYuLjM0M2ZjMDhkOTc0Nzk4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2hlbHBlcl9hY2Nlc3NfdmFyX2xlbi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfaGVscGVyX2FjY2Vzc192YXJfbGVuLmNcbkBAIC04NSw3ICs4NSw3IEBAIF9fbmFrZWQgdm9pZCBzdGFja19iaXR3aXNlX2FuZF96ZXJvX2luY2x1ZGVkKHZvaWQpXG4gXHRyMiArPSAtNjQ7XHRcdFx0XHRcdFxcXG4gXHRyNCA9IDA7XHRcdFx0XHRcdFx0XFxcbiBcdC8qIENhbGwgYnBmX3JpbmdidWZfb3V0cHV0KCksIGl0IGlzIG9uZSBvZiBhIGZldyBoZWxwZXIgZnVuY3Rpb25zIHdpdGhcXFxuLVx0ICogQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyBwYXJhbWV0ZXIgYWxsb3dlZCBpbiB1bnByaXYgbW9kZS5cXFxuK1x0ICogQVJHX01FTV9TSVpFX09SX1pFUk8gcGFyYW1ldGVyIGFsbG93ZWQgaW4gdW5wcml2IG1vZGUuXFxcbiBcdCAqIEZvciB1bnByaXYgdGhpcyBzaG91bGQgc2lnbmFsIGFuIGVycm9yLCBiZWNhdXNlIG1lbW9yeSBhdCBcdTAwMjZmcFstNjRdIGlzXFxcbiBcdCAqIG5vdCBpbml0aWFsaXplZC5cdFx0XHRcdFxcXG4gXHQgKi9cdFx0XHRcdFx0XHRcXFxuQEAgLTI3OCw3ICsyNzgsNyBAQCBfX25ha2VkIHZvaWQgc3RhY2tfam1wX25vX21pbl9jaGVjayh2b2lkKVxuIFx0cjIgKz0gLTY0O1x0XHRcdFx0XHRcXFxuIFx0cjQgPSAwO1x0XHRcdFx0XHRcdFxcXG4gXHQvKiBDYWxsIGJwZl9yaW5nYnVmX291dHB1dCgpLCBpdCBpcyBvbmUgb2YgYSBmZXcgaGVscGVyIGZ1bmN0aW9ucyB3aXRoXFxcbi1cdCAqIEFSR19DT05TVF9TSVpFX09SX1pFUk8gcGFyYW1ldGVyIGFsbG93ZWQgaW4gdW5wcml2IG1vZGUuXFxcbitcdCAqIEFSR19NRU1fU0laRV9PUl9aRVJPIHBhcmFtZXRlciBhbGxvd2VkIGluIHVucHJpdiBtb2RlLlxcXG4gXHQgKiBGb3IgdW5wcml2IHRoaXMgc2hvdWxkIHNpZ25hbCBhbiBlcnJvciwgYmVjYXVzZSBtZW1vcnkgYXQgXHUwMDI2ZnBbLTY0XSBpc1xcXG4gXHQgKiBub3QgaW5pdGlhbGl6ZWQuXHRcdFx0XHRcXFxuIFx0ICovXHRcdFx0XHRcdFx0XFxcbkBAIC03NzgsNyArNzc4LDcgQEAgX19uYWtlZCB2b2lkIHZhcmlhYmxlX21lbW9yeV84X2J5dGVzX2xlYWsodm9pZClcbiBcdHIzICs9IDE7XHRcdFx0XHRcdFxcXG4gXHRyNCA9IDA7XHRcdFx0XHRcdFx0XFxcbiBcdC8qIENhbGwgYnBmX3JpbmdidWZfb3V0cHV0KCksIGl0IGlzIG9uZSBvZiBhIGZldyBoZWxwZXIgZnVuY3Rpb25zIHdpdGhcXFxuLVx0ICogQVJHX0NPTlNUX1NJWkVfT1JfWkVSTyBwYXJhbWV0ZXIgYWxsb3dlZCBpbiB1bnByaXYgbW9kZS5cXFxuK1x0ICogQVJHX01FTV9TSVpFX09SX1pFUk8gcGFyYW1ldGVyIGFsbG93ZWQgaW4gdW5wcml2IG1vZGUuXFxcbiBcdCAqIEZvciB1bnByaXYgdGhpcyBzaG91bGQgc2lnbmFsIGFuIGVycm9yLCBiZWNhdXNlIG1lbW9yeSByZWdpb24gWzEsIDY0XVxcXG4gXHQgKiBhdCBcdTAwMjZmcFstNjRdIGlzIG5vdCBmdWxseSBpbml0aWFsaXplZC5cdFxcXG4gXHQgKi9cdFx0XHRcdFx0XHRcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9oZWxwZXJfdmFsdWVfYWNjZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfaGVscGVyX3ZhbHVlX2FjY2Vzcy5jXG5pbmRleCA2ZDJhMzg1OTdjMzRmNC4uYzY2MDNhMTE4ZmRjMzkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfaGVscGVyX3ZhbHVlX2FjY2Vzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfaGVscGVyX3ZhbHVlX2FjY2Vzcy5jXG5AQCAtOTEsNyArOTEsNyBAQCBsMF8lPTpcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiBcbiAvKiBDYWxsIGEgZnVuY3Rpb24gdGFraW5nIGEgcG9pbnRlciBhbmQgYSBzaXplIHdoaWNoIGRvZXNuJ3QgYWxsb3cgdGhlIHNpemUgdG9cbiAgKiBiZSB6ZXJvIChpLmUuIGJwZl90cmFjZV9wcmludGsoKSBkZWNsYXJlcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGJlXG4tICogQVJHX0NPTlNUX1NJWkUsIG5vdCBBUkdfQ09OU1RfU0laRV9PUl9aRVJPKS4gV2UgYXR0ZW1wdCB0byBwYXNzIHplcm8gZm9yIHRoZVxuKyAqIEFSR19NRU1fU0laRSwgbm90IEFSR19NRU1fU0laRV9PUl9aRVJPKS4gV2UgYXR0ZW1wdCB0byBwYXNzIHplcm8gZm9yIHRoZVxuICAqIHNpemUgYW5kIGV4cGVjdCB0byBmYWlsLlxuICAqL1xuIFNFQyhcInRyYWNlcG9pbnRcIilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbWVtX3NpemVfcmVnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbWVtX3NpemVfcmVnLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNzhhOWFkMjJiMTBkZmRcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9tZW1fc2l6ZV9yZWcuY1xuQEAgLTAsMCArMSw2MCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuKyNpbmNsdWRlIFwiYnBmX2tmdW5jcy5oXCJcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rXG4rc3RydWN0IGlubmVyX21hcCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X190eXBlKHZhbHVlLCBpbnQpO1xuK30gaW5uZXJfbWFwIFNFQyhcIi5tYXBzXCIpO1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZX09GX01BUFMpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX2FycmF5KHZhbHVlcywgc3RydWN0IGlubmVyX21hcCk7XG4rfSBvdXRlcl9tYXAgU0VDKFwiLm1hcHNcIikgPSB7XG4rXHQudmFsdWVzID0geyBbMF0gPSBcdTAwMjZpbm5lcl9tYXAgfSxcbit9O1xuK1xuKy8qIEFuIHVuLW5hcnJvd2VkIG1hcC1vZi1tYXBzIHZhbHVlIG11c3QgYmUgcmVqZWN0ZWQgYXMgYSBfX251bGxhYmxlIGtmdW5jIG1lbSBidWZmZXIgKi9cbitTRUMoXCI/dGNcIilcbitfX2ZhaWx1cmVcbitpbnQgbWFwb2ZtYXBzX3ZhbHVlX2FzX2tmdW5jX21lbV9idWYoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyIGRwdHI7XG4rXHRfX3UzMiBrZXkgPSAwO1xuK1x0dm9pZCAqaW5uZXI7XG4rXHRjaGFyICpwO1xuK1xuK1x0aW5uZXIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNm91dGVyX21hcCwgXHUwMDI2a2V5KTtcbitcdC8qIGludGVudGlvbmFsbHkgTk9UIE5VTEwtY2hlY2tlZDogcmVnIHN0YXlzIFBUUl9UT19NQVBfVkFMVUVfT1JfTlVMTCAqL1xuK1xuK1x0YnBmX2R5bnB0cl9mcm9tX3NrYihza2IsIDAsIFx1MDAyNmRwdHIpO1xuK1x0LyogcGFzcyB0aGUgdW4tbmFycm93ZWQgbWFwLW9mLW1hcHMgdmFsdWUgYXMgdGhlIHNjcmF0Y2ggYnVmZmVyICovXG4rXHRwID0gYnBmX2R5bnB0cl9zbGljZShcdTAwMjZkcHRyLCAwLCBpbm5lciwgOCk7XG4rXHRpZiAocClcbitcdFx0cmV0dXJuIHBbMF07XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogQW4gdW4tbmFycm93ZWQgbWFwLW9mLW1hcHMgdmFsdWUgbXVzdCBiZSByZWplY3RlZCBhcyBhIFBUUl9NQVlCRV9OVUxMIGhlbHBlciBtZW0gYnVmZmVyICovXG4rU0VDKFwiP3RjXCIpXG4rX19mYWlsdXJlXG4raW50IG1hcG9mbWFwc192YWx1ZV9hc19oZWxwZXJfbWVtX2J1ZihzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0X191MzIga2V5ID0gMDtcbitcdHZvaWQgKmlubmVyO1xuK1xuK1x0aW5uZXIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNm91dGVyX21hcCwgXHUwMDI2a2V5KTtcbitcdC8qIGludGVudGlvbmFsbHkgTk9UIE5VTEwtY2hlY2tlZDogcmVnIHN0YXlzIFBUUl9UT19NQVBfVkFMVUVfT1JfTlVMTCAqL1xuK1xuK1x0LyogQGZyb20gaXMgYSBudWxsYWJsZSByZWFkLW9ubHkgbWVtK3NpemUgYXJnOyBvdXRlciB2YWx1ZV9zaXplIGlzIDQgKi9cbitcdHJldHVybiBicGZfY3N1bV9kaWZmKGlubmVyLCA0LCBOVUxMLCAwLCAwKSArIHNrYi1cdTAwM2VsZW47XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jXG5pbmRleCAyODcwNzM4ZDkzZjdlYy4uOGYwYzQ1NDIxZjg5MzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jXG5AQCAtMjgsNyArMjgsNyBAQCBpbnQgQlBGX1BST0coZ2V0X3Rhc2tfZXhlX2ZpbGVfa2Z1bmNfbnVsbClcbiB9XG4gXG4gU0VDKFwibHNtLnMvaW5vZGVfZ2V0eGF0dHJcIilcbi1fX2ZhaWx1cmUgX19tc2coXCJSMSBwb2ludGVyIHR5cGUgU1RSVUNUIHRhc2tfc3RydWN0IG11c3QgcG9pbnQgdG8gc2NhbGFyLCBvciBzdHJ1Y3Qgd2l0aCBzY2FsYXJcIilcbitfX2ZhaWx1cmUgX19tc2coXCJSMSBpcyBmcCBleHBlY3RlZCBTVFJVQ1QgdGFza19zdHJ1Y3RcIilcbiBpbnQgQlBGX1BST0coZ2V0X3Rhc2tfZXhlX2ZpbGVfa2Z1bmNfZnApXG4ge1xuIFx0dTY0IHg7XG5AQCAtOTgsNyArOTgsNyBAQCBpbnQgQlBGX1BST0cocGF0aF9kX3BhdGhfa2Z1bmNfbnVsbClcbiB9XG4gXG4gU0VDKFwibHNtLnMvdGFza19hbGxvY1wiKVxuLV9fZmFpbHVyZSBfX21zZyhcIlIxIG11c3QgYmUgcmVmZXJlbmNlZCBvciB0cnVzdGVkXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiZGVyZWZlcmVuY2Ugb2YgbW9kaWZpZWQgdW50cnVzdGVkX3B0cl9cIilcbiBpbnQgQlBGX1BST0cocGF0aF9kX3BhdGhfa2Z1bmNfdW50cnVzdGVkX2Zyb21fYXJndW1lbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiB7XG4gXHRzdHJ1Y3QgcGF0aCAqcm9vdDtcbkBAIC0xMTIsNyArMTEyLDcgQEAgaW50IEJQRl9QUk9HKHBhdGhfZF9wYXRoX2tmdW5jX3VudHJ1c3RlZF9mcm9tX2FyZ3VtZW50LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tcbiB9XG4gXG4gU0VDKFwibHNtLnMvZmlsZV9vcGVuXCIpXG4tX19mYWlsdXJlIF9fbXNnKFwiUjEgbXVzdCBiZSByZWZlcmVuY2VkIG9yIHRydXN0ZWRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJkZXJlZmVyZW5jZSBvZiBtb2RpZmllZCB1bnRydXN0ZWRfcHRyX1wiKVxuIGludCBCUEZfUFJPRyhwYXRoX2RfcGF0aF9rZnVuY191bnRydXN0ZWRfZnJvbV9jdXJyZW50KVxuIHtcbiBcdHN0cnVjdCBwYXRoICpwd2Q7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL2NhbGxzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdmVyaWZpZXIvY2FsbHMuY1xuaW5kZXggMzAyZDcxMmUwZDdlZDIuLjhjZDYyNmUwNDU1MTU3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3ZlcmlmaWVyL2NhbGxzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi92ZXJpZmllci9jYWxscy5jXG5AQCAtMzEsNyArMzEsNyBAQFxuIFx0fSxcbiBcdC5wcm9nX3R5cGUgPSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyxcbiBcdC5yZXN1bHQgPSBSRUpFQ1QsXG4tXHQuZXJyc3RyID0gXCJSMSBwb2ludGVyIHR5cGUgU1RSVUNUIHByb2dfdGVzdF9mYWlsMSBtdXN0IHBvaW50IHRvIHNjYWxhclwiLFxuK1x0LmVycnN0ciA9IFwiUjEgaXMgZnAgZXhwZWN0ZWQgU1RSVUNUIHByb2dfdGVzdF9mYWlsMVwiLFxuIFx0LmZpeHVwX2tmdW5jX2J0Zl9pZCA9IHtcbiBcdFx0eyBcImJwZl9rZnVuY19jYWxsX3Rlc3RfZmFpbDFcIiwgMiB9LFxuIFx0fSxcbkBAIC00Niw3ICs0Niw3IEBAXG4gXHR9LFxuIFx0LnByb2dfdHlwZSA9IEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLFxuIFx0LnJlc3VsdCA9IFJFSkVDVCxcbi1cdC5lcnJzdHIgPSBcIm1heCBzdHJ1Y3QgbmVzdGluZyBkZXB0aCBleGNlZWRlZFxcblIxIHBvaW50ZXIgdHlwZSBTVFJVQ1QgcHJvZ190ZXN0X2ZhaWwyXCIsXG4rXHQuZXJyc3RyID0gXCJtYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcXG5SMSBpcyBmcCBleHBlY3RlZCBTVFJVQ1QgcHJvZ190ZXN0X2ZhaWwyXCIsXG4gXHQuZml4dXBfa2Z1bmNfYnRmX2lkID0ge1xuIFx0XHR7IFwiYnBmX2tmdW5jX2NhbGxfdGVzdF9mYWlsMlwiLCAyIH0sXG4gXHR9LFxuQEAgLTYxLDcgKzYxLDcgQEBcbiBcdH0sXG4gXHQucHJvZ190eXBlID0gQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsXG4gXHQucmVzdWx0ID0gUkVKRUNULFxuLVx0LmVycnN0ciA9IFwiUjEgcG9pbnRlciB0eXBlIFNUUlVDVCBwcm9nX3Rlc3RfZmFpbDMgbXVzdCBwb2ludCB0byBzY2FsYXJcIixcbitcdC5lcnJzdHIgPSBcIlIxIGlzIGZwIGV4cGVjdGVkIFNUUlVDVCBwcm9nX3Rlc3RfZmFpbDNcIixcbiBcdC5maXh1cF9rZnVuY19idGZfaWQgPSB7XG4gXHRcdHsgXCJicGZfa2Z1bmNfY2FsbF90ZXN0X2ZhaWwzXCIsIDIgfSxcbiBcdH0sXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwOToxNzowOC4xODMyNTAxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MzE5NTkwNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0OiBlQlBGIFZlcmlmaWVyIEtmdW5jIEFyZ3VtZW50IEhhbmRsaW5nKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtYWtpbmcgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBob3cgdGhlIGVCUEYgdmVyaWZpZXIgZGVhbHMgd2l0aCBhcmd1bWVudHMgdG8ga2Z1bmNzIGFuZCBoZWxwZXIgZnVuY3Rpb25zLiBJdCBzZWVtcyBsaWtlIGEgbG90IG9mIHRoZSBsb2dpYyBzdXJyb3VuZGluZyBhcmd1bWVudCB2YWxpZGF0aW9uIGlzIGJlaW5nIHJldmFtcGVkLiBUaGV5J3JlIGludHJvZHVjaW5nIGBfX2NvbnN0X21hcGAgYW5kIGBfX21hcGAgYW5ub3RhdGlvbnMgZm9yIGtmdW5jcywgcmVwbGFjaW5nIHNvbWUgb2YgdGhlIG9sZGVyIHN0dWZmLiAgRXNzZW50aWFsbHksIHRoZXJlJ3MgYSBzaGlmdCBpbiBob3cgdGhlIHZlcmlmaWVyIGRldGVybWluZXMgYW5kIHVzZXMgaW5mb3JtYXRpb24gYWJvdXQgY29uc3RhbnQgbWFwcywgcGFydGljdWxhcmx5IGR1cmluZyB0aGUgaGFuZGxpbmcgb2Yga2Z1bmNzLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSdyZSB0cnlpbmcgdG8gdW5pZnkgdGhlIGFyZ3VtZW50IGNoZWNraW5nIHByb2Nlc3MuICBXZSdyZSBnb2luZyBmcm9tIGBBUkdfQ09OU1RfU0laRWAgYW5kIGBBUkdfQ09OU1RfU0laRV9PUl9aRVJPYCB0byBgQVJHX01FTV9TSVpFYCBhbmQgYEFSR19NRU1fU0laRV9PUl9aRVJPYC4gIFRoaXMgd2hvbGUgYXJlYSBpcyBzdXBlciBzZW5zaXRpdmUsIGFuZCBhbnkgY2hhbmdlIGhhcyB0byBiZSBjYXJlZnVsbHkgc2NydXRpbml6ZWQuICBUaGVyZSdzIGFsc28gdGhpcyBuZXcgZnVuY3Rpb24sIGBnZW5fa2Z1bmNfYXJnX3Byb3RvKClgLCB3aGljaCBpcyB1c2VkIHRvIGdlbmVyYXRlIGBicGZfZnVuY19wcm90b2Agc3RydWN0dXJlcyBmb3Iga2Z1bmNzLCBzaW1pbGFyIHRvIGhvdyBpdOKAmXMgZG9uZSBmb3IgaGVscGVyIGZ1bmN0aW9ucy4gIFRoaXMgZGVmaW5pdGVseSBsb29rcyBsaWtlIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSB2ZXJpZmllci5cblxuSXQncyBjbGVhciB0aGF0IHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUgdmVyaWZpZXIgaXMgZ29pbmcgdG8gYmUgYWx0ZXJlZCBzaWduaWZpY2FudGx5LCBlc3BlY2lhbGx5IGluIGhvdyBpdCB2YWxpZGF0ZXMgdGhvc2UgYWxsLWltcG9ydGFudCBhcmd1bWVudHMgZm9yIGJvdGggQlBGIGhlbHBlcnMgYW5kIGtmdW5jcy4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIGBnZW5fa2Z1bmNfYXJnX3Byb3RvYCBpcyBhIGNyaXRpY2FsIG5ldyBwb2ludCwgYW5kIEkgbmVlZCB0byBzZWUgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgZXhpc3RpbmcgYXJndW1lbnQgdmFsaWRhdGlvbiByb3V0aW5lcy4gIFNwZWNpZmljYWxseSwgYGNoZWNrX2Z1bmNfYXJnKClgIGFuZCBgY2hlY2tfa2Z1bmNfYXJncygpYCBhcmUgYmVpbmcgbW9kaWZpZWQgdG8gZG8gYSBtb3JlIHVuaWZpZWQgYXJndW1lbnQgY2hlY2suICBgcHJvY2Vzc19tYXBfcHRyX2FyZygpYCBpcyBhbHNvIGJlaW5nIHR3ZWFrZWQgdG8gaGFuZGxlIG1hcCBwb2ludGVyIGFyZ3VtZW50cyBmb3IgYm90aCBoZWxwZXJzIGFuZCBrZnVuY3MuIFRoaXMgaXMgYSBsb3Qgb2YgdG91Y2hwb2ludHMgdG8gY2hlY2suXG5cblRoZSBlQlBGIHZlcmlmaWVyIGlzIGEgY29yZSBjb21wb25lbnQsIGFuZCBpdCdzIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQsIHNvICphbnkqIGNoYW5nZXMgaW4gdGhpcyBhcmVhIGFyZSBnb2luZyB0byBuZWVkIGEgbG90IG9mIGF0dGVudGlvbi4gR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMsIGFuZCB0aGUgY3JpdGljYWxpdHkgb2YgdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwsIEknbSB0aGlua2luZyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGludHJvZHVjZXMgc29tZSBuZXcgZnVuY3Rpb25hbGl0eSBhbmQgYWxzbyByZXVzZXMgZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmUgaW4gbmV3IHdheXMuIFRoZSBmb2N1cyBzaG91bGQgYmUgb24gdGhlIGFyZWFzIGltcGFjdGVkOlxuXG4qICAgYGdlbl9rZnVuY19hcmdfcHJvdG9gIC0gVGhpcyBvbmUgaXMgYnJhbmQgbmV3LCBzbyBpdOKAmXMgY3JpdGljYWwgdG8gdmVyaWZ5IGl0cyBiZWhhdmlvci5cbiogICBgZ2V0X2tmdW5jX2FyZ190eXBlYCAtIFRoaXMgaXMgcmVsYXRlZCB0byB0aGUgYXJndW1lbnQgdHlwZXMuXG4qICAgYHByb2Nlc3NfbWFwX3B0cl9hcmdgIC0gSXQncyBkZWFsaW5nIHdpdGggbWFwIHBvaW50ZXJzIGZvciBib3RoIGhlbHBlcnMgYW5kIGtmdW5jcywgd2hpY2ggaXMgYSBrZXkgYXJlYS5cbiogICBgY2hlY2tfa2Z1bmNfYXJnc2AgLSBUaGlzIGlzIHRoZSBjb3JlIGtmdW5jIGFyZ3VtZW50IHZhbGlkYXRpb24uXG4qICAgYGNoZWNrX2Z1bmNfYXJnYCAtIEl0IGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGFyZ3VtZW50IHZhbGlkYXRpb24uXG4qICAgYGNoZWNrX21lbV9zaXplX3JlZ2AgLSBGb3IgbWVtb3J5IHNpemUgY2hlY2tzLlxuKiAgIGBjaGVja19tZW1fcmVnYCAtIEZvciBtZW1vcnkgcmVnaXN0ZXIgY2hlY2tzLlxuKiAgIGBwcm9jZXNzX2NvbnN0X2FyZ2AgLSBUaGlzIGlzIHJlbGF0ZWQgdG8gaG93IGNvbnN0YW50IGFyZ3VtZW50cyBhcmUgcHJvY2Vzc2VkLlxuXG5JIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0aGF0IGBCUEZfU1lTQ0FMTGAgYW5kIGBERUJVR19JTkZPX0JURmAgYXJlIGVuYWJsZWQgZm9yIHByb3BlciB0ZXN0aW5nIGFuZCBjb3ZlcmFnZSwgcGFydGljdWxhcmx5IGJlY2F1c2Ugb2YgdGhlIEJURiBkZXBlbmRlbmN5IG9uIGtmdW5jcy5cblxuU28sIGxldCdzIGZpcmUgdXAgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC4uLiBJdCBsb29rcyBsaWtlIGEgZ29vZCBwbGFuIHRvIGZ1enogdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY5NTQsIk91dHB1dFRva2VucyI6MjA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDk6MTc6MjMuNTAyODQyODdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNzg5ODAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2VuX2tmdW5jX2FyZ19wcm90b1wiLFxuICAgIFwiZ2V0X2tmdW5jX2FyZ190eXBlXCIsXG4gICAgXCJwcm9jZXNzX21hcF9wdHJfYXJnXCIsXG4gICAgXCJjaGVja19rZnVuY19hcmdzXCIsXG4gICAgXCJjaGVja19mdW5jX2FyZ1wiLFxuICAgIFwiY2hlY2tfbWVtX3NpemVfcmVnXCIsXG4gICAgXCJjaGVja19tZW1fcmVnXCIsXG4gICAgXCJwcm9jZXNzX2NvbnN0X2FyZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpZ25pZmljYW50bHkgcmVmYWN0b3JzIGhvdyB0aGUgZUJQRiB2ZXJpZmllciBoYW5kbGVzIGFyZ3VtZW50cyBmb3Iga2Z1bmNzIGFuZCBoZWxwZXIgZnVuY3Rpb25zLCBpbnRyb2R1Y2luZyBuZXcgYXJndW1lbnQgdHlwZXMgKEFSR19NRU1fU0laRSwgQVJHX01FTV9TSVpFX09SX1pFUk8pIGFuZCBhIG5ldyB3YXkgdG8gZ2VuZXJhdGUga2Z1bmMgcHJvdG90eXBlcyAoZ2VuX2tmdW5jX2FyZ19wcm90bykuIFRoaXMgaXMgY29yZSB2ZXJpZmllciBsb2dpYyB0aGF0IGlzIGhpZ2hseSBjb21wbGV4IGFuZCBwcm9uZSB0byBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG1ha2luZyBpdCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5fa2Z1bmNfYXJnX3Byb3RvXCIsXG4gICAgXCJnZXRfa2Z1bmNfYXJnX3R5cGVcIixcbiAgICBcInByb2Nlc3NfbWFwX3B0cl9hcmdcIixcbiAgICBcImNoZWNrX2tmdW5jX2FyZ3NcIixcbiAgICBcImNoZWNrX2Z1bmNfYXJnXCIsXG4gICAgXCJjaGVja19tZW1fc2l6ZV9yZWdcIixcbiAgICBcImNoZWNrX21lbV9yZWdcIixcbiAgICBcInByb2Nlc3NfY29uc3RfYXJnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2lnbmlmaWNhbnRseSByZWZhY3RvcnMgaG93IHRoZSBlQlBGIHZlcmlmaWVyIGhhbmRsZXMgYXJndW1lbnRzIGZvciBrZnVuY3MgYW5kIGhlbHBlciBmdW5jdGlvbnMsIGludHJvZHVjaW5nIG5ldyBhcmd1bWVudCB0eXBlcyAoQVJHX01FTV9TSVpFLCBBUkdfTUVNX1NJWkVfT1JfWkVSTykgYW5kIGEgbmV3IHdheSB0byBnZW5lcmF0ZSBrZnVuYyBwcm90b3R5cGVzIChnZW5fa2Z1bmNfYXJnX3Byb3RvKS4gVGhpcyBpcyBjb3JlIHZlcmlmaWVyIGxvZ2ljIHRoYXQgaXMgaGlnaGx5IGNvbXBsZXggYW5kIHByb25lIHRvIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgbWFraW5nIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:nil,}