Name: series-workflow8fz4c Phase: Succeeded StartedAt: 2026-08-25 10:06:12 +0000 UTC FinishedAt: 2026-08-25 14:21:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[0] Phase: Succeeded StartedAt: 2026-08-25 10:06:12 +0000 UTC FinishedAt: 2026-08-25 10:34:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 10:06:12 +0000 UTC FinishedAt: 2026-08-25 10:34:21 +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": "5e289c5a4a526e870efac0ca658635c47138593a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "MEMCG", "CGROUPS" ], "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": "5e289c5a4a526e870efac0ca658635c47138593a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "MEMCG", "CGROUPS" ], "series_id": "dcedf132-c5fc-4fb5-bfab-cbd93ffb725a" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_map_alloc_page_sleepable" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgZm9yIEJQRiBhcmVuYXMgKGBhcmVuYV92bV9mYXVsdGApIHRvIHByZWFsbG9jYXRlIHBhZ2VzIG91dHNpZGUgb2YgYSBzcGlubG9jayB1c2luZyBhIHNsZWVwYWJsZSBhbGxvY2F0b3IsIGFsbG93aW5nIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biBpZiBuZWVkZWQuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIGFsbG9jYXRpb24gZnVuY3Rpb24gYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGV4cGxpY2l0bHkgdXNlcyBgX19HRlBfWkVST2AgKHZpYSBgQlBGX1BBR0VfR0ZQYCkgdG8gZW5zdXJlIHRoZSBhbGxvY2F0ZWQgcGFnZXMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQsIGp1c3QgbGlrZSB0aGUgcHJldmlvdXMgbm9uLWJsb2NraW5nIGFsbG9jYXRpb24gcGF0aC4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZC4gVGhlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gY29udGV4dCBhbmQgT09NIGhhbmRsaW5nLCB3aGljaCBkbyBub3QgaW50cm9kdWNlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZvciBCUEYgYXJlbmEgbWFwcyB0byB1c2UgYSBzbGVlcGFibGUgcGFnZSBhbGxvY2F0b3IsIGFsbG93aW5nIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biB3aGVuIG1lbW9yeSBsaW1pdHMgYXJlIGhpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYWZmZWN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgaW50ZXJhY3Rpb25zLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtbWFwaW5nIGFuZCBmYXVsdGluZyBCUEYgYXJlbmEgbWFwcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDoyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc4NGViNDhkYTk2ZDdjNGUzZmYxM2Y2ZGMwYTFiZmU0MDViZmUyOWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMDoyMzo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggYjNjZDI4ZDllM2I1NS4uYzgxN2M5OWQyOTA2NiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC0yNzg0LDYgJiM0MzsyNzg0LDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpO1xuIFxuIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbiYjNDM7c3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCk7XG4gI2lmZGVmIENPTkZJR19NRU1DR1xuIHZvaWQgYnBmX21hcF9tZW1jZ19lbnRlcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgbWVtX2Nncm91cCAqKm9sZF9tZW1jZyxcbiBcdFx0XHQgc3RydWN0IG1lbV9jZ3JvdXAgKipuZXdfbWVtY2cpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuaW5kZXggN2I2ODQ3MjAwYjQzMS4uZmE0NjJhMGZmMWFkNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYXJlbmEuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcmVuYS5jXG5AQCAtNDgxLDcgJiM0Mzs0ODEsOCBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdHN0cnVjdCBicGZfbWFwICptYXAgPSB2bWYtXHUwMDNldm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm5ld19tZW1jZywgKm9sZF9tZW1jZztcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlLCAqbmV3X3BhZ2UgPSBOVUxMO1xuJiM0MztcdHZtX2ZhdWx0X3QgZmF1bHRfcmV0O1xuIFx0bG9uZyBrYmFzZSwga2FkZHI7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHJldDtcbkBAIC00ODksNTkgJiM0Mzs0OTAsMTA2IEBAIHN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0a2Jhc2UgPSBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpO1xuIFx0a2FkZHIgPSBrYmFzZSAmIzQzOyAodTMyKSh2bWYtXHUwMDNlYWRkcmVzcyk7XG4gXG4tXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxuJiM0MztcdHBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilrYWRkcik7XG4mIzQzO1x0aWYgKCFwYWdlIFx1MDAyNlx1MDAyNiAhKGFyZW5hLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1NFR1ZfT05fRkFVTFQpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUHJlYWxsb2NhdGUgb3V0c2lkZSB0aGUgbG9jayB3aXRoIGEgc2xlZXBhYmxlIGFsbG9jYXRvciBzbyBpdFxuJiM0MztcdFx0ICogY2FuIHJlY2xhaW0gYW5kIHJ1biB0aGUgbWVtY2cgT09NIGtpbGxlciwgd2hpY2ggdGhlXG4mIzQzO1x0XHQgKiBub24tYmxvY2tpbmcgYWxsb2NhdG9yIHVuZGVyIGFyZW5hLVx1MDAzZXNwaW5sb2NrIGNhbm5vdC4gQSBOVUxMXG4mIzQzO1x0XHQgKiByZXR1cm4gaXMgbm9uLXJlY292ZXJhYmxlLCBzbyBmYWlsIHdpdGggVk1fRkFVTFRfU0lHQlVTO1xuJiM0MztcdFx0ICogVk1fRkFVTFRfT09NIHdvdWxkIGJlIHJldHJpZWQgYnkgdGhlIGZhdWx0IHBhdGggYW5kIGNhblxuJiM0MztcdFx0ICogbGl2ZWxvY2sgd2hlbiB0aGUgY2hhcmdlZCBtZW1jZyBpcyBub3QgdGhlIGZhdWx0aW5nIHRhc2smIzM5O3MuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG4mIzQzO1x0XHRuZXdfcGFnZSA9IGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUobWFwKTtcbiYjNDM7XHRcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG4mIzQzO1x0XHRpZiAoIW5ld19wYWdlKVxuJiM0MztcdFx0XHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBBIGZhaWxlZCBsb2NrIG1lYW5zIGEgcG9zc2libGUgZGVhZGxvY2sgd2FzIGRldGVjdGVkLiBEb24mIzM5O3RcbiBcdFx0ICogcmV0dXJuIFZNX0ZBVUxUX1JFVFJZOiB0aGlzIGhhbmRsZXIgbmV2ZXIgdG9vayBtbWFwX2xvY2ssIGJ1dFxuIFx0XHQgKiB0aGUgZmF1bHQgcGF0aCB3b3VsZCByZS10YWtlIGl0IG9uIHJldHJ5IGFuZCBkZWFkbG9jay4gRmFpbC5cbiBcdFx0ICovXG4mIzQzO1x0XHRpZiAobmV3X3BhZ2UpXG4mIzQzO1x0XHRcdGZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTtcbiBcdFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcbiYjNDM7XHR9XG4gXG4gXHRwYWdlID0gdm1hbGxvY190b19wYWdlKCh2b2lkICopa2FkZHIpO1xuIFx0aWYgKHBhZ2UpIHtcbi1cdFx0aWYgKHBhZ2UgPT0gYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKVxuLVx0XHRcdC8qIEJQRiB0cmlnZ2VyZWQgc2NyYXRjaCBoZXJlOyBkb24mIzM5O3QgbGF6eS1hbGxvYyBvdmVyIGl0ICovXG4tXHRcdFx0Z290byBvdXRfc2lnc2VndjtcbiYjNDM7XHRcdGlmIChwYWdlID09IGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBBIHNjcmF0Y2ggcGFnZSBtYXJrcyBhIGhvbGUuIFNlZ2ZhdWx0IG9ubHkgaWYgdGhlIHVzZXJcbiYjNDM7XHRcdFx0ICogYXNrZWQgZm9yIGl0OyBvdGhlcndpc2Ugd2UgY291bGQgbGF6eS1hbGxvY2F0ZSBidXRcbiYjNDM7XHRcdFx0ICogY2hvb3NlIG5vdCB0byBvdmVyIGEgaG9sZSwgc28gcmVwb3J0IGEgYnVzIGVycm9yLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0ZmF1bHRfcmV0ID0gKGFyZW5hLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1NFR1ZfT05fRkFVTFQpID9cbiYjNDM7XHRcdFx0XHQgICAgVk1fRkFVTFRfU0lHU0VHViA6IFZNX0ZBVUxUX1NJR0JVUztcbiYjNDM7XHRcdFx0Z290byBvdXRfZXJyX2xvY2tlZDtcbiYjNDM7XHRcdH1cbiBcdFx0LyogYWxyZWFkeSBoYXZlIGEgcGFnZSB2bWFwLWVkICovXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuJiM0MztcdGlmIChhcmVuYS1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9TRUdWX09OX0ZBVUxUKSB7XG4mIzQzO1x0XHQvKiBVc2VyIHNwYWNlIHJlcXVlc3RlZCB0byBzZWdmYXVsdCB3aGVuIHBhZ2UgaXMgbm90IGFsbG9jYXRlZCBieSBicGYgcHJvZyAqL1xuJiM0MztcdFx0ZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHU0VHVjtcbiYjNDM7XHRcdGdvdG8gb3V0X2Vycl9sb2NrZWQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG4gXG4tXHRpZiAoYXJlbmEtXHUwMDNlbWFwLm1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVClcbi1cdFx0LyogVXNlciBzcGFjZSByZXF1ZXN0ZWQgdG8gc2VnZmF1bHQgd2hlbiBwYWdlIGlzIG5vdCBhbGxvY2F0ZWQgYnkgYnBmIHByb2cgKi9cbi1cdFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcbiYjNDM7XHRpZiAoIW5ld19wYWdlKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVmVyeSByYXJlIHJhY2U6IHRoZSBicGYgcHJvZ3JhbSBoYWQgYWxsb2NhdGVkIGEgcGFnZSBoZXJlLCBzb1xuJiM0MztcdFx0ICogdGhlIGxvY2tsZXNzIHByb2JlIHNhdyBpdCBhbmQgd2Ugc2tpcHBlZCBwcmVhbGxvY2F0aW9uLCBidXQgaXRcbiYjNDM7XHRcdCAqIGZyZWVkIHRoZSBwYWdlIGJlZm9yZSB3ZSB0b29rIHRoZSBsb2NrLiBOb3cgd2UgZG8gbmVlZCBvbmU7XG4mIzQzO1x0XHQgKiBzbGVlcGluZyBpcyBub3QgYWxsb3dlZCBoZXJlLCBzbyBmYWxsIGJhY2sgdG8gdGhlIG5vbi1ibG9ja2luZ1xuJiM0MztcdFx0ICogYWxsb2NhdG9yIGFuZCBnaXZlIHVwIGlmIGl0IGZhaWxzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXQgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKG1hcCwgbWFwLVx1MDAzZW51bWFfbm9kZSwgMSwgXHUwMDI2bmV3X3BhZ2UpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFxuIFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4tXG4tXHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gXHUwMDI2cGFnZSwgLmkgPSAwIH07XG4tXHQvKiBBY2NvdW50IGludG8gbWVtY2cgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGJwZl9hcmVuYSAqL1xuLVx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIE5VTUFfTk9fTk9ERSwgMSwgXHUwMDI2cGFnZSk7XG4gXHRpZiAocmV0KSB7XG4tXHRcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCB2bWYtXHUwMDNlcGdvZmYsIDEpO1xuLVx0XHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xuJiM0MztcdFx0ZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xuJiM0MztcdFx0Z290byBvdXRfZXJyX2xvY2tlZF9tZW1jZztcbiBcdH1cbiYjNDM7XHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gXHUwMDI2bmV3X3BhZ2UsIC5pID0gMCB9O1xuIFxuIFx0cmV0ID0gYXBwbHlfdG9fcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBrYWRkciwgUEFHRV9TSVpFLCBhcHBseV9yYW5nZV9zZXRfY2IsIFx1MDAyNmRhdGEpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbi1cdFx0ZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7XG4tXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4mIzQzO1x0XHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnO1xuIFx0fVxuIFx0Zmx1c2hfdm1hcF9jYWNoZShrYWRkciwgUEFHRV9TSVpFKTtcbiBcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG4mIzQzO1x0LyogbmV3X3BhZ2Ugd2FzIGNvbnN1bWVkICovXG4mIzQzO1x0cGFnZSA9IG5ld19wYWdlO1xuJiM0MztcdG5ld19wYWdlID0gTlVMTDtcbiBvdXQ6XG4gXHRwYWdlX3JlZl9hZGQocGFnZSwgMSk7XG4gXHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbiYjNDM7XHRpZiAobmV3X3BhZ2UpXG4mIzQzO1x0XHRmcmVlX3BhZ2VzX25vbG9jayhuZXdfcGFnZSwgMCk7XG4gXHR2bWYtXHUwMDNlcGFnZSA9IHBhZ2U7XG4gXHRyZXR1cm4gMDtcbi1vdXRfc2lnc2Vndl9tZW1jZzpcbiYjNDM7XG4mIzQzO291dF9lcnJfbG9ja2VkX21lbWNnOlxuIFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbi1vdXRfc2lnc2VndjpcbiYjNDM7b3V0X2Vycl9sb2NrZWQ6XG4gXHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbi1cdHJldHVybiBWTV9GQVVMVF9TSUdTRUdWO1xuJiM0MztcdGlmIChuZXdfcGFnZSlcbiYjNDM7XHRcdGZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTtcbiYjNDM7XHRyZXR1cm4gZmF1bHRfcmV0O1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFyZW5hX3ZtX29wcyA9IHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA2ODc0YmExNDI0YWYwLi5mOWI4MTYzOGU1MzdhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtNjAyLDE1ICYjNDM7NjAyLDE0IEBAIHN0YXRpYyBib29sIGNhbl9hbGxvY19wYWdlcyh2b2lkKVxuIFx0XHQhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCk7XG4gfVxuIFxuJiM0MzsjZGVmaW5lIEJQRl9QQUdFX0dGUCAoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fYnBmX2FsbG9jX3BhZ2UoaW50IG5pZClcbiB7XG4gXHRpZiAoIWNhbl9hbGxvY19wYWdlcygpKVxuIFx0XHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9sb2NrKF9fR0ZQX0FDQ09VTlQsIG5pZCwgMCk7XG4gXG4tXHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShuaWQsXG4tXHRcdFx0XHRHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyB8IF9fR0ZQX0FDQ09VTlRcbi1cdFx0XHRcdHwgX19HRlBfTk9XQVJOLFxuLVx0XHRcdFx0MCk7XG4mIzQzO1x0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobmlkLCBCUEZfUEFHRV9HRlAsIDApO1xuIH1cbiBcbiBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxuQEAgLTYzNiw2ICYjNDM7NjM1LDIwIEBAIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogRm9yIGNhbGxlcnMgdGhhdCBrbm93IHRoZXkgcnVuIGluIGEgc2xlZXBhYmxlIGNvbnRleHQsIGUuZy4gYSB1c2VyIHBhZ2VcbiYjNDM7ICogZmF1bHQgaGFuZGxlci4gY2FuX2FsbG9jX3BhZ2VzKCkgaXMgYSBjb25zZXJ2YXRpdmUgZ3Vlc3MgbWFkZSBmb3IgQlBGXG4mIzQzOyAqIHByb2dyYW0gY29udGV4dCAtIG5vdGFibHkgaXQgaXMgYWx3YXlzIGZhbHNlIG9uIFBSRUVNUFRfUlQgLSBzbyBnb2luZ1xuJiM0MzsgKiB0aHJvdWdoIGJwZl9tYXBfYWxsb2NfcGFnZXMoKSB0aGVyZSB3b3VsZCBuZWVkbGVzc2x5IHBpY2sgdGhlXG4mIzQzOyAqIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IsIHdoaWNoIG5ldmVyIHJlY2xhaW1zIGFuZCBuZXZlciBlbmdhZ2VzIHRoZSBPT01cbiYjNDM7ICogbWFjaGluZXJ5LlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbiYjNDM7e1xuJiM0MztcdG1pZ2h0X3NsZWVwKCk7XG4mIzQzO1x0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobWFwLVx1MDAzZW51bWFfbm9kZSwgQlBGX1BBR0VfR0ZQLCAwKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGJ0Zl9maWVsZF9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX2ZpZWxkICpmMSA9IGEsICpmMiA9IGI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuY1xuaW5kZXggNDVjZDBiNDc5ZmUzNS4uNDE4M2ZmNjE1MGMyOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuY1xuQEAgLTE4OCw2ICYjNDM7MTg4LDczIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbiBcdHJldHVybiBfX3dyaXRlX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBfX3JlYWRfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqY2dyb3VwX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4mIzQzO1x0XHRcdCAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdGNoYXIgZmlsZV9wYXRoW1BBVEhfTUFYICYjNDM7IDFdO1xuJiM0MztcdHNzaXplX3QgZ290O1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYoZmlsZV9wYXRoLCBzaXplb2YoZmlsZV9wYXRoKSwgXCYjMzQ7JXMvJXNcJiMzNDssIGNncm91cF9wYXRoLCBmaWxlKTtcbiYjNDM7XHRmZCA9IG9wZW4oZmlsZV9wYXRoLCBPX1JET05MWSk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRsb2dfZXJyKFwmIzM0O09wZW5pbmcgJXNcJiMzNDssIGZpbGVfcGF0aCk7XG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGdvdCA9IHJlYWQoZmQsIGJ1ZiwgbGVuIC0gMSk7XG4mIzQzO1x0aWYgKGdvdCBcdTAwM2MgMCkge1xuJiM0MztcdFx0bG9nX2VycihcJiMzNDtSZWFkaW5nICVzXCYjMzQ7LCBmaWxlX3BhdGgpO1xuJiM0MztcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0fVxuJiM0MztcdGJ1Zltnb3RdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiByZWFkX2Nncm91cF9maWxlKCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZVxuJiM0MzsgKiBAcmVsYXRpdmVfcGF0aDogVGhlIGNncm91cCBwYXRoLCByZWxhdGl2ZSB0byB0aGUgd29ya2RpclxuJiM0MzsgKiBAZmlsZTogVGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gY2dyb3VwZnMgdG8gcmVhZCBmcm9tXG4mIzQzOyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3NcbiYjNDM7ICogQGxlbjogU2l6ZSBvZiBAYnVmXG4mIzQzOyAqXG4mIzQzOyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCYjMzk7cyBkaXJlY3RvcnkuXG4mIzQzOyAqXG4mIzQzOyAqIElmIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQuXG4mIzQzOyAqL1xuJiM0MztpbnQgcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuJiM0MztcdFx0ICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGNncm91cF9wYXRoW1BBVEhfTUFYIC0gMjRdO1xuJiM0MztcbiYjNDM7XHRmb3JtYXRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpO1xuJiM0MztcdHJldHVybiBfX3JlYWRfY2dyb3VwX2ZpbGUoY2dyb3VwX3BhdGgsIGZpbGUsIGJ1ZiwgbGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZSBpbiB0aGUgcGFyZW50IHByb2Nlc3NcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtkaXJcbiYjNDM7ICogQHJlbGF0aXZlX3BhdGg6IFRoZSBjZ3JvdXAgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBwcm9jZXNzIHdvcmtkaXJcbiYjNDM7ICogQGZpbGU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIGNncm91cGZzIHRvIHJlYWQgZnJvbVxuJiM0MzsgKiBAYnVmOiBCdWZmZXIgdG8gcmVhZCBpbnRvLCBOVUwtdGVybWluYXRlZCBvbiBzdWNjZXNzXG4mIzQzOyAqIEBsZW46IFNpemUgb2YgQGJ1ZlxuJiM0MzsgKlxuJiM0MzsgKiBSZWFkIGZyb20gYSBmaWxlIGluIHRoZSBnaXZlbiBjZ3JvdXAmIzM5O3MgZGlyZWN0b3J5IHVuZGVyIHRoZSBwYXJlbnQgcHJvY2Vzc1xuJiM0MzsgKiB3b3JrZGlyLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiBzdWNjZXNzZnVsLCAwIGlzIHJldHVybmVkLlxuJiM0MzsgKi9cbiYjNDM7aW50IHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4mIzQzO1x0XHRcdCAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGNncm91cF9wYXRoW1BBVEhfTUFYIC0gMjRdO1xuJiM0MztcbiYjNDM7XHRmb3JtYXRfcGFyZW50X2Nncm91cF9wYXRoKGNncm91cF9wYXRoLCByZWxhdGl2ZV9wYXRoKTtcbiYjNDM7XHRyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCkgLSBTZXR1cCB0aGUgY2dyb3VwIGVudmlyb25tZW50XG4gICpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oXG5pbmRleCAzODU3MzA0YmU4NzQxLi5kNDJkMmUxMzA0NGU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oXG5AQCAtMTUsNiAmIzQzOzE1LDEwIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuIFx0XHQgICAgICBjb25zdCBjaGFyICpidWYpO1xuIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbiBcdFx0XHQgICAgIGNvbnN0IGNoYXIgKmJ1Zik7XG4mIzQzO2ludCByZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4mIzQzO1x0XHQgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4mIzQzO2ludCByZWFkX2Nncm91cF9maWxlX3BhcmVudChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuJiM0MztcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcbiBpbnQgY2dyb3VwX3NldHVwX2FuZF9qb2luKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgpO1xuIGludCBnZXRfcm9vdF9jZ3JvdXAodm9pZCk7XG4gaW50IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtY2cuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM1N2I5ODQ5NGNmYWJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbWNnLmNcbkBAIC0wLDAgJiM0MzsxLDE1OCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy91c2VyLmhcdTAwM2VcbiYjNDM7I2lmbmRlZiBQQUdFX1NJWkUgLyogb24gc29tZSBhcmNocyBpdCBjb21lcyBpbiBzeXMvdXNlci5oICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNkZWZpbmUgUEFHRV9TSVpFIGdldHBhZ2VzaXplKClcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjZ3JvdXBfaGVscGVycy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2FyZW5hX21lbWNnLnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBDR19QQVRIXHRcdFwmIzM0Oy9hcmVuYV9tZW1jZ1wmIzM0O1xuJiM0MztcbiYjNDM7LyogQnVkZ2V0IHRoZSBhcmVuYSBnZXRzIG9uIHRvcCBvZiB3aGF0ZXZlciBpcyBhbHJlYWR5IGNoYXJnZWQgYWZ0ZXIgbG9hZC4gKi9cbiYjNDM7I2RlZmluZSBBUkVOQV9CVURHRVRcdCg2NCAqIDEwMjQgKiAxMDI0KVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZHVtcF9tZW1jZyhpbnQgKCpyZCkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KSlcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmWzUxMl07XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogbWVtb3J5LmN1cnJlbnQgcmVhZHMgMCBvbmNlIHRoZSBjaGlsZCBoYXMgbGVmdCB0aGUgY2dyb3VwLCBzbyBpdCBvbmx5XG4mIzQzO1x0ICogY2FycmllcyBpbmZvcm1hdGlvbiB3aGVuIGR1bXBlZCBmcm9tIHRoZSBsaXZlIGNoaWxkOyBtZW1vcnkucGVhayBhbmRcbiYjNDM7XHQgKiBtZW1vcnkuZXZlbnRzIHN1cnZpdmUgdGhlIGNoaWxkIGFuZCB0ZWxsIHRoZSBzdG9yeSBlaXRoZXIgd2F5LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghcmQoQ0dfUEFUSCwgXCYjMzQ7bWVtb3J5LmN1cnJlbnRcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O21lbW9yeS5jdXJyZW50OiAlc1wmIzM0OywgYnVmKTtcbiYjNDM7XHRpZiAoIXJkKENHX1BBVEgsIFwmIzM0O21lbW9yeS5tYXhcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O21lbW9yeS5tYXg6ICVzXCYjMzQ7LCBidWYpO1xuJiM0MztcdGlmICghcmQoQ0dfUEFUSCwgXCYjMzQ7bWVtb3J5LnBlYWtcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O21lbW9yeS5wZWFrOiAlc1wmIzM0OywgYnVmKTtcbiYjNDM7XHRpZiAoIXJkKENHX1BBVEgsIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O21lbW9yeS5ldmVudHM6XFxuJXNcJiMzNDssIGJ1Zik7XG4mIzQzO1x0ZmZsdXNoKHN0ZGVycik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFJlYWQgb25lIGtleSBmcm9tIGEgZmxhdCBrZXllZCBjZ3JvdXAgZmlsZSwgZS5nLiBcJiMzNDtvb21fa2lsbFwmIzM0OyBpbiBtZW1vcnkuZXZlbnRzLiAqL1xuJiM0MztzdGF0aWMgbG9uZyBjZ19yZWFkX2tleShjb25zdCBjaGFyICpjZywgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqa2V5KVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbNTEyXSwgKnA7XG4mIzQzO1xuJiM0MztcdGlmIChyZWFkX2Nncm91cF9maWxlKGNnLCBmaWxlLCBidWYsIHNpemVvZihidWYpKSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRwID0gc3Ryc3RyKGJ1Ziwga2V5KTtcbiYjNDM7XHRpZiAoIXApXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0cmV0dXJuIHN0cnRvbChwICYjNDM7IHN0cmxlbihrZXkpLCBOVUxMLCAxMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtY2codm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBjZ3JvdXBfZmQgPSAtMSwgc3RhdHVzLCBlcnI7XG4mIzQzO1x0Y29uc3QgbG9uZyBwcyA9IFBBR0VfU0laRTtcbiYjNDM7XHRjaGFyIGJ1Zls2NF07XG4mIzQzO1x0cGlkX3QgcGlkO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NldHVwX2Nncm91cF9lbnZpcm9ubWVudFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGNncm91cF9mZCA9IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChDR19QQVRIKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsIFwmIzM0O2NyZWF0ZV9hbmRfZ2V0X2Nncm91cFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogTm8gbWVtb3J5IGNvbnRyb2xsZXIgLVx1MDAzZSBub3RoaW5nIHRvIHRlc3QuICovXG4mIzQzO1x0aWYgKHJlYWRfY2dyb3VwX2ZpbGUoQ0dfUEFUSCwgXCYjMzQ7bWVtb3J5LmN1cnJlbnRcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7JXM6U0tJUDpubyBtZW1vcnkgY29udHJvbGxlclxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwaWQgPSBmb3JrKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UocGlkLCAwLCBcJiMzNDtmb3JrXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmIChwaWQgPT0gMCkge1xuJiM0MztcdFx0c3RydWN0IGFyZW5hX21lbWNnICpjc2tlbDtcbiYjNDM7XHRcdF9fdTMyIGksIG5wYWdlcztcbiYjNDM7XHRcdGNoYXIgKmJhc2U7XG4mIzQzO1x0XHRzaXplX3Qgc3o7XG4mIzQzO1x0XHRsb25nIGN1cjtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRG8gZXZlcnl0aGluZyBmcm9tIHRoZSBjaGlsZDogdGhlIGFyZW5hIHZtYSBpcyBWTV9ET05UQ09QWSBzb1xuJiM0MztcdFx0ICogaXQgd291bGQgbm90IHN1cnZpdmUgZm9yaygpLCBvbmx5IHRoZSBjaGlsZCBzaG91bGQgYmUgdW5kZXIgdGhlXG4mIzQzO1x0XHQgKiBsaW1pdCBzbyB0aGF0IGEgbWVtY2cgT09NIGNhbm5vdCBwaWNrIHRlc3RfcHJvZ3MsIGFuZCBhIG1hcCBpc1xuJiM0MztcdFx0ICogY2hhcmdlZCB0byB0aGUgbWVtY2cgb2YgdGhlIHRhc2sgdGhhdCBjcmVhdGVzIGl0IC0gc28gam9pblxuJiM0MztcdFx0ICogYmVmb3JlIGxvYWQuIFRoZSBjZ3JvdXAgd29yayBkaXIgYmVsb25ncyB0byB0aGUgcGFyZW50IHRoYXQgc2V0XG4mIzQzO1x0XHQgKiB0aGUgZW52aXJvbm1lbnQgdXAsIHNvIHJlYWNoIGl0IHdpdGggdGhlIF9wYXJlbnQoKSBoZWxwZXJzLlxuJiM0MztcdFx0ICogRXJyb3JzIGFyZSByZXBvcnRlZCB0byB0aGUgcGFyZW50IHRocm91Z2ggdGhlIGV4aXQgY29kZSwgc2luY2VcbiYjNDM7XHRcdCAqIEFTU0VSVF8qIGluIGEgZm9ya2VkIGNoaWxkIGRvZXMgbm90IHJlYWNoIGl0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDslZFwmIzM0OywgZ2V0cGlkKCkpO1xuJiM0MztcdFx0aWYgKHdyaXRlX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCBcJiMzNDtjZ3JvdXAucHJvY3NcJiMzNDssIGJ1ZikpXG4mIzQzO1x0XHRcdF9leGl0KDIpO1xuJiM0MztcbiYjNDM7XHRcdGNza2VsID0gYXJlbmFfbWVtY2dfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRcdGlmICghY3NrZWwpXG4mIzQzO1x0XHRcdF9leGl0KDMpO1xuJiM0MztcbiYjNDM7XHRcdGJhc2UgPSBicGZfbWFwX19pbml0aWFsX3ZhbHVlKGNza2VsLVx1MDAzZW1hcHMuYXJlbmEsIFx1MDAyNnN6KTtcbiYjNDM7XHRcdGlmICghYmFzZSlcbiYjNDM7XHRcdFx0X2V4aXQoNCk7XG4mIzQzO1x0XHRucGFnZXMgPSBicGZfbWFwX19tYXhfZW50cmllcyhjc2tlbC1cdTAwM2VtYXBzLmFyZW5hKTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQ2FwIG9ubHkgbm93LCBhZnRlciBsb2FkOiBldmVyeXRoaW5nIGJ1dCB0aGUgZmF1bHQtaW4gaXNcbiYjNDM7XHRcdCAqIGNoYXJnZWQsIHNvIHRoZSBhcmVuYSBnZXRzIGEgZml4ZWQgYnVkZ2V0IHJlZ2FyZGxlc3Mgb2Ygd2hhdFxuJiM0MztcdFx0ICogdGhlIGxvYWQgaXRzZWxmIGNvc3QsIGFuZCB0aGUgbG9hZCBjYW4gbmV2ZXIgaGl0IHRoZSBsaW1pdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsIFwmIzM0O21lbW9yeS5jdXJyZW50XCYjMzQ7LCBidWYsIHNpemVvZihidWYpKSlcbiYjNDM7XHRcdFx0X2V4aXQoNSk7XG4mIzQzO1x0XHRjdXIgPSBzdHJ0b2woYnVmLCBOVUxMLCAxMCk7XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDslbGRcJiMzNDssIGN1ciAmIzQzOyBBUkVOQV9CVURHRVQpO1xuJiM0MztcdFx0aWYgKHdyaXRlX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCBcJiMzNDttZW1vcnkubWF4XCYjMzQ7LCBidWYpKVxuJiM0MztcdFx0XHRfZXhpdCg2KTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGFnZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRiYXNlWyhzaXplX3QpaSAqIHBzXSA9IDE7XG4mIzQzO1x0XHQvKiBGYXVsdGVkIGV2ZXJ5dGhpbmcgd2l0aG91dCBkeWluZzogZHVtcCB3aHkgKG9ubHkgdW5kZXIgLXYpLiAqL1xuJiM0MztcdFx0ZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlX3BhcmVudCk7XG4mIzQzO1x0XHRfZXhpdCgwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIDApLCBwaWQsIFwmIzM0O3dhaXRwaWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qIEEgbm9uLXplcm8gZXhpdCBtZWFucyB0aGUgY2hpbGQgZmFpbGVkIHRvIHNldCB1cDsgdGhlIGNvZGUgc2F5cyB3aGVyZS4gKi9cbiYjNDM7XHRpZiAoV0lGRVhJVEVEKHN0YXR1cykgXHUwMDI2XHUwMDI2IFdFWElUU1RBVFVTKHN0YXR1cykpIHtcbiYjNDM7XHRcdEFTU0VSVF9PSyhXRVhJVFNUQVRVUyhzdGF0dXMpLCBcJiMzNDtjaGlsZCBzZXR1cFwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRmF1bHRpbmcgYSB2YWxpZCBhcmVuYSBhZGRyZXNzIHVudGlsIG1lbW9yeS5tYXggaXMgaGl0IG11c3Qgbm90IGxvb2tcbiYjNDM7XHQgKiBsaWtlIGFuIGludmFsaWQgYWNjZXNzLiBXaXRob3V0IHRoZSBmaXggdGhlIGZhdWx0IHBhdGggYWxsb2NhdGVkIHdpdGhcbiYjNDM7XHQgKiB0aGUgbm9uLWJsb2NraW5nIGFsbG9jYXRvciwgdHVybmVkIGl0cyAtRU5PTUVNIGludG8gVk1fRkFVTFRfU0lHU0VHVixcbiYjNDM7XHQgKiBhbmQgdGhlIGNoaWxkIGRpZWQgd2l0aCBTSUdTRUdWIG9uIGEgdmFsaWQgYWRkcmVzczsgbm93IGl0IGlzIGhhbmRsZWRcbiYjNDM7XHQgKiBieSB0aGUgbWVtY2cgT09NIHBhdGggaW5zdGVhZC4gQSBTSUdLSUxMIGFsb25lIHdvdWxkIG5vdCBwcm92ZSB0aGVcbiYjNDM7XHQgKiBtZW1jZyBPT00ga2lsbGVyIGRpZCBpdCAoYSBnbG9iYWwgT09NIG9yIGFuIHVucmVsYXRlZCBjcmFzaCBjb3VsZCBhbHNvXG4mIzQzO1x0ICoga2lsbCB0aGUgY2hpbGQpLCBzbyBjaGVjayBtZW1vcnkuZXZlbnRzLm9vbV9raWxsLCB3aGljaCByZWNvcmRzIHRoZVxuJiM0MztcdCAqIG1lbWNnIE9PTSBhbmQgc3Vydml2ZXMgdGhlIGNoaWxkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghQVNTRVJUX1RSVUUoV0lGU0lHTkFMRUQoc3RhdHVzKSwgXCYjMzQ7Y2hpbGQga2lsbGVkIGJ5IHNpZ25hbFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShjZ19yZWFkX2tleShDR19QQVRILCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDtvb21fa2lsbFwmIzM0OyksIDEsXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7bWVtY2cgb29tX2tpbGxcJiMzNDspKVxuJiM0MztcdFx0ZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlKTtcbiYjNDM7b3V0OlxuJiM0MztcdGlmIChjZ3JvdXBfZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoY2dyb3VwX2ZkKTtcbiYjNDM7XHRjbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjg4MjU5Y2ZlYTA2YjZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1jZy5jXG5AQCAtMCwwICYjNDM7MSwyNCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9hcmVuYV9jb21tb24uaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbiYjNDM7XHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCA1MDAwMCk7IC8qIG51bWJlciBvZiBwYWdlcyAqL1xuJiM0MzsjaWZkZWYgX19UQVJHRVRfQVJDSF9hcm02NFxuJiM0MztcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXHUwMDNjXHUwMDNjIDMyKTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuJiM0MzsjZWxzZVxuJiM0MztcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXHUwMDNjXHUwMDNjIDQ0KTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuJiM0MzsjZW5kaWZcbiYjNDM7fSBhcmVuYSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO2ludCBub29wKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjEwbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7Q0dST1VQUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgQlBGIGFyZW5hIG1hcHMgdG8gdXNlIGEgc2xlZXBhYmxlIHBhZ2UgYWxsb2NhdG9yLCBhbGxvd2luZyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBydW4gd2hlbiBtZW1vcnkgbGltaXRzIGFyZSBoaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFmZmVjdGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGludGVyYWN0aW9ucywgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbW1hcGluZyBhbmQgZmF1bHRpbmcgQlBGIGFyZW5hIG1hcHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ODRlYjQ4ZGE5NmQ3YzRlM2ZmMTNmNmRjMGExYmZlNDA1YmZlMjliCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMTA6MjM6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCBiM2NkMjhkOWUzYjU1Li5jODE3Yzk5ZDI5MDY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTI3ODQsNiAmIzQzOzI3ODQsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2dldF9jdXJyX29yX25leHQodTMyICppZCk7CiAKIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsCiAJCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpOwomIzQzO3N0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApOwogI2lmZGVmIENPTkZJR19NRU1DRwogdm9pZCBicGZfbWFwX21lbWNnX2VudGVyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBtZW1fY2dyb3VwICoqb2xkX21lbWNnLAogCQkJIHN0cnVjdCBtZW1fY2dyb3VwICoqbmV3X21lbWNnKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuYwppbmRleCA3YjY4NDcyMDBiNDMxLi5mYTQ2MmEwZmYxYWQ2IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcmVuYS5jCkBAIC00ODEsNyAmIzQzOzQ4MSw4IEBAIHN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCXN0cnVjdCBicGZfbWFwICptYXAgPSB2bWYtJmd0O3ZtYS0mZ3Q7dm1fZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbmV3X21lbWNnLCAqb2xkX21lbWNnOwotCXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZSwgKm5ld19wYWdlID0gTlVMTDsKJiM0MzsJdm1fZmF1bHRfdCBmYXVsdF9yZXQ7CiAJbG9uZyBrYmFzZSwga2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwpAQCAtNDg5LDU5ICYjNDM7NDkwLDEwNiBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlrYmFzZSA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7CiAJa2FkZHIgPSBrYmFzZSAmIzQzOyAodTMyKSh2bWYtJmd0O2FkZHJlc3MpOwogCi0JaWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDthcmVuYS0mZ3Q7c3BpbmxvY2ssIGZsYWdzKSkKJiM0MzsJcGFnZSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWthZGRyKTsKJiM0MzsJaWYgKCFwYWdlICZhbXA7JmFtcDsgIShhcmVuYS0mZ3Q7bWFwLm1hcF9mbGFncyAmYW1wOyBCUEZfRl9TRUdWX09OX0ZBVUxUKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFByZWFsbG9jYXRlIG91dHNpZGUgdGhlIGxvY2sgd2l0aCBhIHNsZWVwYWJsZSBhbGxvY2F0b3Igc28gaXQKJiM0MzsJCSAqIGNhbiByZWNsYWltIGFuZCBydW4gdGhlIG1lbWNnIE9PTSBraWxsZXIsIHdoaWNoIHRoZQomIzQzOwkJICogbm9uLWJsb2NraW5nIGFsbG9jYXRvciB1bmRlciBhcmVuYS0mZ3Q7c3BpbmxvY2sgY2Fubm90LiBBIE5VTEwKJiM0MzsJCSAqIHJldHVybiBpcyBub24tcmVjb3ZlcmFibGUsIHNvIGZhaWwgd2l0aCBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQkgKiBWTV9GQVVMVF9PT00gd291bGQgYmUgcmV0cmllZCBieSB0aGUgZmF1bHQgcGF0aCBhbmQgY2FuCiYjNDM7CQkgKiBsaXZlbG9jayB3aGVuIHRoZSBjaGFyZ2VkIG1lbWNnIGlzIG5vdCB0aGUgZmF1bHRpbmcgdGFzayYjMzk7cy4KJiM0MzsJCSAqLwomIzQzOwkJYnBmX21hcF9tZW1jZ19lbnRlcigmYW1wO2FyZW5hLSZndDttYXAsICZhbXA7b2xkX21lbWNnLCAmYW1wO25ld19tZW1jZyk7CiYjNDM7CQluZXdfcGFnZSA9IGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUobWFwKTsKJiM0MzsJCWJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7CiYjNDM7CQlpZiAoIW5ld19wYWdlKQomIzQzOwkJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDthcmVuYS0mZ3Q7c3BpbmxvY2ssIGZsYWdzKSkgewogCQkvKgogCQkgKiBBIGZhaWxlZCBsb2NrIG1lYW5zIGEgcG9zc2libGUgZGVhZGxvY2sgd2FzIGRldGVjdGVkLiBEb24mIzM5O3QKIAkJICogcmV0dXJuIFZNX0ZBVUxUX1JFVFJZOiB0aGlzIGhhbmRsZXIgbmV2ZXIgdG9vayBtbWFwX2xvY2ssIGJ1dAogCQkgKiB0aGUgZmF1bHQgcGF0aCB3b3VsZCByZS10YWtlIGl0IG9uIHJldHJ5IGFuZCBkZWFkbG9jay4gRmFpbC4KIAkJICovCiYjNDM7CQlpZiAobmV3X3BhZ2UpCiYjNDM7CQkJZnJlZV9wYWdlc19ub2xvY2sobmV3X3BhZ2UsIDApOwogCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwomIzQzOwl9CiAKIAlwYWdlID0gdm1hbGxvY190b19wYWdlKCh2b2lkICopa2FkZHIpOwogCWlmIChwYWdlKSB7Ci0JCWlmIChwYWdlID09IGFyZW5hLSZndDtzY3JhdGNoX3BhZ2UpCi0JCQkvKiBCUEYgdHJpZ2dlcmVkIHNjcmF0Y2ggaGVyZTsgZG9uJiMzOTt0IGxhenktYWxsb2Mgb3ZlciBpdCAqLwotCQkJZ290byBvdXRfc2lnc2VndjsKJiM0MzsJCWlmIChwYWdlID09IGFyZW5hLSZndDtzY3JhdGNoX3BhZ2UpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgc2NyYXRjaCBwYWdlIG1hcmtzIGEgaG9sZS4gU2VnZmF1bHQgb25seSBpZiB0aGUgdXNlcgomIzQzOwkJCSAqIGFza2VkIGZvciBpdDsgb3RoZXJ3aXNlIHdlIGNvdWxkIGxhenktYWxsb2NhdGUgYnV0CiYjNDM7CQkJICogY2hvb3NlIG5vdCB0byBvdmVyIGEgaG9sZSwgc28gcmVwb3J0IGEgYnVzIGVycm9yLgomIzQzOwkJCSAqLwomIzQzOwkJCWZhdWx0X3JldCA9IChhcmVuYS0mZ3Q7bWFwLm1hcF9mbGFncyAmYW1wOyBCUEZfRl9TRUdWX09OX0ZBVUxUKSA/CiYjNDM7CQkJCSAgICBWTV9GQVVMVF9TSUdTRUdWIDogVk1fRkFVTFRfU0lHQlVTOwomIzQzOwkJCWdvdG8gb3V0X2Vycl9sb2NrZWQ7CiYjNDM7CQl9CiAJCS8qIGFscmVhZHkgaGF2ZSBhIHBhZ2Ugdm1hcC1lZCAqLwogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJaWYgKGFyZW5hLSZndDttYXAubWFwX2ZsYWdzICZhbXA7IEJQRl9GX1NFR1ZfT05fRkFVTFQpIHsKJiM0MzsJCS8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovCiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdTRUdWOwomIzQzOwkJZ290byBvdXRfZXJyX2xvY2tlZDsKJiM0MzsJfQomIzQzOwogCWJwZl9tYXBfbWVtY2dfZW50ZXIoJmFtcDthcmVuYS0mZ3Q7bWFwLCAmYW1wO29sZF9tZW1jZywgJmFtcDtuZXdfbWVtY2cpOwogCi0JaWYgKGFyZW5hLSZndDttYXAubWFwX2ZsYWdzICZhbXA7IEJQRl9GX1NFR1ZfT05fRkFVTFQpCi0JCS8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovCi0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CWlmICghbmV3X3BhZ2UpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBWZXJ5IHJhcmUgcmFjZTogdGhlIGJwZiBwcm9ncmFtIGhhZCBhbGxvY2F0ZWQgYSBwYWdlIGhlcmUsIHNvCiYjNDM7CQkgKiB0aGUgbG9ja2xlc3MgcHJvYmUgc2F3IGl0IGFuZCB3ZSBza2lwcGVkIHByZWFsbG9jYXRpb24sIGJ1dCBpdAomIzQzOwkJICogZnJlZWQgdGhlIHBhZ2UgYmVmb3JlIHdlIHRvb2sgdGhlIGxvY2suIE5vdyB3ZSBkbyBuZWVkIG9uZTsKJiM0MzsJCSAqIHNsZWVwaW5nIGlzIG5vdCBhbGxvd2VkIGhlcmUsIHNvIGZhbGwgYmFjayB0byB0aGUgbm9uLWJsb2NraW5nCiYjNDM7CQkgKiBhbGxvY2F0b3IgYW5kIGdpdmUgdXAgaWYgaXQgZmFpbHMuCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBtYXAtJmd0O251bWFfbm9kZSwgMSwgJmFtcDtuZXdfcGFnZSk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHQlVTOwomIzQzOwkJCWdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7CiYjNDM7CQl9CiYjNDM7CX0KIAogCXJldCA9IHJhbmdlX3RyZWVfY2xlYXIoJmFtcDthcmVuYS0mZ3Q7cnQsIHZtZi0mZ3Q7cGdvZmYsIDEpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7Ci0KLQlzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gJmFtcDtwYWdlLCAuaSA9IDAgfTsKLQkvKiBBY2NvdW50IGludG8gbWVtY2cgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGJwZl9hcmVuYSAqLwotCXJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBOVU1BX05PX05PREUsIDEsICZhbXA7cGFnZSk7CiAJaWYgKHJldCkgewotCQlyYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgdm1mLSZndDtwZ29mZiwgMSk7Ci0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQlnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnOwogCX0KJiM0MzsJc3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9ICZhbXA7bmV3X3BhZ2UsIC5pID0gMCB9OwogCiAJcmV0ID0gYXBwbHlfdG9fcGFnZV9yYW5nZSgmYW1wO2luaXRfbW0sIGthZGRyLCBQQUdFX1NJWkUsIGFwcGx5X3JhbmdlX3NldF9jYiwgJmFtcDtkYXRhKTsKIAlpZiAocmV0KSB7CiAJCXJhbmdlX3RyZWVfc2V0KCZhbXA7YXJlbmEtJmd0O3J0LCB2bWYtJmd0O3Bnb2ZmLCAxKTsKLQkJZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7Ci0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQlnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnOwogCX0KIAlmbHVzaF92bWFwX2NhY2hlKGthZGRyLCBQQUdFX1NJWkUpOwogCWJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7CiYjNDM7CS8qIG5ld19wYWdlIHdhcyBjb25zdW1lZCAqLwomIzQzOwlwYWdlID0gbmV3X3BhZ2U7CiYjNDM7CW5ld19wYWdlID0gTlVMTDsKIG91dDoKIAlwYWdlX3JlZl9hZGQocGFnZSwgMSk7CiAJcmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7YXJlbmEtJmd0O3NwaW5sb2NrLCBmbGFncyk7CiYjNDM7CWlmIChuZXdfcGFnZSkKJiM0MzsJCWZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTsKIAl2bWYtJmd0O3BhZ2UgPSBwYWdlOwogCXJldHVybiAwOwotb3V0X3NpZ3NlZ3ZfbWVtY2c6CiYjNDM7CiYjNDM7b3V0X2Vycl9sb2NrZWRfbWVtY2c6CiAJYnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTsKLW91dF9zaWdzZWd2OgomIzQzO291dF9lcnJfbG9ja2VkOgogCXJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2FyZW5hLSZndDtzcGlubG9jaywgZmxhZ3MpOwotCXJldHVybiBWTV9GQVVMVF9TSUdTRUdWOwomIzQzOwlpZiAobmV3X3BhZ2UpCiYjNDM7CQlmcmVlX3BhZ2VzX25vbG9jayhuZXdfcGFnZSwgMCk7CiYjNDM7CXJldHVybiBmYXVsdF9yZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYXJlbmFfdm1fb3BzID0gewpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwppbmRleCA2ODc0YmExNDI0YWYwLi5mOWI4MTYzOGU1MzdhIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwpAQCAtNjAyLDE1ICYjNDM7NjAyLDE0IEBAIHN0YXRpYyBib29sIGNhbl9hbGxvY19wYWdlcyh2b2lkKQogCQkhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCk7CiB9CiAKJiM0MzsjZGVmaW5lIEJQRl9QQUdFX0dGUCAoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKQomIzQzOwogc3RhdGljIHN0cnVjdCBwYWdlICpfX2JwZl9hbGxvY19wYWdlKGludCBuaWQpCiB7CiAJaWYgKCFjYW5fYWxsb2NfcGFnZXMoKSkKIAkJcmV0dXJuIGFsbG9jX3BhZ2VzX25vbG9jayhfX0dGUF9BQ0NPVU5ULCBuaWQsIDApOwogCi0JcmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobmlkLAotCQkJCUdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfQUNDT1VOVAotCQkJCXwgX19HRlBfTk9XQVJOLAotCQkJCTApOwomIzQzOwlyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShuaWQsIEJQRl9QQUdFX0dGUCwgMCk7CiB9CiAKIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsCkBAIC02MzYsNiAmIzQzOzYzNSwyMCBAQCBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEZvciBjYWxsZXJzIHRoYXQga25vdyB0aGV5IHJ1biBpbiBhIHNsZWVwYWJsZSBjb250ZXh0LCBlLmcuIGEgdXNlciBwYWdlCiYjNDM7ICogZmF1bHQgaGFuZGxlci4gY2FuX2FsbG9jX3BhZ2VzKCkgaXMgYSBjb25zZXJ2YXRpdmUgZ3Vlc3MgbWFkZSBmb3IgQlBGCiYjNDM7ICogcHJvZ3JhbSBjb250ZXh0IC0gbm90YWJseSBpdCBpcyBhbHdheXMgZmFsc2Ugb24gUFJFRU1QVF9SVCAtIHNvIGdvaW5nCiYjNDM7ICogdGhyb3VnaCBicGZfbWFwX2FsbG9jX3BhZ2VzKCkgdGhlcmUgd291bGQgbmVlZGxlc3NseSBwaWNrIHRoZQomIzQzOyAqIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IsIHdoaWNoIG5ldmVyIHJlY2xhaW1zIGFuZCBuZXZlciBlbmdhZ2VzIHRoZSBPT00KJiM0MzsgKiBtYWNoaW5lcnkuCiYjNDM7ICovCiYjNDM7c3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCkKJiM0Mzt7CiYjNDM7CW1pZ2h0X3NsZWVwKCk7CiYjNDM7CXJldHVybiBhbGxvY19wYWdlc19ub2RlKG1hcC0mZ3Q7bnVtYV9ub2RlLCBCUEZfUEFHRV9HRlAsIDApOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYnRmX2ZpZWxkX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogewogCWNvbnN0IHN0cnVjdCBidGZfZmllbGQgKmYxID0gYSwgKmYyID0gYjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKaW5kZXggNDVjZDBiNDc5ZmUzNS4uNDE4M2ZmNjE1MGMyOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKQEAgLTE4OCw2ICYjNDM7MTg4LDczIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKIAlyZXR1cm4gX193cml0ZV9jZ3JvdXBfZmlsZShjZ3JvdXBfcGF0aCwgZmlsZSwgYnVmKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgX19yZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKmNncm91cF9wYXRoLCBjb25zdCBjaGFyICpmaWxlLAomIzQzOwkJCSAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWNoYXIgZmlsZV9wYXRoW1BBVEhfTUFYICYjNDM7IDFdOwomIzQzOwlzc2l6ZV90IGdvdDsKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlzbnByaW50ZihmaWxlX3BhdGgsIHNpemVvZihmaWxlX3BhdGgpLCAmIzM0OyVzLyVzJiMzNDssIGNncm91cF9wYXRoLCBmaWxlKTsKJiM0MzsJZmQgPSBvcGVuKGZpbGVfcGF0aCwgT19SRE9OTFkpOwomIzQzOwlpZiAoZmQgJmx0OyAwKSB7CiYjNDM7CQlsb2dfZXJyKCYjMzQ7T3BlbmluZyAlcyYjMzQ7LCBmaWxlX3BhdGgpOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZ290ID0gcmVhZChmZCwgYnVmLCBsZW4gLSAxKTsKJiM0MzsJaWYgKGdvdCAmbHQ7IDApIHsKJiM0MzsJCWxvZ19lcnIoJiMzNDtSZWFkaW5nICVzJiMzNDssIGZpbGVfcGF0aCk7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwlidWZbZ290XSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcmVhZF9jZ3JvdXBfZmlsZSgpIC0gUmVhZCBmcm9tIGEgY2dyb3VwIGZpbGUKJiM0MzsgKiBAcmVsYXRpdmVfcGF0aDogVGhlIGNncm91cCBwYXRoLCByZWxhdGl2ZSB0byB0aGUgd29ya2RpcgomIzQzOyAqIEBmaWxlOiBUaGUgbmFtZSBvZiB0aGUgZmlsZSBpbiBjZ3JvdXBmcyB0byByZWFkIGZyb20KJiM0MzsgKiBAYnVmOiBCdWZmZXIgdG8gcmVhZCBpbnRvLCBOVUwtdGVybWluYXRlZCBvbiBzdWNjZXNzCiYjNDM7ICogQGxlbjogU2l6ZSBvZiBAYnVmCiYjNDM7ICoKJiM0MzsgKiBSZWFkIGZyb20gYSBmaWxlIGluIHRoZSBnaXZlbiBjZ3JvdXAmIzM5O3MgZGlyZWN0b3J5LgomIzQzOyAqCiYjNDM7ICogSWYgc3VjY2Vzc2Z1bCwgMCBpcyByZXR1cm5lZC4KJiM0MzsgKi8KJiM0MztpbnQgcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLAomIzQzOwkJICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwljaGFyIGNncm91cF9wYXRoW1BBVEhfTUFYIC0gMjRdOwomIzQzOwomIzQzOwlmb3JtYXRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpOwomIzQzOwlyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZSBpbiB0aGUgcGFyZW50IHByb2Nlc3MKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2RpcgomIzQzOyAqIEByZWxhdGl2ZV9wYXRoOiBUaGUgY2dyb3VwIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgcHJvY2VzcyB3b3JrZGlyCiYjNDM7ICogQGZpbGU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIGNncm91cGZzIHRvIHJlYWQgZnJvbQomIzQzOyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3MKJiM0MzsgKiBAbGVuOiBTaXplIG9mIEBidWYKJiM0MzsgKgomIzQzOyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCYjMzk7cyBkaXJlY3RvcnkgdW5kZXIgdGhlIHBhcmVudCBwcm9jZXNzCiYjNDM7ICogd29ya2Rpci4KJiM0MzsgKgomIzQzOyAqIElmIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQuCiYjNDM7ICovCiYjNDM7aW50IHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiYjNDM7CQkJICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWNoYXIgY2dyb3VwX3BhdGhbUEFUSF9NQVggLSAyNF07CiYjNDM7CiYjNDM7CWZvcm1hdF9wYXJlbnRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpOwomIzQzOwlyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKSAtIFNldHVwIHRoZSBjZ3JvdXAgZW52aXJvbm1lbnQKICAqCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCmluZGV4IDM4NTczMDRiZTg3NDEuLmQ0MmQyZTEzMDQ0ZTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCkBAIC0xNSw2ICYjNDM7MTUsMTAgQEAgaW50IHdyaXRlX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiAJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Zik7CiBpbnQgd3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiAJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Zik7CiYjNDM7aW50IHJlYWRfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKJiM0MzsJCSAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKJiM0MztpbnQgcmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKJiM0MzsJCQkgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKIGludCBjZ3JvdXBfc2V0dXBfYW5kX2pvaW4oY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCk7CiBpbnQgZ2V0X3Jvb3RfY2dyb3VwKHZvaWQpOwogaW50IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmM1N2I5ODQ5NGNmYWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jCkBAIC0wLDAgJiM0MzsxLDE1OCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvdXNlci5oJmd0OwomIzQzOyNpZm5kZWYgUEFHRV9TSVpFIC8qIG9uIHNvbWUgYXJjaHMgaXQgY29tZXMgaW4gc3lzL3VzZXIuaCAqLwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjZGVmaW5lIFBBR0VfU0laRSBnZXRwYWdlc2l6ZSgpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjZ3JvdXBfaGVscGVycy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2FyZW5hX21lbWNnLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBDR19QQVRICQkmIzM0Oy9hcmVuYV9tZW1jZyYjMzQ7CiYjNDM7CiYjNDM7LyogQnVkZ2V0IHRoZSBhcmVuYSBnZXRzIG9uIHRvcCBvZiB3aGF0ZXZlciBpcyBhbHJlYWR5IGNoYXJnZWQgYWZ0ZXIgbG9hZC4gKi8KJiM0MzsjZGVmaW5lIEFSRU5BX0JVREdFVAkoNjQgKiAxMDI0ICogMTAyNCkKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkdW1wX21lbWNnKGludCAoKnJkKShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpKQomIzQzO3sKJiM0MzsJY2hhciBidWZbNTEyXTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogbWVtb3J5LmN1cnJlbnQgcmVhZHMgMCBvbmNlIHRoZSBjaGlsZCBoYXMgbGVmdCB0aGUgY2dyb3VwLCBzbyBpdCBvbmx5CiYjNDM7CSAqIGNhcnJpZXMgaW5mb3JtYXRpb24gd2hlbiBkdW1wZWQgZnJvbSB0aGUgbGl2ZSBjaGlsZDsgbWVtb3J5LnBlYWsgYW5kCiYjNDM7CSAqIG1lbW9yeS5ldmVudHMgc3Vydml2ZSB0aGUgY2hpbGQgYW5kIHRlbGwgdGhlIHN0b3J5IGVpdGhlciB3YXkuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXJkKENHX1BBVEgsICYjMzQ7bWVtb3J5LmN1cnJlbnQmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkuY3VycmVudDogJXMmIzM0OywgYnVmKTsKJiM0MzsJaWYgKCFyZChDR19QQVRILCAmIzM0O21lbW9yeS5tYXgmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkubWF4OiAlcyYjMzQ7LCBidWYpOwomIzQzOwlpZiAoIXJkKENHX1BBVEgsICYjMzQ7bWVtb3J5LnBlYWsmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkucGVhazogJXMmIzM0OywgYnVmKTsKJiM0MzsJaWYgKCFyZChDR19QQVRILCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkuZXZlbnRzOlxuJXMmIzM0OywgYnVmKTsKJiM0MzsJZmZsdXNoKHN0ZGVycik7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlYWQgb25lIGtleSBmcm9tIGEgZmxhdCBrZXllZCBjZ3JvdXAgZmlsZSwgZS5nLiAmIzM0O29vbV9raWxsJiMzNDsgaW4gbWVtb3J5LmV2ZW50cy4gKi8KJiM0MztzdGF0aWMgbG9uZyBjZ19yZWFkX2tleShjb25zdCBjaGFyICpjZywgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqa2V5KQomIzQzO3sKJiM0MzsJY2hhciBidWZbNTEyXSwgKnA7CiYjNDM7CiYjNDM7CWlmIChyZWFkX2Nncm91cF9maWxlKGNnLCBmaWxlLCBidWYsIHNpemVvZihidWYpKSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcCA9IHN0cnN0cihidWYsIGtleSk7CiYjNDM7CWlmICghcCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcmV0dXJuIHN0cnRvbChwICYjNDM7IHN0cmxlbihrZXkpLCBOVUxMLCAxMCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtY2codm9pZCkKJiM0Mzt7CiYjNDM7CWludCBjZ3JvdXBfZmQgPSAtMSwgc3RhdHVzLCBlcnI7CiYjNDM7CWNvbnN0IGxvbmcgcHMgPSBQQUdFX1NJWkU7CiYjNDM7CWNoYXIgYnVmWzY0XTsKJiM0MzsJcGlkX3QgcGlkOwomIzQzOwomIzQzOwllcnIgPSBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NldHVwX2Nncm91cF9lbnZpcm9ubWVudCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY2dyb3VwX2ZkID0gY3JlYXRlX2FuZF9nZXRfY2dyb3VwKENHX1BBVEgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsICYjMzQ7Y3JlYXRlX2FuZF9nZXRfY2dyb3VwJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qIE5vIG1lbW9yeSBjb250cm9sbGVyIC0mZ3Q7IG5vdGhpbmcgdG8gdGVzdC4gKi8KJiM0MzsJaWYgKHJlYWRfY2dyb3VwX2ZpbGUoQ0dfUEFUSCwgJiMzNDttZW1vcnkuY3VycmVudCYjMzQ7LCBidWYsIHNpemVvZihidWYpKSkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7JXM6U0tJUDpubyBtZW1vcnkgY29udHJvbGxlclxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXBpZCA9IGZvcmsoKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UocGlkLCAwLCAmIzM0O2ZvcmsmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQlzdHJ1Y3QgYXJlbmFfbWVtY2cgKmNza2VsOwomIzQzOwkJX191MzIgaSwgbnBhZ2VzOwomIzQzOwkJY2hhciAqYmFzZTsKJiM0MzsJCXNpemVfdCBzejsKJiM0MzsJCWxvbmcgY3VyOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIERvIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgY2hpbGQ6IHRoZSBhcmVuYSB2bWEgaXMgVk1fRE9OVENPUFkgc28KJiM0MzsJCSAqIGl0IHdvdWxkIG5vdCBzdXJ2aXZlIGZvcmsoKSwgb25seSB0aGUgY2hpbGQgc2hvdWxkIGJlIHVuZGVyIHRoZQomIzQzOwkJICogbGltaXQgc28gdGhhdCBhIG1lbWNnIE9PTSBjYW5ub3QgcGljayB0ZXN0X3Byb2dzLCBhbmQgYSBtYXAgaXMKJiM0MzsJCSAqIGNoYXJnZWQgdG8gdGhlIG1lbWNnIG9mIHRoZSB0YXNrIHRoYXQgY3JlYXRlcyBpdCAtIHNvIGpvaW4KJiM0MzsJCSAqIGJlZm9yZSBsb2FkLiBUaGUgY2dyb3VwIHdvcmsgZGlyIGJlbG9uZ3MgdG8gdGhlIHBhcmVudCB0aGF0IHNldAomIzQzOwkJICogdGhlIGVudmlyb25tZW50IHVwLCBzbyByZWFjaCBpdCB3aXRoIHRoZSBfcGFyZW50KCkgaGVscGVycy4KJiM0MzsJCSAqIEVycm9ycyBhcmUgcmVwb3J0ZWQgdG8gdGhlIHBhcmVudCB0aHJvdWdoIHRoZSBleGl0IGNvZGUsIHNpbmNlCiYjNDM7CQkgKiBBU1NFUlRfKiBpbiBhIGZvcmtlZCBjaGlsZCBkb2VzIG5vdCByZWFjaCBpdC4KJiM0MzsJCSAqLwomIzQzOwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslZCYjMzQ7LCBnZXRwaWQoKSk7CiYjNDM7CQlpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsICYjMzQ7Y2dyb3VwLnByb2NzJiMzNDssIGJ1ZikpCiYjNDM7CQkJX2V4aXQoMik7CiYjNDM7CiYjNDM7CQljc2tlbCA9IGFyZW5hX21lbWNnX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CQlpZiAoIWNza2VsKQomIzQzOwkJCV9leGl0KDMpOwomIzQzOwomIzQzOwkJYmFzZSA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUoY3NrZWwtJmd0O21hcHMuYXJlbmEsICZhbXA7c3opOwomIzQzOwkJaWYgKCFiYXNlKQomIzQzOwkJCV9leGl0KDQpOwomIzQzOwkJbnBhZ2VzID0gYnBmX21hcF9fbWF4X2VudHJpZXMoY3NrZWwtJmd0O21hcHMuYXJlbmEpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIENhcCBvbmx5IG5vdywgYWZ0ZXIgbG9hZDogZXZlcnl0aGluZyBidXQgdGhlIGZhdWx0LWluIGlzCiYjNDM7CQkgKiBjaGFyZ2VkLCBzbyB0aGUgYXJlbmEgZ2V0cyBhIGZpeGVkIGJ1ZGdldCByZWdhcmRsZXNzIG9mIHdoYXQKJiM0MzsJCSAqIHRoZSBsb2FkIGl0c2VsZiBjb3N0LCBhbmQgdGhlIGxvYWQgY2FuIG5ldmVyIGhpdCB0aGUgbGltaXQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyZWFkX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCAmIzM0O21lbW9yeS5jdXJyZW50JiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKQomIzQzOwkJCV9leGl0KDUpOwomIzQzOwkJY3VyID0gc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwomIzQzOwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslbGQmIzM0OywgY3VyICYjNDM7IEFSRU5BX0JVREdFVCk7CiYjNDM7CQlpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsICYjMzQ7bWVtb3J5Lm1heCYjMzQ7LCBidWYpKQomIzQzOwkJCV9leGl0KDYpOwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5wYWdlczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJYmFzZVsoc2l6ZV90KWkgKiBwc10gPSAxOwomIzQzOwkJLyogRmF1bHRlZCBldmVyeXRoaW5nIHdpdGhvdXQgZHlpbmc6IGR1bXAgd2h5IChvbmx5IHVuZGVyIC12KS4gKi8KJiM0MzsJCWR1bXBfbWVtY2cocmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQpOwomIzQzOwkJX2V4aXQoMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfRVEod2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCAwKSwgcGlkLCAmIzM0O3dhaXRwaWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogQSBub24temVybyBleGl0IG1lYW5zIHRoZSBjaGlsZCBmYWlsZWQgdG8gc2V0IHVwOyB0aGUgY29kZSBzYXlzIHdoZXJlLiAqLwomIzQzOwlpZiAoV0lGRVhJVEVEKHN0YXR1cykgJmFtcDsmYW1wOyBXRVhJVFNUQVRVUyhzdGF0dXMpKSB7CiYjNDM7CQlBU1NFUlRfT0soV0VYSVRTVEFUVVMoc3RhdHVzKSwgJiMzNDtjaGlsZCBzZXR1cCYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZhdWx0aW5nIGEgdmFsaWQgYXJlbmEgYWRkcmVzcyB1bnRpbCBtZW1vcnkubWF4IGlzIGhpdCBtdXN0IG5vdCBsb29rCiYjNDM7CSAqIGxpa2UgYW4gaW52YWxpZCBhY2Nlc3MuIFdpdGhvdXQgdGhlIGZpeCB0aGUgZmF1bHQgcGF0aCBhbGxvY2F0ZWQgd2l0aAomIzQzOwkgKiB0aGUgbm9uLWJsb2NraW5nIGFsbG9jYXRvciwgdHVybmVkIGl0cyAtRU5PTUVNIGludG8gVk1fRkFVTFRfU0lHU0VHViwKJiM0MzsJICogYW5kIHRoZSBjaGlsZCBkaWVkIHdpdGggU0lHU0VHViBvbiBhIHZhbGlkIGFkZHJlc3M7IG5vdyBpdCBpcyBoYW5kbGVkCiYjNDM7CSAqIGJ5IHRoZSBtZW1jZyBPT00gcGF0aCBpbnN0ZWFkLiBBIFNJR0tJTEwgYWxvbmUgd291bGQgbm90IHByb3ZlIHRoZQomIzQzOwkgKiBtZW1jZyBPT00ga2lsbGVyIGRpZCBpdCAoYSBnbG9iYWwgT09NIG9yIGFuIHVucmVsYXRlZCBjcmFzaCBjb3VsZCBhbHNvCiYjNDM7CSAqIGtpbGwgdGhlIGNoaWxkKSwgc28gY2hlY2sgbWVtb3J5LmV2ZW50cy5vb21fa2lsbCwgd2hpY2ggcmVjb3JkcyB0aGUKJiM0MzsJICogbWVtY2cgT09NIGFuZCBzdXJ2aXZlcyB0aGUgY2hpbGQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIUFTU0VSVF9UUlVFKFdJRlNJR05BTEVEKHN0YXR1cyksICYjMzQ7Y2hpbGQga2lsbGVkIGJ5IHNpZ25hbCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9HRShjZ19yZWFkX2tleShDR19QQVRILCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtvb21fa2lsbCYjMzQ7KSwgMSwKJiM0MzsJCSAgICAgICAmIzM0O21lbWNnIG9vbV9raWxsJiMzNDspKQomIzQzOwkJZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlKTsKJiM0MztvdXQ6CiYjNDM7CWlmIChjZ3JvdXBfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGNncm91cF9mZCk7CiYjNDM7CWNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi44ODI1OWNmZWEwNmI2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMKQEAgLTAsMCAmIzQzOzEsMjQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX2FyZW5hX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTsKJiM0MzsJX191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDUwMDAwKTsgLyogbnVtYmVyIG9mIHBhZ2VzICovCiYjNDM7I2lmZGVmIF9fVEFSR0VUX0FSQ0hfYXJtNjQKJiM0MzsJX191bG9uZyhtYXBfZXh0cmEsIDB4MXVsbCAmbHQ7Jmx0OyAzMik7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi8KJiM0MzsjZWxzZQomIzQzOwlfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsICZsdDsmbHQ7IDQ0KTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqLwomIzQzOyNlbmRpZgomIzQzO30gYXJlbmEgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO2ludCBub29wKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMjEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgQXJlbmEgU3Vic3lzdGVtIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBga2VybmVsL2JwZi9hcmVuYS5jYCBhbmQgYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIHRoaXMgbmV3IGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBmdW5jdGlvbiBhbmQgaW50ZWdyYXRpbmcgaXQgaW50byBgYXJlbmFfdm1fZmF1bHRgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhlIGNvbW1lbnQgc3VnZ2VzdHMgaXQmIzM5O3MgaGFuZGxpbmcgcGFnZSBhbGxvY2F0aW9uIG91dHNpZGUgb2YgYSBsb2NrLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIG1lbWNnIE9PTSBraWxsZXIgaW50ZXJhY3Rpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IHNpZ25pZmljYW50IG9uZS4gSSBhbHNvIHNlZSBhIHNlbGZ0ZXN0LCBgYXJlbmFfbWVtY2cuY2AsIHdoaWNoIGlzIGdvb2QgdG8gaGF2ZS4KCk5vdywgbGV0IG1lIGRpZyBhIGJpdCBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMuIE15IHByaW1hcnkgZm9jdXMgaXMgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gTG9va2luZyBpbnRvIGBrZXJuZWwvYnBmL2FyZW5hLmNgIGFuZCBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBJIHNlZSB0aGF0IHRoZSBjaGFuZ2VzIGNlbnRlciBhcm91bmQgYGFyZW5hX3ZtX2ZhdWx0YCwgdGhlIEJQRiBhcmVuYSBtYXAgcGFnZSBmYXVsdCBoYW5kbGVyLCBhbmQgdGhlIG5ldyBoZWxwZXIsIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYC4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRhcmdldCBgYXJlbmFfdm1fZmF1bHRgLiBIb3dldmVyLCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgc28gdGhhdCYjMzk7cyBub3QgaWRlYWwgZm9yIGZ1enppbmcuIEkgaGF2ZSB0byBmaW5kIHRoZSBlbnRyeXBvaW50LiBJcyBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgdGhlIHJpZ2h0IHRhcmdldD8gTm8sIHRoYXQmIzM5O3MganVzdCBhbiBpbnRlcm5hbCBoZWxwZXIuIEhtbSwgd2hhdCBhYm91dCBgYnBmX2FyZW5hX21hcF9hbGxvY2A/IE9yIHBlcmhhcHMgdGhlIG1tYXAgaGFuZGxlciByZWxhdGVkIHRvIHRoZSBhcmVuYT8gSSYjMzk7bSBnb2luZyB0byBzZWFyY2ggZm9yIGBhcmVuYV92bV9vcHNgIGFuZCBgYXJlbmFfdm1fZmF1bHRgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIG92ZXJ2aWV3IG9mIHdoYXQmIzM5O3MgZXhwb3NlZCBhbmQgd2hlcmUgdGhlIHJlbGV2YW50IGNhbGxzIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmVuYV92bV9mYXVsdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmM9NDY0PXN0YXRpYyB2b2lkIGFyZW5hX3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00NzgtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDc5OnN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxua2VybmVsL2JwZi9hcmVuYS5jLTQ4MC17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTU5NT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFyZW5hX3ZtX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTk5LVx0LmNsb3NlXHRcdD0gYXJlbmFfdm1fY2xvc2UsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjAwOlx0LmZhdWx0ICAgICAgICAgID0gYXJlbmFfdm1fZmF1bHQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjAxLX07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmM9NDg9dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9tZW1fdXNhZ2Uodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy05OS1cdCAqIFVzZXItc3BhY2UgZmF1bHQtaW46IHRvdWNoaW5nIHVuYWxsb2NhdGVkIGFyZW5hIHBhZ2VzIGFsbG9jYXRlcyB0aGVtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYzoxMDA6XHQgKiB0aHJvdWdoIGFyZW5hX3ZtX2ZhdWx0KCkuIGxpYmJwZiBtbWFwKClzIHRoZSBhcmVuYSBhdCBtYXBfZXh0cmEgZHVyaW5nXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy0xMDEtXHQgKiBsb2FkLCBzbyBicGZfbWFwX19pbml0aWFsX3ZhbHVlKCkgaGFuZHMgYmFjayB0aGF0IGJhc2UuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM0NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEFyZW5hIFZNIEZhdWx0IFBhdGgqKgoKUmlnaHQsIHNvIHRoZSBgYXJlbmFfdm1fZmF1bHRgIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdGhhdCBnZXRzIGludm9rZWQgd2hlbiBhIHBhZ2UgZmF1bHQgb2NjdXJzIHdpdGhpbiB0aGUgYXJlbmEgbWVtb3J5IHJlZ2lvbiwgYW5kIHRoYXQmIzM5O3MgYWNjZXNzZWQgdmlhIHRoZSBzdGFuZGFyZCBgdm1fb3BlcmF0aW9uc19zdHJ1Y3RgLiBTcGVjaWZpY2FsbHksIEkgYmVsaWV2ZSBpdCYjMzk7cyBnb2luZyB0byBiZSB0aGUgYC5mYXVsdGAgbWV0aG9kIHdpdGhpbiB0aGF0IHN0cnVjdC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSB3aGljaCBtbWFwIGhhbmRsZXIgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIGFyZW5hIG1lbW9yeSBtYXBwaW5ncyBpbml0aWFsbHkuIE15IG1vbmV5JiMzOTtzIG9uIGBhcmVuYV9tYXBfbW1hcGAsIGJ1dCBsZXQmIzM5O3MgcXVpY2tseSBjb25maXJtIHRoYXQmIzM5O3MgdGhlIG9uZS4gTm8gcG9pbnQgbWFraW5nIGFzc3VtcHRpb25zIGhlcmUuIEl0JiMzOTtzIGJlc3QgdG8gdmVyaWZ5IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJlbmFfdm1fb3BzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYXJlbmEuYz00Nzk9c3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTU5NC1cbmtlcm5lbC9icGYvYXJlbmEuYzo1OTU6c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhcmVuYV92bV9vcHMgPSB7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNTk2LVx0Lm9wZW5cdFx0PSBhcmVuYV92bV9vcGVuLFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz02Mzc9c3RhdGljIGludCBhcmVuYV9tYXBfbW1hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjcyLVx0dm1fZmxhZ3Nfc2V0KHZtYSwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlRDT1BZKTtcbmtlcm5lbC9icGYvYXJlbmEuYzo2NzM6XHR2bWEtXHUwMDNldm1fb3BzID0gXHUwMDI2YXJlbmFfdm1fb3BzO1xua2VybmVsL2JwZi9hcmVuYS5jLTY3NC1cdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MDMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgTWFwcGluZyBNZWNoYW5pc20qKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgbWVtb3J5IG1hcHBpbmcgd29ya3MgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgYXJlbmFfbWFwX21tYXBgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgdGhlIGRlc2lnbmF0ZWQgbW1hcCBoYW5kbGVyIGZvciB3aGF0ZXZlciBhcmVuYSBvciByZWdpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gVGhlIGtleSBub3cgaXMgdG8gZmlndXJlIG91dCBpdHMgc2NvcGUgYW5kIGFzc2lnbm1lbnQuIElzIGBhcmVuYV9tYXBfbW1hcGAgYSBmcmVlc3RhbmRpbmcsIG5vbi1zdGF0aWMgZnVuY3Rpb24sIG9yIGlzIGl0IGFjdHVhbGx5IHBsdWdnZWQgaW50byBhIGBicGZfbWFwX29wc2Agc3RydWN0dXJlPyBLbm93aW5nIHRoYXQgd2lsbCB0ZWxsIG1lIGEgbG90IGFib3V0IGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGggdGhlIEJQRiBzdWJzeXN0ZW0gYW5kIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBUaGF0IGRpc3RpbmN0aW9uIGlzIGNydWNpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJlbmFfbWFwX21tYXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcmVuYS5jPTYwMz1zdGF0aWMgdW5zaWduZWQgbG9uZyBhcmVuYV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02MzYtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjM3OnN0YXRpYyBpbnQgYXJlbmFfbWFwX21tYXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjM4LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9Njg4PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02OTItXHQubWFwX2RpcmVjdF92YWx1ZV9hZGRyID0gYXJlbmFfbWFwX2RpcmVjdF92YWx1ZV9hZGRyLFxua2VybmVsL2JwZi9hcmVuYS5jOjY5MzpcdC5tYXBfbW1hcCA9IGFyZW5hX21hcF9tbWFwLFxua2VybmVsL2JwZi9hcmVuYS5jLTY5NC1cdC5tYXBfZ2V0X3VubWFwcGVkX2FyZWEgPSBhcmVuYV9nZXRfdW5tYXBwZWRfYXJlYSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI4MQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqQW5hbHl6aW5nIHRoZSBCUEYgTWFwIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgbWVtb3J5IGlzIG1hbmFnZWQgd2l0aGluIHRoZSBCUEYgbWFwIGNvbnRleHQuIEl0IHNlZW1zIGxpa2UgYGFyZW5hX21hcF9vcHNgIGlzIHRoZSBjZW50cmFsIHBvaW50IGZvciBtYXAgb3BlcmF0aW9ucy4gVGhhdCBtYWtlcyBzZW5zZSwgYSBjb25zaXN0ZW50IGludGVyZmFjZSBpcyBrZXkgaGVyZS4gTm93LCB0aGUgYWN0dWFsIGVudHJ5IHBvaW50IGZvciB0aGUgYG1tYXBgIHN5c2NhbGwsIHdoZW4gZGVhbGluZyB3aXRoIHRoZXNlIEJQRiBtYXBzLCBpcyBlaXRoZXIgZ29pbmcgdG8gYmUgdGhyb3VnaCBgYnBmX21hcF9tbWFwYCBvciBzaW1wbHkgdGhlIGBtbWFwYCBzeXNjYWxsIG9uIHRoZSBCUEYgbWFwIGZpbGUgZGVzY3JpcHRvciwgY29ycmVjdD8gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgc2V0IHVwIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgaW5kaXJlY3Rpb24gaW52b2x2ZWQuIEFuZCwgSSYjMzk7bSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBpcyBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSB0aGUgY3VycmVudCBtb2R1bGUuIEVzc2VudGlhbGx5LCBpcyBpdCBleHBvcnRlZCwgb3IgaXMgaXQgYSBzdGF0aWMgZnVuY3Rpb24gdGhhdCYjMzk7cyBpbnRlcm5hbCB0byB0aGUgbWFwIGltcGxlbWVudGF0aW9uPyBLbm93aW5nIHRoZSBzY29wZSBvZiB0aGF0IGZ1bmN0aW9uIHdpbGwgc2lnbmlmaWNhbnRseSBpbXBhY3QgaG93IEkgdGhpbmsgYWJvdXQgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcyBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTI3ODU9aW50IGJwZl9tYXBfYWxsb2NfcGFnZXMoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG5pZCxcbmluY2x1ZGUvbGludXgvYnBmLmgtMjc4Ni1cdFx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9icGYuaDoyNzg3OnN0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApO1xuaW5jbHVkZS9saW51eC9icGYuaC0yNzg4LSNpZmRlZiBDT05GSUdfTUVNQ0dcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NDc5PXN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01MDMtXHRcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTA0Olx0XHRuZXdfcGFnZSA9IGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUobWFwKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01MDUtXHRcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjE1PWludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1LSAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQ2OnN0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk5MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIEJQRiBNYXAgQWxsb2NhdGlvbiBhbmQgQXJlbmEgQWxsb2NhdGlvbiBTY29wZSoqCgpSaWdodCwgc28gYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzIGV4cGxpY2l0bHkgKm5vdCogZGVjbGFyZWQgYXMgc3RhdGljLCB3aGljaCBtZWFucyBpdCBoYXMgZXh0ZXJuYWwgbGlua2FnZS4gSG1tLCBva2F5LCBJIHVuZGVyc3RhbmQgd2hhdCB0aGUgY29kZSBpcyBkb2luZyBpbiB0aGF0IGZ1bmN0aW9uLCBzbyBJJiMzOTttIHRoaW5raW5nLi4uIE5vdywgaXMgYGFyZW5hX21hcF9hbGxvY2Agc2ltaWxhcmx5IGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIGl0cyBwcmVzdW1lZCBzY29wZT8gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGl0cyBkZWNsYXJhdGlvbiBhbmQgdXNhZ2UgY29udGV4dC4gS25vd2luZyB0aGF0IHdvdWxkIHByb3ZpZGUgc29tZSB1c2VmdWwgZGV0YWlscyBhYm91dCB0aGUgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hX21hcF9hbGxvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmM9MjU5PXN0YXRpYyBpbnQgcG9wdWxhdGVfcGd0YWJsZV9leGNlcHRfcHRlKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0yNjUtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjY2OnN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYXJlbmFfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL2JwZi9hcmVuYS5jLTI2Ny17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTY4OD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJlbmFfbWFwX29wcyA9IHtcbmtlcm5lbC9icGYvYXJlbmEuYy02ODktXHQubWFwX21ldGFfZXF1YWwgPSBicGZfbWFwX21ldGFfZXF1YWwsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjkwOlx0Lm1hcF9hbGxvYyA9IGFyZW5hX21hcF9hbGxvYyxcbmtlcm5lbC9icGYvYXJlbmEuYy02OTEtXHQubWFwX2ZyZWUgPSBhcmVuYV9tYXBfZnJlZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzOTQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIE1hcCBBbGxvY2F0aW9uIFRob3VnaHRzKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgbWFwIGFsbG9jYXRpb24gZmxvdyBoZXJlLiBGaXJzdCB0aG91Z2h0OiBgYXJlbmFfbWFwX2FsbG9jYCBpcyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgdXNlZnVsbmVzcy4gVGhlbiwgSSByZW1lbWJlciB0aGF0IGBtYXBfY3JlYXRlYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBtYXAgY3JlYXRpb24uIEFsc28sIGBicGZfbWFwX21tYXBgIGlzIHRoZSBtbWFwIGVudHJ5IHBvaW50LCBhbHNvIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuCgpUaGUgZmF1bHQgaGFuZGxlciwgYGFyZW5hX3ZtX2ZhdWx0YCwgaXMgYWxzbyBzdGF0aWMsIHNvIEkgY2FuIHByb2JhYmx5IGlnbm9yZSB0aGF0IGZvciBub3cuIFRoZSBrZXkgaGVyZSBpcyB0byBmaW5kIHRoZSBub24tc3RhdGljIEFQSXMuIE5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQsIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBpcyBkZWZpbml0ZWx5ICpub3QqIHN0YXRpYywgYW5kIHRoYXQgc2VlbXMgcmVsZXZhbnQuIFNob3VsZCBJIGFsc28gaW5jbHVkZSBgYnBmX21hcF9tbWFwYCBvciBgbWFwX2NyZWF0ZWA/IEhtbSwgbm8sIGZvY3VzaW5nIG9uIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBtYWtlcyBtb3JlIHNlbnNlLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcy4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgZm9yIGBicGZfbWFwX21tYXBgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBlbHNlIEkgc2hvdWxkIGtub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9tYXBfbW1hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmM9NjM3PXN0YXRpYyBpbnQgYXJlbmFfbWFwX21tYXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTY2Ni1cdC8qXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjY3Olx0ICogYnBmX21hcF9tbWFwKCkgY2hlY2tzIHRoYXQgaXQmIzM5O3MgYmVpbmcgbW1hcGVkIGFzIFZNX1NIQVJFRCBhbmRcbmtlcm5lbC9icGYvYXJlbmEuYy02NjgtXHQgKiBjbGVhcnMgVk1fTUFZRVhFQy4gU2V0IFZNX0RPTlRFWFBBTkQgdG8gYXZvaWQgcG90ZW50aWFsIGNoYW5nZVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEwNjU9c3RhdGljIHNzaXplX3QgYnBmX2R1bW15X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwNzQtLyogY2FsbGVkIGZvciBhbnkgZXh0cmEgbWVtb3J5LW1hcHBlZCByZWdpb25zIChleGNlcHQgaW5pdGlhbCkgKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEwNzU6c3RhdGljIHZvaWQgYnBmX21hcF9tbWFwX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDc2LXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDgzLS8qIGNhbGxlZCBmb3IgYWxsIHVubWFwcGVkIG1lbW9yeSByZWdpb24gKGluY2x1ZGluZyBpbml0aWFsKSAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MTA4NDpzdGF0aWMgdm9pZCBicGZfbWFwX21tYXBfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDg1LXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDkxLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTA5MjpzdGF0aWMgdm1fZmF1bHRfdCBicGZfbWFwX21tYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDkzLXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMDk5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYnBmX21hcF9kZWZhdWx0X3Ztb3BzID0ge1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MTEwMDpcdC5vcGVuXHRcdD0gYnBmX21hcF9tbWFwX29wZW4sXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMTAxOlx0LmNsb3NlXHRcdD0gYnBmX21hcF9tbWFwX2Nsb3NlLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTEwMi19O1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTExMDQ9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBicGZfbWFwX2xhenlfdm1vcHMgPSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMTA1Olx0Lm9wZW5cdFx0PSBicGZfbWFwX21tYXBfb3Blbixcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjExMDY6XHQuY2xvc2VcdFx0PSBicGZfbWFwX21tYXBfY2xvc2UsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMTA3Olx0LmZhdWx0XHRcdD0gYnBmX21hcF9tbWFwX2ZhdWx0LFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTEwOC19O1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMTEwOS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjExMTA6c3RhdGljIGludCBicGZfbWFwX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTExMS17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTE5Mj1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl9tYXBfZm9wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMTk4LVx0LndyaXRlXHRcdD0gYnBmX2R1bW15X3dyaXRlLFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTE5OTpcdC5tbWFwXHRcdD0gYnBmX21hcF9tbWFwLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTIwMC1cdC5wb2xsXHRcdD0gYnBmX21hcF9wb2xsLFxuLS1cbnRvb2xzL2JwZi9icGZ0b29sL2dlbi5jPTQ4ND1zdGF0aWMgdm9pZCBwcmludF9oZXgoY29uc3QgY2hhciAqZGF0YSwgaW50IGRhdGFfc3opXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMtNTAyLVxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmM6NTAzOnN0YXRpYyBzaXplX3QgYnBmX21hcF9tbWFwX3N6KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG50b29scy9icGYvYnBmdG9vbC9nZW4uYy01MDQte1xuLS1cbnRvb2xzL2JwZi9icGZ0b29sL2dlbi5jPTY2MT1zdGF0aWMgdm9pZCBjb2RlZ2VuX2Rlc3Ryb3koc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqb2JqX25hbWUpXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMtNjg5LVx0XHRcdHByaW50ZihcJiMzNDtcXHRza2VsX2ZyZWVfbWFwX2RhdGEoc2tlbC1cdTAwM2UlMSRzLCBza2VsLVx1MDAzZW1hcHMuJTEkcy5pbml0aWFsX3ZhbHVlLCAlMiR6dSk7XFxuXCYjMzQ7LFxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmM6NjkwOlx0XHRcdCAgICAgICBpZGVudCwgYnBmX21hcF9tbWFwX3N6KG1hcCkpO1xudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMtNjkxLVx0XHRjb2RlZ2VuKFwmIzM0O1xcXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmM9NzA0PXN0YXRpYyBpbnQgZ2VuX3RyYWNlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lLCBjb25zdCBjaGFyICpoZWFkZXJfZ3VhcmQpXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMtNzc5LVx0XHRcdH1cdFx0XHRcdFx0XHQgICAgXFxuXFxcbnRvb2xzL2JwZi9icGZ0b29sL2dlbi5jOjc4MDpcdFx0XHRcJiMzNDssIGlkZW50LCBicGZfbWFwX21tYXBfc3oobWFwKSk7XG50b29scy9icGYvYnBmdG9vbC9nZW4uYy03ODEtXHR9XG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMtODgwLVx0XHRcdFwmIzM0OyxcbnRvb2xzL2JwZi9icGZ0b29sL2dlbi5jOjg4MTpcdFx0XHRpZGVudCwgYnBmX21hcF9tbWFwX3N6KG1hcCkpO1xudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMtODgyLVx0XHRcdGNvbnRpbnVlO1xuLS1cbnRvb2xzL2JwZi9icGZ0b29sL2dlbi5jLTg5Ni1cdFx0XHRcJiMzNDssXG50b29scy9icGYvYnBmdG9vbC9nZW4uYzo4OTc6XHRcdCAgICAgICBpZGVudCwgYnBmX21hcF9tbWFwX3N6KG1hcCksIG1tYXBfZmxhZ3MpO1xudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMtODk4LVx0fVxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9MTgyOD1zdGF0aWMgc2l6ZV90IGFycmF5X21hcF9tbWFwX3N6KHVuc2lnbmVkIGludCB2YWx1ZV9zeiwgdW5zaWduZWQgaW50IG1heF9lbnRyaWVzKVxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTgzNy1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTgzODpzdGF0aWMgc2l6ZV90IGJwZl9tYXBfbW1hcF9zeihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xODM5LXtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTE4NTItXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjE4NTM6c3RhdGljIGludCBicGZfbWFwX21tYXBfcmVzaXplKHN0cnVjdCBicGZfbWFwICptYXAsIHNpemVfdCBvbGRfc3osIHNpemVfdCBuZXdfc3opXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTE4NTQte1xuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9MTk3Nz1icGZfb2JqZWN0X19pbml0X2ludGVybmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBlbnVtIGxpYmJwZl9tYXBfdHlwZSB0eXBlLFxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMjAxOC1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MjAxOTpcdG1tYXBfc3ogPSBicGZfbWFwX21tYXBfc3oobWFwKTtcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMjAyMC1cdG1hcC1cdTAwM2VtbWFwZWQgPSBtbWFwKE5VTEwsIG1tYXBfc3osIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz0zMDIwPXN0YXRpYyBpbnQgaW5pdF9hcmVuYV9tYXBfZGF0YShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMzAyNy1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MzAyODpcdG1tYXBfc3ogPSBicGZfbWFwX21tYXBfc3oobWFwKTtcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMzAyOS1cdGlmIChkYXRhX2FsbG9jX3N6IFx1MDAzZSBtbWFwX3N6KSB7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz01MzI1PWJwZl9vYmplY3RfX3BvcHVsYXRlX2ludGVybmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNTM2OC1cdCAqL1xudG9vbHMvbGliL2JwZi9saWJicGYuYzo1MzY5Olx0bW1hcF9zeiA9IGJwZl9tYXBfbW1hcF9zeihtYXApO1xudG9vbHMvbGliL2JwZi9saWJicGYuYy01MzcwLVx0aWYgKG1hcC1cdTAwM2VkZWYubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9NTUFQQUJMRSkge1xuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9NTY0NT1icGZfb2JqZWN0X19jcmVhdGVfbWFwcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNTcyMS1cdFx0XHRcdG1hcC1cdTAwM2VtbWFwZWQgPSBtbWFwKCh2b2lkICopKGxvbmcpbWFwLVx1MDAzZW1hcF9leHRyYSxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6NTcyMjpcdFx0XHRcdFx0XHQgICBicGZfbWFwX21tYXBfc3oobWFwKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNTcyMy1cdFx0XHRcdFx0XHQgICBtYXAtXHUwMDNlbWFwX2V4dHJhID8gTUFQX1NIQVJFRCB8IE1BUF9GSVhFRCA6IE1BUF9TSEFSRUQsXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz03NDc2PXN0YXRpYyBpbnQgYnBmX29iamVjdF9fcmVsb2NhdGUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdGFyZ19idGZfcGF0aClcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTc0OTUtXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjc0OTY6XHRcdG9iai1cdTAwM2VhcmVuYV9kYXRhX29mZiA9IGJwZl9tYXBfbW1hcF9zeihhcmVuYV9tYXApIC1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNzQ5Ny1cdFx0XHRcdCAgICAgIHJvdW5kdXAob2JqLVx1MDAzZWFyZW5hX2RhdGFfc3osIHN5c2NvbmYoX1NDX1BBR0VfU0laRSkpO1xuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9OTU5MD1zdGF0aWMgdm9pZCBicGZfbWFwX19kZXN0cm95KHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYy05NjAwLVx0aWYgKG1hcC1cdTAwM2VtbWFwZWQgXHUwMDI2XHUwMDI2IG1hcC1cdTAwM2VtbWFwZWQgIT0gbWFwLVx1MDAzZW9iai1cdTAwM2VhcmVuYV9kYXRhKVxudG9vbHMvbGliL2JwZi9saWJicGYuYzo5NjAxOlx0XHRtdW5tYXAobWFwLVx1MDAzZW1tYXBlZCwgYnBmX21hcF9tbWFwX3N6KG1hcCkpO1xudG9vbHMvbGliL2JwZi9saWJicGYuYy05NjAyLVx0bWFwLVx1MDAzZW1tYXBlZCA9IE5VTEw7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz0xMTAyMz1pbnQgYnBmX21hcF9fc2V0X3ZhbHVlX3NpemUoc3RydWN0IGJwZl9tYXAgKm1hcCwgX191MzIgc2l6ZSlcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTExMDM1LVxudG9vbHMvbGliL2JwZi9saWJicGYuYzoxMTAzNjpcdFx0bW1hcF9vbGRfc3ogPSBicGZfbWFwX21tYXBfc3oobWFwKTtcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTEwMzctXHRcdG1tYXBfbmV3X3N6ID0gYXJyYXlfbWFwX21tYXBfc3ooc2l6ZSwgbWFwLVx1MDAzZWRlZi5tYXhfZW50cmllcyk7XG50b29scy9saWIvYnBmL2xpYmJwZi5jOjExMDM4Olx0XHRlcnIgPSBicGZfbWFwX21tYXBfcmVzaXplKG1hcCwgbW1hcF9vbGRfc3osIG1tYXBfbmV3X3N6KTtcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTEwMzktXHRcdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NTEKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBCUEYgTWFwIE1tYXAgRXhwbG9yYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IG1lbW9yeSBtYXBwaW5nIHdvcmtzIHdpdGggQlBGIG1hcHMuIEkmIzM5O20gc3RhcnRpbmcgd2l0aCBgYnBmX21hcF9tbWFwYC4gSSBzZWUgaXQmIzM5O3Mgc3RhdGljIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBBaCwgcmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIFRoZSBhY3R1YWwgc3lzY2FsbCBpcyBgbW1hcGAsIGFuZCBpdCBvcGVyYXRlcyBvbiB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBtYXAsIGFuZCAqdGhhdCogcGF0aCBnb2VzIHRocm91Z2ggYGJwZl9tYXBfbW1hcGAuIEdvdCBpdC4KCk5vdywgd2hlcmUgZG9lcyB0aGlzIHdob2xlIG1hcCBjcmVhdGlvbiBwcm9jZXNzIGJlZ2luPyBUaGUgQVBJIGVudHJ5IHBvaW504oCmdGhhdCB3b3VsZCBiZSBgbWFwX2NyZWF0ZWAuIFRpbWUgdG8ganVtcCBiYWNrIGludG8gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgYG1hcF9jcmVhdGVgLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGFsbCBjb25uZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFwX2NyZWF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjQ2NCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2FycmF5LnJzdD0xNDM9QlBGX01BUF9UWVBFX0FSUkFZXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2FycmF5LnJzdC0xNDUtXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfYXJyYXkucnN0OjE0NjpUaGlzIHNuaXBwZXQgc2hvd3MgaG93IHRvIGNyZWF0ZSBhbiBhcnJheSwgdXNpbmcgYGBicGZfbWFwX2NyZWF0ZV9vcHRzYGAgdG9cbkRvY3VtZW50YXRpb24vYnBmL21hcF9hcnJheS5yc3QtMTQ3LXNldCBmbGFncy5cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfYXJyYXkucnN0LTE1Ni0gICAgICAgICAgICBpbnQgZmQ7XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfYXJyYXkucnN0OjE1NzogICAgICAgICAgICBMSUJCUEZfT1BUUyhicGZfbWFwX2NyZWF0ZV9vcHRzLCBvcHRzLCAubWFwX2ZsYWdzID0gQlBGX0ZfTU1BUEFCTEUpO1xuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2FycmF5LnJzdC0xNTgtXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfYXJyYXkucnN0OjE1OTogICAgICAgICAgICBmZCA9IGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9BUlJBWSxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9hcnJheS5yc3QtMTYwLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7ZXhhbXBsZV9hcnJheVwmIzM0OywgICAgICAgLyogbmFtZSAqL1xuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9ibG9vbV9maWx0ZXIucnN0PTE0Mz11c2Vyc3BhY2U6XG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Jsb29tX2ZpbHRlci5yc3QtMTQ4LSAgICB7XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfYmxvb21fZmlsdGVyLnJzdDoxNDk6ICAgICAgICAgICAgTElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgb3B0cyxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9ibG9vbV9maWx0ZXIucnN0LTE1MC0gICAgICAgICAgICAgICAgICAgICAgICAubWFwX2V4dHJhID0gMyk7ICAgICAgICAgICAgIC8qIG51bWJlciBvZiBoYXNoZXMgKi9cbkRvY3VtZW50YXRpb24vYnBmL21hcF9ibG9vbV9maWx0ZXIucnN0LTE1MS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9ibG9vbV9maWx0ZXIucnN0OjE1MjogICAgICAgICAgICByZXR1cm4gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX0JMT09NX0ZJTFRFUixcbkRvY3VtZW50YXRpb24vYnBmL21hcF9ibG9vbV9maWx0ZXIucnN0LTE1My0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7aXB2Nl9ibG9vbVwmIzM0OywgICAgICAvKiBuYW1lICovXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2hhc2gucnN0PTMyPXNoYXJlZCBhY3Jvc3MgQ1BVcyBidXQgaXQgaXMgcG9zc2libGUgdG8gcmVxdWVzdCBhIHBlciBDUFUgTFJVIGxpc3Qgd2l0aFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2hhc2gucnN0OjMzOnRoZSBgYEJQRl9GX05PX0NPTU1PTl9MUlVgYCBmbGFnIHdoZW4gY2FsbGluZyBgYGJwZl9tYXBfY3JlYXRlYGAuICBUaGVcbkRvY3VtZW50YXRpb24vYnBmL21hcF9oYXNoLnJzdC0zNC1mb2xsb3dpbmcgdGFibGUgb3V0bGluZXMgdGhlIHByb3BlcnRpZXMgb2YgTFJVIG1hcHMgZGVwZW5kaW5nIG9uIHRoZSBhXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX29mX21hcHMucnN0PTkzPVRoaXMgc25pcHBldCBzaG93cyBob3cgdG8gY3JlYXRlIGFuIGFycmF5IGJhc2VkIG91dGVyIG1hcDpcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfb2ZfbWFwcy5yc3QtOTctICAgIGludCBjcmVhdGVfb3V0ZXJfYXJyYXkoaW50IGlubmVyX2ZkKSB7XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfb2ZfbWFwcy5yc3Q6OTg6ICAgICAgICAgICAgTElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgb3B0cywgLmlubmVyX21hcF9mZCA9IGlubmVyX2ZkKTtcbkRvY3VtZW50YXRpb24vYnBmL21hcF9vZl9tYXBzLnJzdC05OS0gICAgICAgICAgICBpbnQgZmQ7XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfb2ZfbWFwcy5yc3QtMTAwLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX29mX21hcHMucnN0OjEwMTogICAgICAgICAgICBmZCA9IGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9BUlJBWV9PRl9NQVBTLFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX29mX21hcHMucnN0LTEwMi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O2V4YW1wbGVfYXJyYXlcJiMzNDssICAgICAgIC8qIG5hbWUgKi9cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfb2ZfbWFwcy5yc3Q9MTExPVRoaXMgc25pcHBldCBzaG93cyBob3cgdG8gYWRkIGFuIGlubmVyIG1hcCB0byBhbiBvdXRlciBtYXA6XG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX29mX21hcHMucnN0LTExNy1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9vZl9tYXBzLnJzdDoxMTg6ICAgICAgICAgICAgZmQgPSBicGZfbWFwX2NyZWF0ZShCUEZfTUFQX1RZUEVfREVWTUFQLCBuYW1lLFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX29mX21hcHMucnN0LTExOS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihfX3UzMiksIHNpemVvZihfX3UzMiksIDI1NiwgTlVMTCk7XG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3F1ZXVlX3N0YWNrLnJzdD0xMjg9dXNlcnNwYWNlOlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9xdWV1ZV9zdGFjay5yc3QtMTMzLSAgICB7XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfcXVldWVfc3RhY2sucnN0OjEzNDogICAgICAgICAgICByZXR1cm4gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1FVRVVFLFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3F1ZXVlX3N0YWNrLnJzdC0xMzUtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O3NhbXBsZV9xdWV1ZVwmIzM0OywgLyogbmFtZSAqL1xuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdD00NDQ9dmVyZGljdCBwcm9ncmFtLCBhcyB3ZWxsIGFzIGFkZCBhIHNvY2tldCBlbnRyeS5cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3QtNDUyLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0OjQ1MzpcdFx0bWFwID0gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1NPQ0tNQVAsIE5VTEwsIHNpemVvZihpbnQpLCBzaXplb2YoaW50KSwgMSwgTlVMTCk7XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3QtNDU0LVx0XHRpZiAobWFwIFx1MDAzYyAwKSB7XG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3Q9NjA9Rm9yIG1vcmUgY29udGV4dCBvbiBET05UQ0FDSEUsIHBsZWFzZSBzZWUgdGhlc2UgTGludXggY29tbWl0IGhlYWRlcnM6XG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdC02MS1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0OjYyOi0gT3ZlcnZpZXc6ICA5YWQ2MzQ0NTY4Y2MzIChcJiMzNDttbS9maWxlbWFwOiBjaGFuZ2UgZmlsZW1hcF9jcmVhdGVfZm9saW8oKVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3QtNjMtICB0byB0YWtlIGEgc3RydWN0IGtpb2NiXCYjMzQ7KVxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC5oPTI4Nz1pbnQgaGFzaF9fbWFwX2tlcm5lbF9wYWdlKHVuc2lnbmVkIGxvbmcgZWEsIHVuc2lnbmVkIGxvbmcgcGEsIHBncHJvdF90IHByb3QpO1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLmg6Mjg4OmV4dGVybiBpbnQgX19tZW1pbml0IGhhc2hfX3ZtZW1tYXBfY3JlYXRlX21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC5oLTI4OS1cdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUsXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmg9MTAxMz12b2lkIHVubWFwX2tlcm5lbF9wYWdlKHVuc2lnbmVkIGxvbmcgdmEpO1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTAxNC1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oOjEwMTU6c3RhdGljIGlubGluZSBpbnQgX19tZW1pbml0IHZtZW1tYXBfY3JlYXRlX21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oLTEwMTYtXHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUsXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTAxOS1cdGlmIChyYWRpeF9lbmFibGVkKCkpXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaDoxMDIwOlx0XHRyZXR1cm4gcmFkaXhfX3ZtZW1tYXBfY3JlYXRlX21hcHBpbmcoc3RhcnQsIHBhZ2Vfc2l6ZSwgcGh5cyk7XG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaDoxMDIxOlx0cmV0dXJuIGhhc2hfX3ZtZW1tYXBfY3JlYXRlX21hcHBpbmcoc3RhcnQsIHBhZ2Vfc2l6ZSwgcGh5cyk7XG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaC0xMDIyLX1cbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3JhZGl4Lmg9MzE5PXN0cnVjdCBkZXZfcGFnZW1hcDtcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcmFkaXguaDozMjA6ZXh0ZXJuIGludCBfX21lbWluaXQgcmFkaXhfX3ZtZW1tYXBfY3JlYXRlX21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcmFkaXguaC0zMjEtXHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUsXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC82NC9wZ3RhYmxlLmg9MTQ5PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdlX3B0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoLzY0L3BndGFibGUuaC0yMDAtXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoLzY0L3BndGFibGUuaDoyMDE6ZXh0ZXJuIGludCBfX21lbWluaXQgdm1lbW1hcF9jcmVhdGVfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC82NC9wZ3RhYmxlLmgtMjAyLVx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUsXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfcGd0YWJsZS5jLTEwNi0gKi9cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3BndGFibGUuYzoxMDc6aW50IF9fbWVtaW5pdCBoYXNoX192bWVtbWFwX2NyZWF0ZV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF9wZ3RhYmxlLmMtMTA4LVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplLFxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF9wZ3RhYmxlLmM9OTU0PXN0YXRpYyBpbnQgX19tYXBfa2VybmVsX3BhZ2VfbmlkKHVuc2lnbmVkIGxvbmcgZWEsIHVuc2lnbmVkIGxvbmcgcGEsXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYy05NjAtXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jOjk2MTppbnQgX19tZW1pbml0IHJhZGl4X192bWVtbWFwX2NyZWF0ZV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jLTk2Mi1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplLFxuLS1cbmFyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmM9MjAyPXN0YXRpYyBpbnQgX19tZW1pbml0IF9fdm1lbW1hcF9wb3B1bGF0ZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsXG4tLVxuYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYy0yNjQtXG5hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jOjI2NTpcdFx0cmMgPSB2bWVtbWFwX2NyZWF0ZV9tYXBwaW5nKHN0YXJ0LCBwYWdlX3NpemUsIF9fcGEocCkpO1xuYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYy0yNjYtXHRcdGlmIChyYyBcdTAwM2MgMCkge1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvYm9vazNlX3BndGFibGUuYy0yMi0gKi9cbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvYm9vazNlX3BndGFibGUuYzoyMzppbnQgX19tZW1pbml0IHZtZW1tYXBfY3JlYXRlX21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCxcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvYm9vazNlX3BndGFibGUuYy0yNC1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUsXG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9MTMwMT1zdGF0aWMgaW50IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnKVxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEzMjMtLyoqXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMzI0OiAqIGdtYXBfY3JlYXRlX3NoYWRvdygpIC0gQ3JlYXRlL2ZpbmQgYSBzaGFkb3cgZ3Vlc3QgYWRkcmVzcyBzcGFjZS5cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEzMjUtICogQG1jOiBUaGUgY2FjaGUgdG8gdXNlIHRvIGFsbG9jYXRlIGRhdCB0YWJsZXMuXG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTM0MC0gKi9cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEzNDE6c3RydWN0IGdtYXAgKmdtYXBfY3JlYXRlX3NoYWRvdyhzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnBhcmVudCxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEzNDItXHRcdFx0XHR1bmlvbiBhc2NlIGFzY2UsIGludCBlZGF0X2xldmVsKVxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5oPTEwOD12b2lkIF9nbWFwX2hhbmRsZV92c2llX3Vuc2hhZG93X2V2ZW50KHN0cnVjdCBnbWFwICpwYXJlbnQsIGdmbl90IGdmbik7XG5hcmNoL3MzOTAva3ZtL2dtYXAuaDoxMDk6c3RydWN0IGdtYXAgKmdtYXBfY3JlYXRlX3NoYWRvdyhzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKmdtYXAsXG5hcmNoL3MzOTAva3ZtL2dtYXAuaC0xMTAtXHRcdFx0XHR1bmlvbiBhc2NlIGFzY2UsIGludCBlZGF0X2xldmVsKTtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xMzAwPXN0YXRpYyBzdHJ1Y3QgZ21hcCAqYWNxdWlyZV9nbWFwX3NoYWRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMzI5LWFnYWluOlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTMzMDpcdGdtYXAgPSBnbWFwX2NyZWF0ZV9zaGFkb3codmNwdS1cdTAwM2VhcmNoLm1jLCB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXAsIGFzY2UsIGVkYXQpO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMTMzMS1cdGlmIChJU19FUlIoZ21hcCkpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmg9MjM4PXN0YXRpYyBpbmxpbmUgdTMyIGVmaTY0X2NvbnZlcnRfc3RhdHVzKGVmaV9zdGF0dXNfdCBzdGF0dXMpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmgtMjU2LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmg6MjU3OiNkZWZpbmUgX19lZmk2NF9hcmdtYXBfY3JlYXRlX2V2ZW50KHR5cGUsIHRwbCwgZiwgYywgZXZlbnQpXHRcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lZmkuaC0yNTgtXHQoKHR5cGUpLCAodHBsKSwgKGYpLCAoYyksIGVmaTY0X3plcm9fdXBwZXIoZXZlbnQpKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2lvbWFwLmg9MTY9dm9pZCBfX2lvbWVtICpfX2lvbWFwX2xvY2FsX3Bmbl9wcm90KHVuc2lnbmVkIGxvbmcgcGZuLCBwZ3Byb3RfdCBwcm90KTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2lvbWFwLmgtMTctXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb21hcC5oOjE4OmludCBpb21hcF9jcmVhdGVfd2MocmVzb3VyY2Vfc2l6ZV90IGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgKnByb3QpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vaW9tYXAuaC0xOS1cbi0tXG5hcmNoL3g4Ni9tbS9pb21hcF8zMi5jPTExPXN0YXRpYyBpbnQgaXNfaW9fbWFwcGluZ19wb3NzaWJsZShyZXNvdXJjZV9zaXplX3QgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbmFyY2gveDg2L21tL2lvbWFwXzMyLmMtMjAtXG5hcmNoL3g4Ni9tbS9pb21hcF8zMi5jOjIxOmludCBpb21hcF9jcmVhdGVfd2MocmVzb3VyY2Vfc2l6ZV90IGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgKnByb3QpXG5hcmNoL3g4Ni9tbS9pb21hcF8zMi5jLTIyLXtcbi0tXG5hcmNoL3g4Ni9tbS9pb21hcF8zMi5jLTM4LX1cbmFyY2gveDg2L21tL2lvbWFwXzMyLmM6Mzk6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfY3JlYXRlX3djKTtcbmFyY2gveDg2L21tL2lvbWFwXzMyLmMtNDAtXG4tLVxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jPTEwMD1zdHJ1Y3QgZmZhX2Rydl9pbmZvIHtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmMtMTA5LVx0Ym9vbCBtc2dfZGlyZWN0X3JlcTJfc3VwcDtcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYzoxMTA6XHRib29sIGJpdG1hcF9jcmVhdGVkO1xuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jLTExMS1cdGJvb2wgYnVzX25vdGlmaWVyX3JlZ2lzdGVyZWQ7XG4tLVxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jPTgyNT1zdGF0aWMgaW50IGZmYV9tZW1vcnlfcmVjbGFpbSh1NjQgZ19oYW5kbGUsIHUzMiBmbGFncylcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmMtODQwLVxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jOjg0MTpzdGF0aWMgaW50IGZmYV9ub3RpZmljYXRpb25fYml0bWFwX2NyZWF0ZSh2b2lkKVxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jLTg0Mi17XG4tLVxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jPTIwNTc9c3RhdGljIHZvaWQgZmZhX25vdGlmaWNhdGlvbnNfY2xlYW51cCh2b2lkKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYy0yMDY0LVxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jOjIwNjU6XHRpZiAoZHJ2X2luZm8tXHUwMDNlYml0bWFwX2NyZWF0ZWQpIHtcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYy0yMDY2LVx0XHRmZmFfbm90aWZpY2F0aW9uX2JpdG1hcF9kZXN0cm95KCk7XG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmM6MjA2NzpcdFx0ZHJ2X2luZm8tXHUwMDNlYml0bWFwX2NyZWF0ZWQgPSBmYWxzZTtcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYy0yMDY4LVx0fVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYz0yMDcyPXN0YXRpYyB2b2lkIGZmYV9ub3RpZmljYXRpb25zX3NldHVwKHZvaWQpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jLTIwNzctXHRpZiAoIXJldCkge1xuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jOjIwNzg6XHRcdHJldCA9IGZmYV9ub3RpZmljYXRpb25fYml0bWFwX2NyZWF0ZSgpO1xuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jLTIwNzktXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmMtMjA4My1cbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYzoyMDg0Olx0XHRkcnZfaW5mby1cdTAwM2ViaXRtYXBfY3JlYXRlZCA9IHRydWU7XG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmMtMjA4NS1cdH1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTc0MT1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX29wcyB4ZV9kcm1fcGFnZW1hcF9vcHMgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE3NDgtLyoqXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTc0OTogKiB4ZV9wYWdlbWFwX2NyZWF0ZSgpIC0gQ3JlYXRlIGEgc3RydWN0IHhlX3BhZ2VtYXAgb2JqZWN0XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTc1MC0gKiBAeGU6IFRoZSB4ZSBkZXZpY2UuXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE3NTktICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTc2MDpzdGF0aWMgc3RydWN0IHhlX3BhZ2VtYXAgKnhlX3BhZ2VtYXBfY3JlYXRlKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgeGVfdnJhbV9yZWdpb24gKnZyKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE3NjEte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xODQyPXhlX3BhZ2VtYXBfZmluZF9vcl9jcmVhdGUoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCBkcm1fcGFnZW1hcF9jYWNoZSAqY2FjaGUsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE4NTYtXHR9IGVsc2UgaWYgKCFkcGFnZW1hcCkge1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE4NTc6XHRcdHhwYWdlbWFwID0geGVfcGFnZW1hcF9jcmVhdGUoeGUsIHZyKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODU4LVx0XHRpZiAoSVNfRVJSKHhwYWdlbWFwKSlcbi0tXG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYz0yMTk9c3RhdGljIGludCBfX211c3RfY2hlY2sgYWxsb2NhdGVfY2FjaGVfY29tcG9uZW50cyhzdHJ1Y3QgdmRvX3BhZ2VfY2FjaGUgKmNhY2hlKVxuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5jLTIzMS1cbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5jOjIzMjpcdHJlc3VsdCA9IHZkb19pbnRfbWFwX2NyZWF0ZShjYWNoZS1cdTAwM2VwYWdlX2NvdW50LCBcdTAwMjZjYWNoZS1cdTAwM2VwYWdlX21hcCk7XG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYy0yMzMtXHRpZiAocmVzdWx0ICE9IFZET19TVUNDRVNTKVxuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5jPTEzNDI9aW50IHZkb19pbnZhbGlkYXRlX3BhZ2VfY2FjaGUoc3RydWN0IHZkb19wYWdlX2NhY2hlICpjYWNoZSlcbi0tXG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYy0xMzU3LVx0dmRvX2ludF9tYXBfZnJlZSh2ZG9fZm9yZ2V0KGNhY2hlLVx1MDAzZXBhZ2VfbWFwKSk7XG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYzoxMzU4Olx0cmV0dXJuIHZkb19pbnRfbWFwX2NyZWF0ZShjYWNoZS1cdTAwM2VwYWdlX2NvdW50LCBcdTAwMjZjYWNoZS1cdTAwM2VwYWdlX21hcCk7XG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYy0xMzU5LX1cbi0tXG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYz0yNzM2PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGluaXRpYWxpemVfYmxvY2tfbWFwX3pvbmUoc3RydWN0IGJsb2NrX21hcCAqbWFwLFxuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5jLTI3NjQtXG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYzoyNzY1Olx0cmVzdWx0ID0gdmRvX2ludF9tYXBfY3JlYXRlKFZET19MT0NLX01BUF9DQVBBQ0lUWSwgXHUwMDI2em9uZS1cdTAwM2Vsb2FkaW5nX3BhZ2VzKTtcbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5jLTI3NjYtXHRpZiAocmVzdWx0ICE9IFZET19TVUNDRVNTKVxuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL2RlZHVwZS5jPTIzNDk9c3RhdGljIGludCBfX211c3RfY2hlY2sgaW5pdGlhbGl6ZV96b25lKHN0cnVjdCB2ZG8gKnZkbywgc3RydWN0IGhhc2hfem9uZXMgKnpvbmVzLFxuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL2RlZHVwZS5jLTIzNTUtXG5kcml2ZXJzL21kL2RtLXZkby9kZWR1cGUuYzoyMzU2Olx0cmVzdWx0ID0gdmRvX2ludF9tYXBfY3JlYXRlKFZET19MT0NLX01BUF9DQVBBQ0lUWSwgXHUwMDI2em9uZS1cdTAwM2VoYXNoX2xvY2tfbWFwKTtcbmRyaXZlcnMvbWQvZG0tdmRvL2RlZHVwZS5jLTIzNTctXHRpZiAocmVzdWx0ICE9IFZET19TVUNDRVNTKVxuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL2ludC1tYXAuYz0xNTc9c3RhdGljIGludCBhbGxvY2F0ZV9idWNrZXRzKHN0cnVjdCBpbnRfbWFwICptYXAsIHNpemVfdCBjYXBhY2l0eSlcbi0tXG5kcml2ZXJzL21kL2RtLXZkby9pbnQtbWFwLmMtMTcwLS8qKlxuZHJpdmVycy9tZC9kbS12ZG8vaW50LW1hcC5jOjE3MTogKiB2ZG9faW50X21hcF9jcmVhdGUoKSAtIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGludF9tYXAuXG5kcml2ZXJzL21kL2RtLXZkby9pbnQtbWFwLmMtMTcyLSAqIEBpbml0aWFsX2NhcGFjaXR5OiBUaGUgbnVtYmVyIG9mIGVudHJpZXMgdGhlIG1hcCBzaG91bGQgaW5pdGlhbGx5IGJlIGNhcGFibGUgb2YgaG9sZGluZyAoemVyb1xuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL2ludC1tYXAuYy0xNzctICovXG5kcml2ZXJzL21kL2RtLXZkby9pbnQtbWFwLmM6MTc4OmludCB2ZG9faW50X21hcF9jcmVhdGUoc2l6ZV90IGluaXRpYWxfY2FwYWNpdHksIHN0cnVjdCBpbnRfbWFwICoqbWFwX3B0cilcbmRyaXZlcnMvbWQvZG0tdmRvL2ludC1tYXAuYy0xNzkte1xuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL2ludC1tYXAuaD0yND1zdHJ1Y3QgaW50X21hcDtcbmRyaXZlcnMvbWQvZG0tdmRvL2ludC1tYXAuaC0yNS1cbmRyaXZlcnMvbWQvZG0tdmRvL2ludC1tYXAuaDoyNjppbnQgX19tdXN0X2NoZWNrIHZkb19pbnRfbWFwX2NyZWF0ZShzaXplX3QgaW5pdGlhbF9jYXBhY2l0eSwgc3RydWN0IGludF9tYXAgKiptYXBfcHRyKTtcbmRyaXZlcnMvbWQvZG0tdmRvL2ludC1tYXAuaC0yNy1cbi0tXG5kcml2ZXJzL21kL2RtLXZkby9pby1zdWJtaXR0ZXIuYz00MDU9aW50IHZkb19tYWtlX2lvX3N1Ym1pdHRlcih1bnNpZ25lZCBpbnQgdGhyZWFkX2NvdW50LCB1bnNpZ25lZCBpbnQgcm90YXRpb25faW50ZXJ2YWwsXG4tLVxuZHJpdmVycy9tZC9kbS12ZG8vaW8tc3VibWl0dGVyLmMtNDMyLVx0XHQgKi9cbmRyaXZlcnMvbWQvZG0tdmRvL2lvLXN1Ym1pdHRlci5jOjQzMzpcdFx0cmVzdWx0ID0gdmRvX2ludF9tYXBfY3JlYXRlKG1heF9yZXF1ZXN0c19hY3RpdmUgKiAyLFxuZHJpdmVycy9tZC9kbS12ZG8vaW8tc3VibWl0dGVyLmMtNDM0LVx0XHRcdFx0XHQgICAgXHUwMDI2YmlvX3F1ZXVlX2RhdGEtXHUwMDNlbWFwKTtcbi0tXG5kcml2ZXJzL21kL2RtLXZkby9sb2dpY2FsLXpvbmUuYz01MT1zdGF0aWMgaW50IGluaXRpYWxpemVfem9uZShzdHJ1Y3QgbG9naWNhbF96b25lcyAqem9uZXMsIHpvbmVfY291bnRfdCB6b25lX251bWJlcilcbi0tXG5kcml2ZXJzL21kL2RtLXZkby9sb2dpY2FsLXpvbmUuYy01Ny1cbmRyaXZlcnMvbWQvZG0tdmRvL2xvZ2ljYWwtem9uZS5jOjU4Olx0cmVzdWx0ID0gdmRvX2ludF9tYXBfY3JlYXRlKFZET19MT0NLX01BUF9DQVBBQ0lUWSwgXHUwMDI2em9uZS1cdTAwM2VsYm5fb3BlcmF0aW9ucyk7XG5kcml2ZXJzL21kL2RtLXZkby9sb2dpY2FsLXpvbmUuYy01OS1cdGlmIChyZXN1bHQgIT0gVkRPX1NVQ0NFU1MpXG4tLVxuZHJpdmVycy9tZC9kbS12ZG8vcGh5c2ljYWwtem9uZS5jPTMyNT1zdGF0aWMgaW50IGluaXRpYWxpemVfem9uZShzdHJ1Y3QgdmRvICp2ZG8sIHN0cnVjdCBwaHlzaWNhbF96b25lcyAqem9uZXMpXG4tLVxuZHJpdmVycy9tZC9kbS12ZG8vcGh5c2ljYWwtem9uZS5jLTMzMC1cbmRyaXZlcnMvbWQvZG0tdmRvL3BoeXNpY2FsLXpvbmUuYzozMzE6XHRyZXN1bHQgPSB2ZG9faW50X21hcF9jcmVhdGUoVkRPX0xPQ0tfTUFQX0NBUEFDSVRZLCBcdTAwMjZ6b25lLVx1MDAzZXBibl9vcGVyYXRpb25zKTtcbmRyaXZlcnMvbWQvZG0tdmRvL3BoeXNpY2FsLXpvbmUuYy0zMzItXHRpZiAocmVzdWx0ICE9IFZET19TVUNDRVNTKVxuLS1cbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtNC0gKlxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYzo1OiAqIGJpdG1hcF9jcmVhdGUgIC0gc2V0cyB1cCB0aGUgYml0bWFwIHN0cnVjdHVyZVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy02LSAqIGJpdG1hcF9kZXN0cm95IC0gZGVzdHJveXMgdGhlIGJpdG1hcCBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jPTIwODY9c3RhdGljIHZvaWQgYml0bWFwX2Rlc3Ryb3koc3RydWN0IG1kZGV2ICptZGRldilcbi0tXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTIxMTEtICovXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jOjIxMTI6c3RhdGljIHN0cnVjdCBiaXRtYXAgKl9fYml0bWFwX2NyZWF0ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgc2xvdClcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtMjExMy17XG4tLVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy0yMTk5LVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYzoyMjAwOnN0YXRpYyBpbnQgYml0bWFwX2NyZWF0ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy0yMjAxLXtcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM6MjIwMjpcdHN0cnVjdCBiaXRtYXAgKmJpdG1hcCA9IF9fYml0bWFwX2NyZWF0ZShtZGRldiwgLTEpO1xuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy0yMjAzLVxuLS1cbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM9MjI2OT1zdGF0aWMgdm9pZCAqYml0bWFwX2dldF9mcm9tX3Nsb3Qoc3RydWN0IG1kZGV2ICptZGRldiwgaW50IHNsb3QpXG4tLVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy0yMjczLVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYzoyMjc0Olx0Yml0bWFwID0gX19iaXRtYXBfY3JlYXRlKG1kZGV2LCBzbG90KTtcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtMjI3NS1cdGlmIChJU19FUlIoYml0bWFwKSkge1xuLS1cbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM9MjYyOT1sb2NhdGlvbl9zdG9yZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4tLVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy0yNjk2LVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYzoyNjk3Olx0XHRcdHJ2ID0gbWRfYml0bWFwX2NyZWF0ZV9ub3N5c2ZzKG1kZGV2KTtcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtMjY5OC1cdFx0XHRpZiAocnYpXG4tLVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYz0zMDcxPXN0YXRpYyBzdHJ1Y3QgYml0bWFwX29wZXJhdGlvbnMgYml0bWFwX29wcyA9IHtcbi0tXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTMwNzgtXHQuZW5hYmxlZFx0XHQ9IGJpdG1hcF9lbmFibGVkLFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYzozMDc5Olx0LmNyZWF0ZVx0XHRcdD0gYml0bWFwX2NyZWF0ZSxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtMzA4MC1cdC5yZXNpemVcdFx0XHQ9IGJpdG1hcF9yZXNpemUsXG4tLVxuZHJpdmVycy9tZC9tZC1sbGJpdG1hcC5jPTEwNTE9c3RhdGljIHZvaWQgbWRfbGxiaXRtYXBfZGFlbW9uX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL21kL21kLWxsYml0bWFwLmMtMTEwMy1cbmRyaXZlcnMvbWQvbWQtbGxiaXRtYXAuYzoxMTA0OnN0YXRpYyBpbnQgbGxiaXRtYXBfY3JlYXRlKHN0cnVjdCBtZGRldiAqbWRkZXYpXG5kcml2ZXJzL21kL21kLWxsYml0bWFwLmMtMTEwNS17XG4tLVxuZHJpdmVycy9tZC9tZC1sbGJpdG1hcC5jPTE3NDk9c3RhdGljIHN0cnVjdCBiaXRtYXBfb3BlcmF0aW9ucyBsbGJpdG1hcF9vcHMgPSB7XG4tLVxuZHJpdmVycy9tZC9tZC1sbGJpdG1hcC5jLTE3NTYtXHQuZW5hYmxlZFx0XHQ9IGxsYml0bWFwX2VuYWJsZWQsXG5kcml2ZXJzL21kL21kLWxsYml0bWFwLmM6MTc1NzpcdC5jcmVhdGVcdFx0XHQ9IGxsYml0bWFwX2NyZWF0ZSxcbmRyaXZlcnMvbWQvbWQtbGxiaXRtYXAuYy0xNzU4LVx0LnJlc2l6ZVx0XHRcdD0gbGxiaXRtYXBfcmVzaXplLFxuLS1cbmRyaXZlcnMvbWQvbWQuYz02NDY4PXN0YXRpYyBlbnVtIG1kX3N1Ym1vZHVsZV9pZCBtZF9iaXRtYXBfZ2V0X2lkX2Zyb21fc2Ioc3RydWN0IG1kZGV2ICptZGRldilcbi0tXG5kcml2ZXJzL21kL21kLmMtNjUzNy1cbmRyaXZlcnMvbWQvbWQuYzo2NTM4OmludCBtZF9iaXRtYXBfY3JlYXRlX25vc3lzZnMoc3RydWN0IG1kZGV2ICptZGRldilcbmRyaXZlcnMvbWQvbWQuYy02NTM5LXtcbi0tXG5kcml2ZXJzL21kL21kLmMtNjU4Ni1cbmRyaXZlcnMvbWQvbWQuYzo2NTg3OnN0YXRpYyBpbnQgbWRfYml0bWFwX2NyZWF0ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuZHJpdmVycy9tZC9tZC5jLTY1ODgte1xuLS1cbmRyaXZlcnMvbWQvbWQuYy02NTkwLVxuZHJpdmVycy9tZC9tZC5jOjY1OTE6XHRlcnIgPSBtZF9iaXRtYXBfY3JlYXRlX25vc3lzZnMobWRkZXYpO1xuZHJpdmVycy9tZC9tZC5jLTY1OTItXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbWQvbWQuYz02NjI5PWludCBtZF9ydW4oc3RydWN0IG1kZGV2ICptZGRldilcbi0tXG5kcml2ZXJzL21kL21kLmMtNjc3My1cdCAgICAobWRkZXYtXHUwMDNlYml0bWFwX2luZm8uZmlsZSB8fCBtZGRldi1cdTAwM2ViaXRtYXBfaW5mby5vZmZzZXQpKSB7XG5kcml2ZXJzL21kL21kLmM6Njc3NDpcdFx0ZXJyID0gbWRfYml0bWFwX2NyZWF0ZShtZGRldik7XG5kcml2ZXJzL21kL21kLmMtNjc3NS1cdFx0aWYgKGVycilcbi0tXG5kcml2ZXJzL21kL21kLmM9Nzc4Mz1zdGF0aWMgaW50IHNldF9iaXRtYXBfZmlsZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgZmQpXG4tLVxuZHJpdmVycy9tZC9tZC5jLTc4NDYtXHRcdGlmIChmZCBcdTAwM2U9IDApIHtcbmRyaXZlcnMvbWQvbWQuYzo3ODQ3Olx0XHRcdGVyciA9IG1kX2JpdG1hcF9jcmVhdGUobWRkZXYpO1xuZHJpdmVycy9tZC9tZC5jLTc4NDgtXHRcdFx0aWYgKCFlcnIpXG4tLVxuZHJpdmVycy9tZC9tZC5jPTgwODU9c3RhdGljIGludCB1cGRhdGVfYXJyYXlfaW5mbyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBtZHVfYXJyYXlfaW5mb190ICppbmZvKVxuLS1cbmRyaXZlcnMvbWQvbWQuYy04MTY1LVx0XHRcdG1kZGV2LVx1MDAzZWJpdG1hcF9pZCA9IElEX0JJVE1BUDtcbmRyaXZlcnMvbWQvbWQuYzo4MTY2Olx0XHRcdHJ2ID0gbWRfYml0bWFwX2NyZWF0ZShtZGRldik7XG5kcml2ZXJzL21kL21kLmMtODE2Ny1cdFx0XHRpZiAoIXJ2KVxuLS1cbmRyaXZlcnMvbWQvbWQuaD05Mzk9Ym9vbCBtZGRldl9zZXRfYml0bWFwX29wc19ub3N5c2ZzKHN0cnVjdCBtZGRldiAqbWRkZXYpO1xuZHJpdmVycy9tZC9tZC5oOjk0MDppbnQgbWRfYml0bWFwX2NyZWF0ZV9ub3N5c2ZzKHN0cnVjdCBtZGRldiAqbWRkZXYpO1xuZHJpdmVycy9tZC9tZC5oLTk0MS12b2lkIG1kX2JpdG1hcF9kZXN0cm95X25vc3lzZnMoc3RydWN0IG1kZGV2ICptZGRldik7XG4tLVxuZHJpdmVycy9taXNjL2Zhc3RycGMuYz04MzU9c3RhdGljIGludCBmYXN0cnBjX21hcF9hdHRhY2goc3RydWN0IGZhc3RycGNfdXNlciAqZmwsIGludCBmZCxcbi0tXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jLTkyNi1cbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmM6OTI3OnN0YXRpYyBpbnQgZmFzdHJwY19tYXBfY3JlYXRlKHN0cnVjdCBmYXN0cnBjX3VzZXIgKmZsLCBpbnQgZmQsXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jLTkyOC1cdFx0XHQgICAgICB1NjQgbGVuLCB1MzIgYXR0ciwgc3RydWN0IGZhc3RycGNfbWFwICoqcHBtYXApXG4tLVxuZHJpdmVycy9taXNjL2Zhc3RycGMuYz05OTc9c3RhdGljIGludCBmYXN0cnBjX2NyZWF0ZV9tYXBzKHN0cnVjdCBmYXN0cnBjX2ludm9rZV9jdHggKmN0eClcbi0tXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jLTEwMDgtXHRcdGlmIChpIFx1MDAzYyBjdHgtXHUwMDNlbmJ1ZnMpXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jOjEwMDk6XHRcdFx0ZXJyID0gZmFzdHJwY19tYXBfY3JlYXRlKGN0eC1cdTAwM2VmbCwgY3R4LVx1MDAzZWFyZ3NbaV0uZmQsXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jLTEwMTAtXHRcdFx0XHQgY3R4LVx1MDAzZWFyZ3NbaV0ubGVuZ3RoLCBjdHgtXHUwMDNlYXJnc1tpXS5hdHRyLCBcdTAwMjZjdHgtXHUwMDNlbWFwc1tpXSk7XG4tLVxuZHJpdmVycy9taXNjL2Zhc3RycGMuYz0xNDYyPXN0YXRpYyBpbnQgZmFzdHJwY19pbml0X2NyZWF0ZV9wcm9jZXNzKHN0cnVjdCBmYXN0cnBjX3VzZXIgKmZsLFxuLS1cbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtMTUxMy1cdGlmIChpbml0LmZpbGVsZW4gXHUwMDI2XHUwMDI2IGluaXQuZmlsZWZkKSB7XG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jOjE1MTQ6XHRcdGVyciA9IGZhc3RycGNfbWFwX2NyZWF0ZShmbCwgaW5pdC5maWxlZmQsIGluaXQuZmlsZWxlbiwgMCwgXHUwMDI2bWFwKTtcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtMTUxNS1cdFx0aWYgKGVycilcbi0tXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jPTIwOTU9c3RhdGljIGludCBmYXN0cnBjX3JlcV9tZW1fbWFwKHN0cnVjdCBmYXN0cnBjX3VzZXIgKmZsLCBjaGFyIF9fdXNlciAqYXJncClcbi0tXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jLTIxMTEtXHQvKiBjcmVhdGUgU01NVSBtYXBwaW5nICovXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jOjIxMTI6XHRlcnIgPSBmYXN0cnBjX21hcF9jcmVhdGUoZmwsIHJlcS5mZCwgcmVxLmxlbmd0aCwgMCwgXHUwMDI2bWFwKTtcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtMjExMy1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL210ZC9uYW5kL3NwaS9jb3JlLmM9MTIyMj1zdGF0aWMgc3RydWN0IHNwaV9tZW1fZGlybWFwX2Rlc2MgKnNwaW5hbmRfY3JlYXRlX3JkZXNjKFxuLS1cbmRyaXZlcnMvbXRkL25hbmQvc3BpL2NvcmUuYy0xMjM0LVx0XHRpbmZvLVx1MDAzZWxlbmd0aCA9IG5hbmRkZXZfZXJhc2VibG9ja19zaXplKG5hbmQpO1xuZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jOjEyMzU6XHRcdGRlc2MgPSBkZXZtX3NwaV9tZW1fZGlybWFwX2NyZWF0ZShcdTAwMjZzcGluYW5kLVx1MDAzZXNwaW1lbS1cdTAwM2VzcGktXHUwMDNlZGV2LFxuZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jLTEyMzYtXHRcdFx0XHRcdFx0ICBzcGluYW5kLVx1MDAzZXNwaW1lbSwgaW5mbyk7XG4tLVxuZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jLTEyNDgtXHRcdFx0ICAgICAgIG5hbmRkZXZfcGVyX3BhZ2Vfb29ic2l6ZShuYW5kKTtcbmRyaXZlcnMvbXRkL25hbmQvc3BpL2NvcmUuYzoxMjQ5Olx0XHRkZXNjID0gZGV2bV9zcGlfbWVtX2Rpcm1hcF9jcmVhdGUoXHUwMDI2c3BpbmFuZC1cdTAwM2VzcGltZW0tXHUwMDNlc3BpLVx1MDAzZWRldixcbmRyaXZlcnMvbXRkL25hbmQvc3BpL2NvcmUuYy0xMjUwLVx0XHRcdFx0XHRcdCAgc3BpbmFuZC1cdTAwM2VzcGltZW0sIGluZm8pO1xuLS1cbmRyaXZlcnMvbXRkL25hbmQvc3BpL2NvcmUuYz0xMjU2PXN0YXRpYyBpbnQgc3BpbmFuZF9jcmVhdGVfZGlybWFwKHN0cnVjdCBzcGluYW5kX2RldmljZSAqc3BpbmFuZCxcbi0tXG5kcml2ZXJzL210ZC9uYW5kL3NwaS9jb3JlLmMtMTI4Ni1cdGluZm8ucHJpbWFyeV9vcF90bXBsLmRhdGEuZWNjID0gZW5hYmxlX2VjYztcbmRyaXZlcnMvbXRkL25hbmQvc3BpL2NvcmUuYzoxMjg3Olx0ZGVzYyA9IGRldm1fc3BpX21lbV9kaXJtYXBfY3JlYXRlKFx1MDAyNnNwaW5hbmQtXHUwMDNlc3BpbWVtLVx1MDAzZXNwaS1cdTAwM2VkZXYsXG5kcml2ZXJzL210ZC9uYW5kL3NwaS9jb3JlLmMtMTI4OC1cdFx0XHRcdFx0ICBzcGluYW5kLVx1MDAzZXNwaW1lbSwgXHUwMDI2aW5mbyk7XG4tLVxuZHJpdmVycy9tdGQvc3BpLW5vci9jb3JlLmM9MzcxMT1zdGF0aWMgaW50IHNwaV9ub3JfY3JlYXRlX3JlYWRfZGlybWFwKHN0cnVjdCBzcGlfbm9yICpub3IpXG4tLVxuZHJpdmVycy9tdGQvc3BpLW5vci9jb3JlLmMtMzczNy1cbmRyaXZlcnMvbXRkL3NwaS1ub3IvY29yZS5jOjM3Mzg6XHRub3ItXHUwMDNlZGlybWFwLnJkZXNjID0gZGV2bV9zcGlfbWVtX2Rpcm1hcF9jcmVhdGUobm9yLVx1MDAzZWRldiwgbm9yLVx1MDAzZXNwaW1lbSxcbmRyaXZlcnMvbXRkL3NwaS1ub3IvY29yZS5jLTM3MzktXHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmluZm8pO1xuLS1cbmRyaXZlcnMvbXRkL3NwaS1ub3IvY29yZS5jPTM3NDM9c3RhdGljIGludCBzcGlfbm9yX2NyZWF0ZV93cml0ZV9kaXJtYXAoc3RydWN0IHNwaV9ub3IgKm5vcilcbi0tXG5kcml2ZXJzL210ZC9zcGktbm9yL2NvcmUuYy0zNzY3LVxuZHJpdmVycy9tdGQvc3BpLW5vci9jb3JlLmM6Mzc2ODpcdG5vci1cdTAwM2VkaXJtYXAud2Rlc2MgPSBkZXZtX3NwaV9tZW1fZGlybWFwX2NyZWF0ZShub3ItXHUwMDNlZGV2LCBub3ItXHUwMDNlc3BpbWVtLFxuZHJpdmVycy9tdGQvc3BpLW5vci9jb3JlLmMtMzc2OS1cdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2aW5mbyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvbnBjLmM9MzQ1Nj1zdGF0aWMgdm9pZCBucGNfc3ViYmFua19pbml0KHN0cnVjdCBydnUgKnJ2dSwgc3RydWN0IG5wY19zdWJiYW5rICpzYiwgaW50IGlkeClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9ucGMuYy0zNDY5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvbnBjLmM6MzQ3MDpzdGF0aWMgaW50IG5wY19wY2lmdW5jX21hcF9jcmVhdGUoc3RydWN0IHJ2dSAqcnZ1KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvbnBjLmMtMzQ3MS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvbnBjLmM9NDY1ND1zdGF0aWMgaW50IG5wY19wcml2X2luaXQoc3RydWN0IHJ2dSAqcnZ1KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL25wYy5jLTQ3NTgtXHQvKiBHZXQgbnVtYmVyIG9mIHBjaWZ1bmNzIGluIHRoZSBzeXN0ZW0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL25wYy5jOjQ3NTk6XHRucGNfcHJpdi1cdTAwM2VwZl9jbnQgPSBucGNfcGNpZnVuY19tYXBfY3JlYXRlKHJ2dSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9ucGMuYy00NzYwLVx0bnBjX3ByaXYtXHUwMDNleGFfcGYyaWR4X21hcCA9IGtjYWxsb2MobnBjX3ByaXYtXHUwMDNlcGZfY250LFxuLS1cbmRyaXZlcnMvcGluY3RybC9iY20vcGluY3RybC1pcHJvYy1ncGlvLmM9NDI4PXN0YXRpYyBib29sIGlwcm9jX3BpbmNvbmZfcGFyYW1faXNfZGlzYWJsZWQoc3RydWN0IGlwcm9jX2dwaW8gKmNoaXAsXG4tLVxuZHJpdmVycy9waW5jdHJsL2JjbS9waW5jdHJsLWlwcm9jLWdwaW8uYy00NDItXG5kcml2ZXJzL3BpbmN0cmwvYmNtL3BpbmN0cmwtaXByb2MtZ3Bpby5jOjQ0MzpzdGF0aWMgaW50IGlwcm9jX3BpbmNvbmZfZGlzYWJsZV9tYXBfY3JlYXRlKHN0cnVjdCBpcHJvY19ncGlvICpjaGlwLFxuZHJpdmVycy9waW5jdHJsL2JjbS9waW5jdHJsLWlwcm9jLWdwaW8uYy00NDQtXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGRpc2FibGVfbWFzaylcbi0tXG5kcml2ZXJzL3BpbmN0cmwvYmNtL3BpbmN0cmwtaXByb2MtZ3Bpby5jPTgwND1zdGF0aWMgaW50IGlwcm9jX2dwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3BpbmN0cmwvYmNtL3BpbmN0cmwtaXByb2MtZ3Bpby5jLTkwNC1cdFx0aWYgKHBpbmNvbmZfZGlzYWJsZV9tYXNrKSB7XG5kcml2ZXJzL3BpbmN0cmwvYmNtL3BpbmN0cmwtaXByb2MtZ3Bpby5jOjkwNTpcdFx0XHRyZXQgPSBpcHJvY19waW5jb25mX2Rpc2FibGVfbWFwX2NyZWF0ZShjaGlwLFxuZHJpdmVycy9waW5jdHJsL2JjbS9waW5jdHJsLWlwcm9jLWdwaW8uYy05MDYtXHRcdFx0XHRcdFx0XHQgcGluY29uZl9kaXNhYmxlX21hc2spO1xuLS1cbmRyaXZlcnMvc2NzaS9jeGdiaS9jeGdiM2kvY3hnYjNpLmM9MTAzOT1zdGF0aWMgaW50IGN4Z2IzaV9vZmxkX2luaXQoc3RydWN0IGN4Z2JpX2RldmljZSAqY2Rldilcbi0tXG5kcml2ZXJzL3Njc2kvY3hnYmkvY3hnYjNpL2N4Z2IzaS5jLTEwNTYtXG5kcml2ZXJzL3Njc2kvY3hnYmkvY3hnYjNpL2N4Z2IzaS5jOjEwNTc6XHRyYyA9IGN4Z2JpX2RldmljZV9wb3J0bWFwX2NyZWF0ZShjZGV2LCBjeGdiM2lfc3BvcnRfYmFzZSxcbmRyaXZlcnMvc2NzaS9jeGdiaS9jeGdiM2kvY3hnYjNpLmMtMTA1OC1cdFx0XHRcdFx0Y3hnYjNpX21heF9jb25uZWN0KTtcbi0tXG5kcml2ZXJzL3Njc2kvY3hnYmkvY3hnYjRpL2N4Z2I0aS5jPTE5NDQ9c3RhdGljIGludCBjeGdiNGlfb2ZsZF9pbml0KHN0cnVjdCBjeGdiaV9kZXZpY2UgKmNkZXYpXG4tLVxuZHJpdmVycy9zY3NpL2N4Z2JpL2N4Z2I0aS9jeGdiNGkuYy0xOTUwLVxuZHJpdmVycy9zY3NpL2N4Z2JpL2N4Z2I0aS9jeGdiNGkuYzoxOTUxOlx0cmMgPSBjeGdiaV9kZXZpY2VfcG9ydG1hcF9jcmVhdGUoY2RldiwgY3hnYjRpX3Nwb3J0X2Jhc2UsXG5kcml2ZXJzL3Njc2kvY3hnYmkvY3hnYjRpL2N4Z2I0aS5jLTE5NTItXHRcdFx0XHRcdGN4Z2I0aV9tYXhfY29ubmVjdCk7XG4tLVxuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmM9Njc9c3RhdGljIGlubGluZSB2b2lkIGN4Z2JpX2RlY29kZV9zd190YWcodTMyIHN3X3RhZywgaW50ICppZHgsIGludCAqYWdlKVxuLS1cbmRyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5jLTc0LVxuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmM6NzU6aW50IGN4Z2JpX2RldmljZV9wb3J0bWFwX2NyZWF0ZShzdHJ1Y3QgY3hnYmlfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBpbnQgYmFzZSxcbmRyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5jLTc2LVx0XHRcdFx0dW5zaWduZWQgaW50IG1heF9jb25uKVxuLS1cbmRyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5jLTkyLX1cbmRyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5jOjkzOkVYUE9SVF9TWU1CT0xfR1BMKGN4Z2JpX2RldmljZV9wb3J0bWFwX2NyZWF0ZSk7XG5kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYy05NC1cbi0tXG5kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuaD01OTM9dm9pZCBjeGdiaV9oYmFzX3JlbW92ZShzdHJ1Y3QgY3hnYmlfZGV2aWNlICopO1xuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmgtNTk0LVxuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmg6NTk1OmludCBjeGdiaV9kZXZpY2VfcG9ydG1hcF9jcmVhdGUoc3RydWN0IGN4Z2JpX2RldmljZSAqY2RldiwgdW5zaWduZWQgaW50IGJhc2UsXG5kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuaC01OTYtXHRcdFx0dW5zaWduZWQgaW50IG1heF9jb25uKTtcbi0tXG5kcml2ZXJzL3NwaS9zcGktYWlyb2hhLXNuZmkuYz01MTg9c3RhdGljIGJvb2wgYWlyb2hhX3NuYW5kX3N1cHBvcnRzX29wKHN0cnVjdCBzcGlfbWVtICptZW0sXG4tLVxuZHJpdmVycy9zcGkvc3BpLWFpcm9oYS1zbmZpLmMtNTM0LVxuZHJpdmVycy9zcGkvc3BpLWFpcm9oYS1zbmZpLmM6NTM1OnN0YXRpYyBpbnQgYWlyb2hhX3NuYW5kX2Rpcm1hcF9jcmVhdGUoc3RydWN0IHNwaV9tZW1fZGlybWFwX2Rlc2MgKmRlc2MpXG5kcml2ZXJzL3NwaS9zcGktYWlyb2hhLXNuZmkuYy01MzYte1xuLS1cbmRyaXZlcnMvc3BpL3NwaS1haXJvaGEtc25maS5jPTEwMDg9c3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfY29udHJvbGxlcl9tZW1fb3BzIGFpcm9oYV9zbmFuZF9tZW1fb3BzID0ge1xuLS1cbmRyaXZlcnMvc3BpL3NwaS1haXJvaGEtc25maS5jLTEwMTAtXHQuZXhlY19vcCA9IGFpcm9oYV9zbmFuZF9leGVjX29wLFxuZHJpdmVycy9zcGkvc3BpLWFpcm9oYS1zbmZpLmM6MTAxMTpcdC5kaXJtYXBfY3JlYXRlID0gYWlyb2hhX3NuYW5kX2Rpcm1hcF9jcmVhdGUsXG5kcml2ZXJzL3NwaS9zcGktYWlyb2hhLXNuZmkuYy0xMDEyLVx0LmRpcm1hcF9yZWFkID0gYWlyb2hhX3NuYW5kX2Rpcm1hcF9yZWFkLFxuLS1cbmRyaXZlcnMvc3BpL3NwaS1hc3BlZWQtc21jLmM9Njk0PXN0YXRpYyBpbnQgYXNwZWVkX3NwaV9kb19jYWxpYnJhdGlvbihzdHJ1Y3QgYXNwZWVkX3NwaV9jaGlwICpjaGlwKTtcbmRyaXZlcnMvc3BpL3NwaS1hc3BlZWQtc21jLmMtNjk1LVxuZHJpdmVycy9zcGkvc3BpLWFzcGVlZC1zbWMuYzo2OTY6c3RhdGljIGludCBhc3BlZWRfc3BpX2Rpcm1hcF9jcmVhdGUoc3RydWN0IHNwaV9tZW1fZGlybWFwX2Rlc2MgKmRlc2MpXG5kcml2ZXJzL3NwaS9zcGktYXNwZWVkLXNtYy5jLTY5Ny17XG4tLVxuZHJpdmVycy9zcGkvc3BpLWFzcGVlZC1zbWMuYz03ODI9c3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfY29udHJvbGxlcl9tZW1fb3BzIGFzcGVlZF9zcGlfbWVtX29wcyA9IHtcbi0tXG5kcml2ZXJzL3NwaS9zcGktYXNwZWVkLXNtYy5jLTc4NS1cdC5nZXRfbmFtZSA9IGFzcGVlZF9zcGlfZ2V0X25hbWUsXG5kcml2ZXJzL3NwaS9zcGktYXNwZWVkLXNtYy5jOjc4NjpcdC5kaXJtYXBfY3JlYXRlID0gYXNwZWVkX3NwaV9kaXJtYXBfY3JlYXRlLFxuZHJpdmVycy9zcGkvc3BpLWFzcGVlZC1zbWMuYy03ODctXHQuZGlybWFwX3JlYWQgPSBhc3BlZWRfc3BpX2Rpcm1hcF9yZWFkLFxuLS1cbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jPTgwMT1zdGF0aWMgY29uc3QgY2hhciAqaW50ZWxfc3BpX2dldF9uYW1lKHN0cnVjdCBzcGlfbWVtICptZW0pXG4tLVxuZHJpdmVycy9zcGkvc3BpLWludGVsLmMtODExLVxuZHJpdmVycy9zcGkvc3BpLWludGVsLmM6ODEyOnN0YXRpYyBpbnQgaW50ZWxfc3BpX2Rpcm1hcF9jcmVhdGUoc3RydWN0IHNwaV9tZW1fZGlybWFwX2Rlc2MgKmRlc2MpXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYy04MTMte1xuLS1cbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jPTg1OD1zdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9jb250cm9sbGVyX21lbV9vcHMgaW50ZWxfc3BpX21lbV9vcHMgPSB7XG4tLVxuZHJpdmVycy9zcGkvc3BpLWludGVsLmMtODYyLVx0LmdldF9uYW1lID0gaW50ZWxfc3BpX2dldF9uYW1lLFxuZHJpdmVycy9zcGkvc3BpLWludGVsLmM6ODYzOlx0LmRpcm1hcF9jcmVhdGUgPSBpbnRlbF9zcGlfZGlybWFwX2NyZWF0ZSxcbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jLTg2NC1cdC5kaXJtYXBfcmVhZCA9IGludGVsX3NwaV9kaXJtYXBfcmVhZCxcbi0tXG5kcml2ZXJzL3NwaS9zcGktbWVtLmM9NzA2PXN0YXRpYyBzc2l6ZV90IHNwaV9tZW1fbm9fZGlybWFwX3dyaXRlKHN0cnVjdCBzcGlfbWVtX2Rpcm1hcF9kZXNjICpkZXNjLFxuLS1cbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03MjYtLyoqXG5kcml2ZXJzL3NwaS9zcGktbWVtLmM6NzI3OiAqIHNwaV9tZW1fZGlybWFwX2NyZWF0ZSgpIC0gQ3JlYXRlIGEgZGlyZWN0IG1hcHBpbmcgZGVzY3JpcHRvclxuZHJpdmVycy9zcGkvc3BpLW1lbS5jLTcyOC0gKiBAbWVtOiBTUEkgbWVtIGRldmljZSB0aGlzIGRpcmVjdCBtYXBwaW5nIHNob3VsZCBiZSBjcmVhdGVkIGZvclxuLS1cbmRyaXZlcnMvc3BpL3NwaS1tZW0uYz03Mzk9c3RydWN0IHNwaV9tZW1fZGlybWFwX2Rlc2MgKlxuZHJpdmVycy9zcGkvc3BpLW1lbS5jOjc0MDpzcGlfbWVtX2Rpcm1hcF9jcmVhdGUoc3RydWN0IHNwaV9tZW0gKm1lbSxcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03NDEtXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBzcGlfbWVtX2Rpcm1hcF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03NjYtXG5kcml2ZXJzL3NwaS9zcGktbWVtLmM6NzY3Olx0XHRpZiAoY3Rsci1cdTAwM2VtZW1fb3BzIFx1MDAyNlx1MDAyNiBjdGxyLVx1MDAzZW1lbV9vcHMtXHUwMDNlZGlybWFwX2NyZWF0ZSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03NjgtXHRcdCAgICAhc3BpX21lbV9jb250cm9sbGVyX2lzX2NhcGFibGUoY3Rsciwgc2Vjb25kYXJ5X29wX3RtcGwpKVxuLS1cbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03NzgtXHRkZXNjLVx1MDAzZWluZm8ub3BfdG1wbCA9IFx1MDAyNmRlc2MtXHUwMDNlaW5mby5wcmltYXJ5X29wX3RtcGw7XG5kcml2ZXJzL3NwaS9zcGktbWVtLmM6Nzc5Olx0aWYgKGN0bHItXHUwMDNlbWVtX29wcyBcdTAwMjZcdTAwMjYgY3Rsci1cdTAwM2VtZW1fb3BzLVx1MDAzZWRpcm1hcF9jcmVhdGUpIHtcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03ODAtXHRcdHJldCA9IHNwaV9tZW1fYWNjZXNzX3N0YXJ0KG1lbSk7XG4tLVxuZHJpdmVycy9zcGkvc3BpLW1lbS5jLTc4NS1cbmRyaXZlcnMvc3BpL3NwaS1tZW0uYzo3ODY6XHRcdHJldCA9IGN0bHItXHUwMDNlbWVtX29wcy1cdTAwM2VkaXJtYXBfY3JlYXRlKGRlc2MpO1xuZHJpdmVycy9zcGkvc3BpLW1lbS5jLTc4Ny1cbi0tXG5kcml2ZXJzL3NwaS9zcGktbWVtLmMtODA1LX1cbmRyaXZlcnMvc3BpL3NwaS1tZW0uYzo4MDY6RVhQT1JUX1NZTUJPTF9HUEwoc3BpX21lbV9kaXJtYXBfY3JlYXRlKTtcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy04MDctXG4tLVxuZHJpdmVycy9zcGkvc3BpLW1lbS5jLTgxMi0gKiBUaGlzIGZ1bmN0aW9uIGRlc3Ryb3lzIGEgZGlyZWN0IG1hcHBpbmcgZGVzY3JpcHRvciBwcmV2aW91c2x5IGNyZWF0ZWQgYnlcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYzo4MTM6ICogc3BpX21lbV9kaXJtYXBfY3JlYXRlKCkuXG5kcml2ZXJzL3NwaS9zcGktbWVtLmMtODE0LSAqL1xuLS1cbmRyaXZlcnMvc3BpL3NwaS1tZW0uYz04MjY9c3RhdGljIHZvaWQgZGV2bV9zcGlfbWVtX2Rpcm1hcF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcmVzKVxuLS1cbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy04MzMtLyoqXG5kcml2ZXJzL3NwaS9zcGktbWVtLmM6ODM0OiAqIGRldm1fc3BpX21lbV9kaXJtYXBfY3JlYXRlKCkgLSBDcmVhdGUgYSBkaXJlY3QgbWFwcGluZyBkZXNjcmlwdG9yIGFuZCBhdHRhY2hcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy04MzUtICpcdFx0XHRcdCAgaXQgdG8gYSBkZXZpY2VcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ0OAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCBCUEYgYW5kIHRoZSBrZXJuZWw6CgoqKkJQRiBNYXAgQ3JlYXRpb246IEEgUXVpY2sgUmVhbGl0eSBDaGVjayoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBjcmVhdGluZyBhIEJQRiBtYXAgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHJlY2FsbCB0aGUgcmVsZXZhbnQgZnVuY3Rpb24uIExldCBtZSBzZWUsIGBicGZfbWFwX2NyZWF0ZWAuLi4gd2FpdCwgbm8sIHRoYXQmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBNeSBpbnRlcm5hbCBkYXRhYmFzZSBzYXlzIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZCBgbWFwX2NyZWF0ZWAuIEl0JiMzOTtzIGhvdXNlZCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBidXQgSSB0aGluayBJIHdhcyBhIGxpdHRsZSBvZmYgaW4gdGhlIHByZWNpc2UgbmFtZSBvZiB0aGUgY2FsbC4gUXVpY2sgbWVudGFsIGNvcnJlY3Rpb24g4oCTIGtlZXAgdGhlIGRldGFpbHMgc3RyYWlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NZU0NBTExfREVGSU5FLipicGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9NjMxNj1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ5NS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0OTY6U1lTQ0FMTF9ERUZJTkU1KGJwZiwgaW50LCBjbWQsIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqLCB1YXR0ciwgdW5zaWduZWQgaW50LCBzaXplLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ5Ny1cdFx0c3RydWN0IGJwZl9jb21tb25fYXR0ciBfX3VzZXIgKiwgdWF0dHJfY29tbW9uLCB1bnNpZ25lZCBpbnQsIHNpemVfY29tbW9uKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjgwMgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBCUEYgbWVtb3J5IGFsbG9jYXRpb24uIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhIHN5c3RlbSBjYWxsLCBgYnBmYCwgYW5kIHNwZWNpZmljYWxseSB0aGUgYEJQRl9NQVBfQ1JFQVRFYCBjb21tYW5kLiBUaGUgaW5pdGlhbCBmb2NhbCBwb2ludCBpcyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgYXJlbmFfdm1fZmF1bHRgIGFuZCBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAuIEkgc2VlIHRoYXQgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzIGFuIEFQSSBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBmYXVsdCBoYW5kbGVyLgoKVGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0sIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdGhhdCBgYXJlbmFfdm1fZmF1bHRgIG9wZXJhdGVzIHdpdGhpbiBhIHNsZWVwYWJsZSBjb250ZXh0LiBIb3dldmVyLCBpdCB3YXMsIGF0IHNvbWUgcG9pbnQsIHVzaW5nIGBicGZfbWFwX2FsbG9jX3BhZ2VzYCwgd2hpY2ggZW1wbG95cyBhIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IuIFRoaXMgaXMgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IGlzc3VlIHRoYXQgY291bGQgbGVhZCB0byBkZWFkbG9ja3Mgb3Igb3RoZXIgdW5leHBlY3RlZCBiZWhhdmlvcnMuCgpUaGUgZml4IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgdXNpbmcgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzIHRoZSByaWdodCBjaG9pY2UgYmVjYXVzZSBpdCBsZXZlcmFnZXMgYGFsbG9jX3BhZ2VzX25vZGVgIHdpdGggYEdGUF9LRVJORUxgLCB3aGljaCBpcyBhIHNsZWVwYWJsZSBhbGxvY2F0aW9uLiBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgaXMgZGVmaW5pdGVseSBhIGtleSBzeW1ib2wgdG8gemVybyBpbiBvbi4KCk5vdywgbGV0IG1lIHRoaW5rIGlmIHRoaXMgcGF0Y2ggaXMgbW9yZSBicm9hZC4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kIGBhcmVuYV92bV9mYXVsdGAuIFNpbmNlIGl0JiMzOTtzIG1hcmtlZCBhcyBgc3RhdGljYCwgSSBpbW1lZGlhdGVseSByZWFsaXplIGRpcmVjdCBmdXp6aW5nIGJ5IG5hbWUgd291bGQgYmUgZGlmZmljdWx0LiBIb3dldmVyLCBzeXprYWxsZXIgbWlnaHQgc3RpbGwgYmUgYWJsZSB0byBmdXp6IGl0IGluZGlyZWN0bHkgYnkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgQlBGIGFyZW5hIG1hcCB2aWEgYG1tYXBgLgoKTGV0IG1lIHF1aWNrbHkgc2NhbiB0aGUgbW9kaWZpZWQgY29kZSBhZ2Fpbi4gQWgsIGBicGZfbWFwX2FsbG9jX3BhZ2VzYCBpcyBub3QgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGJlaW5nIGFsdGVyZWQuIEluc3RlYWQsIHRoZSBtb2RpZmljYXRpb24gaXMgb24gYF9fYnBmX2FsbG9jX3BhZ2VgLiBJIHNob3VsZCBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIGRpZ2dpbmcgaW50byB0aGlzIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYnBmX2FsbG9jX3BhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9NTk5PXN0YXRpYyBib29sIGNhbl9hbGxvY19wYWdlcyh2b2lkKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwNi1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwNzpzdGF0aWMgc3RydWN0IHBhZ2UgKl9fYnBmX2FsbG9jX3BhZ2UoaW50IG5pZClcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwOC17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjE1PWludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjIyLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MjM6XHRcdHBnID0gX19icGZfYWxsb2NfcGFnZShuaWQpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjI0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzcwMwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDE2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJIHNlZSB0aGV5JiMzOTt2ZSB0b3VjaGVkIGBfX2JwZl9hbGxvY19wYWdlYCwgYnV0IGl0JiMzOTtzICpzdGF0aWMqLiBUaGF0JiMzOTtzIG5vdCB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgaW4gdGVybXMgb2YgcG90ZW50aWFsIHN5bWJvbCBleHBvc3VyZS4gSG93ZXZlciwgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzICpub3QqIHN0YXRpYywgYW5kIHRoYXQgc2VlbXMgcmVsZXZhbnQuIFJpZ2h0LCBJIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGluIG15IEZvY3VzU3ltYm9scyBsaXN0LiBMZXQgbWUgbWFrZSBhIG5vdGUgb2YgdGhhdC4gQW5kIEkmIzM5O20gc2VlaW5nIGEgY2hhbmdlIHRvIGBhcmVuYV92bV9mYXVsdGAg4oCTIGFub3RoZXIgc3RhdGljIG9uZS4gSG1tbSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuIE9rYXksIGEgcXVpY2sgc2Nhbi4uLiBObywgSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nIGVsc2Ugbm9uLXN0YXRpYy4gR29vZC4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSBpdHNlbGYgaXMgaW4gYGtlcm5lbC9icGYvYXJlbmEuY2AgYW5kIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIEFuZCBga2VybmVsL2JwZi9hcmVuYS5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIFdhaXQsIGhvbGQgb24uIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhhdC4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hXFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTE5PWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXG4tLVxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jPTcxPXN0YXRpYyBpbnQgc2N4X2FyZW5hX2dyb3coc3RydWN0IHNjeF9zY2hlZCAqc2NoLCB1MzIgcGFnZV9jbnQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTg2LVx0dWFkZHIzMiA9ICh1MzIpKHVuc2lnbmVkIGxvbmcpcDtcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYzo4NzpcdC8qIGFyZW5hLm8sIHdoaWNoIGRlZmluZXMgdGhlc2UsIGlzIGJ1aWx0IG9ubHkgb24gTU1VIFx1MDAyNlx1MDAyNiA2NEJJVCAqL1xua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTg4LSNpZiBkZWZpbmVkKENPTkZJR19NTVUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgwNjU9c3RhdGljIGludCBzY3hfYXJlbmFfc2Nhbl9wcm9nKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdm9pZCAqZGF0YSlcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwNjktXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgwNzA6XHQvKiBhcmVuYS5vLCB3aGljaCBkZWZpbmVzIHRoZXNlLCBpcyBidWlsdCBvbmx5IG9uIE1NVSBcdTAwMjZcdTAwMjYgNjRCSVQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA3MS0jaWYgZGVmaW5lZChDT05GSUdfTU1VKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlPTk5Mz0kKE9VVFBVVCkvYmVuY2hfeGRwX2xiLm86ICQoT1VUUFVUKS94ZHBfbGJfYmVuY2guc2tlbC5oIGJlbmNoX2JwZl90aW1pbmcuaFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlOjk5NDokKE9VVFBVVCkvYmVuY2hfbGliYXJlbmEubzogJChMSUJBUkVOQV9CRU5DSF9TS0VMKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlLTk5NS0kKE9VVFBVVCkvYmVuY2hfYnBmX3RpbWluZy5vOiBiZW5jaF9icGZfdGltaW5nLmhcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGU9OTk4PSQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXFxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUtMTAyMS1cdFx0ICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubyBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlOjEwMjI6XHRcdCAkKE9VVFBVVCkvYmVuY2hfbGliYXJlbmEubyBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlLTEwMjMtXHRcdCAkKE9VVFBVVCkvdXNkdF8xLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3NjcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgdGhlIGNvcmUgcmVxdWlyZW1lbnRzOiBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19NTVVgLCBhbmQgYENPTkZJR182NEJJVGAuIFRob3NlIGFyZSBnaXZlbnMgaW4gYW55IEJQRiBpbXBsZW1lbnRhdGlvbiB3b3J0aCBpdHMgc2FsdC4gQnV0IHRoZW4gSSYjMzk7bSBzZWVpbmcgYENPTkZJR19NRU1DR2AgbWVudGlvbmVkIGluIGBpbmNsdWRlL2xpbnV4L2JwZi5oYCwgYW5kIHRoZSBhcmVuYSB0ZXN0cywgc3BlY2lmaWNhbGx5IGBhcmVuYV9tZW1jZy5jYCwgYXJlIGluIHBsYXkgaGVyZS4gVGhhdCB3YXJyYW50cyBhIGRlZXBlciBsb29rLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYENPTkZJR19NRU1DR2AgaXMgKnRydWx5KiBuZWNlc3NhcnkuIE15IGluc3RpbmN0cyBhcmUgdGVsbGluZyBtZSBpdCBpcywgYnV0IEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBga2VybmVsL2JwZi9hcmVuYS5jYC4gQWgsIHRoZXJlIGl0IGlzOiBgYnBmX21hcF9tZW1jZ19lbnRlcmAgYW5kIGBicGZfbWFwX21lbWNnX2V4aXRgLiBUaG9zZSBzdHJvbmdseSBzdWdnZXN0IG1lbWNnIGludGVncmF0aW9uLiBBbmQgdGhlIHRlc3QgaXRzZWxmLCBgYXJlbmFfbWVtY2cuY2AsIGRpcmVjdGx5IHRhcmdldHMgdGhlIG1lbWNnIE9PTSBraWxsZXIsIHdoaWNoIGNvbmZpcm1zIG15IHN1c3BpY2lvbiEgVGhhdCYjMzk7cyBhIGtleSBpbmRpY2F0b3IuIFRoZSB0ZXN0ICpleHBsaWNpdGx5KiBjaGVja3MgdGhlIG1lbWNnIE9PTSBiZWhhdmlvciwgbWVhbmluZyBgQ09ORklHX01FTUNHYCBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkIHRvIGZ1bGx5IGV4ZXJjaXNlIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS4gU28sIGl0JiMzOTtzIG5vdCBqdXN0IGEgZGVwZW5kZW5jeTsgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSB0ZXN0IHNldHVwLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gYGtlcm5lbC9icGYvYXJlbmEuY2AgYWdhaW4sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgcmVsYXRlZCB0byBgQ09ORklHX01FTUNHYC4gR290dGEgbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCBhbGwgdGhlIHBpZWNlcyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTUVNQ0cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEyMDcgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL21lbW9yeS5yc3Q9NDA1PVRvIHVzZSB0aGUgdXNlciBpbnRlcmZhY2U6XG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9tZW1vcnkucnN0LTQwNi1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL21lbW9yeS5yc3Q6NDA3OjEuIEVuYWJsZSBDT05GSUdfQ0dST1VQUyBhbmQgQ09ORklHX01FTUNHIG9wdGlvbnNcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL21lbW9yeS5yc3QtNDA4LTIuIFByZXBhcmUgdGhlIGNncm91cHMgKHNlZSA6cmVmOmBXaHkgYXJlIGNncm91cHMgbmVlZGVkP1xuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vcGFnZW1hcC5yc3Q9NjU9bnVtYmVyIG9mIHRpbWVzIGEgcGFnZSBpcyBtYXBwZWQuXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9wYWdlbWFwLnJzdC0xMDEtICAgbWVtb3J5IGNncm91cCBlYWNoIHBhZ2UgaXMgY2hhcmdlZCB0bywgaW5kZXhlZCBieSBQRk4uIE9ubHkgYXZhaWxhYmxlIHdoZW5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vcGFnZW1hcC5yc3Q6MTAyOiAgIENPTkZJR19NRU1DRyBpcyBzZXQuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3BhZ2VtYXAucnN0LTEwMy1cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3Nocmlua2VyX2RlYnVnZnMucnN0PTE3PVVzYWdlOlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vc2hyaW5rZXJfZGVidWdmcy5yc3QtNTgtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3Nocmlua2VyX2RlYnVnZnMucnN0OjU5OiAgSWYgdGhlIHNocmlua2VyIGlzIG5vdCBtZW1jZy1hd2FyZSBvciBDT05GSUdfTUVNQ0cgaXMgb2ZmLCAwIGlzIHByaW50ZWRcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vc2hyaW5rZXJfZGVidWdmcy5yc3QtNjAtICBhcyBjZ3JvdXAgaW5vZGUgaWQuIElmIHRoZSBzaHJpbmtlciBpcyBub3QgbnVtYS1hd2FyZSwgMCYjMzk7cyBhcmUgcHJpbnRlZFxuLS1cbmFyY2gvYXJtL2NvbmZpZ3Mvb21hcDJwbHVzX2RlZmNvbmZpZz0xMT1DT05GSUdfQ0dST1VQUz15XG5hcmNoL2FybS9jb25maWdzL29tYXAycGx1c19kZWZjb25maWc6MTI6Q09ORklHX01FTUNHPXlcbmFyY2gvYXJtL2NvbmZpZ3Mvb21hcDJwbHVzX2RlZmNvbmZpZy0xMy1DT05GSUdfQkxLX0NHUk9VUD15XG4tLVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZz0xNz1DT05GSUdfTlVNQV9CQUxBTkNJTkc9eVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzoxODpDT05GSUdfTUVNQ0c9eVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0xOS1DT05GSUdfQkxLX0NHUk9VUD15XG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz0yMD1DT05GSUdfTE9HX0JVRl9TSElGVD0xOFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzoyMTpDT05GSUdfTUVNQ0c9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy0yMi1DT05GSUdfQkxLX0NHUk9VUD15XG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZz0yMz1DT05GSUdfTlVNQV9CQUxBTkNJTkc9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzoyNDpDT05GSUdfTUVNQ0c9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0yNS1DT05GSUdfQkxLX0NHUk9VUD15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvY2kyMF9kZWZjb25maWc9MTE9Q09ORklHX0NHUk9VUFM9eVxuYXJjaC9taXBzL2NvbmZpZ3MvY2kyMF9kZWZjb25maWc6MTI6Q09ORklHX01FTUNHPXlcbmFyY2gvbWlwcy9jb25maWdzL2NpMjBfZGVmY29uZmlnLTEzLUNPTkZJR19DR1JPVVBfU0NIRUQ9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2N1MTAwMC1uZW9fZGVmY29uZmlnPTg9Q09ORklHX0NHUk9VUFM9eVxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxMDAwLW5lb19kZWZjb25maWc6OTpDT05GSUdfTUVNQ0c9eVxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxMDAwLW5lb19kZWZjb25maWctMTAtQ09ORklHX0NHUk9VUF9TQ0hFRD15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxODMwLW5lb19kZWZjb25maWc9OD1DT05GSUdfQ0dST1VQUz15XG5hcmNoL21pcHMvY29uZmlncy9jdTE4MzAtbmVvX2RlZmNvbmZpZzo5OkNPTkZJR19NRU1DRz15XG5hcmNoL21pcHMvY29uZmlncy9jdTE4MzAtbmVvX2RlZmNvbmZpZy0xMC1DT05GSUdfQ0dST1VQX1NDSEVEPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9kYjF4eHhfZGVmY29uZmlnPTEwPUNPTkZJR19DR1JPVVBTPXlcbmFyY2gvbWlwcy9jb25maWdzL2RiMXh4eF9kZWZjb25maWc6MTE6Q09ORklHX01FTUNHPXlcbmFyY2gvbWlwcy9jb25maWdzL2RiMXh4eF9kZWZjb25maWctMTItQ09ORklHX0JMS19DR1JPVVA9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE1X2RlZmNvbmZpZz03PUNPTkZJR19JS0NPTkZJR19QUk9DPXlcbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE1X2RlZmNvbmZpZzo4OkNPTkZJR19NRU1DRz15XG5hcmNoL21pcHMvY29uZmlncy9leWVxNV9kZWZjb25maWctOS1DT05GSUdfQkxLX0NHUk9VUD15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZfZGVmY29uZmlnPTc9Q09ORklHX0lLQ09ORklHX1BST0M9eVxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZfZGVmY29uZmlnOjg6Q09ORklHX01FTUNHPXlcbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE2X2RlZmNvbmZpZy05LUNPTkZJR19CTEtfQ0dST1VQPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9leWVxNmxwbHVzX2RlZmNvbmZpZz03PUNPTkZJR19JS0NPTkZJR19QUk9DPXlcbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE2bHBsdXNfZGVmY29uZmlnOjg6Q09ORklHX01FTUNHPXlcbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE2bHBsdXNfZGVmY29uZmlnLTktQ09ORklHX0JMS19DR1JPVVA9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2dlbmVyaWNfZGVmY29uZmlnPTQ9Q09ORklHX0lLQ09ORklHX1BST0M9eVxuYXJjaC9taXBzL2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWc6NTpDT05GSUdfTUVNQ0c9eVxuYXJjaC9taXBzL2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWctNi1DT05GSUdfQkxLX0NHUk9VUD15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvbG9vbmdzb24ya19kZWZjb25maWc9MTQ9Q09ORklHX1RBU0tfSU9fQUNDT1VOVElORz15XG5hcmNoL21pcHMvY29uZmlncy9sb29uZ3NvbjJrX2RlZmNvbmZpZzoxNTpDT05GSUdfTUVNQ0c9eVxuYXJjaC9taXBzL2NvbmZpZ3MvbG9vbmdzb24ya19kZWZjb25maWctMTYtQ09ORklHX0JMS19DR1JPVVA9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2xvb25nc29uM19kZWZjb25maWc9MTY9Q09ORklHX1RBU0tfSU9fQUNDT1VOVElORz15XG5hcmNoL21pcHMvY29uZmlncy9sb29uZ3NvbjNfZGVmY29uZmlnOjE3OkNPTkZJR19NRU1DRz15XG5hcmNoL21pcHMvY29uZmlncy9sb29uZ3NvbjNfZGVmY29uZmlnLTE4LUNPTkZJR19CTEtfQ0dST1VQPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9vbWVnYTJwX2RlZmNvbmZpZz0xMD1DT05GSUdfQ0dST1VQUz15XG5hcmNoL21pcHMvY29uZmlncy9vbWVnYTJwX2RlZmNvbmZpZzoxMTpDT05GSUdfTUVNQ0c9eVxuYXJjaC9taXBzL2NvbmZpZ3Mvb21lZ2EycF9kZWZjb25maWctMTItQ09ORklHX0NHUk9VUF9TQ0hFRD15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3Mvdm9jb3JlMl9kZWZjb25maWc9MTA9Q09ORklHX0NHUk9VUFM9eVxuYXJjaC9taXBzL2NvbmZpZ3Mvdm9jb3JlMl9kZWZjb25maWc6MTE6Q09ORklHX01FTUNHPXlcbmFyY2gvbWlwcy9jb25maWdzL3ZvY29yZTJfZGVmY29uZmlnLTEyLUNPTkZJR19DR1JPVVBfU0NIRUQ9eVxuLS1cbmFyY2gvcGFyaXNjL2NvbmZpZ3MvZ2VuZXJpYy02NGJpdF9kZWZjb25maWc9MTU9Q09ORklHX0NHUk9VUFM9eVxuYXJjaC9wYXJpc2MvY29uZmlncy9nZW5lcmljLTY0Yml0X2RlZmNvbmZpZzoxNjpDT05GSUdfTUVNQ0c9eVxuYXJjaC9wYXJpc2MvY29uZmlncy9nZW5lcmljLTY0Yml0X2RlZmNvbmZpZy0xNy1DT05GSUdfQ0dST1VQX1BJRFM9eVxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnPTE4PUNPTkZJR19DR1JPVVBTPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnOjE5OkNPTkZJR19NRU1DRz15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZy0yMC1DT05GSUdfQ0dST1VQX1NDSEVEPXlcbi0tXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWc9MjI9Q09ORklHX05VTUFfQkFMQU5DSU5HPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZzoyMzpDT05GSUdfTUVNQ0c9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnLTI0LUNPTkZJR19CTEtfQ0dST1VQPXlcbi0tXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTg9Q09ORklHX0NHUk9VUFM9eVxuYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZzo5OkNPTkZJR19NRU1DRz15XG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnLTEwLUNPTkZJR19CTEtfQ0dST1VQPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9MjQ9Q09ORklHX05VTUFfQkFMQU5DSU5HPXlcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzoyNTpDT05GSUdfTUVNQ0c9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnLTI2LUNPTkZJR19CTEtfQ0dST1VQPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9MjI9Q09ORklHX05VTUFfQkFMQU5DSU5HPXlcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzoyMzpDT05GSUdfTUVNQ0c9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTI0LUNPTkZJR19CTEtfQ0dST1VQPXlcbi0tXG5hcmNoL3h0ZW5zYS9jb25maWdzL2F1ZGlvX2tjNzA1X2RlZmNvbmZpZz0xMj1DT05GSUdfQ0dST1VQX0NQVUFDQ1Q9eVxuYXJjaC94dGVuc2EvY29uZmlncy9hdWRpb19rYzcwNV9kZWZjb25maWc6MTM6Q09ORklHX01FTUNHPXlcbmFyY2gveHRlbnNhL2NvbmZpZ3MvYXVkaW9fa2M3MDVfZGVmY29uZmlnLTE0LUNPTkZJR19OQU1FU1BBQ0VTPXlcbi0tXG5hcmNoL3h0ZW5zYS9jb25maWdzL2dlbmVyaWNfa2M3MDVfZGVmY29uZmlnPTEyPUNPTkZJR19DR1JPVVBfQ1BVQUNDVD15XG5hcmNoL3h0ZW5zYS9jb25maWdzL2dlbmVyaWNfa2M3MDVfZGVmY29uZmlnOjEzOkNPTkZJR19NRU1DRz15XG5hcmNoL3h0ZW5zYS9jb25maWdzL2dlbmVyaWNfa2M3MDVfZGVmY29uZmlnLTE0LUNPTkZJR19OQU1FU1BBQ0VTPXlcbi0tXG5hcmNoL3h0ZW5zYS9jb25maWdzL25vbW11X2tjNzA1X2RlZmNvbmZpZz0xMj1DT05GSUdfQ0dST1VQX0NQVUFDQ1Q9eVxuYXJjaC94dGVuc2EvY29uZmlncy9ub21tdV9rYzcwNV9kZWZjb25maWc6MTM6Q09ORklHX01FTUNHPXlcbmFyY2gveHRlbnNhL2NvbmZpZ3Mvbm9tbXVfa2M3MDVfZGVmY29uZmlnLTE0LUNPTkZJR19OQU1FU1BBQ0VTPXlcbi0tXG5hcmNoL3h0ZW5zYS9jb25maWdzL3NtcF9seDIwMF9kZWZjb25maWc9MTI9Q09ORklHX0NHUk9VUF9DUFVBQ0NUPXlcbmFyY2gveHRlbnNhL2NvbmZpZ3Mvc21wX2x4MjAwX2RlZmNvbmZpZzoxMzpDT05GSUdfTUVNQ0c9eVxuYXJjaC94dGVuc2EvY29uZmlncy9zbXBfbHgyMDBfZGVmY29uZmlnLTE0LUNPTkZJR19OQU1FU1BBQ0VTPXlcbi0tXG5hcmNoL3h0ZW5zYS9jb25maWdzL3ZpcnRfZGVmY29uZmlnPTc9Q09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eVxuYXJjaC94dGVuc2EvY29uZmlncy92aXJ0X2RlZmNvbmZpZzo4OkNPTkZJR19NRU1DRz15XG5hcmNoL3h0ZW5zYS9jb25maWdzL3ZpcnRfZGVmY29uZmlnLTktQ09ORklHX0NHUk9VUF9GUkVFWkVSPXlcbi0tXG5hcmNoL3h0ZW5zYS9jb25maWdzL3hpcF9rYzcwNV9kZWZjb25maWc9Nz1DT05GSUdfQlNEX1BST0NFU1NfQUNDVD15XG5hcmNoL3h0ZW5zYS9jb25maWdzL3hpcF9rYzcwNV9kZWZjb25maWc6ODpDT05GSUdfTUVNQ0c9eVxuYXJjaC94dGVuc2EvY29uZmlncy94aXBfa2M3MDVfZGVmY29uZmlnLTktQ09ORklHX0NHUk9VUF9GUkVFWkVSPXlcbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MTUwOD1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBpb19jZ3JwX3N1YnN5cyA9IHtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTUxNy1cdC5leGl0ID0gYmxrY2dfZXhpdCxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNTE4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTE5LVx0Lypcbi0tXG5kcml2ZXJzL2FjcGkvc2Nhbi5jPTIwND1zdGF0aWMgaW50IGFjcGlfc2Nhbl90cnlfdG9fb2ZmbGluZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSlcbi0tXG5kcml2ZXJzL2FjcGkvc2Nhbi5jLTIxMi1cdCAqIGJlY2F1c2UgaWYgdGhlIGRldmljZXMgaW4gcXVlc3Rpb24gYXJlIG1lbW9yeSBibG9ja3MgYW5kXG5kcml2ZXJzL2FjcGkvc2Nhbi5jOjIxMzpcdCAqIENPTkZJR19NRU1DRyBpcyBzZXQsIG9uZSBvZiB0aGUgYmxvY2tzIG1heSBob2xkIGRhdGEgc3RydWN0dXJlc1xuZHJpdmVycy9hY3BpL3NjYW4uYy0yMTQtXHQgKiB0aGF0IHRoZSBvdGhlciBibG9ja3MgZGVwZW5kIG9uLCBidXQgaXQgaXMgbm90IGtub3duIGluIGFkdmFuY2Ugd2hpY2hcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODQzPXN0YXRpYyBibGtfc3RhdHVzX3QgbG9vcF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODcxLVx0XHRjbWQtXHUwMDNlYmxrY2dfY3NzID0gYmlvX2Jsa2NnX2NzcyhycS1cdTAwM2ViaW8pO1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTg3MjojaWZkZWYgQ09ORklHX01FTUNHXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODczLVx0XHRpZiAoY21kLVx1MDAzZWJsa2NnX2Nzcykge1xuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuYz0xOT1JT1BUREVTQ19NQVRDSChfcmVmY291bnQsIF9fcGFnZV9yZWZjb3VudCk7XG5kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmM6MjA6I2lmZGVmIENPTkZJR19NRU1DR1xuZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jLTIxLUlPUFRERVNDX01BVENIKG1lbWNnX2RhdGEsIG1lbWNnX2RhdGEpO1xuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuaD0xOT1zdHJ1Y3QgaW9wdGRlc2Mge1xuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuaC0zMS1cdGF0b21pY190IF9fcGFnZV9yZWZjb3VudDtcbmRyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuaDozMjojaWZkZWYgQ09ORklHX01FTUNHXG5kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmgtMzMtXHR1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGE7XG4tLVxuZnMvcHJvYy9wYWdlLmM9MjcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMga3BhZ2VmbGFnc19wcm9jX29wcyA9IHtcbi0tXG5mcy9wcm9jL3BhZ2UuYy0yNzYtXG5mcy9wcm9jL3BhZ2UuYzoyNzc6I2lmZGVmIENPTkZJR19NRU1DR1xuZnMvcHJvYy9wYWdlLmMtMjc4LXN0YXRpYyBzc2l6ZV90IGtwYWdlY2dyb3VwX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4tLVxuZnMvcHJvYy9wYWdlLmM9MjgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMga3BhZ2VjZ3JvdXBfcHJvY19vcHMgPSB7XG4tLVxuZnMvcHJvYy9wYWdlLmMtMjg3LX07XG5mcy9wcm9jL3BhZ2UuYzoyODg6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuZnMvcHJvYy9wYWdlLmMtMjg5LVxuZnMvcHJvYy9wYWdlLmM9MjkwPXN0YXRpYyBpbnQgX19pbml0IHByb2NfcGFnZV9pbml0KHZvaWQpXG4tLVxuZnMvcHJvYy9wYWdlLmMtMjkzLVx0cHJvY19jcmVhdGUoXCYjMzQ7a3BhZ2VmbGFnc1wmIzM0OywgU19JUlVTUiwgTlVMTCwgXHUwMDI2a3BhZ2VmbGFnc19wcm9jX29wcyk7XG5mcy9wcm9jL3BhZ2UuYzoyOTQ6I2lmZGVmIENPTkZJR19NRU1DR1xuZnMvcHJvYy9wYWdlLmMtMjk1LVx0cHJvY19jcmVhdGUoXCYjMzQ7a3BhZ2VjZ3JvdXBcJiMzNDssIFNfSVJVU1IsIE5VTEwsIFx1MDAyNmtwYWdlY2dyb3VwX3Byb2Nfb3BzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTMwMT1zdHJ1Y3QgYnBmX21hcCB7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0zMjAtXHRzdHJ1Y3QgYnRmICpidGY7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjMyMTojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMyMi1cdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTI3ODc9c3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjI3ODg6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9icGYuaC0yNzg5LXZvaWQgYnBmX21hcF9tZW1jZ19lbnRlcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgbWVtX2Nncm91cCAqKm9sZF9tZW1jZyxcbi0tXG5pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaD0yNT1TVUJTWVMoaW8pXG4tLVxuaW5jbHVkZS9saW51eC9jZ3JvdXBfc3Vic3lzLmgtMjctXG5pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaDoyODojaWYgSVNfRU5BQkxFRChDT05GSUdfTUVNQ0cpXG5pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaC0yOS1TVUJTWVMobWVtb3J5KVxuLS1cbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaD01MT1zdHJ1Y3QgbGlzdF9scnUge1xuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTUyLVx0c3RydWN0IGxpc3RfbHJ1X25vZGVcdCpub2RlO1xuaW5jbHVkZS9saW51eC9saXN0X2xydS5oOjUzOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaC01NC1cdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4tLVxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oPTgyPWludCBtZW1jZ19saXN0X2xydV9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxuLS1cbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaC04NC1cbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaDo4NTojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtODYtLyoqXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjA9c3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9jb29raWUge1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY0LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NjU6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjYtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9ODk9c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUge1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTk3LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6OTg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTktXHQvKlxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyOC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEyOTojaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzAtXHQvKiBzbGFiIHN0YXRzIGZvciBubWkgY29udGV4dCAqL1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTIwMj1zdHJ1Y3QgbWVtX2Nncm91cCB7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjU3LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MjU4OiNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI1OS1cdC8qIE1FTUNHX0tNRU0gZm9yIG5taSBjb250ZXh0ICovXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjg1LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6Mjg2OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI4Ny1cdC8qIExlZ2FjeSBjb25zdW1lci1vcmllbnRlZCBjb3VudGVycyAqL1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTMyMC1cdHNwaW5sb2NrX3QgZXZlbnRfbGlzdF9sb2NrO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MzIxOiNlbmRpZiAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTMyMi1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0zMzU9ZW51bSBwYWdlX21lbWNnX2RhdGFfZmxhZ3Mge1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTM0Ni1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjM0NzojZWxzZSAvKiBDT05GSUdfTUVNQ0cgKi9cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTM0OC1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0zNTEtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDozNTI6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzUzLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MzU0PWVudW0gb2JqZXh0X2ZsYWdzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0zNjctXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDozNjg6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzY5LS8qXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTA0Mz1leHRlcm4gaW50IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEwNDQ6I2Vsc2UgLyogQ09ORklHX01FTUNHICovXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMDQ1LVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE0NjE9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE0NjI6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTQ2My1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNDY4PXN0cnVjdCBzbGFib2JqX2V4dCB7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNDY5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0NzAtXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTQ5Nj1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmxydXZlY19saXZlX2xvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0OTcte1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTQ5ODojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNDk5LVx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE2MzE9c3RydWN0IHNvY2s7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNjMyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2MzMtZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIG1lbWNnX3NvY2tldHNfZW5hYmxlZF9rZXk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTcxOT1zdGF0aWMgaW5saW5lIGludCBzaHJpbmtlcl9pZChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MjQtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNzI1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MjYtYm9vbCBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQodm9pZCk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTg4Nz1zdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfaXNfZHlpbmcoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4OTAtfVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTg5MTojZW5kaWYgLyogQ09ORklHX01FTUNHICovXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODkyLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTg5MzojaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19aU1dBUClcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4OTQtYm9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5MTE9c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MjAtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTIxOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MjItdW5zaWduZWQgbG9uZyBtZW1jZzFfc29mdF9saW1pdF9yZWNsYWltKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xOTM5PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2V4aXRfdXNlcl9mYXVsdCh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NDQtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTQ1OiNlbHNlIC8qIENPTkZJR19NRU1DR19WMSAqL1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk0Ni1zdGF0aWMgaW5saW5lXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTk2OD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTcxLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk3MjojZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTczLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk3NDojaWYgZGVmaW5lZChDT05GSUdfTUVNQ0dfVjEpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TV0FQKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk3NS1cbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTQ3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB1cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTEtXHRfX3VwZGF0ZV9scnVfc2l6ZShscnV2ZWMsIGxydSwgemlkLCBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjUyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTMtXHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShscnV2ZWMsIGxydSwgemlkLCBucl9wYWdlcyk7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTgwPXN0cnVjdCBwYWdlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTg2LVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE4NzojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTg4LVx0dW5zaWduZWQgbG9uZyBtZW1jZ19kYXRhO1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0zMTM9dHlwZWRlZiBzd3BfZW50cnlfdCBzb2Z0bGVhZl90O1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTMxNC1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDozMTU6I2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSB8fCBkZWZpbmVkKENPTkZJR19TTEFCX09CSl9FWFQpXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMzE2LS8qIFdlIGhhdmUgc29tZSBleHRyYSByb29tIGFmdGVyIHRoZSByZWZjb3VudCBpbiB0YWlsIHBhZ2VzLiAqL1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD00MDI9c3RydWN0IGZvbGlvIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNDMyLVx0XHRcdGF0b21pY190IF9yZWZjb3VudDtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo0MzM6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTQzNC1cdFx0XHR1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGE7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTUxOD1GT0xJT19NQVRDSChfcmVmY291bnQsIF9yZWZjb3VudCk7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6NTE5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC01MjAtRk9MSU9fTUFUQ0gobWVtY2dfZGF0YSwgbWVtY2dfZGF0YSk7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTU3Mz1zdHJ1Y3QgcHRkZXNjIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNjA0LVx0YXRvbWljX3QgX19wYWdlX3JlZmNvdW50O1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjYwNTojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNjA2LVx0dW5zaWduZWQgbG9uZyBwdF9tZW1jZ19kYXRhO1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD02MTk9VEFCTEVfTUFUQ0goX3JlZmNvdW50LCBfX3BhZ2VfcmVmY291bnQpO1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjYyMDojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNjIxLVRBQkxFX01BVENIKG1lbWNnX2RhdGEsIHB0X21lbWNnX2RhdGEpO1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xMTYwPXN0cnVjdCBtbV9zdHJ1Y3Qge1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMzEyLSNlbmRpZlxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjEzMTM6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTEzMTQtXHRcdC8qXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTEzOTctXHRcdFx0dW5zaWduZWQgbG9uZyBiaXRtYXA7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTM5ODojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTM5OS1cdFx0XHQvKiBwb2ludHMgdG8gdGhlIG1lbWNnIG9mIFwmIzM0O293bmVyXCYjMzQ7IGFib3ZlICovXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTE0ODc9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5faW5pdF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQ5MC1cdG1tLVx1MDAzZWxydV9nZW4uYml0bWFwID0gMDtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNDkxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDkyLVx0bW0tXHUwMDNlbHJ1X2dlbi5tZW1jZyA9IE5VTEw7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD03NTg9c3RydWN0IGxydXZlYyB7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03ODItI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc4MzojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc4NC1cdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNjUyPXN0YXRpYyBpbmxpbmUgc3RydWN0IHBnbGlzdF9kYXRhICpscnV2ZWNfcGdkYXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNjUzLXtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTY1NDojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE2NTUtXHRyZXR1cm4gbHJ1dmVjLVx1MDAzZXBnZGF0O1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmg9OTA9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfY291bnRlcl9yZXNldF93YXRlcm1hcmsoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcilcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oLTEwMS1cbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmg6MTAyOiNpZiBJU19FTkFCTEVEKENPTkZJR19NRU1DRykgfHwgSVNfRU5BQkxFRChDT05GSUdfQ0dST1VQX0RNRU0pXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oLTEwMy12b2lkIHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpyb290LFxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MzU9c3RydWN0IHRhc2tfc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAzMC0jZW5kaWZcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxMDMxOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMDMyLVx0dW5zaWduZWRcdFx0XHRpbl91c2VyX2ZhdWx0OjE7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE1NTgtXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTU1OTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTU2MC1cdHN0cnVjdCBtZW1fY2dyb3VwXHRcdCptZW1jZ19pbl9vb207XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE1NjItXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTU2MzojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTU2NC1cdC8qIE51bWJlciBvZiBwYWdlcyB0byByZWNsYWltIG9uIHJldHVybmluZyB0byB1c2VybGFuZDogKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9MTYxPWV4dGVybiB2b2lkIGV4ZWNfbW1fcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc3RydWN0IG1tX3N0cnVjdCAqKTtcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0xNjItXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6MTYzOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0xNjQtZXh0ZXJuIHZvaWQgbW1fdXBkYXRlX25leHRfb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0xNjY9c3RhdGljIGlubGluZSB2b2lkIG1tX3VwZGF0ZV9uZXh0X293bmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0xNjgtfVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjE2OTojZW5kaWYgLyogQ09ORklHX01FTUNHICovXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMTcwLVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD00Njk9c3RhdGljIGlubGluZSB2b2lkIG1lbWFsbG9jX3Bpbl9yZXN0b3JlKHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtNDczLVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjQ3NDojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtNDc1LURFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbWVtX2Nncm91cCAqLCBpbnRfYWN0aXZlX21lbWNnKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmg9ODI9c3RydWN0IHNocmlua2VyIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmgtMTA2LVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuaW5jbHVkZS9saW51eC9zaHJpbmtlci5oOjEwNzojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmgtMTA4LVx0LyogSUQgaW4gc2hyaW5rZXJfaWRyICovXG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmg9MjY9ZW51bSBfc2xhYl9mbGFnX2JpdHMge1xuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTQ1LSNlbmRpZlxuaW5jbHVkZS9saW51eC9zbGFiLmg6NDY6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9zbGFiLmgtNDctXHRfU0xBQl9BQ0NPVU5ULFxuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTIwNC0gKi9cbmluY2x1ZGUvbGludXgvc2xhYi5oOjIwNTojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMDYtIyBkZWZpbmUgU0xBQl9BQ0NPVU5UXHRcdF9fU0xBQl9GTEFHX0JJVChfU0xBQl9BQ0NPVU5UKVxuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oPTcwOD1lbnVtIGttYWxsb2NfY2FjaGVfdHlwZSB7XG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmgtNzEyLSNlbmRpZlxuaW5jbHVkZS9saW51eC9zbGFiLmg6NzEzOiNpZm5kZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC03MTQtXHRLTUFMTE9DX0NHUk9VUCA9IEtNQUxMT0NfTk9STUFMLFxuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTcyOC0jZW5kaWZcbmluY2x1ZGUvbGludXgvc2xhYi5oOjcyOTojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC03MzAtXHRLTUFMTE9DX0NHUk9VUCxcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaD03NDA9ZXh0ZXJuIGttZW1fYnVja2V0cyBrbWFsbG9jX2NhY2hlc1tOUl9LTUFMTE9DX1RZUEVTXTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC03NDctXHQoSVNfRU5BQkxFRChDT05GSUdfWk9ORV9ETUEpICAgPyBfX0dGUF9ETUEgOiAwKSB8XHRcXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6NzQ4Olx0KElTX0VOQUJMRUQoQ09ORklHX01FTUNHKSA/IF9fR0ZQX0FDQ09VTlQgOiAwKSlcbmluY2x1ZGUvbGludXgvc2xhYi5oLTc0OS1cbmluY2x1ZGUvbGludXgvc2xhYi5oPTc1MD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGVudW0ga21hbGxvY19jYWNoZV90eXBlIGttYWxsb2NfdHlwZShnZnBfdCBmbGFncywga21hbGxvY190b2tlbl90IHRva2VuKVxuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTc3NS1cdFx0cmV0dXJuIEtNQUxMT0NfRE1BO1xuaW5jbHVkZS9saW51eC9zbGFiLmg6Nzc2Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19NRU1DRykgfHwgKGZsYWdzIFx1MDAyNiBfX0dGUF9SRUNMQUlNQUJMRSkpXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC03NzctXHRcdHJldHVybiBLTUFMTE9DX1JFQ0xBSU07XG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmg9ODU1PXZvaWQgKmttZW1fY2FjaGVfYWxsb2NfbHJ1X25vcHJvZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmgtODc4LSAqXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo4Nzk6ICogMS4gRm9yICFDT05GSUdfTUVNQ0cgb3IgY2dyb3VwX2Rpc2FibGU9bWVtb3J5IHN5c3RlbXMuXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC04ODAtICogMi4gQWxyZWFkeSBjaGFyZ2VkIHNsYWIgb2JqZWN0cy5cbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD01MzI9c3RhdGljIGlubGluZSBpbnQgYWRkX3N3YXBfZXh0ZW50KHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTM4LSNlbmRpZiAvKiBDT05GSUdfU1dBUCAqL1xuaW5jbHVkZS9saW51eC9zd2FwLmg6NTM5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvc3dhcC5oLTU0MC1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oPTU1NT1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSlcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01NjAtXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo1NjE6I2lmIGRlZmluZWQoQ09ORklHX1NXQVApIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JMS19DR1JPVVApXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01NjItdm9pZCBfX2ZvbGlvX3Rocm90dGxlX3N3YXByYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcCk7XG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmg9NTcwPXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb190aHJvdHRsZV9zd2FwcmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTc0LVxuaW5jbHVkZS9saW51eC9zd2FwLmg6NTc1OiNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1NXQVApXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01NzYtaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg9MzA9c3RydWN0IG1lbV9jZ3JvdXA7XG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaC0zMS1cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oOjMyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTMzLXZvaWQgdm1wcmVzc3VyZShnZnBfdCBnZnAsIGludCBvcmRlciwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIHRyZWUsXG4tLVxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg9NTA9c3RhdGljIGlubGluZSB2b2lkIHZtcHJlc3N1cmVfcHJpbyhnZnBfdCBnZnAsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTUxLVx0XHRcdFx0ICAgaW50IHByaW8pIHt9XG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaDo1MjojZW5kaWYgLyogQ09ORklHX01FTUNHICovXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaC01My0jZW5kaWYgLyogX19MSU5VWF9WTVBSRVNTVVJFX0ggKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oPTUwNz1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnZtX2V2ZW50X25hbWUoZW51bSB2bV9ldmVudF9pdGVtIGl0ZW0pXG4tLVxuaW5jbHVkZS9saW51eC92bXN0YXQuaC01MTYtXG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oOjUxNzojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oLTUxOC1cbi0tXG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oPTU0NT1zdGF0aWMgaW5saW5lIHZvaWQgbW9kX2xydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmluY2x1ZGUvbGludXgvdm1zdGF0LmgtNTUwLVxuaW5jbHVkZS9saW51eC92bXN0YXQuaDo1NTE6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuaW5jbHVkZS9saW51eC92bXN0YXQuaC01NTItXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oPTM2NT1zdHJ1Y3Qgc29jayB7XG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTQ2MC1cdHN0cnVjdCBzb2NrZXRcdFx0KnNrX3NvY2tldDtcbmluY2x1ZGUvbmV0L3NvY2suaDo0NjE6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9uZXQvc29jay5oLTQ2Mi1cdHN0cnVjdCBtZW1fY2dyb3VwXHQqc2tfbWVtY2c7XG4tLVxuaW5jbHVkZS9uZXQvc29jay5oPTI2ODY9c3RhdGljIGlubGluZSBnZnBfdCBnZnBfbWVtY2dfY2hhcmdlKHZvaWQpXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTI2OTAtXG5pbmNsdWRlL25ldC9zb2NrLmg6MjY5MTojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL25ldC9zb2NrLmgtMjY5Mi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0yNzAyPXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3NrX3VuZGVyX21lbW9yeV9wcmVzc3VyZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTI3MDUtXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgzOTMKCQkJCQkJCW91dHB1dDogMTMzCgkJCQkJCQl0aG91Z2h0czogMTI4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYENPTkZJR19NRU1DR2AgaXMgYSBtdXN0LWhhdmUgZm9yIGVuYWJsaW5nIHRoZSBuZXcgYmVoYXZpb3IuICBBbmQsIG9mIGNvdXJzZSwgc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBCUEYsIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGNlbnRyYWwuIFNpbmNlIGBDT05GSUdfTUVNQ0dgIGRlcGVuZHMgb24gYENPTkZJR19DR1JPVVBTYCwgSSBzaG91bGQgaW5jbHVkZSB0aGF0IG9uZSBhcyB3ZWxsIHRvIGJlIHNhZmUuIFNvLCBJJiMzOTtsbCBzdGFydCB3aXRoIGBCUEZfU1lTQ0FMTGAsIGBNRU1DR2AsIGFuZCBgQ0dST1VQU2AgYXMgbXkgaW5pdGlhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBiZWluZyBhZGRlZDogYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGlzIGlzLCBpbmRlZWQsIHRoZSAqb25seSogbm9uLXN0YXRpYyBmdW5jdGlvbiBpbnZvbHZlZCBoZXJlLiAgSXQgc2VlbXMgdG8gYmUgY2FsbGVkIGZyb20gYGFyZW5hX3ZtX2ZhdWx0YCwgYnV0IGxldCYjMzk7cyBkb3VibGUgY2hlY2suLi4gWWVzLCBgYXJlbmFfdm1fZmF1bHRgIGNhbGxzIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYC4KCklmIEkgcHV0IGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBpbiBgRm9jdXNTeW1ib2xzYCwgc3l6a2FsbGVyIHdpbGwgcHJpb3JpdGl6ZSBmdXp6aW5nIHBhdGhzIHRoYXQgcmVhY2ggaXQgLSBnb29kLiBTaW5jZSBgYXJlbmFfdm1fZmF1bHRgIGlzIHJlYWNoYWJsZSB2aWEgQlBGIGFyZW5hIG1hcCBtbWFwIGFuZCBmYXVsdGluZywgaXQgYWxzbyBpbXBsaWVzIHRoYXQgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzIHJlYWNoYWJsZSB0b28sIHdoaWNoIG1ha2VzIGl0IGdvb2QgdG8gdGFyZ2V0IGluIGBGb2N1c1N5bWJvbHNgLgoKTG9va2luZyBhdCB0aGUgY29kZSwgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGp1c3QgY2FsbHMgYGFsbG9jX3BhZ2VzX25vZGVgIHdpdGggYG1pZ2h0X3NsZWVwKClgLiBUaGUgbWFpbiBjaGFuZ2UgaXMgaW4gYGFyZW5hX3ZtX2ZhdWx0YDogdGhlIG5ldyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIG1lbWNnIE9PTSBraWxsZXIgY2FuIHJ1bi4gVGhhdCBpcyB0aGUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSB3b3J0aCBmdXp6aW5nLCBzbyBJJiMzOTtsbCBzZXQgYEZvY3VzU3ltYm9sc2AgdG8gYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIC4gYEVuYWJsZUNvbmZpZ3NgOiBgQlBGX1NZU0NBTExgLCBgTUVNQ0dgLCBhbmQgYENHUk9VUFNgLgoKV2hpbGUgSSYjMzk7bSBoZXJlLCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIGlmIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBpcyBleHBvcnRlZC4gSXQmIzM5O3Mgbm90LCBidXQgaXQmIzM5O3MgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBhbmQgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvYnBmLmhgIHdoaWNoIG1lYW5zIHN5emthbGxlciBjYW4gc3RpbGwgdXNlIGl0IGZvciBjb3ZlcmFnZSBndWlkYW5jZSwgZXZlbiBpZiBpdCBjYW4mIzM5O3QgZGlyZWN0bHkgY2FsbCBpdC4KCk9rYXksIGxldCYjMzk7cyB3cml0ZSBhIGNvbmNpc2Ugc3VtbWFyeSBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbC4gIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGFyZW5hIG1hcCBwYWdlIGZhdWx0IGhhbmRsZXIgKGBhcmVuYV92bV9mYXVsdGApIHRvIHVzZSBhIHNsZWVwYWJsZSBwYWdlIGFsbG9jYXRvciAoYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgKS4gVGhpcyBjaGFuZ2UgYWxsb3dzIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biB3aGVuIG1lbW9yeSBsaW1pdHMgYXJlIGhpdCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtbWFwaW5nIGFuZCBmYXVsdGluZyBCUEYgYXJlbmEgbWFwcy4KCkkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAgYW5kIHRoZSBgUmVhc29uaW5nYCB3aWxsIGJlOiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZvciBCUEYgYXJlbmEgbWFwcyB0byB1c2UgYSBzbGVlcGFibGUgcGFnZSBhbGxvY2F0b3IsIGFsbG93aW5nIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biB3aGVuIG1lbW9yeSBsaW1pdHMgYXJlIGhpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYWZmZWN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgaW50ZXJhY3Rpb25zLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtbWFwaW5nIGFuZCBmYXVsdGluZyBCUEYgYXJlbmEgbWFwcy4mIzM0OwoKTXkgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDticGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlJiMzNDtdYCBhbmQgYEVuYWJsZUNvbmZpZ3NgOiBgWyYjMzQ7QlBGX1NZU0NBTEwmIzM0OywgJiMzNDtNRU1DRyYjMzQ7LCAmIzM0O0NHUk9VUFMmIzM0O11gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7Q0dST1VQUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgQlBGIGFyZW5hIG1hcHMgdG8gdXNlIGEgc2xlZXBhYmxlIHBhZ2UgYWxsb2NhdG9yLCBhbGxvd2luZyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBydW4gd2hlbiBtZW1vcnkgbGltaXRzIGFyZSBoaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFmZmVjdGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGludGVyYWN0aW9ucywgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbW1hcGluZyBhbmQgZmF1bHRpbmcgQlBGIGFyZW5hIG1hcHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0NHUk9VUFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgZm9yIEJQRiBhcmVuYSBtYXBzIHRvIHVzZSBhIHNsZWVwYWJsZSBwYWdlIGFsbG9jYXRvciwgYWxsb3dpbmcgdGhlIG1lbWNnIE9PTSBraWxsZXIgdG8gcnVuIHdoZW4gbWVtb3J5IGxpbWl0cyBhcmUgaGl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhZmZlY3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBpbnRlcmFjdGlvbnMsIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG1tYXBpbmcgYW5kIGZhdWx0aW5nIEJQRiBhcmVuYSBtYXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgZm9yIEJQRiBhcmVuYXMgKGBhcmVuYV92bV9mYXVsdGApIHRvIHByZWFsbG9jYXRlIHBhZ2VzIG91dHNpZGUgb2YgYSBzcGlubG9jayB1c2luZyBhIHNsZWVwYWJsZSBhbGxvY2F0b3IsIGFsbG93aW5nIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biBpZiBuZWVkZWQuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIGFsbG9jYXRpb24gZnVuY3Rpb24gYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGV4cGxpY2l0bHkgdXNlcyBgX19HRlBfWkVST2AgKHZpYSBgQlBGX1BBR0VfR0ZQYCkgdG8gZW5zdXJlIHRoZSBhbGxvY2F0ZWQgcGFnZXMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQsIGp1c3QgbGlrZSB0aGUgcHJldmlvdXMgbm9uLWJsb2NraW5nIGFsbG9jYXRpb24gcGF0aC4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZC4gVGhlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gY29udGV4dCBhbmQgT09NIGhhbmRsaW5nLCB3aGljaCBkbyBub3QgaW50cm9kdWNlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ODRlYjQ4ZGE5NmQ3YzRlM2ZmMTNmNmRjMGExYmZlNDA1YmZlMjliCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMTA6MjM6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCBiM2NkMjhkOWUzYjU1Li5jODE3Yzk5ZDI5MDY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTI3ODQsNiAmIzQzOzI3ODQsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2dldF9jdXJyX29yX25leHQodTMyICppZCk7CiAKIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsCiAJCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpOwomIzQzO3N0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApOwogI2lmZGVmIENPTkZJR19NRU1DRwogdm9pZCBicGZfbWFwX21lbWNnX2VudGVyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBtZW1fY2dyb3VwICoqb2xkX21lbWNnLAogCQkJIHN0cnVjdCBtZW1fY2dyb3VwICoqbmV3X21lbWNnKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuYwppbmRleCA3YjY4NDcyMDBiNDMxLi5mYTQ2MmEwZmYxYWQ2IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcmVuYS5jCkBAIC00ODEsNyAmIzQzOzQ4MSw4IEBAIHN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCXN0cnVjdCBicGZfbWFwICptYXAgPSB2bWYtJmd0O3ZtYS0mZ3Q7dm1fZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbmV3X21lbWNnLCAqb2xkX21lbWNnOwotCXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZSwgKm5ld19wYWdlID0gTlVMTDsKJiM0MzsJdm1fZmF1bHRfdCBmYXVsdF9yZXQ7CiAJbG9uZyBrYmFzZSwga2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwpAQCAtNDg5LDU5ICYjNDM7NDkwLDEwNiBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlrYmFzZSA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7CiAJa2FkZHIgPSBrYmFzZSAmIzQzOyAodTMyKSh2bWYtJmd0O2FkZHJlc3MpOwogCi0JaWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDthcmVuYS0mZ3Q7c3BpbmxvY2ssIGZsYWdzKSkKJiM0MzsJcGFnZSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWthZGRyKTsKJiM0MzsJaWYgKCFwYWdlICZhbXA7JmFtcDsgIShhcmVuYS0mZ3Q7bWFwLm1hcF9mbGFncyAmYW1wOyBCUEZfRl9TRUdWX09OX0ZBVUxUKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFByZWFsbG9jYXRlIG91dHNpZGUgdGhlIGxvY2sgd2l0aCBhIHNsZWVwYWJsZSBhbGxvY2F0b3Igc28gaXQKJiM0MzsJCSAqIGNhbiByZWNsYWltIGFuZCBydW4gdGhlIG1lbWNnIE9PTSBraWxsZXIsIHdoaWNoIHRoZQomIzQzOwkJICogbm9uLWJsb2NraW5nIGFsbG9jYXRvciB1bmRlciBhcmVuYS0mZ3Q7c3BpbmxvY2sgY2Fubm90LiBBIE5VTEwKJiM0MzsJCSAqIHJldHVybiBpcyBub24tcmVjb3ZlcmFibGUsIHNvIGZhaWwgd2l0aCBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQkgKiBWTV9GQVVMVF9PT00gd291bGQgYmUgcmV0cmllZCBieSB0aGUgZmF1bHQgcGF0aCBhbmQgY2FuCiYjNDM7CQkgKiBsaXZlbG9jayB3aGVuIHRoZSBjaGFyZ2VkIG1lbWNnIGlzIG5vdCB0aGUgZmF1bHRpbmcgdGFzayYjMzk7cy4KJiM0MzsJCSAqLwomIzQzOwkJYnBmX21hcF9tZW1jZ19lbnRlcigmYW1wO2FyZW5hLSZndDttYXAsICZhbXA7b2xkX21lbWNnLCAmYW1wO25ld19tZW1jZyk7CiYjNDM7CQluZXdfcGFnZSA9IGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUobWFwKTsKJiM0MzsJCWJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7CiYjNDM7CQlpZiAoIW5ld19wYWdlKQomIzQzOwkJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDthcmVuYS0mZ3Q7c3BpbmxvY2ssIGZsYWdzKSkgewogCQkvKgogCQkgKiBBIGZhaWxlZCBsb2NrIG1lYW5zIGEgcG9zc2libGUgZGVhZGxvY2sgd2FzIGRldGVjdGVkLiBEb24mIzM5O3QKIAkJICogcmV0dXJuIFZNX0ZBVUxUX1JFVFJZOiB0aGlzIGhhbmRsZXIgbmV2ZXIgdG9vayBtbWFwX2xvY2ssIGJ1dAogCQkgKiB0aGUgZmF1bHQgcGF0aCB3b3VsZCByZS10YWtlIGl0IG9uIHJldHJ5IGFuZCBkZWFkbG9jay4gRmFpbC4KIAkJICovCiYjNDM7CQlpZiAobmV3X3BhZ2UpCiYjNDM7CQkJZnJlZV9wYWdlc19ub2xvY2sobmV3X3BhZ2UsIDApOwogCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwomIzQzOwl9CiAKIAlwYWdlID0gdm1hbGxvY190b19wYWdlKCh2b2lkICopa2FkZHIpOwogCWlmIChwYWdlKSB7Ci0JCWlmIChwYWdlID09IGFyZW5hLSZndDtzY3JhdGNoX3BhZ2UpCi0JCQkvKiBCUEYgdHJpZ2dlcmVkIHNjcmF0Y2ggaGVyZTsgZG9uJiMzOTt0IGxhenktYWxsb2Mgb3ZlciBpdCAqLwotCQkJZ290byBvdXRfc2lnc2VndjsKJiM0MzsJCWlmIChwYWdlID09IGFyZW5hLSZndDtzY3JhdGNoX3BhZ2UpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgc2NyYXRjaCBwYWdlIG1hcmtzIGEgaG9sZS4gU2VnZmF1bHQgb25seSBpZiB0aGUgdXNlcgomIzQzOwkJCSAqIGFza2VkIGZvciBpdDsgb3RoZXJ3aXNlIHdlIGNvdWxkIGxhenktYWxsb2NhdGUgYnV0CiYjNDM7CQkJICogY2hvb3NlIG5vdCB0byBvdmVyIGEgaG9sZSwgc28gcmVwb3J0IGEgYnVzIGVycm9yLgomIzQzOwkJCSAqLwomIzQzOwkJCWZhdWx0X3JldCA9IChhcmVuYS0mZ3Q7bWFwLm1hcF9mbGFncyAmYW1wOyBCUEZfRl9TRUdWX09OX0ZBVUxUKSA/CiYjNDM7CQkJCSAgICBWTV9GQVVMVF9TSUdTRUdWIDogVk1fRkFVTFRfU0lHQlVTOwomIzQzOwkJCWdvdG8gb3V0X2Vycl9sb2NrZWQ7CiYjNDM7CQl9CiAJCS8qIGFscmVhZHkgaGF2ZSBhIHBhZ2Ugdm1hcC1lZCAqLwogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJaWYgKGFyZW5hLSZndDttYXAubWFwX2ZsYWdzICZhbXA7IEJQRl9GX1NFR1ZfT05fRkFVTFQpIHsKJiM0MzsJCS8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovCiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdTRUdWOwomIzQzOwkJZ290byBvdXRfZXJyX2xvY2tlZDsKJiM0MzsJfQomIzQzOwogCWJwZl9tYXBfbWVtY2dfZW50ZXIoJmFtcDthcmVuYS0mZ3Q7bWFwLCAmYW1wO29sZF9tZW1jZywgJmFtcDtuZXdfbWVtY2cpOwogCi0JaWYgKGFyZW5hLSZndDttYXAubWFwX2ZsYWdzICZhbXA7IEJQRl9GX1NFR1ZfT05fRkFVTFQpCi0JCS8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovCi0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CWlmICghbmV3X3BhZ2UpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBWZXJ5IHJhcmUgcmFjZTogdGhlIGJwZiBwcm9ncmFtIGhhZCBhbGxvY2F0ZWQgYSBwYWdlIGhlcmUsIHNvCiYjNDM7CQkgKiB0aGUgbG9ja2xlc3MgcHJvYmUgc2F3IGl0IGFuZCB3ZSBza2lwcGVkIHByZWFsbG9jYXRpb24sIGJ1dCBpdAomIzQzOwkJICogZnJlZWQgdGhlIHBhZ2UgYmVmb3JlIHdlIHRvb2sgdGhlIGxvY2suIE5vdyB3ZSBkbyBuZWVkIG9uZTsKJiM0MzsJCSAqIHNsZWVwaW5nIGlzIG5vdCBhbGxvd2VkIGhlcmUsIHNvIGZhbGwgYmFjayB0byB0aGUgbm9uLWJsb2NraW5nCiYjNDM7CQkgKiBhbGxvY2F0b3IgYW5kIGdpdmUgdXAgaWYgaXQgZmFpbHMuCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBtYXAtJmd0O251bWFfbm9kZSwgMSwgJmFtcDtuZXdfcGFnZSk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHQlVTOwomIzQzOwkJCWdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7CiYjNDM7CQl9CiYjNDM7CX0KIAogCXJldCA9IHJhbmdlX3RyZWVfY2xlYXIoJmFtcDthcmVuYS0mZ3Q7cnQsIHZtZi0mZ3Q7cGdvZmYsIDEpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7Ci0KLQlzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gJmFtcDtwYWdlLCAuaSA9IDAgfTsKLQkvKiBBY2NvdW50IGludG8gbWVtY2cgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGJwZl9hcmVuYSAqLwotCXJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBOVU1BX05PX05PREUsIDEsICZhbXA7cGFnZSk7CiAJaWYgKHJldCkgewotCQlyYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgdm1mLSZndDtwZ29mZiwgMSk7Ci0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQlnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnOwogCX0KJiM0MzsJc3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9ICZhbXA7bmV3X3BhZ2UsIC5pID0gMCB9OwogCiAJcmV0ID0gYXBwbHlfdG9fcGFnZV9yYW5nZSgmYW1wO2luaXRfbW0sIGthZGRyLCBQQUdFX1NJWkUsIGFwcGx5X3JhbmdlX3NldF9jYiwgJmFtcDtkYXRhKTsKIAlpZiAocmV0KSB7CiAJCXJhbmdlX3RyZWVfc2V0KCZhbXA7YXJlbmEtJmd0O3J0LCB2bWYtJmd0O3Bnb2ZmLCAxKTsKLQkJZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7Ci0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQlnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnOwogCX0KIAlmbHVzaF92bWFwX2NhY2hlKGthZGRyLCBQQUdFX1NJWkUpOwogCWJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7CiYjNDM7CS8qIG5ld19wYWdlIHdhcyBjb25zdW1lZCAqLwomIzQzOwlwYWdlID0gbmV3X3BhZ2U7CiYjNDM7CW5ld19wYWdlID0gTlVMTDsKIG91dDoKIAlwYWdlX3JlZl9hZGQocGFnZSwgMSk7CiAJcmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7YXJlbmEtJmd0O3NwaW5sb2NrLCBmbGFncyk7CiYjNDM7CWlmIChuZXdfcGFnZSkKJiM0MzsJCWZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTsKIAl2bWYtJmd0O3BhZ2UgPSBwYWdlOwogCXJldHVybiAwOwotb3V0X3NpZ3NlZ3ZfbWVtY2c6CiYjNDM7CiYjNDM7b3V0X2Vycl9sb2NrZWRfbWVtY2c6CiAJYnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTsKLW91dF9zaWdzZWd2OgomIzQzO291dF9lcnJfbG9ja2VkOgogCXJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2FyZW5hLSZndDtzcGlubG9jaywgZmxhZ3MpOwotCXJldHVybiBWTV9GQVVMVF9TSUdTRUdWOwomIzQzOwlpZiAobmV3X3BhZ2UpCiYjNDM7CQlmcmVlX3BhZ2VzX25vbG9jayhuZXdfcGFnZSwgMCk7CiYjNDM7CXJldHVybiBmYXVsdF9yZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYXJlbmFfdm1fb3BzID0gewpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwppbmRleCA2ODc0YmExNDI0YWYwLi5mOWI4MTYzOGU1MzdhIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwpAQCAtNjAyLDE1ICYjNDM7NjAyLDE0IEBAIHN0YXRpYyBib29sIGNhbl9hbGxvY19wYWdlcyh2b2lkKQogCQkhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCk7CiB9CiAKJiM0MzsjZGVmaW5lIEJQRl9QQUdFX0dGUCAoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKQomIzQzOwogc3RhdGljIHN0cnVjdCBwYWdlICpfX2JwZl9hbGxvY19wYWdlKGludCBuaWQpCiB7CiAJaWYgKCFjYW5fYWxsb2NfcGFnZXMoKSkKIAkJcmV0dXJuIGFsbG9jX3BhZ2VzX25vbG9jayhfX0dGUF9BQ0NPVU5ULCBuaWQsIDApOwogCi0JcmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobmlkLAotCQkJCUdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfQUNDT1VOVAotCQkJCXwgX19HRlBfTk9XQVJOLAotCQkJCTApOwomIzQzOwlyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShuaWQsIEJQRl9QQUdFX0dGUCwgMCk7CiB9CiAKIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsCkBAIC02MzYsNiAmIzQzOzYzNSwyMCBAQCBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEZvciBjYWxsZXJzIHRoYXQga25vdyB0aGV5IHJ1biBpbiBhIHNsZWVwYWJsZSBjb250ZXh0LCBlLmcuIGEgdXNlciBwYWdlCiYjNDM7ICogZmF1bHQgaGFuZGxlci4gY2FuX2FsbG9jX3BhZ2VzKCkgaXMgYSBjb25zZXJ2YXRpdmUgZ3Vlc3MgbWFkZSBmb3IgQlBGCiYjNDM7ICogcHJvZ3JhbSBjb250ZXh0IC0gbm90YWJseSBpdCBpcyBhbHdheXMgZmFsc2Ugb24gUFJFRU1QVF9SVCAtIHNvIGdvaW5nCiYjNDM7ICogdGhyb3VnaCBicGZfbWFwX2FsbG9jX3BhZ2VzKCkgdGhlcmUgd291bGQgbmVlZGxlc3NseSBwaWNrIHRoZQomIzQzOyAqIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IsIHdoaWNoIG5ldmVyIHJlY2xhaW1zIGFuZCBuZXZlciBlbmdhZ2VzIHRoZSBPT00KJiM0MzsgKiBtYWNoaW5lcnkuCiYjNDM7ICovCiYjNDM7c3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCkKJiM0Mzt7CiYjNDM7CW1pZ2h0X3NsZWVwKCk7CiYjNDM7CXJldHVybiBhbGxvY19wYWdlc19ub2RlKG1hcC0mZ3Q7bnVtYV9ub2RlLCBCUEZfUEFHRV9HRlAsIDApOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYnRmX2ZpZWxkX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogewogCWNvbnN0IHN0cnVjdCBidGZfZmllbGQgKmYxID0gYSwgKmYyID0gYjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKaW5kZXggNDVjZDBiNDc5ZmUzNS4uNDE4M2ZmNjE1MGMyOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKQEAgLTE4OCw2ICYjNDM7MTg4LDczIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKIAlyZXR1cm4gX193cml0ZV9jZ3JvdXBfZmlsZShjZ3JvdXBfcGF0aCwgZmlsZSwgYnVmKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgX19yZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKmNncm91cF9wYXRoLCBjb25zdCBjaGFyICpmaWxlLAomIzQzOwkJCSAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWNoYXIgZmlsZV9wYXRoW1BBVEhfTUFYICYjNDM7IDFdOwomIzQzOwlzc2l6ZV90IGdvdDsKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlzbnByaW50ZihmaWxlX3BhdGgsIHNpemVvZihmaWxlX3BhdGgpLCAmIzM0OyVzLyVzJiMzNDssIGNncm91cF9wYXRoLCBmaWxlKTsKJiM0MzsJZmQgPSBvcGVuKGZpbGVfcGF0aCwgT19SRE9OTFkpOwomIzQzOwlpZiAoZmQgJmx0OyAwKSB7CiYjNDM7CQlsb2dfZXJyKCYjMzQ7T3BlbmluZyAlcyYjMzQ7LCBmaWxlX3BhdGgpOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZ290ID0gcmVhZChmZCwgYnVmLCBsZW4gLSAxKTsKJiM0MzsJaWYgKGdvdCAmbHQ7IDApIHsKJiM0MzsJCWxvZ19lcnIoJiMzNDtSZWFkaW5nICVzJiMzNDssIGZpbGVfcGF0aCk7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwlidWZbZ290XSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcmVhZF9jZ3JvdXBfZmlsZSgpIC0gUmVhZCBmcm9tIGEgY2dyb3VwIGZpbGUKJiM0MzsgKiBAcmVsYXRpdmVfcGF0aDogVGhlIGNncm91cCBwYXRoLCByZWxhdGl2ZSB0byB0aGUgd29ya2RpcgomIzQzOyAqIEBmaWxlOiBUaGUgbmFtZSBvZiB0aGUgZmlsZSBpbiBjZ3JvdXBmcyB0byByZWFkIGZyb20KJiM0MzsgKiBAYnVmOiBCdWZmZXIgdG8gcmVhZCBpbnRvLCBOVUwtdGVybWluYXRlZCBvbiBzdWNjZXNzCiYjNDM7ICogQGxlbjogU2l6ZSBvZiBAYnVmCiYjNDM7ICoKJiM0MzsgKiBSZWFkIGZyb20gYSBmaWxlIGluIHRoZSBnaXZlbiBjZ3JvdXAmIzM5O3MgZGlyZWN0b3J5LgomIzQzOyAqCiYjNDM7ICogSWYgc3VjY2Vzc2Z1bCwgMCBpcyByZXR1cm5lZC4KJiM0MzsgKi8KJiM0MztpbnQgcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLAomIzQzOwkJICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwljaGFyIGNncm91cF9wYXRoW1BBVEhfTUFYIC0gMjRdOwomIzQzOwomIzQzOwlmb3JtYXRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpOwomIzQzOwlyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZSBpbiB0aGUgcGFyZW50IHByb2Nlc3MKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2RpcgomIzQzOyAqIEByZWxhdGl2ZV9wYXRoOiBUaGUgY2dyb3VwIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgcHJvY2VzcyB3b3JrZGlyCiYjNDM7ICogQGZpbGU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIGNncm91cGZzIHRvIHJlYWQgZnJvbQomIzQzOyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3MKJiM0MzsgKiBAbGVuOiBTaXplIG9mIEBidWYKJiM0MzsgKgomIzQzOyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCYjMzk7cyBkaXJlY3RvcnkgdW5kZXIgdGhlIHBhcmVudCBwcm9jZXNzCiYjNDM7ICogd29ya2Rpci4KJiM0MzsgKgomIzQzOyAqIElmIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQuCiYjNDM7ICovCiYjNDM7aW50IHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiYjNDM7CQkJICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWNoYXIgY2dyb3VwX3BhdGhbUEFUSF9NQVggLSAyNF07CiYjNDM7CiYjNDM7CWZvcm1hdF9wYXJlbnRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpOwomIzQzOwlyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKSAtIFNldHVwIHRoZSBjZ3JvdXAgZW52aXJvbm1lbnQKICAqCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCmluZGV4IDM4NTczMDRiZTg3NDEuLmQ0MmQyZTEzMDQ0ZTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCkBAIC0xNSw2ICYjNDM7MTUsMTAgQEAgaW50IHdyaXRlX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiAJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Zik7CiBpbnQgd3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiAJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Zik7CiYjNDM7aW50IHJlYWRfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKJiM0MzsJCSAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKJiM0MztpbnQgcmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKJiM0MzsJCQkgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKIGludCBjZ3JvdXBfc2V0dXBfYW5kX2pvaW4oY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCk7CiBpbnQgZ2V0X3Jvb3RfY2dyb3VwKHZvaWQpOwogaW50IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmM1N2I5ODQ5NGNmYWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jCkBAIC0wLDAgJiM0MzsxLDE1OCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvdXNlci5oJmd0OwomIzQzOyNpZm5kZWYgUEFHRV9TSVpFIC8qIG9uIHNvbWUgYXJjaHMgaXQgY29tZXMgaW4gc3lzL3VzZXIuaCAqLwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjZGVmaW5lIFBBR0VfU0laRSBnZXRwYWdlc2l6ZSgpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjZ3JvdXBfaGVscGVycy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2FyZW5hX21lbWNnLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBDR19QQVRICQkmIzM0Oy9hcmVuYV9tZW1jZyYjMzQ7CiYjNDM7CiYjNDM7LyogQnVkZ2V0IHRoZSBhcmVuYSBnZXRzIG9uIHRvcCBvZiB3aGF0ZXZlciBpcyBhbHJlYWR5IGNoYXJnZWQgYWZ0ZXIgbG9hZC4gKi8KJiM0MzsjZGVmaW5lIEFSRU5BX0JVREdFVAkoNjQgKiAxMDI0ICogMTAyNCkKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkdW1wX21lbWNnKGludCAoKnJkKShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpKQomIzQzO3sKJiM0MzsJY2hhciBidWZbNTEyXTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogbWVtb3J5LmN1cnJlbnQgcmVhZHMgMCBvbmNlIHRoZSBjaGlsZCBoYXMgbGVmdCB0aGUgY2dyb3VwLCBzbyBpdCBvbmx5CiYjNDM7CSAqIGNhcnJpZXMgaW5mb3JtYXRpb24gd2hlbiBkdW1wZWQgZnJvbSB0aGUgbGl2ZSBjaGlsZDsgbWVtb3J5LnBlYWsgYW5kCiYjNDM7CSAqIG1lbW9yeS5ldmVudHMgc3Vydml2ZSB0aGUgY2hpbGQgYW5kIHRlbGwgdGhlIHN0b3J5IGVpdGhlciB3YXkuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXJkKENHX1BBVEgsICYjMzQ7bWVtb3J5LmN1cnJlbnQmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkuY3VycmVudDogJXMmIzM0OywgYnVmKTsKJiM0MzsJaWYgKCFyZChDR19QQVRILCAmIzM0O21lbW9yeS5tYXgmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkubWF4OiAlcyYjMzQ7LCBidWYpOwomIzQzOwlpZiAoIXJkKENHX1BBVEgsICYjMzQ7bWVtb3J5LnBlYWsmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkucGVhazogJXMmIzM0OywgYnVmKTsKJiM0MzsJaWYgKCFyZChDR19QQVRILCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkuZXZlbnRzOlxuJXMmIzM0OywgYnVmKTsKJiM0MzsJZmZsdXNoKHN0ZGVycik7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlYWQgb25lIGtleSBmcm9tIGEgZmxhdCBrZXllZCBjZ3JvdXAgZmlsZSwgZS5nLiAmIzM0O29vbV9raWxsJiMzNDsgaW4gbWVtb3J5LmV2ZW50cy4gKi8KJiM0MztzdGF0aWMgbG9uZyBjZ19yZWFkX2tleShjb25zdCBjaGFyICpjZywgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqa2V5KQomIzQzO3sKJiM0MzsJY2hhciBidWZbNTEyXSwgKnA7CiYjNDM7CiYjNDM7CWlmIChyZWFkX2Nncm91cF9maWxlKGNnLCBmaWxlLCBidWYsIHNpemVvZihidWYpKSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcCA9IHN0cnN0cihidWYsIGtleSk7CiYjNDM7CWlmICghcCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcmV0dXJuIHN0cnRvbChwICYjNDM7IHN0cmxlbihrZXkpLCBOVUxMLCAxMCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtY2codm9pZCkKJiM0Mzt7CiYjNDM7CWludCBjZ3JvdXBfZmQgPSAtMSwgc3RhdHVzLCBlcnI7CiYjNDM7CWNvbnN0IGxvbmcgcHMgPSBQQUdFX1NJWkU7CiYjNDM7CWNoYXIgYnVmWzY0XTsKJiM0MzsJcGlkX3QgcGlkOwomIzQzOwomIzQzOwllcnIgPSBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NldHVwX2Nncm91cF9lbnZpcm9ubWVudCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY2dyb3VwX2ZkID0gY3JlYXRlX2FuZF9nZXRfY2dyb3VwKENHX1BBVEgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsICYjMzQ7Y3JlYXRlX2FuZF9nZXRfY2dyb3VwJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qIE5vIG1lbW9yeSBjb250cm9sbGVyIC0mZ3Q7IG5vdGhpbmcgdG8gdGVzdC4gKi8KJiM0MzsJaWYgKHJlYWRfY2dyb3VwX2ZpbGUoQ0dfUEFUSCwgJiMzNDttZW1vcnkuY3VycmVudCYjMzQ7LCBidWYsIHNpemVvZihidWYpKSkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7JXM6U0tJUDpubyBtZW1vcnkgY29udHJvbGxlclxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXBpZCA9IGZvcmsoKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UocGlkLCAwLCAmIzM0O2ZvcmsmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQlzdHJ1Y3QgYXJlbmFfbWVtY2cgKmNza2VsOwomIzQzOwkJX191MzIgaSwgbnBhZ2VzOwomIzQzOwkJY2hhciAqYmFzZTsKJiM0MzsJCXNpemVfdCBzejsKJiM0MzsJCWxvbmcgY3VyOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIERvIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgY2hpbGQ6IHRoZSBhcmVuYSB2bWEgaXMgVk1fRE9OVENPUFkgc28KJiM0MzsJCSAqIGl0IHdvdWxkIG5vdCBzdXJ2aXZlIGZvcmsoKSwgb25seSB0aGUgY2hpbGQgc2hvdWxkIGJlIHVuZGVyIHRoZQomIzQzOwkJICogbGltaXQgc28gdGhhdCBhIG1lbWNnIE9PTSBjYW5ub3QgcGljayB0ZXN0X3Byb2dzLCBhbmQgYSBtYXAgaXMKJiM0MzsJCSAqIGNoYXJnZWQgdG8gdGhlIG1lbWNnIG9mIHRoZSB0YXNrIHRoYXQgY3JlYXRlcyBpdCAtIHNvIGpvaW4KJiM0MzsJCSAqIGJlZm9yZSBsb2FkLiBUaGUgY2dyb3VwIHdvcmsgZGlyIGJlbG9uZ3MgdG8gdGhlIHBhcmVudCB0aGF0IHNldAomIzQzOwkJICogdGhlIGVudmlyb25tZW50IHVwLCBzbyByZWFjaCBpdCB3aXRoIHRoZSBfcGFyZW50KCkgaGVscGVycy4KJiM0MzsJCSAqIEVycm9ycyBhcmUgcmVwb3J0ZWQgdG8gdGhlIHBhcmVudCB0aHJvdWdoIHRoZSBleGl0IGNvZGUsIHNpbmNlCiYjNDM7CQkgKiBBU1NFUlRfKiBpbiBhIGZvcmtlZCBjaGlsZCBkb2VzIG5vdCByZWFjaCBpdC4KJiM0MzsJCSAqLwomIzQzOwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslZCYjMzQ7LCBnZXRwaWQoKSk7CiYjNDM7CQlpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsICYjMzQ7Y2dyb3VwLnByb2NzJiMzNDssIGJ1ZikpCiYjNDM7CQkJX2V4aXQoMik7CiYjNDM7CiYjNDM7CQljc2tlbCA9IGFyZW5hX21lbWNnX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CQlpZiAoIWNza2VsKQomIzQzOwkJCV9leGl0KDMpOwomIzQzOwomIzQzOwkJYmFzZSA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUoY3NrZWwtJmd0O21hcHMuYXJlbmEsICZhbXA7c3opOwomIzQzOwkJaWYgKCFiYXNlKQomIzQzOwkJCV9leGl0KDQpOwomIzQzOwkJbnBhZ2VzID0gYnBmX21hcF9fbWF4X2VudHJpZXMoY3NrZWwtJmd0O21hcHMuYXJlbmEpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIENhcCBvbmx5IG5vdywgYWZ0ZXIgbG9hZDogZXZlcnl0aGluZyBidXQgdGhlIGZhdWx0LWluIGlzCiYjNDM7CQkgKiBjaGFyZ2VkLCBzbyB0aGUgYXJlbmEgZ2V0cyBhIGZpeGVkIGJ1ZGdldCByZWdhcmRsZXNzIG9mIHdoYXQKJiM0MzsJCSAqIHRoZSBsb2FkIGl0c2VsZiBjb3N0LCBhbmQgdGhlIGxvYWQgY2FuIG5ldmVyIGhpdCB0aGUgbGltaXQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyZWFkX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCAmIzM0O21lbW9yeS5jdXJyZW50JiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKQomIzQzOwkJCV9leGl0KDUpOwomIzQzOwkJY3VyID0gc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwomIzQzOwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslbGQmIzM0OywgY3VyICYjNDM7IEFSRU5BX0JVREdFVCk7CiYjNDM7CQlpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsICYjMzQ7bWVtb3J5Lm1heCYjMzQ7LCBidWYpKQomIzQzOwkJCV9leGl0KDYpOwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5wYWdlczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJYmFzZVsoc2l6ZV90KWkgKiBwc10gPSAxOwomIzQzOwkJLyogRmF1bHRlZCBldmVyeXRoaW5nIHdpdGhvdXQgZHlpbmc6IGR1bXAgd2h5IChvbmx5IHVuZGVyIC12KS4gKi8KJiM0MzsJCWR1bXBfbWVtY2cocmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQpOwomIzQzOwkJX2V4aXQoMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfRVEod2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCAwKSwgcGlkLCAmIzM0O3dhaXRwaWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogQSBub24temVybyBleGl0IG1lYW5zIHRoZSBjaGlsZCBmYWlsZWQgdG8gc2V0IHVwOyB0aGUgY29kZSBzYXlzIHdoZXJlLiAqLwomIzQzOwlpZiAoV0lGRVhJVEVEKHN0YXR1cykgJmFtcDsmYW1wOyBXRVhJVFNUQVRVUyhzdGF0dXMpKSB7CiYjNDM7CQlBU1NFUlRfT0soV0VYSVRTVEFUVVMoc3RhdHVzKSwgJiMzNDtjaGlsZCBzZXR1cCYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZhdWx0aW5nIGEgdmFsaWQgYXJlbmEgYWRkcmVzcyB1bnRpbCBtZW1vcnkubWF4IGlzIGhpdCBtdXN0IG5vdCBsb29rCiYjNDM7CSAqIGxpa2UgYW4gaW52YWxpZCBhY2Nlc3MuIFdpdGhvdXQgdGhlIGZpeCB0aGUgZmF1bHQgcGF0aCBhbGxvY2F0ZWQgd2l0aAomIzQzOwkgKiB0aGUgbm9uLWJsb2NraW5nIGFsbG9jYXRvciwgdHVybmVkIGl0cyAtRU5PTUVNIGludG8gVk1fRkFVTFRfU0lHU0VHViwKJiM0MzsJICogYW5kIHRoZSBjaGlsZCBkaWVkIHdpdGggU0lHU0VHViBvbiBhIHZhbGlkIGFkZHJlc3M7IG5vdyBpdCBpcyBoYW5kbGVkCiYjNDM7CSAqIGJ5IHRoZSBtZW1jZyBPT00gcGF0aCBpbnN0ZWFkLiBBIFNJR0tJTEwgYWxvbmUgd291bGQgbm90IHByb3ZlIHRoZQomIzQzOwkgKiBtZW1jZyBPT00ga2lsbGVyIGRpZCBpdCAoYSBnbG9iYWwgT09NIG9yIGFuIHVucmVsYXRlZCBjcmFzaCBjb3VsZCBhbHNvCiYjNDM7CSAqIGtpbGwgdGhlIGNoaWxkKSwgc28gY2hlY2sgbWVtb3J5LmV2ZW50cy5vb21fa2lsbCwgd2hpY2ggcmVjb3JkcyB0aGUKJiM0MzsJICogbWVtY2cgT09NIGFuZCBzdXJ2aXZlcyB0aGUgY2hpbGQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIUFTU0VSVF9UUlVFKFdJRlNJR05BTEVEKHN0YXR1cyksICYjMzQ7Y2hpbGQga2lsbGVkIGJ5IHNpZ25hbCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9HRShjZ19yZWFkX2tleShDR19QQVRILCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtvb21fa2lsbCYjMzQ7KSwgMSwKJiM0MzsJCSAgICAgICAmIzM0O21lbWNnIG9vbV9raWxsJiMzNDspKQomIzQzOwkJZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlKTsKJiM0MztvdXQ6CiYjNDM7CWlmIChjZ3JvdXBfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGNncm91cF9mZCk7CiYjNDM7CWNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi44ODI1OWNmZWEwNmI2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMKQEAgLTAsMCAmIzQzOzEsMjQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX2FyZW5hX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTsKJiM0MzsJX191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDUwMDAwKTsgLyogbnVtYmVyIG9mIHBhZ2VzICovCiYjNDM7I2lmZGVmIF9fVEFSR0VUX0FSQ0hfYXJtNjQKJiM0MzsJX191bG9uZyhtYXBfZXh0cmEsIDB4MXVsbCAmbHQ7Jmx0OyAzMik7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi8KJiM0MzsjZWxzZQomIzQzOwlfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsICZsdDsmbHQ7IDQ0KTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqLwomIzQzOyNlbmRpZgomIzQzO30gYXJlbmEgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO2ludCBub29wKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjE4CgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDEzNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBhIFBhc3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBwYXRjaCBtb2RpZmllcyBgYXJlbmFfdm1fZmF1bHRgIGluIGBrZXJuZWwvYnBmL2FyZW5hLmNgIGFuZCBpbnRyb2R1Y2VzIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBhbG9uZyB3aXRoIGEgc2VsZnRlc3QuCgpGaXJzdCwgbG9va2luZyBhdCBgYXJlbmEuY2AsIHRoZSBjb3JlIGNoYW5nZSBpcyBwcmVhbGxvY2F0aW5nIGEgcGFnZSAqYmVmb3JlKiBhY3F1aXJpbmcgYSBzcGlubG9jaywgYnV0IG9ubHkgd2hlbiBhIHBhZ2UgaXNuJiMzOTt0IGFscmVhZHkgbWFwcGVkLCBhbmQgdGhlIGBCUEZfRl9TRUdWX09OX0ZBVUxUYCBmbGFnIGlzbiYjMzk7dCBzZXQuIFRoaXMgYWxsb3dzIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIGludGVydmVuZSBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscywgd2hpY2ggaXMgcHJlZmVyYWJsZSB0byB0aGUgcHJldmlvdXMgYmVoYXZpb3Igb2YgcG90ZW50aWFsbHkgaGFuZ2luZyBkdWUgdG8gbGFjayBvZiBhIHNsZWVwYWJsZSBhbGxvY2F0b3Igd2l0aGluIHRoZSBzcGlubG9jay4gSWYgdGhhdCBwcmUtYWxsb2NhdGlvbiBmYWlscywgaXQgcmV0dXJucyBgVk1fRkFVTFRfU0lHQlVTYC4gSWYgc3VjY2Vzc2Z1bCwgdGhlIHNwaW5sb2NrIGlzIGFjcXVpcmVkLCBhbmQgdGhlIHBhZ2UgaXMgdXNlZC4gVGhlIGtleSBwb2ludCBpcyB0aGF0IGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCB1c2VzIGBCUEZfUEFHRV9HRlBgLCB3aGljaCBpbmNsdWRlcyBgX19HRlBfWkVST2AuIFRoaXMgbWVhbnMgdGhhdCBhbnkgbmV3bHkgYWxsb2NhdGVkIHBhZ2UgaXMgKmd1YXJhbnRlZWQqIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQuCgpOb3csIGRvZXMgdGhpcyBhbGxvY2F0aW9uIGxvZ2ljIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBJIGRvbiYjMzk7dCB0aGluayBzby4gVGhlIGV4aXN0aW5nIGxvZ2ljIHVzaW5nIGBicGZfbWFwX2FsbG9jX3BhZ2VzYCBhbHNvIHplcm9zIHRoZSBwYWdlcyAoaXQgY2FsbHMgYF9fYnBmX2FsbG9jX3BhZ2VgIHdoaWNoIGl0c2VsZiBhbHNvIGNvbnRhaW5zIGBfX0dGUF9aRVJPYCkuIFNvLCB0aGUgemVyb2luZyBiZWhhdmlvciBpcyBjb25zaXN0ZW50LiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byB0aGUgaW5pdGlhbGl6YXRpb24gb2YgcGFnZXMuCgpUaGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IGEgcmVmYWN0b3JpbmcgZm9yIG1vcmUgcm9idXN0IE9PTSBoYW5kbGluZy4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBJdCBkb2VzbiYjMzk7dCBtb2RpZnkgYW55IGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCB3b3VsZCBwb3RlbnRpYWxseSBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBtZW1vcnkgYmVpbmcgYWxsb2NhdGVkIGlzIGV4cGxpY2l0bHkgemVyb2VkLiBUaGUgcHJldmlvdXMgYWxsb2NhdGlvbiBwYXRoIHdhcyBhbHNvIHplcm8taW5pdGlhbGl6ZWQuIFRoZSBjb3JlIGlzc3VlIGJlaW5nIGFkZHJlc3NlZCBpcyB0aGUgT09NIGhhbmRsaW5nIHdpdGggdGhlIHByZWFsbG9jYXRpb24gYmVmb3JlIHRoZSBsb2NrLgoKVG8gYmUgZXh0cmEgY2VydGFpbiwgSSBqdXN0IGdsYW5jZWQgYXQgYGJwZl9tYXBfYWxsb2NfcGFnZXNgIGluIGBzeXNjYWxsLmNgIGFuZCBpdCBhbHNvIHVzZXMgYEJQRl9QQUdFX0dGUGAgKGNvbnRhaW5pbmcgYF9fR0ZQX1pFUk9gKS4gU28sIHRoZSBwYWdlcyBhcmUgZGVmaW5pdGVseSB6ZXJvZWQgaW4gKmJvdGgqIGNhc2VzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyBhcmUgaW50cm9kdWNlZCwgc2luY2UgdGhlIGFsbG9jYXRlZCBwYWdlcyBhcmUgemVyb2VkLiBTdGFuZGFyZCBLQVNBTiBzaG91bGQgYmUgc3VmZmljaWVudCwgZXZlbiB0aG91Z2ggSSB3aWxsIHF1aWNrbHkgdmVyaWZ5IGBhbGxvY19wYWdlc19ub2xvY2tgIGlzIG5vdCBtb2RpZmllZCBieSB0aGlzIHBhdGNoIHRvIGRvdWJsZS1jaGVjaywgYnV0IHRoaXMgaXMgYSB2ZXJ5IGxvdy1yaXNrIGNoYW5nZS4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gSSB3aWxsIG1hcmsgTmVlZHNLTVNBTiBhcyBgZmFsc2VgLiBUaGUgcHJpbWFyeSBhaW0gaXMgaW1wcm92ZWQgT09NIGhhbmRsaW5nIGFuZCBwcmVhbGxvY2F0aW9uIGJlZm9yZSB0aGUgc3BpbmxvY2sgdG8gdXNlIGEgc2xlZXBhYmxlIGFsbG9jYXRvci4gVGhlIG5ldyBhbGxvY2F0aW9uIGxvZ2ljIHplcm9zIG1lbW9yeS4gVGhpcyBpcyBhIHZlcnkgc2FmZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgZm9yIEJQRiBhcmVuYXMgKGBhcmVuYV92bV9mYXVsdGApIHRvIHByZWFsbG9jYXRlIHBhZ2VzIG91dHNpZGUgb2YgYSBzcGlubG9jayB1c2luZyBhIHNsZWVwYWJsZSBhbGxvY2F0b3IsIGFsbG93aW5nIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biBpZiBuZWVkZWQuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIGFsbG9jYXRpb24gZnVuY3Rpb24gYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGV4cGxpY2l0bHkgdXNlcyBgX19HRlBfWkVST2AgKHZpYSBgQlBGX1BBR0VfR0ZQYCkgdG8gZW5zdXJlIHRoZSBhbGxvY2F0ZWQgcGFnZXMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQsIGp1c3QgbGlrZSB0aGUgcHJldmlvdXMgbm9uLWJsb2NraW5nIGFsbG9jYXRpb24gcGF0aC4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZC4gVGhlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gY29udGV4dCBhbmQgT09NIGhhbmRsaW5nLCB3aGljaCBkbyBub3QgaW50cm9kdWNlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgQlBGIGFyZW5hcyAoYGFyZW5hX3ZtX2ZhdWx0YCkgdG8gcHJlYWxsb2NhdGUgcGFnZXMgb3V0c2lkZSBvZiBhIHNwaW5sb2NrIHVzaW5nIGEgc2xlZXBhYmxlIGFsbG9jYXRvciwgYWxsb3dpbmcgdGhlIG1lbWNnIE9PTSBraWxsZXIgdG8gcnVuIGlmIG5lZWRlZC4gVGhlIG5ld2x5IGludHJvZHVjZWQgYWxsb2NhdGlvbiBmdW5jdGlvbiBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgZXhwbGljaXRseSB1c2VzIGBfX0dGUF9aRVJPYCAodmlhIGBCUEZfUEFHRV9HRlBgKSB0byBlbnN1cmUgdGhlIGFsbG9jYXRlZCBwYWdlcyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCwganVzdCBsaWtlIHRoZSBwcmV2aW91cyBub24tYmxvY2tpbmcgYWxsb2NhdGlvbiBwYXRoLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkLiBUaGUgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiBjb250ZXh0IGFuZCBPT00gaGFuZGxpbmcsIHdoaWNoIGRvIG5vdCBpbnRyb2R1Y2Ugcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjIzOjUyLjc3MzAwMzk4NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNzM2MzM3MTM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkNHUk9VUFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZvciBCUEYgYXJlbmFzIChgYXJlbmFfdm1fZmF1bHRgKSB0byBwcmVhbGxvY2F0ZSBwYWdlcyBvdXRzaWRlIG9mIGEgc3BpbmxvY2sgdXNpbmcgYSBzbGVlcGFibGUgYWxsb2NhdG9yLCBhbGxvd2luZyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBydW4gaWYgbmVlZGVkLiBUaGUgbmV3bHkgaW50cm9kdWNlZCBhbGxvY2F0aW9uIGZ1bmN0aW9uIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBleHBsaWNpdGx5IHVzZXMgYF9fR0ZQX1pFUk9gICh2aWEgYEJQRl9QQUdFX0dGUGApIHRvIGVuc3VyZSB0aGUgYWxsb2NhdGVkIHBhZ2VzIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkLCBqdXN0IGxpa2UgdGhlIHByZXZpb3VzIG5vbi1ibG9ja2luZyBhbGxvY2F0aW9uIHBhdGguIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQuIFRoZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnRleHQgYW5kIE9PTSBoYW5kbGluZywgd2hpY2ggZG8gbm90IGludHJvZHVjZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZvciBCUEYgYXJlbmEgbWFwcyB0byB1c2UgYSBzbGVlcGFibGUgcGFnZSBhbGxvY2F0b3IsIGFsbG93aW5nIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biB3aGVuIG1lbW9yeSBsaW1pdHMgYXJlIGhpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYWZmZWN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgaW50ZXJhY3Rpb25zLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtbWFwaW5nIGFuZCBmYXVsdGluZyBCUEYgYXJlbmEgbWFwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MjM6NTIuNzczMDA4ODc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM2ODY4NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3ODRlYjQ4ZGE5NmQ3YzRlM2ZmMTNmNmRjMGExYmZlNDA1YmZlMjliXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDI1IDEwOjIzOjUxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuaW5kZXggYjNjZDI4ZDllM2I1NS4uYzgxN2M5OWQyOTA2NiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYuaFxcbkBAIC0yNzg0LDYgKzI3ODQsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2dldF9jdXJyX29yX25leHQodTMyICppZCk7XFxuIFxcbiBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxcbiBcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xcbitzdHJ1Y3QgcGFnZSAqYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcXG4gI2lmZGVmIENPTkZJR19NRU1DR1xcbiB2b2lkIGJwZl9tYXBfbWVtY2dfZW50ZXIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IG1lbV9jZ3JvdXAgKipvbGRfbWVtY2csXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgbWVtX2Nncm91cCAqKm5ld19tZW1jZyk7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuY1xcbmluZGV4IDdiNjg0NzIwMGI0MzEuLmZhNDYyYTBmZjFhZDYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9hcmVuYS5jXFxuKysrIGIva2VybmVsL2JwZi9hcmVuYS5jXFxuQEAgLTQ4MSw3ICs0ODEsOCBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtZi1cXHUwMDNldm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm5ld19tZW1jZywgKm9sZF9tZW1jZztcXG4tXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlLCAqbmV3X3BhZ2UgPSBOVUxMO1xcbitcXHR2bV9mYXVsdF90IGZhdWx0X3JldDtcXG4gXFx0bG9uZyBrYmFzZSwga2FkZHI7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdGludCByZXQ7XFxuQEAgLTQ4OSw1OSArNDkwLDEwNiBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0a2Jhc2UgPSBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpO1xcbiBcXHRrYWRkciA9IGtiYXNlICsgKHUzMikodm1mLVxcdTAwM2VhZGRyZXNzKTtcXG4gXFxuLVxcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKSlcXG4rXFx0cGFnZSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWthZGRyKTtcXG4rXFx0aWYgKCFwYWdlIFxcdTAwMjZcXHUwMDI2ICEoYXJlbmEtXFx1MDAzZW1hcC5tYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9TRUdWX09OX0ZBVUxUKSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBQcmVhbGxvY2F0ZSBvdXRzaWRlIHRoZSBsb2NrIHdpdGggYSBzbGVlcGFibGUgYWxsb2NhdG9yIHNvIGl0XFxuK1xcdFxcdCAqIGNhbiByZWNsYWltIGFuZCBydW4gdGhlIG1lbWNnIE9PTSBraWxsZXIsIHdoaWNoIHRoZVxcbitcXHRcXHQgKiBub24tYmxvY2tpbmcgYWxsb2NhdG9yIHVuZGVyIGFyZW5hLVxcdTAwM2VzcGlubG9jayBjYW5ub3QuIEEgTlVMTFxcbitcXHRcXHQgKiByZXR1cm4gaXMgbm9uLXJlY292ZXJhYmxlLCBzbyBmYWlsIHdpdGggVk1fRkFVTFRfU0lHQlVTO1xcbitcXHRcXHQgKiBWTV9GQVVMVF9PT00gd291bGQgYmUgcmV0cmllZCBieSB0aGUgZmF1bHQgcGF0aCBhbmQgY2FuXFxuK1xcdFxcdCAqIGxpdmVsb2NrIHdoZW4gdGhlIGNoYXJnZWQgbWVtY2cgaXMgbm90IHRoZSBmYXVsdGluZyB0YXNrJ3MuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRicGZfbWFwX21lbWNnX2VudGVyKFxcdTAwMjZhcmVuYS1cXHUwMDNlbWFwLCBcXHUwMDI2b2xkX21lbWNnLCBcXHUwMDI2bmV3X21lbWNnKTtcXG4rXFx0XFx0bmV3X3BhZ2UgPSBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKG1hcCk7XFxuK1xcdFxcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XFxuK1xcdFxcdGlmICghbmV3X3BhZ2UpXFxuK1xcdFxcdFxcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKSkge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBBIGZhaWxlZCBsb2NrIG1lYW5zIGEgcG9zc2libGUgZGVhZGxvY2sgd2FzIGRldGVjdGVkLiBEb24ndFxcbiBcXHRcXHQgKiByZXR1cm4gVk1fRkFVTFRfUkVUUlk6IHRoaXMgaGFuZGxlciBuZXZlciB0b29rIG1tYXBfbG9jaywgYnV0XFxuIFxcdFxcdCAqIHRoZSBmYXVsdCBwYXRoIHdvdWxkIHJlLXRha2UgaXQgb24gcmV0cnkgYW5kIGRlYWRsb2NrLiBGYWlsLlxcbiBcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKG5ld19wYWdlKVxcbitcXHRcXHRcXHRmcmVlX3BhZ2VzX25vbG9jayhuZXdfcGFnZSwgMCk7XFxuIFxcdFxcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XFxuK1xcdH1cXG4gXFxuIFxcdHBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilrYWRkcik7XFxuIFxcdGlmIChwYWdlKSB7XFxuLVxcdFxcdGlmIChwYWdlID09IGFyZW5hLVxcdTAwM2VzY3JhdGNoX3BhZ2UpXFxuLVxcdFxcdFxcdC8qIEJQRiB0cmlnZ2VyZWQgc2NyYXRjaCBoZXJlOyBkb24ndCBsYXp5LWFsbG9jIG92ZXIgaXQgKi9cXG4tXFx0XFx0XFx0Z290byBvdXRfc2lnc2VndjtcXG4rXFx0XFx0aWYgKHBhZ2UgPT0gYXJlbmEtXFx1MDAzZXNjcmF0Y2hfcGFnZSkge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBBIHNjcmF0Y2ggcGFnZSBtYXJrcyBhIGhvbGUuIFNlZ2ZhdWx0IG9ubHkgaWYgdGhlIHVzZXJcXG4rXFx0XFx0XFx0ICogYXNrZWQgZm9yIGl0OyBvdGhlcndpc2Ugd2UgY291bGQgbGF6eS1hbGxvY2F0ZSBidXRcXG4rXFx0XFx0XFx0ICogY2hvb3NlIG5vdCB0byBvdmVyIGEgaG9sZSwgc28gcmVwb3J0IGEgYnVzIGVycm9yLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0ZmF1bHRfcmV0ID0gKGFyZW5hLVxcdTAwM2VtYXAubWFwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVCkgP1xcbitcXHRcXHRcXHRcXHQgICAgVk1fRkFVTFRfU0lHU0VHViA6IFZNX0ZBVUxUX1NJR0JVUztcXG4rXFx0XFx0XFx0Z290byBvdXRfZXJyX2xvY2tlZDtcXG4rXFx0XFx0fVxcbiBcXHRcXHQvKiBhbHJlYWR5IGhhdmUgYSBwYWdlIHZtYXAtZWQgKi9cXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChhcmVuYS1cXHUwMDNlbWFwLm1hcF9mbGFncyBcXHUwMDI2IEJQRl9GX1NFR1ZfT05fRkFVTFQpIHtcXG4rXFx0XFx0LyogVXNlciBzcGFjZSByZXF1ZXN0ZWQgdG8gc2VnZmF1bHQgd2hlbiBwYWdlIGlzIG5vdCBhbGxvY2F0ZWQgYnkgYnBmIHByb2cgKi9cXG4rXFx0XFx0ZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHU0VHVjtcXG4rXFx0XFx0Z290byBvdXRfZXJyX2xvY2tlZDtcXG4rXFx0fVxcbitcXG4gXFx0YnBmX21hcF9tZW1jZ19lbnRlcihcXHUwMDI2YXJlbmEtXFx1MDAzZW1hcCwgXFx1MDAyNm9sZF9tZW1jZywgXFx1MDAyNm5ld19tZW1jZyk7XFxuIFxcbi1cXHRpZiAoYXJlbmEtXFx1MDAzZW1hcC5tYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9TRUdWX09OX0ZBVUxUKVxcbi1cXHRcXHQvKiBVc2VyIHNwYWNlIHJlcXVlc3RlZCB0byBzZWdmYXVsdCB3aGVuIHBhZ2UgaXMgbm90IGFsbG9jYXRlZCBieSBicGYgcHJvZyAqL1xcbi1cXHRcXHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xcbitcXHRpZiAoIW5ld19wYWdlKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFZlcnkgcmFyZSByYWNlOiB0aGUgYnBmIHByb2dyYW0gaGFkIGFsbG9jYXRlZCBhIHBhZ2UgaGVyZSwgc29cXG4rXFx0XFx0ICogdGhlIGxvY2tsZXNzIHByb2JlIHNhdyBpdCBhbmQgd2Ugc2tpcHBlZCBwcmVhbGxvY2F0aW9uLCBidXQgaXRcXG4rXFx0XFx0ICogZnJlZWQgdGhlIHBhZ2UgYmVmb3JlIHdlIHRvb2sgdGhlIGxvY2suIE5vdyB3ZSBkbyBuZWVkIG9uZTtcXG4rXFx0XFx0ICogc2xlZXBpbmcgaXMgbm90IGFsbG93ZWQgaGVyZSwgc28gZmFsbCBiYWNrIHRvIHRoZSBub24tYmxvY2tpbmdcXG4rXFx0XFx0ICogYWxsb2NhdG9yIGFuZCBnaXZlIHVwIGlmIGl0IGZhaWxzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIG1hcC1cXHUwMDNlbnVtYV9ub2RlLCAxLCBcXHUwMDI2bmV3X3BhZ2UpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGZhdWx0X3JldCA9IFZNX0ZBVUxUX1NJR0JVUztcXG4rXFx0XFx0XFx0Z290byBvdXRfZXJyX2xvY2tlZF9tZW1jZztcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcbiBcXHRyZXQgPSByYW5nZV90cmVlX2NsZWFyKFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHZtZi1cXHUwMDNlcGdvZmYsIDEpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xcbi1cXG4tXFx0c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9IFxcdTAwMjZwYWdlLCAuaSA9IDAgfTtcXG4tXFx0LyogQWNjb3VudCBpbnRvIG1lbWNnIG9mIHRoZSBwcm9jZXNzIHRoYXQgY3JlYXRlZCBicGZfYXJlbmEgKi9cXG4tXFx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIE5VTUFfTk9fTk9ERSwgMSwgXFx1MDAyNnBhZ2UpO1xcbiBcXHRpZiAocmV0KSB7XFxuLVxcdFxcdHJhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHZtZi1cXHUwMDNlcGdvZmYsIDEpO1xcbi1cXHRcXHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xcbitcXHRcXHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XFxuK1xcdFxcdGdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7XFxuIFxcdH1cXG4rXFx0c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9IFxcdTAwMjZuZXdfcGFnZSwgLmkgPSAwIH07XFxuIFxcbiBcXHRyZXQgPSBhcHBseV90b19wYWdlX3JhbmdlKFxcdTAwMjZpbml0X21tLCBrYWRkciwgUEFHRV9TSVpFLCBhcHBseV9yYW5nZV9zZXRfY2IsIFxcdTAwMjZkYXRhKTtcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHRyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCB2bWYtXFx1MDAzZXBnb2ZmLCAxKTtcXG4tXFx0XFx0ZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7XFxuLVxcdFxcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XFxuK1xcdFxcdGZhdWx0X3JldCA9IFZNX0ZBVUxUX1NJR0JVUztcXG4rXFx0XFx0Z290byBvdXRfZXJyX2xvY2tlZF9tZW1jZztcXG4gXFx0fVxcbiBcXHRmbHVzaF92bWFwX2NhY2hlKGthZGRyLCBQQUdFX1NJWkUpO1xcbiBcXHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xcbitcXHQvKiBuZXdfcGFnZSB3YXMgY29uc3VtZWQgKi9cXG4rXFx0cGFnZSA9IG5ld19wYWdlO1xcbitcXHRuZXdfcGFnZSA9IE5VTEw7XFxuIG91dDpcXG4gXFx0cGFnZV9yZWZfYWRkKHBhZ2UsIDEpO1xcbiBcXHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmFyZW5hLVxcdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xcbitcXHRpZiAobmV3X3BhZ2UpXFxuK1xcdFxcdGZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTtcXG4gXFx0dm1mLVxcdTAwM2VwYWdlID0gcGFnZTtcXG4gXFx0cmV0dXJuIDA7XFxuLW91dF9zaWdzZWd2X21lbWNnOlxcbitcXG4rb3V0X2Vycl9sb2NrZWRfbWVtY2c6XFxuIFxcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XFxuLW91dF9zaWdzZWd2OlxcbitvdXRfZXJyX2xvY2tlZDpcXG4gXFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcXG4tXFx0cmV0dXJuIFZNX0ZBVUxUX1NJR1NFR1Y7XFxuK1xcdGlmIChuZXdfcGFnZSlcXG4rXFx0XFx0ZnJlZV9wYWdlc19ub2xvY2sobmV3X3BhZ2UsIDApO1xcbitcXHRyZXR1cm4gZmF1bHRfcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFyZW5hX3ZtX29wcyA9IHtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbmluZGV4IDY4NzRiYTE0MjRhZjAuLmY5YjgxNjM4ZTUzN2EgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbkBAIC02MDIsMTUgKzYwMiwxNCBAQCBzdGF0aWMgYm9vbCBjYW5fYWxsb2NfcGFnZXModm9pZClcXG4gXFx0XFx0IUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpO1xcbiB9XFxuIFxcbisjZGVmaW5lIEJQRl9QQUdFX0dGUCAoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKVxcbitcXG4gc3RhdGljIHN0cnVjdCBwYWdlICpfX2JwZl9hbGxvY19wYWdlKGludCBuaWQpXFxuIHtcXG4gXFx0aWYgKCFjYW5fYWxsb2NfcGFnZXMoKSlcXG4gXFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX25vbG9jayhfX0dGUF9BQ0NPVU5ULCBuaWQsIDApO1xcbiBcXG4tXFx0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobmlkLFxcbi1cXHRcXHRcXHRcXHRHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyB8IF9fR0ZQX0FDQ09VTlRcXG4tXFx0XFx0XFx0XFx0fCBfX0dGUF9OT1dBUk4sXFxuLVxcdFxcdFxcdFxcdDApO1xcbitcXHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShuaWQsIEJQRl9QQUdFX0dGUCwgMCk7XFxuIH1cXG4gXFxuIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXFxuQEAgLTYzNiw2ICs2MzUsMjAgQEAgaW50IGJwZl9tYXBfYWxsb2NfcGFnZXMoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG5pZCxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLypcXG4rICogRm9yIGNhbGxlcnMgdGhhdCBrbm93IHRoZXkgcnVuIGluIGEgc2xlZXBhYmxlIGNvbnRleHQsIGUuZy4gYSB1c2VyIHBhZ2VcXG4rICogZmF1bHQgaGFuZGxlci4gY2FuX2FsbG9jX3BhZ2VzKCkgaXMgYSBjb25zZXJ2YXRpdmUgZ3Vlc3MgbWFkZSBmb3IgQlBGXFxuKyAqIHByb2dyYW0gY29udGV4dCAtIG5vdGFibHkgaXQgaXMgYWx3YXlzIGZhbHNlIG9uIFBSRUVNUFRfUlQgLSBzbyBnb2luZ1xcbisgKiB0aHJvdWdoIGJwZl9tYXBfYWxsb2NfcGFnZXMoKSB0aGVyZSB3b3VsZCBuZWVkbGVzc2x5IHBpY2sgdGhlXFxuKyAqIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IsIHdoaWNoIG5ldmVyIHJlY2xhaW1zIGFuZCBuZXZlciBlbmdhZ2VzIHRoZSBPT01cXG4rICogbWFjaGluZXJ5LlxcbisgKi9cXG4rc3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcXG4re1xcbitcXHRtaWdodF9zbGVlcCgpO1xcbitcXHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShtYXAtXFx1MDAzZW51bWFfbm9kZSwgQlBGX1BBR0VfR0ZQLCAwKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBidGZfZmllbGRfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGJ0Zl9maWVsZCAqZjEgPSBhLCAqZjIgPSBiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jXFxuaW5kZXggNDVjZDBiNDc5ZmUzNS4uNDE4M2ZmNjE1MGMyOCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jXFxuQEAgLTE4OCw2ICsxODgsNzMgQEAgaW50IHdyaXRlX2Nncm91cF9maWxlX3BhcmVudChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxcbiBcXHRyZXR1cm4gX193cml0ZV9jZ3JvdXBfZmlsZShjZ3JvdXBfcGF0aCwgZmlsZSwgYnVmKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBfX3JlYWRfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqY2dyb3VwX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXFxuK1xcdFxcdFxcdCAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4re1xcbitcXHRjaGFyIGZpbGVfcGF0aFtQQVRIX01BWCArIDFdO1xcbitcXHRzc2l6ZV90IGdvdDtcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0c25wcmludGYoZmlsZV9wYXRoLCBzaXplb2YoZmlsZV9wYXRoKSwgXFxcIiVzLyVzXFxcIiwgY2dyb3VwX3BhdGgsIGZpbGUpO1xcbitcXHRmZCA9IG9wZW4oZmlsZV9wYXRoLCBPX1JET05MWSk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0bG9nX2VycihcXFwiT3BlbmluZyAlc1xcXCIsIGZpbGVfcGF0aCk7XFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHR9XFxuK1xcbitcXHRnb3QgPSByZWFkKGZkLCBidWYsIGxlbiAtIDEpO1xcbitcXHRpZiAoZ290IFxcdTAwM2MgMCkge1xcbitcXHRcXHRsb2dfZXJyKFxcXCJSZWFkaW5nICVzXFxcIiwgZmlsZV9wYXRoKTtcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXHRidWZbZ290XSA9ICdcXFxcMCc7XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiByZWFkX2Nncm91cF9maWxlKCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZVxcbisgKiBAcmVsYXRpdmVfcGF0aDogVGhlIGNncm91cCBwYXRoLCByZWxhdGl2ZSB0byB0aGUgd29ya2RpclxcbisgKiBAZmlsZTogVGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gY2dyb3VwZnMgdG8gcmVhZCBmcm9tXFxuKyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3NcXG4rICogQGxlbjogU2l6ZSBvZiBAYnVmXFxuKyAqXFxuKyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCdzIGRpcmVjdG9yeS5cXG4rICpcXG4rICogSWYgc3VjY2Vzc2Z1bCwgMCBpcyByZXR1cm5lZC5cXG4rICovXFxuK2ludCByZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXFxuK1xcdFxcdCAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdGNoYXIgY2dyb3VwX3BhdGhbUEFUSF9NQVggLSAyNF07XFxuK1xcbitcXHRmb3JtYXRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpO1xcbitcXHRyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiByZWFkX2Nncm91cF9maWxlX3BhcmVudCgpIC0gUmVhZCBmcm9tIGEgY2dyb3VwIGZpbGUgaW4gdGhlIHBhcmVudCBwcm9jZXNzXFxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZGlyXFxuKyAqIEByZWxhdGl2ZV9wYXRoOiBUaGUgY2dyb3VwIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgcHJvY2VzcyB3b3JrZGlyXFxuKyAqIEBmaWxlOiBUaGUgbmFtZSBvZiB0aGUgZmlsZSBpbiBjZ3JvdXBmcyB0byByZWFkIGZyb21cXG4rICogQGJ1ZjogQnVmZmVyIHRvIHJlYWQgaW50bywgTlVMLXRlcm1pbmF0ZWQgb24gc3VjY2Vzc1xcbisgKiBAbGVuOiBTaXplIG9mIEBidWZcXG4rICpcXG4rICogUmVhZCBmcm9tIGEgZmlsZSBpbiB0aGUgZ2l2ZW4gY2dyb3VwJ3MgZGlyZWN0b3J5IHVuZGVyIHRoZSBwYXJlbnQgcHJvY2Vzc1xcbisgKiB3b3JrZGlyLlxcbisgKlxcbisgKiBJZiBzdWNjZXNzZnVsLCAwIGlzIHJldHVybmVkLlxcbisgKi9cXG4raW50IHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXFxuK1xcdFxcdFxcdCAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuK3tcXG4rXFx0Y2hhciBjZ3JvdXBfcGF0aFtQQVRIX01BWCAtIDI0XTtcXG4rXFxuK1xcdGZvcm1hdF9wYXJlbnRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpO1xcbitcXHRyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKSAtIFNldHVwIHRoZSBjZ3JvdXAgZW52aXJvbm1lbnRcXG4gICpcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaFxcbmluZGV4IDM4NTczMDRiZTg3NDEuLmQ0MmQyZTEzMDQ0ZTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaFxcbkBAIC0xNSw2ICsxNSwxMCBAQCBpbnQgd3JpdGVfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcXG4gXFx0XFx0ICAgICAgY29uc3QgY2hhciAqYnVmKTtcXG4gaW50IHdyaXRlX2Nncm91cF9maWxlX3BhcmVudChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxcbiBcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmJ1Zik7XFxuK2ludCByZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXFxuK1xcdFxcdCAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcXG4raW50IHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXFxuK1xcdFxcdFxcdCAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pO1xcbiBpbnQgY2dyb3VwX3NldHVwX2FuZF9qb2luKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgpO1xcbiBpbnQgZ2V0X3Jvb3RfY2dyb3VwKHZvaWQpO1xcbiBpbnQgY3JlYXRlX2FuZF9nZXRfY2dyb3VwKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtY2cuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYzU3Yjk4NDk0Y2ZhYlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jXFxuQEAgLTAsMCArMSwxNTggQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc2lnbmFsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3dhaXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3VzZXIuaFxcdTAwM2VcXG4rI2lmbmRlZiBQQUdFX1NJWkUgLyogb24gc29tZSBhcmNocyBpdCBjb21lcyBpbiBzeXMvdXNlci5oICovXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2RlZmluZSBQQUdFX1NJWkUgZ2V0cGFnZXNpemUoKVxcbisjZW5kaWZcXG4rXFxuKyNpbmNsdWRlIFxcXCJjZ3JvdXBfaGVscGVycy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYXJlbmFfbWVtY2cuc2tlbC5oXFxcIlxcbitcXG4rI2RlZmluZSBDR19QQVRIXFx0XFx0XFxcIi9hcmVuYV9tZW1jZ1xcXCJcXG4rXFxuKy8qIEJ1ZGdldCB0aGUgYXJlbmEgZ2V0cyBvbiB0b3Agb2Ygd2hhdGV2ZXIgaXMgYWxyZWFkeSBjaGFyZ2VkIGFmdGVyIGxvYWQuICovXFxuKyNkZWZpbmUgQVJFTkFfQlVER0VUXFx0KDY0ICogMTAyNCAqIDEwMjQpXFxuK1xcbitzdGF0aWMgdm9pZCBkdW1wX21lbWNnKGludCAoKnJkKShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpKVxcbit7XFxuK1xcdGNoYXIgYnVmWzUxMl07XFxuK1xcbitcXHQvKlxcbitcXHQgKiBtZW1vcnkuY3VycmVudCByZWFkcyAwIG9uY2UgdGhlIGNoaWxkIGhhcyBsZWZ0IHRoZSBjZ3JvdXAsIHNvIGl0IG9ubHlcXG4rXFx0ICogY2FycmllcyBpbmZvcm1hdGlvbiB3aGVuIGR1bXBlZCBmcm9tIHRoZSBsaXZlIGNoaWxkOyBtZW1vcnkucGVhayBhbmRcXG4rXFx0ICogbWVtb3J5LmV2ZW50cyBzdXJ2aXZlIHRoZSBjaGlsZCBhbmQgdGVsbCB0aGUgc3RvcnkgZWl0aGVyIHdheS5cXG4rXFx0ICovXFxuK1xcdGlmICghcmQoQ0dfUEFUSCwgXFxcIm1lbW9yeS5jdXJyZW50XFxcIiwgYnVmLCBzaXplb2YoYnVmKSkpXFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwibWVtb3J5LmN1cnJlbnQ6ICVzXFxcIiwgYnVmKTtcXG4rXFx0aWYgKCFyZChDR19QQVRILCBcXFwibWVtb3J5Lm1heFxcXCIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIm1lbW9yeS5tYXg6ICVzXFxcIiwgYnVmKTtcXG4rXFx0aWYgKCFyZChDR19QQVRILCBcXFwibWVtb3J5LnBlYWtcXFwiLCBidWYsIHNpemVvZihidWYpKSlcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJtZW1vcnkucGVhazogJXNcXFwiLCBidWYpO1xcbitcXHRpZiAoIXJkKENHX1BBVEgsIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgYnVmLCBzaXplb2YoYnVmKSkpXFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwibWVtb3J5LmV2ZW50czpcXFxcbiVzXFxcIiwgYnVmKTtcXG4rXFx0ZmZsdXNoKHN0ZGVycik7XFxuK31cXG4rXFxuKy8qIFJlYWQgb25lIGtleSBmcm9tIGEgZmxhdCBrZXllZCBjZ3JvdXAgZmlsZSwgZS5nLiBcXFwib29tX2tpbGxcXFwiIGluIG1lbW9yeS5ldmVudHMuICovXFxuK3N0YXRpYyBsb25nIGNnX3JlYWRfa2V5KGNvbnN0IGNoYXIgKmNnLCBjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICprZXkpXFxuK3tcXG4rXFx0Y2hhciBidWZbNTEyXSwgKnA7XFxuK1xcbitcXHRpZiAocmVhZF9jZ3JvdXBfZmlsZShjZywgZmlsZSwgYnVmLCBzaXplb2YoYnVmKSkpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0cCA9IHN0cnN0cihidWYsIGtleSk7XFxuK1xcdGlmICghcClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRyZXR1cm4gc3RydG9sKHAgKyBzdHJsZW4oa2V5KSwgTlVMTCwgMTApO1xcbit9XFxuK1xcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX21lbWNnKHZvaWQpXFxuK3tcXG4rXFx0aW50IGNncm91cF9mZCA9IC0xLCBzdGF0dXMsIGVycjtcXG4rXFx0Y29uc3QgbG9uZyBwcyA9IFBBR0VfU0laRTtcXG4rXFx0Y2hhciBidWZbNjRdO1xcbitcXHRwaWRfdCBwaWQ7XFxuK1xcbitcXHRlcnIgPSBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic2V0dXBfY2dyb3VwX2Vudmlyb25tZW50XFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGNncm91cF9mZCA9IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChDR19QQVRIKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfRkQoY2dyb3VwX2ZkLCBcXFwiY3JlYXRlX2FuZF9nZXRfY2dyb3VwXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LyogTm8gbWVtb3J5IGNvbnRyb2xsZXIgLVxcdTAwM2Ugbm90aGluZyB0byB0ZXN0LiAqL1xcbitcXHRpZiAocmVhZF9jZ3JvdXBfZmlsZShDR19QQVRILCBcXFwibWVtb3J5LmN1cnJlbnRcXFwiLCBidWYsIHNpemVvZihidWYpKSkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIiVzOlNLSVA6bm8gbWVtb3J5IGNvbnRyb2xsZXJcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0cGlkID0gZm9yaygpO1xcbitcXHRpZiAoIUFTU0VSVF9HRShwaWQsIDAsIFxcXCJmb3JrXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAocGlkID09IDApIHtcXG4rXFx0XFx0c3RydWN0IGFyZW5hX21lbWNnICpjc2tlbDtcXG4rXFx0XFx0X191MzIgaSwgbnBhZ2VzO1xcbitcXHRcXHRjaGFyICpiYXNlO1xcbitcXHRcXHRzaXplX3Qgc3o7XFxuK1xcdFxcdGxvbmcgY3VyO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRG8gZXZlcnl0aGluZyBmcm9tIHRoZSBjaGlsZDogdGhlIGFyZW5hIHZtYSBpcyBWTV9ET05UQ09QWSBzb1xcbitcXHRcXHQgKiBpdCB3b3VsZCBub3Qgc3Vydml2ZSBmb3JrKCksIG9ubHkgdGhlIGNoaWxkIHNob3VsZCBiZSB1bmRlciB0aGVcXG4rXFx0XFx0ICogbGltaXQgc28gdGhhdCBhIG1lbWNnIE9PTSBjYW5ub3QgcGljayB0ZXN0X3Byb2dzLCBhbmQgYSBtYXAgaXNcXG4rXFx0XFx0ICogY2hhcmdlZCB0byB0aGUgbWVtY2cgb2YgdGhlIHRhc2sgdGhhdCBjcmVhdGVzIGl0IC0gc28gam9pblxcbitcXHRcXHQgKiBiZWZvcmUgbG9hZC4gVGhlIGNncm91cCB3b3JrIGRpciBiZWxvbmdzIHRvIHRoZSBwYXJlbnQgdGhhdCBzZXRcXG4rXFx0XFx0ICogdGhlIGVudmlyb25tZW50IHVwLCBzbyByZWFjaCBpdCB3aXRoIHRoZSBfcGFyZW50KCkgaGVscGVycy5cXG4rXFx0XFx0ICogRXJyb3JzIGFyZSByZXBvcnRlZCB0byB0aGUgcGFyZW50IHRocm91Z2ggdGhlIGV4aXQgY29kZSwgc2luY2VcXG4rXFx0XFx0ICogQVNTRVJUXyogaW4gYSBmb3JrZWQgY2hpbGQgZG9lcyBub3QgcmVhY2ggaXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiJWRcXFwiLCBnZXRwaWQoKSk7XFxuK1xcdFxcdGlmICh3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoQ0dfUEFUSCwgXFxcImNncm91cC5wcm9jc1xcXCIsIGJ1ZikpXFxuK1xcdFxcdFxcdF9leGl0KDIpO1xcbitcXG4rXFx0XFx0Y3NrZWwgPSBhcmVuYV9tZW1jZ19fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRcXHRpZiAoIWNza2VsKVxcbitcXHRcXHRcXHRfZXhpdCgzKTtcXG4rXFxuK1xcdFxcdGJhc2UgPSBicGZfbWFwX19pbml0aWFsX3ZhbHVlKGNza2VsLVxcdTAwM2VtYXBzLmFyZW5hLCBcXHUwMDI2c3opO1xcbitcXHRcXHRpZiAoIWJhc2UpXFxuK1xcdFxcdFxcdF9leGl0KDQpO1xcbitcXHRcXHRucGFnZXMgPSBicGZfbWFwX19tYXhfZW50cmllcyhjc2tlbC1cXHUwMDNlbWFwcy5hcmVuYSk7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBDYXAgb25seSBub3csIGFmdGVyIGxvYWQ6IGV2ZXJ5dGhpbmcgYnV0IHRoZSBmYXVsdC1pbiBpc1xcbitcXHRcXHQgKiBjaGFyZ2VkLCBzbyB0aGUgYXJlbmEgZ2V0cyBhIGZpeGVkIGJ1ZGdldCByZWdhcmRsZXNzIG9mIHdoYXRcXG4rXFx0XFx0ICogdGhlIGxvYWQgaXRzZWxmIGNvc3QsIGFuZCB0aGUgbG9hZCBjYW4gbmV2ZXIgaGl0IHRoZSBsaW1pdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChyZWFkX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCBcXFwibWVtb3J5LmN1cnJlbnRcXFwiLCBidWYsIHNpemVvZihidWYpKSlcXG4rXFx0XFx0XFx0X2V4aXQoNSk7XFxuK1xcdFxcdGN1ciA9IHN0cnRvbChidWYsIE5VTEwsIDEwKTtcXG4rXFx0XFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXFxcIiVsZFxcXCIsIGN1ciArIEFSRU5BX0JVREdFVCk7XFxuK1xcdFxcdGlmICh3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoQ0dfUEFUSCwgXFxcIm1lbW9yeS5tYXhcXFwiLCBidWYpKVxcbitcXHRcXHRcXHRfZXhpdCg2KTtcXG4rXFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucGFnZXM7IGkrKylcXG4rXFx0XFx0XFx0YmFzZVsoc2l6ZV90KWkgKiBwc10gPSAxO1xcbitcXHRcXHQvKiBGYXVsdGVkIGV2ZXJ5dGhpbmcgd2l0aG91dCBkeWluZzogZHVtcCB3aHkgKG9ubHkgdW5kZXIgLXYpLiAqL1xcbitcXHRcXHRkdW1wX21lbWNnKHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KTtcXG4rXFx0XFx0X2V4aXQoMCk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghQVNTRVJUX0VRKHdhaXRwaWQocGlkLCBcXHUwMDI2c3RhdHVzLCAwKSwgcGlkLCBcXFwid2FpdHBpZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIEEgbm9uLXplcm8gZXhpdCBtZWFucyB0aGUgY2hpbGQgZmFpbGVkIHRvIHNldCB1cDsgdGhlIGNvZGUgc2F5cyB3aGVyZS4gKi9cXG4rXFx0aWYgKFdJRkVYSVRFRChzdGF0dXMpIFxcdTAwMjZcXHUwMDI2IFdFWElUU1RBVFVTKHN0YXR1cykpIHtcXG4rXFx0XFx0QVNTRVJUX09LKFdFWElUU1RBVFVTKHN0YXR1cyksIFxcXCJjaGlsZCBzZXR1cFxcXCIpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogRmF1bHRpbmcgYSB2YWxpZCBhcmVuYSBhZGRyZXNzIHVudGlsIG1lbW9yeS5tYXggaXMgaGl0IG11c3Qgbm90IGxvb2tcXG4rXFx0ICogbGlrZSBhbiBpbnZhbGlkIGFjY2Vzcy4gV2l0aG91dCB0aGUgZml4IHRoZSBmYXVsdCBwYXRoIGFsbG9jYXRlZCB3aXRoXFxuK1xcdCAqIHRoZSBub24tYmxvY2tpbmcgYWxsb2NhdG9yLCB0dXJuZWQgaXRzIC1FTk9NRU0gaW50byBWTV9GQVVMVF9TSUdTRUdWLFxcbitcXHQgKiBhbmQgdGhlIGNoaWxkIGRpZWQgd2l0aCBTSUdTRUdWIG9uIGEgdmFsaWQgYWRkcmVzczsgbm93IGl0IGlzIGhhbmRsZWRcXG4rXFx0ICogYnkgdGhlIG1lbWNnIE9PTSBwYXRoIGluc3RlYWQuIEEgU0lHS0lMTCBhbG9uZSB3b3VsZCBub3QgcHJvdmUgdGhlXFxuK1xcdCAqIG1lbWNnIE9PTSBraWxsZXIgZGlkIGl0IChhIGdsb2JhbCBPT00gb3IgYW4gdW5yZWxhdGVkIGNyYXNoIGNvdWxkIGFsc29cXG4rXFx0ICoga2lsbCB0aGUgY2hpbGQpLCBzbyBjaGVjayBtZW1vcnkuZXZlbnRzLm9vbV9raWxsLCB3aGljaCByZWNvcmRzIHRoZVxcbitcXHQgKiBtZW1jZyBPT00gYW5kIHN1cnZpdmVzIHRoZSBjaGlsZC5cXG4rXFx0ICovXFxuK1xcdGlmICghQVNTRVJUX1RSVUUoV0lGU0lHTkFMRUQoc3RhdHVzKSwgXFxcImNoaWxkIGtpbGxlZCBieSBzaWduYWxcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmICghQVNTRVJUX0dFKGNnX3JlYWRfa2V5KENHX1BBVEgsIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcIm9vbV9raWxsXFxcIiksIDEsXFxuK1xcdFxcdCAgICAgICBcXFwibWVtY2cgb29tX2tpbGxcXFwiKSlcXG4rXFx0XFx0ZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlKTtcXG4rb3V0OlxcbitcXHRpZiAoY2dyb3VwX2ZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGNncm91cF9mZCk7XFxuK1xcdGNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uODgyNTljZmVhMDZiNlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuY1xcbkBAIC0wLDAgKzEsMjQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N2bWxpbnV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl9hcmVuYV9jb21tb24uaFxcXCJcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpO1xcbitcXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgNTAwMDApOyAvKiBudW1iZXIgb2YgcGFnZXMgKi9cXG4rI2lmZGVmIF9fVEFSR0VUX0FSQ0hfYXJtNjRcXG4rXFx0X191bG9uZyhtYXBfZXh0cmEsIDB4MXVsbCBcXHUwMDNjXFx1MDAzYyAzMik7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi9cXG4rI2Vsc2VcXG4rXFx0X191bG9uZyhtYXBfZXh0cmEsIDB4MXVsbCBcXHUwMDNjXFx1MDAzYyA0NCk7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi9cXG4rI2VuZGlmXFxuK30gYXJlbmEgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4raW50IG5vb3Aodm9pZCAqY3R4KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MjM6NTMuMjI3NTExNTE2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjAxMDUxNjA5MTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiQ0dST1VQU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZvciBCUEYgYXJlbmEgbWFwcyB0byB1c2UgYSBzbGVlcGFibGUgcGFnZSBhbGxvY2F0b3IsIGFsbG93aW5nIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biB3aGVuIG1lbW9yeSBsaW1pdHMgYXJlIGhpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYWZmZWN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgaW50ZXJhY3Rpb25zLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtbWFwaW5nIGFuZCBmYXVsdGluZyBCUEYgYXJlbmEgbWFwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzg0ZWI0OGRhOTZkN2M0ZTNmZjEzZjZkYzBhMWJmZTQwNWJmZTI5YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDEwOjIzOjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcbmluZGV4IGIzY2QyOGQ5ZTNiNTUuLmM4MTdjOTlkMjkwNjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtMjc4NCw2ICsyNzg0LDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpO1xuIFxuIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbitzdHJ1Y3QgcGFnZSAqYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcbiAjaWZkZWYgQ09ORklHX01FTUNHXG4gdm9pZCBicGZfbWFwX21lbWNnX2VudGVyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBtZW1fY2dyb3VwICoqb2xkX21lbWNnLFxuIFx0XHRcdCBzdHJ1Y3QgbWVtX2Nncm91cCAqKm5ld19tZW1jZyk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9hcmVuYS5jIGIva2VybmVsL2JwZi9hcmVuYS5jXG5pbmRleCA3YjY4NDcyMDBiNDMxLi5mYTQ2MmEwZmYxYWQ2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9hcmVuYS5jXG4rKysgYi9rZXJuZWwvYnBmL2FyZW5hLmNcbkBAIC00ODEsNyArNDgxLDggQEAgc3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gdm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICpuZXdfbWVtY2csICpvbGRfbWVtY2c7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbitcdHN0cnVjdCBwYWdlICpwYWdlLCAqbmV3X3BhZ2UgPSBOVUxMO1xuK1x0dm1fZmF1bHRfdCBmYXVsdF9yZXQ7XG4gXHRsb25nIGtiYXNlLCBrYWRkcjtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgcmV0O1xuQEAgLTQ4OSw1OSArNDkwLDEwNiBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdGtiYXNlID0gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGFyZW5hKTtcbiBcdGthZGRyID0ga2Jhc2UgKyAodTMyKSh2bWYtXHUwMDNlYWRkcmVzcyk7XG4gXG4tXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxuK1x0cGFnZSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWthZGRyKTtcbitcdGlmICghcGFnZSBcdTAwMjZcdTAwMjYgIShhcmVuYS1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9TRUdWX09OX0ZBVUxUKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBQcmVhbGxvY2F0ZSBvdXRzaWRlIHRoZSBsb2NrIHdpdGggYSBzbGVlcGFibGUgYWxsb2NhdG9yIHNvIGl0XG4rXHRcdCAqIGNhbiByZWNsYWltIGFuZCBydW4gdGhlIG1lbWNnIE9PTSBraWxsZXIsIHdoaWNoIHRoZVxuK1x0XHQgKiBub24tYmxvY2tpbmcgYWxsb2NhdG9yIHVuZGVyIGFyZW5hLVx1MDAzZXNwaW5sb2NrIGNhbm5vdC4gQSBOVUxMXG4rXHRcdCAqIHJldHVybiBpcyBub24tcmVjb3ZlcmFibGUsIHNvIGZhaWwgd2l0aCBWTV9GQVVMVF9TSUdCVVM7XG4rXHRcdCAqIFZNX0ZBVUxUX09PTSB3b3VsZCBiZSByZXRyaWVkIGJ5IHRoZSBmYXVsdCBwYXRoIGFuZCBjYW5cbitcdFx0ICogbGl2ZWxvY2sgd2hlbiB0aGUgY2hhcmdlZCBtZW1jZyBpcyBub3QgdGhlIGZhdWx0aW5nIHRhc2sncy5cbitcdFx0ICovXG4rXHRcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG4rXHRcdG5ld19wYWdlID0gYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZShtYXApO1xuK1x0XHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xuK1x0XHRpZiAoIW5ld19wYWdlKVxuK1x0XHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4rXHR9XG4rXG4rXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIEEgZmFpbGVkIGxvY2sgbWVhbnMgYSBwb3NzaWJsZSBkZWFkbG9jayB3YXMgZGV0ZWN0ZWQuIERvbid0XG4gXHRcdCAqIHJldHVybiBWTV9GQVVMVF9SRVRSWTogdGhpcyBoYW5kbGVyIG5ldmVyIHRvb2sgbW1hcF9sb2NrLCBidXRcbiBcdFx0ICogdGhlIGZhdWx0IHBhdGggd291bGQgcmUtdGFrZSBpdCBvbiByZXRyeSBhbmQgZGVhZGxvY2suIEZhaWwuXG4gXHRcdCAqL1xuK1x0XHRpZiAobmV3X3BhZ2UpXG4rXHRcdFx0ZnJlZV9wYWdlc19ub2xvY2sobmV3X3BhZ2UsIDApO1xuIFx0XHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xuK1x0fVxuIFxuIFx0cGFnZSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWthZGRyKTtcbiBcdGlmIChwYWdlKSB7XG4tXHRcdGlmIChwYWdlID09IGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSlcbi1cdFx0XHQvKiBCUEYgdHJpZ2dlcmVkIHNjcmF0Y2ggaGVyZTsgZG9uJ3QgbGF6eS1hbGxvYyBvdmVyIGl0ICovXG4tXHRcdFx0Z290byBvdXRfc2lnc2VndjtcbitcdFx0aWYgKHBhZ2UgPT0gYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBIHNjcmF0Y2ggcGFnZSBtYXJrcyBhIGhvbGUuIFNlZ2ZhdWx0IG9ubHkgaWYgdGhlIHVzZXJcbitcdFx0XHQgKiBhc2tlZCBmb3IgaXQ7IG90aGVyd2lzZSB3ZSBjb3VsZCBsYXp5LWFsbG9jYXRlIGJ1dFxuK1x0XHRcdCAqIGNob29zZSBub3QgdG8gb3ZlciBhIGhvbGUsIHNvIHJlcG9ydCBhIGJ1cyBlcnJvci5cbitcdFx0XHQgKi9cbitcdFx0XHRmYXVsdF9yZXQgPSAoYXJlbmEtXHUwMDNlbWFwLm1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVCkgP1xuK1x0XHRcdFx0ICAgIFZNX0ZBVUxUX1NJR1NFR1YgOiBWTV9GQVVMVF9TSUdCVVM7XG4rXHRcdFx0Z290byBvdXRfZXJyX2xvY2tlZDtcbitcdFx0fVxuIFx0XHQvKiBhbHJlYWR5IGhhdmUgYSBwYWdlIHZtYXAtZWQgKi9cbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4rXHRpZiAoYXJlbmEtXHUwMDNlbWFwLm1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVCkge1xuK1x0XHQvKiBVc2VyIHNwYWNlIHJlcXVlc3RlZCB0byBzZWdmYXVsdCB3aGVuIHBhZ2UgaXMgbm90IGFsbG9jYXRlZCBieSBicGYgcHJvZyAqL1xuK1x0XHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdTRUdWO1xuK1x0XHRnb3RvIG91dF9lcnJfbG9ja2VkO1xuK1x0fVxuK1xuIFx0YnBmX21hcF9tZW1jZ19lbnRlcihcdTAwMjZhcmVuYS1cdTAwM2VtYXAsIFx1MDAyNm9sZF9tZW1jZywgXHUwMDI2bmV3X21lbWNnKTtcbiBcbi1cdGlmIChhcmVuYS1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9TRUdWX09OX0ZBVUxUKVxuLVx0XHQvKiBVc2VyIHNwYWNlIHJlcXVlc3RlZCB0byBzZWdmYXVsdCB3aGVuIHBhZ2UgaXMgbm90IGFsbG9jYXRlZCBieSBicGYgcHJvZyAqL1xuLVx0XHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xuK1x0aWYgKCFuZXdfcGFnZSkge1xuK1x0XHQvKlxuK1x0XHQgKiBWZXJ5IHJhcmUgcmFjZTogdGhlIGJwZiBwcm9ncmFtIGhhZCBhbGxvY2F0ZWQgYSBwYWdlIGhlcmUsIHNvXG4rXHRcdCAqIHRoZSBsb2NrbGVzcyBwcm9iZSBzYXcgaXQgYW5kIHdlIHNraXBwZWQgcHJlYWxsb2NhdGlvbiwgYnV0IGl0XG4rXHRcdCAqIGZyZWVkIHRoZSBwYWdlIGJlZm9yZSB3ZSB0b29rIHRoZSBsb2NrLiBOb3cgd2UgZG8gbmVlZCBvbmU7XG4rXHRcdCAqIHNsZWVwaW5nIGlzIG5vdCBhbGxvd2VkIGhlcmUsIHNvIGZhbGwgYmFjayB0byB0aGUgbm9uLWJsb2NraW5nXG4rXHRcdCAqIGFsbG9jYXRvciBhbmQgZ2l2ZSB1cCBpZiBpdCBmYWlscy5cbitcdFx0ICovXG4rXHRcdHJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBtYXAtXHUwMDNlbnVtYV9ub2RlLCAxLCBcdTAwMjZuZXdfcGFnZSk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4rXHRcdFx0Z290byBvdXRfZXJyX2xvY2tlZF9tZW1jZztcbitcdFx0fVxuK1x0fVxuIFxuIFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4tXG4tXHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gXHUwMDI2cGFnZSwgLmkgPSAwIH07XG4tXHQvKiBBY2NvdW50IGludG8gbWVtY2cgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGJwZl9hcmVuYSAqL1xuLVx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIE5VTUFfTk9fTk9ERSwgMSwgXHUwMDI2cGFnZSk7XG4gXHRpZiAocmV0KSB7XG4tXHRcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCB2bWYtXHUwMDNlcGdvZmYsIDEpO1xuLVx0XHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xuK1x0XHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4rXHRcdGdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7XG4gXHR9XG4rXHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gXHUwMDI2bmV3X3BhZ2UsIC5pID0gMCB9O1xuIFxuIFx0cmV0ID0gYXBwbHlfdG9fcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBrYWRkciwgUEFHRV9TSVpFLCBhcHBseV9yYW5nZV9zZXRfY2IsIFx1MDAyNmRhdGEpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbi1cdFx0ZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7XG4tXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4rXHRcdGZhdWx0X3JldCA9IFZNX0ZBVUxUX1NJR0JVUztcbitcdFx0Z290byBvdXRfZXJyX2xvY2tlZF9tZW1jZztcbiBcdH1cbiBcdGZsdXNoX3ZtYXBfY2FjaGUoa2FkZHIsIFBBR0VfU0laRSk7XG4gXHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xuK1x0LyogbmV3X3BhZ2Ugd2FzIGNvbnN1bWVkICovXG4rXHRwYWdlID0gbmV3X3BhZ2U7XG4rXHRuZXdfcGFnZSA9IE5VTEw7XG4gb3V0OlxuIFx0cGFnZV9yZWZfYWRkKHBhZ2UsIDEpO1xuIFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG4rXHRpZiAobmV3X3BhZ2UpXG4rXHRcdGZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTtcbiBcdHZtZi1cdTAwM2VwYWdlID0gcGFnZTtcbiBcdHJldHVybiAwO1xuLW91dF9zaWdzZWd2X21lbWNnOlxuK1xuK291dF9lcnJfbG9ja2VkX21lbWNnOlxuIFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbi1vdXRfc2lnc2VndjpcbitvdXRfZXJyX2xvY2tlZDpcbiBcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xuLVx0cmV0dXJuIFZNX0ZBVUxUX1NJR1NFR1Y7XG4rXHRpZiAobmV3X3BhZ2UpXG4rXHRcdGZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTtcbitcdHJldHVybiBmYXVsdF9yZXQ7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYXJlbmFfdm1fb3BzID0ge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbmluZGV4IDY4NzRiYTE0MjRhZjAuLmY5YjgxNjM4ZTUzN2EgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC02MDIsMTUgKzYwMiwxNCBAQCBzdGF0aWMgYm9vbCBjYW5fYWxsb2NfcGFnZXModm9pZClcbiBcdFx0IUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpO1xuIH1cbiBcbisjZGVmaW5lIEJQRl9QQUdFX0dGUCAoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKVxuK1xuIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19icGZfYWxsb2NfcGFnZShpbnQgbmlkKVxuIHtcbiBcdGlmICghY2FuX2FsbG9jX3BhZ2VzKCkpXG4gXHRcdHJldHVybiBhbGxvY19wYWdlc19ub2xvY2soX19HRlBfQUNDT1VOVCwgbmlkLCAwKTtcbiBcbi1cdHJldHVybiBhbGxvY19wYWdlc19ub2RlKG5pZCxcbi1cdFx0XHRcdEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfQUNDT1VOVFxuLVx0XHRcdFx0fCBfX0dGUF9OT1dBUk4sXG4tXHRcdFx0XHQwKTtcbitcdHJldHVybiBhbGxvY19wYWdlc19ub2RlKG5pZCwgQlBGX1BBR0VfR0ZQLCAwKTtcbiB9XG4gXG4gaW50IGJwZl9tYXBfYWxsb2NfcGFnZXMoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG5pZCxcbkBAIC02MzYsNiArNjM1LDIwIEBAIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKlxuKyAqIEZvciBjYWxsZXJzIHRoYXQga25vdyB0aGV5IHJ1biBpbiBhIHNsZWVwYWJsZSBjb250ZXh0LCBlLmcuIGEgdXNlciBwYWdlXG4rICogZmF1bHQgaGFuZGxlci4gY2FuX2FsbG9jX3BhZ2VzKCkgaXMgYSBjb25zZXJ2YXRpdmUgZ3Vlc3MgbWFkZSBmb3IgQlBGXG4rICogcHJvZ3JhbSBjb250ZXh0IC0gbm90YWJseSBpdCBpcyBhbHdheXMgZmFsc2Ugb24gUFJFRU1QVF9SVCAtIHNvIGdvaW5nXG4rICogdGhyb3VnaCBicGZfbWFwX2FsbG9jX3BhZ2VzKCkgdGhlcmUgd291bGQgbmVlZGxlc3NseSBwaWNrIHRoZVxuKyAqIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IsIHdoaWNoIG5ldmVyIHJlY2xhaW1zIGFuZCBuZXZlciBlbmdhZ2VzIHRoZSBPT01cbisgKiBtYWNoaW5lcnkuXG4rICovXG4rc3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbit7XG4rXHRtaWdodF9zbGVlcCgpO1xuK1x0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobWFwLVx1MDAzZW51bWFfbm9kZSwgQlBGX1BBR0VfR0ZQLCAwKTtcbit9XG4rXG4gc3RhdGljIGludCBidGZfZmllbGRfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl9maWVsZCAqZjEgPSBhLCAqZjIgPSBiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmNcbmluZGV4IDQ1Y2QwYjQ3OWZlMzUuLjQxODNmZjYxNTBjMjggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmNcbkBAIC0xODgsNiArMTg4LDczIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbiBcdHJldHVybiBfX3dyaXRlX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYpO1xuIH1cbiBcbitzdGF0aWMgaW50IF9fcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpjZ3JvdXBfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbitcdFx0XHQgICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4re1xuK1x0Y2hhciBmaWxlX3BhdGhbUEFUSF9NQVggKyAxXTtcbitcdHNzaXplX3QgZ290O1xuK1x0aW50IGZkO1xuK1xuK1x0c25wcmludGYoZmlsZV9wYXRoLCBzaXplb2YoZmlsZV9wYXRoKSwgXCIlcy8lc1wiLCBjZ3JvdXBfcGF0aCwgZmlsZSk7XG4rXHRmZCA9IG9wZW4oZmlsZV9wYXRoLCBPX1JET05MWSk7XG4rXHRpZiAoZmQgXHUwMDNjIDApIHtcbitcdFx0bG9nX2VycihcIk9wZW5pbmcgJXNcIiwgZmlsZV9wYXRoKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4rXHRnb3QgPSByZWFkKGZkLCBidWYsIGxlbiAtIDEpO1xuK1x0aWYgKGdvdCBcdTAwM2MgMCkge1xuK1x0XHRsb2dfZXJyKFwiUmVhZGluZyAlc1wiLCBmaWxlX3BhdGgpO1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1x0YnVmW2dvdF0gPSAnXFwwJztcbitcdGNsb3NlKGZkKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiByZWFkX2Nncm91cF9maWxlKCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZVxuKyAqIEByZWxhdGl2ZV9wYXRoOiBUaGUgY2dyb3VwIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSB3b3JrZGlyXG4rICogQGZpbGU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIGNncm91cGZzIHRvIHJlYWQgZnJvbVxuKyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3NcbisgKiBAbGVuOiBTaXplIG9mIEBidWZcbisgKlxuKyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCdzIGRpcmVjdG9yeS5cbisgKlxuKyAqIElmIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQuXG4rICovXG4raW50IHJlYWRfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbitcdFx0ICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4re1xuK1x0Y2hhciBjZ3JvdXBfcGF0aFtQQVRIX01BWCAtIDI0XTtcbitcbitcdGZvcm1hdF9jZ3JvdXBfcGF0aChjZ3JvdXBfcGF0aCwgcmVsYXRpdmVfcGF0aCk7XG4rXHRyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7XG4rfVxuK1xuKy8qKlxuKyAqIHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZSBpbiB0aGUgcGFyZW50IHByb2Nlc3NcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2RpclxuKyAqIEByZWxhdGl2ZV9wYXRoOiBUaGUgY2dyb3VwIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgcHJvY2VzcyB3b3JrZGlyXG4rICogQGZpbGU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIGNncm91cGZzIHRvIHJlYWQgZnJvbVxuKyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3NcbisgKiBAbGVuOiBTaXplIG9mIEBidWZcbisgKlxuKyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCdzIGRpcmVjdG9yeSB1bmRlciB0aGUgcGFyZW50IHByb2Nlc3NcbisgKiB3b3JrZGlyLlxuKyAqXG4rICogSWYgc3VjY2Vzc2Z1bCwgMCBpcyByZXR1cm5lZC5cbisgKi9cbitpbnQgcmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbitcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuK3tcbitcdGNoYXIgY2dyb3VwX3BhdGhbUEFUSF9NQVggLSAyNF07XG4rXG4rXHRmb3JtYXRfcGFyZW50X2Nncm91cF9wYXRoKGNncm91cF9wYXRoLCByZWxhdGl2ZV9wYXRoKTtcbitcdHJldHVybiBfX3JlYWRfY2dyb3VwX2ZpbGUoY2dyb3VwX3BhdGgsIGZpbGUsIGJ1ZiwgbGVuKTtcbit9XG4rXG4gLyoqXG4gICogc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCkgLSBTZXR1cCB0aGUgY2dyb3VwIGVudmlyb25tZW50XG4gICpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oXG5pbmRleCAzODU3MzA0YmU4NzQxLi5kNDJkMmUxMzA0NGU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oXG5AQCAtMTUsNiArMTUsMTAgQEAgaW50IHdyaXRlX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4gXHRcdCAgICAgIGNvbnN0IGNoYXIgKmJ1Zik7XG4gaW50IHdyaXRlX2Nncm91cF9maWxlX3BhcmVudChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuIFx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmKTtcbitpbnQgcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuK1x0XHQgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4raW50IHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4rXHRcdFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4gaW50IGNncm91cF9zZXR1cF9hbmRfam9pbihjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKTtcbiBpbnQgZ2V0X3Jvb3RfY2dyb3VwKHZvaWQpO1xuIGludCBjcmVhdGVfYW5kX2dldF9jZ3JvdXAoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtY2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbWNnLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jNTdiOTg0OTRjZmFiXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jXG5AQCAtMCwwICsxLDE1OCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy91c2VyLmhcdTAwM2VcbisjaWZuZGVmIFBBR0VfU0laRSAvKiBvbiBzb21lIGFyY2hzIGl0IGNvbWVzIGluIHN5cy91c2VyLmggKi9cbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNkZWZpbmUgUEFHRV9TSVpFIGdldHBhZ2VzaXplKClcbisjZW5kaWZcbitcbisjaW5jbHVkZSBcImNncm91cF9oZWxwZXJzLmhcIlxuKyNpbmNsdWRlIFwiYXJlbmFfbWVtY2cuc2tlbC5oXCJcbitcbisjZGVmaW5lIENHX1BBVEhcdFx0XCIvYXJlbmFfbWVtY2dcIlxuK1xuKy8qIEJ1ZGdldCB0aGUgYXJlbmEgZ2V0cyBvbiB0b3Agb2Ygd2hhdGV2ZXIgaXMgYWxyZWFkeSBjaGFyZ2VkIGFmdGVyIGxvYWQuICovXG4rI2RlZmluZSBBUkVOQV9CVURHRVRcdCg2NCAqIDEwMjQgKiAxMDI0KVxuK1xuK3N0YXRpYyB2b2lkIGR1bXBfbWVtY2coaW50ICgqcmQpKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjaGFyICosIHNpemVfdCkpXG4re1xuK1x0Y2hhciBidWZbNTEyXTtcbitcbitcdC8qXG4rXHQgKiBtZW1vcnkuY3VycmVudCByZWFkcyAwIG9uY2UgdGhlIGNoaWxkIGhhcyBsZWZ0IHRoZSBjZ3JvdXAsIHNvIGl0IG9ubHlcbitcdCAqIGNhcnJpZXMgaW5mb3JtYXRpb24gd2hlbiBkdW1wZWQgZnJvbSB0aGUgbGl2ZSBjaGlsZDsgbWVtb3J5LnBlYWsgYW5kXG4rXHQgKiBtZW1vcnkuZXZlbnRzIHN1cnZpdmUgdGhlIGNoaWxkIGFuZCB0ZWxsIHRoZSBzdG9yeSBlaXRoZXIgd2F5LlxuK1x0ICovXG4rXHRpZiAoIXJkKENHX1BBVEgsIFwibWVtb3J5LmN1cnJlbnRcIiwgYnVmLCBzaXplb2YoYnVmKSkpXG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIm1lbW9yeS5jdXJyZW50OiAlc1wiLCBidWYpO1xuK1x0aWYgKCFyZChDR19QQVRILCBcIm1lbW9yeS5tYXhcIiwgYnVmLCBzaXplb2YoYnVmKSkpXG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIm1lbW9yeS5tYXg6ICVzXCIsIGJ1Zik7XG4rXHRpZiAoIXJkKENHX1BBVEgsIFwibWVtb3J5LnBlYWtcIiwgYnVmLCBzaXplb2YoYnVmKSkpXG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIm1lbW9yeS5wZWFrOiAlc1wiLCBidWYpO1xuK1x0aWYgKCFyZChDR19QQVRILCBcIm1lbW9yeS5ldmVudHNcIiwgYnVmLCBzaXplb2YoYnVmKSkpXG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIm1lbW9yeS5ldmVudHM6XFxuJXNcIiwgYnVmKTtcbitcdGZmbHVzaChzdGRlcnIpO1xuK31cbitcbisvKiBSZWFkIG9uZSBrZXkgZnJvbSBhIGZsYXQga2V5ZWQgY2dyb3VwIGZpbGUsIGUuZy4gXCJvb21fa2lsbFwiIGluIG1lbW9yeS5ldmVudHMuICovXG4rc3RhdGljIGxvbmcgY2dfcmVhZF9rZXkoY29uc3QgY2hhciAqY2csIGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKmtleSlcbit7XG4rXHRjaGFyIGJ1Zls1MTJdLCAqcDtcbitcbitcdGlmIChyZWFkX2Nncm91cF9maWxlKGNnLCBmaWxlLCBidWYsIHNpemVvZihidWYpKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0cCA9IHN0cnN0cihidWYsIGtleSk7XG4rXHRpZiAoIXApXG4rXHRcdHJldHVybiAtMTtcbitcdHJldHVybiBzdHJ0b2wocCArIHN0cmxlbihrZXkpLCBOVUxMLCAxMCk7XG4rfVxuK1xuK3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtY2codm9pZClcbit7XG4rXHRpbnQgY2dyb3VwX2ZkID0gLTEsIHN0YXR1cywgZXJyO1xuK1x0Y29uc3QgbG9uZyBwcyA9IFBBR0VfU0laRTtcbitcdGNoYXIgYnVmWzY0XTtcbitcdHBpZF90IHBpZDtcbitcbitcdGVyciA9IHNldHVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNldHVwX2Nncm91cF9lbnZpcm9ubWVudFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y2dyb3VwX2ZkID0gY3JlYXRlX2FuZF9nZXRfY2dyb3VwKENHX1BBVEgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfRkQoY2dyb3VwX2ZkLCBcImNyZWF0ZV9hbmRfZ2V0X2Nncm91cFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBObyBtZW1vcnkgY29udHJvbGxlciAtXHUwMDNlIG5vdGhpbmcgdG8gdGVzdC4gKi9cbitcdGlmIChyZWFkX2Nncm91cF9maWxlKENHX1BBVEgsIFwibWVtb3J5LmN1cnJlbnRcIiwgYnVmLCBzaXplb2YoYnVmKSkpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiJXM6U0tJUDpubyBtZW1vcnkgY29udHJvbGxlclxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRwaWQgPSBmb3JrKCk7XG4rXHRpZiAoIUFTU0VSVF9HRShwaWQsIDAsIFwiZm9ya1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAocGlkID09IDApIHtcbitcdFx0c3RydWN0IGFyZW5hX21lbWNnICpjc2tlbDtcbitcdFx0X191MzIgaSwgbnBhZ2VzO1xuK1x0XHRjaGFyICpiYXNlO1xuK1x0XHRzaXplX3Qgc3o7XG4rXHRcdGxvbmcgY3VyO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBEbyBldmVyeXRoaW5nIGZyb20gdGhlIGNoaWxkOiB0aGUgYXJlbmEgdm1hIGlzIFZNX0RPTlRDT1BZIHNvXG4rXHRcdCAqIGl0IHdvdWxkIG5vdCBzdXJ2aXZlIGZvcmsoKSwgb25seSB0aGUgY2hpbGQgc2hvdWxkIGJlIHVuZGVyIHRoZVxuK1x0XHQgKiBsaW1pdCBzbyB0aGF0IGEgbWVtY2cgT09NIGNhbm5vdCBwaWNrIHRlc3RfcHJvZ3MsIGFuZCBhIG1hcCBpc1xuK1x0XHQgKiBjaGFyZ2VkIHRvIHRoZSBtZW1jZyBvZiB0aGUgdGFzayB0aGF0IGNyZWF0ZXMgaXQgLSBzbyBqb2luXG4rXHRcdCAqIGJlZm9yZSBsb2FkLiBUaGUgY2dyb3VwIHdvcmsgZGlyIGJlbG9uZ3MgdG8gdGhlIHBhcmVudCB0aGF0IHNldFxuK1x0XHQgKiB0aGUgZW52aXJvbm1lbnQgdXAsIHNvIHJlYWNoIGl0IHdpdGggdGhlIF9wYXJlbnQoKSBoZWxwZXJzLlxuK1x0XHQgKiBFcnJvcnMgYXJlIHJlcG9ydGVkIHRvIHRoZSBwYXJlbnQgdGhyb3VnaCB0aGUgZXhpdCBjb2RlLCBzaW5jZVxuK1x0XHQgKiBBU1NFUlRfKiBpbiBhIGZvcmtlZCBjaGlsZCBkb2VzIG5vdCByZWFjaCBpdC5cbitcdFx0ICovXG4rXHRcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwiJWRcIiwgZ2V0cGlkKCkpO1xuK1x0XHRpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsIFwiY2dyb3VwLnByb2NzXCIsIGJ1ZikpXG4rXHRcdFx0X2V4aXQoMik7XG4rXG4rXHRcdGNza2VsID0gYXJlbmFfbWVtY2dfX29wZW5fYW5kX2xvYWQoKTtcbitcdFx0aWYgKCFjc2tlbClcbitcdFx0XHRfZXhpdCgzKTtcbitcbitcdFx0YmFzZSA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUoY3NrZWwtXHUwMDNlbWFwcy5hcmVuYSwgXHUwMDI2c3opO1xuK1x0XHRpZiAoIWJhc2UpXG4rXHRcdFx0X2V4aXQoNCk7XG4rXHRcdG5wYWdlcyA9IGJwZl9tYXBfX21heF9lbnRyaWVzKGNza2VsLVx1MDAzZW1hcHMuYXJlbmEpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBDYXAgb25seSBub3csIGFmdGVyIGxvYWQ6IGV2ZXJ5dGhpbmcgYnV0IHRoZSBmYXVsdC1pbiBpc1xuK1x0XHQgKiBjaGFyZ2VkLCBzbyB0aGUgYXJlbmEgZ2V0cyBhIGZpeGVkIGJ1ZGdldCByZWdhcmRsZXNzIG9mIHdoYXRcbitcdFx0ICogdGhlIGxvYWQgaXRzZWxmIGNvc3QsIGFuZCB0aGUgbG9hZCBjYW4gbmV2ZXIgaGl0IHRoZSBsaW1pdC5cbitcdFx0ICovXG4rXHRcdGlmIChyZWFkX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCBcIm1lbW9yeS5jdXJyZW50XCIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuK1x0XHRcdF9leGl0KDUpO1xuK1x0XHRjdXIgPSBzdHJ0b2woYnVmLCBOVUxMLCAxMCk7XG4rXHRcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwiJWxkXCIsIGN1ciArIEFSRU5BX0JVREdFVCk7XG4rXHRcdGlmICh3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoQ0dfUEFUSCwgXCJtZW1vcnkubWF4XCIsIGJ1ZikpXG4rXHRcdFx0X2V4aXQoNik7XG4rXG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYWdlczsgaSsrKVxuK1x0XHRcdGJhc2VbKHNpemVfdClpICogcHNdID0gMTtcbitcdFx0LyogRmF1bHRlZCBldmVyeXRoaW5nIHdpdGhvdXQgZHlpbmc6IGR1bXAgd2h5IChvbmx5IHVuZGVyIC12KS4gKi9cbitcdFx0ZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlX3BhcmVudCk7XG4rXHRcdF9leGl0KDApO1xuK1x0fVxuK1xuK1x0aWYgKCFBU1NFUlRfRVEod2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCksIHBpZCwgXCJ3YWl0cGlkXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIEEgbm9uLXplcm8gZXhpdCBtZWFucyB0aGUgY2hpbGQgZmFpbGVkIHRvIHNldCB1cDsgdGhlIGNvZGUgc2F5cyB3aGVyZS4gKi9cbitcdGlmIChXSUZFWElURUQoc3RhdHVzKSBcdTAwMjZcdTAwMjYgV0VYSVRTVEFUVVMoc3RhdHVzKSkge1xuK1x0XHRBU1NFUlRfT0soV0VYSVRTVEFUVVMoc3RhdHVzKSwgXCJjaGlsZCBzZXR1cFwiKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogRmF1bHRpbmcgYSB2YWxpZCBhcmVuYSBhZGRyZXNzIHVudGlsIG1lbW9yeS5tYXggaXMgaGl0IG11c3Qgbm90IGxvb2tcbitcdCAqIGxpa2UgYW4gaW52YWxpZCBhY2Nlc3MuIFdpdGhvdXQgdGhlIGZpeCB0aGUgZmF1bHQgcGF0aCBhbGxvY2F0ZWQgd2l0aFxuK1x0ICogdGhlIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IsIHR1cm5lZCBpdHMgLUVOT01FTSBpbnRvIFZNX0ZBVUxUX1NJR1NFR1YsXG4rXHQgKiBhbmQgdGhlIGNoaWxkIGRpZWQgd2l0aCBTSUdTRUdWIG9uIGEgdmFsaWQgYWRkcmVzczsgbm93IGl0IGlzIGhhbmRsZWRcbitcdCAqIGJ5IHRoZSBtZW1jZyBPT00gcGF0aCBpbnN0ZWFkLiBBIFNJR0tJTEwgYWxvbmUgd291bGQgbm90IHByb3ZlIHRoZVxuK1x0ICogbWVtY2cgT09NIGtpbGxlciBkaWQgaXQgKGEgZ2xvYmFsIE9PTSBvciBhbiB1bnJlbGF0ZWQgY3Jhc2ggY291bGQgYWxzb1xuK1x0ICoga2lsbCB0aGUgY2hpbGQpLCBzbyBjaGVjayBtZW1vcnkuZXZlbnRzLm9vbV9raWxsLCB3aGljaCByZWNvcmRzIHRoZVxuK1x0ICogbWVtY2cgT09NIGFuZCBzdXJ2aXZlcyB0aGUgY2hpbGQuXG4rXHQgKi9cbitcdGlmICghQVNTRVJUX1RSVUUoV0lGU0lHTkFMRUQoc3RhdHVzKSwgXCJjaGlsZCBraWxsZWQgYnkgc2lnbmFsXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX0dFKGNnX3JlYWRfa2V5KENHX1BBVEgsIFwibWVtb3J5LmV2ZW50c1wiLCBcIm9vbV9raWxsXCIpLCAxLFxuK1x0XHQgICAgICAgXCJtZW1jZyBvb21fa2lsbFwiKSlcbitcdFx0ZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlKTtcbitvdXQ6XG4rXHRpZiAoY2dyb3VwX2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoY2dyb3VwX2ZkKTtcbitcdGNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1jZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi44ODI1OWNmZWEwNmI2XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuY1xuQEAgLTAsMCArMSwyNCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9hcmVuYV9jb21tb24uaFwiXG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpO1xuK1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCA1MDAwMCk7IC8qIG51bWJlciBvZiBwYWdlcyAqL1xuKyNpZmRlZiBfX1RBUkdFVF9BUkNIX2FybTY0XG4rXHRfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsIFx1MDAzY1x1MDAzYyAzMik7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi9cbisjZWxzZVxuK1x0X191bG9uZyhtYXBfZXh0cmEsIDB4MXVsbCBcdTAwM2NcdTAwM2MgNDQpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXG4rI2VuZGlmXG4rfSBhcmVuYSBTRUMoXCIubWFwc1wiKTtcbitcbitTRUMoXCJzeXNjYWxsXCIpXG4raW50IG5vb3Aodm9pZCAqY3R4KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDoyMzo1My4yMjc1MTMwNzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODExMjY5MDQyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBBcmVuYSBTdWJzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBga2VybmVsL2JwZi9hcmVuYS5jYCBhbmQgYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIHRoaXMgbmV3IGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBmdW5jdGlvbiBhbmQgaW50ZWdyYXRpbmcgaXQgaW50byBgYXJlbmFfdm1fZmF1bHRgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhlIGNvbW1lbnQgc3VnZ2VzdHMgaXQncyBoYW5kbGluZyBwYWdlIGFsbG9jYXRpb24gb3V0c2lkZSBvZiBhIGxvY2ssIHdoaWNoIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgcG90ZW50aWFsIGZvciBtZW1jZyBPT00ga2lsbGVyIGludGVyYWN0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBzaWduaWZpY2FudCBvbmUuIEkgYWxzbyBzZWUgYSBzZWxmdGVzdCwgYGFyZW5hX21lbWNnLmNgLCB3aGljaCBpcyBnb29kIHRvIGhhdmUuXG5cbk5vdywgbGV0IG1lIGRpZyBhIGJpdCBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMuIE15IHByaW1hcnkgZm9jdXMgaXMgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gTG9va2luZyBpbnRvIGBrZXJuZWwvYnBmL2FyZW5hLmNgIGFuZCBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBJIHNlZSB0aGF0IHRoZSBjaGFuZ2VzIGNlbnRlciBhcm91bmQgYGFyZW5hX3ZtX2ZhdWx0YCwgdGhlIEJQRiBhcmVuYSBtYXAgcGFnZSBmYXVsdCBoYW5kbGVyLCBhbmQgdGhlIG5ldyBoZWxwZXIsIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdGFyZ2V0IGBhcmVuYV92bV9mYXVsdGAuIEhvd2V2ZXIsIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIHRoYXQncyBub3QgaWRlYWwgZm9yIGZ1enppbmcuIEkgaGF2ZSB0byBmaW5kIHRoZSBlbnRyeXBvaW50LiBJcyBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgdGhlIHJpZ2h0IHRhcmdldD8gTm8sIHRoYXQncyBqdXN0IGFuIGludGVybmFsIGhlbHBlci4gSG1tLCB3aGF0IGFib3V0IGBicGZfYXJlbmFfbWFwX2FsbG9jYD8gT3IgcGVyaGFwcyB0aGUgbW1hcCBoYW5kbGVyIHJlbGF0ZWQgdG8gdGhlIGFyZW5hPyBJJ20gZ29pbmcgdG8gc2VhcmNoIGZvciBgYXJlbmFfdm1fb3BzYCBhbmQgYGFyZW5hX3ZtX2ZhdWx0YC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBvdmVydmlldyBvZiB3aGF0J3MgZXhwb3NlZCBhbmQgd2hlcmUgdGhlIHJlbGV2YW50IGNhbGxzIGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIyMSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI0OjMxLjM0MDIwNTYwOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM1ODgwNzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hX3ZtX2ZhdWx0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJlbmEuYz00NjQ9c3RhdGljIHZvaWQgYXJlbmFfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDc4LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0Nzk6c3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ4MC17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NTk1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYXJlbmFfdm1fb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTU5OS1cXHQuY2xvc2VcXHRcXHQ9IGFyZW5hX3ZtX2Nsb3NlLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2MDA6XFx0LmZhdWx0ICAgICAgICAgID0gYXJlbmFfdm1fZmF1bHQsXFxua2VybmVsL2JwZi9hcmVuYS5jLTYwMS19O1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmM9NDg9dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9tZW1fdXNhZ2Uodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jLTk5LVxcdCAqIFVzZXItc3BhY2UgZmF1bHQtaW46IHRvdWNoaW5nIHVuYWxsb2NhdGVkIGFyZW5hIHBhZ2VzIGFsbG9jYXRlcyB0aGVtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmM6MTAwOlxcdCAqIHRocm91Z2ggYXJlbmFfdm1fZmF1bHQoKS4gbGliYnBmIG1tYXAoKXMgdGhlIGFyZW5hIGF0IG1hcF9leHRyYSBkdXJpbmdcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy0xMDEtXFx0ICogbG9hZCwgc28gYnBmX21hcF9faW5pdGlhbF92YWx1ZSgpIGhhbmRzIGJhY2sgdGhhdCBiYXNlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDoyNDozMy4zNzYwOTIyNjJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjk1NDc0MjYyNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEFyZW5hIFZNIEZhdWx0IFBhdGgqKlxuXG5SaWdodCwgc28gdGhlIGBhcmVuYV92bV9mYXVsdGAgZnVuY3Rpb24gaXMgdGhlIG9uZSB0aGF0IGdldHMgaW52b2tlZCB3aGVuIGEgcGFnZSBmYXVsdCBvY2N1cnMgd2l0aGluIHRoZSBhcmVuYSBtZW1vcnkgcmVnaW9uLCBhbmQgdGhhdCdzIGFjY2Vzc2VkIHZpYSB0aGUgc3RhbmRhcmQgYHZtX29wZXJhdGlvbnNfc3RydWN0YC4gU3BlY2lmaWNhbGx5LCBJIGJlbGlldmUgaXQncyBnb2luZyB0byBiZSB0aGUgYC5mYXVsdGAgbWV0aG9kIHdpdGhpbiB0aGF0IHN0cnVjdC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSB3aGljaCBtbWFwIGhhbmRsZXIgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIGFyZW5hIG1lbW9yeSBtYXBwaW5ncyBpbml0aWFsbHkuIE15IG1vbmV5J3Mgb24gYGFyZW5hX21hcF9tbWFwYCwgYnV0IGxldCdzIHF1aWNrbHkgY29uZmlybSB0aGF0J3MgdGhlIG9uZS4gTm8gcG9pbnQgbWFraW5nIGFzc3VtcHRpb25zIGhlcmUuIEl0J3MgYmVzdCB0byB2ZXJpZnkgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM0NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI2OjQyLjkyMzUyMTIyOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTMxNDk3NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hX3ZtX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmM9NDc5PXN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTU5NC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTk1OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYXJlbmFfdm1fb3BzID0ge1xcbmtlcm5lbC9icGYvYXJlbmEuYy01OTYtXFx0Lm9wZW5cXHRcXHQ9IGFyZW5hX3ZtX29wZW4sXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjM3PXN0YXRpYyBpbnQgYXJlbmFfbWFwX21tYXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjcyLVxcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05UQ09QWSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjY3MzpcXHR2bWEtXFx1MDAzZXZtX29wcyA9IFxcdTAwMjZhcmVuYV92bV9vcHM7XFxua2VybmVsL2JwZi9hcmVuYS5jLTY3NC1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MjY6NDUuMDU1MDI1MDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTk4MzI5ODMyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBNYXBwaW5nIE1lY2hhbmlzbSoqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgbWVtb3J5IG1hcHBpbmcgd29ya3MgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gdGhlIGBhcmVuYV9tYXBfbW1hcGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyB0aGUgZGVzaWduYXRlZCBtbWFwIGhhbmRsZXIgZm9yIHdoYXRldmVyIGFyZW5hIG9yIHJlZ2lvbiB3ZSdyZSBkZWFsaW5nIHdpdGguIFRoZSBrZXkgbm93IGlzIHRvIGZpZ3VyZSBvdXQgaXRzIHNjb3BlIGFuZCBhc3NpZ25tZW50LiBJcyBgYXJlbmFfbWFwX21tYXBgIGEgZnJlZXN0YW5kaW5nLCBub24tc3RhdGljIGZ1bmN0aW9uLCBvciBpcyBpdCBhY3R1YWxseSBwbHVnZ2VkIGludG8gYSBgYnBmX21hcF9vcHNgIHN0cnVjdHVyZT8gS25vd2luZyB0aGF0IHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCBob3cgaXQncyBpbnRlZ3JhdGVkIHdpdGggdGhlIEJQRiBzdWJzeXN0ZW0gYW5kIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBUaGF0IGRpc3RpbmN0aW9uIGlzIGNydWNpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MDMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozMTowNC44ODgwMTE0NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzk3ODM4ODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hX21hcF9tbWFwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJlbmEuYz02MDM9c3RhdGljIHVuc2lnbmVkIGxvbmcgYXJlbmFfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02MzYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjYzNzpzdGF0aWMgaW50IGFyZW5hX21hcF9tbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmtlcm5lbC9icGYvYXJlbmEuYy02Mzgte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTY4OD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJlbmFfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02OTItXFx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IGFyZW5hX21hcF9kaXJlY3RfdmFsdWVfYWRkcixcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjkzOlxcdC5tYXBfbW1hcCA9IGFyZW5hX21hcF9tbWFwLFxcbmtlcm5lbC9icGYvYXJlbmEuYy02OTQtXFx0Lm1hcF9nZXRfdW5tYXBwZWRfYXJlYSA9IGFyZW5hX2dldF91bm1hcHBlZF9hcmVhLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozMTowNy42ODU4NTU1MzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODczNDc0MzI1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzOlxuXG4qKkFuYWx5emluZyB0aGUgQlBGIE1hcCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBtZW1vcnkgaXMgbWFuYWdlZCB3aXRoaW4gdGhlIEJQRiBtYXAgY29udGV4dC4gSXQgc2VlbXMgbGlrZSBgYXJlbmFfbWFwX29wc2AgaXMgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIG1hcCBvcGVyYXRpb25zLiBUaGF0IG1ha2VzIHNlbnNlLCBhIGNvbnNpc3RlbnQgaW50ZXJmYWNlIGlzIGtleSBoZXJlLiBOb3csIHRoZSBhY3R1YWwgZW50cnkgcG9pbnQgZm9yIHRoZSBgbW1hcGAgc3lzY2FsbCwgd2hlbiBkZWFsaW5nIHdpdGggdGhlc2UgQlBGIG1hcHMsIGlzIGVpdGhlciBnb2luZyB0byBiZSB0aHJvdWdoIGBicGZfbWFwX21tYXBgIG9yIHNpbXBseSB0aGUgYG1tYXBgIHN5c2NhbGwgb24gdGhlIEJQRiBtYXAgZmlsZSBkZXNjcmlwdG9yLCBjb3JyZWN0PyBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIHNldCB1cCBhbmQgaWYgdGhlcmUncyBhbnkgaW5kaXJlY3Rpb24gaW52b2x2ZWQuIEFuZCwgSSdtIHRyeWluZyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZnVuY3Rpb24gYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzIGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIHRoZSBjdXJyZW50IG1vZHVsZS4gRXNzZW50aWFsbHksIGlzIGl0IGV4cG9ydGVkLCBvciBpcyBpdCBhIHN0YXRpYyBmdW5jdGlvbiB0aGF0J3MgaW50ZXJuYWwgdG8gdGhlIG1hcCBpbXBsZW1lbnRhdGlvbj8gS25vd2luZyB0aGUgc2NvcGUgb2YgdGhhdCBmdW5jdGlvbiB3aWxsIHNpZ25pZmljYW50bHkgaW1wYWN0IGhvdyBJIHRoaW5rIGFib3V0IG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjgxLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MzE6NTYuNDIwNjAyMDk4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzk1MTkxNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0yNzg1PWludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXFxuaW5jbHVkZS9saW51eC9icGYuaC0yNzg2LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XFxuaW5jbHVkZS9saW51eC9icGYuaDoyNzg3OnN0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtMjc4OC0jaWZkZWYgQ09ORklHX01FTUNHXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NDc5PXN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTUwMy1cXHRcXHRicGZfbWFwX21lbWNnX2VudGVyKFxcdTAwMjZhcmVuYS1cXHUwMDNlbWFwLCBcXHUwMDI2b2xkX21lbWNnLCBcXHUwMDI2bmV3X21lbWNnKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTA0OlxcdFxcdG5ld19wYWdlID0gYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZShtYXApO1xcbmtlcm5lbC9icGYvYXJlbmEuYy01MDUtXFx0XFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYxNT1pbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1LSAqL1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0NjpzdHJ1Y3QgcGFnZSAqYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjMxOjU4LjgxNTgwMzQ1N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjMwMTU3MDk1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgQlBGIE1hcCBBbGxvY2F0aW9uIGFuZCBBcmVuYSBBbGxvY2F0aW9uIFNjb3BlKipcblxuUmlnaHQsIHNvIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBpcyBleHBsaWNpdGx5ICpub3QqIGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQgaGFzIGV4dGVybmFsIGxpbmthZ2UuIEhtbSwgb2theSwgSSB1bmRlcnN0YW5kIHdoYXQgdGhlIGNvZGUgaXMgZG9pbmcgaW4gdGhhdCBmdW5jdGlvbiwgc28gSSdtIHRoaW5raW5nLi4uIE5vdywgaXMgYGFyZW5hX21hcF9hbGxvY2Agc2ltaWxhcmx5IGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIGl0cyBwcmVzdW1lZCBzY29wZT8gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGl0cyBkZWNsYXJhdGlvbiBhbmQgdXNhZ2UgY29udGV4dC4gS25vd2luZyB0aGF0IHdvdWxkIHByb3ZpZGUgc29tZSB1c2VmdWwgZGV0YWlscyBhYm91dCB0aGUgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTkxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MzI6MTEuMTE3Mzc3ODcxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTMzNzM5NzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hX21hcF9hbGxvY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmM9MjU5PXN0YXRpYyBpbnQgcG9wdWxhdGVfcGd0YWJsZV9leGNlcHRfcHRlKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTI2NS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjY2OnN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYXJlbmFfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjcte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTY4OD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJlbmFfbWFwX29wcyA9IHtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjg5LVxcdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjkwOlxcdC5tYXBfYWxsb2MgPSBhcmVuYV9tYXBfYWxsb2MsXFxua2VybmVsL2JwZi9hcmVuYS5jLTY5MS1cXHQubWFwX2ZyZWUgPSBhcmVuYV9tYXBfZnJlZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MzI6MTQuMDUxMTIzMzk4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNzU5NDYxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIE1hcCBBbGxvY2F0aW9uIFRob3VnaHRzKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIG1hcCBhbGxvY2F0aW9uIGZsb3cgaGVyZS4gRmlyc3QgdGhvdWdodDogYGFyZW5hX21hcF9hbGxvY2AgaXMgc3RhdGljLCB3aGljaCBsaW1pdHMgaXRzIHVzZWZ1bG5lc3MuIFRoZW4sIEkgcmVtZW1iZXIgdGhhdCBgbWFwX2NyZWF0ZWAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgbWFwIGNyZWF0aW9uLiBBbHNvLCBgYnBmX21hcF9tbWFwYCBpcyB0aGUgbW1hcCBlbnRyeSBwb2ludCwgYWxzbyBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLlxuXG5UaGUgZmF1bHQgaGFuZGxlciwgYGFyZW5hX3ZtX2ZhdWx0YCwgaXMgYWxzbyBzdGF0aWMsIHNvIEkgY2FuIHByb2JhYmx5IGlnbm9yZSB0aGF0IGZvciBub3cuIFRoZSBrZXkgaGVyZSBpcyB0byBmaW5kIHRoZSBub24tc3RhdGljIEFQSXMuIE5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQsIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBpcyBkZWZpbml0ZWx5ICpub3QqIHN0YXRpYywgYW5kIHRoYXQgc2VlbXMgcmVsZXZhbnQuIFNob3VsZCBJIGFsc28gaW5jbHVkZSBgYnBmX21hcF9tbWFwYCBvciBgbWFwX2NyZWF0ZWA/IEhtbSwgbm8sIGZvY3VzaW5nIG9uIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBtYWtlcyBtb3JlIHNlbnNlLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBmb3IgYGJwZl9tYXBfbW1hcGAgdG8gc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgZWxzZSBJIHNob3VsZCBrbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM5NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozMjoyMy4zMjcwNzM3MjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTY2ODg2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX21hcF9tbWFwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJlbmEuYz02Mzc9c3RhdGljIGludCBhcmVuYV9tYXBfbW1hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02NjYtXFx0LypcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjY3OlxcdCAqIGJwZl9tYXBfbW1hcCgpIGNoZWNrcyB0aGF0IGl0J3MgYmVpbmcgbW1hcGVkIGFzIFZNX1NIQVJFRCBhbmRcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjY4LVxcdCAqIGNsZWFycyBWTV9NQVlFWEVDLiBTZXQgVk1fRE9OVEVYUEFORCB0byBhdm9pZCBwb3RlbnRpYWwgY2hhbmdlXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMDY1PXN0YXRpYyBzc2l6ZV90IGJwZl9kdW1teV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwNzQtLyogY2FsbGVkIGZvciBhbnkgZXh0cmEgbWVtb3J5LW1hcHBlZCByZWdpb25zIChleGNlcHQgaW5pdGlhbCkgKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMDc1OnN0YXRpYyB2b2lkIGJwZl9tYXBfbW1hcF9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwNzYte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTA4My0vKiBjYWxsZWQgZm9yIGFsbCB1bm1hcHBlZCBtZW1vcnkgcmVnaW9uIChpbmNsdWRpbmcgaW5pdGlhbCkgKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMDg0OnN0YXRpYyB2b2lkIGJwZl9tYXBfbW1hcF9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDg1LXtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwOTEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTA5MjpzdGF0aWMgdm1fZmF1bHRfdCBicGZfbWFwX21tYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTA5My17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMDk5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYnBmX21hcF9kZWZhdWx0X3Ztb3BzID0ge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjExMDA6XFx0Lm9wZW5cXHRcXHQ9IGJwZl9tYXBfbW1hcF9vcGVuLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjExMDE6XFx0LmNsb3NlXFx0XFx0PSBicGZfbWFwX21tYXBfY2xvc2UsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTEwMi19O1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTEwND1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGJwZl9tYXBfbGF6eV92bW9wcyA9IHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMTA1OlxcdC5vcGVuXFx0XFx0PSBicGZfbWFwX21tYXBfb3BlbixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMTA2OlxcdC5jbG9zZVxcdFxcdD0gYnBmX21hcF9tbWFwX2Nsb3NlLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjExMDc6XFx0LmZhdWx0XFx0XFx0PSBicGZfbWFwX21tYXBfZmF1bHQsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTEwOC19O1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTExMDktXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTExMDpzdGF0aWMgaW50IGJwZl9tYXBfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTExMS17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMTkyPWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnBmX21hcF9mb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTE5OC1cXHQud3JpdGVcXHRcXHQ9IGJwZl9kdW1teV93cml0ZSxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMTk5OlxcdC5tbWFwXFx0XFx0PSBicGZfbWFwX21tYXAsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTIwMC1cXHQucG9sbFxcdFxcdD0gYnBmX21hcF9wb2xsLFxcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmM9NDg0PXN0YXRpYyB2b2lkIHByaW50X2hleChjb25zdCBjaGFyICpkYXRhLCBpbnQgZGF0YV9zeilcXG4tLVxcbnRvb2xzL2JwZi9icGZ0b29sL2dlbi5jLTUwMi1cXG50b29scy9icGYvYnBmdG9vbC9nZW4uYzo1MDM6c3RhdGljIHNpemVfdCBicGZfbWFwX21tYXBfc3ooY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcXG50b29scy9icGYvYnBmdG9vbC9nZW4uYy01MDQte1xcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmM9NjYxPXN0YXRpYyB2b2lkIGNvZGVnZW5fZGVzdHJveShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSlcXG4tLVxcbnRvb2xzL2JwZi9icGZ0b29sL2dlbi5jLTY4OS1cXHRcXHRcXHRwcmludGYoXFxcIlxcXFx0c2tlbF9mcmVlX21hcF9kYXRhKHNrZWwtXFx1MDAzZSUxJHMsIHNrZWwtXFx1MDAzZW1hcHMuJTEkcy5pbml0aWFsX3ZhbHVlLCAlMiR6dSk7XFxcXG5cXFwiLFxcbnRvb2xzL2JwZi9icGZ0b29sL2dlbi5jOjY5MDpcXHRcXHRcXHQgICAgICAgaWRlbnQsIGJwZl9tYXBfbW1hcF9zeihtYXApKTtcXG50b29scy9icGYvYnBmdG9vbC9nZW4uYy02OTEtXFx0XFx0Y29kZWdlbihcXFwiXFxcXFxcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmM9NzA0PXN0YXRpYyBpbnQgZ2VuX3RyYWNlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lLCBjb25zdCBjaGFyICpoZWFkZXJfZ3VhcmQpXFxuLS1cXG50b29scy9icGYvYnBmdG9vbC9nZW4uYy03NzktXFx0XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFxcblxcXFxcXG50b29scy9icGYvYnBmdG9vbC9nZW4uYzo3ODA6XFx0XFx0XFx0XFxcIiwgaWRlbnQsIGJwZl9tYXBfbW1hcF9zeihtYXApKTtcXG50b29scy9icGYvYnBmdG9vbC9nZW4uYy03ODEtXFx0fVxcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMtODgwLVxcdFxcdFxcdFxcXCIsXFxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmM6ODgxOlxcdFxcdFxcdGlkZW50LCBicGZfbWFwX21tYXBfc3oobWFwKSk7XFxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMtODgyLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMtODk2LVxcdFxcdFxcdFxcXCIsXFxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmM6ODk3OlxcdFxcdCAgICAgICBpZGVudCwgYnBmX21hcF9tbWFwX3N6KG1hcCksIG1tYXBfZmxhZ3MpO1xcbnRvb2xzL2JwZi9icGZ0b29sL2dlbi5jLTg5OC1cXHR9XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTE4Mjg9c3RhdGljIHNpemVfdCBhcnJheV9tYXBfbW1hcF9zeih1bnNpZ25lZCBpbnQgdmFsdWVfc3osIHVuc2lnbmVkIGludCBtYXhfZW50cmllcylcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTgzNy1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjE4Mzg6c3RhdGljIHNpemVfdCBicGZfbWFwX21tYXBfc3ooY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTE4Mzkte1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xODUyLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTg1MzpzdGF0aWMgaW50IGJwZl9tYXBfbW1hcF9yZXNpemUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc2l6ZV90IG9sZF9zeiwgc2l6ZV90IG5ld19zeilcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTE4NTQte1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYz0xOTc3PWJwZl9vYmplY3RfX2luaXRfaW50ZXJuYWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGVudW0gbGliYnBmX21hcF90eXBlIHR5cGUsXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIwMTgtXFxudG9vbHMvbGliL2JwZi9saWJicGYuYzoyMDE5OlxcdG1tYXBfc3ogPSBicGZfbWFwX21tYXBfc3oobWFwKTtcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIwMjAtXFx0bWFwLVxcdTAwM2VtbWFwZWQgPSBtbWFwKE5VTEwsIG1tYXBfc3osIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTMwMjA9c3RhdGljIGludCBpbml0X2FyZW5hX21hcF9kYXRhKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTMwMjctXFxudG9vbHMvbGliL2JwZi9saWJicGYuYzozMDI4OlxcdG1tYXBfc3ogPSBicGZfbWFwX21tYXBfc3oobWFwKTtcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTMwMjktXFx0aWYgKGRhdGFfYWxsb2Nfc3ogXFx1MDAzZSBtbWFwX3N6KSB7XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTUzMjU9YnBmX29iamVjdF9fcG9wdWxhdGVfaW50ZXJuYWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTUzNjgtXFx0ICovXFxudG9vbHMvbGliL2JwZi9saWJicGYuYzo1MzY5OlxcdG1tYXBfc3ogPSBicGZfbWFwX21tYXBfc3oobWFwKTtcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTUzNzAtXFx0aWYgKG1hcC1cXHUwMDNlZGVmLm1hcF9mbGFncyBcXHUwMDI2IEJQRl9GX01NQVBBQkxFKSB7XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTU2NDU9YnBmX29iamVjdF9fY3JlYXRlX21hcHMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNTcyMS1cXHRcXHRcXHRcXHRtYXAtXFx1MDAzZW1tYXBlZCA9IG1tYXAoKHZvaWQgKikobG9uZyltYXAtXFx1MDAzZW1hcF9leHRyYSxcXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjU3MjI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgYnBmX21hcF9tbWFwX3N6KG1hcCksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy01NzIzLVxcdFxcdFxcdFxcdFxcdFxcdCAgIG1hcC1cXHUwMDNlbWFwX2V4dHJhID8gTUFQX1NIQVJFRCB8IE1BUF9GSVhFRCA6IE1BUF9TSEFSRUQsXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTc0NzY9c3RhdGljIGludCBicGZfb2JqZWN0X19yZWxvY2F0ZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICp0YXJnX2J0Zl9wYXRoKVxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy03NDk1LVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6NzQ5NjpcXHRcXHRvYmotXFx1MDAzZWFyZW5hX2RhdGFfb2ZmID0gYnBmX21hcF9tbWFwX3N6KGFyZW5hX21hcCkgLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNzQ5Ny1cXHRcXHRcXHRcXHQgICAgICByb3VuZHVwKG9iai1cXHUwMDNlYXJlbmFfZGF0YV9zeiwgc3lzY29uZihfU0NfUEFHRV9TSVpFKSk7XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTk1OTA9c3RhdGljIHZvaWQgYnBmX21hcF9fZGVzdHJveShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy05NjAwLVxcdGlmIChtYXAtXFx1MDAzZW1tYXBlZCBcXHUwMDI2XFx1MDAyNiBtYXAtXFx1MDAzZW1tYXBlZCAhPSBtYXAtXFx1MDAzZW9iai1cXHUwMDNlYXJlbmFfZGF0YSlcXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjk2MDE6XFx0XFx0bXVubWFwKG1hcC1cXHUwMDNlbW1hcGVkLCBicGZfbWFwX21tYXBfc3oobWFwKSk7XFxudG9vbHMvbGliL2JwZi9saWJicGYuYy05NjAyLVxcdG1hcC1cXHUwMDNlbW1hcGVkID0gTlVMTDtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9MTEwMjM9aW50IGJwZl9tYXBfX3NldF92YWx1ZV9zaXplKHN0cnVjdCBicGZfbWFwICptYXAsIF9fdTMyIHNpemUpXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTExMDM1LVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTEwMzY6XFx0XFx0bW1hcF9vbGRfc3ogPSBicGZfbWFwX21tYXBfc3oobWFwKTtcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTExMDM3LVxcdFxcdG1tYXBfbmV3X3N6ID0gYXJyYXlfbWFwX21tYXBfc3ooc2l6ZSwgbWFwLVxcdTAwM2VkZWYubWF4X2VudHJpZXMpO1xcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTEwMzg6XFx0XFx0ZXJyID0gYnBmX21hcF9tbWFwX3Jlc2l6ZShtYXAsIG1tYXBfb2xkX3N6LCBtbWFwX25ld19zeik7XFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xMTAzOS1cXHRcXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjMyOjI1LjUyMzc2NzQxN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDI3ODUwODAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBCUEYgTWFwIE1tYXAgRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBtZW1vcnkgbWFwcGluZyB3b3JrcyB3aXRoIEJQRiBtYXBzLiBJJ20gc3RhcnRpbmcgd2l0aCBgYnBmX21hcF9tbWFwYC4gSSBzZWUgaXQncyBzdGF0aWMgd2l0aGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIEFoLCByaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gVGhlIGFjdHVhbCBzeXNjYWxsIGlzIGBtbWFwYCwgYW5kIGl0IG9wZXJhdGVzIG9uIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIG1hcCwgYW5kICp0aGF0KiBwYXRoIGdvZXMgdGhyb3VnaCBgYnBmX21hcF9tbWFwYC4gR290IGl0LlxuXG5Ob3csIHdoZXJlIGRvZXMgdGhpcyB3aG9sZSBtYXAgY3JlYXRpb24gcHJvY2VzcyBiZWdpbj8gVGhlIEFQSSBlbnRyeSBwb2ludOKApnRoYXQgd291bGQgYmUgYG1hcF9jcmVhdGVgLiBUaW1lIHRvIGp1bXAgYmFjayBpbnRvIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgYW5kIHRha2UgYSBsb29rIGF0IGBtYXBfY3JlYXRlYC4gTGV0J3Mgc2VlIGhvdyB0aGlzIGFsbCBjb25uZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NTEsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozMjo0NS44MDIyNzgyMDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjQ4Mzk2NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFwX2NyZWF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDI0NjQgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9hcnJheS5yc3Q9MTQzPUJQRl9NQVBfVFlQRV9BUlJBWVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2FycmF5LnJzdC0xNDUtXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2FycmF5LnJzdDoxNDY6VGhpcyBzbmlwcGV0IHNob3dzIGhvdyB0byBjcmVhdGUgYW4gYXJyYXksIHVzaW5nIGBgYnBmX21hcF9jcmVhdGVfb3B0c2BgIHRvXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2FycmF5LnJzdC0xNDctc2V0IGZsYWdzLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2FycmF5LnJzdC0xNTYtICAgICAgICAgICAgaW50IGZkO1xcbkRvY3VtZW50YXRpb24vYnBmL21hcF9hcnJheS5yc3Q6MTU3OiAgICAgICAgICAgIExJQkJQRl9PUFRTKGJwZl9tYXBfY3JlYXRlX29wdHMsIG9wdHMsIC5tYXBfZmxhZ3MgPSBCUEZfRl9NTUFQQUJMRSk7XFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2FycmF5LnJzdC0xNTgtXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2FycmF5LnJzdDoxNTk6ICAgICAgICAgICAgZmQgPSBicGZfbWFwX2NyZWF0ZShCUEZfTUFQX1RZUEVfQVJSQVksXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2FycmF5LnJzdC0xNjAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiZXhhbXBsZV9hcnJheVxcXCIsICAgICAgIC8qIG5hbWUgKi9cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9ibG9vbV9maWx0ZXIucnN0PTE0Mz11c2Vyc3BhY2U6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfYmxvb21fZmlsdGVyLnJzdC0xNDgtICAgIHtcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfYmxvb21fZmlsdGVyLnJzdDoxNDk6ICAgICAgICAgICAgTElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgb3B0cyxcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfYmxvb21fZmlsdGVyLnJzdC0xNTAtICAgICAgICAgICAgICAgICAgICAgICAgLm1hcF9leHRyYSA9IDMpOyAgICAgICAgICAgICAvKiBudW1iZXIgb2YgaGFzaGVzICovXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Jsb29tX2ZpbHRlci5yc3QtMTUxLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9ibG9vbV9maWx0ZXIucnN0OjE1MjogICAgICAgICAgICByZXR1cm4gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX0JMT09NX0ZJTFRFUixcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfYmxvb21fZmlsdGVyLnJzdC0xNTMtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJpcHY2X2Jsb29tXFxcIiwgICAgICAvKiBuYW1lICovXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfaGFzaC5yc3Q9MzI9c2hhcmVkIGFjcm9zcyBDUFVzIGJ1dCBpdCBpcyBwb3NzaWJsZSB0byByZXF1ZXN0IGEgcGVyIENQVSBMUlUgbGlzdCB3aXRoXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2hhc2gucnN0OjMzOnRoZSBgYEJQRl9GX05PX0NPTU1PTl9MUlVgYCBmbGFnIHdoZW4gY2FsbGluZyBgYGJwZl9tYXBfY3JlYXRlYGAuICBUaGVcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfaGFzaC5yc3QtMzQtZm9sbG93aW5nIHRhYmxlIG91dGxpbmVzIHRoZSBwcm9wZXJ0aWVzIG9mIExSVSBtYXBzIGRlcGVuZGluZyBvbiB0aGUgYVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX29mX21hcHMucnN0PTkzPVRoaXMgc25pcHBldCBzaG93cyBob3cgdG8gY3JlYXRlIGFuIGFycmF5IGJhc2VkIG91dGVyIG1hcDpcXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9vZl9tYXBzLnJzdC05Ny0gICAgaW50IGNyZWF0ZV9vdXRlcl9hcnJheShpbnQgaW5uZXJfZmQpIHtcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfb2ZfbWFwcy5yc3Q6OTg6ICAgICAgICAgICAgTElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgb3B0cywgLmlubmVyX21hcF9mZCA9IGlubmVyX2ZkKTtcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfb2ZfbWFwcy5yc3QtOTktICAgICAgICAgICAgaW50IGZkO1xcbkRvY3VtZW50YXRpb24vYnBmL21hcF9vZl9tYXBzLnJzdC0xMDAtXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX29mX21hcHMucnN0OjEwMTogICAgICAgICAgICBmZCA9IGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9BUlJBWV9PRl9NQVBTLFxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9vZl9tYXBzLnJzdC0xMDItICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiZXhhbXBsZV9hcnJheVxcXCIsICAgICAgIC8qIG5hbWUgKi9cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9vZl9tYXBzLnJzdD0xMTE9VGhpcyBzbmlwcGV0IHNob3dzIGhvdyB0byBhZGQgYW4gaW5uZXIgbWFwIHRvIGFuIG91dGVyIG1hcDpcXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9vZl9tYXBzLnJzdC0xMTctXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX29mX21hcHMucnN0OjExODogICAgICAgICAgICBmZCA9IGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9ERVZNQVAsIG5hbWUsXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX29mX21hcHMucnN0LTExOS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihfX3UzMiksIHNpemVvZihfX3UzMiksIDI1NiwgTlVMTCk7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfcXVldWVfc3RhY2sucnN0PTEyOD11c2Vyc3BhY2U6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfcXVldWVfc3RhY2sucnN0LTEzMy0gICAge1xcbkRvY3VtZW50YXRpb24vYnBmL21hcF9xdWV1ZV9zdGFjay5yc3Q6MTM0OiAgICAgICAgICAgIHJldHVybiBicGZfbWFwX2NyZWF0ZShCUEZfTUFQX1RZUEVfUVVFVUUsXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3F1ZXVlX3N0YWNrLnJzdC0xMzUtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJzYW1wbGVfcXVldWVcXFwiLCAvKiBuYW1lICovXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3Q9NDQ0PXZlcmRpY3QgcHJvZ3JhbSwgYXMgd2VsbCBhcyBhZGQgYSBzb2NrZXQgZW50cnkuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3QtNDUyLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdDo0NTM6XFx0XFx0bWFwID0gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1NPQ0tNQVAsIE5VTEwsIHNpemVvZihpbnQpLCBzaXplb2YoaW50KSwgMSwgTlVMTCk7XFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTQ1NC1cXHRcXHRpZiAobWFwIFxcdTAwM2MgMCkge1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3Q9NjA9Rm9yIG1vcmUgY29udGV4dCBvbiBET05UQ0FDSEUsIHBsZWFzZSBzZWUgdGhlc2UgTGludXggY29tbWl0IGhlYWRlcnM6XFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3QtNjEtXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3Q6NjI6LSBPdmVydmlldzogIDlhZDYzNDQ1NjhjYzMgKFxcXCJtbS9maWxlbWFwOiBjaGFuZ2UgZmlsZW1hcF9jcmVhdGVfZm9saW8oKVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0LTYzLSAgdG8gdGFrZSBhIHN0cnVjdCBraW9jYlxcXCIpXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2guaD0yODc9aW50IGhhc2hfX21hcF9rZXJuZWxfcGFnZSh1bnNpZ25lZCBsb25nIGVhLCB1bnNpZ25lZCBsb25nIHBhLCBwZ3Byb3RfdCBwcm90KTtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2guaDoyODg6ZXh0ZXJuIGludCBfX21lbWluaXQgaGFzaF9fdm1lbW1hcF9jcmVhdGVfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC5oLTI4OS1cXHRcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oPTEwMTM9dm9pZCB1bm1hcF9rZXJuZWxfcGFnZSh1bnNpZ25lZCBsb25nIHZhKTtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaC0xMDE0LVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oOjEwMTU6c3RhdGljIGlubGluZSBpbnQgX19tZW1pbml0IHZtZW1tYXBfY3JlYXRlX21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCxcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaC0xMDE2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTAxOS1cXHRpZiAocmFkaXhfZW5hYmxlZCgpKVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oOjEwMjA6XFx0XFx0cmV0dXJuIHJhZGl4X192bWVtbWFwX2NyZWF0ZV9tYXBwaW5nKHN0YXJ0LCBwYWdlX3NpemUsIHBoeXMpO1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oOjEwMjE6XFx0cmV0dXJuIGhhc2hfX3ZtZW1tYXBfY3JlYXRlX21hcHBpbmcoc3RhcnQsIHBhZ2Vfc2l6ZSwgcGh5cyk7XFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTAyMi19XFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3JhZGl4Lmg9MzE5PXN0cnVjdCBkZXZfcGFnZW1hcDtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3JhZGl4Lmg6MzIwOmV4dGVybiBpbnQgX19tZW1pbml0IHJhZGl4X192bWVtbWFwX2NyZWF0ZV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9yYWRpeC5oLTMyMS1cXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC82NC9wZ3RhYmxlLmg9MTQ5PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdlX3B0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvNjQvcGd0YWJsZS5oLTIwMC1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoLzY0L3BndGFibGUuaDoyMDE6ZXh0ZXJuIGludCBfX21lbWluaXQgdm1lbW1hcF9jcmVhdGVfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvNjQvcGd0YWJsZS5oLTIwMi1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF9wZ3RhYmxlLmMtMTA2LSAqL1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3BndGFibGUuYzoxMDc6aW50IF9fbWVtaW5pdCBoYXNoX192bWVtbWFwX2NyZWF0ZV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfcGd0YWJsZS5jLTEwOC1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jPTk1ND1zdGF0aWMgaW50IF9fbWFwX2tlcm5lbF9wYWdlX25pZCh1bnNpZ25lZCBsb25nIGVhLCB1bnNpZ25lZCBsb25nIHBhLFxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYy05NjAtXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYzo5NjE6aW50IF9fbWVtaW5pdCByYWRpeF9fdm1lbW1hcF9jcmVhdGVfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF9wZ3RhYmxlLmMtOTYyLVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplLFxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYz0yMDI9c3RhdGljIGludCBfX21lbWluaXQgX192bWVtbWFwX3BvcHVsYXRlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMtMjY0LVxcbmFyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmM6MjY1OlxcdFxcdHJjID0gdm1lbW1hcF9jcmVhdGVfbWFwcGluZyhzdGFydCwgcGFnZV9zaXplLCBfX3BhKHApKTtcXG5hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jLTI2Ni1cXHRcXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL2Jvb2szZV9wZ3RhYmxlLmMtMjItICovXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9ib29rM2VfcGd0YWJsZS5jOjIzOmludCBfX21lbWluaXQgdm1lbW1hcF9jcmVhdGVfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvYm9vazNlX3BndGFibGUuYy0yNC1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9MTMwMT1zdGF0aWMgaW50IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTMyMy0vKipcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMzI0OiAqIGdtYXBfY3JlYXRlX3NoYWRvdygpIC0gQ3JlYXRlL2ZpbmQgYSBzaGFkb3cgZ3Vlc3QgYWRkcmVzcyBzcGFjZS5cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMzI1LSAqIEBtYzogVGhlIGNhY2hlIHRvIHVzZSB0byBhbGxvY2F0ZSBkYXQgdGFibGVzLlxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTM0MC0gKi9cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMzQxOnN0cnVjdCBnbWFwICpnbWFwX2NyZWF0ZV9zaGFkb3coc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpwYXJlbnQsXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTM0Mi1cXHRcXHRcXHRcXHR1bmlvbiBhc2NlIGFzY2UsIGludCBlZGF0X2xldmVsKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmg9MTA4PXZvaWQgX2dtYXBfaGFuZGxlX3ZzaWVfdW5zaGFkb3dfZXZlbnQoc3RydWN0IGdtYXAgKnBhcmVudCwgZ2ZuX3QgZ2ZuKTtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuaDoxMDk6c3RydWN0IGdtYXAgKmdtYXBfY3JlYXRlX3NoYWRvdyhzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKmdtYXAsXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmgtMTEwLVxcdFxcdFxcdFxcdHVuaW9uIGFzY2UgYXNjZSwgaW50IGVkYXRfbGV2ZWwpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTMwMD1zdGF0aWMgc3RydWN0IGdtYXAgKmFjcXVpcmVfZ21hcF9zaGFkb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMzI5LWFnYWluOlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEzMzA6XFx0Z21hcCA9IGdtYXBfY3JlYXRlX3NoYWRvdyh2Y3B1LVxcdTAwM2VhcmNoLm1jLCB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZ21hcCwgYXNjZSwgZWRhdCk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTMzMS1cXHRpZiAoSVNfRVJSKGdtYXApKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmg9MjM4PXN0YXRpYyBpbmxpbmUgdTMyIGVmaTY0X2NvbnZlcnRfc3RhdHVzKGVmaV9zdGF0dXNfdCBzdGF0dXMpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lZmkuaC0yNTYtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmg6MjU3OiNkZWZpbmUgX19lZmk2NF9hcmdtYXBfY3JlYXRlX2V2ZW50KHR5cGUsIHRwbCwgZiwgYywgZXZlbnQpXFx0XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VmaS5oLTI1OC1cXHQoKHR5cGUpLCAodHBsKSwgKGYpLCAoYyksIGVmaTY0X3plcm9fdXBwZXIoZXZlbnQpKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vaW9tYXAuaD0xNj12b2lkIF9faW9tZW0gKl9faW9tYXBfbG9jYWxfcGZuX3Byb3QodW5zaWduZWQgbG9uZyBwZm4sIHBncHJvdF90IHByb3QpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2lvbWFwLmgtMTctXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vaW9tYXAuaDoxODppbnQgaW9tYXBfY3JlYXRlX3djKHJlc291cmNlX3NpemVfdCBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90ICpwcm90KTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb21hcC5oLTE5LVxcbi0tXFxuYXJjaC94ODYvbW0vaW9tYXBfMzIuYz0xMT1zdGF0aWMgaW50IGlzX2lvX21hcHBpbmdfcG9zc2libGUocmVzb3VyY2Vfc2l6ZV90IGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4tLVxcbmFyY2gveDg2L21tL2lvbWFwXzMyLmMtMjAtXFxuYXJjaC94ODYvbW0vaW9tYXBfMzIuYzoyMTppbnQgaW9tYXBfY3JlYXRlX3djKHJlc291cmNlX3NpemVfdCBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90ICpwcm90KVxcbmFyY2gveDg2L21tL2lvbWFwXzMyLmMtMjIte1xcbi0tXFxuYXJjaC94ODYvbW0vaW9tYXBfMzIuYy0zOC19XFxuYXJjaC94ODYvbW0vaW9tYXBfMzIuYzozOTpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9jcmVhdGVfd2MpO1xcbmFyY2gveDg2L21tL2lvbWFwXzMyLmMtNDAtXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmM9MTAwPXN0cnVjdCBmZmFfZHJ2X2luZm8ge1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jLTEwOS1cXHRib29sIG1zZ19kaXJlY3RfcmVxMl9zdXBwO1xcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYzoxMTA6XFx0Ym9vbCBiaXRtYXBfY3JlYXRlZDtcXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmMtMTExLVxcdGJvb2wgYnVzX25vdGlmaWVyX3JlZ2lzdGVyZWQ7XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmM9ODI1PXN0YXRpYyBpbnQgZmZhX21lbW9yeV9yZWNsYWltKHU2NCBnX2hhbmRsZSwgdTMyIGZsYWdzKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jLTg0MC1cXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmM6ODQxOnN0YXRpYyBpbnQgZmZhX25vdGlmaWNhdGlvbl9iaXRtYXBfY3JlYXRlKHZvaWQpXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jLTg0Mi17XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmM9MjA1Nz1zdGF0aWMgdm9pZCBmZmFfbm90aWZpY2F0aW9uc19jbGVhbnVwKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmMtMjA2NC1cXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmM6MjA2NTpcXHRpZiAoZHJ2X2luZm8tXFx1MDAzZWJpdG1hcF9jcmVhdGVkKSB7XFxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jLTIwNjYtXFx0XFx0ZmZhX25vdGlmaWNhdGlvbl9iaXRtYXBfZGVzdHJveSgpO1xcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYzoyMDY3OlxcdFxcdGRydl9pbmZvLVxcdTAwM2ViaXRtYXBfY3JlYXRlZCA9IGZhbHNlO1xcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYy0yMDY4LVxcdH1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYz0yMDcyPXN0YXRpYyB2b2lkIGZmYV9ub3RpZmljYXRpb25zX3NldHVwKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmMtMjA3Ny1cXHRpZiAoIXJldCkge1xcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYzoyMDc4OlxcdFxcdHJldCA9IGZmYV9ub3RpZmljYXRpb25fYml0bWFwX2NyZWF0ZSgpO1xcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYy0yMDc5LVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYy0yMDgzLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYzoyMDg0OlxcdFxcdGRydl9pbmZvLVxcdTAwM2ViaXRtYXBfY3JlYXRlZCA9IHRydWU7XFxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jLTIwODUtXFx0fVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jPTE3NDE9c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9vcHMgeGVfZHJtX3BhZ2VtYXBfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE3NDgtLyoqXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE3NDk6ICogeGVfcGFnZW1hcF9jcmVhdGUoKSAtIENyZWF0ZSBhIHN0cnVjdCB4ZV9wYWdlbWFwIG9iamVjdFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xNzUwLSAqIEB4ZTogVGhlIHhlIGRldmljZS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xNzU5LSAqL1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxNzYwOnN0YXRpYyBzdHJ1Y3QgeGVfcGFnZW1hcCAqeGVfcGFnZW1hcF9jcmVhdGUoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV92cmFtX3JlZ2lvbiAqdnIpXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE3NjEte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jPTE4NDI9eGVfcGFnZW1hcF9maW5kX29yX2NyZWF0ZShzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IGRybV9wYWdlbWFwX2NhY2hlICpjYWNoZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODU2LVxcdH0gZWxzZSBpZiAoIWRwYWdlbWFwKSB7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE4NTc6XFx0XFx0eHBhZ2VtYXAgPSB4ZV9wYWdlbWFwX2NyZWF0ZSh4ZSwgdnIpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODU4LVxcdFxcdGlmIChJU19FUlIoeHBhZ2VtYXApKVxcbi0tXFxuZHJpdmVycy9tZC9kbS12ZG8vYmxvY2stbWFwLmM9MjE5PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGFsbG9jYXRlX2NhY2hlX2NvbXBvbmVudHMoc3RydWN0IHZkb19wYWdlX2NhY2hlICpjYWNoZSlcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5jLTIzMS1cXG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYzoyMzI6XFx0cmVzdWx0ID0gdmRvX2ludF9tYXBfY3JlYXRlKGNhY2hlLVxcdTAwM2VwYWdlX2NvdW50LCBcXHUwMDI2Y2FjaGUtXFx1MDAzZXBhZ2VfbWFwKTtcXG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYy0yMzMtXFx0aWYgKHJlc3VsdCAhPSBWRE9fU1VDQ0VTUylcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5jPTEzNDI9aW50IHZkb19pbnZhbGlkYXRlX3BhZ2VfY2FjaGUoc3RydWN0IHZkb19wYWdlX2NhY2hlICpjYWNoZSlcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5jLTEzNTctXFx0dmRvX2ludF9tYXBfZnJlZSh2ZG9fZm9yZ2V0KGNhY2hlLVxcdTAwM2VwYWdlX21hcCkpO1xcbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5jOjEzNTg6XFx0cmV0dXJuIHZkb19pbnRfbWFwX2NyZWF0ZShjYWNoZS1cXHUwMDNlcGFnZV9jb3VudCwgXFx1MDAyNmNhY2hlLVxcdTAwM2VwYWdlX21hcCk7XFxuZHJpdmVycy9tZC9kbS12ZG8vYmxvY2stbWFwLmMtMTM1OS19XFxuLS1cXG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYz0yNzM2PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGluaXRpYWxpemVfYmxvY2tfbWFwX3pvbmUoc3RydWN0IGJsb2NrX21hcCAqbWFwLFxcbi0tXFxuZHJpdmVycy9tZC9kbS12ZG8vYmxvY2stbWFwLmMtMjc2NC1cXG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYzoyNzY1OlxcdHJlc3VsdCA9IHZkb19pbnRfbWFwX2NyZWF0ZShWRE9fTE9DS19NQVBfQ0FQQUNJVFksIFxcdTAwMjZ6b25lLVxcdTAwM2Vsb2FkaW5nX3BhZ2VzKTtcXG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYy0yNzY2LVxcdGlmIChyZXN1bHQgIT0gVkRPX1NVQ0NFU1MpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXZkby9kZWR1cGUuYz0yMzQ5PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGluaXRpYWxpemVfem9uZShzdHJ1Y3QgdmRvICp2ZG8sIHN0cnVjdCBoYXNoX3pvbmVzICp6b25lcyxcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL2RlZHVwZS5jLTIzNTUtXFxuZHJpdmVycy9tZC9kbS12ZG8vZGVkdXBlLmM6MjM1NjpcXHRyZXN1bHQgPSB2ZG9faW50X21hcF9jcmVhdGUoVkRPX0xPQ0tfTUFQX0NBUEFDSVRZLCBcXHUwMDI2em9uZS1cXHUwMDNlaGFzaF9sb2NrX21hcCk7XFxuZHJpdmVycy9tZC9kbS12ZG8vZGVkdXBlLmMtMjM1Ny1cXHRpZiAocmVzdWx0ICE9IFZET19TVUNDRVNTKVxcbi0tXFxuZHJpdmVycy9tZC9kbS12ZG8vaW50LW1hcC5jPTE1Nz1zdGF0aWMgaW50IGFsbG9jYXRlX2J1Y2tldHMoc3RydWN0IGludF9tYXAgKm1hcCwgc2l6ZV90IGNhcGFjaXR5KVxcbi0tXFxuZHJpdmVycy9tZC9kbS12ZG8vaW50LW1hcC5jLTE3MC0vKipcXG5kcml2ZXJzL21kL2RtLXZkby9pbnQtbWFwLmM6MTcxOiAqIHZkb19pbnRfbWFwX2NyZWF0ZSgpIC0gQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW50X21hcC5cXG5kcml2ZXJzL21kL2RtLXZkby9pbnQtbWFwLmMtMTcyLSAqIEBpbml0aWFsX2NhcGFjaXR5OiBUaGUgbnVtYmVyIG9mIGVudHJpZXMgdGhlIG1hcCBzaG91bGQgaW5pdGlhbGx5IGJlIGNhcGFibGUgb2YgaG9sZGluZyAoemVyb1xcbi0tXFxuZHJpdmVycy9tZC9kbS12ZG8vaW50LW1hcC5jLTE3Ny0gKi9cXG5kcml2ZXJzL21kL2RtLXZkby9pbnQtbWFwLmM6MTc4OmludCB2ZG9faW50X21hcF9jcmVhdGUoc2l6ZV90IGluaXRpYWxfY2FwYWNpdHksIHN0cnVjdCBpbnRfbWFwICoqbWFwX3B0cilcXG5kcml2ZXJzL21kL2RtLXZkby9pbnQtbWFwLmMtMTc5LXtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL2ludC1tYXAuaD0yND1zdHJ1Y3QgaW50X21hcDtcXG5kcml2ZXJzL21kL2RtLXZkby9pbnQtbWFwLmgtMjUtXFxuZHJpdmVycy9tZC9kbS12ZG8vaW50LW1hcC5oOjI2OmludCBfX211c3RfY2hlY2sgdmRvX2ludF9tYXBfY3JlYXRlKHNpemVfdCBpbml0aWFsX2NhcGFjaXR5LCBzdHJ1Y3QgaW50X21hcCAqKm1hcF9wdHIpO1xcbmRyaXZlcnMvbWQvZG0tdmRvL2ludC1tYXAuaC0yNy1cXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL2lvLXN1Ym1pdHRlci5jPTQwNT1pbnQgdmRvX21ha2VfaW9fc3VibWl0dGVyKHVuc2lnbmVkIGludCB0aHJlYWRfY291bnQsIHVuc2lnbmVkIGludCByb3RhdGlvbl9pbnRlcnZhbCxcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL2lvLXN1Ym1pdHRlci5jLTQzMi1cXHRcXHQgKi9cXG5kcml2ZXJzL21kL2RtLXZkby9pby1zdWJtaXR0ZXIuYzo0MzM6XFx0XFx0cmVzdWx0ID0gdmRvX2ludF9tYXBfY3JlYXRlKG1heF9yZXF1ZXN0c19hY3RpdmUgKiAyLFxcbmRyaXZlcnMvbWQvZG0tdmRvL2lvLXN1Ym1pdHRlci5jLTQzNC1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmJpb19xdWV1ZV9kYXRhLVxcdTAwM2VtYXApO1xcbi0tXFxuZHJpdmVycy9tZC9kbS12ZG8vbG9naWNhbC16b25lLmM9NTE9c3RhdGljIGludCBpbml0aWFsaXplX3pvbmUoc3RydWN0IGxvZ2ljYWxfem9uZXMgKnpvbmVzLCB6b25lX2NvdW50X3Qgem9uZV9udW1iZXIpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXZkby9sb2dpY2FsLXpvbmUuYy01Ny1cXG5kcml2ZXJzL21kL2RtLXZkby9sb2dpY2FsLXpvbmUuYzo1ODpcXHRyZXN1bHQgPSB2ZG9faW50X21hcF9jcmVhdGUoVkRPX0xPQ0tfTUFQX0NBUEFDSVRZLCBcXHUwMDI2em9uZS1cXHUwMDNlbGJuX29wZXJhdGlvbnMpO1xcbmRyaXZlcnMvbWQvZG0tdmRvL2xvZ2ljYWwtem9uZS5jLTU5LVxcdGlmIChyZXN1bHQgIT0gVkRPX1NVQ0NFU1MpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXZkby9waHlzaWNhbC16b25lLmM9MzI1PXN0YXRpYyBpbnQgaW5pdGlhbGl6ZV96b25lKHN0cnVjdCB2ZG8gKnZkbywgc3RydWN0IHBoeXNpY2FsX3pvbmVzICp6b25lcylcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL3BoeXNpY2FsLXpvbmUuYy0zMzAtXFxuZHJpdmVycy9tZC9kbS12ZG8vcGh5c2ljYWwtem9uZS5jOjMzMTpcXHRyZXN1bHQgPSB2ZG9faW50X21hcF9jcmVhdGUoVkRPX0xPQ0tfTUFQX0NBUEFDSVRZLCBcXHUwMDI2em9uZS1cXHUwMDNlcGJuX29wZXJhdGlvbnMpO1xcbmRyaXZlcnMvbWQvZG0tdmRvL3BoeXNpY2FsLXpvbmUuYy0zMzItXFx0aWYgKHJlc3VsdCAhPSBWRE9fU1VDQ0VTUylcXG4tLVxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtNC0gKlxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM6NTogKiBiaXRtYXBfY3JlYXRlICAtIHNldHMgdXAgdGhlIGJpdG1hcCBzdHJ1Y3R1cmVcXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTYtICogYml0bWFwX2Rlc3Ryb3kgLSBkZXN0cm95cyB0aGUgYml0bWFwIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYz0yMDg2PXN0YXRpYyB2b2lkIGJpdG1hcF9kZXN0cm95KHN0cnVjdCBtZGRldiAqbWRkZXYpXFxuLS1cXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTIxMTEtICovXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYzoyMTEyOnN0YXRpYyBzdHJ1Y3QgYml0bWFwICpfX2JpdG1hcF9jcmVhdGUoc3RydWN0IG1kZGV2ICptZGRldiwgaW50IHNsb3QpXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy0yMTEzLXtcXG4tLVxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtMjE5OS1cXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jOjIyMDA6c3RhdGljIGludCBiaXRtYXBfY3JlYXRlKHN0cnVjdCBtZGRldiAqbWRkZXYpXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy0yMjAxLXtcXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jOjIyMDI6XFx0c3RydWN0IGJpdG1hcCAqYml0bWFwID0gX19iaXRtYXBfY3JlYXRlKG1kZGV2LCAtMSk7XFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy0yMjAzLVxcbi0tXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYz0yMjY5PXN0YXRpYyB2b2lkICpiaXRtYXBfZ2V0X2Zyb21fc2xvdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgc2xvdClcXG4tLVxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtMjI3My1cXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jOjIyNzQ6XFx0Yml0bWFwID0gX19iaXRtYXBfY3JlYXRlKG1kZGV2LCBzbG90KTtcXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTIyNzUtXFx0aWYgKElTX0VSUihiaXRtYXApKSB7XFxuLS1cXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jPTI2Mjk9bG9jYXRpb25fc3RvcmUoc3RydWN0IG1kZGV2ICptZGRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbi0tXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy0yNjk2LVxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM6MjY5NzpcXHRcXHRcXHRydiA9IG1kX2JpdG1hcF9jcmVhdGVfbm9zeXNmcyhtZGRldik7XFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy0yNjk4LVxcdFxcdFxcdGlmIChydilcXG4tLVxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM9MzA3MT1zdGF0aWMgc3RydWN0IGJpdG1hcF9vcGVyYXRpb25zIGJpdG1hcF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTMwNzgtXFx0LmVuYWJsZWRcXHRcXHQ9IGJpdG1hcF9lbmFibGVkLFxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM6MzA3OTpcXHQuY3JlYXRlXFx0XFx0XFx0PSBiaXRtYXBfY3JlYXRlLFxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtMzA4MC1cXHQucmVzaXplXFx0XFx0XFx0PSBiaXRtYXBfcmVzaXplLFxcbi0tXFxuZHJpdmVycy9tZC9tZC1sbGJpdG1hcC5jPTEwNTE9c3RhdGljIHZvaWQgbWRfbGxiaXRtYXBfZGFlbW9uX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbWQvbWQtbGxiaXRtYXAuYy0xMTAzLVxcbmRyaXZlcnMvbWQvbWQtbGxiaXRtYXAuYzoxMTA0OnN0YXRpYyBpbnQgbGxiaXRtYXBfY3JlYXRlKHN0cnVjdCBtZGRldiAqbWRkZXYpXFxuZHJpdmVycy9tZC9tZC1sbGJpdG1hcC5jLTExMDUte1xcbi0tXFxuZHJpdmVycy9tZC9tZC1sbGJpdG1hcC5jPTE3NDk9c3RhdGljIHN0cnVjdCBiaXRtYXBfb3BlcmF0aW9ucyBsbGJpdG1hcF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL21kL21kLWxsYml0bWFwLmMtMTc1Ni1cXHQuZW5hYmxlZFxcdFxcdD0gbGxiaXRtYXBfZW5hYmxlZCxcXG5kcml2ZXJzL21kL21kLWxsYml0bWFwLmM6MTc1NzpcXHQuY3JlYXRlXFx0XFx0XFx0PSBsbGJpdG1hcF9jcmVhdGUsXFxuZHJpdmVycy9tZC9tZC1sbGJpdG1hcC5jLTE3NTgtXFx0LnJlc2l6ZVxcdFxcdFxcdD0gbGxiaXRtYXBfcmVzaXplLFxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTY0Njg9c3RhdGljIGVudW0gbWRfc3VibW9kdWxlX2lkIG1kX2JpdG1hcF9nZXRfaWRfZnJvbV9zYihzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTY1MzctXFxuZHJpdmVycy9tZC9tZC5jOjY1Mzg6aW50IG1kX2JpdG1hcF9jcmVhdGVfbm9zeXNmcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxcbmRyaXZlcnMvbWQvbWQuYy02NTM5LXtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy02NTg2LVxcbmRyaXZlcnMvbWQvbWQuYzo2NTg3OnN0YXRpYyBpbnQgbWRfYml0bWFwX2NyZWF0ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxcbmRyaXZlcnMvbWQvbWQuYy02NTg4LXtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy02NTkwLVxcbmRyaXZlcnMvbWQvbWQuYzo2NTkxOlxcdGVyciA9IG1kX2JpdG1hcF9jcmVhdGVfbm9zeXNmcyhtZGRldik7XFxuZHJpdmVycy9tZC9tZC5jLTY1OTItXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz02NjI5PWludCBtZF9ydW4oc3RydWN0IG1kZGV2ICptZGRldilcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy02NzczLVxcdCAgICAobWRkZXYtXFx1MDAzZWJpdG1hcF9pbmZvLmZpbGUgfHwgbWRkZXYtXFx1MDAzZWJpdG1hcF9pbmZvLm9mZnNldCkpIHtcXG5kcml2ZXJzL21kL21kLmM6Njc3NDpcXHRcXHRlcnIgPSBtZF9iaXRtYXBfY3JlYXRlKG1kZGV2KTtcXG5kcml2ZXJzL21kL21kLmMtNjc3NS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTc3ODM9c3RhdGljIGludCBzZXRfYml0bWFwX2ZpbGUoc3RydWN0IG1kZGV2ICptZGRldiwgaW50IGZkKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTc4NDYtXFx0XFx0aWYgKGZkIFxcdTAwM2U9IDApIHtcXG5kcml2ZXJzL21kL21kLmM6Nzg0NzpcXHRcXHRcXHRlcnIgPSBtZF9iaXRtYXBfY3JlYXRlKG1kZGV2KTtcXG5kcml2ZXJzL21kL21kLmMtNzg0OC1cXHRcXHRcXHRpZiAoIWVycilcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz04MDg1PXN0YXRpYyBpbnQgdXBkYXRlX2FycmF5X2luZm8oc3RydWN0IG1kZGV2ICptZGRldiwgbWR1X2FycmF5X2luZm9fdCAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy04MTY1LVxcdFxcdFxcdG1kZGV2LVxcdTAwM2ViaXRtYXBfaWQgPSBJRF9CSVRNQVA7XFxuZHJpdmVycy9tZC9tZC5jOjgxNjY6XFx0XFx0XFx0cnYgPSBtZF9iaXRtYXBfY3JlYXRlKG1kZGV2KTtcXG5kcml2ZXJzL21kL21kLmMtODE2Ny1cXHRcXHRcXHRpZiAoIXJ2KVxcbi0tXFxuZHJpdmVycy9tZC9tZC5oPTkzOT1ib29sIG1kZGV2X3NldF9iaXRtYXBfb3BzX25vc3lzZnMoc3RydWN0IG1kZGV2ICptZGRldik7XFxuZHJpdmVycy9tZC9tZC5oOjk0MDppbnQgbWRfYml0bWFwX2NyZWF0ZV9ub3N5c2ZzKHN0cnVjdCBtZGRldiAqbWRkZXYpO1xcbmRyaXZlcnMvbWQvbWQuaC05NDEtdm9pZCBtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKHN0cnVjdCBtZGRldiAqbWRkZXYpO1xcbi0tXFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYz04MzU9c3RhdGljIGludCBmYXN0cnBjX21hcF9hdHRhY2goc3RydWN0IGZhc3RycGNfdXNlciAqZmwsIGludCBmZCxcXG4tLVxcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtOTI2LVxcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmM6OTI3OnN0YXRpYyBpbnQgZmFzdHJwY19tYXBfY3JlYXRlKHN0cnVjdCBmYXN0cnBjX3VzZXIgKmZsLCBpbnQgZmQsXFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYy05MjgtXFx0XFx0XFx0ICAgICAgdTY0IGxlbiwgdTMyIGF0dHIsIHN0cnVjdCBmYXN0cnBjX21hcCAqKnBwbWFwKVxcbi0tXFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYz05OTc9c3RhdGljIGludCBmYXN0cnBjX2NyZWF0ZV9tYXBzKHN0cnVjdCBmYXN0cnBjX2ludm9rZV9jdHggKmN0eClcXG4tLVxcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtMTAwOC1cXHRcXHRpZiAoaSBcXHUwMDNjIGN0eC1cXHUwMDNlbmJ1ZnMpXFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYzoxMDA5OlxcdFxcdFxcdGVyciA9IGZhc3RycGNfbWFwX2NyZWF0ZShjdHgtXFx1MDAzZWZsLCBjdHgtXFx1MDAzZWFyZ3NbaV0uZmQsXFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYy0xMDEwLVxcdFxcdFxcdFxcdCBjdHgtXFx1MDAzZWFyZ3NbaV0ubGVuZ3RoLCBjdHgtXFx1MDAzZWFyZ3NbaV0uYXR0ciwgXFx1MDAyNmN0eC1cXHUwMDNlbWFwc1tpXSk7XFxuLS1cXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jPTE0NjI9c3RhdGljIGludCBmYXN0cnBjX2luaXRfY3JlYXRlX3Byb2Nlc3Moc3RydWN0IGZhc3RycGNfdXNlciAqZmwsXFxuLS1cXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jLTE1MTMtXFx0aWYgKGluaXQuZmlsZWxlbiBcXHUwMDI2XFx1MDAyNiBpbml0LmZpbGVmZCkge1xcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmM6MTUxNDpcXHRcXHRlcnIgPSBmYXN0cnBjX21hcF9jcmVhdGUoZmwsIGluaXQuZmlsZWZkLCBpbml0LmZpbGVsZW4sIDAsIFxcdTAwMjZtYXApO1xcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtMTUxNS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYz0yMDk1PXN0YXRpYyBpbnQgZmFzdHJwY19yZXFfbWVtX21hcChzdHJ1Y3QgZmFzdHJwY191c2VyICpmbCwgY2hhciBfX3VzZXIgKmFyZ3ApXFxuLS1cXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jLTIxMTEtXFx0LyogY3JlYXRlIFNNTVUgbWFwcGluZyAqL1xcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmM6MjExMjpcXHRlcnIgPSBmYXN0cnBjX21hcF9jcmVhdGUoZmwsIHJlcS5mZCwgcmVxLmxlbmd0aCwgMCwgXFx1MDAyNm1hcCk7XFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYy0yMTEzLVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbXRkL25hbmQvc3BpL2NvcmUuYz0xMjIyPXN0YXRpYyBzdHJ1Y3Qgc3BpX21lbV9kaXJtYXBfZGVzYyAqc3BpbmFuZF9jcmVhdGVfcmRlc2MoXFxuLS1cXG5kcml2ZXJzL210ZC9uYW5kL3NwaS9jb3JlLmMtMTIzNC1cXHRcXHRpbmZvLVxcdTAwM2VsZW5ndGggPSBuYW5kZGV2X2VyYXNlYmxvY2tfc2l6ZShuYW5kKTtcXG5kcml2ZXJzL210ZC9uYW5kL3NwaS9jb3JlLmM6MTIzNTpcXHRcXHRkZXNjID0gZGV2bV9zcGlfbWVtX2Rpcm1hcF9jcmVhdGUoXFx1MDAyNnNwaW5hbmQtXFx1MDAzZXNwaW1lbS1cXHUwMDNlc3BpLVxcdTAwM2VkZXYsXFxuZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jLTEyMzYtXFx0XFx0XFx0XFx0XFx0XFx0ICBzcGluYW5kLVxcdTAwM2VzcGltZW0sIGluZm8pO1xcbi0tXFxuZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jLTEyNDgtXFx0XFx0XFx0ICAgICAgIG5hbmRkZXZfcGVyX3BhZ2Vfb29ic2l6ZShuYW5kKTtcXG5kcml2ZXJzL210ZC9uYW5kL3NwaS9jb3JlLmM6MTI0OTpcXHRcXHRkZXNjID0gZGV2bV9zcGlfbWVtX2Rpcm1hcF9jcmVhdGUoXFx1MDAyNnNwaW5hbmQtXFx1MDAzZXNwaW1lbS1cXHUwMDNlc3BpLVxcdTAwM2VkZXYsXFxuZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jLTEyNTAtXFx0XFx0XFx0XFx0XFx0XFx0ICBzcGluYW5kLVxcdTAwM2VzcGltZW0sIGluZm8pO1xcbi0tXFxuZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jPTEyNTY9c3RhdGljIGludCBzcGluYW5kX2NyZWF0ZV9kaXJtYXAoc3RydWN0IHNwaW5hbmRfZGV2aWNlICpzcGluYW5kLFxcbi0tXFxuZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jLTEyODYtXFx0aW5mby5wcmltYXJ5X29wX3RtcGwuZGF0YS5lY2MgPSBlbmFibGVfZWNjO1xcbmRyaXZlcnMvbXRkL25hbmQvc3BpL2NvcmUuYzoxMjg3OlxcdGRlc2MgPSBkZXZtX3NwaV9tZW1fZGlybWFwX2NyZWF0ZShcXHUwMDI2c3BpbmFuZC1cXHUwMDNlc3BpbWVtLVxcdTAwM2VzcGktXFx1MDAzZWRldixcXG5kcml2ZXJzL210ZC9uYW5kL3NwaS9jb3JlLmMtMTI4OC1cXHRcXHRcXHRcXHRcXHQgIHNwaW5hbmQtXFx1MDAzZXNwaW1lbSwgXFx1MDAyNmluZm8pO1xcbi0tXFxuZHJpdmVycy9tdGQvc3BpLW5vci9jb3JlLmM9MzcxMT1zdGF0aWMgaW50IHNwaV9ub3JfY3JlYXRlX3JlYWRfZGlybWFwKHN0cnVjdCBzcGlfbm9yICpub3IpXFxuLS1cXG5kcml2ZXJzL210ZC9zcGktbm9yL2NvcmUuYy0zNzM3LVxcbmRyaXZlcnMvbXRkL3NwaS1ub3IvY29yZS5jOjM3Mzg6XFx0bm9yLVxcdTAwM2VkaXJtYXAucmRlc2MgPSBkZXZtX3NwaV9tZW1fZGlybWFwX2NyZWF0ZShub3ItXFx1MDAzZWRldiwgbm9yLVxcdTAwM2VzcGltZW0sXFxuZHJpdmVycy9tdGQvc3BpLW5vci9jb3JlLmMtMzczOS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmluZm8pO1xcbi0tXFxuZHJpdmVycy9tdGQvc3BpLW5vci9jb3JlLmM9Mzc0Mz1zdGF0aWMgaW50IHNwaV9ub3JfY3JlYXRlX3dyaXRlX2Rpcm1hcChzdHJ1Y3Qgc3BpX25vciAqbm9yKVxcbi0tXFxuZHJpdmVycy9tdGQvc3BpLW5vci9jb3JlLmMtMzc2Ny1cXG5kcml2ZXJzL210ZC9zcGktbm9yL2NvcmUuYzozNzY4OlxcdG5vci1cXHUwMDNlZGlybWFwLndkZXNjID0gZGV2bV9zcGlfbWVtX2Rpcm1hcF9jcmVhdGUobm9yLVxcdTAwM2VkZXYsIG5vci1cXHUwMDNlc3BpbWVtLFxcbmRyaXZlcnMvbXRkL3NwaS1ub3IvY29yZS5jLTM3NjktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZpbmZvKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL25wYy5jPTM0NTY9c3RhdGljIHZvaWQgbnBjX3N1YmJhbmtfaW5pdChzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCBucGNfc3ViYmFuayAqc2IsIGludCBpZHgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9ucGMuYy0zNDY5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL25wYy5jOjM0NzA6c3RhdGljIGludCBucGNfcGNpZnVuY19tYXBfY3JlYXRlKHN0cnVjdCBydnUgKnJ2dSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9ucGMuYy0zNDcxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL25wYy5jPTQ2NTQ9c3RhdGljIGludCBucGNfcHJpdl9pbml0KHN0cnVjdCBydnUgKnJ2dSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL25wYy5jLTQ3NTgtXFx0LyogR2V0IG51bWJlciBvZiBwY2lmdW5jcyBpbiB0aGUgc3lzdGVtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvbnBjLmM6NDc1OTpcXHRucGNfcHJpdi1cXHUwMDNlcGZfY250ID0gbnBjX3BjaWZ1bmNfbWFwX2NyZWF0ZShydnUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL25wYy5jLTQ3NjAtXFx0bnBjX3ByaXYtXFx1MDAzZXhhX3BmMmlkeF9tYXAgPSBrY2FsbG9jKG5wY19wcml2LVxcdTAwM2VwZl9jbnQsXFxuLS1cXG5kcml2ZXJzL3BpbmN0cmwvYmNtL3BpbmN0cmwtaXByb2MtZ3Bpby5jPTQyOD1zdGF0aWMgYm9vbCBpcHJvY19waW5jb25mX3BhcmFtX2lzX2Rpc2FibGVkKHN0cnVjdCBpcHJvY19ncGlvICpjaGlwLFxcbi0tXFxuZHJpdmVycy9waW5jdHJsL2JjbS9waW5jdHJsLWlwcm9jLWdwaW8uYy00NDItXFxuZHJpdmVycy9waW5jdHJsL2JjbS9waW5jdHJsLWlwcm9jLWdwaW8uYzo0NDM6c3RhdGljIGludCBpcHJvY19waW5jb25mX2Rpc2FibGVfbWFwX2NyZWF0ZShzdHJ1Y3QgaXByb2NfZ3BpbyAqY2hpcCxcXG5kcml2ZXJzL3BpbmN0cmwvYmNtL3BpbmN0cmwtaXByb2MtZ3Bpby5jLTQ0NC1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBkaXNhYmxlX21hc2spXFxuLS1cXG5kcml2ZXJzL3BpbmN0cmwvYmNtL3BpbmN0cmwtaXByb2MtZ3Bpby5jPTgwND1zdGF0aWMgaW50IGlwcm9jX2dwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvcGluY3RybC9iY20vcGluY3RybC1pcHJvYy1ncGlvLmMtOTA0LVxcdFxcdGlmIChwaW5jb25mX2Rpc2FibGVfbWFzaykge1xcbmRyaXZlcnMvcGluY3RybC9iY20vcGluY3RybC1pcHJvYy1ncGlvLmM6OTA1OlxcdFxcdFxcdHJldCA9IGlwcm9jX3BpbmNvbmZfZGlzYWJsZV9tYXBfY3JlYXRlKGNoaXAsXFxuZHJpdmVycy9waW5jdHJsL2JjbS9waW5jdHJsLWlwcm9jLWdwaW8uYy05MDYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHBpbmNvbmZfZGlzYWJsZV9tYXNrKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9jeGdiaS9jeGdiM2kvY3hnYjNpLmM9MTAzOT1zdGF0aWMgaW50IGN4Z2IzaV9vZmxkX2luaXQoc3RydWN0IGN4Z2JpX2RldmljZSAqY2RldilcXG4tLVxcbmRyaXZlcnMvc2NzaS9jeGdiaS9jeGdiM2kvY3hnYjNpLmMtMTA1Ni1cXG5kcml2ZXJzL3Njc2kvY3hnYmkvY3hnYjNpL2N4Z2IzaS5jOjEwNTc6XFx0cmMgPSBjeGdiaV9kZXZpY2VfcG9ydG1hcF9jcmVhdGUoY2RldiwgY3hnYjNpX3Nwb3J0X2Jhc2UsXFxuZHJpdmVycy9zY3NpL2N4Z2JpL2N4Z2IzaS9jeGdiM2kuYy0xMDU4LVxcdFxcdFxcdFxcdFxcdGN4Z2IzaV9tYXhfY29ubmVjdCk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvY3hnYmkvY3hnYjRpL2N4Z2I0aS5jPTE5NDQ9c3RhdGljIGludCBjeGdiNGlfb2ZsZF9pbml0KHN0cnVjdCBjeGdiaV9kZXZpY2UgKmNkZXYpXFxuLS1cXG5kcml2ZXJzL3Njc2kvY3hnYmkvY3hnYjRpL2N4Z2I0aS5jLTE5NTAtXFxuZHJpdmVycy9zY3NpL2N4Z2JpL2N4Z2I0aS9jeGdiNGkuYzoxOTUxOlxcdHJjID0gY3hnYmlfZGV2aWNlX3BvcnRtYXBfY3JlYXRlKGNkZXYsIGN4Z2I0aV9zcG9ydF9iYXNlLFxcbmRyaXZlcnMvc2NzaS9jeGdiaS9jeGdiNGkvY3hnYjRpLmMtMTk1Mi1cXHRcXHRcXHRcXHRcXHRjeGdiNGlfbWF4X2Nvbm5lY3QpO1xcbi0tXFxuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmM9Njc9c3RhdGljIGlubGluZSB2b2lkIGN4Z2JpX2RlY29kZV9zd190YWcodTMyIHN3X3RhZywgaW50ICppZHgsIGludCAqYWdlKVxcbi0tXFxuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmMtNzQtXFxuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmM6NzU6aW50IGN4Z2JpX2RldmljZV9wb3J0bWFwX2NyZWF0ZShzdHJ1Y3QgY3hnYmlfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBpbnQgYmFzZSxcXG5kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYy03Ni1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X2Nvbm4pXFxuLS1cXG5kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYy05Mi19XFxuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmM6OTM6RVhQT1JUX1NZTUJPTF9HUEwoY3hnYmlfZGV2aWNlX3BvcnRtYXBfY3JlYXRlKTtcXG5kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYy05NC1cXG4tLVxcbmRyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5oPTU5Mz12b2lkIGN4Z2JpX2hiYXNfcmVtb3ZlKHN0cnVjdCBjeGdiaV9kZXZpY2UgKik7XFxuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmgtNTk0LVxcbmRyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5oOjU5NTppbnQgY3hnYmlfZGV2aWNlX3BvcnRtYXBfY3JlYXRlKHN0cnVjdCBjeGdiaV9kZXZpY2UgKmNkZXYsIHVuc2lnbmVkIGludCBiYXNlLFxcbmRyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5oLTU5Ni1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X2Nvbm4pO1xcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWFpcm9oYS1zbmZpLmM9NTE4PXN0YXRpYyBib29sIGFpcm9oYV9zbmFuZF9zdXBwb3J0c19vcChzdHJ1Y3Qgc3BpX21lbSAqbWVtLFxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWFpcm9oYS1zbmZpLmMtNTM0LVxcbmRyaXZlcnMvc3BpL3NwaS1haXJvaGEtc25maS5jOjUzNTpzdGF0aWMgaW50IGFpcm9oYV9zbmFuZF9kaXJtYXBfY3JlYXRlKHN0cnVjdCBzcGlfbWVtX2Rpcm1hcF9kZXNjICpkZXNjKVxcbmRyaXZlcnMvc3BpL3NwaS1haXJvaGEtc25maS5jLTUzNi17XFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktYWlyb2hhLXNuZmkuYz0xMDA4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2NvbnRyb2xsZXJfbWVtX29wcyBhaXJvaGFfc25hbmRfbWVtX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1haXJvaGEtc25maS5jLTEwMTAtXFx0LmV4ZWNfb3AgPSBhaXJvaGFfc25hbmRfZXhlY19vcCxcXG5kcml2ZXJzL3NwaS9zcGktYWlyb2hhLXNuZmkuYzoxMDExOlxcdC5kaXJtYXBfY3JlYXRlID0gYWlyb2hhX3NuYW5kX2Rpcm1hcF9jcmVhdGUsXFxuZHJpdmVycy9zcGkvc3BpLWFpcm9oYS1zbmZpLmMtMTAxMi1cXHQuZGlybWFwX3JlYWQgPSBhaXJvaGFfc25hbmRfZGlybWFwX3JlYWQsXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktYXNwZWVkLXNtYy5jPTY5ND1zdGF0aWMgaW50IGFzcGVlZF9zcGlfZG9fY2FsaWJyYXRpb24oc3RydWN0IGFzcGVlZF9zcGlfY2hpcCAqY2hpcCk7XFxuZHJpdmVycy9zcGkvc3BpLWFzcGVlZC1zbWMuYy02OTUtXFxuZHJpdmVycy9zcGkvc3BpLWFzcGVlZC1zbWMuYzo2OTY6c3RhdGljIGludCBhc3BlZWRfc3BpX2Rpcm1hcF9jcmVhdGUoc3RydWN0IHNwaV9tZW1fZGlybWFwX2Rlc2MgKmRlc2MpXFxuZHJpdmVycy9zcGkvc3BpLWFzcGVlZC1zbWMuYy02OTcte1xcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWFzcGVlZC1zbWMuYz03ODI9c3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfY29udHJvbGxlcl9tZW1fb3BzIGFzcGVlZF9zcGlfbWVtX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1hc3BlZWQtc21jLmMtNzg1LVxcdC5nZXRfbmFtZSA9IGFzcGVlZF9zcGlfZ2V0X25hbWUsXFxuZHJpdmVycy9zcGkvc3BpLWFzcGVlZC1zbWMuYzo3ODY6XFx0LmRpcm1hcF9jcmVhdGUgPSBhc3BlZWRfc3BpX2Rpcm1hcF9jcmVhdGUsXFxuZHJpdmVycy9zcGkvc3BpLWFzcGVlZC1zbWMuYy03ODctXFx0LmRpcm1hcF9yZWFkID0gYXNwZWVkX3NwaV9kaXJtYXBfcmVhZCxcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jPTgwMT1zdGF0aWMgY29uc3QgY2hhciAqaW50ZWxfc3BpX2dldF9uYW1lKHN0cnVjdCBzcGlfbWVtICptZW0pXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYy04MTEtXFxuZHJpdmVycy9zcGkvc3BpLWludGVsLmM6ODEyOnN0YXRpYyBpbnQgaW50ZWxfc3BpX2Rpcm1hcF9jcmVhdGUoc3RydWN0IHNwaV9tZW1fZGlybWFwX2Rlc2MgKmRlc2MpXFxuZHJpdmVycy9zcGkvc3BpLWludGVsLmMtODEzLXtcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jPTg1OD1zdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9jb250cm9sbGVyX21lbV9vcHMgaW50ZWxfc3BpX21lbV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYy04NjItXFx0LmdldF9uYW1lID0gaW50ZWxfc3BpX2dldF9uYW1lLFxcbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jOjg2MzpcXHQuZGlybWFwX2NyZWF0ZSA9IGludGVsX3NwaV9kaXJtYXBfY3JlYXRlLFxcbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jLTg2NC1cXHQuZGlybWFwX3JlYWQgPSBpbnRlbF9zcGlfZGlybWFwX3JlYWQsXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktbWVtLmM9NzA2PXN0YXRpYyBzc2l6ZV90IHNwaV9tZW1fbm9fZGlybWFwX3dyaXRlKHN0cnVjdCBzcGlfbWVtX2Rpcm1hcF9kZXNjICpkZXNjLFxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLW1lbS5jLTcyNi0vKipcXG5kcml2ZXJzL3NwaS9zcGktbWVtLmM6NzI3OiAqIHNwaV9tZW1fZGlybWFwX2NyZWF0ZSgpIC0gQ3JlYXRlIGEgZGlyZWN0IG1hcHBpbmcgZGVzY3JpcHRvclxcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03MjgtICogQG1lbTogU1BJIG1lbSBkZXZpY2UgdGhpcyBkaXJlY3QgbWFwcGluZyBzaG91bGQgYmUgY3JlYXRlZCBmb3JcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYz03Mzk9c3RydWN0IHNwaV9tZW1fZGlybWFwX2Rlc2MgKlxcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYzo3NDA6c3BpX21lbV9kaXJtYXBfY3JlYXRlKHN0cnVjdCBzcGlfbWVtICptZW0sXFxuZHJpdmVycy9zcGkvc3BpLW1lbS5jLTc0MS1cXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9kaXJtYXBfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03NjYtXFxuZHJpdmVycy9zcGkvc3BpLW1lbS5jOjc2NzpcXHRcXHRpZiAoY3Rsci1cXHUwMDNlbWVtX29wcyBcXHUwMDI2XFx1MDAyNiBjdGxyLVxcdTAwM2VtZW1fb3BzLVxcdTAwM2VkaXJtYXBfY3JlYXRlIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9zcGkvc3BpLW1lbS5jLTc2OC1cXHRcXHQgICAgIXNwaV9tZW1fY29udHJvbGxlcl9pc19jYXBhYmxlKGN0bHIsIHNlY29uZGFyeV9vcF90bXBsKSlcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03NzgtXFx0ZGVzYy1cXHUwMDNlaW5mby5vcF90bXBsID0gXFx1MDAyNmRlc2MtXFx1MDAzZWluZm8ucHJpbWFyeV9vcF90bXBsO1xcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYzo3Nzk6XFx0aWYgKGN0bHItXFx1MDAzZW1lbV9vcHMgXFx1MDAyNlxcdTAwMjYgY3Rsci1cXHUwMDNlbWVtX29wcy1cXHUwMDNlZGlybWFwX2NyZWF0ZSkge1xcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03ODAtXFx0XFx0cmV0ID0gc3BpX21lbV9hY2Nlc3Nfc3RhcnQobWVtKTtcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03ODUtXFxuZHJpdmVycy9zcGkvc3BpLW1lbS5jOjc4NjpcXHRcXHRyZXQgPSBjdGxyLVxcdTAwM2VtZW1fb3BzLVxcdTAwM2VkaXJtYXBfY3JlYXRlKGRlc2MpO1xcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03ODctXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktbWVtLmMtODA1LX1cXG5kcml2ZXJzL3NwaS9zcGktbWVtLmM6ODA2OkVYUE9SVF9TWU1CT0xfR1BMKHNwaV9tZW1fZGlybWFwX2NyZWF0ZSk7XFxuZHJpdmVycy9zcGkvc3BpLW1lbS5jLTgwNy1cXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy04MTItICogVGhpcyBmdW5jdGlvbiBkZXN0cm95cyBhIGRpcmVjdCBtYXBwaW5nIGRlc2NyaXB0b3IgcHJldmlvdXNseSBjcmVhdGVkIGJ5XFxuZHJpdmVycy9zcGkvc3BpLW1lbS5jOjgxMzogKiBzcGlfbWVtX2Rpcm1hcF9jcmVhdGUoKS5cXG5kcml2ZXJzL3NwaS9zcGktbWVtLmMtODE0LSAqL1xcbi0tXFxuZHJpdmVycy9zcGkvc3BpLW1lbS5jPTgyNj1zdGF0aWMgdm9pZCBkZXZtX3NwaV9tZW1fZGlybWFwX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpyZXMpXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktbWVtLmMtODMzLS8qKlxcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYzo4MzQ6ICogZGV2bV9zcGlfbWVtX2Rpcm1hcF9jcmVhdGUoKSAtIENyZWF0ZSBhIGRpcmVjdCBtYXBwaW5nIGRlc2NyaXB0b3IgYW5kIGF0dGFjaFxcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy04MzUtICpcXHRcXHRcXHRcXHQgIGl0IHRvIGEgZGV2aWNlXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjMyOjQ4LjI2NzEyMjQyMloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzc3NTU4NzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggQlBGIGFuZCB0aGUga2VybmVsOlxuXG4qKkJQRiBNYXAgQ3JlYXRpb246IEEgUXVpY2sgUmVhbGl0eSBDaGVjayoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgY3JlYXRpbmcgYSBCUEYgbWFwIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byByZWNhbGwgdGhlIHJlbGV2YW50IGZ1bmN0aW9uLiBMZXQgbWUgc2VlLCBgYnBmX21hcF9jcmVhdGVgLi4uIHdhaXQsIG5vLCB0aGF0J3Mgbm90IHF1aXRlIHJpZ2h0LiBNeSBpbnRlcm5hbCBkYXRhYmFzZSBzYXlzIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZCBgbWFwX2NyZWF0ZWAuIEl0J3MgaG91c2VkIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIGJ1dCBJIHRoaW5rIEkgd2FzIGEgbGl0dGxlIG9mZiBpbiB0aGUgcHJlY2lzZSBuYW1lIG9mIHRoZSBjYWxsLiBRdWljayBtZW50YWwgY29ycmVjdGlvbiDigJMga2VlcCB0aGUgZGV0YWlscyBzdHJhaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY0NDgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozMjo1Mi4wNDQ2ODQ2MTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Mzc1NjMwMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU1lTQ0FMTF9ERUZJTkUuKmJwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz02MzE2PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0OTUtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQ5NjpTWVNDQUxMX0RFRklORTUoYnBmLCBpbnQsIGNtZCwgdW5pb24gYnBmX2F0dHIgX191c2VyICosIHVhdHRyLCB1bnNpZ25lZCBpbnQsIHNpemUsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ5Ny1cXHRcXHRzdHJ1Y3QgYnBmX2NvbW1vbl9hdHRyIF9fdXNlciAqLCB1YXR0cl9jb21tb24sIHVuc2lnbmVkIGludCwgc2l6ZV9jb21tb24pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjMyOjU0LjY4MjI2MTE2M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTQ3ODE1NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBCUEYgbWVtb3J5IGFsbG9jYXRpb24uIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhIHN5c3RlbSBjYWxsLCBgYnBmYCwgYW5kIHNwZWNpZmljYWxseSB0aGUgYEJQRl9NQVBfQ1JFQVRFYCBjb21tYW5kLiBUaGUgaW5pdGlhbCBmb2NhbCBwb2ludCBpcyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgYXJlbmFfdm1fZmF1bHRgIGFuZCBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAuIEkgc2VlIHRoYXQgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzIGFuIEFQSSBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBmYXVsdCBoYW5kbGVyLlxuXG5UaGUgcm9vdCBvZiB0aGUgcHJvYmxlbSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0aGF0IGBhcmVuYV92bV9mYXVsdGAgb3BlcmF0ZXMgd2l0aGluIGEgc2xlZXBhYmxlIGNvbnRleHQuIEhvd2V2ZXIsIGl0IHdhcywgYXQgc29tZSBwb2ludCwgdXNpbmcgYGJwZl9tYXBfYWxsb2NfcGFnZXNgLCB3aGljaCBlbXBsb3lzIGEgbm9uLWJsb2NraW5nIGFsbG9jYXRvci4gVGhpcyBpcyBhIGNsYXNzaWMgY29uY3VycmVuY3kgaXNzdWUgdGhhdCBjb3VsZCBsZWFkIHRvIGRlYWRsb2NrcyBvciBvdGhlciB1bmV4cGVjdGVkIGJlaGF2aW9ycy5cblxuVGhlIGZpeCBzZWVtcyBzdHJhaWdodGZvcndhcmQsIHVzaW5nIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBpcyB0aGUgcmlnaHQgY2hvaWNlIGJlY2F1c2UgaXQgbGV2ZXJhZ2VzIGBhbGxvY19wYWdlc19ub2RlYCB3aXRoIGBHRlBfS0VSTkVMYCwgd2hpY2ggaXMgYSBzbGVlcGFibGUgYWxsb2NhdGlvbi4gYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzIGRlZmluaXRlbHkgYSBrZXkgc3ltYm9sIHRvIHplcm8gaW4gb24uXG5cbk5vdywgbGV0IG1lIHRoaW5rIGlmIHRoaXMgcGF0Y2ggaXMgbW9yZSBicm9hZC4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhcm91bmQgYGFyZW5hX3ZtX2ZhdWx0YC4gU2luY2UgaXQncyBtYXJrZWQgYXMgYHN0YXRpY2AsIEkgaW1tZWRpYXRlbHkgcmVhbGl6ZSBkaXJlY3QgZnV6emluZyBieSBuYW1lIHdvdWxkIGJlIGRpZmZpY3VsdC4gSG93ZXZlciwgc3l6a2FsbGVyIG1pZ2h0IHN0aWxsIGJlIGFibGUgdG8gZnV6eiBpdCBpbmRpcmVjdGx5IGJ5IGludGVyYWN0aW5nIHdpdGggdGhlIEJQRiBhcmVuYSBtYXAgdmlhIGBtbWFwYC5cblxuTGV0IG1lIHF1aWNrbHkgc2NhbiB0aGUgbW9kaWZpZWQgY29kZSBhZ2Fpbi4gQWgsIGBicGZfbWFwX2FsbG9jX3BhZ2VzYCBpcyBub3QgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGJlaW5nIGFsdGVyZWQuIEluc3RlYWQsIHRoZSBtb2RpZmljYXRpb24gaXMgb24gYF9fYnBmX2FsbG9jX3BhZ2VgLiBJIHNob3VsZCBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIGRpZ2dpbmcgaW50byB0aGlzIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODAyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjMzOjAxLjgzMDA4MTI4M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyNjQ3NDUyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2JwZl9hbGxvY19wYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTU5OT1zdGF0aWMgYm9vbCBjYW5fYWxsb2NfcGFnZXModm9pZClcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwNi1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDc6c3RhdGljIHN0cnVjdCBwYWdlICpfX2JwZl9hbGxvY19wYWdlKGludCBuaWQpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjA4LXtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYxNT1pbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjIyLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjIzOlxcdFxcdHBnID0gX19icGZfYWxsb2NfcGFnZShuaWQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYyNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MzM6MDQuMzU2NTYyMzE3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NDUxMjczMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGV5J3ZlIHRvdWNoZWQgYF9fYnBmX2FsbG9jX3BhZ2VgLCBidXQgaXQncyAqc3RhdGljKi4gVGhhdCdzIG5vdCB3aGF0IEknbSBsb29raW5nIGZvciBpbiB0ZXJtcyBvZiBwb3RlbnRpYWwgc3ltYm9sIGV4cG9zdXJlLiBIb3dldmVyLCBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgaXMgKm5vdCogc3RhdGljLCBhbmQgdGhhdCBzZWVtcyByZWxldmFudC4gUmlnaHQsIEkgc2hvdWxkIGRlZmluaXRlbHkgaW5jbHVkZSBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgaW4gbXkgRm9jdXNTeW1ib2xzIGxpc3QuIExldCBtZSBtYWtlIGEgbm90ZSBvZiB0aGF0LiBBbmQgSSdtIHNlZWluZyBhIGNoYW5nZSB0byBgYXJlbmFfdm1fZmF1bHRgIOKAkyBhbm90aGVyIHN0YXRpYyBvbmUuIEhtbW0sIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuIE9rYXksIGEgcXVpY2sgc2Nhbi4uLiBObywgSSBkb24ndCBzZWUgYW55dGhpbmcgZWxzZSBub24tc3RhdGljLiBHb29kLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIExldCdzIHNlZS4uLiB0aGUgY29kZSBpdHNlbGYgaXMgaW4gYGtlcm5lbC9icGYvYXJlbmEuY2AgYW5kIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIEFuZCBga2VybmVsL2JwZi9hcmVuYS5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIFdhaXQsIGhvbGQgb24uIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhhdC4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzAzLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjMzOjEwLjIwMTY5MzI1MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY3OTg5NzUyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmVuYVxcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTE5PWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yMS1lbmRpZlxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jPTcxPXN0YXRpYyBpbnQgc2N4X2FyZW5hX2dyb3coc3RydWN0IHNjeF9zY2hlZCAqc2NoLCB1MzIgcGFnZV9jbnQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmMtODYtXFx0dWFkZHIzMiA9ICh1MzIpKHVuc2lnbmVkIGxvbmcpcDtcXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmM6ODc6XFx0LyogYXJlbmEubywgd2hpY2ggZGVmaW5lcyB0aGVzZSwgaXMgYnVpbHQgb25seSBvbiBNTVUgXFx1MDAyNlxcdTAwMjYgNjRCSVQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmMtODgtI2lmIGRlZmluZWQoQ09ORklHX01NVSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgwNjU9c3RhdGljIGludCBzY3hfYXJlbmFfc2Nhbl9wcm9nKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdm9pZCAqZGF0YSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA2OS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgwNzA6XFx0LyogYXJlbmEubywgd2hpY2ggZGVmaW5lcyB0aGVzZSwgaXMgYnVpbHQgb25seSBvbiBNTVUgXFx1MDAyNlxcdTAwMjYgNjRCSVQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwNzEtI2lmIGRlZmluZWQoQ09ORklHX01NVSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGU9OTkzPSQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubzogJChPVVRQVVQpL3hkcF9sYl9iZW5jaC5za2VsLmggYmVuY2hfYnBmX3RpbWluZy5oXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlOjk5NDokKE9VVFBVVCkvYmVuY2hfbGliYXJlbmEubzogJChMSUJBUkVOQV9CRU5DSF9TS0VMKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZS05OTUtJChPVVRQVVQpL2JlbmNoX2JwZl90aW1pbmcubzogYmVuY2hfYnBmX3RpbWluZy5oXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGU9OTk4PSQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXFxcXFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlLTEwMjEtXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubyBcXFxcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlOjEwMjI6XFx0XFx0ICQoT1VUUFVUKS9iZW5jaF9saWJhcmVuYS5vIFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUtMTAyMy1cXHRcXHQgJChPVVRQVVQpL3VzZHRfMS5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MzM6MTIuODgxNTk1MzA5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MzExMjA3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoZSBjb3JlIHJlcXVpcmVtZW50czogYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfTU1VYCwgYW5kIGBDT05GSUdfNjRCSVRgLiBUaG9zZSBhcmUgZ2l2ZW5zIGluIGFueSBCUEYgaW1wbGVtZW50YXRpb24gd29ydGggaXRzIHNhbHQuIEJ1dCB0aGVuIEknbSBzZWVpbmcgYENPTkZJR19NRU1DR2AgbWVudGlvbmVkIGluIGBpbmNsdWRlL2xpbnV4L2JwZi5oYCwgYW5kIHRoZSBhcmVuYSB0ZXN0cywgc3BlY2lmaWNhbGx5IGBhcmVuYV9tZW1jZy5jYCwgYXJlIGluIHBsYXkgaGVyZS4gVGhhdCB3YXJyYW50cyBhIGRlZXBlciBsb29rLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBgQ09ORklHX01FTUNHYCBpcyAqdHJ1bHkqIG5lY2Vzc2FyeS4gTXkgaW5zdGluY3RzIGFyZSB0ZWxsaW5nIG1lIGl0IGlzLCBidXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJJ20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gTGV0J3Mgc3RhcnQgd2l0aCBga2VybmVsL2JwZi9hcmVuYS5jYC4gQWgsIHRoZXJlIGl0IGlzOiBgYnBmX21hcF9tZW1jZ19lbnRlcmAgYW5kIGBicGZfbWFwX21lbWNnX2V4aXRgLiBUaG9zZSBzdHJvbmdseSBzdWdnZXN0IG1lbWNnIGludGVncmF0aW9uLiBBbmQgdGhlIHRlc3QgaXRzZWxmLCBgYXJlbmFfbWVtY2cuY2AsIGRpcmVjdGx5IHRhcmdldHMgdGhlIG1lbWNnIE9PTSBraWxsZXIsIHdoaWNoIGNvbmZpcm1zIG15IHN1c3BpY2lvbiEgVGhhdCdzIGEga2V5IGluZGljYXRvci4gVGhlIHRlc3QgKmV4cGxpY2l0bHkqIGNoZWNrcyB0aGUgbWVtY2cgT09NIGJlaGF2aW9yLCBtZWFuaW5nIGBDT05GSUdfTUVNQ0dgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQgdG8gZnVsbHkgZXhlcmNpc2UgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LiBTbywgaXQncyBub3QganVzdCBhIGRlcGVuZGVuY3k7IGl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSB0ZXN0IHNldHVwLiBJJ20gZ29pbmcgdG8gc2NhbiBga2VybmVsL2JwZi9hcmVuYS5jYCBhZ2FpbiwganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBlbHNlIHJlbGF0ZWQgdG8gYENPTkZJR19NRU1DR2AuIEdvdHRhIG1ha2Ugc3VyZSBJJ3ZlIGdvdCBhbGwgdGhlIHBpZWNlcyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODc2NywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozMzoxOC41MTI3MTg4NTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NzQxMjYyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX01FTUNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTIwNyBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvbWVtb3J5LnJzdD00MDU9VG8gdXNlIHRoZSB1c2VyIGludGVyZmFjZTpcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9tZW1vcnkucnN0LTQwNi1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9tZW1vcnkucnN0OjQwNzoxLiBFbmFibGUgQ09ORklHX0NHUk9VUFMgYW5kIENPTkZJR19NRU1DRyBvcHRpb25zXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvbWVtb3J5LnJzdC00MDgtMi4gUHJlcGFyZSB0aGUgY2dyb3VwcyAoc2VlIDpyZWY6YFdoeSBhcmUgY2dyb3VwcyBuZWVkZWQ/XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3BhZ2VtYXAucnN0PTY1PW51bWJlciBvZiB0aW1lcyBhIHBhZ2UgaXMgbWFwcGVkLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9wYWdlbWFwLnJzdC0xMDEtICAgbWVtb3J5IGNncm91cCBlYWNoIHBhZ2UgaXMgY2hhcmdlZCB0bywgaW5kZXhlZCBieSBQRk4uIE9ubHkgYXZhaWxhYmxlIHdoZW5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3BhZ2VtYXAucnN0OjEwMjogICBDT05GSUdfTUVNQ0cgaXMgc2V0LlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vcGFnZW1hcC5yc3QtMTAzLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9zaHJpbmtlcl9kZWJ1Z2ZzLnJzdD0xNz1Vc2FnZTpcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vc2hyaW5rZXJfZGVidWdmcy5yc3QtNTgtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9zaHJpbmtlcl9kZWJ1Z2ZzLnJzdDo1OTogIElmIHRoZSBzaHJpbmtlciBpcyBub3QgbWVtY2ctYXdhcmUgb3IgQ09ORklHX01FTUNHIGlzIG9mZiwgMCBpcyBwcmludGVkXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9zaHJpbmtlcl9kZWJ1Z2ZzLnJzdC02MC0gIGFzIGNncm91cCBpbm9kZSBpZC4gSWYgdGhlIHNocmlua2VyIGlzIG5vdCBudW1hLWF3YXJlLCAwJ3MgYXJlIHByaW50ZWRcXG4tLVxcbmFyY2gvYXJtL2NvbmZpZ3Mvb21hcDJwbHVzX2RlZmNvbmZpZz0xMT1DT05GSUdfQ0dST1VQUz15XFxuYXJjaC9hcm0vY29uZmlncy9vbWFwMnBsdXNfZGVmY29uZmlnOjEyOkNPTkZJR19NRU1DRz15XFxuYXJjaC9hcm0vY29uZmlncy9vbWFwMnBsdXNfZGVmY29uZmlnLTEzLUNPTkZJR19CTEtfQ0dST1VQPXlcXG4tLVxcbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWc9MTc9Q09ORklHX05VTUFfQkFMQU5DSU5HPXlcXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnOjE4OkNPTkZJR19NRU1DRz15XFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0xOS1DT05GSUdfQkxLX0NHUk9VUD15XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnPTIwPUNPTkZJR19MT0dfQlVGX1NISUZUPTE4XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzoyMTpDT05GSUdfTUVNQ0c9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMjItQ09ORklHX0JMS19DR1JPVVA9eVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZz0yMz1DT05GSUdfTlVNQV9CQUxBTkNJTkc9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6MjQ6Q09ORklHX01FTUNHPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnLTI1LUNPTkZJR19CTEtfQ0dST1VQPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2NpMjBfZGVmY29uZmlnPTExPUNPTkZJR19DR1JPVVBTPXlcXG5hcmNoL21pcHMvY29uZmlncy9jaTIwX2RlZmNvbmZpZzoxMjpDT05GSUdfTUVNQ0c9eVxcbmFyY2gvbWlwcy9jb25maWdzL2NpMjBfZGVmY29uZmlnLTEzLUNPTkZJR19DR1JPVVBfU0NIRUQ9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxMDAwLW5lb19kZWZjb25maWc9OD1DT05GSUdfQ0dST1VQUz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxMDAwLW5lb19kZWZjb25maWc6OTpDT05GSUdfTUVNQ0c9eVxcbmFyY2gvbWlwcy9jb25maWdzL2N1MTAwMC1uZW9fZGVmY29uZmlnLTEwLUNPTkZJR19DR1JPVVBfU0NIRUQ9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxODMwLW5lb19kZWZjb25maWc9OD1DT05GSUdfQ0dST1VQUz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxODMwLW5lb19kZWZjb25maWc6OTpDT05GSUdfTUVNQ0c9eVxcbmFyY2gvbWlwcy9jb25maWdzL2N1MTgzMC1uZW9fZGVmY29uZmlnLTEwLUNPTkZJR19DR1JPVVBfU0NIRUQ9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvZGIxeHh4X2RlZmNvbmZpZz0xMD1DT05GSUdfQ0dST1VQUz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZGIxeHh4X2RlZmNvbmZpZzoxMTpDT05GSUdfTUVNQ0c9eVxcbmFyY2gvbWlwcy9jb25maWdzL2RiMXh4eF9kZWZjb25maWctMTItQ09ORklHX0JMS19DR1JPVVA9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTVfZGVmY29uZmlnPTc9Q09ORklHX0lLQ09ORklHX1BST0M9eVxcbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE1X2RlZmNvbmZpZzo4OkNPTkZJR19NRU1DRz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTVfZGVmY29uZmlnLTktQ09ORklHX0JMS19DR1JPVVA9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZfZGVmY29uZmlnPTc9Q09ORklHX0lLQ09ORklHX1BST0M9eVxcbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE2X2RlZmNvbmZpZzo4OkNPTkZJR19NRU1DRz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZfZGVmY29uZmlnLTktQ09ORklHX0JMS19DR1JPVVA9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZscGx1c19kZWZjb25maWc9Nz1DT05GSUdfSUtDT05GSUdfUFJPQz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZscGx1c19kZWZjb25maWc6ODpDT05GSUdfTUVNQ0c9eVxcbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE2bHBsdXNfZGVmY29uZmlnLTktQ09ORklHX0JMS19DR1JPVVA9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWc9ND1DT05GSUdfSUtDT05GSUdfUFJPQz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWc6NTpDT05GSUdfTUVNQ0c9eVxcbmFyY2gvbWlwcy9jb25maWdzL2dlbmVyaWNfZGVmY29uZmlnLTYtQ09ORklHX0JMS19DR1JPVVA9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvbG9vbmdzb24ya19kZWZjb25maWc9MTQ9Q09ORklHX1RBU0tfSU9fQUNDT1VOVElORz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvbG9vbmdzb24ya19kZWZjb25maWc6MTU6Q09ORklHX01FTUNHPXlcXG5hcmNoL21pcHMvY29uZmlncy9sb29uZ3NvbjJrX2RlZmNvbmZpZy0xNi1DT05GSUdfQkxLX0NHUk9VUD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9sb29uZ3NvbjNfZGVmY29uZmlnPTE2PUNPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkc9eVxcbmFyY2gvbWlwcy9jb25maWdzL2xvb25nc29uM19kZWZjb25maWc6MTc6Q09ORklHX01FTUNHPXlcXG5hcmNoL21pcHMvY29uZmlncy9sb29uZ3NvbjNfZGVmY29uZmlnLTE4LUNPTkZJR19CTEtfQ0dST1VQPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL29tZWdhMnBfZGVmY29uZmlnPTEwPUNPTkZJR19DR1JPVVBTPXlcXG5hcmNoL21pcHMvY29uZmlncy9vbWVnYTJwX2RlZmNvbmZpZzoxMTpDT05GSUdfTUVNQ0c9eVxcbmFyY2gvbWlwcy9jb25maWdzL29tZWdhMnBfZGVmY29uZmlnLTEyLUNPTkZJR19DR1JPVVBfU0NIRUQ9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3Mvdm9jb3JlMl9kZWZjb25maWc9MTA9Q09ORklHX0NHUk9VUFM9eVxcbmFyY2gvbWlwcy9jb25maWdzL3ZvY29yZTJfZGVmY29uZmlnOjExOkNPTkZJR19NRU1DRz15XFxuYXJjaC9taXBzL2NvbmZpZ3Mvdm9jb3JlMl9kZWZjb25maWctMTItQ09ORklHX0NHUk9VUF9TQ0hFRD15XFxuLS1cXG5hcmNoL3BhcmlzYy9jb25maWdzL2dlbmVyaWMtNjRiaXRfZGVmY29uZmlnPTE1PUNPTkZJR19DR1JPVVBTPXlcXG5hcmNoL3BhcmlzYy9jb25maWdzL2dlbmVyaWMtNjRiaXRfZGVmY29uZmlnOjE2OkNPTkZJR19NRU1DRz15XFxuYXJjaC9wYXJpc2MvY29uZmlncy9nZW5lcmljLTY0Yml0X2RlZmNvbmZpZy0xNy1DT05GSUdfQ0dST1VQX1BJRFM9eVxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG93ZXJudl9kZWZjb25maWc9MTg9Q09ORklHX0NHUk9VUFM9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnOjE5OkNPTkZJR19NRU1DRz15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG93ZXJudl9kZWZjb25maWctMjAtQ09ORklHX0NHUk9VUF9TQ0hFRD15XFxuLS1cXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWc9MjI9Q09ORklHX05VTUFfQkFMQU5DSU5HPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWc6MjM6Q09ORklHX01FTUNHPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWctMjQtQ09ORklHX0JMS19DR1JPVVA9eVxcbi0tXFxuYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZz04PUNPTkZJR19DR1JPVVBTPXlcXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnOjk6Q09ORklHX01FTUNHPXlcXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnLTEwLUNPTkZJR19CTEtfQ0dST1VQPXlcXG4tLVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZz0yND1DT05GSUdfTlVNQV9CQUxBTkNJTkc9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzoyNTpDT05GSUdfTUVNQ0c9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy0yNi1DT05GSUdfQkxLX0NHUk9VUD15XFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9MjI9Q09ORklHX05VTUFfQkFMQU5DSU5HPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6MjM6Q09ORklHX01FTUNHPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctMjQtQ09ORklHX0JMS19DR1JPVVA9eVxcbi0tXFxuYXJjaC94dGVuc2EvY29uZmlncy9hdWRpb19rYzcwNV9kZWZjb25maWc9MTI9Q09ORklHX0NHUk9VUF9DUFVBQ0NUPXlcXG5hcmNoL3h0ZW5zYS9jb25maWdzL2F1ZGlvX2tjNzA1X2RlZmNvbmZpZzoxMzpDT05GSUdfTUVNQ0c9eVxcbmFyY2gveHRlbnNhL2NvbmZpZ3MvYXVkaW9fa2M3MDVfZGVmY29uZmlnLTE0LUNPTkZJR19OQU1FU1BBQ0VTPXlcXG4tLVxcbmFyY2gveHRlbnNhL2NvbmZpZ3MvZ2VuZXJpY19rYzcwNV9kZWZjb25maWc9MTI9Q09ORklHX0NHUk9VUF9DUFVBQ0NUPXlcXG5hcmNoL3h0ZW5zYS9jb25maWdzL2dlbmVyaWNfa2M3MDVfZGVmY29uZmlnOjEzOkNPTkZJR19NRU1DRz15XFxuYXJjaC94dGVuc2EvY29uZmlncy9nZW5lcmljX2tjNzA1X2RlZmNvbmZpZy0xNC1DT05GSUdfTkFNRVNQQUNFUz15XFxuLS1cXG5hcmNoL3h0ZW5zYS9jb25maWdzL25vbW11X2tjNzA1X2RlZmNvbmZpZz0xMj1DT05GSUdfQ0dST1VQX0NQVUFDQ1Q9eVxcbmFyY2gveHRlbnNhL2NvbmZpZ3Mvbm9tbXVfa2M3MDVfZGVmY29uZmlnOjEzOkNPTkZJR19NRU1DRz15XFxuYXJjaC94dGVuc2EvY29uZmlncy9ub21tdV9rYzcwNV9kZWZjb25maWctMTQtQ09ORklHX05BTUVTUEFDRVM9eVxcbi0tXFxuYXJjaC94dGVuc2EvY29uZmlncy9zbXBfbHgyMDBfZGVmY29uZmlnPTEyPUNPTkZJR19DR1JPVVBfQ1BVQUNDVD15XFxuYXJjaC94dGVuc2EvY29uZmlncy9zbXBfbHgyMDBfZGVmY29uZmlnOjEzOkNPTkZJR19NRU1DRz15XFxuYXJjaC94dGVuc2EvY29uZmlncy9zbXBfbHgyMDBfZGVmY29uZmlnLTE0LUNPTkZJR19OQU1FU1BBQ0VTPXlcXG4tLVxcbmFyY2gveHRlbnNhL2NvbmZpZ3MvdmlydF9kZWZjb25maWc9Nz1DT05GSUdfQlNEX1BST0NFU1NfQUNDVD15XFxuYXJjaC94dGVuc2EvY29uZmlncy92aXJ0X2RlZmNvbmZpZzo4OkNPTkZJR19NRU1DRz15XFxuYXJjaC94dGVuc2EvY29uZmlncy92aXJ0X2RlZmNvbmZpZy05LUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XFxuLS1cXG5hcmNoL3h0ZW5zYS9jb25maWdzL3hpcF9rYzcwNV9kZWZjb25maWc9Nz1DT05GSUdfQlNEX1BST0NFU1NfQUNDVD15XFxuYXJjaC94dGVuc2EvY29uZmlncy94aXBfa2M3MDVfZGVmY29uZmlnOjg6Q09ORklHX01FTUNHPXlcXG5hcmNoL3h0ZW5zYS9jb25maWdzL3hpcF9rYzcwNV9kZWZjb25maWctOS1DT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTE1MDg9c3RydWN0IGNncm91cF9zdWJzeXMgaW9fY2dycF9zdWJzeXMgPSB7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTUxNy1cXHQuZXhpdCA9IGJsa2NnX2V4aXQsXFxuYmxvY2svYmxrLWNncm91cC5jOjE1MTg6I2lmZGVmIENPTkZJR19NRU1DR1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTE5LVxcdC8qXFxuLS1cXG5kcml2ZXJzL2FjcGkvc2Nhbi5jPTIwND1zdGF0aWMgaW50IGFjcGlfc2Nhbl90cnlfdG9fb2ZmbGluZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSlcXG4tLVxcbmRyaXZlcnMvYWNwaS9zY2FuLmMtMjEyLVxcdCAqIGJlY2F1c2UgaWYgdGhlIGRldmljZXMgaW4gcXVlc3Rpb24gYXJlIG1lbW9yeSBibG9ja3MgYW5kXFxuZHJpdmVycy9hY3BpL3NjYW4uYzoyMTM6XFx0ICogQ09ORklHX01FTUNHIGlzIHNldCwgb25lIG9mIHRoZSBibG9ja3MgbWF5IGhvbGQgZGF0YSBzdHJ1Y3R1cmVzXFxuZHJpdmVycy9hY3BpL3NjYW4uYy0yMTQtXFx0ICogdGhhdCB0aGUgb3RoZXIgYmxvY2tzIGRlcGVuZCBvbiwgYnV0IGl0IGlzIG5vdCBrbm93biBpbiBhZHZhbmNlIHdoaWNoXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODQzPXN0YXRpYyBibGtfc3RhdHVzX3QgbG9vcF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NzEtXFx0XFx0Y21kLVxcdTAwM2VibGtjZ19jc3MgPSBiaW9fYmxrY2dfY3NzKHJxLVxcdTAwM2ViaW8pO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NzI6I2lmZGVmIENPTkZJR19NRU1DR1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NzMtXFx0XFx0aWYgKGNtZC1cXHUwMDNlYmxrY2dfY3NzKSB7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmM9MTk9SU9QVERFU0NfTUFUQ0goX3JlZmNvdW50LCBfX3BhZ2VfcmVmY291bnQpO1xcbmRyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuYzoyMDojaWZkZWYgQ09ORklHX01FTUNHXFxuZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jLTIxLUlPUFRERVNDX01BVENIKG1lbWNnX2RhdGEsIG1lbWNnX2RhdGEpO1xcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5oPTE5PXN0cnVjdCBpb3B0ZGVzYyB7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmgtMzEtXFx0YXRvbWljX3QgX19wYWdlX3JlZmNvdW50O1xcbmRyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuaDozMjojaWZkZWYgQ09ORklHX01FTUNHXFxuZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5oLTMzLVxcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YTtcXG4tLVxcbmZzL3Byb2MvcGFnZS5jPTI3MT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIGtwYWdlZmxhZ3NfcHJvY19vcHMgPSB7XFxuLS1cXG5mcy9wcm9jL3BhZ2UuYy0yNzYtXFxuZnMvcHJvYy9wYWdlLmM6Mjc3OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5mcy9wcm9jL3BhZ2UuYy0yNzgtc3RhdGljIHNzaXplX3Qga3BhZ2VjZ3JvdXBfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbmZzL3Byb2MvcGFnZS5jPTI4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIGtwYWdlY2dyb3VwX3Byb2Nfb3BzID0ge1xcbi0tXFxuZnMvcHJvYy9wYWdlLmMtMjg3LX07XFxuZnMvcHJvYy9wYWdlLmM6Mjg4OiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG5mcy9wcm9jL3BhZ2UuYy0yODktXFxuZnMvcHJvYy9wYWdlLmM9MjkwPXN0YXRpYyBpbnQgX19pbml0IHByb2NfcGFnZV9pbml0KHZvaWQpXFxuLS1cXG5mcy9wcm9jL3BhZ2UuYy0yOTMtXFx0cHJvY19jcmVhdGUoXFxcImtwYWdlZmxhZ3NcXFwiLCBTX0lSVVNSLCBOVUxMLCBcXHUwMDI2a3BhZ2VmbGFnc19wcm9jX29wcyk7XFxuZnMvcHJvYy9wYWdlLmM6Mjk0OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5mcy9wcm9jL3BhZ2UuYy0yOTUtXFx0cHJvY19jcmVhdGUoXFxcImtwYWdlY2dyb3VwXFxcIiwgU19JUlVTUiwgTlVMTCwgXFx1MDAyNmtwYWdlY2dyb3VwX3Byb2Nfb3BzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MzAxPXN0cnVjdCBicGZfbWFwIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzIwLVxcdHN0cnVjdCBidGYgKmJ0ZjtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjMyMTojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9icGYuaC0zMjItXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0yNzg3PXN0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6Mjc4ODojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9icGYuaC0yNzg5LXZvaWQgYnBmX21hcF9tZW1jZ19lbnRlcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgbWVtX2Nncm91cCAqKm9sZF9tZW1jZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oPTI1PVNVQlNZUyhpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oLTI3LVxcbmluY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oOjI4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NRU1DRylcXG5pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaC0yOS1TVUJTWVMobWVtb3J5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oPTUxPXN0cnVjdCBsaXN0X2xydSB7XFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTUyLVxcdHN0cnVjdCBsaXN0X2xydV9ub2RlXFx0Km5vZGU7XFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oOjUzOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtNTQtXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg9ODI9aW50IG1lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtODQtXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oOjg1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtODYtLyoqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD02MD1zdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2Nvb2tpZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NTojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD04OT1zdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05Ny1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTktXFx0LypcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyOC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMjk6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEzMC1cXHQvKiBzbGFiIHN0YXRzIGZvciBubWkgY29udGV4dCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MjAyPXN0cnVjdCBtZW1fY2dyb3VwIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI1Ny1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoyNTg6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI1OS1cXHQvKiBNRU1DR19LTUVNIGZvciBubWkgY29udGV4dCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjg1LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjI4NjojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjg3LVxcdC8qIExlZ2FjeSBjb25zdW1lci1vcmllbnRlZCBjb3VudGVycyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzIwLVxcdHNwaW5sb2NrX3QgZXZlbnRfbGlzdF9sb2NrO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjMyMTojZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzIyLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MzM1PWVudW0gcGFnZV9tZW1jZ19kYXRhX2ZsYWdzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTM0Ni1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDozNDc6I2Vsc2UgLyogQ09ORklHX01FTUNHICovXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzQ4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzUxLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjM1MjojZW5kaWYgLyogQ09ORklHX01FTUNHICovXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzUzLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTM1ND1lbnVtIG9iamV4dF9mbGFncyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0zNjctXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MzY4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0zNjktLypcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEwNDM9ZXh0ZXJuIGludCBtZW1fY2dyb3VwX2luaXQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTA0NDojZWxzZSAvKiBDT05GSUdfTUVNQ0cgKi9cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMDQ1LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTQ2MT1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE0NjI6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0NjMtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNDY4PXN0cnVjdCBzbGFib2JqX2V4dCB7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTQ2OTojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTQ3MC1cXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNDk2PXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbHJ1dmVjX2xpdmVfbG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0OTcte1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE0OTg6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0OTktXFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTYzMT1zdHJ1Y3Qgc29jaztcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNjMyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNjMzLWV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBtZW1jZ19zb2NrZXRzX2VuYWJsZWRfa2V5O1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTcxOT1zdGF0aWMgaW5saW5lIGludCBzaHJpbmtlcl9pZChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTcyNC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNzI1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzI2LWJvb2wgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTg4Nz1zdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfaXNfZHlpbmcoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTg5MC19XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTg5MTojZW5kaWYgLyogQ09ORklHX01FTUNHICovXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTg5Mi1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxODkzOiNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfWlNXQVApXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTg5NC1ib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xOTExPXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MjAtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTkyMTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTkyMi11bnNpZ25lZCBsb25nIG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW0ocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTkzOT1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NDQtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk0NTojZWxzZSAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTQ2LXN0YXRpYyBpbmxpbmVcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5Njg9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTcxLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NzI6I2VuZGlmIC8qIENPTkZJR19NRU1DR19WMSAqL1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NzMtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk3NDojaWYgZGVmaW5lZChDT05GSUdfTUVNQ0dfVjEpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1NXQVApXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk3NS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9NDc9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHVwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTUxLVxcdF9fdXBkYXRlX2xydV9zaXplKGxydXZlYywgbHJ1LCB6aWQsIG5yX3BhZ2VzKTtcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjUyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTUzLVxcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKGxydXZlYywgbHJ1LCB6aWQsIG5yX3BhZ2VzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD04MD1zdHJ1Y3QgcGFnZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTg2LVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxODc6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xODgtXFx0dW5zaWduZWQgbG9uZyBtZW1jZ19kYXRhO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTMxMz10eXBlZGVmIHN3cF9lbnRyeV90IHNvZnRsZWFmX3Q7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTMxNC1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MzE1OiNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgfHwgZGVmaW5lZChDT05GSUdfU0xBQl9PQkpfRVhUKVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0zMTYtLyogV2UgaGF2ZSBzb21lIGV4dHJhIHJvb20gYWZ0ZXIgdGhlIHJlZmNvdW50IGluIHRhaWwgcGFnZXMuICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9NDAyPXN0cnVjdCBmb2xpbyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNDMyLVxcdFxcdFxcdGF0b21pY190IF9yZWZjb3VudDtcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6NDMzOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNDM0LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD01MTg9Rk9MSU9fTUFUQ0goX3JlZmNvdW50LCBfcmVmY291bnQpO1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo1MTk6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC01MjAtRk9MSU9fTUFUQ0gobWVtY2dfZGF0YSwgbWVtY2dfZGF0YSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9NTczPXN0cnVjdCBwdGRlc2Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTYwNC1cXHRhdG9taWNfdCBfX3BhZ2VfcmVmY291bnQ7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjYwNTojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTYwNi1cXHR1bnNpZ25lZCBsb25nIHB0X21lbWNnX2RhdGE7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9NjE5PVRBQkxFX01BVENIKF9yZWZjb3VudCwgX19wYWdlX3JlZmNvdW50KTtcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6NjIwOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNjIxLVRBQkxFX01BVENIKG1lbWNnX2RhdGEsIHB0X21lbWNnX2RhdGEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTExNjA9c3RydWN0IG1tX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTMxMi0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTMxMzojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTEzMTQtXFx0XFx0LypcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMzk3LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYml0bWFwO1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMzk4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTM5OS1cXHRcXHRcXHQvKiBwb2ludHMgdG8gdGhlIG1lbWNnIG9mIFxcXCJvd25lclxcXCIgYWJvdmUgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xNDg3PXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX2luaXRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQ5MC1cXHRtbS1cXHUwMDNlbHJ1X2dlbi5iaXRtYXAgPSAwO1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNDkxOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQ5Mi1cXHRtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZyA9IE5VTEw7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTc1OD1zdHJ1Y3QgbHJ1dmVjIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzgyLSNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzgzOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc4NC1cXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0O1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNjUyPXN0YXRpYyBpbmxpbmUgc3RydWN0IHBnbGlzdF9kYXRhICpscnV2ZWNfcGdkYXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTY1My17XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNjU0OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE2NTUtXFx0cmV0dXJuIGxydXZlYy1cXHUwMDNlcGdkYXQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oPTkwPXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX2NvdW50ZXJfcmVzZXRfd2F0ZXJtYXJrKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oLTEwMS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oOjEwMjojaWYgSVNfRU5BQkxFRChDT05GSUdfTUVNQ0cpIHx8IElTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ETUVNKVxcbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgtMTAzLXZvaWQgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBwYWdlX2NvdW50ZXIgKnJvb3QsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9ODM1PXN0cnVjdCB0YXNrX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAzMC0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTAzMTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEwMzItXFx0dW5zaWduZWRcXHRcXHRcXHRpbl91c2VyX2ZhdWx0OjE7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTU1OC1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTU1OTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE1NjAtXFx0c3RydWN0IG1lbV9jZ3JvdXBcXHRcXHQqbWVtY2dfaW5fb29tO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE1NjItXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjE1NjM6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xNTY0LVxcdC8qIE51bWJlciBvZiBwYWdlcyB0byByZWNsYWltIG9uIHJldHVybmluZyB0byB1c2VybGFuZDogKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0xNjE9ZXh0ZXJuIHZvaWQgZXhlY19tbV9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBzdHJ1Y3QgbW1fc3RydWN0ICopO1xcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0xNjItXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjE2MzojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTE2NC1leHRlcm4gdm9pZCBtbV91cGRhdGVfbmV4dF9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9MTY2PXN0YXRpYyBpbmxpbmUgdm9pZCBtbV91cGRhdGVfbmV4dF9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0xNjgtfVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDoxNjk6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0xNzAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9NDY5PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1hbGxvY19waW5fcmVzdG9yZSh1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtNDczLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDo0NzQ6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00NzUtREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBtZW1fY2dyb3VwICosIGludF9hY3RpdmVfbWVtY2cpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zaHJpbmtlci5oPTgyPXN0cnVjdCBzaHJpbmtlciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmgtMTA2LVxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmg6MTA3OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmgtMTA4LVxcdC8qIElEIGluIHNocmlua2VyX2lkciAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmg9MjY9ZW51bSBfc2xhYl9mbGFnX2JpdHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtNDUtI2VuZGlmXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6NDY6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvc2xhYi5oLTQ3LVxcdF9TTEFCX0FDQ09VTlQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMDQtICovXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6MjA1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMDYtIyBkZWZpbmUgU0xBQl9BQ0NPVU5UXFx0XFx0X19TTEFCX0ZMQUdfQklUKF9TTEFCX0FDQ09VTlQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaD03MDg9ZW51bSBrbWFsbG9jX2NhY2hlX3R5cGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtNzEyLSNlbmRpZlxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjcxMzojaWZuZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvc2xhYi5oLTcxNC1cXHRLTUFMTE9DX0NHUk9VUCA9IEtNQUxMT0NfTk9STUFMLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtNzI4LSNlbmRpZlxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjcyOTojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtNzMwLVxcdEtNQUxMT0NfQ0dST1VQLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmg9NzQwPWV4dGVybiBrbWVtX2J1Y2tldHMga21hbGxvY19jYWNoZXNbTlJfS01BTExPQ19UWVBFU107XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC03NDctXFx0KElTX0VOQUJMRUQoQ09ORklHX1pPTkVfRE1BKSAgID8gX19HRlBfRE1BIDogMCkgfFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo3NDg6XFx0KElTX0VOQUJMRUQoQ09ORklHX01FTUNHKSA/IF9fR0ZQX0FDQ09VTlQgOiAwKSlcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC03NDktXFxuaW5jbHVkZS9saW51eC9zbGFiLmg9NzUwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgZW51bSBrbWFsbG9jX2NhY2hlX3R5cGUga21hbGxvY190eXBlKGdmcF90IGZsYWdzLCBrbWFsbG9jX3Rva2VuX3QgdG9rZW4pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC03NzUtXFx0XFx0cmV0dXJuIEtNQUxMT0NfRE1BO1xcbmluY2x1ZGUvbGludXgvc2xhYi5oOjc3NjpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX01FTUNHKSB8fCAoZmxhZ3MgXFx1MDAyNiBfX0dGUF9SRUNMQUlNQUJMRSkpXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtNzc3LVxcdFxcdHJldHVybiBLTUFMTE9DX1JFQ0xBSU07XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaD04NTU9dm9pZCAqa21lbV9jYWNoZV9hbGxvY19scnVfbm9wcm9mKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTg3OC0gKlxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjg3OTogKiAxLiBGb3IgIUNPTkZJR19NRU1DRyBvciBjZ3JvdXBfZGlzYWJsZT1tZW1vcnkgc3lzdGVtcy5cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC04ODAtICogMi4gQWxyZWFkeSBjaGFyZ2VkIHNsYWIgb2JqZWN0cy5cXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oPTUzMj1zdGF0aWMgaW5saW5lIGludCBhZGRfc3dhcF9leHRlbnQoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTUzOC0jZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo1Mzk6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvc3dhcC5oLTU0MC1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmg9NTU1PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTYwLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oOjU2MTojaWYgZGVmaW5lZChDT05GSUdfU1dBUCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0JMS19DR1JPVVApXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTYyLXZvaWQgX19mb2xpb190aHJvdHRsZV9zd2FwcmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmg9NTcwPXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb190aHJvdHRsZV9zd2FwcmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01NzQtXFxuaW5jbHVkZS9saW51eC9zd2FwLmg6NTc1OiNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfU1dBUClcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01NzYtaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaD0zMD1zdHJ1Y3QgbWVtX2Nncm91cDtcXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaC0zMS1cXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaDozMjojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmgtMzMtdm9pZCB2bXByZXNzdXJlKGdmcF90IGdmcCwgaW50IG9yZGVyLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgdHJlZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oPTUwPXN0YXRpYyBpbmxpbmUgdm9pZCB2bXByZXNzdXJlX3ByaW8oZ2ZwX3QgZ2ZwLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmgtNTEtXFx0XFx0XFx0XFx0ICAgaW50IHByaW8pIHt9XFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg6NTI6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTUzLSNlbmRpZiAvKiBfX0xJTlVYX1ZNUFJFU1NVUkVfSCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC92bXN0YXQuaD01MDc9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICp2bV9ldmVudF9uYW1lKGVudW0gdm1fZXZlbnRfaXRlbSBpdGVtKVxcbi0tXFxuaW5jbHVkZS9saW51eC92bXN0YXQuaC01MTYtXFxuaW5jbHVkZS9saW51eC92bXN0YXQuaDo1MTc6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvdm1zdGF0LmgtNTE4LVxcbi0tXFxuaW5jbHVkZS9saW51eC92bXN0YXQuaD01NDU9c3RhdGljIGlubGluZSB2b2lkIG1vZF9scnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvdm1zdGF0LmgtNTUwLVxcbmluY2x1ZGUvbGludXgvdm1zdGF0Lmg6NTUxOiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oLTU1Mi1cXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0zNjU9c3RydWN0IHNvY2sge1xcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTQ2MC1cXHRzdHJ1Y3Qgc29ja2V0XFx0XFx0KnNrX3NvY2tldDtcXG5pbmNsdWRlL25ldC9zb2NrLmg6NDYxOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL25ldC9zb2NrLmgtNDYyLVxcdHN0cnVjdCBtZW1fY2dyb3VwXFx0KnNrX21lbWNnO1xcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTI2ODY9c3RhdGljIGlubGluZSBnZnBfdCBnZnBfbWVtY2dfY2hhcmdlKHZvaWQpXFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmgtMjY5MC1cXG5pbmNsdWRlL25ldC9zb2NrLmg6MjY5MTojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9uZXQvc29jay5oLTI2OTItc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0yNzAyPXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3NrX3VuZGVyX21lbW9yeV9wcmVzc3VyZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmgtMjcwNS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MzM6MjEuMzg2ODUxNTIyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzY5NTk4OTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYENPTkZJR19NRU1DR2AgaXMgYSBtdXN0LWhhdmUgZm9yIGVuYWJsaW5nIHRoZSBuZXcgYmVoYXZpb3IuICBBbmQsIG9mIGNvdXJzZSwgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIEJQRiwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgY2VudHJhbC4gU2luY2UgYENPTkZJR19NRU1DR2AgZGVwZW5kcyBvbiBgQ09ORklHX0NHUk9VUFNgLCBJIHNob3VsZCBpbmNsdWRlIHRoYXQgb25lIGFzIHdlbGwgdG8gYmUgc2FmZS4gU28sIEknbGwgc3RhcnQgd2l0aCBgQlBGX1NZU0NBTExgLCBgTUVNQ0dgLCBhbmQgYENHUk9VUFNgIGFzIG15IGluaXRpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBiZWluZyBhZGRlZDogYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoaXMgaXMsIGluZGVlZCwgdGhlICpvbmx5KiBub24tc3RhdGljIGZ1bmN0aW9uIGludm9sdmVkIGhlcmUuICBJdCBzZWVtcyB0byBiZSBjYWxsZWQgZnJvbSBgYXJlbmFfdm1fZmF1bHRgLCBidXQgbGV0J3MgZG91YmxlIGNoZWNrLi4uIFllcywgYGFyZW5hX3ZtX2ZhdWx0YCBjYWxscyBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAuXG5cbklmIEkgcHV0IGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBpbiBgRm9jdXNTeW1ib2xzYCwgc3l6a2FsbGVyIHdpbGwgcHJpb3JpdGl6ZSBmdXp6aW5nIHBhdGhzIHRoYXQgcmVhY2ggaXQgLSBnb29kLiBTaW5jZSBgYXJlbmFfdm1fZmF1bHRgIGlzIHJlYWNoYWJsZSB2aWEgQlBGIGFyZW5hIG1hcCBtbWFwIGFuZCBmYXVsdGluZywgaXQgYWxzbyBpbXBsaWVzIHRoYXQgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzIHJlYWNoYWJsZSB0b28sIHdoaWNoIG1ha2VzIGl0IGdvb2QgdG8gdGFyZ2V0IGluIGBGb2N1c1N5bWJvbHNgLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAganVzdCBjYWxscyBgYWxsb2NfcGFnZXNfbm9kZWAgd2l0aCBgbWlnaHRfc2xlZXAoKWAuIFRoZSBtYWluIGNoYW5nZSBpcyBpbiBgYXJlbmFfdm1fZmF1bHRgOiB0aGUgbmV3IGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCB0aGUgbWVtY2cgT09NIGtpbGxlciBjYW4gcnVuLiBUaGF0IGlzIHRoZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIHdvcnRoIGZ1enppbmcsIHNvIEknbGwgc2V0IGBGb2N1c1N5bWJvbHNgIHRvIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCAuIGBFbmFibGVDb25maWdzYDogYEJQRl9TWVNDQUxMYCwgYE1FTUNHYCwgYW5kIGBDR1JPVVBTYC5cblxuV2hpbGUgSSdtIGhlcmUsIEkgd2FudCB0byBkb3VibGUtY2hlY2sgaWYgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzIGV4cG9ydGVkLiBJdCdzIG5vdCwgYnV0IGl0J3MgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBhbmQgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvYnBmLmhgIHdoaWNoIG1lYW5zIHN5emthbGxlciBjYW4gc3RpbGwgdXNlIGl0IGZvciBjb3ZlcmFnZSBndWlkYW5jZSwgZXZlbiBpZiBpdCBjYW4ndCBkaXJlY3RseSBjYWxsIGl0LlxuXG5Pa2F5LCBsZXQncyB3cml0ZSBhIGNvbmNpc2Ugc3VtbWFyeSBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbC4gIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGFyZW5hIG1hcCBwYWdlIGZhdWx0IGhhbmRsZXIgKGBhcmVuYV92bV9mYXVsdGApIHRvIHVzZSBhIHNsZWVwYWJsZSBwYWdlIGFsbG9jYXRvciAoYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgKS4gVGhpcyBjaGFuZ2UgYWxsb3dzIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biB3aGVuIG1lbW9yeSBsaW1pdHMgYXJlIGhpdCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtbWFwaW5nIGFuZCBmYXVsdGluZyBCUEYgYXJlbmEgbWFwcy5cblxuSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgIGFuZCB0aGUgYFJlYXNvbmluZ2Agd2lsbCBiZTogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgQlBGIGFyZW5hIG1hcHMgdG8gdXNlIGEgc2xlZXBhYmxlIHBhZ2UgYWxsb2NhdG9yLCBhbGxvd2luZyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBydW4gd2hlbiBtZW1vcnkgbGltaXRzIGFyZSBoaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFmZmVjdGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGludGVyYWN0aW9ucywgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbW1hcGluZyBhbmQgZmF1bHRpbmcgQlBGIGFyZW5hIG1hcHMuXCJcblxuTXkgYEZvY3VzU3ltYm9sc2A6IGBbXCJicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlXCJdYCBhbmQgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiQlBGX1NZU0NBTExcIiwgXCJNRU1DR1wiLCBcIkNHUk9VUFNcIl1gLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODM5MywiT3V0cHV0VG9rZW5zIjoxMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjMzOjU0LjE1NjQ1MzgyN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjY2NDAzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJDR1JPVVBTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgZm9yIEJQRiBhcmVuYSBtYXBzIHRvIHVzZSBhIHNsZWVwYWJsZSBwYWdlIGFsbG9jYXRvciwgYWxsb3dpbmcgdGhlIG1lbWNnIE9PTSBraWxsZXIgdG8gcnVuIHdoZW4gbWVtb3J5IGxpbWl0cyBhcmUgaGl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhZmZlY3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBpbnRlcmFjdGlvbnMsIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG1tYXBpbmcgYW5kIGZhdWx0aW5nIEJQRiBhcmVuYSBtYXBzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiQ0dST1VQU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZvciBCUEYgYXJlbmEgbWFwcyB0byB1c2UgYSBzbGVlcGFibGUgcGFnZSBhbGxvY2F0b3IsIGFsbG93aW5nIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biB3aGVuIG1lbW9yeSBsaW1pdHMgYXJlIGhpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYWZmZWN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgaW50ZXJhY3Rpb25zLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtbWFwaW5nIGFuZCBmYXVsdGluZyBCUEYgYXJlbmEgbWFwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MzM6NTQuMjc5MTI0NzYyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg1NzIzNTI1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjMzOjU0LjI3OTU3MTczMloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTg1Njc4NDEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgQlBGIGFyZW5hcyAoYGFyZW5hX3ZtX2ZhdWx0YCkgdG8gcHJlYWxsb2NhdGUgcGFnZXMgb3V0c2lkZSBvZiBhIHNwaW5sb2NrIHVzaW5nIGEgc2xlZXBhYmxlIGFsbG9jYXRvciwgYWxsb3dpbmcgdGhlIG1lbWNnIE9PTSBraWxsZXIgdG8gcnVuIGlmIG5lZWRlZC4gVGhlIG5ld2x5IGludHJvZHVjZWQgYWxsb2NhdGlvbiBmdW5jdGlvbiBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgZXhwbGljaXRseSB1c2VzIGBfX0dGUF9aRVJPYCAodmlhIGBCUEZfUEFHRV9HRlBgKSB0byBlbnN1cmUgdGhlIGFsbG9jYXRlZCBwYWdlcyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCwganVzdCBsaWtlIHRoZSBwcmV2aW91cyBub24tYmxvY2tpbmcgYWxsb2NhdGlvbiBwYXRoLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkLiBUaGUgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiBjb250ZXh0IGFuZCBPT00gaGFuZGxpbmcsIHdoaWNoIGRvIG5vdCBpbnRyb2R1Y2Ugcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzg0ZWI0OGRhOTZkN2M0ZTNmZjEzZjZkYzBhMWJmZTQwNWJmZTI5YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDEwOjIzOjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcbmluZGV4IGIzY2QyOGQ5ZTNiNTUuLmM4MTdjOTlkMjkwNjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtMjc4NCw2ICsyNzg0LDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpO1xuIFxuIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbitzdHJ1Y3QgcGFnZSAqYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcbiAjaWZkZWYgQ09ORklHX01FTUNHXG4gdm9pZCBicGZfbWFwX21lbWNnX2VudGVyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBtZW1fY2dyb3VwICoqb2xkX21lbWNnLFxuIFx0XHRcdCBzdHJ1Y3QgbWVtX2Nncm91cCAqKm5ld19tZW1jZyk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9hcmVuYS5jIGIva2VybmVsL2JwZi9hcmVuYS5jXG5pbmRleCA3YjY4NDcyMDBiNDMxLi5mYTQ2MmEwZmYxYWQ2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9hcmVuYS5jXG4rKysgYi9rZXJuZWwvYnBmL2FyZW5hLmNcbkBAIC00ODEsNyArNDgxLDggQEAgc3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gdm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICpuZXdfbWVtY2csICpvbGRfbWVtY2c7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbitcdHN0cnVjdCBwYWdlICpwYWdlLCAqbmV3X3BhZ2UgPSBOVUxMO1xuK1x0dm1fZmF1bHRfdCBmYXVsdF9yZXQ7XG4gXHRsb25nIGtiYXNlLCBrYWRkcjtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgcmV0O1xuQEAgLTQ4OSw1OSArNDkwLDEwNiBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdGtiYXNlID0gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGFyZW5hKTtcbiBcdGthZGRyID0ga2Jhc2UgKyAodTMyKSh2bWYtXHUwMDNlYWRkcmVzcyk7XG4gXG4tXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxuK1x0cGFnZSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWthZGRyKTtcbitcdGlmICghcGFnZSBcdTAwMjZcdTAwMjYgIShhcmVuYS1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9TRUdWX09OX0ZBVUxUKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBQcmVhbGxvY2F0ZSBvdXRzaWRlIHRoZSBsb2NrIHdpdGggYSBzbGVlcGFibGUgYWxsb2NhdG9yIHNvIGl0XG4rXHRcdCAqIGNhbiByZWNsYWltIGFuZCBydW4gdGhlIG1lbWNnIE9PTSBraWxsZXIsIHdoaWNoIHRoZVxuK1x0XHQgKiBub24tYmxvY2tpbmcgYWxsb2NhdG9yIHVuZGVyIGFyZW5hLVx1MDAzZXNwaW5sb2NrIGNhbm5vdC4gQSBOVUxMXG4rXHRcdCAqIHJldHVybiBpcyBub24tcmVjb3ZlcmFibGUsIHNvIGZhaWwgd2l0aCBWTV9GQVVMVF9TSUdCVVM7XG4rXHRcdCAqIFZNX0ZBVUxUX09PTSB3b3VsZCBiZSByZXRyaWVkIGJ5IHRoZSBmYXVsdCBwYXRoIGFuZCBjYW5cbitcdFx0ICogbGl2ZWxvY2sgd2hlbiB0aGUgY2hhcmdlZCBtZW1jZyBpcyBub3QgdGhlIGZhdWx0aW5nIHRhc2sncy5cbitcdFx0ICovXG4rXHRcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG4rXHRcdG5ld19wYWdlID0gYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZShtYXApO1xuK1x0XHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xuK1x0XHRpZiAoIW5ld19wYWdlKVxuK1x0XHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4rXHR9XG4rXG4rXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIEEgZmFpbGVkIGxvY2sgbWVhbnMgYSBwb3NzaWJsZSBkZWFkbG9jayB3YXMgZGV0ZWN0ZWQuIERvbid0XG4gXHRcdCAqIHJldHVybiBWTV9GQVVMVF9SRVRSWTogdGhpcyBoYW5kbGVyIG5ldmVyIHRvb2sgbW1hcF9sb2NrLCBidXRcbiBcdFx0ICogdGhlIGZhdWx0IHBhdGggd291bGQgcmUtdGFrZSBpdCBvbiByZXRyeSBhbmQgZGVhZGxvY2suIEZhaWwuXG4gXHRcdCAqL1xuK1x0XHRpZiAobmV3X3BhZ2UpXG4rXHRcdFx0ZnJlZV9wYWdlc19ub2xvY2sobmV3X3BhZ2UsIDApO1xuIFx0XHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xuK1x0fVxuIFxuIFx0cGFnZSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWthZGRyKTtcbiBcdGlmIChwYWdlKSB7XG4tXHRcdGlmIChwYWdlID09IGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSlcbi1cdFx0XHQvKiBCUEYgdHJpZ2dlcmVkIHNjcmF0Y2ggaGVyZTsgZG9uJ3QgbGF6eS1hbGxvYyBvdmVyIGl0ICovXG4tXHRcdFx0Z290byBvdXRfc2lnc2VndjtcbitcdFx0aWYgKHBhZ2UgPT0gYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBIHNjcmF0Y2ggcGFnZSBtYXJrcyBhIGhvbGUuIFNlZ2ZhdWx0IG9ubHkgaWYgdGhlIHVzZXJcbitcdFx0XHQgKiBhc2tlZCBmb3IgaXQ7IG90aGVyd2lzZSB3ZSBjb3VsZCBsYXp5LWFsbG9jYXRlIGJ1dFxuK1x0XHRcdCAqIGNob29zZSBub3QgdG8gb3ZlciBhIGhvbGUsIHNvIHJlcG9ydCBhIGJ1cyBlcnJvci5cbitcdFx0XHQgKi9cbitcdFx0XHRmYXVsdF9yZXQgPSAoYXJlbmEtXHUwMDNlbWFwLm1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVCkgP1xuK1x0XHRcdFx0ICAgIFZNX0ZBVUxUX1NJR1NFR1YgOiBWTV9GQVVMVF9TSUdCVVM7XG4rXHRcdFx0Z290byBvdXRfZXJyX2xvY2tlZDtcbitcdFx0fVxuIFx0XHQvKiBhbHJlYWR5IGhhdmUgYSBwYWdlIHZtYXAtZWQgKi9cbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4rXHRpZiAoYXJlbmEtXHUwMDNlbWFwLm1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVCkge1xuK1x0XHQvKiBVc2VyIHNwYWNlIHJlcXVlc3RlZCB0byBzZWdmYXVsdCB3aGVuIHBhZ2UgaXMgbm90IGFsbG9jYXRlZCBieSBicGYgcHJvZyAqL1xuK1x0XHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdTRUdWO1xuK1x0XHRnb3RvIG91dF9lcnJfbG9ja2VkO1xuK1x0fVxuK1xuIFx0YnBmX21hcF9tZW1jZ19lbnRlcihcdTAwMjZhcmVuYS1cdTAwM2VtYXAsIFx1MDAyNm9sZF9tZW1jZywgXHUwMDI2bmV3X21lbWNnKTtcbiBcbi1cdGlmIChhcmVuYS1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9TRUdWX09OX0ZBVUxUKVxuLVx0XHQvKiBVc2VyIHNwYWNlIHJlcXVlc3RlZCB0byBzZWdmYXVsdCB3aGVuIHBhZ2UgaXMgbm90IGFsbG9jYXRlZCBieSBicGYgcHJvZyAqL1xuLVx0XHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xuK1x0aWYgKCFuZXdfcGFnZSkge1xuK1x0XHQvKlxuK1x0XHQgKiBWZXJ5IHJhcmUgcmFjZTogdGhlIGJwZiBwcm9ncmFtIGhhZCBhbGxvY2F0ZWQgYSBwYWdlIGhlcmUsIHNvXG4rXHRcdCAqIHRoZSBsb2NrbGVzcyBwcm9iZSBzYXcgaXQgYW5kIHdlIHNraXBwZWQgcHJlYWxsb2NhdGlvbiwgYnV0IGl0XG4rXHRcdCAqIGZyZWVkIHRoZSBwYWdlIGJlZm9yZSB3ZSB0b29rIHRoZSBsb2NrLiBOb3cgd2UgZG8gbmVlZCBvbmU7XG4rXHRcdCAqIHNsZWVwaW5nIGlzIG5vdCBhbGxvd2VkIGhlcmUsIHNvIGZhbGwgYmFjayB0byB0aGUgbm9uLWJsb2NraW5nXG4rXHRcdCAqIGFsbG9jYXRvciBhbmQgZ2l2ZSB1cCBpZiBpdCBmYWlscy5cbitcdFx0ICovXG4rXHRcdHJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBtYXAtXHUwMDNlbnVtYV9ub2RlLCAxLCBcdTAwMjZuZXdfcGFnZSk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4rXHRcdFx0Z290byBvdXRfZXJyX2xvY2tlZF9tZW1jZztcbitcdFx0fVxuK1x0fVxuIFxuIFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4tXG4tXHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gXHUwMDI2cGFnZSwgLmkgPSAwIH07XG4tXHQvKiBBY2NvdW50IGludG8gbWVtY2cgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGJwZl9hcmVuYSAqL1xuLVx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIE5VTUFfTk9fTk9ERSwgMSwgXHUwMDI2cGFnZSk7XG4gXHRpZiAocmV0KSB7XG4tXHRcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCB2bWYtXHUwMDNlcGdvZmYsIDEpO1xuLVx0XHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xuK1x0XHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4rXHRcdGdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7XG4gXHR9XG4rXHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gXHUwMDI2bmV3X3BhZ2UsIC5pID0gMCB9O1xuIFxuIFx0cmV0ID0gYXBwbHlfdG9fcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBrYWRkciwgUEFHRV9TSVpFLCBhcHBseV9yYW5nZV9zZXRfY2IsIFx1MDAyNmRhdGEpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbi1cdFx0ZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7XG4tXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4rXHRcdGZhdWx0X3JldCA9IFZNX0ZBVUxUX1NJR0JVUztcbitcdFx0Z290byBvdXRfZXJyX2xvY2tlZF9tZW1jZztcbiBcdH1cbiBcdGZsdXNoX3ZtYXBfY2FjaGUoa2FkZHIsIFBBR0VfU0laRSk7XG4gXHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xuK1x0LyogbmV3X3BhZ2Ugd2FzIGNvbnN1bWVkICovXG4rXHRwYWdlID0gbmV3X3BhZ2U7XG4rXHRuZXdfcGFnZSA9IE5VTEw7XG4gb3V0OlxuIFx0cGFnZV9yZWZfYWRkKHBhZ2UsIDEpO1xuIFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG4rXHRpZiAobmV3X3BhZ2UpXG4rXHRcdGZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTtcbiBcdHZtZi1cdTAwM2VwYWdlID0gcGFnZTtcbiBcdHJldHVybiAwO1xuLW91dF9zaWdzZWd2X21lbWNnOlxuK1xuK291dF9lcnJfbG9ja2VkX21lbWNnOlxuIFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbi1vdXRfc2lnc2VndjpcbitvdXRfZXJyX2xvY2tlZDpcbiBcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xuLVx0cmV0dXJuIFZNX0ZBVUxUX1NJR1NFR1Y7XG4rXHRpZiAobmV3X3BhZ2UpXG4rXHRcdGZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTtcbitcdHJldHVybiBmYXVsdF9yZXQ7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYXJlbmFfdm1fb3BzID0ge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbmluZGV4IDY4NzRiYTE0MjRhZjAuLmY5YjgxNjM4ZTUzN2EgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC02MDIsMTUgKzYwMiwxNCBAQCBzdGF0aWMgYm9vbCBjYW5fYWxsb2NfcGFnZXModm9pZClcbiBcdFx0IUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpO1xuIH1cbiBcbisjZGVmaW5lIEJQRl9QQUdFX0dGUCAoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKVxuK1xuIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19icGZfYWxsb2NfcGFnZShpbnQgbmlkKVxuIHtcbiBcdGlmICghY2FuX2FsbG9jX3BhZ2VzKCkpXG4gXHRcdHJldHVybiBhbGxvY19wYWdlc19ub2xvY2soX19HRlBfQUNDT1VOVCwgbmlkLCAwKTtcbiBcbi1cdHJldHVybiBhbGxvY19wYWdlc19ub2RlKG5pZCxcbi1cdFx0XHRcdEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfQUNDT1VOVFxuLVx0XHRcdFx0fCBfX0dGUF9OT1dBUk4sXG4tXHRcdFx0XHQwKTtcbitcdHJldHVybiBhbGxvY19wYWdlc19ub2RlKG5pZCwgQlBGX1BBR0VfR0ZQLCAwKTtcbiB9XG4gXG4gaW50IGJwZl9tYXBfYWxsb2NfcGFnZXMoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG5pZCxcbkBAIC02MzYsNiArNjM1LDIwIEBAIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKlxuKyAqIEZvciBjYWxsZXJzIHRoYXQga25vdyB0aGV5IHJ1biBpbiBhIHNsZWVwYWJsZSBjb250ZXh0LCBlLmcuIGEgdXNlciBwYWdlXG4rICogZmF1bHQgaGFuZGxlci4gY2FuX2FsbG9jX3BhZ2VzKCkgaXMgYSBjb25zZXJ2YXRpdmUgZ3Vlc3MgbWFkZSBmb3IgQlBGXG4rICogcHJvZ3JhbSBjb250ZXh0IC0gbm90YWJseSBpdCBpcyBhbHdheXMgZmFsc2Ugb24gUFJFRU1QVF9SVCAtIHNvIGdvaW5nXG4rICogdGhyb3VnaCBicGZfbWFwX2FsbG9jX3BhZ2VzKCkgdGhlcmUgd291bGQgbmVlZGxlc3NseSBwaWNrIHRoZVxuKyAqIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IsIHdoaWNoIG5ldmVyIHJlY2xhaW1zIGFuZCBuZXZlciBlbmdhZ2VzIHRoZSBPT01cbisgKiBtYWNoaW5lcnkuXG4rICovXG4rc3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbit7XG4rXHRtaWdodF9zbGVlcCgpO1xuK1x0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobWFwLVx1MDAzZW51bWFfbm9kZSwgQlBGX1BBR0VfR0ZQLCAwKTtcbit9XG4rXG4gc3RhdGljIGludCBidGZfZmllbGRfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl9maWVsZCAqZjEgPSBhLCAqZjIgPSBiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmNcbmluZGV4IDQ1Y2QwYjQ3OWZlMzUuLjQxODNmZjYxNTBjMjggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmNcbkBAIC0xODgsNiArMTg4LDczIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbiBcdHJldHVybiBfX3dyaXRlX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYpO1xuIH1cbiBcbitzdGF0aWMgaW50IF9fcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpjZ3JvdXBfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbitcdFx0XHQgICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4re1xuK1x0Y2hhciBmaWxlX3BhdGhbUEFUSF9NQVggKyAxXTtcbitcdHNzaXplX3QgZ290O1xuK1x0aW50IGZkO1xuK1xuK1x0c25wcmludGYoZmlsZV9wYXRoLCBzaXplb2YoZmlsZV9wYXRoKSwgXCIlcy8lc1wiLCBjZ3JvdXBfcGF0aCwgZmlsZSk7XG4rXHRmZCA9IG9wZW4oZmlsZV9wYXRoLCBPX1JET05MWSk7XG4rXHRpZiAoZmQgXHUwMDNjIDApIHtcbitcdFx0bG9nX2VycihcIk9wZW5pbmcgJXNcIiwgZmlsZV9wYXRoKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4rXHRnb3QgPSByZWFkKGZkLCBidWYsIGxlbiAtIDEpO1xuK1x0aWYgKGdvdCBcdTAwM2MgMCkge1xuK1x0XHRsb2dfZXJyKFwiUmVhZGluZyAlc1wiLCBmaWxlX3BhdGgpO1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1x0YnVmW2dvdF0gPSAnXFwwJztcbitcdGNsb3NlKGZkKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiByZWFkX2Nncm91cF9maWxlKCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZVxuKyAqIEByZWxhdGl2ZV9wYXRoOiBUaGUgY2dyb3VwIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSB3b3JrZGlyXG4rICogQGZpbGU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIGNncm91cGZzIHRvIHJlYWQgZnJvbVxuKyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3NcbisgKiBAbGVuOiBTaXplIG9mIEBidWZcbisgKlxuKyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCdzIGRpcmVjdG9yeS5cbisgKlxuKyAqIElmIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQuXG4rICovXG4raW50IHJlYWRfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbitcdFx0ICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4re1xuK1x0Y2hhciBjZ3JvdXBfcGF0aFtQQVRIX01BWCAtIDI0XTtcbitcbitcdGZvcm1hdF9jZ3JvdXBfcGF0aChjZ3JvdXBfcGF0aCwgcmVsYXRpdmVfcGF0aCk7XG4rXHRyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7XG4rfVxuK1xuKy8qKlxuKyAqIHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZSBpbiB0aGUgcGFyZW50IHByb2Nlc3NcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2RpclxuKyAqIEByZWxhdGl2ZV9wYXRoOiBUaGUgY2dyb3VwIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgcHJvY2VzcyB3b3JrZGlyXG4rICogQGZpbGU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIGNncm91cGZzIHRvIHJlYWQgZnJvbVxuKyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3NcbisgKiBAbGVuOiBTaXplIG9mIEBidWZcbisgKlxuKyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCdzIGRpcmVjdG9yeSB1bmRlciB0aGUgcGFyZW50IHByb2Nlc3NcbisgKiB3b3JrZGlyLlxuKyAqXG4rICogSWYgc3VjY2Vzc2Z1bCwgMCBpcyByZXR1cm5lZC5cbisgKi9cbitpbnQgcmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbitcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuK3tcbitcdGNoYXIgY2dyb3VwX3BhdGhbUEFUSF9NQVggLSAyNF07XG4rXG4rXHRmb3JtYXRfcGFyZW50X2Nncm91cF9wYXRoKGNncm91cF9wYXRoLCByZWxhdGl2ZV9wYXRoKTtcbitcdHJldHVybiBfX3JlYWRfY2dyb3VwX2ZpbGUoY2dyb3VwX3BhdGgsIGZpbGUsIGJ1ZiwgbGVuKTtcbit9XG4rXG4gLyoqXG4gICogc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCkgLSBTZXR1cCB0aGUgY2dyb3VwIGVudmlyb25tZW50XG4gICpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oXG5pbmRleCAzODU3MzA0YmU4NzQxLi5kNDJkMmUxMzA0NGU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oXG5AQCAtMTUsNiArMTUsMTAgQEAgaW50IHdyaXRlX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4gXHRcdCAgICAgIGNvbnN0IGNoYXIgKmJ1Zik7XG4gaW50IHdyaXRlX2Nncm91cF9maWxlX3BhcmVudChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuIFx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmKTtcbitpbnQgcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuK1x0XHQgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4raW50IHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4rXHRcdFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4gaW50IGNncm91cF9zZXR1cF9hbmRfam9pbihjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKTtcbiBpbnQgZ2V0X3Jvb3RfY2dyb3VwKHZvaWQpO1xuIGludCBjcmVhdGVfYW5kX2dldF9jZ3JvdXAoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtY2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbWNnLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jNTdiOTg0OTRjZmFiXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jXG5AQCAtMCwwICsxLDE1OCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy91c2VyLmhcdTAwM2VcbisjaWZuZGVmIFBBR0VfU0laRSAvKiBvbiBzb21lIGFyY2hzIGl0IGNvbWVzIGluIHN5cy91c2VyLmggKi9cbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNkZWZpbmUgUEFHRV9TSVpFIGdldHBhZ2VzaXplKClcbisjZW5kaWZcbitcbisjaW5jbHVkZSBcImNncm91cF9oZWxwZXJzLmhcIlxuKyNpbmNsdWRlIFwiYXJlbmFfbWVtY2cuc2tlbC5oXCJcbitcbisjZGVmaW5lIENHX1BBVEhcdFx0XCIvYXJlbmFfbWVtY2dcIlxuK1xuKy8qIEJ1ZGdldCB0aGUgYXJlbmEgZ2V0cyBvbiB0b3Agb2Ygd2hhdGV2ZXIgaXMgYWxyZWFkeSBjaGFyZ2VkIGFmdGVyIGxvYWQuICovXG4rI2RlZmluZSBBUkVOQV9CVURHRVRcdCg2NCAqIDEwMjQgKiAxMDI0KVxuK1xuK3N0YXRpYyB2b2lkIGR1bXBfbWVtY2coaW50ICgqcmQpKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjaGFyICosIHNpemVfdCkpXG4re1xuK1x0Y2hhciBidWZbNTEyXTtcbitcbitcdC8qXG4rXHQgKiBtZW1vcnkuY3VycmVudCByZWFkcyAwIG9uY2UgdGhlIGNoaWxkIGhhcyBsZWZ0IHRoZSBjZ3JvdXAsIHNvIGl0IG9ubHlcbitcdCAqIGNhcnJpZXMgaW5mb3JtYXRpb24gd2hlbiBkdW1wZWQgZnJvbSB0aGUgbGl2ZSBjaGlsZDsgbWVtb3J5LnBlYWsgYW5kXG4rXHQgKiBtZW1vcnkuZXZlbnRzIHN1cnZpdmUgdGhlIGNoaWxkIGFuZCB0ZWxsIHRoZSBzdG9yeSBlaXRoZXIgd2F5LlxuK1x0ICovXG4rXHRpZiAoIXJkKENHX1BBVEgsIFwibWVtb3J5LmN1cnJlbnRcIiwgYnVmLCBzaXplb2YoYnVmKSkpXG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIm1lbW9yeS5jdXJyZW50OiAlc1wiLCBidWYpO1xuK1x0aWYgKCFyZChDR19QQVRILCBcIm1lbW9yeS5tYXhcIiwgYnVmLCBzaXplb2YoYnVmKSkpXG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIm1lbW9yeS5tYXg6ICVzXCIsIGJ1Zik7XG4rXHRpZiAoIXJkKENHX1BBVEgsIFwibWVtb3J5LnBlYWtcIiwgYnVmLCBzaXplb2YoYnVmKSkpXG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIm1lbW9yeS5wZWFrOiAlc1wiLCBidWYpO1xuK1x0aWYgKCFyZChDR19QQVRILCBcIm1lbW9yeS5ldmVudHNcIiwgYnVmLCBzaXplb2YoYnVmKSkpXG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIm1lbW9yeS5ldmVudHM6XFxuJXNcIiwgYnVmKTtcbitcdGZmbHVzaChzdGRlcnIpO1xuK31cbitcbisvKiBSZWFkIG9uZSBrZXkgZnJvbSBhIGZsYXQga2V5ZWQgY2dyb3VwIGZpbGUsIGUuZy4gXCJvb21fa2lsbFwiIGluIG1lbW9yeS5ldmVudHMuICovXG4rc3RhdGljIGxvbmcgY2dfcmVhZF9rZXkoY29uc3QgY2hhciAqY2csIGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKmtleSlcbit7XG4rXHRjaGFyIGJ1Zls1MTJdLCAqcDtcbitcbitcdGlmIChyZWFkX2Nncm91cF9maWxlKGNnLCBmaWxlLCBidWYsIHNpemVvZihidWYpKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0cCA9IHN0cnN0cihidWYsIGtleSk7XG4rXHRpZiAoIXApXG4rXHRcdHJldHVybiAtMTtcbitcdHJldHVybiBzdHJ0b2wocCArIHN0cmxlbihrZXkpLCBOVUxMLCAxMCk7XG4rfVxuK1xuK3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtY2codm9pZClcbit7XG4rXHRpbnQgY2dyb3VwX2ZkID0gLTEsIHN0YXR1cywgZXJyO1xuK1x0Y29uc3QgbG9uZyBwcyA9IFBBR0VfU0laRTtcbitcdGNoYXIgYnVmWzY0XTtcbitcdHBpZF90IHBpZDtcbitcbitcdGVyciA9IHNldHVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNldHVwX2Nncm91cF9lbnZpcm9ubWVudFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y2dyb3VwX2ZkID0gY3JlYXRlX2FuZF9nZXRfY2dyb3VwKENHX1BBVEgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfRkQoY2dyb3VwX2ZkLCBcImNyZWF0ZV9hbmRfZ2V0X2Nncm91cFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBObyBtZW1vcnkgY29udHJvbGxlciAtXHUwMDNlIG5vdGhpbmcgdG8gdGVzdC4gKi9cbitcdGlmIChyZWFkX2Nncm91cF9maWxlKENHX1BBVEgsIFwibWVtb3J5LmN1cnJlbnRcIiwgYnVmLCBzaXplb2YoYnVmKSkpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiJXM6U0tJUDpubyBtZW1vcnkgY29udHJvbGxlclxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRwaWQgPSBmb3JrKCk7XG4rXHRpZiAoIUFTU0VSVF9HRShwaWQsIDAsIFwiZm9ya1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAocGlkID09IDApIHtcbitcdFx0c3RydWN0IGFyZW5hX21lbWNnICpjc2tlbDtcbitcdFx0X191MzIgaSwgbnBhZ2VzO1xuK1x0XHRjaGFyICpiYXNlO1xuK1x0XHRzaXplX3Qgc3o7XG4rXHRcdGxvbmcgY3VyO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBEbyBldmVyeXRoaW5nIGZyb20gdGhlIGNoaWxkOiB0aGUgYXJlbmEgdm1hIGlzIFZNX0RPTlRDT1BZIHNvXG4rXHRcdCAqIGl0IHdvdWxkIG5vdCBzdXJ2aXZlIGZvcmsoKSwgb25seSB0aGUgY2hpbGQgc2hvdWxkIGJlIHVuZGVyIHRoZVxuK1x0XHQgKiBsaW1pdCBzbyB0aGF0IGEgbWVtY2cgT09NIGNhbm5vdCBwaWNrIHRlc3RfcHJvZ3MsIGFuZCBhIG1hcCBpc1xuK1x0XHQgKiBjaGFyZ2VkIHRvIHRoZSBtZW1jZyBvZiB0aGUgdGFzayB0aGF0IGNyZWF0ZXMgaXQgLSBzbyBqb2luXG4rXHRcdCAqIGJlZm9yZSBsb2FkLiBUaGUgY2dyb3VwIHdvcmsgZGlyIGJlbG9uZ3MgdG8gdGhlIHBhcmVudCB0aGF0IHNldFxuK1x0XHQgKiB0aGUgZW52aXJvbm1lbnQgdXAsIHNvIHJlYWNoIGl0IHdpdGggdGhlIF9wYXJlbnQoKSBoZWxwZXJzLlxuK1x0XHQgKiBFcnJvcnMgYXJlIHJlcG9ydGVkIHRvIHRoZSBwYXJlbnQgdGhyb3VnaCB0aGUgZXhpdCBjb2RlLCBzaW5jZVxuK1x0XHQgKiBBU1NFUlRfKiBpbiBhIGZvcmtlZCBjaGlsZCBkb2VzIG5vdCByZWFjaCBpdC5cbitcdFx0ICovXG4rXHRcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwiJWRcIiwgZ2V0cGlkKCkpO1xuK1x0XHRpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsIFwiY2dyb3VwLnByb2NzXCIsIGJ1ZikpXG4rXHRcdFx0X2V4aXQoMik7XG4rXG4rXHRcdGNza2VsID0gYXJlbmFfbWVtY2dfX29wZW5fYW5kX2xvYWQoKTtcbitcdFx0aWYgKCFjc2tlbClcbitcdFx0XHRfZXhpdCgzKTtcbitcbitcdFx0YmFzZSA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUoY3NrZWwtXHUwMDNlbWFwcy5hcmVuYSwgXHUwMDI2c3opO1xuK1x0XHRpZiAoIWJhc2UpXG4rXHRcdFx0X2V4aXQoNCk7XG4rXHRcdG5wYWdlcyA9IGJwZl9tYXBfX21heF9lbnRyaWVzKGNza2VsLVx1MDAzZW1hcHMuYXJlbmEpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBDYXAgb25seSBub3csIGFmdGVyIGxvYWQ6IGV2ZXJ5dGhpbmcgYnV0IHRoZSBmYXVsdC1pbiBpc1xuK1x0XHQgKiBjaGFyZ2VkLCBzbyB0aGUgYXJlbmEgZ2V0cyBhIGZpeGVkIGJ1ZGdldCByZWdhcmRsZXNzIG9mIHdoYXRcbitcdFx0ICogdGhlIGxvYWQgaXRzZWxmIGNvc3QsIGFuZCB0aGUgbG9hZCBjYW4gbmV2ZXIgaGl0IHRoZSBsaW1pdC5cbitcdFx0ICovXG4rXHRcdGlmIChyZWFkX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCBcIm1lbW9yeS5jdXJyZW50XCIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuK1x0XHRcdF9leGl0KDUpO1xuK1x0XHRjdXIgPSBzdHJ0b2woYnVmLCBOVUxMLCAxMCk7XG4rXHRcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwiJWxkXCIsIGN1ciArIEFSRU5BX0JVREdFVCk7XG4rXHRcdGlmICh3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoQ0dfUEFUSCwgXCJtZW1vcnkubWF4XCIsIGJ1ZikpXG4rXHRcdFx0X2V4aXQoNik7XG4rXG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYWdlczsgaSsrKVxuK1x0XHRcdGJhc2VbKHNpemVfdClpICogcHNdID0gMTtcbitcdFx0LyogRmF1bHRlZCBldmVyeXRoaW5nIHdpdGhvdXQgZHlpbmc6IGR1bXAgd2h5IChvbmx5IHVuZGVyIC12KS4gKi9cbitcdFx0ZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlX3BhcmVudCk7XG4rXHRcdF9leGl0KDApO1xuK1x0fVxuK1xuK1x0aWYgKCFBU1NFUlRfRVEod2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCksIHBpZCwgXCJ3YWl0cGlkXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIEEgbm9uLXplcm8gZXhpdCBtZWFucyB0aGUgY2hpbGQgZmFpbGVkIHRvIHNldCB1cDsgdGhlIGNvZGUgc2F5cyB3aGVyZS4gKi9cbitcdGlmIChXSUZFWElURUQoc3RhdHVzKSBcdTAwMjZcdTAwMjYgV0VYSVRTVEFUVVMoc3RhdHVzKSkge1xuK1x0XHRBU1NFUlRfT0soV0VYSVRTVEFUVVMoc3RhdHVzKSwgXCJjaGlsZCBzZXR1cFwiKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogRmF1bHRpbmcgYSB2YWxpZCBhcmVuYSBhZGRyZXNzIHVudGlsIG1lbW9yeS5tYXggaXMgaGl0IG11c3Qgbm90IGxvb2tcbitcdCAqIGxpa2UgYW4gaW52YWxpZCBhY2Nlc3MuIFdpdGhvdXQgdGhlIGZpeCB0aGUgZmF1bHQgcGF0aCBhbGxvY2F0ZWQgd2l0aFxuK1x0ICogdGhlIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IsIHR1cm5lZCBpdHMgLUVOT01FTSBpbnRvIFZNX0ZBVUxUX1NJR1NFR1YsXG4rXHQgKiBhbmQgdGhlIGNoaWxkIGRpZWQgd2l0aCBTSUdTRUdWIG9uIGEgdmFsaWQgYWRkcmVzczsgbm93IGl0IGlzIGhhbmRsZWRcbitcdCAqIGJ5IHRoZSBtZW1jZyBPT00gcGF0aCBpbnN0ZWFkLiBBIFNJR0tJTEwgYWxvbmUgd291bGQgbm90IHByb3ZlIHRoZVxuK1x0ICogbWVtY2cgT09NIGtpbGxlciBkaWQgaXQgKGEgZ2xvYmFsIE9PTSBvciBhbiB1bnJlbGF0ZWQgY3Jhc2ggY291bGQgYWxzb1xuK1x0ICoga2lsbCB0aGUgY2hpbGQpLCBzbyBjaGVjayBtZW1vcnkuZXZlbnRzLm9vbV9raWxsLCB3aGljaCByZWNvcmRzIHRoZVxuK1x0ICogbWVtY2cgT09NIGFuZCBzdXJ2aXZlcyB0aGUgY2hpbGQuXG4rXHQgKi9cbitcdGlmICghQVNTRVJUX1RSVUUoV0lGU0lHTkFMRUQoc3RhdHVzKSwgXCJjaGlsZCBraWxsZWQgYnkgc2lnbmFsXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX0dFKGNnX3JlYWRfa2V5KENHX1BBVEgsIFwibWVtb3J5LmV2ZW50c1wiLCBcIm9vbV9raWxsXCIpLCAxLFxuK1x0XHQgICAgICAgXCJtZW1jZyBvb21fa2lsbFwiKSlcbitcdFx0ZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlKTtcbitvdXQ6XG4rXHRpZiAoY2dyb3VwX2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoY2dyb3VwX2ZkKTtcbitcdGNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1jZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi44ODI1OWNmZWEwNmI2XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuY1xuQEAgLTAsMCArMSwyNCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9hcmVuYV9jb21tb24uaFwiXG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpO1xuK1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCA1MDAwMCk7IC8qIG51bWJlciBvZiBwYWdlcyAqL1xuKyNpZmRlZiBfX1RBUkdFVF9BUkNIX2FybTY0XG4rXHRfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsIFx1MDAzY1x1MDAzYyAzMik7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi9cbisjZWxzZVxuK1x0X191bG9uZyhtYXBfZXh0cmEsIDB4MXVsbCBcdTAwM2NcdTAwM2MgNDQpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXG4rI2VuZGlmXG4rfSBhcmVuYSBTRUMoXCIubWFwc1wiKTtcbitcbitTRUMoXCJzeXNjYWxsXCIpXG4raW50IG5vb3Aodm9pZCAqY3R4KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozMzo1NC4yNzk1NzQ3NTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU4NTY3NTQ0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBhIFBhc3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2Ugd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGFyZW5hX3ZtX2ZhdWx0YCBpbiBga2VybmVsL2JwZi9hcmVuYS5jYCBhbmQgaW50cm9kdWNlcyBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgYWxvbmcgd2l0aCBhIHNlbGZ0ZXN0LlxuXG5GaXJzdCwgbG9va2luZyBhdCBgYXJlbmEuY2AsIHRoZSBjb3JlIGNoYW5nZSBpcyBwcmVhbGxvY2F0aW5nIGEgcGFnZSAqYmVmb3JlKiBhY3F1aXJpbmcgYSBzcGlubG9jaywgYnV0IG9ubHkgd2hlbiBhIHBhZ2UgaXNuJ3QgYWxyZWFkeSBtYXBwZWQsIGFuZCB0aGUgYEJQRl9GX1NFR1ZfT05fRkFVTFRgIGZsYWcgaXNuJ3Qgc2V0LiBUaGlzIGFsbG93cyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBpbnRlcnZlbmUgaWYgdGhlIGFsbG9jYXRpb24gZmFpbHMsIHdoaWNoIGlzIHByZWZlcmFibGUgdG8gdGhlIHByZXZpb3VzIGJlaGF2aW9yIG9mIHBvdGVudGlhbGx5IGhhbmdpbmcgZHVlIHRvIGxhY2sgb2YgYSBzbGVlcGFibGUgYWxsb2NhdG9yIHdpdGhpbiB0aGUgc3BpbmxvY2suIElmIHRoYXQgcHJlLWFsbG9jYXRpb24gZmFpbHMsIGl0IHJldHVybnMgYFZNX0ZBVUxUX1NJR0JVU2AuIElmIHN1Y2Nlc3NmdWwsIHRoZSBzcGlubG9jayBpcyBhY3F1aXJlZCwgYW5kIHRoZSBwYWdlIGlzIHVzZWQuIFRoZSBrZXkgcG9pbnQgaXMgdGhhdCBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgdXNlcyBgQlBGX1BBR0VfR0ZQYCwgd2hpY2ggaW5jbHVkZXMgYF9fR0ZQX1pFUk9gLiBUaGlzIG1lYW5zIHRoYXQgYW55IG5ld2x5IGFsbG9jYXRlZCBwYWdlIGlzICpndWFyYW50ZWVkKiB0byBiZSB6ZXJvLWluaXRpYWxpemVkLlxuXG5Ob3csIGRvZXMgdGhpcyBhbGxvY2F0aW9uIGxvZ2ljIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBJIGRvbid0IHRoaW5rIHNvLiBUaGUgZXhpc3RpbmcgbG9naWMgdXNpbmcgYGJwZl9tYXBfYWxsb2NfcGFnZXNgIGFsc28gemVyb3MgdGhlIHBhZ2VzIChpdCBjYWxscyBgX19icGZfYWxsb2NfcGFnZWAgd2hpY2ggaXRzZWxmIGFsc28gY29udGFpbnMgYF9fR0ZQX1pFUk9gKS4gU28sIHRoZSB6ZXJvaW5nIGJlaGF2aW9yIGlzIGNvbnNpc3RlbnQuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIHRoZSBpbml0aWFsaXphdGlvbiBvZiBwYWdlcy5cblxuVGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSBhIHJlZmFjdG9yaW5nIGZvciBtb3JlIHJvYnVzdCBPT00gaGFuZGxpbmcuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBJdCBkb2Vzbid0IG1vZGlmeSBhbnkgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IHdvdWxkIHBvdGVudGlhbGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIG1lbW9yeSBiZWluZyBhbGxvY2F0ZWQgaXMgZXhwbGljaXRseSB6ZXJvZWQuIFRoZSBwcmV2aW91cyBhbGxvY2F0aW9uIHBhdGggd2FzIGFsc28gemVyby1pbml0aWFsaXplZC4gVGhlIGNvcmUgaXNzdWUgYmVpbmcgYWRkcmVzc2VkIGlzIHRoZSBPT00gaGFuZGxpbmcgd2l0aCB0aGUgcHJlYWxsb2NhdGlvbiBiZWZvcmUgdGhlIGxvY2suXG5cblRvIGJlIGV4dHJhIGNlcnRhaW4sIEkganVzdCBnbGFuY2VkIGF0IGBicGZfbWFwX2FsbG9jX3BhZ2VzYCBpbiBgc3lzY2FsbC5jYCBhbmQgaXQgYWxzbyB1c2VzIGBCUEZfUEFHRV9HRlBgIChjb250YWluaW5nIGBfX0dGUF9aRVJPYCkuIFNvLCB0aGUgcGFnZXMgYXJlIGRlZmluaXRlbHkgemVyb2VkIGluICpib3RoKiBjYXNlcy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgYXJlIGludHJvZHVjZWQsIHNpbmNlIHRoZSBhbGxvY2F0ZWQgcGFnZXMgYXJlIHplcm9lZC4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQsIGV2ZW4gdGhvdWdoIEkgd2lsbCBxdWlja2x5IHZlcmlmeSBgYWxsb2NfcGFnZXNfbm9sb2NrYCBpcyBub3QgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaCB0byBkb3VibGUtY2hlY2ssIGJ1dCB0aGlzIGlzIGEgdmVyeSBsb3ctcmlzayBjaGFuZ2UuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gSSB3aWxsIG1hcmsgTmVlZHNLTVNBTiBhcyBgZmFsc2VgLiBUaGUgcHJpbWFyeSBhaW0gaXMgaW1wcm92ZWQgT09NIGhhbmRsaW5nIGFuZCBwcmVhbGxvY2F0aW9uIGJlZm9yZSB0aGUgc3BpbmxvY2sgdG8gdXNlIGEgc2xlZXBhYmxlIGFsbG9jYXRvci4gVGhlIG5ldyBhbGxvY2F0aW9uIGxvZ2ljIHplcm9zIG1lbW9yeS4gVGhpcyBpcyBhIHZlcnkgc2FmZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMTgsIk91dHB1dFRva2VucyI6MTg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM0OjEwLjEzNjMzMjEwNloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgQlBGIGFyZW5hcyAoYGFyZW5hX3ZtX2ZhdWx0YCkgdG8gcHJlYWxsb2NhdGUgcGFnZXMgb3V0c2lkZSBvZiBhIHNwaW5sb2NrIHVzaW5nIGEgc2xlZXBhYmxlIGFsbG9jYXRvciwgYWxsb3dpbmcgdGhlIG1lbWNnIE9PTSBraWxsZXIgdG8gcnVuIGlmIG5lZWRlZC4gVGhlIG5ld2x5IGludHJvZHVjZWQgYWxsb2NhdGlvbiBmdW5jdGlvbiBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgZXhwbGljaXRseSB1c2VzIGBfX0dGUF9aRVJPYCAodmlhIGBCUEZfUEFHRV9HRlBgKSB0byBlbnN1cmUgdGhlIGFsbG9jYXRlZCBwYWdlcyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCwganVzdCBsaWtlIHRoZSBwcmV2aW91cyBub24tYmxvY2tpbmcgYWxsb2NhdGlvbiBwYXRoLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkLiBUaGUgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiBjb250ZXh0IGFuZCBPT00gaGFuZGxpbmcsIHdoaWNoIGRvIG5vdCBpbnRyb2R1Y2Ugcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgQlBGIGFyZW5hcyAoYGFyZW5hX3ZtX2ZhdWx0YCkgdG8gcHJlYWxsb2NhdGUgcGFnZXMgb3V0c2lkZSBvZiBhIHNwaW5sb2NrIHVzaW5nIGEgc2xlZXBhYmxlIGFsbG9jYXRvciwgYWxsb3dpbmcgdGhlIG1lbWNnIE9PTSBraWxsZXIgdG8gcnVuIGlmIG5lZWRlZC4gVGhlIG5ld2x5IGludHJvZHVjZWQgYWxsb2NhdGlvbiBmdW5jdGlvbiBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgZXhwbGljaXRseSB1c2VzIGBfX0dGUF9aRVJPYCAodmlhIGBCUEZfUEFHRV9HRlBgKSB0byBlbnN1cmUgdGhlIGFsbG9jYXRlZCBwYWdlcyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCwganVzdCBsaWtlIHRoZSBwcmV2aW91cyBub24tYmxvY2tpbmcgYWxsb2NhdGlvbiBwYXRoLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkLiBUaGUgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiBjb250ZXh0IGFuZCBPT00gaGFuZGxpbmcsIHdoaWNoIGRvIG5vdCBpbnRyb2R1Y2Ugcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8fz4c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 10:06:12 +0000 UTC FinishedAt: 2026-08-25 10:34:11 +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": "5e289c5a4a526e870efac0ca658635c47138593a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "MEMCG", "CGROUPS" ], "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": "5e289c5a4a526e870efac0ca658635c47138593a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "MEMCG", "CGROUPS" ], "series_id": "dcedf132-c5fc-4fb5-bfab-cbd93ffb725a" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_map_alloc_page_sleepable" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgZm9yIEJQRiBhcmVuYXMgKGBhcmVuYV92bV9mYXVsdGApIHRvIHByZWFsbG9jYXRlIHBhZ2VzIG91dHNpZGUgb2YgYSBzcGlubG9jayB1c2luZyBhIHNsZWVwYWJsZSBhbGxvY2F0b3IsIGFsbG93aW5nIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biBpZiBuZWVkZWQuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIGFsbG9jYXRpb24gZnVuY3Rpb24gYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGV4cGxpY2l0bHkgdXNlcyBgX19HRlBfWkVST2AgKHZpYSBgQlBGX1BBR0VfR0ZQYCkgdG8gZW5zdXJlIHRoZSBhbGxvY2F0ZWQgcGFnZXMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQsIGp1c3QgbGlrZSB0aGUgcHJldmlvdXMgbm9uLWJsb2NraW5nIGFsbG9jYXRpb24gcGF0aC4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZC4gVGhlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gY29udGV4dCBhbmQgT09NIGhhbmRsaW5nLCB3aGljaCBkbyBub3QgaW50cm9kdWNlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZvciBCUEYgYXJlbmEgbWFwcyB0byB1c2UgYSBzbGVlcGFibGUgcGFnZSBhbGxvY2F0b3IsIGFsbG93aW5nIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biB3aGVuIG1lbW9yeSBsaW1pdHMgYXJlIGhpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYWZmZWN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgaW50ZXJhY3Rpb25zLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtbWFwaW5nIGFuZCBmYXVsdGluZyBCUEYgYXJlbmEgbWFwcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDoyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc4NGViNDhkYTk2ZDdjNGUzZmYxM2Y2ZGMwYTFiZmU0MDViZmUyOWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMDoyMzo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggYjNjZDI4ZDllM2I1NS4uYzgxN2M5OWQyOTA2NiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC0yNzg0LDYgJiM0MzsyNzg0LDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpO1xuIFxuIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbiYjNDM7c3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCk7XG4gI2lmZGVmIENPTkZJR19NRU1DR1xuIHZvaWQgYnBmX21hcF9tZW1jZ19lbnRlcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgbWVtX2Nncm91cCAqKm9sZF9tZW1jZyxcbiBcdFx0XHQgc3RydWN0IG1lbV9jZ3JvdXAgKipuZXdfbWVtY2cpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuaW5kZXggN2I2ODQ3MjAwYjQzMS4uZmE0NjJhMGZmMWFkNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYXJlbmEuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcmVuYS5jXG5AQCAtNDgxLDcgJiM0Mzs0ODEsOCBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdHN0cnVjdCBicGZfbWFwICptYXAgPSB2bWYtXHUwMDNldm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm5ld19tZW1jZywgKm9sZF9tZW1jZztcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlLCAqbmV3X3BhZ2UgPSBOVUxMO1xuJiM0MztcdHZtX2ZhdWx0X3QgZmF1bHRfcmV0O1xuIFx0bG9uZyBrYmFzZSwga2FkZHI7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHJldDtcbkBAIC00ODksNTkgJiM0Mzs0OTAsMTA2IEBAIHN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0a2Jhc2UgPSBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpO1xuIFx0a2FkZHIgPSBrYmFzZSAmIzQzOyAodTMyKSh2bWYtXHUwMDNlYWRkcmVzcyk7XG4gXG4tXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxuJiM0MztcdHBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilrYWRkcik7XG4mIzQzO1x0aWYgKCFwYWdlIFx1MDAyNlx1MDAyNiAhKGFyZW5hLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1NFR1ZfT05fRkFVTFQpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUHJlYWxsb2NhdGUgb3V0c2lkZSB0aGUgbG9jayB3aXRoIGEgc2xlZXBhYmxlIGFsbG9jYXRvciBzbyBpdFxuJiM0MztcdFx0ICogY2FuIHJlY2xhaW0gYW5kIHJ1biB0aGUgbWVtY2cgT09NIGtpbGxlciwgd2hpY2ggdGhlXG4mIzQzO1x0XHQgKiBub24tYmxvY2tpbmcgYWxsb2NhdG9yIHVuZGVyIGFyZW5hLVx1MDAzZXNwaW5sb2NrIGNhbm5vdC4gQSBOVUxMXG4mIzQzO1x0XHQgKiByZXR1cm4gaXMgbm9uLXJlY292ZXJhYmxlLCBzbyBmYWlsIHdpdGggVk1fRkFVTFRfU0lHQlVTO1xuJiM0MztcdFx0ICogVk1fRkFVTFRfT09NIHdvdWxkIGJlIHJldHJpZWQgYnkgdGhlIGZhdWx0IHBhdGggYW5kIGNhblxuJiM0MztcdFx0ICogbGl2ZWxvY2sgd2hlbiB0aGUgY2hhcmdlZCBtZW1jZyBpcyBub3QgdGhlIGZhdWx0aW5nIHRhc2smIzM5O3MuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG4mIzQzO1x0XHRuZXdfcGFnZSA9IGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUobWFwKTtcbiYjNDM7XHRcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG4mIzQzO1x0XHRpZiAoIW5ld19wYWdlKVxuJiM0MztcdFx0XHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBBIGZhaWxlZCBsb2NrIG1lYW5zIGEgcG9zc2libGUgZGVhZGxvY2sgd2FzIGRldGVjdGVkLiBEb24mIzM5O3RcbiBcdFx0ICogcmV0dXJuIFZNX0ZBVUxUX1JFVFJZOiB0aGlzIGhhbmRsZXIgbmV2ZXIgdG9vayBtbWFwX2xvY2ssIGJ1dFxuIFx0XHQgKiB0aGUgZmF1bHQgcGF0aCB3b3VsZCByZS10YWtlIGl0IG9uIHJldHJ5IGFuZCBkZWFkbG9jay4gRmFpbC5cbiBcdFx0ICovXG4mIzQzO1x0XHRpZiAobmV3X3BhZ2UpXG4mIzQzO1x0XHRcdGZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTtcbiBcdFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcbiYjNDM7XHR9XG4gXG4gXHRwYWdlID0gdm1hbGxvY190b19wYWdlKCh2b2lkICopa2FkZHIpO1xuIFx0aWYgKHBhZ2UpIHtcbi1cdFx0aWYgKHBhZ2UgPT0gYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKVxuLVx0XHRcdC8qIEJQRiB0cmlnZ2VyZWQgc2NyYXRjaCBoZXJlOyBkb24mIzM5O3QgbGF6eS1hbGxvYyBvdmVyIGl0ICovXG4tXHRcdFx0Z290byBvdXRfc2lnc2VndjtcbiYjNDM7XHRcdGlmIChwYWdlID09IGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBBIHNjcmF0Y2ggcGFnZSBtYXJrcyBhIGhvbGUuIFNlZ2ZhdWx0IG9ubHkgaWYgdGhlIHVzZXJcbiYjNDM7XHRcdFx0ICogYXNrZWQgZm9yIGl0OyBvdGhlcndpc2Ugd2UgY291bGQgbGF6eS1hbGxvY2F0ZSBidXRcbiYjNDM7XHRcdFx0ICogY2hvb3NlIG5vdCB0byBvdmVyIGEgaG9sZSwgc28gcmVwb3J0IGEgYnVzIGVycm9yLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0ZmF1bHRfcmV0ID0gKGFyZW5hLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1NFR1ZfT05fRkFVTFQpID9cbiYjNDM7XHRcdFx0XHQgICAgVk1fRkFVTFRfU0lHU0VHViA6IFZNX0ZBVUxUX1NJR0JVUztcbiYjNDM7XHRcdFx0Z290byBvdXRfZXJyX2xvY2tlZDtcbiYjNDM7XHRcdH1cbiBcdFx0LyogYWxyZWFkeSBoYXZlIGEgcGFnZSB2bWFwLWVkICovXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuJiM0MztcdGlmIChhcmVuYS1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9TRUdWX09OX0ZBVUxUKSB7XG4mIzQzO1x0XHQvKiBVc2VyIHNwYWNlIHJlcXVlc3RlZCB0byBzZWdmYXVsdCB3aGVuIHBhZ2UgaXMgbm90IGFsbG9jYXRlZCBieSBicGYgcHJvZyAqL1xuJiM0MztcdFx0ZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHU0VHVjtcbiYjNDM7XHRcdGdvdG8gb3V0X2Vycl9sb2NrZWQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG4gXG4tXHRpZiAoYXJlbmEtXHUwMDNlbWFwLm1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVClcbi1cdFx0LyogVXNlciBzcGFjZSByZXF1ZXN0ZWQgdG8gc2VnZmF1bHQgd2hlbiBwYWdlIGlzIG5vdCBhbGxvY2F0ZWQgYnkgYnBmIHByb2cgKi9cbi1cdFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcbiYjNDM7XHRpZiAoIW5ld19wYWdlKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVmVyeSByYXJlIHJhY2U6IHRoZSBicGYgcHJvZ3JhbSBoYWQgYWxsb2NhdGVkIGEgcGFnZSBoZXJlLCBzb1xuJiM0MztcdFx0ICogdGhlIGxvY2tsZXNzIHByb2JlIHNhdyBpdCBhbmQgd2Ugc2tpcHBlZCBwcmVhbGxvY2F0aW9uLCBidXQgaXRcbiYjNDM7XHRcdCAqIGZyZWVkIHRoZSBwYWdlIGJlZm9yZSB3ZSB0b29rIHRoZSBsb2NrLiBOb3cgd2UgZG8gbmVlZCBvbmU7XG4mIzQzO1x0XHQgKiBzbGVlcGluZyBpcyBub3QgYWxsb3dlZCBoZXJlLCBzbyBmYWxsIGJhY2sgdG8gdGhlIG5vbi1ibG9ja2luZ1xuJiM0MztcdFx0ICogYWxsb2NhdG9yIGFuZCBnaXZlIHVwIGlmIGl0IGZhaWxzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXQgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKG1hcCwgbWFwLVx1MDAzZW51bWFfbm9kZSwgMSwgXHUwMDI2bmV3X3BhZ2UpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFxuIFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4tXG4tXHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gXHUwMDI2cGFnZSwgLmkgPSAwIH07XG4tXHQvKiBBY2NvdW50IGludG8gbWVtY2cgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGJwZl9hcmVuYSAqL1xuLVx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIE5VTUFfTk9fTk9ERSwgMSwgXHUwMDI2cGFnZSk7XG4gXHRpZiAocmV0KSB7XG4tXHRcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCB2bWYtXHUwMDNlcGdvZmYsIDEpO1xuLVx0XHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xuJiM0MztcdFx0ZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xuJiM0MztcdFx0Z290byBvdXRfZXJyX2xvY2tlZF9tZW1jZztcbiBcdH1cbiYjNDM7XHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gXHUwMDI2bmV3X3BhZ2UsIC5pID0gMCB9O1xuIFxuIFx0cmV0ID0gYXBwbHlfdG9fcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBrYWRkciwgUEFHRV9TSVpFLCBhcHBseV9yYW5nZV9zZXRfY2IsIFx1MDAyNmRhdGEpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbi1cdFx0ZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7XG4tXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4mIzQzO1x0XHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnO1xuIFx0fVxuIFx0Zmx1c2hfdm1hcF9jYWNoZShrYWRkciwgUEFHRV9TSVpFKTtcbiBcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG4mIzQzO1x0LyogbmV3X3BhZ2Ugd2FzIGNvbnN1bWVkICovXG4mIzQzO1x0cGFnZSA9IG5ld19wYWdlO1xuJiM0MztcdG5ld19wYWdlID0gTlVMTDtcbiBvdXQ6XG4gXHRwYWdlX3JlZl9hZGQocGFnZSwgMSk7XG4gXHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbiYjNDM7XHRpZiAobmV3X3BhZ2UpXG4mIzQzO1x0XHRmcmVlX3BhZ2VzX25vbG9jayhuZXdfcGFnZSwgMCk7XG4gXHR2bWYtXHUwMDNlcGFnZSA9IHBhZ2U7XG4gXHRyZXR1cm4gMDtcbi1vdXRfc2lnc2Vndl9tZW1jZzpcbiYjNDM7XG4mIzQzO291dF9lcnJfbG9ja2VkX21lbWNnOlxuIFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbi1vdXRfc2lnc2VndjpcbiYjNDM7b3V0X2Vycl9sb2NrZWQ6XG4gXHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbi1cdHJldHVybiBWTV9GQVVMVF9TSUdTRUdWO1xuJiM0MztcdGlmIChuZXdfcGFnZSlcbiYjNDM7XHRcdGZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTtcbiYjNDM7XHRyZXR1cm4gZmF1bHRfcmV0O1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFyZW5hX3ZtX29wcyA9IHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA2ODc0YmExNDI0YWYwLi5mOWI4MTYzOGU1MzdhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtNjAyLDE1ICYjNDM7NjAyLDE0IEBAIHN0YXRpYyBib29sIGNhbl9hbGxvY19wYWdlcyh2b2lkKVxuIFx0XHQhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCk7XG4gfVxuIFxuJiM0MzsjZGVmaW5lIEJQRl9QQUdFX0dGUCAoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fYnBmX2FsbG9jX3BhZ2UoaW50IG5pZClcbiB7XG4gXHRpZiAoIWNhbl9hbGxvY19wYWdlcygpKVxuIFx0XHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9sb2NrKF9fR0ZQX0FDQ09VTlQsIG5pZCwgMCk7XG4gXG4tXHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShuaWQsXG4tXHRcdFx0XHRHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyB8IF9fR0ZQX0FDQ09VTlRcbi1cdFx0XHRcdHwgX19HRlBfTk9XQVJOLFxuLVx0XHRcdFx0MCk7XG4mIzQzO1x0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobmlkLCBCUEZfUEFHRV9HRlAsIDApO1xuIH1cbiBcbiBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxuQEAgLTYzNiw2ICYjNDM7NjM1LDIwIEBAIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogRm9yIGNhbGxlcnMgdGhhdCBrbm93IHRoZXkgcnVuIGluIGEgc2xlZXBhYmxlIGNvbnRleHQsIGUuZy4gYSB1c2VyIHBhZ2VcbiYjNDM7ICogZmF1bHQgaGFuZGxlci4gY2FuX2FsbG9jX3BhZ2VzKCkgaXMgYSBjb25zZXJ2YXRpdmUgZ3Vlc3MgbWFkZSBmb3IgQlBGXG4mIzQzOyAqIHByb2dyYW0gY29udGV4dCAtIG5vdGFibHkgaXQgaXMgYWx3YXlzIGZhbHNlIG9uIFBSRUVNUFRfUlQgLSBzbyBnb2luZ1xuJiM0MzsgKiB0aHJvdWdoIGJwZl9tYXBfYWxsb2NfcGFnZXMoKSB0aGVyZSB3b3VsZCBuZWVkbGVzc2x5IHBpY2sgdGhlXG4mIzQzOyAqIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IsIHdoaWNoIG5ldmVyIHJlY2xhaW1zIGFuZCBuZXZlciBlbmdhZ2VzIHRoZSBPT01cbiYjNDM7ICogbWFjaGluZXJ5LlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbiYjNDM7e1xuJiM0MztcdG1pZ2h0X3NsZWVwKCk7XG4mIzQzO1x0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobWFwLVx1MDAzZW51bWFfbm9kZSwgQlBGX1BBR0VfR0ZQLCAwKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGJ0Zl9maWVsZF9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX2ZpZWxkICpmMSA9IGEsICpmMiA9IGI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuY1xuaW5kZXggNDVjZDBiNDc5ZmUzNS4uNDE4M2ZmNjE1MGMyOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuY1xuQEAgLTE4OCw2ICYjNDM7MTg4LDczIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbiBcdHJldHVybiBfX3dyaXRlX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBfX3JlYWRfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqY2dyb3VwX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4mIzQzO1x0XHRcdCAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdGNoYXIgZmlsZV9wYXRoW1BBVEhfTUFYICYjNDM7IDFdO1xuJiM0MztcdHNzaXplX3QgZ290O1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYoZmlsZV9wYXRoLCBzaXplb2YoZmlsZV9wYXRoKSwgXCYjMzQ7JXMvJXNcJiMzNDssIGNncm91cF9wYXRoLCBmaWxlKTtcbiYjNDM7XHRmZCA9IG9wZW4oZmlsZV9wYXRoLCBPX1JET05MWSk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRsb2dfZXJyKFwmIzM0O09wZW5pbmcgJXNcJiMzNDssIGZpbGVfcGF0aCk7XG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGdvdCA9IHJlYWQoZmQsIGJ1ZiwgbGVuIC0gMSk7XG4mIzQzO1x0aWYgKGdvdCBcdTAwM2MgMCkge1xuJiM0MztcdFx0bG9nX2VycihcJiMzNDtSZWFkaW5nICVzXCYjMzQ7LCBmaWxlX3BhdGgpO1xuJiM0MztcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0fVxuJiM0MztcdGJ1Zltnb3RdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiByZWFkX2Nncm91cF9maWxlKCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZVxuJiM0MzsgKiBAcmVsYXRpdmVfcGF0aDogVGhlIGNncm91cCBwYXRoLCByZWxhdGl2ZSB0byB0aGUgd29ya2RpclxuJiM0MzsgKiBAZmlsZTogVGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gY2dyb3VwZnMgdG8gcmVhZCBmcm9tXG4mIzQzOyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3NcbiYjNDM7ICogQGxlbjogU2l6ZSBvZiBAYnVmXG4mIzQzOyAqXG4mIzQzOyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCYjMzk7cyBkaXJlY3RvcnkuXG4mIzQzOyAqXG4mIzQzOyAqIElmIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQuXG4mIzQzOyAqL1xuJiM0MztpbnQgcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuJiM0MztcdFx0ICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGNncm91cF9wYXRoW1BBVEhfTUFYIC0gMjRdO1xuJiM0MztcbiYjNDM7XHRmb3JtYXRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpO1xuJiM0MztcdHJldHVybiBfX3JlYWRfY2dyb3VwX2ZpbGUoY2dyb3VwX3BhdGgsIGZpbGUsIGJ1ZiwgbGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZSBpbiB0aGUgcGFyZW50IHByb2Nlc3NcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtkaXJcbiYjNDM7ICogQHJlbGF0aXZlX3BhdGg6IFRoZSBjZ3JvdXAgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBwcm9jZXNzIHdvcmtkaXJcbiYjNDM7ICogQGZpbGU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIGNncm91cGZzIHRvIHJlYWQgZnJvbVxuJiM0MzsgKiBAYnVmOiBCdWZmZXIgdG8gcmVhZCBpbnRvLCBOVUwtdGVybWluYXRlZCBvbiBzdWNjZXNzXG4mIzQzOyAqIEBsZW46IFNpemUgb2YgQGJ1ZlxuJiM0MzsgKlxuJiM0MzsgKiBSZWFkIGZyb20gYSBmaWxlIGluIHRoZSBnaXZlbiBjZ3JvdXAmIzM5O3MgZGlyZWN0b3J5IHVuZGVyIHRoZSBwYXJlbnQgcHJvY2Vzc1xuJiM0MzsgKiB3b3JrZGlyLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiBzdWNjZXNzZnVsLCAwIGlzIHJldHVybmVkLlxuJiM0MzsgKi9cbiYjNDM7aW50IHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4mIzQzO1x0XHRcdCAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGNncm91cF9wYXRoW1BBVEhfTUFYIC0gMjRdO1xuJiM0MztcbiYjNDM7XHRmb3JtYXRfcGFyZW50X2Nncm91cF9wYXRoKGNncm91cF9wYXRoLCByZWxhdGl2ZV9wYXRoKTtcbiYjNDM7XHRyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCkgLSBTZXR1cCB0aGUgY2dyb3VwIGVudmlyb25tZW50XG4gICpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oXG5pbmRleCAzODU3MzA0YmU4NzQxLi5kNDJkMmUxMzA0NGU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oXG5AQCAtMTUsNiAmIzQzOzE1LDEwIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuIFx0XHQgICAgICBjb25zdCBjaGFyICpidWYpO1xuIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbiBcdFx0XHQgICAgIGNvbnN0IGNoYXIgKmJ1Zik7XG4mIzQzO2ludCByZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4mIzQzO1x0XHQgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4mIzQzO2ludCByZWFkX2Nncm91cF9maWxlX3BhcmVudChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuJiM0MztcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcbiBpbnQgY2dyb3VwX3NldHVwX2FuZF9qb2luKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgpO1xuIGludCBnZXRfcm9vdF9jZ3JvdXAodm9pZCk7XG4gaW50IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtY2cuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM1N2I5ODQ5NGNmYWJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbWNnLmNcbkBAIC0wLDAgJiM0MzsxLDE1OCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy91c2VyLmhcdTAwM2VcbiYjNDM7I2lmbmRlZiBQQUdFX1NJWkUgLyogb24gc29tZSBhcmNocyBpdCBjb21lcyBpbiBzeXMvdXNlci5oICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNkZWZpbmUgUEFHRV9TSVpFIGdldHBhZ2VzaXplKClcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjZ3JvdXBfaGVscGVycy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2FyZW5hX21lbWNnLnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBDR19QQVRIXHRcdFwmIzM0Oy9hcmVuYV9tZW1jZ1wmIzM0O1xuJiM0MztcbiYjNDM7LyogQnVkZ2V0IHRoZSBhcmVuYSBnZXRzIG9uIHRvcCBvZiB3aGF0ZXZlciBpcyBhbHJlYWR5IGNoYXJnZWQgYWZ0ZXIgbG9hZC4gKi9cbiYjNDM7I2RlZmluZSBBUkVOQV9CVURHRVRcdCg2NCAqIDEwMjQgKiAxMDI0KVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZHVtcF9tZW1jZyhpbnQgKCpyZCkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KSlcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmWzUxMl07XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogbWVtb3J5LmN1cnJlbnQgcmVhZHMgMCBvbmNlIHRoZSBjaGlsZCBoYXMgbGVmdCB0aGUgY2dyb3VwLCBzbyBpdCBvbmx5XG4mIzQzO1x0ICogY2FycmllcyBpbmZvcm1hdGlvbiB3aGVuIGR1bXBlZCBmcm9tIHRoZSBsaXZlIGNoaWxkOyBtZW1vcnkucGVhayBhbmRcbiYjNDM7XHQgKiBtZW1vcnkuZXZlbnRzIHN1cnZpdmUgdGhlIGNoaWxkIGFuZCB0ZWxsIHRoZSBzdG9yeSBlaXRoZXIgd2F5LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghcmQoQ0dfUEFUSCwgXCYjMzQ7bWVtb3J5LmN1cnJlbnRcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O21lbW9yeS5jdXJyZW50OiAlc1wmIzM0OywgYnVmKTtcbiYjNDM7XHRpZiAoIXJkKENHX1BBVEgsIFwmIzM0O21lbW9yeS5tYXhcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O21lbW9yeS5tYXg6ICVzXCYjMzQ7LCBidWYpO1xuJiM0MztcdGlmICghcmQoQ0dfUEFUSCwgXCYjMzQ7bWVtb3J5LnBlYWtcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O21lbW9yeS5wZWFrOiAlc1wmIzM0OywgYnVmKTtcbiYjNDM7XHRpZiAoIXJkKENHX1BBVEgsIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O21lbW9yeS5ldmVudHM6XFxuJXNcJiMzNDssIGJ1Zik7XG4mIzQzO1x0ZmZsdXNoKHN0ZGVycik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFJlYWQgb25lIGtleSBmcm9tIGEgZmxhdCBrZXllZCBjZ3JvdXAgZmlsZSwgZS5nLiBcJiMzNDtvb21fa2lsbFwmIzM0OyBpbiBtZW1vcnkuZXZlbnRzLiAqL1xuJiM0MztzdGF0aWMgbG9uZyBjZ19yZWFkX2tleShjb25zdCBjaGFyICpjZywgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqa2V5KVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbNTEyXSwgKnA7XG4mIzQzO1xuJiM0MztcdGlmIChyZWFkX2Nncm91cF9maWxlKGNnLCBmaWxlLCBidWYsIHNpemVvZihidWYpKSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRwID0gc3Ryc3RyKGJ1Ziwga2V5KTtcbiYjNDM7XHRpZiAoIXApXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0cmV0dXJuIHN0cnRvbChwICYjNDM7IHN0cmxlbihrZXkpLCBOVUxMLCAxMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtY2codm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBjZ3JvdXBfZmQgPSAtMSwgc3RhdHVzLCBlcnI7XG4mIzQzO1x0Y29uc3QgbG9uZyBwcyA9IFBBR0VfU0laRTtcbiYjNDM7XHRjaGFyIGJ1Zls2NF07XG4mIzQzO1x0cGlkX3QgcGlkO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NldHVwX2Nncm91cF9lbnZpcm9ubWVudFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGNncm91cF9mZCA9IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChDR19QQVRIKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsIFwmIzM0O2NyZWF0ZV9hbmRfZ2V0X2Nncm91cFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogTm8gbWVtb3J5IGNvbnRyb2xsZXIgLVx1MDAzZSBub3RoaW5nIHRvIHRlc3QuICovXG4mIzQzO1x0aWYgKHJlYWRfY2dyb3VwX2ZpbGUoQ0dfUEFUSCwgXCYjMzQ7bWVtb3J5LmN1cnJlbnRcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7JXM6U0tJUDpubyBtZW1vcnkgY29udHJvbGxlclxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwaWQgPSBmb3JrKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UocGlkLCAwLCBcJiMzNDtmb3JrXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmIChwaWQgPT0gMCkge1xuJiM0MztcdFx0c3RydWN0IGFyZW5hX21lbWNnICpjc2tlbDtcbiYjNDM7XHRcdF9fdTMyIGksIG5wYWdlcztcbiYjNDM7XHRcdGNoYXIgKmJhc2U7XG4mIzQzO1x0XHRzaXplX3Qgc3o7XG4mIzQzO1x0XHRsb25nIGN1cjtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRG8gZXZlcnl0aGluZyBmcm9tIHRoZSBjaGlsZDogdGhlIGFyZW5hIHZtYSBpcyBWTV9ET05UQ09QWSBzb1xuJiM0MztcdFx0ICogaXQgd291bGQgbm90IHN1cnZpdmUgZm9yaygpLCBvbmx5IHRoZSBjaGlsZCBzaG91bGQgYmUgdW5kZXIgdGhlXG4mIzQzO1x0XHQgKiBsaW1pdCBzbyB0aGF0IGEgbWVtY2cgT09NIGNhbm5vdCBwaWNrIHRlc3RfcHJvZ3MsIGFuZCBhIG1hcCBpc1xuJiM0MztcdFx0ICogY2hhcmdlZCB0byB0aGUgbWVtY2cgb2YgdGhlIHRhc2sgdGhhdCBjcmVhdGVzIGl0IC0gc28gam9pblxuJiM0MztcdFx0ICogYmVmb3JlIGxvYWQuIFRoZSBjZ3JvdXAgd29yayBkaXIgYmVsb25ncyB0byB0aGUgcGFyZW50IHRoYXQgc2V0XG4mIzQzO1x0XHQgKiB0aGUgZW52aXJvbm1lbnQgdXAsIHNvIHJlYWNoIGl0IHdpdGggdGhlIF9wYXJlbnQoKSBoZWxwZXJzLlxuJiM0MztcdFx0ICogRXJyb3JzIGFyZSByZXBvcnRlZCB0byB0aGUgcGFyZW50IHRocm91Z2ggdGhlIGV4aXQgY29kZSwgc2luY2VcbiYjNDM7XHRcdCAqIEFTU0VSVF8qIGluIGEgZm9ya2VkIGNoaWxkIGRvZXMgbm90IHJlYWNoIGl0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDslZFwmIzM0OywgZ2V0cGlkKCkpO1xuJiM0MztcdFx0aWYgKHdyaXRlX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCBcJiMzNDtjZ3JvdXAucHJvY3NcJiMzNDssIGJ1ZikpXG4mIzQzO1x0XHRcdF9leGl0KDIpO1xuJiM0MztcbiYjNDM7XHRcdGNza2VsID0gYXJlbmFfbWVtY2dfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRcdGlmICghY3NrZWwpXG4mIzQzO1x0XHRcdF9leGl0KDMpO1xuJiM0MztcbiYjNDM7XHRcdGJhc2UgPSBicGZfbWFwX19pbml0aWFsX3ZhbHVlKGNza2VsLVx1MDAzZW1hcHMuYXJlbmEsIFx1MDAyNnN6KTtcbiYjNDM7XHRcdGlmICghYmFzZSlcbiYjNDM7XHRcdFx0X2V4aXQoNCk7XG4mIzQzO1x0XHRucGFnZXMgPSBicGZfbWFwX19tYXhfZW50cmllcyhjc2tlbC1cdTAwM2VtYXBzLmFyZW5hKTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQ2FwIG9ubHkgbm93LCBhZnRlciBsb2FkOiBldmVyeXRoaW5nIGJ1dCB0aGUgZmF1bHQtaW4gaXNcbiYjNDM7XHRcdCAqIGNoYXJnZWQsIHNvIHRoZSBhcmVuYSBnZXRzIGEgZml4ZWQgYnVkZ2V0IHJlZ2FyZGxlc3Mgb2Ygd2hhdFxuJiM0MztcdFx0ICogdGhlIGxvYWQgaXRzZWxmIGNvc3QsIGFuZCB0aGUgbG9hZCBjYW4gbmV2ZXIgaGl0IHRoZSBsaW1pdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsIFwmIzM0O21lbW9yeS5jdXJyZW50XCYjMzQ7LCBidWYsIHNpemVvZihidWYpKSlcbiYjNDM7XHRcdFx0X2V4aXQoNSk7XG4mIzQzO1x0XHRjdXIgPSBzdHJ0b2woYnVmLCBOVUxMLCAxMCk7XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDslbGRcJiMzNDssIGN1ciAmIzQzOyBBUkVOQV9CVURHRVQpO1xuJiM0MztcdFx0aWYgKHdyaXRlX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCBcJiMzNDttZW1vcnkubWF4XCYjMzQ7LCBidWYpKVxuJiM0MztcdFx0XHRfZXhpdCg2KTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGFnZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRiYXNlWyhzaXplX3QpaSAqIHBzXSA9IDE7XG4mIzQzO1x0XHQvKiBGYXVsdGVkIGV2ZXJ5dGhpbmcgd2l0aG91dCBkeWluZzogZHVtcCB3aHkgKG9ubHkgdW5kZXIgLXYpLiAqL1xuJiM0MztcdFx0ZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlX3BhcmVudCk7XG4mIzQzO1x0XHRfZXhpdCgwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIDApLCBwaWQsIFwmIzM0O3dhaXRwaWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qIEEgbm9uLXplcm8gZXhpdCBtZWFucyB0aGUgY2hpbGQgZmFpbGVkIHRvIHNldCB1cDsgdGhlIGNvZGUgc2F5cyB3aGVyZS4gKi9cbiYjNDM7XHRpZiAoV0lGRVhJVEVEKHN0YXR1cykgXHUwMDI2XHUwMDI2IFdFWElUU1RBVFVTKHN0YXR1cykpIHtcbiYjNDM7XHRcdEFTU0VSVF9PSyhXRVhJVFNUQVRVUyhzdGF0dXMpLCBcJiMzNDtjaGlsZCBzZXR1cFwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRmF1bHRpbmcgYSB2YWxpZCBhcmVuYSBhZGRyZXNzIHVudGlsIG1lbW9yeS5tYXggaXMgaGl0IG11c3Qgbm90IGxvb2tcbiYjNDM7XHQgKiBsaWtlIGFuIGludmFsaWQgYWNjZXNzLiBXaXRob3V0IHRoZSBmaXggdGhlIGZhdWx0IHBhdGggYWxsb2NhdGVkIHdpdGhcbiYjNDM7XHQgKiB0aGUgbm9uLWJsb2NraW5nIGFsbG9jYXRvciwgdHVybmVkIGl0cyAtRU5PTUVNIGludG8gVk1fRkFVTFRfU0lHU0VHVixcbiYjNDM7XHQgKiBhbmQgdGhlIGNoaWxkIGRpZWQgd2l0aCBTSUdTRUdWIG9uIGEgdmFsaWQgYWRkcmVzczsgbm93IGl0IGlzIGhhbmRsZWRcbiYjNDM7XHQgKiBieSB0aGUgbWVtY2cgT09NIHBhdGggaW5zdGVhZC4gQSBTSUdLSUxMIGFsb25lIHdvdWxkIG5vdCBwcm92ZSB0aGVcbiYjNDM7XHQgKiBtZW1jZyBPT00ga2lsbGVyIGRpZCBpdCAoYSBnbG9iYWwgT09NIG9yIGFuIHVucmVsYXRlZCBjcmFzaCBjb3VsZCBhbHNvXG4mIzQzO1x0ICoga2lsbCB0aGUgY2hpbGQpLCBzbyBjaGVjayBtZW1vcnkuZXZlbnRzLm9vbV9raWxsLCB3aGljaCByZWNvcmRzIHRoZVxuJiM0MztcdCAqIG1lbWNnIE9PTSBhbmQgc3Vydml2ZXMgdGhlIGNoaWxkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghQVNTRVJUX1RSVUUoV0lGU0lHTkFMRUQoc3RhdHVzKSwgXCYjMzQ7Y2hpbGQga2lsbGVkIGJ5IHNpZ25hbFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShjZ19yZWFkX2tleShDR19QQVRILCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDtvb21fa2lsbFwmIzM0OyksIDEsXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7bWVtY2cgb29tX2tpbGxcJiMzNDspKVxuJiM0MztcdFx0ZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlKTtcbiYjNDM7b3V0OlxuJiM0MztcdGlmIChjZ3JvdXBfZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoY2dyb3VwX2ZkKTtcbiYjNDM7XHRjbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjg4MjU5Y2ZlYTA2YjZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1jZy5jXG5AQCAtMCwwICYjNDM7MSwyNCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9hcmVuYV9jb21tb24uaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbiYjNDM7XHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCA1MDAwMCk7IC8qIG51bWJlciBvZiBwYWdlcyAqL1xuJiM0MzsjaWZkZWYgX19UQVJHRVRfQVJDSF9hcm02NFxuJiM0MztcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXHUwMDNjXHUwMDNjIDMyKTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuJiM0MzsjZWxzZVxuJiM0MztcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXHUwMDNjXHUwMDNjIDQ0KTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuJiM0MzsjZW5kaWZcbiYjNDM7fSBhcmVuYSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO2ludCBub29wKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjEwbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7Q0dST1VQUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgQlBGIGFyZW5hIG1hcHMgdG8gdXNlIGEgc2xlZXBhYmxlIHBhZ2UgYWxsb2NhdG9yLCBhbGxvd2luZyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBydW4gd2hlbiBtZW1vcnkgbGltaXRzIGFyZSBoaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFmZmVjdGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGludGVyYWN0aW9ucywgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbW1hcGluZyBhbmQgZmF1bHRpbmcgQlBGIGFyZW5hIG1hcHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ODRlYjQ4ZGE5NmQ3YzRlM2ZmMTNmNmRjMGExYmZlNDA1YmZlMjliCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMTA6MjM6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCBiM2NkMjhkOWUzYjU1Li5jODE3Yzk5ZDI5MDY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTI3ODQsNiAmIzQzOzI3ODQsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2dldF9jdXJyX29yX25leHQodTMyICppZCk7CiAKIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsCiAJCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpOwomIzQzO3N0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApOwogI2lmZGVmIENPTkZJR19NRU1DRwogdm9pZCBicGZfbWFwX21lbWNnX2VudGVyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBtZW1fY2dyb3VwICoqb2xkX21lbWNnLAogCQkJIHN0cnVjdCBtZW1fY2dyb3VwICoqbmV3X21lbWNnKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuYwppbmRleCA3YjY4NDcyMDBiNDMxLi5mYTQ2MmEwZmYxYWQ2IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcmVuYS5jCkBAIC00ODEsNyAmIzQzOzQ4MSw4IEBAIHN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCXN0cnVjdCBicGZfbWFwICptYXAgPSB2bWYtJmd0O3ZtYS0mZ3Q7dm1fZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbmV3X21lbWNnLCAqb2xkX21lbWNnOwotCXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZSwgKm5ld19wYWdlID0gTlVMTDsKJiM0MzsJdm1fZmF1bHRfdCBmYXVsdF9yZXQ7CiAJbG9uZyBrYmFzZSwga2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwpAQCAtNDg5LDU5ICYjNDM7NDkwLDEwNiBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlrYmFzZSA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7CiAJa2FkZHIgPSBrYmFzZSAmIzQzOyAodTMyKSh2bWYtJmd0O2FkZHJlc3MpOwogCi0JaWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDthcmVuYS0mZ3Q7c3BpbmxvY2ssIGZsYWdzKSkKJiM0MzsJcGFnZSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWthZGRyKTsKJiM0MzsJaWYgKCFwYWdlICZhbXA7JmFtcDsgIShhcmVuYS0mZ3Q7bWFwLm1hcF9mbGFncyAmYW1wOyBCUEZfRl9TRUdWX09OX0ZBVUxUKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFByZWFsbG9jYXRlIG91dHNpZGUgdGhlIGxvY2sgd2l0aCBhIHNsZWVwYWJsZSBhbGxvY2F0b3Igc28gaXQKJiM0MzsJCSAqIGNhbiByZWNsYWltIGFuZCBydW4gdGhlIG1lbWNnIE9PTSBraWxsZXIsIHdoaWNoIHRoZQomIzQzOwkJICogbm9uLWJsb2NraW5nIGFsbG9jYXRvciB1bmRlciBhcmVuYS0mZ3Q7c3BpbmxvY2sgY2Fubm90LiBBIE5VTEwKJiM0MzsJCSAqIHJldHVybiBpcyBub24tcmVjb3ZlcmFibGUsIHNvIGZhaWwgd2l0aCBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQkgKiBWTV9GQVVMVF9PT00gd291bGQgYmUgcmV0cmllZCBieSB0aGUgZmF1bHQgcGF0aCBhbmQgY2FuCiYjNDM7CQkgKiBsaXZlbG9jayB3aGVuIHRoZSBjaGFyZ2VkIG1lbWNnIGlzIG5vdCB0aGUgZmF1bHRpbmcgdGFzayYjMzk7cy4KJiM0MzsJCSAqLwomIzQzOwkJYnBmX21hcF9tZW1jZ19lbnRlcigmYW1wO2FyZW5hLSZndDttYXAsICZhbXA7b2xkX21lbWNnLCAmYW1wO25ld19tZW1jZyk7CiYjNDM7CQluZXdfcGFnZSA9IGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUobWFwKTsKJiM0MzsJCWJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7CiYjNDM7CQlpZiAoIW5ld19wYWdlKQomIzQzOwkJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDthcmVuYS0mZ3Q7c3BpbmxvY2ssIGZsYWdzKSkgewogCQkvKgogCQkgKiBBIGZhaWxlZCBsb2NrIG1lYW5zIGEgcG9zc2libGUgZGVhZGxvY2sgd2FzIGRldGVjdGVkLiBEb24mIzM5O3QKIAkJICogcmV0dXJuIFZNX0ZBVUxUX1JFVFJZOiB0aGlzIGhhbmRsZXIgbmV2ZXIgdG9vayBtbWFwX2xvY2ssIGJ1dAogCQkgKiB0aGUgZmF1bHQgcGF0aCB3b3VsZCByZS10YWtlIGl0IG9uIHJldHJ5IGFuZCBkZWFkbG9jay4gRmFpbC4KIAkJICovCiYjNDM7CQlpZiAobmV3X3BhZ2UpCiYjNDM7CQkJZnJlZV9wYWdlc19ub2xvY2sobmV3X3BhZ2UsIDApOwogCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwomIzQzOwl9CiAKIAlwYWdlID0gdm1hbGxvY190b19wYWdlKCh2b2lkICopa2FkZHIpOwogCWlmIChwYWdlKSB7Ci0JCWlmIChwYWdlID09IGFyZW5hLSZndDtzY3JhdGNoX3BhZ2UpCi0JCQkvKiBCUEYgdHJpZ2dlcmVkIHNjcmF0Y2ggaGVyZTsgZG9uJiMzOTt0IGxhenktYWxsb2Mgb3ZlciBpdCAqLwotCQkJZ290byBvdXRfc2lnc2VndjsKJiM0MzsJCWlmIChwYWdlID09IGFyZW5hLSZndDtzY3JhdGNoX3BhZ2UpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgc2NyYXRjaCBwYWdlIG1hcmtzIGEgaG9sZS4gU2VnZmF1bHQgb25seSBpZiB0aGUgdXNlcgomIzQzOwkJCSAqIGFza2VkIGZvciBpdDsgb3RoZXJ3aXNlIHdlIGNvdWxkIGxhenktYWxsb2NhdGUgYnV0CiYjNDM7CQkJICogY2hvb3NlIG5vdCB0byBvdmVyIGEgaG9sZSwgc28gcmVwb3J0IGEgYnVzIGVycm9yLgomIzQzOwkJCSAqLwomIzQzOwkJCWZhdWx0X3JldCA9IChhcmVuYS0mZ3Q7bWFwLm1hcF9mbGFncyAmYW1wOyBCUEZfRl9TRUdWX09OX0ZBVUxUKSA/CiYjNDM7CQkJCSAgICBWTV9GQVVMVF9TSUdTRUdWIDogVk1fRkFVTFRfU0lHQlVTOwomIzQzOwkJCWdvdG8gb3V0X2Vycl9sb2NrZWQ7CiYjNDM7CQl9CiAJCS8qIGFscmVhZHkgaGF2ZSBhIHBhZ2Ugdm1hcC1lZCAqLwogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJaWYgKGFyZW5hLSZndDttYXAubWFwX2ZsYWdzICZhbXA7IEJQRl9GX1NFR1ZfT05fRkFVTFQpIHsKJiM0MzsJCS8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovCiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdTRUdWOwomIzQzOwkJZ290byBvdXRfZXJyX2xvY2tlZDsKJiM0MzsJfQomIzQzOwogCWJwZl9tYXBfbWVtY2dfZW50ZXIoJmFtcDthcmVuYS0mZ3Q7bWFwLCAmYW1wO29sZF9tZW1jZywgJmFtcDtuZXdfbWVtY2cpOwogCi0JaWYgKGFyZW5hLSZndDttYXAubWFwX2ZsYWdzICZhbXA7IEJQRl9GX1NFR1ZfT05fRkFVTFQpCi0JCS8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovCi0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CWlmICghbmV3X3BhZ2UpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBWZXJ5IHJhcmUgcmFjZTogdGhlIGJwZiBwcm9ncmFtIGhhZCBhbGxvY2F0ZWQgYSBwYWdlIGhlcmUsIHNvCiYjNDM7CQkgKiB0aGUgbG9ja2xlc3MgcHJvYmUgc2F3IGl0IGFuZCB3ZSBza2lwcGVkIHByZWFsbG9jYXRpb24sIGJ1dCBpdAomIzQzOwkJICogZnJlZWQgdGhlIHBhZ2UgYmVmb3JlIHdlIHRvb2sgdGhlIGxvY2suIE5vdyB3ZSBkbyBuZWVkIG9uZTsKJiM0MzsJCSAqIHNsZWVwaW5nIGlzIG5vdCBhbGxvd2VkIGhlcmUsIHNvIGZhbGwgYmFjayB0byB0aGUgbm9uLWJsb2NraW5nCiYjNDM7CQkgKiBhbGxvY2F0b3IgYW5kIGdpdmUgdXAgaWYgaXQgZmFpbHMuCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBtYXAtJmd0O251bWFfbm9kZSwgMSwgJmFtcDtuZXdfcGFnZSk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHQlVTOwomIzQzOwkJCWdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7CiYjNDM7CQl9CiYjNDM7CX0KIAogCXJldCA9IHJhbmdlX3RyZWVfY2xlYXIoJmFtcDthcmVuYS0mZ3Q7cnQsIHZtZi0mZ3Q7cGdvZmYsIDEpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7Ci0KLQlzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gJmFtcDtwYWdlLCAuaSA9IDAgfTsKLQkvKiBBY2NvdW50IGludG8gbWVtY2cgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGJwZl9hcmVuYSAqLwotCXJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBOVU1BX05PX05PREUsIDEsICZhbXA7cGFnZSk7CiAJaWYgKHJldCkgewotCQlyYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgdm1mLSZndDtwZ29mZiwgMSk7Ci0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQlnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnOwogCX0KJiM0MzsJc3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9ICZhbXA7bmV3X3BhZ2UsIC5pID0gMCB9OwogCiAJcmV0ID0gYXBwbHlfdG9fcGFnZV9yYW5nZSgmYW1wO2luaXRfbW0sIGthZGRyLCBQQUdFX1NJWkUsIGFwcGx5X3JhbmdlX3NldF9jYiwgJmFtcDtkYXRhKTsKIAlpZiAocmV0KSB7CiAJCXJhbmdlX3RyZWVfc2V0KCZhbXA7YXJlbmEtJmd0O3J0LCB2bWYtJmd0O3Bnb2ZmLCAxKTsKLQkJZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7Ci0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQlnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnOwogCX0KIAlmbHVzaF92bWFwX2NhY2hlKGthZGRyLCBQQUdFX1NJWkUpOwogCWJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7CiYjNDM7CS8qIG5ld19wYWdlIHdhcyBjb25zdW1lZCAqLwomIzQzOwlwYWdlID0gbmV3X3BhZ2U7CiYjNDM7CW5ld19wYWdlID0gTlVMTDsKIG91dDoKIAlwYWdlX3JlZl9hZGQocGFnZSwgMSk7CiAJcmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7YXJlbmEtJmd0O3NwaW5sb2NrLCBmbGFncyk7CiYjNDM7CWlmIChuZXdfcGFnZSkKJiM0MzsJCWZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTsKIAl2bWYtJmd0O3BhZ2UgPSBwYWdlOwogCXJldHVybiAwOwotb3V0X3NpZ3NlZ3ZfbWVtY2c6CiYjNDM7CiYjNDM7b3V0X2Vycl9sb2NrZWRfbWVtY2c6CiAJYnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTsKLW91dF9zaWdzZWd2OgomIzQzO291dF9lcnJfbG9ja2VkOgogCXJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2FyZW5hLSZndDtzcGlubG9jaywgZmxhZ3MpOwotCXJldHVybiBWTV9GQVVMVF9TSUdTRUdWOwomIzQzOwlpZiAobmV3X3BhZ2UpCiYjNDM7CQlmcmVlX3BhZ2VzX25vbG9jayhuZXdfcGFnZSwgMCk7CiYjNDM7CXJldHVybiBmYXVsdF9yZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYXJlbmFfdm1fb3BzID0gewpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwppbmRleCA2ODc0YmExNDI0YWYwLi5mOWI4MTYzOGU1MzdhIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwpAQCAtNjAyLDE1ICYjNDM7NjAyLDE0IEBAIHN0YXRpYyBib29sIGNhbl9hbGxvY19wYWdlcyh2b2lkKQogCQkhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCk7CiB9CiAKJiM0MzsjZGVmaW5lIEJQRl9QQUdFX0dGUCAoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKQomIzQzOwogc3RhdGljIHN0cnVjdCBwYWdlICpfX2JwZl9hbGxvY19wYWdlKGludCBuaWQpCiB7CiAJaWYgKCFjYW5fYWxsb2NfcGFnZXMoKSkKIAkJcmV0dXJuIGFsbG9jX3BhZ2VzX25vbG9jayhfX0dGUF9BQ0NPVU5ULCBuaWQsIDApOwogCi0JcmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobmlkLAotCQkJCUdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfQUNDT1VOVAotCQkJCXwgX19HRlBfTk9XQVJOLAotCQkJCTApOwomIzQzOwlyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShuaWQsIEJQRl9QQUdFX0dGUCwgMCk7CiB9CiAKIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsCkBAIC02MzYsNiAmIzQzOzYzNSwyMCBAQCBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEZvciBjYWxsZXJzIHRoYXQga25vdyB0aGV5IHJ1biBpbiBhIHNsZWVwYWJsZSBjb250ZXh0LCBlLmcuIGEgdXNlciBwYWdlCiYjNDM7ICogZmF1bHQgaGFuZGxlci4gY2FuX2FsbG9jX3BhZ2VzKCkgaXMgYSBjb25zZXJ2YXRpdmUgZ3Vlc3MgbWFkZSBmb3IgQlBGCiYjNDM7ICogcHJvZ3JhbSBjb250ZXh0IC0gbm90YWJseSBpdCBpcyBhbHdheXMgZmFsc2Ugb24gUFJFRU1QVF9SVCAtIHNvIGdvaW5nCiYjNDM7ICogdGhyb3VnaCBicGZfbWFwX2FsbG9jX3BhZ2VzKCkgdGhlcmUgd291bGQgbmVlZGxlc3NseSBwaWNrIHRoZQomIzQzOyAqIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IsIHdoaWNoIG5ldmVyIHJlY2xhaW1zIGFuZCBuZXZlciBlbmdhZ2VzIHRoZSBPT00KJiM0MzsgKiBtYWNoaW5lcnkuCiYjNDM7ICovCiYjNDM7c3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCkKJiM0Mzt7CiYjNDM7CW1pZ2h0X3NsZWVwKCk7CiYjNDM7CXJldHVybiBhbGxvY19wYWdlc19ub2RlKG1hcC0mZ3Q7bnVtYV9ub2RlLCBCUEZfUEFHRV9HRlAsIDApOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYnRmX2ZpZWxkX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogewogCWNvbnN0IHN0cnVjdCBidGZfZmllbGQgKmYxID0gYSwgKmYyID0gYjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKaW5kZXggNDVjZDBiNDc5ZmUzNS4uNDE4M2ZmNjE1MGMyOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKQEAgLTE4OCw2ICYjNDM7MTg4LDczIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKIAlyZXR1cm4gX193cml0ZV9jZ3JvdXBfZmlsZShjZ3JvdXBfcGF0aCwgZmlsZSwgYnVmKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgX19yZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKmNncm91cF9wYXRoLCBjb25zdCBjaGFyICpmaWxlLAomIzQzOwkJCSAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWNoYXIgZmlsZV9wYXRoW1BBVEhfTUFYICYjNDM7IDFdOwomIzQzOwlzc2l6ZV90IGdvdDsKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlzbnByaW50ZihmaWxlX3BhdGgsIHNpemVvZihmaWxlX3BhdGgpLCAmIzM0OyVzLyVzJiMzNDssIGNncm91cF9wYXRoLCBmaWxlKTsKJiM0MzsJZmQgPSBvcGVuKGZpbGVfcGF0aCwgT19SRE9OTFkpOwomIzQzOwlpZiAoZmQgJmx0OyAwKSB7CiYjNDM7CQlsb2dfZXJyKCYjMzQ7T3BlbmluZyAlcyYjMzQ7LCBmaWxlX3BhdGgpOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZ290ID0gcmVhZChmZCwgYnVmLCBsZW4gLSAxKTsKJiM0MzsJaWYgKGdvdCAmbHQ7IDApIHsKJiM0MzsJCWxvZ19lcnIoJiMzNDtSZWFkaW5nICVzJiMzNDssIGZpbGVfcGF0aCk7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwlidWZbZ290XSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcmVhZF9jZ3JvdXBfZmlsZSgpIC0gUmVhZCBmcm9tIGEgY2dyb3VwIGZpbGUKJiM0MzsgKiBAcmVsYXRpdmVfcGF0aDogVGhlIGNncm91cCBwYXRoLCByZWxhdGl2ZSB0byB0aGUgd29ya2RpcgomIzQzOyAqIEBmaWxlOiBUaGUgbmFtZSBvZiB0aGUgZmlsZSBpbiBjZ3JvdXBmcyB0byByZWFkIGZyb20KJiM0MzsgKiBAYnVmOiBCdWZmZXIgdG8gcmVhZCBpbnRvLCBOVUwtdGVybWluYXRlZCBvbiBzdWNjZXNzCiYjNDM7ICogQGxlbjogU2l6ZSBvZiBAYnVmCiYjNDM7ICoKJiM0MzsgKiBSZWFkIGZyb20gYSBmaWxlIGluIHRoZSBnaXZlbiBjZ3JvdXAmIzM5O3MgZGlyZWN0b3J5LgomIzQzOyAqCiYjNDM7ICogSWYgc3VjY2Vzc2Z1bCwgMCBpcyByZXR1cm5lZC4KJiM0MzsgKi8KJiM0MztpbnQgcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLAomIzQzOwkJICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwljaGFyIGNncm91cF9wYXRoW1BBVEhfTUFYIC0gMjRdOwomIzQzOwomIzQzOwlmb3JtYXRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpOwomIzQzOwlyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZSBpbiB0aGUgcGFyZW50IHByb2Nlc3MKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2RpcgomIzQzOyAqIEByZWxhdGl2ZV9wYXRoOiBUaGUgY2dyb3VwIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgcHJvY2VzcyB3b3JrZGlyCiYjNDM7ICogQGZpbGU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIGNncm91cGZzIHRvIHJlYWQgZnJvbQomIzQzOyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3MKJiM0MzsgKiBAbGVuOiBTaXplIG9mIEBidWYKJiM0MzsgKgomIzQzOyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCYjMzk7cyBkaXJlY3RvcnkgdW5kZXIgdGhlIHBhcmVudCBwcm9jZXNzCiYjNDM7ICogd29ya2Rpci4KJiM0MzsgKgomIzQzOyAqIElmIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQuCiYjNDM7ICovCiYjNDM7aW50IHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiYjNDM7CQkJICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWNoYXIgY2dyb3VwX3BhdGhbUEFUSF9NQVggLSAyNF07CiYjNDM7CiYjNDM7CWZvcm1hdF9wYXJlbnRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpOwomIzQzOwlyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKSAtIFNldHVwIHRoZSBjZ3JvdXAgZW52aXJvbm1lbnQKICAqCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCmluZGV4IDM4NTczMDRiZTg3NDEuLmQ0MmQyZTEzMDQ0ZTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCkBAIC0xNSw2ICYjNDM7MTUsMTAgQEAgaW50IHdyaXRlX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiAJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Zik7CiBpbnQgd3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiAJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Zik7CiYjNDM7aW50IHJlYWRfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKJiM0MzsJCSAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKJiM0MztpbnQgcmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKJiM0MzsJCQkgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKIGludCBjZ3JvdXBfc2V0dXBfYW5kX2pvaW4oY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCk7CiBpbnQgZ2V0X3Jvb3RfY2dyb3VwKHZvaWQpOwogaW50IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmM1N2I5ODQ5NGNmYWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jCkBAIC0wLDAgJiM0MzsxLDE1OCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvdXNlci5oJmd0OwomIzQzOyNpZm5kZWYgUEFHRV9TSVpFIC8qIG9uIHNvbWUgYXJjaHMgaXQgY29tZXMgaW4gc3lzL3VzZXIuaCAqLwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjZGVmaW5lIFBBR0VfU0laRSBnZXRwYWdlc2l6ZSgpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjZ3JvdXBfaGVscGVycy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2FyZW5hX21lbWNnLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBDR19QQVRICQkmIzM0Oy9hcmVuYV9tZW1jZyYjMzQ7CiYjNDM7CiYjNDM7LyogQnVkZ2V0IHRoZSBhcmVuYSBnZXRzIG9uIHRvcCBvZiB3aGF0ZXZlciBpcyBhbHJlYWR5IGNoYXJnZWQgYWZ0ZXIgbG9hZC4gKi8KJiM0MzsjZGVmaW5lIEFSRU5BX0JVREdFVAkoNjQgKiAxMDI0ICogMTAyNCkKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkdW1wX21lbWNnKGludCAoKnJkKShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpKQomIzQzO3sKJiM0MzsJY2hhciBidWZbNTEyXTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogbWVtb3J5LmN1cnJlbnQgcmVhZHMgMCBvbmNlIHRoZSBjaGlsZCBoYXMgbGVmdCB0aGUgY2dyb3VwLCBzbyBpdCBvbmx5CiYjNDM7CSAqIGNhcnJpZXMgaW5mb3JtYXRpb24gd2hlbiBkdW1wZWQgZnJvbSB0aGUgbGl2ZSBjaGlsZDsgbWVtb3J5LnBlYWsgYW5kCiYjNDM7CSAqIG1lbW9yeS5ldmVudHMgc3Vydml2ZSB0aGUgY2hpbGQgYW5kIHRlbGwgdGhlIHN0b3J5IGVpdGhlciB3YXkuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXJkKENHX1BBVEgsICYjMzQ7bWVtb3J5LmN1cnJlbnQmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkuY3VycmVudDogJXMmIzM0OywgYnVmKTsKJiM0MzsJaWYgKCFyZChDR19QQVRILCAmIzM0O21lbW9yeS5tYXgmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkubWF4OiAlcyYjMzQ7LCBidWYpOwomIzQzOwlpZiAoIXJkKENHX1BBVEgsICYjMzQ7bWVtb3J5LnBlYWsmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkucGVhazogJXMmIzM0OywgYnVmKTsKJiM0MzsJaWYgKCFyZChDR19QQVRILCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkuZXZlbnRzOlxuJXMmIzM0OywgYnVmKTsKJiM0MzsJZmZsdXNoKHN0ZGVycik7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlYWQgb25lIGtleSBmcm9tIGEgZmxhdCBrZXllZCBjZ3JvdXAgZmlsZSwgZS5nLiAmIzM0O29vbV9raWxsJiMzNDsgaW4gbWVtb3J5LmV2ZW50cy4gKi8KJiM0MztzdGF0aWMgbG9uZyBjZ19yZWFkX2tleShjb25zdCBjaGFyICpjZywgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqa2V5KQomIzQzO3sKJiM0MzsJY2hhciBidWZbNTEyXSwgKnA7CiYjNDM7CiYjNDM7CWlmIChyZWFkX2Nncm91cF9maWxlKGNnLCBmaWxlLCBidWYsIHNpemVvZihidWYpKSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcCA9IHN0cnN0cihidWYsIGtleSk7CiYjNDM7CWlmICghcCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcmV0dXJuIHN0cnRvbChwICYjNDM7IHN0cmxlbihrZXkpLCBOVUxMLCAxMCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtY2codm9pZCkKJiM0Mzt7CiYjNDM7CWludCBjZ3JvdXBfZmQgPSAtMSwgc3RhdHVzLCBlcnI7CiYjNDM7CWNvbnN0IGxvbmcgcHMgPSBQQUdFX1NJWkU7CiYjNDM7CWNoYXIgYnVmWzY0XTsKJiM0MzsJcGlkX3QgcGlkOwomIzQzOwomIzQzOwllcnIgPSBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NldHVwX2Nncm91cF9lbnZpcm9ubWVudCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY2dyb3VwX2ZkID0gY3JlYXRlX2FuZF9nZXRfY2dyb3VwKENHX1BBVEgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsICYjMzQ7Y3JlYXRlX2FuZF9nZXRfY2dyb3VwJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qIE5vIG1lbW9yeSBjb250cm9sbGVyIC0mZ3Q7IG5vdGhpbmcgdG8gdGVzdC4gKi8KJiM0MzsJaWYgKHJlYWRfY2dyb3VwX2ZpbGUoQ0dfUEFUSCwgJiMzNDttZW1vcnkuY3VycmVudCYjMzQ7LCBidWYsIHNpemVvZihidWYpKSkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7JXM6U0tJUDpubyBtZW1vcnkgY29udHJvbGxlclxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXBpZCA9IGZvcmsoKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UocGlkLCAwLCAmIzM0O2ZvcmsmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQlzdHJ1Y3QgYXJlbmFfbWVtY2cgKmNza2VsOwomIzQzOwkJX191MzIgaSwgbnBhZ2VzOwomIzQzOwkJY2hhciAqYmFzZTsKJiM0MzsJCXNpemVfdCBzejsKJiM0MzsJCWxvbmcgY3VyOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIERvIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgY2hpbGQ6IHRoZSBhcmVuYSB2bWEgaXMgVk1fRE9OVENPUFkgc28KJiM0MzsJCSAqIGl0IHdvdWxkIG5vdCBzdXJ2aXZlIGZvcmsoKSwgb25seSB0aGUgY2hpbGQgc2hvdWxkIGJlIHVuZGVyIHRoZQomIzQzOwkJICogbGltaXQgc28gdGhhdCBhIG1lbWNnIE9PTSBjYW5ub3QgcGljayB0ZXN0X3Byb2dzLCBhbmQgYSBtYXAgaXMKJiM0MzsJCSAqIGNoYXJnZWQgdG8gdGhlIG1lbWNnIG9mIHRoZSB0YXNrIHRoYXQgY3JlYXRlcyBpdCAtIHNvIGpvaW4KJiM0MzsJCSAqIGJlZm9yZSBsb2FkLiBUaGUgY2dyb3VwIHdvcmsgZGlyIGJlbG9uZ3MgdG8gdGhlIHBhcmVudCB0aGF0IHNldAomIzQzOwkJICogdGhlIGVudmlyb25tZW50IHVwLCBzbyByZWFjaCBpdCB3aXRoIHRoZSBfcGFyZW50KCkgaGVscGVycy4KJiM0MzsJCSAqIEVycm9ycyBhcmUgcmVwb3J0ZWQgdG8gdGhlIHBhcmVudCB0aHJvdWdoIHRoZSBleGl0IGNvZGUsIHNpbmNlCiYjNDM7CQkgKiBBU1NFUlRfKiBpbiBhIGZvcmtlZCBjaGlsZCBkb2VzIG5vdCByZWFjaCBpdC4KJiM0MzsJCSAqLwomIzQzOwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslZCYjMzQ7LCBnZXRwaWQoKSk7CiYjNDM7CQlpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsICYjMzQ7Y2dyb3VwLnByb2NzJiMzNDssIGJ1ZikpCiYjNDM7CQkJX2V4aXQoMik7CiYjNDM7CiYjNDM7CQljc2tlbCA9IGFyZW5hX21lbWNnX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CQlpZiAoIWNza2VsKQomIzQzOwkJCV9leGl0KDMpOwomIzQzOwomIzQzOwkJYmFzZSA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUoY3NrZWwtJmd0O21hcHMuYXJlbmEsICZhbXA7c3opOwomIzQzOwkJaWYgKCFiYXNlKQomIzQzOwkJCV9leGl0KDQpOwomIzQzOwkJbnBhZ2VzID0gYnBmX21hcF9fbWF4X2VudHJpZXMoY3NrZWwtJmd0O21hcHMuYXJlbmEpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIENhcCBvbmx5IG5vdywgYWZ0ZXIgbG9hZDogZXZlcnl0aGluZyBidXQgdGhlIGZhdWx0LWluIGlzCiYjNDM7CQkgKiBjaGFyZ2VkLCBzbyB0aGUgYXJlbmEgZ2V0cyBhIGZpeGVkIGJ1ZGdldCByZWdhcmRsZXNzIG9mIHdoYXQKJiM0MzsJCSAqIHRoZSBsb2FkIGl0c2VsZiBjb3N0LCBhbmQgdGhlIGxvYWQgY2FuIG5ldmVyIGhpdCB0aGUgbGltaXQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyZWFkX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCAmIzM0O21lbW9yeS5jdXJyZW50JiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKQomIzQzOwkJCV9leGl0KDUpOwomIzQzOwkJY3VyID0gc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwomIzQzOwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslbGQmIzM0OywgY3VyICYjNDM7IEFSRU5BX0JVREdFVCk7CiYjNDM7CQlpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsICYjMzQ7bWVtb3J5Lm1heCYjMzQ7LCBidWYpKQomIzQzOwkJCV9leGl0KDYpOwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5wYWdlczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJYmFzZVsoc2l6ZV90KWkgKiBwc10gPSAxOwomIzQzOwkJLyogRmF1bHRlZCBldmVyeXRoaW5nIHdpdGhvdXQgZHlpbmc6IGR1bXAgd2h5IChvbmx5IHVuZGVyIC12KS4gKi8KJiM0MzsJCWR1bXBfbWVtY2cocmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQpOwomIzQzOwkJX2V4aXQoMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfRVEod2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCAwKSwgcGlkLCAmIzM0O3dhaXRwaWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogQSBub24temVybyBleGl0IG1lYW5zIHRoZSBjaGlsZCBmYWlsZWQgdG8gc2V0IHVwOyB0aGUgY29kZSBzYXlzIHdoZXJlLiAqLwomIzQzOwlpZiAoV0lGRVhJVEVEKHN0YXR1cykgJmFtcDsmYW1wOyBXRVhJVFNUQVRVUyhzdGF0dXMpKSB7CiYjNDM7CQlBU1NFUlRfT0soV0VYSVRTVEFUVVMoc3RhdHVzKSwgJiMzNDtjaGlsZCBzZXR1cCYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZhdWx0aW5nIGEgdmFsaWQgYXJlbmEgYWRkcmVzcyB1bnRpbCBtZW1vcnkubWF4IGlzIGhpdCBtdXN0IG5vdCBsb29rCiYjNDM7CSAqIGxpa2UgYW4gaW52YWxpZCBhY2Nlc3MuIFdpdGhvdXQgdGhlIGZpeCB0aGUgZmF1bHQgcGF0aCBhbGxvY2F0ZWQgd2l0aAomIzQzOwkgKiB0aGUgbm9uLWJsb2NraW5nIGFsbG9jYXRvciwgdHVybmVkIGl0cyAtRU5PTUVNIGludG8gVk1fRkFVTFRfU0lHU0VHViwKJiM0MzsJICogYW5kIHRoZSBjaGlsZCBkaWVkIHdpdGggU0lHU0VHViBvbiBhIHZhbGlkIGFkZHJlc3M7IG5vdyBpdCBpcyBoYW5kbGVkCiYjNDM7CSAqIGJ5IHRoZSBtZW1jZyBPT00gcGF0aCBpbnN0ZWFkLiBBIFNJR0tJTEwgYWxvbmUgd291bGQgbm90IHByb3ZlIHRoZQomIzQzOwkgKiBtZW1jZyBPT00ga2lsbGVyIGRpZCBpdCAoYSBnbG9iYWwgT09NIG9yIGFuIHVucmVsYXRlZCBjcmFzaCBjb3VsZCBhbHNvCiYjNDM7CSAqIGtpbGwgdGhlIGNoaWxkKSwgc28gY2hlY2sgbWVtb3J5LmV2ZW50cy5vb21fa2lsbCwgd2hpY2ggcmVjb3JkcyB0aGUKJiM0MzsJICogbWVtY2cgT09NIGFuZCBzdXJ2aXZlcyB0aGUgY2hpbGQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIUFTU0VSVF9UUlVFKFdJRlNJR05BTEVEKHN0YXR1cyksICYjMzQ7Y2hpbGQga2lsbGVkIGJ5IHNpZ25hbCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9HRShjZ19yZWFkX2tleShDR19QQVRILCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtvb21fa2lsbCYjMzQ7KSwgMSwKJiM0MzsJCSAgICAgICAmIzM0O21lbWNnIG9vbV9raWxsJiMzNDspKQomIzQzOwkJZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlKTsKJiM0MztvdXQ6CiYjNDM7CWlmIChjZ3JvdXBfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGNncm91cF9mZCk7CiYjNDM7CWNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi44ODI1OWNmZWEwNmI2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMKQEAgLTAsMCAmIzQzOzEsMjQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX2FyZW5hX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTsKJiM0MzsJX191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDUwMDAwKTsgLyogbnVtYmVyIG9mIHBhZ2VzICovCiYjNDM7I2lmZGVmIF9fVEFSR0VUX0FSQ0hfYXJtNjQKJiM0MzsJX191bG9uZyhtYXBfZXh0cmEsIDB4MXVsbCAmbHQ7Jmx0OyAzMik7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi8KJiM0MzsjZWxzZQomIzQzOwlfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsICZsdDsmbHQ7IDQ0KTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqLwomIzQzOyNlbmRpZgomIzQzO30gYXJlbmEgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO2ludCBub29wKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMjEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgQXJlbmEgU3Vic3lzdGVtIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBga2VybmVsL2JwZi9hcmVuYS5jYCBhbmQgYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIHRoaXMgbmV3IGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBmdW5jdGlvbiBhbmQgaW50ZWdyYXRpbmcgaXQgaW50byBgYXJlbmFfdm1fZmF1bHRgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhlIGNvbW1lbnQgc3VnZ2VzdHMgaXQmIzM5O3MgaGFuZGxpbmcgcGFnZSBhbGxvY2F0aW9uIG91dHNpZGUgb2YgYSBsb2NrLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIG1lbWNnIE9PTSBraWxsZXIgaW50ZXJhY3Rpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IHNpZ25pZmljYW50IG9uZS4gSSBhbHNvIHNlZSBhIHNlbGZ0ZXN0LCBgYXJlbmFfbWVtY2cuY2AsIHdoaWNoIGlzIGdvb2QgdG8gaGF2ZS4KCk5vdywgbGV0IG1lIGRpZyBhIGJpdCBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMuIE15IHByaW1hcnkgZm9jdXMgaXMgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gTG9va2luZyBpbnRvIGBrZXJuZWwvYnBmL2FyZW5hLmNgIGFuZCBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBJIHNlZSB0aGF0IHRoZSBjaGFuZ2VzIGNlbnRlciBhcm91bmQgYGFyZW5hX3ZtX2ZhdWx0YCwgdGhlIEJQRiBhcmVuYSBtYXAgcGFnZSBmYXVsdCBoYW5kbGVyLCBhbmQgdGhlIG5ldyBoZWxwZXIsIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYC4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRhcmdldCBgYXJlbmFfdm1fZmF1bHRgLiBIb3dldmVyLCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgc28gdGhhdCYjMzk7cyBub3QgaWRlYWwgZm9yIGZ1enppbmcuIEkgaGF2ZSB0byBmaW5kIHRoZSBlbnRyeXBvaW50LiBJcyBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgdGhlIHJpZ2h0IHRhcmdldD8gTm8sIHRoYXQmIzM5O3MganVzdCBhbiBpbnRlcm5hbCBoZWxwZXIuIEhtbSwgd2hhdCBhYm91dCBgYnBmX2FyZW5hX21hcF9hbGxvY2A/IE9yIHBlcmhhcHMgdGhlIG1tYXAgaGFuZGxlciByZWxhdGVkIHRvIHRoZSBhcmVuYT8gSSYjMzk7bSBnb2luZyB0byBzZWFyY2ggZm9yIGBhcmVuYV92bV9vcHNgIGFuZCBgYXJlbmFfdm1fZmF1bHRgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIG92ZXJ2aWV3IG9mIHdoYXQmIzM5O3MgZXhwb3NlZCBhbmQgd2hlcmUgdGhlIHJlbGV2YW50IGNhbGxzIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmVuYV92bV9mYXVsdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmM9NDY0PXN0YXRpYyB2b2lkIGFyZW5hX3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00NzgtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDc5OnN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxua2VybmVsL2JwZi9hcmVuYS5jLTQ4MC17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTU5NT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFyZW5hX3ZtX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTk5LVx0LmNsb3NlXHRcdD0gYXJlbmFfdm1fY2xvc2UsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjAwOlx0LmZhdWx0ICAgICAgICAgID0gYXJlbmFfdm1fZmF1bHQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjAxLX07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmM9NDg9dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9tZW1fdXNhZ2Uodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy05OS1cdCAqIFVzZXItc3BhY2UgZmF1bHQtaW46IHRvdWNoaW5nIHVuYWxsb2NhdGVkIGFyZW5hIHBhZ2VzIGFsbG9jYXRlcyB0aGVtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYzoxMDA6XHQgKiB0aHJvdWdoIGFyZW5hX3ZtX2ZhdWx0KCkuIGxpYmJwZiBtbWFwKClzIHRoZSBhcmVuYSBhdCBtYXBfZXh0cmEgZHVyaW5nXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy0xMDEtXHQgKiBsb2FkLCBzbyBicGZfbWFwX19pbml0aWFsX3ZhbHVlKCkgaGFuZHMgYmFjayB0aGF0IGJhc2UuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM0NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEFyZW5hIFZNIEZhdWx0IFBhdGgqKgoKUmlnaHQsIHNvIHRoZSBgYXJlbmFfdm1fZmF1bHRgIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdGhhdCBnZXRzIGludm9rZWQgd2hlbiBhIHBhZ2UgZmF1bHQgb2NjdXJzIHdpdGhpbiB0aGUgYXJlbmEgbWVtb3J5IHJlZ2lvbiwgYW5kIHRoYXQmIzM5O3MgYWNjZXNzZWQgdmlhIHRoZSBzdGFuZGFyZCBgdm1fb3BlcmF0aW9uc19zdHJ1Y3RgLiBTcGVjaWZpY2FsbHksIEkgYmVsaWV2ZSBpdCYjMzk7cyBnb2luZyB0byBiZSB0aGUgYC5mYXVsdGAgbWV0aG9kIHdpdGhpbiB0aGF0IHN0cnVjdC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSB3aGljaCBtbWFwIGhhbmRsZXIgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIGFyZW5hIG1lbW9yeSBtYXBwaW5ncyBpbml0aWFsbHkuIE15IG1vbmV5JiMzOTtzIG9uIGBhcmVuYV9tYXBfbW1hcGAsIGJ1dCBsZXQmIzM5O3MgcXVpY2tseSBjb25maXJtIHRoYXQmIzM5O3MgdGhlIG9uZS4gTm8gcG9pbnQgbWFraW5nIGFzc3VtcHRpb25zIGhlcmUuIEl0JiMzOTtzIGJlc3QgdG8gdmVyaWZ5IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJlbmFfdm1fb3BzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYXJlbmEuYz00Nzk9c3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTU5NC1cbmtlcm5lbC9icGYvYXJlbmEuYzo1OTU6c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhcmVuYV92bV9vcHMgPSB7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNTk2LVx0Lm9wZW5cdFx0PSBhcmVuYV92bV9vcGVuLFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz02Mzc9c3RhdGljIGludCBhcmVuYV9tYXBfbW1hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjcyLVx0dm1fZmxhZ3Nfc2V0KHZtYSwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlRDT1BZKTtcbmtlcm5lbC9icGYvYXJlbmEuYzo2NzM6XHR2bWEtXHUwMDNldm1fb3BzID0gXHUwMDI2YXJlbmFfdm1fb3BzO1xua2VybmVsL2JwZi9hcmVuYS5jLTY3NC1cdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MDMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgTWFwcGluZyBNZWNoYW5pc20qKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgbWVtb3J5IG1hcHBpbmcgd29ya3MgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgYXJlbmFfbWFwX21tYXBgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgdGhlIGRlc2lnbmF0ZWQgbW1hcCBoYW5kbGVyIGZvciB3aGF0ZXZlciBhcmVuYSBvciByZWdpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gVGhlIGtleSBub3cgaXMgdG8gZmlndXJlIG91dCBpdHMgc2NvcGUgYW5kIGFzc2lnbm1lbnQuIElzIGBhcmVuYV9tYXBfbW1hcGAgYSBmcmVlc3RhbmRpbmcsIG5vbi1zdGF0aWMgZnVuY3Rpb24sIG9yIGlzIGl0IGFjdHVhbGx5IHBsdWdnZWQgaW50byBhIGBicGZfbWFwX29wc2Agc3RydWN0dXJlPyBLbm93aW5nIHRoYXQgd2lsbCB0ZWxsIG1lIGEgbG90IGFib3V0IGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGggdGhlIEJQRiBzdWJzeXN0ZW0gYW5kIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBUaGF0IGRpc3RpbmN0aW9uIGlzIGNydWNpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJlbmFfbWFwX21tYXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcmVuYS5jPTYwMz1zdGF0aWMgdW5zaWduZWQgbG9uZyBhcmVuYV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02MzYtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjM3OnN0YXRpYyBpbnQgYXJlbmFfbWFwX21tYXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjM4LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9Njg4PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02OTItXHQubWFwX2RpcmVjdF92YWx1ZV9hZGRyID0gYXJlbmFfbWFwX2RpcmVjdF92YWx1ZV9hZGRyLFxua2VybmVsL2JwZi9hcmVuYS5jOjY5MzpcdC5tYXBfbW1hcCA9IGFyZW5hX21hcF9tbWFwLFxua2VybmVsL2JwZi9hcmVuYS5jLTY5NC1cdC5tYXBfZ2V0X3VubWFwcGVkX2FyZWEgPSBhcmVuYV9nZXRfdW5tYXBwZWRfYXJlYSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI4MQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqQW5hbHl6aW5nIHRoZSBCUEYgTWFwIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgbWVtb3J5IGlzIG1hbmFnZWQgd2l0aGluIHRoZSBCUEYgbWFwIGNvbnRleHQuIEl0IHNlZW1zIGxpa2UgYGFyZW5hX21hcF9vcHNgIGlzIHRoZSBjZW50cmFsIHBvaW50IGZvciBtYXAgb3BlcmF0aW9ucy4gVGhhdCBtYWtlcyBzZW5zZSwgYSBjb25zaXN0ZW50IGludGVyZmFjZSBpcyBrZXkgaGVyZS4gTm93LCB0aGUgYWN0dWFsIGVudHJ5IHBvaW50IGZvciB0aGUgYG1tYXBgIHN5c2NhbGwsIHdoZW4gZGVhbGluZyB3aXRoIHRoZXNlIEJQRiBtYXBzLCBpcyBlaXRoZXIgZ29pbmcgdG8gYmUgdGhyb3VnaCBgYnBmX21hcF9tbWFwYCBvciBzaW1wbHkgdGhlIGBtbWFwYCBzeXNjYWxsIG9uIHRoZSBCUEYgbWFwIGZpbGUgZGVzY3JpcHRvciwgY29ycmVjdD8gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgc2V0IHVwIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgaW5kaXJlY3Rpb24gaW52b2x2ZWQuIEFuZCwgSSYjMzk7bSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBpcyBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSB0aGUgY3VycmVudCBtb2R1bGUuIEVzc2VudGlhbGx5LCBpcyBpdCBleHBvcnRlZCwgb3IgaXMgaXQgYSBzdGF0aWMgZnVuY3Rpb24gdGhhdCYjMzk7cyBpbnRlcm5hbCB0byB0aGUgbWFwIGltcGxlbWVudGF0aW9uPyBLbm93aW5nIHRoZSBzY29wZSBvZiB0aGF0IGZ1bmN0aW9uIHdpbGwgc2lnbmlmaWNhbnRseSBpbXBhY3QgaG93IEkgdGhpbmsgYWJvdXQgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcyBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTI3ODU9aW50IGJwZl9tYXBfYWxsb2NfcGFnZXMoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG5pZCxcbmluY2x1ZGUvbGludXgvYnBmLmgtMjc4Ni1cdFx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9icGYuaDoyNzg3OnN0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApO1xuaW5jbHVkZS9saW51eC9icGYuaC0yNzg4LSNpZmRlZiBDT05GSUdfTUVNQ0dcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NDc5PXN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01MDMtXHRcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTA0Olx0XHRuZXdfcGFnZSA9IGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUobWFwKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01MDUtXHRcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjE1PWludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1LSAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQ2OnN0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk5MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIEJQRiBNYXAgQWxsb2NhdGlvbiBhbmQgQXJlbmEgQWxsb2NhdGlvbiBTY29wZSoqCgpSaWdodCwgc28gYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzIGV4cGxpY2l0bHkgKm5vdCogZGVjbGFyZWQgYXMgc3RhdGljLCB3aGljaCBtZWFucyBpdCBoYXMgZXh0ZXJuYWwgbGlua2FnZS4gSG1tLCBva2F5LCBJIHVuZGVyc3RhbmQgd2hhdCB0aGUgY29kZSBpcyBkb2luZyBpbiB0aGF0IGZ1bmN0aW9uLCBzbyBJJiMzOTttIHRoaW5raW5nLi4uIE5vdywgaXMgYGFyZW5hX21hcF9hbGxvY2Agc2ltaWxhcmx5IGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIGl0cyBwcmVzdW1lZCBzY29wZT8gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGl0cyBkZWNsYXJhdGlvbiBhbmQgdXNhZ2UgY29udGV4dC4gS25vd2luZyB0aGF0IHdvdWxkIHByb3ZpZGUgc29tZSB1c2VmdWwgZGV0YWlscyBhYm91dCB0aGUgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hX21hcF9hbGxvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmM9MjU5PXN0YXRpYyBpbnQgcG9wdWxhdGVfcGd0YWJsZV9leGNlcHRfcHRlKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0yNjUtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjY2OnN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYXJlbmFfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL2JwZi9hcmVuYS5jLTI2Ny17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTY4OD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJlbmFfbWFwX29wcyA9IHtcbmtlcm5lbC9icGYvYXJlbmEuYy02ODktXHQubWFwX21ldGFfZXF1YWwgPSBicGZfbWFwX21ldGFfZXF1YWwsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjkwOlx0Lm1hcF9hbGxvYyA9IGFyZW5hX21hcF9hbGxvYyxcbmtlcm5lbC9icGYvYXJlbmEuYy02OTEtXHQubWFwX2ZyZWUgPSBhcmVuYV9tYXBfZnJlZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzOTQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIE1hcCBBbGxvY2F0aW9uIFRob3VnaHRzKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgbWFwIGFsbG9jYXRpb24gZmxvdyBoZXJlLiBGaXJzdCB0aG91Z2h0OiBgYXJlbmFfbWFwX2FsbG9jYCBpcyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgdXNlZnVsbmVzcy4gVGhlbiwgSSByZW1lbWJlciB0aGF0IGBtYXBfY3JlYXRlYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBtYXAgY3JlYXRpb24uIEFsc28sIGBicGZfbWFwX21tYXBgIGlzIHRoZSBtbWFwIGVudHJ5IHBvaW50LCBhbHNvIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuCgpUaGUgZmF1bHQgaGFuZGxlciwgYGFyZW5hX3ZtX2ZhdWx0YCwgaXMgYWxzbyBzdGF0aWMsIHNvIEkgY2FuIHByb2JhYmx5IGlnbm9yZSB0aGF0IGZvciBub3cuIFRoZSBrZXkgaGVyZSBpcyB0byBmaW5kIHRoZSBub24tc3RhdGljIEFQSXMuIE5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQsIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBpcyBkZWZpbml0ZWx5ICpub3QqIHN0YXRpYywgYW5kIHRoYXQgc2VlbXMgcmVsZXZhbnQuIFNob3VsZCBJIGFsc28gaW5jbHVkZSBgYnBmX21hcF9tbWFwYCBvciBgbWFwX2NyZWF0ZWA/IEhtbSwgbm8sIGZvY3VzaW5nIG9uIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBtYWtlcyBtb3JlIHNlbnNlLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcy4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgZm9yIGBicGZfbWFwX21tYXBgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBlbHNlIEkgc2hvdWxkIGtub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9tYXBfbW1hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmM9NjM3PXN0YXRpYyBpbnQgYXJlbmFfbWFwX21tYXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTY2Ni1cdC8qXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjY3Olx0ICogYnBmX21hcF9tbWFwKCkgY2hlY2tzIHRoYXQgaXQmIzM5O3MgYmVpbmcgbW1hcGVkIGFzIFZNX1NIQVJFRCBhbmRcbmtlcm5lbC9icGYvYXJlbmEuYy02NjgtXHQgKiBjbGVhcnMgVk1fTUFZRVhFQy4gU2V0IFZNX0RPTlRFWFBBTkQgdG8gYXZvaWQgcG90ZW50aWFsIGNoYW5nZVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEwNjU9c3RhdGljIHNzaXplX3QgYnBmX2R1bW15X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwNzQtLyogY2FsbGVkIGZvciBhbnkgZXh0cmEgbWVtb3J5LW1hcHBlZCByZWdpb25zIChleGNlcHQgaW5pdGlhbCkgKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEwNzU6c3RhdGljIHZvaWQgYnBmX21hcF9tbWFwX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDc2LXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDgzLS8qIGNhbGxlZCBmb3IgYWxsIHVubWFwcGVkIG1lbW9yeSByZWdpb24gKGluY2x1ZGluZyBpbml0aWFsKSAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MTA4NDpzdGF0aWMgdm9pZCBicGZfbWFwX21tYXBfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDg1LXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDkxLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTA5MjpzdGF0aWMgdm1fZmF1bHRfdCBicGZfbWFwX21tYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDkzLXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMDk5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYnBmX21hcF9kZWZhdWx0X3Ztb3BzID0ge1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MTEwMDpcdC5vcGVuXHRcdD0gYnBmX21hcF9tbWFwX29wZW4sXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMTAxOlx0LmNsb3NlXHRcdD0gYnBmX21hcF9tbWFwX2Nsb3NlLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTEwMi19O1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTExMDQ9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBicGZfbWFwX2xhenlfdm1vcHMgPSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMTA1Olx0Lm9wZW5cdFx0PSBicGZfbWFwX21tYXBfb3Blbixcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjExMDY6XHQuY2xvc2VcdFx0PSBicGZfbWFwX21tYXBfY2xvc2UsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMTA3Olx0LmZhdWx0XHRcdD0gYnBmX21hcF9tbWFwX2ZhdWx0LFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTEwOC19O1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMTEwOS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjExMTA6c3RhdGljIGludCBicGZfbWFwX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTExMS17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTE5Mj1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl9tYXBfZm9wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMTk4LVx0LndyaXRlXHRcdD0gYnBmX2R1bW15X3dyaXRlLFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTE5OTpcdC5tbWFwXHRcdD0gYnBmX21hcF9tbWFwLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTIwMC1cdC5wb2xsXHRcdD0gYnBmX21hcF9wb2xsLFxuLS1cbnRvb2xzL2JwZi9icGZ0b29sL2dlbi5jPTQ4ND1zdGF0aWMgdm9pZCBwcmludF9oZXgoY29uc3QgY2hhciAqZGF0YSwgaW50IGRhdGFfc3opXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMtNTAyLVxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmM6NTAzOnN0YXRpYyBzaXplX3QgYnBmX21hcF9tbWFwX3N6KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG50b29scy9icGYvYnBmdG9vbC9nZW4uYy01MDQte1xuLS1cbnRvb2xzL2JwZi9icGZ0b29sL2dlbi5jPTY2MT1zdGF0aWMgdm9pZCBjb2RlZ2VuX2Rlc3Ryb3koc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqb2JqX25hbWUpXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMtNjg5LVx0XHRcdHByaW50ZihcJiMzNDtcXHRza2VsX2ZyZWVfbWFwX2RhdGEoc2tlbC1cdTAwM2UlMSRzLCBza2VsLVx1MDAzZW1hcHMuJTEkcy5pbml0aWFsX3ZhbHVlLCAlMiR6dSk7XFxuXCYjMzQ7LFxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmM6NjkwOlx0XHRcdCAgICAgICBpZGVudCwgYnBmX21hcF9tbWFwX3N6KG1hcCkpO1xudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMtNjkxLVx0XHRjb2RlZ2VuKFwmIzM0O1xcXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmM9NzA0PXN0YXRpYyBpbnQgZ2VuX3RyYWNlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lLCBjb25zdCBjaGFyICpoZWFkZXJfZ3VhcmQpXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMtNzc5LVx0XHRcdH1cdFx0XHRcdFx0XHQgICAgXFxuXFxcbnRvb2xzL2JwZi9icGZ0b29sL2dlbi5jOjc4MDpcdFx0XHRcJiMzNDssIGlkZW50LCBicGZfbWFwX21tYXBfc3oobWFwKSk7XG50b29scy9icGYvYnBmdG9vbC9nZW4uYy03ODEtXHR9XG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMtODgwLVx0XHRcdFwmIzM0OyxcbnRvb2xzL2JwZi9icGZ0b29sL2dlbi5jOjg4MTpcdFx0XHRpZGVudCwgYnBmX21hcF9tbWFwX3N6KG1hcCkpO1xudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMtODgyLVx0XHRcdGNvbnRpbnVlO1xuLS1cbnRvb2xzL2JwZi9icGZ0b29sL2dlbi5jLTg5Ni1cdFx0XHRcJiMzNDssXG50b29scy9icGYvYnBmdG9vbC9nZW4uYzo4OTc6XHRcdCAgICAgICBpZGVudCwgYnBmX21hcF9tbWFwX3N6KG1hcCksIG1tYXBfZmxhZ3MpO1xudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMtODk4LVx0fVxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9MTgyOD1zdGF0aWMgc2l6ZV90IGFycmF5X21hcF9tbWFwX3N6KHVuc2lnbmVkIGludCB2YWx1ZV9zeiwgdW5zaWduZWQgaW50IG1heF9lbnRyaWVzKVxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTgzNy1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTgzODpzdGF0aWMgc2l6ZV90IGJwZl9tYXBfbW1hcF9zeihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xODM5LXtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTE4NTItXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjE4NTM6c3RhdGljIGludCBicGZfbWFwX21tYXBfcmVzaXplKHN0cnVjdCBicGZfbWFwICptYXAsIHNpemVfdCBvbGRfc3osIHNpemVfdCBuZXdfc3opXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTE4NTQte1xuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9MTk3Nz1icGZfb2JqZWN0X19pbml0X2ludGVybmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBlbnVtIGxpYmJwZl9tYXBfdHlwZSB0eXBlLFxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMjAxOC1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MjAxOTpcdG1tYXBfc3ogPSBicGZfbWFwX21tYXBfc3oobWFwKTtcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMjAyMC1cdG1hcC1cdTAwM2VtbWFwZWQgPSBtbWFwKE5VTEwsIG1tYXBfc3osIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz0zMDIwPXN0YXRpYyBpbnQgaW5pdF9hcmVuYV9tYXBfZGF0YShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMzAyNy1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MzAyODpcdG1tYXBfc3ogPSBicGZfbWFwX21tYXBfc3oobWFwKTtcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMzAyOS1cdGlmIChkYXRhX2FsbG9jX3N6IFx1MDAzZSBtbWFwX3N6KSB7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz01MzI1PWJwZl9vYmplY3RfX3BvcHVsYXRlX2ludGVybmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNTM2OC1cdCAqL1xudG9vbHMvbGliL2JwZi9saWJicGYuYzo1MzY5Olx0bW1hcF9zeiA9IGJwZl9tYXBfbW1hcF9zeihtYXApO1xudG9vbHMvbGliL2JwZi9saWJicGYuYy01MzcwLVx0aWYgKG1hcC1cdTAwM2VkZWYubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9NTUFQQUJMRSkge1xuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9NTY0NT1icGZfb2JqZWN0X19jcmVhdGVfbWFwcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNTcyMS1cdFx0XHRcdG1hcC1cdTAwM2VtbWFwZWQgPSBtbWFwKCh2b2lkICopKGxvbmcpbWFwLVx1MDAzZW1hcF9leHRyYSxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6NTcyMjpcdFx0XHRcdFx0XHQgICBicGZfbWFwX21tYXBfc3oobWFwKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNTcyMy1cdFx0XHRcdFx0XHQgICBtYXAtXHUwMDNlbWFwX2V4dHJhID8gTUFQX1NIQVJFRCB8IE1BUF9GSVhFRCA6IE1BUF9TSEFSRUQsXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz03NDc2PXN0YXRpYyBpbnQgYnBmX29iamVjdF9fcmVsb2NhdGUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdGFyZ19idGZfcGF0aClcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTc0OTUtXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjc0OTY6XHRcdG9iai1cdTAwM2VhcmVuYV9kYXRhX29mZiA9IGJwZl9tYXBfbW1hcF9zeihhcmVuYV9tYXApIC1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNzQ5Ny1cdFx0XHRcdCAgICAgIHJvdW5kdXAob2JqLVx1MDAzZWFyZW5hX2RhdGFfc3osIHN5c2NvbmYoX1NDX1BBR0VfU0laRSkpO1xuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9OTU5MD1zdGF0aWMgdm9pZCBicGZfbWFwX19kZXN0cm95KHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYy05NjAwLVx0aWYgKG1hcC1cdTAwM2VtbWFwZWQgXHUwMDI2XHUwMDI2IG1hcC1cdTAwM2VtbWFwZWQgIT0gbWFwLVx1MDAzZW9iai1cdTAwM2VhcmVuYV9kYXRhKVxudG9vbHMvbGliL2JwZi9saWJicGYuYzo5NjAxOlx0XHRtdW5tYXAobWFwLVx1MDAzZW1tYXBlZCwgYnBmX21hcF9tbWFwX3N6KG1hcCkpO1xudG9vbHMvbGliL2JwZi9saWJicGYuYy05NjAyLVx0bWFwLVx1MDAzZW1tYXBlZCA9IE5VTEw7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz0xMTAyMz1pbnQgYnBmX21hcF9fc2V0X3ZhbHVlX3NpemUoc3RydWN0IGJwZl9tYXAgKm1hcCwgX191MzIgc2l6ZSlcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTExMDM1LVxudG9vbHMvbGliL2JwZi9saWJicGYuYzoxMTAzNjpcdFx0bW1hcF9vbGRfc3ogPSBicGZfbWFwX21tYXBfc3oobWFwKTtcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTEwMzctXHRcdG1tYXBfbmV3X3N6ID0gYXJyYXlfbWFwX21tYXBfc3ooc2l6ZSwgbWFwLVx1MDAzZWRlZi5tYXhfZW50cmllcyk7XG50b29scy9saWIvYnBmL2xpYmJwZi5jOjExMDM4Olx0XHRlcnIgPSBicGZfbWFwX21tYXBfcmVzaXplKG1hcCwgbW1hcF9vbGRfc3osIG1tYXBfbmV3X3N6KTtcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTEwMzktXHRcdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NTEKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBCUEYgTWFwIE1tYXAgRXhwbG9yYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IG1lbW9yeSBtYXBwaW5nIHdvcmtzIHdpdGggQlBGIG1hcHMuIEkmIzM5O20gc3RhcnRpbmcgd2l0aCBgYnBmX21hcF9tbWFwYC4gSSBzZWUgaXQmIzM5O3Mgc3RhdGljIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBBaCwgcmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIFRoZSBhY3R1YWwgc3lzY2FsbCBpcyBgbW1hcGAsIGFuZCBpdCBvcGVyYXRlcyBvbiB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBtYXAsIGFuZCAqdGhhdCogcGF0aCBnb2VzIHRocm91Z2ggYGJwZl9tYXBfbW1hcGAuIEdvdCBpdC4KCk5vdywgd2hlcmUgZG9lcyB0aGlzIHdob2xlIG1hcCBjcmVhdGlvbiBwcm9jZXNzIGJlZ2luPyBUaGUgQVBJIGVudHJ5IHBvaW504oCmdGhhdCB3b3VsZCBiZSBgbWFwX2NyZWF0ZWAuIFRpbWUgdG8ganVtcCBiYWNrIGludG8gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgYG1hcF9jcmVhdGVgLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGFsbCBjb25uZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFwX2NyZWF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjQ2NCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2FycmF5LnJzdD0xNDM9QlBGX01BUF9UWVBFX0FSUkFZXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2FycmF5LnJzdC0xNDUtXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfYXJyYXkucnN0OjE0NjpUaGlzIHNuaXBwZXQgc2hvd3MgaG93IHRvIGNyZWF0ZSBhbiBhcnJheSwgdXNpbmcgYGBicGZfbWFwX2NyZWF0ZV9vcHRzYGAgdG9cbkRvY3VtZW50YXRpb24vYnBmL21hcF9hcnJheS5yc3QtMTQ3LXNldCBmbGFncy5cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfYXJyYXkucnN0LTE1Ni0gICAgICAgICAgICBpbnQgZmQ7XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfYXJyYXkucnN0OjE1NzogICAgICAgICAgICBMSUJCUEZfT1BUUyhicGZfbWFwX2NyZWF0ZV9vcHRzLCBvcHRzLCAubWFwX2ZsYWdzID0gQlBGX0ZfTU1BUEFCTEUpO1xuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2FycmF5LnJzdC0xNTgtXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfYXJyYXkucnN0OjE1OTogICAgICAgICAgICBmZCA9IGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9BUlJBWSxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9hcnJheS5yc3QtMTYwLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7ZXhhbXBsZV9hcnJheVwmIzM0OywgICAgICAgLyogbmFtZSAqL1xuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9ibG9vbV9maWx0ZXIucnN0PTE0Mz11c2Vyc3BhY2U6XG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Jsb29tX2ZpbHRlci5yc3QtMTQ4LSAgICB7XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfYmxvb21fZmlsdGVyLnJzdDoxNDk6ICAgICAgICAgICAgTElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgb3B0cyxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9ibG9vbV9maWx0ZXIucnN0LTE1MC0gICAgICAgICAgICAgICAgICAgICAgICAubWFwX2V4dHJhID0gMyk7ICAgICAgICAgICAgIC8qIG51bWJlciBvZiBoYXNoZXMgKi9cbkRvY3VtZW50YXRpb24vYnBmL21hcF9ibG9vbV9maWx0ZXIucnN0LTE1MS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9ibG9vbV9maWx0ZXIucnN0OjE1MjogICAgICAgICAgICByZXR1cm4gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX0JMT09NX0ZJTFRFUixcbkRvY3VtZW50YXRpb24vYnBmL21hcF9ibG9vbV9maWx0ZXIucnN0LTE1My0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7aXB2Nl9ibG9vbVwmIzM0OywgICAgICAvKiBuYW1lICovXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2hhc2gucnN0PTMyPXNoYXJlZCBhY3Jvc3MgQ1BVcyBidXQgaXQgaXMgcG9zc2libGUgdG8gcmVxdWVzdCBhIHBlciBDUFUgTFJVIGxpc3Qgd2l0aFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2hhc2gucnN0OjMzOnRoZSBgYEJQRl9GX05PX0NPTU1PTl9MUlVgYCBmbGFnIHdoZW4gY2FsbGluZyBgYGJwZl9tYXBfY3JlYXRlYGAuICBUaGVcbkRvY3VtZW50YXRpb24vYnBmL21hcF9oYXNoLnJzdC0zNC1mb2xsb3dpbmcgdGFibGUgb3V0bGluZXMgdGhlIHByb3BlcnRpZXMgb2YgTFJVIG1hcHMgZGVwZW5kaW5nIG9uIHRoZSBhXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX29mX21hcHMucnN0PTkzPVRoaXMgc25pcHBldCBzaG93cyBob3cgdG8gY3JlYXRlIGFuIGFycmF5IGJhc2VkIG91dGVyIG1hcDpcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfb2ZfbWFwcy5yc3QtOTctICAgIGludCBjcmVhdGVfb3V0ZXJfYXJyYXkoaW50IGlubmVyX2ZkKSB7XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfb2ZfbWFwcy5yc3Q6OTg6ICAgICAgICAgICAgTElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgb3B0cywgLmlubmVyX21hcF9mZCA9IGlubmVyX2ZkKTtcbkRvY3VtZW50YXRpb24vYnBmL21hcF9vZl9tYXBzLnJzdC05OS0gICAgICAgICAgICBpbnQgZmQ7XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfb2ZfbWFwcy5yc3QtMTAwLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX29mX21hcHMucnN0OjEwMTogICAgICAgICAgICBmZCA9IGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9BUlJBWV9PRl9NQVBTLFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX29mX21hcHMucnN0LTEwMi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O2V4YW1wbGVfYXJyYXlcJiMzNDssICAgICAgIC8qIG5hbWUgKi9cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfb2ZfbWFwcy5yc3Q9MTExPVRoaXMgc25pcHBldCBzaG93cyBob3cgdG8gYWRkIGFuIGlubmVyIG1hcCB0byBhbiBvdXRlciBtYXA6XG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX29mX21hcHMucnN0LTExNy1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9vZl9tYXBzLnJzdDoxMTg6ICAgICAgICAgICAgZmQgPSBicGZfbWFwX2NyZWF0ZShCUEZfTUFQX1RZUEVfREVWTUFQLCBuYW1lLFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX29mX21hcHMucnN0LTExOS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihfX3UzMiksIHNpemVvZihfX3UzMiksIDI1NiwgTlVMTCk7XG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3F1ZXVlX3N0YWNrLnJzdD0xMjg9dXNlcnNwYWNlOlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9xdWV1ZV9zdGFjay5yc3QtMTMzLSAgICB7XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfcXVldWVfc3RhY2sucnN0OjEzNDogICAgICAgICAgICByZXR1cm4gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1FVRVVFLFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3F1ZXVlX3N0YWNrLnJzdC0xMzUtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O3NhbXBsZV9xdWV1ZVwmIzM0OywgLyogbmFtZSAqL1xuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdD00NDQ9dmVyZGljdCBwcm9ncmFtLCBhcyB3ZWxsIGFzIGFkZCBhIHNvY2tldCBlbnRyeS5cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3QtNDUyLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0OjQ1MzpcdFx0bWFwID0gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1NPQ0tNQVAsIE5VTEwsIHNpemVvZihpbnQpLCBzaXplb2YoaW50KSwgMSwgTlVMTCk7XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3QtNDU0LVx0XHRpZiAobWFwIFx1MDAzYyAwKSB7XG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3Q9NjA9Rm9yIG1vcmUgY29udGV4dCBvbiBET05UQ0FDSEUsIHBsZWFzZSBzZWUgdGhlc2UgTGludXggY29tbWl0IGhlYWRlcnM6XG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdC02MS1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0OjYyOi0gT3ZlcnZpZXc6ICA5YWQ2MzQ0NTY4Y2MzIChcJiMzNDttbS9maWxlbWFwOiBjaGFuZ2UgZmlsZW1hcF9jcmVhdGVfZm9saW8oKVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3QtNjMtICB0byB0YWtlIGEgc3RydWN0IGtpb2NiXCYjMzQ7KVxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC5oPTI4Nz1pbnQgaGFzaF9fbWFwX2tlcm5lbF9wYWdlKHVuc2lnbmVkIGxvbmcgZWEsIHVuc2lnbmVkIGxvbmcgcGEsIHBncHJvdF90IHByb3QpO1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLmg6Mjg4OmV4dGVybiBpbnQgX19tZW1pbml0IGhhc2hfX3ZtZW1tYXBfY3JlYXRlX21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC5oLTI4OS1cdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUsXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmg9MTAxMz12b2lkIHVubWFwX2tlcm5lbF9wYWdlKHVuc2lnbmVkIGxvbmcgdmEpO1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTAxNC1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oOjEwMTU6c3RhdGljIGlubGluZSBpbnQgX19tZW1pbml0IHZtZW1tYXBfY3JlYXRlX21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oLTEwMTYtXHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUsXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTAxOS1cdGlmIChyYWRpeF9lbmFibGVkKCkpXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaDoxMDIwOlx0XHRyZXR1cm4gcmFkaXhfX3ZtZW1tYXBfY3JlYXRlX21hcHBpbmcoc3RhcnQsIHBhZ2Vfc2l6ZSwgcGh5cyk7XG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaDoxMDIxOlx0cmV0dXJuIGhhc2hfX3ZtZW1tYXBfY3JlYXRlX21hcHBpbmcoc3RhcnQsIHBhZ2Vfc2l6ZSwgcGh5cyk7XG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaC0xMDIyLX1cbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3JhZGl4Lmg9MzE5PXN0cnVjdCBkZXZfcGFnZW1hcDtcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcmFkaXguaDozMjA6ZXh0ZXJuIGludCBfX21lbWluaXQgcmFkaXhfX3ZtZW1tYXBfY3JlYXRlX21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcmFkaXguaC0zMjEtXHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUsXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC82NC9wZ3RhYmxlLmg9MTQ5PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdlX3B0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoLzY0L3BndGFibGUuaC0yMDAtXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoLzY0L3BndGFibGUuaDoyMDE6ZXh0ZXJuIGludCBfX21lbWluaXQgdm1lbW1hcF9jcmVhdGVfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC82NC9wZ3RhYmxlLmgtMjAyLVx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUsXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfcGd0YWJsZS5jLTEwNi0gKi9cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3BndGFibGUuYzoxMDc6aW50IF9fbWVtaW5pdCBoYXNoX192bWVtbWFwX2NyZWF0ZV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF9wZ3RhYmxlLmMtMTA4LVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplLFxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF9wZ3RhYmxlLmM9OTU0PXN0YXRpYyBpbnQgX19tYXBfa2VybmVsX3BhZ2VfbmlkKHVuc2lnbmVkIGxvbmcgZWEsIHVuc2lnbmVkIGxvbmcgcGEsXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYy05NjAtXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jOjk2MTppbnQgX19tZW1pbml0IHJhZGl4X192bWVtbWFwX2NyZWF0ZV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jLTk2Mi1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplLFxuLS1cbmFyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmM9MjAyPXN0YXRpYyBpbnQgX19tZW1pbml0IF9fdm1lbW1hcF9wb3B1bGF0ZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsXG4tLVxuYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYy0yNjQtXG5hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jOjI2NTpcdFx0cmMgPSB2bWVtbWFwX2NyZWF0ZV9tYXBwaW5nKHN0YXJ0LCBwYWdlX3NpemUsIF9fcGEocCkpO1xuYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYy0yNjYtXHRcdGlmIChyYyBcdTAwM2MgMCkge1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvYm9vazNlX3BndGFibGUuYy0yMi0gKi9cbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvYm9vazNlX3BndGFibGUuYzoyMzppbnQgX19tZW1pbml0IHZtZW1tYXBfY3JlYXRlX21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCxcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvYm9vazNlX3BndGFibGUuYy0yNC1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUsXG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9MTMwMT1zdGF0aWMgaW50IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnKVxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEzMjMtLyoqXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMzI0OiAqIGdtYXBfY3JlYXRlX3NoYWRvdygpIC0gQ3JlYXRlL2ZpbmQgYSBzaGFkb3cgZ3Vlc3QgYWRkcmVzcyBzcGFjZS5cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEzMjUtICogQG1jOiBUaGUgY2FjaGUgdG8gdXNlIHRvIGFsbG9jYXRlIGRhdCB0YWJsZXMuXG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTM0MC0gKi9cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEzNDE6c3RydWN0IGdtYXAgKmdtYXBfY3JlYXRlX3NoYWRvdyhzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnBhcmVudCxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTEzNDItXHRcdFx0XHR1bmlvbiBhc2NlIGFzY2UsIGludCBlZGF0X2xldmVsKVxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5oPTEwOD12b2lkIF9nbWFwX2hhbmRsZV92c2llX3Vuc2hhZG93X2V2ZW50KHN0cnVjdCBnbWFwICpwYXJlbnQsIGdmbl90IGdmbik7XG5hcmNoL3MzOTAva3ZtL2dtYXAuaDoxMDk6c3RydWN0IGdtYXAgKmdtYXBfY3JlYXRlX3NoYWRvdyhzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKmdtYXAsXG5hcmNoL3MzOTAva3ZtL2dtYXAuaC0xMTAtXHRcdFx0XHR1bmlvbiBhc2NlIGFzY2UsIGludCBlZGF0X2xldmVsKTtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xMzAwPXN0YXRpYyBzdHJ1Y3QgZ21hcCAqYWNxdWlyZV9nbWFwX3NoYWRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMzI5LWFnYWluOlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTMzMDpcdGdtYXAgPSBnbWFwX2NyZWF0ZV9zaGFkb3codmNwdS1cdTAwM2VhcmNoLm1jLCB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXAsIGFzY2UsIGVkYXQpO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMTMzMS1cdGlmIChJU19FUlIoZ21hcCkpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmg9MjM4PXN0YXRpYyBpbmxpbmUgdTMyIGVmaTY0X2NvbnZlcnRfc3RhdHVzKGVmaV9zdGF0dXNfdCBzdGF0dXMpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmgtMjU2LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmg6MjU3OiNkZWZpbmUgX19lZmk2NF9hcmdtYXBfY3JlYXRlX2V2ZW50KHR5cGUsIHRwbCwgZiwgYywgZXZlbnQpXHRcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lZmkuaC0yNTgtXHQoKHR5cGUpLCAodHBsKSwgKGYpLCAoYyksIGVmaTY0X3plcm9fdXBwZXIoZXZlbnQpKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2lvbWFwLmg9MTY9dm9pZCBfX2lvbWVtICpfX2lvbWFwX2xvY2FsX3Bmbl9wcm90KHVuc2lnbmVkIGxvbmcgcGZuLCBwZ3Byb3RfdCBwcm90KTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2lvbWFwLmgtMTctXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb21hcC5oOjE4OmludCBpb21hcF9jcmVhdGVfd2MocmVzb3VyY2Vfc2l6ZV90IGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgKnByb3QpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vaW9tYXAuaC0xOS1cbi0tXG5hcmNoL3g4Ni9tbS9pb21hcF8zMi5jPTExPXN0YXRpYyBpbnQgaXNfaW9fbWFwcGluZ19wb3NzaWJsZShyZXNvdXJjZV9zaXplX3QgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbmFyY2gveDg2L21tL2lvbWFwXzMyLmMtMjAtXG5hcmNoL3g4Ni9tbS9pb21hcF8zMi5jOjIxOmludCBpb21hcF9jcmVhdGVfd2MocmVzb3VyY2Vfc2l6ZV90IGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgKnByb3QpXG5hcmNoL3g4Ni9tbS9pb21hcF8zMi5jLTIyLXtcbi0tXG5hcmNoL3g4Ni9tbS9pb21hcF8zMi5jLTM4LX1cbmFyY2gveDg2L21tL2lvbWFwXzMyLmM6Mzk6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfY3JlYXRlX3djKTtcbmFyY2gveDg2L21tL2lvbWFwXzMyLmMtNDAtXG4tLVxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jPTEwMD1zdHJ1Y3QgZmZhX2Rydl9pbmZvIHtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmMtMTA5LVx0Ym9vbCBtc2dfZGlyZWN0X3JlcTJfc3VwcDtcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYzoxMTA6XHRib29sIGJpdG1hcF9jcmVhdGVkO1xuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jLTExMS1cdGJvb2wgYnVzX25vdGlmaWVyX3JlZ2lzdGVyZWQ7XG4tLVxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jPTgyNT1zdGF0aWMgaW50IGZmYV9tZW1vcnlfcmVjbGFpbSh1NjQgZ19oYW5kbGUsIHUzMiBmbGFncylcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmMtODQwLVxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jOjg0MTpzdGF0aWMgaW50IGZmYV9ub3RpZmljYXRpb25fYml0bWFwX2NyZWF0ZSh2b2lkKVxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jLTg0Mi17XG4tLVxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jPTIwNTc9c3RhdGljIHZvaWQgZmZhX25vdGlmaWNhdGlvbnNfY2xlYW51cCh2b2lkKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYy0yMDY0LVxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jOjIwNjU6XHRpZiAoZHJ2X2luZm8tXHUwMDNlYml0bWFwX2NyZWF0ZWQpIHtcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYy0yMDY2LVx0XHRmZmFfbm90aWZpY2F0aW9uX2JpdG1hcF9kZXN0cm95KCk7XG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmM6MjA2NzpcdFx0ZHJ2X2luZm8tXHUwMDNlYml0bWFwX2NyZWF0ZWQgPSBmYWxzZTtcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYy0yMDY4LVx0fVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYz0yMDcyPXN0YXRpYyB2b2lkIGZmYV9ub3RpZmljYXRpb25zX3NldHVwKHZvaWQpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jLTIwNzctXHRpZiAoIXJldCkge1xuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jOjIwNzg6XHRcdHJldCA9IGZmYV9ub3RpZmljYXRpb25fYml0bWFwX2NyZWF0ZSgpO1xuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jLTIwNzktXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmMtMjA4My1cbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYzoyMDg0Olx0XHRkcnZfaW5mby1cdTAwM2ViaXRtYXBfY3JlYXRlZCA9IHRydWU7XG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmMtMjA4NS1cdH1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTc0MT1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX29wcyB4ZV9kcm1fcGFnZW1hcF9vcHMgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE3NDgtLyoqXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTc0OTogKiB4ZV9wYWdlbWFwX2NyZWF0ZSgpIC0gQ3JlYXRlIGEgc3RydWN0IHhlX3BhZ2VtYXAgb2JqZWN0XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTc1MC0gKiBAeGU6IFRoZSB4ZSBkZXZpY2UuXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE3NTktICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTc2MDpzdGF0aWMgc3RydWN0IHhlX3BhZ2VtYXAgKnhlX3BhZ2VtYXBfY3JlYXRlKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgeGVfdnJhbV9yZWdpb24gKnZyKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE3NjEte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xODQyPXhlX3BhZ2VtYXBfZmluZF9vcl9jcmVhdGUoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCBkcm1fcGFnZW1hcF9jYWNoZSAqY2FjaGUsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE4NTYtXHR9IGVsc2UgaWYgKCFkcGFnZW1hcCkge1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE4NTc6XHRcdHhwYWdlbWFwID0geGVfcGFnZW1hcF9jcmVhdGUoeGUsIHZyKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODU4LVx0XHRpZiAoSVNfRVJSKHhwYWdlbWFwKSlcbi0tXG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYz0yMTk9c3RhdGljIGludCBfX211c3RfY2hlY2sgYWxsb2NhdGVfY2FjaGVfY29tcG9uZW50cyhzdHJ1Y3QgdmRvX3BhZ2VfY2FjaGUgKmNhY2hlKVxuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5jLTIzMS1cbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5jOjIzMjpcdHJlc3VsdCA9IHZkb19pbnRfbWFwX2NyZWF0ZShjYWNoZS1cdTAwM2VwYWdlX2NvdW50LCBcdTAwMjZjYWNoZS1cdTAwM2VwYWdlX21hcCk7XG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYy0yMzMtXHRpZiAocmVzdWx0ICE9IFZET19TVUNDRVNTKVxuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5jPTEzNDI9aW50IHZkb19pbnZhbGlkYXRlX3BhZ2VfY2FjaGUoc3RydWN0IHZkb19wYWdlX2NhY2hlICpjYWNoZSlcbi0tXG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYy0xMzU3LVx0dmRvX2ludF9tYXBfZnJlZSh2ZG9fZm9yZ2V0KGNhY2hlLVx1MDAzZXBhZ2VfbWFwKSk7XG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYzoxMzU4Olx0cmV0dXJuIHZkb19pbnRfbWFwX2NyZWF0ZShjYWNoZS1cdTAwM2VwYWdlX2NvdW50LCBcdTAwMjZjYWNoZS1cdTAwM2VwYWdlX21hcCk7XG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYy0xMzU5LX1cbi0tXG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYz0yNzM2PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGluaXRpYWxpemVfYmxvY2tfbWFwX3pvbmUoc3RydWN0IGJsb2NrX21hcCAqbWFwLFxuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5jLTI3NjQtXG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYzoyNzY1Olx0cmVzdWx0ID0gdmRvX2ludF9tYXBfY3JlYXRlKFZET19MT0NLX01BUF9DQVBBQ0lUWSwgXHUwMDI2em9uZS1cdTAwM2Vsb2FkaW5nX3BhZ2VzKTtcbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5jLTI3NjYtXHRpZiAocmVzdWx0ICE9IFZET19TVUNDRVNTKVxuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL2RlZHVwZS5jPTIzNDk9c3RhdGljIGludCBfX211c3RfY2hlY2sgaW5pdGlhbGl6ZV96b25lKHN0cnVjdCB2ZG8gKnZkbywgc3RydWN0IGhhc2hfem9uZXMgKnpvbmVzLFxuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL2RlZHVwZS5jLTIzNTUtXG5kcml2ZXJzL21kL2RtLXZkby9kZWR1cGUuYzoyMzU2Olx0cmVzdWx0ID0gdmRvX2ludF9tYXBfY3JlYXRlKFZET19MT0NLX01BUF9DQVBBQ0lUWSwgXHUwMDI2em9uZS1cdTAwM2VoYXNoX2xvY2tfbWFwKTtcbmRyaXZlcnMvbWQvZG0tdmRvL2RlZHVwZS5jLTIzNTctXHRpZiAocmVzdWx0ICE9IFZET19TVUNDRVNTKVxuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL2ludC1tYXAuYz0xNTc9c3RhdGljIGludCBhbGxvY2F0ZV9idWNrZXRzKHN0cnVjdCBpbnRfbWFwICptYXAsIHNpemVfdCBjYXBhY2l0eSlcbi0tXG5kcml2ZXJzL21kL2RtLXZkby9pbnQtbWFwLmMtMTcwLS8qKlxuZHJpdmVycy9tZC9kbS12ZG8vaW50LW1hcC5jOjE3MTogKiB2ZG9faW50X21hcF9jcmVhdGUoKSAtIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGludF9tYXAuXG5kcml2ZXJzL21kL2RtLXZkby9pbnQtbWFwLmMtMTcyLSAqIEBpbml0aWFsX2NhcGFjaXR5OiBUaGUgbnVtYmVyIG9mIGVudHJpZXMgdGhlIG1hcCBzaG91bGQgaW5pdGlhbGx5IGJlIGNhcGFibGUgb2YgaG9sZGluZyAoemVyb1xuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL2ludC1tYXAuYy0xNzctICovXG5kcml2ZXJzL21kL2RtLXZkby9pbnQtbWFwLmM6MTc4OmludCB2ZG9faW50X21hcF9jcmVhdGUoc2l6ZV90IGluaXRpYWxfY2FwYWNpdHksIHN0cnVjdCBpbnRfbWFwICoqbWFwX3B0cilcbmRyaXZlcnMvbWQvZG0tdmRvL2ludC1tYXAuYy0xNzkte1xuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL2ludC1tYXAuaD0yND1zdHJ1Y3QgaW50X21hcDtcbmRyaXZlcnMvbWQvZG0tdmRvL2ludC1tYXAuaC0yNS1cbmRyaXZlcnMvbWQvZG0tdmRvL2ludC1tYXAuaDoyNjppbnQgX19tdXN0X2NoZWNrIHZkb19pbnRfbWFwX2NyZWF0ZShzaXplX3QgaW5pdGlhbF9jYXBhY2l0eSwgc3RydWN0IGludF9tYXAgKiptYXBfcHRyKTtcbmRyaXZlcnMvbWQvZG0tdmRvL2ludC1tYXAuaC0yNy1cbi0tXG5kcml2ZXJzL21kL2RtLXZkby9pby1zdWJtaXR0ZXIuYz00MDU9aW50IHZkb19tYWtlX2lvX3N1Ym1pdHRlcih1bnNpZ25lZCBpbnQgdGhyZWFkX2NvdW50LCB1bnNpZ25lZCBpbnQgcm90YXRpb25faW50ZXJ2YWwsXG4tLVxuZHJpdmVycy9tZC9kbS12ZG8vaW8tc3VibWl0dGVyLmMtNDMyLVx0XHQgKi9cbmRyaXZlcnMvbWQvZG0tdmRvL2lvLXN1Ym1pdHRlci5jOjQzMzpcdFx0cmVzdWx0ID0gdmRvX2ludF9tYXBfY3JlYXRlKG1heF9yZXF1ZXN0c19hY3RpdmUgKiAyLFxuZHJpdmVycy9tZC9kbS12ZG8vaW8tc3VibWl0dGVyLmMtNDM0LVx0XHRcdFx0XHQgICAgXHUwMDI2YmlvX3F1ZXVlX2RhdGEtXHUwMDNlbWFwKTtcbi0tXG5kcml2ZXJzL21kL2RtLXZkby9sb2dpY2FsLXpvbmUuYz01MT1zdGF0aWMgaW50IGluaXRpYWxpemVfem9uZShzdHJ1Y3QgbG9naWNhbF96b25lcyAqem9uZXMsIHpvbmVfY291bnRfdCB6b25lX251bWJlcilcbi0tXG5kcml2ZXJzL21kL2RtLXZkby9sb2dpY2FsLXpvbmUuYy01Ny1cbmRyaXZlcnMvbWQvZG0tdmRvL2xvZ2ljYWwtem9uZS5jOjU4Olx0cmVzdWx0ID0gdmRvX2ludF9tYXBfY3JlYXRlKFZET19MT0NLX01BUF9DQVBBQ0lUWSwgXHUwMDI2em9uZS1cdTAwM2VsYm5fb3BlcmF0aW9ucyk7XG5kcml2ZXJzL21kL2RtLXZkby9sb2dpY2FsLXpvbmUuYy01OS1cdGlmIChyZXN1bHQgIT0gVkRPX1NVQ0NFU1MpXG4tLVxuZHJpdmVycy9tZC9kbS12ZG8vcGh5c2ljYWwtem9uZS5jPTMyNT1zdGF0aWMgaW50IGluaXRpYWxpemVfem9uZShzdHJ1Y3QgdmRvICp2ZG8sIHN0cnVjdCBwaHlzaWNhbF96b25lcyAqem9uZXMpXG4tLVxuZHJpdmVycy9tZC9kbS12ZG8vcGh5c2ljYWwtem9uZS5jLTMzMC1cbmRyaXZlcnMvbWQvZG0tdmRvL3BoeXNpY2FsLXpvbmUuYzozMzE6XHRyZXN1bHQgPSB2ZG9faW50X21hcF9jcmVhdGUoVkRPX0xPQ0tfTUFQX0NBUEFDSVRZLCBcdTAwMjZ6b25lLVx1MDAzZXBibl9vcGVyYXRpb25zKTtcbmRyaXZlcnMvbWQvZG0tdmRvL3BoeXNpY2FsLXpvbmUuYy0zMzItXHRpZiAocmVzdWx0ICE9IFZET19TVUNDRVNTKVxuLS1cbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtNC0gKlxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYzo1OiAqIGJpdG1hcF9jcmVhdGUgIC0gc2V0cyB1cCB0aGUgYml0bWFwIHN0cnVjdHVyZVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy02LSAqIGJpdG1hcF9kZXN0cm95IC0gZGVzdHJveXMgdGhlIGJpdG1hcCBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jPTIwODY9c3RhdGljIHZvaWQgYml0bWFwX2Rlc3Ryb3koc3RydWN0IG1kZGV2ICptZGRldilcbi0tXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTIxMTEtICovXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jOjIxMTI6c3RhdGljIHN0cnVjdCBiaXRtYXAgKl9fYml0bWFwX2NyZWF0ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgc2xvdClcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtMjExMy17XG4tLVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy0yMTk5LVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYzoyMjAwOnN0YXRpYyBpbnQgYml0bWFwX2NyZWF0ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy0yMjAxLXtcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM6MjIwMjpcdHN0cnVjdCBiaXRtYXAgKmJpdG1hcCA9IF9fYml0bWFwX2NyZWF0ZShtZGRldiwgLTEpO1xuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy0yMjAzLVxuLS1cbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM9MjI2OT1zdGF0aWMgdm9pZCAqYml0bWFwX2dldF9mcm9tX3Nsb3Qoc3RydWN0IG1kZGV2ICptZGRldiwgaW50IHNsb3QpXG4tLVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy0yMjczLVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYzoyMjc0Olx0Yml0bWFwID0gX19iaXRtYXBfY3JlYXRlKG1kZGV2LCBzbG90KTtcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtMjI3NS1cdGlmIChJU19FUlIoYml0bWFwKSkge1xuLS1cbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM9MjYyOT1sb2NhdGlvbl9zdG9yZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4tLVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy0yNjk2LVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYzoyNjk3Olx0XHRcdHJ2ID0gbWRfYml0bWFwX2NyZWF0ZV9ub3N5c2ZzKG1kZGV2KTtcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtMjY5OC1cdFx0XHRpZiAocnYpXG4tLVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYz0zMDcxPXN0YXRpYyBzdHJ1Y3QgYml0bWFwX29wZXJhdGlvbnMgYml0bWFwX29wcyA9IHtcbi0tXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTMwNzgtXHQuZW5hYmxlZFx0XHQ9IGJpdG1hcF9lbmFibGVkLFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYzozMDc5Olx0LmNyZWF0ZVx0XHRcdD0gYml0bWFwX2NyZWF0ZSxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtMzA4MC1cdC5yZXNpemVcdFx0XHQ9IGJpdG1hcF9yZXNpemUsXG4tLVxuZHJpdmVycy9tZC9tZC1sbGJpdG1hcC5jPTEwNTE9c3RhdGljIHZvaWQgbWRfbGxiaXRtYXBfZGFlbW9uX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL21kL21kLWxsYml0bWFwLmMtMTEwMy1cbmRyaXZlcnMvbWQvbWQtbGxiaXRtYXAuYzoxMTA0OnN0YXRpYyBpbnQgbGxiaXRtYXBfY3JlYXRlKHN0cnVjdCBtZGRldiAqbWRkZXYpXG5kcml2ZXJzL21kL21kLWxsYml0bWFwLmMtMTEwNS17XG4tLVxuZHJpdmVycy9tZC9tZC1sbGJpdG1hcC5jPTE3NDk9c3RhdGljIHN0cnVjdCBiaXRtYXBfb3BlcmF0aW9ucyBsbGJpdG1hcF9vcHMgPSB7XG4tLVxuZHJpdmVycy9tZC9tZC1sbGJpdG1hcC5jLTE3NTYtXHQuZW5hYmxlZFx0XHQ9IGxsYml0bWFwX2VuYWJsZWQsXG5kcml2ZXJzL21kL21kLWxsYml0bWFwLmM6MTc1NzpcdC5jcmVhdGVcdFx0XHQ9IGxsYml0bWFwX2NyZWF0ZSxcbmRyaXZlcnMvbWQvbWQtbGxiaXRtYXAuYy0xNzU4LVx0LnJlc2l6ZVx0XHRcdD0gbGxiaXRtYXBfcmVzaXplLFxuLS1cbmRyaXZlcnMvbWQvbWQuYz02NDY4PXN0YXRpYyBlbnVtIG1kX3N1Ym1vZHVsZV9pZCBtZF9iaXRtYXBfZ2V0X2lkX2Zyb21fc2Ioc3RydWN0IG1kZGV2ICptZGRldilcbi0tXG5kcml2ZXJzL21kL21kLmMtNjUzNy1cbmRyaXZlcnMvbWQvbWQuYzo2NTM4OmludCBtZF9iaXRtYXBfY3JlYXRlX25vc3lzZnMoc3RydWN0IG1kZGV2ICptZGRldilcbmRyaXZlcnMvbWQvbWQuYy02NTM5LXtcbi0tXG5kcml2ZXJzL21kL21kLmMtNjU4Ni1cbmRyaXZlcnMvbWQvbWQuYzo2NTg3OnN0YXRpYyBpbnQgbWRfYml0bWFwX2NyZWF0ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuZHJpdmVycy9tZC9tZC5jLTY1ODgte1xuLS1cbmRyaXZlcnMvbWQvbWQuYy02NTkwLVxuZHJpdmVycy9tZC9tZC5jOjY1OTE6XHRlcnIgPSBtZF9iaXRtYXBfY3JlYXRlX25vc3lzZnMobWRkZXYpO1xuZHJpdmVycy9tZC9tZC5jLTY1OTItXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbWQvbWQuYz02NjI5PWludCBtZF9ydW4oc3RydWN0IG1kZGV2ICptZGRldilcbi0tXG5kcml2ZXJzL21kL21kLmMtNjc3My1cdCAgICAobWRkZXYtXHUwMDNlYml0bWFwX2luZm8uZmlsZSB8fCBtZGRldi1cdTAwM2ViaXRtYXBfaW5mby5vZmZzZXQpKSB7XG5kcml2ZXJzL21kL21kLmM6Njc3NDpcdFx0ZXJyID0gbWRfYml0bWFwX2NyZWF0ZShtZGRldik7XG5kcml2ZXJzL21kL21kLmMtNjc3NS1cdFx0aWYgKGVycilcbi0tXG5kcml2ZXJzL21kL21kLmM9Nzc4Mz1zdGF0aWMgaW50IHNldF9iaXRtYXBfZmlsZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgZmQpXG4tLVxuZHJpdmVycy9tZC9tZC5jLTc4NDYtXHRcdGlmIChmZCBcdTAwM2U9IDApIHtcbmRyaXZlcnMvbWQvbWQuYzo3ODQ3Olx0XHRcdGVyciA9IG1kX2JpdG1hcF9jcmVhdGUobWRkZXYpO1xuZHJpdmVycy9tZC9tZC5jLTc4NDgtXHRcdFx0aWYgKCFlcnIpXG4tLVxuZHJpdmVycy9tZC9tZC5jPTgwODU9c3RhdGljIGludCB1cGRhdGVfYXJyYXlfaW5mbyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBtZHVfYXJyYXlfaW5mb190ICppbmZvKVxuLS1cbmRyaXZlcnMvbWQvbWQuYy04MTY1LVx0XHRcdG1kZGV2LVx1MDAzZWJpdG1hcF9pZCA9IElEX0JJVE1BUDtcbmRyaXZlcnMvbWQvbWQuYzo4MTY2Olx0XHRcdHJ2ID0gbWRfYml0bWFwX2NyZWF0ZShtZGRldik7XG5kcml2ZXJzL21kL21kLmMtODE2Ny1cdFx0XHRpZiAoIXJ2KVxuLS1cbmRyaXZlcnMvbWQvbWQuaD05Mzk9Ym9vbCBtZGRldl9zZXRfYml0bWFwX29wc19ub3N5c2ZzKHN0cnVjdCBtZGRldiAqbWRkZXYpO1xuZHJpdmVycy9tZC9tZC5oOjk0MDppbnQgbWRfYml0bWFwX2NyZWF0ZV9ub3N5c2ZzKHN0cnVjdCBtZGRldiAqbWRkZXYpO1xuZHJpdmVycy9tZC9tZC5oLTk0MS12b2lkIG1kX2JpdG1hcF9kZXN0cm95X25vc3lzZnMoc3RydWN0IG1kZGV2ICptZGRldik7XG4tLVxuZHJpdmVycy9taXNjL2Zhc3RycGMuYz04MzU9c3RhdGljIGludCBmYXN0cnBjX21hcF9hdHRhY2goc3RydWN0IGZhc3RycGNfdXNlciAqZmwsIGludCBmZCxcbi0tXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jLTkyNi1cbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmM6OTI3OnN0YXRpYyBpbnQgZmFzdHJwY19tYXBfY3JlYXRlKHN0cnVjdCBmYXN0cnBjX3VzZXIgKmZsLCBpbnQgZmQsXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jLTkyOC1cdFx0XHQgICAgICB1NjQgbGVuLCB1MzIgYXR0ciwgc3RydWN0IGZhc3RycGNfbWFwICoqcHBtYXApXG4tLVxuZHJpdmVycy9taXNjL2Zhc3RycGMuYz05OTc9c3RhdGljIGludCBmYXN0cnBjX2NyZWF0ZV9tYXBzKHN0cnVjdCBmYXN0cnBjX2ludm9rZV9jdHggKmN0eClcbi0tXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jLTEwMDgtXHRcdGlmIChpIFx1MDAzYyBjdHgtXHUwMDNlbmJ1ZnMpXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jOjEwMDk6XHRcdFx0ZXJyID0gZmFzdHJwY19tYXBfY3JlYXRlKGN0eC1cdTAwM2VmbCwgY3R4LVx1MDAzZWFyZ3NbaV0uZmQsXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jLTEwMTAtXHRcdFx0XHQgY3R4LVx1MDAzZWFyZ3NbaV0ubGVuZ3RoLCBjdHgtXHUwMDNlYXJnc1tpXS5hdHRyLCBcdTAwMjZjdHgtXHUwMDNlbWFwc1tpXSk7XG4tLVxuZHJpdmVycy9taXNjL2Zhc3RycGMuYz0xNDYyPXN0YXRpYyBpbnQgZmFzdHJwY19pbml0X2NyZWF0ZV9wcm9jZXNzKHN0cnVjdCBmYXN0cnBjX3VzZXIgKmZsLFxuLS1cbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtMTUxMy1cdGlmIChpbml0LmZpbGVsZW4gXHUwMDI2XHUwMDI2IGluaXQuZmlsZWZkKSB7XG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jOjE1MTQ6XHRcdGVyciA9IGZhc3RycGNfbWFwX2NyZWF0ZShmbCwgaW5pdC5maWxlZmQsIGluaXQuZmlsZWxlbiwgMCwgXHUwMDI2bWFwKTtcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtMTUxNS1cdFx0aWYgKGVycilcbi0tXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jPTIwOTU9c3RhdGljIGludCBmYXN0cnBjX3JlcV9tZW1fbWFwKHN0cnVjdCBmYXN0cnBjX3VzZXIgKmZsLCBjaGFyIF9fdXNlciAqYXJncClcbi0tXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jLTIxMTEtXHQvKiBjcmVhdGUgU01NVSBtYXBwaW5nICovXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jOjIxMTI6XHRlcnIgPSBmYXN0cnBjX21hcF9jcmVhdGUoZmwsIHJlcS5mZCwgcmVxLmxlbmd0aCwgMCwgXHUwMDI2bWFwKTtcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtMjExMy1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL210ZC9uYW5kL3NwaS9jb3JlLmM9MTIyMj1zdGF0aWMgc3RydWN0IHNwaV9tZW1fZGlybWFwX2Rlc2MgKnNwaW5hbmRfY3JlYXRlX3JkZXNjKFxuLS1cbmRyaXZlcnMvbXRkL25hbmQvc3BpL2NvcmUuYy0xMjM0LVx0XHRpbmZvLVx1MDAzZWxlbmd0aCA9IG5hbmRkZXZfZXJhc2VibG9ja19zaXplKG5hbmQpO1xuZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jOjEyMzU6XHRcdGRlc2MgPSBkZXZtX3NwaV9tZW1fZGlybWFwX2NyZWF0ZShcdTAwMjZzcGluYW5kLVx1MDAzZXNwaW1lbS1cdTAwM2VzcGktXHUwMDNlZGV2LFxuZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jLTEyMzYtXHRcdFx0XHRcdFx0ICBzcGluYW5kLVx1MDAzZXNwaW1lbSwgaW5mbyk7XG4tLVxuZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jLTEyNDgtXHRcdFx0ICAgICAgIG5hbmRkZXZfcGVyX3BhZ2Vfb29ic2l6ZShuYW5kKTtcbmRyaXZlcnMvbXRkL25hbmQvc3BpL2NvcmUuYzoxMjQ5Olx0XHRkZXNjID0gZGV2bV9zcGlfbWVtX2Rpcm1hcF9jcmVhdGUoXHUwMDI2c3BpbmFuZC1cdTAwM2VzcGltZW0tXHUwMDNlc3BpLVx1MDAzZWRldixcbmRyaXZlcnMvbXRkL25hbmQvc3BpL2NvcmUuYy0xMjUwLVx0XHRcdFx0XHRcdCAgc3BpbmFuZC1cdTAwM2VzcGltZW0sIGluZm8pO1xuLS1cbmRyaXZlcnMvbXRkL25hbmQvc3BpL2NvcmUuYz0xMjU2PXN0YXRpYyBpbnQgc3BpbmFuZF9jcmVhdGVfZGlybWFwKHN0cnVjdCBzcGluYW5kX2RldmljZSAqc3BpbmFuZCxcbi0tXG5kcml2ZXJzL210ZC9uYW5kL3NwaS9jb3JlLmMtMTI4Ni1cdGluZm8ucHJpbWFyeV9vcF90bXBsLmRhdGEuZWNjID0gZW5hYmxlX2VjYztcbmRyaXZlcnMvbXRkL25hbmQvc3BpL2NvcmUuYzoxMjg3Olx0ZGVzYyA9IGRldm1fc3BpX21lbV9kaXJtYXBfY3JlYXRlKFx1MDAyNnNwaW5hbmQtXHUwMDNlc3BpbWVtLVx1MDAzZXNwaS1cdTAwM2VkZXYsXG5kcml2ZXJzL210ZC9uYW5kL3NwaS9jb3JlLmMtMTI4OC1cdFx0XHRcdFx0ICBzcGluYW5kLVx1MDAzZXNwaW1lbSwgXHUwMDI2aW5mbyk7XG4tLVxuZHJpdmVycy9tdGQvc3BpLW5vci9jb3JlLmM9MzcxMT1zdGF0aWMgaW50IHNwaV9ub3JfY3JlYXRlX3JlYWRfZGlybWFwKHN0cnVjdCBzcGlfbm9yICpub3IpXG4tLVxuZHJpdmVycy9tdGQvc3BpLW5vci9jb3JlLmMtMzczNy1cbmRyaXZlcnMvbXRkL3NwaS1ub3IvY29yZS5jOjM3Mzg6XHRub3ItXHUwMDNlZGlybWFwLnJkZXNjID0gZGV2bV9zcGlfbWVtX2Rpcm1hcF9jcmVhdGUobm9yLVx1MDAzZWRldiwgbm9yLVx1MDAzZXNwaW1lbSxcbmRyaXZlcnMvbXRkL3NwaS1ub3IvY29yZS5jLTM3MzktXHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmluZm8pO1xuLS1cbmRyaXZlcnMvbXRkL3NwaS1ub3IvY29yZS5jPTM3NDM9c3RhdGljIGludCBzcGlfbm9yX2NyZWF0ZV93cml0ZV9kaXJtYXAoc3RydWN0IHNwaV9ub3IgKm5vcilcbi0tXG5kcml2ZXJzL210ZC9zcGktbm9yL2NvcmUuYy0zNzY3LVxuZHJpdmVycy9tdGQvc3BpLW5vci9jb3JlLmM6Mzc2ODpcdG5vci1cdTAwM2VkaXJtYXAud2Rlc2MgPSBkZXZtX3NwaV9tZW1fZGlybWFwX2NyZWF0ZShub3ItXHUwMDNlZGV2LCBub3ItXHUwMDNlc3BpbWVtLFxuZHJpdmVycy9tdGQvc3BpLW5vci9jb3JlLmMtMzc2OS1cdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2aW5mbyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvbnBjLmM9MzQ1Nj1zdGF0aWMgdm9pZCBucGNfc3ViYmFua19pbml0KHN0cnVjdCBydnUgKnJ2dSwgc3RydWN0IG5wY19zdWJiYW5rICpzYiwgaW50IGlkeClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9ucGMuYy0zNDY5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvbnBjLmM6MzQ3MDpzdGF0aWMgaW50IG5wY19wY2lmdW5jX21hcF9jcmVhdGUoc3RydWN0IHJ2dSAqcnZ1KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvbnBjLmMtMzQ3MS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvbnBjLmM9NDY1ND1zdGF0aWMgaW50IG5wY19wcml2X2luaXQoc3RydWN0IHJ2dSAqcnZ1KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL25wYy5jLTQ3NTgtXHQvKiBHZXQgbnVtYmVyIG9mIHBjaWZ1bmNzIGluIHRoZSBzeXN0ZW0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL25wYy5jOjQ3NTk6XHRucGNfcHJpdi1cdTAwM2VwZl9jbnQgPSBucGNfcGNpZnVuY19tYXBfY3JlYXRlKHJ2dSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9ucGMuYy00NzYwLVx0bnBjX3ByaXYtXHUwMDNleGFfcGYyaWR4X21hcCA9IGtjYWxsb2MobnBjX3ByaXYtXHUwMDNlcGZfY250LFxuLS1cbmRyaXZlcnMvcGluY3RybC9iY20vcGluY3RybC1pcHJvYy1ncGlvLmM9NDI4PXN0YXRpYyBib29sIGlwcm9jX3BpbmNvbmZfcGFyYW1faXNfZGlzYWJsZWQoc3RydWN0IGlwcm9jX2dwaW8gKmNoaXAsXG4tLVxuZHJpdmVycy9waW5jdHJsL2JjbS9waW5jdHJsLWlwcm9jLWdwaW8uYy00NDItXG5kcml2ZXJzL3BpbmN0cmwvYmNtL3BpbmN0cmwtaXByb2MtZ3Bpby5jOjQ0MzpzdGF0aWMgaW50IGlwcm9jX3BpbmNvbmZfZGlzYWJsZV9tYXBfY3JlYXRlKHN0cnVjdCBpcHJvY19ncGlvICpjaGlwLFxuZHJpdmVycy9waW5jdHJsL2JjbS9waW5jdHJsLWlwcm9jLWdwaW8uYy00NDQtXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGRpc2FibGVfbWFzaylcbi0tXG5kcml2ZXJzL3BpbmN0cmwvYmNtL3BpbmN0cmwtaXByb2MtZ3Bpby5jPTgwND1zdGF0aWMgaW50IGlwcm9jX2dwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3BpbmN0cmwvYmNtL3BpbmN0cmwtaXByb2MtZ3Bpby5jLTkwNC1cdFx0aWYgKHBpbmNvbmZfZGlzYWJsZV9tYXNrKSB7XG5kcml2ZXJzL3BpbmN0cmwvYmNtL3BpbmN0cmwtaXByb2MtZ3Bpby5jOjkwNTpcdFx0XHRyZXQgPSBpcHJvY19waW5jb25mX2Rpc2FibGVfbWFwX2NyZWF0ZShjaGlwLFxuZHJpdmVycy9waW5jdHJsL2JjbS9waW5jdHJsLWlwcm9jLWdwaW8uYy05MDYtXHRcdFx0XHRcdFx0XHQgcGluY29uZl9kaXNhYmxlX21hc2spO1xuLS1cbmRyaXZlcnMvc2NzaS9jeGdiaS9jeGdiM2kvY3hnYjNpLmM9MTAzOT1zdGF0aWMgaW50IGN4Z2IzaV9vZmxkX2luaXQoc3RydWN0IGN4Z2JpX2RldmljZSAqY2Rldilcbi0tXG5kcml2ZXJzL3Njc2kvY3hnYmkvY3hnYjNpL2N4Z2IzaS5jLTEwNTYtXG5kcml2ZXJzL3Njc2kvY3hnYmkvY3hnYjNpL2N4Z2IzaS5jOjEwNTc6XHRyYyA9IGN4Z2JpX2RldmljZV9wb3J0bWFwX2NyZWF0ZShjZGV2LCBjeGdiM2lfc3BvcnRfYmFzZSxcbmRyaXZlcnMvc2NzaS9jeGdiaS9jeGdiM2kvY3hnYjNpLmMtMTA1OC1cdFx0XHRcdFx0Y3hnYjNpX21heF9jb25uZWN0KTtcbi0tXG5kcml2ZXJzL3Njc2kvY3hnYmkvY3hnYjRpL2N4Z2I0aS5jPTE5NDQ9c3RhdGljIGludCBjeGdiNGlfb2ZsZF9pbml0KHN0cnVjdCBjeGdiaV9kZXZpY2UgKmNkZXYpXG4tLVxuZHJpdmVycy9zY3NpL2N4Z2JpL2N4Z2I0aS9jeGdiNGkuYy0xOTUwLVxuZHJpdmVycy9zY3NpL2N4Z2JpL2N4Z2I0aS9jeGdiNGkuYzoxOTUxOlx0cmMgPSBjeGdiaV9kZXZpY2VfcG9ydG1hcF9jcmVhdGUoY2RldiwgY3hnYjRpX3Nwb3J0X2Jhc2UsXG5kcml2ZXJzL3Njc2kvY3hnYmkvY3hnYjRpL2N4Z2I0aS5jLTE5NTItXHRcdFx0XHRcdGN4Z2I0aV9tYXhfY29ubmVjdCk7XG4tLVxuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmM9Njc9c3RhdGljIGlubGluZSB2b2lkIGN4Z2JpX2RlY29kZV9zd190YWcodTMyIHN3X3RhZywgaW50ICppZHgsIGludCAqYWdlKVxuLS1cbmRyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5jLTc0LVxuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmM6NzU6aW50IGN4Z2JpX2RldmljZV9wb3J0bWFwX2NyZWF0ZShzdHJ1Y3QgY3hnYmlfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBpbnQgYmFzZSxcbmRyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5jLTc2LVx0XHRcdFx0dW5zaWduZWQgaW50IG1heF9jb25uKVxuLS1cbmRyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5jLTkyLX1cbmRyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5jOjkzOkVYUE9SVF9TWU1CT0xfR1BMKGN4Z2JpX2RldmljZV9wb3J0bWFwX2NyZWF0ZSk7XG5kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYy05NC1cbi0tXG5kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuaD01OTM9dm9pZCBjeGdiaV9oYmFzX3JlbW92ZShzdHJ1Y3QgY3hnYmlfZGV2aWNlICopO1xuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmgtNTk0LVxuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmg6NTk1OmludCBjeGdiaV9kZXZpY2VfcG9ydG1hcF9jcmVhdGUoc3RydWN0IGN4Z2JpX2RldmljZSAqY2RldiwgdW5zaWduZWQgaW50IGJhc2UsXG5kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuaC01OTYtXHRcdFx0dW5zaWduZWQgaW50IG1heF9jb25uKTtcbi0tXG5kcml2ZXJzL3NwaS9zcGktYWlyb2hhLXNuZmkuYz01MTg9c3RhdGljIGJvb2wgYWlyb2hhX3NuYW5kX3N1cHBvcnRzX29wKHN0cnVjdCBzcGlfbWVtICptZW0sXG4tLVxuZHJpdmVycy9zcGkvc3BpLWFpcm9oYS1zbmZpLmMtNTM0LVxuZHJpdmVycy9zcGkvc3BpLWFpcm9oYS1zbmZpLmM6NTM1OnN0YXRpYyBpbnQgYWlyb2hhX3NuYW5kX2Rpcm1hcF9jcmVhdGUoc3RydWN0IHNwaV9tZW1fZGlybWFwX2Rlc2MgKmRlc2MpXG5kcml2ZXJzL3NwaS9zcGktYWlyb2hhLXNuZmkuYy01MzYte1xuLS1cbmRyaXZlcnMvc3BpL3NwaS1haXJvaGEtc25maS5jPTEwMDg9c3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfY29udHJvbGxlcl9tZW1fb3BzIGFpcm9oYV9zbmFuZF9tZW1fb3BzID0ge1xuLS1cbmRyaXZlcnMvc3BpL3NwaS1haXJvaGEtc25maS5jLTEwMTAtXHQuZXhlY19vcCA9IGFpcm9oYV9zbmFuZF9leGVjX29wLFxuZHJpdmVycy9zcGkvc3BpLWFpcm9oYS1zbmZpLmM6MTAxMTpcdC5kaXJtYXBfY3JlYXRlID0gYWlyb2hhX3NuYW5kX2Rpcm1hcF9jcmVhdGUsXG5kcml2ZXJzL3NwaS9zcGktYWlyb2hhLXNuZmkuYy0xMDEyLVx0LmRpcm1hcF9yZWFkID0gYWlyb2hhX3NuYW5kX2Rpcm1hcF9yZWFkLFxuLS1cbmRyaXZlcnMvc3BpL3NwaS1hc3BlZWQtc21jLmM9Njk0PXN0YXRpYyBpbnQgYXNwZWVkX3NwaV9kb19jYWxpYnJhdGlvbihzdHJ1Y3QgYXNwZWVkX3NwaV9jaGlwICpjaGlwKTtcbmRyaXZlcnMvc3BpL3NwaS1hc3BlZWQtc21jLmMtNjk1LVxuZHJpdmVycy9zcGkvc3BpLWFzcGVlZC1zbWMuYzo2OTY6c3RhdGljIGludCBhc3BlZWRfc3BpX2Rpcm1hcF9jcmVhdGUoc3RydWN0IHNwaV9tZW1fZGlybWFwX2Rlc2MgKmRlc2MpXG5kcml2ZXJzL3NwaS9zcGktYXNwZWVkLXNtYy5jLTY5Ny17XG4tLVxuZHJpdmVycy9zcGkvc3BpLWFzcGVlZC1zbWMuYz03ODI9c3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfY29udHJvbGxlcl9tZW1fb3BzIGFzcGVlZF9zcGlfbWVtX29wcyA9IHtcbi0tXG5kcml2ZXJzL3NwaS9zcGktYXNwZWVkLXNtYy5jLTc4NS1cdC5nZXRfbmFtZSA9IGFzcGVlZF9zcGlfZ2V0X25hbWUsXG5kcml2ZXJzL3NwaS9zcGktYXNwZWVkLXNtYy5jOjc4NjpcdC5kaXJtYXBfY3JlYXRlID0gYXNwZWVkX3NwaV9kaXJtYXBfY3JlYXRlLFxuZHJpdmVycy9zcGkvc3BpLWFzcGVlZC1zbWMuYy03ODctXHQuZGlybWFwX3JlYWQgPSBhc3BlZWRfc3BpX2Rpcm1hcF9yZWFkLFxuLS1cbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jPTgwMT1zdGF0aWMgY29uc3QgY2hhciAqaW50ZWxfc3BpX2dldF9uYW1lKHN0cnVjdCBzcGlfbWVtICptZW0pXG4tLVxuZHJpdmVycy9zcGkvc3BpLWludGVsLmMtODExLVxuZHJpdmVycy9zcGkvc3BpLWludGVsLmM6ODEyOnN0YXRpYyBpbnQgaW50ZWxfc3BpX2Rpcm1hcF9jcmVhdGUoc3RydWN0IHNwaV9tZW1fZGlybWFwX2Rlc2MgKmRlc2MpXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYy04MTMte1xuLS1cbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jPTg1OD1zdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9jb250cm9sbGVyX21lbV9vcHMgaW50ZWxfc3BpX21lbV9vcHMgPSB7XG4tLVxuZHJpdmVycy9zcGkvc3BpLWludGVsLmMtODYyLVx0LmdldF9uYW1lID0gaW50ZWxfc3BpX2dldF9uYW1lLFxuZHJpdmVycy9zcGkvc3BpLWludGVsLmM6ODYzOlx0LmRpcm1hcF9jcmVhdGUgPSBpbnRlbF9zcGlfZGlybWFwX2NyZWF0ZSxcbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jLTg2NC1cdC5kaXJtYXBfcmVhZCA9IGludGVsX3NwaV9kaXJtYXBfcmVhZCxcbi0tXG5kcml2ZXJzL3NwaS9zcGktbWVtLmM9NzA2PXN0YXRpYyBzc2l6ZV90IHNwaV9tZW1fbm9fZGlybWFwX3dyaXRlKHN0cnVjdCBzcGlfbWVtX2Rpcm1hcF9kZXNjICpkZXNjLFxuLS1cbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03MjYtLyoqXG5kcml2ZXJzL3NwaS9zcGktbWVtLmM6NzI3OiAqIHNwaV9tZW1fZGlybWFwX2NyZWF0ZSgpIC0gQ3JlYXRlIGEgZGlyZWN0IG1hcHBpbmcgZGVzY3JpcHRvclxuZHJpdmVycy9zcGkvc3BpLW1lbS5jLTcyOC0gKiBAbWVtOiBTUEkgbWVtIGRldmljZSB0aGlzIGRpcmVjdCBtYXBwaW5nIHNob3VsZCBiZSBjcmVhdGVkIGZvclxuLS1cbmRyaXZlcnMvc3BpL3NwaS1tZW0uYz03Mzk9c3RydWN0IHNwaV9tZW1fZGlybWFwX2Rlc2MgKlxuZHJpdmVycy9zcGkvc3BpLW1lbS5jOjc0MDpzcGlfbWVtX2Rpcm1hcF9jcmVhdGUoc3RydWN0IHNwaV9tZW0gKm1lbSxcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03NDEtXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBzcGlfbWVtX2Rpcm1hcF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03NjYtXG5kcml2ZXJzL3NwaS9zcGktbWVtLmM6NzY3Olx0XHRpZiAoY3Rsci1cdTAwM2VtZW1fb3BzIFx1MDAyNlx1MDAyNiBjdGxyLVx1MDAzZW1lbV9vcHMtXHUwMDNlZGlybWFwX2NyZWF0ZSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03NjgtXHRcdCAgICAhc3BpX21lbV9jb250cm9sbGVyX2lzX2NhcGFibGUoY3Rsciwgc2Vjb25kYXJ5X29wX3RtcGwpKVxuLS1cbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03NzgtXHRkZXNjLVx1MDAzZWluZm8ub3BfdG1wbCA9IFx1MDAyNmRlc2MtXHUwMDNlaW5mby5wcmltYXJ5X29wX3RtcGw7XG5kcml2ZXJzL3NwaS9zcGktbWVtLmM6Nzc5Olx0aWYgKGN0bHItXHUwMDNlbWVtX29wcyBcdTAwMjZcdTAwMjYgY3Rsci1cdTAwM2VtZW1fb3BzLVx1MDAzZWRpcm1hcF9jcmVhdGUpIHtcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03ODAtXHRcdHJldCA9IHNwaV9tZW1fYWNjZXNzX3N0YXJ0KG1lbSk7XG4tLVxuZHJpdmVycy9zcGkvc3BpLW1lbS5jLTc4NS1cbmRyaXZlcnMvc3BpL3NwaS1tZW0uYzo3ODY6XHRcdHJldCA9IGN0bHItXHUwMDNlbWVtX29wcy1cdTAwM2VkaXJtYXBfY3JlYXRlKGRlc2MpO1xuZHJpdmVycy9zcGkvc3BpLW1lbS5jLTc4Ny1cbi0tXG5kcml2ZXJzL3NwaS9zcGktbWVtLmMtODA1LX1cbmRyaXZlcnMvc3BpL3NwaS1tZW0uYzo4MDY6RVhQT1JUX1NZTUJPTF9HUEwoc3BpX21lbV9kaXJtYXBfY3JlYXRlKTtcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy04MDctXG4tLVxuZHJpdmVycy9zcGkvc3BpLW1lbS5jLTgxMi0gKiBUaGlzIGZ1bmN0aW9uIGRlc3Ryb3lzIGEgZGlyZWN0IG1hcHBpbmcgZGVzY3JpcHRvciBwcmV2aW91c2x5IGNyZWF0ZWQgYnlcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYzo4MTM6ICogc3BpX21lbV9kaXJtYXBfY3JlYXRlKCkuXG5kcml2ZXJzL3NwaS9zcGktbWVtLmMtODE0LSAqL1xuLS1cbmRyaXZlcnMvc3BpL3NwaS1tZW0uYz04MjY9c3RhdGljIHZvaWQgZGV2bV9zcGlfbWVtX2Rpcm1hcF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcmVzKVxuLS1cbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy04MzMtLyoqXG5kcml2ZXJzL3NwaS9zcGktbWVtLmM6ODM0OiAqIGRldm1fc3BpX21lbV9kaXJtYXBfY3JlYXRlKCkgLSBDcmVhdGUgYSBkaXJlY3QgbWFwcGluZyBkZXNjcmlwdG9yIGFuZCBhdHRhY2hcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy04MzUtICpcdFx0XHRcdCAgaXQgdG8gYSBkZXZpY2VcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ0OAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCBCUEYgYW5kIHRoZSBrZXJuZWw6CgoqKkJQRiBNYXAgQ3JlYXRpb246IEEgUXVpY2sgUmVhbGl0eSBDaGVjayoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBjcmVhdGluZyBhIEJQRiBtYXAgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHJlY2FsbCB0aGUgcmVsZXZhbnQgZnVuY3Rpb24uIExldCBtZSBzZWUsIGBicGZfbWFwX2NyZWF0ZWAuLi4gd2FpdCwgbm8sIHRoYXQmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBNeSBpbnRlcm5hbCBkYXRhYmFzZSBzYXlzIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZCBgbWFwX2NyZWF0ZWAuIEl0JiMzOTtzIGhvdXNlZCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBidXQgSSB0aGluayBJIHdhcyBhIGxpdHRsZSBvZmYgaW4gdGhlIHByZWNpc2UgbmFtZSBvZiB0aGUgY2FsbC4gUXVpY2sgbWVudGFsIGNvcnJlY3Rpb24g4oCTIGtlZXAgdGhlIGRldGFpbHMgc3RyYWlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NZU0NBTExfREVGSU5FLipicGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9NjMxNj1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ5NS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0OTY6U1lTQ0FMTF9ERUZJTkU1KGJwZiwgaW50LCBjbWQsIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqLCB1YXR0ciwgdW5zaWduZWQgaW50LCBzaXplLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ5Ny1cdFx0c3RydWN0IGJwZl9jb21tb25fYXR0ciBfX3VzZXIgKiwgdWF0dHJfY29tbW9uLCB1bnNpZ25lZCBpbnQsIHNpemVfY29tbW9uKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjgwMgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBCUEYgbWVtb3J5IGFsbG9jYXRpb24uIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhIHN5c3RlbSBjYWxsLCBgYnBmYCwgYW5kIHNwZWNpZmljYWxseSB0aGUgYEJQRl9NQVBfQ1JFQVRFYCBjb21tYW5kLiBUaGUgaW5pdGlhbCBmb2NhbCBwb2ludCBpcyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgYXJlbmFfdm1fZmF1bHRgIGFuZCBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAuIEkgc2VlIHRoYXQgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzIGFuIEFQSSBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBmYXVsdCBoYW5kbGVyLgoKVGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0sIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdGhhdCBgYXJlbmFfdm1fZmF1bHRgIG9wZXJhdGVzIHdpdGhpbiBhIHNsZWVwYWJsZSBjb250ZXh0LiBIb3dldmVyLCBpdCB3YXMsIGF0IHNvbWUgcG9pbnQsIHVzaW5nIGBicGZfbWFwX2FsbG9jX3BhZ2VzYCwgd2hpY2ggZW1wbG95cyBhIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IuIFRoaXMgaXMgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IGlzc3VlIHRoYXQgY291bGQgbGVhZCB0byBkZWFkbG9ja3Mgb3Igb3RoZXIgdW5leHBlY3RlZCBiZWhhdmlvcnMuCgpUaGUgZml4IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgdXNpbmcgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzIHRoZSByaWdodCBjaG9pY2UgYmVjYXVzZSBpdCBsZXZlcmFnZXMgYGFsbG9jX3BhZ2VzX25vZGVgIHdpdGggYEdGUF9LRVJORUxgLCB3aGljaCBpcyBhIHNsZWVwYWJsZSBhbGxvY2F0aW9uLiBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgaXMgZGVmaW5pdGVseSBhIGtleSBzeW1ib2wgdG8gemVybyBpbiBvbi4KCk5vdywgbGV0IG1lIHRoaW5rIGlmIHRoaXMgcGF0Y2ggaXMgbW9yZSBicm9hZC4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kIGBhcmVuYV92bV9mYXVsdGAuIFNpbmNlIGl0JiMzOTtzIG1hcmtlZCBhcyBgc3RhdGljYCwgSSBpbW1lZGlhdGVseSByZWFsaXplIGRpcmVjdCBmdXp6aW5nIGJ5IG5hbWUgd291bGQgYmUgZGlmZmljdWx0LiBIb3dldmVyLCBzeXprYWxsZXIgbWlnaHQgc3RpbGwgYmUgYWJsZSB0byBmdXp6IGl0IGluZGlyZWN0bHkgYnkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgQlBGIGFyZW5hIG1hcCB2aWEgYG1tYXBgLgoKTGV0IG1lIHF1aWNrbHkgc2NhbiB0aGUgbW9kaWZpZWQgY29kZSBhZ2Fpbi4gQWgsIGBicGZfbWFwX2FsbG9jX3BhZ2VzYCBpcyBub3QgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGJlaW5nIGFsdGVyZWQuIEluc3RlYWQsIHRoZSBtb2RpZmljYXRpb24gaXMgb24gYF9fYnBmX2FsbG9jX3BhZ2VgLiBJIHNob3VsZCBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIGRpZ2dpbmcgaW50byB0aGlzIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYnBmX2FsbG9jX3BhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9NTk5PXN0YXRpYyBib29sIGNhbl9hbGxvY19wYWdlcyh2b2lkKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwNi1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwNzpzdGF0aWMgc3RydWN0IHBhZ2UgKl9fYnBmX2FsbG9jX3BhZ2UoaW50IG5pZClcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwOC17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjE1PWludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjIyLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MjM6XHRcdHBnID0gX19icGZfYWxsb2NfcGFnZShuaWQpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjI0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzcwMwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDE2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJIHNlZSB0aGV5JiMzOTt2ZSB0b3VjaGVkIGBfX2JwZl9hbGxvY19wYWdlYCwgYnV0IGl0JiMzOTtzICpzdGF0aWMqLiBUaGF0JiMzOTtzIG5vdCB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgaW4gdGVybXMgb2YgcG90ZW50aWFsIHN5bWJvbCBleHBvc3VyZS4gSG93ZXZlciwgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzICpub3QqIHN0YXRpYywgYW5kIHRoYXQgc2VlbXMgcmVsZXZhbnQuIFJpZ2h0LCBJIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGluIG15IEZvY3VzU3ltYm9scyBsaXN0LiBMZXQgbWUgbWFrZSBhIG5vdGUgb2YgdGhhdC4gQW5kIEkmIzM5O20gc2VlaW5nIGEgY2hhbmdlIHRvIGBhcmVuYV92bV9mYXVsdGAg4oCTIGFub3RoZXIgc3RhdGljIG9uZS4gSG1tbSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuIE9rYXksIGEgcXVpY2sgc2Nhbi4uLiBObywgSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nIGVsc2Ugbm9uLXN0YXRpYy4gR29vZC4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSBpdHNlbGYgaXMgaW4gYGtlcm5lbC9icGYvYXJlbmEuY2AgYW5kIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIEFuZCBga2VybmVsL2JwZi9hcmVuYS5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIFdhaXQsIGhvbGQgb24uIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhhdC4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hXFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTE5PWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXG4tLVxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jPTcxPXN0YXRpYyBpbnQgc2N4X2FyZW5hX2dyb3coc3RydWN0IHNjeF9zY2hlZCAqc2NoLCB1MzIgcGFnZV9jbnQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTg2LVx0dWFkZHIzMiA9ICh1MzIpKHVuc2lnbmVkIGxvbmcpcDtcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYzo4NzpcdC8qIGFyZW5hLm8sIHdoaWNoIGRlZmluZXMgdGhlc2UsIGlzIGJ1aWx0IG9ubHkgb24gTU1VIFx1MDAyNlx1MDAyNiA2NEJJVCAqL1xua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTg4LSNpZiBkZWZpbmVkKENPTkZJR19NTVUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgwNjU9c3RhdGljIGludCBzY3hfYXJlbmFfc2Nhbl9wcm9nKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdm9pZCAqZGF0YSlcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwNjktXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgwNzA6XHQvKiBhcmVuYS5vLCB3aGljaCBkZWZpbmVzIHRoZXNlLCBpcyBidWlsdCBvbmx5IG9uIE1NVSBcdTAwMjZcdTAwMjYgNjRCSVQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA3MS0jaWYgZGVmaW5lZChDT05GSUdfTU1VKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlPTk5Mz0kKE9VVFBVVCkvYmVuY2hfeGRwX2xiLm86ICQoT1VUUFVUKS94ZHBfbGJfYmVuY2guc2tlbC5oIGJlbmNoX2JwZl90aW1pbmcuaFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlOjk5NDokKE9VVFBVVCkvYmVuY2hfbGliYXJlbmEubzogJChMSUJBUkVOQV9CRU5DSF9TS0VMKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlLTk5NS0kKE9VVFBVVCkvYmVuY2hfYnBmX3RpbWluZy5vOiBiZW5jaF9icGZfdGltaW5nLmhcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGU9OTk4PSQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXFxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUtMTAyMS1cdFx0ICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubyBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlOjEwMjI6XHRcdCAkKE9VVFBVVCkvYmVuY2hfbGliYXJlbmEubyBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlLTEwMjMtXHRcdCAkKE9VVFBVVCkvdXNkdF8xLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3NjcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgdGhlIGNvcmUgcmVxdWlyZW1lbnRzOiBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19NTVVgLCBhbmQgYENPTkZJR182NEJJVGAuIFRob3NlIGFyZSBnaXZlbnMgaW4gYW55IEJQRiBpbXBsZW1lbnRhdGlvbiB3b3J0aCBpdHMgc2FsdC4gQnV0IHRoZW4gSSYjMzk7bSBzZWVpbmcgYENPTkZJR19NRU1DR2AgbWVudGlvbmVkIGluIGBpbmNsdWRlL2xpbnV4L2JwZi5oYCwgYW5kIHRoZSBhcmVuYSB0ZXN0cywgc3BlY2lmaWNhbGx5IGBhcmVuYV9tZW1jZy5jYCwgYXJlIGluIHBsYXkgaGVyZS4gVGhhdCB3YXJyYW50cyBhIGRlZXBlciBsb29rLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYENPTkZJR19NRU1DR2AgaXMgKnRydWx5KiBuZWNlc3NhcnkuIE15IGluc3RpbmN0cyBhcmUgdGVsbGluZyBtZSBpdCBpcywgYnV0IEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBga2VybmVsL2JwZi9hcmVuYS5jYC4gQWgsIHRoZXJlIGl0IGlzOiBgYnBmX21hcF9tZW1jZ19lbnRlcmAgYW5kIGBicGZfbWFwX21lbWNnX2V4aXRgLiBUaG9zZSBzdHJvbmdseSBzdWdnZXN0IG1lbWNnIGludGVncmF0aW9uLiBBbmQgdGhlIHRlc3QgaXRzZWxmLCBgYXJlbmFfbWVtY2cuY2AsIGRpcmVjdGx5IHRhcmdldHMgdGhlIG1lbWNnIE9PTSBraWxsZXIsIHdoaWNoIGNvbmZpcm1zIG15IHN1c3BpY2lvbiEgVGhhdCYjMzk7cyBhIGtleSBpbmRpY2F0b3IuIFRoZSB0ZXN0ICpleHBsaWNpdGx5KiBjaGVja3MgdGhlIG1lbWNnIE9PTSBiZWhhdmlvciwgbWVhbmluZyBgQ09ORklHX01FTUNHYCBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkIHRvIGZ1bGx5IGV4ZXJjaXNlIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS4gU28sIGl0JiMzOTtzIG5vdCBqdXN0IGEgZGVwZW5kZW5jeTsgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSB0ZXN0IHNldHVwLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gYGtlcm5lbC9icGYvYXJlbmEuY2AgYWdhaW4sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgcmVsYXRlZCB0byBgQ09ORklHX01FTUNHYC4gR290dGEgbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCBhbGwgdGhlIHBpZWNlcyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTUVNQ0cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEyMDcgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL21lbW9yeS5yc3Q9NDA1PVRvIHVzZSB0aGUgdXNlciBpbnRlcmZhY2U6XG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9tZW1vcnkucnN0LTQwNi1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL21lbW9yeS5yc3Q6NDA3OjEuIEVuYWJsZSBDT05GSUdfQ0dST1VQUyBhbmQgQ09ORklHX01FTUNHIG9wdGlvbnNcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL21lbW9yeS5yc3QtNDA4LTIuIFByZXBhcmUgdGhlIGNncm91cHMgKHNlZSA6cmVmOmBXaHkgYXJlIGNncm91cHMgbmVlZGVkP1xuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vcGFnZW1hcC5yc3Q9NjU9bnVtYmVyIG9mIHRpbWVzIGEgcGFnZSBpcyBtYXBwZWQuXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9wYWdlbWFwLnJzdC0xMDEtICAgbWVtb3J5IGNncm91cCBlYWNoIHBhZ2UgaXMgY2hhcmdlZCB0bywgaW5kZXhlZCBieSBQRk4uIE9ubHkgYXZhaWxhYmxlIHdoZW5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vcGFnZW1hcC5yc3Q6MTAyOiAgIENPTkZJR19NRU1DRyBpcyBzZXQuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3BhZ2VtYXAucnN0LTEwMy1cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3Nocmlua2VyX2RlYnVnZnMucnN0PTE3PVVzYWdlOlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vc2hyaW5rZXJfZGVidWdmcy5yc3QtNTgtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3Nocmlua2VyX2RlYnVnZnMucnN0OjU5OiAgSWYgdGhlIHNocmlua2VyIGlzIG5vdCBtZW1jZy1hd2FyZSBvciBDT05GSUdfTUVNQ0cgaXMgb2ZmLCAwIGlzIHByaW50ZWRcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vc2hyaW5rZXJfZGVidWdmcy5yc3QtNjAtICBhcyBjZ3JvdXAgaW5vZGUgaWQuIElmIHRoZSBzaHJpbmtlciBpcyBub3QgbnVtYS1hd2FyZSwgMCYjMzk7cyBhcmUgcHJpbnRlZFxuLS1cbmFyY2gvYXJtL2NvbmZpZ3Mvb21hcDJwbHVzX2RlZmNvbmZpZz0xMT1DT05GSUdfQ0dST1VQUz15XG5hcmNoL2FybS9jb25maWdzL29tYXAycGx1c19kZWZjb25maWc6MTI6Q09ORklHX01FTUNHPXlcbmFyY2gvYXJtL2NvbmZpZ3Mvb21hcDJwbHVzX2RlZmNvbmZpZy0xMy1DT05GSUdfQkxLX0NHUk9VUD15XG4tLVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZz0xNz1DT05GSUdfTlVNQV9CQUxBTkNJTkc9eVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzoxODpDT05GSUdfTUVNQ0c9eVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0xOS1DT05GSUdfQkxLX0NHUk9VUD15XG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz0yMD1DT05GSUdfTE9HX0JVRl9TSElGVD0xOFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzoyMTpDT05GSUdfTUVNQ0c9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy0yMi1DT05GSUdfQkxLX0NHUk9VUD15XG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZz0yMz1DT05GSUdfTlVNQV9CQUxBTkNJTkc9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzoyNDpDT05GSUdfTUVNQ0c9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0yNS1DT05GSUdfQkxLX0NHUk9VUD15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvY2kyMF9kZWZjb25maWc9MTE9Q09ORklHX0NHUk9VUFM9eVxuYXJjaC9taXBzL2NvbmZpZ3MvY2kyMF9kZWZjb25maWc6MTI6Q09ORklHX01FTUNHPXlcbmFyY2gvbWlwcy9jb25maWdzL2NpMjBfZGVmY29uZmlnLTEzLUNPTkZJR19DR1JPVVBfU0NIRUQ9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2N1MTAwMC1uZW9fZGVmY29uZmlnPTg9Q09ORklHX0NHUk9VUFM9eVxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxMDAwLW5lb19kZWZjb25maWc6OTpDT05GSUdfTUVNQ0c9eVxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxMDAwLW5lb19kZWZjb25maWctMTAtQ09ORklHX0NHUk9VUF9TQ0hFRD15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxODMwLW5lb19kZWZjb25maWc9OD1DT05GSUdfQ0dST1VQUz15XG5hcmNoL21pcHMvY29uZmlncy9jdTE4MzAtbmVvX2RlZmNvbmZpZzo5OkNPTkZJR19NRU1DRz15XG5hcmNoL21pcHMvY29uZmlncy9jdTE4MzAtbmVvX2RlZmNvbmZpZy0xMC1DT05GSUdfQ0dST1VQX1NDSEVEPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9kYjF4eHhfZGVmY29uZmlnPTEwPUNPTkZJR19DR1JPVVBTPXlcbmFyY2gvbWlwcy9jb25maWdzL2RiMXh4eF9kZWZjb25maWc6MTE6Q09ORklHX01FTUNHPXlcbmFyY2gvbWlwcy9jb25maWdzL2RiMXh4eF9kZWZjb25maWctMTItQ09ORklHX0JMS19DR1JPVVA9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE1X2RlZmNvbmZpZz03PUNPTkZJR19JS0NPTkZJR19QUk9DPXlcbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE1X2RlZmNvbmZpZzo4OkNPTkZJR19NRU1DRz15XG5hcmNoL21pcHMvY29uZmlncy9leWVxNV9kZWZjb25maWctOS1DT05GSUdfQkxLX0NHUk9VUD15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZfZGVmY29uZmlnPTc9Q09ORklHX0lLQ09ORklHX1BST0M9eVxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZfZGVmY29uZmlnOjg6Q09ORklHX01FTUNHPXlcbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE2X2RlZmNvbmZpZy05LUNPTkZJR19CTEtfQ0dST1VQPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9leWVxNmxwbHVzX2RlZmNvbmZpZz03PUNPTkZJR19JS0NPTkZJR19QUk9DPXlcbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE2bHBsdXNfZGVmY29uZmlnOjg6Q09ORklHX01FTUNHPXlcbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE2bHBsdXNfZGVmY29uZmlnLTktQ09ORklHX0JMS19DR1JPVVA9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2dlbmVyaWNfZGVmY29uZmlnPTQ9Q09ORklHX0lLQ09ORklHX1BST0M9eVxuYXJjaC9taXBzL2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWc6NTpDT05GSUdfTUVNQ0c9eVxuYXJjaC9taXBzL2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWctNi1DT05GSUdfQkxLX0NHUk9VUD15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvbG9vbmdzb24ya19kZWZjb25maWc9MTQ9Q09ORklHX1RBU0tfSU9fQUNDT1VOVElORz15XG5hcmNoL21pcHMvY29uZmlncy9sb29uZ3NvbjJrX2RlZmNvbmZpZzoxNTpDT05GSUdfTUVNQ0c9eVxuYXJjaC9taXBzL2NvbmZpZ3MvbG9vbmdzb24ya19kZWZjb25maWctMTYtQ09ORklHX0JMS19DR1JPVVA9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2xvb25nc29uM19kZWZjb25maWc9MTY9Q09ORklHX1RBU0tfSU9fQUNDT1VOVElORz15XG5hcmNoL21pcHMvY29uZmlncy9sb29uZ3NvbjNfZGVmY29uZmlnOjE3OkNPTkZJR19NRU1DRz15XG5hcmNoL21pcHMvY29uZmlncy9sb29uZ3NvbjNfZGVmY29uZmlnLTE4LUNPTkZJR19CTEtfQ0dST1VQPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9vbWVnYTJwX2RlZmNvbmZpZz0xMD1DT05GSUdfQ0dST1VQUz15XG5hcmNoL21pcHMvY29uZmlncy9vbWVnYTJwX2RlZmNvbmZpZzoxMTpDT05GSUdfTUVNQ0c9eVxuYXJjaC9taXBzL2NvbmZpZ3Mvb21lZ2EycF9kZWZjb25maWctMTItQ09ORklHX0NHUk9VUF9TQ0hFRD15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3Mvdm9jb3JlMl9kZWZjb25maWc9MTA9Q09ORklHX0NHUk9VUFM9eVxuYXJjaC9taXBzL2NvbmZpZ3Mvdm9jb3JlMl9kZWZjb25maWc6MTE6Q09ORklHX01FTUNHPXlcbmFyY2gvbWlwcy9jb25maWdzL3ZvY29yZTJfZGVmY29uZmlnLTEyLUNPTkZJR19DR1JPVVBfU0NIRUQ9eVxuLS1cbmFyY2gvcGFyaXNjL2NvbmZpZ3MvZ2VuZXJpYy02NGJpdF9kZWZjb25maWc9MTU9Q09ORklHX0NHUk9VUFM9eVxuYXJjaC9wYXJpc2MvY29uZmlncy9nZW5lcmljLTY0Yml0X2RlZmNvbmZpZzoxNjpDT05GSUdfTUVNQ0c9eVxuYXJjaC9wYXJpc2MvY29uZmlncy9nZW5lcmljLTY0Yml0X2RlZmNvbmZpZy0xNy1DT05GSUdfQ0dST1VQX1BJRFM9eVxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnPTE4PUNPTkZJR19DR1JPVVBTPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnOjE5OkNPTkZJR19NRU1DRz15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZy0yMC1DT05GSUdfQ0dST1VQX1NDSEVEPXlcbi0tXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWc9MjI9Q09ORklHX05VTUFfQkFMQU5DSU5HPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZzoyMzpDT05GSUdfTUVNQ0c9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnLTI0LUNPTkZJR19CTEtfQ0dST1VQPXlcbi0tXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTg9Q09ORklHX0NHUk9VUFM9eVxuYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZzo5OkNPTkZJR19NRU1DRz15XG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnLTEwLUNPTkZJR19CTEtfQ0dST1VQPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9MjQ9Q09ORklHX05VTUFfQkFMQU5DSU5HPXlcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzoyNTpDT05GSUdfTUVNQ0c9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnLTI2LUNPTkZJR19CTEtfQ0dST1VQPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9MjI9Q09ORklHX05VTUFfQkFMQU5DSU5HPXlcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzoyMzpDT05GSUdfTUVNQ0c9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTI0LUNPTkZJR19CTEtfQ0dST1VQPXlcbi0tXG5hcmNoL3h0ZW5zYS9jb25maWdzL2F1ZGlvX2tjNzA1X2RlZmNvbmZpZz0xMj1DT05GSUdfQ0dST1VQX0NQVUFDQ1Q9eVxuYXJjaC94dGVuc2EvY29uZmlncy9hdWRpb19rYzcwNV9kZWZjb25maWc6MTM6Q09ORklHX01FTUNHPXlcbmFyY2gveHRlbnNhL2NvbmZpZ3MvYXVkaW9fa2M3MDVfZGVmY29uZmlnLTE0LUNPTkZJR19OQU1FU1BBQ0VTPXlcbi0tXG5hcmNoL3h0ZW5zYS9jb25maWdzL2dlbmVyaWNfa2M3MDVfZGVmY29uZmlnPTEyPUNPTkZJR19DR1JPVVBfQ1BVQUNDVD15XG5hcmNoL3h0ZW5zYS9jb25maWdzL2dlbmVyaWNfa2M3MDVfZGVmY29uZmlnOjEzOkNPTkZJR19NRU1DRz15XG5hcmNoL3h0ZW5zYS9jb25maWdzL2dlbmVyaWNfa2M3MDVfZGVmY29uZmlnLTE0LUNPTkZJR19OQU1FU1BBQ0VTPXlcbi0tXG5hcmNoL3h0ZW5zYS9jb25maWdzL25vbW11X2tjNzA1X2RlZmNvbmZpZz0xMj1DT05GSUdfQ0dST1VQX0NQVUFDQ1Q9eVxuYXJjaC94dGVuc2EvY29uZmlncy9ub21tdV9rYzcwNV9kZWZjb25maWc6MTM6Q09ORklHX01FTUNHPXlcbmFyY2gveHRlbnNhL2NvbmZpZ3Mvbm9tbXVfa2M3MDVfZGVmY29uZmlnLTE0LUNPTkZJR19OQU1FU1BBQ0VTPXlcbi0tXG5hcmNoL3h0ZW5zYS9jb25maWdzL3NtcF9seDIwMF9kZWZjb25maWc9MTI9Q09ORklHX0NHUk9VUF9DUFVBQ0NUPXlcbmFyY2gveHRlbnNhL2NvbmZpZ3Mvc21wX2x4MjAwX2RlZmNvbmZpZzoxMzpDT05GSUdfTUVNQ0c9eVxuYXJjaC94dGVuc2EvY29uZmlncy9zbXBfbHgyMDBfZGVmY29uZmlnLTE0LUNPTkZJR19OQU1FU1BBQ0VTPXlcbi0tXG5hcmNoL3h0ZW5zYS9jb25maWdzL3ZpcnRfZGVmY29uZmlnPTc9Q09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eVxuYXJjaC94dGVuc2EvY29uZmlncy92aXJ0X2RlZmNvbmZpZzo4OkNPTkZJR19NRU1DRz15XG5hcmNoL3h0ZW5zYS9jb25maWdzL3ZpcnRfZGVmY29uZmlnLTktQ09ORklHX0NHUk9VUF9GUkVFWkVSPXlcbi0tXG5hcmNoL3h0ZW5zYS9jb25maWdzL3hpcF9rYzcwNV9kZWZjb25maWc9Nz1DT05GSUdfQlNEX1BST0NFU1NfQUNDVD15XG5hcmNoL3h0ZW5zYS9jb25maWdzL3hpcF9rYzcwNV9kZWZjb25maWc6ODpDT05GSUdfTUVNQ0c9eVxuYXJjaC94dGVuc2EvY29uZmlncy94aXBfa2M3MDVfZGVmY29uZmlnLTktQ09ORklHX0NHUk9VUF9GUkVFWkVSPXlcbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MTUwOD1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBpb19jZ3JwX3N1YnN5cyA9IHtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMTUxNy1cdC5leGl0ID0gYmxrY2dfZXhpdCxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNTE4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTE5LVx0Lypcbi0tXG5kcml2ZXJzL2FjcGkvc2Nhbi5jPTIwND1zdGF0aWMgaW50IGFjcGlfc2Nhbl90cnlfdG9fb2ZmbGluZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSlcbi0tXG5kcml2ZXJzL2FjcGkvc2Nhbi5jLTIxMi1cdCAqIGJlY2F1c2UgaWYgdGhlIGRldmljZXMgaW4gcXVlc3Rpb24gYXJlIG1lbW9yeSBibG9ja3MgYW5kXG5kcml2ZXJzL2FjcGkvc2Nhbi5jOjIxMzpcdCAqIENPTkZJR19NRU1DRyBpcyBzZXQsIG9uZSBvZiB0aGUgYmxvY2tzIG1heSBob2xkIGRhdGEgc3RydWN0dXJlc1xuZHJpdmVycy9hY3BpL3NjYW4uYy0yMTQtXHQgKiB0aGF0IHRoZSBvdGhlciBibG9ja3MgZGVwZW5kIG9uLCBidXQgaXQgaXMgbm90IGtub3duIGluIGFkdmFuY2Ugd2hpY2hcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODQzPXN0YXRpYyBibGtfc3RhdHVzX3QgbG9vcF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODcxLVx0XHRjbWQtXHUwMDNlYmxrY2dfY3NzID0gYmlvX2Jsa2NnX2NzcyhycS1cdTAwM2ViaW8pO1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTg3MjojaWZkZWYgQ09ORklHX01FTUNHXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODczLVx0XHRpZiAoY21kLVx1MDAzZWJsa2NnX2Nzcykge1xuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuYz0xOT1JT1BUREVTQ19NQVRDSChfcmVmY291bnQsIF9fcGFnZV9yZWZjb3VudCk7XG5kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmM6MjA6I2lmZGVmIENPTkZJR19NRU1DR1xuZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jLTIxLUlPUFRERVNDX01BVENIKG1lbWNnX2RhdGEsIG1lbWNnX2RhdGEpO1xuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuaD0xOT1zdHJ1Y3QgaW9wdGRlc2Mge1xuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuaC0zMS1cdGF0b21pY190IF9fcGFnZV9yZWZjb3VudDtcbmRyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuaDozMjojaWZkZWYgQ09ORklHX01FTUNHXG5kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmgtMzMtXHR1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGE7XG4tLVxuZnMvcHJvYy9wYWdlLmM9MjcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMga3BhZ2VmbGFnc19wcm9jX29wcyA9IHtcbi0tXG5mcy9wcm9jL3BhZ2UuYy0yNzYtXG5mcy9wcm9jL3BhZ2UuYzoyNzc6I2lmZGVmIENPTkZJR19NRU1DR1xuZnMvcHJvYy9wYWdlLmMtMjc4LXN0YXRpYyBzc2l6ZV90IGtwYWdlY2dyb3VwX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4tLVxuZnMvcHJvYy9wYWdlLmM9MjgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMga3BhZ2VjZ3JvdXBfcHJvY19vcHMgPSB7XG4tLVxuZnMvcHJvYy9wYWdlLmMtMjg3LX07XG5mcy9wcm9jL3BhZ2UuYzoyODg6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuZnMvcHJvYy9wYWdlLmMtMjg5LVxuZnMvcHJvYy9wYWdlLmM9MjkwPXN0YXRpYyBpbnQgX19pbml0IHByb2NfcGFnZV9pbml0KHZvaWQpXG4tLVxuZnMvcHJvYy9wYWdlLmMtMjkzLVx0cHJvY19jcmVhdGUoXCYjMzQ7a3BhZ2VmbGFnc1wmIzM0OywgU19JUlVTUiwgTlVMTCwgXHUwMDI2a3BhZ2VmbGFnc19wcm9jX29wcyk7XG5mcy9wcm9jL3BhZ2UuYzoyOTQ6I2lmZGVmIENPTkZJR19NRU1DR1xuZnMvcHJvYy9wYWdlLmMtMjk1LVx0cHJvY19jcmVhdGUoXCYjMzQ7a3BhZ2VjZ3JvdXBcJiMzNDssIFNfSVJVU1IsIE5VTEwsIFx1MDAyNmtwYWdlY2dyb3VwX3Byb2Nfb3BzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTMwMT1zdHJ1Y3QgYnBmX21hcCB7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0zMjAtXHRzdHJ1Y3QgYnRmICpidGY7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjMyMTojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMyMi1cdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTI3ODc9c3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjI3ODg6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9icGYuaC0yNzg5LXZvaWQgYnBmX21hcF9tZW1jZ19lbnRlcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgbWVtX2Nncm91cCAqKm9sZF9tZW1jZyxcbi0tXG5pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaD0yNT1TVUJTWVMoaW8pXG4tLVxuaW5jbHVkZS9saW51eC9jZ3JvdXBfc3Vic3lzLmgtMjctXG5pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaDoyODojaWYgSVNfRU5BQkxFRChDT05GSUdfTUVNQ0cpXG5pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaC0yOS1TVUJTWVMobWVtb3J5KVxuLS1cbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaD01MT1zdHJ1Y3QgbGlzdF9scnUge1xuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTUyLVx0c3RydWN0IGxpc3RfbHJ1X25vZGVcdCpub2RlO1xuaW5jbHVkZS9saW51eC9saXN0X2xydS5oOjUzOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaC01NC1cdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4tLVxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oPTgyPWludCBtZW1jZ19saXN0X2xydV9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxuLS1cbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaC04NC1cbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaDo4NTojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtODYtLyoqXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjA9c3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9jb29raWUge1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY0LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NjU6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjYtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9ODk9c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUge1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTk3LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6OTg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTktXHQvKlxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyOC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEyOTojaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMzAtXHQvKiBzbGFiIHN0YXRzIGZvciBubWkgY29udGV4dCAqL1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTIwMj1zdHJ1Y3QgbWVtX2Nncm91cCB7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjU3LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MjU4OiNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI1OS1cdC8qIE1FTUNHX0tNRU0gZm9yIG5taSBjb250ZXh0ICovXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjg1LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6Mjg2OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI4Ny1cdC8qIExlZ2FjeSBjb25zdW1lci1vcmllbnRlZCBjb3VudGVycyAqL1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTMyMC1cdHNwaW5sb2NrX3QgZXZlbnRfbGlzdF9sb2NrO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MzIxOiNlbmRpZiAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTMyMi1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0zMzU9ZW51bSBwYWdlX21lbWNnX2RhdGFfZmxhZ3Mge1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTM0Ni1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjM0NzojZWxzZSAvKiBDT05GSUdfTUVNQ0cgKi9cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTM0OC1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0zNTEtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDozNTI6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzUzLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MzU0PWVudW0gb2JqZXh0X2ZsYWdzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0zNjctXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDozNjg6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzY5LS8qXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTA0Mz1leHRlcm4gaW50IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEwNDQ6I2Vsc2UgLyogQ09ORklHX01FTUNHICovXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMDQ1LVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE0NjE9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE0NjI6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTQ2My1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNDY4PXN0cnVjdCBzbGFib2JqX2V4dCB7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNDY5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0NzAtXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTQ5Nj1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmxydXZlY19saXZlX2xvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0OTcte1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTQ5ODojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNDk5LVx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE2MzE9c3RydWN0IHNvY2s7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNjMyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2MzMtZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIG1lbWNnX3NvY2tldHNfZW5hYmxlZF9rZXk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTcxOT1zdGF0aWMgaW5saW5lIGludCBzaHJpbmtlcl9pZChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MjQtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNzI1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MjYtYm9vbCBtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQodm9pZCk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTg4Nz1zdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfaXNfZHlpbmcoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4OTAtfVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTg5MTojZW5kaWYgLyogQ09ORklHX01FTUNHICovXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODkyLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTg5MzojaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19aU1dBUClcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4OTQtYm9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5MTE9c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MjAtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTIxOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MjItdW5zaWduZWQgbG9uZyBtZW1jZzFfc29mdF9saW1pdF9yZWNsYWltKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xOTM5PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2V4aXRfdXNlcl9mYXVsdCh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NDQtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTQ1OiNlbHNlIC8qIENPTkZJR19NRU1DR19WMSAqL1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk0Ni1zdGF0aWMgaW5saW5lXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTk2OD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTcxLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk3MjojZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTczLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk3NDojaWYgZGVmaW5lZChDT05GSUdfTUVNQ0dfVjEpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TV0FQKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk3NS1cbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTQ3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB1cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTEtXHRfX3VwZGF0ZV9scnVfc2l6ZShscnV2ZWMsIGxydSwgemlkLCBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjUyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTMtXHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShscnV2ZWMsIGxydSwgemlkLCBucl9wYWdlcyk7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTgwPXN0cnVjdCBwYWdlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTg2LVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE4NzojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTg4LVx0dW5zaWduZWQgbG9uZyBtZW1jZ19kYXRhO1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0zMTM9dHlwZWRlZiBzd3BfZW50cnlfdCBzb2Z0bGVhZl90O1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTMxNC1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDozMTU6I2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSB8fCBkZWZpbmVkKENPTkZJR19TTEFCX09CSl9FWFQpXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMzE2LS8qIFdlIGhhdmUgc29tZSBleHRyYSByb29tIGFmdGVyIHRoZSByZWZjb3VudCBpbiB0YWlsIHBhZ2VzLiAqL1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD00MDI9c3RydWN0IGZvbGlvIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNDMyLVx0XHRcdGF0b21pY190IF9yZWZjb3VudDtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo0MzM6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTQzNC1cdFx0XHR1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGE7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTUxOD1GT0xJT19NQVRDSChfcmVmY291bnQsIF9yZWZjb3VudCk7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6NTE5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC01MjAtRk9MSU9fTUFUQ0gobWVtY2dfZGF0YSwgbWVtY2dfZGF0YSk7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTU3Mz1zdHJ1Y3QgcHRkZXNjIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNjA0LVx0YXRvbWljX3QgX19wYWdlX3JlZmNvdW50O1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjYwNTojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNjA2LVx0dW5zaWduZWQgbG9uZyBwdF9tZW1jZ19kYXRhO1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD02MTk9VEFCTEVfTUFUQ0goX3JlZmNvdW50LCBfX3BhZ2VfcmVmY291bnQpO1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjYyMDojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNjIxLVRBQkxFX01BVENIKG1lbWNnX2RhdGEsIHB0X21lbWNnX2RhdGEpO1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xMTYwPXN0cnVjdCBtbV9zdHJ1Y3Qge1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMzEyLSNlbmRpZlxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjEzMTM6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTEzMTQtXHRcdC8qXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTEzOTctXHRcdFx0dW5zaWduZWQgbG9uZyBiaXRtYXA7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTM5ODojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTM5OS1cdFx0XHQvKiBwb2ludHMgdG8gdGhlIG1lbWNnIG9mIFwmIzM0O293bmVyXCYjMzQ7IGFib3ZlICovXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTE0ODc9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5faW5pdF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQ5MC1cdG1tLVx1MDAzZWxydV9nZW4uYml0bWFwID0gMDtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNDkxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDkyLVx0bW0tXHUwMDNlbHJ1X2dlbi5tZW1jZyA9IE5VTEw7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD03NTg9c3RydWN0IGxydXZlYyB7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03ODItI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc4MzojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc4NC1cdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNjUyPXN0YXRpYyBpbmxpbmUgc3RydWN0IHBnbGlzdF9kYXRhICpscnV2ZWNfcGdkYXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNjUzLXtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTY1NDojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE2NTUtXHRyZXR1cm4gbHJ1dmVjLVx1MDAzZXBnZGF0O1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmg9OTA9c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfY291bnRlcl9yZXNldF93YXRlcm1hcmsoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcilcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oLTEwMS1cbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmg6MTAyOiNpZiBJU19FTkFCTEVEKENPTkZJR19NRU1DRykgfHwgSVNfRU5BQkxFRChDT05GSUdfQ0dST1VQX0RNRU0pXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oLTEwMy12b2lkIHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpyb290LFxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MzU9c3RydWN0IHRhc2tfc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAzMC0jZW5kaWZcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxMDMxOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMDMyLVx0dW5zaWduZWRcdFx0XHRpbl91c2VyX2ZhdWx0OjE7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE1NTgtXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTU1OTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTU2MC1cdHN0cnVjdCBtZW1fY2dyb3VwXHRcdCptZW1jZ19pbl9vb207XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE1NjItXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTU2MzojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTU2NC1cdC8qIE51bWJlciBvZiBwYWdlcyB0byByZWNsYWltIG9uIHJldHVybmluZyB0byB1c2VybGFuZDogKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9MTYxPWV4dGVybiB2b2lkIGV4ZWNfbW1fcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc3RydWN0IG1tX3N0cnVjdCAqKTtcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0xNjItXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6MTYzOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0xNjQtZXh0ZXJuIHZvaWQgbW1fdXBkYXRlX25leHRfb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0xNjY9c3RhdGljIGlubGluZSB2b2lkIG1tX3VwZGF0ZV9uZXh0X293bmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0xNjgtfVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjE2OTojZW5kaWYgLyogQ09ORklHX01FTUNHICovXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMTcwLVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD00Njk9c3RhdGljIGlubGluZSB2b2lkIG1lbWFsbG9jX3Bpbl9yZXN0b3JlKHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtNDczLVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjQ3NDojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtNDc1LURFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbWVtX2Nncm91cCAqLCBpbnRfYWN0aXZlX21lbWNnKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmg9ODI9c3RydWN0IHNocmlua2VyIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmgtMTA2LVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuaW5jbHVkZS9saW51eC9zaHJpbmtlci5oOjEwNzojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmgtMTA4LVx0LyogSUQgaW4gc2hyaW5rZXJfaWRyICovXG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmg9MjY9ZW51bSBfc2xhYl9mbGFnX2JpdHMge1xuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTQ1LSNlbmRpZlxuaW5jbHVkZS9saW51eC9zbGFiLmg6NDY6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9saW51eC9zbGFiLmgtNDctXHRfU0xBQl9BQ0NPVU5ULFxuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTIwNC0gKi9cbmluY2x1ZGUvbGludXgvc2xhYi5oOjIwNTojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMDYtIyBkZWZpbmUgU0xBQl9BQ0NPVU5UXHRcdF9fU0xBQl9GTEFHX0JJVChfU0xBQl9BQ0NPVU5UKVxuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oPTcwOD1lbnVtIGttYWxsb2NfY2FjaGVfdHlwZSB7XG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmgtNzEyLSNlbmRpZlxuaW5jbHVkZS9saW51eC9zbGFiLmg6NzEzOiNpZm5kZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC03MTQtXHRLTUFMTE9DX0NHUk9VUCA9IEtNQUxMT0NfTk9STUFMLFxuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTcyOC0jZW5kaWZcbmluY2x1ZGUvbGludXgvc2xhYi5oOjcyOTojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC03MzAtXHRLTUFMTE9DX0NHUk9VUCxcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaD03NDA9ZXh0ZXJuIGttZW1fYnVja2V0cyBrbWFsbG9jX2NhY2hlc1tOUl9LTUFMTE9DX1RZUEVTXTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC03NDctXHQoSVNfRU5BQkxFRChDT05GSUdfWk9ORV9ETUEpICAgPyBfX0dGUF9ETUEgOiAwKSB8XHRcXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6NzQ4Olx0KElTX0VOQUJMRUQoQ09ORklHX01FTUNHKSA/IF9fR0ZQX0FDQ09VTlQgOiAwKSlcbmluY2x1ZGUvbGludXgvc2xhYi5oLTc0OS1cbmluY2x1ZGUvbGludXgvc2xhYi5oPTc1MD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGVudW0ga21hbGxvY19jYWNoZV90eXBlIGttYWxsb2NfdHlwZShnZnBfdCBmbGFncywga21hbGxvY190b2tlbl90IHRva2VuKVxuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTc3NS1cdFx0cmV0dXJuIEtNQUxMT0NfRE1BO1xuaW5jbHVkZS9saW51eC9zbGFiLmg6Nzc2Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19NRU1DRykgfHwgKGZsYWdzIFx1MDAyNiBfX0dGUF9SRUNMQUlNQUJMRSkpXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC03NzctXHRcdHJldHVybiBLTUFMTE9DX1JFQ0xBSU07XG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmg9ODU1PXZvaWQgKmttZW1fY2FjaGVfYWxsb2NfbHJ1X25vcHJvZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmgtODc4LSAqXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo4Nzk6ICogMS4gRm9yICFDT05GSUdfTUVNQ0cgb3IgY2dyb3VwX2Rpc2FibGU9bWVtb3J5IHN5c3RlbXMuXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC04ODAtICogMi4gQWxyZWFkeSBjaGFyZ2VkIHNsYWIgb2JqZWN0cy5cbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD01MzI9c3RhdGljIGlubGluZSBpbnQgYWRkX3N3YXBfZXh0ZW50KHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTM4LSNlbmRpZiAvKiBDT05GSUdfU1dBUCAqL1xuaW5jbHVkZS9saW51eC9zd2FwLmg6NTM5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvc3dhcC5oLTU0MC1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oPTU1NT1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSlcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01NjAtXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo1NjE6I2lmIGRlZmluZWQoQ09ORklHX1NXQVApIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JMS19DR1JPVVApXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01NjItdm9pZCBfX2ZvbGlvX3Rocm90dGxlX3N3YXByYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcCk7XG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmg9NTcwPXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb190aHJvdHRsZV9zd2FwcmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTc0LVxuaW5jbHVkZS9saW51eC9zd2FwLmg6NTc1OiNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1NXQVApXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01NzYtaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg9MzA9c3RydWN0IG1lbV9jZ3JvdXA7XG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaC0zMS1cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oOjMyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTMzLXZvaWQgdm1wcmVzc3VyZShnZnBfdCBnZnAsIGludCBvcmRlciwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIHRyZWUsXG4tLVxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg9NTA9c3RhdGljIGlubGluZSB2b2lkIHZtcHJlc3N1cmVfcHJpbyhnZnBfdCBnZnAsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTUxLVx0XHRcdFx0ICAgaW50IHByaW8pIHt9XG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaDo1MjojZW5kaWYgLyogQ09ORklHX01FTUNHICovXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaC01My0jZW5kaWYgLyogX19MSU5VWF9WTVBSRVNTVVJFX0ggKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oPTUwNz1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnZtX2V2ZW50X25hbWUoZW51bSB2bV9ldmVudF9pdGVtIGl0ZW0pXG4tLVxuaW5jbHVkZS9saW51eC92bXN0YXQuaC01MTYtXG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oOjUxNzojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oLTUxOC1cbi0tXG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oPTU0NT1zdGF0aWMgaW5saW5lIHZvaWQgbW9kX2xydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmluY2x1ZGUvbGludXgvdm1zdGF0LmgtNTUwLVxuaW5jbHVkZS9saW51eC92bXN0YXQuaDo1NTE6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuaW5jbHVkZS9saW51eC92bXN0YXQuaC01NTItXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oPTM2NT1zdHJ1Y3Qgc29jayB7XG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTQ2MC1cdHN0cnVjdCBzb2NrZXRcdFx0KnNrX3NvY2tldDtcbmluY2x1ZGUvbmV0L3NvY2suaDo0NjE6I2lmZGVmIENPTkZJR19NRU1DR1xuaW5jbHVkZS9uZXQvc29jay5oLTQ2Mi1cdHN0cnVjdCBtZW1fY2dyb3VwXHQqc2tfbWVtY2c7XG4tLVxuaW5jbHVkZS9uZXQvc29jay5oPTI2ODY9c3RhdGljIGlubGluZSBnZnBfdCBnZnBfbWVtY2dfY2hhcmdlKHZvaWQpXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTI2OTAtXG5pbmNsdWRlL25ldC9zb2NrLmg6MjY5MTojaWZkZWYgQ09ORklHX01FTUNHXG5pbmNsdWRlL25ldC9zb2NrLmgtMjY5Mi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0yNzAyPXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3NrX3VuZGVyX21lbW9yeV9wcmVzc3VyZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTI3MDUtXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgzOTMKCQkJCQkJCW91dHB1dDogMTMzCgkJCQkJCQl0aG91Z2h0czogMTI4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYENPTkZJR19NRU1DR2AgaXMgYSBtdXN0LWhhdmUgZm9yIGVuYWJsaW5nIHRoZSBuZXcgYmVoYXZpb3IuICBBbmQsIG9mIGNvdXJzZSwgc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBCUEYsIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGNlbnRyYWwuIFNpbmNlIGBDT05GSUdfTUVNQ0dgIGRlcGVuZHMgb24gYENPTkZJR19DR1JPVVBTYCwgSSBzaG91bGQgaW5jbHVkZSB0aGF0IG9uZSBhcyB3ZWxsIHRvIGJlIHNhZmUuIFNvLCBJJiMzOTtsbCBzdGFydCB3aXRoIGBCUEZfU1lTQ0FMTGAsIGBNRU1DR2AsIGFuZCBgQ0dST1VQU2AgYXMgbXkgaW5pdGlhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBiZWluZyBhZGRlZDogYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGlzIGlzLCBpbmRlZWQsIHRoZSAqb25seSogbm9uLXN0YXRpYyBmdW5jdGlvbiBpbnZvbHZlZCBoZXJlLiAgSXQgc2VlbXMgdG8gYmUgY2FsbGVkIGZyb20gYGFyZW5hX3ZtX2ZhdWx0YCwgYnV0IGxldCYjMzk7cyBkb3VibGUgY2hlY2suLi4gWWVzLCBgYXJlbmFfdm1fZmF1bHRgIGNhbGxzIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYC4KCklmIEkgcHV0IGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBpbiBgRm9jdXNTeW1ib2xzYCwgc3l6a2FsbGVyIHdpbGwgcHJpb3JpdGl6ZSBmdXp6aW5nIHBhdGhzIHRoYXQgcmVhY2ggaXQgLSBnb29kLiBTaW5jZSBgYXJlbmFfdm1fZmF1bHRgIGlzIHJlYWNoYWJsZSB2aWEgQlBGIGFyZW5hIG1hcCBtbWFwIGFuZCBmYXVsdGluZywgaXQgYWxzbyBpbXBsaWVzIHRoYXQgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzIHJlYWNoYWJsZSB0b28sIHdoaWNoIG1ha2VzIGl0IGdvb2QgdG8gdGFyZ2V0IGluIGBGb2N1c1N5bWJvbHNgLgoKTG9va2luZyBhdCB0aGUgY29kZSwgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGp1c3QgY2FsbHMgYGFsbG9jX3BhZ2VzX25vZGVgIHdpdGggYG1pZ2h0X3NsZWVwKClgLiBUaGUgbWFpbiBjaGFuZ2UgaXMgaW4gYGFyZW5hX3ZtX2ZhdWx0YDogdGhlIG5ldyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIG1lbWNnIE9PTSBraWxsZXIgY2FuIHJ1bi4gVGhhdCBpcyB0aGUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSB3b3J0aCBmdXp6aW5nLCBzbyBJJiMzOTtsbCBzZXQgYEZvY3VzU3ltYm9sc2AgdG8gYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIC4gYEVuYWJsZUNvbmZpZ3NgOiBgQlBGX1NZU0NBTExgLCBgTUVNQ0dgLCBhbmQgYENHUk9VUFNgLgoKV2hpbGUgSSYjMzk7bSBoZXJlLCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIGlmIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBpcyBleHBvcnRlZC4gSXQmIzM5O3Mgbm90LCBidXQgaXQmIzM5O3MgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBhbmQgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvYnBmLmhgIHdoaWNoIG1lYW5zIHN5emthbGxlciBjYW4gc3RpbGwgdXNlIGl0IGZvciBjb3ZlcmFnZSBndWlkYW5jZSwgZXZlbiBpZiBpdCBjYW4mIzM5O3QgZGlyZWN0bHkgY2FsbCBpdC4KCk9rYXksIGxldCYjMzk7cyB3cml0ZSBhIGNvbmNpc2Ugc3VtbWFyeSBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbC4gIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGFyZW5hIG1hcCBwYWdlIGZhdWx0IGhhbmRsZXIgKGBhcmVuYV92bV9mYXVsdGApIHRvIHVzZSBhIHNsZWVwYWJsZSBwYWdlIGFsbG9jYXRvciAoYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgKS4gVGhpcyBjaGFuZ2UgYWxsb3dzIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biB3aGVuIG1lbW9yeSBsaW1pdHMgYXJlIGhpdCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtbWFwaW5nIGFuZCBmYXVsdGluZyBCUEYgYXJlbmEgbWFwcy4KCkkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAgYW5kIHRoZSBgUmVhc29uaW5nYCB3aWxsIGJlOiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZvciBCUEYgYXJlbmEgbWFwcyB0byB1c2UgYSBzbGVlcGFibGUgcGFnZSBhbGxvY2F0b3IsIGFsbG93aW5nIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biB3aGVuIG1lbW9yeSBsaW1pdHMgYXJlIGhpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYWZmZWN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgaW50ZXJhY3Rpb25zLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtbWFwaW5nIGFuZCBmYXVsdGluZyBCUEYgYXJlbmEgbWFwcy4mIzM0OwoKTXkgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDticGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlJiMzNDtdYCBhbmQgYEVuYWJsZUNvbmZpZ3NgOiBgWyYjMzQ7QlBGX1NZU0NBTEwmIzM0OywgJiMzNDtNRU1DRyYjMzQ7LCAmIzM0O0NHUk9VUFMmIzM0O11gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7Q0dST1VQUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgQlBGIGFyZW5hIG1hcHMgdG8gdXNlIGEgc2xlZXBhYmxlIHBhZ2UgYWxsb2NhdG9yLCBhbGxvd2luZyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBydW4gd2hlbiBtZW1vcnkgbGltaXRzIGFyZSBoaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFmZmVjdGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGludGVyYWN0aW9ucywgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbW1hcGluZyBhbmQgZmF1bHRpbmcgQlBGIGFyZW5hIG1hcHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0NHUk9VUFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgZm9yIEJQRiBhcmVuYSBtYXBzIHRvIHVzZSBhIHNsZWVwYWJsZSBwYWdlIGFsbG9jYXRvciwgYWxsb3dpbmcgdGhlIG1lbWNnIE9PTSBraWxsZXIgdG8gcnVuIHdoZW4gbWVtb3J5IGxpbWl0cyBhcmUgaGl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhZmZlY3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBpbnRlcmFjdGlvbnMsIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG1tYXBpbmcgYW5kIGZhdWx0aW5nIEJQRiBhcmVuYSBtYXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgZm9yIEJQRiBhcmVuYXMgKGBhcmVuYV92bV9mYXVsdGApIHRvIHByZWFsbG9jYXRlIHBhZ2VzIG91dHNpZGUgb2YgYSBzcGlubG9jayB1c2luZyBhIHNsZWVwYWJsZSBhbGxvY2F0b3IsIGFsbG93aW5nIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biBpZiBuZWVkZWQuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIGFsbG9jYXRpb24gZnVuY3Rpb24gYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGV4cGxpY2l0bHkgdXNlcyBgX19HRlBfWkVST2AgKHZpYSBgQlBGX1BBR0VfR0ZQYCkgdG8gZW5zdXJlIHRoZSBhbGxvY2F0ZWQgcGFnZXMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQsIGp1c3QgbGlrZSB0aGUgcHJldmlvdXMgbm9uLWJsb2NraW5nIGFsbG9jYXRpb24gcGF0aC4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZC4gVGhlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gY29udGV4dCBhbmQgT09NIGhhbmRsaW5nLCB3aGljaCBkbyBub3QgaW50cm9kdWNlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ODRlYjQ4ZGE5NmQ3YzRlM2ZmMTNmNmRjMGExYmZlNDA1YmZlMjliCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMTA6MjM6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCBiM2NkMjhkOWUzYjU1Li5jODE3Yzk5ZDI5MDY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTI3ODQsNiAmIzQzOzI3ODQsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2dldF9jdXJyX29yX25leHQodTMyICppZCk7CiAKIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsCiAJCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpOwomIzQzO3N0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApOwogI2lmZGVmIENPTkZJR19NRU1DRwogdm9pZCBicGZfbWFwX21lbWNnX2VudGVyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBtZW1fY2dyb3VwICoqb2xkX21lbWNnLAogCQkJIHN0cnVjdCBtZW1fY2dyb3VwICoqbmV3X21lbWNnKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuYwppbmRleCA3YjY4NDcyMDBiNDMxLi5mYTQ2MmEwZmYxYWQ2IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcmVuYS5jCkBAIC00ODEsNyAmIzQzOzQ4MSw4IEBAIHN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCXN0cnVjdCBicGZfbWFwICptYXAgPSB2bWYtJmd0O3ZtYS0mZ3Q7dm1fZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbmV3X21lbWNnLCAqb2xkX21lbWNnOwotCXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZSwgKm5ld19wYWdlID0gTlVMTDsKJiM0MzsJdm1fZmF1bHRfdCBmYXVsdF9yZXQ7CiAJbG9uZyBrYmFzZSwga2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwpAQCAtNDg5LDU5ICYjNDM7NDkwLDEwNiBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlrYmFzZSA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7CiAJa2FkZHIgPSBrYmFzZSAmIzQzOyAodTMyKSh2bWYtJmd0O2FkZHJlc3MpOwogCi0JaWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDthcmVuYS0mZ3Q7c3BpbmxvY2ssIGZsYWdzKSkKJiM0MzsJcGFnZSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWthZGRyKTsKJiM0MzsJaWYgKCFwYWdlICZhbXA7JmFtcDsgIShhcmVuYS0mZ3Q7bWFwLm1hcF9mbGFncyAmYW1wOyBCUEZfRl9TRUdWX09OX0ZBVUxUKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFByZWFsbG9jYXRlIG91dHNpZGUgdGhlIGxvY2sgd2l0aCBhIHNsZWVwYWJsZSBhbGxvY2F0b3Igc28gaXQKJiM0MzsJCSAqIGNhbiByZWNsYWltIGFuZCBydW4gdGhlIG1lbWNnIE9PTSBraWxsZXIsIHdoaWNoIHRoZQomIzQzOwkJICogbm9uLWJsb2NraW5nIGFsbG9jYXRvciB1bmRlciBhcmVuYS0mZ3Q7c3BpbmxvY2sgY2Fubm90LiBBIE5VTEwKJiM0MzsJCSAqIHJldHVybiBpcyBub24tcmVjb3ZlcmFibGUsIHNvIGZhaWwgd2l0aCBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQkgKiBWTV9GQVVMVF9PT00gd291bGQgYmUgcmV0cmllZCBieSB0aGUgZmF1bHQgcGF0aCBhbmQgY2FuCiYjNDM7CQkgKiBsaXZlbG9jayB3aGVuIHRoZSBjaGFyZ2VkIG1lbWNnIGlzIG5vdCB0aGUgZmF1bHRpbmcgdGFzayYjMzk7cy4KJiM0MzsJCSAqLwomIzQzOwkJYnBmX21hcF9tZW1jZ19lbnRlcigmYW1wO2FyZW5hLSZndDttYXAsICZhbXA7b2xkX21lbWNnLCAmYW1wO25ld19tZW1jZyk7CiYjNDM7CQluZXdfcGFnZSA9IGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUobWFwKTsKJiM0MzsJCWJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7CiYjNDM7CQlpZiAoIW5ld19wYWdlKQomIzQzOwkJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDthcmVuYS0mZ3Q7c3BpbmxvY2ssIGZsYWdzKSkgewogCQkvKgogCQkgKiBBIGZhaWxlZCBsb2NrIG1lYW5zIGEgcG9zc2libGUgZGVhZGxvY2sgd2FzIGRldGVjdGVkLiBEb24mIzM5O3QKIAkJICogcmV0dXJuIFZNX0ZBVUxUX1JFVFJZOiB0aGlzIGhhbmRsZXIgbmV2ZXIgdG9vayBtbWFwX2xvY2ssIGJ1dAogCQkgKiB0aGUgZmF1bHQgcGF0aCB3b3VsZCByZS10YWtlIGl0IG9uIHJldHJ5IGFuZCBkZWFkbG9jay4gRmFpbC4KIAkJICovCiYjNDM7CQlpZiAobmV3X3BhZ2UpCiYjNDM7CQkJZnJlZV9wYWdlc19ub2xvY2sobmV3X3BhZ2UsIDApOwogCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwomIzQzOwl9CiAKIAlwYWdlID0gdm1hbGxvY190b19wYWdlKCh2b2lkICopa2FkZHIpOwogCWlmIChwYWdlKSB7Ci0JCWlmIChwYWdlID09IGFyZW5hLSZndDtzY3JhdGNoX3BhZ2UpCi0JCQkvKiBCUEYgdHJpZ2dlcmVkIHNjcmF0Y2ggaGVyZTsgZG9uJiMzOTt0IGxhenktYWxsb2Mgb3ZlciBpdCAqLwotCQkJZ290byBvdXRfc2lnc2VndjsKJiM0MzsJCWlmIChwYWdlID09IGFyZW5hLSZndDtzY3JhdGNoX3BhZ2UpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgc2NyYXRjaCBwYWdlIG1hcmtzIGEgaG9sZS4gU2VnZmF1bHQgb25seSBpZiB0aGUgdXNlcgomIzQzOwkJCSAqIGFza2VkIGZvciBpdDsgb3RoZXJ3aXNlIHdlIGNvdWxkIGxhenktYWxsb2NhdGUgYnV0CiYjNDM7CQkJICogY2hvb3NlIG5vdCB0byBvdmVyIGEgaG9sZSwgc28gcmVwb3J0IGEgYnVzIGVycm9yLgomIzQzOwkJCSAqLwomIzQzOwkJCWZhdWx0X3JldCA9IChhcmVuYS0mZ3Q7bWFwLm1hcF9mbGFncyAmYW1wOyBCUEZfRl9TRUdWX09OX0ZBVUxUKSA/CiYjNDM7CQkJCSAgICBWTV9GQVVMVF9TSUdTRUdWIDogVk1fRkFVTFRfU0lHQlVTOwomIzQzOwkJCWdvdG8gb3V0X2Vycl9sb2NrZWQ7CiYjNDM7CQl9CiAJCS8qIGFscmVhZHkgaGF2ZSBhIHBhZ2Ugdm1hcC1lZCAqLwogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJaWYgKGFyZW5hLSZndDttYXAubWFwX2ZsYWdzICZhbXA7IEJQRl9GX1NFR1ZfT05fRkFVTFQpIHsKJiM0MzsJCS8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovCiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdTRUdWOwomIzQzOwkJZ290byBvdXRfZXJyX2xvY2tlZDsKJiM0MzsJfQomIzQzOwogCWJwZl9tYXBfbWVtY2dfZW50ZXIoJmFtcDthcmVuYS0mZ3Q7bWFwLCAmYW1wO29sZF9tZW1jZywgJmFtcDtuZXdfbWVtY2cpOwogCi0JaWYgKGFyZW5hLSZndDttYXAubWFwX2ZsYWdzICZhbXA7IEJQRl9GX1NFR1ZfT05fRkFVTFQpCi0JCS8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovCi0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CWlmICghbmV3X3BhZ2UpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBWZXJ5IHJhcmUgcmFjZTogdGhlIGJwZiBwcm9ncmFtIGhhZCBhbGxvY2F0ZWQgYSBwYWdlIGhlcmUsIHNvCiYjNDM7CQkgKiB0aGUgbG9ja2xlc3MgcHJvYmUgc2F3IGl0IGFuZCB3ZSBza2lwcGVkIHByZWFsbG9jYXRpb24sIGJ1dCBpdAomIzQzOwkJICogZnJlZWQgdGhlIHBhZ2UgYmVmb3JlIHdlIHRvb2sgdGhlIGxvY2suIE5vdyB3ZSBkbyBuZWVkIG9uZTsKJiM0MzsJCSAqIHNsZWVwaW5nIGlzIG5vdCBhbGxvd2VkIGhlcmUsIHNvIGZhbGwgYmFjayB0byB0aGUgbm9uLWJsb2NraW5nCiYjNDM7CQkgKiBhbGxvY2F0b3IgYW5kIGdpdmUgdXAgaWYgaXQgZmFpbHMuCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBtYXAtJmd0O251bWFfbm9kZSwgMSwgJmFtcDtuZXdfcGFnZSk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHQlVTOwomIzQzOwkJCWdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7CiYjNDM7CQl9CiYjNDM7CX0KIAogCXJldCA9IHJhbmdlX3RyZWVfY2xlYXIoJmFtcDthcmVuYS0mZ3Q7cnQsIHZtZi0mZ3Q7cGdvZmYsIDEpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7Ci0KLQlzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gJmFtcDtwYWdlLCAuaSA9IDAgfTsKLQkvKiBBY2NvdW50IGludG8gbWVtY2cgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGJwZl9hcmVuYSAqLwotCXJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBOVU1BX05PX05PREUsIDEsICZhbXA7cGFnZSk7CiAJaWYgKHJldCkgewotCQlyYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgdm1mLSZndDtwZ29mZiwgMSk7Ci0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQlnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnOwogCX0KJiM0MzsJc3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9ICZhbXA7bmV3X3BhZ2UsIC5pID0gMCB9OwogCiAJcmV0ID0gYXBwbHlfdG9fcGFnZV9yYW5nZSgmYW1wO2luaXRfbW0sIGthZGRyLCBQQUdFX1NJWkUsIGFwcGx5X3JhbmdlX3NldF9jYiwgJmFtcDtkYXRhKTsKIAlpZiAocmV0KSB7CiAJCXJhbmdlX3RyZWVfc2V0KCZhbXA7YXJlbmEtJmd0O3J0LCB2bWYtJmd0O3Bnb2ZmLCAxKTsKLQkJZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7Ci0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQlnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnOwogCX0KIAlmbHVzaF92bWFwX2NhY2hlKGthZGRyLCBQQUdFX1NJWkUpOwogCWJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7CiYjNDM7CS8qIG5ld19wYWdlIHdhcyBjb25zdW1lZCAqLwomIzQzOwlwYWdlID0gbmV3X3BhZ2U7CiYjNDM7CW5ld19wYWdlID0gTlVMTDsKIG91dDoKIAlwYWdlX3JlZl9hZGQocGFnZSwgMSk7CiAJcmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7YXJlbmEtJmd0O3NwaW5sb2NrLCBmbGFncyk7CiYjNDM7CWlmIChuZXdfcGFnZSkKJiM0MzsJCWZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTsKIAl2bWYtJmd0O3BhZ2UgPSBwYWdlOwogCXJldHVybiAwOwotb3V0X3NpZ3NlZ3ZfbWVtY2c6CiYjNDM7CiYjNDM7b3V0X2Vycl9sb2NrZWRfbWVtY2c6CiAJYnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTsKLW91dF9zaWdzZWd2OgomIzQzO291dF9lcnJfbG9ja2VkOgogCXJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2FyZW5hLSZndDtzcGlubG9jaywgZmxhZ3MpOwotCXJldHVybiBWTV9GQVVMVF9TSUdTRUdWOwomIzQzOwlpZiAobmV3X3BhZ2UpCiYjNDM7CQlmcmVlX3BhZ2VzX25vbG9jayhuZXdfcGFnZSwgMCk7CiYjNDM7CXJldHVybiBmYXVsdF9yZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYXJlbmFfdm1fb3BzID0gewpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwppbmRleCA2ODc0YmExNDI0YWYwLi5mOWI4MTYzOGU1MzdhIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwpAQCAtNjAyLDE1ICYjNDM7NjAyLDE0IEBAIHN0YXRpYyBib29sIGNhbl9hbGxvY19wYWdlcyh2b2lkKQogCQkhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCk7CiB9CiAKJiM0MzsjZGVmaW5lIEJQRl9QQUdFX0dGUCAoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKQomIzQzOwogc3RhdGljIHN0cnVjdCBwYWdlICpfX2JwZl9hbGxvY19wYWdlKGludCBuaWQpCiB7CiAJaWYgKCFjYW5fYWxsb2NfcGFnZXMoKSkKIAkJcmV0dXJuIGFsbG9jX3BhZ2VzX25vbG9jayhfX0dGUF9BQ0NPVU5ULCBuaWQsIDApOwogCi0JcmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobmlkLAotCQkJCUdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfQUNDT1VOVAotCQkJCXwgX19HRlBfTk9XQVJOLAotCQkJCTApOwomIzQzOwlyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShuaWQsIEJQRl9QQUdFX0dGUCwgMCk7CiB9CiAKIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsCkBAIC02MzYsNiAmIzQzOzYzNSwyMCBAQCBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEZvciBjYWxsZXJzIHRoYXQga25vdyB0aGV5IHJ1biBpbiBhIHNsZWVwYWJsZSBjb250ZXh0LCBlLmcuIGEgdXNlciBwYWdlCiYjNDM7ICogZmF1bHQgaGFuZGxlci4gY2FuX2FsbG9jX3BhZ2VzKCkgaXMgYSBjb25zZXJ2YXRpdmUgZ3Vlc3MgbWFkZSBmb3IgQlBGCiYjNDM7ICogcHJvZ3JhbSBjb250ZXh0IC0gbm90YWJseSBpdCBpcyBhbHdheXMgZmFsc2Ugb24gUFJFRU1QVF9SVCAtIHNvIGdvaW5nCiYjNDM7ICogdGhyb3VnaCBicGZfbWFwX2FsbG9jX3BhZ2VzKCkgdGhlcmUgd291bGQgbmVlZGxlc3NseSBwaWNrIHRoZQomIzQzOyAqIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IsIHdoaWNoIG5ldmVyIHJlY2xhaW1zIGFuZCBuZXZlciBlbmdhZ2VzIHRoZSBPT00KJiM0MzsgKiBtYWNoaW5lcnkuCiYjNDM7ICovCiYjNDM7c3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCkKJiM0Mzt7CiYjNDM7CW1pZ2h0X3NsZWVwKCk7CiYjNDM7CXJldHVybiBhbGxvY19wYWdlc19ub2RlKG1hcC0mZ3Q7bnVtYV9ub2RlLCBCUEZfUEFHRV9HRlAsIDApOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYnRmX2ZpZWxkX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogewogCWNvbnN0IHN0cnVjdCBidGZfZmllbGQgKmYxID0gYSwgKmYyID0gYjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKaW5kZXggNDVjZDBiNDc5ZmUzNS4uNDE4M2ZmNjE1MGMyOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKQEAgLTE4OCw2ICYjNDM7MTg4LDczIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKIAlyZXR1cm4gX193cml0ZV9jZ3JvdXBfZmlsZShjZ3JvdXBfcGF0aCwgZmlsZSwgYnVmKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgX19yZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKmNncm91cF9wYXRoLCBjb25zdCBjaGFyICpmaWxlLAomIzQzOwkJCSAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWNoYXIgZmlsZV9wYXRoW1BBVEhfTUFYICYjNDM7IDFdOwomIzQzOwlzc2l6ZV90IGdvdDsKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlzbnByaW50ZihmaWxlX3BhdGgsIHNpemVvZihmaWxlX3BhdGgpLCAmIzM0OyVzLyVzJiMzNDssIGNncm91cF9wYXRoLCBmaWxlKTsKJiM0MzsJZmQgPSBvcGVuKGZpbGVfcGF0aCwgT19SRE9OTFkpOwomIzQzOwlpZiAoZmQgJmx0OyAwKSB7CiYjNDM7CQlsb2dfZXJyKCYjMzQ7T3BlbmluZyAlcyYjMzQ7LCBmaWxlX3BhdGgpOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZ290ID0gcmVhZChmZCwgYnVmLCBsZW4gLSAxKTsKJiM0MzsJaWYgKGdvdCAmbHQ7IDApIHsKJiM0MzsJCWxvZ19lcnIoJiMzNDtSZWFkaW5nICVzJiMzNDssIGZpbGVfcGF0aCk7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwlidWZbZ290XSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcmVhZF9jZ3JvdXBfZmlsZSgpIC0gUmVhZCBmcm9tIGEgY2dyb3VwIGZpbGUKJiM0MzsgKiBAcmVsYXRpdmVfcGF0aDogVGhlIGNncm91cCBwYXRoLCByZWxhdGl2ZSB0byB0aGUgd29ya2RpcgomIzQzOyAqIEBmaWxlOiBUaGUgbmFtZSBvZiB0aGUgZmlsZSBpbiBjZ3JvdXBmcyB0byByZWFkIGZyb20KJiM0MzsgKiBAYnVmOiBCdWZmZXIgdG8gcmVhZCBpbnRvLCBOVUwtdGVybWluYXRlZCBvbiBzdWNjZXNzCiYjNDM7ICogQGxlbjogU2l6ZSBvZiBAYnVmCiYjNDM7ICoKJiM0MzsgKiBSZWFkIGZyb20gYSBmaWxlIGluIHRoZSBnaXZlbiBjZ3JvdXAmIzM5O3MgZGlyZWN0b3J5LgomIzQzOyAqCiYjNDM7ICogSWYgc3VjY2Vzc2Z1bCwgMCBpcyByZXR1cm5lZC4KJiM0MzsgKi8KJiM0MztpbnQgcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLAomIzQzOwkJICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwljaGFyIGNncm91cF9wYXRoW1BBVEhfTUFYIC0gMjRdOwomIzQzOwomIzQzOwlmb3JtYXRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpOwomIzQzOwlyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZSBpbiB0aGUgcGFyZW50IHByb2Nlc3MKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2RpcgomIzQzOyAqIEByZWxhdGl2ZV9wYXRoOiBUaGUgY2dyb3VwIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgcHJvY2VzcyB3b3JrZGlyCiYjNDM7ICogQGZpbGU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIGNncm91cGZzIHRvIHJlYWQgZnJvbQomIzQzOyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3MKJiM0MzsgKiBAbGVuOiBTaXplIG9mIEBidWYKJiM0MzsgKgomIzQzOyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCYjMzk7cyBkaXJlY3RvcnkgdW5kZXIgdGhlIHBhcmVudCBwcm9jZXNzCiYjNDM7ICogd29ya2Rpci4KJiM0MzsgKgomIzQzOyAqIElmIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQuCiYjNDM7ICovCiYjNDM7aW50IHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiYjNDM7CQkJICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWNoYXIgY2dyb3VwX3BhdGhbUEFUSF9NQVggLSAyNF07CiYjNDM7CiYjNDM7CWZvcm1hdF9wYXJlbnRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpOwomIzQzOwlyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKSAtIFNldHVwIHRoZSBjZ3JvdXAgZW52aXJvbm1lbnQKICAqCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCmluZGV4IDM4NTczMDRiZTg3NDEuLmQ0MmQyZTEzMDQ0ZTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCkBAIC0xNSw2ICYjNDM7MTUsMTAgQEAgaW50IHdyaXRlX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiAJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Zik7CiBpbnQgd3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiAJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Zik7CiYjNDM7aW50IHJlYWRfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKJiM0MzsJCSAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKJiM0MztpbnQgcmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKJiM0MzsJCQkgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKIGludCBjZ3JvdXBfc2V0dXBfYW5kX2pvaW4oY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCk7CiBpbnQgZ2V0X3Jvb3RfY2dyb3VwKHZvaWQpOwogaW50IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmM1N2I5ODQ5NGNmYWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jCkBAIC0wLDAgJiM0MzsxLDE1OCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvdXNlci5oJmd0OwomIzQzOyNpZm5kZWYgUEFHRV9TSVpFIC8qIG9uIHNvbWUgYXJjaHMgaXQgY29tZXMgaW4gc3lzL3VzZXIuaCAqLwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjZGVmaW5lIFBBR0VfU0laRSBnZXRwYWdlc2l6ZSgpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjZ3JvdXBfaGVscGVycy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2FyZW5hX21lbWNnLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBDR19QQVRICQkmIzM0Oy9hcmVuYV9tZW1jZyYjMzQ7CiYjNDM7CiYjNDM7LyogQnVkZ2V0IHRoZSBhcmVuYSBnZXRzIG9uIHRvcCBvZiB3aGF0ZXZlciBpcyBhbHJlYWR5IGNoYXJnZWQgYWZ0ZXIgbG9hZC4gKi8KJiM0MzsjZGVmaW5lIEFSRU5BX0JVREdFVAkoNjQgKiAxMDI0ICogMTAyNCkKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkdW1wX21lbWNnKGludCAoKnJkKShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpKQomIzQzO3sKJiM0MzsJY2hhciBidWZbNTEyXTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogbWVtb3J5LmN1cnJlbnQgcmVhZHMgMCBvbmNlIHRoZSBjaGlsZCBoYXMgbGVmdCB0aGUgY2dyb3VwLCBzbyBpdCBvbmx5CiYjNDM7CSAqIGNhcnJpZXMgaW5mb3JtYXRpb24gd2hlbiBkdW1wZWQgZnJvbSB0aGUgbGl2ZSBjaGlsZDsgbWVtb3J5LnBlYWsgYW5kCiYjNDM7CSAqIG1lbW9yeS5ldmVudHMgc3Vydml2ZSB0aGUgY2hpbGQgYW5kIHRlbGwgdGhlIHN0b3J5IGVpdGhlciB3YXkuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXJkKENHX1BBVEgsICYjMzQ7bWVtb3J5LmN1cnJlbnQmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkuY3VycmVudDogJXMmIzM0OywgYnVmKTsKJiM0MzsJaWYgKCFyZChDR19QQVRILCAmIzM0O21lbW9yeS5tYXgmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkubWF4OiAlcyYjMzQ7LCBidWYpOwomIzQzOwlpZiAoIXJkKENHX1BBVEgsICYjMzQ7bWVtb3J5LnBlYWsmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkucGVhazogJXMmIzM0OywgYnVmKTsKJiM0MzsJaWYgKCFyZChDR19QQVRILCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkuZXZlbnRzOlxuJXMmIzM0OywgYnVmKTsKJiM0MzsJZmZsdXNoKHN0ZGVycik7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlYWQgb25lIGtleSBmcm9tIGEgZmxhdCBrZXllZCBjZ3JvdXAgZmlsZSwgZS5nLiAmIzM0O29vbV9raWxsJiMzNDsgaW4gbWVtb3J5LmV2ZW50cy4gKi8KJiM0MztzdGF0aWMgbG9uZyBjZ19yZWFkX2tleShjb25zdCBjaGFyICpjZywgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqa2V5KQomIzQzO3sKJiM0MzsJY2hhciBidWZbNTEyXSwgKnA7CiYjNDM7CiYjNDM7CWlmIChyZWFkX2Nncm91cF9maWxlKGNnLCBmaWxlLCBidWYsIHNpemVvZihidWYpKSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcCA9IHN0cnN0cihidWYsIGtleSk7CiYjNDM7CWlmICghcCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcmV0dXJuIHN0cnRvbChwICYjNDM7IHN0cmxlbihrZXkpLCBOVUxMLCAxMCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtY2codm9pZCkKJiM0Mzt7CiYjNDM7CWludCBjZ3JvdXBfZmQgPSAtMSwgc3RhdHVzLCBlcnI7CiYjNDM7CWNvbnN0IGxvbmcgcHMgPSBQQUdFX1NJWkU7CiYjNDM7CWNoYXIgYnVmWzY0XTsKJiM0MzsJcGlkX3QgcGlkOwomIzQzOwomIzQzOwllcnIgPSBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NldHVwX2Nncm91cF9lbnZpcm9ubWVudCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY2dyb3VwX2ZkID0gY3JlYXRlX2FuZF9nZXRfY2dyb3VwKENHX1BBVEgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsICYjMzQ7Y3JlYXRlX2FuZF9nZXRfY2dyb3VwJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qIE5vIG1lbW9yeSBjb250cm9sbGVyIC0mZ3Q7IG5vdGhpbmcgdG8gdGVzdC4gKi8KJiM0MzsJaWYgKHJlYWRfY2dyb3VwX2ZpbGUoQ0dfUEFUSCwgJiMzNDttZW1vcnkuY3VycmVudCYjMzQ7LCBidWYsIHNpemVvZihidWYpKSkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7JXM6U0tJUDpubyBtZW1vcnkgY29udHJvbGxlclxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXBpZCA9IGZvcmsoKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UocGlkLCAwLCAmIzM0O2ZvcmsmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQlzdHJ1Y3QgYXJlbmFfbWVtY2cgKmNza2VsOwomIzQzOwkJX191MzIgaSwgbnBhZ2VzOwomIzQzOwkJY2hhciAqYmFzZTsKJiM0MzsJCXNpemVfdCBzejsKJiM0MzsJCWxvbmcgY3VyOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIERvIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgY2hpbGQ6IHRoZSBhcmVuYSB2bWEgaXMgVk1fRE9OVENPUFkgc28KJiM0MzsJCSAqIGl0IHdvdWxkIG5vdCBzdXJ2aXZlIGZvcmsoKSwgb25seSB0aGUgY2hpbGQgc2hvdWxkIGJlIHVuZGVyIHRoZQomIzQzOwkJICogbGltaXQgc28gdGhhdCBhIG1lbWNnIE9PTSBjYW5ub3QgcGljayB0ZXN0X3Byb2dzLCBhbmQgYSBtYXAgaXMKJiM0MzsJCSAqIGNoYXJnZWQgdG8gdGhlIG1lbWNnIG9mIHRoZSB0YXNrIHRoYXQgY3JlYXRlcyBpdCAtIHNvIGpvaW4KJiM0MzsJCSAqIGJlZm9yZSBsb2FkLiBUaGUgY2dyb3VwIHdvcmsgZGlyIGJlbG9uZ3MgdG8gdGhlIHBhcmVudCB0aGF0IHNldAomIzQzOwkJICogdGhlIGVudmlyb25tZW50IHVwLCBzbyByZWFjaCBpdCB3aXRoIHRoZSBfcGFyZW50KCkgaGVscGVycy4KJiM0MzsJCSAqIEVycm9ycyBhcmUgcmVwb3J0ZWQgdG8gdGhlIHBhcmVudCB0aHJvdWdoIHRoZSBleGl0IGNvZGUsIHNpbmNlCiYjNDM7CQkgKiBBU1NFUlRfKiBpbiBhIGZvcmtlZCBjaGlsZCBkb2VzIG5vdCByZWFjaCBpdC4KJiM0MzsJCSAqLwomIzQzOwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslZCYjMzQ7LCBnZXRwaWQoKSk7CiYjNDM7CQlpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsICYjMzQ7Y2dyb3VwLnByb2NzJiMzNDssIGJ1ZikpCiYjNDM7CQkJX2V4aXQoMik7CiYjNDM7CiYjNDM7CQljc2tlbCA9IGFyZW5hX21lbWNnX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CQlpZiAoIWNza2VsKQomIzQzOwkJCV9leGl0KDMpOwomIzQzOwomIzQzOwkJYmFzZSA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUoY3NrZWwtJmd0O21hcHMuYXJlbmEsICZhbXA7c3opOwomIzQzOwkJaWYgKCFiYXNlKQomIzQzOwkJCV9leGl0KDQpOwomIzQzOwkJbnBhZ2VzID0gYnBmX21hcF9fbWF4X2VudHJpZXMoY3NrZWwtJmd0O21hcHMuYXJlbmEpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIENhcCBvbmx5IG5vdywgYWZ0ZXIgbG9hZDogZXZlcnl0aGluZyBidXQgdGhlIGZhdWx0LWluIGlzCiYjNDM7CQkgKiBjaGFyZ2VkLCBzbyB0aGUgYXJlbmEgZ2V0cyBhIGZpeGVkIGJ1ZGdldCByZWdhcmRsZXNzIG9mIHdoYXQKJiM0MzsJCSAqIHRoZSBsb2FkIGl0c2VsZiBjb3N0LCBhbmQgdGhlIGxvYWQgY2FuIG5ldmVyIGhpdCB0aGUgbGltaXQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyZWFkX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCAmIzM0O21lbW9yeS5jdXJyZW50JiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKQomIzQzOwkJCV9leGl0KDUpOwomIzQzOwkJY3VyID0gc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwomIzQzOwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslbGQmIzM0OywgY3VyICYjNDM7IEFSRU5BX0JVREdFVCk7CiYjNDM7CQlpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsICYjMzQ7bWVtb3J5Lm1heCYjMzQ7LCBidWYpKQomIzQzOwkJCV9leGl0KDYpOwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5wYWdlczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJYmFzZVsoc2l6ZV90KWkgKiBwc10gPSAxOwomIzQzOwkJLyogRmF1bHRlZCBldmVyeXRoaW5nIHdpdGhvdXQgZHlpbmc6IGR1bXAgd2h5IChvbmx5IHVuZGVyIC12KS4gKi8KJiM0MzsJCWR1bXBfbWVtY2cocmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQpOwomIzQzOwkJX2V4aXQoMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfRVEod2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCAwKSwgcGlkLCAmIzM0O3dhaXRwaWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogQSBub24temVybyBleGl0IG1lYW5zIHRoZSBjaGlsZCBmYWlsZWQgdG8gc2V0IHVwOyB0aGUgY29kZSBzYXlzIHdoZXJlLiAqLwomIzQzOwlpZiAoV0lGRVhJVEVEKHN0YXR1cykgJmFtcDsmYW1wOyBXRVhJVFNUQVRVUyhzdGF0dXMpKSB7CiYjNDM7CQlBU1NFUlRfT0soV0VYSVRTVEFUVVMoc3RhdHVzKSwgJiMzNDtjaGlsZCBzZXR1cCYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZhdWx0aW5nIGEgdmFsaWQgYXJlbmEgYWRkcmVzcyB1bnRpbCBtZW1vcnkubWF4IGlzIGhpdCBtdXN0IG5vdCBsb29rCiYjNDM7CSAqIGxpa2UgYW4gaW52YWxpZCBhY2Nlc3MuIFdpdGhvdXQgdGhlIGZpeCB0aGUgZmF1bHQgcGF0aCBhbGxvY2F0ZWQgd2l0aAomIzQzOwkgKiB0aGUgbm9uLWJsb2NraW5nIGFsbG9jYXRvciwgdHVybmVkIGl0cyAtRU5PTUVNIGludG8gVk1fRkFVTFRfU0lHU0VHViwKJiM0MzsJICogYW5kIHRoZSBjaGlsZCBkaWVkIHdpdGggU0lHU0VHViBvbiBhIHZhbGlkIGFkZHJlc3M7IG5vdyBpdCBpcyBoYW5kbGVkCiYjNDM7CSAqIGJ5IHRoZSBtZW1jZyBPT00gcGF0aCBpbnN0ZWFkLiBBIFNJR0tJTEwgYWxvbmUgd291bGQgbm90IHByb3ZlIHRoZQomIzQzOwkgKiBtZW1jZyBPT00ga2lsbGVyIGRpZCBpdCAoYSBnbG9iYWwgT09NIG9yIGFuIHVucmVsYXRlZCBjcmFzaCBjb3VsZCBhbHNvCiYjNDM7CSAqIGtpbGwgdGhlIGNoaWxkKSwgc28gY2hlY2sgbWVtb3J5LmV2ZW50cy5vb21fa2lsbCwgd2hpY2ggcmVjb3JkcyB0aGUKJiM0MzsJICogbWVtY2cgT09NIGFuZCBzdXJ2aXZlcyB0aGUgY2hpbGQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIUFTU0VSVF9UUlVFKFdJRlNJR05BTEVEKHN0YXR1cyksICYjMzQ7Y2hpbGQga2lsbGVkIGJ5IHNpZ25hbCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9HRShjZ19yZWFkX2tleShDR19QQVRILCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtvb21fa2lsbCYjMzQ7KSwgMSwKJiM0MzsJCSAgICAgICAmIzM0O21lbWNnIG9vbV9raWxsJiMzNDspKQomIzQzOwkJZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlKTsKJiM0MztvdXQ6CiYjNDM7CWlmIChjZ3JvdXBfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGNncm91cF9mZCk7CiYjNDM7CWNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi44ODI1OWNmZWEwNmI2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMKQEAgLTAsMCAmIzQzOzEsMjQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX2FyZW5hX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTsKJiM0MzsJX191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDUwMDAwKTsgLyogbnVtYmVyIG9mIHBhZ2VzICovCiYjNDM7I2lmZGVmIF9fVEFSR0VUX0FSQ0hfYXJtNjQKJiM0MzsJX191bG9uZyhtYXBfZXh0cmEsIDB4MXVsbCAmbHQ7Jmx0OyAzMik7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi8KJiM0MzsjZWxzZQomIzQzOwlfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsICZsdDsmbHQ7IDQ0KTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqLwomIzQzOyNlbmRpZgomIzQzO30gYXJlbmEgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO2ludCBub29wKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjE4CgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDEzNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBhIFBhc3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBwYXRjaCBtb2RpZmllcyBgYXJlbmFfdm1fZmF1bHRgIGluIGBrZXJuZWwvYnBmL2FyZW5hLmNgIGFuZCBpbnRyb2R1Y2VzIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBhbG9uZyB3aXRoIGEgc2VsZnRlc3QuCgpGaXJzdCwgbG9va2luZyBhdCBgYXJlbmEuY2AsIHRoZSBjb3JlIGNoYW5nZSBpcyBwcmVhbGxvY2F0aW5nIGEgcGFnZSAqYmVmb3JlKiBhY3F1aXJpbmcgYSBzcGlubG9jaywgYnV0IG9ubHkgd2hlbiBhIHBhZ2UgaXNuJiMzOTt0IGFscmVhZHkgbWFwcGVkLCBhbmQgdGhlIGBCUEZfRl9TRUdWX09OX0ZBVUxUYCBmbGFnIGlzbiYjMzk7dCBzZXQuIFRoaXMgYWxsb3dzIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIGludGVydmVuZSBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscywgd2hpY2ggaXMgcHJlZmVyYWJsZSB0byB0aGUgcHJldmlvdXMgYmVoYXZpb3Igb2YgcG90ZW50aWFsbHkgaGFuZ2luZyBkdWUgdG8gbGFjayBvZiBhIHNsZWVwYWJsZSBhbGxvY2F0b3Igd2l0aGluIHRoZSBzcGlubG9jay4gSWYgdGhhdCBwcmUtYWxsb2NhdGlvbiBmYWlscywgaXQgcmV0dXJucyBgVk1fRkFVTFRfU0lHQlVTYC4gSWYgc3VjY2Vzc2Z1bCwgdGhlIHNwaW5sb2NrIGlzIGFjcXVpcmVkLCBhbmQgdGhlIHBhZ2UgaXMgdXNlZC4gVGhlIGtleSBwb2ludCBpcyB0aGF0IGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCB1c2VzIGBCUEZfUEFHRV9HRlBgLCB3aGljaCBpbmNsdWRlcyBgX19HRlBfWkVST2AuIFRoaXMgbWVhbnMgdGhhdCBhbnkgbmV3bHkgYWxsb2NhdGVkIHBhZ2UgaXMgKmd1YXJhbnRlZWQqIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQuCgpOb3csIGRvZXMgdGhpcyBhbGxvY2F0aW9uIGxvZ2ljIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBJIGRvbiYjMzk7dCB0aGluayBzby4gVGhlIGV4aXN0aW5nIGxvZ2ljIHVzaW5nIGBicGZfbWFwX2FsbG9jX3BhZ2VzYCBhbHNvIHplcm9zIHRoZSBwYWdlcyAoaXQgY2FsbHMgYF9fYnBmX2FsbG9jX3BhZ2VgIHdoaWNoIGl0c2VsZiBhbHNvIGNvbnRhaW5zIGBfX0dGUF9aRVJPYCkuIFNvLCB0aGUgemVyb2luZyBiZWhhdmlvciBpcyBjb25zaXN0ZW50LiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byB0aGUgaW5pdGlhbGl6YXRpb24gb2YgcGFnZXMuCgpUaGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IGEgcmVmYWN0b3JpbmcgZm9yIG1vcmUgcm9idXN0IE9PTSBoYW5kbGluZy4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBJdCBkb2VzbiYjMzk7dCBtb2RpZnkgYW55IGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCB3b3VsZCBwb3RlbnRpYWxseSBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBtZW1vcnkgYmVpbmcgYWxsb2NhdGVkIGlzIGV4cGxpY2l0bHkgemVyb2VkLiBUaGUgcHJldmlvdXMgYWxsb2NhdGlvbiBwYXRoIHdhcyBhbHNvIHplcm8taW5pdGlhbGl6ZWQuIFRoZSBjb3JlIGlzc3VlIGJlaW5nIGFkZHJlc3NlZCBpcyB0aGUgT09NIGhhbmRsaW5nIHdpdGggdGhlIHByZWFsbG9jYXRpb24gYmVmb3JlIHRoZSBsb2NrLgoKVG8gYmUgZXh0cmEgY2VydGFpbiwgSSBqdXN0IGdsYW5jZWQgYXQgYGJwZl9tYXBfYWxsb2NfcGFnZXNgIGluIGBzeXNjYWxsLmNgIGFuZCBpdCBhbHNvIHVzZXMgYEJQRl9QQUdFX0dGUGAgKGNvbnRhaW5pbmcgYF9fR0ZQX1pFUk9gKS4gU28sIHRoZSBwYWdlcyBhcmUgZGVmaW5pdGVseSB6ZXJvZWQgaW4gKmJvdGgqIGNhc2VzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyBhcmUgaW50cm9kdWNlZCwgc2luY2UgdGhlIGFsbG9jYXRlZCBwYWdlcyBhcmUgemVyb2VkLiBTdGFuZGFyZCBLQVNBTiBzaG91bGQgYmUgc3VmZmljaWVudCwgZXZlbiB0aG91Z2ggSSB3aWxsIHF1aWNrbHkgdmVyaWZ5IGBhbGxvY19wYWdlc19ub2xvY2tgIGlzIG5vdCBtb2RpZmllZCBieSB0aGlzIHBhdGNoIHRvIGRvdWJsZS1jaGVjaywgYnV0IHRoaXMgaXMgYSB2ZXJ5IGxvdy1yaXNrIGNoYW5nZS4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gSSB3aWxsIG1hcmsgTmVlZHNLTVNBTiBhcyBgZmFsc2VgLiBUaGUgcHJpbWFyeSBhaW0gaXMgaW1wcm92ZWQgT09NIGhhbmRsaW5nIGFuZCBwcmVhbGxvY2F0aW9uIGJlZm9yZSB0aGUgc3BpbmxvY2sgdG8gdXNlIGEgc2xlZXBhYmxlIGFsbG9jYXRvci4gVGhlIG5ldyBhbGxvY2F0aW9uIGxvZ2ljIHplcm9zIG1lbW9yeS4gVGhpcyBpcyBhIHZlcnkgc2FmZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgZm9yIEJQRiBhcmVuYXMgKGBhcmVuYV92bV9mYXVsdGApIHRvIHByZWFsbG9jYXRlIHBhZ2VzIG91dHNpZGUgb2YgYSBzcGlubG9jayB1c2luZyBhIHNsZWVwYWJsZSBhbGxvY2F0b3IsIGFsbG93aW5nIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biBpZiBuZWVkZWQuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIGFsbG9jYXRpb24gZnVuY3Rpb24gYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGV4cGxpY2l0bHkgdXNlcyBgX19HRlBfWkVST2AgKHZpYSBgQlBGX1BBR0VfR0ZQYCkgdG8gZW5zdXJlIHRoZSBhbGxvY2F0ZWQgcGFnZXMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQsIGp1c3QgbGlrZSB0aGUgcHJldmlvdXMgbm9uLWJsb2NraW5nIGFsbG9jYXRpb24gcGF0aC4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZC4gVGhlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gY29udGV4dCBhbmQgT09NIGhhbmRsaW5nLCB3aGljaCBkbyBub3QgaW50cm9kdWNlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgQlBGIGFyZW5hcyAoYGFyZW5hX3ZtX2ZhdWx0YCkgdG8gcHJlYWxsb2NhdGUgcGFnZXMgb3V0c2lkZSBvZiBhIHNwaW5sb2NrIHVzaW5nIGEgc2xlZXBhYmxlIGFsbG9jYXRvciwgYWxsb3dpbmcgdGhlIG1lbWNnIE9PTSBraWxsZXIgdG8gcnVuIGlmIG5lZWRlZC4gVGhlIG5ld2x5IGludHJvZHVjZWQgYWxsb2NhdGlvbiBmdW5jdGlvbiBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgZXhwbGljaXRseSB1c2VzIGBfX0dGUF9aRVJPYCAodmlhIGBCUEZfUEFHRV9HRlBgKSB0byBlbnN1cmUgdGhlIGFsbG9jYXRlZCBwYWdlcyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCwganVzdCBsaWtlIHRoZSBwcmV2aW91cyBub24tYmxvY2tpbmcgYWxsb2NhdGlvbiBwYXRoLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkLiBUaGUgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiBjb250ZXh0IGFuZCBPT00gaGFuZGxpbmcsIHdoaWNoIGRvIG5vdCBpbnRyb2R1Y2Ugcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjIzOjUyLjc3MzAwMzk4NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNzM2MzM3MTM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkNHUk9VUFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZvciBCUEYgYXJlbmFzIChgYXJlbmFfdm1fZmF1bHRgKSB0byBwcmVhbGxvY2F0ZSBwYWdlcyBvdXRzaWRlIG9mIGEgc3BpbmxvY2sgdXNpbmcgYSBzbGVlcGFibGUgYWxsb2NhdG9yLCBhbGxvd2luZyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBydW4gaWYgbmVlZGVkLiBUaGUgbmV3bHkgaW50cm9kdWNlZCBhbGxvY2F0aW9uIGZ1bmN0aW9uIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBleHBsaWNpdGx5IHVzZXMgYF9fR0ZQX1pFUk9gICh2aWEgYEJQRl9QQUdFX0dGUGApIHRvIGVuc3VyZSB0aGUgYWxsb2NhdGVkIHBhZ2VzIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkLCBqdXN0IGxpa2UgdGhlIHByZXZpb3VzIG5vbi1ibG9ja2luZyBhbGxvY2F0aW9uIHBhdGguIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQuIFRoZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnRleHQgYW5kIE9PTSBoYW5kbGluZywgd2hpY2ggZG8gbm90IGludHJvZHVjZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZvciBCUEYgYXJlbmEgbWFwcyB0byB1c2UgYSBzbGVlcGFibGUgcGFnZSBhbGxvY2F0b3IsIGFsbG93aW5nIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biB3aGVuIG1lbW9yeSBsaW1pdHMgYXJlIGhpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYWZmZWN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgaW50ZXJhY3Rpb25zLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtbWFwaW5nIGFuZCBmYXVsdGluZyBCUEYgYXJlbmEgbWFwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MjM6NTIuNzczMDA4ODc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM2ODY4NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3ODRlYjQ4ZGE5NmQ3YzRlM2ZmMTNmNmRjMGExYmZlNDA1YmZlMjliXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDI1IDEwOjIzOjUxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuaW5kZXggYjNjZDI4ZDllM2I1NS4uYzgxN2M5OWQyOTA2NiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYuaFxcbkBAIC0yNzg0LDYgKzI3ODQsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2dldF9jdXJyX29yX25leHQodTMyICppZCk7XFxuIFxcbiBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxcbiBcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xcbitzdHJ1Y3QgcGFnZSAqYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcXG4gI2lmZGVmIENPTkZJR19NRU1DR1xcbiB2b2lkIGJwZl9tYXBfbWVtY2dfZW50ZXIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IG1lbV9jZ3JvdXAgKipvbGRfbWVtY2csXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgbWVtX2Nncm91cCAqKm5ld19tZW1jZyk7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuY1xcbmluZGV4IDdiNjg0NzIwMGI0MzEuLmZhNDYyYTBmZjFhZDYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9hcmVuYS5jXFxuKysrIGIva2VybmVsL2JwZi9hcmVuYS5jXFxuQEAgLTQ4MSw3ICs0ODEsOCBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtZi1cXHUwMDNldm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm5ld19tZW1jZywgKm9sZF9tZW1jZztcXG4tXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlLCAqbmV3X3BhZ2UgPSBOVUxMO1xcbitcXHR2bV9mYXVsdF90IGZhdWx0X3JldDtcXG4gXFx0bG9uZyBrYmFzZSwga2FkZHI7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdGludCByZXQ7XFxuQEAgLTQ4OSw1OSArNDkwLDEwNiBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0a2Jhc2UgPSBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpO1xcbiBcXHRrYWRkciA9IGtiYXNlICsgKHUzMikodm1mLVxcdTAwM2VhZGRyZXNzKTtcXG4gXFxuLVxcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKSlcXG4rXFx0cGFnZSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWthZGRyKTtcXG4rXFx0aWYgKCFwYWdlIFxcdTAwMjZcXHUwMDI2ICEoYXJlbmEtXFx1MDAzZW1hcC5tYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9TRUdWX09OX0ZBVUxUKSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBQcmVhbGxvY2F0ZSBvdXRzaWRlIHRoZSBsb2NrIHdpdGggYSBzbGVlcGFibGUgYWxsb2NhdG9yIHNvIGl0XFxuK1xcdFxcdCAqIGNhbiByZWNsYWltIGFuZCBydW4gdGhlIG1lbWNnIE9PTSBraWxsZXIsIHdoaWNoIHRoZVxcbitcXHRcXHQgKiBub24tYmxvY2tpbmcgYWxsb2NhdG9yIHVuZGVyIGFyZW5hLVxcdTAwM2VzcGlubG9jayBjYW5ub3QuIEEgTlVMTFxcbitcXHRcXHQgKiByZXR1cm4gaXMgbm9uLXJlY292ZXJhYmxlLCBzbyBmYWlsIHdpdGggVk1fRkFVTFRfU0lHQlVTO1xcbitcXHRcXHQgKiBWTV9GQVVMVF9PT00gd291bGQgYmUgcmV0cmllZCBieSB0aGUgZmF1bHQgcGF0aCBhbmQgY2FuXFxuK1xcdFxcdCAqIGxpdmVsb2NrIHdoZW4gdGhlIGNoYXJnZWQgbWVtY2cgaXMgbm90IHRoZSBmYXVsdGluZyB0YXNrJ3MuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRicGZfbWFwX21lbWNnX2VudGVyKFxcdTAwMjZhcmVuYS1cXHUwMDNlbWFwLCBcXHUwMDI2b2xkX21lbWNnLCBcXHUwMDI2bmV3X21lbWNnKTtcXG4rXFx0XFx0bmV3X3BhZ2UgPSBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKG1hcCk7XFxuK1xcdFxcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XFxuK1xcdFxcdGlmICghbmV3X3BhZ2UpXFxuK1xcdFxcdFxcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKSkge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBBIGZhaWxlZCBsb2NrIG1lYW5zIGEgcG9zc2libGUgZGVhZGxvY2sgd2FzIGRldGVjdGVkLiBEb24ndFxcbiBcXHRcXHQgKiByZXR1cm4gVk1fRkFVTFRfUkVUUlk6IHRoaXMgaGFuZGxlciBuZXZlciB0b29rIG1tYXBfbG9jaywgYnV0XFxuIFxcdFxcdCAqIHRoZSBmYXVsdCBwYXRoIHdvdWxkIHJlLXRha2UgaXQgb24gcmV0cnkgYW5kIGRlYWRsb2NrLiBGYWlsLlxcbiBcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKG5ld19wYWdlKVxcbitcXHRcXHRcXHRmcmVlX3BhZ2VzX25vbG9jayhuZXdfcGFnZSwgMCk7XFxuIFxcdFxcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XFxuK1xcdH1cXG4gXFxuIFxcdHBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilrYWRkcik7XFxuIFxcdGlmIChwYWdlKSB7XFxuLVxcdFxcdGlmIChwYWdlID09IGFyZW5hLVxcdTAwM2VzY3JhdGNoX3BhZ2UpXFxuLVxcdFxcdFxcdC8qIEJQRiB0cmlnZ2VyZWQgc2NyYXRjaCBoZXJlOyBkb24ndCBsYXp5LWFsbG9jIG92ZXIgaXQgKi9cXG4tXFx0XFx0XFx0Z290byBvdXRfc2lnc2VndjtcXG4rXFx0XFx0aWYgKHBhZ2UgPT0gYXJlbmEtXFx1MDAzZXNjcmF0Y2hfcGFnZSkge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBBIHNjcmF0Y2ggcGFnZSBtYXJrcyBhIGhvbGUuIFNlZ2ZhdWx0IG9ubHkgaWYgdGhlIHVzZXJcXG4rXFx0XFx0XFx0ICogYXNrZWQgZm9yIGl0OyBvdGhlcndpc2Ugd2UgY291bGQgbGF6eS1hbGxvY2F0ZSBidXRcXG4rXFx0XFx0XFx0ICogY2hvb3NlIG5vdCB0byBvdmVyIGEgaG9sZSwgc28gcmVwb3J0IGEgYnVzIGVycm9yLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0ZmF1bHRfcmV0ID0gKGFyZW5hLVxcdTAwM2VtYXAubWFwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVCkgP1xcbitcXHRcXHRcXHRcXHQgICAgVk1fRkFVTFRfU0lHU0VHViA6IFZNX0ZBVUxUX1NJR0JVUztcXG4rXFx0XFx0XFx0Z290byBvdXRfZXJyX2xvY2tlZDtcXG4rXFx0XFx0fVxcbiBcXHRcXHQvKiBhbHJlYWR5IGhhdmUgYSBwYWdlIHZtYXAtZWQgKi9cXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChhcmVuYS1cXHUwMDNlbWFwLm1hcF9mbGFncyBcXHUwMDI2IEJQRl9GX1NFR1ZfT05fRkFVTFQpIHtcXG4rXFx0XFx0LyogVXNlciBzcGFjZSByZXF1ZXN0ZWQgdG8gc2VnZmF1bHQgd2hlbiBwYWdlIGlzIG5vdCBhbGxvY2F0ZWQgYnkgYnBmIHByb2cgKi9cXG4rXFx0XFx0ZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHU0VHVjtcXG4rXFx0XFx0Z290byBvdXRfZXJyX2xvY2tlZDtcXG4rXFx0fVxcbitcXG4gXFx0YnBmX21hcF9tZW1jZ19lbnRlcihcXHUwMDI2YXJlbmEtXFx1MDAzZW1hcCwgXFx1MDAyNm9sZF9tZW1jZywgXFx1MDAyNm5ld19tZW1jZyk7XFxuIFxcbi1cXHRpZiAoYXJlbmEtXFx1MDAzZW1hcC5tYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9TRUdWX09OX0ZBVUxUKVxcbi1cXHRcXHQvKiBVc2VyIHNwYWNlIHJlcXVlc3RlZCB0byBzZWdmYXVsdCB3aGVuIHBhZ2UgaXMgbm90IGFsbG9jYXRlZCBieSBicGYgcHJvZyAqL1xcbi1cXHRcXHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xcbitcXHRpZiAoIW5ld19wYWdlKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFZlcnkgcmFyZSByYWNlOiB0aGUgYnBmIHByb2dyYW0gaGFkIGFsbG9jYXRlZCBhIHBhZ2UgaGVyZSwgc29cXG4rXFx0XFx0ICogdGhlIGxvY2tsZXNzIHByb2JlIHNhdyBpdCBhbmQgd2Ugc2tpcHBlZCBwcmVhbGxvY2F0aW9uLCBidXQgaXRcXG4rXFx0XFx0ICogZnJlZWQgdGhlIHBhZ2UgYmVmb3JlIHdlIHRvb2sgdGhlIGxvY2suIE5vdyB3ZSBkbyBuZWVkIG9uZTtcXG4rXFx0XFx0ICogc2xlZXBpbmcgaXMgbm90IGFsbG93ZWQgaGVyZSwgc28gZmFsbCBiYWNrIHRvIHRoZSBub24tYmxvY2tpbmdcXG4rXFx0XFx0ICogYWxsb2NhdG9yIGFuZCBnaXZlIHVwIGlmIGl0IGZhaWxzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIG1hcC1cXHUwMDNlbnVtYV9ub2RlLCAxLCBcXHUwMDI2bmV3X3BhZ2UpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGZhdWx0X3JldCA9IFZNX0ZBVUxUX1NJR0JVUztcXG4rXFx0XFx0XFx0Z290byBvdXRfZXJyX2xvY2tlZF9tZW1jZztcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcbiBcXHRyZXQgPSByYW5nZV90cmVlX2NsZWFyKFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHZtZi1cXHUwMDNlcGdvZmYsIDEpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xcbi1cXG4tXFx0c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9IFxcdTAwMjZwYWdlLCAuaSA9IDAgfTtcXG4tXFx0LyogQWNjb3VudCBpbnRvIG1lbWNnIG9mIHRoZSBwcm9jZXNzIHRoYXQgY3JlYXRlZCBicGZfYXJlbmEgKi9cXG4tXFx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIE5VTUFfTk9fTk9ERSwgMSwgXFx1MDAyNnBhZ2UpO1xcbiBcXHRpZiAocmV0KSB7XFxuLVxcdFxcdHJhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHZtZi1cXHUwMDNlcGdvZmYsIDEpO1xcbi1cXHRcXHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xcbitcXHRcXHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XFxuK1xcdFxcdGdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7XFxuIFxcdH1cXG4rXFx0c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9IFxcdTAwMjZuZXdfcGFnZSwgLmkgPSAwIH07XFxuIFxcbiBcXHRyZXQgPSBhcHBseV90b19wYWdlX3JhbmdlKFxcdTAwMjZpbml0X21tLCBrYWRkciwgUEFHRV9TSVpFLCBhcHBseV9yYW5nZV9zZXRfY2IsIFxcdTAwMjZkYXRhKTtcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHRyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCB2bWYtXFx1MDAzZXBnb2ZmLCAxKTtcXG4tXFx0XFx0ZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7XFxuLVxcdFxcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XFxuK1xcdFxcdGZhdWx0X3JldCA9IFZNX0ZBVUxUX1NJR0JVUztcXG4rXFx0XFx0Z290byBvdXRfZXJyX2xvY2tlZF9tZW1jZztcXG4gXFx0fVxcbiBcXHRmbHVzaF92bWFwX2NhY2hlKGthZGRyLCBQQUdFX1NJWkUpO1xcbiBcXHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xcbitcXHQvKiBuZXdfcGFnZSB3YXMgY29uc3VtZWQgKi9cXG4rXFx0cGFnZSA9IG5ld19wYWdlO1xcbitcXHRuZXdfcGFnZSA9IE5VTEw7XFxuIG91dDpcXG4gXFx0cGFnZV9yZWZfYWRkKHBhZ2UsIDEpO1xcbiBcXHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmFyZW5hLVxcdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xcbitcXHRpZiAobmV3X3BhZ2UpXFxuK1xcdFxcdGZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTtcXG4gXFx0dm1mLVxcdTAwM2VwYWdlID0gcGFnZTtcXG4gXFx0cmV0dXJuIDA7XFxuLW91dF9zaWdzZWd2X21lbWNnOlxcbitcXG4rb3V0X2Vycl9sb2NrZWRfbWVtY2c6XFxuIFxcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XFxuLW91dF9zaWdzZWd2OlxcbitvdXRfZXJyX2xvY2tlZDpcXG4gXFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcXG4tXFx0cmV0dXJuIFZNX0ZBVUxUX1NJR1NFR1Y7XFxuK1xcdGlmIChuZXdfcGFnZSlcXG4rXFx0XFx0ZnJlZV9wYWdlc19ub2xvY2sobmV3X3BhZ2UsIDApO1xcbitcXHRyZXR1cm4gZmF1bHRfcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFyZW5hX3ZtX29wcyA9IHtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbmluZGV4IDY4NzRiYTE0MjRhZjAuLmY5YjgxNjM4ZTUzN2EgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbkBAIC02MDIsMTUgKzYwMiwxNCBAQCBzdGF0aWMgYm9vbCBjYW5fYWxsb2NfcGFnZXModm9pZClcXG4gXFx0XFx0IUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpO1xcbiB9XFxuIFxcbisjZGVmaW5lIEJQRl9QQUdFX0dGUCAoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKVxcbitcXG4gc3RhdGljIHN0cnVjdCBwYWdlICpfX2JwZl9hbGxvY19wYWdlKGludCBuaWQpXFxuIHtcXG4gXFx0aWYgKCFjYW5fYWxsb2NfcGFnZXMoKSlcXG4gXFx0XFx0cmV0dXJuIGFsbG9jX3BhZ2VzX25vbG9jayhfX0dGUF9BQ0NPVU5ULCBuaWQsIDApO1xcbiBcXG4tXFx0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobmlkLFxcbi1cXHRcXHRcXHRcXHRHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyB8IF9fR0ZQX0FDQ09VTlRcXG4tXFx0XFx0XFx0XFx0fCBfX0dGUF9OT1dBUk4sXFxuLVxcdFxcdFxcdFxcdDApO1xcbitcXHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShuaWQsIEJQRl9QQUdFX0dGUCwgMCk7XFxuIH1cXG4gXFxuIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXFxuQEAgLTYzNiw2ICs2MzUsMjAgQEAgaW50IGJwZl9tYXBfYWxsb2NfcGFnZXMoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG5pZCxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLypcXG4rICogRm9yIGNhbGxlcnMgdGhhdCBrbm93IHRoZXkgcnVuIGluIGEgc2xlZXBhYmxlIGNvbnRleHQsIGUuZy4gYSB1c2VyIHBhZ2VcXG4rICogZmF1bHQgaGFuZGxlci4gY2FuX2FsbG9jX3BhZ2VzKCkgaXMgYSBjb25zZXJ2YXRpdmUgZ3Vlc3MgbWFkZSBmb3IgQlBGXFxuKyAqIHByb2dyYW0gY29udGV4dCAtIG5vdGFibHkgaXQgaXMgYWx3YXlzIGZhbHNlIG9uIFBSRUVNUFRfUlQgLSBzbyBnb2luZ1xcbisgKiB0aHJvdWdoIGJwZl9tYXBfYWxsb2NfcGFnZXMoKSB0aGVyZSB3b3VsZCBuZWVkbGVzc2x5IHBpY2sgdGhlXFxuKyAqIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IsIHdoaWNoIG5ldmVyIHJlY2xhaW1zIGFuZCBuZXZlciBlbmdhZ2VzIHRoZSBPT01cXG4rICogbWFjaGluZXJ5LlxcbisgKi9cXG4rc3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcXG4re1xcbitcXHRtaWdodF9zbGVlcCgpO1xcbitcXHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShtYXAtXFx1MDAzZW51bWFfbm9kZSwgQlBGX1BBR0VfR0ZQLCAwKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBidGZfZmllbGRfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGJ0Zl9maWVsZCAqZjEgPSBhLCAqZjIgPSBiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jXFxuaW5kZXggNDVjZDBiNDc5ZmUzNS4uNDE4M2ZmNjE1MGMyOCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jXFxuQEAgLTE4OCw2ICsxODgsNzMgQEAgaW50IHdyaXRlX2Nncm91cF9maWxlX3BhcmVudChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxcbiBcXHRyZXR1cm4gX193cml0ZV9jZ3JvdXBfZmlsZShjZ3JvdXBfcGF0aCwgZmlsZSwgYnVmKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBfX3JlYWRfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqY2dyb3VwX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXFxuK1xcdFxcdFxcdCAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4re1xcbitcXHRjaGFyIGZpbGVfcGF0aFtQQVRIX01BWCArIDFdO1xcbitcXHRzc2l6ZV90IGdvdDtcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0c25wcmludGYoZmlsZV9wYXRoLCBzaXplb2YoZmlsZV9wYXRoKSwgXFxcIiVzLyVzXFxcIiwgY2dyb3VwX3BhdGgsIGZpbGUpO1xcbitcXHRmZCA9IG9wZW4oZmlsZV9wYXRoLCBPX1JET05MWSk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0bG9nX2VycihcXFwiT3BlbmluZyAlc1xcXCIsIGZpbGVfcGF0aCk7XFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHR9XFxuK1xcbitcXHRnb3QgPSByZWFkKGZkLCBidWYsIGxlbiAtIDEpO1xcbitcXHRpZiAoZ290IFxcdTAwM2MgMCkge1xcbitcXHRcXHRsb2dfZXJyKFxcXCJSZWFkaW5nICVzXFxcIiwgZmlsZV9wYXRoKTtcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXHRidWZbZ290XSA9ICdcXFxcMCc7XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiByZWFkX2Nncm91cF9maWxlKCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZVxcbisgKiBAcmVsYXRpdmVfcGF0aDogVGhlIGNncm91cCBwYXRoLCByZWxhdGl2ZSB0byB0aGUgd29ya2RpclxcbisgKiBAZmlsZTogVGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gY2dyb3VwZnMgdG8gcmVhZCBmcm9tXFxuKyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3NcXG4rICogQGxlbjogU2l6ZSBvZiBAYnVmXFxuKyAqXFxuKyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCdzIGRpcmVjdG9yeS5cXG4rICpcXG4rICogSWYgc3VjY2Vzc2Z1bCwgMCBpcyByZXR1cm5lZC5cXG4rICovXFxuK2ludCByZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXFxuK1xcdFxcdCAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdGNoYXIgY2dyb3VwX3BhdGhbUEFUSF9NQVggLSAyNF07XFxuK1xcbitcXHRmb3JtYXRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpO1xcbitcXHRyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiByZWFkX2Nncm91cF9maWxlX3BhcmVudCgpIC0gUmVhZCBmcm9tIGEgY2dyb3VwIGZpbGUgaW4gdGhlIHBhcmVudCBwcm9jZXNzXFxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZGlyXFxuKyAqIEByZWxhdGl2ZV9wYXRoOiBUaGUgY2dyb3VwIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgcHJvY2VzcyB3b3JrZGlyXFxuKyAqIEBmaWxlOiBUaGUgbmFtZSBvZiB0aGUgZmlsZSBpbiBjZ3JvdXBmcyB0byByZWFkIGZyb21cXG4rICogQGJ1ZjogQnVmZmVyIHRvIHJlYWQgaW50bywgTlVMLXRlcm1pbmF0ZWQgb24gc3VjY2Vzc1xcbisgKiBAbGVuOiBTaXplIG9mIEBidWZcXG4rICpcXG4rICogUmVhZCBmcm9tIGEgZmlsZSBpbiB0aGUgZ2l2ZW4gY2dyb3VwJ3MgZGlyZWN0b3J5IHVuZGVyIHRoZSBwYXJlbnQgcHJvY2Vzc1xcbisgKiB3b3JrZGlyLlxcbisgKlxcbisgKiBJZiBzdWNjZXNzZnVsLCAwIGlzIHJldHVybmVkLlxcbisgKi9cXG4raW50IHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXFxuK1xcdFxcdFxcdCAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuK3tcXG4rXFx0Y2hhciBjZ3JvdXBfcGF0aFtQQVRIX01BWCAtIDI0XTtcXG4rXFxuK1xcdGZvcm1hdF9wYXJlbnRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpO1xcbitcXHRyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKSAtIFNldHVwIHRoZSBjZ3JvdXAgZW52aXJvbm1lbnRcXG4gICpcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaFxcbmluZGV4IDM4NTczMDRiZTg3NDEuLmQ0MmQyZTEzMDQ0ZTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaFxcbkBAIC0xNSw2ICsxNSwxMCBAQCBpbnQgd3JpdGVfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcXG4gXFx0XFx0ICAgICAgY29uc3QgY2hhciAqYnVmKTtcXG4gaW50IHdyaXRlX2Nncm91cF9maWxlX3BhcmVudChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxcbiBcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmJ1Zik7XFxuK2ludCByZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXFxuK1xcdFxcdCAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcXG4raW50IHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXFxuK1xcdFxcdFxcdCAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pO1xcbiBpbnQgY2dyb3VwX3NldHVwX2FuZF9qb2luKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgpO1xcbiBpbnQgZ2V0X3Jvb3RfY2dyb3VwKHZvaWQpO1xcbiBpbnQgY3JlYXRlX2FuZF9nZXRfY2dyb3VwKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtY2cuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYzU3Yjk4NDk0Y2ZhYlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jXFxuQEAgLTAsMCArMSwxNTggQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc2lnbmFsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3dhaXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3VzZXIuaFxcdTAwM2VcXG4rI2lmbmRlZiBQQUdFX1NJWkUgLyogb24gc29tZSBhcmNocyBpdCBjb21lcyBpbiBzeXMvdXNlci5oICovXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2RlZmluZSBQQUdFX1NJWkUgZ2V0cGFnZXNpemUoKVxcbisjZW5kaWZcXG4rXFxuKyNpbmNsdWRlIFxcXCJjZ3JvdXBfaGVscGVycy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYXJlbmFfbWVtY2cuc2tlbC5oXFxcIlxcbitcXG4rI2RlZmluZSBDR19QQVRIXFx0XFx0XFxcIi9hcmVuYV9tZW1jZ1xcXCJcXG4rXFxuKy8qIEJ1ZGdldCB0aGUgYXJlbmEgZ2V0cyBvbiB0b3Agb2Ygd2hhdGV2ZXIgaXMgYWxyZWFkeSBjaGFyZ2VkIGFmdGVyIGxvYWQuICovXFxuKyNkZWZpbmUgQVJFTkFfQlVER0VUXFx0KDY0ICogMTAyNCAqIDEwMjQpXFxuK1xcbitzdGF0aWMgdm9pZCBkdW1wX21lbWNnKGludCAoKnJkKShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpKVxcbit7XFxuK1xcdGNoYXIgYnVmWzUxMl07XFxuK1xcbitcXHQvKlxcbitcXHQgKiBtZW1vcnkuY3VycmVudCByZWFkcyAwIG9uY2UgdGhlIGNoaWxkIGhhcyBsZWZ0IHRoZSBjZ3JvdXAsIHNvIGl0IG9ubHlcXG4rXFx0ICogY2FycmllcyBpbmZvcm1hdGlvbiB3aGVuIGR1bXBlZCBmcm9tIHRoZSBsaXZlIGNoaWxkOyBtZW1vcnkucGVhayBhbmRcXG4rXFx0ICogbWVtb3J5LmV2ZW50cyBzdXJ2aXZlIHRoZSBjaGlsZCBhbmQgdGVsbCB0aGUgc3RvcnkgZWl0aGVyIHdheS5cXG4rXFx0ICovXFxuK1xcdGlmICghcmQoQ0dfUEFUSCwgXFxcIm1lbW9yeS5jdXJyZW50XFxcIiwgYnVmLCBzaXplb2YoYnVmKSkpXFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwibWVtb3J5LmN1cnJlbnQ6ICVzXFxcIiwgYnVmKTtcXG4rXFx0aWYgKCFyZChDR19QQVRILCBcXFwibWVtb3J5Lm1heFxcXCIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIm1lbW9yeS5tYXg6ICVzXFxcIiwgYnVmKTtcXG4rXFx0aWYgKCFyZChDR19QQVRILCBcXFwibWVtb3J5LnBlYWtcXFwiLCBidWYsIHNpemVvZihidWYpKSlcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJtZW1vcnkucGVhazogJXNcXFwiLCBidWYpO1xcbitcXHRpZiAoIXJkKENHX1BBVEgsIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgYnVmLCBzaXplb2YoYnVmKSkpXFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwibWVtb3J5LmV2ZW50czpcXFxcbiVzXFxcIiwgYnVmKTtcXG4rXFx0ZmZsdXNoKHN0ZGVycik7XFxuK31cXG4rXFxuKy8qIFJlYWQgb25lIGtleSBmcm9tIGEgZmxhdCBrZXllZCBjZ3JvdXAgZmlsZSwgZS5nLiBcXFwib29tX2tpbGxcXFwiIGluIG1lbW9yeS5ldmVudHMuICovXFxuK3N0YXRpYyBsb25nIGNnX3JlYWRfa2V5KGNvbnN0IGNoYXIgKmNnLCBjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICprZXkpXFxuK3tcXG4rXFx0Y2hhciBidWZbNTEyXSwgKnA7XFxuK1xcbitcXHRpZiAocmVhZF9jZ3JvdXBfZmlsZShjZywgZmlsZSwgYnVmLCBzaXplb2YoYnVmKSkpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0cCA9IHN0cnN0cihidWYsIGtleSk7XFxuK1xcdGlmICghcClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRyZXR1cm4gc3RydG9sKHAgKyBzdHJsZW4oa2V5KSwgTlVMTCwgMTApO1xcbit9XFxuK1xcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX21lbWNnKHZvaWQpXFxuK3tcXG4rXFx0aW50IGNncm91cF9mZCA9IC0xLCBzdGF0dXMsIGVycjtcXG4rXFx0Y29uc3QgbG9uZyBwcyA9IFBBR0VfU0laRTtcXG4rXFx0Y2hhciBidWZbNjRdO1xcbitcXHRwaWRfdCBwaWQ7XFxuK1xcbitcXHRlcnIgPSBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic2V0dXBfY2dyb3VwX2Vudmlyb25tZW50XFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGNncm91cF9mZCA9IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChDR19QQVRIKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfRkQoY2dyb3VwX2ZkLCBcXFwiY3JlYXRlX2FuZF9nZXRfY2dyb3VwXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LyogTm8gbWVtb3J5IGNvbnRyb2xsZXIgLVxcdTAwM2Ugbm90aGluZyB0byB0ZXN0LiAqL1xcbitcXHRpZiAocmVhZF9jZ3JvdXBfZmlsZShDR19QQVRILCBcXFwibWVtb3J5LmN1cnJlbnRcXFwiLCBidWYsIHNpemVvZihidWYpKSkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIiVzOlNLSVA6bm8gbWVtb3J5IGNvbnRyb2xsZXJcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0cGlkID0gZm9yaygpO1xcbitcXHRpZiAoIUFTU0VSVF9HRShwaWQsIDAsIFxcXCJmb3JrXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAocGlkID09IDApIHtcXG4rXFx0XFx0c3RydWN0IGFyZW5hX21lbWNnICpjc2tlbDtcXG4rXFx0XFx0X191MzIgaSwgbnBhZ2VzO1xcbitcXHRcXHRjaGFyICpiYXNlO1xcbitcXHRcXHRzaXplX3Qgc3o7XFxuK1xcdFxcdGxvbmcgY3VyO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRG8gZXZlcnl0aGluZyBmcm9tIHRoZSBjaGlsZDogdGhlIGFyZW5hIHZtYSBpcyBWTV9ET05UQ09QWSBzb1xcbitcXHRcXHQgKiBpdCB3b3VsZCBub3Qgc3Vydml2ZSBmb3JrKCksIG9ubHkgdGhlIGNoaWxkIHNob3VsZCBiZSB1bmRlciB0aGVcXG4rXFx0XFx0ICogbGltaXQgc28gdGhhdCBhIG1lbWNnIE9PTSBjYW5ub3QgcGljayB0ZXN0X3Byb2dzLCBhbmQgYSBtYXAgaXNcXG4rXFx0XFx0ICogY2hhcmdlZCB0byB0aGUgbWVtY2cgb2YgdGhlIHRhc2sgdGhhdCBjcmVhdGVzIGl0IC0gc28gam9pblxcbitcXHRcXHQgKiBiZWZvcmUgbG9hZC4gVGhlIGNncm91cCB3b3JrIGRpciBiZWxvbmdzIHRvIHRoZSBwYXJlbnQgdGhhdCBzZXRcXG4rXFx0XFx0ICogdGhlIGVudmlyb25tZW50IHVwLCBzbyByZWFjaCBpdCB3aXRoIHRoZSBfcGFyZW50KCkgaGVscGVycy5cXG4rXFx0XFx0ICogRXJyb3JzIGFyZSByZXBvcnRlZCB0byB0aGUgcGFyZW50IHRocm91Z2ggdGhlIGV4aXQgY29kZSwgc2luY2VcXG4rXFx0XFx0ICogQVNTRVJUXyogaW4gYSBmb3JrZWQgY2hpbGQgZG9lcyBub3QgcmVhY2ggaXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiJWRcXFwiLCBnZXRwaWQoKSk7XFxuK1xcdFxcdGlmICh3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoQ0dfUEFUSCwgXFxcImNncm91cC5wcm9jc1xcXCIsIGJ1ZikpXFxuK1xcdFxcdFxcdF9leGl0KDIpO1xcbitcXG4rXFx0XFx0Y3NrZWwgPSBhcmVuYV9tZW1jZ19fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRcXHRpZiAoIWNza2VsKVxcbitcXHRcXHRcXHRfZXhpdCgzKTtcXG4rXFxuK1xcdFxcdGJhc2UgPSBicGZfbWFwX19pbml0aWFsX3ZhbHVlKGNza2VsLVxcdTAwM2VtYXBzLmFyZW5hLCBcXHUwMDI2c3opO1xcbitcXHRcXHRpZiAoIWJhc2UpXFxuK1xcdFxcdFxcdF9leGl0KDQpO1xcbitcXHRcXHRucGFnZXMgPSBicGZfbWFwX19tYXhfZW50cmllcyhjc2tlbC1cXHUwMDNlbWFwcy5hcmVuYSk7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBDYXAgb25seSBub3csIGFmdGVyIGxvYWQ6IGV2ZXJ5dGhpbmcgYnV0IHRoZSBmYXVsdC1pbiBpc1xcbitcXHRcXHQgKiBjaGFyZ2VkLCBzbyB0aGUgYXJlbmEgZ2V0cyBhIGZpeGVkIGJ1ZGdldCByZWdhcmRsZXNzIG9mIHdoYXRcXG4rXFx0XFx0ICogdGhlIGxvYWQgaXRzZWxmIGNvc3QsIGFuZCB0aGUgbG9hZCBjYW4gbmV2ZXIgaGl0IHRoZSBsaW1pdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChyZWFkX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCBcXFwibWVtb3J5LmN1cnJlbnRcXFwiLCBidWYsIHNpemVvZihidWYpKSlcXG4rXFx0XFx0XFx0X2V4aXQoNSk7XFxuK1xcdFxcdGN1ciA9IHN0cnRvbChidWYsIE5VTEwsIDEwKTtcXG4rXFx0XFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXFxcIiVsZFxcXCIsIGN1ciArIEFSRU5BX0JVREdFVCk7XFxuK1xcdFxcdGlmICh3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoQ0dfUEFUSCwgXFxcIm1lbW9yeS5tYXhcXFwiLCBidWYpKVxcbitcXHRcXHRcXHRfZXhpdCg2KTtcXG4rXFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucGFnZXM7IGkrKylcXG4rXFx0XFx0XFx0YmFzZVsoc2l6ZV90KWkgKiBwc10gPSAxO1xcbitcXHRcXHQvKiBGYXVsdGVkIGV2ZXJ5dGhpbmcgd2l0aG91dCBkeWluZzogZHVtcCB3aHkgKG9ubHkgdW5kZXIgLXYpLiAqL1xcbitcXHRcXHRkdW1wX21lbWNnKHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KTtcXG4rXFx0XFx0X2V4aXQoMCk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghQVNTRVJUX0VRKHdhaXRwaWQocGlkLCBcXHUwMDI2c3RhdHVzLCAwKSwgcGlkLCBcXFwid2FpdHBpZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIEEgbm9uLXplcm8gZXhpdCBtZWFucyB0aGUgY2hpbGQgZmFpbGVkIHRvIHNldCB1cDsgdGhlIGNvZGUgc2F5cyB3aGVyZS4gKi9cXG4rXFx0aWYgKFdJRkVYSVRFRChzdGF0dXMpIFxcdTAwMjZcXHUwMDI2IFdFWElUU1RBVFVTKHN0YXR1cykpIHtcXG4rXFx0XFx0QVNTRVJUX09LKFdFWElUU1RBVFVTKHN0YXR1cyksIFxcXCJjaGlsZCBzZXR1cFxcXCIpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogRmF1bHRpbmcgYSB2YWxpZCBhcmVuYSBhZGRyZXNzIHVudGlsIG1lbW9yeS5tYXggaXMgaGl0IG11c3Qgbm90IGxvb2tcXG4rXFx0ICogbGlrZSBhbiBpbnZhbGlkIGFjY2Vzcy4gV2l0aG91dCB0aGUgZml4IHRoZSBmYXVsdCBwYXRoIGFsbG9jYXRlZCB3aXRoXFxuK1xcdCAqIHRoZSBub24tYmxvY2tpbmcgYWxsb2NhdG9yLCB0dXJuZWQgaXRzIC1FTk9NRU0gaW50byBWTV9GQVVMVF9TSUdTRUdWLFxcbitcXHQgKiBhbmQgdGhlIGNoaWxkIGRpZWQgd2l0aCBTSUdTRUdWIG9uIGEgdmFsaWQgYWRkcmVzczsgbm93IGl0IGlzIGhhbmRsZWRcXG4rXFx0ICogYnkgdGhlIG1lbWNnIE9PTSBwYXRoIGluc3RlYWQuIEEgU0lHS0lMTCBhbG9uZSB3b3VsZCBub3QgcHJvdmUgdGhlXFxuK1xcdCAqIG1lbWNnIE9PTSBraWxsZXIgZGlkIGl0IChhIGdsb2JhbCBPT00gb3IgYW4gdW5yZWxhdGVkIGNyYXNoIGNvdWxkIGFsc29cXG4rXFx0ICoga2lsbCB0aGUgY2hpbGQpLCBzbyBjaGVjayBtZW1vcnkuZXZlbnRzLm9vbV9raWxsLCB3aGljaCByZWNvcmRzIHRoZVxcbitcXHQgKiBtZW1jZyBPT00gYW5kIHN1cnZpdmVzIHRoZSBjaGlsZC5cXG4rXFx0ICovXFxuK1xcdGlmICghQVNTRVJUX1RSVUUoV0lGU0lHTkFMRUQoc3RhdHVzKSwgXFxcImNoaWxkIGtpbGxlZCBieSBzaWduYWxcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmICghQVNTRVJUX0dFKGNnX3JlYWRfa2V5KENHX1BBVEgsIFxcXCJtZW1vcnkuZXZlbnRzXFxcIiwgXFxcIm9vbV9raWxsXFxcIiksIDEsXFxuK1xcdFxcdCAgICAgICBcXFwibWVtY2cgb29tX2tpbGxcXFwiKSlcXG4rXFx0XFx0ZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlKTtcXG4rb3V0OlxcbitcXHRpZiAoY2dyb3VwX2ZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGNncm91cF9mZCk7XFxuK1xcdGNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uODgyNTljZmVhMDZiNlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuY1xcbkBAIC0wLDAgKzEsMjQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N2bWxpbnV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl9hcmVuYV9jb21tb24uaFxcXCJcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpO1xcbitcXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgNTAwMDApOyAvKiBudW1iZXIgb2YgcGFnZXMgKi9cXG4rI2lmZGVmIF9fVEFSR0VUX0FSQ0hfYXJtNjRcXG4rXFx0X191bG9uZyhtYXBfZXh0cmEsIDB4MXVsbCBcXHUwMDNjXFx1MDAzYyAzMik7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi9cXG4rI2Vsc2VcXG4rXFx0X191bG9uZyhtYXBfZXh0cmEsIDB4MXVsbCBcXHUwMDNjXFx1MDAzYyA0NCk7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi9cXG4rI2VuZGlmXFxuK30gYXJlbmEgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4raW50IG5vb3Aodm9pZCAqY3R4KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MjM6NTMuMjI3NTExNTE2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjAxMDUxNjA5MTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiQ0dST1VQU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZvciBCUEYgYXJlbmEgbWFwcyB0byB1c2UgYSBzbGVlcGFibGUgcGFnZSBhbGxvY2F0b3IsIGFsbG93aW5nIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biB3aGVuIG1lbW9yeSBsaW1pdHMgYXJlIGhpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYWZmZWN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgaW50ZXJhY3Rpb25zLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtbWFwaW5nIGFuZCBmYXVsdGluZyBCUEYgYXJlbmEgbWFwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzg0ZWI0OGRhOTZkN2M0ZTNmZjEzZjZkYzBhMWJmZTQwNWJmZTI5YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDEwOjIzOjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcbmluZGV4IGIzY2QyOGQ5ZTNiNTUuLmM4MTdjOTlkMjkwNjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtMjc4NCw2ICsyNzg0LDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpO1xuIFxuIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbitzdHJ1Y3QgcGFnZSAqYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcbiAjaWZkZWYgQ09ORklHX01FTUNHXG4gdm9pZCBicGZfbWFwX21lbWNnX2VudGVyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBtZW1fY2dyb3VwICoqb2xkX21lbWNnLFxuIFx0XHRcdCBzdHJ1Y3QgbWVtX2Nncm91cCAqKm5ld19tZW1jZyk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9hcmVuYS5jIGIva2VybmVsL2JwZi9hcmVuYS5jXG5pbmRleCA3YjY4NDcyMDBiNDMxLi5mYTQ2MmEwZmYxYWQ2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9hcmVuYS5jXG4rKysgYi9rZXJuZWwvYnBmL2FyZW5hLmNcbkBAIC00ODEsNyArNDgxLDggQEAgc3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gdm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICpuZXdfbWVtY2csICpvbGRfbWVtY2c7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbitcdHN0cnVjdCBwYWdlICpwYWdlLCAqbmV3X3BhZ2UgPSBOVUxMO1xuK1x0dm1fZmF1bHRfdCBmYXVsdF9yZXQ7XG4gXHRsb25nIGtiYXNlLCBrYWRkcjtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgcmV0O1xuQEAgLTQ4OSw1OSArNDkwLDEwNiBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdGtiYXNlID0gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGFyZW5hKTtcbiBcdGthZGRyID0ga2Jhc2UgKyAodTMyKSh2bWYtXHUwMDNlYWRkcmVzcyk7XG4gXG4tXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxuK1x0cGFnZSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWthZGRyKTtcbitcdGlmICghcGFnZSBcdTAwMjZcdTAwMjYgIShhcmVuYS1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9TRUdWX09OX0ZBVUxUKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBQcmVhbGxvY2F0ZSBvdXRzaWRlIHRoZSBsb2NrIHdpdGggYSBzbGVlcGFibGUgYWxsb2NhdG9yIHNvIGl0XG4rXHRcdCAqIGNhbiByZWNsYWltIGFuZCBydW4gdGhlIG1lbWNnIE9PTSBraWxsZXIsIHdoaWNoIHRoZVxuK1x0XHQgKiBub24tYmxvY2tpbmcgYWxsb2NhdG9yIHVuZGVyIGFyZW5hLVx1MDAzZXNwaW5sb2NrIGNhbm5vdC4gQSBOVUxMXG4rXHRcdCAqIHJldHVybiBpcyBub24tcmVjb3ZlcmFibGUsIHNvIGZhaWwgd2l0aCBWTV9GQVVMVF9TSUdCVVM7XG4rXHRcdCAqIFZNX0ZBVUxUX09PTSB3b3VsZCBiZSByZXRyaWVkIGJ5IHRoZSBmYXVsdCBwYXRoIGFuZCBjYW5cbitcdFx0ICogbGl2ZWxvY2sgd2hlbiB0aGUgY2hhcmdlZCBtZW1jZyBpcyBub3QgdGhlIGZhdWx0aW5nIHRhc2sncy5cbitcdFx0ICovXG4rXHRcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG4rXHRcdG5ld19wYWdlID0gYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZShtYXApO1xuK1x0XHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xuK1x0XHRpZiAoIW5ld19wYWdlKVxuK1x0XHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4rXHR9XG4rXG4rXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIEEgZmFpbGVkIGxvY2sgbWVhbnMgYSBwb3NzaWJsZSBkZWFkbG9jayB3YXMgZGV0ZWN0ZWQuIERvbid0XG4gXHRcdCAqIHJldHVybiBWTV9GQVVMVF9SRVRSWTogdGhpcyBoYW5kbGVyIG5ldmVyIHRvb2sgbW1hcF9sb2NrLCBidXRcbiBcdFx0ICogdGhlIGZhdWx0IHBhdGggd291bGQgcmUtdGFrZSBpdCBvbiByZXRyeSBhbmQgZGVhZGxvY2suIEZhaWwuXG4gXHRcdCAqL1xuK1x0XHRpZiAobmV3X3BhZ2UpXG4rXHRcdFx0ZnJlZV9wYWdlc19ub2xvY2sobmV3X3BhZ2UsIDApO1xuIFx0XHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xuK1x0fVxuIFxuIFx0cGFnZSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWthZGRyKTtcbiBcdGlmIChwYWdlKSB7XG4tXHRcdGlmIChwYWdlID09IGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSlcbi1cdFx0XHQvKiBCUEYgdHJpZ2dlcmVkIHNjcmF0Y2ggaGVyZTsgZG9uJ3QgbGF6eS1hbGxvYyBvdmVyIGl0ICovXG4tXHRcdFx0Z290byBvdXRfc2lnc2VndjtcbitcdFx0aWYgKHBhZ2UgPT0gYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBIHNjcmF0Y2ggcGFnZSBtYXJrcyBhIGhvbGUuIFNlZ2ZhdWx0IG9ubHkgaWYgdGhlIHVzZXJcbitcdFx0XHQgKiBhc2tlZCBmb3IgaXQ7IG90aGVyd2lzZSB3ZSBjb3VsZCBsYXp5LWFsbG9jYXRlIGJ1dFxuK1x0XHRcdCAqIGNob29zZSBub3QgdG8gb3ZlciBhIGhvbGUsIHNvIHJlcG9ydCBhIGJ1cyBlcnJvci5cbitcdFx0XHQgKi9cbitcdFx0XHRmYXVsdF9yZXQgPSAoYXJlbmEtXHUwMDNlbWFwLm1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVCkgP1xuK1x0XHRcdFx0ICAgIFZNX0ZBVUxUX1NJR1NFR1YgOiBWTV9GQVVMVF9TSUdCVVM7XG4rXHRcdFx0Z290byBvdXRfZXJyX2xvY2tlZDtcbitcdFx0fVxuIFx0XHQvKiBhbHJlYWR5IGhhdmUgYSBwYWdlIHZtYXAtZWQgKi9cbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4rXHRpZiAoYXJlbmEtXHUwMDNlbWFwLm1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVCkge1xuK1x0XHQvKiBVc2VyIHNwYWNlIHJlcXVlc3RlZCB0byBzZWdmYXVsdCB3aGVuIHBhZ2UgaXMgbm90IGFsbG9jYXRlZCBieSBicGYgcHJvZyAqL1xuK1x0XHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdTRUdWO1xuK1x0XHRnb3RvIG91dF9lcnJfbG9ja2VkO1xuK1x0fVxuK1xuIFx0YnBmX21hcF9tZW1jZ19lbnRlcihcdTAwMjZhcmVuYS1cdTAwM2VtYXAsIFx1MDAyNm9sZF9tZW1jZywgXHUwMDI2bmV3X21lbWNnKTtcbiBcbi1cdGlmIChhcmVuYS1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9TRUdWX09OX0ZBVUxUKVxuLVx0XHQvKiBVc2VyIHNwYWNlIHJlcXVlc3RlZCB0byBzZWdmYXVsdCB3aGVuIHBhZ2UgaXMgbm90IGFsbG9jYXRlZCBieSBicGYgcHJvZyAqL1xuLVx0XHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xuK1x0aWYgKCFuZXdfcGFnZSkge1xuK1x0XHQvKlxuK1x0XHQgKiBWZXJ5IHJhcmUgcmFjZTogdGhlIGJwZiBwcm9ncmFtIGhhZCBhbGxvY2F0ZWQgYSBwYWdlIGhlcmUsIHNvXG4rXHRcdCAqIHRoZSBsb2NrbGVzcyBwcm9iZSBzYXcgaXQgYW5kIHdlIHNraXBwZWQgcHJlYWxsb2NhdGlvbiwgYnV0IGl0XG4rXHRcdCAqIGZyZWVkIHRoZSBwYWdlIGJlZm9yZSB3ZSB0b29rIHRoZSBsb2NrLiBOb3cgd2UgZG8gbmVlZCBvbmU7XG4rXHRcdCAqIHNsZWVwaW5nIGlzIG5vdCBhbGxvd2VkIGhlcmUsIHNvIGZhbGwgYmFjayB0byB0aGUgbm9uLWJsb2NraW5nXG4rXHRcdCAqIGFsbG9jYXRvciBhbmQgZ2l2ZSB1cCBpZiBpdCBmYWlscy5cbitcdFx0ICovXG4rXHRcdHJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBtYXAtXHUwMDNlbnVtYV9ub2RlLCAxLCBcdTAwMjZuZXdfcGFnZSk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4rXHRcdFx0Z290byBvdXRfZXJyX2xvY2tlZF9tZW1jZztcbitcdFx0fVxuK1x0fVxuIFxuIFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4tXG4tXHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gXHUwMDI2cGFnZSwgLmkgPSAwIH07XG4tXHQvKiBBY2NvdW50IGludG8gbWVtY2cgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGJwZl9hcmVuYSAqL1xuLVx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIE5VTUFfTk9fTk9ERSwgMSwgXHUwMDI2cGFnZSk7XG4gXHRpZiAocmV0KSB7XG4tXHRcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCB2bWYtXHUwMDNlcGdvZmYsIDEpO1xuLVx0XHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xuK1x0XHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4rXHRcdGdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7XG4gXHR9XG4rXHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gXHUwMDI2bmV3X3BhZ2UsIC5pID0gMCB9O1xuIFxuIFx0cmV0ID0gYXBwbHlfdG9fcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBrYWRkciwgUEFHRV9TSVpFLCBhcHBseV9yYW5nZV9zZXRfY2IsIFx1MDAyNmRhdGEpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbi1cdFx0ZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7XG4tXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4rXHRcdGZhdWx0X3JldCA9IFZNX0ZBVUxUX1NJR0JVUztcbitcdFx0Z290byBvdXRfZXJyX2xvY2tlZF9tZW1jZztcbiBcdH1cbiBcdGZsdXNoX3ZtYXBfY2FjaGUoa2FkZHIsIFBBR0VfU0laRSk7XG4gXHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xuK1x0LyogbmV3X3BhZ2Ugd2FzIGNvbnN1bWVkICovXG4rXHRwYWdlID0gbmV3X3BhZ2U7XG4rXHRuZXdfcGFnZSA9IE5VTEw7XG4gb3V0OlxuIFx0cGFnZV9yZWZfYWRkKHBhZ2UsIDEpO1xuIFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG4rXHRpZiAobmV3X3BhZ2UpXG4rXHRcdGZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTtcbiBcdHZtZi1cdTAwM2VwYWdlID0gcGFnZTtcbiBcdHJldHVybiAwO1xuLW91dF9zaWdzZWd2X21lbWNnOlxuK1xuK291dF9lcnJfbG9ja2VkX21lbWNnOlxuIFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbi1vdXRfc2lnc2VndjpcbitvdXRfZXJyX2xvY2tlZDpcbiBcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xuLVx0cmV0dXJuIFZNX0ZBVUxUX1NJR1NFR1Y7XG4rXHRpZiAobmV3X3BhZ2UpXG4rXHRcdGZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTtcbitcdHJldHVybiBmYXVsdF9yZXQ7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYXJlbmFfdm1fb3BzID0ge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbmluZGV4IDY4NzRiYTE0MjRhZjAuLmY5YjgxNjM4ZTUzN2EgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC02MDIsMTUgKzYwMiwxNCBAQCBzdGF0aWMgYm9vbCBjYW5fYWxsb2NfcGFnZXModm9pZClcbiBcdFx0IUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpO1xuIH1cbiBcbisjZGVmaW5lIEJQRl9QQUdFX0dGUCAoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKVxuK1xuIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19icGZfYWxsb2NfcGFnZShpbnQgbmlkKVxuIHtcbiBcdGlmICghY2FuX2FsbG9jX3BhZ2VzKCkpXG4gXHRcdHJldHVybiBhbGxvY19wYWdlc19ub2xvY2soX19HRlBfQUNDT1VOVCwgbmlkLCAwKTtcbiBcbi1cdHJldHVybiBhbGxvY19wYWdlc19ub2RlKG5pZCxcbi1cdFx0XHRcdEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfQUNDT1VOVFxuLVx0XHRcdFx0fCBfX0dGUF9OT1dBUk4sXG4tXHRcdFx0XHQwKTtcbitcdHJldHVybiBhbGxvY19wYWdlc19ub2RlKG5pZCwgQlBGX1BBR0VfR0ZQLCAwKTtcbiB9XG4gXG4gaW50IGJwZl9tYXBfYWxsb2NfcGFnZXMoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG5pZCxcbkBAIC02MzYsNiArNjM1LDIwIEBAIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKlxuKyAqIEZvciBjYWxsZXJzIHRoYXQga25vdyB0aGV5IHJ1biBpbiBhIHNsZWVwYWJsZSBjb250ZXh0LCBlLmcuIGEgdXNlciBwYWdlXG4rICogZmF1bHQgaGFuZGxlci4gY2FuX2FsbG9jX3BhZ2VzKCkgaXMgYSBjb25zZXJ2YXRpdmUgZ3Vlc3MgbWFkZSBmb3IgQlBGXG4rICogcHJvZ3JhbSBjb250ZXh0IC0gbm90YWJseSBpdCBpcyBhbHdheXMgZmFsc2Ugb24gUFJFRU1QVF9SVCAtIHNvIGdvaW5nXG4rICogdGhyb3VnaCBicGZfbWFwX2FsbG9jX3BhZ2VzKCkgdGhlcmUgd291bGQgbmVlZGxlc3NseSBwaWNrIHRoZVxuKyAqIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IsIHdoaWNoIG5ldmVyIHJlY2xhaW1zIGFuZCBuZXZlciBlbmdhZ2VzIHRoZSBPT01cbisgKiBtYWNoaW5lcnkuXG4rICovXG4rc3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbit7XG4rXHRtaWdodF9zbGVlcCgpO1xuK1x0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobWFwLVx1MDAzZW51bWFfbm9kZSwgQlBGX1BBR0VfR0ZQLCAwKTtcbit9XG4rXG4gc3RhdGljIGludCBidGZfZmllbGRfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl9maWVsZCAqZjEgPSBhLCAqZjIgPSBiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmNcbmluZGV4IDQ1Y2QwYjQ3OWZlMzUuLjQxODNmZjYxNTBjMjggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmNcbkBAIC0xODgsNiArMTg4LDczIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbiBcdHJldHVybiBfX3dyaXRlX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYpO1xuIH1cbiBcbitzdGF0aWMgaW50IF9fcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpjZ3JvdXBfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbitcdFx0XHQgICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4re1xuK1x0Y2hhciBmaWxlX3BhdGhbUEFUSF9NQVggKyAxXTtcbitcdHNzaXplX3QgZ290O1xuK1x0aW50IGZkO1xuK1xuK1x0c25wcmludGYoZmlsZV9wYXRoLCBzaXplb2YoZmlsZV9wYXRoKSwgXCIlcy8lc1wiLCBjZ3JvdXBfcGF0aCwgZmlsZSk7XG4rXHRmZCA9IG9wZW4oZmlsZV9wYXRoLCBPX1JET05MWSk7XG4rXHRpZiAoZmQgXHUwMDNjIDApIHtcbitcdFx0bG9nX2VycihcIk9wZW5pbmcgJXNcIiwgZmlsZV9wYXRoKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4rXHRnb3QgPSByZWFkKGZkLCBidWYsIGxlbiAtIDEpO1xuK1x0aWYgKGdvdCBcdTAwM2MgMCkge1xuK1x0XHRsb2dfZXJyKFwiUmVhZGluZyAlc1wiLCBmaWxlX3BhdGgpO1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1x0YnVmW2dvdF0gPSAnXFwwJztcbitcdGNsb3NlKGZkKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiByZWFkX2Nncm91cF9maWxlKCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZVxuKyAqIEByZWxhdGl2ZV9wYXRoOiBUaGUgY2dyb3VwIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSB3b3JrZGlyXG4rICogQGZpbGU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIGNncm91cGZzIHRvIHJlYWQgZnJvbVxuKyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3NcbisgKiBAbGVuOiBTaXplIG9mIEBidWZcbisgKlxuKyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCdzIGRpcmVjdG9yeS5cbisgKlxuKyAqIElmIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQuXG4rICovXG4raW50IHJlYWRfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbitcdFx0ICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4re1xuK1x0Y2hhciBjZ3JvdXBfcGF0aFtQQVRIX01BWCAtIDI0XTtcbitcbitcdGZvcm1hdF9jZ3JvdXBfcGF0aChjZ3JvdXBfcGF0aCwgcmVsYXRpdmVfcGF0aCk7XG4rXHRyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7XG4rfVxuK1xuKy8qKlxuKyAqIHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZSBpbiB0aGUgcGFyZW50IHByb2Nlc3NcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2RpclxuKyAqIEByZWxhdGl2ZV9wYXRoOiBUaGUgY2dyb3VwIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgcHJvY2VzcyB3b3JrZGlyXG4rICogQGZpbGU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIGNncm91cGZzIHRvIHJlYWQgZnJvbVxuKyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3NcbisgKiBAbGVuOiBTaXplIG9mIEBidWZcbisgKlxuKyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCdzIGRpcmVjdG9yeSB1bmRlciB0aGUgcGFyZW50IHByb2Nlc3NcbisgKiB3b3JrZGlyLlxuKyAqXG4rICogSWYgc3VjY2Vzc2Z1bCwgMCBpcyByZXR1cm5lZC5cbisgKi9cbitpbnQgcmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbitcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuK3tcbitcdGNoYXIgY2dyb3VwX3BhdGhbUEFUSF9NQVggLSAyNF07XG4rXG4rXHRmb3JtYXRfcGFyZW50X2Nncm91cF9wYXRoKGNncm91cF9wYXRoLCByZWxhdGl2ZV9wYXRoKTtcbitcdHJldHVybiBfX3JlYWRfY2dyb3VwX2ZpbGUoY2dyb3VwX3BhdGgsIGZpbGUsIGJ1ZiwgbGVuKTtcbit9XG4rXG4gLyoqXG4gICogc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCkgLSBTZXR1cCB0aGUgY2dyb3VwIGVudmlyb25tZW50XG4gICpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oXG5pbmRleCAzODU3MzA0YmU4NzQxLi5kNDJkMmUxMzA0NGU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oXG5AQCAtMTUsNiArMTUsMTAgQEAgaW50IHdyaXRlX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4gXHRcdCAgICAgIGNvbnN0IGNoYXIgKmJ1Zik7XG4gaW50IHdyaXRlX2Nncm91cF9maWxlX3BhcmVudChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuIFx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmKTtcbitpbnQgcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuK1x0XHQgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4raW50IHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4rXHRcdFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4gaW50IGNncm91cF9zZXR1cF9hbmRfam9pbihjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKTtcbiBpbnQgZ2V0X3Jvb3RfY2dyb3VwKHZvaWQpO1xuIGludCBjcmVhdGVfYW5kX2dldF9jZ3JvdXAoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtY2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbWNnLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jNTdiOTg0OTRjZmFiXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jXG5AQCAtMCwwICsxLDE1OCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy91c2VyLmhcdTAwM2VcbisjaWZuZGVmIFBBR0VfU0laRSAvKiBvbiBzb21lIGFyY2hzIGl0IGNvbWVzIGluIHN5cy91c2VyLmggKi9cbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNkZWZpbmUgUEFHRV9TSVpFIGdldHBhZ2VzaXplKClcbisjZW5kaWZcbitcbisjaW5jbHVkZSBcImNncm91cF9oZWxwZXJzLmhcIlxuKyNpbmNsdWRlIFwiYXJlbmFfbWVtY2cuc2tlbC5oXCJcbitcbisjZGVmaW5lIENHX1BBVEhcdFx0XCIvYXJlbmFfbWVtY2dcIlxuK1xuKy8qIEJ1ZGdldCB0aGUgYXJlbmEgZ2V0cyBvbiB0b3Agb2Ygd2hhdGV2ZXIgaXMgYWxyZWFkeSBjaGFyZ2VkIGFmdGVyIGxvYWQuICovXG4rI2RlZmluZSBBUkVOQV9CVURHRVRcdCg2NCAqIDEwMjQgKiAxMDI0KVxuK1xuK3N0YXRpYyB2b2lkIGR1bXBfbWVtY2coaW50ICgqcmQpKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjaGFyICosIHNpemVfdCkpXG4re1xuK1x0Y2hhciBidWZbNTEyXTtcbitcbitcdC8qXG4rXHQgKiBtZW1vcnkuY3VycmVudCByZWFkcyAwIG9uY2UgdGhlIGNoaWxkIGhhcyBsZWZ0IHRoZSBjZ3JvdXAsIHNvIGl0IG9ubHlcbitcdCAqIGNhcnJpZXMgaW5mb3JtYXRpb24gd2hlbiBkdW1wZWQgZnJvbSB0aGUgbGl2ZSBjaGlsZDsgbWVtb3J5LnBlYWsgYW5kXG4rXHQgKiBtZW1vcnkuZXZlbnRzIHN1cnZpdmUgdGhlIGNoaWxkIGFuZCB0ZWxsIHRoZSBzdG9yeSBlaXRoZXIgd2F5LlxuK1x0ICovXG4rXHRpZiAoIXJkKENHX1BBVEgsIFwibWVtb3J5LmN1cnJlbnRcIiwgYnVmLCBzaXplb2YoYnVmKSkpXG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIm1lbW9yeS5jdXJyZW50OiAlc1wiLCBidWYpO1xuK1x0aWYgKCFyZChDR19QQVRILCBcIm1lbW9yeS5tYXhcIiwgYnVmLCBzaXplb2YoYnVmKSkpXG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIm1lbW9yeS5tYXg6ICVzXCIsIGJ1Zik7XG4rXHRpZiAoIXJkKENHX1BBVEgsIFwibWVtb3J5LnBlYWtcIiwgYnVmLCBzaXplb2YoYnVmKSkpXG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIm1lbW9yeS5wZWFrOiAlc1wiLCBidWYpO1xuK1x0aWYgKCFyZChDR19QQVRILCBcIm1lbW9yeS5ldmVudHNcIiwgYnVmLCBzaXplb2YoYnVmKSkpXG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIm1lbW9yeS5ldmVudHM6XFxuJXNcIiwgYnVmKTtcbitcdGZmbHVzaChzdGRlcnIpO1xuK31cbitcbisvKiBSZWFkIG9uZSBrZXkgZnJvbSBhIGZsYXQga2V5ZWQgY2dyb3VwIGZpbGUsIGUuZy4gXCJvb21fa2lsbFwiIGluIG1lbW9yeS5ldmVudHMuICovXG4rc3RhdGljIGxvbmcgY2dfcmVhZF9rZXkoY29uc3QgY2hhciAqY2csIGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKmtleSlcbit7XG4rXHRjaGFyIGJ1Zls1MTJdLCAqcDtcbitcbitcdGlmIChyZWFkX2Nncm91cF9maWxlKGNnLCBmaWxlLCBidWYsIHNpemVvZihidWYpKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0cCA9IHN0cnN0cihidWYsIGtleSk7XG4rXHRpZiAoIXApXG4rXHRcdHJldHVybiAtMTtcbitcdHJldHVybiBzdHJ0b2wocCArIHN0cmxlbihrZXkpLCBOVUxMLCAxMCk7XG4rfVxuK1xuK3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtY2codm9pZClcbit7XG4rXHRpbnQgY2dyb3VwX2ZkID0gLTEsIHN0YXR1cywgZXJyO1xuK1x0Y29uc3QgbG9uZyBwcyA9IFBBR0VfU0laRTtcbitcdGNoYXIgYnVmWzY0XTtcbitcdHBpZF90IHBpZDtcbitcbitcdGVyciA9IHNldHVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNldHVwX2Nncm91cF9lbnZpcm9ubWVudFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y2dyb3VwX2ZkID0gY3JlYXRlX2FuZF9nZXRfY2dyb3VwKENHX1BBVEgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfRkQoY2dyb3VwX2ZkLCBcImNyZWF0ZV9hbmRfZ2V0X2Nncm91cFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBObyBtZW1vcnkgY29udHJvbGxlciAtXHUwMDNlIG5vdGhpbmcgdG8gdGVzdC4gKi9cbitcdGlmIChyZWFkX2Nncm91cF9maWxlKENHX1BBVEgsIFwibWVtb3J5LmN1cnJlbnRcIiwgYnVmLCBzaXplb2YoYnVmKSkpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiJXM6U0tJUDpubyBtZW1vcnkgY29udHJvbGxlclxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRwaWQgPSBmb3JrKCk7XG4rXHRpZiAoIUFTU0VSVF9HRShwaWQsIDAsIFwiZm9ya1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAocGlkID09IDApIHtcbitcdFx0c3RydWN0IGFyZW5hX21lbWNnICpjc2tlbDtcbitcdFx0X191MzIgaSwgbnBhZ2VzO1xuK1x0XHRjaGFyICpiYXNlO1xuK1x0XHRzaXplX3Qgc3o7XG4rXHRcdGxvbmcgY3VyO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBEbyBldmVyeXRoaW5nIGZyb20gdGhlIGNoaWxkOiB0aGUgYXJlbmEgdm1hIGlzIFZNX0RPTlRDT1BZIHNvXG4rXHRcdCAqIGl0IHdvdWxkIG5vdCBzdXJ2aXZlIGZvcmsoKSwgb25seSB0aGUgY2hpbGQgc2hvdWxkIGJlIHVuZGVyIHRoZVxuK1x0XHQgKiBsaW1pdCBzbyB0aGF0IGEgbWVtY2cgT09NIGNhbm5vdCBwaWNrIHRlc3RfcHJvZ3MsIGFuZCBhIG1hcCBpc1xuK1x0XHQgKiBjaGFyZ2VkIHRvIHRoZSBtZW1jZyBvZiB0aGUgdGFzayB0aGF0IGNyZWF0ZXMgaXQgLSBzbyBqb2luXG4rXHRcdCAqIGJlZm9yZSBsb2FkLiBUaGUgY2dyb3VwIHdvcmsgZGlyIGJlbG9uZ3MgdG8gdGhlIHBhcmVudCB0aGF0IHNldFxuK1x0XHQgKiB0aGUgZW52aXJvbm1lbnQgdXAsIHNvIHJlYWNoIGl0IHdpdGggdGhlIF9wYXJlbnQoKSBoZWxwZXJzLlxuK1x0XHQgKiBFcnJvcnMgYXJlIHJlcG9ydGVkIHRvIHRoZSBwYXJlbnQgdGhyb3VnaCB0aGUgZXhpdCBjb2RlLCBzaW5jZVxuK1x0XHQgKiBBU1NFUlRfKiBpbiBhIGZvcmtlZCBjaGlsZCBkb2VzIG5vdCByZWFjaCBpdC5cbitcdFx0ICovXG4rXHRcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwiJWRcIiwgZ2V0cGlkKCkpO1xuK1x0XHRpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsIFwiY2dyb3VwLnByb2NzXCIsIGJ1ZikpXG4rXHRcdFx0X2V4aXQoMik7XG4rXG4rXHRcdGNza2VsID0gYXJlbmFfbWVtY2dfX29wZW5fYW5kX2xvYWQoKTtcbitcdFx0aWYgKCFjc2tlbClcbitcdFx0XHRfZXhpdCgzKTtcbitcbitcdFx0YmFzZSA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUoY3NrZWwtXHUwMDNlbWFwcy5hcmVuYSwgXHUwMDI2c3opO1xuK1x0XHRpZiAoIWJhc2UpXG4rXHRcdFx0X2V4aXQoNCk7XG4rXHRcdG5wYWdlcyA9IGJwZl9tYXBfX21heF9lbnRyaWVzKGNza2VsLVx1MDAzZW1hcHMuYXJlbmEpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBDYXAgb25seSBub3csIGFmdGVyIGxvYWQ6IGV2ZXJ5dGhpbmcgYnV0IHRoZSBmYXVsdC1pbiBpc1xuK1x0XHQgKiBjaGFyZ2VkLCBzbyB0aGUgYXJlbmEgZ2V0cyBhIGZpeGVkIGJ1ZGdldCByZWdhcmRsZXNzIG9mIHdoYXRcbitcdFx0ICogdGhlIGxvYWQgaXRzZWxmIGNvc3QsIGFuZCB0aGUgbG9hZCBjYW4gbmV2ZXIgaGl0IHRoZSBsaW1pdC5cbitcdFx0ICovXG4rXHRcdGlmIChyZWFkX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCBcIm1lbW9yeS5jdXJyZW50XCIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuK1x0XHRcdF9leGl0KDUpO1xuK1x0XHRjdXIgPSBzdHJ0b2woYnVmLCBOVUxMLCAxMCk7XG4rXHRcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwiJWxkXCIsIGN1ciArIEFSRU5BX0JVREdFVCk7XG4rXHRcdGlmICh3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoQ0dfUEFUSCwgXCJtZW1vcnkubWF4XCIsIGJ1ZikpXG4rXHRcdFx0X2V4aXQoNik7XG4rXG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYWdlczsgaSsrKVxuK1x0XHRcdGJhc2VbKHNpemVfdClpICogcHNdID0gMTtcbitcdFx0LyogRmF1bHRlZCBldmVyeXRoaW5nIHdpdGhvdXQgZHlpbmc6IGR1bXAgd2h5IChvbmx5IHVuZGVyIC12KS4gKi9cbitcdFx0ZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlX3BhcmVudCk7XG4rXHRcdF9leGl0KDApO1xuK1x0fVxuK1xuK1x0aWYgKCFBU1NFUlRfRVEod2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCksIHBpZCwgXCJ3YWl0cGlkXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIEEgbm9uLXplcm8gZXhpdCBtZWFucyB0aGUgY2hpbGQgZmFpbGVkIHRvIHNldCB1cDsgdGhlIGNvZGUgc2F5cyB3aGVyZS4gKi9cbitcdGlmIChXSUZFWElURUQoc3RhdHVzKSBcdTAwMjZcdTAwMjYgV0VYSVRTVEFUVVMoc3RhdHVzKSkge1xuK1x0XHRBU1NFUlRfT0soV0VYSVRTVEFUVVMoc3RhdHVzKSwgXCJjaGlsZCBzZXR1cFwiKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogRmF1bHRpbmcgYSB2YWxpZCBhcmVuYSBhZGRyZXNzIHVudGlsIG1lbW9yeS5tYXggaXMgaGl0IG11c3Qgbm90IGxvb2tcbitcdCAqIGxpa2UgYW4gaW52YWxpZCBhY2Nlc3MuIFdpdGhvdXQgdGhlIGZpeCB0aGUgZmF1bHQgcGF0aCBhbGxvY2F0ZWQgd2l0aFxuK1x0ICogdGhlIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IsIHR1cm5lZCBpdHMgLUVOT01FTSBpbnRvIFZNX0ZBVUxUX1NJR1NFR1YsXG4rXHQgKiBhbmQgdGhlIGNoaWxkIGRpZWQgd2l0aCBTSUdTRUdWIG9uIGEgdmFsaWQgYWRkcmVzczsgbm93IGl0IGlzIGhhbmRsZWRcbitcdCAqIGJ5IHRoZSBtZW1jZyBPT00gcGF0aCBpbnN0ZWFkLiBBIFNJR0tJTEwgYWxvbmUgd291bGQgbm90IHByb3ZlIHRoZVxuK1x0ICogbWVtY2cgT09NIGtpbGxlciBkaWQgaXQgKGEgZ2xvYmFsIE9PTSBvciBhbiB1bnJlbGF0ZWQgY3Jhc2ggY291bGQgYWxzb1xuK1x0ICoga2lsbCB0aGUgY2hpbGQpLCBzbyBjaGVjayBtZW1vcnkuZXZlbnRzLm9vbV9raWxsLCB3aGljaCByZWNvcmRzIHRoZVxuK1x0ICogbWVtY2cgT09NIGFuZCBzdXJ2aXZlcyB0aGUgY2hpbGQuXG4rXHQgKi9cbitcdGlmICghQVNTRVJUX1RSVUUoV0lGU0lHTkFMRUQoc3RhdHVzKSwgXCJjaGlsZCBraWxsZWQgYnkgc2lnbmFsXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX0dFKGNnX3JlYWRfa2V5KENHX1BBVEgsIFwibWVtb3J5LmV2ZW50c1wiLCBcIm9vbV9raWxsXCIpLCAxLFxuK1x0XHQgICAgICAgXCJtZW1jZyBvb21fa2lsbFwiKSlcbitcdFx0ZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlKTtcbitvdXQ6XG4rXHRpZiAoY2dyb3VwX2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoY2dyb3VwX2ZkKTtcbitcdGNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1jZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi44ODI1OWNmZWEwNmI2XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuY1xuQEAgLTAsMCArMSwyNCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9hcmVuYV9jb21tb24uaFwiXG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpO1xuK1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCA1MDAwMCk7IC8qIG51bWJlciBvZiBwYWdlcyAqL1xuKyNpZmRlZiBfX1RBUkdFVF9BUkNIX2FybTY0XG4rXHRfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsIFx1MDAzY1x1MDAzYyAzMik7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi9cbisjZWxzZVxuK1x0X191bG9uZyhtYXBfZXh0cmEsIDB4MXVsbCBcdTAwM2NcdTAwM2MgNDQpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXG4rI2VuZGlmXG4rfSBhcmVuYSBTRUMoXCIubWFwc1wiKTtcbitcbitTRUMoXCJzeXNjYWxsXCIpXG4raW50IG5vb3Aodm9pZCAqY3R4KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDoyMzo1My4yMjc1MTMwNzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODExMjY5MDQyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBBcmVuYSBTdWJzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBga2VybmVsL2JwZi9hcmVuYS5jYCBhbmQgYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIHRoaXMgbmV3IGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBmdW5jdGlvbiBhbmQgaW50ZWdyYXRpbmcgaXQgaW50byBgYXJlbmFfdm1fZmF1bHRgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhlIGNvbW1lbnQgc3VnZ2VzdHMgaXQncyBoYW5kbGluZyBwYWdlIGFsbG9jYXRpb24gb3V0c2lkZSBvZiBhIGxvY2ssIHdoaWNoIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgcG90ZW50aWFsIGZvciBtZW1jZyBPT00ga2lsbGVyIGludGVyYWN0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBzaWduaWZpY2FudCBvbmUuIEkgYWxzbyBzZWUgYSBzZWxmdGVzdCwgYGFyZW5hX21lbWNnLmNgLCB3aGljaCBpcyBnb29kIHRvIGhhdmUuXG5cbk5vdywgbGV0IG1lIGRpZyBhIGJpdCBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMuIE15IHByaW1hcnkgZm9jdXMgaXMgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gTG9va2luZyBpbnRvIGBrZXJuZWwvYnBmL2FyZW5hLmNgIGFuZCBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBJIHNlZSB0aGF0IHRoZSBjaGFuZ2VzIGNlbnRlciBhcm91bmQgYGFyZW5hX3ZtX2ZhdWx0YCwgdGhlIEJQRiBhcmVuYSBtYXAgcGFnZSBmYXVsdCBoYW5kbGVyLCBhbmQgdGhlIG5ldyBoZWxwZXIsIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdGFyZ2V0IGBhcmVuYV92bV9mYXVsdGAuIEhvd2V2ZXIsIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIHRoYXQncyBub3QgaWRlYWwgZm9yIGZ1enppbmcuIEkgaGF2ZSB0byBmaW5kIHRoZSBlbnRyeXBvaW50LiBJcyBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgdGhlIHJpZ2h0IHRhcmdldD8gTm8sIHRoYXQncyBqdXN0IGFuIGludGVybmFsIGhlbHBlci4gSG1tLCB3aGF0IGFib3V0IGBicGZfYXJlbmFfbWFwX2FsbG9jYD8gT3IgcGVyaGFwcyB0aGUgbW1hcCBoYW5kbGVyIHJlbGF0ZWQgdG8gdGhlIGFyZW5hPyBJJ20gZ29pbmcgdG8gc2VhcmNoIGZvciBgYXJlbmFfdm1fb3BzYCBhbmQgYGFyZW5hX3ZtX2ZhdWx0YC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBvdmVydmlldyBvZiB3aGF0J3MgZXhwb3NlZCBhbmQgd2hlcmUgdGhlIHJlbGV2YW50IGNhbGxzIGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIyMSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI0OjMxLjM0MDIwNTYwOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM1ODgwNzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hX3ZtX2ZhdWx0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJlbmEuYz00NjQ9c3RhdGljIHZvaWQgYXJlbmFfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDc4LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0Nzk6c3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ4MC17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NTk1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYXJlbmFfdm1fb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTU5OS1cXHQuY2xvc2VcXHRcXHQ9IGFyZW5hX3ZtX2Nsb3NlLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2MDA6XFx0LmZhdWx0ICAgICAgICAgID0gYXJlbmFfdm1fZmF1bHQsXFxua2VybmVsL2JwZi9hcmVuYS5jLTYwMS19O1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmM9NDg9dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9tZW1fdXNhZ2Uodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jLTk5LVxcdCAqIFVzZXItc3BhY2UgZmF1bHQtaW46IHRvdWNoaW5nIHVuYWxsb2NhdGVkIGFyZW5hIHBhZ2VzIGFsbG9jYXRlcyB0aGVtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmM6MTAwOlxcdCAqIHRocm91Z2ggYXJlbmFfdm1fZmF1bHQoKS4gbGliYnBmIG1tYXAoKXMgdGhlIGFyZW5hIGF0IG1hcF9leHRyYSBkdXJpbmdcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy0xMDEtXFx0ICogbG9hZCwgc28gYnBmX21hcF9faW5pdGlhbF92YWx1ZSgpIGhhbmRzIGJhY2sgdGhhdCBiYXNlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDoyNDozMy4zNzYwOTIyNjJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjk1NDc0MjYyNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEFyZW5hIFZNIEZhdWx0IFBhdGgqKlxuXG5SaWdodCwgc28gdGhlIGBhcmVuYV92bV9mYXVsdGAgZnVuY3Rpb24gaXMgdGhlIG9uZSB0aGF0IGdldHMgaW52b2tlZCB3aGVuIGEgcGFnZSBmYXVsdCBvY2N1cnMgd2l0aGluIHRoZSBhcmVuYSBtZW1vcnkgcmVnaW9uLCBhbmQgdGhhdCdzIGFjY2Vzc2VkIHZpYSB0aGUgc3RhbmRhcmQgYHZtX29wZXJhdGlvbnNfc3RydWN0YC4gU3BlY2lmaWNhbGx5LCBJIGJlbGlldmUgaXQncyBnb2luZyB0byBiZSB0aGUgYC5mYXVsdGAgbWV0aG9kIHdpdGhpbiB0aGF0IHN0cnVjdC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSB3aGljaCBtbWFwIGhhbmRsZXIgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIGFyZW5hIG1lbW9yeSBtYXBwaW5ncyBpbml0aWFsbHkuIE15IG1vbmV5J3Mgb24gYGFyZW5hX21hcF9tbWFwYCwgYnV0IGxldCdzIHF1aWNrbHkgY29uZmlybSB0aGF0J3MgdGhlIG9uZS4gTm8gcG9pbnQgbWFraW5nIGFzc3VtcHRpb25zIGhlcmUuIEl0J3MgYmVzdCB0byB2ZXJpZnkgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM0NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjI2OjQyLjkyMzUyMTIyOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTMxNDk3NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hX3ZtX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmM9NDc5PXN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTU5NC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTk1OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYXJlbmFfdm1fb3BzID0ge1xcbmtlcm5lbC9icGYvYXJlbmEuYy01OTYtXFx0Lm9wZW5cXHRcXHQ9IGFyZW5hX3ZtX29wZW4sXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjM3PXN0YXRpYyBpbnQgYXJlbmFfbWFwX21tYXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjcyLVxcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05UQ09QWSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjY3MzpcXHR2bWEtXFx1MDAzZXZtX29wcyA9IFxcdTAwMjZhcmVuYV92bV9vcHM7XFxua2VybmVsL2JwZi9hcmVuYS5jLTY3NC1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MjY6NDUuMDU1MDI1MDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTk4MzI5ODMyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBNYXBwaW5nIE1lY2hhbmlzbSoqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgbWVtb3J5IG1hcHBpbmcgd29ya3MgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gdGhlIGBhcmVuYV9tYXBfbW1hcGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyB0aGUgZGVzaWduYXRlZCBtbWFwIGhhbmRsZXIgZm9yIHdoYXRldmVyIGFyZW5hIG9yIHJlZ2lvbiB3ZSdyZSBkZWFsaW5nIHdpdGguIFRoZSBrZXkgbm93IGlzIHRvIGZpZ3VyZSBvdXQgaXRzIHNjb3BlIGFuZCBhc3NpZ25tZW50LiBJcyBgYXJlbmFfbWFwX21tYXBgIGEgZnJlZXN0YW5kaW5nLCBub24tc3RhdGljIGZ1bmN0aW9uLCBvciBpcyBpdCBhY3R1YWxseSBwbHVnZ2VkIGludG8gYSBgYnBmX21hcF9vcHNgIHN0cnVjdHVyZT8gS25vd2luZyB0aGF0IHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCBob3cgaXQncyBpbnRlZ3JhdGVkIHdpdGggdGhlIEJQRiBzdWJzeXN0ZW0gYW5kIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBUaGF0IGRpc3RpbmN0aW9uIGlzIGNydWNpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MDMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozMTowNC44ODgwMTE0NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzk3ODM4ODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hX21hcF9tbWFwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJlbmEuYz02MDM9c3RhdGljIHVuc2lnbmVkIGxvbmcgYXJlbmFfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02MzYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjYzNzpzdGF0aWMgaW50IGFyZW5hX21hcF9tbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmtlcm5lbC9icGYvYXJlbmEuYy02Mzgte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTY4OD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJlbmFfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02OTItXFx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IGFyZW5hX21hcF9kaXJlY3RfdmFsdWVfYWRkcixcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjkzOlxcdC5tYXBfbW1hcCA9IGFyZW5hX21hcF9tbWFwLFxcbmtlcm5lbC9icGYvYXJlbmEuYy02OTQtXFx0Lm1hcF9nZXRfdW5tYXBwZWRfYXJlYSA9IGFyZW5hX2dldF91bm1hcHBlZF9hcmVhLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozMTowNy42ODU4NTU1MzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODczNDc0MzI1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzOlxuXG4qKkFuYWx5emluZyB0aGUgQlBGIE1hcCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBtZW1vcnkgaXMgbWFuYWdlZCB3aXRoaW4gdGhlIEJQRiBtYXAgY29udGV4dC4gSXQgc2VlbXMgbGlrZSBgYXJlbmFfbWFwX29wc2AgaXMgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIG1hcCBvcGVyYXRpb25zLiBUaGF0IG1ha2VzIHNlbnNlLCBhIGNvbnNpc3RlbnQgaW50ZXJmYWNlIGlzIGtleSBoZXJlLiBOb3csIHRoZSBhY3R1YWwgZW50cnkgcG9pbnQgZm9yIHRoZSBgbW1hcGAgc3lzY2FsbCwgd2hlbiBkZWFsaW5nIHdpdGggdGhlc2UgQlBGIG1hcHMsIGlzIGVpdGhlciBnb2luZyB0byBiZSB0aHJvdWdoIGBicGZfbWFwX21tYXBgIG9yIHNpbXBseSB0aGUgYG1tYXBgIHN5c2NhbGwgb24gdGhlIEJQRiBtYXAgZmlsZSBkZXNjcmlwdG9yLCBjb3JyZWN0PyBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIHNldCB1cCBhbmQgaWYgdGhlcmUncyBhbnkgaW5kaXJlY3Rpb24gaW52b2x2ZWQuIEFuZCwgSSdtIHRyeWluZyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZnVuY3Rpb24gYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzIGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIHRoZSBjdXJyZW50IG1vZHVsZS4gRXNzZW50aWFsbHksIGlzIGl0IGV4cG9ydGVkLCBvciBpcyBpdCBhIHN0YXRpYyBmdW5jdGlvbiB0aGF0J3MgaW50ZXJuYWwgdG8gdGhlIG1hcCBpbXBsZW1lbnRhdGlvbj8gS25vd2luZyB0aGUgc2NvcGUgb2YgdGhhdCBmdW5jdGlvbiB3aWxsIHNpZ25pZmljYW50bHkgaW1wYWN0IGhvdyBJIHRoaW5rIGFib3V0IG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjgxLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MzE6NTYuNDIwNjAyMDk4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzk1MTkxNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0yNzg1PWludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXFxuaW5jbHVkZS9saW51eC9icGYuaC0yNzg2LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XFxuaW5jbHVkZS9saW51eC9icGYuaDoyNzg3OnN0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtMjc4OC0jaWZkZWYgQ09ORklHX01FTUNHXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NDc5PXN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTUwMy1cXHRcXHRicGZfbWFwX21lbWNnX2VudGVyKFxcdTAwMjZhcmVuYS1cXHUwMDNlbWFwLCBcXHUwMDI2b2xkX21lbWNnLCBcXHUwMDI2bmV3X21lbWNnKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTA0OlxcdFxcdG5ld19wYWdlID0gYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZShtYXApO1xcbmtlcm5lbC9icGYvYXJlbmEuYy01MDUtXFx0XFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYxNT1pbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1LSAqL1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0NjpzdHJ1Y3QgcGFnZSAqYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjMxOjU4LjgxNTgwMzQ1N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjMwMTU3MDk1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgQlBGIE1hcCBBbGxvY2F0aW9uIGFuZCBBcmVuYSBBbGxvY2F0aW9uIFNjb3BlKipcblxuUmlnaHQsIHNvIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBpcyBleHBsaWNpdGx5ICpub3QqIGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQgaGFzIGV4dGVybmFsIGxpbmthZ2UuIEhtbSwgb2theSwgSSB1bmRlcnN0YW5kIHdoYXQgdGhlIGNvZGUgaXMgZG9pbmcgaW4gdGhhdCBmdW5jdGlvbiwgc28gSSdtIHRoaW5raW5nLi4uIE5vdywgaXMgYGFyZW5hX21hcF9hbGxvY2Agc2ltaWxhcmx5IGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIGl0cyBwcmVzdW1lZCBzY29wZT8gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGl0cyBkZWNsYXJhdGlvbiBhbmQgdXNhZ2UgY29udGV4dC4gS25vd2luZyB0aGF0IHdvdWxkIHByb3ZpZGUgc29tZSB1c2VmdWwgZGV0YWlscyBhYm91dCB0aGUgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTkxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MzI6MTEuMTE3Mzc3ODcxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTMzNzM5NzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hX21hcF9hbGxvY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmM9MjU5PXN0YXRpYyBpbnQgcG9wdWxhdGVfcGd0YWJsZV9leGNlcHRfcHRlKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTI2NS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjY2OnN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYXJlbmFfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjcte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTY4OD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJlbmFfbWFwX29wcyA9IHtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjg5LVxcdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjkwOlxcdC5tYXBfYWxsb2MgPSBhcmVuYV9tYXBfYWxsb2MsXFxua2VybmVsL2JwZi9hcmVuYS5jLTY5MS1cXHQubWFwX2ZyZWUgPSBhcmVuYV9tYXBfZnJlZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MzI6MTQuMDUxMTIzMzk4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNzU5NDYxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIE1hcCBBbGxvY2F0aW9uIFRob3VnaHRzKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIG1hcCBhbGxvY2F0aW9uIGZsb3cgaGVyZS4gRmlyc3QgdGhvdWdodDogYGFyZW5hX21hcF9hbGxvY2AgaXMgc3RhdGljLCB3aGljaCBsaW1pdHMgaXRzIHVzZWZ1bG5lc3MuIFRoZW4sIEkgcmVtZW1iZXIgdGhhdCBgbWFwX2NyZWF0ZWAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgbWFwIGNyZWF0aW9uLiBBbHNvLCBgYnBmX21hcF9tbWFwYCBpcyB0aGUgbW1hcCBlbnRyeSBwb2ludCwgYWxzbyBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLlxuXG5UaGUgZmF1bHQgaGFuZGxlciwgYGFyZW5hX3ZtX2ZhdWx0YCwgaXMgYWxzbyBzdGF0aWMsIHNvIEkgY2FuIHByb2JhYmx5IGlnbm9yZSB0aGF0IGZvciBub3cuIFRoZSBrZXkgaGVyZSBpcyB0byBmaW5kIHRoZSBub24tc3RhdGljIEFQSXMuIE5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQsIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBpcyBkZWZpbml0ZWx5ICpub3QqIHN0YXRpYywgYW5kIHRoYXQgc2VlbXMgcmVsZXZhbnQuIFNob3VsZCBJIGFsc28gaW5jbHVkZSBgYnBmX21hcF9tbWFwYCBvciBgbWFwX2NyZWF0ZWA/IEhtbSwgbm8sIGZvY3VzaW5nIG9uIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBtYWtlcyBtb3JlIHNlbnNlLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBmb3IgYGJwZl9tYXBfbW1hcGAgdG8gc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgZWxzZSBJIHNob3VsZCBrbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM5NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozMjoyMy4zMjcwNzM3MjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTY2ODg2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX21hcF9tbWFwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJlbmEuYz02Mzc9c3RhdGljIGludCBhcmVuYV9tYXBfbW1hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02NjYtXFx0LypcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjY3OlxcdCAqIGJwZl9tYXBfbW1hcCgpIGNoZWNrcyB0aGF0IGl0J3MgYmVpbmcgbW1hcGVkIGFzIFZNX1NIQVJFRCBhbmRcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjY4LVxcdCAqIGNsZWFycyBWTV9NQVlFWEVDLiBTZXQgVk1fRE9OVEVYUEFORCB0byBhdm9pZCBwb3RlbnRpYWwgY2hhbmdlXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMDY1PXN0YXRpYyBzc2l6ZV90IGJwZl9kdW1teV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwNzQtLyogY2FsbGVkIGZvciBhbnkgZXh0cmEgbWVtb3J5LW1hcHBlZCByZWdpb25zIChleGNlcHQgaW5pdGlhbCkgKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMDc1OnN0YXRpYyB2b2lkIGJwZl9tYXBfbW1hcF9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwNzYte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTA4My0vKiBjYWxsZWQgZm9yIGFsbCB1bm1hcHBlZCBtZW1vcnkgcmVnaW9uIChpbmNsdWRpbmcgaW5pdGlhbCkgKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMDg0OnN0YXRpYyB2b2lkIGJwZl9tYXBfbW1hcF9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDg1LXtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwOTEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTA5MjpzdGF0aWMgdm1fZmF1bHRfdCBicGZfbWFwX21tYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTA5My17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMDk5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYnBmX21hcF9kZWZhdWx0X3Ztb3BzID0ge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjExMDA6XFx0Lm9wZW5cXHRcXHQ9IGJwZl9tYXBfbW1hcF9vcGVuLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjExMDE6XFx0LmNsb3NlXFx0XFx0PSBicGZfbWFwX21tYXBfY2xvc2UsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTEwMi19O1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTEwND1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGJwZl9tYXBfbGF6eV92bW9wcyA9IHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMTA1OlxcdC5vcGVuXFx0XFx0PSBicGZfbWFwX21tYXBfb3BlbixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMTA2OlxcdC5jbG9zZVxcdFxcdD0gYnBmX21hcF9tbWFwX2Nsb3NlLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjExMDc6XFx0LmZhdWx0XFx0XFx0PSBicGZfbWFwX21tYXBfZmF1bHQsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTEwOC19O1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTExMDktXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTExMDpzdGF0aWMgaW50IGJwZl9tYXBfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTExMS17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMTkyPWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnBmX21hcF9mb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTE5OC1cXHQud3JpdGVcXHRcXHQ9IGJwZl9kdW1teV93cml0ZSxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMTk5OlxcdC5tbWFwXFx0XFx0PSBicGZfbWFwX21tYXAsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTIwMC1cXHQucG9sbFxcdFxcdD0gYnBmX21hcF9wb2xsLFxcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmM9NDg0PXN0YXRpYyB2b2lkIHByaW50X2hleChjb25zdCBjaGFyICpkYXRhLCBpbnQgZGF0YV9zeilcXG4tLVxcbnRvb2xzL2JwZi9icGZ0b29sL2dlbi5jLTUwMi1cXG50b29scy9icGYvYnBmdG9vbC9nZW4uYzo1MDM6c3RhdGljIHNpemVfdCBicGZfbWFwX21tYXBfc3ooY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcXG50b29scy9icGYvYnBmdG9vbC9nZW4uYy01MDQte1xcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmM9NjYxPXN0YXRpYyB2b2lkIGNvZGVnZW5fZGVzdHJveShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSlcXG4tLVxcbnRvb2xzL2JwZi9icGZ0b29sL2dlbi5jLTY4OS1cXHRcXHRcXHRwcmludGYoXFxcIlxcXFx0c2tlbF9mcmVlX21hcF9kYXRhKHNrZWwtXFx1MDAzZSUxJHMsIHNrZWwtXFx1MDAzZW1hcHMuJTEkcy5pbml0aWFsX3ZhbHVlLCAlMiR6dSk7XFxcXG5cXFwiLFxcbnRvb2xzL2JwZi9icGZ0b29sL2dlbi5jOjY5MDpcXHRcXHRcXHQgICAgICAgaWRlbnQsIGJwZl9tYXBfbW1hcF9zeihtYXApKTtcXG50b29scy9icGYvYnBmdG9vbC9nZW4uYy02OTEtXFx0XFx0Y29kZWdlbihcXFwiXFxcXFxcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmM9NzA0PXN0YXRpYyBpbnQgZ2VuX3RyYWNlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lLCBjb25zdCBjaGFyICpoZWFkZXJfZ3VhcmQpXFxuLS1cXG50b29scy9icGYvYnBmdG9vbC9nZW4uYy03NzktXFx0XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFxcblxcXFxcXG50b29scy9icGYvYnBmdG9vbC9nZW4uYzo3ODA6XFx0XFx0XFx0XFxcIiwgaWRlbnQsIGJwZl9tYXBfbW1hcF9zeihtYXApKTtcXG50b29scy9icGYvYnBmdG9vbC9nZW4uYy03ODEtXFx0fVxcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMtODgwLVxcdFxcdFxcdFxcXCIsXFxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmM6ODgxOlxcdFxcdFxcdGlkZW50LCBicGZfbWFwX21tYXBfc3oobWFwKSk7XFxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMtODgyLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMtODk2LVxcdFxcdFxcdFxcXCIsXFxudG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmM6ODk3OlxcdFxcdCAgICAgICBpZGVudCwgYnBmX21hcF9tbWFwX3N6KG1hcCksIG1tYXBfZmxhZ3MpO1xcbnRvb2xzL2JwZi9icGZ0b29sL2dlbi5jLTg5OC1cXHR9XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTE4Mjg9c3RhdGljIHNpemVfdCBhcnJheV9tYXBfbW1hcF9zeih1bnNpZ25lZCBpbnQgdmFsdWVfc3osIHVuc2lnbmVkIGludCBtYXhfZW50cmllcylcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTgzNy1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjE4Mzg6c3RhdGljIHNpemVfdCBicGZfbWFwX21tYXBfc3ooY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTE4Mzkte1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xODUyLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTg1MzpzdGF0aWMgaW50IGJwZl9tYXBfbW1hcF9yZXNpemUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc2l6ZV90IG9sZF9zeiwgc2l6ZV90IG5ld19zeilcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTE4NTQte1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYz0xOTc3PWJwZl9vYmplY3RfX2luaXRfaW50ZXJuYWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGVudW0gbGliYnBmX21hcF90eXBlIHR5cGUsXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIwMTgtXFxudG9vbHMvbGliL2JwZi9saWJicGYuYzoyMDE5OlxcdG1tYXBfc3ogPSBicGZfbWFwX21tYXBfc3oobWFwKTtcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIwMjAtXFx0bWFwLVxcdTAwM2VtbWFwZWQgPSBtbWFwKE5VTEwsIG1tYXBfc3osIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTMwMjA9c3RhdGljIGludCBpbml0X2FyZW5hX21hcF9kYXRhKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTMwMjctXFxudG9vbHMvbGliL2JwZi9saWJicGYuYzozMDI4OlxcdG1tYXBfc3ogPSBicGZfbWFwX21tYXBfc3oobWFwKTtcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTMwMjktXFx0aWYgKGRhdGFfYWxsb2Nfc3ogXFx1MDAzZSBtbWFwX3N6KSB7XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTUzMjU9YnBmX29iamVjdF9fcG9wdWxhdGVfaW50ZXJuYWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTUzNjgtXFx0ICovXFxudG9vbHMvbGliL2JwZi9saWJicGYuYzo1MzY5OlxcdG1tYXBfc3ogPSBicGZfbWFwX21tYXBfc3oobWFwKTtcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTUzNzAtXFx0aWYgKG1hcC1cXHUwMDNlZGVmLm1hcF9mbGFncyBcXHUwMDI2IEJQRl9GX01NQVBBQkxFKSB7XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTU2NDU9YnBmX29iamVjdF9fY3JlYXRlX21hcHMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNTcyMS1cXHRcXHRcXHRcXHRtYXAtXFx1MDAzZW1tYXBlZCA9IG1tYXAoKHZvaWQgKikobG9uZyltYXAtXFx1MDAzZW1hcF9leHRyYSxcXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjU3MjI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgYnBmX21hcF9tbWFwX3N6KG1hcCksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy01NzIzLVxcdFxcdFxcdFxcdFxcdFxcdCAgIG1hcC1cXHUwMDNlbWFwX2V4dHJhID8gTUFQX1NIQVJFRCB8IE1BUF9GSVhFRCA6IE1BUF9TSEFSRUQsXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTc0NzY9c3RhdGljIGludCBicGZfb2JqZWN0X19yZWxvY2F0ZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICp0YXJnX2J0Zl9wYXRoKVxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy03NDk1LVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6NzQ5NjpcXHRcXHRvYmotXFx1MDAzZWFyZW5hX2RhdGFfb2ZmID0gYnBmX21hcF9tbWFwX3N6KGFyZW5hX21hcCkgLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNzQ5Ny1cXHRcXHRcXHRcXHQgICAgICByb3VuZHVwKG9iai1cXHUwMDNlYXJlbmFfZGF0YV9zeiwgc3lzY29uZihfU0NfUEFHRV9TSVpFKSk7XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTk1OTA9c3RhdGljIHZvaWQgYnBmX21hcF9fZGVzdHJveShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy05NjAwLVxcdGlmIChtYXAtXFx1MDAzZW1tYXBlZCBcXHUwMDI2XFx1MDAyNiBtYXAtXFx1MDAzZW1tYXBlZCAhPSBtYXAtXFx1MDAzZW9iai1cXHUwMDNlYXJlbmFfZGF0YSlcXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjk2MDE6XFx0XFx0bXVubWFwKG1hcC1cXHUwMDNlbW1hcGVkLCBicGZfbWFwX21tYXBfc3oobWFwKSk7XFxudG9vbHMvbGliL2JwZi9saWJicGYuYy05NjAyLVxcdG1hcC1cXHUwMDNlbW1hcGVkID0gTlVMTDtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9MTEwMjM9aW50IGJwZl9tYXBfX3NldF92YWx1ZV9zaXplKHN0cnVjdCBicGZfbWFwICptYXAsIF9fdTMyIHNpemUpXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTExMDM1LVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTEwMzY6XFx0XFx0bW1hcF9vbGRfc3ogPSBicGZfbWFwX21tYXBfc3oobWFwKTtcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTExMDM3LVxcdFxcdG1tYXBfbmV3X3N6ID0gYXJyYXlfbWFwX21tYXBfc3ooc2l6ZSwgbWFwLVxcdTAwM2VkZWYubWF4X2VudHJpZXMpO1xcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTEwMzg6XFx0XFx0ZXJyID0gYnBmX21hcF9tbWFwX3Jlc2l6ZShtYXAsIG1tYXBfb2xkX3N6LCBtbWFwX25ld19zeik7XFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xMTAzOS1cXHRcXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjMyOjI1LjUyMzc2NzQxN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDI3ODUwODAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBCUEYgTWFwIE1tYXAgRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBtZW1vcnkgbWFwcGluZyB3b3JrcyB3aXRoIEJQRiBtYXBzLiBJJ20gc3RhcnRpbmcgd2l0aCBgYnBmX21hcF9tbWFwYC4gSSBzZWUgaXQncyBzdGF0aWMgd2l0aGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIEFoLCByaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gVGhlIGFjdHVhbCBzeXNjYWxsIGlzIGBtbWFwYCwgYW5kIGl0IG9wZXJhdGVzIG9uIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIG1hcCwgYW5kICp0aGF0KiBwYXRoIGdvZXMgdGhyb3VnaCBgYnBmX21hcF9tbWFwYC4gR290IGl0LlxuXG5Ob3csIHdoZXJlIGRvZXMgdGhpcyB3aG9sZSBtYXAgY3JlYXRpb24gcHJvY2VzcyBiZWdpbj8gVGhlIEFQSSBlbnRyeSBwb2ludOKApnRoYXQgd291bGQgYmUgYG1hcF9jcmVhdGVgLiBUaW1lIHRvIGp1bXAgYmFjayBpbnRvIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgYW5kIHRha2UgYSBsb29rIGF0IGBtYXBfY3JlYXRlYC4gTGV0J3Mgc2VlIGhvdyB0aGlzIGFsbCBjb25uZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NTEsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozMjo0NS44MDIyNzgyMDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjQ4Mzk2NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFwX2NyZWF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDI0NjQgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9hcnJheS5yc3Q9MTQzPUJQRl9NQVBfVFlQRV9BUlJBWVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2FycmF5LnJzdC0xNDUtXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2FycmF5LnJzdDoxNDY6VGhpcyBzbmlwcGV0IHNob3dzIGhvdyB0byBjcmVhdGUgYW4gYXJyYXksIHVzaW5nIGBgYnBmX21hcF9jcmVhdGVfb3B0c2BgIHRvXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2FycmF5LnJzdC0xNDctc2V0IGZsYWdzLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2FycmF5LnJzdC0xNTYtICAgICAgICAgICAgaW50IGZkO1xcbkRvY3VtZW50YXRpb24vYnBmL21hcF9hcnJheS5yc3Q6MTU3OiAgICAgICAgICAgIExJQkJQRl9PUFRTKGJwZl9tYXBfY3JlYXRlX29wdHMsIG9wdHMsIC5tYXBfZmxhZ3MgPSBCUEZfRl9NTUFQQUJMRSk7XFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2FycmF5LnJzdC0xNTgtXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2FycmF5LnJzdDoxNTk6ICAgICAgICAgICAgZmQgPSBicGZfbWFwX2NyZWF0ZShCUEZfTUFQX1RZUEVfQVJSQVksXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2FycmF5LnJzdC0xNjAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiZXhhbXBsZV9hcnJheVxcXCIsICAgICAgIC8qIG5hbWUgKi9cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9ibG9vbV9maWx0ZXIucnN0PTE0Mz11c2Vyc3BhY2U6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfYmxvb21fZmlsdGVyLnJzdC0xNDgtICAgIHtcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfYmxvb21fZmlsdGVyLnJzdDoxNDk6ICAgICAgICAgICAgTElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgb3B0cyxcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfYmxvb21fZmlsdGVyLnJzdC0xNTAtICAgICAgICAgICAgICAgICAgICAgICAgLm1hcF9leHRyYSA9IDMpOyAgICAgICAgICAgICAvKiBudW1iZXIgb2YgaGFzaGVzICovXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Jsb29tX2ZpbHRlci5yc3QtMTUxLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9ibG9vbV9maWx0ZXIucnN0OjE1MjogICAgICAgICAgICByZXR1cm4gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX0JMT09NX0ZJTFRFUixcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfYmxvb21fZmlsdGVyLnJzdC0xNTMtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJpcHY2X2Jsb29tXFxcIiwgICAgICAvKiBuYW1lICovXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfaGFzaC5yc3Q9MzI9c2hhcmVkIGFjcm9zcyBDUFVzIGJ1dCBpdCBpcyBwb3NzaWJsZSB0byByZXF1ZXN0IGEgcGVyIENQVSBMUlUgbGlzdCB3aXRoXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2hhc2gucnN0OjMzOnRoZSBgYEJQRl9GX05PX0NPTU1PTl9MUlVgYCBmbGFnIHdoZW4gY2FsbGluZyBgYGJwZl9tYXBfY3JlYXRlYGAuICBUaGVcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfaGFzaC5yc3QtMzQtZm9sbG93aW5nIHRhYmxlIG91dGxpbmVzIHRoZSBwcm9wZXJ0aWVzIG9mIExSVSBtYXBzIGRlcGVuZGluZyBvbiB0aGUgYVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX29mX21hcHMucnN0PTkzPVRoaXMgc25pcHBldCBzaG93cyBob3cgdG8gY3JlYXRlIGFuIGFycmF5IGJhc2VkIG91dGVyIG1hcDpcXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9vZl9tYXBzLnJzdC05Ny0gICAgaW50IGNyZWF0ZV9vdXRlcl9hcnJheShpbnQgaW5uZXJfZmQpIHtcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfb2ZfbWFwcy5yc3Q6OTg6ICAgICAgICAgICAgTElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgb3B0cywgLmlubmVyX21hcF9mZCA9IGlubmVyX2ZkKTtcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfb2ZfbWFwcy5yc3QtOTktICAgICAgICAgICAgaW50IGZkO1xcbkRvY3VtZW50YXRpb24vYnBmL21hcF9vZl9tYXBzLnJzdC0xMDAtXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX29mX21hcHMucnN0OjEwMTogICAgICAgICAgICBmZCA9IGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9BUlJBWV9PRl9NQVBTLFxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9vZl9tYXBzLnJzdC0xMDItICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiZXhhbXBsZV9hcnJheVxcXCIsICAgICAgIC8qIG5hbWUgKi9cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9vZl9tYXBzLnJzdD0xMTE9VGhpcyBzbmlwcGV0IHNob3dzIGhvdyB0byBhZGQgYW4gaW5uZXIgbWFwIHRvIGFuIG91dGVyIG1hcDpcXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9vZl9tYXBzLnJzdC0xMTctXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX29mX21hcHMucnN0OjExODogICAgICAgICAgICBmZCA9IGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9ERVZNQVAsIG5hbWUsXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX29mX21hcHMucnN0LTExOS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihfX3UzMiksIHNpemVvZihfX3UzMiksIDI1NiwgTlVMTCk7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfcXVldWVfc3RhY2sucnN0PTEyOD11c2Vyc3BhY2U6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfcXVldWVfc3RhY2sucnN0LTEzMy0gICAge1xcbkRvY3VtZW50YXRpb24vYnBmL21hcF9xdWV1ZV9zdGFjay5yc3Q6MTM0OiAgICAgICAgICAgIHJldHVybiBicGZfbWFwX2NyZWF0ZShCUEZfTUFQX1RZUEVfUVVFVUUsXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3F1ZXVlX3N0YWNrLnJzdC0xMzUtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJzYW1wbGVfcXVldWVcXFwiLCAvKiBuYW1lICovXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3Q9NDQ0PXZlcmRpY3QgcHJvZ3JhbSwgYXMgd2VsbCBhcyBhZGQgYSBzb2NrZXQgZW50cnkuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfc29ja21hcC5yc3QtNDUyLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9zb2NrbWFwLnJzdDo0NTM6XFx0XFx0bWFwID0gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1NPQ0tNQVAsIE5VTEwsIHNpemVvZihpbnQpLCBzaXplb2YoaW50KSwgMSwgTlVMTCk7XFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3NvY2ttYXAucnN0LTQ1NC1cXHRcXHRpZiAobWFwIFxcdTAwM2MgMCkge1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3Q9NjA9Rm9yIG1vcmUgY29udGV4dCBvbiBET05UQ0FDSEUsIHBsZWFzZSBzZWUgdGhlc2UgTGludXggY29tbWl0IGhlYWRlcnM6XFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3QtNjEtXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3Q6NjI6LSBPdmVydmlldzogIDlhZDYzNDQ1NjhjYzMgKFxcXCJtbS9maWxlbWFwOiBjaGFuZ2UgZmlsZW1hcF9jcmVhdGVfZm9saW8oKVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0LTYzLSAgdG8gdGFrZSBhIHN0cnVjdCBraW9jYlxcXCIpXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2guaD0yODc9aW50IGhhc2hfX21hcF9rZXJuZWxfcGFnZSh1bnNpZ25lZCBsb25nIGVhLCB1bnNpZ25lZCBsb25nIHBhLCBwZ3Byb3RfdCBwcm90KTtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2guaDoyODg6ZXh0ZXJuIGludCBfX21lbWluaXQgaGFzaF9fdm1lbW1hcF9jcmVhdGVfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC5oLTI4OS1cXHRcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oPTEwMTM9dm9pZCB1bm1hcF9rZXJuZWxfcGFnZSh1bnNpZ25lZCBsb25nIHZhKTtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaC0xMDE0LVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oOjEwMTU6c3RhdGljIGlubGluZSBpbnQgX19tZW1pbml0IHZtZW1tYXBfY3JlYXRlX21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCxcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaC0xMDE2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTAxOS1cXHRpZiAocmFkaXhfZW5hYmxlZCgpKVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oOjEwMjA6XFx0XFx0cmV0dXJuIHJhZGl4X192bWVtbWFwX2NyZWF0ZV9tYXBwaW5nKHN0YXJ0LCBwYWdlX3NpemUsIHBoeXMpO1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oOjEwMjE6XFx0cmV0dXJuIGhhc2hfX3ZtZW1tYXBfY3JlYXRlX21hcHBpbmcoc3RhcnQsIHBhZ2Vfc2l6ZSwgcGh5cyk7XFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTAyMi19XFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3JhZGl4Lmg9MzE5PXN0cnVjdCBkZXZfcGFnZW1hcDtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3JhZGl4Lmg6MzIwOmV4dGVybiBpbnQgX19tZW1pbml0IHJhZGl4X192bWVtbWFwX2NyZWF0ZV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9yYWRpeC5oLTMyMS1cXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC82NC9wZ3RhYmxlLmg9MTQ5PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdlX3B0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvNjQvcGd0YWJsZS5oLTIwMC1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoLzY0L3BndGFibGUuaDoyMDE6ZXh0ZXJuIGludCBfX21lbWluaXQgdm1lbW1hcF9jcmVhdGVfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvNjQvcGd0YWJsZS5oLTIwMi1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF9wZ3RhYmxlLmMtMTA2LSAqL1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3BndGFibGUuYzoxMDc6aW50IF9fbWVtaW5pdCBoYXNoX192bWVtbWFwX2NyZWF0ZV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfcGd0YWJsZS5jLTEwOC1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jPTk1ND1zdGF0aWMgaW50IF9fbWFwX2tlcm5lbF9wYWdlX25pZCh1bnNpZ25lZCBsb25nIGVhLCB1bnNpZ25lZCBsb25nIHBhLFxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYy05NjAtXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYzo5NjE6aW50IF9fbWVtaW5pdCByYWRpeF9fdm1lbW1hcF9jcmVhdGVfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF9wZ3RhYmxlLmMtOTYyLVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplLFxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYz0yMDI9c3RhdGljIGludCBfX21lbWluaXQgX192bWVtbWFwX3BvcHVsYXRlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMtMjY0LVxcbmFyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmM6MjY1OlxcdFxcdHJjID0gdm1lbW1hcF9jcmVhdGVfbWFwcGluZyhzdGFydCwgcGFnZV9zaXplLCBfX3BhKHApKTtcXG5hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jLTI2Ni1cXHRcXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL2Jvb2szZV9wZ3RhYmxlLmMtMjItICovXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9ib29rM2VfcGd0YWJsZS5jOjIzOmludCBfX21lbWluaXQgdm1lbW1hcF9jcmVhdGVfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvYm9vazNlX3BndGFibGUuYy0yNC1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmM9MTMwMT1zdGF0aWMgaW50IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTMyMy0vKipcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMzI0OiAqIGdtYXBfY3JlYXRlX3NoYWRvdygpIC0gQ3JlYXRlL2ZpbmQgYSBzaGFkb3cgZ3Vlc3QgYWRkcmVzcyBzcGFjZS5cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMzI1LSAqIEBtYzogVGhlIGNhY2hlIHRvIHVzZSB0byBhbGxvY2F0ZSBkYXQgdGFibGVzLlxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTM0MC0gKi9cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMzQxOnN0cnVjdCBnbWFwICpnbWFwX2NyZWF0ZV9zaGFkb3coc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpwYXJlbnQsXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTM0Mi1cXHRcXHRcXHRcXHR1bmlvbiBhc2NlIGFzY2UsIGludCBlZGF0X2xldmVsKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmg9MTA4PXZvaWQgX2dtYXBfaGFuZGxlX3ZzaWVfdW5zaGFkb3dfZXZlbnQoc3RydWN0IGdtYXAgKnBhcmVudCwgZ2ZuX3QgZ2ZuKTtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuaDoxMDk6c3RydWN0IGdtYXAgKmdtYXBfY3JlYXRlX3NoYWRvdyhzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKmdtYXAsXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmgtMTEwLVxcdFxcdFxcdFxcdHVuaW9uIGFzY2UgYXNjZSwgaW50IGVkYXRfbGV2ZWwpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTMwMD1zdGF0aWMgc3RydWN0IGdtYXAgKmFjcXVpcmVfZ21hcF9zaGFkb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMzI5LWFnYWluOlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEzMzA6XFx0Z21hcCA9IGdtYXBfY3JlYXRlX3NoYWRvdyh2Y3B1LVxcdTAwM2VhcmNoLm1jLCB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZ21hcCwgYXNjZSwgZWRhdCk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTMzMS1cXHRpZiAoSVNfRVJSKGdtYXApKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmg9MjM4PXN0YXRpYyBpbmxpbmUgdTMyIGVmaTY0X2NvbnZlcnRfc3RhdHVzKGVmaV9zdGF0dXNfdCBzdGF0dXMpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lZmkuaC0yNTYtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmg6MjU3OiNkZWZpbmUgX19lZmk2NF9hcmdtYXBfY3JlYXRlX2V2ZW50KHR5cGUsIHRwbCwgZiwgYywgZXZlbnQpXFx0XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VmaS5oLTI1OC1cXHQoKHR5cGUpLCAodHBsKSwgKGYpLCAoYyksIGVmaTY0X3plcm9fdXBwZXIoZXZlbnQpKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vaW9tYXAuaD0xNj12b2lkIF9faW9tZW0gKl9faW9tYXBfbG9jYWxfcGZuX3Byb3QodW5zaWduZWQgbG9uZyBwZm4sIHBncHJvdF90IHByb3QpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2lvbWFwLmgtMTctXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vaW9tYXAuaDoxODppbnQgaW9tYXBfY3JlYXRlX3djKHJlc291cmNlX3NpemVfdCBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90ICpwcm90KTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb21hcC5oLTE5LVxcbi0tXFxuYXJjaC94ODYvbW0vaW9tYXBfMzIuYz0xMT1zdGF0aWMgaW50IGlzX2lvX21hcHBpbmdfcG9zc2libGUocmVzb3VyY2Vfc2l6ZV90IGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4tLVxcbmFyY2gveDg2L21tL2lvbWFwXzMyLmMtMjAtXFxuYXJjaC94ODYvbW0vaW9tYXBfMzIuYzoyMTppbnQgaW9tYXBfY3JlYXRlX3djKHJlc291cmNlX3NpemVfdCBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90ICpwcm90KVxcbmFyY2gveDg2L21tL2lvbWFwXzMyLmMtMjIte1xcbi0tXFxuYXJjaC94ODYvbW0vaW9tYXBfMzIuYy0zOC19XFxuYXJjaC94ODYvbW0vaW9tYXBfMzIuYzozOTpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9jcmVhdGVfd2MpO1xcbmFyY2gveDg2L21tL2lvbWFwXzMyLmMtNDAtXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmM9MTAwPXN0cnVjdCBmZmFfZHJ2X2luZm8ge1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jLTEwOS1cXHRib29sIG1zZ19kaXJlY3RfcmVxMl9zdXBwO1xcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYzoxMTA6XFx0Ym9vbCBiaXRtYXBfY3JlYXRlZDtcXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmMtMTExLVxcdGJvb2wgYnVzX25vdGlmaWVyX3JlZ2lzdGVyZWQ7XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmM9ODI1PXN0YXRpYyBpbnQgZmZhX21lbW9yeV9yZWNsYWltKHU2NCBnX2hhbmRsZSwgdTMyIGZsYWdzKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jLTg0MC1cXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmM6ODQxOnN0YXRpYyBpbnQgZmZhX25vdGlmaWNhdGlvbl9iaXRtYXBfY3JlYXRlKHZvaWQpXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jLTg0Mi17XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmM9MjA1Nz1zdGF0aWMgdm9pZCBmZmFfbm90aWZpY2F0aW9uc19jbGVhbnVwKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmMtMjA2NC1cXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmM6MjA2NTpcXHRpZiAoZHJ2X2luZm8tXFx1MDAzZWJpdG1hcF9jcmVhdGVkKSB7XFxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jLTIwNjYtXFx0XFx0ZmZhX25vdGlmaWNhdGlvbl9iaXRtYXBfZGVzdHJveSgpO1xcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYzoyMDY3OlxcdFxcdGRydl9pbmZvLVxcdTAwM2ViaXRtYXBfY3JlYXRlZCA9IGZhbHNlO1xcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYy0yMDY4LVxcdH1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYz0yMDcyPXN0YXRpYyB2b2lkIGZmYV9ub3RpZmljYXRpb25zX3NldHVwKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmMtMjA3Ny1cXHRpZiAoIXJldCkge1xcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYzoyMDc4OlxcdFxcdHJldCA9IGZmYV9ub3RpZmljYXRpb25fYml0bWFwX2NyZWF0ZSgpO1xcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYy0yMDc5LVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYy0yMDgzLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9kcml2ZXIuYzoyMDg0OlxcdFxcdGRydl9pbmZvLVxcdTAwM2ViaXRtYXBfY3JlYXRlZCA9IHRydWU7XFxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jLTIwODUtXFx0fVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jPTE3NDE9c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9vcHMgeGVfZHJtX3BhZ2VtYXBfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE3NDgtLyoqXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE3NDk6ICogeGVfcGFnZW1hcF9jcmVhdGUoKSAtIENyZWF0ZSBhIHN0cnVjdCB4ZV9wYWdlbWFwIG9iamVjdFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xNzUwLSAqIEB4ZTogVGhlIHhlIGRldmljZS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xNzU5LSAqL1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxNzYwOnN0YXRpYyBzdHJ1Y3QgeGVfcGFnZW1hcCAqeGVfcGFnZW1hcF9jcmVhdGUoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV92cmFtX3JlZ2lvbiAqdnIpXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE3NjEte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jPTE4NDI9eGVfcGFnZW1hcF9maW5kX29yX2NyZWF0ZShzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IGRybV9wYWdlbWFwX2NhY2hlICpjYWNoZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODU2LVxcdH0gZWxzZSBpZiAoIWRwYWdlbWFwKSB7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE4NTc6XFx0XFx0eHBhZ2VtYXAgPSB4ZV9wYWdlbWFwX2NyZWF0ZSh4ZSwgdnIpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODU4LVxcdFxcdGlmIChJU19FUlIoeHBhZ2VtYXApKVxcbi0tXFxuZHJpdmVycy9tZC9kbS12ZG8vYmxvY2stbWFwLmM9MjE5PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGFsbG9jYXRlX2NhY2hlX2NvbXBvbmVudHMoc3RydWN0IHZkb19wYWdlX2NhY2hlICpjYWNoZSlcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5jLTIzMS1cXG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYzoyMzI6XFx0cmVzdWx0ID0gdmRvX2ludF9tYXBfY3JlYXRlKGNhY2hlLVxcdTAwM2VwYWdlX2NvdW50LCBcXHUwMDI2Y2FjaGUtXFx1MDAzZXBhZ2VfbWFwKTtcXG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYy0yMzMtXFx0aWYgKHJlc3VsdCAhPSBWRE9fU1VDQ0VTUylcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5jPTEzNDI9aW50IHZkb19pbnZhbGlkYXRlX3BhZ2VfY2FjaGUoc3RydWN0IHZkb19wYWdlX2NhY2hlICpjYWNoZSlcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5jLTEzNTctXFx0dmRvX2ludF9tYXBfZnJlZSh2ZG9fZm9yZ2V0KGNhY2hlLVxcdTAwM2VwYWdlX21hcCkpO1xcbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5jOjEzNTg6XFx0cmV0dXJuIHZkb19pbnRfbWFwX2NyZWF0ZShjYWNoZS1cXHUwMDNlcGFnZV9jb3VudCwgXFx1MDAyNmNhY2hlLVxcdTAwM2VwYWdlX21hcCk7XFxuZHJpdmVycy9tZC9kbS12ZG8vYmxvY2stbWFwLmMtMTM1OS19XFxuLS1cXG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYz0yNzM2PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGluaXRpYWxpemVfYmxvY2tfbWFwX3pvbmUoc3RydWN0IGJsb2NrX21hcCAqbWFwLFxcbi0tXFxuZHJpdmVycy9tZC9kbS12ZG8vYmxvY2stbWFwLmMtMjc2NC1cXG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYzoyNzY1OlxcdHJlc3VsdCA9IHZkb19pbnRfbWFwX2NyZWF0ZShWRE9fTE9DS19NQVBfQ0FQQUNJVFksIFxcdTAwMjZ6b25lLVxcdTAwM2Vsb2FkaW5nX3BhZ2VzKTtcXG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuYy0yNzY2LVxcdGlmIChyZXN1bHQgIT0gVkRPX1NVQ0NFU1MpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXZkby9kZWR1cGUuYz0yMzQ5PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGluaXRpYWxpemVfem9uZShzdHJ1Y3QgdmRvICp2ZG8sIHN0cnVjdCBoYXNoX3pvbmVzICp6b25lcyxcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL2RlZHVwZS5jLTIzNTUtXFxuZHJpdmVycy9tZC9kbS12ZG8vZGVkdXBlLmM6MjM1NjpcXHRyZXN1bHQgPSB2ZG9faW50X21hcF9jcmVhdGUoVkRPX0xPQ0tfTUFQX0NBUEFDSVRZLCBcXHUwMDI2em9uZS1cXHUwMDNlaGFzaF9sb2NrX21hcCk7XFxuZHJpdmVycy9tZC9kbS12ZG8vZGVkdXBlLmMtMjM1Ny1cXHRpZiAocmVzdWx0ICE9IFZET19TVUNDRVNTKVxcbi0tXFxuZHJpdmVycy9tZC9kbS12ZG8vaW50LW1hcC5jPTE1Nz1zdGF0aWMgaW50IGFsbG9jYXRlX2J1Y2tldHMoc3RydWN0IGludF9tYXAgKm1hcCwgc2l6ZV90IGNhcGFjaXR5KVxcbi0tXFxuZHJpdmVycy9tZC9kbS12ZG8vaW50LW1hcC5jLTE3MC0vKipcXG5kcml2ZXJzL21kL2RtLXZkby9pbnQtbWFwLmM6MTcxOiAqIHZkb19pbnRfbWFwX2NyZWF0ZSgpIC0gQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW50X21hcC5cXG5kcml2ZXJzL21kL2RtLXZkby9pbnQtbWFwLmMtMTcyLSAqIEBpbml0aWFsX2NhcGFjaXR5OiBUaGUgbnVtYmVyIG9mIGVudHJpZXMgdGhlIG1hcCBzaG91bGQgaW5pdGlhbGx5IGJlIGNhcGFibGUgb2YgaG9sZGluZyAoemVyb1xcbi0tXFxuZHJpdmVycy9tZC9kbS12ZG8vaW50LW1hcC5jLTE3Ny0gKi9cXG5kcml2ZXJzL21kL2RtLXZkby9pbnQtbWFwLmM6MTc4OmludCB2ZG9faW50X21hcF9jcmVhdGUoc2l6ZV90IGluaXRpYWxfY2FwYWNpdHksIHN0cnVjdCBpbnRfbWFwICoqbWFwX3B0cilcXG5kcml2ZXJzL21kL2RtLXZkby9pbnQtbWFwLmMtMTc5LXtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL2ludC1tYXAuaD0yND1zdHJ1Y3QgaW50X21hcDtcXG5kcml2ZXJzL21kL2RtLXZkby9pbnQtbWFwLmgtMjUtXFxuZHJpdmVycy9tZC9kbS12ZG8vaW50LW1hcC5oOjI2OmludCBfX211c3RfY2hlY2sgdmRvX2ludF9tYXBfY3JlYXRlKHNpemVfdCBpbml0aWFsX2NhcGFjaXR5LCBzdHJ1Y3QgaW50X21hcCAqKm1hcF9wdHIpO1xcbmRyaXZlcnMvbWQvZG0tdmRvL2ludC1tYXAuaC0yNy1cXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL2lvLXN1Ym1pdHRlci5jPTQwNT1pbnQgdmRvX21ha2VfaW9fc3VibWl0dGVyKHVuc2lnbmVkIGludCB0aHJlYWRfY291bnQsIHVuc2lnbmVkIGludCByb3RhdGlvbl9pbnRlcnZhbCxcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL2lvLXN1Ym1pdHRlci5jLTQzMi1cXHRcXHQgKi9cXG5kcml2ZXJzL21kL2RtLXZkby9pby1zdWJtaXR0ZXIuYzo0MzM6XFx0XFx0cmVzdWx0ID0gdmRvX2ludF9tYXBfY3JlYXRlKG1heF9yZXF1ZXN0c19hY3RpdmUgKiAyLFxcbmRyaXZlcnMvbWQvZG0tdmRvL2lvLXN1Ym1pdHRlci5jLTQzNC1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmJpb19xdWV1ZV9kYXRhLVxcdTAwM2VtYXApO1xcbi0tXFxuZHJpdmVycy9tZC9kbS12ZG8vbG9naWNhbC16b25lLmM9NTE9c3RhdGljIGludCBpbml0aWFsaXplX3pvbmUoc3RydWN0IGxvZ2ljYWxfem9uZXMgKnpvbmVzLCB6b25lX2NvdW50X3Qgem9uZV9udW1iZXIpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXZkby9sb2dpY2FsLXpvbmUuYy01Ny1cXG5kcml2ZXJzL21kL2RtLXZkby9sb2dpY2FsLXpvbmUuYzo1ODpcXHRyZXN1bHQgPSB2ZG9faW50X21hcF9jcmVhdGUoVkRPX0xPQ0tfTUFQX0NBUEFDSVRZLCBcXHUwMDI2em9uZS1cXHUwMDNlbGJuX29wZXJhdGlvbnMpO1xcbmRyaXZlcnMvbWQvZG0tdmRvL2xvZ2ljYWwtem9uZS5jLTU5LVxcdGlmIChyZXN1bHQgIT0gVkRPX1NVQ0NFU1MpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXZkby9waHlzaWNhbC16b25lLmM9MzI1PXN0YXRpYyBpbnQgaW5pdGlhbGl6ZV96b25lKHN0cnVjdCB2ZG8gKnZkbywgc3RydWN0IHBoeXNpY2FsX3pvbmVzICp6b25lcylcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL3BoeXNpY2FsLXpvbmUuYy0zMzAtXFxuZHJpdmVycy9tZC9kbS12ZG8vcGh5c2ljYWwtem9uZS5jOjMzMTpcXHRyZXN1bHQgPSB2ZG9faW50X21hcF9jcmVhdGUoVkRPX0xPQ0tfTUFQX0NBUEFDSVRZLCBcXHUwMDI2em9uZS1cXHUwMDNlcGJuX29wZXJhdGlvbnMpO1xcbmRyaXZlcnMvbWQvZG0tdmRvL3BoeXNpY2FsLXpvbmUuYy0zMzItXFx0aWYgKHJlc3VsdCAhPSBWRE9fU1VDQ0VTUylcXG4tLVxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtNC0gKlxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM6NTogKiBiaXRtYXBfY3JlYXRlICAtIHNldHMgdXAgdGhlIGJpdG1hcCBzdHJ1Y3R1cmVcXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTYtICogYml0bWFwX2Rlc3Ryb3kgLSBkZXN0cm95cyB0aGUgYml0bWFwIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYz0yMDg2PXN0YXRpYyB2b2lkIGJpdG1hcF9kZXN0cm95KHN0cnVjdCBtZGRldiAqbWRkZXYpXFxuLS1cXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTIxMTEtICovXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYzoyMTEyOnN0YXRpYyBzdHJ1Y3QgYml0bWFwICpfX2JpdG1hcF9jcmVhdGUoc3RydWN0IG1kZGV2ICptZGRldiwgaW50IHNsb3QpXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy0yMTEzLXtcXG4tLVxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtMjE5OS1cXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jOjIyMDA6c3RhdGljIGludCBiaXRtYXBfY3JlYXRlKHN0cnVjdCBtZGRldiAqbWRkZXYpXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy0yMjAxLXtcXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jOjIyMDI6XFx0c3RydWN0IGJpdG1hcCAqYml0bWFwID0gX19iaXRtYXBfY3JlYXRlKG1kZGV2LCAtMSk7XFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy0yMjAzLVxcbi0tXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYz0yMjY5PXN0YXRpYyB2b2lkICpiaXRtYXBfZ2V0X2Zyb21fc2xvdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBpbnQgc2xvdClcXG4tLVxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtMjI3My1cXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jOjIyNzQ6XFx0Yml0bWFwID0gX19iaXRtYXBfY3JlYXRlKG1kZGV2LCBzbG90KTtcXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTIyNzUtXFx0aWYgKElTX0VSUihiaXRtYXApKSB7XFxuLS1cXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jPTI2Mjk9bG9jYXRpb25fc3RvcmUoc3RydWN0IG1kZGV2ICptZGRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbi0tXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy0yNjk2LVxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM6MjY5NzpcXHRcXHRcXHRydiA9IG1kX2JpdG1hcF9jcmVhdGVfbm9zeXNmcyhtZGRldik7XFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy0yNjk4LVxcdFxcdFxcdGlmIChydilcXG4tLVxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM9MzA3MT1zdGF0aWMgc3RydWN0IGJpdG1hcF9vcGVyYXRpb25zIGJpdG1hcF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTMwNzgtXFx0LmVuYWJsZWRcXHRcXHQ9IGJpdG1hcF9lbmFibGVkLFxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM6MzA3OTpcXHQuY3JlYXRlXFx0XFx0XFx0PSBiaXRtYXBfY3JlYXRlLFxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtMzA4MC1cXHQucmVzaXplXFx0XFx0XFx0PSBiaXRtYXBfcmVzaXplLFxcbi0tXFxuZHJpdmVycy9tZC9tZC1sbGJpdG1hcC5jPTEwNTE9c3RhdGljIHZvaWQgbWRfbGxiaXRtYXBfZGFlbW9uX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbWQvbWQtbGxiaXRtYXAuYy0xMTAzLVxcbmRyaXZlcnMvbWQvbWQtbGxiaXRtYXAuYzoxMTA0OnN0YXRpYyBpbnQgbGxiaXRtYXBfY3JlYXRlKHN0cnVjdCBtZGRldiAqbWRkZXYpXFxuZHJpdmVycy9tZC9tZC1sbGJpdG1hcC5jLTExMDUte1xcbi0tXFxuZHJpdmVycy9tZC9tZC1sbGJpdG1hcC5jPTE3NDk9c3RhdGljIHN0cnVjdCBiaXRtYXBfb3BlcmF0aW9ucyBsbGJpdG1hcF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL21kL21kLWxsYml0bWFwLmMtMTc1Ni1cXHQuZW5hYmxlZFxcdFxcdD0gbGxiaXRtYXBfZW5hYmxlZCxcXG5kcml2ZXJzL21kL21kLWxsYml0bWFwLmM6MTc1NzpcXHQuY3JlYXRlXFx0XFx0XFx0PSBsbGJpdG1hcF9jcmVhdGUsXFxuZHJpdmVycy9tZC9tZC1sbGJpdG1hcC5jLTE3NTgtXFx0LnJlc2l6ZVxcdFxcdFxcdD0gbGxiaXRtYXBfcmVzaXplLFxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTY0Njg9c3RhdGljIGVudW0gbWRfc3VibW9kdWxlX2lkIG1kX2JpdG1hcF9nZXRfaWRfZnJvbV9zYihzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTY1MzctXFxuZHJpdmVycy9tZC9tZC5jOjY1Mzg6aW50IG1kX2JpdG1hcF9jcmVhdGVfbm9zeXNmcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxcbmRyaXZlcnMvbWQvbWQuYy02NTM5LXtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy02NTg2LVxcbmRyaXZlcnMvbWQvbWQuYzo2NTg3OnN0YXRpYyBpbnQgbWRfYml0bWFwX2NyZWF0ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxcbmRyaXZlcnMvbWQvbWQuYy02NTg4LXtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy02NTkwLVxcbmRyaXZlcnMvbWQvbWQuYzo2NTkxOlxcdGVyciA9IG1kX2JpdG1hcF9jcmVhdGVfbm9zeXNmcyhtZGRldik7XFxuZHJpdmVycy9tZC9tZC5jLTY1OTItXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz02NjI5PWludCBtZF9ydW4oc3RydWN0IG1kZGV2ICptZGRldilcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy02NzczLVxcdCAgICAobWRkZXYtXFx1MDAzZWJpdG1hcF9pbmZvLmZpbGUgfHwgbWRkZXYtXFx1MDAzZWJpdG1hcF9pbmZvLm9mZnNldCkpIHtcXG5kcml2ZXJzL21kL21kLmM6Njc3NDpcXHRcXHRlcnIgPSBtZF9iaXRtYXBfY3JlYXRlKG1kZGV2KTtcXG5kcml2ZXJzL21kL21kLmMtNjc3NS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTc3ODM9c3RhdGljIGludCBzZXRfYml0bWFwX2ZpbGUoc3RydWN0IG1kZGV2ICptZGRldiwgaW50IGZkKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTc4NDYtXFx0XFx0aWYgKGZkIFxcdTAwM2U9IDApIHtcXG5kcml2ZXJzL21kL21kLmM6Nzg0NzpcXHRcXHRcXHRlcnIgPSBtZF9iaXRtYXBfY3JlYXRlKG1kZGV2KTtcXG5kcml2ZXJzL21kL21kLmMtNzg0OC1cXHRcXHRcXHRpZiAoIWVycilcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz04MDg1PXN0YXRpYyBpbnQgdXBkYXRlX2FycmF5X2luZm8oc3RydWN0IG1kZGV2ICptZGRldiwgbWR1X2FycmF5X2luZm9fdCAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy04MTY1LVxcdFxcdFxcdG1kZGV2LVxcdTAwM2ViaXRtYXBfaWQgPSBJRF9CSVRNQVA7XFxuZHJpdmVycy9tZC9tZC5jOjgxNjY6XFx0XFx0XFx0cnYgPSBtZF9iaXRtYXBfY3JlYXRlKG1kZGV2KTtcXG5kcml2ZXJzL21kL21kLmMtODE2Ny1cXHRcXHRcXHRpZiAoIXJ2KVxcbi0tXFxuZHJpdmVycy9tZC9tZC5oPTkzOT1ib29sIG1kZGV2X3NldF9iaXRtYXBfb3BzX25vc3lzZnMoc3RydWN0IG1kZGV2ICptZGRldik7XFxuZHJpdmVycy9tZC9tZC5oOjk0MDppbnQgbWRfYml0bWFwX2NyZWF0ZV9ub3N5c2ZzKHN0cnVjdCBtZGRldiAqbWRkZXYpO1xcbmRyaXZlcnMvbWQvbWQuaC05NDEtdm9pZCBtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKHN0cnVjdCBtZGRldiAqbWRkZXYpO1xcbi0tXFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYz04MzU9c3RhdGljIGludCBmYXN0cnBjX21hcF9hdHRhY2goc3RydWN0IGZhc3RycGNfdXNlciAqZmwsIGludCBmZCxcXG4tLVxcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtOTI2LVxcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmM6OTI3OnN0YXRpYyBpbnQgZmFzdHJwY19tYXBfY3JlYXRlKHN0cnVjdCBmYXN0cnBjX3VzZXIgKmZsLCBpbnQgZmQsXFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYy05MjgtXFx0XFx0XFx0ICAgICAgdTY0IGxlbiwgdTMyIGF0dHIsIHN0cnVjdCBmYXN0cnBjX21hcCAqKnBwbWFwKVxcbi0tXFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYz05OTc9c3RhdGljIGludCBmYXN0cnBjX2NyZWF0ZV9tYXBzKHN0cnVjdCBmYXN0cnBjX2ludm9rZV9jdHggKmN0eClcXG4tLVxcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtMTAwOC1cXHRcXHRpZiAoaSBcXHUwMDNjIGN0eC1cXHUwMDNlbmJ1ZnMpXFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYzoxMDA5OlxcdFxcdFxcdGVyciA9IGZhc3RycGNfbWFwX2NyZWF0ZShjdHgtXFx1MDAzZWZsLCBjdHgtXFx1MDAzZWFyZ3NbaV0uZmQsXFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYy0xMDEwLVxcdFxcdFxcdFxcdCBjdHgtXFx1MDAzZWFyZ3NbaV0ubGVuZ3RoLCBjdHgtXFx1MDAzZWFyZ3NbaV0uYXR0ciwgXFx1MDAyNmN0eC1cXHUwMDNlbWFwc1tpXSk7XFxuLS1cXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jPTE0NjI9c3RhdGljIGludCBmYXN0cnBjX2luaXRfY3JlYXRlX3Byb2Nlc3Moc3RydWN0IGZhc3RycGNfdXNlciAqZmwsXFxuLS1cXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jLTE1MTMtXFx0aWYgKGluaXQuZmlsZWxlbiBcXHUwMDI2XFx1MDAyNiBpbml0LmZpbGVmZCkge1xcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmM6MTUxNDpcXHRcXHRlcnIgPSBmYXN0cnBjX21hcF9jcmVhdGUoZmwsIGluaXQuZmlsZWZkLCBpbml0LmZpbGVsZW4sIDAsIFxcdTAwMjZtYXApO1xcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtMTUxNS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYz0yMDk1PXN0YXRpYyBpbnQgZmFzdHJwY19yZXFfbWVtX21hcChzdHJ1Y3QgZmFzdHJwY191c2VyICpmbCwgY2hhciBfX3VzZXIgKmFyZ3ApXFxuLS1cXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jLTIxMTEtXFx0LyogY3JlYXRlIFNNTVUgbWFwcGluZyAqL1xcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmM6MjExMjpcXHRlcnIgPSBmYXN0cnBjX21hcF9jcmVhdGUoZmwsIHJlcS5mZCwgcmVxLmxlbmd0aCwgMCwgXFx1MDAyNm1hcCk7XFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYy0yMTEzLVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbXRkL25hbmQvc3BpL2NvcmUuYz0xMjIyPXN0YXRpYyBzdHJ1Y3Qgc3BpX21lbV9kaXJtYXBfZGVzYyAqc3BpbmFuZF9jcmVhdGVfcmRlc2MoXFxuLS1cXG5kcml2ZXJzL210ZC9uYW5kL3NwaS9jb3JlLmMtMTIzNC1cXHRcXHRpbmZvLVxcdTAwM2VsZW5ndGggPSBuYW5kZGV2X2VyYXNlYmxvY2tfc2l6ZShuYW5kKTtcXG5kcml2ZXJzL210ZC9uYW5kL3NwaS9jb3JlLmM6MTIzNTpcXHRcXHRkZXNjID0gZGV2bV9zcGlfbWVtX2Rpcm1hcF9jcmVhdGUoXFx1MDAyNnNwaW5hbmQtXFx1MDAzZXNwaW1lbS1cXHUwMDNlc3BpLVxcdTAwM2VkZXYsXFxuZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jLTEyMzYtXFx0XFx0XFx0XFx0XFx0XFx0ICBzcGluYW5kLVxcdTAwM2VzcGltZW0sIGluZm8pO1xcbi0tXFxuZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jLTEyNDgtXFx0XFx0XFx0ICAgICAgIG5hbmRkZXZfcGVyX3BhZ2Vfb29ic2l6ZShuYW5kKTtcXG5kcml2ZXJzL210ZC9uYW5kL3NwaS9jb3JlLmM6MTI0OTpcXHRcXHRkZXNjID0gZGV2bV9zcGlfbWVtX2Rpcm1hcF9jcmVhdGUoXFx1MDAyNnNwaW5hbmQtXFx1MDAzZXNwaW1lbS1cXHUwMDNlc3BpLVxcdTAwM2VkZXYsXFxuZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jLTEyNTAtXFx0XFx0XFx0XFx0XFx0XFx0ICBzcGluYW5kLVxcdTAwM2VzcGltZW0sIGluZm8pO1xcbi0tXFxuZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jPTEyNTY9c3RhdGljIGludCBzcGluYW5kX2NyZWF0ZV9kaXJtYXAoc3RydWN0IHNwaW5hbmRfZGV2aWNlICpzcGluYW5kLFxcbi0tXFxuZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jLTEyODYtXFx0aW5mby5wcmltYXJ5X29wX3RtcGwuZGF0YS5lY2MgPSBlbmFibGVfZWNjO1xcbmRyaXZlcnMvbXRkL25hbmQvc3BpL2NvcmUuYzoxMjg3OlxcdGRlc2MgPSBkZXZtX3NwaV9tZW1fZGlybWFwX2NyZWF0ZShcXHUwMDI2c3BpbmFuZC1cXHUwMDNlc3BpbWVtLVxcdTAwM2VzcGktXFx1MDAzZWRldixcXG5kcml2ZXJzL210ZC9uYW5kL3NwaS9jb3JlLmMtMTI4OC1cXHRcXHRcXHRcXHRcXHQgIHNwaW5hbmQtXFx1MDAzZXNwaW1lbSwgXFx1MDAyNmluZm8pO1xcbi0tXFxuZHJpdmVycy9tdGQvc3BpLW5vci9jb3JlLmM9MzcxMT1zdGF0aWMgaW50IHNwaV9ub3JfY3JlYXRlX3JlYWRfZGlybWFwKHN0cnVjdCBzcGlfbm9yICpub3IpXFxuLS1cXG5kcml2ZXJzL210ZC9zcGktbm9yL2NvcmUuYy0zNzM3LVxcbmRyaXZlcnMvbXRkL3NwaS1ub3IvY29yZS5jOjM3Mzg6XFx0bm9yLVxcdTAwM2VkaXJtYXAucmRlc2MgPSBkZXZtX3NwaV9tZW1fZGlybWFwX2NyZWF0ZShub3ItXFx1MDAzZWRldiwgbm9yLVxcdTAwM2VzcGltZW0sXFxuZHJpdmVycy9tdGQvc3BpLW5vci9jb3JlLmMtMzczOS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmluZm8pO1xcbi0tXFxuZHJpdmVycy9tdGQvc3BpLW5vci9jb3JlLmM9Mzc0Mz1zdGF0aWMgaW50IHNwaV9ub3JfY3JlYXRlX3dyaXRlX2Rpcm1hcChzdHJ1Y3Qgc3BpX25vciAqbm9yKVxcbi0tXFxuZHJpdmVycy9tdGQvc3BpLW5vci9jb3JlLmMtMzc2Ny1cXG5kcml2ZXJzL210ZC9zcGktbm9yL2NvcmUuYzozNzY4OlxcdG5vci1cXHUwMDNlZGlybWFwLndkZXNjID0gZGV2bV9zcGlfbWVtX2Rpcm1hcF9jcmVhdGUobm9yLVxcdTAwM2VkZXYsIG5vci1cXHUwMDNlc3BpbWVtLFxcbmRyaXZlcnMvbXRkL3NwaS1ub3IvY29yZS5jLTM3NjktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZpbmZvKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL25wYy5jPTM0NTY9c3RhdGljIHZvaWQgbnBjX3N1YmJhbmtfaW5pdChzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCBucGNfc3ViYmFuayAqc2IsIGludCBpZHgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9ucGMuYy0zNDY5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL25wYy5jOjM0NzA6c3RhdGljIGludCBucGNfcGNpZnVuY19tYXBfY3JlYXRlKHN0cnVjdCBydnUgKnJ2dSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9ucGMuYy0zNDcxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL25wYy5jPTQ2NTQ9c3RhdGljIGludCBucGNfcHJpdl9pbml0KHN0cnVjdCBydnUgKnJ2dSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL25wYy5jLTQ3NTgtXFx0LyogR2V0IG51bWJlciBvZiBwY2lmdW5jcyBpbiB0aGUgc3lzdGVtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvbnBjLmM6NDc1OTpcXHRucGNfcHJpdi1cXHUwMDNlcGZfY250ID0gbnBjX3BjaWZ1bmNfbWFwX2NyZWF0ZShydnUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL25wYy5jLTQ3NjAtXFx0bnBjX3ByaXYtXFx1MDAzZXhhX3BmMmlkeF9tYXAgPSBrY2FsbG9jKG5wY19wcml2LVxcdTAwM2VwZl9jbnQsXFxuLS1cXG5kcml2ZXJzL3BpbmN0cmwvYmNtL3BpbmN0cmwtaXByb2MtZ3Bpby5jPTQyOD1zdGF0aWMgYm9vbCBpcHJvY19waW5jb25mX3BhcmFtX2lzX2Rpc2FibGVkKHN0cnVjdCBpcHJvY19ncGlvICpjaGlwLFxcbi0tXFxuZHJpdmVycy9waW5jdHJsL2JjbS9waW5jdHJsLWlwcm9jLWdwaW8uYy00NDItXFxuZHJpdmVycy9waW5jdHJsL2JjbS9waW5jdHJsLWlwcm9jLWdwaW8uYzo0NDM6c3RhdGljIGludCBpcHJvY19waW5jb25mX2Rpc2FibGVfbWFwX2NyZWF0ZShzdHJ1Y3QgaXByb2NfZ3BpbyAqY2hpcCxcXG5kcml2ZXJzL3BpbmN0cmwvYmNtL3BpbmN0cmwtaXByb2MtZ3Bpby5jLTQ0NC1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBkaXNhYmxlX21hc2spXFxuLS1cXG5kcml2ZXJzL3BpbmN0cmwvYmNtL3BpbmN0cmwtaXByb2MtZ3Bpby5jPTgwND1zdGF0aWMgaW50IGlwcm9jX2dwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvcGluY3RybC9iY20vcGluY3RybC1pcHJvYy1ncGlvLmMtOTA0LVxcdFxcdGlmIChwaW5jb25mX2Rpc2FibGVfbWFzaykge1xcbmRyaXZlcnMvcGluY3RybC9iY20vcGluY3RybC1pcHJvYy1ncGlvLmM6OTA1OlxcdFxcdFxcdHJldCA9IGlwcm9jX3BpbmNvbmZfZGlzYWJsZV9tYXBfY3JlYXRlKGNoaXAsXFxuZHJpdmVycy9waW5jdHJsL2JjbS9waW5jdHJsLWlwcm9jLWdwaW8uYy05MDYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHBpbmNvbmZfZGlzYWJsZV9tYXNrKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9jeGdiaS9jeGdiM2kvY3hnYjNpLmM9MTAzOT1zdGF0aWMgaW50IGN4Z2IzaV9vZmxkX2luaXQoc3RydWN0IGN4Z2JpX2RldmljZSAqY2RldilcXG4tLVxcbmRyaXZlcnMvc2NzaS9jeGdiaS9jeGdiM2kvY3hnYjNpLmMtMTA1Ni1cXG5kcml2ZXJzL3Njc2kvY3hnYmkvY3hnYjNpL2N4Z2IzaS5jOjEwNTc6XFx0cmMgPSBjeGdiaV9kZXZpY2VfcG9ydG1hcF9jcmVhdGUoY2RldiwgY3hnYjNpX3Nwb3J0X2Jhc2UsXFxuZHJpdmVycy9zY3NpL2N4Z2JpL2N4Z2IzaS9jeGdiM2kuYy0xMDU4LVxcdFxcdFxcdFxcdFxcdGN4Z2IzaV9tYXhfY29ubmVjdCk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvY3hnYmkvY3hnYjRpL2N4Z2I0aS5jPTE5NDQ9c3RhdGljIGludCBjeGdiNGlfb2ZsZF9pbml0KHN0cnVjdCBjeGdiaV9kZXZpY2UgKmNkZXYpXFxuLS1cXG5kcml2ZXJzL3Njc2kvY3hnYmkvY3hnYjRpL2N4Z2I0aS5jLTE5NTAtXFxuZHJpdmVycy9zY3NpL2N4Z2JpL2N4Z2I0aS9jeGdiNGkuYzoxOTUxOlxcdHJjID0gY3hnYmlfZGV2aWNlX3BvcnRtYXBfY3JlYXRlKGNkZXYsIGN4Z2I0aV9zcG9ydF9iYXNlLFxcbmRyaXZlcnMvc2NzaS9jeGdiaS9jeGdiNGkvY3hnYjRpLmMtMTk1Mi1cXHRcXHRcXHRcXHRcXHRjeGdiNGlfbWF4X2Nvbm5lY3QpO1xcbi0tXFxuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmM9Njc9c3RhdGljIGlubGluZSB2b2lkIGN4Z2JpX2RlY29kZV9zd190YWcodTMyIHN3X3RhZywgaW50ICppZHgsIGludCAqYWdlKVxcbi0tXFxuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmMtNzQtXFxuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmM6NzU6aW50IGN4Z2JpX2RldmljZV9wb3J0bWFwX2NyZWF0ZShzdHJ1Y3QgY3hnYmlfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBpbnQgYmFzZSxcXG5kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYy03Ni1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X2Nvbm4pXFxuLS1cXG5kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYy05Mi19XFxuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmM6OTM6RVhQT1JUX1NZTUJPTF9HUEwoY3hnYmlfZGV2aWNlX3BvcnRtYXBfY3JlYXRlKTtcXG5kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYy05NC1cXG4tLVxcbmRyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5oPTU5Mz12b2lkIGN4Z2JpX2hiYXNfcmVtb3ZlKHN0cnVjdCBjeGdiaV9kZXZpY2UgKik7XFxuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmgtNTk0LVxcbmRyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5oOjU5NTppbnQgY3hnYmlfZGV2aWNlX3BvcnRtYXBfY3JlYXRlKHN0cnVjdCBjeGdiaV9kZXZpY2UgKmNkZXYsIHVuc2lnbmVkIGludCBiYXNlLFxcbmRyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5oLTU5Ni1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X2Nvbm4pO1xcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWFpcm9oYS1zbmZpLmM9NTE4PXN0YXRpYyBib29sIGFpcm9oYV9zbmFuZF9zdXBwb3J0c19vcChzdHJ1Y3Qgc3BpX21lbSAqbWVtLFxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWFpcm9oYS1zbmZpLmMtNTM0LVxcbmRyaXZlcnMvc3BpL3NwaS1haXJvaGEtc25maS5jOjUzNTpzdGF0aWMgaW50IGFpcm9oYV9zbmFuZF9kaXJtYXBfY3JlYXRlKHN0cnVjdCBzcGlfbWVtX2Rpcm1hcF9kZXNjICpkZXNjKVxcbmRyaXZlcnMvc3BpL3NwaS1haXJvaGEtc25maS5jLTUzNi17XFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktYWlyb2hhLXNuZmkuYz0xMDA4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2NvbnRyb2xsZXJfbWVtX29wcyBhaXJvaGFfc25hbmRfbWVtX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1haXJvaGEtc25maS5jLTEwMTAtXFx0LmV4ZWNfb3AgPSBhaXJvaGFfc25hbmRfZXhlY19vcCxcXG5kcml2ZXJzL3NwaS9zcGktYWlyb2hhLXNuZmkuYzoxMDExOlxcdC5kaXJtYXBfY3JlYXRlID0gYWlyb2hhX3NuYW5kX2Rpcm1hcF9jcmVhdGUsXFxuZHJpdmVycy9zcGkvc3BpLWFpcm9oYS1zbmZpLmMtMTAxMi1cXHQuZGlybWFwX3JlYWQgPSBhaXJvaGFfc25hbmRfZGlybWFwX3JlYWQsXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktYXNwZWVkLXNtYy5jPTY5ND1zdGF0aWMgaW50IGFzcGVlZF9zcGlfZG9fY2FsaWJyYXRpb24oc3RydWN0IGFzcGVlZF9zcGlfY2hpcCAqY2hpcCk7XFxuZHJpdmVycy9zcGkvc3BpLWFzcGVlZC1zbWMuYy02OTUtXFxuZHJpdmVycy9zcGkvc3BpLWFzcGVlZC1zbWMuYzo2OTY6c3RhdGljIGludCBhc3BlZWRfc3BpX2Rpcm1hcF9jcmVhdGUoc3RydWN0IHNwaV9tZW1fZGlybWFwX2Rlc2MgKmRlc2MpXFxuZHJpdmVycy9zcGkvc3BpLWFzcGVlZC1zbWMuYy02OTcte1xcbi0tXFxuZHJpdmVycy9zcGkvc3BpLWFzcGVlZC1zbWMuYz03ODI9c3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfY29udHJvbGxlcl9tZW1fb3BzIGFzcGVlZF9zcGlfbWVtX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1hc3BlZWQtc21jLmMtNzg1LVxcdC5nZXRfbmFtZSA9IGFzcGVlZF9zcGlfZ2V0X25hbWUsXFxuZHJpdmVycy9zcGkvc3BpLWFzcGVlZC1zbWMuYzo3ODY6XFx0LmRpcm1hcF9jcmVhdGUgPSBhc3BlZWRfc3BpX2Rpcm1hcF9jcmVhdGUsXFxuZHJpdmVycy9zcGkvc3BpLWFzcGVlZC1zbWMuYy03ODctXFx0LmRpcm1hcF9yZWFkID0gYXNwZWVkX3NwaV9kaXJtYXBfcmVhZCxcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jPTgwMT1zdGF0aWMgY29uc3QgY2hhciAqaW50ZWxfc3BpX2dldF9uYW1lKHN0cnVjdCBzcGlfbWVtICptZW0pXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYy04MTEtXFxuZHJpdmVycy9zcGkvc3BpLWludGVsLmM6ODEyOnN0YXRpYyBpbnQgaW50ZWxfc3BpX2Rpcm1hcF9jcmVhdGUoc3RydWN0IHNwaV9tZW1fZGlybWFwX2Rlc2MgKmRlc2MpXFxuZHJpdmVycy9zcGkvc3BpLWludGVsLmMtODEzLXtcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jPTg1OD1zdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9jb250cm9sbGVyX21lbV9vcHMgaW50ZWxfc3BpX21lbV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktaW50ZWwuYy04NjItXFx0LmdldF9uYW1lID0gaW50ZWxfc3BpX2dldF9uYW1lLFxcbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jOjg2MzpcXHQuZGlybWFwX2NyZWF0ZSA9IGludGVsX3NwaV9kaXJtYXBfY3JlYXRlLFxcbmRyaXZlcnMvc3BpL3NwaS1pbnRlbC5jLTg2NC1cXHQuZGlybWFwX3JlYWQgPSBpbnRlbF9zcGlfZGlybWFwX3JlYWQsXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktbWVtLmM9NzA2PXN0YXRpYyBzc2l6ZV90IHNwaV9tZW1fbm9fZGlybWFwX3dyaXRlKHN0cnVjdCBzcGlfbWVtX2Rpcm1hcF9kZXNjICpkZXNjLFxcbi0tXFxuZHJpdmVycy9zcGkvc3BpLW1lbS5jLTcyNi0vKipcXG5kcml2ZXJzL3NwaS9zcGktbWVtLmM6NzI3OiAqIHNwaV9tZW1fZGlybWFwX2NyZWF0ZSgpIC0gQ3JlYXRlIGEgZGlyZWN0IG1hcHBpbmcgZGVzY3JpcHRvclxcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03MjgtICogQG1lbTogU1BJIG1lbSBkZXZpY2UgdGhpcyBkaXJlY3QgbWFwcGluZyBzaG91bGQgYmUgY3JlYXRlZCBmb3JcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYz03Mzk9c3RydWN0IHNwaV9tZW1fZGlybWFwX2Rlc2MgKlxcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYzo3NDA6c3BpX21lbV9kaXJtYXBfY3JlYXRlKHN0cnVjdCBzcGlfbWVtICptZW0sXFxuZHJpdmVycy9zcGkvc3BpLW1lbS5jLTc0MS1cXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9kaXJtYXBfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03NjYtXFxuZHJpdmVycy9zcGkvc3BpLW1lbS5jOjc2NzpcXHRcXHRpZiAoY3Rsci1cXHUwMDNlbWVtX29wcyBcXHUwMDI2XFx1MDAyNiBjdGxyLVxcdTAwM2VtZW1fb3BzLVxcdTAwM2VkaXJtYXBfY3JlYXRlIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9zcGkvc3BpLW1lbS5jLTc2OC1cXHRcXHQgICAgIXNwaV9tZW1fY29udHJvbGxlcl9pc19jYXBhYmxlKGN0bHIsIHNlY29uZGFyeV9vcF90bXBsKSlcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03NzgtXFx0ZGVzYy1cXHUwMDNlaW5mby5vcF90bXBsID0gXFx1MDAyNmRlc2MtXFx1MDAzZWluZm8ucHJpbWFyeV9vcF90bXBsO1xcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYzo3Nzk6XFx0aWYgKGN0bHItXFx1MDAzZW1lbV9vcHMgXFx1MDAyNlxcdTAwMjYgY3Rsci1cXHUwMDNlbWVtX29wcy1cXHUwMDNlZGlybWFwX2NyZWF0ZSkge1xcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03ODAtXFx0XFx0cmV0ID0gc3BpX21lbV9hY2Nlc3Nfc3RhcnQobWVtKTtcXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03ODUtXFxuZHJpdmVycy9zcGkvc3BpLW1lbS5jOjc4NjpcXHRcXHRyZXQgPSBjdGxyLVxcdTAwM2VtZW1fb3BzLVxcdTAwM2VkaXJtYXBfY3JlYXRlKGRlc2MpO1xcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy03ODctXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktbWVtLmMtODA1LX1cXG5kcml2ZXJzL3NwaS9zcGktbWVtLmM6ODA2OkVYUE9SVF9TWU1CT0xfR1BMKHNwaV9tZW1fZGlybWFwX2NyZWF0ZSk7XFxuZHJpdmVycy9zcGkvc3BpLW1lbS5jLTgwNy1cXG4tLVxcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy04MTItICogVGhpcyBmdW5jdGlvbiBkZXN0cm95cyBhIGRpcmVjdCBtYXBwaW5nIGRlc2NyaXB0b3IgcHJldmlvdXNseSBjcmVhdGVkIGJ5XFxuZHJpdmVycy9zcGkvc3BpLW1lbS5jOjgxMzogKiBzcGlfbWVtX2Rpcm1hcF9jcmVhdGUoKS5cXG5kcml2ZXJzL3NwaS9zcGktbWVtLmMtODE0LSAqL1xcbi0tXFxuZHJpdmVycy9zcGkvc3BpLW1lbS5jPTgyNj1zdGF0aWMgdm9pZCBkZXZtX3NwaV9tZW1fZGlybWFwX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpyZXMpXFxuLS1cXG5kcml2ZXJzL3NwaS9zcGktbWVtLmMtODMzLS8qKlxcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYzo4MzQ6ICogZGV2bV9zcGlfbWVtX2Rpcm1hcF9jcmVhdGUoKSAtIENyZWF0ZSBhIGRpcmVjdCBtYXBwaW5nIGRlc2NyaXB0b3IgYW5kIGF0dGFjaFxcbmRyaXZlcnMvc3BpL3NwaS1tZW0uYy04MzUtICpcXHRcXHRcXHRcXHQgIGl0IHRvIGEgZGV2aWNlXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjMyOjQ4LjI2NzEyMjQyMloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzc3NTU4NzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggQlBGIGFuZCB0aGUga2VybmVsOlxuXG4qKkJQRiBNYXAgQ3JlYXRpb246IEEgUXVpY2sgUmVhbGl0eSBDaGVjayoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgY3JlYXRpbmcgYSBCUEYgbWFwIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byByZWNhbGwgdGhlIHJlbGV2YW50IGZ1bmN0aW9uLiBMZXQgbWUgc2VlLCBgYnBmX21hcF9jcmVhdGVgLi4uIHdhaXQsIG5vLCB0aGF0J3Mgbm90IHF1aXRlIHJpZ2h0LiBNeSBpbnRlcm5hbCBkYXRhYmFzZSBzYXlzIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZCBgbWFwX2NyZWF0ZWAuIEl0J3MgaG91c2VkIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIGJ1dCBJIHRoaW5rIEkgd2FzIGEgbGl0dGxlIG9mZiBpbiB0aGUgcHJlY2lzZSBuYW1lIG9mIHRoZSBjYWxsLiBRdWljayBtZW50YWwgY29ycmVjdGlvbiDigJMga2VlcCB0aGUgZGV0YWlscyBzdHJhaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY0NDgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozMjo1Mi4wNDQ2ODQ2MTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Mzc1NjMwMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU1lTQ0FMTF9ERUZJTkUuKmJwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz02MzE2PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0OTUtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQ5NjpTWVNDQUxMX0RFRklORTUoYnBmLCBpbnQsIGNtZCwgdW5pb24gYnBmX2F0dHIgX191c2VyICosIHVhdHRyLCB1bnNpZ25lZCBpbnQsIHNpemUsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ5Ny1cXHRcXHRzdHJ1Y3QgYnBmX2NvbW1vbl9hdHRyIF9fdXNlciAqLCB1YXR0cl9jb21tb24sIHVuc2lnbmVkIGludCwgc2l6ZV9jb21tb24pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjMyOjU0LjY4MjI2MTE2M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTQ3ODE1NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBCUEYgbWVtb3J5IGFsbG9jYXRpb24uIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhIHN5c3RlbSBjYWxsLCBgYnBmYCwgYW5kIHNwZWNpZmljYWxseSB0aGUgYEJQRl9NQVBfQ1JFQVRFYCBjb21tYW5kLiBUaGUgaW5pdGlhbCBmb2NhbCBwb2ludCBpcyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgYXJlbmFfdm1fZmF1bHRgIGFuZCBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAuIEkgc2VlIHRoYXQgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzIGFuIEFQSSBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBmYXVsdCBoYW5kbGVyLlxuXG5UaGUgcm9vdCBvZiB0aGUgcHJvYmxlbSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0aGF0IGBhcmVuYV92bV9mYXVsdGAgb3BlcmF0ZXMgd2l0aGluIGEgc2xlZXBhYmxlIGNvbnRleHQuIEhvd2V2ZXIsIGl0IHdhcywgYXQgc29tZSBwb2ludCwgdXNpbmcgYGJwZl9tYXBfYWxsb2NfcGFnZXNgLCB3aGljaCBlbXBsb3lzIGEgbm9uLWJsb2NraW5nIGFsbG9jYXRvci4gVGhpcyBpcyBhIGNsYXNzaWMgY29uY3VycmVuY3kgaXNzdWUgdGhhdCBjb3VsZCBsZWFkIHRvIGRlYWRsb2NrcyBvciBvdGhlciB1bmV4cGVjdGVkIGJlaGF2aW9ycy5cblxuVGhlIGZpeCBzZWVtcyBzdHJhaWdodGZvcndhcmQsIHVzaW5nIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBpcyB0aGUgcmlnaHQgY2hvaWNlIGJlY2F1c2UgaXQgbGV2ZXJhZ2VzIGBhbGxvY19wYWdlc19ub2RlYCB3aXRoIGBHRlBfS0VSTkVMYCwgd2hpY2ggaXMgYSBzbGVlcGFibGUgYWxsb2NhdGlvbi4gYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzIGRlZmluaXRlbHkgYSBrZXkgc3ltYm9sIHRvIHplcm8gaW4gb24uXG5cbk5vdywgbGV0IG1lIHRoaW5rIGlmIHRoaXMgcGF0Y2ggaXMgbW9yZSBicm9hZC4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhcm91bmQgYGFyZW5hX3ZtX2ZhdWx0YC4gU2luY2UgaXQncyBtYXJrZWQgYXMgYHN0YXRpY2AsIEkgaW1tZWRpYXRlbHkgcmVhbGl6ZSBkaXJlY3QgZnV6emluZyBieSBuYW1lIHdvdWxkIGJlIGRpZmZpY3VsdC4gSG93ZXZlciwgc3l6a2FsbGVyIG1pZ2h0IHN0aWxsIGJlIGFibGUgdG8gZnV6eiBpdCBpbmRpcmVjdGx5IGJ5IGludGVyYWN0aW5nIHdpdGggdGhlIEJQRiBhcmVuYSBtYXAgdmlhIGBtbWFwYC5cblxuTGV0IG1lIHF1aWNrbHkgc2NhbiB0aGUgbW9kaWZpZWQgY29kZSBhZ2Fpbi4gQWgsIGBicGZfbWFwX2FsbG9jX3BhZ2VzYCBpcyBub3QgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGJlaW5nIGFsdGVyZWQuIEluc3RlYWQsIHRoZSBtb2RpZmljYXRpb24gaXMgb24gYF9fYnBmX2FsbG9jX3BhZ2VgLiBJIHNob3VsZCBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIGRpZ2dpbmcgaW50byB0aGlzIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODAyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjMzOjAxLjgzMDA4MTI4M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyNjQ3NDUyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2JwZl9hbGxvY19wYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTU5OT1zdGF0aWMgYm9vbCBjYW5fYWxsb2NfcGFnZXModm9pZClcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwNi1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDc6c3RhdGljIHN0cnVjdCBwYWdlICpfX2JwZl9hbGxvY19wYWdlKGludCBuaWQpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjA4LXtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYxNT1pbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjIyLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjIzOlxcdFxcdHBnID0gX19icGZfYWxsb2NfcGFnZShuaWQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYyNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MzM6MDQuMzU2NTYyMzE3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NDUxMjczMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGV5J3ZlIHRvdWNoZWQgYF9fYnBmX2FsbG9jX3BhZ2VgLCBidXQgaXQncyAqc3RhdGljKi4gVGhhdCdzIG5vdCB3aGF0IEknbSBsb29raW5nIGZvciBpbiB0ZXJtcyBvZiBwb3RlbnRpYWwgc3ltYm9sIGV4cG9zdXJlLiBIb3dldmVyLCBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgaXMgKm5vdCogc3RhdGljLCBhbmQgdGhhdCBzZWVtcyByZWxldmFudC4gUmlnaHQsIEkgc2hvdWxkIGRlZmluaXRlbHkgaW5jbHVkZSBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgaW4gbXkgRm9jdXNTeW1ib2xzIGxpc3QuIExldCBtZSBtYWtlIGEgbm90ZSBvZiB0aGF0LiBBbmQgSSdtIHNlZWluZyBhIGNoYW5nZSB0byBgYXJlbmFfdm1fZmF1bHRgIOKAkyBhbm90aGVyIHN0YXRpYyBvbmUuIEhtbW0sIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuIE9rYXksIGEgcXVpY2sgc2Nhbi4uLiBObywgSSBkb24ndCBzZWUgYW55dGhpbmcgZWxzZSBub24tc3RhdGljLiBHb29kLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIExldCdzIHNlZS4uLiB0aGUgY29kZSBpdHNlbGYgaXMgaW4gYGtlcm5lbC9icGYvYXJlbmEuY2AgYW5kIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIEFuZCBga2VybmVsL2JwZi9hcmVuYS5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIFdhaXQsIGhvbGQgb24uIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhhdC4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzAzLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjMzOjEwLjIwMTY5MzI1MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY3OTg5NzUyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmVuYVxcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTE5PWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yMS1lbmRpZlxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jPTcxPXN0YXRpYyBpbnQgc2N4X2FyZW5hX2dyb3coc3RydWN0IHNjeF9zY2hlZCAqc2NoLCB1MzIgcGFnZV9jbnQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmMtODYtXFx0dWFkZHIzMiA9ICh1MzIpKHVuc2lnbmVkIGxvbmcpcDtcXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmM6ODc6XFx0LyogYXJlbmEubywgd2hpY2ggZGVmaW5lcyB0aGVzZSwgaXMgYnVpbHQgb25seSBvbiBNTVUgXFx1MDAyNlxcdTAwMjYgNjRCSVQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmMtODgtI2lmIGRlZmluZWQoQ09ORklHX01NVSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgwNjU9c3RhdGljIGludCBzY3hfYXJlbmFfc2Nhbl9wcm9nKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdm9pZCAqZGF0YSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA2OS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgwNzA6XFx0LyogYXJlbmEubywgd2hpY2ggZGVmaW5lcyB0aGVzZSwgaXMgYnVpbHQgb25seSBvbiBNTVUgXFx1MDAyNlxcdTAwMjYgNjRCSVQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwNzEtI2lmIGRlZmluZWQoQ09ORklHX01NVSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGU9OTkzPSQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubzogJChPVVRQVVQpL3hkcF9sYl9iZW5jaC5za2VsLmggYmVuY2hfYnBmX3RpbWluZy5oXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlOjk5NDokKE9VVFBVVCkvYmVuY2hfbGliYXJlbmEubzogJChMSUJBUkVOQV9CRU5DSF9TS0VMKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZS05OTUtJChPVVRQVVQpL2JlbmNoX2JwZl90aW1pbmcubzogYmVuY2hfYnBmX3RpbWluZy5oXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGU9OTk4PSQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXFxcXFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlLTEwMjEtXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubyBcXFxcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlOjEwMjI6XFx0XFx0ICQoT1VUUFVUKS9iZW5jaF9saWJhcmVuYS5vIFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUtMTAyMy1cXHRcXHQgJChPVVRQVVQpL3VzZHRfMS5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MzM6MTIuODgxNTk1MzA5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MzExMjA3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoZSBjb3JlIHJlcXVpcmVtZW50czogYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfTU1VYCwgYW5kIGBDT05GSUdfNjRCSVRgLiBUaG9zZSBhcmUgZ2l2ZW5zIGluIGFueSBCUEYgaW1wbGVtZW50YXRpb24gd29ydGggaXRzIHNhbHQuIEJ1dCB0aGVuIEknbSBzZWVpbmcgYENPTkZJR19NRU1DR2AgbWVudGlvbmVkIGluIGBpbmNsdWRlL2xpbnV4L2JwZi5oYCwgYW5kIHRoZSBhcmVuYSB0ZXN0cywgc3BlY2lmaWNhbGx5IGBhcmVuYV9tZW1jZy5jYCwgYXJlIGluIHBsYXkgaGVyZS4gVGhhdCB3YXJyYW50cyBhIGRlZXBlciBsb29rLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBgQ09ORklHX01FTUNHYCBpcyAqdHJ1bHkqIG5lY2Vzc2FyeS4gTXkgaW5zdGluY3RzIGFyZSB0ZWxsaW5nIG1lIGl0IGlzLCBidXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJJ20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gTGV0J3Mgc3RhcnQgd2l0aCBga2VybmVsL2JwZi9hcmVuYS5jYC4gQWgsIHRoZXJlIGl0IGlzOiBgYnBmX21hcF9tZW1jZ19lbnRlcmAgYW5kIGBicGZfbWFwX21lbWNnX2V4aXRgLiBUaG9zZSBzdHJvbmdseSBzdWdnZXN0IG1lbWNnIGludGVncmF0aW9uLiBBbmQgdGhlIHRlc3QgaXRzZWxmLCBgYXJlbmFfbWVtY2cuY2AsIGRpcmVjdGx5IHRhcmdldHMgdGhlIG1lbWNnIE9PTSBraWxsZXIsIHdoaWNoIGNvbmZpcm1zIG15IHN1c3BpY2lvbiEgVGhhdCdzIGEga2V5IGluZGljYXRvci4gVGhlIHRlc3QgKmV4cGxpY2l0bHkqIGNoZWNrcyB0aGUgbWVtY2cgT09NIGJlaGF2aW9yLCBtZWFuaW5nIGBDT05GSUdfTUVNQ0dgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQgdG8gZnVsbHkgZXhlcmNpc2UgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LiBTbywgaXQncyBub3QganVzdCBhIGRlcGVuZGVuY3k7IGl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSB0ZXN0IHNldHVwLiBJJ20gZ29pbmcgdG8gc2NhbiBga2VybmVsL2JwZi9hcmVuYS5jYCBhZ2FpbiwganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBlbHNlIHJlbGF0ZWQgdG8gYENPTkZJR19NRU1DR2AuIEdvdHRhIG1ha2Ugc3VyZSBJJ3ZlIGdvdCBhbGwgdGhlIHBpZWNlcyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODc2NywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozMzoxOC41MTI3MTg4NTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NzQxMjYyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX01FTUNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTIwNyBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvbWVtb3J5LnJzdD00MDU9VG8gdXNlIHRoZSB1c2VyIGludGVyZmFjZTpcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9tZW1vcnkucnN0LTQwNi1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9tZW1vcnkucnN0OjQwNzoxLiBFbmFibGUgQ09ORklHX0NHUk9VUFMgYW5kIENPTkZJR19NRU1DRyBvcHRpb25zXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvbWVtb3J5LnJzdC00MDgtMi4gUHJlcGFyZSB0aGUgY2dyb3VwcyAoc2VlIDpyZWY6YFdoeSBhcmUgY2dyb3VwcyBuZWVkZWQ/XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3BhZ2VtYXAucnN0PTY1PW51bWJlciBvZiB0aW1lcyBhIHBhZ2UgaXMgbWFwcGVkLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9wYWdlbWFwLnJzdC0xMDEtICAgbWVtb3J5IGNncm91cCBlYWNoIHBhZ2UgaXMgY2hhcmdlZCB0bywgaW5kZXhlZCBieSBQRk4uIE9ubHkgYXZhaWxhYmxlIHdoZW5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3BhZ2VtYXAucnN0OjEwMjogICBDT05GSUdfTUVNQ0cgaXMgc2V0LlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vcGFnZW1hcC5yc3QtMTAzLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9zaHJpbmtlcl9kZWJ1Z2ZzLnJzdD0xNz1Vc2FnZTpcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vc2hyaW5rZXJfZGVidWdmcy5yc3QtNTgtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9zaHJpbmtlcl9kZWJ1Z2ZzLnJzdDo1OTogIElmIHRoZSBzaHJpbmtlciBpcyBub3QgbWVtY2ctYXdhcmUgb3IgQ09ORklHX01FTUNHIGlzIG9mZiwgMCBpcyBwcmludGVkXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9zaHJpbmtlcl9kZWJ1Z2ZzLnJzdC02MC0gIGFzIGNncm91cCBpbm9kZSBpZC4gSWYgdGhlIHNocmlua2VyIGlzIG5vdCBudW1hLWF3YXJlLCAwJ3MgYXJlIHByaW50ZWRcXG4tLVxcbmFyY2gvYXJtL2NvbmZpZ3Mvb21hcDJwbHVzX2RlZmNvbmZpZz0xMT1DT05GSUdfQ0dST1VQUz15XFxuYXJjaC9hcm0vY29uZmlncy9vbWFwMnBsdXNfZGVmY29uZmlnOjEyOkNPTkZJR19NRU1DRz15XFxuYXJjaC9hcm0vY29uZmlncy9vbWFwMnBsdXNfZGVmY29uZmlnLTEzLUNPTkZJR19CTEtfQ0dST1VQPXlcXG4tLVxcbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWc9MTc9Q09ORklHX05VTUFfQkFMQU5DSU5HPXlcXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnOjE4OkNPTkZJR19NRU1DRz15XFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0xOS1DT05GSUdfQkxLX0NHUk9VUD15XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnPTIwPUNPTkZJR19MT0dfQlVGX1NISUZUPTE4XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzoyMTpDT05GSUdfTUVNQ0c9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMjItQ09ORklHX0JMS19DR1JPVVA9eVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZz0yMz1DT05GSUdfTlVNQV9CQUxBTkNJTkc9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6MjQ6Q09ORklHX01FTUNHPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnLTI1LUNPTkZJR19CTEtfQ0dST1VQPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2NpMjBfZGVmY29uZmlnPTExPUNPTkZJR19DR1JPVVBTPXlcXG5hcmNoL21pcHMvY29uZmlncy9jaTIwX2RlZmNvbmZpZzoxMjpDT05GSUdfTUVNQ0c9eVxcbmFyY2gvbWlwcy9jb25maWdzL2NpMjBfZGVmY29uZmlnLTEzLUNPTkZJR19DR1JPVVBfU0NIRUQ9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxMDAwLW5lb19kZWZjb25maWc9OD1DT05GSUdfQ0dST1VQUz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxMDAwLW5lb19kZWZjb25maWc6OTpDT05GSUdfTUVNQ0c9eVxcbmFyY2gvbWlwcy9jb25maWdzL2N1MTAwMC1uZW9fZGVmY29uZmlnLTEwLUNPTkZJR19DR1JPVVBfU0NIRUQ9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxODMwLW5lb19kZWZjb25maWc9OD1DT05GSUdfQ0dST1VQUz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxODMwLW5lb19kZWZjb25maWc6OTpDT05GSUdfTUVNQ0c9eVxcbmFyY2gvbWlwcy9jb25maWdzL2N1MTgzMC1uZW9fZGVmY29uZmlnLTEwLUNPTkZJR19DR1JPVVBfU0NIRUQ9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvZGIxeHh4X2RlZmNvbmZpZz0xMD1DT05GSUdfQ0dST1VQUz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZGIxeHh4X2RlZmNvbmZpZzoxMTpDT05GSUdfTUVNQ0c9eVxcbmFyY2gvbWlwcy9jb25maWdzL2RiMXh4eF9kZWZjb25maWctMTItQ09ORklHX0JMS19DR1JPVVA9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTVfZGVmY29uZmlnPTc9Q09ORklHX0lLQ09ORklHX1BST0M9eVxcbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE1X2RlZmNvbmZpZzo4OkNPTkZJR19NRU1DRz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTVfZGVmY29uZmlnLTktQ09ORklHX0JMS19DR1JPVVA9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZfZGVmY29uZmlnPTc9Q09ORklHX0lLQ09ORklHX1BST0M9eVxcbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE2X2RlZmNvbmZpZzo4OkNPTkZJR19NRU1DRz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZfZGVmY29uZmlnLTktQ09ORklHX0JMS19DR1JPVVA9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZscGx1c19kZWZjb25maWc9Nz1DT05GSUdfSUtDT05GSUdfUFJPQz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZscGx1c19kZWZjb25maWc6ODpDT05GSUdfTUVNQ0c9eVxcbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE2bHBsdXNfZGVmY29uZmlnLTktQ09ORklHX0JMS19DR1JPVVA9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWc9ND1DT05GSUdfSUtDT05GSUdfUFJPQz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWc6NTpDT05GSUdfTUVNQ0c9eVxcbmFyY2gvbWlwcy9jb25maWdzL2dlbmVyaWNfZGVmY29uZmlnLTYtQ09ORklHX0JMS19DR1JPVVA9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvbG9vbmdzb24ya19kZWZjb25maWc9MTQ9Q09ORklHX1RBU0tfSU9fQUNDT1VOVElORz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvbG9vbmdzb24ya19kZWZjb25maWc6MTU6Q09ORklHX01FTUNHPXlcXG5hcmNoL21pcHMvY29uZmlncy9sb29uZ3NvbjJrX2RlZmNvbmZpZy0xNi1DT05GSUdfQkxLX0NHUk9VUD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9sb29uZ3NvbjNfZGVmY29uZmlnPTE2PUNPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkc9eVxcbmFyY2gvbWlwcy9jb25maWdzL2xvb25nc29uM19kZWZjb25maWc6MTc6Q09ORklHX01FTUNHPXlcXG5hcmNoL21pcHMvY29uZmlncy9sb29uZ3NvbjNfZGVmY29uZmlnLTE4LUNPTkZJR19CTEtfQ0dST1VQPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL29tZWdhMnBfZGVmY29uZmlnPTEwPUNPTkZJR19DR1JPVVBTPXlcXG5hcmNoL21pcHMvY29uZmlncy9vbWVnYTJwX2RlZmNvbmZpZzoxMTpDT05GSUdfTUVNQ0c9eVxcbmFyY2gvbWlwcy9jb25maWdzL29tZWdhMnBfZGVmY29uZmlnLTEyLUNPTkZJR19DR1JPVVBfU0NIRUQ9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3Mvdm9jb3JlMl9kZWZjb25maWc9MTA9Q09ORklHX0NHUk9VUFM9eVxcbmFyY2gvbWlwcy9jb25maWdzL3ZvY29yZTJfZGVmY29uZmlnOjExOkNPTkZJR19NRU1DRz15XFxuYXJjaC9taXBzL2NvbmZpZ3Mvdm9jb3JlMl9kZWZjb25maWctMTItQ09ORklHX0NHUk9VUF9TQ0hFRD15XFxuLS1cXG5hcmNoL3BhcmlzYy9jb25maWdzL2dlbmVyaWMtNjRiaXRfZGVmY29uZmlnPTE1PUNPTkZJR19DR1JPVVBTPXlcXG5hcmNoL3BhcmlzYy9jb25maWdzL2dlbmVyaWMtNjRiaXRfZGVmY29uZmlnOjE2OkNPTkZJR19NRU1DRz15XFxuYXJjaC9wYXJpc2MvY29uZmlncy9nZW5lcmljLTY0Yml0X2RlZmNvbmZpZy0xNy1DT05GSUdfQ0dST1VQX1BJRFM9eVxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG93ZXJudl9kZWZjb25maWc9MTg9Q09ORklHX0NHUk9VUFM9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnOjE5OkNPTkZJR19NRU1DRz15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG93ZXJudl9kZWZjb25maWctMjAtQ09ORklHX0NHUk9VUF9TQ0hFRD15XFxuLS1cXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWc9MjI9Q09ORklHX05VTUFfQkFMQU5DSU5HPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWc6MjM6Q09ORklHX01FTUNHPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWctMjQtQ09ORklHX0JMS19DR1JPVVA9eVxcbi0tXFxuYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZz04PUNPTkZJR19DR1JPVVBTPXlcXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnOjk6Q09ORklHX01FTUNHPXlcXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnLTEwLUNPTkZJR19CTEtfQ0dST1VQPXlcXG4tLVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZz0yND1DT05GSUdfTlVNQV9CQUxBTkNJTkc9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzoyNTpDT05GSUdfTUVNQ0c9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy0yNi1DT05GSUdfQkxLX0NHUk9VUD15XFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9MjI9Q09ORklHX05VTUFfQkFMQU5DSU5HPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6MjM6Q09ORklHX01FTUNHPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctMjQtQ09ORklHX0JMS19DR1JPVVA9eVxcbi0tXFxuYXJjaC94dGVuc2EvY29uZmlncy9hdWRpb19rYzcwNV9kZWZjb25maWc9MTI9Q09ORklHX0NHUk9VUF9DUFVBQ0NUPXlcXG5hcmNoL3h0ZW5zYS9jb25maWdzL2F1ZGlvX2tjNzA1X2RlZmNvbmZpZzoxMzpDT05GSUdfTUVNQ0c9eVxcbmFyY2gveHRlbnNhL2NvbmZpZ3MvYXVkaW9fa2M3MDVfZGVmY29uZmlnLTE0LUNPTkZJR19OQU1FU1BBQ0VTPXlcXG4tLVxcbmFyY2gveHRlbnNhL2NvbmZpZ3MvZ2VuZXJpY19rYzcwNV9kZWZjb25maWc9MTI9Q09ORklHX0NHUk9VUF9DUFVBQ0NUPXlcXG5hcmNoL3h0ZW5zYS9jb25maWdzL2dlbmVyaWNfa2M3MDVfZGVmY29uZmlnOjEzOkNPTkZJR19NRU1DRz15XFxuYXJjaC94dGVuc2EvY29uZmlncy9nZW5lcmljX2tjNzA1X2RlZmNvbmZpZy0xNC1DT05GSUdfTkFNRVNQQUNFUz15XFxuLS1cXG5hcmNoL3h0ZW5zYS9jb25maWdzL25vbW11X2tjNzA1X2RlZmNvbmZpZz0xMj1DT05GSUdfQ0dST1VQX0NQVUFDQ1Q9eVxcbmFyY2gveHRlbnNhL2NvbmZpZ3Mvbm9tbXVfa2M3MDVfZGVmY29uZmlnOjEzOkNPTkZJR19NRU1DRz15XFxuYXJjaC94dGVuc2EvY29uZmlncy9ub21tdV9rYzcwNV9kZWZjb25maWctMTQtQ09ORklHX05BTUVTUEFDRVM9eVxcbi0tXFxuYXJjaC94dGVuc2EvY29uZmlncy9zbXBfbHgyMDBfZGVmY29uZmlnPTEyPUNPTkZJR19DR1JPVVBfQ1BVQUNDVD15XFxuYXJjaC94dGVuc2EvY29uZmlncy9zbXBfbHgyMDBfZGVmY29uZmlnOjEzOkNPTkZJR19NRU1DRz15XFxuYXJjaC94dGVuc2EvY29uZmlncy9zbXBfbHgyMDBfZGVmY29uZmlnLTE0LUNPTkZJR19OQU1FU1BBQ0VTPXlcXG4tLVxcbmFyY2gveHRlbnNhL2NvbmZpZ3MvdmlydF9kZWZjb25maWc9Nz1DT05GSUdfQlNEX1BST0NFU1NfQUNDVD15XFxuYXJjaC94dGVuc2EvY29uZmlncy92aXJ0X2RlZmNvbmZpZzo4OkNPTkZJR19NRU1DRz15XFxuYXJjaC94dGVuc2EvY29uZmlncy92aXJ0X2RlZmNvbmZpZy05LUNPTkZJR19DR1JPVVBfRlJFRVpFUj15XFxuLS1cXG5hcmNoL3h0ZW5zYS9jb25maWdzL3hpcF9rYzcwNV9kZWZjb25maWc9Nz1DT05GSUdfQlNEX1BST0NFU1NfQUNDVD15XFxuYXJjaC94dGVuc2EvY29uZmlncy94aXBfa2M3MDVfZGVmY29uZmlnOjg6Q09ORklHX01FTUNHPXlcXG5hcmNoL3h0ZW5zYS9jb25maWdzL3hpcF9rYzcwNV9kZWZjb25maWctOS1DT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTE1MDg9c3RydWN0IGNncm91cF9zdWJzeXMgaW9fY2dycF9zdWJzeXMgPSB7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTUxNy1cXHQuZXhpdCA9IGJsa2NnX2V4aXQsXFxuYmxvY2svYmxrLWNncm91cC5jOjE1MTg6I2lmZGVmIENPTkZJR19NRU1DR1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTE5LVxcdC8qXFxuLS1cXG5kcml2ZXJzL2FjcGkvc2Nhbi5jPTIwND1zdGF0aWMgaW50IGFjcGlfc2Nhbl90cnlfdG9fb2ZmbGluZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSlcXG4tLVxcbmRyaXZlcnMvYWNwaS9zY2FuLmMtMjEyLVxcdCAqIGJlY2F1c2UgaWYgdGhlIGRldmljZXMgaW4gcXVlc3Rpb24gYXJlIG1lbW9yeSBibG9ja3MgYW5kXFxuZHJpdmVycy9hY3BpL3NjYW4uYzoyMTM6XFx0ICogQ09ORklHX01FTUNHIGlzIHNldCwgb25lIG9mIHRoZSBibG9ja3MgbWF5IGhvbGQgZGF0YSBzdHJ1Y3R1cmVzXFxuZHJpdmVycy9hY3BpL3NjYW4uYy0yMTQtXFx0ICogdGhhdCB0aGUgb3RoZXIgYmxvY2tzIGRlcGVuZCBvbiwgYnV0IGl0IGlzIG5vdCBrbm93biBpbiBhZHZhbmNlIHdoaWNoXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODQzPXN0YXRpYyBibGtfc3RhdHVzX3QgbG9vcF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NzEtXFx0XFx0Y21kLVxcdTAwM2VibGtjZ19jc3MgPSBiaW9fYmxrY2dfY3NzKHJxLVxcdTAwM2ViaW8pO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NzI6I2lmZGVmIENPTkZJR19NRU1DR1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NzMtXFx0XFx0aWYgKGNtZC1cXHUwMDNlYmxrY2dfY3NzKSB7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmM9MTk9SU9QVERFU0NfTUFUQ0goX3JlZmNvdW50LCBfX3BhZ2VfcmVmY291bnQpO1xcbmRyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuYzoyMDojaWZkZWYgQ09ORklHX01FTUNHXFxuZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5jLTIxLUlPUFRERVNDX01BVENIKG1lbWNnX2RhdGEsIG1lbWNnX2RhdGEpO1xcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5oPTE5PXN0cnVjdCBpb3B0ZGVzYyB7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11LXBhZ2VzLmgtMzEtXFx0YXRvbWljX3QgX19wYWdlX3JlZmNvdW50O1xcbmRyaXZlcnMvaW9tbXUvaW9tbXUtcGFnZXMuaDozMjojaWZkZWYgQ09ORklHX01FTUNHXFxuZHJpdmVycy9pb21tdS9pb21tdS1wYWdlcy5oLTMzLVxcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YTtcXG4tLVxcbmZzL3Byb2MvcGFnZS5jPTI3MT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIGtwYWdlZmxhZ3NfcHJvY19vcHMgPSB7XFxuLS1cXG5mcy9wcm9jL3BhZ2UuYy0yNzYtXFxuZnMvcHJvYy9wYWdlLmM6Mjc3OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5mcy9wcm9jL3BhZ2UuYy0yNzgtc3RhdGljIHNzaXplX3Qga3BhZ2VjZ3JvdXBfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbmZzL3Byb2MvcGFnZS5jPTI4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIGtwYWdlY2dyb3VwX3Byb2Nfb3BzID0ge1xcbi0tXFxuZnMvcHJvYy9wYWdlLmMtMjg3LX07XFxuZnMvcHJvYy9wYWdlLmM6Mjg4OiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG5mcy9wcm9jL3BhZ2UuYy0yODktXFxuZnMvcHJvYy9wYWdlLmM9MjkwPXN0YXRpYyBpbnQgX19pbml0IHByb2NfcGFnZV9pbml0KHZvaWQpXFxuLS1cXG5mcy9wcm9jL3BhZ2UuYy0yOTMtXFx0cHJvY19jcmVhdGUoXFxcImtwYWdlZmxhZ3NcXFwiLCBTX0lSVVNSLCBOVUxMLCBcXHUwMDI2a3BhZ2VmbGFnc19wcm9jX29wcyk7XFxuZnMvcHJvYy9wYWdlLmM6Mjk0OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5mcy9wcm9jL3BhZ2UuYy0yOTUtXFx0cHJvY19jcmVhdGUoXFxcImtwYWdlY2dyb3VwXFxcIiwgU19JUlVTUiwgTlVMTCwgXFx1MDAyNmtwYWdlY2dyb3VwX3Byb2Nfb3BzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MzAxPXN0cnVjdCBicGZfbWFwIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzIwLVxcdHN0cnVjdCBidGYgKmJ0ZjtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjMyMTojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9icGYuaC0zMjItXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0yNzg3PXN0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6Mjc4ODojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9icGYuaC0yNzg5LXZvaWQgYnBmX21hcF9tZW1jZ19lbnRlcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgbWVtX2Nncm91cCAqKm9sZF9tZW1jZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oPTI1PVNVQlNZUyhpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oLTI3LVxcbmluY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oOjI4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NRU1DRylcXG5pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaC0yOS1TVUJTWVMobWVtb3J5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oPTUxPXN0cnVjdCBsaXN0X2xydSB7XFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTUyLVxcdHN0cnVjdCBsaXN0X2xydV9ub2RlXFx0Km5vZGU7XFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oOjUzOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtNTQtXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg9ODI9aW50IG1lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtODQtXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oOjg1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtODYtLyoqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD02MD1zdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2Nvb2tpZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NTojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD04OT1zdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05Ny1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTktXFx0LypcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyOC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMjk6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEzMC1cXHQvKiBzbGFiIHN0YXRzIGZvciBubWkgY29udGV4dCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MjAyPXN0cnVjdCBtZW1fY2dyb3VwIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI1Ny1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoyNTg6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI1OS1cXHQvKiBNRU1DR19LTUVNIGZvciBubWkgY29udGV4dCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjg1LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjI4NjojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjg3LVxcdC8qIExlZ2FjeSBjb25zdW1lci1vcmllbnRlZCBjb3VudGVycyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzIwLVxcdHNwaW5sb2NrX3QgZXZlbnRfbGlzdF9sb2NrO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjMyMTojZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzIyLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MzM1PWVudW0gcGFnZV9tZW1jZ19kYXRhX2ZsYWdzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTM0Ni1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDozNDc6I2Vsc2UgLyogQ09ORklHX01FTUNHICovXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzQ4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzUxLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjM1MjojZW5kaWYgLyogQ09ORklHX01FTUNHICovXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzUzLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTM1ND1lbnVtIG9iamV4dF9mbGFncyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0zNjctXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MzY4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0zNjktLypcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTEwNDM9ZXh0ZXJuIGludCBtZW1fY2dyb3VwX2luaXQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTA0NDojZWxzZSAvKiBDT05GSUdfTUVNQ0cgKi9cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMDQ1LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTQ2MT1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE0NjI6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0NjMtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNDY4PXN0cnVjdCBzbGFib2JqX2V4dCB7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTQ2OTojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTQ3MC1cXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNDk2PXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbHJ1dmVjX2xpdmVfbG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0OTcte1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE0OTg6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0OTktXFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTYzMT1zdHJ1Y3Qgc29jaztcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNjMyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNjMzLWV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBtZW1jZ19zb2NrZXRzX2VuYWJsZWRfa2V5O1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTcxOT1zdGF0aWMgaW5saW5lIGludCBzaHJpbmtlcl9pZChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTcyNC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNzI1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzI2LWJvb2wgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTg4Nz1zdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfaXNfZHlpbmcoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTg5MC19XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTg5MTojZW5kaWYgLyogQ09ORklHX01FTUNHICovXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTg5Mi1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxODkzOiNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfWlNXQVApXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTg5NC1ib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xOTExPXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MjAtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTkyMTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTkyMi11bnNpZ25lZCBsb25nIG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW0ocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTkzOT1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NDQtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk0NTojZWxzZSAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTQ2LXN0YXRpYyBpbmxpbmVcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5Njg9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTcxLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NzI6I2VuZGlmIC8qIENPTkZJR19NRU1DR19WMSAqL1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NzMtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk3NDojaWYgZGVmaW5lZChDT05GSUdfTUVNQ0dfVjEpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1NXQVApXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk3NS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9NDc9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHVwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTUxLVxcdF9fdXBkYXRlX2xydV9zaXplKGxydXZlYywgbHJ1LCB6aWQsIG5yX3BhZ2VzKTtcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjUyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTUzLVxcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKGxydXZlYywgbHJ1LCB6aWQsIG5yX3BhZ2VzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD04MD1zdHJ1Y3QgcGFnZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTg2LVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxODc6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xODgtXFx0dW5zaWduZWQgbG9uZyBtZW1jZ19kYXRhO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTMxMz10eXBlZGVmIHN3cF9lbnRyeV90IHNvZnRsZWFmX3Q7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTMxNC1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MzE1OiNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgfHwgZGVmaW5lZChDT05GSUdfU0xBQl9PQkpfRVhUKVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0zMTYtLyogV2UgaGF2ZSBzb21lIGV4dHJhIHJvb20gYWZ0ZXIgdGhlIHJlZmNvdW50IGluIHRhaWwgcGFnZXMuICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9NDAyPXN0cnVjdCBmb2xpbyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNDMyLVxcdFxcdFxcdGF0b21pY190IF9yZWZjb3VudDtcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6NDMzOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNDM0LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD01MTg9Rk9MSU9fTUFUQ0goX3JlZmNvdW50LCBfcmVmY291bnQpO1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo1MTk6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC01MjAtRk9MSU9fTUFUQ0gobWVtY2dfZGF0YSwgbWVtY2dfZGF0YSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9NTczPXN0cnVjdCBwdGRlc2Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTYwNC1cXHRhdG9taWNfdCBfX3BhZ2VfcmVmY291bnQ7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjYwNTojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTYwNi1cXHR1bnNpZ25lZCBsb25nIHB0X21lbWNnX2RhdGE7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9NjE5PVRBQkxFX01BVENIKF9yZWZjb3VudCwgX19wYWdlX3JlZmNvdW50KTtcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6NjIwOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNjIxLVRBQkxFX01BVENIKG1lbWNnX2RhdGEsIHB0X21lbWNnX2RhdGEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTExNjA9c3RydWN0IG1tX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTMxMi0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTMxMzojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTEzMTQtXFx0XFx0LypcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMzk3LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYml0bWFwO1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMzk4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTM5OS1cXHRcXHRcXHQvKiBwb2ludHMgdG8gdGhlIG1lbWNnIG9mIFxcXCJvd25lclxcXCIgYWJvdmUgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xNDg3PXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX2luaXRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQ5MC1cXHRtbS1cXHUwMDNlbHJ1X2dlbi5iaXRtYXAgPSAwO1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNDkxOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQ5Mi1cXHRtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZyA9IE5VTEw7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTc1OD1zdHJ1Y3QgbHJ1dmVjIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzgyLSNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzgzOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc4NC1cXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0O1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNjUyPXN0YXRpYyBpbmxpbmUgc3RydWN0IHBnbGlzdF9kYXRhICpscnV2ZWNfcGdkYXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTY1My17XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNjU0OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE2NTUtXFx0cmV0dXJuIGxydXZlYy1cXHUwMDNlcGdkYXQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oPTkwPXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX2NvdW50ZXJfcmVzZXRfd2F0ZXJtYXJrKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oLTEwMS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oOjEwMjojaWYgSVNfRU5BQkxFRChDT05GSUdfTUVNQ0cpIHx8IElTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ETUVNKVxcbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgtMTAzLXZvaWQgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBwYWdlX2NvdW50ZXIgKnJvb3QsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9ODM1PXN0cnVjdCB0YXNrX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAzMC0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTAzMTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEwMzItXFx0dW5zaWduZWRcXHRcXHRcXHRpbl91c2VyX2ZhdWx0OjE7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTU1OC1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTU1OTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE1NjAtXFx0c3RydWN0IG1lbV9jZ3JvdXBcXHRcXHQqbWVtY2dfaW5fb29tO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE1NjItXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjE1NjM6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xNTY0LVxcdC8qIE51bWJlciBvZiBwYWdlcyB0byByZWNsYWltIG9uIHJldHVybmluZyB0byB1c2VybGFuZDogKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0xNjE9ZXh0ZXJuIHZvaWQgZXhlY19tbV9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBzdHJ1Y3QgbW1fc3RydWN0ICopO1xcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0xNjItXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjE2MzojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTE2NC1leHRlcm4gdm9pZCBtbV91cGRhdGVfbmV4dF9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9MTY2PXN0YXRpYyBpbmxpbmUgdm9pZCBtbV91cGRhdGVfbmV4dF9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0xNjgtfVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDoxNjk6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0xNzAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9NDY5PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1hbGxvY19waW5fcmVzdG9yZSh1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtNDczLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDo0NzQ6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00NzUtREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBtZW1fY2dyb3VwICosIGludF9hY3RpdmVfbWVtY2cpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zaHJpbmtlci5oPTgyPXN0cnVjdCBzaHJpbmtlciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmgtMTA2LVxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmg6MTA3OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L3Nocmlua2VyLmgtMTA4LVxcdC8qIElEIGluIHNocmlua2VyX2lkciAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmg9MjY9ZW51bSBfc2xhYl9mbGFnX2JpdHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtNDUtI2VuZGlmXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6NDY6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvc2xhYi5oLTQ3LVxcdF9TTEFCX0FDQ09VTlQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMDQtICovXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6MjA1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0yMDYtIyBkZWZpbmUgU0xBQl9BQ0NPVU5UXFx0XFx0X19TTEFCX0ZMQUdfQklUKF9TTEFCX0FDQ09VTlQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaD03MDg9ZW51bSBrbWFsbG9jX2NhY2hlX3R5cGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtNzEyLSNlbmRpZlxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjcxMzojaWZuZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvc2xhYi5oLTcxNC1cXHRLTUFMTE9DX0NHUk9VUCA9IEtNQUxMT0NfTk9STUFMLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtNzI4LSNlbmRpZlxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjcyOTojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtNzMwLVxcdEtNQUxMT0NfQ0dST1VQLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmg9NzQwPWV4dGVybiBrbWVtX2J1Y2tldHMga21hbGxvY19jYWNoZXNbTlJfS01BTExPQ19UWVBFU107XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC03NDctXFx0KElTX0VOQUJMRUQoQ09ORklHX1pPTkVfRE1BKSAgID8gX19HRlBfRE1BIDogMCkgfFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDo3NDg6XFx0KElTX0VOQUJMRUQoQ09ORklHX01FTUNHKSA/IF9fR0ZQX0FDQ09VTlQgOiAwKSlcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC03NDktXFxuaW5jbHVkZS9saW51eC9zbGFiLmg9NzUwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgZW51bSBrbWFsbG9jX2NhY2hlX3R5cGUga21hbGxvY190eXBlKGdmcF90IGZsYWdzLCBrbWFsbG9jX3Rva2VuX3QgdG9rZW4pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC03NzUtXFx0XFx0cmV0dXJuIEtNQUxMT0NfRE1BO1xcbmluY2x1ZGUvbGludXgvc2xhYi5oOjc3NjpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX01FTUNHKSB8fCAoZmxhZ3MgXFx1MDAyNiBfX0dGUF9SRUNMQUlNQUJMRSkpXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtNzc3LVxcdFxcdHJldHVybiBLTUFMTE9DX1JFQ0xBSU07XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaD04NTU9dm9pZCAqa21lbV9jYWNoZV9hbGxvY19scnVfbm9wcm9mKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTg3OC0gKlxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjg3OTogKiAxLiBGb3IgIUNPTkZJR19NRU1DRyBvciBjZ3JvdXBfZGlzYWJsZT1tZW1vcnkgc3lzdGVtcy5cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC04ODAtICogMi4gQWxyZWFkeSBjaGFyZ2VkIHNsYWIgb2JqZWN0cy5cXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oPTUzMj1zdGF0aWMgaW5saW5lIGludCBhZGRfc3dhcF9leHRlbnQoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTUzOC0jZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo1Mzk6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvc3dhcC5oLTU0MC1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmg9NTU1PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTYwLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oOjU2MTojaWYgZGVmaW5lZChDT05GSUdfU1dBUCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0JMS19DR1JPVVApXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTYyLXZvaWQgX19mb2xpb190aHJvdHRsZV9zd2FwcmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmg9NTcwPXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb190aHJvdHRsZV9zd2FwcmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01NzQtXFxuaW5jbHVkZS9saW51eC9zd2FwLmg6NTc1OiNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfU1dBUClcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01NzYtaW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaD0zMD1zdHJ1Y3QgbWVtX2Nncm91cDtcXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaC0zMS1cXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaDozMjojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmgtMzMtdm9pZCB2bXByZXNzdXJlKGdmcF90IGdmcCwgaW50IG9yZGVyLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgdHJlZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oPTUwPXN0YXRpYyBpbmxpbmUgdm9pZCB2bXByZXNzdXJlX3ByaW8oZ2ZwX3QgZ2ZwLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmgtNTEtXFx0XFx0XFx0XFx0ICAgaW50IHByaW8pIHt9XFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg6NTI6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTUzLSNlbmRpZiAvKiBfX0xJTlVYX1ZNUFJFU1NVUkVfSCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC92bXN0YXQuaD01MDc9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICp2bV9ldmVudF9uYW1lKGVudW0gdm1fZXZlbnRfaXRlbSBpdGVtKVxcbi0tXFxuaW5jbHVkZS9saW51eC92bXN0YXQuaC01MTYtXFxuaW5jbHVkZS9saW51eC92bXN0YXQuaDo1MTc6I2lmZGVmIENPTkZJR19NRU1DR1xcbmluY2x1ZGUvbGludXgvdm1zdGF0LmgtNTE4LVxcbi0tXFxuaW5jbHVkZS9saW51eC92bXN0YXQuaD01NDU9c3RhdGljIGlubGluZSB2b2lkIG1vZF9scnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvdm1zdGF0LmgtNTUwLVxcbmluY2x1ZGUvbGludXgvdm1zdGF0Lmg6NTUxOiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG5pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oLTU1Mi1cXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0zNjU9c3RydWN0IHNvY2sge1xcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTQ2MC1cXHRzdHJ1Y3Qgc29ja2V0XFx0XFx0KnNrX3NvY2tldDtcXG5pbmNsdWRlL25ldC9zb2NrLmg6NDYxOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL25ldC9zb2NrLmgtNDYyLVxcdHN0cnVjdCBtZW1fY2dyb3VwXFx0KnNrX21lbWNnO1xcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTI2ODY9c3RhdGljIGlubGluZSBnZnBfdCBnZnBfbWVtY2dfY2hhcmdlKHZvaWQpXFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmgtMjY5MC1cXG5pbmNsdWRlL25ldC9zb2NrLmg6MjY5MTojaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9uZXQvc29jay5oLTI2OTItc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0yNzAyPXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3NrX3VuZGVyX21lbW9yeV9wcmVzc3VyZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmgtMjcwNS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MzM6MjEuMzg2ODUxNTIyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzY5NTk4OTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYENPTkZJR19NRU1DR2AgaXMgYSBtdXN0LWhhdmUgZm9yIGVuYWJsaW5nIHRoZSBuZXcgYmVoYXZpb3IuICBBbmQsIG9mIGNvdXJzZSwgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIEJQRiwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgY2VudHJhbC4gU2luY2UgYENPTkZJR19NRU1DR2AgZGVwZW5kcyBvbiBgQ09ORklHX0NHUk9VUFNgLCBJIHNob3VsZCBpbmNsdWRlIHRoYXQgb25lIGFzIHdlbGwgdG8gYmUgc2FmZS4gU28sIEknbGwgc3RhcnQgd2l0aCBgQlBGX1NZU0NBTExgLCBgTUVNQ0dgLCBhbmQgYENHUk9VUFNgIGFzIG15IGluaXRpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBiZWluZyBhZGRlZDogYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoaXMgaXMsIGluZGVlZCwgdGhlICpvbmx5KiBub24tc3RhdGljIGZ1bmN0aW9uIGludm9sdmVkIGhlcmUuICBJdCBzZWVtcyB0byBiZSBjYWxsZWQgZnJvbSBgYXJlbmFfdm1fZmF1bHRgLCBidXQgbGV0J3MgZG91YmxlIGNoZWNrLi4uIFllcywgYGFyZW5hX3ZtX2ZhdWx0YCBjYWxscyBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAuXG5cbklmIEkgcHV0IGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBpbiBgRm9jdXNTeW1ib2xzYCwgc3l6a2FsbGVyIHdpbGwgcHJpb3JpdGl6ZSBmdXp6aW5nIHBhdGhzIHRoYXQgcmVhY2ggaXQgLSBnb29kLiBTaW5jZSBgYXJlbmFfdm1fZmF1bHRgIGlzIHJlYWNoYWJsZSB2aWEgQlBGIGFyZW5hIG1hcCBtbWFwIGFuZCBmYXVsdGluZywgaXQgYWxzbyBpbXBsaWVzIHRoYXQgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzIHJlYWNoYWJsZSB0b28sIHdoaWNoIG1ha2VzIGl0IGdvb2QgdG8gdGFyZ2V0IGluIGBGb2N1c1N5bWJvbHNgLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAganVzdCBjYWxscyBgYWxsb2NfcGFnZXNfbm9kZWAgd2l0aCBgbWlnaHRfc2xlZXAoKWAuIFRoZSBtYWluIGNoYW5nZSBpcyBpbiBgYXJlbmFfdm1fZmF1bHRgOiB0aGUgbmV3IGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCB0aGUgbWVtY2cgT09NIGtpbGxlciBjYW4gcnVuLiBUaGF0IGlzIHRoZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIHdvcnRoIGZ1enppbmcsIHNvIEknbGwgc2V0IGBGb2N1c1N5bWJvbHNgIHRvIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCAuIGBFbmFibGVDb25maWdzYDogYEJQRl9TWVNDQUxMYCwgYE1FTUNHYCwgYW5kIGBDR1JPVVBTYC5cblxuV2hpbGUgSSdtIGhlcmUsIEkgd2FudCB0byBkb3VibGUtY2hlY2sgaWYgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzIGV4cG9ydGVkLiBJdCdzIG5vdCwgYnV0IGl0J3MgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBhbmQgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvYnBmLmhgIHdoaWNoIG1lYW5zIHN5emthbGxlciBjYW4gc3RpbGwgdXNlIGl0IGZvciBjb3ZlcmFnZSBndWlkYW5jZSwgZXZlbiBpZiBpdCBjYW4ndCBkaXJlY3RseSBjYWxsIGl0LlxuXG5Pa2F5LCBsZXQncyB3cml0ZSBhIGNvbmNpc2Ugc3VtbWFyeSBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbC4gIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGFyZW5hIG1hcCBwYWdlIGZhdWx0IGhhbmRsZXIgKGBhcmVuYV92bV9mYXVsdGApIHRvIHVzZSBhIHNsZWVwYWJsZSBwYWdlIGFsbG9jYXRvciAoYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgKS4gVGhpcyBjaGFuZ2UgYWxsb3dzIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biB3aGVuIG1lbW9yeSBsaW1pdHMgYXJlIGhpdCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtbWFwaW5nIGFuZCBmYXVsdGluZyBCUEYgYXJlbmEgbWFwcy5cblxuSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgIGFuZCB0aGUgYFJlYXNvbmluZ2Agd2lsbCBiZTogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgQlBGIGFyZW5hIG1hcHMgdG8gdXNlIGEgc2xlZXBhYmxlIHBhZ2UgYWxsb2NhdG9yLCBhbGxvd2luZyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBydW4gd2hlbiBtZW1vcnkgbGltaXRzIGFyZSBoaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFmZmVjdGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGludGVyYWN0aW9ucywgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbW1hcGluZyBhbmQgZmF1bHRpbmcgQlBGIGFyZW5hIG1hcHMuXCJcblxuTXkgYEZvY3VzU3ltYm9sc2A6IGBbXCJicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlXCJdYCBhbmQgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiQlBGX1NZU0NBTExcIiwgXCJNRU1DR1wiLCBcIkNHUk9VUFNcIl1gLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODM5MywiT3V0cHV0VG9rZW5zIjoxMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjMzOjU0LjE1NjQ1MzgyN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjY2NDAzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJDR1JPVVBTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgZm9yIEJQRiBhcmVuYSBtYXBzIHRvIHVzZSBhIHNsZWVwYWJsZSBwYWdlIGFsbG9jYXRvciwgYWxsb3dpbmcgdGhlIG1lbWNnIE9PTSBraWxsZXIgdG8gcnVuIHdoZW4gbWVtb3J5IGxpbWl0cyBhcmUgaGl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhZmZlY3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBpbnRlcmFjdGlvbnMsIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG1tYXBpbmcgYW5kIGZhdWx0aW5nIEJQRiBhcmVuYSBtYXBzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiQ0dST1VQU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZvciBCUEYgYXJlbmEgbWFwcyB0byB1c2UgYSBzbGVlcGFibGUgcGFnZSBhbGxvY2F0b3IsIGFsbG93aW5nIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biB3aGVuIG1lbW9yeSBsaW1pdHMgYXJlIGhpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gYWZmZWN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgaW50ZXJhY3Rpb25zLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtbWFwaW5nIGFuZCBmYXVsdGluZyBCUEYgYXJlbmEgbWFwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MzM6NTQuMjc5MTI0NzYyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg1NzIzNTI1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjMzOjU0LjI3OTU3MTczMloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTg1Njc4NDEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgQlBGIGFyZW5hcyAoYGFyZW5hX3ZtX2ZhdWx0YCkgdG8gcHJlYWxsb2NhdGUgcGFnZXMgb3V0c2lkZSBvZiBhIHNwaW5sb2NrIHVzaW5nIGEgc2xlZXBhYmxlIGFsbG9jYXRvciwgYWxsb3dpbmcgdGhlIG1lbWNnIE9PTSBraWxsZXIgdG8gcnVuIGlmIG5lZWRlZC4gVGhlIG5ld2x5IGludHJvZHVjZWQgYWxsb2NhdGlvbiBmdW5jdGlvbiBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgZXhwbGljaXRseSB1c2VzIGBfX0dGUF9aRVJPYCAodmlhIGBCUEZfUEFHRV9HRlBgKSB0byBlbnN1cmUgdGhlIGFsbG9jYXRlZCBwYWdlcyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCwganVzdCBsaWtlIHRoZSBwcmV2aW91cyBub24tYmxvY2tpbmcgYWxsb2NhdGlvbiBwYXRoLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkLiBUaGUgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiBjb250ZXh0IGFuZCBPT00gaGFuZGxpbmcsIHdoaWNoIGRvIG5vdCBpbnRyb2R1Y2Ugcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzg0ZWI0OGRhOTZkN2M0ZTNmZjEzZjZkYzBhMWJmZTQwNWJmZTI5YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDEwOjIzOjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcbmluZGV4IGIzY2QyOGQ5ZTNiNTUuLmM4MTdjOTlkMjkwNjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtMjc4NCw2ICsyNzg0LDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpO1xuIFxuIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbitzdHJ1Y3QgcGFnZSAqYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcbiAjaWZkZWYgQ09ORklHX01FTUNHXG4gdm9pZCBicGZfbWFwX21lbWNnX2VudGVyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBtZW1fY2dyb3VwICoqb2xkX21lbWNnLFxuIFx0XHRcdCBzdHJ1Y3QgbWVtX2Nncm91cCAqKm5ld19tZW1jZyk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9hcmVuYS5jIGIva2VybmVsL2JwZi9hcmVuYS5jXG5pbmRleCA3YjY4NDcyMDBiNDMxLi5mYTQ2MmEwZmYxYWQ2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9hcmVuYS5jXG4rKysgYi9rZXJuZWwvYnBmL2FyZW5hLmNcbkBAIC00ODEsNyArNDgxLDggQEAgc3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gdm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICpuZXdfbWVtY2csICpvbGRfbWVtY2c7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbitcdHN0cnVjdCBwYWdlICpwYWdlLCAqbmV3X3BhZ2UgPSBOVUxMO1xuK1x0dm1fZmF1bHRfdCBmYXVsdF9yZXQ7XG4gXHRsb25nIGtiYXNlLCBrYWRkcjtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgcmV0O1xuQEAgLTQ4OSw1OSArNDkwLDEwNiBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdGtiYXNlID0gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGFyZW5hKTtcbiBcdGthZGRyID0ga2Jhc2UgKyAodTMyKSh2bWYtXHUwMDNlYWRkcmVzcyk7XG4gXG4tXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxuK1x0cGFnZSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWthZGRyKTtcbitcdGlmICghcGFnZSBcdTAwMjZcdTAwMjYgIShhcmVuYS1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9TRUdWX09OX0ZBVUxUKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBQcmVhbGxvY2F0ZSBvdXRzaWRlIHRoZSBsb2NrIHdpdGggYSBzbGVlcGFibGUgYWxsb2NhdG9yIHNvIGl0XG4rXHRcdCAqIGNhbiByZWNsYWltIGFuZCBydW4gdGhlIG1lbWNnIE9PTSBraWxsZXIsIHdoaWNoIHRoZVxuK1x0XHQgKiBub24tYmxvY2tpbmcgYWxsb2NhdG9yIHVuZGVyIGFyZW5hLVx1MDAzZXNwaW5sb2NrIGNhbm5vdC4gQSBOVUxMXG4rXHRcdCAqIHJldHVybiBpcyBub24tcmVjb3ZlcmFibGUsIHNvIGZhaWwgd2l0aCBWTV9GQVVMVF9TSUdCVVM7XG4rXHRcdCAqIFZNX0ZBVUxUX09PTSB3b3VsZCBiZSByZXRyaWVkIGJ5IHRoZSBmYXVsdCBwYXRoIGFuZCBjYW5cbitcdFx0ICogbGl2ZWxvY2sgd2hlbiB0aGUgY2hhcmdlZCBtZW1jZyBpcyBub3QgdGhlIGZhdWx0aW5nIHRhc2sncy5cbitcdFx0ICovXG4rXHRcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG4rXHRcdG5ld19wYWdlID0gYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZShtYXApO1xuK1x0XHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xuK1x0XHRpZiAoIW5ld19wYWdlKVxuK1x0XHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4rXHR9XG4rXG4rXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIEEgZmFpbGVkIGxvY2sgbWVhbnMgYSBwb3NzaWJsZSBkZWFkbG9jayB3YXMgZGV0ZWN0ZWQuIERvbid0XG4gXHRcdCAqIHJldHVybiBWTV9GQVVMVF9SRVRSWTogdGhpcyBoYW5kbGVyIG5ldmVyIHRvb2sgbW1hcF9sb2NrLCBidXRcbiBcdFx0ICogdGhlIGZhdWx0IHBhdGggd291bGQgcmUtdGFrZSBpdCBvbiByZXRyeSBhbmQgZGVhZGxvY2suIEZhaWwuXG4gXHRcdCAqL1xuK1x0XHRpZiAobmV3X3BhZ2UpXG4rXHRcdFx0ZnJlZV9wYWdlc19ub2xvY2sobmV3X3BhZ2UsIDApO1xuIFx0XHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xuK1x0fVxuIFxuIFx0cGFnZSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWthZGRyKTtcbiBcdGlmIChwYWdlKSB7XG4tXHRcdGlmIChwYWdlID09IGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSlcbi1cdFx0XHQvKiBCUEYgdHJpZ2dlcmVkIHNjcmF0Y2ggaGVyZTsgZG9uJ3QgbGF6eS1hbGxvYyBvdmVyIGl0ICovXG4tXHRcdFx0Z290byBvdXRfc2lnc2VndjtcbitcdFx0aWYgKHBhZ2UgPT0gYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBIHNjcmF0Y2ggcGFnZSBtYXJrcyBhIGhvbGUuIFNlZ2ZhdWx0IG9ubHkgaWYgdGhlIHVzZXJcbitcdFx0XHQgKiBhc2tlZCBmb3IgaXQ7IG90aGVyd2lzZSB3ZSBjb3VsZCBsYXp5LWFsbG9jYXRlIGJ1dFxuK1x0XHRcdCAqIGNob29zZSBub3QgdG8gb3ZlciBhIGhvbGUsIHNvIHJlcG9ydCBhIGJ1cyBlcnJvci5cbitcdFx0XHQgKi9cbitcdFx0XHRmYXVsdF9yZXQgPSAoYXJlbmEtXHUwMDNlbWFwLm1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVCkgP1xuK1x0XHRcdFx0ICAgIFZNX0ZBVUxUX1NJR1NFR1YgOiBWTV9GQVVMVF9TSUdCVVM7XG4rXHRcdFx0Z290byBvdXRfZXJyX2xvY2tlZDtcbitcdFx0fVxuIFx0XHQvKiBhbHJlYWR5IGhhdmUgYSBwYWdlIHZtYXAtZWQgKi9cbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4rXHRpZiAoYXJlbmEtXHUwMDNlbWFwLm1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVCkge1xuK1x0XHQvKiBVc2VyIHNwYWNlIHJlcXVlc3RlZCB0byBzZWdmYXVsdCB3aGVuIHBhZ2UgaXMgbm90IGFsbG9jYXRlZCBieSBicGYgcHJvZyAqL1xuK1x0XHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdTRUdWO1xuK1x0XHRnb3RvIG91dF9lcnJfbG9ja2VkO1xuK1x0fVxuK1xuIFx0YnBmX21hcF9tZW1jZ19lbnRlcihcdTAwMjZhcmVuYS1cdTAwM2VtYXAsIFx1MDAyNm9sZF9tZW1jZywgXHUwMDI2bmV3X21lbWNnKTtcbiBcbi1cdGlmIChhcmVuYS1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9TRUdWX09OX0ZBVUxUKVxuLVx0XHQvKiBVc2VyIHNwYWNlIHJlcXVlc3RlZCB0byBzZWdmYXVsdCB3aGVuIHBhZ2UgaXMgbm90IGFsbG9jYXRlZCBieSBicGYgcHJvZyAqL1xuLVx0XHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xuK1x0aWYgKCFuZXdfcGFnZSkge1xuK1x0XHQvKlxuK1x0XHQgKiBWZXJ5IHJhcmUgcmFjZTogdGhlIGJwZiBwcm9ncmFtIGhhZCBhbGxvY2F0ZWQgYSBwYWdlIGhlcmUsIHNvXG4rXHRcdCAqIHRoZSBsb2NrbGVzcyBwcm9iZSBzYXcgaXQgYW5kIHdlIHNraXBwZWQgcHJlYWxsb2NhdGlvbiwgYnV0IGl0XG4rXHRcdCAqIGZyZWVkIHRoZSBwYWdlIGJlZm9yZSB3ZSB0b29rIHRoZSBsb2NrLiBOb3cgd2UgZG8gbmVlZCBvbmU7XG4rXHRcdCAqIHNsZWVwaW5nIGlzIG5vdCBhbGxvd2VkIGhlcmUsIHNvIGZhbGwgYmFjayB0byB0aGUgbm9uLWJsb2NraW5nXG4rXHRcdCAqIGFsbG9jYXRvciBhbmQgZ2l2ZSB1cCBpZiBpdCBmYWlscy5cbitcdFx0ICovXG4rXHRcdHJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBtYXAtXHUwMDNlbnVtYV9ub2RlLCAxLCBcdTAwMjZuZXdfcGFnZSk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4rXHRcdFx0Z290byBvdXRfZXJyX2xvY2tlZF9tZW1jZztcbitcdFx0fVxuK1x0fVxuIFxuIFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4tXG4tXHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gXHUwMDI2cGFnZSwgLmkgPSAwIH07XG4tXHQvKiBBY2NvdW50IGludG8gbWVtY2cgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGJwZl9hcmVuYSAqL1xuLVx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIE5VTUFfTk9fTk9ERSwgMSwgXHUwMDI2cGFnZSk7XG4gXHRpZiAocmV0KSB7XG4tXHRcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCB2bWYtXHUwMDNlcGdvZmYsIDEpO1xuLVx0XHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xuK1x0XHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4rXHRcdGdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7XG4gXHR9XG4rXHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gXHUwMDI2bmV3X3BhZ2UsIC5pID0gMCB9O1xuIFxuIFx0cmV0ID0gYXBwbHlfdG9fcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBrYWRkciwgUEFHRV9TSVpFLCBhcHBseV9yYW5nZV9zZXRfY2IsIFx1MDAyNmRhdGEpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbi1cdFx0ZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7XG4tXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4rXHRcdGZhdWx0X3JldCA9IFZNX0ZBVUxUX1NJR0JVUztcbitcdFx0Z290byBvdXRfZXJyX2xvY2tlZF9tZW1jZztcbiBcdH1cbiBcdGZsdXNoX3ZtYXBfY2FjaGUoa2FkZHIsIFBBR0VfU0laRSk7XG4gXHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xuK1x0LyogbmV3X3BhZ2Ugd2FzIGNvbnN1bWVkICovXG4rXHRwYWdlID0gbmV3X3BhZ2U7XG4rXHRuZXdfcGFnZSA9IE5VTEw7XG4gb3V0OlxuIFx0cGFnZV9yZWZfYWRkKHBhZ2UsIDEpO1xuIFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG4rXHRpZiAobmV3X3BhZ2UpXG4rXHRcdGZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTtcbiBcdHZtZi1cdTAwM2VwYWdlID0gcGFnZTtcbiBcdHJldHVybiAwO1xuLW91dF9zaWdzZWd2X21lbWNnOlxuK1xuK291dF9lcnJfbG9ja2VkX21lbWNnOlxuIFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbi1vdXRfc2lnc2VndjpcbitvdXRfZXJyX2xvY2tlZDpcbiBcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xuLVx0cmV0dXJuIFZNX0ZBVUxUX1NJR1NFR1Y7XG4rXHRpZiAobmV3X3BhZ2UpXG4rXHRcdGZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTtcbitcdHJldHVybiBmYXVsdF9yZXQ7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYXJlbmFfdm1fb3BzID0ge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbmluZGV4IDY4NzRiYTE0MjRhZjAuLmY5YjgxNjM4ZTUzN2EgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC02MDIsMTUgKzYwMiwxNCBAQCBzdGF0aWMgYm9vbCBjYW5fYWxsb2NfcGFnZXModm9pZClcbiBcdFx0IUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpO1xuIH1cbiBcbisjZGVmaW5lIEJQRl9QQUdFX0dGUCAoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKVxuK1xuIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19icGZfYWxsb2NfcGFnZShpbnQgbmlkKVxuIHtcbiBcdGlmICghY2FuX2FsbG9jX3BhZ2VzKCkpXG4gXHRcdHJldHVybiBhbGxvY19wYWdlc19ub2xvY2soX19HRlBfQUNDT1VOVCwgbmlkLCAwKTtcbiBcbi1cdHJldHVybiBhbGxvY19wYWdlc19ub2RlKG5pZCxcbi1cdFx0XHRcdEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfQUNDT1VOVFxuLVx0XHRcdFx0fCBfX0dGUF9OT1dBUk4sXG4tXHRcdFx0XHQwKTtcbitcdHJldHVybiBhbGxvY19wYWdlc19ub2RlKG5pZCwgQlBGX1BBR0VfR0ZQLCAwKTtcbiB9XG4gXG4gaW50IGJwZl9tYXBfYWxsb2NfcGFnZXMoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG5pZCxcbkBAIC02MzYsNiArNjM1LDIwIEBAIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKlxuKyAqIEZvciBjYWxsZXJzIHRoYXQga25vdyB0aGV5IHJ1biBpbiBhIHNsZWVwYWJsZSBjb250ZXh0LCBlLmcuIGEgdXNlciBwYWdlXG4rICogZmF1bHQgaGFuZGxlci4gY2FuX2FsbG9jX3BhZ2VzKCkgaXMgYSBjb25zZXJ2YXRpdmUgZ3Vlc3MgbWFkZSBmb3IgQlBGXG4rICogcHJvZ3JhbSBjb250ZXh0IC0gbm90YWJseSBpdCBpcyBhbHdheXMgZmFsc2Ugb24gUFJFRU1QVF9SVCAtIHNvIGdvaW5nXG4rICogdGhyb3VnaCBicGZfbWFwX2FsbG9jX3BhZ2VzKCkgdGhlcmUgd291bGQgbmVlZGxlc3NseSBwaWNrIHRoZVxuKyAqIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IsIHdoaWNoIG5ldmVyIHJlY2xhaW1zIGFuZCBuZXZlciBlbmdhZ2VzIHRoZSBPT01cbisgKiBtYWNoaW5lcnkuXG4rICovXG4rc3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbit7XG4rXHRtaWdodF9zbGVlcCgpO1xuK1x0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobWFwLVx1MDAzZW51bWFfbm9kZSwgQlBGX1BBR0VfR0ZQLCAwKTtcbit9XG4rXG4gc3RhdGljIGludCBidGZfZmllbGRfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl9maWVsZCAqZjEgPSBhLCAqZjIgPSBiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmNcbmluZGV4IDQ1Y2QwYjQ3OWZlMzUuLjQxODNmZjYxNTBjMjggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmNcbkBAIC0xODgsNiArMTg4LDczIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbiBcdHJldHVybiBfX3dyaXRlX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYpO1xuIH1cbiBcbitzdGF0aWMgaW50IF9fcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpjZ3JvdXBfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbitcdFx0XHQgICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4re1xuK1x0Y2hhciBmaWxlX3BhdGhbUEFUSF9NQVggKyAxXTtcbitcdHNzaXplX3QgZ290O1xuK1x0aW50IGZkO1xuK1xuK1x0c25wcmludGYoZmlsZV9wYXRoLCBzaXplb2YoZmlsZV9wYXRoKSwgXCIlcy8lc1wiLCBjZ3JvdXBfcGF0aCwgZmlsZSk7XG4rXHRmZCA9IG9wZW4oZmlsZV9wYXRoLCBPX1JET05MWSk7XG4rXHRpZiAoZmQgXHUwMDNjIDApIHtcbitcdFx0bG9nX2VycihcIk9wZW5pbmcgJXNcIiwgZmlsZV9wYXRoKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4rXHRnb3QgPSByZWFkKGZkLCBidWYsIGxlbiAtIDEpO1xuK1x0aWYgKGdvdCBcdTAwM2MgMCkge1xuK1x0XHRsb2dfZXJyKFwiUmVhZGluZyAlc1wiLCBmaWxlX3BhdGgpO1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1x0YnVmW2dvdF0gPSAnXFwwJztcbitcdGNsb3NlKGZkKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiByZWFkX2Nncm91cF9maWxlKCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZVxuKyAqIEByZWxhdGl2ZV9wYXRoOiBUaGUgY2dyb3VwIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSB3b3JrZGlyXG4rICogQGZpbGU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIGNncm91cGZzIHRvIHJlYWQgZnJvbVxuKyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3NcbisgKiBAbGVuOiBTaXplIG9mIEBidWZcbisgKlxuKyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCdzIGRpcmVjdG9yeS5cbisgKlxuKyAqIElmIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQuXG4rICovXG4raW50IHJlYWRfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbitcdFx0ICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4re1xuK1x0Y2hhciBjZ3JvdXBfcGF0aFtQQVRIX01BWCAtIDI0XTtcbitcbitcdGZvcm1hdF9jZ3JvdXBfcGF0aChjZ3JvdXBfcGF0aCwgcmVsYXRpdmVfcGF0aCk7XG4rXHRyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7XG4rfVxuK1xuKy8qKlxuKyAqIHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZSBpbiB0aGUgcGFyZW50IHByb2Nlc3NcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2RpclxuKyAqIEByZWxhdGl2ZV9wYXRoOiBUaGUgY2dyb3VwIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgcHJvY2VzcyB3b3JrZGlyXG4rICogQGZpbGU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIGNncm91cGZzIHRvIHJlYWQgZnJvbVxuKyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3NcbisgKiBAbGVuOiBTaXplIG9mIEBidWZcbisgKlxuKyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCdzIGRpcmVjdG9yeSB1bmRlciB0aGUgcGFyZW50IHByb2Nlc3NcbisgKiB3b3JrZGlyLlxuKyAqXG4rICogSWYgc3VjY2Vzc2Z1bCwgMCBpcyByZXR1cm5lZC5cbisgKi9cbitpbnQgcmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbitcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuK3tcbitcdGNoYXIgY2dyb3VwX3BhdGhbUEFUSF9NQVggLSAyNF07XG4rXG4rXHRmb3JtYXRfcGFyZW50X2Nncm91cF9wYXRoKGNncm91cF9wYXRoLCByZWxhdGl2ZV9wYXRoKTtcbitcdHJldHVybiBfX3JlYWRfY2dyb3VwX2ZpbGUoY2dyb3VwX3BhdGgsIGZpbGUsIGJ1ZiwgbGVuKTtcbit9XG4rXG4gLyoqXG4gICogc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCkgLSBTZXR1cCB0aGUgY2dyb3VwIGVudmlyb25tZW50XG4gICpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oXG5pbmRleCAzODU3MzA0YmU4NzQxLi5kNDJkMmUxMzA0NGU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oXG5AQCAtMTUsNiArMTUsMTAgQEAgaW50IHdyaXRlX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4gXHRcdCAgICAgIGNvbnN0IGNoYXIgKmJ1Zik7XG4gaW50IHdyaXRlX2Nncm91cF9maWxlX3BhcmVudChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuIFx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmKTtcbitpbnQgcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuK1x0XHQgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4raW50IHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4rXHRcdFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4gaW50IGNncm91cF9zZXR1cF9hbmRfam9pbihjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKTtcbiBpbnQgZ2V0X3Jvb3RfY2dyb3VwKHZvaWQpO1xuIGludCBjcmVhdGVfYW5kX2dldF9jZ3JvdXAoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtY2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbWNnLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jNTdiOTg0OTRjZmFiXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jXG5AQCAtMCwwICsxLDE1OCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy91c2VyLmhcdTAwM2VcbisjaWZuZGVmIFBBR0VfU0laRSAvKiBvbiBzb21lIGFyY2hzIGl0IGNvbWVzIGluIHN5cy91c2VyLmggKi9cbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNkZWZpbmUgUEFHRV9TSVpFIGdldHBhZ2VzaXplKClcbisjZW5kaWZcbitcbisjaW5jbHVkZSBcImNncm91cF9oZWxwZXJzLmhcIlxuKyNpbmNsdWRlIFwiYXJlbmFfbWVtY2cuc2tlbC5oXCJcbitcbisjZGVmaW5lIENHX1BBVEhcdFx0XCIvYXJlbmFfbWVtY2dcIlxuK1xuKy8qIEJ1ZGdldCB0aGUgYXJlbmEgZ2V0cyBvbiB0b3Agb2Ygd2hhdGV2ZXIgaXMgYWxyZWFkeSBjaGFyZ2VkIGFmdGVyIGxvYWQuICovXG4rI2RlZmluZSBBUkVOQV9CVURHRVRcdCg2NCAqIDEwMjQgKiAxMDI0KVxuK1xuK3N0YXRpYyB2b2lkIGR1bXBfbWVtY2coaW50ICgqcmQpKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjaGFyICosIHNpemVfdCkpXG4re1xuK1x0Y2hhciBidWZbNTEyXTtcbitcbitcdC8qXG4rXHQgKiBtZW1vcnkuY3VycmVudCByZWFkcyAwIG9uY2UgdGhlIGNoaWxkIGhhcyBsZWZ0IHRoZSBjZ3JvdXAsIHNvIGl0IG9ubHlcbitcdCAqIGNhcnJpZXMgaW5mb3JtYXRpb24gd2hlbiBkdW1wZWQgZnJvbSB0aGUgbGl2ZSBjaGlsZDsgbWVtb3J5LnBlYWsgYW5kXG4rXHQgKiBtZW1vcnkuZXZlbnRzIHN1cnZpdmUgdGhlIGNoaWxkIGFuZCB0ZWxsIHRoZSBzdG9yeSBlaXRoZXIgd2F5LlxuK1x0ICovXG4rXHRpZiAoIXJkKENHX1BBVEgsIFwibWVtb3J5LmN1cnJlbnRcIiwgYnVmLCBzaXplb2YoYnVmKSkpXG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIm1lbW9yeS5jdXJyZW50OiAlc1wiLCBidWYpO1xuK1x0aWYgKCFyZChDR19QQVRILCBcIm1lbW9yeS5tYXhcIiwgYnVmLCBzaXplb2YoYnVmKSkpXG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIm1lbW9yeS5tYXg6ICVzXCIsIGJ1Zik7XG4rXHRpZiAoIXJkKENHX1BBVEgsIFwibWVtb3J5LnBlYWtcIiwgYnVmLCBzaXplb2YoYnVmKSkpXG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIm1lbW9yeS5wZWFrOiAlc1wiLCBidWYpO1xuK1x0aWYgKCFyZChDR19QQVRILCBcIm1lbW9yeS5ldmVudHNcIiwgYnVmLCBzaXplb2YoYnVmKSkpXG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIm1lbW9yeS5ldmVudHM6XFxuJXNcIiwgYnVmKTtcbitcdGZmbHVzaChzdGRlcnIpO1xuK31cbitcbisvKiBSZWFkIG9uZSBrZXkgZnJvbSBhIGZsYXQga2V5ZWQgY2dyb3VwIGZpbGUsIGUuZy4gXCJvb21fa2lsbFwiIGluIG1lbW9yeS5ldmVudHMuICovXG4rc3RhdGljIGxvbmcgY2dfcmVhZF9rZXkoY29uc3QgY2hhciAqY2csIGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKmtleSlcbit7XG4rXHRjaGFyIGJ1Zls1MTJdLCAqcDtcbitcbitcdGlmIChyZWFkX2Nncm91cF9maWxlKGNnLCBmaWxlLCBidWYsIHNpemVvZihidWYpKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0cCA9IHN0cnN0cihidWYsIGtleSk7XG4rXHRpZiAoIXApXG4rXHRcdHJldHVybiAtMTtcbitcdHJldHVybiBzdHJ0b2wocCArIHN0cmxlbihrZXkpLCBOVUxMLCAxMCk7XG4rfVxuK1xuK3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtY2codm9pZClcbit7XG4rXHRpbnQgY2dyb3VwX2ZkID0gLTEsIHN0YXR1cywgZXJyO1xuK1x0Y29uc3QgbG9uZyBwcyA9IFBBR0VfU0laRTtcbitcdGNoYXIgYnVmWzY0XTtcbitcdHBpZF90IHBpZDtcbitcbitcdGVyciA9IHNldHVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNldHVwX2Nncm91cF9lbnZpcm9ubWVudFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y2dyb3VwX2ZkID0gY3JlYXRlX2FuZF9nZXRfY2dyb3VwKENHX1BBVEgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfRkQoY2dyb3VwX2ZkLCBcImNyZWF0ZV9hbmRfZ2V0X2Nncm91cFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBObyBtZW1vcnkgY29udHJvbGxlciAtXHUwMDNlIG5vdGhpbmcgdG8gdGVzdC4gKi9cbitcdGlmIChyZWFkX2Nncm91cF9maWxlKENHX1BBVEgsIFwibWVtb3J5LmN1cnJlbnRcIiwgYnVmLCBzaXplb2YoYnVmKSkpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiJXM6U0tJUDpubyBtZW1vcnkgY29udHJvbGxlclxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRwaWQgPSBmb3JrKCk7XG4rXHRpZiAoIUFTU0VSVF9HRShwaWQsIDAsIFwiZm9ya1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAocGlkID09IDApIHtcbitcdFx0c3RydWN0IGFyZW5hX21lbWNnICpjc2tlbDtcbitcdFx0X191MzIgaSwgbnBhZ2VzO1xuK1x0XHRjaGFyICpiYXNlO1xuK1x0XHRzaXplX3Qgc3o7XG4rXHRcdGxvbmcgY3VyO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBEbyBldmVyeXRoaW5nIGZyb20gdGhlIGNoaWxkOiB0aGUgYXJlbmEgdm1hIGlzIFZNX0RPTlRDT1BZIHNvXG4rXHRcdCAqIGl0IHdvdWxkIG5vdCBzdXJ2aXZlIGZvcmsoKSwgb25seSB0aGUgY2hpbGQgc2hvdWxkIGJlIHVuZGVyIHRoZVxuK1x0XHQgKiBsaW1pdCBzbyB0aGF0IGEgbWVtY2cgT09NIGNhbm5vdCBwaWNrIHRlc3RfcHJvZ3MsIGFuZCBhIG1hcCBpc1xuK1x0XHQgKiBjaGFyZ2VkIHRvIHRoZSBtZW1jZyBvZiB0aGUgdGFzayB0aGF0IGNyZWF0ZXMgaXQgLSBzbyBqb2luXG4rXHRcdCAqIGJlZm9yZSBsb2FkLiBUaGUgY2dyb3VwIHdvcmsgZGlyIGJlbG9uZ3MgdG8gdGhlIHBhcmVudCB0aGF0IHNldFxuK1x0XHQgKiB0aGUgZW52aXJvbm1lbnQgdXAsIHNvIHJlYWNoIGl0IHdpdGggdGhlIF9wYXJlbnQoKSBoZWxwZXJzLlxuK1x0XHQgKiBFcnJvcnMgYXJlIHJlcG9ydGVkIHRvIHRoZSBwYXJlbnQgdGhyb3VnaCB0aGUgZXhpdCBjb2RlLCBzaW5jZVxuK1x0XHQgKiBBU1NFUlRfKiBpbiBhIGZvcmtlZCBjaGlsZCBkb2VzIG5vdCByZWFjaCBpdC5cbitcdFx0ICovXG4rXHRcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwiJWRcIiwgZ2V0cGlkKCkpO1xuK1x0XHRpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsIFwiY2dyb3VwLnByb2NzXCIsIGJ1ZikpXG4rXHRcdFx0X2V4aXQoMik7XG4rXG4rXHRcdGNza2VsID0gYXJlbmFfbWVtY2dfX29wZW5fYW5kX2xvYWQoKTtcbitcdFx0aWYgKCFjc2tlbClcbitcdFx0XHRfZXhpdCgzKTtcbitcbitcdFx0YmFzZSA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUoY3NrZWwtXHUwMDNlbWFwcy5hcmVuYSwgXHUwMDI2c3opO1xuK1x0XHRpZiAoIWJhc2UpXG4rXHRcdFx0X2V4aXQoNCk7XG4rXHRcdG5wYWdlcyA9IGJwZl9tYXBfX21heF9lbnRyaWVzKGNza2VsLVx1MDAzZW1hcHMuYXJlbmEpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBDYXAgb25seSBub3csIGFmdGVyIGxvYWQ6IGV2ZXJ5dGhpbmcgYnV0IHRoZSBmYXVsdC1pbiBpc1xuK1x0XHQgKiBjaGFyZ2VkLCBzbyB0aGUgYXJlbmEgZ2V0cyBhIGZpeGVkIGJ1ZGdldCByZWdhcmRsZXNzIG9mIHdoYXRcbitcdFx0ICogdGhlIGxvYWQgaXRzZWxmIGNvc3QsIGFuZCB0aGUgbG9hZCBjYW4gbmV2ZXIgaGl0IHRoZSBsaW1pdC5cbitcdFx0ICovXG4rXHRcdGlmIChyZWFkX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCBcIm1lbW9yeS5jdXJyZW50XCIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuK1x0XHRcdF9leGl0KDUpO1xuK1x0XHRjdXIgPSBzdHJ0b2woYnVmLCBOVUxMLCAxMCk7XG4rXHRcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwiJWxkXCIsIGN1ciArIEFSRU5BX0JVREdFVCk7XG4rXHRcdGlmICh3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoQ0dfUEFUSCwgXCJtZW1vcnkubWF4XCIsIGJ1ZikpXG4rXHRcdFx0X2V4aXQoNik7XG4rXG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYWdlczsgaSsrKVxuK1x0XHRcdGJhc2VbKHNpemVfdClpICogcHNdID0gMTtcbitcdFx0LyogRmF1bHRlZCBldmVyeXRoaW5nIHdpdGhvdXQgZHlpbmc6IGR1bXAgd2h5IChvbmx5IHVuZGVyIC12KS4gKi9cbitcdFx0ZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlX3BhcmVudCk7XG4rXHRcdF9leGl0KDApO1xuK1x0fVxuK1xuK1x0aWYgKCFBU1NFUlRfRVEod2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCksIHBpZCwgXCJ3YWl0cGlkXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIEEgbm9uLXplcm8gZXhpdCBtZWFucyB0aGUgY2hpbGQgZmFpbGVkIHRvIHNldCB1cDsgdGhlIGNvZGUgc2F5cyB3aGVyZS4gKi9cbitcdGlmIChXSUZFWElURUQoc3RhdHVzKSBcdTAwMjZcdTAwMjYgV0VYSVRTVEFUVVMoc3RhdHVzKSkge1xuK1x0XHRBU1NFUlRfT0soV0VYSVRTVEFUVVMoc3RhdHVzKSwgXCJjaGlsZCBzZXR1cFwiKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogRmF1bHRpbmcgYSB2YWxpZCBhcmVuYSBhZGRyZXNzIHVudGlsIG1lbW9yeS5tYXggaXMgaGl0IG11c3Qgbm90IGxvb2tcbitcdCAqIGxpa2UgYW4gaW52YWxpZCBhY2Nlc3MuIFdpdGhvdXQgdGhlIGZpeCB0aGUgZmF1bHQgcGF0aCBhbGxvY2F0ZWQgd2l0aFxuK1x0ICogdGhlIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IsIHR1cm5lZCBpdHMgLUVOT01FTSBpbnRvIFZNX0ZBVUxUX1NJR1NFR1YsXG4rXHQgKiBhbmQgdGhlIGNoaWxkIGRpZWQgd2l0aCBTSUdTRUdWIG9uIGEgdmFsaWQgYWRkcmVzczsgbm93IGl0IGlzIGhhbmRsZWRcbitcdCAqIGJ5IHRoZSBtZW1jZyBPT00gcGF0aCBpbnN0ZWFkLiBBIFNJR0tJTEwgYWxvbmUgd291bGQgbm90IHByb3ZlIHRoZVxuK1x0ICogbWVtY2cgT09NIGtpbGxlciBkaWQgaXQgKGEgZ2xvYmFsIE9PTSBvciBhbiB1bnJlbGF0ZWQgY3Jhc2ggY291bGQgYWxzb1xuK1x0ICoga2lsbCB0aGUgY2hpbGQpLCBzbyBjaGVjayBtZW1vcnkuZXZlbnRzLm9vbV9raWxsLCB3aGljaCByZWNvcmRzIHRoZVxuK1x0ICogbWVtY2cgT09NIGFuZCBzdXJ2aXZlcyB0aGUgY2hpbGQuXG4rXHQgKi9cbitcdGlmICghQVNTRVJUX1RSVUUoV0lGU0lHTkFMRUQoc3RhdHVzKSwgXCJjaGlsZCBraWxsZWQgYnkgc2lnbmFsXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX0dFKGNnX3JlYWRfa2V5KENHX1BBVEgsIFwibWVtb3J5LmV2ZW50c1wiLCBcIm9vbV9raWxsXCIpLCAxLFxuK1x0XHQgICAgICAgXCJtZW1jZyBvb21fa2lsbFwiKSlcbitcdFx0ZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlKTtcbitvdXQ6XG4rXHRpZiAoY2dyb3VwX2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoY2dyb3VwX2ZkKTtcbitcdGNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1jZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi44ODI1OWNmZWEwNmI2XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuY1xuQEAgLTAsMCArMSwyNCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9hcmVuYV9jb21tb24uaFwiXG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpO1xuK1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCA1MDAwMCk7IC8qIG51bWJlciBvZiBwYWdlcyAqL1xuKyNpZmRlZiBfX1RBUkdFVF9BUkNIX2FybTY0XG4rXHRfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsIFx1MDAzY1x1MDAzYyAzMik7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi9cbisjZWxzZVxuK1x0X191bG9uZyhtYXBfZXh0cmEsIDB4MXVsbCBcdTAwM2NcdTAwM2MgNDQpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXG4rI2VuZGlmXG4rfSBhcmVuYSBTRUMoXCIubWFwc1wiKTtcbitcbitTRUMoXCJzeXNjYWxsXCIpXG4raW50IG5vb3Aodm9pZCAqY3R4KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDozMzo1NC4yNzk1NzQ3NTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU4NTY3NTQ0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBhIFBhc3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2Ugd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGFyZW5hX3ZtX2ZhdWx0YCBpbiBga2VybmVsL2JwZi9hcmVuYS5jYCBhbmQgaW50cm9kdWNlcyBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgYWxvbmcgd2l0aCBhIHNlbGZ0ZXN0LlxuXG5GaXJzdCwgbG9va2luZyBhdCBgYXJlbmEuY2AsIHRoZSBjb3JlIGNoYW5nZSBpcyBwcmVhbGxvY2F0aW5nIGEgcGFnZSAqYmVmb3JlKiBhY3F1aXJpbmcgYSBzcGlubG9jaywgYnV0IG9ubHkgd2hlbiBhIHBhZ2UgaXNuJ3QgYWxyZWFkeSBtYXBwZWQsIGFuZCB0aGUgYEJQRl9GX1NFR1ZfT05fRkFVTFRgIGZsYWcgaXNuJ3Qgc2V0LiBUaGlzIGFsbG93cyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBpbnRlcnZlbmUgaWYgdGhlIGFsbG9jYXRpb24gZmFpbHMsIHdoaWNoIGlzIHByZWZlcmFibGUgdG8gdGhlIHByZXZpb3VzIGJlaGF2aW9yIG9mIHBvdGVudGlhbGx5IGhhbmdpbmcgZHVlIHRvIGxhY2sgb2YgYSBzbGVlcGFibGUgYWxsb2NhdG9yIHdpdGhpbiB0aGUgc3BpbmxvY2suIElmIHRoYXQgcHJlLWFsbG9jYXRpb24gZmFpbHMsIGl0IHJldHVybnMgYFZNX0ZBVUxUX1NJR0JVU2AuIElmIHN1Y2Nlc3NmdWwsIHRoZSBzcGlubG9jayBpcyBhY3F1aXJlZCwgYW5kIHRoZSBwYWdlIGlzIHVzZWQuIFRoZSBrZXkgcG9pbnQgaXMgdGhhdCBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgdXNlcyBgQlBGX1BBR0VfR0ZQYCwgd2hpY2ggaW5jbHVkZXMgYF9fR0ZQX1pFUk9gLiBUaGlzIG1lYW5zIHRoYXQgYW55IG5ld2x5IGFsbG9jYXRlZCBwYWdlIGlzICpndWFyYW50ZWVkKiB0byBiZSB6ZXJvLWluaXRpYWxpemVkLlxuXG5Ob3csIGRvZXMgdGhpcyBhbGxvY2F0aW9uIGxvZ2ljIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBJIGRvbid0IHRoaW5rIHNvLiBUaGUgZXhpc3RpbmcgbG9naWMgdXNpbmcgYGJwZl9tYXBfYWxsb2NfcGFnZXNgIGFsc28gemVyb3MgdGhlIHBhZ2VzIChpdCBjYWxscyBgX19icGZfYWxsb2NfcGFnZWAgd2hpY2ggaXRzZWxmIGFsc28gY29udGFpbnMgYF9fR0ZQX1pFUk9gKS4gU28sIHRoZSB6ZXJvaW5nIGJlaGF2aW9yIGlzIGNvbnNpc3RlbnQuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIHRoZSBpbml0aWFsaXphdGlvbiBvZiBwYWdlcy5cblxuVGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSBhIHJlZmFjdG9yaW5nIGZvciBtb3JlIHJvYnVzdCBPT00gaGFuZGxpbmcuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBJdCBkb2Vzbid0IG1vZGlmeSBhbnkgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IHdvdWxkIHBvdGVudGlhbGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIG1lbW9yeSBiZWluZyBhbGxvY2F0ZWQgaXMgZXhwbGljaXRseSB6ZXJvZWQuIFRoZSBwcmV2aW91cyBhbGxvY2F0aW9uIHBhdGggd2FzIGFsc28gemVyby1pbml0aWFsaXplZC4gVGhlIGNvcmUgaXNzdWUgYmVpbmcgYWRkcmVzc2VkIGlzIHRoZSBPT00gaGFuZGxpbmcgd2l0aCB0aGUgcHJlYWxsb2NhdGlvbiBiZWZvcmUgdGhlIGxvY2suXG5cblRvIGJlIGV4dHJhIGNlcnRhaW4sIEkganVzdCBnbGFuY2VkIGF0IGBicGZfbWFwX2FsbG9jX3BhZ2VzYCBpbiBgc3lzY2FsbC5jYCBhbmQgaXQgYWxzbyB1c2VzIGBCUEZfUEFHRV9HRlBgIChjb250YWluaW5nIGBfX0dGUF9aRVJPYCkuIFNvLCB0aGUgcGFnZXMgYXJlIGRlZmluaXRlbHkgemVyb2VkIGluICpib3RoKiBjYXNlcy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgYXJlIGludHJvZHVjZWQsIHNpbmNlIHRoZSBhbGxvY2F0ZWQgcGFnZXMgYXJlIHplcm9lZC4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQsIGV2ZW4gdGhvdWdoIEkgd2lsbCBxdWlja2x5IHZlcmlmeSBgYWxsb2NfcGFnZXNfbm9sb2NrYCBpcyBub3QgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaCB0byBkb3VibGUtY2hlY2ssIGJ1dCB0aGlzIGlzIGEgdmVyeSBsb3ctcmlzayBjaGFuZ2UuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gSSB3aWxsIG1hcmsgTmVlZHNLTVNBTiBhcyBgZmFsc2VgLiBUaGUgcHJpbWFyeSBhaW0gaXMgaW1wcm92ZWQgT09NIGhhbmRsaW5nIGFuZCBwcmVhbGxvY2F0aW9uIGJlZm9yZSB0aGUgc3BpbmxvY2sgdG8gdXNlIGEgc2xlZXBhYmxlIGFsbG9jYXRvci4gVGhlIG5ldyBhbGxvY2F0aW9uIGxvZ2ljIHplcm9zIG1lbW9yeS4gVGhpcyBpcyBhIHZlcnkgc2FmZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMTgsIk91dHB1dFRva2VucyI6MTg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjM0OjEwLjEzNjMzMjEwNloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgQlBGIGFyZW5hcyAoYGFyZW5hX3ZtX2ZhdWx0YCkgdG8gcHJlYWxsb2NhdGUgcGFnZXMgb3V0c2lkZSBvZiBhIHNwaW5sb2NrIHVzaW5nIGEgc2xlZXBhYmxlIGFsbG9jYXRvciwgYWxsb3dpbmcgdGhlIG1lbWNnIE9PTSBraWxsZXIgdG8gcnVuIGlmIG5lZWRlZC4gVGhlIG5ld2x5IGludHJvZHVjZWQgYWxsb2NhdGlvbiBmdW5jdGlvbiBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgZXhwbGljaXRseSB1c2VzIGBfX0dGUF9aRVJPYCAodmlhIGBCUEZfUEFHRV9HRlBgKSB0byBlbnN1cmUgdGhlIGFsbG9jYXRlZCBwYWdlcyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCwganVzdCBsaWtlIHRoZSBwcmV2aW91cyBub24tYmxvY2tpbmcgYWxsb2NhdGlvbiBwYXRoLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkLiBUaGUgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiBjb250ZXh0IGFuZCBPT00gaGFuZGxpbmcsIHdoaWNoIGRvIG5vdCBpbnRyb2R1Y2Ugcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgQlBGIGFyZW5hcyAoYGFyZW5hX3ZtX2ZhdWx0YCkgdG8gcHJlYWxsb2NhdGUgcGFnZXMgb3V0c2lkZSBvZiBhIHNwaW5sb2NrIHVzaW5nIGEgc2xlZXBhYmxlIGFsbG9jYXRvciwgYWxsb3dpbmcgdGhlIG1lbWNnIE9PTSBraWxsZXIgdG8gcnVuIGlmIG5lZWRlZC4gVGhlIG5ld2x5IGludHJvZHVjZWQgYWxsb2NhdGlvbiBmdW5jdGlvbiBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgZXhwbGljaXRseSB1c2VzIGBfX0dGUF9aRVJPYCAodmlhIGBCUEZfUEFHRV9HRlBgKSB0byBlbnN1cmUgdGhlIGFsbG9jYXRlZCBwYWdlcyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCwganVzdCBsaWtlIHRoZSBwcmV2aW91cyBub24tYmxvY2tpbmcgYWxsb2NhdGlvbiBwYXRoLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkLiBUaGUgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiBjb250ZXh0IGFuZCBPT00gaGFuZGxpbmcsIHdoaWNoIGRvIG5vdCBpbnRyb2R1Y2Ugcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8fz4c[1] Phase: Succeeded StartedAt: 2026-08-25 10:34:21 +0000 UTC FinishedAt: 2026-08-25 10:34:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 10:34:21 +0000 UTC FinishedAt: 2026-08-25 10:34:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[2] Phase: Succeeded StartedAt: 2026-08-25 10:34:21 +0000 UTC FinishedAt: 2026-08-25 14:21:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 10:34:21 +0000 UTC FinishedAt: 2026-08-25 14:21:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 10:34:21 +0000 UTC FinishedAt: 2026-08-25 10:34:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 10:34:21 +0000 UTC FinishedAt: 2026-08-25 10:34:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8fz4c/series-workflow8fz4c-convert-artifact-1708279040/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 10:34:32 +0000 UTC FinishedAt: 2026-08-25 10:54:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 10:34:32 +0000 UTC FinishedAt: 2026-08-25 10:54:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cba03081-455b-45d9-93ce-7ec854c28ef5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8fz4c/series-workflow8fz4c-convert-artifact-1708279040/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "49005a2b-3737-4a6a-bc9e-38ddc11d7e17", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8fz4c/series-workflow8fz4c-build-action-1138724806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 10:34:32 +0000 UTC FinishedAt: 2026-08-25 10:54:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cba03081-455b-45d9-93ce-7ec854c28ef5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8fz4c/series-workflow8fz4c-convert-artifact-1708279040/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "49005a2b-3737-4a6a-bc9e-38ddc11d7e17", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8fz4c/series-workflow8fz4c-build-action-1138724806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 10:54:47 +0000 UTC FinishedAt: 2026-08-25 10:54:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 10:54:47 +0000 UTC FinishedAt: 2026-08-25 10:54:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 10:54:47 +0000 UTC FinishedAt: 2026-08-25 10:54:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 10:54:47 +0000 UTC FinishedAt: 2026-08-25 10:54:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8fz4c/series-workflow8fz4c-convert-artifact-2465672871/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 10:54:57 +0000 UTC FinishedAt: 2026-08-25 10:57:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 10:54:57 +0000 UTC FinishedAt: 2026-08-25 10:56:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*49005a2b-3737-4a6a-bc9e-38ddc11d7e17,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8fz4c/series-workflow8fz4c-build-action-1138724806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 10:57:07 +0000 UTC FinishedAt: 2026-08-25 10:57:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 10:57:07 +0000 UTC FinishedAt: 2026-08-25 10:57:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 10:57:07 +0000 UTC FinishedAt: 2026-08-25 11:17:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 10:57:07 +0000 UTC FinishedAt: 2026-08-25 11:17:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cba03081-455b-45d9-93ce-7ec854c28ef5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8fz4c/series-workflow8fz4c-convert-artifact-2465672871/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "e87d62f8-e9a9-4a97-bce4-97e6d0e33101", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8fz4c/series-workflow8fz4c-build-action-3813122091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 10:57:07 +0000 UTC FinishedAt: 2026-08-25 11:17:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cba03081-455b-45d9-93ce-7ec854c28ef5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8fz4c/series-workflow8fz4c-convert-artifact-2465672871/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "e87d62f8-e9a9-4a97-bce4-97e6d0e33101", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8fz4c/series-workflow8fz4c-build-action-3813122091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 11:17:25 +0000 UTC FinishedAt: 2026-08-25 11:17:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 11:17:25 +0000 UTC FinishedAt: 2026-08-25 11:17:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 11:17:25 +0000 UTC FinishedAt: 2026-08-25 11:19:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 11:17:25 +0000 UTC FinishedAt: 2026-08-25 11:19:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e87d62f8-e9a9-4a97-bce4-97e6d0e33101,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8fz4c/series-workflow8fz4c-build-action-3813122091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 11:19:54 +0000 UTC FinishedAt: 2026-08-25 14:21:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 11:19:54 +0000 UTC FinishedAt: 2026-08-25 14:21:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*49005a2b-3737-4a6a-bc9e-38ddc11d7e17,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e87d62f8-e9a9-4a97-bce4-97e6d0e33101,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8fz4c/series-workflow8fz4c-build-action-1138724806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8fz4c/series-workflow8fz4c-build-action-3813122091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 11:19:54 +0000 UTC FinishedAt: 2026-08-25 11:20:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 11:19:54 +0000 UTC FinishedAt: 2026-08-25 11:20:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8fz4c/series-workflow8fz4c-convert-artifact-4274760704/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 11:19:54 +0000 UTC FinishedAt: 2026-08-25 11:19:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 11:19:54 +0000 UTC FinishedAt: 2026-08-25 11:19:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 11:19:54 +0000 UTC FinishedAt: 2026-08-25 11:19:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 11:20:04 +0000 UTC FinishedAt: 2026-08-25 14:21:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fz4c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG","CGROUPS"],"series_id":"dcedf132-c5fc-4fb5-bfab-cbd93ffb725a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 11:20:04 +0000 UTC FinishedAt: 2026-08-25 14:21:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*49005a2b-3737-4a6a-bc9e-38ddc11d7e17,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e87d62f8-e9a9-4a97-bce4-97e6d0e33101,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8fz4c/series-workflow8fz4c-build-action-1138724806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8fz4c/series-workflow8fz4c-build-action-3813122091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8fz4c/series-workflow8fz4c-convert-artifact-4274760704/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}