Name: series-workflowgqn4f Phase: Succeeded StartedAt: 2026-08-17 16:29:27 +0000 UTC FinishedAt: 2026-08-17 20:50:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[0] Phase: Succeeded StartedAt: 2026-08-17 16:29:27 +0000 UTC FinishedAt: 2026-08-17 16:48:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 16:29:27 +0000 UTC FinishedAt: 2026-08-17 16:48:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER" ], "series_id": "eaef0771-aa99-4808-93a0-0796ba8c48a6" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "sock_map_update_elem_sys", "sock_map_get_from_fd", "tcp_bpf_update_proto", "tcp_bpf_strp_read_sock" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c29ja19tYXBfdXBkYXRlX2VsZW1fc3lzJiMzNDssCiAgICAmIzM0O3NvY2tfbWFwX2dldF9mcm9tX2ZkJiMzNDssCiAgICAmIzM0O3RjcF9icGZfdXBkYXRlX3Byb3RvJiMzNDssCiAgICAmIzM0O3RjcF9icGZfc3RycF9yZWFkX3NvY2smIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4gaXNzdWUgd2l0aCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcgKGBza19mb3J3YXJkX2FsbG9jYCkgd2hlbiBhbiBza2IgaXMgcGFzc2VkIHRvIHRoZSBzYW1lIHNvY2tldCB2aWEgQlBGIHN0cmVhbSBwYXJzZXIvdmVyZGljdC4gSXQgaW50cm9kdWNlcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gIHRvIHByb3Blcmx5IGhhbmRsZSBgc2tfcm1lbV9zY2hlZHVsZWAgYW5kIGBza2Jfc2V0X293bmVyX3JgLiBUaGUgY2hhbmdlcyBpbnZvbHZlIG1lbW9yeSBhY2NvdW50aW5nLCBsb2NraW5nLCBhbmQgc2F2aW5nL3Jlc3RvcmluZyBgc2tiLVx1MDAzZV9za19yZWRpcmAuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBjb250YWluIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGxvZ2ljIGVycm9ycywgbWVtb3J5IGxlYWtzLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc29ja21hcCBpbmZyYXN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGhvdyBgc2tfZm9yd2FyZF9hbGxvY2AgbWVtb3J5IGFjY291bnRpbmcgaXMgaGFuZGxlZCB3aGVuIGEgc3RyZWFtIHBhcnNlciAoc3RycGFyc2VyKSBwcm9ncmFtIHJldHVybnMgYFNLX1BBU1NgIGFuZCB0aGUgc2tiIGlzIGRlbGl2ZXJlZCB0byB0aGUgc2FtZSBzb2NrZXQmIzM5O3MgaW5ncmVzcyBxdWV1ZS4gSXQgaW50cm9kdWNlcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gIHRvIHNldHRsZSBhbnkgZXhpc3RpbmcgYHNrX2ZvcndhcmRfYWxsb2NgIGRlZmljaXQgYmVmb3JlIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcCB0byB0aGUgc2tiLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc29ja21hcCBhbmQgc3RyZWFtIHBhcnNlcikgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG1lbW9yeSBhY2NvdW50aW5nIHJlbWFpbnMgY29ycmVjdCB1bmRlciB2YXJpb3VzIG5ldHdvcmsgY29uZGl0aW9ucyBhbmQgQlBGIHByb2dyYW0gYmVoYXZpb3JzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMGIwZThjZjhiMzIxZGY4OGMwMjZkYWVhNTc2NDkxZmNhNWM3MzZlMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDE2OjQ0OjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrbXNnLmMgYi9uZXQvY29yZS9za21zZy5jXG5pbmRleCAyNTIxYjY0M2ZhMDVkLi4zNDdjYjE2OGY3NDkxIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2ttc2cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2ttc2cuY1xuQEAgLTU4NiwyMSAmIzQzOzU4NiwyNCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB9XG4gXG4gc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYpO1xuJiM0MztcdFx0XHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZixcbiYjNDM7XHRcdFx0XHQgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYyk7XG4mIzQzO3N0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYyk7XG4gXG4gc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0dTMyIG9mZiwgdTMyIGxlbilcbiYjNDM7XHRcdFx0XHR1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHNldHRsZV9md2RfYWxsb2MpXG4ge1xuIFx0c3RydWN0IHNvY2sgKnNrID0gcHNvY2stXHUwMDNlc2s7XG4gXHRzdHJ1Y3Qgc2tfbXNnICptc2c7XG4gXHRpbnQgZXJyO1xuIFxuLVx0LyogSWYgd2UgYXJlIHJlY2VpdmluZyBvbiB0aGUgc2FtZSBzb2NrIHNrYi1cdTAwM2VzayBpcyBhbHJlYWR5IGFzc2lnbmVkLFxuLVx0ICogc2tpcCBtZW1vcnkgYWNjb3VudGluZyBhbmQgb3duZXIgdHJhbnNpdGlvbiBzZWVpbmcgaXQgYWxyZWFkeSBzZXRcbi1cdCAqIGNvcnJlY3RseS5cbi1cdCAqL1xuIFx0aWYgKHVubGlrZWx5KHNrYi1cdTAwM2VzayA9PSBzaykpXG4tXHRcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCB0cnVlKTtcbiYjNDM7XHRcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2cocHNvY2ssIHNrYiwgb2ZmLFxuJiM0MztcdFx0XHRcdFx0XHRcdCBsZW4sIHRydWUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IHNldHRsZV9md2RfYWxsb2MpO1xuIFx0bXNnID0gc2tfcHNvY2tfY3JlYXRlX2luZ3Jlc3NfbXNnKHNrLCBza2IpO1xuIFx0aWYgKCFtc2cpXG4gXHRcdHJldHVybiAtRUFHQUlOO1xuQEAgLTYxOCwzNCAmIzQzOzYyMSwxMDAgQEAgc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tLyogUHV0cyBhbiBza2Igb24gdGhlIGluZ3Jlc3MgcXVldWUgb2YgdGhlIHNvY2tldCBhbHJlYWR5IGFzc2lnbmVkIHRvIHRoZVxuLSAqIHNrYi4gSW4gdGhpcyBjYXNlIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIG1lbW9yeSBsaW1pdHMgb3Igc2tiX3NldF9vd25lcl9yXG4tICogYmVjYXVzZSB0aGUgc2tiIGlzIGFscmVhZHkgYWNjb3VudGVkIGZvciBoZXJlLlxuJiM0MztzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduKHN0cnVjdCBzb2NrICpzayxcbiYjNDM7XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdFx0ICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYylcbiYjNDM7e1xuJiM0MztcdC8qIExlYXZlIHNrYnMgYWxyZWFkeSByZWNlaXZlLWFjY291bnRlZCB0byBzayB1bnRvdWNoZWQuICovXG4mIzQzO1x0aWYgKHNrYi1cdTAwM2VzayA9PSBzayBcdTAwMjZcdTAwMjYgc2tiLVx1MDAzZWRlc3RydWN0b3IgPT0gc29ja19yZnJlZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoc2V0dGxlX2Z3ZF9hbGxvYykge1xuJiM0MztcdFx0c29ja19vd25lZF9ieV9tZShzayk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFza19ybWVtX3NjaGVkdWxlKHNrLCBza2IsIDApKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUHV0cyBhbiBza2Igb24gdGhlIGluZ3Jlc3MgcXVldWUgZm9yIHBzb2NrLVx1MDAzZXNrLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiB0aGUgc2tiIGFscmVhZHkgaGFzIHJlY2VpdmUgb3duZXJzaGlwIGZvciB0aGlzIHNvY2tldCwgbGVhdmUgc29ja2V0XG4mIzQzOyAqIG1lbW9yeSBhY2NvdW50aW5nIHVudG91Y2hlZC4gT3RoZXJ3aXNlLCBiZWZvcmUgYXNzaWduaW5nIHJlY2VpdmUgb3duZXJzaGlwXG4mIzQzOyAqIHRvIGFuIHVub3duZWQgc3RycGFyc2VyIFNLX1BBU1Mgc2tiLCBzZXR0bGUgYW55IGV4aXN0aW5nIHNrX2ZvcndhcmRfYWxsb2NcbiYjNDM7ICogZGVmaWNpdCBmcm9tIGVhcmxpZXIgY2xvbmUgY2hhcmdlcy5cbiAgKi9cbiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZilcbiYjNDM7XHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsXG4mIzQzO1x0XHRcdFx0ICAgICBib29sIHNldHRsZV9md2RfYWxsb2MpXG4ge1xuJiM0MztcdHN0cnVjdCBzb2NrICpzayA9IHBzb2NrLVx1MDAzZXNrO1xuIFx0c3RydWN0IHNrX21zZyAqbXNnID0gYWxsb2Nfc2tfbXNnKEdGUF9BVE9NSUMpO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghbXNnKSlcbiYjNDM7XHRcdHJldHVybiAtRUFHQUlOO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbihzaywgc2tiLCBzZXR0bGVfZndkX2FsbG9jKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBmcmVlO1xuJiM0MztcbiYjNDM7XHQvKiBUaGlzIGlzIHVzZWQgaW4gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZVxuJiM0MztcdCAqIGRhdGEgb3JpZ2luYXRlcyBmcm9tIHRoZSBzb2NrZXQmIzM5O3Mgb3duIHByb3RvY29sIHN0YWNrLiBObyBuZWVkIHRvXG4mIzQzO1x0ICogcmVmY291bnQgc2sgYmVjYXVzZSBtc2cmIzM5O3MgbGlmZXRpbWUgaXMgYm91bmQgdG8gc2sgdmlhIHRoZSBpbmdyZXNzX21zZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtc2ctXHUwMDNlc2sgPSBzaztcbiYjNDM7XHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLFxuJiM0MztcdFx0XHRcdFx0ICAgdGFrZV9yZWYpO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGZyZWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO2ZyZWU6XG4mIzQzO1x0a2ZyZWUobXNnKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYmFja2xvZyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuJiM0MztcdFx0XHRcdFx0ICAgICBib29sIHNldHRsZV9md2RfYWxsb2MpXG4mIzQzO3tcbiBcdHN0cnVjdCBzb2NrICpzayA9IHBzb2NrLVx1MDAzZXNrO1xuJiM0MztcdHN0cnVjdCBza19tc2cgKm1zZyA9IGFsbG9jX3NrX21zZyhHRlBfQVRPTUlDKTtcbiBcdGludCBlcnI7XG4gXG4gXHRpZiAodW5saWtlbHkoIW1zZykpXG4gXHRcdHJldHVybiAtRUFHQUlOO1xuLVx0c2tiX3NldF9vd25lcl9yKHNrYiwgc2spO1xuJiM0MztcbiYjNDM7XHRsb2NrX3NvY2soc2spO1xuJiM0MztcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduKHNrLCBza2IsIHNldHRsZV9md2RfYWxsb2MpO1xuJiM0MztcdHJlbGVhc2Vfc29jayhzayk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZnJlZTtcbiBcbiBcdC8qIFRoaXMgaXMgdXNlZCBpbiB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlXG4gXHQgKiBkYXRhIG9yaWdpbmF0ZXMgZnJvbSB0aGUgc29ja2V0JiMzOTtzIG93biBwcm90b2NvbCBzdGFjay4gTm8gbmVlZCB0b1xuIFx0ICogcmVmY291bnQgc2sgYmVjYXVzZSBtc2cmIzM5O3MgbGlmZXRpbWUgaXMgYm91bmQgdG8gc2sgdmlhIHRoZSBpbmdyZXNzX21zZy5cbiBcdCAqL1xuIFx0bXNnLVx1MDAzZXNrID0gc2s7XG4tXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLCB0YWtlX3JlZik7XG4mIzQzO1x0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShza2IsIG9mZiwgbGVuLCBwc29jaywgc2ssIG1zZyxcbiYjNDM7XHRcdFx0XHRcdCAgIHRha2VfcmVmKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4tXHRcdGtmcmVlKG1zZyk7XG4mIzQzO1x0XHRnb3RvIGZyZWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO2ZyZWU6XG4mIzQzO1x0a2ZyZWUobXNnKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc2tfcHNvY2tfaGFuZGxlX3NrYihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdCAgICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIGluZ3Jlc3MpXG4mIzQzO1x0XHRcdCAgICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIGluZ3Jlc3MsXG4mIzQzO1x0XHRcdCAgICAgICBib29sIHNlbGZfcGFzcywgYm9vbCBzdHJwYXJzZXIpXG4ge1xuIFx0aWYgKCFpbmdyZXNzKSB7XG4gXHRcdGlmICghc29ja193cml0ZWFibGUocHNvY2stXHUwMDNlc2spKVxuQEAgLTY1Myw3ICYjNDM7NzIyLDExIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfaGFuZGxlX3NrYihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gc2tiX3NlbmRfc29jayhwc29jay1cdTAwM2Vzaywgc2tiLCBvZmYsIGxlbik7XG4gXHR9XG4gXG4tXHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3MocHNvY2ssIHNrYiwgb2ZmLCBsZW4pO1xuJiM0MztcdGlmIChzZWxmX3Bhc3MpXG4mIzQzO1x0XHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHBzb2NrLCBza2IsIG9mZixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgbGVuLCB0cnVlLCBzdHJwYXJzZXIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3MocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHN0cnBhcnNlcik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNrX3Bzb2NrX3NrYl9zdGF0ZShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuQEAgLTY5NCw5ICYjNDM7NzY3LDE0IEBAIHN0YXRpYyB2b2lkIHNrX3Bzb2NrX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRyZXR1cm47XG4gXHRtdXRleF9sb2NrKFx1MDAyNnBzb2NrLVx1MDAzZXdvcmtfbXV0ZXgpO1xuIFx0d2hpbGUgKChza2IgPSBza2JfcGVlayhcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX3NrYikpKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHNhdmVkX3JlZGlyO1xuJiM0MztcdFx0Ym9vbCBzdHJwYXJzZXI7XG4mIzQzO1x0XHRib29sIHNlbGZfcGFzcztcbiYjNDM7XG4gXHRcdGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gXHRcdG9mZiA9IDA7XG4tXHRcdGlmIChza2JfYnBmX3N0cnBhcnNlcihza2IpKSB7XG4mIzQzO1x0XHRzdHJwYXJzZXIgPSBza2JfYnBmX3N0cnBhcnNlcihza2IpO1xuJiM0MztcdFx0aWYgKHN0cnBhcnNlcikge1xuIFx0XHRcdHN0cnVjdCBzdHJwX21zZyAqc3RtID0gc3RycF9tc2coc2tiKTtcbiBcbiBcdFx0XHRvZmYgPSBzdG0tXHUwMDNlb2Zmc2V0O1xuQEAgLTcxMCwxNyAmIzQzOzc4OCwyMCBAQCBzdGF0aWMgdm9pZCBza19wc29ja19iYWNrbG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0fVxuIFxuIFx0XHRpbmdyZXNzID0gc2tiX2JwZl9pbmdyZXNzKHNrYik7XG4mIzQzO1x0XHRzZWxmX3Bhc3MgPSBpbmdyZXNzIFx1MDAyNlx1MDAyNiAhc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpO1xuJiM0MztcdFx0c2F2ZWRfcmVkaXIgPSBza2ItXHUwMDNlX3NrX3JlZGlyO1xuIFx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG4gXHRcdGRvIHtcbiBcdFx0XHRyZXQgPSAtRUlPO1xuIFx0XHRcdGlmICghc29ja19mbGFnKHBzb2NrLVx1MDAzZXNrLCBTT0NLX0RFQUQpKVxuIFx0XHRcdFx0cmV0ID0gc2tfcHNvY2tfaGFuZGxlX3NrYihwc29jaywgc2tiLCBvZmYsXG4tXHRcdFx0XHRcdFx0XHQgIGxlbiwgaW5ncmVzcyk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBsZW4sIGluZ3Jlc3MsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBzZWxmX3Bhc3MsIHN0cnBhcnNlcik7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2M9IDApIHtcbiBcdFx0XHRcdGlmIChyZXQgPT0gLUVBR0FJTikge1xuIFx0XHRcdFx0XHRza19wc29ja19za2Jfc3RhdGUocHNvY2ssIHN0YXRlLCBsZW4sIG9mZik7XG4gXHRcdFx0XHRcdC8qIFJlc3RvcmUgcmVkaXIgaW5mbyB3ZSBjbGVhcmVkIGJlZm9yZSAqL1xuLVx0XHRcdFx0XHRza2JfYnBmX3NldF9yZWRpcihza2IsIHBzb2NrLVx1MDAzZXNrLCBpbmdyZXNzKTtcbiYjNDM7XHRcdFx0XHRcdHNrYi1cdTAwM2Vfc2tfcmVkaXIgPSBzYXZlZF9yZWRpcjtcbiBcdFx0XHRcdFx0LyogRGVsYXkgc2xpZ2h0bHkgdG8gcHJpb3JpdGl6ZSBhbnlcbiBcdFx0XHRcdFx0ICogb3RoZXIgd29yayB0aGF0IG1pZ2h0IGJlIGhlcmUuXG4gXHRcdFx0XHRcdCAqL1xuQEAgLTEwMTcsNiAmIzQzOzEwOTgsOCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICogcmV0cnlpbmcgbGF0ZXIgZnJvbSB3b3JrcXVldWUuXG4gXHRcdCAqL1xuIFx0XHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3Nfc2tiKSkge1xuJiM0MztcdFx0XHRib29sIHNldHRsZV9md2RfYWxsb2MgPSBmYWxzZTtcbiYjNDM7XG4gXHRcdFx0bGVuID0gc2tiLVx1MDAzZWxlbjtcbiBcdFx0XHRvZmYgPSAwO1xuIFx0XHRcdGlmIChza2JfYnBmX3N0cnBhcnNlcihza2IpKSB7XG5AQCAtMTAyNCw4ICYjNDM7MTEwNywxMCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdFx0XHRcdG9mZiA9IHN0bS1cdTAwM2VvZmZzZXQ7XG4gXHRcdFx0XHRsZW4gPSBzdG0tXHUwMDNlZnVsbF9sZW47XG4mIzQzO1x0XHRcdFx0c2V0dGxlX2Z3ZF9hbGxvYyA9IHRydWU7XG4gXHRcdFx0fVxuLVx0XHRcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIGZhbHNlKTtcbiYjNDM7XHRcdFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbixcbiYjNDM7XHRcdFx0XHRcdFx0XHRmYWxzZSwgc2V0dGxlX2Z3ZF9hbGxvYyk7XG4gXHRcdH1cbiBcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX2xvY2spO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNcbmluZGV4IDFkNzIzMTcyOGVhZmQuLmM3YWQyMWQwYmJmNDkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNcbkBAIC0xLDUgJiM0MzsxLDkgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICNpbmNsdWRlIFx1MDAzY2Vycm9yLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW5ldF9kaWFnLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvY2tfZGlhZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0aW5ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3NvY2ttYXBfaGVscGVycy5oXCYjMzQ7XG5AQCAtNDYwLDYgJiM0Mzs0NjQsMTcxIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zdHJwX3BhcnNlcl9yZWplY3Qodm9pZClcbiBcdHRlc3Rfc29ja21hcF9zdHJwX19kZXN0cm95KHN0cnApO1xuIH1cbiBcbiYjNDM7LyogUmVhZCBza19mb3J3YXJkX2FsbG9jIHRocm91Z2ggaW5ldF9kaWFnIG1lbWluZm8uICovXG4mIzQzO3N0YXRpYyBpbnQgc29ja21hcF9zdHJwX2dldF9md2RfYWxsb2MoaW50IHNvY2ssIGludCAqZndkX2FsbG9jKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgbG9jYWwgPSB7fSwgcGVlciA9IHt9O1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbiAqbG9jYWxfaW4sICpwZWVyX2luO1xuJiM0MztcdHNvY2tsZW5fdCBhZGRyX2xlbiA9IHNpemVvZihsb2NhbCk7XG4mIzQzO1x0Y2hhciBidWZbMTAyNF07XG4mIzQzO1x0c3RydWN0IHtcbiYjNDM7XHRcdHN0cnVjdCBubG1zZ2hkciBubGg7XG4mIzQzO1x0XHRzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiByZXE7XG4mIzQzO1x0fSByZXEgPSB7XG4mIzQzO1x0XHQubmxoID0ge1xuJiM0MztcdFx0XHQubmxtc2dfbGVuID0gc2l6ZW9mKHJlcSksXG4mIzQzO1x0XHRcdC5ubG1zZ190eXBlID0gU09DS19ESUFHX0JZX0ZBTUlMWSxcbiYjNDM7XHRcdFx0Lm5sbXNnX2ZsYWdzID0gTkxNX0ZfUkVRVUVTVCxcbiYjNDM7XHRcdFx0Lm5sbXNnX3NlcSA9IDEsXG4mIzQzO1x0XHR9LFxuJiM0MztcdFx0LnJlcSA9IHtcbiYjNDM7XHRcdFx0LnNkaWFnX2ZhbWlseSA9IEFGX0lORVQsXG4mIzQzO1x0XHRcdC5zZGlhZ19wcm90b2NvbCA9IElQUFJPVE9fVENQLFxuJiM0MztcdFx0XHQuaWRpYWdfZXh0ID0gMSBcdTAwM2NcdTAwM2MgKElORVRfRElBR19NRU1JTkZPIC0gMSksXG4mIzQzO1x0XHRcdC5pZGlhZ19zdGF0ZXMgPSB+MFUsXG4mIzQzO1x0XHRcdC5pZC5pZGlhZ19jb29raWUgPSB7XG4mIzQzO1x0XHRcdFx0SU5FVF9ESUFHX05PQ09PS0lFLFxuJiM0MztcdFx0XHRcdElORVRfRElBR19OT0NPT0tJRSxcbiYjNDM7XHRcdFx0fSxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0fTtcbiYjNDM7XHRpbnQgZGlhZ19mZCwgcmV0LCBlcnIgPSAtRU5PRU5UO1xuJiM0MztcbiYjNDM7XHRpZiAoZ2V0c29ja25hbWUoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmxvY2FsLCBcdTAwMjZhZGRyX2xlbikpXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcdGFkZHJfbGVuID0gc2l6ZW9mKHBlZXIpO1xuJiM0MztcdGlmIChnZXRwZWVybmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2cGVlciwgXHUwMDI2YWRkcl9sZW4pKVxuJiM0MztcdFx0cmV0dXJuIC1lcnJubztcbiYjNDM7XG4mIzQzO1x0bG9jYWxfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopXHUwMDI2bG9jYWw7XG4mIzQzO1x0cGVlcl9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilcdTAwMjZwZWVyO1xuJiM0MztcdHJlcS5yZXEuaWQuaWRpYWdfc3BvcnQgPSBsb2NhbF9pbi1cdTAwM2VzaW5fcG9ydDtcbiYjNDM7XHRyZXEucmVxLmlkLmlkaWFnX2Rwb3J0ID0gcGVlcl9pbi1cdTAwM2VzaW5fcG9ydDtcbiYjNDM7XHRyZXEucmVxLmlkLmlkaWFnX3NyY1swXSA9IGxvY2FsX2luLVx1MDAzZXNpbl9hZGRyLnNfYWRkcjtcbiYjNDM7XHRyZXEucmVxLmlkLmlkaWFnX2RzdFswXSA9IHBlZXJfaW4tXHUwMDNlc2luX2FkZHIuc19hZGRyO1xuJiM0MztcbiYjNDM7XHRkaWFnX2ZkID0gc29ja2V0KEFGX05FVExJTkssIFNPQ0tfUkFXIHwgU09DS19DTE9FWEVDLFxuJiM0MztcdFx0XHQgTkVUTElOS19TT0NLX0RJQUcpO1xuJiM0MztcdGlmIChkaWFnX2ZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC1lcnJubztcbiYjNDM7XG4mIzQzO1x0cmV0ID0gc2VuZChkaWFnX2ZkLCBcdTAwMjZyZXEsIHNpemVvZihyZXEpLCAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRlcnIgPSAtZXJybm87XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHJldCAhPSBzaXplb2YocmVxKSkge1xuJiM0MztcdFx0ZXJyID0gLUVJTztcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVjdihkaWFnX2ZkLCBidWYsIHNpemVvZihidWYpLCAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRlcnIgPSAtZXJybm87XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoc3RydWN0IG5sbXNnaGRyICpubGggPSAoc3RydWN0IG5sbXNnaGRyICopYnVmO1xuJiM0MztcdCAgICAgTkxNU0dfT0sobmxoLCByZXQpOyBubGggPSBOTE1TR19ORVhUKG5saCwgcmV0KSkge1xuJiM0MztcdFx0c3RydWN0IGluZXRfZGlhZ19tc2cgKm1zZyA9IE5MTVNHX0RBVEEobmxoKTtcbiYjNDM7XHRcdHN0cnVjdCBydGF0dHIgKmF0dHI7XG4mIzQzO1x0XHRpbnQgbGVuO1xuJiM0MztcbiYjNDM7XHRcdGlmIChubGgtXHUwMDNlbmxtc2dfdHlwZSA9PSBOTE1TR19FUlJPUikge1xuJiM0MztcdFx0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChubGgtXHUwMDNlbmxtc2dfdHlwZSA9PSBOTE1TR19ET05FKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRsZW4gPSBubGgtXHUwMDNlbmxtc2dfbGVuIC0gTkxNU0dfTEVOR1RIKHNpemVvZigqbXNnKSk7XG4mIzQzO1x0XHRmb3IgKGF0dHIgPSAoc3RydWN0IHJ0YXR0ciAqKShtc2cgJiM0MzsgMSk7IFJUQV9PSyhhdHRyLCBsZW4pO1xuJiM0MztcdFx0ICAgICBhdHRyID0gUlRBX05FWFQoYXR0ciwgbGVuKSkge1xuJiM0MztcdFx0XHRzdHJ1Y3QgaW5ldF9kaWFnX21lbWluZm8gKm1pbmZvO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKGF0dHItXHUwMDNlcnRhX3R5cGUgIT0gSU5FVF9ESUFHX01FTUlORk8pXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdG1pbmZvID0gUlRBX0RBVEEoYXR0cik7XG4mIzQzO1x0XHRcdCpmd2RfYWxsb2MgPSAoX19zMzIpbWluZm8tXHUwMDNlaWRpYWdfZm1lbTtcbiYjNDM7XHRcdFx0ZXJyID0gMDtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGNsb3NlKGRpYWdfZmQpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRlc3Qgc3RycGFyc2VyIFNLX1BBU1MgZGVsaXZlcnkgdG8gdGhlIHNhbWUgc29ja2V0LiAqL1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF9zZWxmX3Bhc3NfZndkX2FsbG9jKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGVzdF9zb2NrbWFwX3N0cnAgKnN0cnAgPSBOVUxMO1xuJiM0MztcdGNoYXIgc25kWzQgKiAxMDI0XTtcbiYjNDM7XHRpbnQgYyA9IC0xLCBwID0gLTE7XG4mIzQzO1x0aW50IGZ3ZF9hbGxvYztcbiYjNDM7XHRpbnQgc25kYnVmID0gc2l6ZW9mKHNuZCk7XG4mIzQzO1x0aW50IHplcm8gPSAwO1xuJiM0MztcdGNoYXIgcmN2O1xuJiM0MztcdGludCBzZW50LCByZWN2ZDtcbiYjNDM7XHRpbnQgbWFwO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdG1lbXNldChzbmQsIDB4YTUsIHNpemVvZihzbmQpKTtcbiYjNDM7XG4mIzQzO1x0c3RycCA9IHRlc3Rfc29ja21hcF9zdHJwX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHN0cnAsIFwmIzM0O3Rlc3Rfc29ja21hcF9zdHJwX19vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bWFwID0gYnBmX21hcF9fZmQoc3RycC1cdTAwM2VtYXBzLnNvY2tfbWFwKTtcbiYjNDM7XHRlcnIgPSB4YnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChzdHJwLVx1MDAzZXByb2dzLnByb2dfc2tiX3BhcnNlcl9vbmUpLFxuJiM0MztcdFx0XHQgICAgICAgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXN0cm95O1xuJiM0MztcbiYjNDM7XHRlcnIgPSB4YnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChzdHJwLVx1MDAzZXByb2dzLnByb2dfc2tiX3ZlcmRpY3RfcGFzcyksXG4mIzQzO1x0XHRcdCAgICAgICBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QsIDApO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXN0cm95O1xuJiM0MztcbiYjNDM7XHRlcnIgPSBjcmVhdGVfcGFpcihBRl9JTkVULCBTT0NLX1NUUkVBTSwgXHUwMDI2YywgXHUwMDI2cCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtjcmVhdGVfcGFpclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXN0cm95O1xuJiM0MztcbiYjNDM7XHRlcnIgPSB4c2V0c29ja29wdChjLCBTT0xfU09DS0VULCBTT19TTkRCVUYsIFx1MDAyNnNuZGJ1Ziwgc2l6ZW9mKHNuZGJ1ZikpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXN0cm95O1xuJiM0MztcbiYjNDM7XHRlcnIgPSB4c2V0c29ja29wdChwLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIFx1MDAyNnNuZGJ1Ziwgc2l6ZW9mKHNuZGJ1ZikpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXN0cm95O1xuJiM0MztcbiYjNDM7XHRlcnIgPSB4YnBmX21hcF91cGRhdGVfZWxlbShtYXAsIFx1MDAyNnplcm8sIFx1MDAyNnAsIEJQRl9OT0VYSVNUKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBvdXRfZGVzdHJveTtcbiYjNDM7XG4mIzQzO1x0c2VudCA9IHNlbmQoYywgc25kLCBzaXplb2Yoc25kKSwgTVNHX0RPTlRXQUlUKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShzZW50LCBzaXplb2Yoc25kKSwgXCYjMzQ7c2VuZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXN0cm95O1xuJiM0MztcbiYjNDM7XHRyZWN2ZCA9IHJlY3ZfdGltZW91dChwLCBcdTAwMjZyY3YsIHNpemVvZihyY3YpLCBNU0dfRE9OVFdBSVQsXG4mIzQzO1x0XHRcdCAgICAgSU9fVElNRU9VVF9TRUMpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHJlY3ZkLCBzaXplb2YocmN2KSwgXCYjMzQ7cmVjdl90aW1lb3V0XCYjMzQ7KSB8fFxuJiM0MztcdCAgICAhQVNTRVJUX0VRKHJjdiwgc25kWzBdLCBcJiMzNDtkYXRhIG1pc21hdGNoXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4mIzQzO1xuJiM0MztcdGVyciA9IHNvY2ttYXBfc3RycF9nZXRfZndkX2FsbG9jKHAsIFx1MDAyNmZ3ZF9hbGxvYyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvY1wmIzM0OykgfHxcbiYjNDM7XHQgICAgIUFTU0VSVF9HRShmd2RfYWxsb2MsIDAsIFwmIzM0O3NrX2ZvcndhcmRfYWxsb2NcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGVzdHJveTtcbiYjNDM7b3V0X2Rlc3Ryb3k6XG4mIzQzO1x0dGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7XG4mIzQzO1x0aWYgKGMgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoYyk7XG4mIzQzO1x0aWYgKHAgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UocCk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCB0ZXN0X3NvY2ttYXBfc3RycCh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgc3RycCB0Y3AgcGFzc1wmIzM0OykpXG5AQCAtNDgyLDQgJiM0Mzs2NTEsNiBAQCB2b2lkIHRlc3Rfc29ja21hcF9zdHJwKHZvaWQpXG4gXHRcdHRlc3Rfc29ja21hcF9zdHJwX2Rpc3BhdGNoX3BrdChBRl9JTkVULCBTT0NLX1NUUkVBTSk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtzb2NrbWFwIHN0cnAgcGFyc2VyIHJlamVjdCBwa3QgbW9kXCYjMzQ7KSlcbiBcdFx0dGVzdF9zb2NrbWFwX3N0cnBfcGFyc2VyX3JlamVjdCgpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgc3RycCBzZWxmIHBhc3MgZndkIGFsbG9jXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3Rfc29ja21hcF9zdHJwX3NlbGZfcGFzc19md2RfYWxsb2MoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuY1xuaW5kZXggZmU4OGZhNmQ0MGJjNS4uNjgyZTUzZDQwNzUxYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuY1xuQEAgLTUwLDYgJiM0Mzs1MCwxMiBAQCBpbnQgcHJvZ19za2JfcGFyc2VyX3BhcnRpYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIDEwO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0O3NrX3NrYi9zdHJlYW1fcGFyc2VyXCYjMzQ7KVxuJiM0MztpbnQgcHJvZ19za2JfcGFyc2VyX29uZShzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMTtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7c2tfc2tiL3N0cmVhbV9wYXJzZXJcJiMzNDspXG4gaW50IHByb2dfc2tiX3BhcnNlcl9yZXNpemUoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMmIzM0OywKICAgICYjMzQ7c29ja19tYXBfZ2V0X2Zyb21fZmQmIzM0OywKICAgICYjMzQ7dGNwX2JwZl91cGRhdGVfcHJvdG8mIzM0OywKICAgICYjMzQ7dGNwX2JwZl9zdHJwX3JlYWRfc29jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHNvY2ttYXAgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBob3cgYHNrX2ZvcndhcmRfYWxsb2NgIG1lbW9yeSBhY2NvdW50aW5nIGlzIGhhbmRsZWQgd2hlbiBhIHN0cmVhbSBwYXJzZXIgKHN0cnBhcnNlcikgcHJvZ3JhbSByZXR1cm5zIGBTS19QQVNTYCBhbmQgdGhlIHNrYiBpcyBkZWxpdmVyZWQgdG8gdGhlIHNhbWUgc29ja2V0JiMzOTtzIGluZ3Jlc3MgcXVldWUuIEl0IGludHJvZHVjZXMgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduYCB0byBzZXR0bGUgYW55IGV4aXN0aW5nIGBza19mb3J3YXJkX2FsbG9jYCBkZWZpY2l0IGJlZm9yZSBhc3NpZ25pbmcgcmVjZWl2ZSBvd25lcnNoaXAgdG8gdGhlIHNrYi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQlBGIHNvY2ttYXAgYW5kIHN0cmVhbSBwYXJzZXIpIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBtZW1vcnkgYWNjb3VudGluZyByZW1haW5zIGNvcnJlY3QgdW5kZXIgdmFyaW91cyBuZXR3b3JrIGNvbmRpdGlvbnMgYW5kIEJQRiBwcm9ncmFtIGJlaGF2aW9ycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBiMGU4Y2Y4YjMyMWRmODhjMDI2ZGFlYTU3NjQ5MWZjYTVjNzM2ZTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAxNjo0NDoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrbXNnLmMgYi9uZXQvY29yZS9za21zZy5jCmluZGV4IDI1MjFiNjQzZmEwNWQuLjM0N2NiMTY4Zjc0OTEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrbXNnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2ttc2cuYwpAQCAtNTg2LDIxICYjNDM7NTg2LDI0IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogfQogCiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYpOwomIzQzOwkJCQkgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsCiYjNDM7CQkJCSAgICAgYm9vbCBzZXR0bGVfZndkX2FsbG9jKTsKJiM0MztzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYmFja2xvZyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLAomIzQzOwkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkJICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLAomIzQzOwkJCQkJICAgICBib29sIHNldHRsZV9md2RfYWxsb2MpOwogCiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJdTMyIG9mZiwgdTMyIGxlbikKJiM0MzsJCQkJdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCBzZXR0bGVfZndkX2FsbG9jKQogewogCXN0cnVjdCBzb2NrICpzayA9IHBzb2NrLSZndDtzazsKIAlzdHJ1Y3Qgc2tfbXNnICptc2c7CiAJaW50IGVycjsKIAotCS8qIElmIHdlIGFyZSByZWNlaXZpbmcgb24gdGhlIHNhbWUgc29jayBza2ItJmd0O3NrIGlzIGFscmVhZHkgYXNzaWduZWQsCi0JICogc2tpcCBtZW1vcnkgYWNjb3VudGluZyBhbmQgb3duZXIgdHJhbnNpdGlvbiBzZWVpbmcgaXQgYWxyZWFkeSBzZXQKLQkgKiBjb3JyZWN0bHkuCi0JICovCiAJaWYgKHVubGlrZWx5KHNrYi0mZ3Q7c2sgPT0gc2spKQotCQlyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgdHJ1ZSk7CiYjNDM7CQlyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHBzb2NrLCBza2IsIG9mZiwKJiM0MzsJCQkJCQkJIGxlbiwgdHJ1ZSwKJiM0MzsJCQkJCQkJIHNldHRsZV9md2RfYWxsb2MpOwogCW1zZyA9IHNrX3Bzb2NrX2NyZWF0ZV9pbmdyZXNzX21zZyhzaywgc2tiKTsKIAlpZiAoIW1zZykKIAkJcmV0dXJuIC1FQUdBSU47CkBAIC02MTgsMzQgJiM0Mzs2MjEsMTAwIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlyZXR1cm4gZXJyOwogfQogCi0vKiBQdXRzIGFuIHNrYiBvbiB0aGUgaW5ncmVzcyBxdWV1ZSBvZiB0aGUgc29ja2V0IGFscmVhZHkgYXNzaWduZWQgdG8gdGhlCi0gKiBza2IuIEluIHRoaXMgY2FzZSB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBtZW1vcnkgbGltaXRzIG9yIHNrYl9zZXRfb3duZXJfcgotICogYmVjYXVzZSB0aGUgc2tiIGlzIGFscmVhZHkgYWNjb3VudGVkIGZvciBoZXJlLgomIzQzO3N0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ24oc3RydWN0IHNvY2sgKnNrLAomIzQzOwkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCQkgICAgYm9vbCBzZXR0bGVfZndkX2FsbG9jKQomIzQzO3sKJiM0MzsJLyogTGVhdmUgc2ticyBhbHJlYWR5IHJlY2VpdmUtYWNjb3VudGVkIHRvIHNrIHVudG91Y2hlZC4gKi8KJiM0MzsJaWYgKHNrYi0mZ3Q7c2sgPT0gc2sgJmFtcDsmYW1wOyBza2ItJmd0O2Rlc3RydWN0b3IgPT0gc29ja19yZnJlZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoc2V0dGxlX2Z3ZF9hbGxvYykgewomIzQzOwkJc29ja19vd25lZF9ieV9tZShzayk7CiYjNDM7CiYjNDM7CQlpZiAoIXNrX3JtZW1fc2NoZWR1bGUoc2ssIHNrYiwgMCkpCiYjNDM7CQkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tiX3NldF9vd25lcl9yKHNrYiwgc2spOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUHV0cyBhbiBza2Igb24gdGhlIGluZ3Jlc3MgcXVldWUgZm9yIHBzb2NrLSZndDtzay4KJiM0MzsgKgomIzQzOyAqIElmIHRoZSBza2IgYWxyZWFkeSBoYXMgcmVjZWl2ZSBvd25lcnNoaXAgZm9yIHRoaXMgc29ja2V0LCBsZWF2ZSBzb2NrZXQKJiM0MzsgKiBtZW1vcnkgYWNjb3VudGluZyB1bnRvdWNoZWQuIE90aGVyd2lzZSwgYmVmb3JlIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcAomIzQzOyAqIHRvIGFuIHVub3duZWQgc3RycGFyc2VyIFNLX1BBU1Mgc2tiLCBzZXR0bGUgYW55IGV4aXN0aW5nIHNrX2ZvcndhcmRfYWxsb2MKJiM0MzsgKiBkZWZpY2l0IGZyb20gZWFybGllciBjbG9uZSBjaGFyZ2VzLgogICovCiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYpCiYjNDM7CQkJCSAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZiwKJiM0MzsJCQkJICAgICBib29sIHNldHRsZV9md2RfYWxsb2MpCiB7CiYjNDM7CXN0cnVjdCBzb2NrICpzayA9IHBzb2NrLSZndDtzazsKIAlzdHJ1Y3Qgc2tfbXNnICptc2cgPSBhbGxvY19za19tc2coR0ZQX0FUT01JQyk7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSghbXNnKSkKJiM0MzsJCXJldHVybiAtRUFHQUlOOwomIzQzOwomIzQzOwllcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbihzaywgc2tiLCBzZXR0bGVfZndkX2FsbG9jKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZnJlZTsKJiM0MzsKJiM0MzsJLyogVGhpcyBpcyB1c2VkIGluIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUKJiM0MzsJICogZGF0YSBvcmlnaW5hdGVzIGZyb20gdGhlIHNvY2tldCYjMzk7cyBvd24gcHJvdG9jb2wgc3RhY2suIE5vIG5lZWQgdG8KJiM0MzsJICogcmVmY291bnQgc2sgYmVjYXVzZSBtc2cmIzM5O3MgbGlmZXRpbWUgaXMgYm91bmQgdG8gc2sgdmlhIHRoZSBpbmdyZXNzX21zZy4KJiM0MzsJICovCiYjNDM7CW1zZy0mZ3Q7c2sgPSBzazsKJiM0MzsJZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShza2IsIG9mZiwgbGVuLCBwc29jaywgc2ssIG1zZywKJiM0MzsJCQkJCSAgIHRha2VfcmVmKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlnb3RvIGZyZWU7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7ZnJlZToKJiM0MzsJa2ZyZWUobXNnKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2coc3RydWN0IHNrX3Bzb2NrICpwc29jaywKJiM0MzsJCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJCSAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZiwKJiM0MzsJCQkJCSAgICAgYm9vbCBzZXR0bGVfZndkX2FsbG9jKQomIzQzO3sKIAlzdHJ1Y3Qgc29jayAqc2sgPSBwc29jay0mZ3Q7c2s7CiYjNDM7CXN0cnVjdCBza19tc2cgKm1zZyA9IGFsbG9jX3NrX21zZyhHRlBfQVRPTUlDKTsKIAlpbnQgZXJyOwogCiAJaWYgKHVubGlrZWx5KCFtc2cpKQogCQlyZXR1cm4gLUVBR0FJTjsKLQlza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7CiYjNDM7CiYjNDM7CWxvY2tfc29jayhzayk7CiYjNDM7CWVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduKHNrLCBza2IsIHNldHRsZV9md2RfYWxsb2MpOwomIzQzOwlyZWxlYXNlX3NvY2soc2spOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBmcmVlOwogCiAJLyogVGhpcyBpcyB1c2VkIGluIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUKIAkgKiBkYXRhIG9yaWdpbmF0ZXMgZnJvbSB0aGUgc29ja2V0JiMzOTtzIG93biBwcm90b2NvbCBzdGFjay4gTm8gbmVlZCB0bwogCSAqIHJlZmNvdW50IHNrIGJlY2F1c2UgbXNnJiMzOTtzIGxpZmV0aW1lIGlzIGJvdW5kIHRvIHNrIHZpYSB0aGUgaW5ncmVzc19tc2cuCiAJICovCiAJbXNnLSZndDtzayA9IHNrOwotCWVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc2tiLCBvZmYsIGxlbiwgcHNvY2ssIHNrLCBtc2csIHRha2VfcmVmKTsKJiM0MzsJZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShza2IsIG9mZiwgbGVuLCBwc29jaywgc2ssIG1zZywKJiM0MzsJCQkJCSAgIHRha2VfcmVmKTsKIAlpZiAoZXJyICZsdDsgMCkKLQkJa2ZyZWUobXNnKTsKJiM0MzsJCWdvdG8gZnJlZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0MztmcmVlOgomIzQzOwlrZnJlZShtc2cpOwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2tfcHNvY2tfaGFuZGxlX3NrYihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgaW5ncmVzcykKJiM0MzsJCQkgICAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCBpbmdyZXNzLAomIzQzOwkJCSAgICAgICBib29sIHNlbGZfcGFzcywgYm9vbCBzdHJwYXJzZXIpCiB7CiAJaWYgKCFpbmdyZXNzKSB7CiAJCWlmICghc29ja193cml0ZWFibGUocHNvY2stJmd0O3NrKSkKQEAgLTY1Myw3ICYjNDM7NzIyLDExIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfaGFuZGxlX3NrYihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlyZXR1cm4gc2tiX3NlbmRfc29jayhwc29jay0mZ3Q7c2ssIHNrYiwgb2ZmLCBsZW4pOwogCX0KIAotCXJldHVybiBza19wc29ja19za2JfaW5ncmVzcyhwc29jaywgc2tiLCBvZmYsIGxlbik7CiYjNDM7CWlmIChzZWxmX3Bhc3MpCiYjNDM7CQlyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHBzb2NrLCBza2IsIG9mZiwKJiM0MzsJCQkJCQkJIGxlbiwgdHJ1ZSwgc3RycGFyc2VyKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBzdHJwYXJzZXIpOwogfQogCiBzdGF0aWMgdm9pZCBza19wc29ja19za2Jfc3RhdGUoc3RydWN0IHNrX3Bzb2NrICpwc29jaywKQEAgLTY5NCw5ICYjNDM7NzY3LDE0IEBAIHN0YXRpYyB2b2lkIHNrX3Bzb2NrX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQlyZXR1cm47CiAJbXV0ZXhfbG9jaygmYW1wO3Bzb2NrLSZndDt3b3JrX211dGV4KTsKIAl3aGlsZSAoKHNrYiA9IHNrYl9wZWVrKCZhbXA7cHNvY2stJmd0O2luZ3Jlc3Nfc2tiKSkpIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgc2F2ZWRfcmVkaXI7CiYjNDM7CQlib29sIHN0cnBhcnNlcjsKJiM0MzsJCWJvb2wgc2VsZl9wYXNzOwomIzQzOwogCQlsZW4gPSBza2ItJmd0O2xlbjsKIAkJb2ZmID0gMDsKLQkJaWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHsKJiM0MzsJCXN0cnBhcnNlciA9IHNrYl9icGZfc3RycGFyc2VyKHNrYik7CiYjNDM7CQlpZiAoc3RycGFyc2VyKSB7CiAJCQlzdHJ1Y3Qgc3RycF9tc2cgKnN0bSA9IHN0cnBfbXNnKHNrYik7CiAKIAkJCW9mZiA9IHN0bS0mZ3Q7b2Zmc2V0OwpAQCAtNzEwLDE3ICYjNDM7Nzg4LDIwIEBAIHN0YXRpYyB2b2lkIHNrX3Bzb2NrX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQl9CiAKIAkJaW5ncmVzcyA9IHNrYl9icGZfaW5ncmVzcyhza2IpOwomIzQzOwkJc2VsZl9wYXNzID0gaW5ncmVzcyAmYW1wOyZhbXA7ICFza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYik7CiYjNDM7CQlzYXZlZF9yZWRpciA9IHNrYi0mZ3Q7X3NrX3JlZGlyOwogCQlza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7CiAJCWRvIHsKIAkJCXJldCA9IC1FSU87CiAJCQlpZiAoIXNvY2tfZmxhZyhwc29jay0mZ3Q7c2ssIFNPQ0tfREVBRCkpCiAJCQkJcmV0ID0gc2tfcHNvY2tfaGFuZGxlX3NrYihwc29jaywgc2tiLCBvZmYsCi0JCQkJCQkJICBsZW4sIGluZ3Jlc3MpOwomIzQzOwkJCQkJCQkgIGxlbiwgaW5ncmVzcywKJiM0MzsJCQkJCQkJICBzZWxmX3Bhc3MsIHN0cnBhcnNlcik7CiAJCQlpZiAocmV0ICZsdDs9IDApIHsKIAkJCQlpZiAocmV0ID09IC1FQUdBSU4pIHsKIAkJCQkJc2tfcHNvY2tfc2tiX3N0YXRlKHBzb2NrLCBzdGF0ZSwgbGVuLCBvZmYpOwogCQkJCQkvKiBSZXN0b3JlIHJlZGlyIGluZm8gd2UgY2xlYXJlZCBiZWZvcmUgKi8KLQkJCQkJc2tiX2JwZl9zZXRfcmVkaXIoc2tiLCBwc29jay0mZ3Q7c2ssIGluZ3Jlc3MpOwomIzQzOwkJCQkJc2tiLSZndDtfc2tfcmVkaXIgPSBzYXZlZF9yZWRpcjsKIAkJCQkJLyogRGVsYXkgc2xpZ2h0bHkgdG8gcHJpb3JpdGl6ZSBhbnkKIAkJCQkJICogb3RoZXIgd29yayB0aGF0IG1pZ2h0IGJlIGhlcmUuCiAJCQkJCSAqLwpAQCAtMTAxNyw2ICYjNDM7MTA5OCw4IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgKiByZXRyeWluZyBsYXRlciBmcm9tIHdvcmtxdWV1ZS4KIAkJICovCiAJCWlmIChza2JfcXVldWVfZW1wdHkoJmFtcDtwc29jay0mZ3Q7aW5ncmVzc19za2IpKSB7CiYjNDM7CQkJYm9vbCBzZXR0bGVfZndkX2FsbG9jID0gZmFsc2U7CiYjNDM7CiAJCQlsZW4gPSBza2ItJmd0O2xlbjsKIAkJCW9mZiA9IDA7CiAJCQlpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkgewpAQCAtMTAyNCw4ICYjNDM7MTEwNywxMCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAogCQkJCW9mZiA9IHN0bS0mZ3Q7b2Zmc2V0OwogCQkJCWxlbiA9IHN0bS0mZ3Q7ZnVsbF9sZW47CiYjNDM7CQkJCXNldHRsZV9md2RfYWxsb2MgPSB0cnVlOwogCQkJfQotCQkJZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgZmFsc2UpOwomIzQzOwkJCWVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sCiYjNDM7CQkJCQkJCWZhbHNlLCBzZXR0bGVfZndkX2FsbG9jKTsKIAkJfQogCQlpZiAoZXJyICZsdDsgMCkgewogCQkJc3Bpbl9sb2NrX2JoKCZhbXA7cHNvY2stJmd0O2luZ3Jlc3NfbG9jayk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jCmluZGV4IDFkNzIzMTcyOGVhZmQuLmM3YWQyMWQwYmJmNDkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jCkBAIC0xLDUgJiM0MzsxLDkgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAjaW5jbHVkZSAmbHQ7ZXJyb3IuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW5ldF9kaWFnLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldGxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcnRuZXRsaW5rLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NvY2tfZGlhZy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldGluZXQvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwogI2luY2x1ZGUgJiMzNDtzb2NrbWFwX2hlbHBlcnMuaCYjMzQ7CkBAIC00NjAsNiAmIzQzOzQ2NCwxNzEgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnBfcGFyc2VyX3JlamVjdCh2b2lkKQogCXRlc3Rfc29ja21hcF9zdHJwX19kZXN0cm95KHN0cnApOwogfQogCiYjNDM7LyogUmVhZCBza19mb3J3YXJkX2FsbG9jIHRocm91Z2ggaW5ldF9kaWFnIG1lbWluZm8uICovCiYjNDM7c3RhdGljIGludCBzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvYyhpbnQgc29jaywgaW50ICpmd2RfYWxsb2MpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBsb2NhbCA9IHt9LCBwZWVyID0ge307CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9pbiAqbG9jYWxfaW4sICpwZWVyX2luOwomIzQzOwlzb2NrbGVuX3QgYWRkcl9sZW4gPSBzaXplb2YobG9jYWwpOwomIzQzOwljaGFyIGJ1ZlsxMDI0XTsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXN0cnVjdCBubG1zZ2hkciBubGg7CiYjNDM7CQlzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiByZXE7CiYjNDM7CX0gcmVxID0gewomIzQzOwkJLm5saCA9IHsKJiM0MzsJCQkubmxtc2dfbGVuID0gc2l6ZW9mKHJlcSksCiYjNDM7CQkJLm5sbXNnX3R5cGUgPSBTT0NLX0RJQUdfQllfRkFNSUxZLAomIzQzOwkJCS5ubG1zZ19mbGFncyA9IE5MTV9GX1JFUVVFU1QsCiYjNDM7CQkJLm5sbXNnX3NlcSA9IDEsCiYjNDM7CQl9LAomIzQzOwkJLnJlcSA9IHsKJiM0MzsJCQkuc2RpYWdfZmFtaWx5ID0gQUZfSU5FVCwKJiM0MzsJCQkuc2RpYWdfcHJvdG9jb2wgPSBJUFBST1RPX1RDUCwKJiM0MzsJCQkuaWRpYWdfZXh0ID0gMSAmbHQ7Jmx0OyAoSU5FVF9ESUFHX01FTUlORk8gLSAxKSwKJiM0MzsJCQkuaWRpYWdfc3RhdGVzID0gfjBVLAomIzQzOwkJCS5pZC5pZGlhZ19jb29raWUgPSB7CiYjNDM7CQkJCUlORVRfRElBR19OT0NPT0tJRSwKJiM0MzsJCQkJSU5FVF9ESUFHX05PQ09PS0lFLAomIzQzOwkJCX0sCiYjNDM7CQl9LAomIzQzOwl9OwomIzQzOwlpbnQgZGlhZ19mZCwgcmV0LCBlcnIgPSAtRU5PRU5UOwomIzQzOwomIzQzOwlpZiAoZ2V0c29ja25hbWUoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhbXA7bG9jYWwsICZhbXA7YWRkcl9sZW4pKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsJYWRkcl9sZW4gPSBzaXplb2YocGVlcik7CiYjNDM7CWlmIChnZXRwZWVybmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDtwZWVyLCAmYW1wO2FkZHJfbGVuKSkKJiM0MzsJCXJldHVybiAtZXJybm87CiYjNDM7CiYjNDM7CWxvY2FsX2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZhbXA7bG9jYWw7CiYjNDM7CXBlZXJfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopJmFtcDtwZWVyOwomIzQzOwlyZXEucmVxLmlkLmlkaWFnX3Nwb3J0ID0gbG9jYWxfaW4tJmd0O3Npbl9wb3J0OwomIzQzOwlyZXEucmVxLmlkLmlkaWFnX2Rwb3J0ID0gcGVlcl9pbi0mZ3Q7c2luX3BvcnQ7CiYjNDM7CXJlcS5yZXEuaWQuaWRpYWdfc3JjWzBdID0gbG9jYWxfaW4tJmd0O3Npbl9hZGRyLnNfYWRkcjsKJiM0MzsJcmVxLnJlcS5pZC5pZGlhZ19kc3RbMF0gPSBwZWVyX2luLSZndDtzaW5fYWRkci5zX2FkZHI7CiYjNDM7CiYjNDM7CWRpYWdfZmQgPSBzb2NrZXQoQUZfTkVUTElOSywgU09DS19SQVcgfCBTT0NLX0NMT0VYRUMsCiYjNDM7CQkJIE5FVExJTktfU09DS19ESUFHKTsKJiM0MzsJaWYgKGRpYWdfZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsKJiM0MzsJcmV0ID0gc2VuZChkaWFnX2ZkLCAmYW1wO3JlcSwgc2l6ZW9mKHJlcSksIDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJZXJyID0gLWVycm5vOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJaWYgKHJldCAhPSBzaXplb2YocmVxKSkgewomIzQzOwkJZXJyID0gLUVJTzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHJlY3YoZGlhZ19mZCwgYnVmLCBzaXplb2YoYnVmKSwgMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQllcnIgPSAtZXJybm87CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKHN0cnVjdCBubG1zZ2hkciAqbmxoID0gKHN0cnVjdCBubG1zZ2hkciAqKWJ1ZjsKJiM0MzsJICAgICBOTE1TR19PSyhubGgsIHJldCk7IG5saCA9IE5MTVNHX05FWFQobmxoLCByZXQpKSB7CiYjNDM7CQlzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqbXNnID0gTkxNU0dfREFUQShubGgpOwomIzQzOwkJc3RydWN0IHJ0YXR0ciAqYXR0cjsKJiM0MzsJCWludCBsZW47CiYjNDM7CiYjNDM7CQlpZiAobmxoLSZndDtubG1zZ190eXBlID09IE5MTVNHX0VSUk9SKSB7CiYjNDM7CQkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJCWlmIChubGgtJmd0O25sbXNnX3R5cGUgPT0gTkxNU0dfRE9ORSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWxlbiA9IG5saC0mZ3Q7bmxtc2dfbGVuIC0gTkxNU0dfTEVOR1RIKHNpemVvZigqbXNnKSk7CiYjNDM7CQlmb3IgKGF0dHIgPSAoc3RydWN0IHJ0YXR0ciAqKShtc2cgJiM0MzsgMSk7IFJUQV9PSyhhdHRyLCBsZW4pOwomIzQzOwkJICAgICBhdHRyID0gUlRBX05FWFQoYXR0ciwgbGVuKSkgewomIzQzOwkJCXN0cnVjdCBpbmV0X2RpYWdfbWVtaW5mbyAqbWluZm87CiYjNDM7CiYjNDM7CQkJaWYgKGF0dHItJmd0O3J0YV90eXBlICE9IElORVRfRElBR19NRU1JTkZPKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQltaW5mbyA9IFJUQV9EQVRBKGF0dHIpOwomIzQzOwkJCSpmd2RfYWxsb2MgPSAoX19zMzIpbWluZm8tJmd0O2lkaWFnX2ZtZW07CiYjNDM7CQkJZXJyID0gMDsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzO291dDoKJiM0MzsJY2xvc2UoZGlhZ19mZCk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRlc3Qgc3RycGFyc2VyIFNLX1BBU1MgZGVsaXZlcnkgdG8gdGhlIHNhbWUgc29ja2V0LiAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zdHJwX3NlbGZfcGFzc19md2RfYWxsb2Modm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZXN0X3NvY2ttYXBfc3RycCAqc3RycCA9IE5VTEw7CiYjNDM7CWNoYXIgc25kWzQgKiAxMDI0XTsKJiM0MzsJaW50IGMgPSAtMSwgcCA9IC0xOwomIzQzOwlpbnQgZndkX2FsbG9jOwomIzQzOwlpbnQgc25kYnVmID0gc2l6ZW9mKHNuZCk7CiYjNDM7CWludCB6ZXJvID0gMDsKJiM0MzsJY2hhciByY3Y7CiYjNDM7CWludCBzZW50LCByZWN2ZDsKJiM0MzsJaW50IG1hcDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJbWVtc2V0KHNuZCwgMHhhNSwgc2l6ZW9mKHNuZCkpOwomIzQzOwomIzQzOwlzdHJwID0gdGVzdF9zb2NrbWFwX3N0cnBfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHN0cnAsICYjMzQ7dGVzdF9zb2NrbWFwX3N0cnBfX29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW1hcCA9IGJwZl9tYXBfX2ZkKHN0cnAtJmd0O21hcHMuc29ja19tYXApOwomIzQzOwllcnIgPSB4YnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChzdHJwLSZndDtwcm9ncy5wcm9nX3NrYl9wYXJzZXJfb25lKSwKJiM0MzsJCQkgICAgICAgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJZXJyID0geGJwZl9wcm9nX2F0dGFjaChicGZfcHJvZ3JhbV9fZmQoc3RycC0mZ3Q7cHJvZ3MucHJvZ19za2JfdmVyZGljdF9wYXNzKSwKJiM0MzsJCQkgICAgICAgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNULCAwKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gb3V0X2Rlc3Ryb3k7CiYjNDM7CiYjNDM7CWVyciA9IGNyZWF0ZV9wYWlyKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAmYW1wO2MsICZhbXA7cCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtjcmVhdGVfcGFpciYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2Rlc3Ryb3k7CiYjNDM7CiYjNDM7CWVyciA9IHhzZXRzb2Nrb3B0KGMsIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgJmFtcDtzbmRidWYsIHNpemVvZihzbmRidWYpKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gb3V0X2Rlc3Ryb3k7CiYjNDM7CiYjNDM7CWVyciA9IHhzZXRzb2Nrb3B0KHAsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgJmFtcDtzbmRidWYsIHNpemVvZihzbmRidWYpKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gb3V0X2Rlc3Ryb3k7CiYjNDM7CiYjNDM7CWVyciA9IHhicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcCwgJmFtcDt6ZXJvLCAmYW1wO3AsIEJQRl9OT0VYSVNUKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gb3V0X2Rlc3Ryb3k7CiYjNDM7CiYjNDM7CXNlbnQgPSBzZW5kKGMsIHNuZCwgc2l6ZW9mKHNuZCksIE1TR19ET05UV0FJVCk7CiYjNDM7CWlmICghQVNTRVJUX0VRKHNlbnQsIHNpemVvZihzbmQpLCAmIzM0O3NlbmQmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXN0cm95OwomIzQzOwomIzQzOwlyZWN2ZCA9IHJlY3ZfdGltZW91dChwLCAmYW1wO3Jjdiwgc2l6ZW9mKHJjdiksIE1TR19ET05UV0FJVCwKJiM0MzsJCQkgICAgIElPX1RJTUVPVVRfU0VDKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEocmVjdmQsIHNpemVvZihyY3YpLCAmIzM0O3JlY3ZfdGltZW91dCYjMzQ7KSB8fAomIzQzOwkgICAgIUFTU0VSVF9FUShyY3YsIHNuZFswXSwgJiMzNDtkYXRhIG1pc21hdGNoJiMzNDspKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJZXJyID0gc29ja21hcF9zdHJwX2dldF9md2RfYWxsb2MocCwgJmFtcDtmd2RfYWxsb2MpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c29ja21hcF9zdHJwX2dldF9md2RfYWxsb2MmIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfR0UoZndkX2FsbG9jLCAwLCAmIzM0O3NrX2ZvcndhcmRfYWxsb2MmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXN0cm95OwomIzQzO291dF9kZXN0cm95OgomIzQzOwl0ZXN0X3NvY2ttYXBfc3RycF9fZGVzdHJveShzdHJwKTsKJiM0MzsJaWYgKGMgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGMpOwomIzQzOwlpZiAocCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UocCk7CiYjNDM7fQomIzQzOwogdm9pZCB0ZXN0X3NvY2ttYXBfc3RycCh2b2lkKQogewogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7c29ja21hcCBzdHJwIHRjcCBwYXNzJiMzNDspKQpAQCAtNDgyLDQgJiM0Mzs2NTEsNiBAQCB2b2lkIHRlc3Rfc29ja21hcF9zdHJwKHZvaWQpCiAJCXRlc3Rfc29ja21hcF9zdHJwX2Rpc3BhdGNoX3BrdChBRl9JTkVULCBTT0NLX1NUUkVBTSk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzb2NrbWFwIHN0cnAgcGFyc2VyIHJlamVjdCBwa3QgbW9kJiMzNDspKQogCQl0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KCk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7c29ja21hcCBzdHJwIHNlbGYgcGFzcyBmd2QgYWxsb2MmIzM0OykpCiYjNDM7CQl0ZXN0X3NvY2ttYXBfc3RycF9zZWxmX3Bhc3NfZndkX2FsbG9jKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jCmluZGV4IGZlODhmYTZkNDBiYzUuLjY4MmU1M2Q0MDc1MWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jCkBAIC01MCw2ICYjNDM7NTAsMTIgQEAgaW50IHByb2dfc2tiX3BhcnNlcl9wYXJ0aWFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKIAlyZXR1cm4gMTA7CiB9CiAKJiM0MztTRUMoJiMzNDtza19za2Ivc3RyZWFtX3BhcnNlciYjMzQ7KQomIzQzO2ludCBwcm9nX3NrYl9wYXJzZXJfb25lKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3NrX3NrYi9zdHJlYW1fcGFyc2VyJiMzNDspCiBpbnQgcHJvZ19za2JfcGFyc2VyX3Jlc2l6ZShzdHJ1Y3QgX19za19idWZmICpza2IpCiB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyODEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2g6IFNvY2ttYXAvU0tNU0cgQ29yZSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgdG91Y2hpbmcgcHJldHR5IGNyaXRpY2FsIHN0dWZmIHdpdGhpbiB0aGUgQlBGIHNvY2ttYXAgaW5mcmFzdHJ1Y3R1cmUuIFdlIGhhdmUgbW9kaWZpY2F0aW9ucyB0byBgbmV0L2NvcmUvc2ttc2cuY2Agd2hpY2gsIGlmIEkgcmVtZW1iZXIgY29ycmVjdGx5LCBpcyBjb21waWxlZCB3aXRoIGBDT05GSUdfTkVUX1NPQ0tfTVNHYC4gVGhhdCYjMzk7cyB0aGUgaGVhcnQgb2YgdGhlIFNLTVNHIGZ1bmN0aW9uYWxpdHksIGFuZCB0aGF0IGFsd2F5cyBnZXRzIG15IGF0dGVudGlvbi4gV2UmIzM5O3JlIGFsc28gc2VlaW5nIGEgY29ycmVzcG9uZGluZyB0ZXN0IGFkZGVkIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY2AsIHdoaWNoIGlzIGdvb2Q7IHJlZ3Jlc3Npb24gdGVzdHMgYXJlIGNydWNpYWwsIGJ1dCBsZXQmIzM5O3Mgc2VlIGlmIGl0JiMzOTtzIHRob3JvdWdoLgoKU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgcmV3b3JraW5nIGhvdyBgc2tfZm9yd2FyZF9hbGxvY2AgaXMgaGFuZGxlZCB3aGVuIGEgYHN0cnBhcnNlcmAgU0tfUEFTUyBza2IgZ2V0cyBkZWxpdmVyZWQgdG8gdGhlICpzYW1lKiBzb2NrZXQuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSBhIHZlcnkgdHJpY2t5IGFyZWEgZnJvbSBhIGNvbmN1cnJlbmN5IGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IHBlcnNwZWN0aXZlLgoKSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGUgZXhhY3QgZnVuY3Rpb25zIGludm9sdmVkLiBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIHRvOiBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAsIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2dgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgLCBgc2tfcHNvY2tfaGFuZGxlX3NrYmAsIGBza19wc29ja19iYWNrbG9nYCwgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YC4gVGhhdCYjMzk7cyBhIGNvbXByZWhlbnNpdmUgdG91Y2ggb24gdGhlIGluZ3Jlc3MgcGF0aC4gTG9va3MgbGlrZSB3ZSYjMzk7cmUgaW50cm9kdWNpbmcgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduYCwgd2hpY2ggcHJvYmFibHkgbWVhbnMgd2UmIzM5O3JlIHRyeWluZyB0byBvcHRpbWl6ZSB0aGUgZGlyZWN0IGluZ3Jlc3MgcGF0aCB0byB0aGUgc29ja2V0LCBvciBzb21ldGhpbmcgbGlrZSB0aGF0LgoKR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzIGFuZCB0aGUgY2VudHJhbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMsIHRoaXMgaXMgZGVmaW5pdGVseSBrZXJuZWwgbG9naWMgdGhhdCYjMzk7cyB3b3J0aCBhICp2ZXJ5KiBjbG9zZSBsb29rIGFuZCBsaWtlbHkgZnV6emluZy4gSSYjMzk7bGwgbmVlZCB0byBnbyBiYWNrIGFuZCB2ZXJpZnkgdGhlIGtlcm5lbCBjb25maWdzIOKAkyBjb25maXJtIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBhbmQgcG9zc2libHkgb3RoZXIgcmVsYXRlZCBvbmVzLCBhbmQgdGhlbiBpdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaG93IGBza19mb3J3YXJkX2FsbG9jYCBpcyBhY3R1YWxseSBiZWluZyB1c2VkIGluIHRoaXMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza21zZy5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9NDM9b2JqLSQoQ09ORklHX0ZBSUxPVkVSKSAmIzQzOz0gZmFpbG92ZXIub1xubmV0L2NvcmUvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ1LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTg0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCoqCgpBbHJpZ2h0LCB0aGUgY29kZSYjMzk7cyBwb2ludGluZyB0byBhIHJlcXVpcmVtZW50IGZvciBgQ09ORklHX05FVF9TT0NLX01TR2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb25maWd1cmFiaWxpdHkgb2YgdGhpcyBvcHRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgZmVhdHVyZXMgb3IgY29uZmlndXJhdGlvbnMgdHJpZ2dlciB0aGlzIHNldHRpbmcuIElzIGl0IHNvbWV0aGluZyB0aGF0JiMzOTtzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYmFzZWQgb24gYW5vdGhlciBjaG9pY2UgaGlnaGVyIHVwIGluIHRoZSBjb25maWd1cmF0aW9uIGhpZXJhcmNoeSwgb3IgaXMgaXQgZGlyZWN0bHkgdXNlci1zZWxlY3RhYmxlPyBJcyB0aGVyZSBzb21lIGNvbnRleHQgSSYjMzk7bSBtaXNzaW5nPyBJIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgc2VlICp3aGF0KiBleGFjdGx5IHNlbGVjdHMgdGhpcyBvciBnaXZlcyBtZSB0aGUgYWJpbGl0eSB0byBkZWNpZGUuIFRoaXMgd2lsbCBoZWxwIG1lIGRpYWdub3NlIHdoeSB0aGlzIGlzIGJlaW5nIHJlcXVlc3RlZCBhbmQgd2hhdCBpbXBhY3QgaXQgd2lsbCBoYXZlIG9uIHRoZSBicm9hZGVyIHN5c3RlbS4gSSYjMzk7bGwgc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzLCBzdGFydGluZyB3aXRoIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlbiB0cmFjaW5nIGJhY2sgdG8gc2VlIHdoYXQgcGF0aHMgbGVhZCB0byBpdHMgYWN0aXZhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGlzIGRlcGVuZGVuY3kgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU09DS19NU0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz00NzU9Y29uZmlnIE5FVF9TRUxGVEVTVFNcbi0tXG5uZXQvS2NvbmZpZy00NzgtXG5uZXQvS2NvbmZpZzo0Nzk6Y29uZmlnIE5FVF9TT0NLX01TR1xubmV0L0tjb25maWctNDgwLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MjkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBhIEJvb2xlYW4gRmxhZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBzdHVtYmxlZCB1cG9uIGEgaGlkZGVuIGJvb2xlYW4gdmFyaWFibGUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGRlZXBlciBhbmQgdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gJiMzNDtIaWRkZW4mIzM0OyB1c3VhbGx5IG1lYW5zIHRoZXJlJiMzOTtzIGEgcmVhc29uIGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLCBhbmQgdGhhdCByZWFzb24gaXMgbGlrZWx5IGdvaW5nIHRvIHByb3ZpZGUgdGhlIGltcG9ydGFudCBpbmZvcm1hdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byB0cmFjZSBhbGwgdGhlIHBvdGVudGlhbCBjb2RlIHBhdGhzIHRoYXQgY291bGQgcG9zc2libHkgc2V0IG9yIG1vZGlmeSB0aGlzIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBhIGNoYW5nZSBpbiBpdHMgc3RhdGU7IHdoYXQgY29kZSBzZWxlY3RzIChvciBzZXRzKSBpdD8gS25vd2luZyAqd2hlbiogdGhpcyBmbGFnIGZsaXBzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBzeXN0ZW0mIzM5O3Mgb3ZlcmFsbCBsb2dpYy4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gaW5mZXIgdGhlIGxhcmdlciBkZXNpZ24gY29udGV4dCBhbmQgc2VlIHdoYXQgdGhpcyBib29sIGlzIG1lYW50IHRvIHNpZ25hbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTkVUX1NPQ0tfTVNHJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctMzMtXHRzZWxlY3QgQklOQVJZX1BSSU5URlxua2VybmVsL2JwZi9LY29uZmlnOjM0Olx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbmtlcm5lbC9icGYvS2NvbmZpZy0zNS1cdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuLS1cbm5ldC9LY29uZmlnPTM2MT1jb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcbi0tXG5uZXQvS2NvbmZpZy0zNjYtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L0tjb25maWc6MzY3Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L0tjb25maWctMzY4LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODUtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L2lwdjQvS2NvbmZpZzozODY6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2NC9LY29uZmlnLTM4Ny1cdHNlbGVjdCBYRlJNX0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTkzLVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9pcHY2L0tjb25maWc6OTQ6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2Ni9LY29uZmlnLTk1LVx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbi0tXG5uZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXG4tLVxubmV0L3Rscy9LY29uZmlnLTEwLVx0c2VsZWN0IENSWVBUT19HQ01cbm5ldC90bHMvS2NvbmZpZzoxMTpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC90bHMvS2NvbmZpZy0xMi1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMjQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoaXMgQlBGIFNlbGVjdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRoZSBzeXN0ZW0gaXMgdXNpbmcgYEJQRl9TWVNDQUxMYCBhbG9uZyB3aXRoIHRoZSBgTkVUYCBzZXR0aW5nIHRvIG1ha2UgYSBzZWxlY3Rpb24uIEZ1cnRoZXJtb3JlLCB0aGUgYEJQRl9TVFJFQU1fUEFSU0VSYCBhbHNvIGNvbWVzIGludG8gcGxheSBoZXJlLiBUaGUgcGF0Y2ggbWVudGlvbnMgYHN0cnBhcnNlcmAgYW5kIGBza2JfYnBmX3N0cnBhcnNlcmAsIHdoaWNoIGlzIGEgY2x1ZS4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYEJQRl9TVFJFQU1fUEFSU0VSYCBub3cgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBwcm9jZXNzLiBUaW1lIHRvIGRpZyBpbiBhIGJpdCBmdXJ0aGVyIG9uIHRoYXQgcGFydGljdWxhciBjb2RlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0zNTQ9Y29uZmlnIEJRTFxuLS1cbm5ldC9LY29uZmlnLTM2MC1cbm5ldC9LY29uZmlnOjM2MTpjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcbm5ldC9LY29uZmlnLTM2Mi1cdGJvb2wgXCYjMzQ7ZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBzdWdnZXN0aW5nIHRoZSBpbmNsdXNpb24gb2YgYEJQRl9TVFJFQU1fUEFSU0VSYCBhcyBhIHVzZXItc2VsZWN0YWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTWFrZXMgc2Vuc2U7IGZsZXhpYmlsaXR5IGlzIGtleSBpbiBCUEYuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGFjY291bnRlZCBmb3IuIEkmIzM5O2xsIGFsc28gYWRkIGluIGBCUEZfU1lTQ0FMTGAg4oCTIHRoYXQmIzM5O3MgYSBnaXZlbiBmb3IgQlBGIGZ1bmN0aW9uYWxpdHkuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byB0aGUgY29yZSBvZiB0aGlzLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHN5bWJvbHMgdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcuIFJpZ2h0LCBoZXJlIHRoZXkgYXJlOiBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAsIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2dgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgLCBgc2tfcHNvY2tfaGFuZGxlX3NrYmAsIGBza19wc29ja19iYWNrbG9nYCwgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YC4gVGhleSYjMzk7cmUgYWxsIHN0YXRpYywgd2hpY2ggZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKTXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBpbGx1bWluYXRlIGV4YWN0bHkgaG93IHRoZXNlIGNoYW5nZXMgYXJlIGJlaW5nIGludGVncmF0ZWQgYW5kIHdoYXQgaW1wYWN0IHRoZXkmIzM5O2xsIGhhdmUgb24gdGhlIGV4aXN0aW5nIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfYmFja2xvZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYz03MzI9c3RhdGljIHZvaWQgc2tfcHNvY2tfc2tiX3N0YXRlKHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4tLVxubmV0L2NvcmUvc2ttc2cuYy03NDMtXG5uZXQvY29yZS9za21zZy5jOjc0NDpzdGF0aWMgdm9pZCBza19wc29ja19iYWNrbG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9jb3JlL3NrbXNnLmMtNzQ1LXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTgzMT1zdHJ1Y3Qgc2tfcHNvY2sgKnNrX3Bzb2NrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbm9kZSlcbi0tXG5uZXQvY29yZS9za21zZy5jLTg2NS1cbm5ldC9jb3JlL3NrbXNnLmM6ODY2Olx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cHNvY2stXHUwMDNld29yaywgc2tfcHNvY2tfYmFja2xvZyk7XG5uZXQvY29yZS9za21zZy5jLTg2Ny1cdG11dGV4X2luaXQoXHUwMDI2cHNvY2stXHUwMDNld29ya19tdXRleCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDcyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqUG9uZGVyaW5nIFNvY2tldCBGaWx0ZXJpbmcgYW5kIFdvcmtxdWV1ZXMqKgoKUmlnaHQsIHNvIGBza19wc29ja19iYWNrbG9nYC4uLiB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSB3b3JrcXVldWUgY2FsbGJhY2ssIGlzbiYjMzk7dCBpdD8gT2theSwgZ290IGl0LiBJdCYjMzk7cyBoYW5kbGluZyBiYWNrbG9nZ2VkIHBhY2tldCBzb2NrZXRzLiBOb3csIHdoYXQmIzM5O3MgYnVnZ2luZyBtZSBpcy4uLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgZnVuY3Rpb25zIGluIHRoYXQgYXJlYS4gV2hlcmUgZG9lcyB0aGlzIHdvcmtxdWV1ZSBmaXQgd2l0aCBvdGhlciBmaWx0ZXJpbmcgbWVjaGFuaXNtcz8gTGV0IG1lIHNlZS4uLiBJIHdvbmRlciBob3cgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGZpZ3VyZXMgaW50byBhbGwgdGhpcy4gSXMgaXQgY2FsbGVkIGJlZm9yZSwgYWZ0ZXIsIG9yIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnRseSBvZiB0aGUgd29ya3F1ZXVlIGNhbGxiYWNrPyBEb2VzIGl0IGluZmx1ZW5jZSB3aGF0IGdldHMgZW5xdWV1ZWQ/IElzIGl0IHRoZSB1bHRpbWF0ZSBkZWNpc2lvbi1tYWtlciwgb3IganVzdCBhIHBhcnQgb2YgdGhlIHByb2Nlc3M/IEkgc2hvdWxkIHJlYWxseSBtYWtlIHN1cmUgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19wc29ja192ZXJkaWN0X2FwcGx5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTEwMzk9c3RhdGljIGludCBza19wc29ja19za2JfcmVkaXJlY3Qoc3RydWN0IHNrX3Bzb2NrICpmcm9tLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTA3Ni1cbm5ldC9jb3JlL3NrbXNnLmM6MTA3NzpzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3NrbXNnLmMtMTA3OC1cdFx0XHRcdCAgaW50IHZlcmRpY3QpXG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMTYwPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfcmVhZChzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTE4My1cdH1cbm5ldC9jb3JlL3NrbXNnLmM6MTE4NDpcdHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkocHNvY2ssIHNrYiwgcmV0KTtcbm5ldC9jb3JlL3NrbXNnLmMtMTE4NS1vdXQ6XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMjgzPXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTEzMDYtXHR9XG5uZXQvY29yZS9za21zZy5jOjEzMDc6XHRyZXQgPSBza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XG5uZXQvY29yZS9za21zZy5jLTEzMDgtXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY5MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkV4YW1pbmluZyB0aGUgUFNPQ0sgVmVyZGljdCBBcHBsaWNhdGlvbiBQYXRoKioKClJpZ2h0LCBzbyBgc2tfcHNvY2tfc3RycF9yZWFkYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAgYm90aCBzZWVtIHRvIGhpbmdlIG9uIGBza19wc29ja192ZXJkaWN0X2FwcGx5YC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIHBvdGVudGlhbGx5IGNyaXRpY2FsLCBiZWNhdXNlIHRoYXQgbWVhbnMgYWxsIHRyYWZmaWMgdGhhdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkIGJ5IHRoZSBwcm9jZXNzIGxpa2VseSBwYXNzZXMgdGhyb3VnaCB0aGF0IGZ1bmN0aW9uIGF0IHNvbWUgcG9pbnQuIEl04oCZcyB0aGUgY2VudHJhbCBwb2ludCB3aGVyZSB0aGUgZGVjaXNpb25zIGFib3V0IHBhY2tldCBoYW5kbGluZyBhcmUgbWFkZSBpbiB0aGlzIFBTT0NLIChwYWNrZXQgc29ja2V0KSBjb250ZXh0LCBvciBwZXJoYXBzIHdoZXJlIHRoZXkgYXJlICphcHBsaWVkKiBhdCBsZWFzdC4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGJldHRlci4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBoaWVyYXJjaHkg4oCTIHdobyAqZWxzZSogaXMgdXNpbmcgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCBhbmQgaWYgaXQmIzM5O3MgZXhwb3J0ZWQsIHRoZW4gd2hlcmUgYXJlIHRob3NlIGNhbGxzIG9yaWdpbmF0aW5nIGZyb20/IElzIGl0IHNvbGVseSB3aXRoaW4gdGhlIGtlcm5lbCBzcGFjZSwgb3IgaXMgdGhlcmUgYSB1c2VyIHNwYWNlIGludGVyYWN0aW9uIGludm9sdmVkPyBUaGF0IGxldmVsIG9mIGRldGFpbCBtYXR0ZXJzICphIGxvdCogd2hlbiBkZWFsaW5nIHdpdGggbmV0d29ya2luZyBhbmQgc2VjdXJpdHksIGFuZCBpdCBpbmZvcm1zIHdoZXRoZXIgdGhpcyB3b3VsZCBiZSBzb21ldGhpbmcgdGhhdCBuZWVkcyBhdHRlbnRpb24uIEFyZSB0aGVyZSBhbnkgb3RoZXIgcGF0aHMgdG8gaXQsIGFuZCBhcmUgdGhlcmUgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIGNvbnNpZGVyPyBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyBwb2xpY3kgZGVjaXNpb25zIGFyZSBtYWRlIGZvciB0aGVzZSBwYWNrZXQgc29ja2V0cyBhbmQgc2VlIHdoYXQgYXZlbnVlcyBleGlzdCB0byBwb3RlbnRpYWxseSBpbmZsdWVuY2Ugb3IgbW9kaWZ5IHRoYXQgcHJvY2VzcywgaWYgdGhlIG5lZWQgYXJpc2VzLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfc3RycF9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTExNDI9c3RhdGljIHZvaWQgc2tfcHNvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTE1OS0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXG5uZXQvY29yZS9za21zZy5jOjExNjA6c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9za21zZy5jLTExNjEte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTE4OC1cbm5ldC9jb3JlL3NrbXNnLmM6MTE4OTpzdGF0aWMgaW50IHNrX3Bzb2NrX3N0cnBfcmVhZF9kb25lKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIGludCBlcnIpXG5uZXQvY29yZS9za21zZy5jLTExOTAte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTIyOD1pbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyMzItXHRzdGF0aWMgY29uc3Qgc3RydWN0IHN0cnBfY2FsbGJhY2tzIGNiID0ge1xubmV0L2NvcmUvc2ttc2cuYzoxMjMzOlx0XHQucmN2X21zZ1x0PSBza19wc29ja19zdHJwX3JlYWQsXG5uZXQvY29yZS9za21zZy5jOjEyMzQ6XHRcdC5yZWFkX3NvY2tfZG9uZVx0PSBza19wc29ja19zdHJwX3JlYWRfZG9uZSxcbm5ldC9jb3JlL3NrbXNnLmMtMTIzNS1cdFx0LnBhcnNlX21zZ1x0PSBza19wc29ja19zdHJwX3BhcnNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ1MQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNvbnNpZGVyaW5nIGBza19wc29ja19pbml0X3N0cnBgJiMzOTtzIFNjb3BlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgc2tfcHNvY2tfaW5pdF9zdHJwYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzOiBpcyB0aGlzIGZ1bmN0aW9uIGV4cG9zZWQsIG1lYW5pbmcgaXMgaXQgZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYz8gSXMgaXQgbWVhbnQgdG8gYmUgdXNlZCBleHRlcm5hbGx5LCBvciBpcyBpdCBpbnRlcm5hbCB0byBhIHNwZWNpZmljIG1vZHVsZSBvciBjb21wb25lbnQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGl0cyB2aXNpYmlsaXR5LiBLbm93aW5nIHRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGluZm9ybXMgaG93IEkgY2FuIGludGVyYWN0IHdpdGggdGhlIGZ1bmN0aW9uLCBpZiBhdCBhbGwsIGluIG15IG93biB3b3JrLiBBIG5vbi1zdGF0aWMgZnVuY3Rpb24gaW1wbGllcyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLCBhbmQgSSBjYW4gY2FsbCBpdCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEEgc3RhdGljIG9uZSwgaG93ZXZlciwgaXMgbGlrZWx5IG9ubHkgbWVhbnQgZm9yIHVzZSB3aXRoaW4gaXRzIGRlZmluaW5nIHRyYW5zbGF0aW9uIHVuaXQuIFRoYXQgbWFrZXMgYSBodWdlIGRpZmZlcmVuY2UgaW4gaG93IEkgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfaW5pdF9zdHJwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2ttc2cuaD00Mzc9dm9pZCBza19wc29ja19zdG9wKHN0cnVjdCBza19wc29jayAqcHNvY2spO1xuLS1cbmluY2x1ZGUvbGludXgvc2ttc2cuaC00MzktI2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxuaW5jbHVkZS9saW51eC9za21zZy5oOjQ0MDppbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayk7XG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDQxLXZvaWQgc2tfcHNvY2tfc3RhcnRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spO1xuaW5jbHVkZS9saW51eC9za21zZy5oPTQ0Mj12b2lkIHNrX3Bzb2NrX3N0b3Bfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spO1xuaW5jbHVkZS9saW51eC9za21zZy5oLTQ0My0jZWxzZVxuaW5jbHVkZS9saW51eC9za21zZy5oOjQ0NDpzdGF0aWMgaW5saW5lIGludCBza19wc29ja19pbml0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuaW5jbHVkZS9saW51eC9za21zZy5oLTQ0NS17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMjEyPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMjI3LVxubmV0L2NvcmUvc2ttc2cuYzoxMjI4OmludCBza19wc29ja19pbml0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy0xMjI5LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTIxNz1zdGF0aWMgaW50IHNvY2tfbWFwX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzA2LVx0XHRpZiAoc2tfaXNfdGNwKHNrKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzA3Olx0XHRcdHJldCA9IHNrX3Bzb2NrX2luaXRfc3RycChzaywgcHNvY2spO1xubmV0L2NvcmUvc29ja19tYXAuYy0zMDgtXHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNhbGxiYWNrIEludmVzdGlnYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gTXkgbWVudGFsIG1vZGVsIGhlcmUgaXMgdGhhdCBgc2tfcHNvY2tfc3RycF9yZWFkYCBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBiZSB1c2VkIHdpdGggdGhlIHN0cnBhcnNlci4gTWFrZXMgc2Vuc2UuIEl0JiMzOTtzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgcmVhZGluZyBwYXJ0IG9mIHBhcnNpbmcgZGF0YSBpbnRvIGEgc3RyaW5nIGZvcm1hdCwgdXNpbmcgdGhpcyBzdHJwYXJzZXIuIEJ1dCB3aGF0IGFib3V0IGBza19wc29ja192ZXJkaWN0X3JlY3ZgPyBUaGF0IG9uZSYjMzk7cyBuYWdnaW5nIGF0IG1lIGEgYml0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtLiBJcyBpdCBhbHNvIHJlbGF0ZWQgdG8gZGF0YSByZWNlcHRpb24sIGJ1dCBwZXJoYXBzIGF0IGEgaGlnaGVyIGxldmVsLCBhZnRlciB0aGUgaW5pdGlhbCBzdHJpbmcgcGFyc2luZz8gSXMgaXQgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzZWN1cml0eSB2ZXJkaWN0cyBiYXNlZCBvbiB0aGUgcmVjZWl2ZWQgZGF0YSwgb3IgaXMgaXQgcmVsYXRlZCB0byByZWNlaXZpbmcgdGhlIHJhdyB2ZXJkaWN0IGluZm9ybWF0aW9uPyBUaW1lIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBsb29rIGludG8gdGhlIGJyb2FkZXIgY29udGV4dCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSB0d28gZnVuY3Rpb25zIGludGVyYWN0IGFuZCBmaXQgdG9nZXRoZXIgaW4gdGhlIGFyY2hpdGVjdHVyZS4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAgdGFrZXMgYWN0aW9uIG9uIHRoZSBpbmZvcm1hdGlvbiByZWNlaXZlZCBieSBgc2tfcHNvY2tfc3RycF9yZWFkYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3csIGFuZCBob3cgaXQgaW5mb3JtcyB0aGUgb3ZlcmFsbCBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19wc29ja192ZXJkaWN0X3JlY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmM9MTI3OD1zdGF0aWMgdm9pZCBza19wc29ja19kb25lX3N0cnAoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyODItXG5uZXQvY29yZS9za21zZy5jOjEyODM6c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvc2ttc2cuYy0xMjg0LXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTEzMTU9c3RhdGljIHZvaWQgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTEzMzEtXG5uZXQvY29yZS9za21zZy5jOjEzMzI6XHRjb3BpZWQgPSBvcHMtXHUwMDNlcmVhZF9za2Ioc2ssIHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdik7XG5uZXQvY29yZS9za21zZy5jLTEzMzMtXHRpZiAoY29waWVkIFx1MDAzZT0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcxNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgKioKCk9rYXksIHNvIGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgLiBJdCYjMzk7cyBhIGNhbGxiYWNrLCBhbmQgYSBwcmV0dHkgc3BlY2lmaWMgb25lIGF0IHRoYXQuIE15IGZpcnN0IHRob3VnaHQgaXM6IHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqPyBJIG5lZWQgdG8gdHJhY2UgaXRzIGNvbm5lY3Rpb25zLiBJIHdhbnQgdG8gc2VlIHdoaWNoIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIHRyaWdnZXJpbmcgaXQgYW5kIHdoYXQga2luZCBvZiBkYXRhIG9yIGFjdGlvbnMgYXJlIGJlaW5nIHByb2Nlc3NlZCB3aGVuIGl0JiMzOTtzIGNhbGxlZC4gR290dGEgdW5kZXJzdGFuZCB0aGUgY29udGV4dCB0byBncmFzcCBpdHMgdHJ1ZSBwdXJwb3NlIGFuZCBmdW5jdGlvbi4gVGltZSB0byBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmM9MTI4Mz1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMzE0LVxubmV0L2NvcmUvc2ttc2cuYzoxMzE1OnN0YXRpYyB2b2lkIHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9za21zZy5jLTEzMTYte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTM0Mj12b2lkIHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTM0Ny1cdHBzb2NrLVx1MDAzZXNhdmVkX2RhdGFfcmVhZHkgPSBzay1cdTAwM2Vza19kYXRhX3JlYWR5O1xubmV0L2NvcmUvc2ttc2cuYzoxMzQ4Olx0V1JJVEVfT05DRShzay1cdTAwM2Vza19kYXRhX3JlYWR5LCBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkpO1xubmV0L2NvcmUvc2ttc2cuYy0xMzQ5LVx0V1JJVEVfT05DRShzay1cdTAwM2Vza193cml0ZV9zcGFjZSwgc2tfcHNvY2tfd3JpdGVfc3BhY2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE4NQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgIEV4cG9ydCoqCgpPa2F5LCBzbyBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAgaXMgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgdGhlIGtleS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCYjMzk7cyB0b3VjaGluZyBpdD8gV2hhdCBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSByZWx5aW5nIG9uIHRoaXMgZnVuY3Rpb25hbGl0eT8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgcGljdHVyZS4gTXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjYWxsIHNpdGVzIHRvIGZ1bGx5IGdyb2sgaXRzIHB1cnBvc2UgYW5kIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEkmIzM5O20gbG9va2luZyBmb3Igd2hlcmUgdGhpcyBmdW5jdGlvbiBob29rcyBpbnRvLCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGl0cyBleGVjdXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za21zZy5oPTQ1Mz1zdGF0aWMgaW5saW5lIHZvaWQgc2tfcHNvY2tfc3RvcF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbi0tXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDU3LVxuaW5jbHVkZS9saW51eC9za21zZy5oOjQ1ODp2b2lkIHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcbmluY2x1ZGUvbGludXgvc2ttc2cuaC00NTktdm9pZCBza19wc29ja19zdG9wX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcbi0tXG5uZXQvY29yZS9za21zZy5jPTEzMTU9c3RhdGljIHZvaWQgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTEzNDEtXG5uZXQvY29yZS9za21zZy5jOjEzNDI6dm9pZCBza19wc29ja19zdGFydF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbm5ldC9jb3JlL3NrbXNnLmMtMTM0My17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0yMTc9c3RhdGljIGludCBzb2NrX21hcF9saW5rKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTMxNi1cdH0gZWxzZSBpZiAoIXN0cmVhbV9wYXJzZXIgXHUwMDI2XHUwMDI2IHN0cmVhbV92ZXJkaWN0IFx1MDAyNlx1MDAyNiAhcHNvY2stXHUwMDNlc2F2ZWRfZGF0YV9yZWFkeSkge1xubmV0L2NvcmUvc29ja19tYXAuYzozMTc6XHRcdHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3Qoc2sscHNvY2spO1xubmV0L2NvcmUvc29ja19tYXAuYy0zMTgtXHR9IGVsc2UgaWYgKCFzdHJlYW1fdmVyZGljdCBcdTAwMjZcdTAwMjYgc2tiX3ZlcmRpY3QgXHUwMDI2XHUwMDI2ICFwc29jay1cdTAwM2VzYXZlZF9kYXRhX3JlYWR5KSB7XG5uZXQvY29yZS9zb2NrX21hcC5jOjMxOTpcdFx0c2tfcHNvY2tfc3RhcnRfdmVyZGljdChzaywgcHNvY2spO1xubmV0L2NvcmUvc29ja19tYXAuYy0zMjAtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODMxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFNvY2tldCBNYXAgTGlua2luZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIEJQRiBzb2NrZXQgbWFwIGxpbmtpbmcuIFRoZSBlbnRyeSBwb2ludCwgYXMgSSBzZWUgaXQsIGlzIGBzb2NrX21hcF9saW5rYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gdGhlIEJQRiBzeXNjYWxsLiBUaGUgbWFpbiBmdW5jdGlvbnMgbW9kaWZpZWQgaW4gdGhpcyBwYXRjaCBhcmUgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nYCwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCwgYHNrX3Bzb2NrX2hhbmRsZV9za2JgLCBgc2tfcHNvY2tfYmFja2xvZ2AsIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIExldCYjMzk7cyBzZWUsIHdlIGhhdmUgYHNrX3Bzb2NrX2JhY2tsb2dgIChhIHdvcmtxdWV1ZSBjYWxsYmFjayksIGBza19wc29ja19zdHJwX3JlYWRgIChhIHN0cmluZyBwYXJzZXIgY2FsbGJhY2spLCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCAoYSBgcmVhZF9za2JgIGNhbGxiYWNrKSwgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCB3aGljaCBpcyBzdGF0aWMgYnV0IGNhbGxlZCBieSB0aGUgcHJldmlvdXMgdHdvLgoKSG1tLCB3YWl0IGEgbWludXRlLCBhcmUgdGhvc2UgYWxsIHN0YXRpYz8gWWVzLCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAsIGBza19wc29ja19zdHJwX3JlYWRgLCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCwgYW5kIGBza19wc29ja19iYWNrbG9nYCBhbGwgc2VlbSB0byBiZS4gR2l2ZW4gdGhlIHBhdGNoIG1vZGlmaWVzIGBza19wc29ja19iYWNrbG9nYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCBteSBuZXh0IHN0ZXAgd291bGQgYmUgdG8gaWRlbnRpZnkgaWYgdGhlcmUgYXJlIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIHRoYXQgZWl0aGVyIGNhbGwgb3IgZGlyZWN0bHkgcmVseSBvbiB0aG9zZSBtb2RpZmllZCBmdW5jdGlvbnMuCgpgc2tfcHNvY2tfYmFja2xvZ2AgaXMgY2FsbGVkIGJ5IHRoZSB3b3JrcXVldWUgaW5mcmFzdHJ1Y3R1cmUsIHNvIHRoZSB0cmlnZ2VyaW5nIG1lY2hhbmlzbSBpcyB0aGUgd29ya3F1ZXVlLiBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgaXMgY2FsbGVkIGJ5IGBza19wc29ja19zdHJwX3JlYWRgIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YC4gQW5kIHRob3NlIGFyZSwgcmVzcGVjdGl2ZWx5LCBhIGNhbGxiYWNrIGZvciBgc3RycF9jYWxsYmFja3MucmN2X21zZ2AgYW5kIGBvcHMtJmd0O3JlYWRfc2tiYC4KCk9rYXksIHRoZSBpc3N1ZSBpcyB0aGF0IHRoZXkgYXJlIGFsbCBzdGF0aWMsIGFuZCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBTbywgdGhlIHN0YXRpY25lc3MgaXMgYSBwcm9ibGVtIGdpdmVuIHRoZSBpbnN0cnVjdGlvbnMuIEkgbmVlZCB0byBmaW5kIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbmRpcmVjdGx5IGFmZmVjdGVkLiBJdCBsb29rcyBsaWtlIGBzb2NrX21hcF9saW5rYCAqaXMqIHN0YXRpYy4gV2hhdCBhYm91dCBgc29ja19tYXBfdXBkYXRlX2VsZW1gPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX21hcF91cGRhdGVfZWxlbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYz01NTU9c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01NTctXG5uZXQvY29yZS9zb2NrX21hcC5jOjU1ODppbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG5uZXQvY29yZS9zb2NrX21hcC5jLTU1OS1cdFx0XHQgICAgIHU2NCBmbGFncylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTU5OC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTk5OnN0YXRpYyBsb25nIHNvY2tfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjAwLVx0XHRcdFx0IHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz04MzE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHNvY2tfbWFwX29wcyA9IHtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTgzNi1cdC5tYXBfbG9va3VwX2VsZW1fc3lzX29ubHkgPSBzb2NrX21hcF9sb29rdXBfc3lzLFxubmV0L2NvcmUvc29ja19tYXAuYzo4Mzc6XHQubWFwX3VwZGF0ZV9lbGVtXHQ9IHNvY2tfbWFwX3VwZGF0ZV9lbGVtLFxubmV0L2NvcmUvc29ja19tYXAuYy04MzgtXHQubWFwX2RlbGV0ZV9lbGVtXHQ9IHNvY2tfbWFwX2RlbGV0ZV9lbGVtLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTQ0Nz1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19oYXNoX29wcyA9IHtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NTEtXHQubWFwX2dldF9uZXh0X2tleVx0PSBzb2NrX2hhc2hfZ2V0X25leHRfa2V5LFxubmV0L2NvcmUvc29ja19tYXAuYzoxNDUyOlx0Lm1hcF91cGRhdGVfZWxlbVx0PSBzb2NrX21hcF91cGRhdGVfZWxlbSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ1My1cdC5tYXBfZGVsZXRlX2VsZW1cdD0gc29ja19oYXNoX2RlbGV0ZV9lbGVtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM4NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERhdGEgRmxvdyBvZiBQYWNrZXQgU29ja2V0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgZGF0YSBtb3ZlcyB0aHJvdWdoIHRoZXNlIHBhY2tldCBzb2NrZXRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBhdCBmdW5jdGlvbnMgbGlrZSBgc2tfcHNvY2tfaW5pdF9zdHJwYCBhbmQgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgLCBiZWNhdXNlIHRoZXkmIzM5O3JlIG5vdCBkZWNsYXJlZCBhcyBzdGF0aWMuIEJ1dCwgd2FpdCwgdGhvc2UgYXJlIGp1c3QgYWJvdXQgKmluaXRpYWxpemluZyogdGhpbmdzIGFuZCBzZXR0aW5nIHVwIGNhbGxiYWNrcy4gVGhlIGFjdHVhbCB2ZXJkaWN0LCB0aGUgYWN0dWFsIHByb2Nlc3Npbmcgb2YgZGF0YSwgdGhhdCBkb2VzbiYjMzk7dCBoYXBwZW4gdW50aWwgZGF0YSBpcyByZWNlaXZlZCwgcmlnaHQ/CgpEYXRhIHJlY2VwdGlvbi4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IHRyaWdnZXJzIGBza19kYXRhX3JlYWR5YCwgd2hpY2ggdGhlbiBwb2ludHMgdG8gZWl0aGVyIGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgIG9yIGBzdHJwX2RhdGFfcmVhZHlgLiBOb3csIEkgcmVjYWxsIHRoYXQgYHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeWAgaXMgc3RhdGljLCB3aGljaCBsaW1pdHMgaXRzIHNjb3BlLiAgT2theS4gV2hhdCBhYm91dCBgc3RycF9kYXRhX3JlYWR5YD8gTGV0IG1lIHNlZeKApiB5ZXAsIHRoYXQmIzM5O3MgaW4gYG5ldC9zdHJwYXJzZXIvc3RycGFyc2VyLmNgLCBhcyBJIGV4cGVjdGVkLgoKQWxyaWdodCwgc28gdGhlIGNvcmUgZGF0YSBmbG93IGlzIGxpa2VseSBpbml0aWF0ZWQgYnkgc29tZSBraW5kIG9mIGV4dGVybmFsIGV2ZW50IGNhdXNpbmcgZGF0YSB0byBiZSBwbGFjZWQgaW4gYHNrX2RhdGFfcmVhZHlgLiBUaW1lIHRvIHNoaWZ0IGZvY3VzLiBMZXQmIzM5O3Mgc2hpZnQgb3VyIGdhemUgdG8gYG5ldC9jb3JlL3NrbXNnLmNgIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQgd2l0aCBoYW5kbGluZyB0aGUgZGF0YSBwYXRoIG9yIHJlbGF0ZWQgcHJvY2Vzc2luZy4gVGhhdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpdLipza19wc29jay4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTUyMj1zdGF0aWMgc3RydWN0IHNrX21zZyAqYWxsb2Nfc2tfbXNnKGdmcF90IGdmcClcbi0tXG5uZXQvY29yZS9za21zZy5jLTUzMi1cbm5ldC9jb3JlL3NrbXNnLmM6NTMzOnN0YXRpYyBzdHJ1Y3Qgc2tfbXNnICpza19wc29ja19jcmVhdGVfaW5ncmVzc19tc2coc3RydWN0IHNvY2sgKnNrLFxubmV0L2NvcmUvc2ttc2cuYy01MzQtXHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNTQ0LVxubmV0L2NvcmUvc2ttc2cuYzo1NDU6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9za21zZy5jLTU0Ni1cdFx0XHRcdFx0dTMyIG9mZiwgdTMyIGxlbixcbi0tXG5uZXQvY29yZS9za21zZy5jLTU4Ny1cbm5ldC9jb3JlL3NrbXNnLmM6NTg4OnN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2ttc2cuYy01ODktXHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsXG5uZXQvY29yZS9za21zZy5jLTU5MC1cdFx0XHRcdCAgICAgYm9vbCBzZXR0bGVfZndkX2FsbG9jKTtcbm5ldC9jb3JlL3NrbXNnLmM6NTkxOnN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHN0cnVjdCBza19wc29jayAqcHNvY2ssXG5uZXQvY29yZS9za21zZy5jLTU5Mi1cdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNTk1LVxubmV0L2NvcmUvc2ttc2cuYzo1OTY6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2ttc2cuYy01OTctXHRcdFx0XHR1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHNldHRsZV9md2RfYWxsb2MpXG4tLVxubmV0L2NvcmUvc2ttc2cuYy02MjMtXG5uZXQvY29yZS9za21zZy5jOjYyNDpzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduKHN0cnVjdCBzb2NrICpzayxcbm5ldC9jb3JlL3NrbXNnLmMtNjI1LVx0XHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za21zZy5jLTY0OS0gKi9cbm5ldC9jb3JlL3NrbXNnLmM6NjUwOnN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2ttc2cuYy02NTEtXHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsXG4tLVxubmV0L2NvcmUvc2ttc2cuYy02ODAtXG5uZXQvY29yZS9za21zZy5jOjY4MTpzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYmFja2xvZyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxubmV0L2NvcmUvc2ttc2cuYy02ODItXHRcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za21zZy5jLTcxNC1cbm5ldC9jb3JlL3NrbXNnLmM6NzE1OnN0YXRpYyBpbnQgc2tfcHNvY2tfaGFuZGxlX3NrYihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2ttc2cuYy03MTYtXHRcdFx0ICAgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgaW5ncmVzcyxcbi0tXG5uZXQvY29yZS9za21zZy5jLTczMS1cbm5ldC9jb3JlL3NrbXNnLmM6NzMyOnN0YXRpYyB2b2lkIHNrX3Bzb2NrX3NrYl9zdGF0ZShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxubmV0L2NvcmUvc2ttc2cuYy03MzMtXHRcdFx0ICAgICAgIHN0cnVjdCBza19wc29ja193b3JrX3N0YXRlICpzdGF0ZSxcbi0tXG5uZXQvY29yZS9za21zZy5jLTc0My1cbm5ldC9jb3JlL3NrbXNnLmM6NzQ0OnN0YXRpYyB2b2lkIHNrX3Bzb2NrX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L2NvcmUvc2ttc2cuYy03NDUte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtODMwLVxubmV0L2NvcmUvc2ttc2cuYzo4MzE6c3RydWN0IHNrX3Bzb2NrICpza19wc29ja19pbml0KHN0cnVjdCBzb2NrICpzaywgaW50IG5vZGUpXG5uZXQvY29yZS9za21zZy5jLTgzMi17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz04ODQ9RVhQT1JUX1NZTUJPTF9HUEwoc2tfcHNvY2tfaW5pdCk7XG5uZXQvY29yZS9za21zZy5jLTg4NS1cbm5ldC9jb3JlL3NrbXNnLmM6ODg2OnN0cnVjdCBza19wc29ja19saW5rICpza19wc29ja19saW5rX3BvcChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy04ODcte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtODk4LVxubmV0L2NvcmUvc2ttc2cuYzo4OTk6c3RhdGljIHZvaWQgX19za19wc29ja19wdXJnZV9pbmdyZXNzX21zZyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy05MDAte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtOTEzLVxubmV0L2NvcmUvc2ttc2cuYzo5MTQ6c3RhdGljIHZvaWQgX19za19wc29ja196YXBfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy05MTUte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtOTI0LVxubmV0L2NvcmUvc2ttc2cuYzo5MjU6c3RhdGljIHZvaWQgc2tfcHNvY2tfbGlua19kZXN0cm95KHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTkyNi17XG4tLVxubmV0L2NvcmUvc2ttc2cuYy05MzQtXG5uZXQvY29yZS9za21zZy5jOjkzNTp2b2lkIHNrX3Bzb2NrX3N0b3Aoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbm5ldC9jb3JlL3NrbXNnLmMtOTM2LXtcbi0tXG5uZXQvY29yZS9za21zZy5jLTk0Mi1cbm5ldC9jb3JlL3NrbXNnLmM6OTQzOnN0YXRpYyB2b2lkIHNrX3Bzb2NrX2RvbmVfc3RycChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcbm5ldC9jb3JlL3NrbXNnLmMtOTQ0LVxubmV0L2NvcmUvc2ttc2cuYzo5NDU6c3RhdGljIHZvaWQgc2tfcHNvY2tfZGVzdHJveShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvY29yZS9za21zZy5jLTk0Ni17XG4tLVxubmV0L2NvcmUvc2ttc2cuYy05NjktXG5uZXQvY29yZS9za21zZy5jOjk3MDp2b2lkIHNrX3Bzb2NrX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy05NzEte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9OTg2PUVYUE9SVF9TWU1CT0xfR1BMKHNrX3Bzb2NrX2Ryb3ApO1xubmV0L2NvcmUvc2ttc2cuYy05ODctXG5uZXQvY29yZS9za21zZy5jOjk4ODpzdGF0aWMgaW50IHNrX3Bzb2NrX21hcF92ZXJkKGludCB2ZXJkaWN0LCBib29sIHJlZGlyKVxubmV0L2NvcmUvc2ttc2cuYy05ODkte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTAwMC1cbm5ldC9jb3JlL3NrbXNnLmM6MTAwMTppbnQgc2tfcHNvY2tfbXNnX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxubmV0L2NvcmUvc2ttc2cuYy0xMDAyLVx0XHRcdCBzdHJ1Y3Qgc2tfbXNnICptc2cpXG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMDM3PUVYUE9SVF9TWU1CT0xfR1BMKHNrX3Bzb2NrX21zZ192ZXJkaWN0KTtcbm5ldC9jb3JlL3NrbXNnLmMtMTAzOC1cbm5ldC9jb3JlL3NrbXNnLmM6MTAzOTpzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChzdHJ1Y3Qgc2tfcHNvY2sgKmZyb20sIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9za21zZy5jLTEwNDAte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTA3Ni1cbm5ldC9jb3JlL3NrbXNnLmM6MTA3NzpzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3NrbXNnLmMtMTA3OC1cdFx0XHRcdCAgaW50IHZlcmRpY3QpXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMTQxLVxubmV0L2NvcmUvc2ttc2cuYzoxMTQyOnN0YXRpYyB2b2lkIHNrX3Bzb2NrX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL3NrbXNnLmMtMTE0My17XG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMTU5LSNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcbm5ldC9jb3JlL3NrbXNnLmM6MTE2MDpzdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL3NrbXNnLmMtMTE2MS17XG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMTg4LVxubmV0L2NvcmUvc2ttc2cuYzoxMTg5OnN0YXRpYyBpbnQgc2tfcHNvY2tfc3RycF9yZWFkX2RvbmUoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgaW50IGVycilcbm5ldC9jb3JlL3NrbXNnLmMtMTE5MC17XG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMTkzLVxubmV0L2NvcmUvc2ttc2cuYzoxMTk0OnN0YXRpYyBpbnQgc2tfcHNvY2tfc3RycF9wYXJzZShzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvc2ttc2cuYy0xMTk1LXtcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyMTEtLyogQ2FsbGVkIHdpdGggc29ja2V0IGxvY2sgaGVsZC4gKi9cbm5ldC9jb3JlL3NrbXNnLmM6MTIxMjpzdGF0aWMgdm9pZCBza19wc29ja19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc2ttc2cuYy0xMjEzLXtcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyMjctXG5uZXQvY29yZS9za21zZy5jOjEyMjg6aW50IHNrX3Bzb2NrX2luaXRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTEyMjkte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTI0OC1cbm5ldC9jb3JlL3NrbXNnLmM6MTI0OTp2b2lkIHNrX3Bzb2NrX3N0YXJ0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy0xMjUwLXtcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyNTgtXG5uZXQvY29yZS9za21zZy5jOjEyNTk6dm9pZCBza19wc29ja19zdG9wX3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy0xMjYwLXtcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyNzAtXG5uZXQvY29yZS9za21zZy5jOjEyNzE6c3RhdGljIHZvaWQgc2tfcHNvY2tfZG9uZV9zdHJwKHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTEyNzIte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTI3Ny0jZWxzZVxubmV0L2NvcmUvc2ttc2cuYzoxMjc4OnN0YXRpYyB2b2lkIHNrX3Bzb2NrX2RvbmVfc3RycChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy0xMjc5LXtcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyODItXG5uZXQvY29yZS9za21zZy5jOjEyODM6c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvc2ttc2cuYy0xMjg0LXtcbi0tXG5uZXQvY29yZS9za21zZy5jLTEzMTQtXG5uZXQvY29yZS9za21zZy5jOjEzMTU6c3RhdGljIHZvaWQgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL3NrbXNnLmMtMTMxNi17XG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMzQxLVxubmV0L2NvcmUvc2ttc2cuYzoxMzQyOnZvaWQgc2tfcHNvY2tfc3RhcnRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTEzNDMte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTM1MS1cbm5ldC9jb3JlL3NrbXNnLmM6MTM1Mjp2b2lkIHNrX3Bzb2NrX3N0b3BfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTEzNTMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgwMAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUFNvY2sgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIFBTb2NrIGZ1bmN0aW9ucy4gSSBzZWUgYSBjbGVhciBwYXR0ZXJuIGhlcmUuIFByaW1hcmlseSwgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIOKAkyBgc2tfcHNvY2tfaW5pdGAsIGBza19wc29ja19saW5rX3BvcGAsIGBza19wc29ja19zdG9wYCwgYHNrX3Bzb2NrX2Ryb3BgLCBgc2tfcHNvY2tfaW5pdF9zdHJwYCwgYHNrX3Bzb2NrX3N0YXJ0X3N0cnBgLCBgc2tfcHNvY2tfc3RvcF9zdHJwYCwgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgLCBgc2tfcHNvY2tfc3RvcF92ZXJkaWN0YCDigJMgYXJlIG1vc3RseSBmb2N1c2VkIG9uIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93bi4gU3RhbmRhcmQgc3R1ZmY7IHNldHRpbmcgdXAgcmVzb3VyY2VzLCB0ZWFyaW5nIHRoZW0gZG93bi4gTm90aGluZyBwYXJ0aWN1bGFybHkgZ3JvdW5kYnJlYWtpbmcgdGhlcmUuCgpUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgZGF0YSBwYXRoLiBUaGUgbmV0d29ya2luZyBzdGFjayBpc24mIzM5O3QgZGlyZWN0bHkgY2FsbGluZyB0aGVzZSBub24tc3RhdGljIGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSB0aGUgc29ja2V0IGxheWVyIGlzIHRyaWdnZXJpbmcgdGhlIGRhdGEgZmxvdyB2aWEgYHNrX2RhdGFfcmVhZHlgIG9yIGBza193cml0ZV9zcGFjZWAsIGFuZCB3ZSYjMzk7cmUgaG9va2luZyBpbnRvIHRoYXQuIFNvLCBpbnN0ZWFkIG9mIHRoZSB1c3VhbCBgdGNwX2RhdGFfcmVhZHlgLCB3ZSBoYXZlIHNvbWV0aGluZyBsaWtlIGBza19wc29ja19zdHJwX2RhdGFfcmVhZHlgIG9yIGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgIHdoaWNoIGFyZSBzdGF0aWMuIFRoZXkgYXJlIHVzZWQgaW50ZXJuYWxseSBmb3IgZGF0YSBoYW5kbGluZy4gVGhpcyBpcyBob3cgdGhlIFBTb2NrIGludGVyYWN0cyB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrLgoKV2FpdCBhIHNlY29uZOKApiBgc2tfcHNvY2tfbXNnX3ZlcmRpY3RgIGlzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIG5vdCB3aGF0IEkgZXhwZWN0ZWQuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZzsgdGhlcmUgbWF5IGJlIGEgY2x1ZSBoZXJlLiBUaGlzIGJlYXJzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfbXNnX3ZlcmRpY3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za21zZy5oPTQ1OT12b2lkIHNrX3Bzb2NrX3N0b3BfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spO1xuaW5jbHVkZS9saW51eC9za21zZy5oLTQ2MC1cbmluY2x1ZGUvbGludXgvc2ttc2cuaDo0NjE6aW50IHNrX3Bzb2NrX21zZ192ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbmluY2x1ZGUvbGludXgvc2ttc2cuaC00NjItXHRcdFx0IHN0cnVjdCBza19tc2cgKm1zZyk7XG4tLVxubmV0L2NvcmUvc2ttc2cuYz05ODg9c3RhdGljIGludCBza19wc29ja19tYXBfdmVyZChpbnQgdmVyZGljdCwgYm9vbCByZWRpcilcbi0tXG5uZXQvY29yZS9za21zZy5jLTEwMDAtXG5uZXQvY29yZS9za21zZy5jOjEwMDE6aW50IHNrX3Bzb2NrX21zZ192ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbm5ldC9jb3JlL3NrbXNnLmMtMTAwMi1cdFx0XHQgc3RydWN0IHNrX21zZyAqbXNnKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTAzNi19XG5uZXQvY29yZS9za21zZy5jOjEwMzc6RVhQT1JUX1NZTUJPTF9HUEwoc2tfcHNvY2tfbXNnX3ZlcmRpY3QpO1xubmV0L2NvcmUvc2ttc2cuYy0xMDM4LVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz00MTg9c3RhdGljIGludCB0Y3BfYnBmX3NlbmRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTQzNC1cdFx0ZGVsdGEgPSBtc2ctXHUwMDNlc2cuc2l6ZTtcbm5ldC9pcHY0L3RjcF9icGYuYzo0MzU6XHRcdHBzb2NrLVx1MDAzZWV2YWwgPSBza19wc29ja19tc2dfdmVyZGljdChzaywgcHNvY2ssIG1zZyk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNDM2LVx0XHRkZWx0YSAtPSBtc2ctXHUwMDNlc2cuc2l6ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4NjgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUQ1AgQlBGIEluZ3Jlc3MgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNvbWV0aGluZyBmZWVscyBvZmYuIGB0Y3BfYnBmX3NlbmRfdmVyZGljdGAgaXMgY2FsbGVkIGZyb20gYHRjcF9icGZfc2VuZG1zZ2AsIGJ1dCB0aGUgcGF0Y2ggZGVzY3JpcHRpb24gc2VlbXMgdG8gYmUgZm9jdXNlZCBvbiBpbmdyZXNzIGZ1bmN0aW9uYWxpdHksIG5vdCB0aGUgc2VuZGluZyBwYXRoLiBUaGF0JiMzOTtzIG15IGZpcnN0IHJlZCBmbGFnLCBhcyB0aGlzIGNvbm5lY3Rpb24gaXMgbm90IHRoZSBwcmltYXJ5IGZvY3VzLgoKTGV0JiMzOTtzIHNlZSwgaXQmIzM5O3MgbW9kaWZ5aW5nIGEgYnVuY2ggb2YgZnVuY3Rpb25zOiBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAsIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2dgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgLCBgc2tfcHNvY2tfaGFuZGxlX3NrYmAsIGBza19wc29ja19iYWNrbG9nYCwgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YC4gUmlnaHQsIHRoZXNlIGFyZSBhbGwgZGVmaW5pdGVseSBpbmdyZXNzLXJlbGF0ZWQuIFRoYXQgbGluZXMgdXAuIFRoZSBpbmdyZXNzIGVudHJ5IHBvaW50cyBJJiMzOTttIGZhbWlsaWFyIHdpdGgsIGF0IGxlYXN0IGluIHRoaXMgY29udGV4dCwgYXJlIGBza19wc29ja19zdHJwX2RhdGFfcmVhZHlgIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5YC4KCldhaXQsIGEgc2Vjb25kLiBgc2tfcHNvY2tfYmFja2xvZ2AuLi4gdGhhdCYjMzk7cyB0aGUgd29ya3F1ZXVlIGNhbGxiYWNrLCBpc24mIzM5O3QgaXQ/IE9rYXksIEkmIzM5O20gZ2V0dGluZyBhIGJldHRlciBwaWN0dXJlIGhlcmUsIGJ1dCBzdGlsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBleGFjdCBjb25uZWN0aW9uLgoKSG1tLCBJIHdvbmRlciBpZiB0aGVyZSYjMzk7cyBhIGdvb2QsIG5vbi1zdGF0aWMgZnVuY3Rpb24gSSBjYW4gdXNlIGFzIGEgY2VudHJhbCBwb2ludCwgYSBmb2N1cyBzeW1ib2wsIHRvIGJldHRlciB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgYWxsIGZpdHMgaW4/IFBlcmhhcHMgYHRjcF9icGZfcmVjdm1zZ2A/IFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9icGZfcmVjdm1zZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTU5Nj1zdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2ttc2cuYy02MTMtXHQgKiB3ZSB3aWxsIGV2ZW50dWFsbHkgcmVjZWl2ZSB0aGlzIGRhdGEgb24uIFRoZSBkYXRhIHdpbGwgYmUgcmVsZWFzZWRcbm5ldC9jb3JlL3NrbXNnLmM6NjE0Olx0ICogZnJvbSBza2JfY29uc3VtZSBmb3VuZCBpbiBfX3RjcF9icGZfcmVjdm1zZygpIGFmdGVyIGl0cyBiZWVuIGNvcGllZFxubmV0L2NvcmUvc2ttc2cuYy02MTUtXHQgKiBpbnRvIHVzZXIgYnVmZmVycy5cbi0tXG5uZXQvY29yZS9za21zZy5jPTY1MD1zdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za21zZy5jLTY2NC1cbm5ldC9jb3JlL3NrbXNnLmM6NjY1Olx0LyogVGhpcyBpcyB1c2VkIGluIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVcbm5ldC9jb3JlL3NrbXNnLmMtNjY2LVx0ICogZGF0YSBvcmlnaW5hdGVzIGZyb20gdGhlIHNvY2tldCYjMzk7cyBvd24gcHJvdG9jb2wgc3RhY2suIE5vIG5lZWQgdG9cbi0tXG5uZXQvY29yZS9za21zZy5jPTY4MT1zdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYmFja2xvZyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNjk4LVxubmV0L2NvcmUvc2ttc2cuYzo2OTk6XHQvKiBUaGlzIGlzIHVzZWQgaW4gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZVxubmV0L2NvcmUvc2ttc2cuYy03MDAtXHQgKiBkYXRhIG9yaWdpbmF0ZXMgZnJvbSB0aGUgc29ja2V0JiMzOTtzIG93biBwcm90b2NvbCBzdGFjay4gTm8gbmVlZCB0b1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz0yMDM9c3RhdGljIGJvb2wgaXNfbmV4dF9tc2dfZmluKHN0cnVjdCBza19wc29jayAqcHNvY2spXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTIyMC1cbm5ldC9pcHY0L3RjcF9icGYuYzoyMjE6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjItXHRcdFx0XHQgIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9MzM1PXN0YXRpYyBpbnQgdGNwX2JwZl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzY3LVxubmV0L2lwdjQvdGNwX2JwZi5jOjM2ODpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbm5ldC9pcHY0L3RjcF9icGYuYy0zNjktXHRcdFx0ICAgaW50IGZsYWdzKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz02NDA9c3RhdGljIHZvaWQgdGNwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUQ1BfQlBGX05VTV9DRkdTXSxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQ1LVx0cHJvdFtUQ1BfQlBGX0JBU0VdLmNsb3NlXHRcdD0gc29ja19tYXBfY2xvc2U7XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjQ2Olx0cHJvdFtUQ1BfQlBGX0JBU0VdLnJlY3Ztc2dcdFx0PSB0Y3BfYnBmX3JlY3Ztc2c7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQ3LVx0cHJvdFtUQ1BfQlBGX0JBU0VdLnNvY2tfaXNfcmVhZGFibGVcdD0gc2tfbXNnX2lzX3JlYWRhYmxlO1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy02NTMtXHRwcm90W1RDUF9CUEZfUlhdXHRcdFx0PSBwcm90W1RDUF9CUEZfQkFTRV07XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjU0Olx0cHJvdFtUQ1BfQlBGX1JYXS5yZWN2bXNnXHRcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcbm5ldC9pcHY0L3RjcF9icGYuYy02NTUtXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjU2LVx0cHJvdFtUQ1BfQlBGX1RYUlhdXHRcdFx0PSBwcm90W1RDUF9CUEZfVFhdO1xubmV0L2lwdjQvdGNwX2JwZi5jOjY1NzpcdHByb3RbVENQX0JQRl9UWFJYXS5yZWN2bXNnXHRcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcbm5ldC9pcHY0L3RjcF9icGYuYy02NTgtfVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz02OTA9aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTcxMy1cdCAqIEZvciBTS19SRURJUkVDVCwgd2UgbmVlZCB0byBhY2sgdGhlIGZyYW1lIGltbWVkaWF0ZWx5IGJ1dCBmb3Jcbm5ldC9pcHY0L3RjcF9icGYuYzo3MTQ6XHQgKiBTS19QQVNTLCB3ZSB3YW50IHRvIGRlbGF5IHRoZSBhY2sgdW50aWwgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpLlxubmV0L2lwdjQvdGNwX2JwZi5jLTcxNS1cdCAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYz0xMTEzPXN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF96Yyh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYy0xMTQ4LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jOjExNDk6XHQvKiB0cmlnZ2VyIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIgYW5kIGluYyBjb3BpZWRfc2VxIG9mIHAxICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMtMTE1MC1cdHJlY3ZkID0gcmVjdl90aW1lb3V0KHAxLCByY3YsIHNpemVvZihyY3YpLCBNU0dfRE9OVFdBSVQsIDEpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jPTE4PXN0YXRpYyBjb25zdCBpbnQgdGVzdF9wYWNrZXRfbnVtID0gMTAwO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtMTktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYzoyMDovKiBDdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKSBpbnZva2VzIGRhdGFfcmVhZHlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jLTIxLSAqIHdpdGggc2sgaGVsZCBpZiBhbiBza2IgZXhpc3RzIGluIHNrX3JlY2VpdmVfcXVldWUuIFRoZW4gZm9yIHRoZVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jPTI5Mz1zdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF9wYXNzKGludCBmYW1pbHksIGludCBzb3R5cGUsIGJvb2wgZmlvbnJlYWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtMzExLVx0ICogY29ycmVjdGx5IGJlY2F1c2Ugd2UgY2hlY2sgc2tfcmVjZWl2ZV9xdWV1ZSBpblxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmM6MzEyOlx0ICogdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtMzEzLVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDYzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGdW5jdGlvbiBWaXNpYmlsaXR5IGluIHRoZSBUQ1AgQlBGIGFuZCBTb2NrIE1hcCBTdWJzeXN0ZW1zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHdhcyBsb29raW5nIGF0IGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgaW5pdGlhbGx5IHRob3VnaHQgaXQgd2FzIG5vbi1zdGF0aWMsIGJ1dCB0aGVuIEkgcmVhbGl6ZWQgaXQgKmlzKiBzdGF0aWMgd2l0aGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgLiBHb29kIGNhdGNoLCBtZSEgU28sIEkgY29uZmlybWVkIGBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLiBGaW5lLiBBbmQgYHRjcF9icGZfcmVjdm1zZ2AuLi4geWVwLCBhbHNvIGBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ2AuIFRoYXQgbWFrZXMgc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2Yga2VlcGluZyB0aG9zZSBwYXJzaW5nIGZ1bmN0aW9ucyBpbnRlcm5hbCB0byB0aGUgVENQIEJQRiBpbXBsZW1lbnRhdGlvbi4KCk5vdywgc2hpZnRpbmcgZ2VhcnMsIEkgbW92ZWQgb24gdG8gZnVuY3Rpb25zIHJlbGF0ZWQgdG8gcGFja2V0IHNvY2tldHMgKGBwc29ja2ApLiBgc2tfcHNvY2tfaW5pdF9zdHJwYCBpcyBub24tc3RhdGljLCB3aGljaCBpcyB3aGF0IEkgd291bGQgZXhwZWN0IGZvciBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gU2ltaWxhcmx5LCBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAsIGBza19wc29ja19tc2dfdmVyZGljdGAsIGBza19wc29ja19kcm9wYCwgYHNrX3Bzb2NrX3N0b3BgLCBgc2tfcHNvY2tfaW5pdGAsIGFuZCBgc2tfcHNvY2tfbGlua19wb3BgIGFyZSBhbGwgbm9uLXN0YXRpYy4gVGhpcyBsaWtlbHkgbWVhbnMgdGhleSYjMzk7cmUgcGFydCBvZiB0aGUgcHVibGljIEFQSSBvciBhdCBsZWFzdCB1c2VkIG1vcmUgYnJvYWRseSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIFNvLCB0aGV5IGFsbCBoYXZlIGEgYnJvYWRlciBzY29wZS4KCk5leHQgc3RlcD8gSSYjMzk7bGwgcHJvYmFibHkgc2NhbiB0aHJvdWdoIGBuZXQvY29yZS9zb2NrX21hcC5jYCB0byBzZWUgd2hpY2ggZnVuY3Rpb25zIHRoZXJlIGFyZSBub24tc3RhdGljIGFuZCBob3cgdGhleSBhcmUgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpdLipzb2NrX21hcC4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jPTMyPXN0YXRpYyBERUZJTkVfTVVURVgoc29ja21hcF9tdXRleCk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTMzLVxubmV0L2NvcmUvc29ja19tYXAuYzozNDpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzUtXHRcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZCwgc3RydWN0IGJwZl9saW5rICpsaW5rLFxubmV0L2NvcmUvc29ja19tYXAuYy0zNi1cdFx0XHRcdHUzMiB3aGljaCk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjM3OnN0YXRpYyBzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnNvY2tfbWFwX3Byb2dzKHN0cnVjdCBicGZfbWFwICptYXApO1xubmV0L2NvcmUvc29ja19tYXAuYy0zOC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzk6c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDAte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjctXG5uZXQvY29yZS9zb2NrX21hcC5jOjY4OmludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxubmV0L2NvcmUvc29ja19tYXAuYy02OS17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy04NS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODY6aW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUpXG5uZXQvY29yZS9zb2NrX21hcC5jLTg3LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTExNi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTE3OnN0YXRpYyB2b2lkIHNvY2tfbWFwX3NrX2FjcXVpcmUoc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xMTgtXHRfX2FjcXVpcmVzKFx1MDAyNnNrLVx1MDAzZXNrX2xvY2suc2xvY2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMjMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyNDpzdGF0aWMgdm9pZCBzb2NrX21hcF9za19yZWxlYXNlKHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI1LVx0X19yZWxlYXNlcyhcdTAwMjZzay1cdTAwM2Vza19sb2NrLnNsb2NrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTMwLVxubmV0L2NvcmUvc29ja19tYXAuYzoxMzE6c3RhdGljIHZvaWQgc29ja19tYXBfYWRkX2xpbmsoc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTMyLVx0XHRcdCAgICAgIHN0cnVjdCBza19wc29ja19saW5rICpsaW5rLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQxLVxubmV0L2NvcmUvc29ja19tYXAuYzoxNDI6c3RhdGljIHZvaWQgc29ja19tYXBfZGVsX2xpbmsoc3RydWN0IHNvY2sgKnNrLFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDMtXHRcdFx0ICAgICAgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgdm9pZCAqbGlua19yYXcpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNzgtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3OTpzdGF0aWMgdm9pZCBzb2NrX21hcF91bnJlZihzdHJ1Y3Qgc29jayAqc2ssIHZvaWQgKmxpbmtfcmF3KVxubmV0L2NvcmUvc29ja19tYXAuYy0xODAte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg4LVxubmV0L2NvcmUvc29ja19tYXAuYzoxODk6c3RhdGljIGludCBzb2NrX21hcF9pbml0X3Byb3RvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTkwLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5Ni1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTk3OnN0YXRpYyBzdHJ1Y3Qgc2tfcHNvY2sgKnNvY2tfbWFwX3Bzb2NrX2dldF9jaGVja2VkKHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTk4LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTIxNi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MjE3OnN0YXRpYyBpbnQgc29ja19tYXBfbGluayhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTIxOC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zMzgtXG5uZXQvY29yZS9zb2NrX21hcC5jOjMzOTpzdGF0aWMgdm9pZCBzb2NrX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG5uZXQvY29yZS9zb2NrX21hcC5jLTM0MC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zNzEtXG5uZXQvY29yZS9zb2NrX21hcC5jOjM3MjpzdGF0aWMgdm9pZCBzb2NrX21hcF9yZWxlYXNlX3Byb2dzKHN0cnVjdCBicGZfbWFwICptYXApXG5uZXQvY29yZS9zb2NrX21hcC5jLTM3My17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zNzYtXG5uZXQvY29yZS9zb2NrX21hcC5jOjM3NzpzdGF0aWMgc3RydWN0IHNvY2sgKl9fc29ja19tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGtleSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc4LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4Ny1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzg4OnN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy0zODkte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzk5LVxubmV0L2NvcmUvc29ja19tYXAuYzo0MDA6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy00MDEte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDE0LVxubmV0L2NvcmUvc29ja19tYXAuYzo0MTU6c3RhdGljIGludCBfX3NvY2tfbWFwX2RlbGV0ZShzdHJ1Y3QgYnBmX3N0YWIgKnN0YWIsIHN0cnVjdCBzb2NrICpza190ZXN0LFxubmV0L2NvcmUvc29ja19tYXAuYy00MTYtXHRcdFx0ICAgICBzdHJ1Y3Qgc29jayAqKnBzaylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQzMy1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDM0OnN0YXRpYyB2b2lkIHNvY2tfbWFwX2RlbGV0ZV9mcm9tX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrLFxubmV0L2NvcmUvc29ja19tYXAuYy00MzUtXHRcdFx0XHQgICAgICB2b2lkICpsaW5rX3Jhdylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ0MS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDQyOnN0YXRpYyBsb25nIHNvY2tfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDQzLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ1NC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDU1OnN0YXRpYyBpbnQgc29ja19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dClcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDU2LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ2OS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDcwOnN0YXRpYyBpbnQgc29ja19tYXBfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIgaWR4LFxubmV0L2NvcmUvc29ja19tYXAuYy00NzEtXHRcdFx0XHQgIHN0cnVjdCBzb2NrICpzaywgdTY0IGZsYWdzKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTIwLVxubmV0L2NvcmUvc29ja19tYXAuYzo1MjE6c3RhdGljIGJvb2wgc29ja19tYXBfb3Bfb2theShjb25zdCBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKm9wcylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTIyLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTUyNy1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTI4OnN0YXRpYyBib29sIHNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy01Mjkte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTM1LVxubmV0L2NvcmUvc29ja19tYXAuYzo1MzY6c3RhdGljIGJvb2wgc29ja19tYXBfc2tfaXNfc3VpdGFibGUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy01Mzcte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTQwLVxubmV0L2NvcmUvc29ja19tYXAuYzo1NDE6c3RhdGljIGJvb2wgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTU0Mi17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz01NTU9c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01NTctXG5uZXQvY29yZS9zb2NrX21hcC5jOjU1ODppbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG5uZXQvY29yZS9zb2NrX21hcC5jLTU1OS1cdFx0XHQgICAgIHU2NCBmbGFncylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTU5OC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTk5OnN0YXRpYyBsb25nIHNvY2tfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjAwLVx0XHRcdFx0IHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz03MTk9REVGSU5FX0JQRl9JVEVSX0ZVTkMoc29ja21hcCwgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy03MjItXG5uZXQvY29yZS9zb2NrX21hcC5jOjcyMzpzdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX2xvb2t1cF9lbGVtKHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzI0LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTczMy1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzM0OnN0YXRpYyB2b2lkICpzb2NrX21hcF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxubmV0L2NvcmUvc29ja19tYXAuYy03MzUtXHRfX2FjcXVpcmVzKHJjdSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTc0Ni1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzQ3OnN0YXRpYyB2b2lkICpzb2NrX21hcF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXG5uZXQvY29yZS9zb2NrX21hcC5jLTc0OC1cdF9fbXVzdF9ob2xkKHJjdSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTc1Ny1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzU4OnN0YXRpYyBpbnQgc29ja19tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG5uZXQvY29yZS9zb2NrX21hcC5jLTc1OS1cdF9fbXVzdF9ob2xkKHJjdSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTc4MC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzgxOnN0YXRpYyB2b2lkIHNvY2tfbWFwX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxubmV0L2NvcmUvc29ja19tYXAuYy03ODItXHRfX3JlbGVhc2VzKHJjdSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTc5MT1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNvY2tfbWFwX3NlcV9vcHMgPSB7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy03OTctXG5uZXQvY29yZS9zb2NrX21hcC5jOjc5ODpzdGF0aWMgaW50IHNvY2tfbWFwX2luaXRfc2VxX3ByaXZhdGUodm9pZCAqcHJpdl9kYXRhLFxubmV0L2NvcmUvc29ja19tYXAuYy03OTktXHRcdFx0XHQgICAgIHN0cnVjdCBicGZfaXRlcl9hdXhfaW5mbyAqYXV4KVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODA3LVxubmV0L2NvcmUvc29ja19tYXAuYzo4MDg6c3RhdGljIHZvaWQgc29ja19tYXBfZmluaV9zZXFfcHJpdmF0ZSh2b2lkICpwcml2X2RhdGEpXG5uZXQvY29yZS9zb2NrX21hcC5jLTgwOS17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy04MTQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjgxNTpzdGF0aWMgdTY0IHNvY2tfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxubmV0L2NvcmUvc29ja19tYXAuYy04MTYte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTQ0Nz1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19oYXNoX29wcyA9IHtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NjItXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0NjM6c3RhdGljIHN0cnVjdCBza19wc29ja19wcm9ncyAqc29ja19tYXBfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcClcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ2NC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDc2LVxubmV0L2NvcmUvc29ja19tYXAuYzoxNDc3OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKioqcHByb2csXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NzgtXHRcdFx0XHQgICAgIHN0cnVjdCBicGZfbGluayAqKipwbGluaywgdTMyIHdoaWNoKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUxOS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTUyMDpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTIxLVx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzNi0gKi9cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTUzNzpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzOC1cdFx0XHRcdHN0cnVjdCBicGZfcHJvZyAqb2xkLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNTcxLVxubmV0L2NvcmUvc29ja19tYXAuYzoxNTcyOmludCBzb2NrX21hcF9icGZfcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTU3My1cdFx0XHQgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MjAtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2MjE6c3RhdGljIHZvaWQgc29ja19tYXBfdW5saW5rKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrX2xpbmsgKmxpbmspXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MjIte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYzNC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTYzNTpzdGF0aWMgdm9pZCBzb2NrX21hcF9yZW1vdmVfbGlua3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjM2LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NDQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2NDU6dm9pZCBzb2NrX21hcF91bmhhc2goc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjQ2LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE2NzA9RVhQT1JUX1NZTUJPTF9HUEwoc29ja19tYXBfdW5oYXNoKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY3MS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTY3Mjp2b2lkIHNvY2tfbWFwX2Rlc3Ryb3koc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjczLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE2OTk9RVhQT1JUX1NZTUJPTF9HUEwoc29ja19tYXBfZGVzdHJveSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE3MDAtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3MDE6dm9pZCBzb2NrX21hcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTcwMi17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xNzM3PXN0cnVjdCBzb2NrbWFwX2xpbmsge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc0MS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTc0MjpzdGF0aWMgdm9pZCBzb2NrX21hcF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNzQzLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NTgtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3NTk6c3RhdGljIGludCBzb2NrX21hcF9saW5rX2RldGFjaChzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NjAte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc2NC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTc2NTpzdGF0aWMgdm9pZCBzb2NrX21hcF9saW5rX2RlYWxsb2Moc3RydWN0IGJwZl9saW5rICpsaW5rKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNzY2LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NzMtICovXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3NzQ6c3RhdGljIGludCBzb2NrX21hcF9saW5rX3VwZGF0ZV9wcm9nKHN0cnVjdCBicGZfbGluayAqbGluayxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc3NS1cdFx0XHRcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTgzMy1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTgzNDpzdGF0aWMgdTMyIHNvY2tfbWFwX2xpbmtfZ2V0X21hcF9pZChjb25zdCBzdHJ1Y3Qgc29ja21hcF9saW5rICpzb2NrbWFwX2xpbmspXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4MzUte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg0NC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg0NTpzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmtfZmlsbF9pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg0Ni1cdFx0XHRcdCAgIHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg1NS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg1NjpzdGF0aWMgdm9pZCBzb2NrX21hcF9saW5rX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg1Ny1cdFx0XHRcdCAgICAgIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTg2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBzb2NrX21hcF9saW5rX29wcyA9IHtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NzQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NzU6aW50IHNvY2tfbWFwX2xpbmtfY3JlYXRlKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NzYte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTkzNC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTkzNTpzdGF0aWMgaW50IHNvY2tfbWFwX2l0ZXJfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5MzYtXHRcdFx0XHQgICAgICAgdW5pb24gYnBmX2l0ZXJfbGlua19pbmZvICpsaW5mbyxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5NjUtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE5NjY6c3RhdGljIHZvaWQgc29ja19tYXBfaXRlcl9kZXRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfaXRlcl9hdXhfaW5mbyAqYXV4KVxubmV0L2NvcmUvc29ja19tYXAuYy0xOTY3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxODIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFNvY2ttYXAgQnVnKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHNvY2ttYXAgaXNzdWUgYW5kIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiBpdCBsb29rcyBsaWtlIGBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNgLCBgc29ja19tYXBfZ2V0X2Zyb21fZmRgLCBgc29ja19tYXBfcHJvZ19kZXRhY2hgLCBgc29ja19tYXBfYnBmX3Byb2dfcXVlcnlgLCBgc29ja19tYXBfdW5oYXNoYCwgYHNvY2tfbWFwX2Rlc3Ryb3lgLCBgc29ja19tYXBfY2xvc2VgLCBhbmQgYHNvY2tfbWFwX2xpbmtfY3JlYXRlYCBhcmUgYWxsIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhleSYjMzk7cmUgZGVmaW5pdGVseSBpbiBwbGF5IGhlcmUuCgpUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSBhbiBgc2tfZm9yd2FyZF9hbGxvY2AgaXNzdWUgd2hlbiB0aGUgdHJhZmZpYyBpcyBiZWluZyBkZWxpdmVyZWQgKmJhY2sqIHRvIHRoZSBzYW1lIHNvY2tldCAoYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgKS4gVGhhdCBzY3JlYW1zIHNvY2ttYXAgYW5kIEJQRiBpbnRlcmFjdGlvbi4gSXQmIzM5O3MgaGFwcGVuaW5nIGJlY2F1c2UgYSBzb2NrZXQgZ2V0cyBhZGRlZCB0byB0aGUgc29ja21hcCwgYW5kIHRoZW4gYSBCUEYgcHJvZ3JhbSByZXJvdXRlcyB0cmFmZmljICpiYWNrKiB0byB0aGF0IHZlcnkgc29ja2V0LgoKU28sIHdoZXJlIGRvIHRoZSBwaWVjZXMgZml0IHRvZ2V0aGVyPyBDbGVhcmx5LCBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCBpcyBhIGxpa2VseSBjYW5kaWRhdGUsIHNpbmNlIGl0JiMzOTtzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgYWRkaW5nIHRoZSBzb2NrZXQgdG8gdGhlIG1hcCBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoYXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gZm9yIG15IGludmVzdGlnYXRpb24sIGRlZmluaXRlbHkuIEFuZCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHJlY2VpdmluZyBkYXRhLCBgdGNwX2JwZl9yZWN2bXNnYCBpcyBjcnVjaWFsLiBJdCYjMzk7cyB0aGUgZnVuY3Rpb24gd2hlcmUgdGhlIGRhdGEgaXMgYWN0dWFsbHkgcmVhZC4gRmluYWxseSwgdGhlIEJQRiBwcm9ncmFtIGl0c2VsZiBnZXRzIGF0dGFjaGVkIGJ5IGBicGZfcHJvZ19hdHRhY2hgIG9yIGBzb2NrX21hcF9saW5rX2NyZWF0ZWAuIFNvIHRob3NlIGFyZSBpbXBvcnRhbnQgYXMgd2VsbC4KCkkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGRlZXBlciBkaXZlIGludG8gYHRjcF9icGZfcmVjdm1zZ2AgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQgdGhlcmUuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBkYXRhIGhhbmRsaW5nIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc29ja21hcCB3aXRoaW4gdGhlIHJlY2VpdmluZyBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYnBmX3JlY3Ztc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2JwZi5jPTIwMz1zdGF0aWMgYm9vbCBpc19uZXh0X21zZ19maW4oc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMjIwLVxubmV0L2lwdjQvdGNwX2JwZi5jOjIyMTpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjQvdGNwX2JwZi5jLTIyMi1cdFx0XHRcdCAgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz0zMzU9c3RhdGljIGludCB0Y3BfYnBmX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0zNjctXG5uZXQvaXB2NC90Y3BfYnBmLmM6MzY4OnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxubmV0L2lwdjQvdGNwX2JwZi5jLTM2OS1cdFx0XHQgICBpbnQgZmxhZ3MpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTY0MD1zdGF0aWMgdm9pZCB0Y3BfYnBmX3JlYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RDUF9CUEZfTlVNX0NGR1NdLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy02NDUtXHRwcm90W1RDUF9CUEZfQkFTRV0uY2xvc2VcdFx0PSBzb2NrX21hcF9jbG9zZTtcbm5ldC9pcHY0L3RjcF9icGYuYzo2NDY6XHRwcm90W1RDUF9CUEZfQkFTRV0ucmVjdm1zZ1x0XHQ9IHRjcF9icGZfcmVjdm1zZztcbm5ldC9pcHY0L3RjcF9icGYuYy02NDctXHRwcm90W1RDUF9CUEZfQkFTRV0uc29ja19pc19yZWFkYWJsZVx0PSBza19tc2dfaXNfcmVhZGFibGU7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY1My1cdHByb3RbVENQX0JQRl9SWF1cdFx0XHQ9IHByb3RbVENQX0JQRl9CQVNFXTtcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTQ6XHRwcm90W1RDUF9CUEZfUlhdLnJlY3Ztc2dcdFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY1NS1cbm5ldC9pcHY0L3RjcF9icGYuYy02NTYtXHRwcm90W1RDUF9CUEZfVFhSWF1cdFx0XHQ9IHByb3RbVENQX0JQRl9UWF07XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjU3Olx0cHJvdFtUQ1BfQlBGX1RYUlhdLnJlY3Ztc2dcdFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY1OC19XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTY5MD1pbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzEzLVx0ICogRm9yIFNLX1JFRElSRUNULCB3ZSBuZWVkIHRvIGFjayB0aGUgZnJhbWUgaW1tZWRpYXRlbHkgYnV0IGZvclxubmV0L2lwdjQvdGNwX2JwZi5jOjcxNDpcdCAqIFNLX1BBU1MsIHdlIHdhbnQgdG8gZGVsYXkgdGhlIGFjayB1bnRpbCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkuXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzE1LVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjQ3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFRDUCBCUEYgUmVjZWl2ZXIgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoZSBgbmV0L2lwdjQvdGNwX2JwZi5jYCBtb2R1bGUgYWdhaW4uIExldCBtZSBqdXN0IG1ha2Ugc3VyZSBJJiMzOTttIGZvbGxvd2luZyB0aGUgY29kZSBjb3JyZWN0bHkuIFJpZ2h0LCBgdGNwX2JwZl9yZWN2bXNnYCBhbmQgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFyZSBkZWZpbml0ZWx5IGRlY2xhcmVkIGFzIHN0YXRpYy4gSW50ZXJlc3RpbmcsIHNvIHRoZXkgd29uJiMzOTt0IGJlIGV4cG9zZWQgb3V0c2lkZSBvZiB0aGUgY29tcGlsYXRpb24gdW5pdC4gQnV0IHdhaXQsIGZvY3VzaW5nIGluIG9uIGB0Y3BfYnBmX3JlY3Ztc2dgIHNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWxzbyBzdGF0aWMuIFRoYXQgbWVhbnMsIGl0IGNhbiBub3QgYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgc291cmNlIGZpbGUsIHdoaWNoIGxpbWl0cyBteSBhYmlsaXR5IHRvIHRyYWNlIHRoaXMgZnVuY3Rpb24gYXMgaXQgaXMgbm90IHBhcnQgb2YgdGhlIGV4dGVybmFsIEFQSS4gTm93IEkmIzM5O20gd29uZGVyaW5nLCBhcmUgdGhlcmUgKmFueSogbm9uLXN0YXRpYyBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGlzIGZpbGU/IEkgbmVlZCB0byBrbm93IHRoZSBzY29wZSBvZiB3aGF0IGlzIHZpc2libGUgZXh0ZXJuYWxseS4gVGhpcyBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpdLip0Y3BfYnBmLipcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2JwZi5jPTMzPXN0YXRpYyBpbnQgYnBmX3RjcF9pbmdyZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtOTAtXG5uZXQvaXB2NC90Y3BfYnBmLmM6OTE6c3RhdGljIGludCB0Y3BfYnBmX3B1c2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBhcHBseV9ieXRlcyxcbm5ldC9pcHY0L3RjcF9icGYuYy05Mi1cdFx0XHRpbnQgZmxhZ3MsIGJvb2wgdW5jaGFyZ2UpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTE1Mi1cbm5ldC9pcHY0L3RjcF9icGYuYzoxNTM6c3RhdGljIGludCB0Y3BfYnBmX3B1c2hfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLFxubmV0L2lwdjQvdGNwX2JwZi5jLTE1NC1cdFx0XHQgICAgICAgdTMyIGFwcGx5X2J5dGVzLCBpbnQgZmxhZ3MsIGJvb2wgdW5jaGFyZ2UpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTE2My1cbm5ldC9pcHY0L3RjcF9icGYuYzoxNjQ6aW50IHRjcF9icGZfc2VuZG1zZ19yZWRpcihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgaW5ncmVzcyxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNjUtXHRcdFx0ICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcywgaW50IGZsYWdzKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz0yMDM9c3RhdGljIGJvb2wgaXNfbmV4dF9tc2dfZmluKHN0cnVjdCBza19wc29jayAqcHNvY2spXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTIyMC1cbm5ldC9pcHY0L3RjcF9icGYuYzoyMjE6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjItXHRcdFx0XHQgIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzM0LVxubmV0L2lwdjQvdGNwX2JwZi5jOjMzNTpzdGF0aWMgaW50IHRjcF9icGZfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzM2LXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzY3LVxubmV0L2lwdjQvdGNwX2JwZi5jOjM2ODpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbm5ldC9pcHY0L3RjcF9icGYuYy0zNjktXHRcdFx0ICAgaW50IGZsYWdzKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy00MTctXG5uZXQvaXB2NC90Y3BfYnBmLmM6NDE4OnN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxubmV0L2lwdjQvdGNwX2JwZi5jLTQxOS1cdFx0XHRcdHN0cnVjdCBza19tc2cgKm1zZywgaW50ICpjb3BpZWQsIGludCBmbGFncylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTMzLVxubmV0L2lwdjQvdGNwX2JwZi5jOjUzNDpzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTM1LXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjM4PXN0YXRpYyBzdHJ1Y3QgcHJvdG8gdGNwX2JwZl9wcm90c1tUQ1BfQlBGX05VTV9QUk9UU11bVENQX0JQRl9OVU1fQ0ZHU107XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjM5LVxubmV0L2lwdjQvdGNwX2JwZi5jOjY0MDpzdGF0aWMgdm9pZCB0Y3BfYnBmX3JlYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RDUF9CUEZfTlVNX0NGR1NdLFxubmV0L2lwdjQvdGNwX2JwZi5jLTY0MS1cdFx0XHRcdCAgIHN0cnVjdCBwcm90byAqYmFzZSlcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjU5LVxubmV0L2lwdjQvdGNwX2JwZi5jOjY2MDpzdGF0aWMgdm9pZCB0Y3BfYnBmX2NoZWNrX3Y2X25lZWRzX3JlYnVpbGQoc3RydWN0IHByb3RvICpvcHMpXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjYxLXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjcxLVxubmV0L2lwdjQvdGNwX2JwZi5jOjY3MjpzdGF0aWMgaW50IF9faW5pdCB0Y3BfYnBmX3Y0X2J1aWxkX3Byb3RvKHZvaWQpXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjczLXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9Njc3PWxhdGVfaW5pdGNhbGwodGNwX2JwZl92NF9idWlsZF9wcm90byk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjc4LVxubmV0L2lwdjQvdGNwX2JwZi5jOjY3OTpzdGF0aWMgaW50IHRjcF9icGZfYXNzZXJ0X3Byb3RvX29wcyhzdHJ1Y3QgcHJvdG8gKm9wcylcbm5ldC9pcHY0L3RjcF9icGYuYy02ODAte1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy02ODktI2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxubmV0L2lwdjQvdGNwX2JwZi5jOjY5MDppbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbm5ldC9pcHY0L3RjcF9icGYuYy02OTEtXHRcdFx0ICAgc2tfcmVhZF9hY3Rvcl90IHJlY3ZfYWN0b3IpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTcyNC1cbm5ldC9pcHY0L3RjcF9icGYuYzo3MjU6aW50IHRjcF9icGZfdXBkYXRlX3Byb3RvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgYm9vbCByZXN0b3JlKVxubmV0L2lwdjQvdGNwX2JwZi5jLTcyNi17XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTc2Mj1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3VwZGF0ZV9wcm90byk7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTc2OC0gKi9cbm5ldC9pcHY0L3RjcF9icGYuYzo3Njk6dm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxubmV0L2lwdjQvdGNwX2JwZi5jLTc3MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNDAxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFN0cmVhbSBQYXJzZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IG5vdGljaW5nIGEgZmV3IHRoaW5ncy4gYHRjcF9icGZfdXBkYXRlX3Byb3RvYCwgYHRjcF9icGZfc2VuZG1zZ19yZWRpcmAsIGB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrYCwgYW5kIGB0Y3BfYnBmX2Nsb25lYCBhcmUgYWxsICpub24tc3RhdGljKiBhbmQgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgZ29vZCB0byBrZWVwIGluIG1pbmQsIGFzIGl0IGluZGljYXRlcyB0aGV5IGFyZSBpbnRlbmRlZCBmb3IgYnJvYWRlciB1c2Ugd2l0aGluIHRoZSBrZXJuZWwgKG9yIHBvdGVudGlhbGx5IHVzZXIgc3BhY2UpLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW4gYSBwYWNrZXQgaXMgcmVkaXJlY3RlZCAqYmFjayogdG8gdGhlIHNhbWUgc29ja2V0LCB3aGljaCBpcyBoYW5kbGVkIGluIGVpdGhlciBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgb3IgcG9zc2libHkgYHNrX3Bzb2NrX2JhY2tsb2dgLiAKClRoZSB0ZXN0IGNhc2UgaXMgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIHVzaW5nIGB4YnBmX3Byb2dfYXR0YWNoYCB0byBob29rIHVwIGEgc3RyZWFtIHBhcnNlciAoYHByb2dfc2tiX3BhcnNlcl9vbmVgKSBhbmQgYSB2ZXJkaWN0IHByb2dyYW0gKGBwcm9nX3NrYl92ZXJkaWN0X3Bhc3NgKSB0byBhIG1hcCB1c2luZyBgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSYCBhbmQgYEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RgIHJlc3BlY3RpdmVseS4gSXQgdGhlbiBzZW5kcyBzb21lIGRhdGEuIE15IGd1ZXNzIGlzIHRoYXQgdGhlIGRhdGEgdHJpZ2dlcnMgdGhlIHN0cmVhbSBwYXJzZXIgYW5kIHRoZSB2ZXJkaWN0IGxvZ2ljLCBhbmQgdGhlIHZlcmRpY3QgaXMgc2V0IHRvIGBTS19QQVNTYC4gQmVjYXVzZSBpdCBwYXNzZXMsIHRoZSBwYWNrZXQgZW5kcyB1cCBiZWluZyBkZWxpdmVyZWQgYmFjayB0byB0aGUgKnNhbWUqIHNvY2tldCwgYWxsIGhhcHBlbmluZyB3aXRoaW4gYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIG9yLCBpZiB0aGUgcGFja2V0IGlzIHF1ZXVlZCwgYHNrX3Bzb2NrX2JhY2tsb2dgLiAKClRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoZSBmdW5jdGlvbiBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAgaXMgYmVpbmcgY2FsbGVkIGFzIGEgcmVzdWx0IG9mIHRoYXQgKnNhbWUtc29ja2V0KiBkZWxpdmVyeS4gSXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBjb250ZXh0LiAgVGhlIGRhdGEgdGhhdCAqdHJpZ2dlcnMqIGFsbCBvZiB0aGlzIGlzIGJlaW5nIGhhbmRsZWQgYnkgYHRjcF9icGZfc3RycF9yZWFkX3NvY2tgLiBXYWl0IGEgc2Vjb25kLiBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2AgaXMgY2xlYXJseSBmb3Igc3RyaW5nIHBhcnNlciBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyB2ZXJ5IGxpa2VseSBnb2luZyB0byBjYWxsIGBzdHJwX2RhdGFfcmVhZHlgIG9yIHNvbWV0aGluZyBlcXVpdmFsZW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgYHRjcF9icGZfc3RycF9yZWFkX3NvY2tgIGlzIGNvcnJlY3QuIExldCBtZSBjaGVjayBpdHMgZGVmaW5pdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2JwZl9zdHJwX3JlYWRfc29jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaD0yODQ0PXN0cnVjdCBzdHJwYXJzZXI7XG5pbmNsdWRlL25ldC90Y3AuaDoyODQ1OmludCB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuaW5jbHVkZS9uZXQvdGNwLmgtMjg0Ni1cdFx0XHQgICBza19yZWFkX2FjdG9yX3QgcmVjdl9hY3Rvcik7XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMjI4PWludCBza19wc29ja19pbml0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTI0Mi1cdGlmIChza19pc190Y3Aoc2spKSB7XG5uZXQvY29yZS9za21zZy5jOjEyNDM6XHRcdHBzb2NrLVx1MDAzZXN0cnAuY2IucmVhZF9zb2NrID0gdGNwX2JwZl9zdHJwX3JlYWRfc29jaztcbm5ldC9jb3JlL3NrbXNnLmMtMTI0NC1cdFx0cHNvY2stXHUwMDNlY29waWVkX3NlcSA9IHRjcF9zayhzayktXHUwMDNlY29waWVkX3NlcTtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9Njc5PXN0YXRpYyBpbnQgdGNwX2JwZl9hc3NlcnRfcHJvdG9fb3BzKHN0cnVjdCBwcm90byAqb3BzKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy02ODktI2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxubmV0L2lwdjQvdGNwX2JwZi5jOjY5MDppbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbm5ldC9pcHY0L3RjcF9icGYuYy02OTEtXHRcdFx0ICAgc2tfcmVhZF9hY3Rvcl90IHJlY3ZfYWN0b3IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzM0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIFNvY2tldCBCUEYgUHJvZ3JhbSBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHN0YXJ0aW5nIHRvIHBpZWNlIHRvZ2V0aGVyIGhvdyB0aGlzIHNvY2tldCBCUEYgaW50ZXJhY3Rpb24gaXMgd29ya2luZy4gSXQgbG9va3MgbGlrZSBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2AgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiByZWxhdGVkIHRvIHRoZSBgc3RycGFyc2VyYCBtZWNoYW5pc20uIFRoZSBgc3RycGFyc2VyYCBpdHNlbGYgaXMgdHJpZ2dlcmVkIGJ5IGBzdHJwX2RhdGFfcmVhZHlgLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIHRoYXTigJlzIHdoYXQgZ2V0cyBjYWxsZWQgd2hlbiBkYXRhIGxhbmRzIG9uIHRoZSBzb2NrZXQuIFNvLCBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2AgaXMgZGVmaW5pdGVseSBhIGtleSBmdW5jdGlvbiB0byBmb2N1cyBvbiByaWdodCBub3cuCgpJIGFsc28gbmVlZCB0byBzZWUgaG93IHRoZSBzb2NrbWFwIGlzIHNldCB1cC4gYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2Agc2VlbXMgbGlrZSBhIGdvb2QgZm9jdXMgc3ltYm9sIGZvciB0aGF0LCBzbyBJJiMzOTtsbCBkb3VibGUtY2hlY2sgaXQuIEFoIHllcywgaXQmIzM5O3MgZGVmaW5lZCBpbiBgbmV0L2NvcmUvc29ja19tYXAuY2AuIE5vdywgbGV0IG1lIHNlZSBpZiBJJiMzOTttIG1pc3NpbmcgYW55IG90aGVyIGltcG9ydGFudCBub24tc3RhdGljIGZ1bmN0aW9uIGNhbGxzIGhlcmXigKYgQWgsIGhlcmUmIzM5O3MgYHNvY2tfbWFwX2xpbmtfY3JlYXRlYCEgVGhhdCYjMzk7cyBjYWxsZWQgd2hlbiBhdHRhY2hpbmcgYSBCUEYgcHJvZ3JhbSB0byBhIHNvY2ttYXAuIFNvLCBgYnBmX3Byb2dfYXR0YWNoYCBjYWxscyBlaXRoZXIgYHNvY2tfbWFwX2xpbmtfY3JlYXRlYCBvciBgc29ja19tYXBfcHJvZ191cGRhdGVgLCB3aGljaCBzdWdnZXN0cyB0aGVyZSBhcmUgdHdvIGRpc3RpbmN0IG1lY2hhbmlzbXMgZm9yIHVwZGF0aW5nIHNvY2ttYXAgcHJvZ3JhbXMuIExldCBtZSBkaWcgaW50byB0aGF0IHNlY29uZCBvcHRpb24sIGFuZCBzZWUgd2hhdCBgc29ja19tYXBfcHJvZ191cGRhdGVgIGlzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX21hcF9wcm9nX3VwZGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYz0zMj1zdGF0aWMgREVGSU5FX01VVEVYKHNvY2ttYXBfbXV0ZXgpO1xubmV0L2NvcmUvc29ja19tYXAuYy0zMy1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzQ6c3RhdGljIGludCBzb2NrX21hcF9wcm9nX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5uZXQvY29yZS9zb2NrX21hcC5jLTM1LVx0XHRcdFx0c3RydWN0IGJwZl9wcm9nICpvbGQsIHN0cnVjdCBicGZfbGluayAqbGluayxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTY4PWludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODAtXHRtdXRleF9sb2NrKFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xubmV0L2NvcmUvc29ja19tYXAuYzo4MTpcdHJldCA9IHNvY2tfbWFwX3Byb2dfdXBkYXRlKG1hcCwgcHJvZywgTlVMTCwgTlVMTCwgYXR0ci1cdTAwM2VhdHRhY2hfdHlwZSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTgyLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9ODY9aW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMDktXHRtdXRleF9sb2NrKFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xubmV0L2NvcmUvc29ja19tYXAuYzoxMTA6XHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIE5VTEwsIHByb2csIE5VTEwsIGF0dHItXHUwMDNlYXR0YWNoX3R5cGUpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xMTEtXHRtdXRleF91bmxvY2soXHUwMDI2c29ja21hcF9tdXRleCk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xNTIwPXN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2soZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNTM2LSAqL1xubmV0L2NvcmUvc29ja19tYXAuYzoxNTM3OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTM4LVx0XHRcdFx0c3RydWN0IGJwZl9wcm9nICpvbGQsIHN0cnVjdCBicGZfbGluayAqbGluayxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE3NDI9c3RhdGljIHZvaWQgc29ja19tYXBfbGlua19yZWxlYXNlKHN0cnVjdCBicGZfbGluayAqbGluaylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NDktXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3NTA6XHRXQVJOX09OX09OQ0Uoc29ja19tYXBfcHJvZ191cGRhdGUoc29ja21hcF9saW5rLVx1MDAzZW1hcCwgTlVMTCwgbGluay1cdTAwM2Vwcm9nLCBsaW5rLFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzUxLVx0XHRcdFx0XHQgIGxpbmstXHUwMDNlYXR0YWNoX3R5cGUpKTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE4NzU9aW50IHNvY2tfbWFwX2xpbmtfY3JlYXRlKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xOTExLVx0bXV0ZXhfbG9jayhcdTAwMjZzb2NrbWFwX211dGV4KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTkxMjpcdHJldCA9IHNvY2tfbWFwX3Byb2dfdXBkYXRlKG1hcCwgcHJvZywgTlVMTCwgXHUwMDI2c29ja21hcF9saW5rLVx1MDAzZWxpbmssIGF0dGFjaF90eXBlKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTkxMy1cdG11dGV4X3VubG9jayhcdTAwMjZzb2NrbWFwX211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMwNzgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGJwZl9wcm9nX2F0dGFjaGAmIzM5O3MgRGVwZW5kZW5jeSBDaGFpbioqCgpPa2F5LCBzbyBgYnBmX3Byb2dfYXR0YWNoYCBpcyBtYWtpbmcgYSBjYWxsIHRvIGBzb2NrX21hcF9nZXRfZnJvbV9mZGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLCBzcGVjaWZpY2FsbHkgaG93IHRoaXMgYHNvY2tfbWFwX2dldF9mcm9tX2ZkYCBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgcGljdHVyZS4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHNvY2tfbWFwX2dldF9mcm9tX2ZkYCBpbW1lZGlhdGVseS4gSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIGh5cG90aGVzZXMgYWJvdXQgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggc29ja2V0IG1hcHMsIG1heWJlIHJldHJpZXZpbmcgc29tZSBkYXRhIG9yIHZhbGlkYXRpbmcgYW4gaW5wdXQsIGdpdmVuIGl0cyBuYW1lLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgYXR0YWNoaW5nIEJQRiBwcm9ncmFtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ja19tYXBfZ2V0X2Zyb21fZmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGYuaD0zNjU0PWludCBicGZfcHJvZ190ZXN0X3J1bl9zeXNjYWxsKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM2NTctXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2NTg6aW50IHNvY2tfbWFwX2dldF9mcm9tX2ZkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xuaW5jbHVkZS9saW51eC9icGYuaC0zNjU5LWludCBzb2NrX21hcF9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM3MzE9c3RhdGljIGlubGluZSBpbnQgYnBmX3Byb2dfdGVzdF9ydW5fc3lzY2FsbChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0zNzM4LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmluY2x1ZGUvbGludXgvYnBmLmg6MzczOTpzdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbmluY2x1ZGUvbGludXgvYnBmLmgtMzc0MC1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDYzND1zdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00Njc2LVx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX01TRzpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ2Nzc6XHRcdHJldCA9IHNvY2tfbWFwX2dldF9mcm9tX2ZkKGF0dHIsIHByb2cpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNDY3OC1cdFx0YnJlYWs7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0zOT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjctXG5uZXQvY29yZS9zb2NrX21hcC5jOjY4OmludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxubmV0L2NvcmUvc29ja19tYXAuYy02OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzODEwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgUHJvZ3JhbSBBdHRhY2htZW50KioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gaG93IEJQRiBwcm9ncmFtcyBhcmUgYXR0YWNoZWQsIHNwZWNpZmljYWxseSBmb3IgYEJQRl9QUk9HX1RZUEVfU0tfU0tCYCBhbmQgYEJQRl9QUk9HX1RZUEVfU0tfTVNHYC4gSSYjMzk7bSB0cmFjaW5nIHRoZSBmbG93LCBhbmQgaXQgbG9va3MgbGlrZSBgc29ja19tYXBfZ2V0X2Zyb21fZmRgIGlzIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCB3aGVuIHVzaW5nIGBicGZfcHJvZ19hdHRhY2hgIGZvciB0aG9zZSBwcm9ncmFtIHR5cGVzLgoKQWhhLCBhbmQgbm93IEkmIzM5O20gcmVtZW1iZXJpbmcgdGhhdCBgQlBGX1BST0dfVFlQRV9TS19TS0JgIGNvdmVycyBib3RoIGBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJgIGFuZCBgQlBGX1NLX1NLQl9TVFJFQU1fVkVSRElDVGAgdXNlIGNhc2VzLiBJdCYjMzk7cyBnb29kIHRvIGtlZXAgdGhvc2UgZGlzdGluY3Rpb25zIGNsZWFyLgoKSSBuZWVkIHRvIGNvbmZpcm0gYWxsIG9mIHRoaXMsIHNvIGxldCBtZSBxdWlja2x5IGp1bXAgaW50byBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgYGJwZl9wcm9nX2F0dGFjaGAgZnVuY3Rpb24gZGlyZWN0bHkuIEkmIzM5O2xsIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgZGV0YWlscyBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX21hcF9nZXRfZnJvbV9mZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTQ2MzQ9c3RhdGljIGludCBicGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDY3Ni1cdGNhc2UgQlBGX1BST0dfVFlQRV9TS19NU0c6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0Njc3Olx0XHRyZXQgPSBzb2NrX21hcF9nZXRfZnJvbV9mZChhdHRyLCBwcm9nKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ2NzgtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDMyMAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEFzc2Vzc21lbnQgb2YgdGhlIFJlbGV2YW50IEZvY3VzIEFyZWFzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGlkZW50aWZpZWQgYSBmZXcga2V5IGZ1bmN0aW9ucyB0byBrZWVwIGluIG1pbmQsIGFuZCB0aG9zZSBhcmU6IGBzb2NrX21hcF9nZXRfZnJvbV9mZGAsIGBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNgLCBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2AsIGFuZCwgbGV0JiMzOTtzIGFkZCBgdGNwX2JwZl9yZWN2bXNnYCB0byB0aGUgbGlzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJlbGF0ZSB0byB0aGUgYmlnZ2VyIHBpY3R1cmUsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIEJQRiBpbnRlZ3JhdGlvbi4KCk5vdywgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIGl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCwgd2hpY2ggaXMgc2VsZWN0ZWQgYnkgdGhlIGZvcm1lciBhbmQgYE5FVGAsIGFuZCBgQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSYCBhcmUgYWxsIGltcG9ydGFudC4gSSBhbHJlYWR5IGNvbmZpcm1lZCB0aGF0IHRoZSBgQlBGX1NUUkVBTV9QQVJTRVJgIG9wdGlvbiAqaXMqIHVzZXItc2VsZWN0YWJsZSwgd2hpY2ggaXMgZ29vZC4gVGhhdCBsaWtlbHkgbWVhbnMgd2UgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSBib3RoIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAgaW4gb3VyIGNvbmZpZy4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBvbmUgdGhpbmcuLi5zcGVjaWZpY2FsbHksIGhvdyBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCBpcyBpbnZva2VkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBjYWxsIHBhdGgsIHBhcnRpY3VsYXJseSBmcm9tIHRoZSBzeXN0ZW0gY2FsbCBwZXJzcGVjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ja19tYXBfdXBkYXRlX2VsZW1fc3lzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9MzY1OT1pbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2NjA6aW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9icGYuaC0zNjYxLWludCBzb2NrX21hcF9icGZfcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM3NDU9c3RhdGljIGlubGluZSBpbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0zNzUwLVxuaW5jbHVkZS9saW51eC9icGYuaDozNzUxOnN0YXRpYyBpbmxpbmUgaW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuaW5jbHVkZS9saW51eC9icGYuaC0zNzUyLVx0XHRcdFx0XHQgICB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjUxPXN0YXRpYyBpbnQgYnBmX21hcF91cGRhdGVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI2NC1cdFx0ICAgbWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TT0NLTUFQKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyNjU6XHRcdHJldHVybiBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMobWFwLCBrZXksIHZhbHVlLCBmbGFncyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yNjYtXHR9IGVsc2UgaWYgKElTX0ZEX1BST0dfQVJSQVkobWFwKSkge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9NTU1PXN0YXRpYyBpbnQgc29ja19oYXNoX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTU3LVxubmV0L2NvcmUvc29ja19tYXAuYzo1NTg6aW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxubmV0L2NvcmUvc29ja19tYXAuYy01NTktXHRcdFx0ICAgICB1NjQgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NDAxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFNvY2ttYXAgVXBkYXRlcyBhbmQgRGF0YSBSZWNlcHRpb24qKgoKT2theSwgc28gYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2AgaXMgZGVmaW5pdGVseSB0aGUga2V5IGZ1bmN0aW9uIGhlcmU7IGl0JiMzOTtzIHRoZSBnYXRld2F5IGZvciB1cGRhdGluZyBhIHNvY2ttYXAgZnJvbSB1c2Vyc3BhY2UsIGFzIGl0JiMzOTtzIGNhbGxlZCBieSBgYnBmX21hcF91cGRhdGVfdmFsdWVgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IEkgbmVlZCB0byBjb25zaWRlci4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGRhdGEgaXMgcmVjZWl2ZWQgb24gYSBzb2NrZXQgbWFuYWdlZCBieSBhIHNvY2ttYXAuIExldCYjMzk7cyBsb29rIGF0IGB0Y3BfYnBmX3JlY3Ztc2dgLiBJcyAqdGhhdCogdGhlIGVudHJ5IHBvaW50IGZvciBgcmVjdm1zZ2Agb3BlcmF0aW9ucyBvbiBhIHNvY2tldCB3aXRoaW4gYSBzb2NrbWFwPyBBaCwgeWVzLCBgdGNwX2JwZl9yZWJ1aWxkX3Byb3Rvc2AgaGFuZGxlcyB0aGF0IGJ5IHN3YXBwaW5nIG91dCB0aGUgc3RhbmRhcmQgYHJlY3Ztc2dgIHdpdGggYHRjcF9icGZfcmVjdm1zZ2Agb3IgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLgoKSG1tLCBob2xkIG9uLiBgdGNwX2JwZl9yZWN2bXNnYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBsaW1pdHMgaXRzIGRpcmVjdCB1c2VmdWxuZXNzIGZvciBteSBwdXJwb3Nlcy4gQXJlIHRoZXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBhdmFpbGFibGUgdGhhdCBjYW4gYmUgbW9yZSBkaXJlY3RseSB1dGlsaXplZD8KCkxldCBtZSBzZWUuLi4gYHRjcF9icGZfdXBkYXRlX3Byb3RvYCBpcyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYywgYW5kIGl0IGhhbmRsZXMgdGhlIGNydWNpYWwgdGFzayBvZiByZXBsYWNpbmcgdGhlIHByb3RvY29sIG9wZXJhdGlvbnMuIFByb21pc2luZy4gQW5kLCBhaCB5ZXMsIGB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrYCBpcyBhbHNvIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkLCBzcGVjaWZpY2FsbHkgdXNlZCBieSB0aGUgYHN0cnBhcnNlcmAgbWVjaGFuaXNtLiBHaXZlbiB0aGF0IGl0IGlzIHVzZWQgYnkgYSBzdHJpbmcgcGFyc2VyLCB0aGF0IHdvdWxkIGxpa2VseSBiZSBhIHZlcnkgZ29vZCBmb2N1cyBzeW1ib2wgYXMgd2VsbC4KClNvLCBlaXRoZXIgYHRjcF9icGZfdXBkYXRlX3Byb3RvYCBvciBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2AgbG9va3MgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgZGVlcCBkaXZlLiBJJiMzOTtsbCBuZWVkIHRvIGV2YWx1YXRlIGVhY2ggdG8gZGV0ZXJtaW5lIHdoaWNoIGlzIG1vcmUgcmVsZXZhbnQgYW5kIGFjdGlvbmFibGUgZm9yIG15IGdvYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYnBmX3VwZGF0ZV9wcm90byYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaD0yODM4PXN0cnVjdCBza19wc29jaztcbi0tXG5pbmNsdWRlL25ldC90Y3AuaC0yODQwLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmluY2x1ZGUvbmV0L3RjcC5oOjI4NDE6aW50IHRjcF9icGZfdXBkYXRlX3Byb3RvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgYm9vbCByZXN0b3JlKTtcbmluY2x1ZGUvbmV0L3RjcC5oLTI4NDItdm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKTtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjkwPWludCB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy03MjQtXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzI1OmludCB0Y3BfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcbm5ldC9pcHY0L3RjcF9icGYuYy03MjYte1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy03NjEtfVxubmV0L2lwdjQvdGNwX2JwZi5jOjc2MjpFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3VwZGF0ZV9wcm90byk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNzYzLVxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzM0OD1zdHJ1Y3QgcHJvdG8gdGNwX3Byb3QgPSB7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzczLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzM3NDpcdC5wc29ja191cGRhdGVfc2tfcHJvdFx0PSB0Y3BfYnBmX3VwZGF0ZV9wcm90byxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM3NS0jZW5kaWZcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTIyNzY9c3RydWN0IHByb3RvIHRjcHY2X3Byb3QgPSB7XG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzAxLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MjMwMjpcdC5wc29ja191cGRhdGVfc2tfcHJvdFx0PSB0Y3BfYnBmX3VwZGF0ZV9wcm90byxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMwMy0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY2MjIKCQkJCQkJCW91dHB1dDogMjI4CgkJCQkJCQl0aG91Z2h0czogNTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgU29ja21hcCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgdGNwX2JwZl91cGRhdGVfcHJvdG9gIGlzIGEga2V5IGZvY3VzIHN5bWJvbCwgZXNwZWNpYWxseSBzaW5jZSBpdCBnZXRzIGNhbGxlZCB3aGVuIGEgc29ja2V0IGlzIGFkZGVkIHRvIGEgc29ja21hcC4gVGhhdCBzdWdnZXN0cyBhIGNyaXRpY2FsIHBvaW50IG9mIGludGVncmF0aW9uLgoKSGVyZSYjMzk7cyBteSBzdW1tYXJ5OiBUaGlzIHBhdGNoIGlzIGEgZml4IGZvciBhIG1lbW9yeSBhY2NvdW50aW5nIGlzc3VlIHdpdGhpbiB0aGUgQlBGIHNvY2ttYXAgaW5mcmFzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgaXQgYWRkcmVzc2VzIGEgc2NlbmFyaW8gd2hlcmUgYHNrX2ZvcndhcmRfYWxsb2NgIGlzbiYjMzk7dCBjb3JyZWN0bHkgaGFuZGxlZCB3aGVuIGEgYHN0cnBhcnNlcmAgQlBGIHByb2dyYW0gcmV0dXJucyBgU0tfUEFTU2Agb24gYSBzb2NrZXQgYW5kIHRoZSByZXN1bHRpbmcgc2tiIGlzIGRlbGl2ZXJlZCBiYWNrIHRvIHRoZSBzYW1lIHNvY2tldCYjMzk7cyBpbmdyZXNzIHF1ZXVlLiBUaGlzIGlzIGEgY2xhc3NpYyBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgc2l0dWF0aW9uLiBUaGUgaW50cm9kdWNlZCBzb2x1dGlvbiwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduYCwgYWltcyB0byBzZXR0bGUgYW55IHByZS1leGlzdGluZyBmb3J3YXJkIGFsbG9jYXRpb24gZGVmaWNpdCBiZWZvcmUgcmVjZWl2ZSBvd25lcnNoaXAgaXMgZ3JhbnRlZCwgd2hpY2ggc2VlbXMgbGlrZSB0aGUgcmlnaHQgYXBwcm9hY2guCgpUaGlzIGNoYW5nZSBpcyBmdW5kYW1lbnRhbGx5IGZ1bmN0aW9uYWwsIHRvdWNoaW5nIGNvcmUgQlBGIGFuZCBuZXR3b3JraW5nIGNvZGUsIGFuZCB0aGF0IG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY29kZSBwYXRoIGlzIHJvYnVzdCBhbmQgY29ycmVjdC4gSSYjMzk7bGwgbmVlZCB0byBzdHJlc3MgdGVzdCB0aGlzIHVuZGVyIG1hbnkgbmV0d29yayBjb25kaXRpb25zIGFuZCB2YXJpb3VzIEJQRiBwcm9ncmFtcy4KClRoZSBpbXBvcnRhbnQgZm9jdXMgc3ltYm9scyBhcmU6CiogICBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYAoqICAgYHNvY2tfbWFwX2dldF9mcm9tX2ZkYAoqICAgYHRjcF9icGZfdXBkYXRlX3Byb3RvYAoqICAgYHRjcF9icGZfc3RycF9yZWFkX3NvY2tgCgpBcyBmb3IgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucywgaXQgbG9va3MgbGlrZSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX1NUUkVBTV9QQVJTRVJgIGFyZSBzdWZmaWNpZW50LiBgQ09ORklHX05FVF9TT0NLX01TR2AgYW5kIGBDT05GSUdfU1RSRUFNX1BBUlNFUmAgYXJlIHByb3Blcmx5IHNlbGVjdGVkIGJ5IHRob3NlLiBJIGRvbiYjMzk7dCBzZWUgYW55IG90aGVyIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4KCk15IGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGRpcmVjdGx5IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBpbiBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGtlcm5lbCYjMzk7cyBCUEYgbmV0d29ya2luZyBzdGFjay4gR29vZCBjYXRjaC4gTGV0JiMzOTtzIGdldCB0byB0ZXN0aW5nIGFuZCB2ZXJpZnkgdGhpcyBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfU1RSRUFNX1BBUlNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9nZXRfZnJvbV9mZCYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3VwZGF0ZV9wcm90byYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc29ja21hcCBpbmZyYXN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGhvdyBgc2tfZm9yd2FyZF9hbGxvY2AgbWVtb3J5IGFjY291bnRpbmcgaXMgaGFuZGxlZCB3aGVuIGEgc3RyZWFtIHBhcnNlciAoc3RycGFyc2VyKSBwcm9ncmFtIHJldHVybnMgYFNLX1BBU1NgIGFuZCB0aGUgc2tiIGlzIGRlbGl2ZXJlZCB0byB0aGUgc2FtZSBzb2NrZXQmIzM5O3MgaW5ncmVzcyBxdWV1ZS4gSXQgaW50cm9kdWNlcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gIHRvIHNldHRsZSBhbnkgZXhpc3RpbmcgYHNrX2ZvcndhcmRfYWxsb2NgIGRlZmljaXQgYmVmb3JlIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcCB0byB0aGUgc2tiLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc29ja21hcCBhbmQgc3RyZWFtIHBhcnNlcikgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG1lbW9yeSBhY2NvdW50aW5nIHJlbWFpbnMgY29ycmVjdCB1bmRlciB2YXJpb3VzIG5ldHdvcmsgY29uZGl0aW9ucyBhbmQgQlBGIHByb2dyYW0gYmVoYXZpb3JzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfU1RSRUFNX1BBUlNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9nZXRfZnJvbV9mZCYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3VwZGF0ZV9wcm90byYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc29ja21hcCBpbmZyYXN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGhvdyBgc2tfZm9yd2FyZF9hbGxvY2AgbWVtb3J5IGFjY291bnRpbmcgaXMgaGFuZGxlZCB3aGVuIGEgc3RyZWFtIHBhcnNlciAoc3RycGFyc2VyKSBwcm9ncmFtIHJldHVybnMgYFNLX1BBU1NgIGFuZCB0aGUgc2tiIGlzIGRlbGl2ZXJlZCB0byB0aGUgc2FtZSBzb2NrZXQmIzM5O3MgaW5ncmVzcyBxdWV1ZS4gSXQgaW50cm9kdWNlcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gIHRvIHNldHRsZSBhbnkgZXhpc3RpbmcgYHNrX2ZvcndhcmRfYWxsb2NgIGRlZmljaXQgYmVmb3JlIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcCB0byB0aGUgc2tiLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc29ja21hcCBhbmQgc3RyZWFtIHBhcnNlcikgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG1lbW9yeSBhY2NvdW50aW5nIHJlbWFpbnMgY29ycmVjdCB1bmRlciB2YXJpb3VzIG5ldHdvcmsgY29uZGl0aW9ucyBhbmQgQlBGIHByb2dyYW0gYmVoYXZpb3JzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBpc3N1ZSB3aXRoIHNvY2tldCBtZW1vcnkgYWNjb3VudGluZyAoYHNrX2ZvcndhcmRfYWxsb2NgKSB3aGVuIGFuIHNrYiBpcyBwYXNzZWQgdG8gdGhlIHNhbWUgc29ja2V0IHZpYSBCUEYgc3RyZWFtIHBhcnNlci92ZXJkaWN0LiBJdCBpbnRyb2R1Y2VzIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbmAgdG8gcHJvcGVybHkgaGFuZGxlIGBza19ybWVtX3NjaGVkdWxlYCBhbmQgYHNrYl9zZXRfb3duZXJfcmAuIFRoZSBjaGFuZ2VzIGludm9sdmUgbWVtb3J5IGFjY291bnRpbmcsIGxvY2tpbmcsIGFuZCBzYXZpbmcvcmVzdG9yaW5nIGBza2ItXHUwMDNlX3NrX3JlZGlyYC4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgbm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGNvbnRhaW4gdW5pbml0aWFsaXplZCBmaWVsZHMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgbG9naWMgZXJyb3JzLCBtZW1vcnkgbGVha3MsIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGIwZThjZjhiMzIxZGY4OGMwMjZkYWVhNTc2NDkxZmNhNWM3MzZlMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDE2OjQ0OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2ttc2cuYyBiL25ldC9jb3JlL3NrbXNnLmMKaW5kZXggMjUyMWI2NDNmYTA1ZC4uMzQ3Y2IxNjhmNzQ5MSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2ttc2cuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za21zZy5jCkBAIC01ODYsMjEgJiM0Mzs1ODYsMjQgQEAgc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsCiB9CiAKIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZik7CiYjNDM7CQkJCSAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZiwKJiM0MzsJCQkJICAgICBib29sIHNldHRsZV9md2RfYWxsb2MpOwomIzQzO3N0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHN0cnVjdCBza19wc29jayAqcHNvY2ssCiYjNDM7CQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCQkgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsCiYjNDM7CQkJCQkgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYyk7CiAKIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQl1MzIgb2ZmLCB1MzIgbGVuKQomIzQzOwkJCQl1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHNldHRsZV9md2RfYWxsb2MpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gcHNvY2stJmd0O3NrOwogCXN0cnVjdCBza19tc2cgKm1zZzsKIAlpbnQgZXJyOwogCi0JLyogSWYgd2UgYXJlIHJlY2VpdmluZyBvbiB0aGUgc2FtZSBzb2NrIHNrYi0mZ3Q7c2sgaXMgYWxyZWFkeSBhc3NpZ25lZCwKLQkgKiBza2lwIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBvd25lciB0cmFuc2l0aW9uIHNlZWluZyBpdCBhbHJlYWR5IHNldAotCSAqIGNvcnJlY3RseS4KLQkgKi8KIAlpZiAodW5saWtlbHkoc2tiLSZndDtzayA9PSBzaykpCi0JCXJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCB0cnVlKTsKJiM0MzsJCXJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2cocHNvY2ssIHNrYiwgb2ZmLAomIzQzOwkJCQkJCQkgbGVuLCB0cnVlLAomIzQzOwkJCQkJCQkgc2V0dGxlX2Z3ZF9hbGxvYyk7CiAJbXNnID0gc2tfcHNvY2tfY3JlYXRlX2luZ3Jlc3NfbXNnKHNrLCBza2IpOwogCWlmICghbXNnKQogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTYxOCwzNCAmIzQzOzYyMSwxMDAgQEAgc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXJldHVybiBlcnI7CiB9CiAKLS8qIFB1dHMgYW4gc2tiIG9uIHRoZSBpbmdyZXNzIHF1ZXVlIG9mIHRoZSBzb2NrZXQgYWxyZWFkeSBhc3NpZ25lZCB0byB0aGUKLSAqIHNrYi4gSW4gdGhpcyBjYXNlIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIG1lbW9yeSBsaW1pdHMgb3Igc2tiX3NldF9vd25lcl9yCi0gKiBiZWNhdXNlIHRoZSBza2IgaXMgYWxyZWFkeSBhY2NvdW50ZWQgZm9yIGhlcmUuCiYjNDM7c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbihzdHJ1Y3Qgc29jayAqc2ssCiYjNDM7CQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJCSAgICBib29sIHNldHRsZV9md2RfYWxsb2MpCiYjNDM7ewomIzQzOwkvKiBMZWF2ZSBza2JzIGFscmVhZHkgcmVjZWl2ZS1hY2NvdW50ZWQgdG8gc2sgdW50b3VjaGVkLiAqLwomIzQzOwlpZiAoc2tiLSZndDtzayA9PSBzayAmYW1wOyZhbXA7IHNrYi0mZ3Q7ZGVzdHJ1Y3RvciA9PSBzb2NrX3JmcmVlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChzZXR0bGVfZndkX2FsbG9jKSB7CiYjNDM7CQlzb2NrX293bmVkX2J5X21lKHNrKTsKJiM0MzsKJiM0MzsJCWlmICghc2tfcm1lbV9zY2hlZHVsZShzaywgc2tiLCAwKSkKJiM0MzsJCQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsJfQomIzQzOwomIzQzOwlza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBQdXRzIGFuIHNrYiBvbiB0aGUgaW5ncmVzcyBxdWV1ZSBmb3IgcHNvY2stJmd0O3NrLgomIzQzOyAqCiYjNDM7ICogSWYgdGhlIHNrYiBhbHJlYWR5IGhhcyByZWNlaXZlIG93bmVyc2hpcCBmb3IgdGhpcyBzb2NrZXQsIGxlYXZlIHNvY2tldAomIzQzOyAqIG1lbW9yeSBhY2NvdW50aW5nIHVudG91Y2hlZC4gT3RoZXJ3aXNlLCBiZWZvcmUgYXNzaWduaW5nIHJlY2VpdmUgb3duZXJzaGlwCiYjNDM7ICogdG8gYW4gdW5vd25lZCBzdHJwYXJzZXIgU0tfUEFTUyBza2IsIHNldHRsZSBhbnkgZXhpc3Rpbmcgc2tfZm9yd2FyZF9hbGxvYwomIzQzOyAqIGRlZmljaXQgZnJvbSBlYXJsaWVyIGNsb25lIGNoYXJnZXMuCiAgKi8KIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZikKJiM0MzsJCQkJICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLAomIzQzOwkJCQkgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYykKIHsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gcHNvY2stJmd0O3NrOwogCXN0cnVjdCBza19tc2cgKm1zZyA9IGFsbG9jX3NrX21zZyhHRlBfQVRPTUlDKTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KCFtc2cpKQomIzQzOwkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CiYjNDM7CWVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduKHNrLCBza2IsIHNldHRsZV9md2RfYWxsb2MpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBmcmVlOwomIzQzOwomIzQzOwkvKiBUaGlzIGlzIHVzZWQgaW4gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZQomIzQzOwkgKiBkYXRhIG9yaWdpbmF0ZXMgZnJvbSB0aGUgc29ja2V0JiMzOTtzIG93biBwcm90b2NvbCBzdGFjay4gTm8gbmVlZCB0bwomIzQzOwkgKiByZWZjb3VudCBzayBiZWNhdXNlIG1zZyYjMzk7cyBsaWZldGltZSBpcyBib3VuZCB0byBzayB2aWEgdGhlIGluZ3Jlc3NfbXNnLgomIzQzOwkgKi8KJiM0MzsJbXNnLSZndDtzayA9IHNrOwomIzQzOwllcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLAomIzQzOwkJCQkJICAgdGFrZV9yZWYpOwomIzQzOwlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCWdvdG8gZnJlZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0MztmcmVlOgomIzQzOwlrZnJlZShtc2cpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYmFja2xvZyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLAomIzQzOwkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkJICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLAomIzQzOwkJCQkJICAgICBib29sIHNldHRsZV9md2RfYWxsb2MpCiYjNDM7ewogCXN0cnVjdCBzb2NrICpzayA9IHBzb2NrLSZndDtzazsKJiM0MzsJc3RydWN0IHNrX21zZyAqbXNnID0gYWxsb2Nfc2tfbXNnKEdGUF9BVE9NSUMpOwogCWludCBlcnI7CiAKIAlpZiAodW5saWtlbHkoIW1zZykpCiAJCXJldHVybiAtRUFHQUlOOwotCXNrYl9zZXRfb3duZXJfcihza2IsIHNrKTsKJiM0MzsKJiM0MzsJbG9ja19zb2NrKHNrKTsKJiM0MzsJZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ24oc2ssIHNrYiwgc2V0dGxlX2Z3ZF9hbGxvYyk7CiYjNDM7CXJlbGVhc2Vfc29jayhzayk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGZyZWU7CiAKIAkvKiBUaGlzIGlzIHVzZWQgaW4gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZQogCSAqIGRhdGEgb3JpZ2luYXRlcyBmcm9tIHRoZSBzb2NrZXQmIzM5O3Mgb3duIHByb3RvY29sIHN0YWNrLiBObyBuZWVkIHRvCiAJICogcmVmY291bnQgc2sgYmVjYXVzZSBtc2cmIzM5O3MgbGlmZXRpbWUgaXMgYm91bmQgdG8gc2sgdmlhIHRoZSBpbmdyZXNzX21zZy4KIAkgKi8KIAltc2ctJmd0O3NrID0gc2s7Ci0JZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShza2IsIG9mZiwgbGVuLCBwc29jaywgc2ssIG1zZywgdGFrZV9yZWYpOwomIzQzOwllcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLAomIzQzOwkJCQkJICAgdGFrZV9yZWYpOwogCWlmIChlcnIgJmx0OyAwKQotCQlrZnJlZShtc2cpOwomIzQzOwkJZ290byBmcmVlOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO2ZyZWU6CiYjNDM7CWtmcmVlKG1zZyk7CiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBza19wc29ja19oYW5kbGVfc2tiKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCBpbmdyZXNzKQomIzQzOwkJCSAgICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIGluZ3Jlc3MsCiYjNDM7CQkJICAgICAgIGJvb2wgc2VsZl9wYXNzLCBib29sIHN0cnBhcnNlcikKIHsKIAlpZiAoIWluZ3Jlc3MpIHsKIAkJaWYgKCFzb2NrX3dyaXRlYWJsZShwc29jay0mZ3Q7c2spKQpAQCAtNjUzLDcgJiM0Mzs3MjIsMTEgQEAgc3RhdGljIGludCBza19wc29ja19oYW5kbGVfc2tiKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCXJldHVybiBza2Jfc2VuZF9zb2NrKHBzb2NrLSZndDtzaywgc2tiLCBvZmYsIGxlbik7CiAJfQogCi0JcmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHBzb2NrLCBza2IsIG9mZiwgbGVuKTsKJiM0MzsJaWYgKHNlbGZfcGFzcykKJiM0MzsJCXJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2cocHNvY2ssIHNrYiwgb2ZmLAomIzQzOwkJCQkJCQkgbGVuLCB0cnVlLCBzdHJwYXJzZXIpOwomIzQzOwomIzQzOwlyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3MocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHN0cnBhcnNlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHNrX3Bzb2NrX3NrYl9zdGF0ZShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLApAQCAtNjk0LDkgJiM0Mzs3NjcsMTQgQEAgc3RhdGljIHZvaWQgc2tfcHNvY2tfYmFja2xvZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCXJldHVybjsKIAltdXRleF9sb2NrKCZhbXA7cHNvY2stJmd0O3dvcmtfbXV0ZXgpOwogCXdoaWxlICgoc2tiID0gc2tiX3BlZWsoJmFtcDtwc29jay0mZ3Q7aW5ncmVzc19za2IpKSkgewomIzQzOwkJdW5zaWduZWQgbG9uZyBzYXZlZF9yZWRpcjsKJiM0MzsJCWJvb2wgc3RycGFyc2VyOwomIzQzOwkJYm9vbCBzZWxmX3Bhc3M7CiYjNDM7CiAJCWxlbiA9IHNrYi0mZ3Q7bGVuOwogCQlvZmYgPSAwOwotCQlpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkgewomIzQzOwkJc3RycGFyc2VyID0gc2tiX2JwZl9zdHJwYXJzZXIoc2tiKTsKJiM0MzsJCWlmIChzdHJwYXJzZXIpIHsKIAkJCXN0cnVjdCBzdHJwX21zZyAqc3RtID0gc3RycF9tc2coc2tiKTsKIAogCQkJb2ZmID0gc3RtLSZndDtvZmZzZXQ7CkBAIC03MTAsMTcgJiM0Mzs3ODgsMjAgQEAgc3RhdGljIHZvaWQgc2tfcHNvY2tfYmFja2xvZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCX0KIAogCQlpbmdyZXNzID0gc2tiX2JwZl9pbmdyZXNzKHNrYik7CiYjNDM7CQlzZWxmX3Bhc3MgPSBpbmdyZXNzICZhbXA7JmFtcDsgIXNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKTsKJiM0MzsJCXNhdmVkX3JlZGlyID0gc2tiLSZndDtfc2tfcmVkaXI7CiAJCXNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTsKIAkJZG8gewogCQkJcmV0ID0gLUVJTzsKIAkJCWlmICghc29ja19mbGFnKHBzb2NrLSZndDtzaywgU09DS19ERUFEKSkKIAkJCQlyZXQgPSBza19wc29ja19oYW5kbGVfc2tiKHBzb2NrLCBza2IsIG9mZiwKLQkJCQkJCQkgIGxlbiwgaW5ncmVzcyk7CiYjNDM7CQkJCQkJCSAgbGVuLCBpbmdyZXNzLAomIzQzOwkJCQkJCQkgIHNlbGZfcGFzcywgc3RycGFyc2VyKTsKIAkJCWlmIChyZXQgJmx0Oz0gMCkgewogCQkJCWlmIChyZXQgPT0gLUVBR0FJTikgewogCQkJCQlza19wc29ja19za2Jfc3RhdGUocHNvY2ssIHN0YXRlLCBsZW4sIG9mZik7CiAJCQkJCS8qIFJlc3RvcmUgcmVkaXIgaW5mbyB3ZSBjbGVhcmVkIGJlZm9yZSAqLwotCQkJCQlza2JfYnBmX3NldF9yZWRpcihza2IsIHBzb2NrLSZndDtzaywgaW5ncmVzcyk7CiYjNDM7CQkJCQlza2ItJmd0O19za19yZWRpciA9IHNhdmVkX3JlZGlyOwogCQkJCQkvKiBEZWxheSBzbGlnaHRseSB0byBwcmlvcml0aXplIGFueQogCQkJCQkgKiBvdGhlciB3b3JrIHRoYXQgbWlnaHQgYmUgaGVyZS4KIAkJCQkJICovCkBAIC0xMDE3LDYgJiM0MzsxMDk4LDggQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLgogCQkgKi8KIAkJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmYW1wO3Bzb2NrLSZndDtpbmdyZXNzX3NrYikpIHsKJiM0MzsJCQlib29sIHNldHRsZV9md2RfYWxsb2MgPSBmYWxzZTsKJiM0MzsKIAkJCWxlbiA9IHNrYi0mZ3Q7bGVuOwogCQkJb2ZmID0gMDsKIAkJCWlmIChza2JfYnBmX3N0cnBhcnNlcihza2IpKSB7CkBAIC0xMDI0LDggJiM0MzsxMTA3LDEwIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJCQkJb2ZmID0gc3RtLSZndDtvZmZzZXQ7CiAJCQkJbGVuID0gc3RtLSZndDtmdWxsX2xlbjsKJiM0MzsJCQkJc2V0dGxlX2Z3ZF9hbGxvYyA9IHRydWU7CiAJCQl9Ci0JCQllcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBmYWxzZSk7CiYjNDM7CQkJZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwKJiM0MzsJCQkJCQkJZmFsc2UsIHNldHRsZV9md2RfYWxsb2MpOwogCQl9CiAJCWlmIChlcnIgJmx0OyAwKSB7CiAJCQlzcGluX2xvY2tfYmgoJmFtcDtwc29jay0mZ3Q7aW5ncmVzc19sb2NrKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMKaW5kZXggMWQ3MjMxNzI4ZWFmZC4uYzdhZDIxZDBiYmY0OSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMKQEAgLTEsNSAmIzQzOzEsOSBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKICNpbmNsdWRlICZsdDtlcnJvci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbmV0X2RpYWcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0bGluay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ydG5ldGxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc29ja19kaWFnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0aW5ldC90Y3AuaCZndDsKICNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3NvY2ttYXBfaGVscGVycy5oJiMzNDsKQEAgLTQ2MCw2ICYjNDM7NDY0LDE3MSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KHZvaWQpCiAJdGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7CiB9CiAKJiM0MzsvKiBSZWFkIHNrX2ZvcndhcmRfYWxsb2MgdGhyb3VnaCBpbmV0X2RpYWcgbWVtaW5mby4gKi8KJiM0MztzdGF0aWMgaW50IHNvY2ttYXBfc3RycF9nZXRfZndkX2FsbG9jKGludCBzb2NrLCBpbnQgKmZ3ZF9hbGxvYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGxvY2FsID0ge30sIHBlZXIgPSB7fTsKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luICpsb2NhbF9pbiwgKnBlZXJfaW47CiYjNDM7CXNvY2tsZW5fdCBhZGRyX2xlbiA9IHNpemVvZihsb2NhbCk7CiYjNDM7CWNoYXIgYnVmWzEwMjRdOwomIzQzOwlzdHJ1Y3QgewomIzQzOwkJc3RydWN0IG5sbXNnaGRyIG5saDsKJiM0MzsJCXN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyIHJlcTsKJiM0MzsJfSByZXEgPSB7CiYjNDM7CQkubmxoID0gewomIzQzOwkJCS5ubG1zZ19sZW4gPSBzaXplb2YocmVxKSwKJiM0MzsJCQkubmxtc2dfdHlwZSA9IFNPQ0tfRElBR19CWV9GQU1JTFksCiYjNDM7CQkJLm5sbXNnX2ZsYWdzID0gTkxNX0ZfUkVRVUVTVCwKJiM0MzsJCQkubmxtc2dfc2VxID0gMSwKJiM0MzsJCX0sCiYjNDM7CQkucmVxID0gewomIzQzOwkJCS5zZGlhZ19mYW1pbHkgPSBBRl9JTkVULAomIzQzOwkJCS5zZGlhZ19wcm90b2NvbCA9IElQUFJPVE9fVENQLAomIzQzOwkJCS5pZGlhZ19leHQgPSAxICZsdDsmbHQ7IChJTkVUX0RJQUdfTUVNSU5GTyAtIDEpLAomIzQzOwkJCS5pZGlhZ19zdGF0ZXMgPSB+MFUsCiYjNDM7CQkJLmlkLmlkaWFnX2Nvb2tpZSA9IHsKJiM0MzsJCQkJSU5FVF9ESUFHX05PQ09PS0lFLAomIzQzOwkJCQlJTkVUX0RJQUdfTk9DT09LSUUsCiYjNDM7CQkJfSwKJiM0MzsJCX0sCiYjNDM7CX07CiYjNDM7CWludCBkaWFnX2ZkLCByZXQsIGVyciA9IC1FTk9FTlQ7CiYjNDM7CiYjNDM7CWlmIChnZXRzb2NrbmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDtsb2NhbCwgJmFtcDthZGRyX2xlbikpCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwlhZGRyX2xlbiA9IHNpemVvZihwZWVyKTsKJiM0MzsJaWYgKGdldHBlZXJuYW1lKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYW1wO3BlZXIsICZhbXA7YWRkcl9sZW4pKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsKJiM0MzsJbG9jYWxfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopJmFtcDtsb2NhbDsKJiM0MzsJcGVlcl9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmYW1wO3BlZXI7CiYjNDM7CXJlcS5yZXEuaWQuaWRpYWdfc3BvcnQgPSBsb2NhbF9pbi0mZ3Q7c2luX3BvcnQ7CiYjNDM7CXJlcS5yZXEuaWQuaWRpYWdfZHBvcnQgPSBwZWVyX2luLSZndDtzaW5fcG9ydDsKJiM0MzsJcmVxLnJlcS5pZC5pZGlhZ19zcmNbMF0gPSBsb2NhbF9pbi0mZ3Q7c2luX2FkZHIuc19hZGRyOwomIzQzOwlyZXEucmVxLmlkLmlkaWFnX2RzdFswXSA9IHBlZXJfaW4tJmd0O3Npbl9hZGRyLnNfYWRkcjsKJiM0MzsKJiM0MzsJZGlhZ19mZCA9IHNvY2tldChBRl9ORVRMSU5LLCBTT0NLX1JBVyB8IFNPQ0tfQ0xPRVhFQywKJiM0MzsJCQkgTkVUTElOS19TT0NLX0RJQUcpOwomIzQzOwlpZiAoZGlhZ19mZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwomIzQzOwlyZXQgPSBzZW5kKGRpYWdfZmQsICZhbXA7cmVxLCBzaXplb2YocmVxKSwgMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQllcnIgPSAtZXJybm87CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwlpZiAocmV0ICE9IHNpemVvZihyZXEpKSB7CiYjNDM7CQllcnIgPSAtRUlPOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gcmVjdihkaWFnX2ZkLCBidWYsIHNpemVvZihidWYpLCAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCWVyciA9IC1lcnJubzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoc3RydWN0IG5sbXNnaGRyICpubGggPSAoc3RydWN0IG5sbXNnaGRyICopYnVmOwomIzQzOwkgICAgIE5MTVNHX09LKG5saCwgcmV0KTsgbmxoID0gTkxNU0dfTkVYVChubGgsIHJldCkpIHsKJiM0MzsJCXN0cnVjdCBpbmV0X2RpYWdfbXNnICptc2cgPSBOTE1TR19EQVRBKG5saCk7CiYjNDM7CQlzdHJ1Y3QgcnRhdHRyICphdHRyOwomIzQzOwkJaW50IGxlbjsKJiM0MzsKJiM0MzsJCWlmIChubGgtJmd0O25sbXNnX3R5cGUgPT0gTkxNU0dfRVJST1IpIHsKJiM0MzsJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwkJaWYgKG5saC0mZ3Q7bmxtc2dfdHlwZSA9PSBOTE1TR19ET05FKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJbGVuID0gbmxoLSZndDtubG1zZ19sZW4gLSBOTE1TR19MRU5HVEgoc2l6ZW9mKCptc2cpKTsKJiM0MzsJCWZvciAoYXR0ciA9IChzdHJ1Y3QgcnRhdHRyICopKG1zZyAmIzQzOyAxKTsgUlRBX09LKGF0dHIsIGxlbik7CiYjNDM7CQkgICAgIGF0dHIgPSBSVEFfTkVYVChhdHRyLCBsZW4pKSB7CiYjNDM7CQkJc3RydWN0IGluZXRfZGlhZ19tZW1pbmZvICptaW5mbzsKJiM0MzsKJiM0MzsJCQlpZiAoYXR0ci0mZ3Q7cnRhX3R5cGUgIT0gSU5FVF9ESUFHX01FTUlORk8pCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCW1pbmZvID0gUlRBX0RBVEEoYXR0cik7CiYjNDM7CQkJKmZ3ZF9hbGxvYyA9IChfX3MzMiltaW5mby0mZ3Q7aWRpYWdfZm1lbTsKJiM0MzsJCQllcnIgPSAwOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7b3V0OgomIzQzOwljbG9zZShkaWFnX2ZkKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGVzdCBzdHJwYXJzZXIgU0tfUEFTUyBkZWxpdmVyeSB0byB0aGUgc2FtZSBzb2NrZXQuICovCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnBfc2VsZl9wYXNzX2Z3ZF9hbGxvYyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHRlc3Rfc29ja21hcF9zdHJwICpzdHJwID0gTlVMTDsKJiM0MzsJY2hhciBzbmRbNCAqIDEwMjRdOwomIzQzOwlpbnQgYyA9IC0xLCBwID0gLTE7CiYjNDM7CWludCBmd2RfYWxsb2M7CiYjNDM7CWludCBzbmRidWYgPSBzaXplb2Yoc25kKTsKJiM0MzsJaW50IHplcm8gPSAwOwomIzQzOwljaGFyIHJjdjsKJiM0MzsJaW50IHNlbnQsIHJlY3ZkOwomIzQzOwlpbnQgbWFwOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwltZW1zZXQoc25kLCAweGE1LCBzaXplb2Yoc25kKSk7CiYjNDM7CiYjNDM7CXN0cnAgPSB0ZXN0X3NvY2ttYXBfc3RycF9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc3RycCwgJiMzNDt0ZXN0X3NvY2ttYXBfc3RycF9fb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbWFwID0gYnBmX21hcF9fZmQoc3RycC0mZ3Q7bWFwcy5zb2NrX21hcCk7CiYjNDM7CWVyciA9IHhicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHN0cnAtJmd0O3Byb2dzLnByb2dfc2tiX3BhcnNlcl9vbmUpLAomIzQzOwkJCSAgICAgICBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIG91dF9kZXN0cm95OwomIzQzOwomIzQzOwllcnIgPSB4YnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChzdHJwLSZndDtwcm9ncy5wcm9nX3NrYl92ZXJkaWN0X3Bhc3MpLAomIzQzOwkJCSAgICAgICBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QsIDApOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJZXJyID0gY3JlYXRlX3BhaXIoQUZfSU5FVCwgU09DS19TVFJFQU0sICZhbXA7YywgJmFtcDtwKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2NyZWF0ZV9wYWlyJiMzNDspKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJZXJyID0geHNldHNvY2tvcHQoYywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCAmYW1wO3NuZGJ1Ziwgc2l6ZW9mKHNuZGJ1ZikpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJZXJyID0geHNldHNvY2tvcHQocCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmYW1wO3NuZGJ1Ziwgc2l6ZW9mKHNuZGJ1ZikpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJZXJyID0geGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwLCAmYW1wO3plcm8sICZhbXA7cCwgQlBGX05PRVhJU1QpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJc2VudCA9IHNlbmQoYywgc25kLCBzaXplb2Yoc25kKSwgTVNHX0RPTlRXQUlUKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoc2VudCwgc2l6ZW9mKHNuZCksICYjMzQ7c2VuZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2Rlc3Ryb3k7CiYjNDM7CiYjNDM7CXJlY3ZkID0gcmVjdl90aW1lb3V0KHAsICZhbXA7cmN2LCBzaXplb2YocmN2KSwgTVNHX0RPTlRXQUlULAomIzQzOwkJCSAgICAgSU9fVElNRU9VVF9TRUMpOwomIzQzOwlpZiAoIUFTU0VSVF9FUShyZWN2ZCwgc2l6ZW9mKHJjdiksICYjMzQ7cmVjdl90aW1lb3V0JiMzNDspIHx8CiYjNDM7CSAgICAhQVNTRVJUX0VRKHJjdiwgc25kWzBdLCAmIzM0O2RhdGEgbWlzbWF0Y2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXN0cm95OwomIzQzOwomIzQzOwllcnIgPSBzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvYyhwLCAmYW1wO2Z3ZF9hbGxvYyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvYyYjMzQ7KSB8fAomIzQzOwkgICAgIUFTU0VSVF9HRShmd2RfYWxsb2MsIDAsICYjMzQ7c2tfZm9yd2FyZF9hbGxvYyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2Rlc3Ryb3k7CiYjNDM7b3V0X2Rlc3Ryb3k6CiYjNDM7CXRlc3Rfc29ja21hcF9zdHJwX19kZXN0cm95KHN0cnApOwomIzQzOwlpZiAoYyAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoYyk7CiYjNDM7CWlmIChwICZndDs9IDApCiYjNDM7CQljbG9zZShwKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHRlc3Rfc29ja21hcF9zdHJwKHZvaWQpCiB7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzb2NrbWFwIHN0cnAgdGNwIHBhc3MmIzM0OykpCkBAIC00ODIsNCAmIzQzOzY1MSw2IEBAIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnAodm9pZCkKIAkJdGVzdF9zb2NrbWFwX3N0cnBfZGlzcGF0Y2hfcGt0KEFGX0lORVQsIFNPQ0tfU1RSRUFNKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3NvY2ttYXAgc3RycCBwYXJzZXIgcmVqZWN0IHBrdCBtb2QmIzM0OykpCiAJCXRlc3Rfc29ja21hcF9zdHJwX3BhcnNlcl9yZWplY3QoKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzb2NrbWFwIHN0cnAgc2VsZiBwYXNzIGZ3ZCBhbGxvYyYjMzQ7KSkKJiM0MzsJCXRlc3Rfc29ja21hcF9zdHJwX3NlbGZfcGFzc19md2RfYWxsb2MoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMKaW5kZXggZmU4OGZhNmQ0MGJjNS4uNjgyZTUzZDQwNzUxYyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMKQEAgLTUwLDYgJiM0Mzs1MCwxMiBAQCBpbnQgcHJvZ19za2JfcGFyc2VyX3BhcnRpYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogCXJldHVybiAxMDsKIH0KIAomIzQzO1NFQygmIzM0O3NrX3NrYi9zdHJlYW1fcGFyc2VyJiMzNDspCiYjNDM7aW50IHByb2dfc2tiX3BhcnNlcl9vbmUoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJcmV0dXJuIDE7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7c2tfc2tiL3N0cmVhbV9wYXJzZXImIzM0OykKIGludCBwcm9nX3NrYl9wYXJzZXJfcmVzaXplKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNzgKCQkJCQkJCW91dHB1dDogMjA2CgkJCQkJCQl0aG91Z2h0czogMTU1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBTS01TRyBDaGFuZ2VzIGZvciBTb2NrZXQgTWVtb3J5IEFjY291bnRpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCwgdG91Y2hpbmcgYG5ldC9jb3JlL3NrbXNnLmNgIGFuZCBhZGRpbmcgYSB0ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY2AsIGlzIGxpa2VseSAqbm90KiBhIEtNU0FOIGNvbmNlcm4uIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHNlZW0gdG8gcmV2b2x2ZSBhcm91bmQgY29ycmVjdGluZyBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBza19mb3J3YXJkX2FsbG9jYCwgd2hlbiBhbiBgc2tiYCBpcyByb3V0ZWQgYmFjayB0byB0aGUgc2FtZSBzb2NrZXQgdmlhIEJQRiBzdHJlYW0gcGFyc2luZy4gVGhpcyBpbnZvbHZlcyBtb2RpZmljYXRpb25zIHRvIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYmFja2xvZ2AsIGFuZCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gLgoKTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhIEtNU0FOIGV4cGVydCwgaXMgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IHJpc2tzIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3MgZGlnIGluOiBUaGUgaW50cm9kdWN0aW9uIG9mIGBzZXR0bGVfZndkX2FsbG9jYCBhbmQgdGhlIGNhbGxzIHRvIGBza19ybWVtX3NjaGVkdWxlKHNrLCBza2IsIDApYCBhbmQgYHNrYl9zZXRfb3duZXJfcihza2IsIHNrKWAgYXJlIHB1cmVseSBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCBvbiB0aGUgKnJlY2VpdmluZyogc2lkZSwgbm90aGluZyB0aGF0IHRvdWNoZXMgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIGEgYnVnIG9yIHBvdGVudGlhbCBsZWFrIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IGFjY291bnRpbmcsIHBvc3NpYmx5IHJlc3VsdGluZyBpbiBuZWdhdGl2ZSB2YWx1ZXMgZm9yIGBza19mb3J3YXJkX2FsbG9jYC4gVGhhdCYjMzk7cyBub3QgdGhlIHNhbWUgYXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnLiBJdCYjMzk7cyBtb3JlIG9mIGEgbG9naWMgZXJyb3IgdGhhdCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBsZWFrcyBvciwgcG90ZW50aWFsbHksIG90aGVyIG1lbW9yeS1yZWxhdGVkIGVycm9ycywgYnV0IG5vdCBkaXJlY3RseSBLTVNBTi1yZWxhdGVkLgoKUmV2aWV3aW5nIHRoZSBjb2RlIHNuaXBwZXRzLCB0aGUgYWRkaXRpb24gb2YgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduYCBpcyBzb2xlbHkgZm9yIHRoZSBwdXJwb3NlIG9mIG1hbmFnaW5nIG1lbW9yeSBvd25lcnNoaXAgYW5kIGFjY291bnRpbmcuIEkgc2VlIG5vIGFsbG9jYXRpb24gb2YgbmV3LCBjb21wbGV4IHN0cnVjdHVyZXMsIG5vciBhbnkgbWFuaXB1bGF0aW9uIG9mIGV4aXN0aW5nIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBsZWF2ZSBmaWVsZHMgdW5pbml0aWFsaXplZC4gVGhlIGNoYW5nZXMgYWxzbyBpbmNsdWRlIHNhdmluZyBhbmQgcmVzdG9yaW5nIHRoZSBgc2tiLSZndDtfc2tfcmVkaXJgIGZpZWxkLCBidXQgdGhpcyBmaWVsZCBpcyBpbml0aWFsaXplZCBlaXRoZXIgd2hlbiB0aGUgYHNrYmAgaXMgYWxsb2NhdGVkLCBvciBjbGVhcmVkIGJ5IHRoZSBrZXJuZWwuIFRoZXJlJiMzOTtzIG5vIHNjZW5hcmlvIGhlcmUgdGhhdCByaXNrcyBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZSB0ZXN0IGFkZGVkIGFwcGVhcnMgdG8gdmVyaWZ5IHRoZSBzb2NrZXQgbWVtb3J5IGluZm9ybWF0aW9uIHVzaW5nIGBpbmV0X2RpYWdfcmVxX3YyYCwgYnV0IHRoaXMgaXMgc2ltcGx5IGEgdGVzdCBhbmQgZG9lcyBub3QgY3JlYXRlIGFuIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlIGNvcmUgZnVuY3Rpb25zIOKAkyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAsIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2dgLCBhbmQgdGhlIG5ldyBmdW5jdGlvbiBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gIOKAkyBhcmUgYWxsIGZvY3VzZWQgb24gbWVtb3J5IGFjY291bnRpbmcuIFRoZXkgaW52b2x2ZSBsb2NraW5nLCBvd25lcnNoaXAgbWFuYWdlbWVudCwgYW5kIHNjaGVkdWxpbmcgcmVjZWl2ZSBtZW1vcnkuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCBhIGBOZWVkc0tNU0FOYCB0YWcgaXMgKm5vdCogYXBwcm9wcmlhdGUgaGVyZS4gV2hpbGUgYSBidWcgaW4gdGhlc2UgY2hhbmdlcyAqY291bGQqIGxlYWQgdG8gbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlLCB0aG9zZSBhcmUgYWxyZWFkeSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlIGludHJvZHVjZWQgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIHBhdGhzLCBib3VuZHMtY2hlY2sgY2hhbmdlcyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBhbnkgdXNlciBzcGFjZSBkYXRhIHN0cnVjdHVyZXMgd2l0aCBmaWVsZHMgdGhhdCBjb3VsZCBjb250YWluIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBUaGlzIGlzIHN0cmljdGx5IGxvZ2ljIGZvciBzb2NrZXQgYWNjb3VudGluZzsgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSBpbiB0aGlzIGluc3RhbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4gaXNzdWUgd2l0aCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcgKGBza19mb3J3YXJkX2FsbG9jYCkgd2hlbiBhbiBza2IgaXMgcGFzc2VkIHRvIHRoZSBzYW1lIHNvY2tldCB2aWEgQlBGIHN0cmVhbSBwYXJzZXIvdmVyZGljdC4gSXQgaW50cm9kdWNlcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gIHRvIHByb3Blcmx5IGhhbmRsZSBgc2tfcm1lbV9zY2hlZHVsZWAgYW5kIGBza2Jfc2V0X293bmVyX3JgLiBUaGUgY2hhbmdlcyBpbnZvbHZlIG1lbW9yeSBhY2NvdW50aW5nLCBsb2NraW5nLCBhbmQgc2F2aW5nL3Jlc3RvcmluZyBgc2tiLVx1MDAzZV9za19yZWRpcmAuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBjb250YWluIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGxvZ2ljIGVycm9ycywgbWVtb3J5IGxlYWtzLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4gaXNzdWUgd2l0aCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcgKGBza19mb3J3YXJkX2FsbG9jYCkgd2hlbiBhbiBza2IgaXMgcGFzc2VkIHRvIHRoZSBzYW1lIHNvY2tldCB2aWEgQlBGIHN0cmVhbSBwYXJzZXIvdmVyZGljdC4gSXQgaW50cm9kdWNlcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gIHRvIHByb3Blcmx5IGhhbmRsZSBgc2tfcm1lbV9zY2hlZHVsZWAgYW5kIGBza2Jfc2V0X293bmVyX3JgLiBUaGUgY2hhbmdlcyBpbnZvbHZlIG1lbW9yeSBhY2NvdW50aW5nLCBsb2NraW5nLCBhbmQgc2F2aW5nL3Jlc3RvcmluZyBgc2tiLVx1MDAzZV9za19yZWRpcmAuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBjb250YWluIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGxvZ2ljIGVycm9ycywgbWVtb3J5IGxlYWtzLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ0OjE1LjE2ODU3ODMzM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzYzNjUyNDA2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNcIixcbiAgICBcInNvY2tfbWFwX2dldF9mcm9tX2ZkXCIsXG4gICAgXCJ0Y3BfYnBmX3VwZGF0ZV9wcm90b1wiLFxuICAgIFwidGNwX2JwZl9zdHJwX3JlYWRfc29ja1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGlzc3VlIHdpdGggc29ja2V0IG1lbW9yeSBhY2NvdW50aW5nIChgc2tfZm9yd2FyZF9hbGxvY2ApIHdoZW4gYW4gc2tiIGlzIHBhc3NlZCB0byB0aGUgc2FtZSBzb2NrZXQgdmlhIEJQRiBzdHJlYW0gcGFyc2VyL3ZlcmRpY3QuIEl0IGludHJvZHVjZXMgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduYCB0byBwcm9wZXJseSBoYW5kbGUgYHNrX3JtZW1fc2NoZWR1bGVgIGFuZCBgc2tiX3NldF9vd25lcl9yYC4gVGhlIGNoYW5nZXMgaW52b2x2ZSBtZW1vcnkgYWNjb3VudGluZywgbG9ja2luZywgYW5kIHNhdmluZy9yZXN0b3JpbmcgYHNrYi1cXHUwMDNlX3NrX3JlZGlyYC4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgbm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGNvbnRhaW4gdW5pbml0aWFsaXplZCBmaWVsZHMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgbG9naWMgZXJyb3JzLCBtZW1vcnkgbGVha3MsIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHNvY2ttYXAgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBob3cgYHNrX2ZvcndhcmRfYWxsb2NgIG1lbW9yeSBhY2NvdW50aW5nIGlzIGhhbmRsZWQgd2hlbiBhIHN0cmVhbSBwYXJzZXIgKHN0cnBhcnNlcikgcHJvZ3JhbSByZXR1cm5zIGBTS19QQVNTYCBhbmQgdGhlIHNrYiBpcyBkZWxpdmVyZWQgdG8gdGhlIHNhbWUgc29ja2V0J3MgaW5ncmVzcyBxdWV1ZS4gSXQgaW50cm9kdWNlcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gIHRvIHNldHRsZSBhbnkgZXhpc3RpbmcgYHNrX2ZvcndhcmRfYWxsb2NgIGRlZmljaXQgYmVmb3JlIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcCB0byB0aGUgc2tiLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc29ja21hcCBhbmQgc3RyZWFtIHBhcnNlcikgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG1lbW9yeSBhY2NvdW50aW5nIHJlbWFpbnMgY29ycmVjdCB1bmRlciB2YXJpb3VzIG5ldHdvcmsgY29uZGl0aW9ucyBhbmQgQlBGIHByb2dyYW0gYmVoYXZpb3JzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NDoxNS4xNjg1ODI5OTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMjA4Njc4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBiMGU4Y2Y4YjMyMWRmODhjMDI2ZGFlYTU3NjQ5MWZjYTVjNzM2ZTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTY6NDQ6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2ttc2cuYyBiL25ldC9jb3JlL3NrbXNnLmNcXG5pbmRleCAyNTIxYjY0M2ZhMDVkLi4zNDdjYjE2OGY3NDkxIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3NrbXNnLmNcXG4rKysgYi9uZXQvY29yZS9za21zZy5jXFxuQEAgLTU4NiwyMSArNTg2LDI0IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmKTtcXG4rXFx0XFx0XFx0XFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxcbitcXHRcXHRcXHRcXHQgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYyk7XFxuK3N0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYyk7XFxuIFxcbiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLVxcdFxcdFxcdFxcdHUzMiBvZmYsIHUzMiBsZW4pXFxuK1xcdFxcdFxcdFxcdHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYylcXG4ge1xcbiBcXHRzdHJ1Y3Qgc29jayAqc2sgPSBwc29jay1cXHUwMDNlc2s7XFxuIFxcdHN0cnVjdCBza19tc2cgKm1zZztcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdC8qIElmIHdlIGFyZSByZWNlaXZpbmcgb24gdGhlIHNhbWUgc29jayBza2ItXFx1MDAzZXNrIGlzIGFscmVhZHkgYXNzaWduZWQsXFxuLVxcdCAqIHNraXAgbWVtb3J5IGFjY291bnRpbmcgYW5kIG93bmVyIHRyYW5zaXRpb24gc2VlaW5nIGl0IGFscmVhZHkgc2V0XFxuLVxcdCAqIGNvcnJlY3RseS5cXG4tXFx0ICovXFxuIFxcdGlmICh1bmxpa2VseShza2ItXFx1MDAzZXNrID09IHNrKSlcXG4tXFx0XFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHRydWUpO1xcbitcXHRcXHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHBzb2NrLCBza2IsIG9mZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGxlbiwgdHJ1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHNldHRsZV9md2RfYWxsb2MpO1xcbiBcXHRtc2cgPSBza19wc29ja19jcmVhdGVfaW5ncmVzc19tc2coc2ssIHNrYik7XFxuIFxcdGlmICghbXNnKVxcbiBcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG5AQCAtNjE4LDM0ICs2MjEsMTAwIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tLyogUHV0cyBhbiBza2Igb24gdGhlIGluZ3Jlc3MgcXVldWUgb2YgdGhlIHNvY2tldCBhbHJlYWR5IGFzc2lnbmVkIHRvIHRoZVxcbi0gKiBza2IuIEluIHRoaXMgY2FzZSB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBtZW1vcnkgbGltaXRzIG9yIHNrYl9zZXRfb3duZXJfclxcbi0gKiBiZWNhdXNlIHRoZSBza2IgaXMgYWxyZWFkeSBhY2NvdW50ZWQgZm9yIGhlcmUuXFxuK3N0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ24oc3RydWN0IHNvY2sgKnNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYylcXG4re1xcbitcXHQvKiBMZWF2ZSBza2JzIGFscmVhZHkgcmVjZWl2ZS1hY2NvdW50ZWQgdG8gc2sgdW50b3VjaGVkLiAqL1xcbitcXHRpZiAoc2tiLVxcdTAwM2VzayA9PSBzayBcXHUwMDI2XFx1MDAyNiBza2ItXFx1MDAzZWRlc3RydWN0b3IgPT0gc29ja19yZnJlZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoc2V0dGxlX2Z3ZF9hbGxvYykge1xcbitcXHRcXHRzb2NrX293bmVkX2J5X21lKHNrKTtcXG4rXFxuK1xcdFxcdGlmICghc2tfcm1lbV9zY2hlZHVsZShzaywgc2tiLCAwKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcdH1cXG4rXFxuK1xcdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIFB1dHMgYW4gc2tiIG9uIHRoZSBpbmdyZXNzIHF1ZXVlIGZvciBwc29jay1cXHUwMDNlc2suXFxuKyAqXFxuKyAqIElmIHRoZSBza2IgYWxyZWFkeSBoYXMgcmVjZWl2ZSBvd25lcnNoaXAgZm9yIHRoaXMgc29ja2V0LCBsZWF2ZSBzb2NrZXRcXG4rICogbWVtb3J5IGFjY291bnRpbmcgdW50b3VjaGVkLiBPdGhlcndpc2UsIGJlZm9yZSBhc3NpZ25pbmcgcmVjZWl2ZSBvd25lcnNoaXBcXG4rICogdG8gYW4gdW5vd25lZCBzdHJwYXJzZXIgU0tfUEFTUyBza2IsIHNldHRsZSBhbnkgZXhpc3Rpbmcgc2tfZm9yd2FyZF9hbGxvY1xcbisgKiBkZWZpY2l0IGZyb20gZWFybGllciBjbG9uZSBjaGFyZ2VzLlxcbiAgKi9cXG4gc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLVxcdFxcdFxcdFxcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZilcXG4rXFx0XFx0XFx0XFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxcbitcXHRcXHRcXHRcXHQgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYylcXG4ge1xcbitcXHRzdHJ1Y3Qgc29jayAqc2sgPSBwc29jay1cXHUwMDNlc2s7XFxuIFxcdHN0cnVjdCBza19tc2cgKm1zZyA9IGFsbG9jX3NrX21zZyhHRlBfQVRPTUlDKTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmICh1bmxpa2VseSghbXNnKSlcXG4rXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcbitcXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbihzaywgc2tiLCBzZXR0bGVfZndkX2FsbG9jKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBmcmVlO1xcbitcXG4rXFx0LyogVGhpcyBpcyB1c2VkIGluIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVcXG4rXFx0ICogZGF0YSBvcmlnaW5hdGVzIGZyb20gdGhlIHNvY2tldCdzIG93biBwcm90b2NvbCBzdGFjay4gTm8gbmVlZCB0b1xcbitcXHQgKiByZWZjb3VudCBzayBiZWNhdXNlIG1zZydzIGxpZmV0aW1lIGlzIGJvdW5kIHRvIHNrIHZpYSB0aGUgaW5ncmVzc19tc2cuXFxuK1xcdCAqL1xcbitcXHRtc2ctXFx1MDAzZXNrID0gc2s7XFxuK1xcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc2tiLCBvZmYsIGxlbiwgcHNvY2ssIHNrLCBtc2csXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHRha2VfcmVmKTtcXG4rXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZnJlZTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK2ZyZWU6XFxuK1xcdGtmcmVlKG1zZyk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYylcXG4re1xcbiBcXHRzdHJ1Y3Qgc29jayAqc2sgPSBwc29jay1cXHUwMDNlc2s7XFxuK1xcdHN0cnVjdCBza19tc2cgKm1zZyA9IGFsbG9jX3NrX21zZyhHRlBfQVRPTUlDKTtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGlmICh1bmxpa2VseSghbXNnKSlcXG4gXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuLVxcdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcXG4rXFxuK1xcdGxvY2tfc29jayhzayk7XFxuK1xcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduKHNrLCBza2IsIHNldHRsZV9md2RfYWxsb2MpO1xcbitcXHRyZWxlYXNlX3NvY2soc2spO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGZyZWU7XFxuIFxcbiBcXHQvKiBUaGlzIGlzIHVzZWQgaW4gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZVxcbiBcXHQgKiBkYXRhIG9yaWdpbmF0ZXMgZnJvbSB0aGUgc29ja2V0J3Mgb3duIHByb3RvY29sIHN0YWNrLiBObyBuZWVkIHRvXFxuIFxcdCAqIHJlZmNvdW50IHNrIGJlY2F1c2UgbXNnJ3MgbGlmZXRpbWUgaXMgYm91bmQgdG8gc2sgdmlhIHRoZSBpbmdyZXNzX21zZy5cXG4gXFx0ICovXFxuIFxcdG1zZy1cXHUwMDNlc2sgPSBzaztcXG4tXFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShza2IsIG9mZiwgbGVuLCBwc29jaywgc2ssIG1zZywgdGFrZV9yZWYpO1xcbitcXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLFxcbitcXHRcXHRcXHRcXHRcXHQgICB0YWtlX3JlZik7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi1cXHRcXHRrZnJlZShtc2cpO1xcbitcXHRcXHRnb3RvIGZyZWU7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbitmcmVlOlxcbitcXHRrZnJlZShtc2cpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHNrX3Bzb2NrX2hhbmRsZV9za2Ioc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0ICAgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgaW5ncmVzcylcXG4rXFx0XFx0XFx0ICAgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgaW5ncmVzcyxcXG4rXFx0XFx0XFx0ICAgICAgIGJvb2wgc2VsZl9wYXNzLCBib29sIHN0cnBhcnNlcilcXG4ge1xcbiBcXHRpZiAoIWluZ3Jlc3MpIHtcXG4gXFx0XFx0aWYgKCFzb2NrX3dyaXRlYWJsZShwc29jay1cXHUwMDNlc2spKVxcbkBAIC02NTMsNyArNzIyLDExIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfaGFuZGxlX3NrYihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRyZXR1cm4gc2tiX3NlbmRfc29jayhwc29jay1cXHUwMDNlc2ssIHNrYiwgb2ZmLCBsZW4pO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3MocHNvY2ssIHNrYiwgb2ZmLCBsZW4pO1xcbitcXHRpZiAoc2VsZl9wYXNzKVxcbitcXHRcXHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHBzb2NrLCBza2IsIG9mZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGxlbiwgdHJ1ZSwgc3RycGFyc2VyKTtcXG4rXFxuK1xcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzcyhwc29jaywgc2tiLCBvZmYsIGxlbiwgc3RycGFyc2VyKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgc2tfcHNvY2tfc2tiX3N0YXRlKHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuQEAgLTY5NCw5ICs3NjcsMTQgQEAgc3RhdGljIHZvaWQgc2tfcHNvY2tfYmFja2xvZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHNvY2stXFx1MDAzZXdvcmtfbXV0ZXgpO1xcbiBcXHR3aGlsZSAoKHNrYiA9IHNrYl9wZWVrKFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19za2IpKSkge1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIHNhdmVkX3JlZGlyO1xcbitcXHRcXHRib29sIHN0cnBhcnNlcjtcXG4rXFx0XFx0Ym9vbCBzZWxmX3Bhc3M7XFxuK1xcbiBcXHRcXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4gXFx0XFx0b2ZmID0gMDtcXG4tXFx0XFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcXG4rXFx0XFx0c3RycGFyc2VyID0gc2tiX2JwZl9zdHJwYXJzZXIoc2tiKTtcXG4rXFx0XFx0aWYgKHN0cnBhcnNlcikge1xcbiBcXHRcXHRcXHRzdHJ1Y3Qgc3RycF9tc2cgKnN0bSA9IHN0cnBfbXNnKHNrYik7XFxuIFxcbiBcXHRcXHRcXHRvZmYgPSBzdG0tXFx1MDAzZW9mZnNldDtcXG5AQCAtNzEwLDE3ICs3ODgsMjAgQEAgc3RhdGljIHZvaWQgc2tfcHNvY2tfYmFja2xvZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGluZ3Jlc3MgPSBza2JfYnBmX2luZ3Jlc3Moc2tiKTtcXG4rXFx0XFx0c2VsZl9wYXNzID0gaW5ncmVzcyBcXHUwMDI2XFx1MDAyNiAhc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpO1xcbitcXHRcXHRzYXZlZF9yZWRpciA9IHNrYi1cXHUwMDNlX3NrX3JlZGlyO1xcbiBcXHRcXHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XFxuIFxcdFxcdGRvIHtcXG4gXFx0XFx0XFx0cmV0ID0gLUVJTztcXG4gXFx0XFx0XFx0aWYgKCFzb2NrX2ZsYWcocHNvY2stXFx1MDAzZXNrLCBTT0NLX0RFQUQpKVxcbiBcXHRcXHRcXHRcXHRyZXQgPSBza19wc29ja19oYW5kbGVfc2tiKHBzb2NrLCBza2IsIG9mZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBsZW4sIGluZ3Jlc3MpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGxlbiwgaW5ncmVzcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBzZWxmX3Bhc3MsIHN0cnBhcnNlcik7XFxuIFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYz0gMCkge1xcbiBcXHRcXHRcXHRcXHRpZiAocmV0ID09IC1FQUdBSU4pIHtcXG4gXFx0XFx0XFx0XFx0XFx0c2tfcHNvY2tfc2tiX3N0YXRlKHBzb2NrLCBzdGF0ZSwgbGVuLCBvZmYpO1xcbiBcXHRcXHRcXHRcXHRcXHQvKiBSZXN0b3JlIHJlZGlyIGluZm8gd2UgY2xlYXJlZCBiZWZvcmUgKi9cXG4tXFx0XFx0XFx0XFx0XFx0c2tiX2JwZl9zZXRfcmVkaXIoc2tiLCBwc29jay1cXHUwMDNlc2ssIGluZ3Jlc3MpO1xcbitcXHRcXHRcXHRcXHRcXHRza2ItXFx1MDAzZV9za19yZWRpciA9IHNhdmVkX3JlZGlyO1xcbiBcXHRcXHRcXHRcXHRcXHQvKiBEZWxheSBzbGlnaHRseSB0byBwcmlvcml0aXplIGFueVxcbiBcXHRcXHRcXHRcXHRcXHQgKiBvdGhlciB3b3JrIHRoYXQgbWlnaHQgYmUgaGVyZS5cXG4gXFx0XFx0XFx0XFx0XFx0ICovXFxuQEAgLTEwMTcsNiArMTA5OCw4IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHQgKiByZXRyeWluZyBsYXRlciBmcm9tIHdvcmtxdWV1ZS5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChza2JfcXVldWVfZW1wdHkoXFx1MDAyNnBzb2NrLVxcdTAwM2VpbmdyZXNzX3NrYikpIHtcXG4rXFx0XFx0XFx0Ym9vbCBzZXR0bGVfZndkX2FsbG9jID0gZmFsc2U7XFxuK1xcbiBcXHRcXHRcXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4gXFx0XFx0XFx0b2ZmID0gMDtcXG4gXFx0XFx0XFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcXG5AQCAtMTAyNCw4ICsxMTA3LDEwIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXG4gXFx0XFx0XFx0XFx0b2ZmID0gc3RtLVxcdTAwM2VvZmZzZXQ7XFxuIFxcdFxcdFxcdFxcdGxlbiA9IHN0bS1cXHUwMDNlZnVsbF9sZW47XFxuK1xcdFxcdFxcdFxcdHNldHRsZV9md2RfYWxsb2MgPSB0cnVlO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIGZhbHNlKTtcXG4rXFx0XFx0XFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZmFsc2UsIHNldHRsZV9md2RfYWxsb2MpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cHNvY2stXFx1MDAzZWluZ3Jlc3NfbG9jayk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNcXG5pbmRleCAxZDcyMzE3MjhlYWZkLi5jN2FkMjFkMGJiZjQ5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNcXG5AQCAtMSw1ICsxLDkgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gI2luY2x1ZGUgXFx1MDAzY2Vycm9yLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbmV0X2RpYWcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc29ja19kaWFnLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXRpbmV0L3RjcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwic29ja21hcF9oZWxwZXJzLmhcXFwiXFxuQEAgLTQ2MCw2ICs0NjQsMTcxIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zdHJwX3BhcnNlcl9yZWplY3Qodm9pZClcXG4gXFx0dGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7XFxuIH1cXG4gXFxuKy8qIFJlYWQgc2tfZm9yd2FyZF9hbGxvYyB0aHJvdWdoIGluZXRfZGlhZyBtZW1pbmZvLiAqL1xcbitzdGF0aWMgaW50IHNvY2ttYXBfc3RycF9nZXRfZndkX2FsbG9jKGludCBzb2NrLCBpbnQgKmZ3ZF9hbGxvYylcXG4re1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBsb2NhbCA9IHt9LCBwZWVyID0ge307XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbiAqbG9jYWxfaW4sICpwZWVyX2luO1xcbitcXHRzb2NrbGVuX3QgYWRkcl9sZW4gPSBzaXplb2YobG9jYWwpO1xcbitcXHRjaGFyIGJ1ZlsxMDI0XTtcXG4rXFx0c3RydWN0IHtcXG4rXFx0XFx0c3RydWN0IG5sbXNnaGRyIG5saDtcXG4rXFx0XFx0c3RydWN0IGluZXRfZGlhZ19yZXFfdjIgcmVxO1xcbitcXHR9IHJlcSA9IHtcXG4rXFx0XFx0Lm5saCA9IHtcXG4rXFx0XFx0XFx0Lm5sbXNnX2xlbiA9IHNpemVvZihyZXEpLFxcbitcXHRcXHRcXHQubmxtc2dfdHlwZSA9IFNPQ0tfRElBR19CWV9GQU1JTFksXFxuK1xcdFxcdFxcdC5ubG1zZ19mbGFncyA9IE5MTV9GX1JFUVVFU1QsXFxuK1xcdFxcdFxcdC5ubG1zZ19zZXEgPSAxLFxcbitcXHRcXHR9LFxcbitcXHRcXHQucmVxID0ge1xcbitcXHRcXHRcXHQuc2RpYWdfZmFtaWx5ID0gQUZfSU5FVCxcXG4rXFx0XFx0XFx0LnNkaWFnX3Byb3RvY29sID0gSVBQUk9UT19UQ1AsXFxuK1xcdFxcdFxcdC5pZGlhZ19leHQgPSAxIFxcdTAwM2NcXHUwMDNjIChJTkVUX0RJQUdfTUVNSU5GTyAtIDEpLFxcbitcXHRcXHRcXHQuaWRpYWdfc3RhdGVzID0gfjBVLFxcbitcXHRcXHRcXHQuaWQuaWRpYWdfY29va2llID0ge1xcbitcXHRcXHRcXHRcXHRJTkVUX0RJQUdfTk9DT09LSUUsXFxuK1xcdFxcdFxcdFxcdElORVRfRElBR19OT0NPT0tJRSxcXG4rXFx0XFx0XFx0fSxcXG4rXFx0XFx0fSxcXG4rXFx0fTtcXG4rXFx0aW50IGRpYWdfZmQsIHJldCwgZXJyID0gLUVOT0VOVDtcXG4rXFxuK1xcdGlmIChnZXRzb2NrbmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNmxvY2FsLCBcXHUwMDI2YWRkcl9sZW4pKVxcbitcXHRcXHRyZXR1cm4gLWVycm5vO1xcbitcXHRhZGRyX2xlbiA9IHNpemVvZihwZWVyKTtcXG4rXFx0aWYgKGdldHBlZXJuYW1lKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2cGVlciwgXFx1MDAyNmFkZHJfbGVuKSlcXG4rXFx0XFx0cmV0dXJuIC1lcnJubztcXG4rXFxuK1xcdGxvY2FsX2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVxcdTAwMjZsb2NhbDtcXG4rXFx0cGVlcl9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilcXHUwMDI2cGVlcjtcXG4rXFx0cmVxLnJlcS5pZC5pZGlhZ19zcG9ydCA9IGxvY2FsX2luLVxcdTAwM2VzaW5fcG9ydDtcXG4rXFx0cmVxLnJlcS5pZC5pZGlhZ19kcG9ydCA9IHBlZXJfaW4tXFx1MDAzZXNpbl9wb3J0O1xcbitcXHRyZXEucmVxLmlkLmlkaWFnX3NyY1swXSA9IGxvY2FsX2luLVxcdTAwM2VzaW5fYWRkci5zX2FkZHI7XFxuK1xcdHJlcS5yZXEuaWQuaWRpYWdfZHN0WzBdID0gcGVlcl9pbi1cXHUwMDNlc2luX2FkZHIuc19hZGRyO1xcbitcXG4rXFx0ZGlhZ19mZCA9IHNvY2tldChBRl9ORVRMSU5LLCBTT0NLX1JBVyB8IFNPQ0tfQ0xPRVhFQyxcXG4rXFx0XFx0XFx0IE5FVExJTktfU09DS19ESUFHKTtcXG4rXFx0aWYgKGRpYWdfZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLWVycm5vO1xcbitcXG4rXFx0cmV0ID0gc2VuZChkaWFnX2ZkLCBcXHUwMDI2cmVxLCBzaXplb2YocmVxKSwgMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGVyciA9IC1lcnJubztcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0aWYgKHJldCAhPSBzaXplb2YocmVxKSkge1xcbitcXHRcXHRlcnIgPSAtRUlPO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gcmVjdihkaWFnX2ZkLCBidWYsIHNpemVvZihidWYpLCAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZXJyID0gLWVycm5vO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IChzdHJ1Y3Qgbmxtc2doZHIgKilidWY7XFxuK1xcdCAgICAgTkxNU0dfT0sobmxoLCByZXQpOyBubGggPSBOTE1TR19ORVhUKG5saCwgcmV0KSkge1xcbitcXHRcXHRzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqbXNnID0gTkxNU0dfREFUQShubGgpO1xcbitcXHRcXHRzdHJ1Y3QgcnRhdHRyICphdHRyO1xcbitcXHRcXHRpbnQgbGVuO1xcbitcXG4rXFx0XFx0aWYgKG5saC1cXHUwMDNlbmxtc2dfdHlwZSA9PSBOTE1TR19FUlJPUikge1xcbitcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAobmxoLVxcdTAwM2VubG1zZ190eXBlID09IE5MTVNHX0RPTkUpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0bGVuID0gbmxoLVxcdTAwM2VubG1zZ19sZW4gLSBOTE1TR19MRU5HVEgoc2l6ZW9mKCptc2cpKTtcXG4rXFx0XFx0Zm9yIChhdHRyID0gKHN0cnVjdCBydGF0dHIgKikobXNnICsgMSk7IFJUQV9PSyhhdHRyLCBsZW4pO1xcbitcXHRcXHQgICAgIGF0dHIgPSBSVEFfTkVYVChhdHRyLCBsZW4pKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBpbmV0X2RpYWdfbWVtaW5mbyAqbWluZm87XFxuK1xcbitcXHRcXHRcXHRpZiAoYXR0ci1cXHUwMDNlcnRhX3R5cGUgIT0gSU5FVF9ESUFHX01FTUlORk8pXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRtaW5mbyA9IFJUQV9EQVRBKGF0dHIpO1xcbitcXHRcXHRcXHQqZndkX2FsbG9jID0gKF9fczMyKW1pbmZvLVxcdTAwM2VpZGlhZ19mbWVtO1xcbitcXHRcXHRcXHRlcnIgPSAwO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitvdXQ6XFxuK1xcdGNsb3NlKGRpYWdfZmQpO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbisvKiBUZXN0IHN0cnBhcnNlciBTS19QQVNTIGRlbGl2ZXJ5IHRvIHRoZSBzYW1lIHNvY2tldC4gKi9cXG4rc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnBfc2VsZl9wYXNzX2Z3ZF9hbGxvYyh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCB0ZXN0X3NvY2ttYXBfc3RycCAqc3RycCA9IE5VTEw7XFxuK1xcdGNoYXIgc25kWzQgKiAxMDI0XTtcXG4rXFx0aW50IGMgPSAtMSwgcCA9IC0xO1xcbitcXHRpbnQgZndkX2FsbG9jO1xcbitcXHRpbnQgc25kYnVmID0gc2l6ZW9mKHNuZCk7XFxuK1xcdGludCB6ZXJvID0gMDtcXG4rXFx0Y2hhciByY3Y7XFxuK1xcdGludCBzZW50LCByZWN2ZDtcXG4rXFx0aW50IG1hcDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdG1lbXNldChzbmQsIDB4YTUsIHNpemVvZihzbmQpKTtcXG4rXFxuK1xcdHN0cnAgPSB0ZXN0X3NvY2ttYXBfc3RycF9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc3RycCwgXFxcInRlc3Rfc29ja21hcF9zdHJwX19vcGVuX2FuZF9sb2FkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG1hcCA9IGJwZl9tYXBfX2ZkKHN0cnAtXFx1MDAzZW1hcHMuc29ja19tYXApO1xcbitcXHRlcnIgPSB4YnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChzdHJwLVxcdTAwM2Vwcm9ncy5wcm9nX3NrYl9wYXJzZXJfb25lKSxcXG4rXFx0XFx0XFx0ICAgICAgIG1hcCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLCAwKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBvdXRfZGVzdHJveTtcXG4rXFxuK1xcdGVyciA9IHhicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHN0cnAtXFx1MDAzZXByb2dzLnByb2dfc2tiX3ZlcmRpY3RfcGFzcyksXFxuK1xcdFxcdFxcdCAgICAgICBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QsIDApO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIG91dF9kZXN0cm95O1xcbitcXG4rXFx0ZXJyID0gY3JlYXRlX3BhaXIoQUZfSU5FVCwgU09DS19TVFJFQU0sIFxcdTAwMjZjLCBcXHUwMDI2cCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImNyZWF0ZV9wYWlyXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X2Rlc3Ryb3k7XFxuK1xcbitcXHRlcnIgPSB4c2V0c29ja29wdChjLCBTT0xfU09DS0VULCBTT19TTkRCVUYsIFxcdTAwMjZzbmRidWYsIHNpemVvZihzbmRidWYpKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBvdXRfZGVzdHJveTtcXG4rXFxuK1xcdGVyciA9IHhzZXRzb2Nrb3B0KHAsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgXFx1MDAyNnNuZGJ1Ziwgc2l6ZW9mKHNuZGJ1ZikpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIG91dF9kZXN0cm95O1xcbitcXG4rXFx0ZXJyID0geGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwLCBcXHUwMDI2emVybywgXFx1MDAyNnAsIEJQRl9OT0VYSVNUKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBvdXRfZGVzdHJveTtcXG4rXFxuK1xcdHNlbnQgPSBzZW5kKGMsIHNuZCwgc2l6ZW9mKHNuZCksIE1TR19ET05UV0FJVCk7XFxuK1xcdGlmICghQVNTRVJUX0VRKHNlbnQsIHNpemVvZihzbmQpLCBcXFwic2VuZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXN0cm95O1xcbitcXG4rXFx0cmVjdmQgPSByZWN2X3RpbWVvdXQocCwgXFx1MDAyNnJjdiwgc2l6ZW9mKHJjdiksIE1TR19ET05UV0FJVCxcXG4rXFx0XFx0XFx0ICAgICBJT19USU1FT1VUX1NFQyk7XFxuK1xcdGlmICghQVNTRVJUX0VRKHJlY3ZkLCBzaXplb2YocmN2KSwgXFxcInJlY3ZfdGltZW91dFxcXCIpIHx8XFxuK1xcdCAgICAhQVNTRVJUX0VRKHJjdiwgc25kWzBdLCBcXFwiZGF0YSBtaXNtYXRjaFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXN0cm95O1xcbitcXG4rXFx0ZXJyID0gc29ja21hcF9zdHJwX2dldF9md2RfYWxsb2MocCwgXFx1MDAyNmZ3ZF9hbGxvYyk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNvY2ttYXBfc3RycF9nZXRfZndkX2FsbG9jXFxcIikgfHxcXG4rXFx0ICAgICFBU1NFUlRfR0UoZndkX2FsbG9jLCAwLCBcXFwic2tfZm9yd2FyZF9hbGxvY1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXN0cm95O1xcbitvdXRfZGVzdHJveTpcXG4rXFx0dGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7XFxuK1xcdGlmIChjIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGMpO1xcbitcXHRpZiAocCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShwKTtcXG4rfVxcbitcXG4gdm9pZCB0ZXN0X3NvY2ttYXBfc3RycCh2b2lkKVxcbiB7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJzb2NrbWFwIHN0cnAgdGNwIHBhc3NcXFwiKSlcXG5AQCAtNDgyLDQgKzY1MSw2IEBAIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnAodm9pZClcXG4gXFx0XFx0dGVzdF9zb2NrbWFwX3N0cnBfZGlzcGF0Y2hfcGt0KEFGX0lORVQsIFNPQ0tfU1RSRUFNKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInNvY2ttYXAgc3RycCBwYXJzZXIgcmVqZWN0IHBrdCBtb2RcXFwiKSlcXG4gXFx0XFx0dGVzdF9zb2NrbWFwX3N0cnBfcGFyc2VyX3JlamVjdCgpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic29ja21hcCBzdHJwIHNlbGYgcGFzcyBmd2QgYWxsb2NcXFwiKSlcXG4rXFx0XFx0dGVzdF9zb2NrbWFwX3N0cnBfc2VsZl9wYXNzX2Z3ZF9hbGxvYygpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmNcXG5pbmRleCBmZTg4ZmE2ZDQwYmM1Li42ODJlNTNkNDA3NTFjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmNcXG5AQCAtNTAsNiArNTAsMTIgQEAgaW50IHByb2dfc2tiX3BhcnNlcl9wYXJ0aWFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4gXFx0cmV0dXJuIDEwO1xcbiB9XFxuIFxcbitTRUMoXFxcInNrX3NrYi9zdHJlYW1fcGFyc2VyXFxcIilcXG4raW50IHByb2dfc2tiX3BhcnNlcl9vbmUoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHJldHVybiAxO1xcbit9XFxuK1xcbiBTRUMoXFxcInNrX3NrYi9zdHJlYW1fcGFyc2VyXFxcIilcXG4gaW50IHByb2dfc2tiX3BhcnNlcl9yZXNpemUoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbiB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ0OjE1LjU3MTM0NDU1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIwNTM4MzMwMzkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNcIixcbiAgICBcInNvY2tfbWFwX2dldF9mcm9tX2ZkXCIsXG4gICAgXCJ0Y3BfYnBmX3VwZGF0ZV9wcm90b1wiLFxuICAgIFwidGNwX2JwZl9zdHJwX3JlYWRfc29ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc29ja21hcCBpbmZyYXN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGhvdyBgc2tfZm9yd2FyZF9hbGxvY2AgbWVtb3J5IGFjY291bnRpbmcgaXMgaGFuZGxlZCB3aGVuIGEgc3RyZWFtIHBhcnNlciAoc3RycGFyc2VyKSBwcm9ncmFtIHJldHVybnMgYFNLX1BBU1NgIGFuZCB0aGUgc2tiIGlzIGRlbGl2ZXJlZCB0byB0aGUgc2FtZSBzb2NrZXQncyBpbmdyZXNzIHF1ZXVlLiBJdCBpbnRyb2R1Y2VzIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbmAgdG8gc2V0dGxlIGFueSBleGlzdGluZyBgc2tfZm9yd2FyZF9hbGxvY2AgZGVmaWNpdCBiZWZvcmUgYXNzaWduaW5nIHJlY2VpdmUgb3duZXJzaGlwIHRvIHRoZSBza2IuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJQRiBzb2NrbWFwIGFuZCBzdHJlYW0gcGFyc2VyKSBhbmQgaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgbWVtb3J5IGFjY291bnRpbmcgcmVtYWlucyBjb3JyZWN0IHVuZGVyIHZhcmlvdXMgbmV0d29yayBjb25kaXRpb25zIGFuZCBCUEYgcHJvZ3JhbSBiZWhhdmlvcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBiMGU4Y2Y4YjMyMWRmODhjMDI2ZGFlYTU3NjQ5MWZjYTVjNzM2ZTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxNjo0NDoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrbXNnLmMgYi9uZXQvY29yZS9za21zZy5jXG5pbmRleCAyNTIxYjY0M2ZhMDVkLi4zNDdjYjE2OGY3NDkxIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2ttc2cuY1xuKysrIGIvbmV0L2NvcmUvc2ttc2cuY1xuQEAgLTU4NiwyMSArNTg2LDI0IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIH1cbiBcbiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZik7XG4rXHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsXG4rXHRcdFx0XHQgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYyk7XG4rc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2coc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsXG4rXHRcdFx0XHRcdCAgICAgYm9vbCBzZXR0bGVfZndkX2FsbG9jKTtcbiBcbiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHR1MzIgb2ZmLCB1MzIgbGVuKVxuK1x0XHRcdFx0dTMyIG9mZiwgdTMyIGxlbiwgYm9vbCBzZXR0bGVfZndkX2FsbG9jKVxuIHtcbiBcdHN0cnVjdCBzb2NrICpzayA9IHBzb2NrLVx1MDAzZXNrO1xuIFx0c3RydWN0IHNrX21zZyAqbXNnO1xuIFx0aW50IGVycjtcbiBcbi1cdC8qIElmIHdlIGFyZSByZWNlaXZpbmcgb24gdGhlIHNhbWUgc29jayBza2ItXHUwMDNlc2sgaXMgYWxyZWFkeSBhc3NpZ25lZCxcbi1cdCAqIHNraXAgbWVtb3J5IGFjY291bnRpbmcgYW5kIG93bmVyIHRyYW5zaXRpb24gc2VlaW5nIGl0IGFscmVhZHkgc2V0XG4tXHQgKiBjb3JyZWN0bHkuXG4tXHQgKi9cbiBcdGlmICh1bmxpa2VseShza2ItXHUwMDNlc2sgPT0gc2spKVxuLVx0XHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgdHJ1ZSk7XG4rXHRcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2cocHNvY2ssIHNrYiwgb2ZmLFxuK1x0XHRcdFx0XHRcdFx0IGxlbiwgdHJ1ZSxcbitcdFx0XHRcdFx0XHRcdCBzZXR0bGVfZndkX2FsbG9jKTtcbiBcdG1zZyA9IHNrX3Bzb2NrX2NyZWF0ZV9pbmdyZXNzX21zZyhzaywgc2tiKTtcbiBcdGlmICghbXNnKVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbkBAIC02MTgsMzQgKzYyMSwxMDAgQEAgc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tLyogUHV0cyBhbiBza2Igb24gdGhlIGluZ3Jlc3MgcXVldWUgb2YgdGhlIHNvY2tldCBhbHJlYWR5IGFzc2lnbmVkIHRvIHRoZVxuLSAqIHNrYi4gSW4gdGhpcyBjYXNlIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIG1lbW9yeSBsaW1pdHMgb3Igc2tiX3NldF9vd25lcl9yXG4tICogYmVjYXVzZSB0aGUgc2tiIGlzIGFscmVhZHkgYWNjb3VudGVkIGZvciBoZXJlLlxuK3N0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ24oc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdFx0ICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYylcbit7XG4rXHQvKiBMZWF2ZSBza2JzIGFscmVhZHkgcmVjZWl2ZS1hY2NvdW50ZWQgdG8gc2sgdW50b3VjaGVkLiAqL1xuK1x0aWYgKHNrYi1cdTAwM2VzayA9PSBzayBcdTAwMjZcdTAwMjYgc2tiLVx1MDAzZWRlc3RydWN0b3IgPT0gc29ja19yZnJlZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoc2V0dGxlX2Z3ZF9hbGxvYykge1xuK1x0XHRzb2NrX293bmVkX2J5X21lKHNrKTtcbitcbitcdFx0aWYgKCFza19ybWVtX3NjaGVkdWxlKHNrLCBza2IsIDApKVxuK1x0XHRcdHJldHVybiAtRUFHQUlOO1xuK1x0fVxuK1xuK1x0c2tiX3NldF9vd25lcl9yKHNrYiwgc2spO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFB1dHMgYW4gc2tiIG9uIHRoZSBpbmdyZXNzIHF1ZXVlIGZvciBwc29jay1cdTAwM2Vzay5cbisgKlxuKyAqIElmIHRoZSBza2IgYWxyZWFkeSBoYXMgcmVjZWl2ZSBvd25lcnNoaXAgZm9yIHRoaXMgc29ja2V0LCBsZWF2ZSBzb2NrZXRcbisgKiBtZW1vcnkgYWNjb3VudGluZyB1bnRvdWNoZWQuIE90aGVyd2lzZSwgYmVmb3JlIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcFxuKyAqIHRvIGFuIHVub3duZWQgc3RycGFyc2VyIFNLX1BBU1Mgc2tiLCBzZXR0bGUgYW55IGV4aXN0aW5nIHNrX2ZvcndhcmRfYWxsb2NcbisgKiBkZWZpY2l0IGZyb20gZWFybGllciBjbG9uZSBjaGFyZ2VzLlxuICAqL1xuIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmKVxuK1x0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuK1x0XHRcdFx0ICAgICBib29sIHNldHRsZV9md2RfYWxsb2MpXG4ge1xuK1x0c3RydWN0IHNvY2sgKnNrID0gcHNvY2stXHUwMDNlc2s7XG4gXHRzdHJ1Y3Qgc2tfbXNnICptc2cgPSBhbGxvY19za19tc2coR0ZQX0FUT01JQyk7XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWYgKHVubGlrZWx5KCFtc2cpKVxuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcbitcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduKHNrLCBza2IsIHNldHRsZV9md2RfYWxsb2MpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBmcmVlO1xuK1xuK1x0LyogVGhpcyBpcyB1c2VkIGluIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVcbitcdCAqIGRhdGEgb3JpZ2luYXRlcyBmcm9tIHRoZSBzb2NrZXQncyBvd24gcHJvdG9jb2wgc3RhY2suIE5vIG5lZWQgdG9cbitcdCAqIHJlZmNvdW50IHNrIGJlY2F1c2UgbXNnJ3MgbGlmZXRpbWUgaXMgYm91bmQgdG8gc2sgdmlhIHRoZSBpbmdyZXNzX21zZy5cbitcdCAqL1xuK1x0bXNnLVx1MDAzZXNrID0gc2s7XG4rXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLFxuK1x0XHRcdFx0XHQgICB0YWtlX3JlZik7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGZyZWU7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK2ZyZWU6XG4rXHRrZnJlZShtc2cpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2coc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsXG4rXHRcdFx0XHRcdCAgICAgYm9vbCBzZXR0bGVfZndkX2FsbG9jKVxuK3tcbiBcdHN0cnVjdCBzb2NrICpzayA9IHBzb2NrLVx1MDAzZXNrO1xuK1x0c3RydWN0IHNrX21zZyAqbXNnID0gYWxsb2Nfc2tfbXNnKEdGUF9BVE9NSUMpO1xuIFx0aW50IGVycjtcbiBcbiBcdGlmICh1bmxpa2VseSghbXNnKSlcbiBcdFx0cmV0dXJuIC1FQUdBSU47XG4tXHRza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7XG4rXG4rXHRsb2NrX3NvY2soc2spO1xuK1x0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ24oc2ssIHNrYiwgc2V0dGxlX2Z3ZF9hbGxvYyk7XG4rXHRyZWxlYXNlX3NvY2soc2spO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBmcmVlO1xuIFxuIFx0LyogVGhpcyBpcyB1c2VkIGluIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVcbiBcdCAqIGRhdGEgb3JpZ2luYXRlcyBmcm9tIHRoZSBzb2NrZXQncyBvd24gcHJvdG9jb2wgc3RhY2suIE5vIG5lZWQgdG9cbiBcdCAqIHJlZmNvdW50IHNrIGJlY2F1c2UgbXNnJ3MgbGlmZXRpbWUgaXMgYm91bmQgdG8gc2sgdmlhIHRoZSBpbmdyZXNzX21zZy5cbiBcdCAqL1xuIFx0bXNnLVx1MDAzZXNrID0gc2s7XG4tXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLCB0YWtlX3JlZik7XG4rXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLFxuK1x0XHRcdFx0XHQgICB0YWtlX3JlZik7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRrZnJlZShtc2cpO1xuK1x0XHRnb3RvIGZyZWU7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK2ZyZWU6XG4rXHRrZnJlZShtc2cpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCBza19wc29ja19oYW5kbGVfc2tiKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0ICAgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgaW5ncmVzcylcbitcdFx0XHQgICAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCBpbmdyZXNzLFxuK1x0XHRcdCAgICAgICBib29sIHNlbGZfcGFzcywgYm9vbCBzdHJwYXJzZXIpXG4ge1xuIFx0aWYgKCFpbmdyZXNzKSB7XG4gXHRcdGlmICghc29ja193cml0ZWFibGUocHNvY2stXHUwMDNlc2spKVxuQEAgLTY1Myw3ICs3MjIsMTEgQEAgc3RhdGljIGludCBza19wc29ja19oYW5kbGVfc2tiKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBza2Jfc2VuZF9zb2NrKHBzb2NrLVx1MDAzZXNrLCBza2IsIG9mZiwgbGVuKTtcbiBcdH1cbiBcbi1cdHJldHVybiBza19wc29ja19za2JfaW5ncmVzcyhwc29jaywgc2tiLCBvZmYsIGxlbik7XG4rXHRpZiAoc2VsZl9wYXNzKVxuK1x0XHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHBzb2NrLCBza2IsIG9mZixcbitcdFx0XHRcdFx0XHRcdCBsZW4sIHRydWUsIHN0cnBhcnNlcik7XG4rXG4rXHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3MocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHN0cnBhcnNlcik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNrX3Bzb2NrX3NrYl9zdGF0ZShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuQEAgLTY5NCw5ICs3NjcsMTQgQEAgc3RhdGljIHZvaWQgc2tfcHNvY2tfYmFja2xvZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdHJldHVybjtcbiBcdG11dGV4X2xvY2soXHUwMDI2cHNvY2stXHUwMDNld29ya19tdXRleCk7XG4gXHR3aGlsZSAoKHNrYiA9IHNrYl9wZWVrKFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3Nfc2tiKSkpIHtcbitcdFx0dW5zaWduZWQgbG9uZyBzYXZlZF9yZWRpcjtcbitcdFx0Ym9vbCBzdHJwYXJzZXI7XG4rXHRcdGJvb2wgc2VsZl9wYXNzO1xuK1xuIFx0XHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuIFx0XHRvZmYgPSAwO1xuLVx0XHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xuK1x0XHRzdHJwYXJzZXIgPSBza2JfYnBmX3N0cnBhcnNlcihza2IpO1xuK1x0XHRpZiAoc3RycGFyc2VyKSB7XG4gXHRcdFx0c3RydWN0IHN0cnBfbXNnICpzdG0gPSBzdHJwX21zZyhza2IpO1xuIFxuIFx0XHRcdG9mZiA9IHN0bS1cdTAwM2VvZmZzZXQ7XG5AQCAtNzEwLDE3ICs3ODgsMjAgQEAgc3RhdGljIHZvaWQgc2tfcHNvY2tfYmFja2xvZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdH1cbiBcbiBcdFx0aW5ncmVzcyA9IHNrYl9icGZfaW5ncmVzcyhza2IpO1xuK1x0XHRzZWxmX3Bhc3MgPSBpbmdyZXNzIFx1MDAyNlx1MDAyNiAhc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpO1xuK1x0XHRzYXZlZF9yZWRpciA9IHNrYi1cdTAwM2Vfc2tfcmVkaXI7XG4gXHRcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcbiBcdFx0ZG8ge1xuIFx0XHRcdHJldCA9IC1FSU87XG4gXHRcdFx0aWYgKCFzb2NrX2ZsYWcocHNvY2stXHUwMDNlc2ssIFNPQ0tfREVBRCkpXG4gXHRcdFx0XHRyZXQgPSBza19wc29ja19oYW5kbGVfc2tiKHBzb2NrLCBza2IsIG9mZixcbi1cdFx0XHRcdFx0XHRcdCAgbGVuLCBpbmdyZXNzKTtcbitcdFx0XHRcdFx0XHRcdCAgbGVuLCBpbmdyZXNzLFxuK1x0XHRcdFx0XHRcdFx0ICBzZWxmX3Bhc3MsIHN0cnBhcnNlcik7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2M9IDApIHtcbiBcdFx0XHRcdGlmIChyZXQgPT0gLUVBR0FJTikge1xuIFx0XHRcdFx0XHRza19wc29ja19za2Jfc3RhdGUocHNvY2ssIHN0YXRlLCBsZW4sIG9mZik7XG4gXHRcdFx0XHRcdC8qIFJlc3RvcmUgcmVkaXIgaW5mbyB3ZSBjbGVhcmVkIGJlZm9yZSAqL1xuLVx0XHRcdFx0XHRza2JfYnBmX3NldF9yZWRpcihza2IsIHBzb2NrLVx1MDAzZXNrLCBpbmdyZXNzKTtcbitcdFx0XHRcdFx0c2tiLVx1MDAzZV9za19yZWRpciA9IHNhdmVkX3JlZGlyO1xuIFx0XHRcdFx0XHQvKiBEZWxheSBzbGlnaHRseSB0byBwcmlvcml0aXplIGFueVxuIFx0XHRcdFx0XHQgKiBvdGhlciB3b3JrIHRoYXQgbWlnaHQgYmUgaGVyZS5cbiBcdFx0XHRcdFx0ICovXG5AQCAtMTAxNyw2ICsxMDk4LDggQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLlxuIFx0XHQgKi9cbiBcdFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX3NrYikpIHtcbitcdFx0XHRib29sIHNldHRsZV9md2RfYWxsb2MgPSBmYWxzZTtcbitcbiBcdFx0XHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuIFx0XHRcdG9mZiA9IDA7XG4gXHRcdFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcbkBAIC0xMDI0LDggKzExMDcsMTAgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRcdFx0XHRvZmYgPSBzdG0tXHUwMDNlb2Zmc2V0O1xuIFx0XHRcdFx0bGVuID0gc3RtLVx1MDAzZWZ1bGxfbGVuO1xuK1x0XHRcdFx0c2V0dGxlX2Z3ZF9hbGxvYyA9IHRydWU7XG4gXHRcdFx0fVxuLVx0XHRcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIGZhbHNlKTtcbitcdFx0XHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLFxuK1x0XHRcdFx0XHRcdFx0ZmFsc2UsIHNldHRsZV9md2RfYWxsb2MpO1xuIFx0XHR9XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19sb2NrKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jXG5pbmRleCAxZDcyMzE3MjhlYWZkLi5jN2FkMjFkMGJiZjQ5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jXG5AQCAtMSw1ICsxLDkgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICNpbmNsdWRlIFx1MDAzY2Vycm9yLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbmV0X2RpYWcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGxpbmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc29ja19kaWFnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXRpbmV0L3RjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4gI2luY2x1ZGUgXCJzb2NrbWFwX2hlbHBlcnMuaFwiXG5AQCAtNDYwLDYgKzQ2NCwxNzEgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnBfcGFyc2VyX3JlamVjdCh2b2lkKVxuIFx0dGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7XG4gfVxuIFxuKy8qIFJlYWQgc2tfZm9yd2FyZF9hbGxvYyB0aHJvdWdoIGluZXRfZGlhZyBtZW1pbmZvLiAqL1xuK3N0YXRpYyBpbnQgc29ja21hcF9zdHJwX2dldF9md2RfYWxsb2MoaW50IHNvY2ssIGludCAqZndkX2FsbG9jKVxuK3tcbitcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGxvY2FsID0ge30sIHBlZXIgPSB7fTtcbitcdHN0cnVjdCBzb2NrYWRkcl9pbiAqbG9jYWxfaW4sICpwZWVyX2luO1xuK1x0c29ja2xlbl90IGFkZHJfbGVuID0gc2l6ZW9mKGxvY2FsKTtcbitcdGNoYXIgYnVmWzEwMjRdO1xuK1x0c3RydWN0IHtcbitcdFx0c3RydWN0IG5sbXNnaGRyIG5saDtcbitcdFx0c3RydWN0IGluZXRfZGlhZ19yZXFfdjIgcmVxO1xuK1x0fSByZXEgPSB7XG4rXHRcdC5ubGggPSB7XG4rXHRcdFx0Lm5sbXNnX2xlbiA9IHNpemVvZihyZXEpLFxuK1x0XHRcdC5ubG1zZ190eXBlID0gU09DS19ESUFHX0JZX0ZBTUlMWSxcbitcdFx0XHQubmxtc2dfZmxhZ3MgPSBOTE1fRl9SRVFVRVNULFxuK1x0XHRcdC5ubG1zZ19zZXEgPSAxLFxuK1x0XHR9LFxuK1x0XHQucmVxID0ge1xuK1x0XHRcdC5zZGlhZ19mYW1pbHkgPSBBRl9JTkVULFxuK1x0XHRcdC5zZGlhZ19wcm90b2NvbCA9IElQUFJPVE9fVENQLFxuK1x0XHRcdC5pZGlhZ19leHQgPSAxIFx1MDAzY1x1MDAzYyAoSU5FVF9ESUFHX01FTUlORk8gLSAxKSxcbitcdFx0XHQuaWRpYWdfc3RhdGVzID0gfjBVLFxuK1x0XHRcdC5pZC5pZGlhZ19jb29raWUgPSB7XG4rXHRcdFx0XHRJTkVUX0RJQUdfTk9DT09LSUUsXG4rXHRcdFx0XHRJTkVUX0RJQUdfTk9DT09LSUUsXG4rXHRcdFx0fSxcbitcdFx0fSxcbitcdH07XG4rXHRpbnQgZGlhZ19mZCwgcmV0LCBlcnIgPSAtRU5PRU5UO1xuK1xuK1x0aWYgKGdldHNvY2tuYW1lKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZsb2NhbCwgXHUwMDI2YWRkcl9sZW4pKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1x0YWRkcl9sZW4gPSBzaXplb2YocGVlcik7XG4rXHRpZiAoZ2V0cGVlcm5hbWUoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNnBlZXIsIFx1MDAyNmFkZHJfbGVuKSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdGxvY2FsX2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVx1MDAyNmxvY2FsO1xuK1x0cGVlcl9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilcdTAwMjZwZWVyO1xuK1x0cmVxLnJlcS5pZC5pZGlhZ19zcG9ydCA9IGxvY2FsX2luLVx1MDAzZXNpbl9wb3J0O1xuK1x0cmVxLnJlcS5pZC5pZGlhZ19kcG9ydCA9IHBlZXJfaW4tXHUwMDNlc2luX3BvcnQ7XG4rXHRyZXEucmVxLmlkLmlkaWFnX3NyY1swXSA9IGxvY2FsX2luLVx1MDAzZXNpbl9hZGRyLnNfYWRkcjtcbitcdHJlcS5yZXEuaWQuaWRpYWdfZHN0WzBdID0gcGVlcl9pbi1cdTAwM2VzaW5fYWRkci5zX2FkZHI7XG4rXG4rXHRkaWFnX2ZkID0gc29ja2V0KEFGX05FVExJTkssIFNPQ0tfUkFXIHwgU09DS19DTE9FWEVDLFxuK1x0XHRcdCBORVRMSU5LX1NPQ0tfRElBRyk7XG4rXHRpZiAoZGlhZ19mZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdHJldCA9IHNlbmQoZGlhZ19mZCwgXHUwMDI2cmVxLCBzaXplb2YocmVxKSwgMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdGVyciA9IC1lcnJubztcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRpZiAocmV0ICE9IHNpemVvZihyZXEpKSB7XG4rXHRcdGVyciA9IC1FSU87XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0cmV0ID0gcmVjdihkaWFnX2ZkLCBidWYsIHNpemVvZihidWYpLCAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0ZXJyID0gLWVycm5vO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGZvciAoc3RydWN0IG5sbXNnaGRyICpubGggPSAoc3RydWN0IG5sbXNnaGRyICopYnVmO1xuK1x0ICAgICBOTE1TR19PSyhubGgsIHJldCk7IG5saCA9IE5MTVNHX05FWFQobmxoLCByZXQpKSB7XG4rXHRcdHN0cnVjdCBpbmV0X2RpYWdfbXNnICptc2cgPSBOTE1TR19EQVRBKG5saCk7XG4rXHRcdHN0cnVjdCBydGF0dHIgKmF0dHI7XG4rXHRcdGludCBsZW47XG4rXG4rXHRcdGlmIChubGgtXHUwMDNlbmxtc2dfdHlwZSA9PSBOTE1TR19FUlJPUikge1xuK1x0XHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdFx0aWYgKG5saC1cdTAwM2VubG1zZ190eXBlID09IE5MTVNHX0RPTkUpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGxlbiA9IG5saC1cdTAwM2VubG1zZ19sZW4gLSBOTE1TR19MRU5HVEgoc2l6ZW9mKCptc2cpKTtcbitcdFx0Zm9yIChhdHRyID0gKHN0cnVjdCBydGF0dHIgKikobXNnICsgMSk7IFJUQV9PSyhhdHRyLCBsZW4pO1xuK1x0XHQgICAgIGF0dHIgPSBSVEFfTkVYVChhdHRyLCBsZW4pKSB7XG4rXHRcdFx0c3RydWN0IGluZXRfZGlhZ19tZW1pbmZvICptaW5mbztcbitcbitcdFx0XHRpZiAoYXR0ci1cdTAwM2VydGFfdHlwZSAhPSBJTkVUX0RJQUdfTUVNSU5GTylcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdG1pbmZvID0gUlRBX0RBVEEoYXR0cik7XG4rXHRcdFx0KmZ3ZF9hbGxvYyA9IChfX3MzMiltaW5mby1cdTAwM2VpZGlhZ19mbWVtO1xuK1x0XHRcdGVyciA9IDA7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdH1cbitcbitvdXQ6XG4rXHRjbG9zZShkaWFnX2ZkKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuKy8qIFRlc3Qgc3RycGFyc2VyIFNLX1BBU1MgZGVsaXZlcnkgdG8gdGhlIHNhbWUgc29ja2V0LiAqL1xuK3N0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zdHJwX3NlbGZfcGFzc19md2RfYWxsb2Modm9pZClcbit7XG4rXHRzdHJ1Y3QgdGVzdF9zb2NrbWFwX3N0cnAgKnN0cnAgPSBOVUxMO1xuK1x0Y2hhciBzbmRbNCAqIDEwMjRdO1xuK1x0aW50IGMgPSAtMSwgcCA9IC0xO1xuK1x0aW50IGZ3ZF9hbGxvYztcbitcdGludCBzbmRidWYgPSBzaXplb2Yoc25kKTtcbitcdGludCB6ZXJvID0gMDtcbitcdGNoYXIgcmN2O1xuK1x0aW50IHNlbnQsIHJlY3ZkO1xuK1x0aW50IG1hcDtcbitcdGludCBlcnI7XG4rXG4rXHRtZW1zZXQoc25kLCAweGE1LCBzaXplb2Yoc25kKSk7XG4rXG4rXHRzdHJwID0gdGVzdF9zb2NrbWFwX3N0cnBfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihzdHJwLCBcInRlc3Rfc29ja21hcF9zdHJwX19vcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtYXAgPSBicGZfbWFwX19mZChzdHJwLVx1MDAzZW1hcHMuc29ja19tYXApO1xuK1x0ZXJyID0geGJwZl9wcm9nX2F0dGFjaChicGZfcHJvZ3JhbV9fZmQoc3RycC1cdTAwM2Vwcm9ncy5wcm9nX3NrYl9wYXJzZXJfb25lKSxcbitcdFx0XHQgICAgICAgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXRfZGVzdHJveTtcbitcbitcdGVyciA9IHhicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHN0cnAtXHUwMDNlcHJvZ3MucHJvZ19za2JfdmVyZGljdF9wYXNzKSxcbitcdFx0XHQgICAgICAgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNULCAwKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4rXG4rXHRlcnIgPSBjcmVhdGVfcGFpcihBRl9JTkVULCBTT0NLX1NUUkVBTSwgXHUwMDI2YywgXHUwMDI2cCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiY3JlYXRlX3BhaXJcIikpXG4rXHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4rXG4rXHRlcnIgPSB4c2V0c29ja29wdChjLCBTT0xfU09DS0VULCBTT19TTkRCVUYsIFx1MDAyNnNuZGJ1Ziwgc2l6ZW9mKHNuZGJ1ZikpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXRfZGVzdHJveTtcbitcbitcdGVyciA9IHhzZXRzb2Nrb3B0KHAsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgXHUwMDI2c25kYnVmLCBzaXplb2Yoc25kYnVmKSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dF9kZXN0cm95O1xuK1xuK1x0ZXJyID0geGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwLCBcdTAwMjZ6ZXJvLCBcdTAwMjZwLCBCUEZfTk9FWElTVCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dF9kZXN0cm95O1xuK1xuK1x0c2VudCA9IHNlbmQoYywgc25kLCBzaXplb2Yoc25kKSwgTVNHX0RPTlRXQUlUKTtcbitcdGlmICghQVNTRVJUX0VRKHNlbnQsIHNpemVvZihzbmQpLCBcInNlbmRcIikpXG4rXHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4rXG4rXHRyZWN2ZCA9IHJlY3ZfdGltZW91dChwLCBcdTAwMjZyY3YsIHNpemVvZihyY3YpLCBNU0dfRE9OVFdBSVQsXG4rXHRcdFx0ICAgICBJT19USU1FT1VUX1NFQyk7XG4rXHRpZiAoIUFTU0VSVF9FUShyZWN2ZCwgc2l6ZW9mKHJjdiksIFwicmVjdl90aW1lb3V0XCIpIHx8XG4rXHQgICAgIUFTU0VSVF9FUShyY3YsIHNuZFswXSwgXCJkYXRhIG1pc21hdGNoXCIpKVxuK1x0XHRnb3RvIG91dF9kZXN0cm95O1xuK1xuK1x0ZXJyID0gc29ja21hcF9zdHJwX2dldF9md2RfYWxsb2MocCwgXHUwMDI2ZndkX2FsbG9jKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvY1wiKSB8fFxuK1x0ICAgICFBU1NFUlRfR0UoZndkX2FsbG9jLCAwLCBcInNrX2ZvcndhcmRfYWxsb2NcIikpXG4rXHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4rb3V0X2Rlc3Ryb3k6XG4rXHR0ZXN0X3NvY2ttYXBfc3RycF9fZGVzdHJveShzdHJwKTtcbitcdGlmIChjIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoYyk7XG4rXHRpZiAocCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKHApO1xuK31cbitcbiB2b2lkIHRlc3Rfc29ja21hcF9zdHJwKHZvaWQpXG4ge1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJzb2NrbWFwIHN0cnAgdGNwIHBhc3NcIikpXG5AQCAtNDgyLDQgKzY1MSw2IEBAIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnAodm9pZClcbiBcdFx0dGVzdF9zb2NrbWFwX3N0cnBfZGlzcGF0Y2hfcGt0KEFGX0lORVQsIFNPQ0tfU1RSRUFNKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic29ja21hcCBzdHJwIHBhcnNlciByZWplY3QgcGt0IG1vZFwiKSlcbiBcdFx0dGVzdF9zb2NrbWFwX3N0cnBfcGFyc2VyX3JlamVjdCgpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJzb2NrbWFwIHN0cnAgc2VsZiBwYXNzIGZ3ZCBhbGxvY1wiKSlcbitcdFx0dGVzdF9zb2NrbWFwX3N0cnBfc2VsZl9wYXNzX2Z3ZF9hbGxvYygpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXG5pbmRleCBmZTg4ZmE2ZDQwYmM1Li42ODJlNTNkNDA3NTFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXG5AQCAtNTAsNiArNTAsMTIgQEAgaW50IHByb2dfc2tiX3BhcnNlcl9wYXJ0aWFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiBcdHJldHVybiAxMDtcbiB9XG4gXG4rU0VDKFwic2tfc2tiL3N0cmVhbV9wYXJzZXJcIilcbitpbnQgcHJvZ19za2JfcGFyc2VyX29uZShzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuIFNFQyhcInNrX3NrYi9zdHJlYW1fcGFyc2VyXCIpXG4gaW50IHByb2dfc2tiX3BhcnNlcl9yZXNpemUoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ0OjE1LjU3MTM0NjQxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NDkwODg2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2g6IFNvY2ttYXAvU0tNU0cgQ29yZSBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3MgdG91Y2hpbmcgcHJldHR5IGNyaXRpY2FsIHN0dWZmIHdpdGhpbiB0aGUgQlBGIHNvY2ttYXAgaW5mcmFzdHJ1Y3R1cmUuIFdlIGhhdmUgbW9kaWZpY2F0aW9ucyB0byBgbmV0L2NvcmUvc2ttc2cuY2Agd2hpY2gsIGlmIEkgcmVtZW1iZXIgY29ycmVjdGx5LCBpcyBjb21waWxlZCB3aXRoIGBDT05GSUdfTkVUX1NPQ0tfTVNHYC4gVGhhdCdzIHRoZSBoZWFydCBvZiB0aGUgU0tNU0cgZnVuY3Rpb25hbGl0eSwgYW5kIHRoYXQgYWx3YXlzIGdldHMgbXkgYXR0ZW50aW9uLiBXZSdyZSBhbHNvIHNlZWluZyBhIGNvcnJlc3BvbmRpbmcgdGVzdCBhZGRlZCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNgLCB3aGljaCBpcyBnb29kOyByZWdyZXNzaW9uIHRlc3RzIGFyZSBjcnVjaWFsLCBidXQgbGV0J3Mgc2VlIGlmIGl0J3MgdGhvcm91Z2guXG5cblNwZWNpZmljYWxseSwgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIHJld29ya2luZyBob3cgYHNrX2ZvcndhcmRfYWxsb2NgIGlzIGhhbmRsZWQgd2hlbiBhIGBzdHJwYXJzZXJgIFNLX1BBU1Mgc2tiIGdldHMgZGVsaXZlcmVkIHRvIHRoZSAqc2FtZSogc29ja2V0LiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSBhIHZlcnkgdHJpY2t5IGFyZWEgZnJvbSBhIGNvbmN1cnJlbmN5IGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IHBlcnNwZWN0aXZlLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoZSBleGFjdCBmdW5jdGlvbnMgaW52b2x2ZWQuIEknbSBzZWVpbmcgY2hhbmdlcyB0bzogYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nYCwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCwgYHNrX3Bzb2NrX2hhbmRsZV9za2JgLCBgc2tfcHNvY2tfYmFja2xvZ2AsIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAuIFRoYXQncyBhIGNvbXByZWhlbnNpdmUgdG91Y2ggb24gdGhlIGluZ3Jlc3MgcGF0aC4gTG9va3MgbGlrZSB3ZSdyZSBpbnRyb2R1Y2luZyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gLCB3aGljaCBwcm9iYWJseSBtZWFucyB3ZSdyZSB0cnlpbmcgdG8gb3B0aW1pemUgdGhlIGRpcmVjdCBpbmdyZXNzIHBhdGggdG8gdGhlIHNvY2tldCwgb3Igc29tZXRoaW5nIGxpa2UgdGhhdC5cblxuR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzIGFuZCB0aGUgY2VudHJhbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMsIHRoaXMgaXMgZGVmaW5pdGVseSBrZXJuZWwgbG9naWMgdGhhdCdzIHdvcnRoIGEgKnZlcnkqIGNsb3NlIGxvb2sgYW5kIGxpa2VseSBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgdmVyaWZ5IHRoZSBrZXJuZWwgY29uZmlncyDigJMgY29uZmlybSBgQ09ORklHX05FVF9TT0NLX01TR2AgYW5kIHBvc3NpYmx5IG90aGVyIHJlbGF0ZWQgb25lcywgYW5kIHRoZW4gaXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaG93IGBza19mb3J3YXJkX2FsbG9jYCBpcyBhY3R1YWxseSBiZWluZyB1c2VkIGluIHRoaXMgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI4MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ0OjIyLjEyMDQzNzM2M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzAwNDY1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza21zZy5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTQzPW9iai0kKENPTkZJR19GQUlMT1ZFUikgKz0gZmFpbG92ZXIub1xcbm5ldC9jb3JlL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHNrbXNnLm9cXG5uZXQvY29yZS9NYWtlZmlsZS00NS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHNvY2tfbWFwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDQ6MjIuMTY3NDQ4Njk4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4MTY3NDUxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCoqXG5cbkFscmlnaHQsIHRoZSBjb2RlJ3MgcG9pbnRpbmcgdG8gYSByZXF1aXJlbWVudCBmb3IgYENPTkZJR19ORVRfU09DS19NU0dgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgY29uZmlndXJhYmlsaXR5IG9mIHRoaXMgb3B0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIGNvbmZpZ3VyYXRpb25zIHRyaWdnZXIgdGhpcyBzZXR0aW5nLiBJcyBpdCBzb21ldGhpbmcgdGhhdCdzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYmFzZWQgb24gYW5vdGhlciBjaG9pY2UgaGlnaGVyIHVwIGluIHRoZSBjb25maWd1cmF0aW9uIGhpZXJhcmNoeSwgb3IgaXMgaXQgZGlyZWN0bHkgdXNlci1zZWxlY3RhYmxlPyBJcyB0aGVyZSBzb21lIGNvbnRleHQgSSdtIG1pc3Npbmc/IEkgbmVlZCB0byBkcmlsbCBkb3duIGFuZCBzZWUgKndoYXQqIGV4YWN0bHkgc2VsZWN0cyB0aGlzIG9yIGdpdmVzIG1lIHRoZSBhYmlsaXR5IHRvIGRlY2lkZS4gVGhpcyB3aWxsIGhlbHAgbWUgZGlhZ25vc2Ugd2h5IHRoaXMgaXMgYmVpbmcgcmVxdWVzdGVkIGFuZCB3aGF0IGltcGFjdCBpdCB3aWxsIGhhdmUgb24gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJ2xsIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgS2NvbmZpZyBmaWxlcywgc3RhcnRpbmcgd2l0aCB0aGUgaW1tZWRpYXRlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHRoZW4gdHJhY2luZyBiYWNrIHRvIHNlZSB3aGF0IHBhdGhzIGxlYWQgdG8gaXRzIGFjdGl2YXRpb24uIFVuZGVyc3RhbmRpbmcgdGhpcyBkZXBlbmRlbmN5IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE4NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ0OjI1Ljg0OTEyNTM2N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgyMjMxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NPQ0tfTVNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTQ3NT1jb25maWcgTkVUX1NFTEZURVNUU1xcbi0tXFxubmV0L0tjb25maWctNDc4LVxcbm5ldC9LY29uZmlnOjQ3OTpjb25maWcgTkVUX1NPQ0tfTVNHXFxubmV0L0tjb25maWctNDgwLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDQ6MjUuODk0OTU5MTIyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1MTQ2OTgzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYSBCb29sZWFuIEZsYWcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHN0dW1ibGVkIHVwb24gYSBoaWRkZW4gYm9vbGVhbiB2YXJpYWJsZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgZGVlcGVyIGFuZCB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlLiBcIkhpZGRlblwiIHVzdWFsbHkgbWVhbnMgdGhlcmUncyBhIHJlYXNvbiBpdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLCBhbmQgdGhhdCByZWFzb24gaXMgbGlrZWx5IGdvaW5nIHRvIHByb3ZpZGUgdGhlIGltcG9ydGFudCBpbmZvcm1hdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byB0cmFjZSBhbGwgdGhlIHBvdGVudGlhbCBjb2RlIHBhdGhzIHRoYXQgY291bGQgcG9zc2libHkgc2V0IG9yIG1vZGlmeSB0aGlzIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBhIGNoYW5nZSBpbiBpdHMgc3RhdGU7IHdoYXQgY29kZSBzZWxlY3RzIChvciBzZXRzKSBpdD8gS25vd2luZyAqd2hlbiogdGhpcyBmbGFnIGZsaXBzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBzeXN0ZW0ncyBvdmVyYWxsIGxvZ2ljLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBpbmZlciB0aGUgbGFyZ2VyIGRlc2lnbiBjb250ZXh0IGFuZCBzZWUgd2hhdCB0aGlzIGJvb2wgaXMgbWVhbnQgdG8gc2lnbmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTI5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDQ6MjkuMjQ2NDMxMTY1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTQ4MTUyNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE5FVF9TT0NLX01TR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctMzMtXFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG5rZXJuZWwvYnBmL0tjb25maWc6MzQ6XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG5rZXJuZWwvYnBmL0tjb25maWctMzUtXFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuLS1cXG5uZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXFxuLS1cXG5uZXQvS2NvbmZpZy0zNjYtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvS2NvbmZpZzozNjc6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9LY29uZmlnLTM2OC1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zODUtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvaXB2NC9LY29uZmlnOjM4NjpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjQvS2NvbmZpZy0zODctXFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTkzLVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L2lwdjYvS2NvbmZpZzo5NDpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjYvS2NvbmZpZy05NS1cXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbi0tXFxubmV0L3Rscy9LY29uZmlnPTU9Y29uZmlnIFRMU1xcbi0tXFxubmV0L3Rscy9LY29uZmlnLTEwLVxcdHNlbGVjdCBDUllQVE9fR0NNXFxubmV0L3Rscy9LY29uZmlnOjExOlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvdGxzL0tjb25maWctMTItXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ0OjMwLjk0MTI1NjQ1OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2ODA4NDU4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGlzIEJQRiBTZWxlY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhlIHN5c3RlbSBpcyB1c2luZyBgQlBGX1NZU0NBTExgIGFsb25nIHdpdGggdGhlIGBORVRgIHNldHRpbmcgdG8gbWFrZSBhIHNlbGVjdGlvbi4gRnVydGhlcm1vcmUsIHRoZSBgQlBGX1NUUkVBTV9QQVJTRVJgIGFsc28gY29tZXMgaW50byBwbGF5IGhlcmUuIFRoZSBwYXRjaCBtZW50aW9ucyBgc3RycGFyc2VyYCBhbmQgYHNrYl9icGZfc3RycGFyc2VyYCwgd2hpY2ggaXMgYSBjbHVlLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBCUEZfU1RSRUFNX1BBUlNFUmAgbm93IHRvIGJldHRlciB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgcHJvY2Vzcy4gVGltZSB0byBkaWcgaW4gYSBiaXQgZnVydGhlciBvbiB0aGF0IHBhcnRpY3VsYXIgY29kZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTI0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDQ6MzUuNjIyMTA5NzM1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYzMTQ0NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0zNTQ9Y29uZmlnIEJRTFxcbi0tXFxubmV0L0tjb25maWctMzYwLVxcbm5ldC9LY29uZmlnOjM2MTpjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcXG5uZXQvS2NvbmZpZy0zNjItXFx0Ym9vbCBcXFwiZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NDozNy4zODUyNTk3OTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwNDY2NTI5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3VnZ2VzdGluZyB0aGUgaW5jbHVzaW9uIG9mIGBCUEZfU1RSRUFNX1BBUlNFUmAgYXMgYSB1c2VyLXNlbGVjdGFibGUgY29uZmlndXJhdGlvbiBvcHRpb24uIE1ha2VzIHNlbnNlOyBmbGV4aWJpbGl0eSBpcyBrZXkgaW4gQlBGLiBJJ2xsIG1ha2Ugc3VyZSB0aGF0J3MgYWNjb3VudGVkIGZvci4gSSdsbCBhbHNvIGFkZCBpbiBgQlBGX1NZU0NBTExgIOKAkyB0aGF0J3MgYSBnaXZlbiBmb3IgQlBGIGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gdGhlIGNvcmUgb2YgdGhpcy4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBzeW1ib2xzIHRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nLiBSaWdodCwgaGVyZSB0aGV5IGFyZTogYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nYCwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCwgYHNrX3Bzb2NrX2hhbmRsZV9za2JgLCBgc2tfcHNvY2tfYmFja2xvZ2AsIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAuIFRoZXkncmUgYWxsIHN0YXRpYywgd2hpY2ggZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucy4gS25vd2luZyB0aGUgY2FsbGVycyB3aWxsIGlsbHVtaW5hdGUgZXhhY3RseSBob3cgdGhlc2UgY2hhbmdlcyBhcmUgYmVpbmcgaW50ZWdyYXRlZCBhbmQgd2hhdCBpbXBhY3QgdGhleSdsbCBoYXZlIG9uIHRoZSBleGlzdGluZyBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDQ6NDEuNTg5OTI3ODY3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTExMjQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja19iYWNrbG9nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrbXNnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2ttc2cuYz03MzI9c3RhdGljIHZvaWQgc2tfcHNvY2tfc2tiX3N0YXRlKHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTc0My1cXG5uZXQvY29yZS9za21zZy5jOjc0NDpzdGF0aWMgdm9pZCBza19wc29ja19iYWNrbG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvY29yZS9za21zZy5jLTc0NS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTgzMT1zdHJ1Y3Qgc2tfcHNvY2sgKnNrX3Bzb2NrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbm9kZSlcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtODY1LVxcbm5ldC9jb3JlL3NrbXNnLmM6ODY2OlxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZwc29jay1cXHUwMDNld29yaywgc2tfcHNvY2tfYmFja2xvZyk7XFxubmV0L2NvcmUvc2ttc2cuYy04NjctXFx0bXV0ZXhfaW5pdChcXHUwMDI2cHNvY2stXFx1MDAzZXdvcmtfbXV0ZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NDo0MS42MzUwNDQyODJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA5NjMxMzk2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqUG9uZGVyaW5nIFNvY2tldCBGaWx0ZXJpbmcgYW5kIFdvcmtxdWV1ZXMqKlxuXG5SaWdodCwgc28gYHNrX3Bzb2NrX2JhY2tsb2dgLi4uIHRoYXQncyBkZWZpbml0ZWx5IGEgd29ya3F1ZXVlIGNhbGxiYWNrLCBpc24ndCBpdD8gT2theSwgZ290IGl0LiBJdCdzIGhhbmRsaW5nIGJhY2tsb2dnZWQgcGFja2V0IHNvY2tldHMuIE5vdywgd2hhdCdzIGJ1Z2dpbmcgbWUgaXMuLi4gSSdtIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgZnVuY3Rpb25zIGluIHRoYXQgYXJlYS4gV2hlcmUgZG9lcyB0aGlzIHdvcmtxdWV1ZSBmaXQgd2l0aCBvdGhlciBmaWx0ZXJpbmcgbWVjaGFuaXNtcz8gTGV0IG1lIHNlZS4uLiBJIHdvbmRlciBob3cgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGZpZ3VyZXMgaW50byBhbGwgdGhpcy4gSXMgaXQgY2FsbGVkIGJlZm9yZSwgYWZ0ZXIsIG9yIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnRseSBvZiB0aGUgd29ya3F1ZXVlIGNhbGxiYWNrPyBEb2VzIGl0IGluZmx1ZW5jZSB3aGF0IGdldHMgZW5xdWV1ZWQ/IElzIGl0IHRoZSB1bHRpbWF0ZSBkZWNpc2lvbi1tYWtlciwgb3IganVzdCBhIHBhcnQgb2YgdGhlIHByb2Nlc3M/IEkgc2hvdWxkIHJlYWxseSBtYWtlIHN1cmUgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDcyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDQ6NDguNzMxMzYwOTU3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzE5MDgxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja192ZXJkaWN0X2FwcGx5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrbXNnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2ttc2cuYz0xMDM5PXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHN0cnVjdCBza19wc29jayAqZnJvbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTA3Ni1cXG5uZXQvY29yZS9za21zZy5jOjEwNzc6c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2ttc2cuYy0xMDc4LVxcdFxcdFxcdFxcdCAgaW50IHZlcmRpY3QpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTExNjA9c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExODMtXFx0fVxcbm5ldC9jb3JlL3NrbXNnLmM6MTE4NDpcXHRza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMTg1LW91dDpcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTI4Mz1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEzMDYtXFx0fVxcbm5ldC9jb3JlL3NrbXNnLmM6MTMwNzpcXHRyZXQgPSBza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMzA4LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NDo0OC43NzQ1NTgxNjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAxMTU2MjAyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyB0aGUgUFNPQ0sgVmVyZGljdCBBcHBsaWNhdGlvbiBQYXRoKipcblxuUmlnaHQsIHNvIGBza19wc29ja19zdHJwX3JlYWRgIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCBib3RoIHNlZW0gdG8gaGluZ2Ugb24gYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSBjcml0aWNhbCwgYmVjYXVzZSB0aGF0IG1lYW5zIGFsbCB0cmFmZmljIHRoYXQgbmVlZHMgdG8gYmUgY29uc2lkZXJlZCBieSB0aGUgcHJvY2VzcyBsaWtlbHkgcGFzc2VzIHRocm91Z2ggdGhhdCBmdW5jdGlvbiBhdCBzb21lIHBvaW50LiBJdOKAmXMgdGhlIGNlbnRyYWwgcG9pbnQgd2hlcmUgdGhlIGRlY2lzaW9ucyBhYm91dCBwYWNrZXQgaGFuZGxpbmcgYXJlIG1hZGUgaW4gdGhpcyBQU09DSyAocGFja2V0IHNvY2tldCkgY29udGV4dCwgb3IgcGVyaGFwcyB3aGVyZSB0aGV5IGFyZSAqYXBwbGllZCogYXQgbGVhc3QuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGJldHRlci4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBoaWVyYXJjaHkg4oCTIHdobyAqZWxzZSogaXMgdXNpbmcgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCBhbmQgaWYgaXQncyBleHBvcnRlZCwgdGhlbiB3aGVyZSBhcmUgdGhvc2UgY2FsbHMgb3JpZ2luYXRpbmcgZnJvbT8gSXMgaXQgc29sZWx5IHdpdGhpbiB0aGUga2VybmVsIHNwYWNlLCBvciBpcyB0aGVyZSBhIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gaW52b2x2ZWQ/IFRoYXQgbGV2ZWwgb2YgZGV0YWlsIG1hdHRlcnMgKmEgbG90KiB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JraW5nIGFuZCBzZWN1cml0eSwgYW5kIGl0IGluZm9ybXMgd2hldGhlciB0aGlzIHdvdWxkIGJlIHNvbWV0aGluZyB0aGF0IG5lZWRzIGF0dGVudGlvbi4gQXJlIHRoZXJlIGFueSBvdGhlciBwYXRocyB0byBpdCwgYW5kIGFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBmdW5jdGlvbnMgdG8gY29uc2lkZXI/IFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHBvbGljeSBkZWNpc2lvbnMgYXJlIG1hZGUgZm9yIHRoZXNlIHBhY2tldCBzb2NrZXRzIGFuZCBzZWUgd2hhdCBhdmVudWVzIGV4aXN0IHRvIHBvdGVudGlhbGx5IGluZmx1ZW5jZSBvciBtb2RpZnkgdGhhdCBwcm9jZXNzLCBpZiB0aGUgbmVlZCBhcmlzZXMuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY5MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ0OjU4Ljg5MDE4MTY0NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0NTMwNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tfcHNvY2tfc3RycF9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrbXNnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2ttc2cuYz0xMTQyPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTE1OS0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxubmV0L2NvcmUvc2ttc2cuYzoxMTYwOnN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfcmVhZChzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTE2MS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExODgtXFxubmV0L2NvcmUvc2ttc2cuYzoxMTg5OnN0YXRpYyBpbnQgc2tfcHNvY2tfc3RycF9yZWFkX2RvbmUoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgaW50IGVycilcXG5uZXQvY29yZS9za21zZy5jLTExOTAte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMjI4PWludCBza19wc29ja19pbml0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjMyLVxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RycF9jYWxsYmFja3MgY2IgPSB7XFxubmV0L2NvcmUvc2ttc2cuYzoxMjMzOlxcdFxcdC5yY3ZfbXNnXFx0PSBza19wc29ja19zdHJwX3JlYWQsXFxubmV0L2NvcmUvc2ttc2cuYzoxMjM0OlxcdFxcdC5yZWFkX3NvY2tfZG9uZVxcdD0gc2tfcHNvY2tfc3RycF9yZWFkX2RvbmUsXFxubmV0L2NvcmUvc2ttc2cuYy0xMjM1LVxcdFxcdC5wYXJzZV9tc2dcXHQ9IHNrX3Bzb2NrX3N0cnBfcGFyc2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ0OjU4LjkzMzY0MTkyMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODgyNDc4OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDb25zaWRlcmluZyBgc2tfcHNvY2tfaW5pdF9zdHJwYCdzIFNjb3BlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHNrX3Bzb2NrX2luaXRfc3RycGAuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpczogaXMgdGhpcyBmdW5jdGlvbiBleHBvc2VkLCBtZWFuaW5nIGlzIGl0IGV4cG9ydGVkIG9yIG5vbi1zdGF0aWM/IElzIGl0IG1lYW50IHRvIGJlIHVzZWQgZXh0ZXJuYWxseSwgb3IgaXMgaXQgaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBtb2R1bGUgb3IgY29tcG9uZW50PyBJIG5lZWQgdG8gZmlndXJlIG91dCBpdHMgdmlzaWJpbGl0eS4gS25vd2luZyB0aGlzIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBpbmZvcm1zIGhvdyBJIGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBmdW5jdGlvbiwgaWYgYXQgYWxsLCBpbiBteSBvd24gd29yay4gQSBub24tc3RhdGljIGZ1bmN0aW9uIGltcGxpZXMgaXQncyBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLCBhbmQgSSBjYW4gY2FsbCBpdCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEEgc3RhdGljIG9uZSwgaG93ZXZlciwgaXMgbGlrZWx5IG9ubHkgbWVhbnQgZm9yIHVzZSB3aXRoaW4gaXRzIGRlZmluaW5nIHRyYW5zbGF0aW9uIHVuaXQuIFRoYXQgbWFrZXMgYSBodWdlIGRpZmZlcmVuY2UgaW4gaG93IEkgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NTEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NTowNS44MTYxMjM1MDhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjM3MTM3NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tfcHNvY2tfaW5pdF9zdHJwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2ttc2cuaD00Mzc9dm9pZCBza19wc29ja19zdG9wKHN0cnVjdCBza19wc29jayAqcHNvY2spO1xcbi0tXFxuaW5jbHVkZS9saW51eC9za21zZy5oLTQzOS0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxuaW5jbHVkZS9saW51eC9za21zZy5oOjQ0MDppbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayk7XFxuaW5jbHVkZS9saW51eC9za21zZy5oLTQ0MS12b2lkIHNrX3Bzb2NrX3N0YXJ0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmg9NDQyPXZvaWQgc2tfcHNvY2tfc3RvcF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayk7XFxuaW5jbHVkZS9saW51eC9za21zZy5oLTQ0My0jZWxzZVxcbmluY2x1ZGUvbGludXgvc2ttc2cuaDo0NDQ6c3RhdGljIGlubGluZSBpbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDQ1LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTIxMj1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjI3LVxcbm5ldC9jb3JlL3NrbXNnLmM6MTIyODppbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTEyMjkte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0yMTc9c3RhdGljIGludCBzb2NrX21hcF9saW5rKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzA2LVxcdFxcdGlmIChza19pc190Y3Aoc2spKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzA3OlxcdFxcdFxcdHJldCA9IHNrX3Bzb2NrX2luaXRfc3RycChzaywgcHNvY2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzA4LVxcdFxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDU6MDcuMzc5ODQyNTg2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MTM2NTA2NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2FsbGJhY2sgSW52ZXN0aWdhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gTXkgbWVudGFsIG1vZGVsIGhlcmUgaXMgdGhhdCBgc2tfcHNvY2tfc3RycF9yZWFkYCBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBiZSB1c2VkIHdpdGggdGhlIHN0cnBhcnNlci4gTWFrZXMgc2Vuc2UuIEl0J3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSByZWFkaW5nIHBhcnQgb2YgcGFyc2luZyBkYXRhIGludG8gYSBzdHJpbmcgZm9ybWF0LCB1c2luZyB0aGlzIHN0cnBhcnNlci4gQnV0IHdoYXQgYWJvdXQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmA/IFRoYXQgb25lJ3MgbmFnZ2luZyBhdCBtZSBhIGJpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBvdmVyYWxsIHN5c3RlbS4gSXMgaXQgYWxzbyByZWxhdGVkIHRvIGRhdGEgcmVjZXB0aW9uLCBidXQgcGVyaGFwcyBhdCBhIGhpZ2hlciBsZXZlbCwgYWZ0ZXIgdGhlIGluaXRpYWwgc3RyaW5nIHBhcnNpbmc/IElzIGl0IHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc2VjdXJpdHkgdmVyZGljdHMgYmFzZWQgb24gdGhlIHJlY2VpdmVkIGRhdGEsIG9yIGlzIGl0IHJlbGF0ZWQgdG8gcmVjZWl2aW5nIHRoZSByYXcgdmVyZGljdCBpbmZvcm1hdGlvbj8gVGltZSB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBsb29rIGludG8gdGhlIGJyb2FkZXIgY29udGV4dCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSB0d28gZnVuY3Rpb25zIGludGVyYWN0IGFuZCBmaXQgdG9nZXRoZXIgaW4gdGhlIGFyY2hpdGVjdHVyZS4gSXQncyBsaWtlbHkgdGhhdCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCB0YWtlcyBhY3Rpb24gb24gdGhlIGluZm9ybWF0aW9uIHJlY2VpdmVkIGJ5IGBza19wc29ja19zdHJwX3JlYWRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdywgYW5kIGhvdyBpdCBpbmZvcm1zIHRoZSBvdmVyYWxsIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTU1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDU6MTUuMTkzNDk2MDM3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDkzNDM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja192ZXJkaWN0X3JlY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za21zZy5jPTEyNzg9c3RhdGljIHZvaWQgc2tfcHNvY2tfZG9uZV9zdHJwKHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyODItXFxubmV0L2NvcmUvc2ttc2cuYzoxMjgzOnN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9za21zZy5jLTEyODQte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMzE1PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEzMzEtXFxubmV0L2NvcmUvc2ttc2cuYzoxMzMyOlxcdGNvcGllZCA9IG9wcy1cXHUwMDNlcmVhZF9za2Ioc2ssIHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdik7XFxubmV0L2NvcmUvc2ttc2cuYy0xMzMzLVxcdGlmIChjb3BpZWQgXFx1MDAzZT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NToxNS4yMzg0MzY4MjJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYyNTU5MTIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeWAqKlxuXG5Pa2F5LCBzbyBgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5YC4gSXQncyBhIGNhbGxiYWNrLCBhbmQgYSBwcmV0dHkgc3BlY2lmaWMgb25lIGF0IHRoYXQuIE15IGZpcnN0IHRob3VnaHQgaXM6IHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqPyBJIG5lZWQgdG8gdHJhY2UgaXRzIGNvbm5lY3Rpb25zLiBJIHdhbnQgdG8gc2VlIHdoaWNoIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIHRyaWdnZXJpbmcgaXQgYW5kIHdoYXQga2luZCBvZiBkYXRhIG9yIGFjdGlvbnMgYXJlIGJlaW5nIHByb2Nlc3NlZCB3aGVuIGl0J3MgY2FsbGVkLiBHb3R0YSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IHRvIGdyYXNwIGl0cyB0cnVlIHB1cnBvc2UgYW5kIGZ1bmN0aW9uLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzE3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDU6MjEuODY0MDMxNjY2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA3NzUzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za21zZy5jPTEyODM9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMzE0LVxcbm5ldC9jb3JlL3NrbXNnLmM6MTMxNTpzdGF0aWMgdm9pZCBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTMxNi17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTEzNDI9dm9pZCBza19wc29ja19zdGFydF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTM0Ny1cXHRwc29jay1cXHUwMDNlc2F2ZWRfZGF0YV9yZWFkeSA9IHNrLVxcdTAwM2Vza19kYXRhX3JlYWR5O1xcbm5ldC9jb3JlL3NrbXNnLmM6MTM0ODpcXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza19kYXRhX3JlYWR5LCBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTM0OS1cXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza193cml0ZV9zcGFjZSwgc2tfcHNvY2tfd3JpdGVfc3BhY2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NToyMS45MTAxMTU1NTFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc3NzA1MjM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAgRXhwb3J0KipcblxuT2theSwgc28gYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgIGlzIGV4cG9ydGVkLiBUaGF0J3MgdGhlIGtleS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCdzIHRvdWNoaW5nIGl0PyBXaGF0IHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIHJlbHlpbmcgb24gdGhpcyBmdW5jdGlvbmFsaXR5P1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGguIEknbGwgbmVlZCB0byBpZGVudGlmeSB0aGUgY2FsbCBzaXRlcyB0byBmdWxseSBncm9rIGl0cyBwdXJwb3NlIGFuZCBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBJJ20gbG9va2luZyBmb3Igd2hlcmUgdGhpcyBmdW5jdGlvbiBob29rcyBpbnRvLCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGl0cyBleGVjdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTg1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDU6MjYuNjg3MTcwMDk2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgzODE5NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za21zZy5oPTQ1Mz1zdGF0aWMgaW5saW5lIHZvaWQgc2tfcHNvY2tfc3RvcF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbmluY2x1ZGUvbGludXgvc2ttc2cuaC00NTctXFxuaW5jbHVkZS9saW51eC9za21zZy5oOjQ1ODp2b2lkIHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDU5LXZvaWQgc2tfcHNvY2tfc3RvcF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayk7XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTEzMTU9c3RhdGljIHZvaWQgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTM0MS1cXG5uZXQvY29yZS9za21zZy5jOjEzNDI6dm9pZCBza19wc29ja19zdGFydF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTEzNDMte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0yMTc9c3RhdGljIGludCBzb2NrX21hcF9saW5rKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzE2LVxcdH0gZWxzZSBpZiAoIXN0cmVhbV9wYXJzZXIgXFx1MDAyNlxcdTAwMjYgc3RyZWFtX3ZlcmRpY3QgXFx1MDAyNlxcdTAwMjYgIXBzb2NrLVxcdTAwM2VzYXZlZF9kYXRhX3JlYWR5KSB7XFxubmV0L2NvcmUvc29ja19tYXAuYzozMTc6XFx0XFx0c2tfcHNvY2tfc3RhcnRfdmVyZGljdChzayxwc29jayk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0zMTgtXFx0fSBlbHNlIGlmICghc3RyZWFtX3ZlcmRpY3QgXFx1MDAyNlxcdTAwMjYgc2tiX3ZlcmRpY3QgXFx1MDAyNlxcdTAwMjYgIXBzb2NrLVxcdTAwM2VzYXZlZF9kYXRhX3JlYWR5KSB7XFxubmV0L2NvcmUvc29ja19tYXAuYzozMTk6XFx0XFx0c2tfcHNvY2tfc3RhcnRfdmVyZGljdChzaywgcHNvY2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzIwLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDU6MjguMjcwOTk0MDAyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDM1Mzg3NTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFNvY2tldCBNYXAgTGlua2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBCUEYgc29ja2V0IG1hcCBsaW5raW5nLiBUaGUgZW50cnkgcG9pbnQsIGFzIEkgc2VlIGl0LCBpcyBgc29ja19tYXBfbGlua2AsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIHRoZSBCUEYgc3lzY2FsbC4gVGhlIG1haW4gZnVuY3Rpb25zIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2ggYXJlIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYmFja2xvZ2AsIGBza19wc29ja19za2JfaW5ncmVzc2AsIGBza19wc29ja19oYW5kbGVfc2tiYCwgYHNrX3Bzb2NrX2JhY2tsb2dgLCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIExldCdzIHNlZSwgd2UgaGF2ZSBgc2tfcHNvY2tfYmFja2xvZ2AgKGEgd29ya3F1ZXVlIGNhbGxiYWNrKSwgYHNrX3Bzb2NrX3N0cnBfcmVhZGAgKGEgc3RyaW5nIHBhcnNlciBjYWxsYmFjayksIGBza19wc29ja192ZXJkaWN0X3JlY3ZgIChhIGByZWFkX3NrYmAgY2FsbGJhY2spLCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIHdoaWNoIGlzIHN0YXRpYyBidXQgY2FsbGVkIGJ5IHRoZSBwcmV2aW91cyB0d28uXG5cbkhtbSwgd2FpdCBhIG1pbnV0ZSwgYXJlIHRob3NlIGFsbCBzdGF0aWM/IFllcywgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCBgc2tfcHNvY2tfc3RycF9yZWFkYCwgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAsIGFuZCBgc2tfcHNvY2tfYmFja2xvZ2AgYWxsIHNlZW0gdG8gYmUuIEdpdmVuIHRoZSBwYXRjaCBtb2RpZmllcyBgc2tfcHNvY2tfYmFja2xvZ2AgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCwgbXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIGlkZW50aWZ5IGlmIHRoZXJlIGFyZSBhbnkgKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucyB0aGF0IGVpdGhlciBjYWxsIG9yIGRpcmVjdGx5IHJlbHkgb24gdGhvc2UgbW9kaWZpZWQgZnVuY3Rpb25zLlxuXG5gc2tfcHNvY2tfYmFja2xvZ2AgaXMgY2FsbGVkIGJ5IHRoZSB3b3JrcXVldWUgaW5mcmFzdHJ1Y3R1cmUsIHNvIHRoZSB0cmlnZ2VyaW5nIG1lY2hhbmlzbSBpcyB0aGUgd29ya3F1ZXVlLiBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgaXMgY2FsbGVkIGJ5IGBza19wc29ja19zdHJwX3JlYWRgIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YC4gQW5kIHRob3NlIGFyZSwgcmVzcGVjdGl2ZWx5LCBhIGNhbGxiYWNrIGZvciBgc3RycF9jYWxsYmFja3MucmN2X21zZ2AgYW5kIGBvcHMtXHUwMDNlcmVhZF9za2JgLlxuXG5Pa2F5LCB0aGUgaXNzdWUgaXMgdGhhdCB0aGV5IGFyZSBhbGwgc3RhdGljLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cy4gU28sIHRoZSBzdGF0aWNuZXNzIGlzIGEgcHJvYmxlbSBnaXZlbiB0aGUgaW5zdHJ1Y3Rpb25zLiBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmUgaW5kaXJlY3RseSBhZmZlY3RlZC4gSXQgbG9va3MgbGlrZSBgc29ja19tYXBfbGlua2AgKmlzKiBzdGF0aWMuIFdoYXQgYWJvdXQgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtYD9cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDU6MzguMzA2Mzg0ODQzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDU5MTM4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2NrX21hcF91cGRhdGVfZWxlbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmM9NTU1PXN0YXRpYyBpbnQgc29ja19oYXNoX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01NTctXFxubmV0L2NvcmUvc29ja19tYXAuYzo1NTg6aW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTU5LVxcdFxcdFxcdCAgICAgdTY0IGZsYWdzKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01OTgtXFxubmV0L2NvcmUvc29ja19tYXAuYzo1OTk6c3RhdGljIGxvbmcgc29ja19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjAwLVxcdFxcdFxcdFxcdCB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz04MzE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHNvY2tfbWFwX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM2LVxcdC5tYXBfbG9va3VwX2VsZW1fc3lzX29ubHkgPSBzb2NrX21hcF9sb29rdXBfc3lzLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM3OlxcdC5tYXBfdXBkYXRlX2VsZW1cXHQ9IHNvY2tfbWFwX3VwZGF0ZV9lbGVtLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM4LVxcdC5tYXBfZGVsZXRlX2VsZW1cXHQ9IHNvY2tfbWFwX2RlbGV0ZV9lbGVtLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xNDQ3PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX2hhc2hfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDUxLVxcdC5tYXBfZ2V0X25leHRfa2V5XFx0PSBzb2NrX2hhc2hfZ2V0X25leHRfa2V5LFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ1MjpcXHQubWFwX3VwZGF0ZV9lbGVtXFx0PSBzb2NrX21hcF91cGRhdGVfZWxlbSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NTMtXFx0Lm1hcF9kZWxldGVfZWxlbVxcdD0gc29ja19oYXNoX2RlbGV0ZV9lbGVtLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NTozOC4zNTA5ODE3NDhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU1NDkyMzU2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEYXRhIEZsb3cgb2YgUGFja2V0IFNvY2tldHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBkYXRhIG1vdmVzIHRocm91Z2ggdGhlc2UgcGFja2V0IHNvY2tldHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGF0IGZ1bmN0aW9ucyBsaWtlIGBza19wc29ja19pbml0X3N0cnBgIGFuZCBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAsIGJlY2F1c2UgdGhleSdyZSBub3QgZGVjbGFyZWQgYXMgc3RhdGljLiBCdXQsIHdhaXQsIHRob3NlIGFyZSBqdXN0IGFib3V0ICppbml0aWFsaXppbmcqIHRoaW5ncyBhbmQgc2V0dGluZyB1cCBjYWxsYmFja3MuIFRoZSBhY3R1YWwgdmVyZGljdCwgdGhlIGFjdHVhbCBwcm9jZXNzaW5nIG9mIGRhdGEsIHRoYXQgZG9lc24ndCBoYXBwZW4gdW50aWwgZGF0YSBpcyByZWNlaXZlZCwgcmlnaHQ/XG5cbkRhdGEgcmVjZXB0aW9uLiBUaGF0J3MgdGhlIGtleS4gVGhhdCB0cmlnZ2VycyBgc2tfZGF0YV9yZWFkeWAsIHdoaWNoIHRoZW4gcG9pbnRzIHRvIGVpdGhlciBgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5YCBvciBgc3RycF9kYXRhX3JlYWR5YC4gTm93LCBJIHJlY2FsbCB0aGF0IGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgIGlzIHN0YXRpYywgd2hpY2ggbGltaXRzIGl0cyBzY29wZS4gIE9rYXkuIFdoYXQgYWJvdXQgYHN0cnBfZGF0YV9yZWFkeWA/IExldCBtZSBzZWXigKYgeWVwLCB0aGF0J3MgaW4gYG5ldC9zdHJwYXJzZXIvc3RycGFyc2VyLmNgLCBhcyBJIGV4cGVjdGVkLlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBkYXRhIGZsb3cgaXMgbGlrZWx5IGluaXRpYXRlZCBieSBzb21lIGtpbmQgb2YgZXh0ZXJuYWwgZXZlbnQgY2F1c2luZyBkYXRhIHRvIGJlIHBsYWNlZCBpbiBgc2tfZGF0YV9yZWFkeWAuIFRpbWUgdG8gc2hpZnQgZm9jdXMuIExldCdzIHNoaWZ0IG91ciBnYXplIHRvIGBuZXQvY29yZS9za21zZy5jYCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZSB0aGF0IG1pZ2h0IGJlIGludm9sdmVkIHdpdGggaGFuZGxpbmcgdGhlIGRhdGEgcGF0aCBvciByZWxhdGVkIHByb2Nlc3NpbmcuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzODYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDU6NTMuOTAwMjIwMjk4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE0NzA2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2Etel0uKnNrX3Bzb2NrLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za21zZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrbXNnLmM9NTIyPXN0YXRpYyBzdHJ1Y3Qgc2tfbXNnICphbGxvY19za19tc2coZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy01MzItXFxubmV0L2NvcmUvc2ttc2cuYzo1MzM6c3RhdGljIHN0cnVjdCBza19tc2cgKnNrX3Bzb2NrX2NyZWF0ZV9pbmdyZXNzX21zZyhzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2NvcmUvc2ttc2cuYy01MzQtXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy01NDQtXFxubmV0L2NvcmUvc2ttc2cuYzo1NDU6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2ttc2cuYy01NDYtXFx0XFx0XFx0XFx0XFx0dTMyIG9mZiwgdTMyIGxlbixcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNTg3LVxcbm5ldC9jb3JlL3NrbXNnLmM6NTg4OnN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3NrbXNnLmMtNTg5LVxcdFxcdFxcdFxcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZixcXG5uZXQvY29yZS9za21zZy5jLTU5MC1cXHRcXHRcXHRcXHQgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYyk7XFxubmV0L2NvcmUvc2ttc2cuYzo1OTE6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2coc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG5uZXQvY29yZS9za21zZy5jLTU5Mi1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTU5NS1cXG5uZXQvY29yZS9za21zZy5jOjU5NjpzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2ttc2cuYy01OTctXFx0XFx0XFx0XFx0dTMyIG9mZiwgdTMyIGxlbiwgYm9vbCBzZXR0bGVfZndkX2FsbG9jKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy02MjMtXFxubmV0L2NvcmUvc2ttc2cuYzo2MjQ6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbihzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2NvcmUvc2ttc2cuYy02MjUtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTY0OS0gKi9cXG5uZXQvY29yZS9za21zZy5jOjY1MDpzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za21zZy5jLTY1MS1cXHRcXHRcXHRcXHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTY4MC1cXG5uZXQvY29yZS9za21zZy5jOjY4MTpzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYmFja2xvZyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxcbm5ldC9jb3JlL3NrbXNnLmMtNjgyLVxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNzE0LVxcbm5ldC9jb3JlL3NrbXNnLmM6NzE1OnN0YXRpYyBpbnQgc2tfcHNvY2tfaGFuZGxlX3NrYihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3NrbXNnLmMtNzE2LVxcdFxcdFxcdCAgICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIGluZ3Jlc3MsXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTczMS1cXG5uZXQvY29yZS9za21zZy5jOjczMjpzdGF0aWMgdm9pZCBza19wc29ja19za2Jfc3RhdGUoc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG5uZXQvY29yZS9za21zZy5jLTczMy1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX3Bzb2NrX3dvcmtfc3RhdGUgKnN0YXRlLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy03NDMtXFxubmV0L2NvcmUvc2ttc2cuYzo3NDQ6c3RhdGljIHZvaWQgc2tfcHNvY2tfYmFja2xvZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L2NvcmUvc2ttc2cuYy03NDUte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy04MzAtXFxubmV0L2NvcmUvc2ttc2cuYzo4MzE6c3RydWN0IHNrX3Bzb2NrICpza19wc29ja19pbml0KHN0cnVjdCBzb2NrICpzaywgaW50IG5vZGUpXFxubmV0L2NvcmUvc2ttc2cuYy04MzIte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz04ODQ9RVhQT1JUX1NZTUJPTF9HUEwoc2tfcHNvY2tfaW5pdCk7XFxubmV0L2NvcmUvc2ttc2cuYy04ODUtXFxubmV0L2NvcmUvc2ttc2cuYzo4ODY6c3RydWN0IHNrX3Bzb2NrX2xpbmsgKnNrX3Bzb2NrX2xpbmtfcG9wKHN0cnVjdCBza19wc29jayAqcHNvY2spXFxubmV0L2NvcmUvc2ttc2cuYy04ODcte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy04OTgtXFxubmV0L2NvcmUvc2ttc2cuYzo4OTk6c3RhdGljIHZvaWQgX19za19wc29ja19wdXJnZV9pbmdyZXNzX21zZyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtOTAwLXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtOTEzLVxcbm5ldC9jb3JlL3NrbXNnLmM6OTE0OnN0YXRpYyB2b2lkIF9fc2tfcHNvY2tfemFwX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTkxNS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTkyNC1cXG5uZXQvY29yZS9za21zZy5jOjkyNTpzdGF0aWMgdm9pZCBza19wc29ja19saW5rX2Rlc3Ryb3koc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTkyNi17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTkzNC1cXG5uZXQvY29yZS9za21zZy5jOjkzNTp2b2lkIHNrX3Bzb2NrX3N0b3Aoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTkzNi17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTk0Mi1cXG5uZXQvY29yZS9za21zZy5jOjk0MzpzdGF0aWMgdm9pZCBza19wc29ja19kb25lX3N0cnAoc3RydWN0IHNrX3Bzb2NrICpwc29jayk7XFxubmV0L2NvcmUvc2ttc2cuYy05NDQtXFxubmV0L2NvcmUvc2ttc2cuYzo5NDU6c3RhdGljIHZvaWQgc2tfcHNvY2tfZGVzdHJveShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L2NvcmUvc2ttc2cuYy05NDYte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy05NjktXFxubmV0L2NvcmUvc2ttc2cuYzo5NzA6dm9pZCBza19wc29ja19kcm9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTk3MS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTk4Nj1FWFBPUlRfU1lNQk9MX0dQTChza19wc29ja19kcm9wKTtcXG5uZXQvY29yZS9za21zZy5jLTk4Ny1cXG5uZXQvY29yZS9za21zZy5jOjk4ODpzdGF0aWMgaW50IHNrX3Bzb2NrX21hcF92ZXJkKGludCB2ZXJkaWN0LCBib29sIHJlZGlyKVxcbm5ldC9jb3JlL3NrbXNnLmMtOTg5LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTAwMC1cXG5uZXQvY29yZS9za21zZy5jOjEwMDE6aW50IHNrX3Bzb2NrX21zZ192ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG5uZXQvY29yZS9za21zZy5jLTEwMDItXFx0XFx0XFx0IHN0cnVjdCBza19tc2cgKm1zZylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTAzNz1FWFBPUlRfU1lNQk9MX0dQTChza19wc29ja19tc2dfdmVyZGljdCk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMDM4LVxcbm5ldC9jb3JlL3NrbXNnLmM6MTAzOTpzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChzdHJ1Y3Qgc2tfcHNvY2sgKmZyb20sIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvc2ttc2cuYy0xMDQwLXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTA3Ni1cXG5uZXQvY29yZS9za21zZy5jOjEwNzc6c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2ttc2cuYy0xMDc4LVxcdFxcdFxcdFxcdCAgaW50IHZlcmRpY3QpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExNDEtXFxubmV0L2NvcmUvc2ttc2cuYzoxMTQyOnN0YXRpYyB2b2lkIHNrX3Bzb2NrX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9za21zZy5jLTExNDMte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMTU5LSNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5uZXQvY29yZS9za21zZy5jOjExNjA6c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvc2ttc2cuYy0xMTYxLXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTE4OC1cXG5uZXQvY29yZS9za21zZy5jOjExODk6c3RhdGljIGludCBza19wc29ja19zdHJwX3JlYWRfZG9uZShzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBpbnQgZXJyKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTE5MC17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExOTMtXFxubmV0L2NvcmUvc2ttc2cuYzoxMTk0OnN0YXRpYyBpbnQgc2tfcHNvY2tfc3RycF9wYXJzZShzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTE5NS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyMTEtLyogQ2FsbGVkIHdpdGggc29ja2V0IGxvY2sgaGVsZC4gKi9cXG5uZXQvY29yZS9za21zZy5jOjEyMTI6c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9za21zZy5jLTEyMTMte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjI3LVxcbm5ldC9jb3JlL3NrbXNnLmM6MTIyODppbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTEyMjkte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjQ4LVxcbm5ldC9jb3JlL3NrbXNnLmM6MTI0OTp2b2lkIHNrX3Bzb2NrX3N0YXJ0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTI1MC17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyNTgtXFxubmV0L2NvcmUvc2ttc2cuYzoxMjU5OnZvaWQgc2tfcHNvY2tfc3RvcF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTEyNjAte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjcwLVxcbm5ldC9jb3JlL3NrbXNnLmM6MTI3MTpzdGF0aWMgdm9pZCBza19wc29ja19kb25lX3N0cnAoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTEyNzIte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjc3LSNlbHNlXFxubmV0L2NvcmUvc2ttc2cuYzoxMjc4OnN0YXRpYyB2b2lkIHNrX3Bzb2NrX2RvbmVfc3RycChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTI3OS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyODItXFxubmV0L2NvcmUvc2ttc2cuYzoxMjgzOnN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9za21zZy5jLTEyODQte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMzE0LVxcbm5ldC9jb3JlL3NrbXNnLmM6MTMxNTpzdGF0aWMgdm9pZCBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTMxNi17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEzNDEtXFxubmV0L2NvcmUvc2ttc2cuYzoxMzQyOnZvaWQgc2tfcHNvY2tfc3RhcnRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxubmV0L2NvcmUvc2ttc2cuYy0xMzQzLXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTM1MS1cXG5uZXQvY29yZS9za21zZy5jOjEzNTI6dm9pZCBza19wc29ja19zdG9wX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTM1My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ1OjUzLjk0NTM3MjA3M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTIxNDE1NDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQU29jayBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoZXNlIFBTb2NrIGZ1bmN0aW9ucy4gSSBzZWUgYSBjbGVhciBwYXR0ZXJuIGhlcmUuIFByaW1hcmlseSwgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIOKAkyBgc2tfcHNvY2tfaW5pdGAsIGBza19wc29ja19saW5rX3BvcGAsIGBza19wc29ja19zdG9wYCwgYHNrX3Bzb2NrX2Ryb3BgLCBgc2tfcHNvY2tfaW5pdF9zdHJwYCwgYHNrX3Bzb2NrX3N0YXJ0X3N0cnBgLCBgc2tfcHNvY2tfc3RvcF9zdHJwYCwgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgLCBgc2tfcHNvY2tfc3RvcF92ZXJkaWN0YCDigJMgYXJlIG1vc3RseSBmb2N1c2VkIG9uIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93bi4gU3RhbmRhcmQgc3R1ZmY7IHNldHRpbmcgdXAgcmVzb3VyY2VzLCB0ZWFyaW5nIHRoZW0gZG93bi4gTm90aGluZyBwYXJ0aWN1bGFybHkgZ3JvdW5kYnJlYWtpbmcgdGhlcmUuXG5cblRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBkYXRhIHBhdGguIFRoZSBuZXR3b3JraW5nIHN0YWNrIGlzbid0IGRpcmVjdGx5IGNhbGxpbmcgdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhlIHNvY2tldCBsYXllciBpcyB0cmlnZ2VyaW5nIHRoZSBkYXRhIGZsb3cgdmlhIGBza19kYXRhX3JlYWR5YCBvciBgc2tfd3JpdGVfc3BhY2VgLCBhbmQgd2UncmUgaG9va2luZyBpbnRvIHRoYXQuIFNvLCBpbnN0ZWFkIG9mIHRoZSB1c3VhbCBgdGNwX2RhdGFfcmVhZHlgLCB3ZSBoYXZlIHNvbWV0aGluZyBsaWtlIGBza19wc29ja19zdHJwX2RhdGFfcmVhZHlgIG9yIGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgIHdoaWNoIGFyZSBzdGF0aWMuIFRoZXkgYXJlIHVzZWQgaW50ZXJuYWxseSBmb3IgZGF0YSBoYW5kbGluZy4gVGhpcyBpcyBob3cgdGhlIFBTb2NrIGludGVyYWN0cyB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGBza19wc29ja19tc2dfdmVyZGljdGAgaXMgZXhwb3J0ZWQuIFRoYXQncyBub3Qgd2hhdCBJIGV4cGVjdGVkLiBMZXQncyBkZWx2ZSBpbnRvIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZzsgdGhlcmUgbWF5IGJlIGEgY2x1ZSBoZXJlLiBUaGlzIGJlYXJzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4MDAsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDY6MDEuNDY2NzkwMzg1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg0MzIxMTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3Bzb2NrX21zZ192ZXJkaWN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2ttc2cuaD00NTk9dm9pZCBza19wc29ja19zdG9wX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDYwLVxcbmluY2x1ZGUvbGludXgvc2ttc2cuaDo0NjE6aW50IHNrX3Bzb2NrX21zZ192ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDYyLVxcdFxcdFxcdCBzdHJ1Y3Qgc2tfbXNnICptc2cpO1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz05ODg9c3RhdGljIGludCBza19wc29ja19tYXBfdmVyZChpbnQgdmVyZGljdCwgYm9vbCByZWRpcilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTAwMC1cXG5uZXQvY29yZS9za21zZy5jOjEwMDE6aW50IHNrX3Bzb2NrX21zZ192ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG5uZXQvY29yZS9za21zZy5jLTEwMDItXFx0XFx0XFx0IHN0cnVjdCBza19tc2cgKm1zZylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTAzNi19XFxubmV0L2NvcmUvc2ttc2cuYzoxMDM3OkVYUE9SVF9TWU1CT0xfR1BMKHNrX3Bzb2NrX21zZ192ZXJkaWN0KTtcXG5uZXQvY29yZS9za21zZy5jLTEwMzgtXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NDE4PXN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTQzNC1cXHRcXHRkZWx0YSA9IG1zZy1cXHUwMDNlc2cuc2l6ZTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NDM1OlxcdFxcdHBzb2NrLVxcdTAwM2VldmFsID0gc2tfcHNvY2tfbXNnX3ZlcmRpY3Qoc2ssIHBzb2NrLCBtc2cpO1xcbm5ldC9pcHY0L3RjcF9icGYuYy00MzYtXFx0XFx0ZGVsdGEgLT0gbXNnLVxcdTAwM2VzZy5zaXplO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NjowMy4wNTExMTU5NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzgwNDM4MjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIEJQRiBJbmdyZXNzIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc29tZXRoaW5nIGZlZWxzIG9mZi4gYHRjcF9icGZfc2VuZF92ZXJkaWN0YCBpcyBjYWxsZWQgZnJvbSBgdGNwX2JwZl9zZW5kbXNnYCwgYnV0IHRoZSBwYXRjaCBkZXNjcmlwdGlvbiBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIGluZ3Jlc3MgZnVuY3Rpb25hbGl0eSwgbm90IHRoZSBzZW5kaW5nIHBhdGguIFRoYXQncyBteSBmaXJzdCByZWQgZmxhZywgYXMgdGhpcyBjb25uZWN0aW9uIGlzIG5vdCB0aGUgcHJpbWFyeSBmb2N1cy5cblxuTGV0J3Mgc2VlLCBpdCdzIG1vZGlmeWluZyBhIGJ1bmNoIG9mIGZ1bmN0aW9uczogYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nYCwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCwgYHNrX3Bzb2NrX2hhbmRsZV9za2JgLCBgc2tfcHNvY2tfYmFja2xvZ2AsIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAuIFJpZ2h0LCB0aGVzZSBhcmUgYWxsIGRlZmluaXRlbHkgaW5ncmVzcy1yZWxhdGVkLiBUaGF0IGxpbmVzIHVwLiBUaGUgaW5ncmVzcyBlbnRyeSBwb2ludHMgSSdtIGZhbWlsaWFyIHdpdGgsIGF0IGxlYXN0IGluIHRoaXMgY29udGV4dCwgYXJlIGBza19wc29ja19zdHJwX2RhdGFfcmVhZHlgIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5YC5cblxuV2FpdCwgYSBzZWNvbmQuIGBza19wc29ja19iYWNrbG9nYC4uLiB0aGF0J3MgdGhlIHdvcmtxdWV1ZSBjYWxsYmFjaywgaXNuJ3QgaXQ/IE9rYXksIEknbSBnZXR0aW5nIGEgYmV0dGVyIHBpY3R1cmUgaGVyZSwgYnV0IHN0aWxsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGV4YWN0IGNvbm5lY3Rpb24uXG5cbkhtbSwgSSB3b25kZXIgaWYgdGhlcmUncyBhIGdvb2QsIG5vbi1zdGF0aWMgZnVuY3Rpb24gSSBjYW4gdXNlIGFzIGEgY2VudHJhbCBwb2ludCwgYSBmb2N1cyBzeW1ib2wsIHRvIGJldHRlciB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgYWxsIGZpdHMgaW4/IFBlcmhhcHMgYHRjcF9icGZfcmVjdm1zZ2A/IFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODY4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ2OjA4LjQzMTU1NzgyM1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NzEzMjU0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYnBmX3JlY3Ztc2dcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2ttc2cuYz01OTY9c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy02MTMtXFx0ICogd2Ugd2lsbCBldmVudHVhbGx5IHJlY2VpdmUgdGhpcyBkYXRhIG9uLiBUaGUgZGF0YSB3aWxsIGJlIHJlbGVhc2VkXFxubmV0L2NvcmUvc2ttc2cuYzo2MTQ6XFx0ICogZnJvbSBza2JfY29uc3VtZSBmb3VuZCBpbiBfX3RjcF9icGZfcmVjdm1zZygpIGFmdGVyIGl0cyBiZWVuIGNvcGllZFxcbm5ldC9jb3JlL3NrbXNnLmMtNjE1LVxcdCAqIGludG8gdXNlciBidWZmZXJzLlxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz02NTA9c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTY2NC1cXG5uZXQvY29yZS9za21zZy5jOjY2NTpcXHQvKiBUaGlzIGlzIHVzZWQgaW4gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZVxcbm5ldC9jb3JlL3NrbXNnLmMtNjY2LVxcdCAqIGRhdGEgb3JpZ2luYXRlcyBmcm9tIHRoZSBzb2NrZXQncyBvd24gcHJvdG9jb2wgc3RhY2suIE5vIG5lZWQgdG9cXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9NjgxPXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTY5OC1cXG5uZXQvY29yZS9za21zZy5jOjY5OTpcXHQvKiBUaGlzIGlzIHVzZWQgaW4gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZVxcbm5ldC9jb3JlL3NrbXNnLmMtNzAwLVxcdCAqIGRhdGEgb3JpZ2luYXRlcyBmcm9tIHRoZSBzb2NrZXQncyBvd24gcHJvdG9jb2wgc3RhY2suIE5vIG5lZWQgdG9cXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz0yMDM9c3RhdGljIGJvb2wgaXNfbmV4dF9tc2dfZmluKHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMjIwLVxcbm5ldC9pcHY0L3RjcF9icGYuYzoyMjE6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMjIyLVxcdFxcdFxcdFxcdCAgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTMzNT1zdGF0aWMgaW50IHRjcF9icGZfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzY3LVxcbm5ldC9pcHY0L3RjcF9icGYuYzozNjg6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxubmV0L2lwdjQvdGNwX2JwZi5jLTM2OS1cXHRcXHRcXHQgICBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjQwPXN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQ1LVxcdHByb3RbVENQX0JQRl9CQVNFXS5jbG9zZVxcdFxcdD0gc29ja19tYXBfY2xvc2U7XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY0NjpcXHRwcm90W1RDUF9CUEZfQkFTRV0ucmVjdm1zZ1xcdFxcdD0gdGNwX2JwZl9yZWN2bXNnO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NDctXFx0cHJvdFtUQ1BfQlBGX0JBU0VdLnNvY2tfaXNfcmVhZGFibGVcXHQ9IHNrX21zZ19pc19yZWFkYWJsZTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NTMtXFx0cHJvdFtUQ1BfQlBGX1JYXVxcdFxcdFxcdD0gcHJvdFtUQ1BfQlBGX0JBU0VdO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTQ6XFx0cHJvdFtUQ1BfQlBGX1JYXS5yZWN2bXNnXFx0XFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NTUtXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY1Ni1cXHRwcm90W1RDUF9CUEZfVFhSWF1cXHRcXHRcXHQ9IHByb3RbVENQX0JQRl9UWF07XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY1NzpcXHRwcm90W1RDUF9CUEZfVFhSWF0ucmVjdm1zZ1xcdFxcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjU4LX1cXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz02OTA9aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzEzLVxcdCAqIEZvciBTS19SRURJUkVDVCwgd2UgbmVlZCB0byBhY2sgdGhlIGZyYW1lIGltbWVkaWF0ZWx5IGJ1dCBmb3JcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzE0OlxcdCAqIFNLX1BBU1MsIHdlIHdhbnQgdG8gZGVsYXkgdGhlIGFjayB1bnRpbCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkuXFxubmV0L2lwdjQvdGNwX2JwZi5jLTcxNS1cXHQgKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYz0xMTEzPXN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF96Yyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jLTExNDgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jOjExNDk6XFx0LyogdHJpZ2dlciB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyIGFuZCBpbmMgY29waWVkX3NlcSBvZiBwMSAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYy0xMTUwLVxcdHJlY3ZkID0gcmVjdl90aW1lb3V0KHAxLCByY3YsIHNpemVvZihyY3YpLCBNU0dfRE9OVFdBSVQsIDEpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmM9MTg9c3RhdGljIGNvbnN0IGludCB0ZXN0X3BhY2tldF9udW0gPSAxMDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtMTktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmM6MjA6LyogQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkgaW52b2tlcyBkYXRhX3JlYWR5XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtMjEtICogd2l0aCBzayBoZWxkIGlmIGFuIHNrYiBleGlzdHMgaW4gc2tfcmVjZWl2ZV9xdWV1ZS4gVGhlbiBmb3IgdGhlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYz0yOTM9c3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnBfcGFzcyhpbnQgZmFtaWx5LCBpbnQgc290eXBlLCBib29sIGZpb25yZWFkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtMzExLVxcdCAqIGNvcnJlY3RseSBiZWNhdXNlIHdlIGNoZWNrIHNrX3JlY2VpdmVfcXVldWUgaW5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYzozMTI6XFx0ICogdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jLTMxMy1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDY6MTAuMDA4Njk4NjFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU4NjU2MTczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRnVuY3Rpb24gVmlzaWJpbGl0eSBpbiB0aGUgVENQIEJQRiBhbmQgU29jayBNYXAgU3Vic3lzdGVtcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgd2FzIGxvb2tpbmcgYXQgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBpbml0aWFsbHkgdGhvdWdodCBpdCB3YXMgbm9uLXN0YXRpYywgYnV0IHRoZW4gSSByZWFsaXplZCBpdCAqaXMqIHN0YXRpYyB3aXRoaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AuIEdvb2QgY2F0Y2gsIG1lISBTbywgSSBjb25maXJtZWQgYHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAuIEZpbmUuIEFuZCBgdGNwX2JwZl9yZWN2bXNnYC4uLiB5ZXAsIGFsc28gYHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnYC4gVGhhdCBtYWtlcyBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiBrZWVwaW5nIHRob3NlIHBhcnNpbmcgZnVuY3Rpb25zIGludGVybmFsIHRvIHRoZSBUQ1AgQlBGIGltcGxlbWVudGF0aW9uLlxuXG5Ob3csIHNoaWZ0aW5nIGdlYXJzLCBJIG1vdmVkIG9uIHRvIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHBhY2tldCBzb2NrZXRzIChgcHNvY2tgKS4gYHNrX3Bzb2NrX2luaXRfc3RycGAgaXMgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdCBmb3IgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uIFNpbWlsYXJseSwgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgLCBgc2tfcHNvY2tfbXNnX3ZlcmRpY3RgLCBgc2tfcHNvY2tfZHJvcGAsIGBza19wc29ja19zdG9wYCwgYHNrX3Bzb2NrX2luaXRgLCBhbmQgYHNrX3Bzb2NrX2xpbmtfcG9wYCBhcmUgYWxsIG5vbi1zdGF0aWMuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZXkncmUgcGFydCBvZiB0aGUgcHVibGljIEFQSSBvciBhdCBsZWFzdCB1c2VkIG1vcmUgYnJvYWRseSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIFNvLCB0aGV5IGFsbCBoYXZlIGEgYnJvYWRlciBzY29wZS5cblxuTmV4dCBzdGVwPyBJJ2xsIHByb2JhYmx5IHNjYW4gdGhyb3VnaCBgbmV0L2NvcmUvc29ja19tYXAuY2AgdG8gc2VlIHdoaWNoIGZ1bmN0aW9ucyB0aGVyZSBhcmUgbm9uLXN0YXRpYyBhbmQgaG93IHRoZXkgYXJlIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDYzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ2OjE4LjU5NTI2Mjg1MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNTYxODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpdLipzb2NrX21hcC4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc29ja19tYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jPTMyPXN0YXRpYyBERUZJTkVfTVVURVgoc29ja21hcF9tdXRleCk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0zMy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjM0OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzUtXFx0XFx0XFx0XFx0c3RydWN0IGJwZl9wcm9nICpvbGQsIHN0cnVjdCBicGZfbGluayAqbGluayxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM2LVxcdFxcdFxcdFxcdHUzMiB3aGljaCk7XFxubmV0L2NvcmUvc29ja19tYXAuYzozNzpzdGF0aWMgc3RydWN0IHNrX3Bzb2NrX3Byb2dzICpzb2NrX21hcF9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzk6c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjctXFxubmV0L2NvcmUvc29ja19tYXAuYzo2ODppbnQgc29ja19tYXBfZ2V0X2Zyb21fZmQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTY5LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODUtXFxubmV0L2NvcmUvc29ja19tYXAuYzo4NjppbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTg3LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTE2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTE3OnN0YXRpYyB2b2lkIHNvY2tfbWFwX3NrX2FjcXVpcmUoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTE4LVxcdF9fYWNxdWlyZXMoXFx1MDAyNnNrLVxcdTAwM2Vza19sb2NrLnNsb2NrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjMtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMjQ6c3RhdGljIHZvaWQgc29ja19tYXBfc2tfcmVsZWFzZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjUtXFx0X19yZWxlYXNlcyhcXHUwMDI2c2stXFx1MDAzZXNrX2xvY2suc2xvY2spXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEzMC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjEzMTpzdGF0aWMgdm9pZCBzb2NrX21hcF9hZGRfbGluayhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTMyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19wc29ja19saW5rICpsaW5rLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDEtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNDI6c3RhdGljIHZvaWQgc29ja19tYXBfZGVsX2xpbmsoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19wc29jayAqcHNvY2ssIHZvaWQgKmxpbmtfcmF3KVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzgtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNzk6c3RhdGljIHZvaWQgc29ja19tYXBfdW5yZWYoc3RydWN0IHNvY2sgKnNrLCB2b2lkICpsaW5rX3JhdylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4MC17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4OC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4OTpzdGF0aWMgaW50IHNvY2tfbWFwX2luaXRfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTkwLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTk2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTk3OnN0YXRpYyBzdHJ1Y3Qgc2tfcHNvY2sgKnNvY2tfbWFwX3Bzb2NrX2dldF9jaGVja2VkKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5OC17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTIxNi1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjIxNzpzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjE4LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzM4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzM5OnN0YXRpYyB2b2lkIHNvY2tfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM0MC17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTM3MS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjM3MjpzdGF0aWMgdm9pZCBzb2NrX21hcF9yZWxlYXNlX3Byb2dzKHN0cnVjdCBicGZfbWFwICptYXApXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNzMte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNzYtXFxubmV0L2NvcmUvc29ja19tYXAuYzozNzc6c3RhdGljIHN0cnVjdCBzb2NrICpfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXkpXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNzgte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zODctXFxubmV0L2NvcmUvc29ja19tYXAuYzozODg6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxubmV0L2NvcmUvc29ja19tYXAuYy0zODkte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zOTktXFxubmV0L2NvcmUvc29ja19tYXAuYzo0MDA6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDAxLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDE0LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDE1OnN0YXRpYyBpbnQgX19zb2NrX21hcF9kZWxldGUoc3RydWN0IGJwZl9zdGFiICpzdGFiLCBzdHJ1Y3Qgc29jayAqc2tfdGVzdCxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQxNi1cXHRcXHRcXHQgICAgIHN0cnVjdCBzb2NrICoqcHNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00MzMtXFxubmV0L2NvcmUvc29ja19tYXAuYzo0MzQ6c3RhdGljIHZvaWQgc29ja19tYXBfZGVsZXRlX2Zyb21fbGluayhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2NvcmUvc29ja19tYXAuYy00MzUtXFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqbGlua19yYXcpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ0MS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjQ0MjpzdGF0aWMgbG9uZyBzb2NrX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxubmV0L2NvcmUvc29ja19tYXAuYy00NDMte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00NTQtXFxubmV0L2NvcmUvc29ja19tYXAuYzo0NTU6c3RhdGljIGludCBzb2NrX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDU2LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDY5LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDcwOnN0YXRpYyBpbnQgc29ja19tYXBfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIgaWR4LFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDcxLVxcdFxcdFxcdFxcdCAgc3RydWN0IHNvY2sgKnNrLCB1NjQgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTUyMC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjUyMTpzdGF0aWMgYm9vbCBzb2NrX21hcF9vcF9va2F5KGNvbnN0IHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqb3BzKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTIyLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTI3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTI4OnN0YXRpYyBib29sIHNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTI5LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTM1LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTM2OnN0YXRpYyBib29sIHNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTUzNy17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTU0MC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjU0MTpzdGF0aWMgYm9vbCBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU0Mi17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTU1NT1zdGF0aWMgaW50IHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTU3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTU4OmludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU1OS1cXHRcXHRcXHQgICAgIHU2NCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTk4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTk5OnN0YXRpYyBsb25nIHNvY2tfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTYwMC1cXHRcXHRcXHRcXHQgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NzE5PURFRklORV9CUEZfSVRFUl9GVU5DKHNvY2ttYXAsIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy03MjItXFxubmV0L2NvcmUvc29ja19tYXAuYzo3MjM6c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8pXFxubmV0L2NvcmUvc29ja19tYXAuYy03MjQte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy03MzMtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3MzQ6c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxubmV0L2NvcmUvc29ja19tYXAuYy03MzUtXFx0X19hY3F1aXJlcyhyY3UpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTc0Ni1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjc0NzpzdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzQ4LVxcdF9fbXVzdF9ob2xkKHJjdSlcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzU3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzU4OnN0YXRpYyBpbnQgc29ja19tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubmV0L2NvcmUvc29ja19tYXAuYy03NTktXFx0X19tdXN0X2hvbGQocmN1KVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy03ODAtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3ODE6c3RhdGljIHZvaWQgc29ja19tYXBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubmV0L2NvcmUvc29ja19tYXAuYy03ODItXFx0X19yZWxlYXNlcyhyY3UpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTc5MT1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNvY2tfbWFwX3NlcV9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTc5Ny1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjc5ODpzdGF0aWMgaW50IHNvY2tfbWFwX2luaXRfc2VxX3ByaXZhdGUodm9pZCAqcHJpdl9kYXRhLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzk5LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTgwNy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjgwODpzdGF0aWMgdm9pZCBzb2NrX21hcF9maW5pX3NlcV9wcml2YXRlKHZvaWQgKnByaXZfZGF0YSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTgwOS17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTgxNC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjgxNTpzdGF0aWMgdTY0IHNvY2tfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODE2LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTQ0Nz1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19oYXNoX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ2Mi1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0NjM6c3RhdGljIHN0cnVjdCBza19wc29ja19wcm9ncyAqc29ja19tYXBfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcClcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NjQte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDc2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ3NzpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfbGlua19sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICoqKnBwcm9nLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ3OC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfbGluayAqKipwbGluaywgdTMyIHdoaWNoKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTE5LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTUyMDpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUyMS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MzYtICovXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNTM3OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzOC1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZCwgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTcxLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTU3MjppbnQgc29ja19tYXBfYnBmX3Byb2dfcXVlcnkoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTczLVxcdFxcdFxcdCAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjIwLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTYyMTpzdGF0aWMgdm9pZCBzb2NrX21hcF91bmxpbmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2tfbGluayAqbGluaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MjIte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjM0LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTYzNTpzdGF0aWMgdm9pZCBzb2NrX21hcF9yZW1vdmVfbGlua3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYzNi17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NDQtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNjQ1OnZvaWQgc29ja19tYXBfdW5oYXNoKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NDYte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xNjcwPUVYUE9SVF9TWU1CT0xfR1BMKHNvY2tfbWFwX3VuaGFzaCk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjcxLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTY3Mjp2b2lkIHNvY2tfbWFwX2Rlc3Ryb3koc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY3My17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTE2OTk9RVhQT1JUX1NZTUJPTF9HUEwoc29ja19tYXBfZGVzdHJveSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzAwLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTcwMTp2b2lkIHNvY2tfbWFwX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTcwMi17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTE3Mzc9c3RydWN0IHNvY2ttYXBfbGluayB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NDEtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNzQyOnN0YXRpYyB2b2lkIHNvY2tfbWFwX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzQzLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc1OC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3NTk6c3RhdGljIGludCBzb2NrX21hcF9saW5rX2RldGFjaChzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzYwLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc2NC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3NjU6c3RhdGljIHZvaWQgc29ja19tYXBfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NjYte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzczLSAqL1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTc3NDpzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc3NS1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTgzMy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4MzQ6c3RhdGljIHUzMiBzb2NrX21hcF9saW5rX2dldF9tYXBfaWQoY29uc3Qgc3RydWN0IHNvY2ttYXBfbGluayAqc29ja21hcF9saW5rKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTgzNS17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NDQtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxODQ1OnN0YXRpYyBpbnQgc29ja19tYXBfbGlua19maWxsX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg0Ni1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg1NS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NTY6c3RhdGljIHZvaWQgc29ja19tYXBfbGlua19zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxubmV0L2NvcmUvc29ja19tYXAuYy0xODU3LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xODY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIHNvY2tfbWFwX2xpbmtfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xODc0LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg3NTppbnQgc29ja19tYXBfbGlua19jcmVhdGUoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NzYte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTM0LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTkzNTpzdGF0aWMgaW50IHNvY2tfbWFwX2l0ZXJfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTM2LVxcdFxcdFxcdFxcdCAgICAgICB1bmlvbiBicGZfaXRlcl9saW5rX2luZm8gKmxpbmZvLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTY1LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTk2NjpzdGF0aWMgdm9pZCBzb2NrX21hcF9pdGVyX2RldGFjaF90YXJnZXQoc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTY3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDY6MTguNjQyNTI5NTk2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzOTQzNjQwNzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTb2NrbWFwIEJ1ZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgc29ja21hcCBpc3N1ZSBhbmQgbmVlZCB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBMZXQncyBzZWUuLi4gaXQgbG9va3MgbGlrZSBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCwgYHNvY2tfbWFwX2dldF9mcm9tX2ZkYCwgYHNvY2tfbWFwX3Byb2dfZGV0YWNoYCwgYHNvY2tfbWFwX2JwZl9wcm9nX3F1ZXJ5YCwgYHNvY2tfbWFwX3VuaGFzaGAsIGBzb2NrX21hcF9kZXN0cm95YCwgYHNvY2tfbWFwX2Nsb3NlYCwgYW5kIGBzb2NrX21hcF9saW5rX2NyZWF0ZWAgYXJlIGFsbCBub24tc3RhdGljLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZXkncmUgZGVmaW5pdGVseSBpbiBwbGF5IGhlcmUuXG5cblRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIGFuIGBza19mb3J3YXJkX2FsbG9jYCBpc3N1ZSB3aGVuIHRoZSB0cmFmZmljIGlzIGJlaW5nIGRlbGl2ZXJlZCAqYmFjayogdG8gdGhlIHNhbWUgc29ja2V0IChgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmApLiBUaGF0IHNjcmVhbXMgc29ja21hcCBhbmQgQlBGIGludGVyYWN0aW9uLiBJdCdzIGhhcHBlbmluZyBiZWNhdXNlIGEgc29ja2V0IGdldHMgYWRkZWQgdG8gdGhlIHNvY2ttYXAsIGFuZCB0aGVuIGEgQlBGIHByb2dyYW0gcmVyb3V0ZXMgdHJhZmZpYyAqYmFjayogdG8gdGhhdCB2ZXJ5IHNvY2tldC5cblxuU28sIHdoZXJlIGRvIHRoZSBwaWVjZXMgZml0IHRvZ2V0aGVyPyBDbGVhcmx5LCBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCBpcyBhIGxpa2VseSBjYW5kaWRhdGUsIHNpbmNlIGl0J3MgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBhZGRpbmcgdGhlIHNvY2tldCB0byB0aGUgbWFwIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCdzIGEga2V5IGZ1bmN0aW9uIGZvciBteSBpbnZlc3RpZ2F0aW9uLCBkZWZpbml0ZWx5LiBBbmQgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIHJlY2VpdmluZyBkYXRhLCBgdGNwX2JwZl9yZWN2bXNnYCBpcyBjcnVjaWFsLiBJdCdzIHRoZSBmdW5jdGlvbiB3aGVyZSB0aGUgZGF0YSBpcyBhY3R1YWxseSByZWFkLiBGaW5hbGx5LCB0aGUgQlBGIHByb2dyYW0gaXRzZWxmIGdldHMgYXR0YWNoZWQgYnkgYGJwZl9wcm9nX2F0dGFjaGAgb3IgYHNvY2tfbWFwX2xpbmtfY3JlYXRlYC4gU28gdGhvc2UgYXJlIGltcG9ydGFudCBhcyB3ZWxsLlxuXG5JJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGRlZXBlciBkaXZlIGludG8gYHRjcF9icGZfcmVjdm1zZ2AgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQgdGhlcmUuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBkYXRhIGhhbmRsaW5nIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc29ja21hcCB3aXRoaW4gdGhlIHJlY2VpdmluZyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzE4MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NjozMi41ODYxNzI2MjJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjMyNzA1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYnBmX3JlY3Ztc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9icGYuYz0yMDM9c3RhdGljIGJvb2wgaXNfbmV4dF9tc2dfZmluKHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMjIwLVxcbm5ldC9pcHY0L3RjcF9icGYuYzoyMjE6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMjIyLVxcdFxcdFxcdFxcdCAgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTMzNT1zdGF0aWMgaW50IHRjcF9icGZfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzY3LVxcbm5ldC9pcHY0L3RjcF9icGYuYzozNjg6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxubmV0L2lwdjQvdGNwX2JwZi5jLTM2OS1cXHRcXHRcXHQgICBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjQwPXN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQ1LVxcdHByb3RbVENQX0JQRl9CQVNFXS5jbG9zZVxcdFxcdD0gc29ja19tYXBfY2xvc2U7XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY0NjpcXHRwcm90W1RDUF9CUEZfQkFTRV0ucmVjdm1zZ1xcdFxcdD0gdGNwX2JwZl9yZWN2bXNnO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NDctXFx0cHJvdFtUQ1BfQlBGX0JBU0VdLnNvY2tfaXNfcmVhZGFibGVcXHQ9IHNrX21zZ19pc19yZWFkYWJsZTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NTMtXFx0cHJvdFtUQ1BfQlBGX1JYXVxcdFxcdFxcdD0gcHJvdFtUQ1BfQlBGX0JBU0VdO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTQ6XFx0cHJvdFtUQ1BfQlBGX1JYXS5yZWN2bXNnXFx0XFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NTUtXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY1Ni1cXHRwcm90W1RDUF9CUEZfVFhSWF1cXHRcXHRcXHQ9IHByb3RbVENQX0JQRl9UWF07XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY1NzpcXHRwcm90W1RDUF9CUEZfVFhSWF0ucmVjdm1zZ1xcdFxcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjU4LX1cXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz02OTA9aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzEzLVxcdCAqIEZvciBTS19SRURJUkVDVCwgd2UgbmVlZCB0byBhY2sgdGhlIGZyYW1lIGltbWVkaWF0ZWx5IGJ1dCBmb3JcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzE0OlxcdCAqIFNLX1BBU1MsIHdlIHdhbnQgdG8gZGVsYXkgdGhlIGFjayB1bnRpbCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkuXFxubmV0L2lwdjQvdGNwX2JwZi5jLTcxNS1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDY6MzIuODMyNTA5MDI2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDE3ODcwNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFRDUCBCUEYgUmVjZWl2ZXIgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgYG5ldC9pcHY0L3RjcF9icGYuY2AgbW9kdWxlIGFnYWluLiBMZXQgbWUganVzdCBtYWtlIHN1cmUgSSdtIGZvbGxvd2luZyB0aGUgY29kZSBjb3JyZWN0bHkuIFJpZ2h0LCBgdGNwX2JwZl9yZWN2bXNnYCBhbmQgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFyZSBkZWZpbml0ZWx5IGRlY2xhcmVkIGFzIHN0YXRpYy4gSW50ZXJlc3RpbmcsIHNvIHRoZXkgd29uJ3QgYmUgZXhwb3NlZCBvdXRzaWRlIG9mIHRoZSBjb21waWxhdGlvbiB1bml0LiBCdXQgd2FpdCwgZm9jdXNpbmcgaW4gb24gYHRjcF9icGZfcmVjdm1zZ2Agc3BlY2lmaWNhbGx5LCBpdCdzIGFsc28gc3RhdGljLiBUaGF0IG1lYW5zLCBpdCBjYW4gbm90IGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIHNvdXJjZSBmaWxlLCB3aGljaCBsaW1pdHMgbXkgYWJpbGl0eSB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uIGFzIGl0IGlzIG5vdCBwYXJ0IG9mIHRoZSBleHRlcm5hbCBBUEkuIE5vdyBJJ20gd29uZGVyaW5nLCBhcmUgdGhlcmUgKmFueSogbm9uLXN0YXRpYyBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGlzIGZpbGU/IEkgbmVlZCB0byBrbm93IHRoZSBzY29wZSBvZiB3aGF0IGlzIHZpc2libGUgZXh0ZXJuYWxseS4gVGhpcyBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY0NywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ2OjM4LjA3NDI5ODc3M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxNTcxOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpdLip0Y3BfYnBmLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jPTMzPXN0YXRpYyBpbnQgYnBmX3RjcF9pbmdyZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy05MC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6OTE6c3RhdGljIGludCB0Y3BfYnBmX3B1c2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBhcHBseV9ieXRlcyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtOTItXFx0XFx0XFx0aW50IGZsYWdzLCBib29sIHVuY2hhcmdlKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE1Mi1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTUzOnN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTU0LVxcdFxcdFxcdCAgICAgICB1MzIgYXBwbHlfYnl0ZXMsIGludCBmbGFncywgYm9vbCB1bmNoYXJnZSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNjMtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjE2NDppbnQgdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHN0cnVjdCBzb2NrICpzaywgYm9vbCBpbmdyZXNzLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNjUtXFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcywgaW50IGZsYWdzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTIwMz1zdGF0aWMgYm9vbCBpc19uZXh0X21zZ19maW4oc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjAtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjIyMTpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzM0LVxcbm5ldC9pcHY0L3RjcF9icGYuYzozMzU6c3RhdGljIGludCB0Y3BfYnBmX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxcbm5ldC9pcHY0L3RjcF9icGYuYy0zMzYte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTM2Ny1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MzY4OnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0zNjktXFx0XFx0XFx0ICAgaW50IGZsYWdzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTQxNy1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NDE4OnN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxcbm5ldC9pcHY0L3RjcF9icGYuYy00MTktXFx0XFx0XFx0XFx0c3RydWN0IHNrX21zZyAqbXNnLCBpbnQgKmNvcGllZCwgaW50IGZsYWdzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTUzMy1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NTM0OnN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTM1LXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz02Mzg9c3RhdGljIHN0cnVjdCBwcm90byB0Y3BfYnBmX3Byb3RzW1RDUF9CUEZfTlVNX1BST1RTXVtUQ1BfQlBGX05VTV9DRkdTXTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjM5LVxcbm5ldC9pcHY0L3RjcF9icGYuYzo2NDA6c3RhdGljIHZvaWQgdGNwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUQ1BfQlBGX05VTV9DRkdTXSxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQxLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBwcm90byAqYmFzZSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NTktXFxubmV0L2lwdjQvdGNwX2JwZi5jOjY2MDpzdGF0aWMgdm9pZCB0Y3BfYnBmX2NoZWNrX3Y2X25lZWRzX3JlYnVpbGQoc3RydWN0IHByb3RvICpvcHMpXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY2MS17XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjcxLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo2NzI6c3RhdGljIGludCBfX2luaXQgdGNwX2JwZl92NF9idWlsZF9wcm90byh2b2lkKVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NzMte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTY3Nz1sYXRlX2luaXRjYWxsKHRjcF9icGZfdjRfYnVpbGRfcHJvdG8pO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NzgtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjY3OTpzdGF0aWMgaW50IHRjcF9icGZfYXNzZXJ0X3Byb3RvX29wcyhzdHJ1Y3QgcHJvdG8gKm9wcylcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjgwLXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02ODktI2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxcbm5ldC9pcHY0L3RjcF9icGYuYzo2OTA6aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY5MS1cXHRcXHRcXHQgICBza19yZWFkX2FjdG9yX3QgcmVjdl9hY3RvcilcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy03MjQtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjcyNTppbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXFxubmV0L2lwdjQvdGNwX2JwZi5jLTcyNi17XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NzYyPUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfdXBkYXRlX3Byb3RvKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy03NjgtICovXFxubmV0L2lwdjQvdGNwX2JwZi5jOjc2OTp2b2lkIHRjcF9icGZfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc3MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ2OjM4LjExOTQ2MTM4OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDA4MTg3NTQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBTdHJlYW0gUGFyc2VyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgbm90aWNpbmcgYSBmZXcgdGhpbmdzLiBgdGNwX2JwZl91cGRhdGVfcHJvdG9gLCBgdGNwX2JwZl9zZW5kbXNnX3JlZGlyYCwgYHRjcF9icGZfc3RycF9yZWFkX3NvY2tgLCBhbmQgYHRjcF9icGZfY2xvbmVgIGFyZSBhbGwgKm5vbi1zdGF0aWMqIGFuZCBleHBvcnRlZC4gVGhhdCdzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLCBhcyBpdCBpbmRpY2F0ZXMgdGhleSBhcmUgaW50ZW5kZWQgZm9yIGJyb2FkZXIgdXNlIHdpdGhpbiB0aGUga2VybmVsIChvciBwb3RlbnRpYWxseSB1c2VyIHNwYWNlKS5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW4gYSBwYWNrZXQgaXMgcmVkaXJlY3RlZCAqYmFjayogdG8gdGhlIHNhbWUgc29ja2V0LCB3aGljaCBpcyBoYW5kbGVkIGluIGVpdGhlciBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgb3IgcG9zc2libHkgYHNrX3Bzb2NrX2JhY2tsb2dgLiBcblxuVGhlIHRlc3QgY2FzZSBpcyBpbnRlcmVzdGluZy4gSXQncyB1c2luZyBgeGJwZl9wcm9nX2F0dGFjaGAgdG8gaG9vayB1cCBhIHN0cmVhbSBwYXJzZXIgKGBwcm9nX3NrYl9wYXJzZXJfb25lYCkgYW5kIGEgdmVyZGljdCBwcm9ncmFtIChgcHJvZ19za2JfdmVyZGljdF9wYXNzYCkgdG8gYSBtYXAgdXNpbmcgYEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUmAgYW5kIGBCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNUYCByZXNwZWN0aXZlbHkuIEl0IHRoZW4gc2VuZHMgc29tZSBkYXRhLiBNeSBndWVzcyBpcyB0aGF0IHRoZSBkYXRhIHRyaWdnZXJzIHRoZSBzdHJlYW0gcGFyc2VyIGFuZCB0aGUgdmVyZGljdCBsb2dpYywgYW5kIHRoZSB2ZXJkaWN0IGlzIHNldCB0byBgU0tfUEFTU2AuIEJlY2F1c2UgaXQgcGFzc2VzLCB0aGUgcGFja2V0IGVuZHMgdXAgYmVpbmcgZGVsaXZlcmVkIGJhY2sgdG8gdGhlICpzYW1lKiBzb2NrZXQsIGFsbCBoYXBwZW5pbmcgd2l0aGluIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBvciwgaWYgdGhlIHBhY2tldCBpcyBxdWV1ZWQsIGBza19wc29ja19iYWNrbG9nYC4gXG5cblRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoZSBmdW5jdGlvbiBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAgaXMgYmVpbmcgY2FsbGVkIGFzIGEgcmVzdWx0IG9mIHRoYXQgKnNhbWUtc29ja2V0KiBkZWxpdmVyeS4gSXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBjb250ZXh0LiAgVGhlIGRhdGEgdGhhdCAqdHJpZ2dlcnMqIGFsbCBvZiB0aGlzIGlzIGJlaW5nIGhhbmRsZWQgYnkgYHRjcF9icGZfc3RycF9yZWFkX3NvY2tgLiBXYWl0IGEgc2Vjb25kLiBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2AgaXMgY2xlYXJseSBmb3Igc3RyaW5nIHBhcnNlciBmdW5jdGlvbmFsaXR5LiBJdCdzIHZlcnkgbGlrZWx5IGdvaW5nIHRvIGNhbGwgYHN0cnBfZGF0YV9yZWFkeWAgb3Igc29tZXRoaW5nIGVxdWl2YWxlbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2AgaXMgY29ycmVjdC4gTGV0IG1lIGNoZWNrIGl0cyBkZWZpbml0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQwMSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0Njo0OC4yMDEzMzk0OTlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODMwMzgyNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2JwZl9zdHJwX3JlYWRfc29ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3AuaD0yODQ0PXN0cnVjdCBzdHJwYXJzZXI7XFxuaW5jbHVkZS9uZXQvdGNwLmg6Mjg0NTppbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG5pbmNsdWRlL25ldC90Y3AuaC0yODQ2LVxcdFxcdFxcdCAgIHNrX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yKTtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTIyOD1pbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTI0Mi1cXHRpZiAoc2tfaXNfdGNwKHNrKSkge1xcbm5ldC9jb3JlL3NrbXNnLmM6MTI0MzpcXHRcXHRwc29jay1cXHUwMDNlc3RycC5jYi5yZWFkX3NvY2sgPSB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTI0NC1cXHRcXHRwc29jay1cXHUwMDNlY29waWVkX3NlcSA9IHRjcF9zayhzayktXFx1MDAzZWNvcGllZF9zZXE7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9Njc5PXN0YXRpYyBpbnQgdGNwX2JwZl9hc3NlcnRfcHJvdG9fb3BzKHN0cnVjdCBwcm90byAqb3BzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY4OS0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxubmV0L2lwdjQvdGNwX2JwZi5jOjY5MDppbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjkxLVxcdFxcdFxcdCAgIHNrX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0Njo0OS43ODQzODUwNzVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMxNjYyMTU0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gU29ja2V0IEJQRiBQcm9ncmFtIEludGVyYWN0aW9uKipcblxuT2theSwgc28gSSdtIHN0YXJ0aW5nIHRvIHBpZWNlIHRvZ2V0aGVyIGhvdyB0aGlzIHNvY2tldCBCUEYgaW50ZXJhY3Rpb24gaXMgd29ya2luZy4gSXQgbG9va3MgbGlrZSBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2AgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiByZWxhdGVkIHRvIHRoZSBgc3RycGFyc2VyYCBtZWNoYW5pc20uIFRoZSBgc3RycGFyc2VyYCBpdHNlbGYgaXMgdHJpZ2dlcmVkIGJ5IGBzdHJwX2RhdGFfcmVhZHlgLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIHRoYXTigJlzIHdoYXQgZ2V0cyBjYWxsZWQgd2hlbiBkYXRhIGxhbmRzIG9uIHRoZSBzb2NrZXQuIFNvLCBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2AgaXMgZGVmaW5pdGVseSBhIGtleSBmdW5jdGlvbiB0byBmb2N1cyBvbiByaWdodCBub3cuXG5cbkkgYWxzbyBuZWVkIHRvIHNlZSBob3cgdGhlIHNvY2ttYXAgaXMgc2V0IHVwLiBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCBzZWVtcyBsaWtlIGEgZ29vZCBmb2N1cyBzeW1ib2wgZm9yIHRoYXQsIHNvIEknbGwgZG91YmxlLWNoZWNrIGl0LiBBaCB5ZXMsIGl0J3MgZGVmaW5lZCBpbiBgbmV0L2NvcmUvc29ja19tYXAuY2AuIE5vdywgbGV0IG1lIHNlZSBpZiBJJ20gbWlzc2luZyBhbnkgb3RoZXIgaW1wb3J0YW50IG5vbi1zdGF0aWMgZnVuY3Rpb24gY2FsbHMgaGVyZeKApiBBaCwgaGVyZSdzIGBzb2NrX21hcF9saW5rX2NyZWF0ZWAhIFRoYXQncyBjYWxsZWQgd2hlbiBhdHRhY2hpbmcgYSBCUEYgcHJvZ3JhbSB0byBhIHNvY2ttYXAuIFNvLCBgYnBmX3Byb2dfYXR0YWNoYCBjYWxscyBlaXRoZXIgYHNvY2tfbWFwX2xpbmtfY3JlYXRlYCBvciBgc29ja19tYXBfcHJvZ191cGRhdGVgLCB3aGljaCBzdWdnZXN0cyB0aGVyZSBhcmUgdHdvIGRpc3RpbmN0IG1lY2hhbmlzbXMgZm9yIHVwZGF0aW5nIHNvY2ttYXAgcHJvZ3JhbXMuIExldCBtZSBkaWcgaW50byB0aGF0IHNlY29uZCBvcHRpb24sIGFuZCBzZWUgd2hhdCBgc29ja19tYXBfcHJvZ191cGRhdGVgIGlzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTczNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NzowMi45NTA2MDMyNTdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzQ5Njk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwX3Byb2dfdXBkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz0zMj1zdGF0aWMgREVGSU5FX01VVEVYKHNvY2ttYXBfbXV0ZXgpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzMtXFxubmV0L2NvcmUvc29ja19tYXAuYzozNDpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM1LVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTY4PWludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy04MC1cXHRtdXRleF9sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgxOlxcdHJldCA9IHNvY2tfbWFwX3Byb2dfdXBkYXRlKG1hcCwgcHJvZywgTlVMTCwgTlVMTCwgYXR0ci1cXHUwMDNlYXR0YWNoX3R5cGUpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODItXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9ODY9aW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwOS1cXHRtdXRleF9sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjExMDpcXHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIE5VTEwsIHByb2csIE5VTEwsIGF0dHItXFx1MDAzZWF0dGFjaF90eXBlKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xNTIwPXN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2soZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MzYtICovXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNTM3OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzOC1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZCwgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xNzQyPXN0YXRpYyB2b2lkIHNvY2tfbWFwX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NDktXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNzUwOlxcdFdBUk5fT05fT05DRShzb2NrX21hcF9wcm9nX3VwZGF0ZShzb2NrbWFwX2xpbmstXFx1MDAzZW1hcCwgTlVMTCwgbGluay1cXHUwMDNlcHJvZywgbGluayxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NTEtXFx0XFx0XFx0XFx0XFx0ICBsaW5rLVxcdTAwM2VhdHRhY2hfdHlwZSkpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xODc1PWludCBzb2NrX21hcF9saW5rX2NyZWF0ZShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTExLVxcdG11dGV4X2xvY2soXFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTkxMjpcXHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIHByb2csIE5VTEwsIFxcdTAwMjZzb2NrbWFwX2xpbmstXFx1MDAzZWxpbmssIGF0dGFjaF90eXBlKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5MTMtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDc6MDIuOTk0OTU2NzczWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTk3NzIwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgYnBmX3Byb2dfYXR0YWNoYCdzIERlcGVuZGVuY3kgQ2hhaW4qKlxuXG5Pa2F5LCBzbyBgYnBmX3Byb2dfYXR0YWNoYCBpcyBtYWtpbmcgYSBjYWxsIHRvIGBzb2NrX21hcF9nZXRfZnJvbV9mZGAuIFRoYXQncyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSwgc3BlY2lmaWNhbGx5IGhvdyB0aGlzIGBzb2NrX21hcF9nZXRfZnJvbV9mZGAgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHBpY3R1cmUuIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHNvY2tfbWFwX2dldF9mcm9tX2ZkYCBpbW1lZGlhdGVseS4gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgaHlwb3RoZXNlcyBhYm91dCBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIHNvY2tldCBtYXBzLCBtYXliZSByZXRyaWV2aW5nIHNvbWUgZGF0YSBvciB2YWxpZGF0aW5nIGFuIGlucHV0LCBnaXZlbiBpdHMgbmFtZS4gVGltZSB0byBzZWUgd2hhdCdzIHJlYWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgYXR0YWNoaW5nIEJQRiBwcm9ncmFtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMwNzgsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NzowNi40MTQ3MzEzNzlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTcwMzAwMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19tYXBfZ2V0X2Zyb21fZmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0zNjU0PWludCBicGZfcHJvZ190ZXN0X3J1bl9zeXNjYWxsKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzY1Ny1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2NTg6aW50IHNvY2tfbWFwX2dldF9mcm9tX2ZkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtMzY1OS1pbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM3MzE9c3RhdGljIGlubGluZSBpbnQgYnBmX3Byb2dfdGVzdF9ydW5fc3lzY2FsbChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3MzgtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmluY2x1ZGUvbGludXgvYnBmLmg6MzczOTpzdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3NDAtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQ2MzQ9c3RhdGljIGludCBicGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00Njc2LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19NU0c6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDY3NzpcXHRcXHRyZXQgPSBzb2NrX21hcF9nZXRfZnJvbV9mZChhdHRyLCBwcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00Njc4LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0zOT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy02Ny1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjY4OmludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NzowOC4wMzE3NjcwNjFaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxNjYwMjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFByb2dyYW0gQXR0YWNobWVudCoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiBob3cgQlBGIHByb2dyYW1zIGFyZSBhdHRhY2hlZCwgc3BlY2lmaWNhbGx5IGZvciBgQlBGX1BST0dfVFlQRV9TS19TS0JgIGFuZCBgQlBGX1BST0dfVFlQRV9TS19NU0dgLiBJJ20gdHJhY2luZyB0aGUgZmxvdywgYW5kIGl0IGxvb2tzIGxpa2UgYHNvY2tfbWFwX2dldF9mcm9tX2ZkYCBpcyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgd2hlbiB1c2luZyBgYnBmX3Byb2dfYXR0YWNoYCBmb3IgdGhvc2UgcHJvZ3JhbSB0eXBlcy5cblxuQWhhLCBhbmQgbm93IEknbSByZW1lbWJlcmluZyB0aGF0IGBCUEZfUFJPR19UWVBFX1NLX1NLQmAgY292ZXJzIGJvdGggYEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUmAgYW5kIGBCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNUYCB1c2UgY2FzZXMuIEl0J3MgZ29vZCB0byBrZWVwIHRob3NlIGRpc3RpbmN0aW9ucyBjbGVhci5cblxuSSBuZWVkIHRvIGNvbmZpcm0gYWxsIG9mIHRoaXMsIHNvIGxldCBtZSBxdWlja2x5IGp1bXAgaW50byBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgYGJwZl9wcm9nX2F0dGFjaGAgZnVuY3Rpb24gZGlyZWN0bHkuIEknbGwgZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBkZXRhaWxzIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzODEwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ3OjEyLjM0ODM3MjgyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDY3NzA5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2NrX21hcF9nZXRfZnJvbV9mZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz00NjM0PXN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDY3Ni1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfTVNHOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ2Nzc6XFx0XFx0cmV0ID0gc29ja19tYXBfZ2V0X2Zyb21fZmQoYXR0ciwgcHJvZyk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDY3OC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDc6MTIuNDA5MDU2MzU0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxODgyNzU0NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBSZWxldmFudCBGb2N1cyBBcmVhcyoqXG5cbk9rYXksIHNvIEkndmUgaWRlbnRpZmllZCBhIGZldyBrZXkgZnVuY3Rpb25zIHRvIGtlZXAgaW4gbWluZCwgYW5kIHRob3NlIGFyZTogYHNvY2tfbWFwX2dldF9mcm9tX2ZkYCwgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2AsIGB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrYCwgYW5kLCBsZXQncyBhZGQgYHRjcF9icGZfcmVjdm1zZ2AgdG8gdGhlIGxpc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByZWxhdGUgdG8gdGhlIGJpZ2dlciBwaWN0dXJlLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyBCUEYgaW50ZWdyYXRpb24uXG5cbk5vdywgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIGl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCwgd2hpY2ggaXMgc2VsZWN0ZWQgYnkgdGhlIGZvcm1lciBhbmQgYE5FVGAsIGFuZCBgQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSYCBhcmUgYWxsIGltcG9ydGFudC4gSSBhbHJlYWR5IGNvbmZpcm1lZCB0aGF0IHRoZSBgQlBGX1NUUkVBTV9QQVJTRVJgIG9wdGlvbiAqaXMqIHVzZXItc2VsZWN0YWJsZSwgd2hpY2ggaXMgZ29vZC4gVGhhdCBsaWtlbHkgbWVhbnMgd2UgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSBib3RoIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAgaW4gb3VyIGNvbmZpZy5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIG9uZSB0aGluZy4uLnNwZWNpZmljYWxseSwgaG93IGBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNgIGlzIGludm9rZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNhbGwgcGF0aCwgcGFydGljdWxhcmx5IGZyb20gdGhlIHN5c3RlbSBjYWxsIHBlcnNwZWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDMyMCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NzoxNy41OTczMzQwNzFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Njk2Mzg2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19tYXBfdXBkYXRlX2VsZW1fc3lzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9MzY1OT1pbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSk7XFxuaW5jbHVkZS9saW51eC9icGYuaDozNjYwOmludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM2NjEtaW50IHNvY2tfbWFwX2JwZl9wcm9nX3F1ZXJ5KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0zNzQ1PXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNzUwLVxcbmluY2x1ZGUvbGludXgvYnBmLmg6Mzc1MTpzdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3NTItXFx0XFx0XFx0XFx0XFx0ICAgdTY0IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjUxPXN0YXRpYyBpbnQgYnBmX21hcF91cGRhdGVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjY0LVxcdFxcdCAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1NPQ0tNQVApIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyNjU6XFx0XFx0cmV0dXJuIHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhtYXAsIGtleSwgdmFsdWUsIGZsYWdzKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yNjYtXFx0fSBlbHNlIGlmIChJU19GRF9QUk9HX0FSUkFZKG1hcCkpIHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NTU1PXN0YXRpYyBpbnQgc29ja19oYXNoX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01NTctXFxubmV0L2NvcmUvc29ja19tYXAuYzo1NTg6aW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTU5LVxcdFxcdFxcdCAgICAgdTY0IGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NzoxOS4xNjY5NzY3MjdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODExMzUzODk0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBTb2NrbWFwIFVwZGF0ZXMgYW5kIERhdGEgUmVjZXB0aW9uKipcblxuT2theSwgc28gYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2AgaXMgZGVmaW5pdGVseSB0aGUga2V5IGZ1bmN0aW9uIGhlcmU7IGl0J3MgdGhlIGdhdGV3YXkgZm9yIHVwZGF0aW5nIGEgc29ja21hcCBmcm9tIHVzZXJzcGFjZSwgYXMgaXQncyBjYWxsZWQgYnkgYGJwZl9tYXBfdXBkYXRlX3ZhbHVlYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50IEkgbmVlZCB0byBjb25zaWRlci5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBpcyByZWNlaXZlZCBvbiBhIHNvY2tldCBtYW5hZ2VkIGJ5IGEgc29ja21hcC4gTGV0J3MgbG9vayBhdCBgdGNwX2JwZl9yZWN2bXNnYC4gSXMgKnRoYXQqIHRoZSBlbnRyeSBwb2ludCBmb3IgYHJlY3Ztc2dgIG9wZXJhdGlvbnMgb24gYSBzb2NrZXQgd2l0aGluIGEgc29ja21hcD8gQWgsIHllcywgYHRjcF9icGZfcmVidWlsZF9wcm90b3NgIGhhbmRsZXMgdGhhdCBieSBzd2FwcGluZyBvdXQgdGhlIHN0YW5kYXJkIGByZWN2bXNnYCB3aXRoIGB0Y3BfYnBmX3JlY3Ztc2dgIG9yIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYC5cblxuSG1tLCBob2xkIG9uLiBgdGNwX2JwZl9yZWN2bXNnYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBsaW1pdHMgaXRzIGRpcmVjdCB1c2VmdWxuZXNzIGZvciBteSBwdXJwb3Nlcy4gQXJlIHRoZXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBhdmFpbGFibGUgdGhhdCBjYW4gYmUgbW9yZSBkaXJlY3RseSB1dGlsaXplZD9cblxuTGV0IG1lIHNlZS4uLiBgdGNwX2JwZl91cGRhdGVfcHJvdG9gIGlzIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLCBhbmQgaXQgaGFuZGxlcyB0aGUgY3J1Y2lhbCB0YXNrIG9mIHJlcGxhY2luZyB0aGUgcHJvdG9jb2wgb3BlcmF0aW9ucy4gUHJvbWlzaW5nLiBBbmQsIGFoIHllcywgYHRjcF9icGZfc3RycF9yZWFkX3NvY2tgIGlzIGFsc28gbm9uLXN0YXRpYyBhbmQgZXhwb3J0ZWQsIHNwZWNpZmljYWxseSB1c2VkIGJ5IHRoZSBgc3RycGFyc2VyYCBtZWNoYW5pc20uIEdpdmVuIHRoYXQgaXQgaXMgdXNlZCBieSBhIHN0cmluZyBwYXJzZXIsIHRoYXQgd291bGQgbGlrZWx5IGJlIGEgdmVyeSBnb29kIGZvY3VzIHN5bWJvbCBhcyB3ZWxsLlxuXG5TbywgZWl0aGVyIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2Agb3IgYHRjcF9icGZfc3RycF9yZWFkX3NvY2tgIGxvb2tzIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGRlZXAgZGl2ZS4gSSdsbCBuZWVkIHRvIGV2YWx1YXRlIGVhY2ggdG8gZGV0ZXJtaW5lIHdoaWNoIGlzIG1vcmUgcmVsZXZhbnQgYW5kIGFjdGlvbmFibGUgZm9yIG15IGdvYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTQwMSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NzoyNy4yODA1MjAxNDZaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjY3MzQwNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2JwZl91cGRhdGVfcHJvdG9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmg9MjgzOD1zdHJ1Y3Qgc2tfcHNvY2s7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC0yODQwLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5pbmNsdWRlL25ldC90Y3AuaDoyODQxOmludCB0Y3BfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSk7XFxuaW5jbHVkZS9uZXQvdGNwLmgtMjg0Mi12b2lkIHRjcF9icGZfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spO1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTY5MD1pbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy03MjQtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjcyNTppbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXFxubmV0L2lwdjQvdGNwX2JwZi5jLTcyNi17XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzYxLX1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzYyOkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfdXBkYXRlX3Byb3RvKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzYzLVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0zMzQ4PXN0cnVjdCBwcm90byB0Y3BfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM3My0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjQvdGNwX2lwdjQuYzozMzc0OlxcdC5wc29ja191cGRhdGVfc2tfcHJvdFxcdD0gdGNwX2JwZl91cGRhdGVfcHJvdG8sXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzc1LSNlbmRpZlxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMjc2PXN0cnVjdCBwcm90byB0Y3B2Nl9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzAxLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjIzMDI6XFx0LnBzb2NrX3VwZGF0ZV9za19wcm90XFx0PSB0Y3BfYnBmX3VwZGF0ZV9wcm90byxcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIzMDMtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ3OjI4Ljg0NzI2MTAwMloiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjAzMzE1NTAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIFNvY2ttYXAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgaXMgYSBrZXkgZm9jdXMgc3ltYm9sLCBlc3BlY2lhbGx5IHNpbmNlIGl0IGdldHMgY2FsbGVkIHdoZW4gYSBzb2NrZXQgaXMgYWRkZWQgdG8gYSBzb2NrbWFwLiBUaGF0IHN1Z2dlc3RzIGEgY3JpdGljYWwgcG9pbnQgb2YgaW50ZWdyYXRpb24uXG5cbkhlcmUncyBteSBzdW1tYXJ5OiBUaGlzIHBhdGNoIGlzIGEgZml4IGZvciBhIG1lbW9yeSBhY2NvdW50aW5nIGlzc3VlIHdpdGhpbiB0aGUgQlBGIHNvY2ttYXAgaW5mcmFzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgaXQgYWRkcmVzc2VzIGEgc2NlbmFyaW8gd2hlcmUgYHNrX2ZvcndhcmRfYWxsb2NgIGlzbid0IGNvcnJlY3RseSBoYW5kbGVkIHdoZW4gYSBgc3RycGFyc2VyYCBCUEYgcHJvZ3JhbSByZXR1cm5zIGBTS19QQVNTYCBvbiBhIHNvY2tldCBhbmQgdGhlIHJlc3VsdGluZyBza2IgaXMgZGVsaXZlcmVkIGJhY2sgdG8gdGhlIHNhbWUgc29ja2V0J3MgaW5ncmVzcyBxdWV1ZS4gVGhpcyBpcyBhIGNsYXNzaWMgcG90ZW50aWFsIG1lbW9yeSBsZWFrIHNpdHVhdGlvbi4gVGhlIGludHJvZHVjZWQgc29sdXRpb24sIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbmAsIGFpbXMgdG8gc2V0dGxlIGFueSBwcmUtZXhpc3RpbmcgZm9yd2FyZCBhbGxvY2F0aW9uIGRlZmljaXQgYmVmb3JlIHJlY2VpdmUgb3duZXJzaGlwIGlzIGdyYW50ZWQsIHdoaWNoIHNlZW1zIGxpa2UgdGhlIHJpZ2h0IGFwcHJvYWNoLlxuXG5UaGlzIGNoYW5nZSBpcyBmdW5kYW1lbnRhbGx5IGZ1bmN0aW9uYWwsIHRvdWNoaW5nIGNvcmUgQlBGIGFuZCBuZXR3b3JraW5nIGNvZGUsIGFuZCB0aGF0IG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY29kZSBwYXRoIGlzIHJvYnVzdCBhbmQgY29ycmVjdC4gSSdsbCBuZWVkIHRvIHN0cmVzcyB0ZXN0IHRoaXMgdW5kZXIgbWFueSBuZXR3b3JrIGNvbmRpdGlvbnMgYW5kIHZhcmlvdXMgQlBGIHByb2dyYW1zLlxuXG5UaGUgaW1wb3J0YW50IGZvY3VzIHN5bWJvbHMgYXJlOlxuKiAgIGBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNgXG4qICAgYHNvY2tfbWFwX2dldF9mcm9tX2ZkYFxuKiAgIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2BcbiogICBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2BcblxuQXMgZm9yIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMsIGl0IGxvb2tzIGxpa2UgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9TVFJFQU1fUEFSU0VSYCBhcmUgc3VmZmljaWVudC4gYENPTkZJR19ORVRfU09DS19NU0dgIGFuZCBgQ09ORklHX1NUUkVBTV9QQVJTRVJgIGFyZSBwcm9wZXJseSBzZWxlY3RlZCBieSB0aG9zZS4gSSBkb24ndCBzZWUgYW55IG90aGVyIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi5cblxuTXkgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggZGlyZWN0bHkgYWRkcmVzc2VzIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIGluIGEgY3JpdGljYWwgcGFydCBvZiB0aGUga2VybmVsJ3MgQlBGIG5ldHdvcmtpbmcgc3RhY2suIEdvb2QgY2F0Y2guIExldCdzIGdldCB0byB0ZXN0aW5nIGFuZCB2ZXJpZnkgdGhpcyBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NjIyLCJPdXRwdXRUb2tlbnMiOjIyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0Nzo0MC44ODA0MTkxOTNaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDIyNTk5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9TVFJFQU1fUEFSU0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic29ja19tYXBfdXBkYXRlX2VsZW1fc3lzXCIsXG4gICAgXCJzb2NrX21hcF9nZXRfZnJvbV9mZFwiLFxuICAgIFwidGNwX2JwZl91cGRhdGVfcHJvdG9cIixcbiAgICBcInRjcF9icGZfc3RycF9yZWFkX3NvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHNvY2ttYXAgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBob3cgYHNrX2ZvcndhcmRfYWxsb2NgIG1lbW9yeSBhY2NvdW50aW5nIGlzIGhhbmRsZWQgd2hlbiBhIHN0cmVhbSBwYXJzZXIgKHN0cnBhcnNlcikgcHJvZ3JhbSByZXR1cm5zIGBTS19QQVNTYCBhbmQgdGhlIHNrYiBpcyBkZWxpdmVyZWQgdG8gdGhlIHNhbWUgc29ja2V0J3MgaW5ncmVzcyBxdWV1ZS4gSXQgaW50cm9kdWNlcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gIHRvIHNldHRsZSBhbnkgZXhpc3RpbmcgYHNrX2ZvcndhcmRfYWxsb2NgIGRlZmljaXQgYmVmb3JlIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcCB0byB0aGUgc2tiLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc29ja21hcCBhbmQgc3RyZWFtIHBhcnNlcikgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG1lbW9yeSBhY2NvdW50aW5nIHJlbWFpbnMgY29ycmVjdCB1bmRlciB2YXJpb3VzIG5ldHdvcmsgY29uZGl0aW9ucyBhbmQgQlBGIHByb2dyYW0gYmVoYXZpb3JzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c1wiLFxuICAgIFwic29ja19tYXBfZ2V0X2Zyb21fZmRcIixcbiAgICBcInRjcF9icGZfdXBkYXRlX3Byb3RvXCIsXG4gICAgXCJ0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBzb2NrbWFwIGluZnJhc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgaG93IGBza19mb3J3YXJkX2FsbG9jYCBtZW1vcnkgYWNjb3VudGluZyBpcyBoYW5kbGVkIHdoZW4gYSBzdHJlYW0gcGFyc2VyIChzdHJwYXJzZXIpIHByb2dyYW0gcmV0dXJucyBgU0tfUEFTU2AgYW5kIHRoZSBza2IgaXMgZGVsaXZlcmVkIHRvIHRoZSBzYW1lIHNvY2tldCdzIGluZ3Jlc3MgcXVldWUuIEl0IGludHJvZHVjZXMgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduYCB0byBzZXR0bGUgYW55IGV4aXN0aW5nIGBza19mb3J3YXJkX2FsbG9jYCBkZWZpY2l0IGJlZm9yZSBhc3NpZ25pbmcgcmVjZWl2ZSBvd25lcnNoaXAgdG8gdGhlIHNrYi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQlBGIHNvY2ttYXAgYW5kIHN0cmVhbSBwYXJzZXIpIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBtZW1vcnkgYWNjb3VudGluZyByZW1haW5zIGNvcnJlY3QgdW5kZXIgdmFyaW91cyBuZXR3b3JrIGNvbmRpdGlvbnMgYW5kIEJQRiBwcm9ncmFtIGJlaGF2aW9ycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDc6NDAuOTU0NjUxNzk1WiIsIlNlcSI6NTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg1MDQ0MDYxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ3OjQwLjk1NTE1MjA1NVoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNzg0OTkzNTk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGlzc3VlIHdpdGggc29ja2V0IG1lbW9yeSBhY2NvdW50aW5nIChgc2tfZm9yd2FyZF9hbGxvY2ApIHdoZW4gYW4gc2tiIGlzIHBhc3NlZCB0byB0aGUgc2FtZSBzb2NrZXQgdmlhIEJQRiBzdHJlYW0gcGFyc2VyL3ZlcmRpY3QuIEl0IGludHJvZHVjZXMgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduYCB0byBwcm9wZXJseSBoYW5kbGUgYHNrX3JtZW1fc2NoZWR1bGVgIGFuZCBgc2tiX3NldF9vd25lcl9yYC4gVGhlIGNoYW5nZXMgaW52b2x2ZSBtZW1vcnkgYWNjb3VudGluZywgbG9ja2luZywgYW5kIHNhdmluZy9yZXN0b3JpbmcgYHNrYi1cXHUwMDNlX3NrX3JlZGlyYC4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgbm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGNvbnRhaW4gdW5pbml0aWFsaXplZCBmaWVsZHMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgbG9naWMgZXJyb3JzLCBtZW1vcnkgbGVha3MsIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwYjBlOGNmOGIzMjFkZjg4YzAyNmRhZWE1NzY0OTFmY2E1YzczNmUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTY6NDQ6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za21zZy5jIGIvbmV0L2NvcmUvc2ttc2cuY1xuaW5kZXggMjUyMWI2NDNmYTA1ZC4uMzQ3Y2IxNjhmNzQ5MSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrbXNnLmNcbisrKyBiL25ldC9jb3JlL3NrbXNnLmNcbkBAIC01ODYsMjEgKzU4NiwyNCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB9XG4gXG4gc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYpO1xuK1x0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuK1x0XHRcdFx0ICAgICBib29sIHNldHRsZV9md2RfYWxsb2MpO1xuK3N0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuK1x0XHRcdFx0XHQgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYyk7XG4gXG4gc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0dTMyIG9mZiwgdTMyIGxlbilcbitcdFx0XHRcdHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYylcbiB7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBwc29jay1cdTAwM2VzaztcbiBcdHN0cnVjdCBza19tc2cgKm1zZztcbiBcdGludCBlcnI7XG4gXG4tXHQvKiBJZiB3ZSBhcmUgcmVjZWl2aW5nIG9uIHRoZSBzYW1lIHNvY2sgc2tiLVx1MDAzZXNrIGlzIGFscmVhZHkgYXNzaWduZWQsXG4tXHQgKiBza2lwIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBvd25lciB0cmFuc2l0aW9uIHNlZWluZyBpdCBhbHJlYWR5IHNldFxuLVx0ICogY29ycmVjdGx5LlxuLVx0ICovXG4gXHRpZiAodW5saWtlbHkoc2tiLVx1MDAzZXNrID09IHNrKSlcbi1cdFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHRydWUpO1xuK1x0XHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHBzb2NrLCBza2IsIG9mZixcbitcdFx0XHRcdFx0XHRcdCBsZW4sIHRydWUsXG4rXHRcdFx0XHRcdFx0XHQgc2V0dGxlX2Z3ZF9hbGxvYyk7XG4gXHRtc2cgPSBza19wc29ja19jcmVhdGVfaW5ncmVzc19tc2coc2ssIHNrYik7XG4gXHRpZiAoIW1zZylcbiBcdFx0cmV0dXJuIC1FQUdBSU47XG5AQCAtNjE4LDM0ICs2MjEsMTAwIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLS8qIFB1dHMgYW4gc2tiIG9uIHRoZSBpbmdyZXNzIHF1ZXVlIG9mIHRoZSBzb2NrZXQgYWxyZWFkeSBhc3NpZ25lZCB0byB0aGVcbi0gKiBza2IuIEluIHRoaXMgY2FzZSB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBtZW1vcnkgbGltaXRzIG9yIHNrYl9zZXRfb3duZXJfclxuLSAqIGJlY2F1c2UgdGhlIHNrYiBpcyBhbHJlYWR5IGFjY291bnRlZCBmb3IgaGVyZS5cbitzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduKHN0cnVjdCBzb2NrICpzayxcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRcdCAgICBib29sIHNldHRsZV9md2RfYWxsb2MpXG4re1xuK1x0LyogTGVhdmUgc2ticyBhbHJlYWR5IHJlY2VpdmUtYWNjb3VudGVkIHRvIHNrIHVudG91Y2hlZC4gKi9cbitcdGlmIChza2ItXHUwMDNlc2sgPT0gc2sgXHUwMDI2XHUwMDI2IHNrYi1cdTAwM2VkZXN0cnVjdG9yID09IHNvY2tfcmZyZWUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHNldHRsZV9md2RfYWxsb2MpIHtcbitcdFx0c29ja19vd25lZF9ieV9tZShzayk7XG4rXG4rXHRcdGlmICghc2tfcm1lbV9zY2hlZHVsZShzaywgc2tiLCAwKSlcbitcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbitcdH1cbitcbitcdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBQdXRzIGFuIHNrYiBvbiB0aGUgaW5ncmVzcyBxdWV1ZSBmb3IgcHNvY2stXHUwMDNlc2suXG4rICpcbisgKiBJZiB0aGUgc2tiIGFscmVhZHkgaGFzIHJlY2VpdmUgb3duZXJzaGlwIGZvciB0aGlzIHNvY2tldCwgbGVhdmUgc29ja2V0XG4rICogbWVtb3J5IGFjY291bnRpbmcgdW50b3VjaGVkLiBPdGhlcndpc2UsIGJlZm9yZSBhc3NpZ25pbmcgcmVjZWl2ZSBvd25lcnNoaXBcbisgKiB0byBhbiB1bm93bmVkIHN0cnBhcnNlciBTS19QQVNTIHNrYiwgc2V0dGxlIGFueSBleGlzdGluZyBza19mb3J3YXJkX2FsbG9jXG4rICogZGVmaWNpdCBmcm9tIGVhcmxpZXIgY2xvbmUgY2hhcmdlcy5cbiAgKi9cbiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZilcbitcdFx0XHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZixcbitcdFx0XHRcdCAgICAgYm9vbCBzZXR0bGVfZndkX2FsbG9jKVxuIHtcbitcdHN0cnVjdCBzb2NrICpzayA9IHBzb2NrLVx1MDAzZXNrO1xuIFx0c3RydWN0IHNrX21zZyAqbXNnID0gYWxsb2Nfc2tfbXNnKEdGUF9BVE9NSUMpO1xuK1x0aW50IGVycjtcbitcbitcdGlmICh1bmxpa2VseSghbXNnKSlcbitcdFx0cmV0dXJuIC1FQUdBSU47XG4rXG4rXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbihzaywgc2tiLCBzZXR0bGVfZndkX2FsbG9jKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZnJlZTtcbitcbitcdC8qIFRoaXMgaXMgdXNlZCBpbiB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlXG4rXHQgKiBkYXRhIG9yaWdpbmF0ZXMgZnJvbSB0aGUgc29ja2V0J3Mgb3duIHByb3RvY29sIHN0YWNrLiBObyBuZWVkIHRvXG4rXHQgKiByZWZjb3VudCBzayBiZWNhdXNlIG1zZydzIGxpZmV0aW1lIGlzIGJvdW5kIHRvIHNrIHZpYSB0aGUgaW5ncmVzc19tc2cuXG4rXHQgKi9cbitcdG1zZy1cdTAwM2VzayA9IHNrO1xuK1x0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShza2IsIG9mZiwgbGVuLCBwc29jaywgc2ssIG1zZyxcbitcdFx0XHRcdFx0ICAgdGFrZV9yZWYpO1xuK1x0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0Z290byBmcmVlO1xuK1xuK1x0cmV0dXJuIGVycjtcbitmcmVlOlxuK1x0a2ZyZWUobXNnKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuK1x0XHRcdFx0XHQgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYylcbit7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBwc29jay1cdTAwM2VzaztcbitcdHN0cnVjdCBza19tc2cgKm1zZyA9IGFsbG9jX3NrX21zZyhHRlBfQVRPTUlDKTtcbiBcdGludCBlcnI7XG4gXG4gXHRpZiAodW5saWtlbHkoIW1zZykpXG4gXHRcdHJldHVybiAtRUFHQUlOO1xuLVx0c2tiX3NldF9vd25lcl9yKHNrYiwgc2spO1xuK1xuK1x0bG9ja19zb2NrKHNrKTtcbitcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduKHNrLCBza2IsIHNldHRsZV9md2RfYWxsb2MpO1xuK1x0cmVsZWFzZV9zb2NrKHNrKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZnJlZTtcbiBcbiBcdC8qIFRoaXMgaXMgdXNlZCBpbiB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlXG4gXHQgKiBkYXRhIG9yaWdpbmF0ZXMgZnJvbSB0aGUgc29ja2V0J3Mgb3duIHByb3RvY29sIHN0YWNrLiBObyBuZWVkIHRvXG4gXHQgKiByZWZjb3VudCBzayBiZWNhdXNlIG1zZydzIGxpZmV0aW1lIGlzIGJvdW5kIHRvIHNrIHZpYSB0aGUgaW5ncmVzc19tc2cuXG4gXHQgKi9cbiBcdG1zZy1cdTAwM2VzayA9IHNrO1xuLVx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShza2IsIG9mZiwgbGVuLCBwc29jaywgc2ssIG1zZywgdGFrZV9yZWYpO1xuK1x0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShza2IsIG9mZiwgbGVuLCBwc29jaywgc2ssIG1zZyxcbitcdFx0XHRcdFx0ICAgdGFrZV9yZWYpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0a2ZyZWUobXNnKTtcbitcdFx0Z290byBmcmVlO1xuK1xuK1x0cmV0dXJuIGVycjtcbitmcmVlOlxuK1x0a2ZyZWUobXNnKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc2tfcHNvY2tfaGFuZGxlX3NrYihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdCAgICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIGluZ3Jlc3MpXG4rXHRcdFx0ICAgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgaW5ncmVzcyxcbitcdFx0XHQgICAgICAgYm9vbCBzZWxmX3Bhc3MsIGJvb2wgc3RycGFyc2VyKVxuIHtcbiBcdGlmICghaW5ncmVzcykge1xuIFx0XHRpZiAoIXNvY2tfd3JpdGVhYmxlKHBzb2NrLVx1MDAzZXNrKSlcbkBAIC02NTMsNyArNzIyLDExIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfaGFuZGxlX3NrYihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gc2tiX3NlbmRfc29jayhwc29jay1cdTAwM2Vzaywgc2tiLCBvZmYsIGxlbik7XG4gXHR9XG4gXG4tXHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3MocHNvY2ssIHNrYiwgb2ZmLCBsZW4pO1xuK1x0aWYgKHNlbGZfcGFzcylcbitcdFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYmFja2xvZyhwc29jaywgc2tiLCBvZmYsXG4rXHRcdFx0XHRcdFx0XHQgbGVuLCB0cnVlLCBzdHJwYXJzZXIpO1xuK1xuK1x0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBzdHJwYXJzZXIpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBza19wc29ja19za2Jfc3RhdGUoc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbkBAIC02OTQsOSArNzY3LDE0IEBAIHN0YXRpYyB2b2lkIHNrX3Bzb2NrX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRyZXR1cm47XG4gXHRtdXRleF9sb2NrKFx1MDAyNnBzb2NrLVx1MDAzZXdvcmtfbXV0ZXgpO1xuIFx0d2hpbGUgKChza2IgPSBza2JfcGVlayhcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX3NrYikpKSB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgc2F2ZWRfcmVkaXI7XG4rXHRcdGJvb2wgc3RycGFyc2VyO1xuK1x0XHRib29sIHNlbGZfcGFzcztcbitcbiBcdFx0bGVuID0gc2tiLVx1MDAzZWxlbjtcbiBcdFx0b2ZmID0gMDtcbi1cdFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcbitcdFx0c3RycGFyc2VyID0gc2tiX2JwZl9zdHJwYXJzZXIoc2tiKTtcbitcdFx0aWYgKHN0cnBhcnNlcikge1xuIFx0XHRcdHN0cnVjdCBzdHJwX21zZyAqc3RtID0gc3RycF9tc2coc2tiKTtcbiBcbiBcdFx0XHRvZmYgPSBzdG0tXHUwMDNlb2Zmc2V0O1xuQEAgLTcxMCwxNyArNzg4LDIwIEBAIHN0YXRpYyB2b2lkIHNrX3Bzb2NrX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHR9XG4gXG4gXHRcdGluZ3Jlc3MgPSBza2JfYnBmX2luZ3Jlc3Moc2tiKTtcbitcdFx0c2VsZl9wYXNzID0gaW5ncmVzcyBcdTAwMjZcdTAwMjYgIXNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKTtcbitcdFx0c2F2ZWRfcmVkaXIgPSBza2ItXHUwMDNlX3NrX3JlZGlyO1xuIFx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG4gXHRcdGRvIHtcbiBcdFx0XHRyZXQgPSAtRUlPO1xuIFx0XHRcdGlmICghc29ja19mbGFnKHBzb2NrLVx1MDAzZXNrLCBTT0NLX0RFQUQpKVxuIFx0XHRcdFx0cmV0ID0gc2tfcHNvY2tfaGFuZGxlX3NrYihwc29jaywgc2tiLCBvZmYsXG4tXHRcdFx0XHRcdFx0XHQgIGxlbiwgaW5ncmVzcyk7XG4rXHRcdFx0XHRcdFx0XHQgIGxlbiwgaW5ncmVzcyxcbitcdFx0XHRcdFx0XHRcdCAgc2VsZl9wYXNzLCBzdHJwYXJzZXIpO1xuIFx0XHRcdGlmIChyZXQgXHUwMDNjPSAwKSB7XG4gXHRcdFx0XHRpZiAocmV0ID09IC1FQUdBSU4pIHtcbiBcdFx0XHRcdFx0c2tfcHNvY2tfc2tiX3N0YXRlKHBzb2NrLCBzdGF0ZSwgbGVuLCBvZmYpO1xuIFx0XHRcdFx0XHQvKiBSZXN0b3JlIHJlZGlyIGluZm8gd2UgY2xlYXJlZCBiZWZvcmUgKi9cbi1cdFx0XHRcdFx0c2tiX2JwZl9zZXRfcmVkaXIoc2tiLCBwc29jay1cdTAwM2VzaywgaW5ncmVzcyk7XG4rXHRcdFx0XHRcdHNrYi1cdTAwM2Vfc2tfcmVkaXIgPSBzYXZlZF9yZWRpcjtcbiBcdFx0XHRcdFx0LyogRGVsYXkgc2xpZ2h0bHkgdG8gcHJpb3JpdGl6ZSBhbnlcbiBcdFx0XHRcdFx0ICogb3RoZXIgd29yayB0aGF0IG1pZ2h0IGJlIGhlcmUuXG4gXHRcdFx0XHRcdCAqL1xuQEAgLTEwMTcsNiArMTA5OCw4IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgKiByZXRyeWluZyBsYXRlciBmcm9tIHdvcmtxdWV1ZS5cbiBcdFx0ICovXG4gXHRcdGlmIChza2JfcXVldWVfZW1wdHkoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19za2IpKSB7XG4rXHRcdFx0Ym9vbCBzZXR0bGVfZndkX2FsbG9jID0gZmFsc2U7XG4rXG4gXHRcdFx0bGVuID0gc2tiLVx1MDAzZWxlbjtcbiBcdFx0XHRvZmYgPSAwO1xuIFx0XHRcdGlmIChza2JfYnBmX3N0cnBhcnNlcihza2IpKSB7XG5AQCAtMTAyNCw4ICsxMTA3LDEwIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0XHRcdFx0b2ZmID0gc3RtLVx1MDAzZW9mZnNldDtcbiBcdFx0XHRcdGxlbiA9IHN0bS1cdTAwM2VmdWxsX2xlbjtcbitcdFx0XHRcdHNldHRsZV9md2RfYWxsb2MgPSB0cnVlO1xuIFx0XHRcdH1cbi1cdFx0XHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBmYWxzZSk7XG4rXHRcdFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbixcbitcdFx0XHRcdFx0XHRcdGZhbHNlLCBzZXR0bGVfZndkX2FsbG9jKTtcbiBcdFx0fVxuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3NfbG9jayk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY1xuaW5kZXggMWQ3MjMxNzI4ZWFmZC4uYzdhZDIxZDBiYmY0OSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY1xuQEAgLTEsNSArMSw5IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAjaW5jbHVkZSBcdTAwM2NlcnJvci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW5ldF9kaWFnLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRsaW5rLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvY2tfZGlhZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0aW5ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFwic29ja21hcF9oZWxwZXJzLmhcIlxuQEAgLTQ2MCw2ICs0NjQsMTcxIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zdHJwX3BhcnNlcl9yZWplY3Qodm9pZClcbiBcdHRlc3Rfc29ja21hcF9zdHJwX19kZXN0cm95KHN0cnApO1xuIH1cbiBcbisvKiBSZWFkIHNrX2ZvcndhcmRfYWxsb2MgdGhyb3VnaCBpbmV0X2RpYWcgbWVtaW5mby4gKi9cbitzdGF0aWMgaW50IHNvY2ttYXBfc3RycF9nZXRfZndkX2FsbG9jKGludCBzb2NrLCBpbnQgKmZ3ZF9hbGxvYylcbit7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBsb2NhbCA9IHt9LCBwZWVyID0ge307XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gKmxvY2FsX2luLCAqcGVlcl9pbjtcbitcdHNvY2tsZW5fdCBhZGRyX2xlbiA9IHNpemVvZihsb2NhbCk7XG4rXHRjaGFyIGJ1ZlsxMDI0XTtcbitcdHN0cnVjdCB7XG4rXHRcdHN0cnVjdCBubG1zZ2hkciBubGg7XG4rXHRcdHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyIHJlcTtcbitcdH0gcmVxID0ge1xuK1x0XHQubmxoID0ge1xuK1x0XHRcdC5ubG1zZ19sZW4gPSBzaXplb2YocmVxKSxcbitcdFx0XHQubmxtc2dfdHlwZSA9IFNPQ0tfRElBR19CWV9GQU1JTFksXG4rXHRcdFx0Lm5sbXNnX2ZsYWdzID0gTkxNX0ZfUkVRVUVTVCxcbitcdFx0XHQubmxtc2dfc2VxID0gMSxcbitcdFx0fSxcbitcdFx0LnJlcSA9IHtcbitcdFx0XHQuc2RpYWdfZmFtaWx5ID0gQUZfSU5FVCxcbitcdFx0XHQuc2RpYWdfcHJvdG9jb2wgPSBJUFBST1RPX1RDUCxcbitcdFx0XHQuaWRpYWdfZXh0ID0gMSBcdTAwM2NcdTAwM2MgKElORVRfRElBR19NRU1JTkZPIC0gMSksXG4rXHRcdFx0LmlkaWFnX3N0YXRlcyA9IH4wVSxcbitcdFx0XHQuaWQuaWRpYWdfY29va2llID0ge1xuK1x0XHRcdFx0SU5FVF9ESUFHX05PQ09PS0lFLFxuK1x0XHRcdFx0SU5FVF9ESUFHX05PQ09PS0lFLFxuK1x0XHRcdH0sXG4rXHRcdH0sXG4rXHR9O1xuK1x0aW50IGRpYWdfZmQsIHJldCwgZXJyID0gLUVOT0VOVDtcbitcbitcdGlmIChnZXRzb2NrbmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2bG9jYWwsIFx1MDAyNmFkZHJfbGVuKSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcdGFkZHJfbGVuID0gc2l6ZW9mKHBlZXIpO1xuK1x0aWYgKGdldHBlZXJuYW1lKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZwZWVyLCBcdTAwMjZhZGRyX2xlbikpXG4rXHRcdHJldHVybiAtZXJybm87XG4rXG4rXHRsb2NhbF9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilcdTAwMjZsb2NhbDtcbitcdHBlZXJfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopXHUwMDI2cGVlcjtcbitcdHJlcS5yZXEuaWQuaWRpYWdfc3BvcnQgPSBsb2NhbF9pbi1cdTAwM2VzaW5fcG9ydDtcbitcdHJlcS5yZXEuaWQuaWRpYWdfZHBvcnQgPSBwZWVyX2luLVx1MDAzZXNpbl9wb3J0O1xuK1x0cmVxLnJlcS5pZC5pZGlhZ19zcmNbMF0gPSBsb2NhbF9pbi1cdTAwM2VzaW5fYWRkci5zX2FkZHI7XG4rXHRyZXEucmVxLmlkLmlkaWFnX2RzdFswXSA9IHBlZXJfaW4tXHUwMDNlc2luX2FkZHIuc19hZGRyO1xuK1xuK1x0ZGlhZ19mZCA9IHNvY2tldChBRl9ORVRMSU5LLCBTT0NLX1JBVyB8IFNPQ0tfQ0xPRVhFQyxcbitcdFx0XHQgTkVUTElOS19TT0NLX0RJQUcpO1xuK1x0aWYgKGRpYWdfZmQgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtZXJybm87XG4rXG4rXHRyZXQgPSBzZW5kKGRpYWdfZmQsIFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksIDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRlcnIgPSAtZXJybm87XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0aWYgKHJldCAhPSBzaXplb2YocmVxKSkge1xuK1x0XHRlcnIgPSAtRUlPO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdHJldCA9IHJlY3YoZGlhZ19mZCwgYnVmLCBzaXplb2YoYnVmKSwgMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdGVyciA9IC1lcnJubztcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRmb3IgKHN0cnVjdCBubG1zZ2hkciAqbmxoID0gKHN0cnVjdCBubG1zZ2hkciAqKWJ1ZjtcbitcdCAgICAgTkxNU0dfT0sobmxoLCByZXQpOyBubGggPSBOTE1TR19ORVhUKG5saCwgcmV0KSkge1xuK1x0XHRzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqbXNnID0gTkxNU0dfREFUQShubGgpO1xuK1x0XHRzdHJ1Y3QgcnRhdHRyICphdHRyO1xuK1x0XHRpbnQgbGVuO1xuK1xuK1x0XHRpZiAobmxoLVx1MDAzZW5sbXNnX3R5cGUgPT0gTkxNU0dfRVJST1IpIHtcbitcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHRcdGlmIChubGgtXHUwMDNlbmxtc2dfdHlwZSA9PSBOTE1TR19ET05FKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRsZW4gPSBubGgtXHUwMDNlbmxtc2dfbGVuIC0gTkxNU0dfTEVOR1RIKHNpemVvZigqbXNnKSk7XG4rXHRcdGZvciAoYXR0ciA9IChzdHJ1Y3QgcnRhdHRyICopKG1zZyArIDEpOyBSVEFfT0soYXR0ciwgbGVuKTtcbitcdFx0ICAgICBhdHRyID0gUlRBX05FWFQoYXR0ciwgbGVuKSkge1xuK1x0XHRcdHN0cnVjdCBpbmV0X2RpYWdfbWVtaW5mbyAqbWluZm87XG4rXG4rXHRcdFx0aWYgKGF0dHItXHUwMDNlcnRhX3R5cGUgIT0gSU5FVF9ESUFHX01FTUlORk8pXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRtaW5mbyA9IFJUQV9EQVRBKGF0dHIpO1xuK1x0XHRcdCpmd2RfYWxsb2MgPSAoX19zMzIpbWluZm8tXHUwMDNlaWRpYWdfZm1lbTtcbitcdFx0XHRlcnIgPSAwO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHR9XG4rXG4rb3V0OlxuK1x0Y2xvc2UoZGlhZ19mZCk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbisvKiBUZXN0IHN0cnBhcnNlciBTS19QQVNTIGRlbGl2ZXJ5IHRvIHRoZSBzYW1lIHNvY2tldC4gKi9cbitzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF9zZWxmX3Bhc3NfZndkX2FsbG9jKHZvaWQpXG4re1xuK1x0c3RydWN0IHRlc3Rfc29ja21hcF9zdHJwICpzdHJwID0gTlVMTDtcbitcdGNoYXIgc25kWzQgKiAxMDI0XTtcbitcdGludCBjID0gLTEsIHAgPSAtMTtcbitcdGludCBmd2RfYWxsb2M7XG4rXHRpbnQgc25kYnVmID0gc2l6ZW9mKHNuZCk7XG4rXHRpbnQgemVybyA9IDA7XG4rXHRjaGFyIHJjdjtcbitcdGludCBzZW50LCByZWN2ZDtcbitcdGludCBtYXA7XG4rXHRpbnQgZXJyO1xuK1xuK1x0bWVtc2V0KHNuZCwgMHhhNSwgc2l6ZW9mKHNuZCkpO1xuK1xuK1x0c3RycCA9IHRlc3Rfc29ja21hcF9zdHJwX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc3RycCwgXCJ0ZXN0X3NvY2ttYXBfc3RycF9fb3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0bWFwID0gYnBmX21hcF9fZmQoc3RycC1cdTAwM2VtYXBzLnNvY2tfbWFwKTtcbitcdGVyciA9IHhicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHN0cnAtXHUwMDNlcHJvZ3MucHJvZ19za2JfcGFyc2VyX29uZSksXG4rXHRcdFx0ICAgICAgIG1hcCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLCAwKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4rXG4rXHRlcnIgPSB4YnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChzdHJwLVx1MDAzZXByb2dzLnByb2dfc2tiX3ZlcmRpY3RfcGFzcyksXG4rXHRcdFx0ICAgICAgIG1hcCwgQlBGX1NLX1NLQl9TVFJFQU1fVkVSRElDVCwgMCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dF9kZXN0cm95O1xuK1xuK1x0ZXJyID0gY3JlYXRlX3BhaXIoQUZfSU5FVCwgU09DS19TVFJFQU0sIFx1MDAyNmMsIFx1MDAyNnApO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImNyZWF0ZV9wYWlyXCIpKVxuK1x0XHRnb3RvIG91dF9kZXN0cm95O1xuK1xuK1x0ZXJyID0geHNldHNvY2tvcHQoYywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCBcdTAwMjZzbmRidWYsIHNpemVvZihzbmRidWYpKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4rXG4rXHRlcnIgPSB4c2V0c29ja29wdChwLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIFx1MDAyNnNuZGJ1Ziwgc2l6ZW9mKHNuZGJ1ZikpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXRfZGVzdHJveTtcbitcbitcdGVyciA9IHhicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcCwgXHUwMDI2emVybywgXHUwMDI2cCwgQlBGX05PRVhJU1QpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXRfZGVzdHJveTtcbitcbitcdHNlbnQgPSBzZW5kKGMsIHNuZCwgc2l6ZW9mKHNuZCksIE1TR19ET05UV0FJVCk7XG4rXHRpZiAoIUFTU0VSVF9FUShzZW50LCBzaXplb2Yoc25kKSwgXCJzZW5kXCIpKVxuK1x0XHRnb3RvIG91dF9kZXN0cm95O1xuK1xuK1x0cmVjdmQgPSByZWN2X3RpbWVvdXQocCwgXHUwMDI2cmN2LCBzaXplb2YocmN2KSwgTVNHX0RPTlRXQUlULFxuK1x0XHRcdCAgICAgSU9fVElNRU9VVF9TRUMpO1xuK1x0aWYgKCFBU1NFUlRfRVEocmVjdmQsIHNpemVvZihyY3YpLCBcInJlY3ZfdGltZW91dFwiKSB8fFxuK1x0ICAgICFBU1NFUlRfRVEocmN2LCBzbmRbMF0sIFwiZGF0YSBtaXNtYXRjaFwiKSlcbitcdFx0Z290byBvdXRfZGVzdHJveTtcbitcbitcdGVyciA9IHNvY2ttYXBfc3RycF9nZXRfZndkX2FsbG9jKHAsIFx1MDAyNmZ3ZF9hbGxvYyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwic29ja21hcF9zdHJwX2dldF9md2RfYWxsb2NcIikgfHxcbitcdCAgICAhQVNTRVJUX0dFKGZ3ZF9hbGxvYywgMCwgXCJza19mb3J3YXJkX2FsbG9jXCIpKVxuK1x0XHRnb3RvIG91dF9kZXN0cm95O1xuK291dF9kZXN0cm95OlxuK1x0dGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7XG4rXHRpZiAoYyBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGMpO1xuK1x0aWYgKHAgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShwKTtcbit9XG4rXG4gdm9pZCB0ZXN0X3NvY2ttYXBfc3RycCh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic29ja21hcCBzdHJwIHRjcCBwYXNzXCIpKVxuQEAgLTQ4Miw0ICs2NTEsNiBAQCB2b2lkIHRlc3Rfc29ja21hcF9zdHJwKHZvaWQpXG4gXHRcdHRlc3Rfc29ja21hcF9zdHJwX2Rpc3BhdGNoX3BrdChBRl9JTkVULCBTT0NLX1NUUkVBTSk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInNvY2ttYXAgc3RycCBwYXJzZXIgcmVqZWN0IHBrdCBtb2RcIikpXG4gXHRcdHRlc3Rfc29ja21hcF9zdHJwX3BhcnNlcl9yZWplY3QoKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic29ja21hcCBzdHJwIHNlbGYgcGFzcyBmd2QgYWxsb2NcIikpXG4rXHRcdHRlc3Rfc29ja21hcF9zdHJwX3NlbGZfcGFzc19md2RfYWxsb2MoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuY1xuaW5kZXggZmU4OGZhNmQ0MGJjNS4uNjgyZTUzZDQwNzUxYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuY1xuQEAgLTUwLDYgKzUwLDEyIEBAIGludCBwcm9nX3NrYl9wYXJzZXJfcGFydGlhbChzdHJ1Y3QgX19za19idWZmICpza2IpXG4gXHRyZXR1cm4gMTA7XG4gfVxuIFxuK1NFQyhcInNrX3NrYi9zdHJlYW1fcGFyc2VyXCIpXG4raW50IHByb2dfc2tiX3BhcnNlcl9vbmUoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdHJldHVybiAxO1xuK31cbitcbiBTRUMoXCJza19za2Ivc3RyZWFtX3BhcnNlclwiKVxuIGludCBwcm9nX3NrYl9wYXJzZXJfcmVzaXplKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0Nzo0MC45NTUxNTI5MDVaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc4NDk5MDUzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogU0tNU0cgQ2hhbmdlcyBmb3IgU29ja2V0IE1lbW9yeSBBY2NvdW50aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoLCB0b3VjaGluZyBgbmV0L2NvcmUvc2ttc2cuY2AgYW5kIGFkZGluZyBhIHRlc3QgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jYCwgaXMgbGlrZWx5ICpub3QqIGEgS01TQU4gY29uY2Vybi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgc2VlbSB0byByZXZvbHZlIGFyb3VuZCBjb3JyZWN0aW5nIHNvY2tldCBtZW1vcnkgYWNjb3VudGluZywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYHNrX2ZvcndhcmRfYWxsb2NgLCB3aGVuIGFuIGBza2JgIGlzIHJvdXRlZCBiYWNrIHRvIHRoZSBzYW1lIHNvY2tldCB2aWEgQlBGIHN0cmVhbSBwYXJzaW5nLiBUaGlzIGludm9sdmVzIG1vZGlmaWNhdGlvbnMgdG8gYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nYCwgYW5kIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbmAuXG5cbk15IHByaW1hcnkgY29uY2VybiwgYXMgYSBLTVNBTiBleHBlcnQsIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSByaXNrcyBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3MgZGlnIGluOiBUaGUgaW50cm9kdWN0aW9uIG9mIGBzZXR0bGVfZndkX2FsbG9jYCBhbmQgdGhlIGNhbGxzIHRvIGBza19ybWVtX3NjaGVkdWxlKHNrLCBza2IsIDApYCBhbmQgYHNrYl9zZXRfb3duZXJfcihza2IsIHNrKWAgYXJlIHB1cmVseSBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCBvbiB0aGUgKnJlY2VpdmluZyogc2lkZSwgbm90aGluZyB0aGF0IHRvdWNoZXMgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblNwZWNpZmljYWxseSwgdGhlIHBhdGNoIHNlZW1zIHRvIGFkZHJlc3MgYSBidWcgb3IgcG90ZW50aWFsIGxlYWsgcmVsYXRlZCB0byBpbmNvcnJlY3QgYWNjb3VudGluZywgcG9zc2libHkgcmVzdWx0aW5nIGluIG5lZ2F0aXZlIHZhbHVlcyBmb3IgYHNrX2ZvcndhcmRfYWxsb2NgLiBUaGF0J3Mgbm90IHRoZSBzYW1lIGFzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Zy4gSXQncyBtb3JlIG9mIGEgbG9naWMgZXJyb3IgdGhhdCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBsZWFrcyBvciwgcG90ZW50aWFsbHksIG90aGVyIG1lbW9yeS1yZWxhdGVkIGVycm9ycywgYnV0IG5vdCBkaXJlY3RseSBLTVNBTi1yZWxhdGVkLlxuXG5SZXZpZXdpbmcgdGhlIGNvZGUgc25pcHBldHMsIHRoZSBhZGRpdGlvbiBvZiBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gIGlzIHNvbGVseSBmb3IgdGhlIHB1cnBvc2Ugb2YgbWFuYWdpbmcgbWVtb3J5IG93bmVyc2hpcCBhbmQgYWNjb3VudGluZy4gSSBzZWUgbm8gYWxsb2NhdGlvbiBvZiBuZXcsIGNvbXBsZXggc3RydWN0dXJlcywgbm9yIGFueSBtYW5pcHVsYXRpb24gb2YgZXhpc3Rpbmcgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYXZlIGZpZWxkcyB1bmluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBhbHNvIGluY2x1ZGUgc2F2aW5nIGFuZCByZXN0b3JpbmcgdGhlIGBza2ItXHUwMDNlX3NrX3JlZGlyYCBmaWVsZCwgYnV0IHRoaXMgZmllbGQgaXMgaW5pdGlhbGl6ZWQgZWl0aGVyIHdoZW4gdGhlIGBza2JgIGlzIGFsbG9jYXRlZCwgb3IgY2xlYXJlZCBieSB0aGUga2VybmVsLiBUaGVyZSdzIG5vIHNjZW5hcmlvIGhlcmUgdGhhdCByaXNrcyBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZSB0ZXN0IGFkZGVkIGFwcGVhcnMgdG8gdmVyaWZ5IHRoZSBzb2NrZXQgbWVtb3J5IGluZm9ybWF0aW9uIHVzaW5nIGBpbmV0X2RpYWdfcmVxX3YyYCwgYnV0IHRoaXMgaXMgc2ltcGx5IGEgdGVzdCBhbmQgZG9lcyBub3QgY3JlYXRlIGFuIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGUgY29yZSBmdW5jdGlvbnMg4oCTIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYmFja2xvZ2AsIGFuZCB0aGUgbmV3IGZ1bmN0aW9uIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbmAg4oCTIGFyZSBhbGwgZm9jdXNlZCBvbiBtZW1vcnkgYWNjb3VudGluZy4gVGhleSBpbnZvbHZlIGxvY2tpbmcsIG93bmVyc2hpcCBtYW5hZ2VtZW50LCBhbmQgc2NoZWR1bGluZyByZWNlaXZlIG1lbW9yeS5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgYSBgTmVlZHNLTVNBTmAgdGFnIGlzICpub3QqIGFwcHJvcHJpYXRlIGhlcmUuIFdoaWxlIGEgYnVnIGluIHRoZXNlIGNoYW5nZXMgKmNvdWxkKiBsZWFkIHRvIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSwgdGhvc2UgYXJlIGFscmVhZHkgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZSBpbnRyb2R1Y2VkIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBwYXRocywgYm91bmRzLWNoZWNrIGNoYW5nZXMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgYW55IHVzZXIgc3BhY2UgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggZmllbGRzIHRoYXQgY291bGQgY29udGFpbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gVGhpcyBpcyBzdHJpY3RseSBsb2dpYyBmb3Igc29ja2V0IGFjY291bnRpbmc7IEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaW4gdGhpcyBpbnN0YW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI3OCwiT3V0cHV0VG9rZW5zIjoyMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDc6NTguODA1MDYxOTE5WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYW4gaXNzdWUgd2l0aCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcgKGBza19mb3J3YXJkX2FsbG9jYCkgd2hlbiBhbiBza2IgaXMgcGFzc2VkIHRvIHRoZSBzYW1lIHNvY2tldCB2aWEgQlBGIHN0cmVhbSBwYXJzZXIvdmVyZGljdC4gSXQgaW50cm9kdWNlcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gIHRvIHByb3Blcmx5IGhhbmRsZSBgc2tfcm1lbV9zY2hlZHVsZWAgYW5kIGBza2Jfc2V0X293bmVyX3JgLiBUaGUgY2hhbmdlcyBpbnZvbHZlIG1lbW9yeSBhY2NvdW50aW5nLCBsb2NraW5nLCBhbmQgc2F2aW5nL3Jlc3RvcmluZyBgc2tiLVxcdTAwM2Vfc2tfcmVkaXJgLiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgY29udGFpbiB1bmluaXRpYWxpemVkIGZpZWxkcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBsb2dpYyBlcnJvcnMsIG1lbW9yeSBsZWFrcywgb3IgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBpc3N1ZSB3aXRoIHNvY2tldCBtZW1vcnkgYWNjb3VudGluZyAoYHNrX2ZvcndhcmRfYWxsb2NgKSB3aGVuIGFuIHNrYiBpcyBwYXNzZWQgdG8gdGhlIHNhbWUgc29ja2V0IHZpYSBCUEYgc3RyZWFtIHBhcnNlci92ZXJkaWN0LiBJdCBpbnRyb2R1Y2VzIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbmAgdG8gcHJvcGVybHkgaGFuZGxlIGBza19ybWVtX3NjaGVkdWxlYCBhbmQgYHNrYl9zZXRfb3duZXJfcmAuIFRoZSBjaGFuZ2VzIGludm9sdmUgbWVtb3J5IGFjY291bnRpbmcsIGxvY2tpbmcsIGFuZCBzYXZpbmcvcmVzdG9yaW5nIGBza2ItXFx1MDAzZV9za19yZWRpcmAuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBjb250YWluIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGxvZ2ljIGVycm9ycywgbWVtb3J5IGxlYWtzLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowgqn4f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 16:29:27 +0000 UTC FinishedAt: 2026-08-17 16:47:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER" ], "series_id": "eaef0771-aa99-4808-93a0-0796ba8c48a6" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "sock_map_update_elem_sys", "sock_map_get_from_fd", "tcp_bpf_update_proto", "tcp_bpf_strp_read_sock" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c29ja19tYXBfdXBkYXRlX2VsZW1fc3lzJiMzNDssCiAgICAmIzM0O3NvY2tfbWFwX2dldF9mcm9tX2ZkJiMzNDssCiAgICAmIzM0O3RjcF9icGZfdXBkYXRlX3Byb3RvJiMzNDssCiAgICAmIzM0O3RjcF9icGZfc3RycF9yZWFkX3NvY2smIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4gaXNzdWUgd2l0aCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcgKGBza19mb3J3YXJkX2FsbG9jYCkgd2hlbiBhbiBza2IgaXMgcGFzc2VkIHRvIHRoZSBzYW1lIHNvY2tldCB2aWEgQlBGIHN0cmVhbSBwYXJzZXIvdmVyZGljdC4gSXQgaW50cm9kdWNlcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gIHRvIHByb3Blcmx5IGhhbmRsZSBgc2tfcm1lbV9zY2hlZHVsZWAgYW5kIGBza2Jfc2V0X293bmVyX3JgLiBUaGUgY2hhbmdlcyBpbnZvbHZlIG1lbW9yeSBhY2NvdW50aW5nLCBsb2NraW5nLCBhbmQgc2F2aW5nL3Jlc3RvcmluZyBgc2tiLVx1MDAzZV9za19yZWRpcmAuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBjb250YWluIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGxvZ2ljIGVycm9ycywgbWVtb3J5IGxlYWtzLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc29ja21hcCBpbmZyYXN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGhvdyBgc2tfZm9yd2FyZF9hbGxvY2AgbWVtb3J5IGFjY291bnRpbmcgaXMgaGFuZGxlZCB3aGVuIGEgc3RyZWFtIHBhcnNlciAoc3RycGFyc2VyKSBwcm9ncmFtIHJldHVybnMgYFNLX1BBU1NgIGFuZCB0aGUgc2tiIGlzIGRlbGl2ZXJlZCB0byB0aGUgc2FtZSBzb2NrZXQmIzM5O3MgaW5ncmVzcyBxdWV1ZS4gSXQgaW50cm9kdWNlcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gIHRvIHNldHRsZSBhbnkgZXhpc3RpbmcgYHNrX2ZvcndhcmRfYWxsb2NgIGRlZmljaXQgYmVmb3JlIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcCB0byB0aGUgc2tiLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc29ja21hcCBhbmQgc3RyZWFtIHBhcnNlcikgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG1lbW9yeSBhY2NvdW50aW5nIHJlbWFpbnMgY29ycmVjdCB1bmRlciB2YXJpb3VzIG5ldHdvcmsgY29uZGl0aW9ucyBhbmQgQlBGIHByb2dyYW0gYmVoYXZpb3JzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMGIwZThjZjhiMzIxZGY4OGMwMjZkYWVhNTc2NDkxZmNhNWM3MzZlMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDE2OjQ0OjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrbXNnLmMgYi9uZXQvY29yZS9za21zZy5jXG5pbmRleCAyNTIxYjY0M2ZhMDVkLi4zNDdjYjE2OGY3NDkxIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2ttc2cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2ttc2cuY1xuQEAgLTU4NiwyMSAmIzQzOzU4NiwyNCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB9XG4gXG4gc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYpO1xuJiM0MztcdFx0XHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZixcbiYjNDM7XHRcdFx0XHQgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYyk7XG4mIzQzO3N0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYyk7XG4gXG4gc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0dTMyIG9mZiwgdTMyIGxlbilcbiYjNDM7XHRcdFx0XHR1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHNldHRsZV9md2RfYWxsb2MpXG4ge1xuIFx0c3RydWN0IHNvY2sgKnNrID0gcHNvY2stXHUwMDNlc2s7XG4gXHRzdHJ1Y3Qgc2tfbXNnICptc2c7XG4gXHRpbnQgZXJyO1xuIFxuLVx0LyogSWYgd2UgYXJlIHJlY2VpdmluZyBvbiB0aGUgc2FtZSBzb2NrIHNrYi1cdTAwM2VzayBpcyBhbHJlYWR5IGFzc2lnbmVkLFxuLVx0ICogc2tpcCBtZW1vcnkgYWNjb3VudGluZyBhbmQgb3duZXIgdHJhbnNpdGlvbiBzZWVpbmcgaXQgYWxyZWFkeSBzZXRcbi1cdCAqIGNvcnJlY3RseS5cbi1cdCAqL1xuIFx0aWYgKHVubGlrZWx5KHNrYi1cdTAwM2VzayA9PSBzaykpXG4tXHRcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCB0cnVlKTtcbiYjNDM7XHRcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2cocHNvY2ssIHNrYiwgb2ZmLFxuJiM0MztcdFx0XHRcdFx0XHRcdCBsZW4sIHRydWUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IHNldHRsZV9md2RfYWxsb2MpO1xuIFx0bXNnID0gc2tfcHNvY2tfY3JlYXRlX2luZ3Jlc3NfbXNnKHNrLCBza2IpO1xuIFx0aWYgKCFtc2cpXG4gXHRcdHJldHVybiAtRUFHQUlOO1xuQEAgLTYxOCwzNCAmIzQzOzYyMSwxMDAgQEAgc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tLyogUHV0cyBhbiBza2Igb24gdGhlIGluZ3Jlc3MgcXVldWUgb2YgdGhlIHNvY2tldCBhbHJlYWR5IGFzc2lnbmVkIHRvIHRoZVxuLSAqIHNrYi4gSW4gdGhpcyBjYXNlIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIG1lbW9yeSBsaW1pdHMgb3Igc2tiX3NldF9vd25lcl9yXG4tICogYmVjYXVzZSB0aGUgc2tiIGlzIGFscmVhZHkgYWNjb3VudGVkIGZvciBoZXJlLlxuJiM0MztzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduKHN0cnVjdCBzb2NrICpzayxcbiYjNDM7XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdFx0ICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYylcbiYjNDM7e1xuJiM0MztcdC8qIExlYXZlIHNrYnMgYWxyZWFkeSByZWNlaXZlLWFjY291bnRlZCB0byBzayB1bnRvdWNoZWQuICovXG4mIzQzO1x0aWYgKHNrYi1cdTAwM2VzayA9PSBzayBcdTAwMjZcdTAwMjYgc2tiLVx1MDAzZWRlc3RydWN0b3IgPT0gc29ja19yZnJlZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoc2V0dGxlX2Z3ZF9hbGxvYykge1xuJiM0MztcdFx0c29ja19vd25lZF9ieV9tZShzayk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFza19ybWVtX3NjaGVkdWxlKHNrLCBza2IsIDApKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUHV0cyBhbiBza2Igb24gdGhlIGluZ3Jlc3MgcXVldWUgZm9yIHBzb2NrLVx1MDAzZXNrLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiB0aGUgc2tiIGFscmVhZHkgaGFzIHJlY2VpdmUgb3duZXJzaGlwIGZvciB0aGlzIHNvY2tldCwgbGVhdmUgc29ja2V0XG4mIzQzOyAqIG1lbW9yeSBhY2NvdW50aW5nIHVudG91Y2hlZC4gT3RoZXJ3aXNlLCBiZWZvcmUgYXNzaWduaW5nIHJlY2VpdmUgb3duZXJzaGlwXG4mIzQzOyAqIHRvIGFuIHVub3duZWQgc3RycGFyc2VyIFNLX1BBU1Mgc2tiLCBzZXR0bGUgYW55IGV4aXN0aW5nIHNrX2ZvcndhcmRfYWxsb2NcbiYjNDM7ICogZGVmaWNpdCBmcm9tIGVhcmxpZXIgY2xvbmUgY2hhcmdlcy5cbiAgKi9cbiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZilcbiYjNDM7XHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsXG4mIzQzO1x0XHRcdFx0ICAgICBib29sIHNldHRsZV9md2RfYWxsb2MpXG4ge1xuJiM0MztcdHN0cnVjdCBzb2NrICpzayA9IHBzb2NrLVx1MDAzZXNrO1xuIFx0c3RydWN0IHNrX21zZyAqbXNnID0gYWxsb2Nfc2tfbXNnKEdGUF9BVE9NSUMpO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghbXNnKSlcbiYjNDM7XHRcdHJldHVybiAtRUFHQUlOO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbihzaywgc2tiLCBzZXR0bGVfZndkX2FsbG9jKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBmcmVlO1xuJiM0MztcbiYjNDM7XHQvKiBUaGlzIGlzIHVzZWQgaW4gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZVxuJiM0MztcdCAqIGRhdGEgb3JpZ2luYXRlcyBmcm9tIHRoZSBzb2NrZXQmIzM5O3Mgb3duIHByb3RvY29sIHN0YWNrLiBObyBuZWVkIHRvXG4mIzQzO1x0ICogcmVmY291bnQgc2sgYmVjYXVzZSBtc2cmIzM5O3MgbGlmZXRpbWUgaXMgYm91bmQgdG8gc2sgdmlhIHRoZSBpbmdyZXNzX21zZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtc2ctXHUwMDNlc2sgPSBzaztcbiYjNDM7XHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLFxuJiM0MztcdFx0XHRcdFx0ICAgdGFrZV9yZWYpO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGZyZWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO2ZyZWU6XG4mIzQzO1x0a2ZyZWUobXNnKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYmFja2xvZyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuJiM0MztcdFx0XHRcdFx0ICAgICBib29sIHNldHRsZV9md2RfYWxsb2MpXG4mIzQzO3tcbiBcdHN0cnVjdCBzb2NrICpzayA9IHBzb2NrLVx1MDAzZXNrO1xuJiM0MztcdHN0cnVjdCBza19tc2cgKm1zZyA9IGFsbG9jX3NrX21zZyhHRlBfQVRPTUlDKTtcbiBcdGludCBlcnI7XG4gXG4gXHRpZiAodW5saWtlbHkoIW1zZykpXG4gXHRcdHJldHVybiAtRUFHQUlOO1xuLVx0c2tiX3NldF9vd25lcl9yKHNrYiwgc2spO1xuJiM0MztcbiYjNDM7XHRsb2NrX3NvY2soc2spO1xuJiM0MztcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduKHNrLCBza2IsIHNldHRsZV9md2RfYWxsb2MpO1xuJiM0MztcdHJlbGVhc2Vfc29jayhzayk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZnJlZTtcbiBcbiBcdC8qIFRoaXMgaXMgdXNlZCBpbiB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlXG4gXHQgKiBkYXRhIG9yaWdpbmF0ZXMgZnJvbSB0aGUgc29ja2V0JiMzOTtzIG93biBwcm90b2NvbCBzdGFjay4gTm8gbmVlZCB0b1xuIFx0ICogcmVmY291bnQgc2sgYmVjYXVzZSBtc2cmIzM5O3MgbGlmZXRpbWUgaXMgYm91bmQgdG8gc2sgdmlhIHRoZSBpbmdyZXNzX21zZy5cbiBcdCAqL1xuIFx0bXNnLVx1MDAzZXNrID0gc2s7XG4tXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLCB0YWtlX3JlZik7XG4mIzQzO1x0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShza2IsIG9mZiwgbGVuLCBwc29jaywgc2ssIG1zZyxcbiYjNDM7XHRcdFx0XHRcdCAgIHRha2VfcmVmKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4tXHRcdGtmcmVlKG1zZyk7XG4mIzQzO1x0XHRnb3RvIGZyZWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO2ZyZWU6XG4mIzQzO1x0a2ZyZWUobXNnKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc2tfcHNvY2tfaGFuZGxlX3NrYihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdCAgICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIGluZ3Jlc3MpXG4mIzQzO1x0XHRcdCAgICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIGluZ3Jlc3MsXG4mIzQzO1x0XHRcdCAgICAgICBib29sIHNlbGZfcGFzcywgYm9vbCBzdHJwYXJzZXIpXG4ge1xuIFx0aWYgKCFpbmdyZXNzKSB7XG4gXHRcdGlmICghc29ja193cml0ZWFibGUocHNvY2stXHUwMDNlc2spKVxuQEAgLTY1Myw3ICYjNDM7NzIyLDExIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfaGFuZGxlX3NrYihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gc2tiX3NlbmRfc29jayhwc29jay1cdTAwM2Vzaywgc2tiLCBvZmYsIGxlbik7XG4gXHR9XG4gXG4tXHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3MocHNvY2ssIHNrYiwgb2ZmLCBsZW4pO1xuJiM0MztcdGlmIChzZWxmX3Bhc3MpXG4mIzQzO1x0XHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHBzb2NrLCBza2IsIG9mZixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgbGVuLCB0cnVlLCBzdHJwYXJzZXIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3MocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHN0cnBhcnNlcik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNrX3Bzb2NrX3NrYl9zdGF0ZShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuQEAgLTY5NCw5ICYjNDM7NzY3LDE0IEBAIHN0YXRpYyB2b2lkIHNrX3Bzb2NrX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRyZXR1cm47XG4gXHRtdXRleF9sb2NrKFx1MDAyNnBzb2NrLVx1MDAzZXdvcmtfbXV0ZXgpO1xuIFx0d2hpbGUgKChza2IgPSBza2JfcGVlayhcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX3NrYikpKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHNhdmVkX3JlZGlyO1xuJiM0MztcdFx0Ym9vbCBzdHJwYXJzZXI7XG4mIzQzO1x0XHRib29sIHNlbGZfcGFzcztcbiYjNDM7XG4gXHRcdGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gXHRcdG9mZiA9IDA7XG4tXHRcdGlmIChza2JfYnBmX3N0cnBhcnNlcihza2IpKSB7XG4mIzQzO1x0XHRzdHJwYXJzZXIgPSBza2JfYnBmX3N0cnBhcnNlcihza2IpO1xuJiM0MztcdFx0aWYgKHN0cnBhcnNlcikge1xuIFx0XHRcdHN0cnVjdCBzdHJwX21zZyAqc3RtID0gc3RycF9tc2coc2tiKTtcbiBcbiBcdFx0XHRvZmYgPSBzdG0tXHUwMDNlb2Zmc2V0O1xuQEAgLTcxMCwxNyAmIzQzOzc4OCwyMCBAQCBzdGF0aWMgdm9pZCBza19wc29ja19iYWNrbG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0fVxuIFxuIFx0XHRpbmdyZXNzID0gc2tiX2JwZl9pbmdyZXNzKHNrYik7XG4mIzQzO1x0XHRzZWxmX3Bhc3MgPSBpbmdyZXNzIFx1MDAyNlx1MDAyNiAhc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpO1xuJiM0MztcdFx0c2F2ZWRfcmVkaXIgPSBza2ItXHUwMDNlX3NrX3JlZGlyO1xuIFx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG4gXHRcdGRvIHtcbiBcdFx0XHRyZXQgPSAtRUlPO1xuIFx0XHRcdGlmICghc29ja19mbGFnKHBzb2NrLVx1MDAzZXNrLCBTT0NLX0RFQUQpKVxuIFx0XHRcdFx0cmV0ID0gc2tfcHNvY2tfaGFuZGxlX3NrYihwc29jaywgc2tiLCBvZmYsXG4tXHRcdFx0XHRcdFx0XHQgIGxlbiwgaW5ncmVzcyk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBsZW4sIGluZ3Jlc3MsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBzZWxmX3Bhc3MsIHN0cnBhcnNlcik7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2M9IDApIHtcbiBcdFx0XHRcdGlmIChyZXQgPT0gLUVBR0FJTikge1xuIFx0XHRcdFx0XHRza19wc29ja19za2Jfc3RhdGUocHNvY2ssIHN0YXRlLCBsZW4sIG9mZik7XG4gXHRcdFx0XHRcdC8qIFJlc3RvcmUgcmVkaXIgaW5mbyB3ZSBjbGVhcmVkIGJlZm9yZSAqL1xuLVx0XHRcdFx0XHRza2JfYnBmX3NldF9yZWRpcihza2IsIHBzb2NrLVx1MDAzZXNrLCBpbmdyZXNzKTtcbiYjNDM7XHRcdFx0XHRcdHNrYi1cdTAwM2Vfc2tfcmVkaXIgPSBzYXZlZF9yZWRpcjtcbiBcdFx0XHRcdFx0LyogRGVsYXkgc2xpZ2h0bHkgdG8gcHJpb3JpdGl6ZSBhbnlcbiBcdFx0XHRcdFx0ICogb3RoZXIgd29yayB0aGF0IG1pZ2h0IGJlIGhlcmUuXG4gXHRcdFx0XHRcdCAqL1xuQEAgLTEwMTcsNiAmIzQzOzEwOTgsOCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICogcmV0cnlpbmcgbGF0ZXIgZnJvbSB3b3JrcXVldWUuXG4gXHRcdCAqL1xuIFx0XHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3Nfc2tiKSkge1xuJiM0MztcdFx0XHRib29sIHNldHRsZV9md2RfYWxsb2MgPSBmYWxzZTtcbiYjNDM7XG4gXHRcdFx0bGVuID0gc2tiLVx1MDAzZWxlbjtcbiBcdFx0XHRvZmYgPSAwO1xuIFx0XHRcdGlmIChza2JfYnBmX3N0cnBhcnNlcihza2IpKSB7XG5AQCAtMTAyNCw4ICYjNDM7MTEwNywxMCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdFx0XHRcdG9mZiA9IHN0bS1cdTAwM2VvZmZzZXQ7XG4gXHRcdFx0XHRsZW4gPSBzdG0tXHUwMDNlZnVsbF9sZW47XG4mIzQzO1x0XHRcdFx0c2V0dGxlX2Z3ZF9hbGxvYyA9IHRydWU7XG4gXHRcdFx0fVxuLVx0XHRcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIGZhbHNlKTtcbiYjNDM7XHRcdFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbixcbiYjNDM7XHRcdFx0XHRcdFx0XHRmYWxzZSwgc2V0dGxlX2Z3ZF9hbGxvYyk7XG4gXHRcdH1cbiBcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX2xvY2spO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNcbmluZGV4IDFkNzIzMTcyOGVhZmQuLmM3YWQyMWQwYmJmNDkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNcbkBAIC0xLDUgJiM0MzsxLDkgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICNpbmNsdWRlIFx1MDAzY2Vycm9yLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW5ldF9kaWFnLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvY2tfZGlhZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0aW5ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3NvY2ttYXBfaGVscGVycy5oXCYjMzQ7XG5AQCAtNDYwLDYgJiM0Mzs0NjQsMTcxIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zdHJwX3BhcnNlcl9yZWplY3Qodm9pZClcbiBcdHRlc3Rfc29ja21hcF9zdHJwX19kZXN0cm95KHN0cnApO1xuIH1cbiBcbiYjNDM7LyogUmVhZCBza19mb3J3YXJkX2FsbG9jIHRocm91Z2ggaW5ldF9kaWFnIG1lbWluZm8uICovXG4mIzQzO3N0YXRpYyBpbnQgc29ja21hcF9zdHJwX2dldF9md2RfYWxsb2MoaW50IHNvY2ssIGludCAqZndkX2FsbG9jKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgbG9jYWwgPSB7fSwgcGVlciA9IHt9O1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbiAqbG9jYWxfaW4sICpwZWVyX2luO1xuJiM0MztcdHNvY2tsZW5fdCBhZGRyX2xlbiA9IHNpemVvZihsb2NhbCk7XG4mIzQzO1x0Y2hhciBidWZbMTAyNF07XG4mIzQzO1x0c3RydWN0IHtcbiYjNDM7XHRcdHN0cnVjdCBubG1zZ2hkciBubGg7XG4mIzQzO1x0XHRzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiByZXE7XG4mIzQzO1x0fSByZXEgPSB7XG4mIzQzO1x0XHQubmxoID0ge1xuJiM0MztcdFx0XHQubmxtc2dfbGVuID0gc2l6ZW9mKHJlcSksXG4mIzQzO1x0XHRcdC5ubG1zZ190eXBlID0gU09DS19ESUFHX0JZX0ZBTUlMWSxcbiYjNDM7XHRcdFx0Lm5sbXNnX2ZsYWdzID0gTkxNX0ZfUkVRVUVTVCxcbiYjNDM7XHRcdFx0Lm5sbXNnX3NlcSA9IDEsXG4mIzQzO1x0XHR9LFxuJiM0MztcdFx0LnJlcSA9IHtcbiYjNDM7XHRcdFx0LnNkaWFnX2ZhbWlseSA9IEFGX0lORVQsXG4mIzQzO1x0XHRcdC5zZGlhZ19wcm90b2NvbCA9IElQUFJPVE9fVENQLFxuJiM0MztcdFx0XHQuaWRpYWdfZXh0ID0gMSBcdTAwM2NcdTAwM2MgKElORVRfRElBR19NRU1JTkZPIC0gMSksXG4mIzQzO1x0XHRcdC5pZGlhZ19zdGF0ZXMgPSB+MFUsXG4mIzQzO1x0XHRcdC5pZC5pZGlhZ19jb29raWUgPSB7XG4mIzQzO1x0XHRcdFx0SU5FVF9ESUFHX05PQ09PS0lFLFxuJiM0MztcdFx0XHRcdElORVRfRElBR19OT0NPT0tJRSxcbiYjNDM7XHRcdFx0fSxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0fTtcbiYjNDM7XHRpbnQgZGlhZ19mZCwgcmV0LCBlcnIgPSAtRU5PRU5UO1xuJiM0MztcbiYjNDM7XHRpZiAoZ2V0c29ja25hbWUoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmxvY2FsLCBcdTAwMjZhZGRyX2xlbikpXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcdGFkZHJfbGVuID0gc2l6ZW9mKHBlZXIpO1xuJiM0MztcdGlmIChnZXRwZWVybmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2cGVlciwgXHUwMDI2YWRkcl9sZW4pKVxuJiM0MztcdFx0cmV0dXJuIC1lcnJubztcbiYjNDM7XG4mIzQzO1x0bG9jYWxfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopXHUwMDI2bG9jYWw7XG4mIzQzO1x0cGVlcl9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilcdTAwMjZwZWVyO1xuJiM0MztcdHJlcS5yZXEuaWQuaWRpYWdfc3BvcnQgPSBsb2NhbF9pbi1cdTAwM2VzaW5fcG9ydDtcbiYjNDM7XHRyZXEucmVxLmlkLmlkaWFnX2Rwb3J0ID0gcGVlcl9pbi1cdTAwM2VzaW5fcG9ydDtcbiYjNDM7XHRyZXEucmVxLmlkLmlkaWFnX3NyY1swXSA9IGxvY2FsX2luLVx1MDAzZXNpbl9hZGRyLnNfYWRkcjtcbiYjNDM7XHRyZXEucmVxLmlkLmlkaWFnX2RzdFswXSA9IHBlZXJfaW4tXHUwMDNlc2luX2FkZHIuc19hZGRyO1xuJiM0MztcbiYjNDM7XHRkaWFnX2ZkID0gc29ja2V0KEFGX05FVExJTkssIFNPQ0tfUkFXIHwgU09DS19DTE9FWEVDLFxuJiM0MztcdFx0XHQgTkVUTElOS19TT0NLX0RJQUcpO1xuJiM0MztcdGlmIChkaWFnX2ZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC1lcnJubztcbiYjNDM7XG4mIzQzO1x0cmV0ID0gc2VuZChkaWFnX2ZkLCBcdTAwMjZyZXEsIHNpemVvZihyZXEpLCAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRlcnIgPSAtZXJybm87XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHJldCAhPSBzaXplb2YocmVxKSkge1xuJiM0MztcdFx0ZXJyID0gLUVJTztcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVjdihkaWFnX2ZkLCBidWYsIHNpemVvZihidWYpLCAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRlcnIgPSAtZXJybm87XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoc3RydWN0IG5sbXNnaGRyICpubGggPSAoc3RydWN0IG5sbXNnaGRyICopYnVmO1xuJiM0MztcdCAgICAgTkxNU0dfT0sobmxoLCByZXQpOyBubGggPSBOTE1TR19ORVhUKG5saCwgcmV0KSkge1xuJiM0MztcdFx0c3RydWN0IGluZXRfZGlhZ19tc2cgKm1zZyA9IE5MTVNHX0RBVEEobmxoKTtcbiYjNDM7XHRcdHN0cnVjdCBydGF0dHIgKmF0dHI7XG4mIzQzO1x0XHRpbnQgbGVuO1xuJiM0MztcbiYjNDM7XHRcdGlmIChubGgtXHUwMDNlbmxtc2dfdHlwZSA9PSBOTE1TR19FUlJPUikge1xuJiM0MztcdFx0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChubGgtXHUwMDNlbmxtc2dfdHlwZSA9PSBOTE1TR19ET05FKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRsZW4gPSBubGgtXHUwMDNlbmxtc2dfbGVuIC0gTkxNU0dfTEVOR1RIKHNpemVvZigqbXNnKSk7XG4mIzQzO1x0XHRmb3IgKGF0dHIgPSAoc3RydWN0IHJ0YXR0ciAqKShtc2cgJiM0MzsgMSk7IFJUQV9PSyhhdHRyLCBsZW4pO1xuJiM0MztcdFx0ICAgICBhdHRyID0gUlRBX05FWFQoYXR0ciwgbGVuKSkge1xuJiM0MztcdFx0XHRzdHJ1Y3QgaW5ldF9kaWFnX21lbWluZm8gKm1pbmZvO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKGF0dHItXHUwMDNlcnRhX3R5cGUgIT0gSU5FVF9ESUFHX01FTUlORk8pXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdG1pbmZvID0gUlRBX0RBVEEoYXR0cik7XG4mIzQzO1x0XHRcdCpmd2RfYWxsb2MgPSAoX19zMzIpbWluZm8tXHUwMDNlaWRpYWdfZm1lbTtcbiYjNDM7XHRcdFx0ZXJyID0gMDtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGNsb3NlKGRpYWdfZmQpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRlc3Qgc3RycGFyc2VyIFNLX1BBU1MgZGVsaXZlcnkgdG8gdGhlIHNhbWUgc29ja2V0LiAqL1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF9zZWxmX3Bhc3NfZndkX2FsbG9jKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGVzdF9zb2NrbWFwX3N0cnAgKnN0cnAgPSBOVUxMO1xuJiM0MztcdGNoYXIgc25kWzQgKiAxMDI0XTtcbiYjNDM7XHRpbnQgYyA9IC0xLCBwID0gLTE7XG4mIzQzO1x0aW50IGZ3ZF9hbGxvYztcbiYjNDM7XHRpbnQgc25kYnVmID0gc2l6ZW9mKHNuZCk7XG4mIzQzO1x0aW50IHplcm8gPSAwO1xuJiM0MztcdGNoYXIgcmN2O1xuJiM0MztcdGludCBzZW50LCByZWN2ZDtcbiYjNDM7XHRpbnQgbWFwO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdG1lbXNldChzbmQsIDB4YTUsIHNpemVvZihzbmQpKTtcbiYjNDM7XG4mIzQzO1x0c3RycCA9IHRlc3Rfc29ja21hcF9zdHJwX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHN0cnAsIFwmIzM0O3Rlc3Rfc29ja21hcF9zdHJwX19vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bWFwID0gYnBmX21hcF9fZmQoc3RycC1cdTAwM2VtYXBzLnNvY2tfbWFwKTtcbiYjNDM7XHRlcnIgPSB4YnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChzdHJwLVx1MDAzZXByb2dzLnByb2dfc2tiX3BhcnNlcl9vbmUpLFxuJiM0MztcdFx0XHQgICAgICAgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXN0cm95O1xuJiM0MztcbiYjNDM7XHRlcnIgPSB4YnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChzdHJwLVx1MDAzZXByb2dzLnByb2dfc2tiX3ZlcmRpY3RfcGFzcyksXG4mIzQzO1x0XHRcdCAgICAgICBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QsIDApO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXN0cm95O1xuJiM0MztcbiYjNDM7XHRlcnIgPSBjcmVhdGVfcGFpcihBRl9JTkVULCBTT0NLX1NUUkVBTSwgXHUwMDI2YywgXHUwMDI2cCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtjcmVhdGVfcGFpclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXN0cm95O1xuJiM0MztcbiYjNDM7XHRlcnIgPSB4c2V0c29ja29wdChjLCBTT0xfU09DS0VULCBTT19TTkRCVUYsIFx1MDAyNnNuZGJ1Ziwgc2l6ZW9mKHNuZGJ1ZikpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXN0cm95O1xuJiM0MztcbiYjNDM7XHRlcnIgPSB4c2V0c29ja29wdChwLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIFx1MDAyNnNuZGJ1Ziwgc2l6ZW9mKHNuZGJ1ZikpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXN0cm95O1xuJiM0MztcbiYjNDM7XHRlcnIgPSB4YnBmX21hcF91cGRhdGVfZWxlbShtYXAsIFx1MDAyNnplcm8sIFx1MDAyNnAsIEJQRl9OT0VYSVNUKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBvdXRfZGVzdHJveTtcbiYjNDM7XG4mIzQzO1x0c2VudCA9IHNlbmQoYywgc25kLCBzaXplb2Yoc25kKSwgTVNHX0RPTlRXQUlUKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShzZW50LCBzaXplb2Yoc25kKSwgXCYjMzQ7c2VuZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXN0cm95O1xuJiM0MztcbiYjNDM7XHRyZWN2ZCA9IHJlY3ZfdGltZW91dChwLCBcdTAwMjZyY3YsIHNpemVvZihyY3YpLCBNU0dfRE9OVFdBSVQsXG4mIzQzO1x0XHRcdCAgICAgSU9fVElNRU9VVF9TRUMpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHJlY3ZkLCBzaXplb2YocmN2KSwgXCYjMzQ7cmVjdl90aW1lb3V0XCYjMzQ7KSB8fFxuJiM0MztcdCAgICAhQVNTRVJUX0VRKHJjdiwgc25kWzBdLCBcJiMzNDtkYXRhIG1pc21hdGNoXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4mIzQzO1xuJiM0MztcdGVyciA9IHNvY2ttYXBfc3RycF9nZXRfZndkX2FsbG9jKHAsIFx1MDAyNmZ3ZF9hbGxvYyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvY1wmIzM0OykgfHxcbiYjNDM7XHQgICAgIUFTU0VSVF9HRShmd2RfYWxsb2MsIDAsIFwmIzM0O3NrX2ZvcndhcmRfYWxsb2NcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGVzdHJveTtcbiYjNDM7b3V0X2Rlc3Ryb3k6XG4mIzQzO1x0dGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7XG4mIzQzO1x0aWYgKGMgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoYyk7XG4mIzQzO1x0aWYgKHAgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UocCk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCB0ZXN0X3NvY2ttYXBfc3RycCh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgc3RycCB0Y3AgcGFzc1wmIzM0OykpXG5AQCAtNDgyLDQgJiM0Mzs2NTEsNiBAQCB2b2lkIHRlc3Rfc29ja21hcF9zdHJwKHZvaWQpXG4gXHRcdHRlc3Rfc29ja21hcF9zdHJwX2Rpc3BhdGNoX3BrdChBRl9JTkVULCBTT0NLX1NUUkVBTSk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtzb2NrbWFwIHN0cnAgcGFyc2VyIHJlamVjdCBwa3QgbW9kXCYjMzQ7KSlcbiBcdFx0dGVzdF9zb2NrbWFwX3N0cnBfcGFyc2VyX3JlamVjdCgpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgc3RycCBzZWxmIHBhc3MgZndkIGFsbG9jXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3Rfc29ja21hcF9zdHJwX3NlbGZfcGFzc19md2RfYWxsb2MoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuY1xuaW5kZXggZmU4OGZhNmQ0MGJjNS4uNjgyZTUzZDQwNzUxYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuY1xuQEAgLTUwLDYgJiM0Mzs1MCwxMiBAQCBpbnQgcHJvZ19za2JfcGFyc2VyX3BhcnRpYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIDEwO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0O3NrX3NrYi9zdHJlYW1fcGFyc2VyXCYjMzQ7KVxuJiM0MztpbnQgcHJvZ19za2JfcGFyc2VyX29uZShzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMTtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7c2tfc2tiL3N0cmVhbV9wYXJzZXJcJiMzNDspXG4gaW50IHByb2dfc2tiX3BhcnNlcl9yZXNpemUoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMmIzM0OywKICAgICYjMzQ7c29ja19tYXBfZ2V0X2Zyb21fZmQmIzM0OywKICAgICYjMzQ7dGNwX2JwZl91cGRhdGVfcHJvdG8mIzM0OywKICAgICYjMzQ7dGNwX2JwZl9zdHJwX3JlYWRfc29jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHNvY2ttYXAgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBob3cgYHNrX2ZvcndhcmRfYWxsb2NgIG1lbW9yeSBhY2NvdW50aW5nIGlzIGhhbmRsZWQgd2hlbiBhIHN0cmVhbSBwYXJzZXIgKHN0cnBhcnNlcikgcHJvZ3JhbSByZXR1cm5zIGBTS19QQVNTYCBhbmQgdGhlIHNrYiBpcyBkZWxpdmVyZWQgdG8gdGhlIHNhbWUgc29ja2V0JiMzOTtzIGluZ3Jlc3MgcXVldWUuIEl0IGludHJvZHVjZXMgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduYCB0byBzZXR0bGUgYW55IGV4aXN0aW5nIGBza19mb3J3YXJkX2FsbG9jYCBkZWZpY2l0IGJlZm9yZSBhc3NpZ25pbmcgcmVjZWl2ZSBvd25lcnNoaXAgdG8gdGhlIHNrYi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQlBGIHNvY2ttYXAgYW5kIHN0cmVhbSBwYXJzZXIpIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBtZW1vcnkgYWNjb3VudGluZyByZW1haW5zIGNvcnJlY3QgdW5kZXIgdmFyaW91cyBuZXR3b3JrIGNvbmRpdGlvbnMgYW5kIEJQRiBwcm9ncmFtIGJlaGF2aW9ycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBiMGU4Y2Y4YjMyMWRmODhjMDI2ZGFlYTU3NjQ5MWZjYTVjNzM2ZTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAxNjo0NDoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrbXNnLmMgYi9uZXQvY29yZS9za21zZy5jCmluZGV4IDI1MjFiNjQzZmEwNWQuLjM0N2NiMTY4Zjc0OTEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrbXNnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2ttc2cuYwpAQCAtNTg2LDIxICYjNDM7NTg2LDI0IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogfQogCiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYpOwomIzQzOwkJCQkgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsCiYjNDM7CQkJCSAgICAgYm9vbCBzZXR0bGVfZndkX2FsbG9jKTsKJiM0MztzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYmFja2xvZyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLAomIzQzOwkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkJICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLAomIzQzOwkJCQkJICAgICBib29sIHNldHRsZV9md2RfYWxsb2MpOwogCiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJdTMyIG9mZiwgdTMyIGxlbikKJiM0MzsJCQkJdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCBzZXR0bGVfZndkX2FsbG9jKQogewogCXN0cnVjdCBzb2NrICpzayA9IHBzb2NrLSZndDtzazsKIAlzdHJ1Y3Qgc2tfbXNnICptc2c7CiAJaW50IGVycjsKIAotCS8qIElmIHdlIGFyZSByZWNlaXZpbmcgb24gdGhlIHNhbWUgc29jayBza2ItJmd0O3NrIGlzIGFscmVhZHkgYXNzaWduZWQsCi0JICogc2tpcCBtZW1vcnkgYWNjb3VudGluZyBhbmQgb3duZXIgdHJhbnNpdGlvbiBzZWVpbmcgaXQgYWxyZWFkeSBzZXQKLQkgKiBjb3JyZWN0bHkuCi0JICovCiAJaWYgKHVubGlrZWx5KHNrYi0mZ3Q7c2sgPT0gc2spKQotCQlyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgdHJ1ZSk7CiYjNDM7CQlyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHBzb2NrLCBza2IsIG9mZiwKJiM0MzsJCQkJCQkJIGxlbiwgdHJ1ZSwKJiM0MzsJCQkJCQkJIHNldHRsZV9md2RfYWxsb2MpOwogCW1zZyA9IHNrX3Bzb2NrX2NyZWF0ZV9pbmdyZXNzX21zZyhzaywgc2tiKTsKIAlpZiAoIW1zZykKIAkJcmV0dXJuIC1FQUdBSU47CkBAIC02MTgsMzQgJiM0Mzs2MjEsMTAwIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlyZXR1cm4gZXJyOwogfQogCi0vKiBQdXRzIGFuIHNrYiBvbiB0aGUgaW5ncmVzcyBxdWV1ZSBvZiB0aGUgc29ja2V0IGFscmVhZHkgYXNzaWduZWQgdG8gdGhlCi0gKiBza2IuIEluIHRoaXMgY2FzZSB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBtZW1vcnkgbGltaXRzIG9yIHNrYl9zZXRfb3duZXJfcgotICogYmVjYXVzZSB0aGUgc2tiIGlzIGFscmVhZHkgYWNjb3VudGVkIGZvciBoZXJlLgomIzQzO3N0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ24oc3RydWN0IHNvY2sgKnNrLAomIzQzOwkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCQkgICAgYm9vbCBzZXR0bGVfZndkX2FsbG9jKQomIzQzO3sKJiM0MzsJLyogTGVhdmUgc2ticyBhbHJlYWR5IHJlY2VpdmUtYWNjb3VudGVkIHRvIHNrIHVudG91Y2hlZC4gKi8KJiM0MzsJaWYgKHNrYi0mZ3Q7c2sgPT0gc2sgJmFtcDsmYW1wOyBza2ItJmd0O2Rlc3RydWN0b3IgPT0gc29ja19yZnJlZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoc2V0dGxlX2Z3ZF9hbGxvYykgewomIzQzOwkJc29ja19vd25lZF9ieV9tZShzayk7CiYjNDM7CiYjNDM7CQlpZiAoIXNrX3JtZW1fc2NoZWR1bGUoc2ssIHNrYiwgMCkpCiYjNDM7CQkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tiX3NldF9vd25lcl9yKHNrYiwgc2spOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUHV0cyBhbiBza2Igb24gdGhlIGluZ3Jlc3MgcXVldWUgZm9yIHBzb2NrLSZndDtzay4KJiM0MzsgKgomIzQzOyAqIElmIHRoZSBza2IgYWxyZWFkeSBoYXMgcmVjZWl2ZSBvd25lcnNoaXAgZm9yIHRoaXMgc29ja2V0LCBsZWF2ZSBzb2NrZXQKJiM0MzsgKiBtZW1vcnkgYWNjb3VudGluZyB1bnRvdWNoZWQuIE90aGVyd2lzZSwgYmVmb3JlIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcAomIzQzOyAqIHRvIGFuIHVub3duZWQgc3RycGFyc2VyIFNLX1BBU1Mgc2tiLCBzZXR0bGUgYW55IGV4aXN0aW5nIHNrX2ZvcndhcmRfYWxsb2MKJiM0MzsgKiBkZWZpY2l0IGZyb20gZWFybGllciBjbG9uZSBjaGFyZ2VzLgogICovCiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYpCiYjNDM7CQkJCSAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZiwKJiM0MzsJCQkJICAgICBib29sIHNldHRsZV9md2RfYWxsb2MpCiB7CiYjNDM7CXN0cnVjdCBzb2NrICpzayA9IHBzb2NrLSZndDtzazsKIAlzdHJ1Y3Qgc2tfbXNnICptc2cgPSBhbGxvY19za19tc2coR0ZQX0FUT01JQyk7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSghbXNnKSkKJiM0MzsJCXJldHVybiAtRUFHQUlOOwomIzQzOwomIzQzOwllcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbihzaywgc2tiLCBzZXR0bGVfZndkX2FsbG9jKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZnJlZTsKJiM0MzsKJiM0MzsJLyogVGhpcyBpcyB1c2VkIGluIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUKJiM0MzsJICogZGF0YSBvcmlnaW5hdGVzIGZyb20gdGhlIHNvY2tldCYjMzk7cyBvd24gcHJvdG9jb2wgc3RhY2suIE5vIG5lZWQgdG8KJiM0MzsJICogcmVmY291bnQgc2sgYmVjYXVzZSBtc2cmIzM5O3MgbGlmZXRpbWUgaXMgYm91bmQgdG8gc2sgdmlhIHRoZSBpbmdyZXNzX21zZy4KJiM0MzsJICovCiYjNDM7CW1zZy0mZ3Q7c2sgPSBzazsKJiM0MzsJZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShza2IsIG9mZiwgbGVuLCBwc29jaywgc2ssIG1zZywKJiM0MzsJCQkJCSAgIHRha2VfcmVmKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlnb3RvIGZyZWU7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7ZnJlZToKJiM0MzsJa2ZyZWUobXNnKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2coc3RydWN0IHNrX3Bzb2NrICpwc29jaywKJiM0MzsJCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJCSAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZiwKJiM0MzsJCQkJCSAgICAgYm9vbCBzZXR0bGVfZndkX2FsbG9jKQomIzQzO3sKIAlzdHJ1Y3Qgc29jayAqc2sgPSBwc29jay0mZ3Q7c2s7CiYjNDM7CXN0cnVjdCBza19tc2cgKm1zZyA9IGFsbG9jX3NrX21zZyhHRlBfQVRPTUlDKTsKIAlpbnQgZXJyOwogCiAJaWYgKHVubGlrZWx5KCFtc2cpKQogCQlyZXR1cm4gLUVBR0FJTjsKLQlza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7CiYjNDM7CiYjNDM7CWxvY2tfc29jayhzayk7CiYjNDM7CWVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduKHNrLCBza2IsIHNldHRsZV9md2RfYWxsb2MpOwomIzQzOwlyZWxlYXNlX3NvY2soc2spOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBmcmVlOwogCiAJLyogVGhpcyBpcyB1c2VkIGluIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUKIAkgKiBkYXRhIG9yaWdpbmF0ZXMgZnJvbSB0aGUgc29ja2V0JiMzOTtzIG93biBwcm90b2NvbCBzdGFjay4gTm8gbmVlZCB0bwogCSAqIHJlZmNvdW50IHNrIGJlY2F1c2UgbXNnJiMzOTtzIGxpZmV0aW1lIGlzIGJvdW5kIHRvIHNrIHZpYSB0aGUgaW5ncmVzc19tc2cuCiAJICovCiAJbXNnLSZndDtzayA9IHNrOwotCWVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc2tiLCBvZmYsIGxlbiwgcHNvY2ssIHNrLCBtc2csIHRha2VfcmVmKTsKJiM0MzsJZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShza2IsIG9mZiwgbGVuLCBwc29jaywgc2ssIG1zZywKJiM0MzsJCQkJCSAgIHRha2VfcmVmKTsKIAlpZiAoZXJyICZsdDsgMCkKLQkJa2ZyZWUobXNnKTsKJiM0MzsJCWdvdG8gZnJlZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0MztmcmVlOgomIzQzOwlrZnJlZShtc2cpOwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2tfcHNvY2tfaGFuZGxlX3NrYihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgaW5ncmVzcykKJiM0MzsJCQkgICAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCBpbmdyZXNzLAomIzQzOwkJCSAgICAgICBib29sIHNlbGZfcGFzcywgYm9vbCBzdHJwYXJzZXIpCiB7CiAJaWYgKCFpbmdyZXNzKSB7CiAJCWlmICghc29ja193cml0ZWFibGUocHNvY2stJmd0O3NrKSkKQEAgLTY1Myw3ICYjNDM7NzIyLDExIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfaGFuZGxlX3NrYihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlyZXR1cm4gc2tiX3NlbmRfc29jayhwc29jay0mZ3Q7c2ssIHNrYiwgb2ZmLCBsZW4pOwogCX0KIAotCXJldHVybiBza19wc29ja19za2JfaW5ncmVzcyhwc29jaywgc2tiLCBvZmYsIGxlbik7CiYjNDM7CWlmIChzZWxmX3Bhc3MpCiYjNDM7CQlyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHBzb2NrLCBza2IsIG9mZiwKJiM0MzsJCQkJCQkJIGxlbiwgdHJ1ZSwgc3RycGFyc2VyKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBzdHJwYXJzZXIpOwogfQogCiBzdGF0aWMgdm9pZCBza19wc29ja19za2Jfc3RhdGUoc3RydWN0IHNrX3Bzb2NrICpwc29jaywKQEAgLTY5NCw5ICYjNDM7NzY3LDE0IEBAIHN0YXRpYyB2b2lkIHNrX3Bzb2NrX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQlyZXR1cm47CiAJbXV0ZXhfbG9jaygmYW1wO3Bzb2NrLSZndDt3b3JrX211dGV4KTsKIAl3aGlsZSAoKHNrYiA9IHNrYl9wZWVrKCZhbXA7cHNvY2stJmd0O2luZ3Jlc3Nfc2tiKSkpIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgc2F2ZWRfcmVkaXI7CiYjNDM7CQlib29sIHN0cnBhcnNlcjsKJiM0MzsJCWJvb2wgc2VsZl9wYXNzOwomIzQzOwogCQlsZW4gPSBza2ItJmd0O2xlbjsKIAkJb2ZmID0gMDsKLQkJaWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHsKJiM0MzsJCXN0cnBhcnNlciA9IHNrYl9icGZfc3RycGFyc2VyKHNrYik7CiYjNDM7CQlpZiAoc3RycGFyc2VyKSB7CiAJCQlzdHJ1Y3Qgc3RycF9tc2cgKnN0bSA9IHN0cnBfbXNnKHNrYik7CiAKIAkJCW9mZiA9IHN0bS0mZ3Q7b2Zmc2V0OwpAQCAtNzEwLDE3ICYjNDM7Nzg4LDIwIEBAIHN0YXRpYyB2b2lkIHNrX3Bzb2NrX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQl9CiAKIAkJaW5ncmVzcyA9IHNrYl9icGZfaW5ncmVzcyhza2IpOwomIzQzOwkJc2VsZl9wYXNzID0gaW5ncmVzcyAmYW1wOyZhbXA7ICFza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYik7CiYjNDM7CQlzYXZlZF9yZWRpciA9IHNrYi0mZ3Q7X3NrX3JlZGlyOwogCQlza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7CiAJCWRvIHsKIAkJCXJldCA9IC1FSU87CiAJCQlpZiAoIXNvY2tfZmxhZyhwc29jay0mZ3Q7c2ssIFNPQ0tfREVBRCkpCiAJCQkJcmV0ID0gc2tfcHNvY2tfaGFuZGxlX3NrYihwc29jaywgc2tiLCBvZmYsCi0JCQkJCQkJICBsZW4sIGluZ3Jlc3MpOwomIzQzOwkJCQkJCQkgIGxlbiwgaW5ncmVzcywKJiM0MzsJCQkJCQkJICBzZWxmX3Bhc3MsIHN0cnBhcnNlcik7CiAJCQlpZiAocmV0ICZsdDs9IDApIHsKIAkJCQlpZiAocmV0ID09IC1FQUdBSU4pIHsKIAkJCQkJc2tfcHNvY2tfc2tiX3N0YXRlKHBzb2NrLCBzdGF0ZSwgbGVuLCBvZmYpOwogCQkJCQkvKiBSZXN0b3JlIHJlZGlyIGluZm8gd2UgY2xlYXJlZCBiZWZvcmUgKi8KLQkJCQkJc2tiX2JwZl9zZXRfcmVkaXIoc2tiLCBwc29jay0mZ3Q7c2ssIGluZ3Jlc3MpOwomIzQzOwkJCQkJc2tiLSZndDtfc2tfcmVkaXIgPSBzYXZlZF9yZWRpcjsKIAkJCQkJLyogRGVsYXkgc2xpZ2h0bHkgdG8gcHJpb3JpdGl6ZSBhbnkKIAkJCQkJICogb3RoZXIgd29yayB0aGF0IG1pZ2h0IGJlIGhlcmUuCiAJCQkJCSAqLwpAQCAtMTAxNyw2ICYjNDM7MTA5OCw4IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgKiByZXRyeWluZyBsYXRlciBmcm9tIHdvcmtxdWV1ZS4KIAkJICovCiAJCWlmIChza2JfcXVldWVfZW1wdHkoJmFtcDtwc29jay0mZ3Q7aW5ncmVzc19za2IpKSB7CiYjNDM7CQkJYm9vbCBzZXR0bGVfZndkX2FsbG9jID0gZmFsc2U7CiYjNDM7CiAJCQlsZW4gPSBza2ItJmd0O2xlbjsKIAkJCW9mZiA9IDA7CiAJCQlpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkgewpAQCAtMTAyNCw4ICYjNDM7MTEwNywxMCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAogCQkJCW9mZiA9IHN0bS0mZ3Q7b2Zmc2V0OwogCQkJCWxlbiA9IHN0bS0mZ3Q7ZnVsbF9sZW47CiYjNDM7CQkJCXNldHRsZV9md2RfYWxsb2MgPSB0cnVlOwogCQkJfQotCQkJZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgZmFsc2UpOwomIzQzOwkJCWVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sCiYjNDM7CQkJCQkJCWZhbHNlLCBzZXR0bGVfZndkX2FsbG9jKTsKIAkJfQogCQlpZiAoZXJyICZsdDsgMCkgewogCQkJc3Bpbl9sb2NrX2JoKCZhbXA7cHNvY2stJmd0O2luZ3Jlc3NfbG9jayk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jCmluZGV4IDFkNzIzMTcyOGVhZmQuLmM3YWQyMWQwYmJmNDkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jCkBAIC0xLDUgJiM0MzsxLDkgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAjaW5jbHVkZSAmbHQ7ZXJyb3IuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW5ldF9kaWFnLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldGxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcnRuZXRsaW5rLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NvY2tfZGlhZy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldGluZXQvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwogI2luY2x1ZGUgJiMzNDtzb2NrbWFwX2hlbHBlcnMuaCYjMzQ7CkBAIC00NjAsNiAmIzQzOzQ2NCwxNzEgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnBfcGFyc2VyX3JlamVjdCh2b2lkKQogCXRlc3Rfc29ja21hcF9zdHJwX19kZXN0cm95KHN0cnApOwogfQogCiYjNDM7LyogUmVhZCBza19mb3J3YXJkX2FsbG9jIHRocm91Z2ggaW5ldF9kaWFnIG1lbWluZm8uICovCiYjNDM7c3RhdGljIGludCBzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvYyhpbnQgc29jaywgaW50ICpmd2RfYWxsb2MpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBsb2NhbCA9IHt9LCBwZWVyID0ge307CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9pbiAqbG9jYWxfaW4sICpwZWVyX2luOwomIzQzOwlzb2NrbGVuX3QgYWRkcl9sZW4gPSBzaXplb2YobG9jYWwpOwomIzQzOwljaGFyIGJ1ZlsxMDI0XTsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXN0cnVjdCBubG1zZ2hkciBubGg7CiYjNDM7CQlzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiByZXE7CiYjNDM7CX0gcmVxID0gewomIzQzOwkJLm5saCA9IHsKJiM0MzsJCQkubmxtc2dfbGVuID0gc2l6ZW9mKHJlcSksCiYjNDM7CQkJLm5sbXNnX3R5cGUgPSBTT0NLX0RJQUdfQllfRkFNSUxZLAomIzQzOwkJCS5ubG1zZ19mbGFncyA9IE5MTV9GX1JFUVVFU1QsCiYjNDM7CQkJLm5sbXNnX3NlcSA9IDEsCiYjNDM7CQl9LAomIzQzOwkJLnJlcSA9IHsKJiM0MzsJCQkuc2RpYWdfZmFtaWx5ID0gQUZfSU5FVCwKJiM0MzsJCQkuc2RpYWdfcHJvdG9jb2wgPSBJUFBST1RPX1RDUCwKJiM0MzsJCQkuaWRpYWdfZXh0ID0gMSAmbHQ7Jmx0OyAoSU5FVF9ESUFHX01FTUlORk8gLSAxKSwKJiM0MzsJCQkuaWRpYWdfc3RhdGVzID0gfjBVLAomIzQzOwkJCS5pZC5pZGlhZ19jb29raWUgPSB7CiYjNDM7CQkJCUlORVRfRElBR19OT0NPT0tJRSwKJiM0MzsJCQkJSU5FVF9ESUFHX05PQ09PS0lFLAomIzQzOwkJCX0sCiYjNDM7CQl9LAomIzQzOwl9OwomIzQzOwlpbnQgZGlhZ19mZCwgcmV0LCBlcnIgPSAtRU5PRU5UOwomIzQzOwomIzQzOwlpZiAoZ2V0c29ja25hbWUoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhbXA7bG9jYWwsICZhbXA7YWRkcl9sZW4pKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsJYWRkcl9sZW4gPSBzaXplb2YocGVlcik7CiYjNDM7CWlmIChnZXRwZWVybmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDtwZWVyLCAmYW1wO2FkZHJfbGVuKSkKJiM0MzsJCXJldHVybiAtZXJybm87CiYjNDM7CiYjNDM7CWxvY2FsX2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZhbXA7bG9jYWw7CiYjNDM7CXBlZXJfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopJmFtcDtwZWVyOwomIzQzOwlyZXEucmVxLmlkLmlkaWFnX3Nwb3J0ID0gbG9jYWxfaW4tJmd0O3Npbl9wb3J0OwomIzQzOwlyZXEucmVxLmlkLmlkaWFnX2Rwb3J0ID0gcGVlcl9pbi0mZ3Q7c2luX3BvcnQ7CiYjNDM7CXJlcS5yZXEuaWQuaWRpYWdfc3JjWzBdID0gbG9jYWxfaW4tJmd0O3Npbl9hZGRyLnNfYWRkcjsKJiM0MzsJcmVxLnJlcS5pZC5pZGlhZ19kc3RbMF0gPSBwZWVyX2luLSZndDtzaW5fYWRkci5zX2FkZHI7CiYjNDM7CiYjNDM7CWRpYWdfZmQgPSBzb2NrZXQoQUZfTkVUTElOSywgU09DS19SQVcgfCBTT0NLX0NMT0VYRUMsCiYjNDM7CQkJIE5FVExJTktfU09DS19ESUFHKTsKJiM0MzsJaWYgKGRpYWdfZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsKJiM0MzsJcmV0ID0gc2VuZChkaWFnX2ZkLCAmYW1wO3JlcSwgc2l6ZW9mKHJlcSksIDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJZXJyID0gLWVycm5vOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJaWYgKHJldCAhPSBzaXplb2YocmVxKSkgewomIzQzOwkJZXJyID0gLUVJTzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHJlY3YoZGlhZ19mZCwgYnVmLCBzaXplb2YoYnVmKSwgMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQllcnIgPSAtZXJybm87CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKHN0cnVjdCBubG1zZ2hkciAqbmxoID0gKHN0cnVjdCBubG1zZ2hkciAqKWJ1ZjsKJiM0MzsJICAgICBOTE1TR19PSyhubGgsIHJldCk7IG5saCA9IE5MTVNHX05FWFQobmxoLCByZXQpKSB7CiYjNDM7CQlzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqbXNnID0gTkxNU0dfREFUQShubGgpOwomIzQzOwkJc3RydWN0IHJ0YXR0ciAqYXR0cjsKJiM0MzsJCWludCBsZW47CiYjNDM7CiYjNDM7CQlpZiAobmxoLSZndDtubG1zZ190eXBlID09IE5MTVNHX0VSUk9SKSB7CiYjNDM7CQkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJCWlmIChubGgtJmd0O25sbXNnX3R5cGUgPT0gTkxNU0dfRE9ORSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWxlbiA9IG5saC0mZ3Q7bmxtc2dfbGVuIC0gTkxNU0dfTEVOR1RIKHNpemVvZigqbXNnKSk7CiYjNDM7CQlmb3IgKGF0dHIgPSAoc3RydWN0IHJ0YXR0ciAqKShtc2cgJiM0MzsgMSk7IFJUQV9PSyhhdHRyLCBsZW4pOwomIzQzOwkJICAgICBhdHRyID0gUlRBX05FWFQoYXR0ciwgbGVuKSkgewomIzQzOwkJCXN0cnVjdCBpbmV0X2RpYWdfbWVtaW5mbyAqbWluZm87CiYjNDM7CiYjNDM7CQkJaWYgKGF0dHItJmd0O3J0YV90eXBlICE9IElORVRfRElBR19NRU1JTkZPKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQltaW5mbyA9IFJUQV9EQVRBKGF0dHIpOwomIzQzOwkJCSpmd2RfYWxsb2MgPSAoX19zMzIpbWluZm8tJmd0O2lkaWFnX2ZtZW07CiYjNDM7CQkJZXJyID0gMDsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzO291dDoKJiM0MzsJY2xvc2UoZGlhZ19mZCk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRlc3Qgc3RycGFyc2VyIFNLX1BBU1MgZGVsaXZlcnkgdG8gdGhlIHNhbWUgc29ja2V0LiAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zdHJwX3NlbGZfcGFzc19md2RfYWxsb2Modm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZXN0X3NvY2ttYXBfc3RycCAqc3RycCA9IE5VTEw7CiYjNDM7CWNoYXIgc25kWzQgKiAxMDI0XTsKJiM0MzsJaW50IGMgPSAtMSwgcCA9IC0xOwomIzQzOwlpbnQgZndkX2FsbG9jOwomIzQzOwlpbnQgc25kYnVmID0gc2l6ZW9mKHNuZCk7CiYjNDM7CWludCB6ZXJvID0gMDsKJiM0MzsJY2hhciByY3Y7CiYjNDM7CWludCBzZW50LCByZWN2ZDsKJiM0MzsJaW50IG1hcDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJbWVtc2V0KHNuZCwgMHhhNSwgc2l6ZW9mKHNuZCkpOwomIzQzOwomIzQzOwlzdHJwID0gdGVzdF9zb2NrbWFwX3N0cnBfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHN0cnAsICYjMzQ7dGVzdF9zb2NrbWFwX3N0cnBfX29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW1hcCA9IGJwZl9tYXBfX2ZkKHN0cnAtJmd0O21hcHMuc29ja19tYXApOwomIzQzOwllcnIgPSB4YnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChzdHJwLSZndDtwcm9ncy5wcm9nX3NrYl9wYXJzZXJfb25lKSwKJiM0MzsJCQkgICAgICAgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJZXJyID0geGJwZl9wcm9nX2F0dGFjaChicGZfcHJvZ3JhbV9fZmQoc3RycC0mZ3Q7cHJvZ3MucHJvZ19za2JfdmVyZGljdF9wYXNzKSwKJiM0MzsJCQkgICAgICAgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNULCAwKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gb3V0X2Rlc3Ryb3k7CiYjNDM7CiYjNDM7CWVyciA9IGNyZWF0ZV9wYWlyKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAmYW1wO2MsICZhbXA7cCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtjcmVhdGVfcGFpciYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2Rlc3Ryb3k7CiYjNDM7CiYjNDM7CWVyciA9IHhzZXRzb2Nrb3B0KGMsIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgJmFtcDtzbmRidWYsIHNpemVvZihzbmRidWYpKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gb3V0X2Rlc3Ryb3k7CiYjNDM7CiYjNDM7CWVyciA9IHhzZXRzb2Nrb3B0KHAsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgJmFtcDtzbmRidWYsIHNpemVvZihzbmRidWYpKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gb3V0X2Rlc3Ryb3k7CiYjNDM7CiYjNDM7CWVyciA9IHhicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcCwgJmFtcDt6ZXJvLCAmYW1wO3AsIEJQRl9OT0VYSVNUKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gb3V0X2Rlc3Ryb3k7CiYjNDM7CiYjNDM7CXNlbnQgPSBzZW5kKGMsIHNuZCwgc2l6ZW9mKHNuZCksIE1TR19ET05UV0FJVCk7CiYjNDM7CWlmICghQVNTRVJUX0VRKHNlbnQsIHNpemVvZihzbmQpLCAmIzM0O3NlbmQmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXN0cm95OwomIzQzOwomIzQzOwlyZWN2ZCA9IHJlY3ZfdGltZW91dChwLCAmYW1wO3Jjdiwgc2l6ZW9mKHJjdiksIE1TR19ET05UV0FJVCwKJiM0MzsJCQkgICAgIElPX1RJTUVPVVRfU0VDKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEocmVjdmQsIHNpemVvZihyY3YpLCAmIzM0O3JlY3ZfdGltZW91dCYjMzQ7KSB8fAomIzQzOwkgICAgIUFTU0VSVF9FUShyY3YsIHNuZFswXSwgJiMzNDtkYXRhIG1pc21hdGNoJiMzNDspKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJZXJyID0gc29ja21hcF9zdHJwX2dldF9md2RfYWxsb2MocCwgJmFtcDtmd2RfYWxsb2MpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c29ja21hcF9zdHJwX2dldF9md2RfYWxsb2MmIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfR0UoZndkX2FsbG9jLCAwLCAmIzM0O3NrX2ZvcndhcmRfYWxsb2MmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXN0cm95OwomIzQzO291dF9kZXN0cm95OgomIzQzOwl0ZXN0X3NvY2ttYXBfc3RycF9fZGVzdHJveShzdHJwKTsKJiM0MzsJaWYgKGMgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGMpOwomIzQzOwlpZiAocCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UocCk7CiYjNDM7fQomIzQzOwogdm9pZCB0ZXN0X3NvY2ttYXBfc3RycCh2b2lkKQogewogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7c29ja21hcCBzdHJwIHRjcCBwYXNzJiMzNDspKQpAQCAtNDgyLDQgJiM0Mzs2NTEsNiBAQCB2b2lkIHRlc3Rfc29ja21hcF9zdHJwKHZvaWQpCiAJCXRlc3Rfc29ja21hcF9zdHJwX2Rpc3BhdGNoX3BrdChBRl9JTkVULCBTT0NLX1NUUkVBTSk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzb2NrbWFwIHN0cnAgcGFyc2VyIHJlamVjdCBwa3QgbW9kJiMzNDspKQogCQl0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KCk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7c29ja21hcCBzdHJwIHNlbGYgcGFzcyBmd2QgYWxsb2MmIzM0OykpCiYjNDM7CQl0ZXN0X3NvY2ttYXBfc3RycF9zZWxmX3Bhc3NfZndkX2FsbG9jKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jCmluZGV4IGZlODhmYTZkNDBiYzUuLjY4MmU1M2Q0MDc1MWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jCkBAIC01MCw2ICYjNDM7NTAsMTIgQEAgaW50IHByb2dfc2tiX3BhcnNlcl9wYXJ0aWFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKIAlyZXR1cm4gMTA7CiB9CiAKJiM0MztTRUMoJiMzNDtza19za2Ivc3RyZWFtX3BhcnNlciYjMzQ7KQomIzQzO2ludCBwcm9nX3NrYl9wYXJzZXJfb25lKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3NrX3NrYi9zdHJlYW1fcGFyc2VyJiMzNDspCiBpbnQgcHJvZ19za2JfcGFyc2VyX3Jlc2l6ZShzdHJ1Y3QgX19za19idWZmICpza2IpCiB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyODEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2g6IFNvY2ttYXAvU0tNU0cgQ29yZSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgdG91Y2hpbmcgcHJldHR5IGNyaXRpY2FsIHN0dWZmIHdpdGhpbiB0aGUgQlBGIHNvY2ttYXAgaW5mcmFzdHJ1Y3R1cmUuIFdlIGhhdmUgbW9kaWZpY2F0aW9ucyB0byBgbmV0L2NvcmUvc2ttc2cuY2Agd2hpY2gsIGlmIEkgcmVtZW1iZXIgY29ycmVjdGx5LCBpcyBjb21waWxlZCB3aXRoIGBDT05GSUdfTkVUX1NPQ0tfTVNHYC4gVGhhdCYjMzk7cyB0aGUgaGVhcnQgb2YgdGhlIFNLTVNHIGZ1bmN0aW9uYWxpdHksIGFuZCB0aGF0IGFsd2F5cyBnZXRzIG15IGF0dGVudGlvbi4gV2UmIzM5O3JlIGFsc28gc2VlaW5nIGEgY29ycmVzcG9uZGluZyB0ZXN0IGFkZGVkIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY2AsIHdoaWNoIGlzIGdvb2Q7IHJlZ3Jlc3Npb24gdGVzdHMgYXJlIGNydWNpYWwsIGJ1dCBsZXQmIzM5O3Mgc2VlIGlmIGl0JiMzOTtzIHRob3JvdWdoLgoKU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgcmV3b3JraW5nIGhvdyBgc2tfZm9yd2FyZF9hbGxvY2AgaXMgaGFuZGxlZCB3aGVuIGEgYHN0cnBhcnNlcmAgU0tfUEFTUyBza2IgZ2V0cyBkZWxpdmVyZWQgdG8gdGhlICpzYW1lKiBzb2NrZXQuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSBhIHZlcnkgdHJpY2t5IGFyZWEgZnJvbSBhIGNvbmN1cnJlbmN5IGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IHBlcnNwZWN0aXZlLgoKSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGUgZXhhY3QgZnVuY3Rpb25zIGludm9sdmVkLiBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIHRvOiBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAsIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2dgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgLCBgc2tfcHNvY2tfaGFuZGxlX3NrYmAsIGBza19wc29ja19iYWNrbG9nYCwgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YC4gVGhhdCYjMzk7cyBhIGNvbXByZWhlbnNpdmUgdG91Y2ggb24gdGhlIGluZ3Jlc3MgcGF0aC4gTG9va3MgbGlrZSB3ZSYjMzk7cmUgaW50cm9kdWNpbmcgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduYCwgd2hpY2ggcHJvYmFibHkgbWVhbnMgd2UmIzM5O3JlIHRyeWluZyB0byBvcHRpbWl6ZSB0aGUgZGlyZWN0IGluZ3Jlc3MgcGF0aCB0byB0aGUgc29ja2V0LCBvciBzb21ldGhpbmcgbGlrZSB0aGF0LgoKR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzIGFuZCB0aGUgY2VudHJhbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMsIHRoaXMgaXMgZGVmaW5pdGVseSBrZXJuZWwgbG9naWMgdGhhdCYjMzk7cyB3b3J0aCBhICp2ZXJ5KiBjbG9zZSBsb29rIGFuZCBsaWtlbHkgZnV6emluZy4gSSYjMzk7bGwgbmVlZCB0byBnbyBiYWNrIGFuZCB2ZXJpZnkgdGhlIGtlcm5lbCBjb25maWdzIOKAkyBjb25maXJtIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBhbmQgcG9zc2libHkgb3RoZXIgcmVsYXRlZCBvbmVzLCBhbmQgdGhlbiBpdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaG93IGBza19mb3J3YXJkX2FsbG9jYCBpcyBhY3R1YWxseSBiZWluZyB1c2VkIGluIHRoaXMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza21zZy5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9NDM9b2JqLSQoQ09ORklHX0ZBSUxPVkVSKSAmIzQzOz0gZmFpbG92ZXIub1xubmV0L2NvcmUvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ1LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTg0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCoqCgpBbHJpZ2h0LCB0aGUgY29kZSYjMzk7cyBwb2ludGluZyB0byBhIHJlcXVpcmVtZW50IGZvciBgQ09ORklHX05FVF9TT0NLX01TR2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb25maWd1cmFiaWxpdHkgb2YgdGhpcyBvcHRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgZmVhdHVyZXMgb3IgY29uZmlndXJhdGlvbnMgdHJpZ2dlciB0aGlzIHNldHRpbmcuIElzIGl0IHNvbWV0aGluZyB0aGF0JiMzOTtzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYmFzZWQgb24gYW5vdGhlciBjaG9pY2UgaGlnaGVyIHVwIGluIHRoZSBjb25maWd1cmF0aW9uIGhpZXJhcmNoeSwgb3IgaXMgaXQgZGlyZWN0bHkgdXNlci1zZWxlY3RhYmxlPyBJcyB0aGVyZSBzb21lIGNvbnRleHQgSSYjMzk7bSBtaXNzaW5nPyBJIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgc2VlICp3aGF0KiBleGFjdGx5IHNlbGVjdHMgdGhpcyBvciBnaXZlcyBtZSB0aGUgYWJpbGl0eSB0byBkZWNpZGUuIFRoaXMgd2lsbCBoZWxwIG1lIGRpYWdub3NlIHdoeSB0aGlzIGlzIGJlaW5nIHJlcXVlc3RlZCBhbmQgd2hhdCBpbXBhY3QgaXQgd2lsbCBoYXZlIG9uIHRoZSBicm9hZGVyIHN5c3RlbS4gSSYjMzk7bGwgc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzLCBzdGFydGluZyB3aXRoIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlbiB0cmFjaW5nIGJhY2sgdG8gc2VlIHdoYXQgcGF0aHMgbGVhZCB0byBpdHMgYWN0aXZhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGlzIGRlcGVuZGVuY3kgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU09DS19NU0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz00NzU9Y29uZmlnIE5FVF9TRUxGVEVTVFNcbi0tXG5uZXQvS2NvbmZpZy00NzgtXG5uZXQvS2NvbmZpZzo0Nzk6Y29uZmlnIE5FVF9TT0NLX01TR1xubmV0L0tjb25maWctNDgwLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MjkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBhIEJvb2xlYW4gRmxhZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBzdHVtYmxlZCB1cG9uIGEgaGlkZGVuIGJvb2xlYW4gdmFyaWFibGUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGRlZXBlciBhbmQgdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gJiMzNDtIaWRkZW4mIzM0OyB1c3VhbGx5IG1lYW5zIHRoZXJlJiMzOTtzIGEgcmVhc29uIGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLCBhbmQgdGhhdCByZWFzb24gaXMgbGlrZWx5IGdvaW5nIHRvIHByb3ZpZGUgdGhlIGltcG9ydGFudCBpbmZvcm1hdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byB0cmFjZSBhbGwgdGhlIHBvdGVudGlhbCBjb2RlIHBhdGhzIHRoYXQgY291bGQgcG9zc2libHkgc2V0IG9yIG1vZGlmeSB0aGlzIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBhIGNoYW5nZSBpbiBpdHMgc3RhdGU7IHdoYXQgY29kZSBzZWxlY3RzIChvciBzZXRzKSBpdD8gS25vd2luZyAqd2hlbiogdGhpcyBmbGFnIGZsaXBzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBzeXN0ZW0mIzM5O3Mgb3ZlcmFsbCBsb2dpYy4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gaW5mZXIgdGhlIGxhcmdlciBkZXNpZ24gY29udGV4dCBhbmQgc2VlIHdoYXQgdGhpcyBib29sIGlzIG1lYW50IHRvIHNpZ25hbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTkVUX1NPQ0tfTVNHJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctMzMtXHRzZWxlY3QgQklOQVJZX1BSSU5URlxua2VybmVsL2JwZi9LY29uZmlnOjM0Olx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbmtlcm5lbC9icGYvS2NvbmZpZy0zNS1cdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuLS1cbm5ldC9LY29uZmlnPTM2MT1jb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcbi0tXG5uZXQvS2NvbmZpZy0zNjYtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L0tjb25maWc6MzY3Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L0tjb25maWctMzY4LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODUtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L2lwdjQvS2NvbmZpZzozODY6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2NC9LY29uZmlnLTM4Ny1cdHNlbGVjdCBYRlJNX0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTkzLVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9pcHY2L0tjb25maWc6OTQ6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2Ni9LY29uZmlnLTk1LVx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbi0tXG5uZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXG4tLVxubmV0L3Rscy9LY29uZmlnLTEwLVx0c2VsZWN0IENSWVBUT19HQ01cbm5ldC90bHMvS2NvbmZpZzoxMTpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC90bHMvS2NvbmZpZy0xMi1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMjQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoaXMgQlBGIFNlbGVjdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRoZSBzeXN0ZW0gaXMgdXNpbmcgYEJQRl9TWVNDQUxMYCBhbG9uZyB3aXRoIHRoZSBgTkVUYCBzZXR0aW5nIHRvIG1ha2UgYSBzZWxlY3Rpb24uIEZ1cnRoZXJtb3JlLCB0aGUgYEJQRl9TVFJFQU1fUEFSU0VSYCBhbHNvIGNvbWVzIGludG8gcGxheSBoZXJlLiBUaGUgcGF0Y2ggbWVudGlvbnMgYHN0cnBhcnNlcmAgYW5kIGBza2JfYnBmX3N0cnBhcnNlcmAsIHdoaWNoIGlzIGEgY2x1ZS4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYEJQRl9TVFJFQU1fUEFSU0VSYCBub3cgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBwcm9jZXNzLiBUaW1lIHRvIGRpZyBpbiBhIGJpdCBmdXJ0aGVyIG9uIHRoYXQgcGFydGljdWxhciBjb2RlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0zNTQ9Y29uZmlnIEJRTFxuLS1cbm5ldC9LY29uZmlnLTM2MC1cbm5ldC9LY29uZmlnOjM2MTpjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcbm5ldC9LY29uZmlnLTM2Mi1cdGJvb2wgXCYjMzQ7ZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBzdWdnZXN0aW5nIHRoZSBpbmNsdXNpb24gb2YgYEJQRl9TVFJFQU1fUEFSU0VSYCBhcyBhIHVzZXItc2VsZWN0YWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTWFrZXMgc2Vuc2U7IGZsZXhpYmlsaXR5IGlzIGtleSBpbiBCUEYuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGFjY291bnRlZCBmb3IuIEkmIzM5O2xsIGFsc28gYWRkIGluIGBCUEZfU1lTQ0FMTGAg4oCTIHRoYXQmIzM5O3MgYSBnaXZlbiBmb3IgQlBGIGZ1bmN0aW9uYWxpdHkuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byB0aGUgY29yZSBvZiB0aGlzLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHN5bWJvbHMgdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcuIFJpZ2h0LCBoZXJlIHRoZXkgYXJlOiBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAsIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2dgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgLCBgc2tfcHNvY2tfaGFuZGxlX3NrYmAsIGBza19wc29ja19iYWNrbG9nYCwgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YC4gVGhleSYjMzk7cmUgYWxsIHN0YXRpYywgd2hpY2ggZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKTXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBpbGx1bWluYXRlIGV4YWN0bHkgaG93IHRoZXNlIGNoYW5nZXMgYXJlIGJlaW5nIGludGVncmF0ZWQgYW5kIHdoYXQgaW1wYWN0IHRoZXkmIzM5O2xsIGhhdmUgb24gdGhlIGV4aXN0aW5nIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfYmFja2xvZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYz03MzI9c3RhdGljIHZvaWQgc2tfcHNvY2tfc2tiX3N0YXRlKHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4tLVxubmV0L2NvcmUvc2ttc2cuYy03NDMtXG5uZXQvY29yZS9za21zZy5jOjc0NDpzdGF0aWMgdm9pZCBza19wc29ja19iYWNrbG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9jb3JlL3NrbXNnLmMtNzQ1LXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTgzMT1zdHJ1Y3Qgc2tfcHNvY2sgKnNrX3Bzb2NrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbm9kZSlcbi0tXG5uZXQvY29yZS9za21zZy5jLTg2NS1cbm5ldC9jb3JlL3NrbXNnLmM6ODY2Olx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cHNvY2stXHUwMDNld29yaywgc2tfcHNvY2tfYmFja2xvZyk7XG5uZXQvY29yZS9za21zZy5jLTg2Ny1cdG11dGV4X2luaXQoXHUwMDI2cHNvY2stXHUwMDNld29ya19tdXRleCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDcyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqUG9uZGVyaW5nIFNvY2tldCBGaWx0ZXJpbmcgYW5kIFdvcmtxdWV1ZXMqKgoKUmlnaHQsIHNvIGBza19wc29ja19iYWNrbG9nYC4uLiB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSB3b3JrcXVldWUgY2FsbGJhY2ssIGlzbiYjMzk7dCBpdD8gT2theSwgZ290IGl0LiBJdCYjMzk7cyBoYW5kbGluZyBiYWNrbG9nZ2VkIHBhY2tldCBzb2NrZXRzLiBOb3csIHdoYXQmIzM5O3MgYnVnZ2luZyBtZSBpcy4uLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgZnVuY3Rpb25zIGluIHRoYXQgYXJlYS4gV2hlcmUgZG9lcyB0aGlzIHdvcmtxdWV1ZSBmaXQgd2l0aCBvdGhlciBmaWx0ZXJpbmcgbWVjaGFuaXNtcz8gTGV0IG1lIHNlZS4uLiBJIHdvbmRlciBob3cgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGZpZ3VyZXMgaW50byBhbGwgdGhpcy4gSXMgaXQgY2FsbGVkIGJlZm9yZSwgYWZ0ZXIsIG9yIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnRseSBvZiB0aGUgd29ya3F1ZXVlIGNhbGxiYWNrPyBEb2VzIGl0IGluZmx1ZW5jZSB3aGF0IGdldHMgZW5xdWV1ZWQ/IElzIGl0IHRoZSB1bHRpbWF0ZSBkZWNpc2lvbi1tYWtlciwgb3IganVzdCBhIHBhcnQgb2YgdGhlIHByb2Nlc3M/IEkgc2hvdWxkIHJlYWxseSBtYWtlIHN1cmUgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19wc29ja192ZXJkaWN0X2FwcGx5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTEwMzk9c3RhdGljIGludCBza19wc29ja19za2JfcmVkaXJlY3Qoc3RydWN0IHNrX3Bzb2NrICpmcm9tLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTA3Ni1cbm5ldC9jb3JlL3NrbXNnLmM6MTA3NzpzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3NrbXNnLmMtMTA3OC1cdFx0XHRcdCAgaW50IHZlcmRpY3QpXG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMTYwPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfcmVhZChzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTE4My1cdH1cbm5ldC9jb3JlL3NrbXNnLmM6MTE4NDpcdHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkocHNvY2ssIHNrYiwgcmV0KTtcbm5ldC9jb3JlL3NrbXNnLmMtMTE4NS1vdXQ6XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMjgzPXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTEzMDYtXHR9XG5uZXQvY29yZS9za21zZy5jOjEzMDc6XHRyZXQgPSBza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XG5uZXQvY29yZS9za21zZy5jLTEzMDgtXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY5MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkV4YW1pbmluZyB0aGUgUFNPQ0sgVmVyZGljdCBBcHBsaWNhdGlvbiBQYXRoKioKClJpZ2h0LCBzbyBgc2tfcHNvY2tfc3RycF9yZWFkYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAgYm90aCBzZWVtIHRvIGhpbmdlIG9uIGBza19wc29ja192ZXJkaWN0X2FwcGx5YC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIHBvdGVudGlhbGx5IGNyaXRpY2FsLCBiZWNhdXNlIHRoYXQgbWVhbnMgYWxsIHRyYWZmaWMgdGhhdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkIGJ5IHRoZSBwcm9jZXNzIGxpa2VseSBwYXNzZXMgdGhyb3VnaCB0aGF0IGZ1bmN0aW9uIGF0IHNvbWUgcG9pbnQuIEl04oCZcyB0aGUgY2VudHJhbCBwb2ludCB3aGVyZSB0aGUgZGVjaXNpb25zIGFib3V0IHBhY2tldCBoYW5kbGluZyBhcmUgbWFkZSBpbiB0aGlzIFBTT0NLIChwYWNrZXQgc29ja2V0KSBjb250ZXh0LCBvciBwZXJoYXBzIHdoZXJlIHRoZXkgYXJlICphcHBsaWVkKiBhdCBsZWFzdC4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGJldHRlci4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBoaWVyYXJjaHkg4oCTIHdobyAqZWxzZSogaXMgdXNpbmcgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCBhbmQgaWYgaXQmIzM5O3MgZXhwb3J0ZWQsIHRoZW4gd2hlcmUgYXJlIHRob3NlIGNhbGxzIG9yaWdpbmF0aW5nIGZyb20/IElzIGl0IHNvbGVseSB3aXRoaW4gdGhlIGtlcm5lbCBzcGFjZSwgb3IgaXMgdGhlcmUgYSB1c2VyIHNwYWNlIGludGVyYWN0aW9uIGludm9sdmVkPyBUaGF0IGxldmVsIG9mIGRldGFpbCBtYXR0ZXJzICphIGxvdCogd2hlbiBkZWFsaW5nIHdpdGggbmV0d29ya2luZyBhbmQgc2VjdXJpdHksIGFuZCBpdCBpbmZvcm1zIHdoZXRoZXIgdGhpcyB3b3VsZCBiZSBzb21ldGhpbmcgdGhhdCBuZWVkcyBhdHRlbnRpb24uIEFyZSB0aGVyZSBhbnkgb3RoZXIgcGF0aHMgdG8gaXQsIGFuZCBhcmUgdGhlcmUgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIGNvbnNpZGVyPyBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyBwb2xpY3kgZGVjaXNpb25zIGFyZSBtYWRlIGZvciB0aGVzZSBwYWNrZXQgc29ja2V0cyBhbmQgc2VlIHdoYXQgYXZlbnVlcyBleGlzdCB0byBwb3RlbnRpYWxseSBpbmZsdWVuY2Ugb3IgbW9kaWZ5IHRoYXQgcHJvY2VzcywgaWYgdGhlIG5lZWQgYXJpc2VzLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfc3RycF9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTExNDI9c3RhdGljIHZvaWQgc2tfcHNvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTE1OS0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXG5uZXQvY29yZS9za21zZy5jOjExNjA6c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9za21zZy5jLTExNjEte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTE4OC1cbm5ldC9jb3JlL3NrbXNnLmM6MTE4OTpzdGF0aWMgaW50IHNrX3Bzb2NrX3N0cnBfcmVhZF9kb25lKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIGludCBlcnIpXG5uZXQvY29yZS9za21zZy5jLTExOTAte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTIyOD1pbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyMzItXHRzdGF0aWMgY29uc3Qgc3RydWN0IHN0cnBfY2FsbGJhY2tzIGNiID0ge1xubmV0L2NvcmUvc2ttc2cuYzoxMjMzOlx0XHQucmN2X21zZ1x0PSBza19wc29ja19zdHJwX3JlYWQsXG5uZXQvY29yZS9za21zZy5jOjEyMzQ6XHRcdC5yZWFkX3NvY2tfZG9uZVx0PSBza19wc29ja19zdHJwX3JlYWRfZG9uZSxcbm5ldC9jb3JlL3NrbXNnLmMtMTIzNS1cdFx0LnBhcnNlX21zZ1x0PSBza19wc29ja19zdHJwX3BhcnNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ1MQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNvbnNpZGVyaW5nIGBza19wc29ja19pbml0X3N0cnBgJiMzOTtzIFNjb3BlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgc2tfcHNvY2tfaW5pdF9zdHJwYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzOiBpcyB0aGlzIGZ1bmN0aW9uIGV4cG9zZWQsIG1lYW5pbmcgaXMgaXQgZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYz8gSXMgaXQgbWVhbnQgdG8gYmUgdXNlZCBleHRlcm5hbGx5LCBvciBpcyBpdCBpbnRlcm5hbCB0byBhIHNwZWNpZmljIG1vZHVsZSBvciBjb21wb25lbnQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGl0cyB2aXNpYmlsaXR5LiBLbm93aW5nIHRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGluZm9ybXMgaG93IEkgY2FuIGludGVyYWN0IHdpdGggdGhlIGZ1bmN0aW9uLCBpZiBhdCBhbGwsIGluIG15IG93biB3b3JrLiBBIG5vbi1zdGF0aWMgZnVuY3Rpb24gaW1wbGllcyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLCBhbmQgSSBjYW4gY2FsbCBpdCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEEgc3RhdGljIG9uZSwgaG93ZXZlciwgaXMgbGlrZWx5IG9ubHkgbWVhbnQgZm9yIHVzZSB3aXRoaW4gaXRzIGRlZmluaW5nIHRyYW5zbGF0aW9uIHVuaXQuIFRoYXQgbWFrZXMgYSBodWdlIGRpZmZlcmVuY2UgaW4gaG93IEkgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfaW5pdF9zdHJwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2ttc2cuaD00Mzc9dm9pZCBza19wc29ja19zdG9wKHN0cnVjdCBza19wc29jayAqcHNvY2spO1xuLS1cbmluY2x1ZGUvbGludXgvc2ttc2cuaC00MzktI2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxuaW5jbHVkZS9saW51eC9za21zZy5oOjQ0MDppbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayk7XG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDQxLXZvaWQgc2tfcHNvY2tfc3RhcnRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spO1xuaW5jbHVkZS9saW51eC9za21zZy5oPTQ0Mj12b2lkIHNrX3Bzb2NrX3N0b3Bfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spO1xuaW5jbHVkZS9saW51eC9za21zZy5oLTQ0My0jZWxzZVxuaW5jbHVkZS9saW51eC9za21zZy5oOjQ0NDpzdGF0aWMgaW5saW5lIGludCBza19wc29ja19pbml0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuaW5jbHVkZS9saW51eC9za21zZy5oLTQ0NS17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMjEyPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMjI3LVxubmV0L2NvcmUvc2ttc2cuYzoxMjI4OmludCBza19wc29ja19pbml0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy0xMjI5LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTIxNz1zdGF0aWMgaW50IHNvY2tfbWFwX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzA2LVx0XHRpZiAoc2tfaXNfdGNwKHNrKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzA3Olx0XHRcdHJldCA9IHNrX3Bzb2NrX2luaXRfc3RycChzaywgcHNvY2spO1xubmV0L2NvcmUvc29ja19tYXAuYy0zMDgtXHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNhbGxiYWNrIEludmVzdGlnYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gTXkgbWVudGFsIG1vZGVsIGhlcmUgaXMgdGhhdCBgc2tfcHNvY2tfc3RycF9yZWFkYCBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBiZSB1c2VkIHdpdGggdGhlIHN0cnBhcnNlci4gTWFrZXMgc2Vuc2UuIEl0JiMzOTtzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgcmVhZGluZyBwYXJ0IG9mIHBhcnNpbmcgZGF0YSBpbnRvIGEgc3RyaW5nIGZvcm1hdCwgdXNpbmcgdGhpcyBzdHJwYXJzZXIuIEJ1dCB3aGF0IGFib3V0IGBza19wc29ja192ZXJkaWN0X3JlY3ZgPyBUaGF0IG9uZSYjMzk7cyBuYWdnaW5nIGF0IG1lIGEgYml0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtLiBJcyBpdCBhbHNvIHJlbGF0ZWQgdG8gZGF0YSByZWNlcHRpb24sIGJ1dCBwZXJoYXBzIGF0IGEgaGlnaGVyIGxldmVsLCBhZnRlciB0aGUgaW5pdGlhbCBzdHJpbmcgcGFyc2luZz8gSXMgaXQgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzZWN1cml0eSB2ZXJkaWN0cyBiYXNlZCBvbiB0aGUgcmVjZWl2ZWQgZGF0YSwgb3IgaXMgaXQgcmVsYXRlZCB0byByZWNlaXZpbmcgdGhlIHJhdyB2ZXJkaWN0IGluZm9ybWF0aW9uPyBUaW1lIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBsb29rIGludG8gdGhlIGJyb2FkZXIgY29udGV4dCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSB0d28gZnVuY3Rpb25zIGludGVyYWN0IGFuZCBmaXQgdG9nZXRoZXIgaW4gdGhlIGFyY2hpdGVjdHVyZS4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAgdGFrZXMgYWN0aW9uIG9uIHRoZSBpbmZvcm1hdGlvbiByZWNlaXZlZCBieSBgc2tfcHNvY2tfc3RycF9yZWFkYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3csIGFuZCBob3cgaXQgaW5mb3JtcyB0aGUgb3ZlcmFsbCBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19wc29ja192ZXJkaWN0X3JlY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmM9MTI3OD1zdGF0aWMgdm9pZCBza19wc29ja19kb25lX3N0cnAoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyODItXG5uZXQvY29yZS9za21zZy5jOjEyODM6c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvc2ttc2cuYy0xMjg0LXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTEzMTU9c3RhdGljIHZvaWQgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTEzMzEtXG5uZXQvY29yZS9za21zZy5jOjEzMzI6XHRjb3BpZWQgPSBvcHMtXHUwMDNlcmVhZF9za2Ioc2ssIHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdik7XG5uZXQvY29yZS9za21zZy5jLTEzMzMtXHRpZiAoY29waWVkIFx1MDAzZT0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcxNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgKioKCk9rYXksIHNvIGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgLiBJdCYjMzk7cyBhIGNhbGxiYWNrLCBhbmQgYSBwcmV0dHkgc3BlY2lmaWMgb25lIGF0IHRoYXQuIE15IGZpcnN0IHRob3VnaHQgaXM6IHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqPyBJIG5lZWQgdG8gdHJhY2UgaXRzIGNvbm5lY3Rpb25zLiBJIHdhbnQgdG8gc2VlIHdoaWNoIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIHRyaWdnZXJpbmcgaXQgYW5kIHdoYXQga2luZCBvZiBkYXRhIG9yIGFjdGlvbnMgYXJlIGJlaW5nIHByb2Nlc3NlZCB3aGVuIGl0JiMzOTtzIGNhbGxlZC4gR290dGEgdW5kZXJzdGFuZCB0aGUgY29udGV4dCB0byBncmFzcCBpdHMgdHJ1ZSBwdXJwb3NlIGFuZCBmdW5jdGlvbi4gVGltZSB0byBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmM9MTI4Mz1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMzE0LVxubmV0L2NvcmUvc2ttc2cuYzoxMzE1OnN0YXRpYyB2b2lkIHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9za21zZy5jLTEzMTYte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTM0Mj12b2lkIHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTM0Ny1cdHBzb2NrLVx1MDAzZXNhdmVkX2RhdGFfcmVhZHkgPSBzay1cdTAwM2Vza19kYXRhX3JlYWR5O1xubmV0L2NvcmUvc2ttc2cuYzoxMzQ4Olx0V1JJVEVfT05DRShzay1cdTAwM2Vza19kYXRhX3JlYWR5LCBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkpO1xubmV0L2NvcmUvc2ttc2cuYy0xMzQ5LVx0V1JJVEVfT05DRShzay1cdTAwM2Vza193cml0ZV9zcGFjZSwgc2tfcHNvY2tfd3JpdGVfc3BhY2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE4NQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgIEV4cG9ydCoqCgpPa2F5LCBzbyBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAgaXMgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgdGhlIGtleS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCYjMzk7cyB0b3VjaGluZyBpdD8gV2hhdCBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSByZWx5aW5nIG9uIHRoaXMgZnVuY3Rpb25hbGl0eT8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgcGljdHVyZS4gTXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjYWxsIHNpdGVzIHRvIGZ1bGx5IGdyb2sgaXRzIHB1cnBvc2UgYW5kIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEkmIzM5O20gbG9va2luZyBmb3Igd2hlcmUgdGhpcyBmdW5jdGlvbiBob29rcyBpbnRvLCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGl0cyBleGVjdXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za21zZy5oPTQ1Mz1zdGF0aWMgaW5saW5lIHZvaWQgc2tfcHNvY2tfc3RvcF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbi0tXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDU3LVxuaW5jbHVkZS9saW51eC9za21zZy5oOjQ1ODp2b2lkIHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcbmluY2x1ZGUvbGludXgvc2ttc2cuaC00NTktdm9pZCBza19wc29ja19zdG9wX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcbi0tXG5uZXQvY29yZS9za21zZy5jPTEzMTU9c3RhdGljIHZvaWQgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTEzNDEtXG5uZXQvY29yZS9za21zZy5jOjEzNDI6dm9pZCBza19wc29ja19zdGFydF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbm5ldC9jb3JlL3NrbXNnLmMtMTM0My17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0yMTc9c3RhdGljIGludCBzb2NrX21hcF9saW5rKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTMxNi1cdH0gZWxzZSBpZiAoIXN0cmVhbV9wYXJzZXIgXHUwMDI2XHUwMDI2IHN0cmVhbV92ZXJkaWN0IFx1MDAyNlx1MDAyNiAhcHNvY2stXHUwMDNlc2F2ZWRfZGF0YV9yZWFkeSkge1xubmV0L2NvcmUvc29ja19tYXAuYzozMTc6XHRcdHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3Qoc2sscHNvY2spO1xubmV0L2NvcmUvc29ja19tYXAuYy0zMTgtXHR9IGVsc2UgaWYgKCFzdHJlYW1fdmVyZGljdCBcdTAwMjZcdTAwMjYgc2tiX3ZlcmRpY3QgXHUwMDI2XHUwMDI2ICFwc29jay1cdTAwM2VzYXZlZF9kYXRhX3JlYWR5KSB7XG5uZXQvY29yZS9zb2NrX21hcC5jOjMxOTpcdFx0c2tfcHNvY2tfc3RhcnRfdmVyZGljdChzaywgcHNvY2spO1xubmV0L2NvcmUvc29ja19tYXAuYy0zMjAtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODMxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFNvY2tldCBNYXAgTGlua2luZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIEJQRiBzb2NrZXQgbWFwIGxpbmtpbmcuIFRoZSBlbnRyeSBwb2ludCwgYXMgSSBzZWUgaXQsIGlzIGBzb2NrX21hcF9saW5rYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gdGhlIEJQRiBzeXNjYWxsLiBUaGUgbWFpbiBmdW5jdGlvbnMgbW9kaWZpZWQgaW4gdGhpcyBwYXRjaCBhcmUgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nYCwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCwgYHNrX3Bzb2NrX2hhbmRsZV9za2JgLCBgc2tfcHNvY2tfYmFja2xvZ2AsIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIExldCYjMzk7cyBzZWUsIHdlIGhhdmUgYHNrX3Bzb2NrX2JhY2tsb2dgIChhIHdvcmtxdWV1ZSBjYWxsYmFjayksIGBza19wc29ja19zdHJwX3JlYWRgIChhIHN0cmluZyBwYXJzZXIgY2FsbGJhY2spLCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCAoYSBgcmVhZF9za2JgIGNhbGxiYWNrKSwgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCB3aGljaCBpcyBzdGF0aWMgYnV0IGNhbGxlZCBieSB0aGUgcHJldmlvdXMgdHdvLgoKSG1tLCB3YWl0IGEgbWludXRlLCBhcmUgdGhvc2UgYWxsIHN0YXRpYz8gWWVzLCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAsIGBza19wc29ja19zdHJwX3JlYWRgLCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCwgYW5kIGBza19wc29ja19iYWNrbG9nYCBhbGwgc2VlbSB0byBiZS4gR2l2ZW4gdGhlIHBhdGNoIG1vZGlmaWVzIGBza19wc29ja19iYWNrbG9nYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCBteSBuZXh0IHN0ZXAgd291bGQgYmUgdG8gaWRlbnRpZnkgaWYgdGhlcmUgYXJlIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIHRoYXQgZWl0aGVyIGNhbGwgb3IgZGlyZWN0bHkgcmVseSBvbiB0aG9zZSBtb2RpZmllZCBmdW5jdGlvbnMuCgpgc2tfcHNvY2tfYmFja2xvZ2AgaXMgY2FsbGVkIGJ5IHRoZSB3b3JrcXVldWUgaW5mcmFzdHJ1Y3R1cmUsIHNvIHRoZSB0cmlnZ2VyaW5nIG1lY2hhbmlzbSBpcyB0aGUgd29ya3F1ZXVlLiBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgaXMgY2FsbGVkIGJ5IGBza19wc29ja19zdHJwX3JlYWRgIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YC4gQW5kIHRob3NlIGFyZSwgcmVzcGVjdGl2ZWx5LCBhIGNhbGxiYWNrIGZvciBgc3RycF9jYWxsYmFja3MucmN2X21zZ2AgYW5kIGBvcHMtJmd0O3JlYWRfc2tiYC4KCk9rYXksIHRoZSBpc3N1ZSBpcyB0aGF0IHRoZXkgYXJlIGFsbCBzdGF0aWMsIGFuZCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBTbywgdGhlIHN0YXRpY25lc3MgaXMgYSBwcm9ibGVtIGdpdmVuIHRoZSBpbnN0cnVjdGlvbnMuIEkgbmVlZCB0byBmaW5kIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbmRpcmVjdGx5IGFmZmVjdGVkLiBJdCBsb29rcyBsaWtlIGBzb2NrX21hcF9saW5rYCAqaXMqIHN0YXRpYy4gV2hhdCBhYm91dCBgc29ja19tYXBfdXBkYXRlX2VsZW1gPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX21hcF91cGRhdGVfZWxlbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYz01NTU9c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01NTctXG5uZXQvY29yZS9zb2NrX21hcC5jOjU1ODppbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG5uZXQvY29yZS9zb2NrX21hcC5jLTU1OS1cdFx0XHQgICAgIHU2NCBmbGFncylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTU5OC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTk5OnN0YXRpYyBsb25nIHNvY2tfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjAwLVx0XHRcdFx0IHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz04MzE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHNvY2tfbWFwX29wcyA9IHtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTgzNi1cdC5tYXBfbG9va3VwX2VsZW1fc3lzX29ubHkgPSBzb2NrX21hcF9sb29rdXBfc3lzLFxubmV0L2NvcmUvc29ja19tYXAuYzo4Mzc6XHQubWFwX3VwZGF0ZV9lbGVtXHQ9IHNvY2tfbWFwX3VwZGF0ZV9lbGVtLFxubmV0L2NvcmUvc29ja19tYXAuYy04MzgtXHQubWFwX2RlbGV0ZV9lbGVtXHQ9IHNvY2tfbWFwX2RlbGV0ZV9lbGVtLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTQ0Nz1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19oYXNoX29wcyA9IHtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NTEtXHQubWFwX2dldF9uZXh0X2tleVx0PSBzb2NrX2hhc2hfZ2V0X25leHRfa2V5LFxubmV0L2NvcmUvc29ja19tYXAuYzoxNDUyOlx0Lm1hcF91cGRhdGVfZWxlbVx0PSBzb2NrX21hcF91cGRhdGVfZWxlbSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ1My1cdC5tYXBfZGVsZXRlX2VsZW1cdD0gc29ja19oYXNoX2RlbGV0ZV9lbGVtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM4NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERhdGEgRmxvdyBvZiBQYWNrZXQgU29ja2V0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgZGF0YSBtb3ZlcyB0aHJvdWdoIHRoZXNlIHBhY2tldCBzb2NrZXRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBhdCBmdW5jdGlvbnMgbGlrZSBgc2tfcHNvY2tfaW5pdF9zdHJwYCBhbmQgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgLCBiZWNhdXNlIHRoZXkmIzM5O3JlIG5vdCBkZWNsYXJlZCBhcyBzdGF0aWMuIEJ1dCwgd2FpdCwgdGhvc2UgYXJlIGp1c3QgYWJvdXQgKmluaXRpYWxpemluZyogdGhpbmdzIGFuZCBzZXR0aW5nIHVwIGNhbGxiYWNrcy4gVGhlIGFjdHVhbCB2ZXJkaWN0LCB0aGUgYWN0dWFsIHByb2Nlc3Npbmcgb2YgZGF0YSwgdGhhdCBkb2VzbiYjMzk7dCBoYXBwZW4gdW50aWwgZGF0YSBpcyByZWNlaXZlZCwgcmlnaHQ/CgpEYXRhIHJlY2VwdGlvbi4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IHRyaWdnZXJzIGBza19kYXRhX3JlYWR5YCwgd2hpY2ggdGhlbiBwb2ludHMgdG8gZWl0aGVyIGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgIG9yIGBzdHJwX2RhdGFfcmVhZHlgLiBOb3csIEkgcmVjYWxsIHRoYXQgYHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeWAgaXMgc3RhdGljLCB3aGljaCBsaW1pdHMgaXRzIHNjb3BlLiAgT2theS4gV2hhdCBhYm91dCBgc3RycF9kYXRhX3JlYWR5YD8gTGV0IG1lIHNlZeKApiB5ZXAsIHRoYXQmIzM5O3MgaW4gYG5ldC9zdHJwYXJzZXIvc3RycGFyc2VyLmNgLCBhcyBJIGV4cGVjdGVkLgoKQWxyaWdodCwgc28gdGhlIGNvcmUgZGF0YSBmbG93IGlzIGxpa2VseSBpbml0aWF0ZWQgYnkgc29tZSBraW5kIG9mIGV4dGVybmFsIGV2ZW50IGNhdXNpbmcgZGF0YSB0byBiZSBwbGFjZWQgaW4gYHNrX2RhdGFfcmVhZHlgLiBUaW1lIHRvIHNoaWZ0IGZvY3VzLiBMZXQmIzM5O3Mgc2hpZnQgb3VyIGdhemUgdG8gYG5ldC9jb3JlL3NrbXNnLmNgIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQgd2l0aCBoYW5kbGluZyB0aGUgZGF0YSBwYXRoIG9yIHJlbGF0ZWQgcHJvY2Vzc2luZy4gVGhhdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpdLipza19wc29jay4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTUyMj1zdGF0aWMgc3RydWN0IHNrX21zZyAqYWxsb2Nfc2tfbXNnKGdmcF90IGdmcClcbi0tXG5uZXQvY29yZS9za21zZy5jLTUzMi1cbm5ldC9jb3JlL3NrbXNnLmM6NTMzOnN0YXRpYyBzdHJ1Y3Qgc2tfbXNnICpza19wc29ja19jcmVhdGVfaW5ncmVzc19tc2coc3RydWN0IHNvY2sgKnNrLFxubmV0L2NvcmUvc2ttc2cuYy01MzQtXHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNTQ0LVxubmV0L2NvcmUvc2ttc2cuYzo1NDU6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9za21zZy5jLTU0Ni1cdFx0XHRcdFx0dTMyIG9mZiwgdTMyIGxlbixcbi0tXG5uZXQvY29yZS9za21zZy5jLTU4Ny1cbm5ldC9jb3JlL3NrbXNnLmM6NTg4OnN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2ttc2cuYy01ODktXHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsXG5uZXQvY29yZS9za21zZy5jLTU5MC1cdFx0XHRcdCAgICAgYm9vbCBzZXR0bGVfZndkX2FsbG9jKTtcbm5ldC9jb3JlL3NrbXNnLmM6NTkxOnN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHN0cnVjdCBza19wc29jayAqcHNvY2ssXG5uZXQvY29yZS9za21zZy5jLTU5Mi1cdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNTk1LVxubmV0L2NvcmUvc2ttc2cuYzo1OTY6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2ttc2cuYy01OTctXHRcdFx0XHR1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHNldHRsZV9md2RfYWxsb2MpXG4tLVxubmV0L2NvcmUvc2ttc2cuYy02MjMtXG5uZXQvY29yZS9za21zZy5jOjYyNDpzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduKHN0cnVjdCBzb2NrICpzayxcbm5ldC9jb3JlL3NrbXNnLmMtNjI1LVx0XHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za21zZy5jLTY0OS0gKi9cbm5ldC9jb3JlL3NrbXNnLmM6NjUwOnN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2ttc2cuYy02NTEtXHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsXG4tLVxubmV0L2NvcmUvc2ttc2cuYy02ODAtXG5uZXQvY29yZS9za21zZy5jOjY4MTpzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYmFja2xvZyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxubmV0L2NvcmUvc2ttc2cuYy02ODItXHRcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za21zZy5jLTcxNC1cbm5ldC9jb3JlL3NrbXNnLmM6NzE1OnN0YXRpYyBpbnQgc2tfcHNvY2tfaGFuZGxlX3NrYihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2ttc2cuYy03MTYtXHRcdFx0ICAgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgaW5ncmVzcyxcbi0tXG5uZXQvY29yZS9za21zZy5jLTczMS1cbm5ldC9jb3JlL3NrbXNnLmM6NzMyOnN0YXRpYyB2b2lkIHNrX3Bzb2NrX3NrYl9zdGF0ZShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxubmV0L2NvcmUvc2ttc2cuYy03MzMtXHRcdFx0ICAgICAgIHN0cnVjdCBza19wc29ja193b3JrX3N0YXRlICpzdGF0ZSxcbi0tXG5uZXQvY29yZS9za21zZy5jLTc0My1cbm5ldC9jb3JlL3NrbXNnLmM6NzQ0OnN0YXRpYyB2b2lkIHNrX3Bzb2NrX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L2NvcmUvc2ttc2cuYy03NDUte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtODMwLVxubmV0L2NvcmUvc2ttc2cuYzo4MzE6c3RydWN0IHNrX3Bzb2NrICpza19wc29ja19pbml0KHN0cnVjdCBzb2NrICpzaywgaW50IG5vZGUpXG5uZXQvY29yZS9za21zZy5jLTgzMi17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz04ODQ9RVhQT1JUX1NZTUJPTF9HUEwoc2tfcHNvY2tfaW5pdCk7XG5uZXQvY29yZS9za21zZy5jLTg4NS1cbm5ldC9jb3JlL3NrbXNnLmM6ODg2OnN0cnVjdCBza19wc29ja19saW5rICpza19wc29ja19saW5rX3BvcChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy04ODcte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtODk4LVxubmV0L2NvcmUvc2ttc2cuYzo4OTk6c3RhdGljIHZvaWQgX19za19wc29ja19wdXJnZV9pbmdyZXNzX21zZyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy05MDAte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtOTEzLVxubmV0L2NvcmUvc2ttc2cuYzo5MTQ6c3RhdGljIHZvaWQgX19za19wc29ja196YXBfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy05MTUte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtOTI0LVxubmV0L2NvcmUvc2ttc2cuYzo5MjU6c3RhdGljIHZvaWQgc2tfcHNvY2tfbGlua19kZXN0cm95KHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTkyNi17XG4tLVxubmV0L2NvcmUvc2ttc2cuYy05MzQtXG5uZXQvY29yZS9za21zZy5jOjkzNTp2b2lkIHNrX3Bzb2NrX3N0b3Aoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbm5ldC9jb3JlL3NrbXNnLmMtOTM2LXtcbi0tXG5uZXQvY29yZS9za21zZy5jLTk0Mi1cbm5ldC9jb3JlL3NrbXNnLmM6OTQzOnN0YXRpYyB2b2lkIHNrX3Bzb2NrX2RvbmVfc3RycChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcbm5ldC9jb3JlL3NrbXNnLmMtOTQ0LVxubmV0L2NvcmUvc2ttc2cuYzo5NDU6c3RhdGljIHZvaWQgc2tfcHNvY2tfZGVzdHJveShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvY29yZS9za21zZy5jLTk0Ni17XG4tLVxubmV0L2NvcmUvc2ttc2cuYy05NjktXG5uZXQvY29yZS9za21zZy5jOjk3MDp2b2lkIHNrX3Bzb2NrX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy05NzEte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9OTg2PUVYUE9SVF9TWU1CT0xfR1BMKHNrX3Bzb2NrX2Ryb3ApO1xubmV0L2NvcmUvc2ttc2cuYy05ODctXG5uZXQvY29yZS9za21zZy5jOjk4ODpzdGF0aWMgaW50IHNrX3Bzb2NrX21hcF92ZXJkKGludCB2ZXJkaWN0LCBib29sIHJlZGlyKVxubmV0L2NvcmUvc2ttc2cuYy05ODkte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTAwMC1cbm5ldC9jb3JlL3NrbXNnLmM6MTAwMTppbnQgc2tfcHNvY2tfbXNnX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxubmV0L2NvcmUvc2ttc2cuYy0xMDAyLVx0XHRcdCBzdHJ1Y3Qgc2tfbXNnICptc2cpXG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMDM3PUVYUE9SVF9TWU1CT0xfR1BMKHNrX3Bzb2NrX21zZ192ZXJkaWN0KTtcbm5ldC9jb3JlL3NrbXNnLmMtMTAzOC1cbm5ldC9jb3JlL3NrbXNnLmM6MTAzOTpzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChzdHJ1Y3Qgc2tfcHNvY2sgKmZyb20sIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9za21zZy5jLTEwNDAte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTA3Ni1cbm5ldC9jb3JlL3NrbXNnLmM6MTA3NzpzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3NrbXNnLmMtMTA3OC1cdFx0XHRcdCAgaW50IHZlcmRpY3QpXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMTQxLVxubmV0L2NvcmUvc2ttc2cuYzoxMTQyOnN0YXRpYyB2b2lkIHNrX3Bzb2NrX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL3NrbXNnLmMtMTE0My17XG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMTU5LSNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcbm5ldC9jb3JlL3NrbXNnLmM6MTE2MDpzdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL3NrbXNnLmMtMTE2MS17XG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMTg4LVxubmV0L2NvcmUvc2ttc2cuYzoxMTg5OnN0YXRpYyBpbnQgc2tfcHNvY2tfc3RycF9yZWFkX2RvbmUoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgaW50IGVycilcbm5ldC9jb3JlL3NrbXNnLmMtMTE5MC17XG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMTkzLVxubmV0L2NvcmUvc2ttc2cuYzoxMTk0OnN0YXRpYyBpbnQgc2tfcHNvY2tfc3RycF9wYXJzZShzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvc2ttc2cuYy0xMTk1LXtcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyMTEtLyogQ2FsbGVkIHdpdGggc29ja2V0IGxvY2sgaGVsZC4gKi9cbm5ldC9jb3JlL3NrbXNnLmM6MTIxMjpzdGF0aWMgdm9pZCBza19wc29ja19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc2ttc2cuYy0xMjEzLXtcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyMjctXG5uZXQvY29yZS9za21zZy5jOjEyMjg6aW50IHNrX3Bzb2NrX2luaXRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTEyMjkte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTI0OC1cbm5ldC9jb3JlL3NrbXNnLmM6MTI0OTp2b2lkIHNrX3Bzb2NrX3N0YXJ0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy0xMjUwLXtcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyNTgtXG5uZXQvY29yZS9za21zZy5jOjEyNTk6dm9pZCBza19wc29ja19zdG9wX3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy0xMjYwLXtcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyNzAtXG5uZXQvY29yZS9za21zZy5jOjEyNzE6c3RhdGljIHZvaWQgc2tfcHNvY2tfZG9uZV9zdHJwKHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTEyNzIte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTI3Ny0jZWxzZVxubmV0L2NvcmUvc2ttc2cuYzoxMjc4OnN0YXRpYyB2b2lkIHNrX3Bzb2NrX2RvbmVfc3RycChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy0xMjc5LXtcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyODItXG5uZXQvY29yZS9za21zZy5jOjEyODM6c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvc2ttc2cuYy0xMjg0LXtcbi0tXG5uZXQvY29yZS9za21zZy5jLTEzMTQtXG5uZXQvY29yZS9za21zZy5jOjEzMTU6c3RhdGljIHZvaWQgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL3NrbXNnLmMtMTMxNi17XG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMzQxLVxubmV0L2NvcmUvc2ttc2cuYzoxMzQyOnZvaWQgc2tfcHNvY2tfc3RhcnRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTEzNDMte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTM1MS1cbm5ldC9jb3JlL3NrbXNnLmM6MTM1Mjp2b2lkIHNrX3Bzb2NrX3N0b3BfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTEzNTMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgwMAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUFNvY2sgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIFBTb2NrIGZ1bmN0aW9ucy4gSSBzZWUgYSBjbGVhciBwYXR0ZXJuIGhlcmUuIFByaW1hcmlseSwgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIOKAkyBgc2tfcHNvY2tfaW5pdGAsIGBza19wc29ja19saW5rX3BvcGAsIGBza19wc29ja19zdG9wYCwgYHNrX3Bzb2NrX2Ryb3BgLCBgc2tfcHNvY2tfaW5pdF9zdHJwYCwgYHNrX3Bzb2NrX3N0YXJ0X3N0cnBgLCBgc2tfcHNvY2tfc3RvcF9zdHJwYCwgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgLCBgc2tfcHNvY2tfc3RvcF92ZXJkaWN0YCDigJMgYXJlIG1vc3RseSBmb2N1c2VkIG9uIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93bi4gU3RhbmRhcmQgc3R1ZmY7IHNldHRpbmcgdXAgcmVzb3VyY2VzLCB0ZWFyaW5nIHRoZW0gZG93bi4gTm90aGluZyBwYXJ0aWN1bGFybHkgZ3JvdW5kYnJlYWtpbmcgdGhlcmUuCgpUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgZGF0YSBwYXRoLiBUaGUgbmV0d29ya2luZyBzdGFjayBpc24mIzM5O3QgZGlyZWN0bHkgY2FsbGluZyB0aGVzZSBub24tc3RhdGljIGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSB0aGUgc29ja2V0IGxheWVyIGlzIHRyaWdnZXJpbmcgdGhlIGRhdGEgZmxvdyB2aWEgYHNrX2RhdGFfcmVhZHlgIG9yIGBza193cml0ZV9zcGFjZWAsIGFuZCB3ZSYjMzk7cmUgaG9va2luZyBpbnRvIHRoYXQuIFNvLCBpbnN0ZWFkIG9mIHRoZSB1c3VhbCBgdGNwX2RhdGFfcmVhZHlgLCB3ZSBoYXZlIHNvbWV0aGluZyBsaWtlIGBza19wc29ja19zdHJwX2RhdGFfcmVhZHlgIG9yIGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgIHdoaWNoIGFyZSBzdGF0aWMuIFRoZXkgYXJlIHVzZWQgaW50ZXJuYWxseSBmb3IgZGF0YSBoYW5kbGluZy4gVGhpcyBpcyBob3cgdGhlIFBTb2NrIGludGVyYWN0cyB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrLgoKV2FpdCBhIHNlY29uZOKApiBgc2tfcHNvY2tfbXNnX3ZlcmRpY3RgIGlzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIG5vdCB3aGF0IEkgZXhwZWN0ZWQuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZzsgdGhlcmUgbWF5IGJlIGEgY2x1ZSBoZXJlLiBUaGlzIGJlYXJzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfbXNnX3ZlcmRpY3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za21zZy5oPTQ1OT12b2lkIHNrX3Bzb2NrX3N0b3BfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spO1xuaW5jbHVkZS9saW51eC9za21zZy5oLTQ2MC1cbmluY2x1ZGUvbGludXgvc2ttc2cuaDo0NjE6aW50IHNrX3Bzb2NrX21zZ192ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbmluY2x1ZGUvbGludXgvc2ttc2cuaC00NjItXHRcdFx0IHN0cnVjdCBza19tc2cgKm1zZyk7XG4tLVxubmV0L2NvcmUvc2ttc2cuYz05ODg9c3RhdGljIGludCBza19wc29ja19tYXBfdmVyZChpbnQgdmVyZGljdCwgYm9vbCByZWRpcilcbi0tXG5uZXQvY29yZS9za21zZy5jLTEwMDAtXG5uZXQvY29yZS9za21zZy5jOjEwMDE6aW50IHNrX3Bzb2NrX21zZ192ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbm5ldC9jb3JlL3NrbXNnLmMtMTAwMi1cdFx0XHQgc3RydWN0IHNrX21zZyAqbXNnKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTAzNi19XG5uZXQvY29yZS9za21zZy5jOjEwMzc6RVhQT1JUX1NZTUJPTF9HUEwoc2tfcHNvY2tfbXNnX3ZlcmRpY3QpO1xubmV0L2NvcmUvc2ttc2cuYy0xMDM4LVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz00MTg9c3RhdGljIGludCB0Y3BfYnBmX3NlbmRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTQzNC1cdFx0ZGVsdGEgPSBtc2ctXHUwMDNlc2cuc2l6ZTtcbm5ldC9pcHY0L3RjcF9icGYuYzo0MzU6XHRcdHBzb2NrLVx1MDAzZWV2YWwgPSBza19wc29ja19tc2dfdmVyZGljdChzaywgcHNvY2ssIG1zZyk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNDM2LVx0XHRkZWx0YSAtPSBtc2ctXHUwMDNlc2cuc2l6ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4NjgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUQ1AgQlBGIEluZ3Jlc3MgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNvbWV0aGluZyBmZWVscyBvZmYuIGB0Y3BfYnBmX3NlbmRfdmVyZGljdGAgaXMgY2FsbGVkIGZyb20gYHRjcF9icGZfc2VuZG1zZ2AsIGJ1dCB0aGUgcGF0Y2ggZGVzY3JpcHRpb24gc2VlbXMgdG8gYmUgZm9jdXNlZCBvbiBpbmdyZXNzIGZ1bmN0aW9uYWxpdHksIG5vdCB0aGUgc2VuZGluZyBwYXRoLiBUaGF0JiMzOTtzIG15IGZpcnN0IHJlZCBmbGFnLCBhcyB0aGlzIGNvbm5lY3Rpb24gaXMgbm90IHRoZSBwcmltYXJ5IGZvY3VzLgoKTGV0JiMzOTtzIHNlZSwgaXQmIzM5O3MgbW9kaWZ5aW5nIGEgYnVuY2ggb2YgZnVuY3Rpb25zOiBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAsIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2dgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgLCBgc2tfcHNvY2tfaGFuZGxlX3NrYmAsIGBza19wc29ja19iYWNrbG9nYCwgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YC4gUmlnaHQsIHRoZXNlIGFyZSBhbGwgZGVmaW5pdGVseSBpbmdyZXNzLXJlbGF0ZWQuIFRoYXQgbGluZXMgdXAuIFRoZSBpbmdyZXNzIGVudHJ5IHBvaW50cyBJJiMzOTttIGZhbWlsaWFyIHdpdGgsIGF0IGxlYXN0IGluIHRoaXMgY29udGV4dCwgYXJlIGBza19wc29ja19zdHJwX2RhdGFfcmVhZHlgIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5YC4KCldhaXQsIGEgc2Vjb25kLiBgc2tfcHNvY2tfYmFja2xvZ2AuLi4gdGhhdCYjMzk7cyB0aGUgd29ya3F1ZXVlIGNhbGxiYWNrLCBpc24mIzM5O3QgaXQ/IE9rYXksIEkmIzM5O20gZ2V0dGluZyBhIGJldHRlciBwaWN0dXJlIGhlcmUsIGJ1dCBzdGlsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBleGFjdCBjb25uZWN0aW9uLgoKSG1tLCBJIHdvbmRlciBpZiB0aGVyZSYjMzk7cyBhIGdvb2QsIG5vbi1zdGF0aWMgZnVuY3Rpb24gSSBjYW4gdXNlIGFzIGEgY2VudHJhbCBwb2ludCwgYSBmb2N1cyBzeW1ib2wsIHRvIGJldHRlciB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgYWxsIGZpdHMgaW4/IFBlcmhhcHMgYHRjcF9icGZfcmVjdm1zZ2A/IFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9icGZfcmVjdm1zZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTU5Nj1zdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2ttc2cuYy02MTMtXHQgKiB3ZSB3aWxsIGV2ZW50dWFsbHkgcmVjZWl2ZSB0aGlzIGRhdGEgb24uIFRoZSBkYXRhIHdpbGwgYmUgcmVsZWFzZWRcbm5ldC9jb3JlL3NrbXNnLmM6NjE0Olx0ICogZnJvbSBza2JfY29uc3VtZSBmb3VuZCBpbiBfX3RjcF9icGZfcmVjdm1zZygpIGFmdGVyIGl0cyBiZWVuIGNvcGllZFxubmV0L2NvcmUvc2ttc2cuYy02MTUtXHQgKiBpbnRvIHVzZXIgYnVmZmVycy5cbi0tXG5uZXQvY29yZS9za21zZy5jPTY1MD1zdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za21zZy5jLTY2NC1cbm5ldC9jb3JlL3NrbXNnLmM6NjY1Olx0LyogVGhpcyBpcyB1c2VkIGluIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVcbm5ldC9jb3JlL3NrbXNnLmMtNjY2LVx0ICogZGF0YSBvcmlnaW5hdGVzIGZyb20gdGhlIHNvY2tldCYjMzk7cyBvd24gcHJvdG9jb2wgc3RhY2suIE5vIG5lZWQgdG9cbi0tXG5uZXQvY29yZS9za21zZy5jPTY4MT1zdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYmFja2xvZyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNjk4LVxubmV0L2NvcmUvc2ttc2cuYzo2OTk6XHQvKiBUaGlzIGlzIHVzZWQgaW4gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZVxubmV0L2NvcmUvc2ttc2cuYy03MDAtXHQgKiBkYXRhIG9yaWdpbmF0ZXMgZnJvbSB0aGUgc29ja2V0JiMzOTtzIG93biBwcm90b2NvbCBzdGFjay4gTm8gbmVlZCB0b1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz0yMDM9c3RhdGljIGJvb2wgaXNfbmV4dF9tc2dfZmluKHN0cnVjdCBza19wc29jayAqcHNvY2spXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTIyMC1cbm5ldC9pcHY0L3RjcF9icGYuYzoyMjE6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjItXHRcdFx0XHQgIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9MzM1PXN0YXRpYyBpbnQgdGNwX2JwZl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzY3LVxubmV0L2lwdjQvdGNwX2JwZi5jOjM2ODpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbm5ldC9pcHY0L3RjcF9icGYuYy0zNjktXHRcdFx0ICAgaW50IGZsYWdzKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz02NDA9c3RhdGljIHZvaWQgdGNwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUQ1BfQlBGX05VTV9DRkdTXSxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQ1LVx0cHJvdFtUQ1BfQlBGX0JBU0VdLmNsb3NlXHRcdD0gc29ja19tYXBfY2xvc2U7XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjQ2Olx0cHJvdFtUQ1BfQlBGX0JBU0VdLnJlY3Ztc2dcdFx0PSB0Y3BfYnBmX3JlY3Ztc2c7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQ3LVx0cHJvdFtUQ1BfQlBGX0JBU0VdLnNvY2tfaXNfcmVhZGFibGVcdD0gc2tfbXNnX2lzX3JlYWRhYmxlO1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy02NTMtXHRwcm90W1RDUF9CUEZfUlhdXHRcdFx0PSBwcm90W1RDUF9CUEZfQkFTRV07XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjU0Olx0cHJvdFtUQ1BfQlBGX1JYXS5yZWN2bXNnXHRcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcbm5ldC9pcHY0L3RjcF9icGYuYy02NTUtXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjU2LVx0cHJvdFtUQ1BfQlBGX1RYUlhdXHRcdFx0PSBwcm90W1RDUF9CUEZfVFhdO1xubmV0L2lwdjQvdGNwX2JwZi5jOjY1NzpcdHByb3RbVENQX0JQRl9UWFJYXS5yZWN2bXNnXHRcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcbm5ldC9pcHY0L3RjcF9icGYuYy02NTgtfVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz02OTA9aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTcxMy1cdCAqIEZvciBTS19SRURJUkVDVCwgd2UgbmVlZCB0byBhY2sgdGhlIGZyYW1lIGltbWVkaWF0ZWx5IGJ1dCBmb3Jcbm5ldC9pcHY0L3RjcF9icGYuYzo3MTQ6XHQgKiBTS19QQVNTLCB3ZSB3YW50IHRvIGRlbGF5IHRoZSBhY2sgdW50aWwgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpLlxubmV0L2lwdjQvdGNwX2JwZi5jLTcxNS1cdCAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYz0xMTEzPXN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF96Yyh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYy0xMTQ4LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jOjExNDk6XHQvKiB0cmlnZ2VyIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIgYW5kIGluYyBjb3BpZWRfc2VxIG9mIHAxICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMtMTE1MC1cdHJlY3ZkID0gcmVjdl90aW1lb3V0KHAxLCByY3YsIHNpemVvZihyY3YpLCBNU0dfRE9OVFdBSVQsIDEpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jPTE4PXN0YXRpYyBjb25zdCBpbnQgdGVzdF9wYWNrZXRfbnVtID0gMTAwO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtMTktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYzoyMDovKiBDdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKSBpbnZva2VzIGRhdGFfcmVhZHlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jLTIxLSAqIHdpdGggc2sgaGVsZCBpZiBhbiBza2IgZXhpc3RzIGluIHNrX3JlY2VpdmVfcXVldWUuIFRoZW4gZm9yIHRoZVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jPTI5Mz1zdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF9wYXNzKGludCBmYW1pbHksIGludCBzb3R5cGUsIGJvb2wgZmlvbnJlYWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtMzExLVx0ICogY29ycmVjdGx5IGJlY2F1c2Ugd2UgY2hlY2sgc2tfcmVjZWl2ZV9xdWV1ZSBpblxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmM6MzEyOlx0ICogdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtMzEzLVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDYzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGdW5jdGlvbiBWaXNpYmlsaXR5IGluIHRoZSBUQ1AgQlBGIGFuZCBTb2NrIE1hcCBTdWJzeXN0ZW1zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHdhcyBsb29raW5nIGF0IGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgaW5pdGlhbGx5IHRob3VnaHQgaXQgd2FzIG5vbi1zdGF0aWMsIGJ1dCB0aGVuIEkgcmVhbGl6ZWQgaXQgKmlzKiBzdGF0aWMgd2l0aGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgLiBHb29kIGNhdGNoLCBtZSEgU28sIEkgY29uZmlybWVkIGBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLiBGaW5lLiBBbmQgYHRjcF9icGZfcmVjdm1zZ2AuLi4geWVwLCBhbHNvIGBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ2AuIFRoYXQgbWFrZXMgc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2Yga2VlcGluZyB0aG9zZSBwYXJzaW5nIGZ1bmN0aW9ucyBpbnRlcm5hbCB0byB0aGUgVENQIEJQRiBpbXBsZW1lbnRhdGlvbi4KCk5vdywgc2hpZnRpbmcgZ2VhcnMsIEkgbW92ZWQgb24gdG8gZnVuY3Rpb25zIHJlbGF0ZWQgdG8gcGFja2V0IHNvY2tldHMgKGBwc29ja2ApLiBgc2tfcHNvY2tfaW5pdF9zdHJwYCBpcyBub24tc3RhdGljLCB3aGljaCBpcyB3aGF0IEkgd291bGQgZXhwZWN0IGZvciBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gU2ltaWxhcmx5LCBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAsIGBza19wc29ja19tc2dfdmVyZGljdGAsIGBza19wc29ja19kcm9wYCwgYHNrX3Bzb2NrX3N0b3BgLCBgc2tfcHNvY2tfaW5pdGAsIGFuZCBgc2tfcHNvY2tfbGlua19wb3BgIGFyZSBhbGwgbm9uLXN0YXRpYy4gVGhpcyBsaWtlbHkgbWVhbnMgdGhleSYjMzk7cmUgcGFydCBvZiB0aGUgcHVibGljIEFQSSBvciBhdCBsZWFzdCB1c2VkIG1vcmUgYnJvYWRseSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIFNvLCB0aGV5IGFsbCBoYXZlIGEgYnJvYWRlciBzY29wZS4KCk5leHQgc3RlcD8gSSYjMzk7bGwgcHJvYmFibHkgc2NhbiB0aHJvdWdoIGBuZXQvY29yZS9zb2NrX21hcC5jYCB0byBzZWUgd2hpY2ggZnVuY3Rpb25zIHRoZXJlIGFyZSBub24tc3RhdGljIGFuZCBob3cgdGhleSBhcmUgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpdLipzb2NrX21hcC4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jPTMyPXN0YXRpYyBERUZJTkVfTVVURVgoc29ja21hcF9tdXRleCk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTMzLVxubmV0L2NvcmUvc29ja19tYXAuYzozNDpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzUtXHRcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZCwgc3RydWN0IGJwZl9saW5rICpsaW5rLFxubmV0L2NvcmUvc29ja19tYXAuYy0zNi1cdFx0XHRcdHUzMiB3aGljaCk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjM3OnN0YXRpYyBzdHJ1Y3Qgc2tfcHNvY2tfcHJvZ3MgKnNvY2tfbWFwX3Byb2dzKHN0cnVjdCBicGZfbWFwICptYXApO1xubmV0L2NvcmUvc29ja19tYXAuYy0zOC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzk6c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDAte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjctXG5uZXQvY29yZS9zb2NrX21hcC5jOjY4OmludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxubmV0L2NvcmUvc29ja19tYXAuYy02OS17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy04NS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODY6aW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUpXG5uZXQvY29yZS9zb2NrX21hcC5jLTg3LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTExNi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTE3OnN0YXRpYyB2b2lkIHNvY2tfbWFwX3NrX2FjcXVpcmUoc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xMTgtXHRfX2FjcXVpcmVzKFx1MDAyNnNrLVx1MDAzZXNrX2xvY2suc2xvY2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMjMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyNDpzdGF0aWMgdm9pZCBzb2NrX21hcF9za19yZWxlYXNlKHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI1LVx0X19yZWxlYXNlcyhcdTAwMjZzay1cdTAwM2Vza19sb2NrLnNsb2NrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTMwLVxubmV0L2NvcmUvc29ja19tYXAuYzoxMzE6c3RhdGljIHZvaWQgc29ja19tYXBfYWRkX2xpbmsoc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTMyLVx0XHRcdCAgICAgIHN0cnVjdCBza19wc29ja19saW5rICpsaW5rLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQxLVxubmV0L2NvcmUvc29ja19tYXAuYzoxNDI6c3RhdGljIHZvaWQgc29ja19tYXBfZGVsX2xpbmsoc3RydWN0IHNvY2sgKnNrLFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDMtXHRcdFx0ICAgICAgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgdm9pZCAqbGlua19yYXcpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNzgtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3OTpzdGF0aWMgdm9pZCBzb2NrX21hcF91bnJlZihzdHJ1Y3Qgc29jayAqc2ssIHZvaWQgKmxpbmtfcmF3KVxubmV0L2NvcmUvc29ja19tYXAuYy0xODAte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg4LVxubmV0L2NvcmUvc29ja19tYXAuYzoxODk6c3RhdGljIGludCBzb2NrX21hcF9pbml0X3Byb3RvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTkwLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5Ni1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTk3OnN0YXRpYyBzdHJ1Y3Qgc2tfcHNvY2sgKnNvY2tfbWFwX3Bzb2NrX2dldF9jaGVja2VkKHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTk4LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTIxNi1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MjE3OnN0YXRpYyBpbnQgc29ja19tYXBfbGluayhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTIxOC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zMzgtXG5uZXQvY29yZS9zb2NrX21hcC5jOjMzOTpzdGF0aWMgdm9pZCBzb2NrX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG5uZXQvY29yZS9zb2NrX21hcC5jLTM0MC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zNzEtXG5uZXQvY29yZS9zb2NrX21hcC5jOjM3MjpzdGF0aWMgdm9pZCBzb2NrX21hcF9yZWxlYXNlX3Byb2dzKHN0cnVjdCBicGZfbWFwICptYXApXG5uZXQvY29yZS9zb2NrX21hcC5jLTM3My17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zNzYtXG5uZXQvY29yZS9zb2NrX21hcC5jOjM3NzpzdGF0aWMgc3RydWN0IHNvY2sgKl9fc29ja19tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGtleSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzc4LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4Ny1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzg4OnN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy0zODkte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzk5LVxubmV0L2NvcmUvc29ja19tYXAuYzo0MDA6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy00MDEte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDE0LVxubmV0L2NvcmUvc29ja19tYXAuYzo0MTU6c3RhdGljIGludCBfX3NvY2tfbWFwX2RlbGV0ZShzdHJ1Y3QgYnBmX3N0YWIgKnN0YWIsIHN0cnVjdCBzb2NrICpza190ZXN0LFxubmV0L2NvcmUvc29ja19tYXAuYy00MTYtXHRcdFx0ICAgICBzdHJ1Y3Qgc29jayAqKnBzaylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQzMy1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDM0OnN0YXRpYyB2b2lkIHNvY2tfbWFwX2RlbGV0ZV9mcm9tX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrLFxubmV0L2NvcmUvc29ja19tYXAuYy00MzUtXHRcdFx0XHQgICAgICB2b2lkICpsaW5rX3Jhdylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ0MS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDQyOnN0YXRpYyBsb25nIHNvY2tfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDQzLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ1NC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDU1OnN0YXRpYyBpbnQgc29ja19tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dClcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDU2LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ2OS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDcwOnN0YXRpYyBpbnQgc29ja19tYXBfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIgaWR4LFxubmV0L2NvcmUvc29ja19tYXAuYy00NzEtXHRcdFx0XHQgIHN0cnVjdCBzb2NrICpzaywgdTY0IGZsYWdzKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTIwLVxubmV0L2NvcmUvc29ja19tYXAuYzo1MjE6c3RhdGljIGJvb2wgc29ja19tYXBfb3Bfb2theShjb25zdCBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKm9wcylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTIyLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTUyNy1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTI4OnN0YXRpYyBib29sIHNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy01Mjkte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTM1LVxubmV0L2NvcmUvc29ja19tYXAuYzo1MzY6c3RhdGljIGJvb2wgc29ja19tYXBfc2tfaXNfc3VpdGFibGUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy01Mzcte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTQwLVxubmV0L2NvcmUvc29ja19tYXAuYzo1NDE6c3RhdGljIGJvb2wgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrX21hcC5jLTU0Mi17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz01NTU9c3RhdGljIGludCBzb2NrX2hhc2hfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01NTctXG5uZXQvY29yZS9zb2NrX21hcC5jOjU1ODppbnQgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG5uZXQvY29yZS9zb2NrX21hcC5jLTU1OS1cdFx0XHQgICAgIHU2NCBmbGFncylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTU5OC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTk5OnN0YXRpYyBsb25nIHNvY2tfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjAwLVx0XHRcdFx0IHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz03MTk9REVGSU5FX0JQRl9JVEVSX0ZVTkMoc29ja21hcCwgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy03MjItXG5uZXQvY29yZS9zb2NrX21hcC5jOjcyMzpzdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX2xvb2t1cF9lbGVtKHN0cnVjdCBzb2NrX21hcF9zZXFfaW5mbyAqaW5mbylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzI0LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTczMy1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzM0OnN0YXRpYyB2b2lkICpzb2NrX21hcF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxubmV0L2NvcmUvc29ja19tYXAuYy03MzUtXHRfX2FjcXVpcmVzKHJjdSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTc0Ni1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzQ3OnN0YXRpYyB2b2lkICpzb2NrX21hcF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXG5uZXQvY29yZS9zb2NrX21hcC5jLTc0OC1cdF9fbXVzdF9ob2xkKHJjdSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTc1Ny1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzU4OnN0YXRpYyBpbnQgc29ja19tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG5uZXQvY29yZS9zb2NrX21hcC5jLTc1OS1cdF9fbXVzdF9ob2xkKHJjdSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTc4MC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzgxOnN0YXRpYyB2b2lkIHNvY2tfbWFwX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxubmV0L2NvcmUvc29ja19tYXAuYy03ODItXHRfX3JlbGVhc2VzKHJjdSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTc5MT1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNvY2tfbWFwX3NlcV9vcHMgPSB7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy03OTctXG5uZXQvY29yZS9zb2NrX21hcC5jOjc5ODpzdGF0aWMgaW50IHNvY2tfbWFwX2luaXRfc2VxX3ByaXZhdGUodm9pZCAqcHJpdl9kYXRhLFxubmV0L2NvcmUvc29ja19tYXAuYy03OTktXHRcdFx0XHQgICAgIHN0cnVjdCBicGZfaXRlcl9hdXhfaW5mbyAqYXV4KVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODA3LVxubmV0L2NvcmUvc29ja19tYXAuYzo4MDg6c3RhdGljIHZvaWQgc29ja19tYXBfZmluaV9zZXFfcHJpdmF0ZSh2b2lkICpwcml2X2RhdGEpXG5uZXQvY29yZS9zb2NrX21hcC5jLTgwOS17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy04MTQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjgxNTpzdGF0aWMgdTY0IHNvY2tfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxubmV0L2NvcmUvc29ja19tYXAuYy04MTYte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTQ0Nz1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19oYXNoX29wcyA9IHtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NjItXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0NjM6c3RhdGljIHN0cnVjdCBza19wc29ja19wcm9ncyAqc29ja19tYXBfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcClcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ2NC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDc2LVxubmV0L2NvcmUvc29ja19tYXAuYzoxNDc3OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19saW5rX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKioqcHByb2csXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NzgtXHRcdFx0XHQgICAgIHN0cnVjdCBicGZfbGluayAqKipwbGluaywgdTMyIHdoaWNoKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUxOS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTUyMDpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTIxLVx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzNi0gKi9cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTUzNzpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzOC1cdFx0XHRcdHN0cnVjdCBicGZfcHJvZyAqb2xkLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNTcxLVxubmV0L2NvcmUvc29ja19tYXAuYzoxNTcyOmludCBzb2NrX21hcF9icGZfcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTU3My1cdFx0XHQgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MjAtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2MjE6c3RhdGljIHZvaWQgc29ja19tYXBfdW5saW5rKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrX2xpbmsgKmxpbmspXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MjIte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYzNC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTYzNTpzdGF0aWMgdm9pZCBzb2NrX21hcF9yZW1vdmVfbGlua3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjM2LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NDQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE2NDU6dm9pZCBzb2NrX21hcF91bmhhc2goc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjQ2LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE2NzA9RVhQT1JUX1NZTUJPTF9HUEwoc29ja19tYXBfdW5oYXNoKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY3MS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTY3Mjp2b2lkIHNvY2tfbWFwX2Rlc3Ryb3koc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNjczLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE2OTk9RVhQT1JUX1NZTUJPTF9HUEwoc29ja19tYXBfZGVzdHJveSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE3MDAtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3MDE6dm9pZCBzb2NrX21hcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTcwMi17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xNzM3PXN0cnVjdCBzb2NrbWFwX2xpbmsge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc0MS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTc0MjpzdGF0aWMgdm9pZCBzb2NrX21hcF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNzQzLXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NTgtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3NTk6c3RhdGljIGludCBzb2NrX21hcF9saW5rX2RldGFjaChzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NjAte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc2NC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTc2NTpzdGF0aWMgdm9pZCBzb2NrX21hcF9saW5rX2RlYWxsb2Moc3RydWN0IGJwZl9saW5rICpsaW5rKVxubmV0L2NvcmUvc29ja19tYXAuYy0xNzY2LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NzMtICovXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3NzQ6c3RhdGljIGludCBzb2NrX21hcF9saW5rX3VwZGF0ZV9wcm9nKHN0cnVjdCBicGZfbGluayAqbGluayxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc3NS1cdFx0XHRcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTgzMy1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTgzNDpzdGF0aWMgdTMyIHNvY2tfbWFwX2xpbmtfZ2V0X21hcF9pZChjb25zdCBzdHJ1Y3Qgc29ja21hcF9saW5rICpzb2NrbWFwX2xpbmspXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4MzUte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg0NC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg0NTpzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmtfZmlsbF9pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg0Ni1cdFx0XHRcdCAgIHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg1NS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg1NjpzdGF0aWMgdm9pZCBzb2NrX21hcF9saW5rX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg1Ny1cdFx0XHRcdCAgICAgIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTg2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBzb2NrX21hcF9saW5rX29wcyA9IHtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NzQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NzU6aW50IHNvY2tfbWFwX2xpbmtfY3JlYXRlKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NzYte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTkzNC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTkzNTpzdGF0aWMgaW50IHNvY2tfbWFwX2l0ZXJfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5MzYtXHRcdFx0XHQgICAgICAgdW5pb24gYnBmX2l0ZXJfbGlua19pbmZvICpsaW5mbyxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5NjUtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE5NjY6c3RhdGljIHZvaWQgc29ja19tYXBfaXRlcl9kZXRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfaXRlcl9hdXhfaW5mbyAqYXV4KVxubmV0L2NvcmUvc29ja19tYXAuYy0xOTY3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxODIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFNvY2ttYXAgQnVnKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHNvY2ttYXAgaXNzdWUgYW5kIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiBpdCBsb29rcyBsaWtlIGBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNgLCBgc29ja19tYXBfZ2V0X2Zyb21fZmRgLCBgc29ja19tYXBfcHJvZ19kZXRhY2hgLCBgc29ja19tYXBfYnBmX3Byb2dfcXVlcnlgLCBgc29ja19tYXBfdW5oYXNoYCwgYHNvY2tfbWFwX2Rlc3Ryb3lgLCBgc29ja19tYXBfY2xvc2VgLCBhbmQgYHNvY2tfbWFwX2xpbmtfY3JlYXRlYCBhcmUgYWxsIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhleSYjMzk7cmUgZGVmaW5pdGVseSBpbiBwbGF5IGhlcmUuCgpUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSBhbiBgc2tfZm9yd2FyZF9hbGxvY2AgaXNzdWUgd2hlbiB0aGUgdHJhZmZpYyBpcyBiZWluZyBkZWxpdmVyZWQgKmJhY2sqIHRvIHRoZSBzYW1lIHNvY2tldCAoYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgKS4gVGhhdCBzY3JlYW1zIHNvY2ttYXAgYW5kIEJQRiBpbnRlcmFjdGlvbi4gSXQmIzM5O3MgaGFwcGVuaW5nIGJlY2F1c2UgYSBzb2NrZXQgZ2V0cyBhZGRlZCB0byB0aGUgc29ja21hcCwgYW5kIHRoZW4gYSBCUEYgcHJvZ3JhbSByZXJvdXRlcyB0cmFmZmljICpiYWNrKiB0byB0aGF0IHZlcnkgc29ja2V0LgoKU28sIHdoZXJlIGRvIHRoZSBwaWVjZXMgZml0IHRvZ2V0aGVyPyBDbGVhcmx5LCBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCBpcyBhIGxpa2VseSBjYW5kaWRhdGUsIHNpbmNlIGl0JiMzOTtzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgYWRkaW5nIHRoZSBzb2NrZXQgdG8gdGhlIG1hcCBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoYXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gZm9yIG15IGludmVzdGlnYXRpb24sIGRlZmluaXRlbHkuIEFuZCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHJlY2VpdmluZyBkYXRhLCBgdGNwX2JwZl9yZWN2bXNnYCBpcyBjcnVjaWFsLiBJdCYjMzk7cyB0aGUgZnVuY3Rpb24gd2hlcmUgdGhlIGRhdGEgaXMgYWN0dWFsbHkgcmVhZC4gRmluYWxseSwgdGhlIEJQRiBwcm9ncmFtIGl0c2VsZiBnZXRzIGF0dGFjaGVkIGJ5IGBicGZfcHJvZ19hdHRhY2hgIG9yIGBzb2NrX21hcF9saW5rX2NyZWF0ZWAuIFNvIHRob3NlIGFyZSBpbXBvcnRhbnQgYXMgd2VsbC4KCkkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGRlZXBlciBkaXZlIGludG8gYHRjcF9icGZfcmVjdm1zZ2AgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQgdGhlcmUuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBkYXRhIGhhbmRsaW5nIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc29ja21hcCB3aXRoaW4gdGhlIHJlY2VpdmluZyBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYnBmX3JlY3Ztc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2JwZi5jPTIwMz1zdGF0aWMgYm9vbCBpc19uZXh0X21zZ19maW4oc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMjIwLVxubmV0L2lwdjQvdGNwX2JwZi5jOjIyMTpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjQvdGNwX2JwZi5jLTIyMi1cdFx0XHRcdCAgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz0zMzU9c3RhdGljIGludCB0Y3BfYnBmX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0zNjctXG5uZXQvaXB2NC90Y3BfYnBmLmM6MzY4OnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxubmV0L2lwdjQvdGNwX2JwZi5jLTM2OS1cdFx0XHQgICBpbnQgZmxhZ3MpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTY0MD1zdGF0aWMgdm9pZCB0Y3BfYnBmX3JlYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RDUF9CUEZfTlVNX0NGR1NdLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy02NDUtXHRwcm90W1RDUF9CUEZfQkFTRV0uY2xvc2VcdFx0PSBzb2NrX21hcF9jbG9zZTtcbm5ldC9pcHY0L3RjcF9icGYuYzo2NDY6XHRwcm90W1RDUF9CUEZfQkFTRV0ucmVjdm1zZ1x0XHQ9IHRjcF9icGZfcmVjdm1zZztcbm5ldC9pcHY0L3RjcF9icGYuYy02NDctXHRwcm90W1RDUF9CUEZfQkFTRV0uc29ja19pc19yZWFkYWJsZVx0PSBza19tc2dfaXNfcmVhZGFibGU7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY1My1cdHByb3RbVENQX0JQRl9SWF1cdFx0XHQ9IHByb3RbVENQX0JQRl9CQVNFXTtcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTQ6XHRwcm90W1RDUF9CUEZfUlhdLnJlY3Ztc2dcdFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY1NS1cbm5ldC9pcHY0L3RjcF9icGYuYy02NTYtXHRwcm90W1RDUF9CUEZfVFhSWF1cdFx0XHQ9IHByb3RbVENQX0JQRl9UWF07XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjU3Olx0cHJvdFtUQ1BfQlBGX1RYUlhdLnJlY3Ztc2dcdFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY1OC19XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTY5MD1pbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzEzLVx0ICogRm9yIFNLX1JFRElSRUNULCB3ZSBuZWVkIHRvIGFjayB0aGUgZnJhbWUgaW1tZWRpYXRlbHkgYnV0IGZvclxubmV0L2lwdjQvdGNwX2JwZi5jOjcxNDpcdCAqIFNLX1BBU1MsIHdlIHdhbnQgdG8gZGVsYXkgdGhlIGFjayB1bnRpbCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkuXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzE1LVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjQ3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFRDUCBCUEYgUmVjZWl2ZXIgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoZSBgbmV0L2lwdjQvdGNwX2JwZi5jYCBtb2R1bGUgYWdhaW4uIExldCBtZSBqdXN0IG1ha2Ugc3VyZSBJJiMzOTttIGZvbGxvd2luZyB0aGUgY29kZSBjb3JyZWN0bHkuIFJpZ2h0LCBgdGNwX2JwZl9yZWN2bXNnYCBhbmQgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFyZSBkZWZpbml0ZWx5IGRlY2xhcmVkIGFzIHN0YXRpYy4gSW50ZXJlc3RpbmcsIHNvIHRoZXkgd29uJiMzOTt0IGJlIGV4cG9zZWQgb3V0c2lkZSBvZiB0aGUgY29tcGlsYXRpb24gdW5pdC4gQnV0IHdhaXQsIGZvY3VzaW5nIGluIG9uIGB0Y3BfYnBmX3JlY3Ztc2dgIHNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWxzbyBzdGF0aWMuIFRoYXQgbWVhbnMsIGl0IGNhbiBub3QgYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgc291cmNlIGZpbGUsIHdoaWNoIGxpbWl0cyBteSBhYmlsaXR5IHRvIHRyYWNlIHRoaXMgZnVuY3Rpb24gYXMgaXQgaXMgbm90IHBhcnQgb2YgdGhlIGV4dGVybmFsIEFQSS4gTm93IEkmIzM5O20gd29uZGVyaW5nLCBhcmUgdGhlcmUgKmFueSogbm9uLXN0YXRpYyBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGlzIGZpbGU/IEkgbmVlZCB0byBrbm93IHRoZSBzY29wZSBvZiB3aGF0IGlzIHZpc2libGUgZXh0ZXJuYWxseS4gVGhpcyBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpdLip0Y3BfYnBmLipcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2JwZi5jPTMzPXN0YXRpYyBpbnQgYnBmX3RjcF9pbmdyZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtOTAtXG5uZXQvaXB2NC90Y3BfYnBmLmM6OTE6c3RhdGljIGludCB0Y3BfYnBmX3B1c2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBhcHBseV9ieXRlcyxcbm5ldC9pcHY0L3RjcF9icGYuYy05Mi1cdFx0XHRpbnQgZmxhZ3MsIGJvb2wgdW5jaGFyZ2UpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTE1Mi1cbm5ldC9pcHY0L3RjcF9icGYuYzoxNTM6c3RhdGljIGludCB0Y3BfYnBmX3B1c2hfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLFxubmV0L2lwdjQvdGNwX2JwZi5jLTE1NC1cdFx0XHQgICAgICAgdTMyIGFwcGx5X2J5dGVzLCBpbnQgZmxhZ3MsIGJvb2wgdW5jaGFyZ2UpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTE2My1cbm5ldC9pcHY0L3RjcF9icGYuYzoxNjQ6aW50IHRjcF9icGZfc2VuZG1zZ19yZWRpcihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgaW5ncmVzcyxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNjUtXHRcdFx0ICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcywgaW50IGZsYWdzKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz0yMDM9c3RhdGljIGJvb2wgaXNfbmV4dF9tc2dfZmluKHN0cnVjdCBza19wc29jayAqcHNvY2spXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTIyMC1cbm5ldC9pcHY0L3RjcF9icGYuYzoyMjE6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjItXHRcdFx0XHQgIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzM0LVxubmV0L2lwdjQvdGNwX2JwZi5jOjMzNTpzdGF0aWMgaW50IHRjcF9icGZfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzM2LXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzY3LVxubmV0L2lwdjQvdGNwX2JwZi5jOjM2ODpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbm5ldC9pcHY0L3RjcF9icGYuYy0zNjktXHRcdFx0ICAgaW50IGZsYWdzKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy00MTctXG5uZXQvaXB2NC90Y3BfYnBmLmM6NDE4OnN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxubmV0L2lwdjQvdGNwX2JwZi5jLTQxOS1cdFx0XHRcdHN0cnVjdCBza19tc2cgKm1zZywgaW50ICpjb3BpZWQsIGludCBmbGFncylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTMzLVxubmV0L2lwdjQvdGNwX2JwZi5jOjUzNDpzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTM1LXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjM4PXN0YXRpYyBzdHJ1Y3QgcHJvdG8gdGNwX2JwZl9wcm90c1tUQ1BfQlBGX05VTV9QUk9UU11bVENQX0JQRl9OVU1fQ0ZHU107XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjM5LVxubmV0L2lwdjQvdGNwX2JwZi5jOjY0MDpzdGF0aWMgdm9pZCB0Y3BfYnBmX3JlYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RDUF9CUEZfTlVNX0NGR1NdLFxubmV0L2lwdjQvdGNwX2JwZi5jLTY0MS1cdFx0XHRcdCAgIHN0cnVjdCBwcm90byAqYmFzZSlcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjU5LVxubmV0L2lwdjQvdGNwX2JwZi5jOjY2MDpzdGF0aWMgdm9pZCB0Y3BfYnBmX2NoZWNrX3Y2X25lZWRzX3JlYnVpbGQoc3RydWN0IHByb3RvICpvcHMpXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjYxLXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjcxLVxubmV0L2lwdjQvdGNwX2JwZi5jOjY3MjpzdGF0aWMgaW50IF9faW5pdCB0Y3BfYnBmX3Y0X2J1aWxkX3Byb3RvKHZvaWQpXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjczLXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9Njc3PWxhdGVfaW5pdGNhbGwodGNwX2JwZl92NF9idWlsZF9wcm90byk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjc4LVxubmV0L2lwdjQvdGNwX2JwZi5jOjY3OTpzdGF0aWMgaW50IHRjcF9icGZfYXNzZXJ0X3Byb3RvX29wcyhzdHJ1Y3QgcHJvdG8gKm9wcylcbm5ldC9pcHY0L3RjcF9icGYuYy02ODAte1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy02ODktI2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxubmV0L2lwdjQvdGNwX2JwZi5jOjY5MDppbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbm5ldC9pcHY0L3RjcF9icGYuYy02OTEtXHRcdFx0ICAgc2tfcmVhZF9hY3Rvcl90IHJlY3ZfYWN0b3IpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTcyNC1cbm5ldC9pcHY0L3RjcF9icGYuYzo3MjU6aW50IHRjcF9icGZfdXBkYXRlX3Byb3RvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgYm9vbCByZXN0b3JlKVxubmV0L2lwdjQvdGNwX2JwZi5jLTcyNi17XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTc2Mj1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3VwZGF0ZV9wcm90byk7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTc2OC0gKi9cbm5ldC9pcHY0L3RjcF9icGYuYzo3Njk6dm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxubmV0L2lwdjQvdGNwX2JwZi5jLTc3MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNDAxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFN0cmVhbSBQYXJzZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IG5vdGljaW5nIGEgZmV3IHRoaW5ncy4gYHRjcF9icGZfdXBkYXRlX3Byb3RvYCwgYHRjcF9icGZfc2VuZG1zZ19yZWRpcmAsIGB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrYCwgYW5kIGB0Y3BfYnBmX2Nsb25lYCBhcmUgYWxsICpub24tc3RhdGljKiBhbmQgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgZ29vZCB0byBrZWVwIGluIG1pbmQsIGFzIGl0IGluZGljYXRlcyB0aGV5IGFyZSBpbnRlbmRlZCBmb3IgYnJvYWRlciB1c2Ugd2l0aGluIHRoZSBrZXJuZWwgKG9yIHBvdGVudGlhbGx5IHVzZXIgc3BhY2UpLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW4gYSBwYWNrZXQgaXMgcmVkaXJlY3RlZCAqYmFjayogdG8gdGhlIHNhbWUgc29ja2V0LCB3aGljaCBpcyBoYW5kbGVkIGluIGVpdGhlciBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgb3IgcG9zc2libHkgYHNrX3Bzb2NrX2JhY2tsb2dgLiAKClRoZSB0ZXN0IGNhc2UgaXMgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIHVzaW5nIGB4YnBmX3Byb2dfYXR0YWNoYCB0byBob29rIHVwIGEgc3RyZWFtIHBhcnNlciAoYHByb2dfc2tiX3BhcnNlcl9vbmVgKSBhbmQgYSB2ZXJkaWN0IHByb2dyYW0gKGBwcm9nX3NrYl92ZXJkaWN0X3Bhc3NgKSB0byBhIG1hcCB1c2luZyBgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSYCBhbmQgYEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RgIHJlc3BlY3RpdmVseS4gSXQgdGhlbiBzZW5kcyBzb21lIGRhdGEuIE15IGd1ZXNzIGlzIHRoYXQgdGhlIGRhdGEgdHJpZ2dlcnMgdGhlIHN0cmVhbSBwYXJzZXIgYW5kIHRoZSB2ZXJkaWN0IGxvZ2ljLCBhbmQgdGhlIHZlcmRpY3QgaXMgc2V0IHRvIGBTS19QQVNTYC4gQmVjYXVzZSBpdCBwYXNzZXMsIHRoZSBwYWNrZXQgZW5kcyB1cCBiZWluZyBkZWxpdmVyZWQgYmFjayB0byB0aGUgKnNhbWUqIHNvY2tldCwgYWxsIGhhcHBlbmluZyB3aXRoaW4gYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIG9yLCBpZiB0aGUgcGFja2V0IGlzIHF1ZXVlZCwgYHNrX3Bzb2NrX2JhY2tsb2dgLiAKClRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoZSBmdW5jdGlvbiBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAgaXMgYmVpbmcgY2FsbGVkIGFzIGEgcmVzdWx0IG9mIHRoYXQgKnNhbWUtc29ja2V0KiBkZWxpdmVyeS4gSXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBjb250ZXh0LiAgVGhlIGRhdGEgdGhhdCAqdHJpZ2dlcnMqIGFsbCBvZiB0aGlzIGlzIGJlaW5nIGhhbmRsZWQgYnkgYHRjcF9icGZfc3RycF9yZWFkX3NvY2tgLiBXYWl0IGEgc2Vjb25kLiBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2AgaXMgY2xlYXJseSBmb3Igc3RyaW5nIHBhcnNlciBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyB2ZXJ5IGxpa2VseSBnb2luZyB0byBjYWxsIGBzdHJwX2RhdGFfcmVhZHlgIG9yIHNvbWV0aGluZyBlcXVpdmFsZW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgYHRjcF9icGZfc3RycF9yZWFkX3NvY2tgIGlzIGNvcnJlY3QuIExldCBtZSBjaGVjayBpdHMgZGVmaW5pdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2JwZl9zdHJwX3JlYWRfc29jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaD0yODQ0PXN0cnVjdCBzdHJwYXJzZXI7XG5pbmNsdWRlL25ldC90Y3AuaDoyODQ1OmludCB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuaW5jbHVkZS9uZXQvdGNwLmgtMjg0Ni1cdFx0XHQgICBza19yZWFkX2FjdG9yX3QgcmVjdl9hY3Rvcik7XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMjI4PWludCBza19wc29ja19pbml0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTI0Mi1cdGlmIChza19pc190Y3Aoc2spKSB7XG5uZXQvY29yZS9za21zZy5jOjEyNDM6XHRcdHBzb2NrLVx1MDAzZXN0cnAuY2IucmVhZF9zb2NrID0gdGNwX2JwZl9zdHJwX3JlYWRfc29jaztcbm5ldC9jb3JlL3NrbXNnLmMtMTI0NC1cdFx0cHNvY2stXHUwMDNlY29waWVkX3NlcSA9IHRjcF9zayhzayktXHUwMDNlY29waWVkX3NlcTtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9Njc5PXN0YXRpYyBpbnQgdGNwX2JwZl9hc3NlcnRfcHJvdG9fb3BzKHN0cnVjdCBwcm90byAqb3BzKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy02ODktI2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxubmV0L2lwdjQvdGNwX2JwZi5jOjY5MDppbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbm5ldC9pcHY0L3RjcF9icGYuYy02OTEtXHRcdFx0ICAgc2tfcmVhZF9hY3Rvcl90IHJlY3ZfYWN0b3IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzM0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIFNvY2tldCBCUEYgUHJvZ3JhbSBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHN0YXJ0aW5nIHRvIHBpZWNlIHRvZ2V0aGVyIGhvdyB0aGlzIHNvY2tldCBCUEYgaW50ZXJhY3Rpb24gaXMgd29ya2luZy4gSXQgbG9va3MgbGlrZSBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2AgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiByZWxhdGVkIHRvIHRoZSBgc3RycGFyc2VyYCBtZWNoYW5pc20uIFRoZSBgc3RycGFyc2VyYCBpdHNlbGYgaXMgdHJpZ2dlcmVkIGJ5IGBzdHJwX2RhdGFfcmVhZHlgLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIHRoYXTigJlzIHdoYXQgZ2V0cyBjYWxsZWQgd2hlbiBkYXRhIGxhbmRzIG9uIHRoZSBzb2NrZXQuIFNvLCBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2AgaXMgZGVmaW5pdGVseSBhIGtleSBmdW5jdGlvbiB0byBmb2N1cyBvbiByaWdodCBub3cuCgpJIGFsc28gbmVlZCB0byBzZWUgaG93IHRoZSBzb2NrbWFwIGlzIHNldCB1cC4gYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2Agc2VlbXMgbGlrZSBhIGdvb2QgZm9jdXMgc3ltYm9sIGZvciB0aGF0LCBzbyBJJiMzOTtsbCBkb3VibGUtY2hlY2sgaXQuIEFoIHllcywgaXQmIzM5O3MgZGVmaW5lZCBpbiBgbmV0L2NvcmUvc29ja19tYXAuY2AuIE5vdywgbGV0IG1lIHNlZSBpZiBJJiMzOTttIG1pc3NpbmcgYW55IG90aGVyIGltcG9ydGFudCBub24tc3RhdGljIGZ1bmN0aW9uIGNhbGxzIGhlcmXigKYgQWgsIGhlcmUmIzM5O3MgYHNvY2tfbWFwX2xpbmtfY3JlYXRlYCEgVGhhdCYjMzk7cyBjYWxsZWQgd2hlbiBhdHRhY2hpbmcgYSBCUEYgcHJvZ3JhbSB0byBhIHNvY2ttYXAuIFNvLCBgYnBmX3Byb2dfYXR0YWNoYCBjYWxscyBlaXRoZXIgYHNvY2tfbWFwX2xpbmtfY3JlYXRlYCBvciBgc29ja19tYXBfcHJvZ191cGRhdGVgLCB3aGljaCBzdWdnZXN0cyB0aGVyZSBhcmUgdHdvIGRpc3RpbmN0IG1lY2hhbmlzbXMgZm9yIHVwZGF0aW5nIHNvY2ttYXAgcHJvZ3JhbXMuIExldCBtZSBkaWcgaW50byB0aGF0IHNlY29uZCBvcHRpb24sIGFuZCBzZWUgd2hhdCBgc29ja19tYXBfcHJvZ191cGRhdGVgIGlzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX21hcF9wcm9nX3VwZGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYz0zMj1zdGF0aWMgREVGSU5FX01VVEVYKHNvY2ttYXBfbXV0ZXgpO1xubmV0L2NvcmUvc29ja19tYXAuYy0zMy1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzQ6c3RhdGljIGludCBzb2NrX21hcF9wcm9nX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5uZXQvY29yZS9zb2NrX21hcC5jLTM1LVx0XHRcdFx0c3RydWN0IGJwZl9wcm9nICpvbGQsIHN0cnVjdCBicGZfbGluayAqbGluayxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTY4PWludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODAtXHRtdXRleF9sb2NrKFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xubmV0L2NvcmUvc29ja19tYXAuYzo4MTpcdHJldCA9IHNvY2tfbWFwX3Byb2dfdXBkYXRlKG1hcCwgcHJvZywgTlVMTCwgTlVMTCwgYXR0ci1cdTAwM2VhdHRhY2hfdHlwZSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTgyLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9ODY9aW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMDktXHRtdXRleF9sb2NrKFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xubmV0L2NvcmUvc29ja19tYXAuYzoxMTA6XHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIE5VTEwsIHByb2csIE5VTEwsIGF0dHItXHUwMDNlYXR0YWNoX3R5cGUpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xMTEtXHRtdXRleF91bmxvY2soXHUwMDI2c29ja21hcF9tdXRleCk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xNTIwPXN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2soZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNTM2LSAqL1xubmV0L2NvcmUvc29ja19tYXAuYzoxNTM3OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTM4LVx0XHRcdFx0c3RydWN0IGJwZl9wcm9nICpvbGQsIHN0cnVjdCBicGZfbGluayAqbGluayxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE3NDI9c3RhdGljIHZvaWQgc29ja19tYXBfbGlua19yZWxlYXNlKHN0cnVjdCBicGZfbGluayAqbGluaylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NDktXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3NTA6XHRXQVJOX09OX09OQ0Uoc29ja19tYXBfcHJvZ191cGRhdGUoc29ja21hcF9saW5rLVx1MDAzZW1hcCwgTlVMTCwgbGluay1cdTAwM2Vwcm9nLCBsaW5rLFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzUxLVx0XHRcdFx0XHQgIGxpbmstXHUwMDNlYXR0YWNoX3R5cGUpKTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE4NzU9aW50IHNvY2tfbWFwX2xpbmtfY3JlYXRlKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xOTExLVx0bXV0ZXhfbG9jayhcdTAwMjZzb2NrbWFwX211dGV4KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTkxMjpcdHJldCA9IHNvY2tfbWFwX3Byb2dfdXBkYXRlKG1hcCwgcHJvZywgTlVMTCwgXHUwMDI2c29ja21hcF9saW5rLVx1MDAzZWxpbmssIGF0dGFjaF90eXBlKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTkxMy1cdG11dGV4X3VubG9jayhcdTAwMjZzb2NrbWFwX211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMwNzgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGJwZl9wcm9nX2F0dGFjaGAmIzM5O3MgRGVwZW5kZW5jeSBDaGFpbioqCgpPa2F5LCBzbyBgYnBmX3Byb2dfYXR0YWNoYCBpcyBtYWtpbmcgYSBjYWxsIHRvIGBzb2NrX21hcF9nZXRfZnJvbV9mZGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLCBzcGVjaWZpY2FsbHkgaG93IHRoaXMgYHNvY2tfbWFwX2dldF9mcm9tX2ZkYCBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgcGljdHVyZS4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHNvY2tfbWFwX2dldF9mcm9tX2ZkYCBpbW1lZGlhdGVseS4gSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIGh5cG90aGVzZXMgYWJvdXQgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggc29ja2V0IG1hcHMsIG1heWJlIHJldHJpZXZpbmcgc29tZSBkYXRhIG9yIHZhbGlkYXRpbmcgYW4gaW5wdXQsIGdpdmVuIGl0cyBuYW1lLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgYXR0YWNoaW5nIEJQRiBwcm9ncmFtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ja19tYXBfZ2V0X2Zyb21fZmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGYuaD0zNjU0PWludCBicGZfcHJvZ190ZXN0X3J1bl9zeXNjYWxsKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM2NTctXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2NTg6aW50IHNvY2tfbWFwX2dldF9mcm9tX2ZkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xuaW5jbHVkZS9saW51eC9icGYuaC0zNjU5LWludCBzb2NrX21hcF9wcm9nX2RldGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM3MzE9c3RhdGljIGlubGluZSBpbnQgYnBmX3Byb2dfdGVzdF9ydW5fc3lzY2FsbChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0zNzM4LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmluY2x1ZGUvbGludXgvYnBmLmg6MzczOTpzdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbmluY2x1ZGUvbGludXgvYnBmLmgtMzc0MC1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDYzND1zdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00Njc2LVx0Y2FzZSBCUEZfUFJPR19UWVBFX1NLX01TRzpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ2Nzc6XHRcdHJldCA9IHNvY2tfbWFwX2dldF9mcm9tX2ZkKGF0dHIsIHByb2cpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNDY3OC1cdFx0YnJlYWs7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0zOT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjctXG5uZXQvY29yZS9zb2NrX21hcC5jOjY4OmludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxubmV0L2NvcmUvc29ja19tYXAuYy02OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzODEwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgUHJvZ3JhbSBBdHRhY2htZW50KioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gaG93IEJQRiBwcm9ncmFtcyBhcmUgYXR0YWNoZWQsIHNwZWNpZmljYWxseSBmb3IgYEJQRl9QUk9HX1RZUEVfU0tfU0tCYCBhbmQgYEJQRl9QUk9HX1RZUEVfU0tfTVNHYC4gSSYjMzk7bSB0cmFjaW5nIHRoZSBmbG93LCBhbmQgaXQgbG9va3MgbGlrZSBgc29ja19tYXBfZ2V0X2Zyb21fZmRgIGlzIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCB3aGVuIHVzaW5nIGBicGZfcHJvZ19hdHRhY2hgIGZvciB0aG9zZSBwcm9ncmFtIHR5cGVzLgoKQWhhLCBhbmQgbm93IEkmIzM5O20gcmVtZW1iZXJpbmcgdGhhdCBgQlBGX1BST0dfVFlQRV9TS19TS0JgIGNvdmVycyBib3RoIGBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJgIGFuZCBgQlBGX1NLX1NLQl9TVFJFQU1fVkVSRElDVGAgdXNlIGNhc2VzLiBJdCYjMzk7cyBnb29kIHRvIGtlZXAgdGhvc2UgZGlzdGluY3Rpb25zIGNsZWFyLgoKSSBuZWVkIHRvIGNvbmZpcm0gYWxsIG9mIHRoaXMsIHNvIGxldCBtZSBxdWlja2x5IGp1bXAgaW50byBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgYGJwZl9wcm9nX2F0dGFjaGAgZnVuY3Rpb24gZGlyZWN0bHkuIEkmIzM5O2xsIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgZGV0YWlscyBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX21hcF9nZXRfZnJvbV9mZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTQ2MzQ9c3RhdGljIGludCBicGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDY3Ni1cdGNhc2UgQlBGX1BST0dfVFlQRV9TS19NU0c6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0Njc3Olx0XHRyZXQgPSBzb2NrX21hcF9nZXRfZnJvbV9mZChhdHRyLCBwcm9nKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ2NzgtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDMyMAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEFzc2Vzc21lbnQgb2YgdGhlIFJlbGV2YW50IEZvY3VzIEFyZWFzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGlkZW50aWZpZWQgYSBmZXcga2V5IGZ1bmN0aW9ucyB0byBrZWVwIGluIG1pbmQsIGFuZCB0aG9zZSBhcmU6IGBzb2NrX21hcF9nZXRfZnJvbV9mZGAsIGBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNgLCBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2AsIGFuZCwgbGV0JiMzOTtzIGFkZCBgdGNwX2JwZl9yZWN2bXNnYCB0byB0aGUgbGlzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJlbGF0ZSB0byB0aGUgYmlnZ2VyIHBpY3R1cmUsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIEJQRiBpbnRlZ3JhdGlvbi4KCk5vdywgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIGl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCwgd2hpY2ggaXMgc2VsZWN0ZWQgYnkgdGhlIGZvcm1lciBhbmQgYE5FVGAsIGFuZCBgQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSYCBhcmUgYWxsIGltcG9ydGFudC4gSSBhbHJlYWR5IGNvbmZpcm1lZCB0aGF0IHRoZSBgQlBGX1NUUkVBTV9QQVJTRVJgIG9wdGlvbiAqaXMqIHVzZXItc2VsZWN0YWJsZSwgd2hpY2ggaXMgZ29vZC4gVGhhdCBsaWtlbHkgbWVhbnMgd2UgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSBib3RoIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAgaW4gb3VyIGNvbmZpZy4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBvbmUgdGhpbmcuLi5zcGVjaWZpY2FsbHksIGhvdyBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCBpcyBpbnZva2VkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBjYWxsIHBhdGgsIHBhcnRpY3VsYXJseSBmcm9tIHRoZSBzeXN0ZW0gY2FsbCBwZXJzcGVjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ja19tYXBfdXBkYXRlX2VsZW1fc3lzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9MzY1OT1pbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2NjA6aW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9icGYuaC0zNjYxLWludCBzb2NrX21hcF9icGZfcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM3NDU9c3RhdGljIGlubGluZSBpbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0zNzUwLVxuaW5jbHVkZS9saW51eC9icGYuaDozNzUxOnN0YXRpYyBpbmxpbmUgaW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuaW5jbHVkZS9saW51eC9icGYuaC0zNzUyLVx0XHRcdFx0XHQgICB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjUxPXN0YXRpYyBpbnQgYnBmX21hcF91cGRhdGVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI2NC1cdFx0ICAgbWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TT0NLTUFQKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyNjU6XHRcdHJldHVybiBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMobWFwLCBrZXksIHZhbHVlLCBmbGFncyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yNjYtXHR9IGVsc2UgaWYgKElTX0ZEX1BST0dfQVJSQVkobWFwKSkge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9NTU1PXN0YXRpYyBpbnQgc29ja19oYXNoX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTU3LVxubmV0L2NvcmUvc29ja19tYXAuYzo1NTg6aW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxubmV0L2NvcmUvc29ja19tYXAuYy01NTktXHRcdFx0ICAgICB1NjQgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NDAxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFNvY2ttYXAgVXBkYXRlcyBhbmQgRGF0YSBSZWNlcHRpb24qKgoKT2theSwgc28gYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2AgaXMgZGVmaW5pdGVseSB0aGUga2V5IGZ1bmN0aW9uIGhlcmU7IGl0JiMzOTtzIHRoZSBnYXRld2F5IGZvciB1cGRhdGluZyBhIHNvY2ttYXAgZnJvbSB1c2Vyc3BhY2UsIGFzIGl0JiMzOTtzIGNhbGxlZCBieSBgYnBmX21hcF91cGRhdGVfdmFsdWVgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IEkgbmVlZCB0byBjb25zaWRlci4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGRhdGEgaXMgcmVjZWl2ZWQgb24gYSBzb2NrZXQgbWFuYWdlZCBieSBhIHNvY2ttYXAuIExldCYjMzk7cyBsb29rIGF0IGB0Y3BfYnBmX3JlY3Ztc2dgLiBJcyAqdGhhdCogdGhlIGVudHJ5IHBvaW50IGZvciBgcmVjdm1zZ2Agb3BlcmF0aW9ucyBvbiBhIHNvY2tldCB3aXRoaW4gYSBzb2NrbWFwPyBBaCwgeWVzLCBgdGNwX2JwZl9yZWJ1aWxkX3Byb3Rvc2AgaGFuZGxlcyB0aGF0IGJ5IHN3YXBwaW5nIG91dCB0aGUgc3RhbmRhcmQgYHJlY3Ztc2dgIHdpdGggYHRjcF9icGZfcmVjdm1zZ2Agb3IgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLgoKSG1tLCBob2xkIG9uLiBgdGNwX2JwZl9yZWN2bXNnYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBsaW1pdHMgaXRzIGRpcmVjdCB1c2VmdWxuZXNzIGZvciBteSBwdXJwb3Nlcy4gQXJlIHRoZXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBhdmFpbGFibGUgdGhhdCBjYW4gYmUgbW9yZSBkaXJlY3RseSB1dGlsaXplZD8KCkxldCBtZSBzZWUuLi4gYHRjcF9icGZfdXBkYXRlX3Byb3RvYCBpcyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYywgYW5kIGl0IGhhbmRsZXMgdGhlIGNydWNpYWwgdGFzayBvZiByZXBsYWNpbmcgdGhlIHByb3RvY29sIG9wZXJhdGlvbnMuIFByb21pc2luZy4gQW5kLCBhaCB5ZXMsIGB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrYCBpcyBhbHNvIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkLCBzcGVjaWZpY2FsbHkgdXNlZCBieSB0aGUgYHN0cnBhcnNlcmAgbWVjaGFuaXNtLiBHaXZlbiB0aGF0IGl0IGlzIHVzZWQgYnkgYSBzdHJpbmcgcGFyc2VyLCB0aGF0IHdvdWxkIGxpa2VseSBiZSBhIHZlcnkgZ29vZCBmb2N1cyBzeW1ib2wgYXMgd2VsbC4KClNvLCBlaXRoZXIgYHRjcF9icGZfdXBkYXRlX3Byb3RvYCBvciBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2AgbG9va3MgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgZGVlcCBkaXZlLiBJJiMzOTtsbCBuZWVkIHRvIGV2YWx1YXRlIGVhY2ggdG8gZGV0ZXJtaW5lIHdoaWNoIGlzIG1vcmUgcmVsZXZhbnQgYW5kIGFjdGlvbmFibGUgZm9yIG15IGdvYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYnBmX3VwZGF0ZV9wcm90byYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaD0yODM4PXN0cnVjdCBza19wc29jaztcbi0tXG5pbmNsdWRlL25ldC90Y3AuaC0yODQwLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmluY2x1ZGUvbmV0L3RjcC5oOjI4NDE6aW50IHRjcF9icGZfdXBkYXRlX3Byb3RvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgYm9vbCByZXN0b3JlKTtcbmluY2x1ZGUvbmV0L3RjcC5oLTI4NDItdm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKTtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjkwPWludCB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy03MjQtXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzI1OmludCB0Y3BfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcbm5ldC9pcHY0L3RjcF9icGYuYy03MjYte1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy03NjEtfVxubmV0L2lwdjQvdGNwX2JwZi5jOjc2MjpFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3VwZGF0ZV9wcm90byk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNzYzLVxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzM0OD1zdHJ1Y3QgcHJvdG8gdGNwX3Byb3QgPSB7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzczLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzM3NDpcdC5wc29ja191cGRhdGVfc2tfcHJvdFx0PSB0Y3BfYnBmX3VwZGF0ZV9wcm90byxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM3NS0jZW5kaWZcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTIyNzY9c3RydWN0IHByb3RvIHRjcHY2X3Byb3QgPSB7XG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzAxLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MjMwMjpcdC5wc29ja191cGRhdGVfc2tfcHJvdFx0PSB0Y3BfYnBmX3VwZGF0ZV9wcm90byxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMwMy0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTY6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY2MjIKCQkJCQkJCW91dHB1dDogMjI4CgkJCQkJCQl0aG91Z2h0czogNTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgU29ja21hcCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgdGNwX2JwZl91cGRhdGVfcHJvdG9gIGlzIGEga2V5IGZvY3VzIHN5bWJvbCwgZXNwZWNpYWxseSBzaW5jZSBpdCBnZXRzIGNhbGxlZCB3aGVuIGEgc29ja2V0IGlzIGFkZGVkIHRvIGEgc29ja21hcC4gVGhhdCBzdWdnZXN0cyBhIGNyaXRpY2FsIHBvaW50IG9mIGludGVncmF0aW9uLgoKSGVyZSYjMzk7cyBteSBzdW1tYXJ5OiBUaGlzIHBhdGNoIGlzIGEgZml4IGZvciBhIG1lbW9yeSBhY2NvdW50aW5nIGlzc3VlIHdpdGhpbiB0aGUgQlBGIHNvY2ttYXAgaW5mcmFzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgaXQgYWRkcmVzc2VzIGEgc2NlbmFyaW8gd2hlcmUgYHNrX2ZvcndhcmRfYWxsb2NgIGlzbiYjMzk7dCBjb3JyZWN0bHkgaGFuZGxlZCB3aGVuIGEgYHN0cnBhcnNlcmAgQlBGIHByb2dyYW0gcmV0dXJucyBgU0tfUEFTU2Agb24gYSBzb2NrZXQgYW5kIHRoZSByZXN1bHRpbmcgc2tiIGlzIGRlbGl2ZXJlZCBiYWNrIHRvIHRoZSBzYW1lIHNvY2tldCYjMzk7cyBpbmdyZXNzIHF1ZXVlLiBUaGlzIGlzIGEgY2xhc3NpYyBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgc2l0dWF0aW9uLiBUaGUgaW50cm9kdWNlZCBzb2x1dGlvbiwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduYCwgYWltcyB0byBzZXR0bGUgYW55IHByZS1leGlzdGluZyBmb3J3YXJkIGFsbG9jYXRpb24gZGVmaWNpdCBiZWZvcmUgcmVjZWl2ZSBvd25lcnNoaXAgaXMgZ3JhbnRlZCwgd2hpY2ggc2VlbXMgbGlrZSB0aGUgcmlnaHQgYXBwcm9hY2guCgpUaGlzIGNoYW5nZSBpcyBmdW5kYW1lbnRhbGx5IGZ1bmN0aW9uYWwsIHRvdWNoaW5nIGNvcmUgQlBGIGFuZCBuZXR3b3JraW5nIGNvZGUsIGFuZCB0aGF0IG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY29kZSBwYXRoIGlzIHJvYnVzdCBhbmQgY29ycmVjdC4gSSYjMzk7bGwgbmVlZCB0byBzdHJlc3MgdGVzdCB0aGlzIHVuZGVyIG1hbnkgbmV0d29yayBjb25kaXRpb25zIGFuZCB2YXJpb3VzIEJQRiBwcm9ncmFtcy4KClRoZSBpbXBvcnRhbnQgZm9jdXMgc3ltYm9scyBhcmU6CiogICBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYAoqICAgYHNvY2tfbWFwX2dldF9mcm9tX2ZkYAoqICAgYHRjcF9icGZfdXBkYXRlX3Byb3RvYAoqICAgYHRjcF9icGZfc3RycF9yZWFkX3NvY2tgCgpBcyBmb3IgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucywgaXQgbG9va3MgbGlrZSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX1NUUkVBTV9QQVJTRVJgIGFyZSBzdWZmaWNpZW50LiBgQ09ORklHX05FVF9TT0NLX01TR2AgYW5kIGBDT05GSUdfU1RSRUFNX1BBUlNFUmAgYXJlIHByb3Blcmx5IHNlbGVjdGVkIGJ5IHRob3NlLiBJIGRvbiYjMzk7dCBzZWUgYW55IG90aGVyIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4KCk15IGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGRpcmVjdGx5IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBpbiBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGtlcm5lbCYjMzk7cyBCUEYgbmV0d29ya2luZyBzdGFjay4gR29vZCBjYXRjaC4gTGV0JiMzOTtzIGdldCB0byB0ZXN0aW5nIGFuZCB2ZXJpZnkgdGhpcyBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfU1RSRUFNX1BBUlNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9nZXRfZnJvbV9mZCYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3VwZGF0ZV9wcm90byYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc29ja21hcCBpbmZyYXN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGhvdyBgc2tfZm9yd2FyZF9hbGxvY2AgbWVtb3J5IGFjY291bnRpbmcgaXMgaGFuZGxlZCB3aGVuIGEgc3RyZWFtIHBhcnNlciAoc3RycGFyc2VyKSBwcm9ncmFtIHJldHVybnMgYFNLX1BBU1NgIGFuZCB0aGUgc2tiIGlzIGRlbGl2ZXJlZCB0byB0aGUgc2FtZSBzb2NrZXQmIzM5O3MgaW5ncmVzcyBxdWV1ZS4gSXQgaW50cm9kdWNlcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gIHRvIHNldHRsZSBhbnkgZXhpc3RpbmcgYHNrX2ZvcndhcmRfYWxsb2NgIGRlZmljaXQgYmVmb3JlIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcCB0byB0aGUgc2tiLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc29ja21hcCBhbmQgc3RyZWFtIHBhcnNlcikgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG1lbW9yeSBhY2NvdW50aW5nIHJlbWFpbnMgY29ycmVjdCB1bmRlciB2YXJpb3VzIG5ldHdvcmsgY29uZGl0aW9ucyBhbmQgQlBGIHByb2dyYW0gYmVoYXZpb3JzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfU1RSRUFNX1BBUlNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9nZXRfZnJvbV9mZCYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3VwZGF0ZV9wcm90byYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc29ja21hcCBpbmZyYXN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGhvdyBgc2tfZm9yd2FyZF9hbGxvY2AgbWVtb3J5IGFjY291bnRpbmcgaXMgaGFuZGxlZCB3aGVuIGEgc3RyZWFtIHBhcnNlciAoc3RycGFyc2VyKSBwcm9ncmFtIHJldHVybnMgYFNLX1BBU1NgIGFuZCB0aGUgc2tiIGlzIGRlbGl2ZXJlZCB0byB0aGUgc2FtZSBzb2NrZXQmIzM5O3MgaW5ncmVzcyBxdWV1ZS4gSXQgaW50cm9kdWNlcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gIHRvIHNldHRsZSBhbnkgZXhpc3RpbmcgYHNrX2ZvcndhcmRfYWxsb2NgIGRlZmljaXQgYmVmb3JlIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcCB0byB0aGUgc2tiLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc29ja21hcCBhbmQgc3RyZWFtIHBhcnNlcikgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG1lbW9yeSBhY2NvdW50aW5nIHJlbWFpbnMgY29ycmVjdCB1bmRlciB2YXJpb3VzIG5ldHdvcmsgY29uZGl0aW9ucyBhbmQgQlBGIHByb2dyYW0gYmVoYXZpb3JzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBpc3N1ZSB3aXRoIHNvY2tldCBtZW1vcnkgYWNjb3VudGluZyAoYHNrX2ZvcndhcmRfYWxsb2NgKSB3aGVuIGFuIHNrYiBpcyBwYXNzZWQgdG8gdGhlIHNhbWUgc29ja2V0IHZpYSBCUEYgc3RyZWFtIHBhcnNlci92ZXJkaWN0LiBJdCBpbnRyb2R1Y2VzIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbmAgdG8gcHJvcGVybHkgaGFuZGxlIGBza19ybWVtX3NjaGVkdWxlYCBhbmQgYHNrYl9zZXRfb3duZXJfcmAuIFRoZSBjaGFuZ2VzIGludm9sdmUgbWVtb3J5IGFjY291bnRpbmcsIGxvY2tpbmcsIGFuZCBzYXZpbmcvcmVzdG9yaW5nIGBza2ItXHUwMDNlX3NrX3JlZGlyYC4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgbm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGNvbnRhaW4gdW5pbml0aWFsaXplZCBmaWVsZHMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgbG9naWMgZXJyb3JzLCBtZW1vcnkgbGVha3MsIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGIwZThjZjhiMzIxZGY4OGMwMjZkYWVhNTc2NDkxZmNhNWM3MzZlMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDE2OjQ0OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2ttc2cuYyBiL25ldC9jb3JlL3NrbXNnLmMKaW5kZXggMjUyMWI2NDNmYTA1ZC4uMzQ3Y2IxNjhmNzQ5MSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2ttc2cuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za21zZy5jCkBAIC01ODYsMjEgJiM0Mzs1ODYsMjQgQEAgc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsCiB9CiAKIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZik7CiYjNDM7CQkJCSAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZiwKJiM0MzsJCQkJICAgICBib29sIHNldHRsZV9md2RfYWxsb2MpOwomIzQzO3N0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHN0cnVjdCBza19wc29jayAqcHNvY2ssCiYjNDM7CQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCQkgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsCiYjNDM7CQkJCQkgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYyk7CiAKIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQl1MzIgb2ZmLCB1MzIgbGVuKQomIzQzOwkJCQl1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHNldHRsZV9md2RfYWxsb2MpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gcHNvY2stJmd0O3NrOwogCXN0cnVjdCBza19tc2cgKm1zZzsKIAlpbnQgZXJyOwogCi0JLyogSWYgd2UgYXJlIHJlY2VpdmluZyBvbiB0aGUgc2FtZSBzb2NrIHNrYi0mZ3Q7c2sgaXMgYWxyZWFkeSBhc3NpZ25lZCwKLQkgKiBza2lwIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBvd25lciB0cmFuc2l0aW9uIHNlZWluZyBpdCBhbHJlYWR5IHNldAotCSAqIGNvcnJlY3RseS4KLQkgKi8KIAlpZiAodW5saWtlbHkoc2tiLSZndDtzayA9PSBzaykpCi0JCXJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCB0cnVlKTsKJiM0MzsJCXJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2cocHNvY2ssIHNrYiwgb2ZmLAomIzQzOwkJCQkJCQkgbGVuLCB0cnVlLAomIzQzOwkJCQkJCQkgc2V0dGxlX2Z3ZF9hbGxvYyk7CiAJbXNnID0gc2tfcHNvY2tfY3JlYXRlX2luZ3Jlc3NfbXNnKHNrLCBza2IpOwogCWlmICghbXNnKQogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTYxOCwzNCAmIzQzOzYyMSwxMDAgQEAgc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXJldHVybiBlcnI7CiB9CiAKLS8qIFB1dHMgYW4gc2tiIG9uIHRoZSBpbmdyZXNzIHF1ZXVlIG9mIHRoZSBzb2NrZXQgYWxyZWFkeSBhc3NpZ25lZCB0byB0aGUKLSAqIHNrYi4gSW4gdGhpcyBjYXNlIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIG1lbW9yeSBsaW1pdHMgb3Igc2tiX3NldF9vd25lcl9yCi0gKiBiZWNhdXNlIHRoZSBza2IgaXMgYWxyZWFkeSBhY2NvdW50ZWQgZm9yIGhlcmUuCiYjNDM7c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbihzdHJ1Y3Qgc29jayAqc2ssCiYjNDM7CQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJCSAgICBib29sIHNldHRsZV9md2RfYWxsb2MpCiYjNDM7ewomIzQzOwkvKiBMZWF2ZSBza2JzIGFscmVhZHkgcmVjZWl2ZS1hY2NvdW50ZWQgdG8gc2sgdW50b3VjaGVkLiAqLwomIzQzOwlpZiAoc2tiLSZndDtzayA9PSBzayAmYW1wOyZhbXA7IHNrYi0mZ3Q7ZGVzdHJ1Y3RvciA9PSBzb2NrX3JmcmVlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChzZXR0bGVfZndkX2FsbG9jKSB7CiYjNDM7CQlzb2NrX293bmVkX2J5X21lKHNrKTsKJiM0MzsKJiM0MzsJCWlmICghc2tfcm1lbV9zY2hlZHVsZShzaywgc2tiLCAwKSkKJiM0MzsJCQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsJfQomIzQzOwomIzQzOwlza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBQdXRzIGFuIHNrYiBvbiB0aGUgaW5ncmVzcyBxdWV1ZSBmb3IgcHNvY2stJmd0O3NrLgomIzQzOyAqCiYjNDM7ICogSWYgdGhlIHNrYiBhbHJlYWR5IGhhcyByZWNlaXZlIG93bmVyc2hpcCBmb3IgdGhpcyBzb2NrZXQsIGxlYXZlIHNvY2tldAomIzQzOyAqIG1lbW9yeSBhY2NvdW50aW5nIHVudG91Y2hlZC4gT3RoZXJ3aXNlLCBiZWZvcmUgYXNzaWduaW5nIHJlY2VpdmUgb3duZXJzaGlwCiYjNDM7ICogdG8gYW4gdW5vd25lZCBzdHJwYXJzZXIgU0tfUEFTUyBza2IsIHNldHRsZSBhbnkgZXhpc3Rpbmcgc2tfZm9yd2FyZF9hbGxvYwomIzQzOyAqIGRlZmljaXQgZnJvbSBlYXJsaWVyIGNsb25lIGNoYXJnZXMuCiAgKi8KIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZikKJiM0MzsJCQkJICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLAomIzQzOwkJCQkgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYykKIHsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gcHNvY2stJmd0O3NrOwogCXN0cnVjdCBza19tc2cgKm1zZyA9IGFsbG9jX3NrX21zZyhHRlBfQVRPTUlDKTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KCFtc2cpKQomIzQzOwkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CiYjNDM7CWVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduKHNrLCBza2IsIHNldHRsZV9md2RfYWxsb2MpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBmcmVlOwomIzQzOwomIzQzOwkvKiBUaGlzIGlzIHVzZWQgaW4gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZQomIzQzOwkgKiBkYXRhIG9yaWdpbmF0ZXMgZnJvbSB0aGUgc29ja2V0JiMzOTtzIG93biBwcm90b2NvbCBzdGFjay4gTm8gbmVlZCB0bwomIzQzOwkgKiByZWZjb3VudCBzayBiZWNhdXNlIG1zZyYjMzk7cyBsaWZldGltZSBpcyBib3VuZCB0byBzayB2aWEgdGhlIGluZ3Jlc3NfbXNnLgomIzQzOwkgKi8KJiM0MzsJbXNnLSZndDtzayA9IHNrOwomIzQzOwllcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLAomIzQzOwkJCQkJICAgdGFrZV9yZWYpOwomIzQzOwlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCWdvdG8gZnJlZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0MztmcmVlOgomIzQzOwlrZnJlZShtc2cpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYmFja2xvZyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLAomIzQzOwkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkJICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLAomIzQzOwkJCQkJICAgICBib29sIHNldHRsZV9md2RfYWxsb2MpCiYjNDM7ewogCXN0cnVjdCBzb2NrICpzayA9IHBzb2NrLSZndDtzazsKJiM0MzsJc3RydWN0IHNrX21zZyAqbXNnID0gYWxsb2Nfc2tfbXNnKEdGUF9BVE9NSUMpOwogCWludCBlcnI7CiAKIAlpZiAodW5saWtlbHkoIW1zZykpCiAJCXJldHVybiAtRUFHQUlOOwotCXNrYl9zZXRfb3duZXJfcihza2IsIHNrKTsKJiM0MzsKJiM0MzsJbG9ja19zb2NrKHNrKTsKJiM0MzsJZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ24oc2ssIHNrYiwgc2V0dGxlX2Z3ZF9hbGxvYyk7CiYjNDM7CXJlbGVhc2Vfc29jayhzayk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGZyZWU7CiAKIAkvKiBUaGlzIGlzIHVzZWQgaW4gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZQogCSAqIGRhdGEgb3JpZ2luYXRlcyBmcm9tIHRoZSBzb2NrZXQmIzM5O3Mgb3duIHByb3RvY29sIHN0YWNrLiBObyBuZWVkIHRvCiAJICogcmVmY291bnQgc2sgYmVjYXVzZSBtc2cmIzM5O3MgbGlmZXRpbWUgaXMgYm91bmQgdG8gc2sgdmlhIHRoZSBpbmdyZXNzX21zZy4KIAkgKi8KIAltc2ctJmd0O3NrID0gc2s7Ci0JZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShza2IsIG9mZiwgbGVuLCBwc29jaywgc2ssIG1zZywgdGFrZV9yZWYpOwomIzQzOwllcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLAomIzQzOwkJCQkJICAgdGFrZV9yZWYpOwogCWlmIChlcnIgJmx0OyAwKQotCQlrZnJlZShtc2cpOwomIzQzOwkJZ290byBmcmVlOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO2ZyZWU6CiYjNDM7CWtmcmVlKG1zZyk7CiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBza19wc29ja19oYW5kbGVfc2tiKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCBpbmdyZXNzKQomIzQzOwkJCSAgICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIGluZ3Jlc3MsCiYjNDM7CQkJICAgICAgIGJvb2wgc2VsZl9wYXNzLCBib29sIHN0cnBhcnNlcikKIHsKIAlpZiAoIWluZ3Jlc3MpIHsKIAkJaWYgKCFzb2NrX3dyaXRlYWJsZShwc29jay0mZ3Q7c2spKQpAQCAtNjUzLDcgJiM0Mzs3MjIsMTEgQEAgc3RhdGljIGludCBza19wc29ja19oYW5kbGVfc2tiKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCXJldHVybiBza2Jfc2VuZF9zb2NrKHBzb2NrLSZndDtzaywgc2tiLCBvZmYsIGxlbik7CiAJfQogCi0JcmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHBzb2NrLCBza2IsIG9mZiwgbGVuKTsKJiM0MzsJaWYgKHNlbGZfcGFzcykKJiM0MzsJCXJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2cocHNvY2ssIHNrYiwgb2ZmLAomIzQzOwkJCQkJCQkgbGVuLCB0cnVlLCBzdHJwYXJzZXIpOwomIzQzOwomIzQzOwlyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3MocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHN0cnBhcnNlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHNrX3Bzb2NrX3NrYl9zdGF0ZShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLApAQCAtNjk0LDkgJiM0Mzs3NjcsMTQgQEAgc3RhdGljIHZvaWQgc2tfcHNvY2tfYmFja2xvZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCXJldHVybjsKIAltdXRleF9sb2NrKCZhbXA7cHNvY2stJmd0O3dvcmtfbXV0ZXgpOwogCXdoaWxlICgoc2tiID0gc2tiX3BlZWsoJmFtcDtwc29jay0mZ3Q7aW5ncmVzc19za2IpKSkgewomIzQzOwkJdW5zaWduZWQgbG9uZyBzYXZlZF9yZWRpcjsKJiM0MzsJCWJvb2wgc3RycGFyc2VyOwomIzQzOwkJYm9vbCBzZWxmX3Bhc3M7CiYjNDM7CiAJCWxlbiA9IHNrYi0mZ3Q7bGVuOwogCQlvZmYgPSAwOwotCQlpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkgewomIzQzOwkJc3RycGFyc2VyID0gc2tiX2JwZl9zdHJwYXJzZXIoc2tiKTsKJiM0MzsJCWlmIChzdHJwYXJzZXIpIHsKIAkJCXN0cnVjdCBzdHJwX21zZyAqc3RtID0gc3RycF9tc2coc2tiKTsKIAogCQkJb2ZmID0gc3RtLSZndDtvZmZzZXQ7CkBAIC03MTAsMTcgJiM0Mzs3ODgsMjAgQEAgc3RhdGljIHZvaWQgc2tfcHNvY2tfYmFja2xvZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCX0KIAogCQlpbmdyZXNzID0gc2tiX2JwZl9pbmdyZXNzKHNrYik7CiYjNDM7CQlzZWxmX3Bhc3MgPSBpbmdyZXNzICZhbXA7JmFtcDsgIXNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKTsKJiM0MzsJCXNhdmVkX3JlZGlyID0gc2tiLSZndDtfc2tfcmVkaXI7CiAJCXNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTsKIAkJZG8gewogCQkJcmV0ID0gLUVJTzsKIAkJCWlmICghc29ja19mbGFnKHBzb2NrLSZndDtzaywgU09DS19ERUFEKSkKIAkJCQlyZXQgPSBza19wc29ja19oYW5kbGVfc2tiKHBzb2NrLCBza2IsIG9mZiwKLQkJCQkJCQkgIGxlbiwgaW5ncmVzcyk7CiYjNDM7CQkJCQkJCSAgbGVuLCBpbmdyZXNzLAomIzQzOwkJCQkJCQkgIHNlbGZfcGFzcywgc3RycGFyc2VyKTsKIAkJCWlmIChyZXQgJmx0Oz0gMCkgewogCQkJCWlmIChyZXQgPT0gLUVBR0FJTikgewogCQkJCQlza19wc29ja19za2Jfc3RhdGUocHNvY2ssIHN0YXRlLCBsZW4sIG9mZik7CiAJCQkJCS8qIFJlc3RvcmUgcmVkaXIgaW5mbyB3ZSBjbGVhcmVkIGJlZm9yZSAqLwotCQkJCQlza2JfYnBmX3NldF9yZWRpcihza2IsIHBzb2NrLSZndDtzaywgaW5ncmVzcyk7CiYjNDM7CQkJCQlza2ItJmd0O19za19yZWRpciA9IHNhdmVkX3JlZGlyOwogCQkJCQkvKiBEZWxheSBzbGlnaHRseSB0byBwcmlvcml0aXplIGFueQogCQkJCQkgKiBvdGhlciB3b3JrIHRoYXQgbWlnaHQgYmUgaGVyZS4KIAkJCQkJICovCkBAIC0xMDE3LDYgJiM0MzsxMDk4LDggQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLgogCQkgKi8KIAkJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmYW1wO3Bzb2NrLSZndDtpbmdyZXNzX3NrYikpIHsKJiM0MzsJCQlib29sIHNldHRsZV9md2RfYWxsb2MgPSBmYWxzZTsKJiM0MzsKIAkJCWxlbiA9IHNrYi0mZ3Q7bGVuOwogCQkJb2ZmID0gMDsKIAkJCWlmIChza2JfYnBmX3N0cnBhcnNlcihza2IpKSB7CkBAIC0xMDI0LDggJiM0MzsxMTA3LDEwIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJCQkJb2ZmID0gc3RtLSZndDtvZmZzZXQ7CiAJCQkJbGVuID0gc3RtLSZndDtmdWxsX2xlbjsKJiM0MzsJCQkJc2V0dGxlX2Z3ZF9hbGxvYyA9IHRydWU7CiAJCQl9Ci0JCQllcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBmYWxzZSk7CiYjNDM7CQkJZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwKJiM0MzsJCQkJCQkJZmFsc2UsIHNldHRsZV9md2RfYWxsb2MpOwogCQl9CiAJCWlmIChlcnIgJmx0OyAwKSB7CiAJCQlzcGluX2xvY2tfYmgoJmFtcDtwc29jay0mZ3Q7aW5ncmVzc19sb2NrKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMKaW5kZXggMWQ3MjMxNzI4ZWFmZC4uYzdhZDIxZDBiYmY0OSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMKQEAgLTEsNSAmIzQzOzEsOSBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKICNpbmNsdWRlICZsdDtlcnJvci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbmV0X2RpYWcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0bGluay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ydG5ldGxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc29ja19kaWFnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0aW5ldC90Y3AuaCZndDsKICNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3NvY2ttYXBfaGVscGVycy5oJiMzNDsKQEAgLTQ2MCw2ICYjNDM7NDY0LDE3MSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KHZvaWQpCiAJdGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7CiB9CiAKJiM0MzsvKiBSZWFkIHNrX2ZvcndhcmRfYWxsb2MgdGhyb3VnaCBpbmV0X2RpYWcgbWVtaW5mby4gKi8KJiM0MztzdGF0aWMgaW50IHNvY2ttYXBfc3RycF9nZXRfZndkX2FsbG9jKGludCBzb2NrLCBpbnQgKmZ3ZF9hbGxvYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGxvY2FsID0ge30sIHBlZXIgPSB7fTsKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luICpsb2NhbF9pbiwgKnBlZXJfaW47CiYjNDM7CXNvY2tsZW5fdCBhZGRyX2xlbiA9IHNpemVvZihsb2NhbCk7CiYjNDM7CWNoYXIgYnVmWzEwMjRdOwomIzQzOwlzdHJ1Y3QgewomIzQzOwkJc3RydWN0IG5sbXNnaGRyIG5saDsKJiM0MzsJCXN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyIHJlcTsKJiM0MzsJfSByZXEgPSB7CiYjNDM7CQkubmxoID0gewomIzQzOwkJCS5ubG1zZ19sZW4gPSBzaXplb2YocmVxKSwKJiM0MzsJCQkubmxtc2dfdHlwZSA9IFNPQ0tfRElBR19CWV9GQU1JTFksCiYjNDM7CQkJLm5sbXNnX2ZsYWdzID0gTkxNX0ZfUkVRVUVTVCwKJiM0MzsJCQkubmxtc2dfc2VxID0gMSwKJiM0MzsJCX0sCiYjNDM7CQkucmVxID0gewomIzQzOwkJCS5zZGlhZ19mYW1pbHkgPSBBRl9JTkVULAomIzQzOwkJCS5zZGlhZ19wcm90b2NvbCA9IElQUFJPVE9fVENQLAomIzQzOwkJCS5pZGlhZ19leHQgPSAxICZsdDsmbHQ7IChJTkVUX0RJQUdfTUVNSU5GTyAtIDEpLAomIzQzOwkJCS5pZGlhZ19zdGF0ZXMgPSB+MFUsCiYjNDM7CQkJLmlkLmlkaWFnX2Nvb2tpZSA9IHsKJiM0MzsJCQkJSU5FVF9ESUFHX05PQ09PS0lFLAomIzQzOwkJCQlJTkVUX0RJQUdfTk9DT09LSUUsCiYjNDM7CQkJfSwKJiM0MzsJCX0sCiYjNDM7CX07CiYjNDM7CWludCBkaWFnX2ZkLCByZXQsIGVyciA9IC1FTk9FTlQ7CiYjNDM7CiYjNDM7CWlmIChnZXRzb2NrbmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDtsb2NhbCwgJmFtcDthZGRyX2xlbikpCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwlhZGRyX2xlbiA9IHNpemVvZihwZWVyKTsKJiM0MzsJaWYgKGdldHBlZXJuYW1lKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYW1wO3BlZXIsICZhbXA7YWRkcl9sZW4pKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsKJiM0MzsJbG9jYWxfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopJmFtcDtsb2NhbDsKJiM0MzsJcGVlcl9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmYW1wO3BlZXI7CiYjNDM7CXJlcS5yZXEuaWQuaWRpYWdfc3BvcnQgPSBsb2NhbF9pbi0mZ3Q7c2luX3BvcnQ7CiYjNDM7CXJlcS5yZXEuaWQuaWRpYWdfZHBvcnQgPSBwZWVyX2luLSZndDtzaW5fcG9ydDsKJiM0MzsJcmVxLnJlcS5pZC5pZGlhZ19zcmNbMF0gPSBsb2NhbF9pbi0mZ3Q7c2luX2FkZHIuc19hZGRyOwomIzQzOwlyZXEucmVxLmlkLmlkaWFnX2RzdFswXSA9IHBlZXJfaW4tJmd0O3Npbl9hZGRyLnNfYWRkcjsKJiM0MzsKJiM0MzsJZGlhZ19mZCA9IHNvY2tldChBRl9ORVRMSU5LLCBTT0NLX1JBVyB8IFNPQ0tfQ0xPRVhFQywKJiM0MzsJCQkgTkVUTElOS19TT0NLX0RJQUcpOwomIzQzOwlpZiAoZGlhZ19mZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwomIzQzOwlyZXQgPSBzZW5kKGRpYWdfZmQsICZhbXA7cmVxLCBzaXplb2YocmVxKSwgMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQllcnIgPSAtZXJybm87CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwlpZiAocmV0ICE9IHNpemVvZihyZXEpKSB7CiYjNDM7CQllcnIgPSAtRUlPOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gcmVjdihkaWFnX2ZkLCBidWYsIHNpemVvZihidWYpLCAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCWVyciA9IC1lcnJubzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoc3RydWN0IG5sbXNnaGRyICpubGggPSAoc3RydWN0IG5sbXNnaGRyICopYnVmOwomIzQzOwkgICAgIE5MTVNHX09LKG5saCwgcmV0KTsgbmxoID0gTkxNU0dfTkVYVChubGgsIHJldCkpIHsKJiM0MzsJCXN0cnVjdCBpbmV0X2RpYWdfbXNnICptc2cgPSBOTE1TR19EQVRBKG5saCk7CiYjNDM7CQlzdHJ1Y3QgcnRhdHRyICphdHRyOwomIzQzOwkJaW50IGxlbjsKJiM0MzsKJiM0MzsJCWlmIChubGgtJmd0O25sbXNnX3R5cGUgPT0gTkxNU0dfRVJST1IpIHsKJiM0MzsJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwkJaWYgKG5saC0mZ3Q7bmxtc2dfdHlwZSA9PSBOTE1TR19ET05FKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJbGVuID0gbmxoLSZndDtubG1zZ19sZW4gLSBOTE1TR19MRU5HVEgoc2l6ZW9mKCptc2cpKTsKJiM0MzsJCWZvciAoYXR0ciA9IChzdHJ1Y3QgcnRhdHRyICopKG1zZyAmIzQzOyAxKTsgUlRBX09LKGF0dHIsIGxlbik7CiYjNDM7CQkgICAgIGF0dHIgPSBSVEFfTkVYVChhdHRyLCBsZW4pKSB7CiYjNDM7CQkJc3RydWN0IGluZXRfZGlhZ19tZW1pbmZvICptaW5mbzsKJiM0MzsKJiM0MzsJCQlpZiAoYXR0ci0mZ3Q7cnRhX3R5cGUgIT0gSU5FVF9ESUFHX01FTUlORk8pCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCW1pbmZvID0gUlRBX0RBVEEoYXR0cik7CiYjNDM7CQkJKmZ3ZF9hbGxvYyA9IChfX3MzMiltaW5mby0mZ3Q7aWRpYWdfZm1lbTsKJiM0MzsJCQllcnIgPSAwOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7b3V0OgomIzQzOwljbG9zZShkaWFnX2ZkKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGVzdCBzdHJwYXJzZXIgU0tfUEFTUyBkZWxpdmVyeSB0byB0aGUgc2FtZSBzb2NrZXQuICovCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnBfc2VsZl9wYXNzX2Z3ZF9hbGxvYyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHRlc3Rfc29ja21hcF9zdHJwICpzdHJwID0gTlVMTDsKJiM0MzsJY2hhciBzbmRbNCAqIDEwMjRdOwomIzQzOwlpbnQgYyA9IC0xLCBwID0gLTE7CiYjNDM7CWludCBmd2RfYWxsb2M7CiYjNDM7CWludCBzbmRidWYgPSBzaXplb2Yoc25kKTsKJiM0MzsJaW50IHplcm8gPSAwOwomIzQzOwljaGFyIHJjdjsKJiM0MzsJaW50IHNlbnQsIHJlY3ZkOwomIzQzOwlpbnQgbWFwOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwltZW1zZXQoc25kLCAweGE1LCBzaXplb2Yoc25kKSk7CiYjNDM7CiYjNDM7CXN0cnAgPSB0ZXN0X3NvY2ttYXBfc3RycF9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc3RycCwgJiMzNDt0ZXN0X3NvY2ttYXBfc3RycF9fb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbWFwID0gYnBmX21hcF9fZmQoc3RycC0mZ3Q7bWFwcy5zb2NrX21hcCk7CiYjNDM7CWVyciA9IHhicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHN0cnAtJmd0O3Byb2dzLnByb2dfc2tiX3BhcnNlcl9vbmUpLAomIzQzOwkJCSAgICAgICBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIG91dF9kZXN0cm95OwomIzQzOwomIzQzOwllcnIgPSB4YnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChzdHJwLSZndDtwcm9ncy5wcm9nX3NrYl92ZXJkaWN0X3Bhc3MpLAomIzQzOwkJCSAgICAgICBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QsIDApOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJZXJyID0gY3JlYXRlX3BhaXIoQUZfSU5FVCwgU09DS19TVFJFQU0sICZhbXA7YywgJmFtcDtwKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2NyZWF0ZV9wYWlyJiMzNDspKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJZXJyID0geHNldHNvY2tvcHQoYywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCAmYW1wO3NuZGJ1Ziwgc2l6ZW9mKHNuZGJ1ZikpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJZXJyID0geHNldHNvY2tvcHQocCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmYW1wO3NuZGJ1Ziwgc2l6ZW9mKHNuZGJ1ZikpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJZXJyID0geGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwLCAmYW1wO3plcm8sICZhbXA7cCwgQlBGX05PRVhJU1QpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJc2VudCA9IHNlbmQoYywgc25kLCBzaXplb2Yoc25kKSwgTVNHX0RPTlRXQUlUKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoc2VudCwgc2l6ZW9mKHNuZCksICYjMzQ7c2VuZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2Rlc3Ryb3k7CiYjNDM7CiYjNDM7CXJlY3ZkID0gcmVjdl90aW1lb3V0KHAsICZhbXA7cmN2LCBzaXplb2YocmN2KSwgTVNHX0RPTlRXQUlULAomIzQzOwkJCSAgICAgSU9fVElNRU9VVF9TRUMpOwomIzQzOwlpZiAoIUFTU0VSVF9FUShyZWN2ZCwgc2l6ZW9mKHJjdiksICYjMzQ7cmVjdl90aW1lb3V0JiMzNDspIHx8CiYjNDM7CSAgICAhQVNTRVJUX0VRKHJjdiwgc25kWzBdLCAmIzM0O2RhdGEgbWlzbWF0Y2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXN0cm95OwomIzQzOwomIzQzOwllcnIgPSBzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvYyhwLCAmYW1wO2Z3ZF9hbGxvYyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvYyYjMzQ7KSB8fAomIzQzOwkgICAgIUFTU0VSVF9HRShmd2RfYWxsb2MsIDAsICYjMzQ7c2tfZm9yd2FyZF9hbGxvYyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2Rlc3Ryb3k7CiYjNDM7b3V0X2Rlc3Ryb3k6CiYjNDM7CXRlc3Rfc29ja21hcF9zdHJwX19kZXN0cm95KHN0cnApOwomIzQzOwlpZiAoYyAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoYyk7CiYjNDM7CWlmIChwICZndDs9IDApCiYjNDM7CQljbG9zZShwKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHRlc3Rfc29ja21hcF9zdHJwKHZvaWQpCiB7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzb2NrbWFwIHN0cnAgdGNwIHBhc3MmIzM0OykpCkBAIC00ODIsNCAmIzQzOzY1MSw2IEBAIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnAodm9pZCkKIAkJdGVzdF9zb2NrbWFwX3N0cnBfZGlzcGF0Y2hfcGt0KEFGX0lORVQsIFNPQ0tfU1RSRUFNKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3NvY2ttYXAgc3RycCBwYXJzZXIgcmVqZWN0IHBrdCBtb2QmIzM0OykpCiAJCXRlc3Rfc29ja21hcF9zdHJwX3BhcnNlcl9yZWplY3QoKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzb2NrbWFwIHN0cnAgc2VsZiBwYXNzIGZ3ZCBhbGxvYyYjMzQ7KSkKJiM0MzsJCXRlc3Rfc29ja21hcF9zdHJwX3NlbGZfcGFzc19md2RfYWxsb2MoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMKaW5kZXggZmU4OGZhNmQ0MGJjNS4uNjgyZTUzZDQwNzUxYyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMKQEAgLTUwLDYgJiM0Mzs1MCwxMiBAQCBpbnQgcHJvZ19za2JfcGFyc2VyX3BhcnRpYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogCXJldHVybiAxMDsKIH0KIAomIzQzO1NFQygmIzM0O3NrX3NrYi9zdHJlYW1fcGFyc2VyJiMzNDspCiYjNDM7aW50IHByb2dfc2tiX3BhcnNlcl9vbmUoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJcmV0dXJuIDE7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7c2tfc2tiL3N0cmVhbV9wYXJzZXImIzM0OykKIGludCBwcm9nX3NrYl9wYXJzZXJfcmVzaXplKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE2OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNzgKCQkJCQkJCW91dHB1dDogMjA2CgkJCQkJCQl0aG91Z2h0czogMTU1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBTS01TRyBDaGFuZ2VzIGZvciBTb2NrZXQgTWVtb3J5IEFjY291bnRpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCwgdG91Y2hpbmcgYG5ldC9jb3JlL3NrbXNnLmNgIGFuZCBhZGRpbmcgYSB0ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY2AsIGlzIGxpa2VseSAqbm90KiBhIEtNU0FOIGNvbmNlcm4uIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHNlZW0gdG8gcmV2b2x2ZSBhcm91bmQgY29ycmVjdGluZyBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBza19mb3J3YXJkX2FsbG9jYCwgd2hlbiBhbiBgc2tiYCBpcyByb3V0ZWQgYmFjayB0byB0aGUgc2FtZSBzb2NrZXQgdmlhIEJQRiBzdHJlYW0gcGFyc2luZy4gVGhpcyBpbnZvbHZlcyBtb2RpZmljYXRpb25zIHRvIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYmFja2xvZ2AsIGFuZCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gLgoKTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhIEtNU0FOIGV4cGVydCwgaXMgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IHJpc2tzIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3MgZGlnIGluOiBUaGUgaW50cm9kdWN0aW9uIG9mIGBzZXR0bGVfZndkX2FsbG9jYCBhbmQgdGhlIGNhbGxzIHRvIGBza19ybWVtX3NjaGVkdWxlKHNrLCBza2IsIDApYCBhbmQgYHNrYl9zZXRfb3duZXJfcihza2IsIHNrKWAgYXJlIHB1cmVseSBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCBvbiB0aGUgKnJlY2VpdmluZyogc2lkZSwgbm90aGluZyB0aGF0IHRvdWNoZXMgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIGEgYnVnIG9yIHBvdGVudGlhbCBsZWFrIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IGFjY291bnRpbmcsIHBvc3NpYmx5IHJlc3VsdGluZyBpbiBuZWdhdGl2ZSB2YWx1ZXMgZm9yIGBza19mb3J3YXJkX2FsbG9jYC4gVGhhdCYjMzk7cyBub3QgdGhlIHNhbWUgYXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnLiBJdCYjMzk7cyBtb3JlIG9mIGEgbG9naWMgZXJyb3IgdGhhdCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBsZWFrcyBvciwgcG90ZW50aWFsbHksIG90aGVyIG1lbW9yeS1yZWxhdGVkIGVycm9ycywgYnV0IG5vdCBkaXJlY3RseSBLTVNBTi1yZWxhdGVkLgoKUmV2aWV3aW5nIHRoZSBjb2RlIHNuaXBwZXRzLCB0aGUgYWRkaXRpb24gb2YgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduYCBpcyBzb2xlbHkgZm9yIHRoZSBwdXJwb3NlIG9mIG1hbmFnaW5nIG1lbW9yeSBvd25lcnNoaXAgYW5kIGFjY291bnRpbmcuIEkgc2VlIG5vIGFsbG9jYXRpb24gb2YgbmV3LCBjb21wbGV4IHN0cnVjdHVyZXMsIG5vciBhbnkgbWFuaXB1bGF0aW9uIG9mIGV4aXN0aW5nIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBsZWF2ZSBmaWVsZHMgdW5pbml0aWFsaXplZC4gVGhlIGNoYW5nZXMgYWxzbyBpbmNsdWRlIHNhdmluZyBhbmQgcmVzdG9yaW5nIHRoZSBgc2tiLSZndDtfc2tfcmVkaXJgIGZpZWxkLCBidXQgdGhpcyBmaWVsZCBpcyBpbml0aWFsaXplZCBlaXRoZXIgd2hlbiB0aGUgYHNrYmAgaXMgYWxsb2NhdGVkLCBvciBjbGVhcmVkIGJ5IHRoZSBrZXJuZWwuIFRoZXJlJiMzOTtzIG5vIHNjZW5hcmlvIGhlcmUgdGhhdCByaXNrcyBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZSB0ZXN0IGFkZGVkIGFwcGVhcnMgdG8gdmVyaWZ5IHRoZSBzb2NrZXQgbWVtb3J5IGluZm9ybWF0aW9uIHVzaW5nIGBpbmV0X2RpYWdfcmVxX3YyYCwgYnV0IHRoaXMgaXMgc2ltcGx5IGEgdGVzdCBhbmQgZG9lcyBub3QgY3JlYXRlIGFuIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlIGNvcmUgZnVuY3Rpb25zIOKAkyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAsIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2dgLCBhbmQgdGhlIG5ldyBmdW5jdGlvbiBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gIOKAkyBhcmUgYWxsIGZvY3VzZWQgb24gbWVtb3J5IGFjY291bnRpbmcuIFRoZXkgaW52b2x2ZSBsb2NraW5nLCBvd25lcnNoaXAgbWFuYWdlbWVudCwgYW5kIHNjaGVkdWxpbmcgcmVjZWl2ZSBtZW1vcnkuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCBhIGBOZWVkc0tNU0FOYCB0YWcgaXMgKm5vdCogYXBwcm9wcmlhdGUgaGVyZS4gV2hpbGUgYSBidWcgaW4gdGhlc2UgY2hhbmdlcyAqY291bGQqIGxlYWQgdG8gbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlLCB0aG9zZSBhcmUgYWxyZWFkeSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlIGludHJvZHVjZWQgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIHBhdGhzLCBib3VuZHMtY2hlY2sgY2hhbmdlcyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBhbnkgdXNlciBzcGFjZSBkYXRhIHN0cnVjdHVyZXMgd2l0aCBmaWVsZHMgdGhhdCBjb3VsZCBjb250YWluIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBUaGlzIGlzIHN0cmljdGx5IGxvZ2ljIGZvciBzb2NrZXQgYWNjb3VudGluZzsgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSBpbiB0aGlzIGluc3RhbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4gaXNzdWUgd2l0aCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcgKGBza19mb3J3YXJkX2FsbG9jYCkgd2hlbiBhbiBza2IgaXMgcGFzc2VkIHRvIHRoZSBzYW1lIHNvY2tldCB2aWEgQlBGIHN0cmVhbSBwYXJzZXIvdmVyZGljdC4gSXQgaW50cm9kdWNlcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gIHRvIHByb3Blcmx5IGhhbmRsZSBgc2tfcm1lbV9zY2hlZHVsZWAgYW5kIGBza2Jfc2V0X293bmVyX3JgLiBUaGUgY2hhbmdlcyBpbnZvbHZlIG1lbW9yeSBhY2NvdW50aW5nLCBsb2NraW5nLCBhbmQgc2F2aW5nL3Jlc3RvcmluZyBgc2tiLVx1MDAzZV9za19yZWRpcmAuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBjb250YWluIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGxvZ2ljIGVycm9ycywgbWVtb3J5IGxlYWtzLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4gaXNzdWUgd2l0aCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcgKGBza19mb3J3YXJkX2FsbG9jYCkgd2hlbiBhbiBza2IgaXMgcGFzc2VkIHRvIHRoZSBzYW1lIHNvY2tldCB2aWEgQlBGIHN0cmVhbSBwYXJzZXIvdmVyZGljdC4gSXQgaW50cm9kdWNlcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gIHRvIHByb3Blcmx5IGhhbmRsZSBgc2tfcm1lbV9zY2hlZHVsZWAgYW5kIGBza2Jfc2V0X293bmVyX3JgLiBUaGUgY2hhbmdlcyBpbnZvbHZlIG1lbW9yeSBhY2NvdW50aW5nLCBsb2NraW5nLCBhbmQgc2F2aW5nL3Jlc3RvcmluZyBgc2tiLVx1MDAzZV9za19yZWRpcmAuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBjb250YWluIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGxvZ2ljIGVycm9ycywgbWVtb3J5IGxlYWtzLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ0OjE1LjE2ODU3ODMzM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzYzNjUyNDA2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNcIixcbiAgICBcInNvY2tfbWFwX2dldF9mcm9tX2ZkXCIsXG4gICAgXCJ0Y3BfYnBmX3VwZGF0ZV9wcm90b1wiLFxuICAgIFwidGNwX2JwZl9zdHJwX3JlYWRfc29ja1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGlzc3VlIHdpdGggc29ja2V0IG1lbW9yeSBhY2NvdW50aW5nIChgc2tfZm9yd2FyZF9hbGxvY2ApIHdoZW4gYW4gc2tiIGlzIHBhc3NlZCB0byB0aGUgc2FtZSBzb2NrZXQgdmlhIEJQRiBzdHJlYW0gcGFyc2VyL3ZlcmRpY3QuIEl0IGludHJvZHVjZXMgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduYCB0byBwcm9wZXJseSBoYW5kbGUgYHNrX3JtZW1fc2NoZWR1bGVgIGFuZCBgc2tiX3NldF9vd25lcl9yYC4gVGhlIGNoYW5nZXMgaW52b2x2ZSBtZW1vcnkgYWNjb3VudGluZywgbG9ja2luZywgYW5kIHNhdmluZy9yZXN0b3JpbmcgYHNrYi1cXHUwMDNlX3NrX3JlZGlyYC4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgbm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGNvbnRhaW4gdW5pbml0aWFsaXplZCBmaWVsZHMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgbG9naWMgZXJyb3JzLCBtZW1vcnkgbGVha3MsIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHNvY2ttYXAgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBob3cgYHNrX2ZvcndhcmRfYWxsb2NgIG1lbW9yeSBhY2NvdW50aW5nIGlzIGhhbmRsZWQgd2hlbiBhIHN0cmVhbSBwYXJzZXIgKHN0cnBhcnNlcikgcHJvZ3JhbSByZXR1cm5zIGBTS19QQVNTYCBhbmQgdGhlIHNrYiBpcyBkZWxpdmVyZWQgdG8gdGhlIHNhbWUgc29ja2V0J3MgaW5ncmVzcyBxdWV1ZS4gSXQgaW50cm9kdWNlcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gIHRvIHNldHRsZSBhbnkgZXhpc3RpbmcgYHNrX2ZvcndhcmRfYWxsb2NgIGRlZmljaXQgYmVmb3JlIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcCB0byB0aGUgc2tiLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc29ja21hcCBhbmQgc3RyZWFtIHBhcnNlcikgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG1lbW9yeSBhY2NvdW50aW5nIHJlbWFpbnMgY29ycmVjdCB1bmRlciB2YXJpb3VzIG5ldHdvcmsgY29uZGl0aW9ucyBhbmQgQlBGIHByb2dyYW0gYmVoYXZpb3JzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NDoxNS4xNjg1ODI5OTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMjA4Njc4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBiMGU4Y2Y4YjMyMWRmODhjMDI2ZGFlYTU3NjQ5MWZjYTVjNzM2ZTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTY6NDQ6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2ttc2cuYyBiL25ldC9jb3JlL3NrbXNnLmNcXG5pbmRleCAyNTIxYjY0M2ZhMDVkLi4zNDdjYjE2OGY3NDkxIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3NrbXNnLmNcXG4rKysgYi9uZXQvY29yZS9za21zZy5jXFxuQEAgLTU4NiwyMSArNTg2LDI0IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmKTtcXG4rXFx0XFx0XFx0XFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxcbitcXHRcXHRcXHRcXHQgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYyk7XFxuK3N0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYyk7XFxuIFxcbiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLVxcdFxcdFxcdFxcdHUzMiBvZmYsIHUzMiBsZW4pXFxuK1xcdFxcdFxcdFxcdHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYylcXG4ge1xcbiBcXHRzdHJ1Y3Qgc29jayAqc2sgPSBwc29jay1cXHUwMDNlc2s7XFxuIFxcdHN0cnVjdCBza19tc2cgKm1zZztcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdC8qIElmIHdlIGFyZSByZWNlaXZpbmcgb24gdGhlIHNhbWUgc29jayBza2ItXFx1MDAzZXNrIGlzIGFscmVhZHkgYXNzaWduZWQsXFxuLVxcdCAqIHNraXAgbWVtb3J5IGFjY291bnRpbmcgYW5kIG93bmVyIHRyYW5zaXRpb24gc2VlaW5nIGl0IGFscmVhZHkgc2V0XFxuLVxcdCAqIGNvcnJlY3RseS5cXG4tXFx0ICovXFxuIFxcdGlmICh1bmxpa2VseShza2ItXFx1MDAzZXNrID09IHNrKSlcXG4tXFx0XFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHRydWUpO1xcbitcXHRcXHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHBzb2NrLCBza2IsIG9mZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGxlbiwgdHJ1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHNldHRsZV9md2RfYWxsb2MpO1xcbiBcXHRtc2cgPSBza19wc29ja19jcmVhdGVfaW5ncmVzc19tc2coc2ssIHNrYik7XFxuIFxcdGlmICghbXNnKVxcbiBcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG5AQCAtNjE4LDM0ICs2MjEsMTAwIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tLyogUHV0cyBhbiBza2Igb24gdGhlIGluZ3Jlc3MgcXVldWUgb2YgdGhlIHNvY2tldCBhbHJlYWR5IGFzc2lnbmVkIHRvIHRoZVxcbi0gKiBza2IuIEluIHRoaXMgY2FzZSB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBtZW1vcnkgbGltaXRzIG9yIHNrYl9zZXRfb3duZXJfclxcbi0gKiBiZWNhdXNlIHRoZSBza2IgaXMgYWxyZWFkeSBhY2NvdW50ZWQgZm9yIGhlcmUuXFxuK3N0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ24oc3RydWN0IHNvY2sgKnNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYylcXG4re1xcbitcXHQvKiBMZWF2ZSBza2JzIGFscmVhZHkgcmVjZWl2ZS1hY2NvdW50ZWQgdG8gc2sgdW50b3VjaGVkLiAqL1xcbitcXHRpZiAoc2tiLVxcdTAwM2VzayA9PSBzayBcXHUwMDI2XFx1MDAyNiBza2ItXFx1MDAzZWRlc3RydWN0b3IgPT0gc29ja19yZnJlZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoc2V0dGxlX2Z3ZF9hbGxvYykge1xcbitcXHRcXHRzb2NrX293bmVkX2J5X21lKHNrKTtcXG4rXFxuK1xcdFxcdGlmICghc2tfcm1lbV9zY2hlZHVsZShzaywgc2tiLCAwKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcdH1cXG4rXFxuK1xcdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIFB1dHMgYW4gc2tiIG9uIHRoZSBpbmdyZXNzIHF1ZXVlIGZvciBwc29jay1cXHUwMDNlc2suXFxuKyAqXFxuKyAqIElmIHRoZSBza2IgYWxyZWFkeSBoYXMgcmVjZWl2ZSBvd25lcnNoaXAgZm9yIHRoaXMgc29ja2V0LCBsZWF2ZSBzb2NrZXRcXG4rICogbWVtb3J5IGFjY291bnRpbmcgdW50b3VjaGVkLiBPdGhlcndpc2UsIGJlZm9yZSBhc3NpZ25pbmcgcmVjZWl2ZSBvd25lcnNoaXBcXG4rICogdG8gYW4gdW5vd25lZCBzdHJwYXJzZXIgU0tfUEFTUyBza2IsIHNldHRsZSBhbnkgZXhpc3Rpbmcgc2tfZm9yd2FyZF9hbGxvY1xcbisgKiBkZWZpY2l0IGZyb20gZWFybGllciBjbG9uZSBjaGFyZ2VzLlxcbiAgKi9cXG4gc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLVxcdFxcdFxcdFxcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZilcXG4rXFx0XFx0XFx0XFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxcbitcXHRcXHRcXHRcXHQgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYylcXG4ge1xcbitcXHRzdHJ1Y3Qgc29jayAqc2sgPSBwc29jay1cXHUwMDNlc2s7XFxuIFxcdHN0cnVjdCBza19tc2cgKm1zZyA9IGFsbG9jX3NrX21zZyhHRlBfQVRPTUlDKTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmICh1bmxpa2VseSghbXNnKSlcXG4rXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcbitcXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbihzaywgc2tiLCBzZXR0bGVfZndkX2FsbG9jKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBmcmVlO1xcbitcXG4rXFx0LyogVGhpcyBpcyB1c2VkIGluIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVcXG4rXFx0ICogZGF0YSBvcmlnaW5hdGVzIGZyb20gdGhlIHNvY2tldCdzIG93biBwcm90b2NvbCBzdGFjay4gTm8gbmVlZCB0b1xcbitcXHQgKiByZWZjb3VudCBzayBiZWNhdXNlIG1zZydzIGxpZmV0aW1lIGlzIGJvdW5kIHRvIHNrIHZpYSB0aGUgaW5ncmVzc19tc2cuXFxuK1xcdCAqL1xcbitcXHRtc2ctXFx1MDAzZXNrID0gc2s7XFxuK1xcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc2tiLCBvZmYsIGxlbiwgcHNvY2ssIHNrLCBtc2csXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHRha2VfcmVmKTtcXG4rXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZnJlZTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK2ZyZWU6XFxuK1xcdGtmcmVlKG1zZyk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYylcXG4re1xcbiBcXHRzdHJ1Y3Qgc29jayAqc2sgPSBwc29jay1cXHUwMDNlc2s7XFxuK1xcdHN0cnVjdCBza19tc2cgKm1zZyA9IGFsbG9jX3NrX21zZyhHRlBfQVRPTUlDKTtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGlmICh1bmxpa2VseSghbXNnKSlcXG4gXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuLVxcdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcXG4rXFxuK1xcdGxvY2tfc29jayhzayk7XFxuK1xcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduKHNrLCBza2IsIHNldHRsZV9md2RfYWxsb2MpO1xcbitcXHRyZWxlYXNlX3NvY2soc2spO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGZyZWU7XFxuIFxcbiBcXHQvKiBUaGlzIGlzIHVzZWQgaW4gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZVxcbiBcXHQgKiBkYXRhIG9yaWdpbmF0ZXMgZnJvbSB0aGUgc29ja2V0J3Mgb3duIHByb3RvY29sIHN0YWNrLiBObyBuZWVkIHRvXFxuIFxcdCAqIHJlZmNvdW50IHNrIGJlY2F1c2UgbXNnJ3MgbGlmZXRpbWUgaXMgYm91bmQgdG8gc2sgdmlhIHRoZSBpbmdyZXNzX21zZy5cXG4gXFx0ICovXFxuIFxcdG1zZy1cXHUwMDNlc2sgPSBzaztcXG4tXFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShza2IsIG9mZiwgbGVuLCBwc29jaywgc2ssIG1zZywgdGFrZV9yZWYpO1xcbitcXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLFxcbitcXHRcXHRcXHRcXHRcXHQgICB0YWtlX3JlZik7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi1cXHRcXHRrZnJlZShtc2cpO1xcbitcXHRcXHRnb3RvIGZyZWU7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbitmcmVlOlxcbitcXHRrZnJlZShtc2cpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHNrX3Bzb2NrX2hhbmRsZV9za2Ioc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0ICAgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgaW5ncmVzcylcXG4rXFx0XFx0XFx0ICAgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgaW5ncmVzcyxcXG4rXFx0XFx0XFx0ICAgICAgIGJvb2wgc2VsZl9wYXNzLCBib29sIHN0cnBhcnNlcilcXG4ge1xcbiBcXHRpZiAoIWluZ3Jlc3MpIHtcXG4gXFx0XFx0aWYgKCFzb2NrX3dyaXRlYWJsZShwc29jay1cXHUwMDNlc2spKVxcbkBAIC02NTMsNyArNzIyLDExIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfaGFuZGxlX3NrYihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRyZXR1cm4gc2tiX3NlbmRfc29jayhwc29jay1cXHUwMDNlc2ssIHNrYiwgb2ZmLCBsZW4pO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3MocHNvY2ssIHNrYiwgb2ZmLCBsZW4pO1xcbitcXHRpZiAoc2VsZl9wYXNzKVxcbitcXHRcXHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHBzb2NrLCBza2IsIG9mZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGxlbiwgdHJ1ZSwgc3RycGFyc2VyKTtcXG4rXFxuK1xcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzcyhwc29jaywgc2tiLCBvZmYsIGxlbiwgc3RycGFyc2VyKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgc2tfcHNvY2tfc2tiX3N0YXRlKHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuQEAgLTY5NCw5ICs3NjcsMTQgQEAgc3RhdGljIHZvaWQgc2tfcHNvY2tfYmFja2xvZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHNvY2stXFx1MDAzZXdvcmtfbXV0ZXgpO1xcbiBcXHR3aGlsZSAoKHNrYiA9IHNrYl9wZWVrKFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19za2IpKSkge1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIHNhdmVkX3JlZGlyO1xcbitcXHRcXHRib29sIHN0cnBhcnNlcjtcXG4rXFx0XFx0Ym9vbCBzZWxmX3Bhc3M7XFxuK1xcbiBcXHRcXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4gXFx0XFx0b2ZmID0gMDtcXG4tXFx0XFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcXG4rXFx0XFx0c3RycGFyc2VyID0gc2tiX2JwZl9zdHJwYXJzZXIoc2tiKTtcXG4rXFx0XFx0aWYgKHN0cnBhcnNlcikge1xcbiBcXHRcXHRcXHRzdHJ1Y3Qgc3RycF9tc2cgKnN0bSA9IHN0cnBfbXNnKHNrYik7XFxuIFxcbiBcXHRcXHRcXHRvZmYgPSBzdG0tXFx1MDAzZW9mZnNldDtcXG5AQCAtNzEwLDE3ICs3ODgsMjAgQEAgc3RhdGljIHZvaWQgc2tfcHNvY2tfYmFja2xvZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGluZ3Jlc3MgPSBza2JfYnBmX2luZ3Jlc3Moc2tiKTtcXG4rXFx0XFx0c2VsZl9wYXNzID0gaW5ncmVzcyBcXHUwMDI2XFx1MDAyNiAhc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpO1xcbitcXHRcXHRzYXZlZF9yZWRpciA9IHNrYi1cXHUwMDNlX3NrX3JlZGlyO1xcbiBcXHRcXHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XFxuIFxcdFxcdGRvIHtcXG4gXFx0XFx0XFx0cmV0ID0gLUVJTztcXG4gXFx0XFx0XFx0aWYgKCFzb2NrX2ZsYWcocHNvY2stXFx1MDAzZXNrLCBTT0NLX0RFQUQpKVxcbiBcXHRcXHRcXHRcXHRyZXQgPSBza19wc29ja19oYW5kbGVfc2tiKHBzb2NrLCBza2IsIG9mZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBsZW4sIGluZ3Jlc3MpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGxlbiwgaW5ncmVzcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBzZWxmX3Bhc3MsIHN0cnBhcnNlcik7XFxuIFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYz0gMCkge1xcbiBcXHRcXHRcXHRcXHRpZiAocmV0ID09IC1FQUdBSU4pIHtcXG4gXFx0XFx0XFx0XFx0XFx0c2tfcHNvY2tfc2tiX3N0YXRlKHBzb2NrLCBzdGF0ZSwgbGVuLCBvZmYpO1xcbiBcXHRcXHRcXHRcXHRcXHQvKiBSZXN0b3JlIHJlZGlyIGluZm8gd2UgY2xlYXJlZCBiZWZvcmUgKi9cXG4tXFx0XFx0XFx0XFx0XFx0c2tiX2JwZl9zZXRfcmVkaXIoc2tiLCBwc29jay1cXHUwMDNlc2ssIGluZ3Jlc3MpO1xcbitcXHRcXHRcXHRcXHRcXHRza2ItXFx1MDAzZV9za19yZWRpciA9IHNhdmVkX3JlZGlyO1xcbiBcXHRcXHRcXHRcXHRcXHQvKiBEZWxheSBzbGlnaHRseSB0byBwcmlvcml0aXplIGFueVxcbiBcXHRcXHRcXHRcXHRcXHQgKiBvdGhlciB3b3JrIHRoYXQgbWlnaHQgYmUgaGVyZS5cXG4gXFx0XFx0XFx0XFx0XFx0ICovXFxuQEAgLTEwMTcsNiArMTA5OCw4IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHQgKiByZXRyeWluZyBsYXRlciBmcm9tIHdvcmtxdWV1ZS5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChza2JfcXVldWVfZW1wdHkoXFx1MDAyNnBzb2NrLVxcdTAwM2VpbmdyZXNzX3NrYikpIHtcXG4rXFx0XFx0XFx0Ym9vbCBzZXR0bGVfZndkX2FsbG9jID0gZmFsc2U7XFxuK1xcbiBcXHRcXHRcXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4gXFx0XFx0XFx0b2ZmID0gMDtcXG4gXFx0XFx0XFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcXG5AQCAtMTAyNCw4ICsxMTA3LDEwIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXG4gXFx0XFx0XFx0XFx0b2ZmID0gc3RtLVxcdTAwM2VvZmZzZXQ7XFxuIFxcdFxcdFxcdFxcdGxlbiA9IHN0bS1cXHUwMDNlZnVsbF9sZW47XFxuK1xcdFxcdFxcdFxcdHNldHRsZV9md2RfYWxsb2MgPSB0cnVlO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIGZhbHNlKTtcXG4rXFx0XFx0XFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZmFsc2UsIHNldHRsZV9md2RfYWxsb2MpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cHNvY2stXFx1MDAzZWluZ3Jlc3NfbG9jayk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNcXG5pbmRleCAxZDcyMzE3MjhlYWZkLi5jN2FkMjFkMGJiZjQ5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNcXG5AQCAtMSw1ICsxLDkgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gI2luY2x1ZGUgXFx1MDAzY2Vycm9yLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbmV0X2RpYWcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc29ja19kaWFnLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXRpbmV0L3RjcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwic29ja21hcF9oZWxwZXJzLmhcXFwiXFxuQEAgLTQ2MCw2ICs0NjQsMTcxIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zdHJwX3BhcnNlcl9yZWplY3Qodm9pZClcXG4gXFx0dGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7XFxuIH1cXG4gXFxuKy8qIFJlYWQgc2tfZm9yd2FyZF9hbGxvYyB0aHJvdWdoIGluZXRfZGlhZyBtZW1pbmZvLiAqL1xcbitzdGF0aWMgaW50IHNvY2ttYXBfc3RycF9nZXRfZndkX2FsbG9jKGludCBzb2NrLCBpbnQgKmZ3ZF9hbGxvYylcXG4re1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBsb2NhbCA9IHt9LCBwZWVyID0ge307XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbiAqbG9jYWxfaW4sICpwZWVyX2luO1xcbitcXHRzb2NrbGVuX3QgYWRkcl9sZW4gPSBzaXplb2YobG9jYWwpO1xcbitcXHRjaGFyIGJ1ZlsxMDI0XTtcXG4rXFx0c3RydWN0IHtcXG4rXFx0XFx0c3RydWN0IG5sbXNnaGRyIG5saDtcXG4rXFx0XFx0c3RydWN0IGluZXRfZGlhZ19yZXFfdjIgcmVxO1xcbitcXHR9IHJlcSA9IHtcXG4rXFx0XFx0Lm5saCA9IHtcXG4rXFx0XFx0XFx0Lm5sbXNnX2xlbiA9IHNpemVvZihyZXEpLFxcbitcXHRcXHRcXHQubmxtc2dfdHlwZSA9IFNPQ0tfRElBR19CWV9GQU1JTFksXFxuK1xcdFxcdFxcdC5ubG1zZ19mbGFncyA9IE5MTV9GX1JFUVVFU1QsXFxuK1xcdFxcdFxcdC5ubG1zZ19zZXEgPSAxLFxcbitcXHRcXHR9LFxcbitcXHRcXHQucmVxID0ge1xcbitcXHRcXHRcXHQuc2RpYWdfZmFtaWx5ID0gQUZfSU5FVCxcXG4rXFx0XFx0XFx0LnNkaWFnX3Byb3RvY29sID0gSVBQUk9UT19UQ1AsXFxuK1xcdFxcdFxcdC5pZGlhZ19leHQgPSAxIFxcdTAwM2NcXHUwMDNjIChJTkVUX0RJQUdfTUVNSU5GTyAtIDEpLFxcbitcXHRcXHRcXHQuaWRpYWdfc3RhdGVzID0gfjBVLFxcbitcXHRcXHRcXHQuaWQuaWRpYWdfY29va2llID0ge1xcbitcXHRcXHRcXHRcXHRJTkVUX0RJQUdfTk9DT09LSUUsXFxuK1xcdFxcdFxcdFxcdElORVRfRElBR19OT0NPT0tJRSxcXG4rXFx0XFx0XFx0fSxcXG4rXFx0XFx0fSxcXG4rXFx0fTtcXG4rXFx0aW50IGRpYWdfZmQsIHJldCwgZXJyID0gLUVOT0VOVDtcXG4rXFxuK1xcdGlmIChnZXRzb2NrbmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNmxvY2FsLCBcXHUwMDI2YWRkcl9sZW4pKVxcbitcXHRcXHRyZXR1cm4gLWVycm5vO1xcbitcXHRhZGRyX2xlbiA9IHNpemVvZihwZWVyKTtcXG4rXFx0aWYgKGdldHBlZXJuYW1lKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2cGVlciwgXFx1MDAyNmFkZHJfbGVuKSlcXG4rXFx0XFx0cmV0dXJuIC1lcnJubztcXG4rXFxuK1xcdGxvY2FsX2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVxcdTAwMjZsb2NhbDtcXG4rXFx0cGVlcl9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilcXHUwMDI2cGVlcjtcXG4rXFx0cmVxLnJlcS5pZC5pZGlhZ19zcG9ydCA9IGxvY2FsX2luLVxcdTAwM2VzaW5fcG9ydDtcXG4rXFx0cmVxLnJlcS5pZC5pZGlhZ19kcG9ydCA9IHBlZXJfaW4tXFx1MDAzZXNpbl9wb3J0O1xcbitcXHRyZXEucmVxLmlkLmlkaWFnX3NyY1swXSA9IGxvY2FsX2luLVxcdTAwM2VzaW5fYWRkci5zX2FkZHI7XFxuK1xcdHJlcS5yZXEuaWQuaWRpYWdfZHN0WzBdID0gcGVlcl9pbi1cXHUwMDNlc2luX2FkZHIuc19hZGRyO1xcbitcXG4rXFx0ZGlhZ19mZCA9IHNvY2tldChBRl9ORVRMSU5LLCBTT0NLX1JBVyB8IFNPQ0tfQ0xPRVhFQyxcXG4rXFx0XFx0XFx0IE5FVExJTktfU09DS19ESUFHKTtcXG4rXFx0aWYgKGRpYWdfZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLWVycm5vO1xcbitcXG4rXFx0cmV0ID0gc2VuZChkaWFnX2ZkLCBcXHUwMDI2cmVxLCBzaXplb2YocmVxKSwgMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGVyciA9IC1lcnJubztcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0aWYgKHJldCAhPSBzaXplb2YocmVxKSkge1xcbitcXHRcXHRlcnIgPSAtRUlPO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gcmVjdihkaWFnX2ZkLCBidWYsIHNpemVvZihidWYpLCAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZXJyID0gLWVycm5vO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IChzdHJ1Y3Qgbmxtc2doZHIgKilidWY7XFxuK1xcdCAgICAgTkxNU0dfT0sobmxoLCByZXQpOyBubGggPSBOTE1TR19ORVhUKG5saCwgcmV0KSkge1xcbitcXHRcXHRzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqbXNnID0gTkxNU0dfREFUQShubGgpO1xcbitcXHRcXHRzdHJ1Y3QgcnRhdHRyICphdHRyO1xcbitcXHRcXHRpbnQgbGVuO1xcbitcXG4rXFx0XFx0aWYgKG5saC1cXHUwMDNlbmxtc2dfdHlwZSA9PSBOTE1TR19FUlJPUikge1xcbitcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAobmxoLVxcdTAwM2VubG1zZ190eXBlID09IE5MTVNHX0RPTkUpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0bGVuID0gbmxoLVxcdTAwM2VubG1zZ19sZW4gLSBOTE1TR19MRU5HVEgoc2l6ZW9mKCptc2cpKTtcXG4rXFx0XFx0Zm9yIChhdHRyID0gKHN0cnVjdCBydGF0dHIgKikobXNnICsgMSk7IFJUQV9PSyhhdHRyLCBsZW4pO1xcbitcXHRcXHQgICAgIGF0dHIgPSBSVEFfTkVYVChhdHRyLCBsZW4pKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBpbmV0X2RpYWdfbWVtaW5mbyAqbWluZm87XFxuK1xcbitcXHRcXHRcXHRpZiAoYXR0ci1cXHUwMDNlcnRhX3R5cGUgIT0gSU5FVF9ESUFHX01FTUlORk8pXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRtaW5mbyA9IFJUQV9EQVRBKGF0dHIpO1xcbitcXHRcXHRcXHQqZndkX2FsbG9jID0gKF9fczMyKW1pbmZvLVxcdTAwM2VpZGlhZ19mbWVtO1xcbitcXHRcXHRcXHRlcnIgPSAwO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitvdXQ6XFxuK1xcdGNsb3NlKGRpYWdfZmQpO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbisvKiBUZXN0IHN0cnBhcnNlciBTS19QQVNTIGRlbGl2ZXJ5IHRvIHRoZSBzYW1lIHNvY2tldC4gKi9cXG4rc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnBfc2VsZl9wYXNzX2Z3ZF9hbGxvYyh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCB0ZXN0X3NvY2ttYXBfc3RycCAqc3RycCA9IE5VTEw7XFxuK1xcdGNoYXIgc25kWzQgKiAxMDI0XTtcXG4rXFx0aW50IGMgPSAtMSwgcCA9IC0xO1xcbitcXHRpbnQgZndkX2FsbG9jO1xcbitcXHRpbnQgc25kYnVmID0gc2l6ZW9mKHNuZCk7XFxuK1xcdGludCB6ZXJvID0gMDtcXG4rXFx0Y2hhciByY3Y7XFxuK1xcdGludCBzZW50LCByZWN2ZDtcXG4rXFx0aW50IG1hcDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdG1lbXNldChzbmQsIDB4YTUsIHNpemVvZihzbmQpKTtcXG4rXFxuK1xcdHN0cnAgPSB0ZXN0X3NvY2ttYXBfc3RycF9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc3RycCwgXFxcInRlc3Rfc29ja21hcF9zdHJwX19vcGVuX2FuZF9sb2FkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG1hcCA9IGJwZl9tYXBfX2ZkKHN0cnAtXFx1MDAzZW1hcHMuc29ja19tYXApO1xcbitcXHRlcnIgPSB4YnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChzdHJwLVxcdTAwM2Vwcm9ncy5wcm9nX3NrYl9wYXJzZXJfb25lKSxcXG4rXFx0XFx0XFx0ICAgICAgIG1hcCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLCAwKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBvdXRfZGVzdHJveTtcXG4rXFxuK1xcdGVyciA9IHhicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHN0cnAtXFx1MDAzZXByb2dzLnByb2dfc2tiX3ZlcmRpY3RfcGFzcyksXFxuK1xcdFxcdFxcdCAgICAgICBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QsIDApO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIG91dF9kZXN0cm95O1xcbitcXG4rXFx0ZXJyID0gY3JlYXRlX3BhaXIoQUZfSU5FVCwgU09DS19TVFJFQU0sIFxcdTAwMjZjLCBcXHUwMDI2cCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImNyZWF0ZV9wYWlyXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X2Rlc3Ryb3k7XFxuK1xcbitcXHRlcnIgPSB4c2V0c29ja29wdChjLCBTT0xfU09DS0VULCBTT19TTkRCVUYsIFxcdTAwMjZzbmRidWYsIHNpemVvZihzbmRidWYpKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBvdXRfZGVzdHJveTtcXG4rXFxuK1xcdGVyciA9IHhzZXRzb2Nrb3B0KHAsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgXFx1MDAyNnNuZGJ1Ziwgc2l6ZW9mKHNuZGJ1ZikpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIG91dF9kZXN0cm95O1xcbitcXG4rXFx0ZXJyID0geGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwLCBcXHUwMDI2emVybywgXFx1MDAyNnAsIEJQRl9OT0VYSVNUKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBvdXRfZGVzdHJveTtcXG4rXFxuK1xcdHNlbnQgPSBzZW5kKGMsIHNuZCwgc2l6ZW9mKHNuZCksIE1TR19ET05UV0FJVCk7XFxuK1xcdGlmICghQVNTRVJUX0VRKHNlbnQsIHNpemVvZihzbmQpLCBcXFwic2VuZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXN0cm95O1xcbitcXG4rXFx0cmVjdmQgPSByZWN2X3RpbWVvdXQocCwgXFx1MDAyNnJjdiwgc2l6ZW9mKHJjdiksIE1TR19ET05UV0FJVCxcXG4rXFx0XFx0XFx0ICAgICBJT19USU1FT1VUX1NFQyk7XFxuK1xcdGlmICghQVNTRVJUX0VRKHJlY3ZkLCBzaXplb2YocmN2KSwgXFxcInJlY3ZfdGltZW91dFxcXCIpIHx8XFxuK1xcdCAgICAhQVNTRVJUX0VRKHJjdiwgc25kWzBdLCBcXFwiZGF0YSBtaXNtYXRjaFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXN0cm95O1xcbitcXG4rXFx0ZXJyID0gc29ja21hcF9zdHJwX2dldF9md2RfYWxsb2MocCwgXFx1MDAyNmZ3ZF9hbGxvYyk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNvY2ttYXBfc3RycF9nZXRfZndkX2FsbG9jXFxcIikgfHxcXG4rXFx0ICAgICFBU1NFUlRfR0UoZndkX2FsbG9jLCAwLCBcXFwic2tfZm9yd2FyZF9hbGxvY1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXN0cm95O1xcbitvdXRfZGVzdHJveTpcXG4rXFx0dGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7XFxuK1xcdGlmIChjIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGMpO1xcbitcXHRpZiAocCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShwKTtcXG4rfVxcbitcXG4gdm9pZCB0ZXN0X3NvY2ttYXBfc3RycCh2b2lkKVxcbiB7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJzb2NrbWFwIHN0cnAgdGNwIHBhc3NcXFwiKSlcXG5AQCAtNDgyLDQgKzY1MSw2IEBAIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnAodm9pZClcXG4gXFx0XFx0dGVzdF9zb2NrbWFwX3N0cnBfZGlzcGF0Y2hfcGt0KEFGX0lORVQsIFNPQ0tfU1RSRUFNKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInNvY2ttYXAgc3RycCBwYXJzZXIgcmVqZWN0IHBrdCBtb2RcXFwiKSlcXG4gXFx0XFx0dGVzdF9zb2NrbWFwX3N0cnBfcGFyc2VyX3JlamVjdCgpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic29ja21hcCBzdHJwIHNlbGYgcGFzcyBmd2QgYWxsb2NcXFwiKSlcXG4rXFx0XFx0dGVzdF9zb2NrbWFwX3N0cnBfc2VsZl9wYXNzX2Z3ZF9hbGxvYygpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmNcXG5pbmRleCBmZTg4ZmE2ZDQwYmM1Li42ODJlNTNkNDA3NTFjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmNcXG5AQCAtNTAsNiArNTAsMTIgQEAgaW50IHByb2dfc2tiX3BhcnNlcl9wYXJ0aWFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4gXFx0cmV0dXJuIDEwO1xcbiB9XFxuIFxcbitTRUMoXFxcInNrX3NrYi9zdHJlYW1fcGFyc2VyXFxcIilcXG4raW50IHByb2dfc2tiX3BhcnNlcl9vbmUoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHJldHVybiAxO1xcbit9XFxuK1xcbiBTRUMoXFxcInNrX3NrYi9zdHJlYW1fcGFyc2VyXFxcIilcXG4gaW50IHByb2dfc2tiX3BhcnNlcl9yZXNpemUoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbiB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ0OjE1LjU3MTM0NDU1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIwNTM4MzMwMzkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNcIixcbiAgICBcInNvY2tfbWFwX2dldF9mcm9tX2ZkXCIsXG4gICAgXCJ0Y3BfYnBmX3VwZGF0ZV9wcm90b1wiLFxuICAgIFwidGNwX2JwZl9zdHJwX3JlYWRfc29ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc29ja21hcCBpbmZyYXN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGhvdyBgc2tfZm9yd2FyZF9hbGxvY2AgbWVtb3J5IGFjY291bnRpbmcgaXMgaGFuZGxlZCB3aGVuIGEgc3RyZWFtIHBhcnNlciAoc3RycGFyc2VyKSBwcm9ncmFtIHJldHVybnMgYFNLX1BBU1NgIGFuZCB0aGUgc2tiIGlzIGRlbGl2ZXJlZCB0byB0aGUgc2FtZSBzb2NrZXQncyBpbmdyZXNzIHF1ZXVlLiBJdCBpbnRyb2R1Y2VzIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbmAgdG8gc2V0dGxlIGFueSBleGlzdGluZyBgc2tfZm9yd2FyZF9hbGxvY2AgZGVmaWNpdCBiZWZvcmUgYXNzaWduaW5nIHJlY2VpdmUgb3duZXJzaGlwIHRvIHRoZSBza2IuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJQRiBzb2NrbWFwIGFuZCBzdHJlYW0gcGFyc2VyKSBhbmQgaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgbWVtb3J5IGFjY291bnRpbmcgcmVtYWlucyBjb3JyZWN0IHVuZGVyIHZhcmlvdXMgbmV0d29yayBjb25kaXRpb25zIGFuZCBCUEYgcHJvZ3JhbSBiZWhhdmlvcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBiMGU4Y2Y4YjMyMWRmODhjMDI2ZGFlYTU3NjQ5MWZjYTVjNzM2ZTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxNjo0NDoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrbXNnLmMgYi9uZXQvY29yZS9za21zZy5jXG5pbmRleCAyNTIxYjY0M2ZhMDVkLi4zNDdjYjE2OGY3NDkxIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2ttc2cuY1xuKysrIGIvbmV0L2NvcmUvc2ttc2cuY1xuQEAgLTU4NiwyMSArNTg2LDI0IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIH1cbiBcbiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZik7XG4rXHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsXG4rXHRcdFx0XHQgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYyk7XG4rc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2coc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsXG4rXHRcdFx0XHRcdCAgICAgYm9vbCBzZXR0bGVfZndkX2FsbG9jKTtcbiBcbiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHR1MzIgb2ZmLCB1MzIgbGVuKVxuK1x0XHRcdFx0dTMyIG9mZiwgdTMyIGxlbiwgYm9vbCBzZXR0bGVfZndkX2FsbG9jKVxuIHtcbiBcdHN0cnVjdCBzb2NrICpzayA9IHBzb2NrLVx1MDAzZXNrO1xuIFx0c3RydWN0IHNrX21zZyAqbXNnO1xuIFx0aW50IGVycjtcbiBcbi1cdC8qIElmIHdlIGFyZSByZWNlaXZpbmcgb24gdGhlIHNhbWUgc29jayBza2ItXHUwMDNlc2sgaXMgYWxyZWFkeSBhc3NpZ25lZCxcbi1cdCAqIHNraXAgbWVtb3J5IGFjY291bnRpbmcgYW5kIG93bmVyIHRyYW5zaXRpb24gc2VlaW5nIGl0IGFscmVhZHkgc2V0XG4tXHQgKiBjb3JyZWN0bHkuXG4tXHQgKi9cbiBcdGlmICh1bmxpa2VseShza2ItXHUwMDNlc2sgPT0gc2spKVxuLVx0XHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgdHJ1ZSk7XG4rXHRcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2cocHNvY2ssIHNrYiwgb2ZmLFxuK1x0XHRcdFx0XHRcdFx0IGxlbiwgdHJ1ZSxcbitcdFx0XHRcdFx0XHRcdCBzZXR0bGVfZndkX2FsbG9jKTtcbiBcdG1zZyA9IHNrX3Bzb2NrX2NyZWF0ZV9pbmdyZXNzX21zZyhzaywgc2tiKTtcbiBcdGlmICghbXNnKVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbkBAIC02MTgsMzQgKzYyMSwxMDAgQEAgc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tLyogUHV0cyBhbiBza2Igb24gdGhlIGluZ3Jlc3MgcXVldWUgb2YgdGhlIHNvY2tldCBhbHJlYWR5IGFzc2lnbmVkIHRvIHRoZVxuLSAqIHNrYi4gSW4gdGhpcyBjYXNlIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIG1lbW9yeSBsaW1pdHMgb3Igc2tiX3NldF9vd25lcl9yXG4tICogYmVjYXVzZSB0aGUgc2tiIGlzIGFscmVhZHkgYWNjb3VudGVkIGZvciBoZXJlLlxuK3N0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ24oc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdFx0ICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYylcbit7XG4rXHQvKiBMZWF2ZSBza2JzIGFscmVhZHkgcmVjZWl2ZS1hY2NvdW50ZWQgdG8gc2sgdW50b3VjaGVkLiAqL1xuK1x0aWYgKHNrYi1cdTAwM2VzayA9PSBzayBcdTAwMjZcdTAwMjYgc2tiLVx1MDAzZWRlc3RydWN0b3IgPT0gc29ja19yZnJlZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoc2V0dGxlX2Z3ZF9hbGxvYykge1xuK1x0XHRzb2NrX293bmVkX2J5X21lKHNrKTtcbitcbitcdFx0aWYgKCFza19ybWVtX3NjaGVkdWxlKHNrLCBza2IsIDApKVxuK1x0XHRcdHJldHVybiAtRUFHQUlOO1xuK1x0fVxuK1xuK1x0c2tiX3NldF9vd25lcl9yKHNrYiwgc2spO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFB1dHMgYW4gc2tiIG9uIHRoZSBpbmdyZXNzIHF1ZXVlIGZvciBwc29jay1cdTAwM2Vzay5cbisgKlxuKyAqIElmIHRoZSBza2IgYWxyZWFkeSBoYXMgcmVjZWl2ZSBvd25lcnNoaXAgZm9yIHRoaXMgc29ja2V0LCBsZWF2ZSBzb2NrZXRcbisgKiBtZW1vcnkgYWNjb3VudGluZyB1bnRvdWNoZWQuIE90aGVyd2lzZSwgYmVmb3JlIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcFxuKyAqIHRvIGFuIHVub3duZWQgc3RycGFyc2VyIFNLX1BBU1Mgc2tiLCBzZXR0bGUgYW55IGV4aXN0aW5nIHNrX2ZvcndhcmRfYWxsb2NcbisgKiBkZWZpY2l0IGZyb20gZWFybGllciBjbG9uZSBjaGFyZ2VzLlxuICAqL1xuIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmKVxuK1x0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuK1x0XHRcdFx0ICAgICBib29sIHNldHRsZV9md2RfYWxsb2MpXG4ge1xuK1x0c3RydWN0IHNvY2sgKnNrID0gcHNvY2stXHUwMDNlc2s7XG4gXHRzdHJ1Y3Qgc2tfbXNnICptc2cgPSBhbGxvY19za19tc2coR0ZQX0FUT01JQyk7XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWYgKHVubGlrZWx5KCFtc2cpKVxuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcbitcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduKHNrLCBza2IsIHNldHRsZV9md2RfYWxsb2MpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBmcmVlO1xuK1xuK1x0LyogVGhpcyBpcyB1c2VkIGluIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVcbitcdCAqIGRhdGEgb3JpZ2luYXRlcyBmcm9tIHRoZSBzb2NrZXQncyBvd24gcHJvdG9jb2wgc3RhY2suIE5vIG5lZWQgdG9cbitcdCAqIHJlZmNvdW50IHNrIGJlY2F1c2UgbXNnJ3MgbGlmZXRpbWUgaXMgYm91bmQgdG8gc2sgdmlhIHRoZSBpbmdyZXNzX21zZy5cbitcdCAqL1xuK1x0bXNnLVx1MDAzZXNrID0gc2s7XG4rXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLFxuK1x0XHRcdFx0XHQgICB0YWtlX3JlZik7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGZyZWU7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK2ZyZWU6XG4rXHRrZnJlZShtc2cpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2coc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsXG4rXHRcdFx0XHRcdCAgICAgYm9vbCBzZXR0bGVfZndkX2FsbG9jKVxuK3tcbiBcdHN0cnVjdCBzb2NrICpzayA9IHBzb2NrLVx1MDAzZXNrO1xuK1x0c3RydWN0IHNrX21zZyAqbXNnID0gYWxsb2Nfc2tfbXNnKEdGUF9BVE9NSUMpO1xuIFx0aW50IGVycjtcbiBcbiBcdGlmICh1bmxpa2VseSghbXNnKSlcbiBcdFx0cmV0dXJuIC1FQUdBSU47XG4tXHRza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7XG4rXG4rXHRsb2NrX3NvY2soc2spO1xuK1x0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ24oc2ssIHNrYiwgc2V0dGxlX2Z3ZF9hbGxvYyk7XG4rXHRyZWxlYXNlX3NvY2soc2spO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBmcmVlO1xuIFxuIFx0LyogVGhpcyBpcyB1c2VkIGluIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVcbiBcdCAqIGRhdGEgb3JpZ2luYXRlcyBmcm9tIHRoZSBzb2NrZXQncyBvd24gcHJvdG9jb2wgc3RhY2suIE5vIG5lZWQgdG9cbiBcdCAqIHJlZmNvdW50IHNrIGJlY2F1c2UgbXNnJ3MgbGlmZXRpbWUgaXMgYm91bmQgdG8gc2sgdmlhIHRoZSBpbmdyZXNzX21zZy5cbiBcdCAqL1xuIFx0bXNnLVx1MDAzZXNrID0gc2s7XG4tXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLCB0YWtlX3JlZik7XG4rXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLFxuK1x0XHRcdFx0XHQgICB0YWtlX3JlZik7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRrZnJlZShtc2cpO1xuK1x0XHRnb3RvIGZyZWU7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK2ZyZWU6XG4rXHRrZnJlZShtc2cpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCBza19wc29ja19oYW5kbGVfc2tiKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0ICAgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgaW5ncmVzcylcbitcdFx0XHQgICAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCBpbmdyZXNzLFxuK1x0XHRcdCAgICAgICBib29sIHNlbGZfcGFzcywgYm9vbCBzdHJwYXJzZXIpXG4ge1xuIFx0aWYgKCFpbmdyZXNzKSB7XG4gXHRcdGlmICghc29ja193cml0ZWFibGUocHNvY2stXHUwMDNlc2spKVxuQEAgLTY1Myw3ICs3MjIsMTEgQEAgc3RhdGljIGludCBza19wc29ja19oYW5kbGVfc2tiKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBza2Jfc2VuZF9zb2NrKHBzb2NrLVx1MDAzZXNrLCBza2IsIG9mZiwgbGVuKTtcbiBcdH1cbiBcbi1cdHJldHVybiBza19wc29ja19za2JfaW5ncmVzcyhwc29jaywgc2tiLCBvZmYsIGxlbik7XG4rXHRpZiAoc2VsZl9wYXNzKVxuK1x0XHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHBzb2NrLCBza2IsIG9mZixcbitcdFx0XHRcdFx0XHRcdCBsZW4sIHRydWUsIHN0cnBhcnNlcik7XG4rXG4rXHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3MocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHN0cnBhcnNlcik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNrX3Bzb2NrX3NrYl9zdGF0ZShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuQEAgLTY5NCw5ICs3NjcsMTQgQEAgc3RhdGljIHZvaWQgc2tfcHNvY2tfYmFja2xvZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdHJldHVybjtcbiBcdG11dGV4X2xvY2soXHUwMDI2cHNvY2stXHUwMDNld29ya19tdXRleCk7XG4gXHR3aGlsZSAoKHNrYiA9IHNrYl9wZWVrKFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3Nfc2tiKSkpIHtcbitcdFx0dW5zaWduZWQgbG9uZyBzYXZlZF9yZWRpcjtcbitcdFx0Ym9vbCBzdHJwYXJzZXI7XG4rXHRcdGJvb2wgc2VsZl9wYXNzO1xuK1xuIFx0XHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuIFx0XHRvZmYgPSAwO1xuLVx0XHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xuK1x0XHRzdHJwYXJzZXIgPSBza2JfYnBmX3N0cnBhcnNlcihza2IpO1xuK1x0XHRpZiAoc3RycGFyc2VyKSB7XG4gXHRcdFx0c3RydWN0IHN0cnBfbXNnICpzdG0gPSBzdHJwX21zZyhza2IpO1xuIFxuIFx0XHRcdG9mZiA9IHN0bS1cdTAwM2VvZmZzZXQ7XG5AQCAtNzEwLDE3ICs3ODgsMjAgQEAgc3RhdGljIHZvaWQgc2tfcHNvY2tfYmFja2xvZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdH1cbiBcbiBcdFx0aW5ncmVzcyA9IHNrYl9icGZfaW5ncmVzcyhza2IpO1xuK1x0XHRzZWxmX3Bhc3MgPSBpbmdyZXNzIFx1MDAyNlx1MDAyNiAhc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpO1xuK1x0XHRzYXZlZF9yZWRpciA9IHNrYi1cdTAwM2Vfc2tfcmVkaXI7XG4gXHRcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcbiBcdFx0ZG8ge1xuIFx0XHRcdHJldCA9IC1FSU87XG4gXHRcdFx0aWYgKCFzb2NrX2ZsYWcocHNvY2stXHUwMDNlc2ssIFNPQ0tfREVBRCkpXG4gXHRcdFx0XHRyZXQgPSBza19wc29ja19oYW5kbGVfc2tiKHBzb2NrLCBza2IsIG9mZixcbi1cdFx0XHRcdFx0XHRcdCAgbGVuLCBpbmdyZXNzKTtcbitcdFx0XHRcdFx0XHRcdCAgbGVuLCBpbmdyZXNzLFxuK1x0XHRcdFx0XHRcdFx0ICBzZWxmX3Bhc3MsIHN0cnBhcnNlcik7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2M9IDApIHtcbiBcdFx0XHRcdGlmIChyZXQgPT0gLUVBR0FJTikge1xuIFx0XHRcdFx0XHRza19wc29ja19za2Jfc3RhdGUocHNvY2ssIHN0YXRlLCBsZW4sIG9mZik7XG4gXHRcdFx0XHRcdC8qIFJlc3RvcmUgcmVkaXIgaW5mbyB3ZSBjbGVhcmVkIGJlZm9yZSAqL1xuLVx0XHRcdFx0XHRza2JfYnBmX3NldF9yZWRpcihza2IsIHBzb2NrLVx1MDAzZXNrLCBpbmdyZXNzKTtcbitcdFx0XHRcdFx0c2tiLVx1MDAzZV9za19yZWRpciA9IHNhdmVkX3JlZGlyO1xuIFx0XHRcdFx0XHQvKiBEZWxheSBzbGlnaHRseSB0byBwcmlvcml0aXplIGFueVxuIFx0XHRcdFx0XHQgKiBvdGhlciB3b3JrIHRoYXQgbWlnaHQgYmUgaGVyZS5cbiBcdFx0XHRcdFx0ICovXG5AQCAtMTAxNyw2ICsxMDk4LDggQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLlxuIFx0XHQgKi9cbiBcdFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX3NrYikpIHtcbitcdFx0XHRib29sIHNldHRsZV9md2RfYWxsb2MgPSBmYWxzZTtcbitcbiBcdFx0XHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuIFx0XHRcdG9mZiA9IDA7XG4gXHRcdFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcbkBAIC0xMDI0LDggKzExMDcsMTAgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRcdFx0XHRvZmYgPSBzdG0tXHUwMDNlb2Zmc2V0O1xuIFx0XHRcdFx0bGVuID0gc3RtLVx1MDAzZWZ1bGxfbGVuO1xuK1x0XHRcdFx0c2V0dGxlX2Z3ZF9hbGxvYyA9IHRydWU7XG4gXHRcdFx0fVxuLVx0XHRcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIGZhbHNlKTtcbitcdFx0XHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLFxuK1x0XHRcdFx0XHRcdFx0ZmFsc2UsIHNldHRsZV9md2RfYWxsb2MpO1xuIFx0XHR9XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19sb2NrKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jXG5pbmRleCAxZDcyMzE3MjhlYWZkLi5jN2FkMjFkMGJiZjQ5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jXG5AQCAtMSw1ICsxLDkgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICNpbmNsdWRlIFx1MDAzY2Vycm9yLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbmV0X2RpYWcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGxpbmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc29ja19kaWFnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXRpbmV0L3RjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4gI2luY2x1ZGUgXCJzb2NrbWFwX2hlbHBlcnMuaFwiXG5AQCAtNDYwLDYgKzQ2NCwxNzEgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnBfcGFyc2VyX3JlamVjdCh2b2lkKVxuIFx0dGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7XG4gfVxuIFxuKy8qIFJlYWQgc2tfZm9yd2FyZF9hbGxvYyB0aHJvdWdoIGluZXRfZGlhZyBtZW1pbmZvLiAqL1xuK3N0YXRpYyBpbnQgc29ja21hcF9zdHJwX2dldF9md2RfYWxsb2MoaW50IHNvY2ssIGludCAqZndkX2FsbG9jKVxuK3tcbitcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGxvY2FsID0ge30sIHBlZXIgPSB7fTtcbitcdHN0cnVjdCBzb2NrYWRkcl9pbiAqbG9jYWxfaW4sICpwZWVyX2luO1xuK1x0c29ja2xlbl90IGFkZHJfbGVuID0gc2l6ZW9mKGxvY2FsKTtcbitcdGNoYXIgYnVmWzEwMjRdO1xuK1x0c3RydWN0IHtcbitcdFx0c3RydWN0IG5sbXNnaGRyIG5saDtcbitcdFx0c3RydWN0IGluZXRfZGlhZ19yZXFfdjIgcmVxO1xuK1x0fSByZXEgPSB7XG4rXHRcdC5ubGggPSB7XG4rXHRcdFx0Lm5sbXNnX2xlbiA9IHNpemVvZihyZXEpLFxuK1x0XHRcdC5ubG1zZ190eXBlID0gU09DS19ESUFHX0JZX0ZBTUlMWSxcbitcdFx0XHQubmxtc2dfZmxhZ3MgPSBOTE1fRl9SRVFVRVNULFxuK1x0XHRcdC5ubG1zZ19zZXEgPSAxLFxuK1x0XHR9LFxuK1x0XHQucmVxID0ge1xuK1x0XHRcdC5zZGlhZ19mYW1pbHkgPSBBRl9JTkVULFxuK1x0XHRcdC5zZGlhZ19wcm90b2NvbCA9IElQUFJPVE9fVENQLFxuK1x0XHRcdC5pZGlhZ19leHQgPSAxIFx1MDAzY1x1MDAzYyAoSU5FVF9ESUFHX01FTUlORk8gLSAxKSxcbitcdFx0XHQuaWRpYWdfc3RhdGVzID0gfjBVLFxuK1x0XHRcdC5pZC5pZGlhZ19jb29raWUgPSB7XG4rXHRcdFx0XHRJTkVUX0RJQUdfTk9DT09LSUUsXG4rXHRcdFx0XHRJTkVUX0RJQUdfTk9DT09LSUUsXG4rXHRcdFx0fSxcbitcdFx0fSxcbitcdH07XG4rXHRpbnQgZGlhZ19mZCwgcmV0LCBlcnIgPSAtRU5PRU5UO1xuK1xuK1x0aWYgKGdldHNvY2tuYW1lKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZsb2NhbCwgXHUwMDI2YWRkcl9sZW4pKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1x0YWRkcl9sZW4gPSBzaXplb2YocGVlcik7XG4rXHRpZiAoZ2V0cGVlcm5hbWUoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNnBlZXIsIFx1MDAyNmFkZHJfbGVuKSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdGxvY2FsX2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVx1MDAyNmxvY2FsO1xuK1x0cGVlcl9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilcdTAwMjZwZWVyO1xuK1x0cmVxLnJlcS5pZC5pZGlhZ19zcG9ydCA9IGxvY2FsX2luLVx1MDAzZXNpbl9wb3J0O1xuK1x0cmVxLnJlcS5pZC5pZGlhZ19kcG9ydCA9IHBlZXJfaW4tXHUwMDNlc2luX3BvcnQ7XG4rXHRyZXEucmVxLmlkLmlkaWFnX3NyY1swXSA9IGxvY2FsX2luLVx1MDAzZXNpbl9hZGRyLnNfYWRkcjtcbitcdHJlcS5yZXEuaWQuaWRpYWdfZHN0WzBdID0gcGVlcl9pbi1cdTAwM2VzaW5fYWRkci5zX2FkZHI7XG4rXG4rXHRkaWFnX2ZkID0gc29ja2V0KEFGX05FVExJTkssIFNPQ0tfUkFXIHwgU09DS19DTE9FWEVDLFxuK1x0XHRcdCBORVRMSU5LX1NPQ0tfRElBRyk7XG4rXHRpZiAoZGlhZ19mZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdHJldCA9IHNlbmQoZGlhZ19mZCwgXHUwMDI2cmVxLCBzaXplb2YocmVxKSwgMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdGVyciA9IC1lcnJubztcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRpZiAocmV0ICE9IHNpemVvZihyZXEpKSB7XG4rXHRcdGVyciA9IC1FSU87XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0cmV0ID0gcmVjdihkaWFnX2ZkLCBidWYsIHNpemVvZihidWYpLCAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0ZXJyID0gLWVycm5vO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGZvciAoc3RydWN0IG5sbXNnaGRyICpubGggPSAoc3RydWN0IG5sbXNnaGRyICopYnVmO1xuK1x0ICAgICBOTE1TR19PSyhubGgsIHJldCk7IG5saCA9IE5MTVNHX05FWFQobmxoLCByZXQpKSB7XG4rXHRcdHN0cnVjdCBpbmV0X2RpYWdfbXNnICptc2cgPSBOTE1TR19EQVRBKG5saCk7XG4rXHRcdHN0cnVjdCBydGF0dHIgKmF0dHI7XG4rXHRcdGludCBsZW47XG4rXG4rXHRcdGlmIChubGgtXHUwMDNlbmxtc2dfdHlwZSA9PSBOTE1TR19FUlJPUikge1xuK1x0XHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdFx0aWYgKG5saC1cdTAwM2VubG1zZ190eXBlID09IE5MTVNHX0RPTkUpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGxlbiA9IG5saC1cdTAwM2VubG1zZ19sZW4gLSBOTE1TR19MRU5HVEgoc2l6ZW9mKCptc2cpKTtcbitcdFx0Zm9yIChhdHRyID0gKHN0cnVjdCBydGF0dHIgKikobXNnICsgMSk7IFJUQV9PSyhhdHRyLCBsZW4pO1xuK1x0XHQgICAgIGF0dHIgPSBSVEFfTkVYVChhdHRyLCBsZW4pKSB7XG4rXHRcdFx0c3RydWN0IGluZXRfZGlhZ19tZW1pbmZvICptaW5mbztcbitcbitcdFx0XHRpZiAoYXR0ci1cdTAwM2VydGFfdHlwZSAhPSBJTkVUX0RJQUdfTUVNSU5GTylcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdG1pbmZvID0gUlRBX0RBVEEoYXR0cik7XG4rXHRcdFx0KmZ3ZF9hbGxvYyA9IChfX3MzMiltaW5mby1cdTAwM2VpZGlhZ19mbWVtO1xuK1x0XHRcdGVyciA9IDA7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdH1cbitcbitvdXQ6XG4rXHRjbG9zZShkaWFnX2ZkKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuKy8qIFRlc3Qgc3RycGFyc2VyIFNLX1BBU1MgZGVsaXZlcnkgdG8gdGhlIHNhbWUgc29ja2V0LiAqL1xuK3N0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zdHJwX3NlbGZfcGFzc19md2RfYWxsb2Modm9pZClcbit7XG4rXHRzdHJ1Y3QgdGVzdF9zb2NrbWFwX3N0cnAgKnN0cnAgPSBOVUxMO1xuK1x0Y2hhciBzbmRbNCAqIDEwMjRdO1xuK1x0aW50IGMgPSAtMSwgcCA9IC0xO1xuK1x0aW50IGZ3ZF9hbGxvYztcbitcdGludCBzbmRidWYgPSBzaXplb2Yoc25kKTtcbitcdGludCB6ZXJvID0gMDtcbitcdGNoYXIgcmN2O1xuK1x0aW50IHNlbnQsIHJlY3ZkO1xuK1x0aW50IG1hcDtcbitcdGludCBlcnI7XG4rXG4rXHRtZW1zZXQoc25kLCAweGE1LCBzaXplb2Yoc25kKSk7XG4rXG4rXHRzdHJwID0gdGVzdF9zb2NrbWFwX3N0cnBfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihzdHJwLCBcInRlc3Rfc29ja21hcF9zdHJwX19vcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtYXAgPSBicGZfbWFwX19mZChzdHJwLVx1MDAzZW1hcHMuc29ja19tYXApO1xuK1x0ZXJyID0geGJwZl9wcm9nX2F0dGFjaChicGZfcHJvZ3JhbV9fZmQoc3RycC1cdTAwM2Vwcm9ncy5wcm9nX3NrYl9wYXJzZXJfb25lKSxcbitcdFx0XHQgICAgICAgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVIsIDApO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXRfZGVzdHJveTtcbitcbitcdGVyciA9IHhicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHN0cnAtXHUwMDNlcHJvZ3MucHJvZ19za2JfdmVyZGljdF9wYXNzKSxcbitcdFx0XHQgICAgICAgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNULCAwKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4rXG4rXHRlcnIgPSBjcmVhdGVfcGFpcihBRl9JTkVULCBTT0NLX1NUUkVBTSwgXHUwMDI2YywgXHUwMDI2cCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiY3JlYXRlX3BhaXJcIikpXG4rXHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4rXG4rXHRlcnIgPSB4c2V0c29ja29wdChjLCBTT0xfU09DS0VULCBTT19TTkRCVUYsIFx1MDAyNnNuZGJ1Ziwgc2l6ZW9mKHNuZGJ1ZikpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXRfZGVzdHJveTtcbitcbitcdGVyciA9IHhzZXRzb2Nrb3B0KHAsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgXHUwMDI2c25kYnVmLCBzaXplb2Yoc25kYnVmKSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dF9kZXN0cm95O1xuK1xuK1x0ZXJyID0geGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwLCBcdTAwMjZ6ZXJvLCBcdTAwMjZwLCBCUEZfTk9FWElTVCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dF9kZXN0cm95O1xuK1xuK1x0c2VudCA9IHNlbmQoYywgc25kLCBzaXplb2Yoc25kKSwgTVNHX0RPTlRXQUlUKTtcbitcdGlmICghQVNTRVJUX0VRKHNlbnQsIHNpemVvZihzbmQpLCBcInNlbmRcIikpXG4rXHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4rXG4rXHRyZWN2ZCA9IHJlY3ZfdGltZW91dChwLCBcdTAwMjZyY3YsIHNpemVvZihyY3YpLCBNU0dfRE9OVFdBSVQsXG4rXHRcdFx0ICAgICBJT19USU1FT1VUX1NFQyk7XG4rXHRpZiAoIUFTU0VSVF9FUShyZWN2ZCwgc2l6ZW9mKHJjdiksIFwicmVjdl90aW1lb3V0XCIpIHx8XG4rXHQgICAgIUFTU0VSVF9FUShyY3YsIHNuZFswXSwgXCJkYXRhIG1pc21hdGNoXCIpKVxuK1x0XHRnb3RvIG91dF9kZXN0cm95O1xuK1xuK1x0ZXJyID0gc29ja21hcF9zdHJwX2dldF9md2RfYWxsb2MocCwgXHUwMDI2ZndkX2FsbG9jKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvY1wiKSB8fFxuK1x0ICAgICFBU1NFUlRfR0UoZndkX2FsbG9jLCAwLCBcInNrX2ZvcndhcmRfYWxsb2NcIikpXG4rXHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4rb3V0X2Rlc3Ryb3k6XG4rXHR0ZXN0X3NvY2ttYXBfc3RycF9fZGVzdHJveShzdHJwKTtcbitcdGlmIChjIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoYyk7XG4rXHRpZiAocCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKHApO1xuK31cbitcbiB2b2lkIHRlc3Rfc29ja21hcF9zdHJwKHZvaWQpXG4ge1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJzb2NrbWFwIHN0cnAgdGNwIHBhc3NcIikpXG5AQCAtNDgyLDQgKzY1MSw2IEBAIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnAodm9pZClcbiBcdFx0dGVzdF9zb2NrbWFwX3N0cnBfZGlzcGF0Y2hfcGt0KEFGX0lORVQsIFNPQ0tfU1RSRUFNKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic29ja21hcCBzdHJwIHBhcnNlciByZWplY3QgcGt0IG1vZFwiKSlcbiBcdFx0dGVzdF9zb2NrbWFwX3N0cnBfcGFyc2VyX3JlamVjdCgpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJzb2NrbWFwIHN0cnAgc2VsZiBwYXNzIGZ3ZCBhbGxvY1wiKSlcbitcdFx0dGVzdF9zb2NrbWFwX3N0cnBfc2VsZl9wYXNzX2Z3ZF9hbGxvYygpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXG5pbmRleCBmZTg4ZmE2ZDQwYmM1Li42ODJlNTNkNDA3NTFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXG5AQCAtNTAsNiArNTAsMTIgQEAgaW50IHByb2dfc2tiX3BhcnNlcl9wYXJ0aWFsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiBcdHJldHVybiAxMDtcbiB9XG4gXG4rU0VDKFwic2tfc2tiL3N0cmVhbV9wYXJzZXJcIilcbitpbnQgcHJvZ19za2JfcGFyc2VyX29uZShzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuIFNFQyhcInNrX3NrYi9zdHJlYW1fcGFyc2VyXCIpXG4gaW50IHByb2dfc2tiX3BhcnNlcl9yZXNpemUoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ0OjE1LjU3MTM0NjQxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NDkwODg2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2g6IFNvY2ttYXAvU0tNU0cgQ29yZSBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3MgdG91Y2hpbmcgcHJldHR5IGNyaXRpY2FsIHN0dWZmIHdpdGhpbiB0aGUgQlBGIHNvY2ttYXAgaW5mcmFzdHJ1Y3R1cmUuIFdlIGhhdmUgbW9kaWZpY2F0aW9ucyB0byBgbmV0L2NvcmUvc2ttc2cuY2Agd2hpY2gsIGlmIEkgcmVtZW1iZXIgY29ycmVjdGx5LCBpcyBjb21waWxlZCB3aXRoIGBDT05GSUdfTkVUX1NPQ0tfTVNHYC4gVGhhdCdzIHRoZSBoZWFydCBvZiB0aGUgU0tNU0cgZnVuY3Rpb25hbGl0eSwgYW5kIHRoYXQgYWx3YXlzIGdldHMgbXkgYXR0ZW50aW9uLiBXZSdyZSBhbHNvIHNlZWluZyBhIGNvcnJlc3BvbmRpbmcgdGVzdCBhZGRlZCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNgLCB3aGljaCBpcyBnb29kOyByZWdyZXNzaW9uIHRlc3RzIGFyZSBjcnVjaWFsLCBidXQgbGV0J3Mgc2VlIGlmIGl0J3MgdGhvcm91Z2guXG5cblNwZWNpZmljYWxseSwgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIHJld29ya2luZyBob3cgYHNrX2ZvcndhcmRfYWxsb2NgIGlzIGhhbmRsZWQgd2hlbiBhIGBzdHJwYXJzZXJgIFNLX1BBU1Mgc2tiIGdldHMgZGVsaXZlcmVkIHRvIHRoZSAqc2FtZSogc29ja2V0LiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSBhIHZlcnkgdHJpY2t5IGFyZWEgZnJvbSBhIGNvbmN1cnJlbmN5IGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IHBlcnNwZWN0aXZlLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoZSBleGFjdCBmdW5jdGlvbnMgaW52b2x2ZWQuIEknbSBzZWVpbmcgY2hhbmdlcyB0bzogYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nYCwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCwgYHNrX3Bzb2NrX2hhbmRsZV9za2JgLCBgc2tfcHNvY2tfYmFja2xvZ2AsIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAuIFRoYXQncyBhIGNvbXByZWhlbnNpdmUgdG91Y2ggb24gdGhlIGluZ3Jlc3MgcGF0aC4gTG9va3MgbGlrZSB3ZSdyZSBpbnRyb2R1Y2luZyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gLCB3aGljaCBwcm9iYWJseSBtZWFucyB3ZSdyZSB0cnlpbmcgdG8gb3B0aW1pemUgdGhlIGRpcmVjdCBpbmdyZXNzIHBhdGggdG8gdGhlIHNvY2tldCwgb3Igc29tZXRoaW5nIGxpa2UgdGhhdC5cblxuR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzIGFuZCB0aGUgY2VudHJhbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMsIHRoaXMgaXMgZGVmaW5pdGVseSBrZXJuZWwgbG9naWMgdGhhdCdzIHdvcnRoIGEgKnZlcnkqIGNsb3NlIGxvb2sgYW5kIGxpa2VseSBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgdmVyaWZ5IHRoZSBrZXJuZWwgY29uZmlncyDigJMgY29uZmlybSBgQ09ORklHX05FVF9TT0NLX01TR2AgYW5kIHBvc3NpYmx5IG90aGVyIHJlbGF0ZWQgb25lcywgYW5kIHRoZW4gaXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaG93IGBza19mb3J3YXJkX2FsbG9jYCBpcyBhY3R1YWxseSBiZWluZyB1c2VkIGluIHRoaXMgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI4MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ0OjIyLjEyMDQzNzM2M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzAwNDY1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza21zZy5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTQzPW9iai0kKENPTkZJR19GQUlMT1ZFUikgKz0gZmFpbG92ZXIub1xcbm5ldC9jb3JlL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHNrbXNnLm9cXG5uZXQvY29yZS9NYWtlZmlsZS00NS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHNvY2tfbWFwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDQ6MjIuMTY3NDQ4Njk4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4MTY3NDUxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCoqXG5cbkFscmlnaHQsIHRoZSBjb2RlJ3MgcG9pbnRpbmcgdG8gYSByZXF1aXJlbWVudCBmb3IgYENPTkZJR19ORVRfU09DS19NU0dgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgY29uZmlndXJhYmlsaXR5IG9mIHRoaXMgb3B0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIGNvbmZpZ3VyYXRpb25zIHRyaWdnZXIgdGhpcyBzZXR0aW5nLiBJcyBpdCBzb21ldGhpbmcgdGhhdCdzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYmFzZWQgb24gYW5vdGhlciBjaG9pY2UgaGlnaGVyIHVwIGluIHRoZSBjb25maWd1cmF0aW9uIGhpZXJhcmNoeSwgb3IgaXMgaXQgZGlyZWN0bHkgdXNlci1zZWxlY3RhYmxlPyBJcyB0aGVyZSBzb21lIGNvbnRleHQgSSdtIG1pc3Npbmc/IEkgbmVlZCB0byBkcmlsbCBkb3duIGFuZCBzZWUgKndoYXQqIGV4YWN0bHkgc2VsZWN0cyB0aGlzIG9yIGdpdmVzIG1lIHRoZSBhYmlsaXR5IHRvIGRlY2lkZS4gVGhpcyB3aWxsIGhlbHAgbWUgZGlhZ25vc2Ugd2h5IHRoaXMgaXMgYmVpbmcgcmVxdWVzdGVkIGFuZCB3aGF0IGltcGFjdCBpdCB3aWxsIGhhdmUgb24gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJ2xsIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgS2NvbmZpZyBmaWxlcywgc3RhcnRpbmcgd2l0aCB0aGUgaW1tZWRpYXRlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHRoZW4gdHJhY2luZyBiYWNrIHRvIHNlZSB3aGF0IHBhdGhzIGxlYWQgdG8gaXRzIGFjdGl2YXRpb24uIFVuZGVyc3RhbmRpbmcgdGhpcyBkZXBlbmRlbmN5IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE4NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ0OjI1Ljg0OTEyNTM2N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgyMjMxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NPQ0tfTVNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTQ3NT1jb25maWcgTkVUX1NFTEZURVNUU1xcbi0tXFxubmV0L0tjb25maWctNDc4LVxcbm5ldC9LY29uZmlnOjQ3OTpjb25maWcgTkVUX1NPQ0tfTVNHXFxubmV0L0tjb25maWctNDgwLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDQ6MjUuODk0OTU5MTIyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1MTQ2OTgzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYSBCb29sZWFuIEZsYWcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHN0dW1ibGVkIHVwb24gYSBoaWRkZW4gYm9vbGVhbiB2YXJpYWJsZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgZGVlcGVyIGFuZCB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlLiBcIkhpZGRlblwiIHVzdWFsbHkgbWVhbnMgdGhlcmUncyBhIHJlYXNvbiBpdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLCBhbmQgdGhhdCByZWFzb24gaXMgbGlrZWx5IGdvaW5nIHRvIHByb3ZpZGUgdGhlIGltcG9ydGFudCBpbmZvcm1hdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byB0cmFjZSBhbGwgdGhlIHBvdGVudGlhbCBjb2RlIHBhdGhzIHRoYXQgY291bGQgcG9zc2libHkgc2V0IG9yIG1vZGlmeSB0aGlzIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBhIGNoYW5nZSBpbiBpdHMgc3RhdGU7IHdoYXQgY29kZSBzZWxlY3RzIChvciBzZXRzKSBpdD8gS25vd2luZyAqd2hlbiogdGhpcyBmbGFnIGZsaXBzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBzeXN0ZW0ncyBvdmVyYWxsIGxvZ2ljLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBpbmZlciB0aGUgbGFyZ2VyIGRlc2lnbiBjb250ZXh0IGFuZCBzZWUgd2hhdCB0aGlzIGJvb2wgaXMgbWVhbnQgdG8gc2lnbmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTI5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDQ6MjkuMjQ2NDMxMTY1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTQ4MTUyNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE5FVF9TT0NLX01TR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctMzMtXFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG5rZXJuZWwvYnBmL0tjb25maWc6MzQ6XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG5rZXJuZWwvYnBmL0tjb25maWctMzUtXFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuLS1cXG5uZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXFxuLS1cXG5uZXQvS2NvbmZpZy0zNjYtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvS2NvbmZpZzozNjc6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9LY29uZmlnLTM2OC1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zODUtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvaXB2NC9LY29uZmlnOjM4NjpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjQvS2NvbmZpZy0zODctXFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTkzLVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L2lwdjYvS2NvbmZpZzo5NDpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjYvS2NvbmZpZy05NS1cXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbi0tXFxubmV0L3Rscy9LY29uZmlnPTU9Y29uZmlnIFRMU1xcbi0tXFxubmV0L3Rscy9LY29uZmlnLTEwLVxcdHNlbGVjdCBDUllQVE9fR0NNXFxubmV0L3Rscy9LY29uZmlnOjExOlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvdGxzL0tjb25maWctMTItXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ0OjMwLjk0MTI1NjQ1OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2ODA4NDU4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGlzIEJQRiBTZWxlY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhlIHN5c3RlbSBpcyB1c2luZyBgQlBGX1NZU0NBTExgIGFsb25nIHdpdGggdGhlIGBORVRgIHNldHRpbmcgdG8gbWFrZSBhIHNlbGVjdGlvbi4gRnVydGhlcm1vcmUsIHRoZSBgQlBGX1NUUkVBTV9QQVJTRVJgIGFsc28gY29tZXMgaW50byBwbGF5IGhlcmUuIFRoZSBwYXRjaCBtZW50aW9ucyBgc3RycGFyc2VyYCBhbmQgYHNrYl9icGZfc3RycGFyc2VyYCwgd2hpY2ggaXMgYSBjbHVlLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBCUEZfU1RSRUFNX1BBUlNFUmAgbm93IHRvIGJldHRlciB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgcHJvY2Vzcy4gVGltZSB0byBkaWcgaW4gYSBiaXQgZnVydGhlciBvbiB0aGF0IHBhcnRpY3VsYXIgY29kZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTI0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDQ6MzUuNjIyMTA5NzM1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYzMTQ0NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0zNTQ9Y29uZmlnIEJRTFxcbi0tXFxubmV0L0tjb25maWctMzYwLVxcbm5ldC9LY29uZmlnOjM2MTpjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcXG5uZXQvS2NvbmZpZy0zNjItXFx0Ym9vbCBcXFwiZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NDozNy4zODUyNTk3OTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwNDY2NTI5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3VnZ2VzdGluZyB0aGUgaW5jbHVzaW9uIG9mIGBCUEZfU1RSRUFNX1BBUlNFUmAgYXMgYSB1c2VyLXNlbGVjdGFibGUgY29uZmlndXJhdGlvbiBvcHRpb24uIE1ha2VzIHNlbnNlOyBmbGV4aWJpbGl0eSBpcyBrZXkgaW4gQlBGLiBJJ2xsIG1ha2Ugc3VyZSB0aGF0J3MgYWNjb3VudGVkIGZvci4gSSdsbCBhbHNvIGFkZCBpbiBgQlBGX1NZU0NBTExgIOKAkyB0aGF0J3MgYSBnaXZlbiBmb3IgQlBGIGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gdGhlIGNvcmUgb2YgdGhpcy4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBzeW1ib2xzIHRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nLiBSaWdodCwgaGVyZSB0aGV5IGFyZTogYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nYCwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCwgYHNrX3Bzb2NrX2hhbmRsZV9za2JgLCBgc2tfcHNvY2tfYmFja2xvZ2AsIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAuIFRoZXkncmUgYWxsIHN0YXRpYywgd2hpY2ggZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucy4gS25vd2luZyB0aGUgY2FsbGVycyB3aWxsIGlsbHVtaW5hdGUgZXhhY3RseSBob3cgdGhlc2UgY2hhbmdlcyBhcmUgYmVpbmcgaW50ZWdyYXRlZCBhbmQgd2hhdCBpbXBhY3QgdGhleSdsbCBoYXZlIG9uIHRoZSBleGlzdGluZyBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDQ6NDEuNTg5OTI3ODY3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTExMjQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja19iYWNrbG9nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrbXNnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2ttc2cuYz03MzI9c3RhdGljIHZvaWQgc2tfcHNvY2tfc2tiX3N0YXRlKHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTc0My1cXG5uZXQvY29yZS9za21zZy5jOjc0NDpzdGF0aWMgdm9pZCBza19wc29ja19iYWNrbG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvY29yZS9za21zZy5jLTc0NS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTgzMT1zdHJ1Y3Qgc2tfcHNvY2sgKnNrX3Bzb2NrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbm9kZSlcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtODY1LVxcbm5ldC9jb3JlL3NrbXNnLmM6ODY2OlxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZwc29jay1cXHUwMDNld29yaywgc2tfcHNvY2tfYmFja2xvZyk7XFxubmV0L2NvcmUvc2ttc2cuYy04NjctXFx0bXV0ZXhfaW5pdChcXHUwMDI2cHNvY2stXFx1MDAzZXdvcmtfbXV0ZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NDo0MS42MzUwNDQyODJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA5NjMxMzk2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqUG9uZGVyaW5nIFNvY2tldCBGaWx0ZXJpbmcgYW5kIFdvcmtxdWV1ZXMqKlxuXG5SaWdodCwgc28gYHNrX3Bzb2NrX2JhY2tsb2dgLi4uIHRoYXQncyBkZWZpbml0ZWx5IGEgd29ya3F1ZXVlIGNhbGxiYWNrLCBpc24ndCBpdD8gT2theSwgZ290IGl0LiBJdCdzIGhhbmRsaW5nIGJhY2tsb2dnZWQgcGFja2V0IHNvY2tldHMuIE5vdywgd2hhdCdzIGJ1Z2dpbmcgbWUgaXMuLi4gSSdtIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgZnVuY3Rpb25zIGluIHRoYXQgYXJlYS4gV2hlcmUgZG9lcyB0aGlzIHdvcmtxdWV1ZSBmaXQgd2l0aCBvdGhlciBmaWx0ZXJpbmcgbWVjaGFuaXNtcz8gTGV0IG1lIHNlZS4uLiBJIHdvbmRlciBob3cgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGZpZ3VyZXMgaW50byBhbGwgdGhpcy4gSXMgaXQgY2FsbGVkIGJlZm9yZSwgYWZ0ZXIsIG9yIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnRseSBvZiB0aGUgd29ya3F1ZXVlIGNhbGxiYWNrPyBEb2VzIGl0IGluZmx1ZW5jZSB3aGF0IGdldHMgZW5xdWV1ZWQ/IElzIGl0IHRoZSB1bHRpbWF0ZSBkZWNpc2lvbi1tYWtlciwgb3IganVzdCBhIHBhcnQgb2YgdGhlIHByb2Nlc3M/IEkgc2hvdWxkIHJlYWxseSBtYWtlIHN1cmUgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDcyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDQ6NDguNzMxMzYwOTU3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzE5MDgxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja192ZXJkaWN0X2FwcGx5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrbXNnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2ttc2cuYz0xMDM5PXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHN0cnVjdCBza19wc29jayAqZnJvbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTA3Ni1cXG5uZXQvY29yZS9za21zZy5jOjEwNzc6c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2ttc2cuYy0xMDc4LVxcdFxcdFxcdFxcdCAgaW50IHZlcmRpY3QpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTExNjA9c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExODMtXFx0fVxcbm5ldC9jb3JlL3NrbXNnLmM6MTE4NDpcXHRza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMTg1LW91dDpcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTI4Mz1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEzMDYtXFx0fVxcbm5ldC9jb3JlL3NrbXNnLmM6MTMwNzpcXHRyZXQgPSBza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMzA4LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NDo0OC43NzQ1NTgxNjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAxMTU2MjAyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyB0aGUgUFNPQ0sgVmVyZGljdCBBcHBsaWNhdGlvbiBQYXRoKipcblxuUmlnaHQsIHNvIGBza19wc29ja19zdHJwX3JlYWRgIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCBib3RoIHNlZW0gdG8gaGluZ2Ugb24gYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSBjcml0aWNhbCwgYmVjYXVzZSB0aGF0IG1lYW5zIGFsbCB0cmFmZmljIHRoYXQgbmVlZHMgdG8gYmUgY29uc2lkZXJlZCBieSB0aGUgcHJvY2VzcyBsaWtlbHkgcGFzc2VzIHRocm91Z2ggdGhhdCBmdW5jdGlvbiBhdCBzb21lIHBvaW50LiBJdOKAmXMgdGhlIGNlbnRyYWwgcG9pbnQgd2hlcmUgdGhlIGRlY2lzaW9ucyBhYm91dCBwYWNrZXQgaGFuZGxpbmcgYXJlIG1hZGUgaW4gdGhpcyBQU09DSyAocGFja2V0IHNvY2tldCkgY29udGV4dCwgb3IgcGVyaGFwcyB3aGVyZSB0aGV5IGFyZSAqYXBwbGllZCogYXQgbGVhc3QuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGJldHRlci4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBoaWVyYXJjaHkg4oCTIHdobyAqZWxzZSogaXMgdXNpbmcgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCBhbmQgaWYgaXQncyBleHBvcnRlZCwgdGhlbiB3aGVyZSBhcmUgdGhvc2UgY2FsbHMgb3JpZ2luYXRpbmcgZnJvbT8gSXMgaXQgc29sZWx5IHdpdGhpbiB0aGUga2VybmVsIHNwYWNlLCBvciBpcyB0aGVyZSBhIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gaW52b2x2ZWQ/IFRoYXQgbGV2ZWwgb2YgZGV0YWlsIG1hdHRlcnMgKmEgbG90KiB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JraW5nIGFuZCBzZWN1cml0eSwgYW5kIGl0IGluZm9ybXMgd2hldGhlciB0aGlzIHdvdWxkIGJlIHNvbWV0aGluZyB0aGF0IG5lZWRzIGF0dGVudGlvbi4gQXJlIHRoZXJlIGFueSBvdGhlciBwYXRocyB0byBpdCwgYW5kIGFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBmdW5jdGlvbnMgdG8gY29uc2lkZXI/IFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHBvbGljeSBkZWNpc2lvbnMgYXJlIG1hZGUgZm9yIHRoZXNlIHBhY2tldCBzb2NrZXRzIGFuZCBzZWUgd2hhdCBhdmVudWVzIGV4aXN0IHRvIHBvdGVudGlhbGx5IGluZmx1ZW5jZSBvciBtb2RpZnkgdGhhdCBwcm9jZXNzLCBpZiB0aGUgbmVlZCBhcmlzZXMuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY5MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ0OjU4Ljg5MDE4MTY0NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0NTMwNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tfcHNvY2tfc3RycF9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrbXNnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2ttc2cuYz0xMTQyPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTE1OS0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxubmV0L2NvcmUvc2ttc2cuYzoxMTYwOnN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfcmVhZChzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTE2MS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExODgtXFxubmV0L2NvcmUvc2ttc2cuYzoxMTg5OnN0YXRpYyBpbnQgc2tfcHNvY2tfc3RycF9yZWFkX2RvbmUoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgaW50IGVycilcXG5uZXQvY29yZS9za21zZy5jLTExOTAte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMjI4PWludCBza19wc29ja19pbml0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjMyLVxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RycF9jYWxsYmFja3MgY2IgPSB7XFxubmV0L2NvcmUvc2ttc2cuYzoxMjMzOlxcdFxcdC5yY3ZfbXNnXFx0PSBza19wc29ja19zdHJwX3JlYWQsXFxubmV0L2NvcmUvc2ttc2cuYzoxMjM0OlxcdFxcdC5yZWFkX3NvY2tfZG9uZVxcdD0gc2tfcHNvY2tfc3RycF9yZWFkX2RvbmUsXFxubmV0L2NvcmUvc2ttc2cuYy0xMjM1LVxcdFxcdC5wYXJzZV9tc2dcXHQ9IHNrX3Bzb2NrX3N0cnBfcGFyc2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ0OjU4LjkzMzY0MTkyMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODgyNDc4OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDb25zaWRlcmluZyBgc2tfcHNvY2tfaW5pdF9zdHJwYCdzIFNjb3BlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHNrX3Bzb2NrX2luaXRfc3RycGAuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpczogaXMgdGhpcyBmdW5jdGlvbiBleHBvc2VkLCBtZWFuaW5nIGlzIGl0IGV4cG9ydGVkIG9yIG5vbi1zdGF0aWM/IElzIGl0IG1lYW50IHRvIGJlIHVzZWQgZXh0ZXJuYWxseSwgb3IgaXMgaXQgaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBtb2R1bGUgb3IgY29tcG9uZW50PyBJIG5lZWQgdG8gZmlndXJlIG91dCBpdHMgdmlzaWJpbGl0eS4gS25vd2luZyB0aGlzIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBpbmZvcm1zIGhvdyBJIGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBmdW5jdGlvbiwgaWYgYXQgYWxsLCBpbiBteSBvd24gd29yay4gQSBub24tc3RhdGljIGZ1bmN0aW9uIGltcGxpZXMgaXQncyBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLCBhbmQgSSBjYW4gY2FsbCBpdCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEEgc3RhdGljIG9uZSwgaG93ZXZlciwgaXMgbGlrZWx5IG9ubHkgbWVhbnQgZm9yIHVzZSB3aXRoaW4gaXRzIGRlZmluaW5nIHRyYW5zbGF0aW9uIHVuaXQuIFRoYXQgbWFrZXMgYSBodWdlIGRpZmZlcmVuY2UgaW4gaG93IEkgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NTEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NTowNS44MTYxMjM1MDhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjM3MTM3NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tfcHNvY2tfaW5pdF9zdHJwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2ttc2cuaD00Mzc9dm9pZCBza19wc29ja19zdG9wKHN0cnVjdCBza19wc29jayAqcHNvY2spO1xcbi0tXFxuaW5jbHVkZS9saW51eC9za21zZy5oLTQzOS0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxuaW5jbHVkZS9saW51eC9za21zZy5oOjQ0MDppbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayk7XFxuaW5jbHVkZS9saW51eC9za21zZy5oLTQ0MS12b2lkIHNrX3Bzb2NrX3N0YXJ0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmg9NDQyPXZvaWQgc2tfcHNvY2tfc3RvcF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayk7XFxuaW5jbHVkZS9saW51eC9za21zZy5oLTQ0My0jZWxzZVxcbmluY2x1ZGUvbGludXgvc2ttc2cuaDo0NDQ6c3RhdGljIGlubGluZSBpbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDQ1LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTIxMj1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjI3LVxcbm5ldC9jb3JlL3NrbXNnLmM6MTIyODppbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTEyMjkte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0yMTc9c3RhdGljIGludCBzb2NrX21hcF9saW5rKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzA2LVxcdFxcdGlmIChza19pc190Y3Aoc2spKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzA3OlxcdFxcdFxcdHJldCA9IHNrX3Bzb2NrX2luaXRfc3RycChzaywgcHNvY2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzA4LVxcdFxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDU6MDcuMzc5ODQyNTg2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MTM2NTA2NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2FsbGJhY2sgSW52ZXN0aWdhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gTXkgbWVudGFsIG1vZGVsIGhlcmUgaXMgdGhhdCBgc2tfcHNvY2tfc3RycF9yZWFkYCBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBiZSB1c2VkIHdpdGggdGhlIHN0cnBhcnNlci4gTWFrZXMgc2Vuc2UuIEl0J3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSByZWFkaW5nIHBhcnQgb2YgcGFyc2luZyBkYXRhIGludG8gYSBzdHJpbmcgZm9ybWF0LCB1c2luZyB0aGlzIHN0cnBhcnNlci4gQnV0IHdoYXQgYWJvdXQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmA/IFRoYXQgb25lJ3MgbmFnZ2luZyBhdCBtZSBhIGJpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBvdmVyYWxsIHN5c3RlbS4gSXMgaXQgYWxzbyByZWxhdGVkIHRvIGRhdGEgcmVjZXB0aW9uLCBidXQgcGVyaGFwcyBhdCBhIGhpZ2hlciBsZXZlbCwgYWZ0ZXIgdGhlIGluaXRpYWwgc3RyaW5nIHBhcnNpbmc/IElzIGl0IHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc2VjdXJpdHkgdmVyZGljdHMgYmFzZWQgb24gdGhlIHJlY2VpdmVkIGRhdGEsIG9yIGlzIGl0IHJlbGF0ZWQgdG8gcmVjZWl2aW5nIHRoZSByYXcgdmVyZGljdCBpbmZvcm1hdGlvbj8gVGltZSB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBsb29rIGludG8gdGhlIGJyb2FkZXIgY29udGV4dCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSB0d28gZnVuY3Rpb25zIGludGVyYWN0IGFuZCBmaXQgdG9nZXRoZXIgaW4gdGhlIGFyY2hpdGVjdHVyZS4gSXQncyBsaWtlbHkgdGhhdCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCB0YWtlcyBhY3Rpb24gb24gdGhlIGluZm9ybWF0aW9uIHJlY2VpdmVkIGJ5IGBza19wc29ja19zdHJwX3JlYWRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdywgYW5kIGhvdyBpdCBpbmZvcm1zIHRoZSBvdmVyYWxsIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTU1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDU6MTUuMTkzNDk2MDM3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDkzNDM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja192ZXJkaWN0X3JlY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za21zZy5jPTEyNzg9c3RhdGljIHZvaWQgc2tfcHNvY2tfZG9uZV9zdHJwKHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyODItXFxubmV0L2NvcmUvc2ttc2cuYzoxMjgzOnN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9za21zZy5jLTEyODQte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMzE1PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEzMzEtXFxubmV0L2NvcmUvc2ttc2cuYzoxMzMyOlxcdGNvcGllZCA9IG9wcy1cXHUwMDNlcmVhZF9za2Ioc2ssIHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdik7XFxubmV0L2NvcmUvc2ttc2cuYy0xMzMzLVxcdGlmIChjb3BpZWQgXFx1MDAzZT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NToxNS4yMzg0MzY4MjJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYyNTU5MTIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeWAqKlxuXG5Pa2F5LCBzbyBgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5YC4gSXQncyBhIGNhbGxiYWNrLCBhbmQgYSBwcmV0dHkgc3BlY2lmaWMgb25lIGF0IHRoYXQuIE15IGZpcnN0IHRob3VnaHQgaXM6IHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqPyBJIG5lZWQgdG8gdHJhY2UgaXRzIGNvbm5lY3Rpb25zLiBJIHdhbnQgdG8gc2VlIHdoaWNoIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIHRyaWdnZXJpbmcgaXQgYW5kIHdoYXQga2luZCBvZiBkYXRhIG9yIGFjdGlvbnMgYXJlIGJlaW5nIHByb2Nlc3NlZCB3aGVuIGl0J3MgY2FsbGVkLiBHb3R0YSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IHRvIGdyYXNwIGl0cyB0cnVlIHB1cnBvc2UgYW5kIGZ1bmN0aW9uLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzE3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDU6MjEuODY0MDMxNjY2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA3NzUzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za21zZy5jPTEyODM9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMzE0LVxcbm5ldC9jb3JlL3NrbXNnLmM6MTMxNTpzdGF0aWMgdm9pZCBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTMxNi17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTEzNDI9dm9pZCBza19wc29ja19zdGFydF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTM0Ny1cXHRwc29jay1cXHUwMDNlc2F2ZWRfZGF0YV9yZWFkeSA9IHNrLVxcdTAwM2Vza19kYXRhX3JlYWR5O1xcbm5ldC9jb3JlL3NrbXNnLmM6MTM0ODpcXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza19kYXRhX3JlYWR5LCBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTM0OS1cXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza193cml0ZV9zcGFjZSwgc2tfcHNvY2tfd3JpdGVfc3BhY2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NToyMS45MTAxMTU1NTFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc3NzA1MjM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAgRXhwb3J0KipcblxuT2theSwgc28gYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgIGlzIGV4cG9ydGVkLiBUaGF0J3MgdGhlIGtleS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCdzIHRvdWNoaW5nIGl0PyBXaGF0IHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIHJlbHlpbmcgb24gdGhpcyBmdW5jdGlvbmFsaXR5P1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGguIEknbGwgbmVlZCB0byBpZGVudGlmeSB0aGUgY2FsbCBzaXRlcyB0byBmdWxseSBncm9rIGl0cyBwdXJwb3NlIGFuZCBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBJJ20gbG9va2luZyBmb3Igd2hlcmUgdGhpcyBmdW5jdGlvbiBob29rcyBpbnRvLCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGl0cyBleGVjdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTg1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDU6MjYuNjg3MTcwMDk2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgzODE5NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za21zZy5oPTQ1Mz1zdGF0aWMgaW5saW5lIHZvaWQgc2tfcHNvY2tfc3RvcF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbmluY2x1ZGUvbGludXgvc2ttc2cuaC00NTctXFxuaW5jbHVkZS9saW51eC9za21zZy5oOjQ1ODp2b2lkIHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDU5LXZvaWQgc2tfcHNvY2tfc3RvcF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayk7XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTEzMTU9c3RhdGljIHZvaWQgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTM0MS1cXG5uZXQvY29yZS9za21zZy5jOjEzNDI6dm9pZCBza19wc29ja19zdGFydF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTEzNDMte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0yMTc9c3RhdGljIGludCBzb2NrX21hcF9saW5rKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzE2LVxcdH0gZWxzZSBpZiAoIXN0cmVhbV9wYXJzZXIgXFx1MDAyNlxcdTAwMjYgc3RyZWFtX3ZlcmRpY3QgXFx1MDAyNlxcdTAwMjYgIXBzb2NrLVxcdTAwM2VzYXZlZF9kYXRhX3JlYWR5KSB7XFxubmV0L2NvcmUvc29ja19tYXAuYzozMTc6XFx0XFx0c2tfcHNvY2tfc3RhcnRfdmVyZGljdChzayxwc29jayk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0zMTgtXFx0fSBlbHNlIGlmICghc3RyZWFtX3ZlcmRpY3QgXFx1MDAyNlxcdTAwMjYgc2tiX3ZlcmRpY3QgXFx1MDAyNlxcdTAwMjYgIXBzb2NrLVxcdTAwM2VzYXZlZF9kYXRhX3JlYWR5KSB7XFxubmV0L2NvcmUvc29ja19tYXAuYzozMTk6XFx0XFx0c2tfcHNvY2tfc3RhcnRfdmVyZGljdChzaywgcHNvY2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzIwLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDU6MjguMjcwOTk0MDAyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDM1Mzg3NTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFNvY2tldCBNYXAgTGlua2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBCUEYgc29ja2V0IG1hcCBsaW5raW5nLiBUaGUgZW50cnkgcG9pbnQsIGFzIEkgc2VlIGl0LCBpcyBgc29ja19tYXBfbGlua2AsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIHRoZSBCUEYgc3lzY2FsbC4gVGhlIG1haW4gZnVuY3Rpb25zIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2ggYXJlIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYmFja2xvZ2AsIGBza19wc29ja19za2JfaW5ncmVzc2AsIGBza19wc29ja19oYW5kbGVfc2tiYCwgYHNrX3Bzb2NrX2JhY2tsb2dgLCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIExldCdzIHNlZSwgd2UgaGF2ZSBgc2tfcHNvY2tfYmFja2xvZ2AgKGEgd29ya3F1ZXVlIGNhbGxiYWNrKSwgYHNrX3Bzb2NrX3N0cnBfcmVhZGAgKGEgc3RyaW5nIHBhcnNlciBjYWxsYmFjayksIGBza19wc29ja192ZXJkaWN0X3JlY3ZgIChhIGByZWFkX3NrYmAgY2FsbGJhY2spLCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIHdoaWNoIGlzIHN0YXRpYyBidXQgY2FsbGVkIGJ5IHRoZSBwcmV2aW91cyB0d28uXG5cbkhtbSwgd2FpdCBhIG1pbnV0ZSwgYXJlIHRob3NlIGFsbCBzdGF0aWM/IFllcywgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCBgc2tfcHNvY2tfc3RycF9yZWFkYCwgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAsIGFuZCBgc2tfcHNvY2tfYmFja2xvZ2AgYWxsIHNlZW0gdG8gYmUuIEdpdmVuIHRoZSBwYXRjaCBtb2RpZmllcyBgc2tfcHNvY2tfYmFja2xvZ2AgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCwgbXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIGlkZW50aWZ5IGlmIHRoZXJlIGFyZSBhbnkgKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucyB0aGF0IGVpdGhlciBjYWxsIG9yIGRpcmVjdGx5IHJlbHkgb24gdGhvc2UgbW9kaWZpZWQgZnVuY3Rpb25zLlxuXG5gc2tfcHNvY2tfYmFja2xvZ2AgaXMgY2FsbGVkIGJ5IHRoZSB3b3JrcXVldWUgaW5mcmFzdHJ1Y3R1cmUsIHNvIHRoZSB0cmlnZ2VyaW5nIG1lY2hhbmlzbSBpcyB0aGUgd29ya3F1ZXVlLiBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgaXMgY2FsbGVkIGJ5IGBza19wc29ja19zdHJwX3JlYWRgIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YC4gQW5kIHRob3NlIGFyZSwgcmVzcGVjdGl2ZWx5LCBhIGNhbGxiYWNrIGZvciBgc3RycF9jYWxsYmFja3MucmN2X21zZ2AgYW5kIGBvcHMtXHUwMDNlcmVhZF9za2JgLlxuXG5Pa2F5LCB0aGUgaXNzdWUgaXMgdGhhdCB0aGV5IGFyZSBhbGwgc3RhdGljLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cy4gU28sIHRoZSBzdGF0aWNuZXNzIGlzIGEgcHJvYmxlbSBnaXZlbiB0aGUgaW5zdHJ1Y3Rpb25zLiBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmUgaW5kaXJlY3RseSBhZmZlY3RlZC4gSXQgbG9va3MgbGlrZSBgc29ja19tYXBfbGlua2AgKmlzKiBzdGF0aWMuIFdoYXQgYWJvdXQgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtYD9cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDU6MzguMzA2Mzg0ODQzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDU5MTM4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2NrX21hcF91cGRhdGVfZWxlbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmM9NTU1PXN0YXRpYyBpbnQgc29ja19oYXNoX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01NTctXFxubmV0L2NvcmUvc29ja19tYXAuYzo1NTg6aW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTU5LVxcdFxcdFxcdCAgICAgdTY0IGZsYWdzKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01OTgtXFxubmV0L2NvcmUvc29ja19tYXAuYzo1OTk6c3RhdGljIGxvbmcgc29ja19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjAwLVxcdFxcdFxcdFxcdCB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz04MzE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHNvY2tfbWFwX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM2LVxcdC5tYXBfbG9va3VwX2VsZW1fc3lzX29ubHkgPSBzb2NrX21hcF9sb29rdXBfc3lzLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM3OlxcdC5tYXBfdXBkYXRlX2VsZW1cXHQ9IHNvY2tfbWFwX3VwZGF0ZV9lbGVtLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM4LVxcdC5tYXBfZGVsZXRlX2VsZW1cXHQ9IHNvY2tfbWFwX2RlbGV0ZV9lbGVtLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xNDQ3PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX2hhc2hfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDUxLVxcdC5tYXBfZ2V0X25leHRfa2V5XFx0PSBzb2NrX2hhc2hfZ2V0X25leHRfa2V5LFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ1MjpcXHQubWFwX3VwZGF0ZV9lbGVtXFx0PSBzb2NrX21hcF91cGRhdGVfZWxlbSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NTMtXFx0Lm1hcF9kZWxldGVfZWxlbVxcdD0gc29ja19oYXNoX2RlbGV0ZV9lbGVtLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NTozOC4zNTA5ODE3NDhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU1NDkyMzU2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEYXRhIEZsb3cgb2YgUGFja2V0IFNvY2tldHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBkYXRhIG1vdmVzIHRocm91Z2ggdGhlc2UgcGFja2V0IHNvY2tldHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGF0IGZ1bmN0aW9ucyBsaWtlIGBza19wc29ja19pbml0X3N0cnBgIGFuZCBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAsIGJlY2F1c2UgdGhleSdyZSBub3QgZGVjbGFyZWQgYXMgc3RhdGljLiBCdXQsIHdhaXQsIHRob3NlIGFyZSBqdXN0IGFib3V0ICppbml0aWFsaXppbmcqIHRoaW5ncyBhbmQgc2V0dGluZyB1cCBjYWxsYmFja3MuIFRoZSBhY3R1YWwgdmVyZGljdCwgdGhlIGFjdHVhbCBwcm9jZXNzaW5nIG9mIGRhdGEsIHRoYXQgZG9lc24ndCBoYXBwZW4gdW50aWwgZGF0YSBpcyByZWNlaXZlZCwgcmlnaHQ/XG5cbkRhdGEgcmVjZXB0aW9uLiBUaGF0J3MgdGhlIGtleS4gVGhhdCB0cmlnZ2VycyBgc2tfZGF0YV9yZWFkeWAsIHdoaWNoIHRoZW4gcG9pbnRzIHRvIGVpdGhlciBgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5YCBvciBgc3RycF9kYXRhX3JlYWR5YC4gTm93LCBJIHJlY2FsbCB0aGF0IGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgIGlzIHN0YXRpYywgd2hpY2ggbGltaXRzIGl0cyBzY29wZS4gIE9rYXkuIFdoYXQgYWJvdXQgYHN0cnBfZGF0YV9yZWFkeWA/IExldCBtZSBzZWXigKYgeWVwLCB0aGF0J3MgaW4gYG5ldC9zdHJwYXJzZXIvc3RycGFyc2VyLmNgLCBhcyBJIGV4cGVjdGVkLlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBkYXRhIGZsb3cgaXMgbGlrZWx5IGluaXRpYXRlZCBieSBzb21lIGtpbmQgb2YgZXh0ZXJuYWwgZXZlbnQgY2F1c2luZyBkYXRhIHRvIGJlIHBsYWNlZCBpbiBgc2tfZGF0YV9yZWFkeWAuIFRpbWUgdG8gc2hpZnQgZm9jdXMuIExldCdzIHNoaWZ0IG91ciBnYXplIHRvIGBuZXQvY29yZS9za21zZy5jYCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZSB0aGF0IG1pZ2h0IGJlIGludm9sdmVkIHdpdGggaGFuZGxpbmcgdGhlIGRhdGEgcGF0aCBvciByZWxhdGVkIHByb2Nlc3NpbmcuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzODYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDU6NTMuOTAwMjIwMjk4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE0NzA2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2Etel0uKnNrX3Bzb2NrLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za21zZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrbXNnLmM9NTIyPXN0YXRpYyBzdHJ1Y3Qgc2tfbXNnICphbGxvY19za19tc2coZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy01MzItXFxubmV0L2NvcmUvc2ttc2cuYzo1MzM6c3RhdGljIHN0cnVjdCBza19tc2cgKnNrX3Bzb2NrX2NyZWF0ZV9pbmdyZXNzX21zZyhzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2NvcmUvc2ttc2cuYy01MzQtXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy01NDQtXFxubmV0L2NvcmUvc2ttc2cuYzo1NDU6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2ttc2cuYy01NDYtXFx0XFx0XFx0XFx0XFx0dTMyIG9mZiwgdTMyIGxlbixcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNTg3LVxcbm5ldC9jb3JlL3NrbXNnLmM6NTg4OnN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3NrbXNnLmMtNTg5LVxcdFxcdFxcdFxcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZixcXG5uZXQvY29yZS9za21zZy5jLTU5MC1cXHRcXHRcXHRcXHQgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYyk7XFxubmV0L2NvcmUvc2ttc2cuYzo1OTE6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2JhY2tsb2coc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG5uZXQvY29yZS9za21zZy5jLTU5Mi1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTU5NS1cXG5uZXQvY29yZS9za21zZy5jOjU5NjpzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2ttc2cuYy01OTctXFx0XFx0XFx0XFx0dTMyIG9mZiwgdTMyIGxlbiwgYm9vbCBzZXR0bGVfZndkX2FsbG9jKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy02MjMtXFxubmV0L2NvcmUvc2ttc2cuYzo2MjQ6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbihzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2NvcmUvc2ttc2cuYy02MjUtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTY0OS0gKi9cXG5uZXQvY29yZS9za21zZy5jOjY1MDpzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za21zZy5jLTY1MS1cXHRcXHRcXHRcXHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTY4MC1cXG5uZXQvY29yZS9za21zZy5jOjY4MTpzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYmFja2xvZyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxcbm5ldC9jb3JlL3NrbXNnLmMtNjgyLVxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNzE0LVxcbm5ldC9jb3JlL3NrbXNnLmM6NzE1OnN0YXRpYyBpbnQgc2tfcHNvY2tfaGFuZGxlX3NrYihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3NrbXNnLmMtNzE2LVxcdFxcdFxcdCAgICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIGluZ3Jlc3MsXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTczMS1cXG5uZXQvY29yZS9za21zZy5jOjczMjpzdGF0aWMgdm9pZCBza19wc29ja19za2Jfc3RhdGUoc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG5uZXQvY29yZS9za21zZy5jLTczMy1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX3Bzb2NrX3dvcmtfc3RhdGUgKnN0YXRlLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy03NDMtXFxubmV0L2NvcmUvc2ttc2cuYzo3NDQ6c3RhdGljIHZvaWQgc2tfcHNvY2tfYmFja2xvZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L2NvcmUvc2ttc2cuYy03NDUte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy04MzAtXFxubmV0L2NvcmUvc2ttc2cuYzo4MzE6c3RydWN0IHNrX3Bzb2NrICpza19wc29ja19pbml0KHN0cnVjdCBzb2NrICpzaywgaW50IG5vZGUpXFxubmV0L2NvcmUvc2ttc2cuYy04MzIte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz04ODQ9RVhQT1JUX1NZTUJPTF9HUEwoc2tfcHNvY2tfaW5pdCk7XFxubmV0L2NvcmUvc2ttc2cuYy04ODUtXFxubmV0L2NvcmUvc2ttc2cuYzo4ODY6c3RydWN0IHNrX3Bzb2NrX2xpbmsgKnNrX3Bzb2NrX2xpbmtfcG9wKHN0cnVjdCBza19wc29jayAqcHNvY2spXFxubmV0L2NvcmUvc2ttc2cuYy04ODcte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy04OTgtXFxubmV0L2NvcmUvc2ttc2cuYzo4OTk6c3RhdGljIHZvaWQgX19za19wc29ja19wdXJnZV9pbmdyZXNzX21zZyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtOTAwLXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtOTEzLVxcbm5ldC9jb3JlL3NrbXNnLmM6OTE0OnN0YXRpYyB2b2lkIF9fc2tfcHNvY2tfemFwX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTkxNS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTkyNC1cXG5uZXQvY29yZS9za21zZy5jOjkyNTpzdGF0aWMgdm9pZCBza19wc29ja19saW5rX2Rlc3Ryb3koc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTkyNi17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTkzNC1cXG5uZXQvY29yZS9za21zZy5jOjkzNTp2b2lkIHNrX3Bzb2NrX3N0b3Aoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTkzNi17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTk0Mi1cXG5uZXQvY29yZS9za21zZy5jOjk0MzpzdGF0aWMgdm9pZCBza19wc29ja19kb25lX3N0cnAoc3RydWN0IHNrX3Bzb2NrICpwc29jayk7XFxubmV0L2NvcmUvc2ttc2cuYy05NDQtXFxubmV0L2NvcmUvc2ttc2cuYzo5NDU6c3RhdGljIHZvaWQgc2tfcHNvY2tfZGVzdHJveShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L2NvcmUvc2ttc2cuYy05NDYte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy05NjktXFxubmV0L2NvcmUvc2ttc2cuYzo5NzA6dm9pZCBza19wc29ja19kcm9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTk3MS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTk4Nj1FWFBPUlRfU1lNQk9MX0dQTChza19wc29ja19kcm9wKTtcXG5uZXQvY29yZS9za21zZy5jLTk4Ny1cXG5uZXQvY29yZS9za21zZy5jOjk4ODpzdGF0aWMgaW50IHNrX3Bzb2NrX21hcF92ZXJkKGludCB2ZXJkaWN0LCBib29sIHJlZGlyKVxcbm5ldC9jb3JlL3NrbXNnLmMtOTg5LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTAwMC1cXG5uZXQvY29yZS9za21zZy5jOjEwMDE6aW50IHNrX3Bzb2NrX21zZ192ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG5uZXQvY29yZS9za21zZy5jLTEwMDItXFx0XFx0XFx0IHN0cnVjdCBza19tc2cgKm1zZylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTAzNz1FWFBPUlRfU1lNQk9MX0dQTChza19wc29ja19tc2dfdmVyZGljdCk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMDM4LVxcbm5ldC9jb3JlL3NrbXNnLmM6MTAzOTpzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChzdHJ1Y3Qgc2tfcHNvY2sgKmZyb20sIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvc2ttc2cuYy0xMDQwLXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTA3Ni1cXG5uZXQvY29yZS9za21zZy5jOjEwNzc6c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2ttc2cuYy0xMDc4LVxcdFxcdFxcdFxcdCAgaW50IHZlcmRpY3QpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExNDEtXFxubmV0L2NvcmUvc2ttc2cuYzoxMTQyOnN0YXRpYyB2b2lkIHNrX3Bzb2NrX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9za21zZy5jLTExNDMte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMTU5LSNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5uZXQvY29yZS9za21zZy5jOjExNjA6c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvc2ttc2cuYy0xMTYxLXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTE4OC1cXG5uZXQvY29yZS9za21zZy5jOjExODk6c3RhdGljIGludCBza19wc29ja19zdHJwX3JlYWRfZG9uZShzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBpbnQgZXJyKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTE5MC17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExOTMtXFxubmV0L2NvcmUvc2ttc2cuYzoxMTk0OnN0YXRpYyBpbnQgc2tfcHNvY2tfc3RycF9wYXJzZShzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTE5NS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyMTEtLyogQ2FsbGVkIHdpdGggc29ja2V0IGxvY2sgaGVsZC4gKi9cXG5uZXQvY29yZS9za21zZy5jOjEyMTI6c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9za21zZy5jLTEyMTMte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjI3LVxcbm5ldC9jb3JlL3NrbXNnLmM6MTIyODppbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTEyMjkte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjQ4LVxcbm5ldC9jb3JlL3NrbXNnLmM6MTI0OTp2b2lkIHNrX3Bzb2NrX3N0YXJ0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTI1MC17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyNTgtXFxubmV0L2NvcmUvc2ttc2cuYzoxMjU5OnZvaWQgc2tfcHNvY2tfc3RvcF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTEyNjAte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjcwLVxcbm5ldC9jb3JlL3NrbXNnLmM6MTI3MTpzdGF0aWMgdm9pZCBza19wc29ja19kb25lX3N0cnAoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTEyNzIte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjc3LSNlbHNlXFxubmV0L2NvcmUvc2ttc2cuYzoxMjc4OnN0YXRpYyB2b2lkIHNrX3Bzb2NrX2RvbmVfc3RycChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTI3OS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyODItXFxubmV0L2NvcmUvc2ttc2cuYzoxMjgzOnN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9za21zZy5jLTEyODQte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMzE0LVxcbm5ldC9jb3JlL3NrbXNnLmM6MTMxNTpzdGF0aWMgdm9pZCBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTMxNi17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEzNDEtXFxubmV0L2NvcmUvc2ttc2cuYzoxMzQyOnZvaWQgc2tfcHNvY2tfc3RhcnRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxubmV0L2NvcmUvc2ttc2cuYy0xMzQzLXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTM1MS1cXG5uZXQvY29yZS9za21zZy5jOjEzNTI6dm9pZCBza19wc29ja19zdG9wX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTM1My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ1OjUzLjk0NTM3MjA3M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTIxNDE1NDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQU29jayBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoZXNlIFBTb2NrIGZ1bmN0aW9ucy4gSSBzZWUgYSBjbGVhciBwYXR0ZXJuIGhlcmUuIFByaW1hcmlseSwgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIOKAkyBgc2tfcHNvY2tfaW5pdGAsIGBza19wc29ja19saW5rX3BvcGAsIGBza19wc29ja19zdG9wYCwgYHNrX3Bzb2NrX2Ryb3BgLCBgc2tfcHNvY2tfaW5pdF9zdHJwYCwgYHNrX3Bzb2NrX3N0YXJ0X3N0cnBgLCBgc2tfcHNvY2tfc3RvcF9zdHJwYCwgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgLCBgc2tfcHNvY2tfc3RvcF92ZXJkaWN0YCDigJMgYXJlIG1vc3RseSBmb2N1c2VkIG9uIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93bi4gU3RhbmRhcmQgc3R1ZmY7IHNldHRpbmcgdXAgcmVzb3VyY2VzLCB0ZWFyaW5nIHRoZW0gZG93bi4gTm90aGluZyBwYXJ0aWN1bGFybHkgZ3JvdW5kYnJlYWtpbmcgdGhlcmUuXG5cblRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBkYXRhIHBhdGguIFRoZSBuZXR3b3JraW5nIHN0YWNrIGlzbid0IGRpcmVjdGx5IGNhbGxpbmcgdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhlIHNvY2tldCBsYXllciBpcyB0cmlnZ2VyaW5nIHRoZSBkYXRhIGZsb3cgdmlhIGBza19kYXRhX3JlYWR5YCBvciBgc2tfd3JpdGVfc3BhY2VgLCBhbmQgd2UncmUgaG9va2luZyBpbnRvIHRoYXQuIFNvLCBpbnN0ZWFkIG9mIHRoZSB1c3VhbCBgdGNwX2RhdGFfcmVhZHlgLCB3ZSBoYXZlIHNvbWV0aGluZyBsaWtlIGBza19wc29ja19zdHJwX2RhdGFfcmVhZHlgIG9yIGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgIHdoaWNoIGFyZSBzdGF0aWMuIFRoZXkgYXJlIHVzZWQgaW50ZXJuYWxseSBmb3IgZGF0YSBoYW5kbGluZy4gVGhpcyBpcyBob3cgdGhlIFBTb2NrIGludGVyYWN0cyB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGBza19wc29ja19tc2dfdmVyZGljdGAgaXMgZXhwb3J0ZWQuIFRoYXQncyBub3Qgd2hhdCBJIGV4cGVjdGVkLiBMZXQncyBkZWx2ZSBpbnRvIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZzsgdGhlcmUgbWF5IGJlIGEgY2x1ZSBoZXJlLiBUaGlzIGJlYXJzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4MDAsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDY6MDEuNDY2NzkwMzg1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg0MzIxMTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3Bzb2NrX21zZ192ZXJkaWN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2ttc2cuaD00NTk9dm9pZCBza19wc29ja19zdG9wX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKTtcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDYwLVxcbmluY2x1ZGUvbGludXgvc2ttc2cuaDo0NjE6aW50IHNrX3Bzb2NrX21zZ192ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNDYyLVxcdFxcdFxcdCBzdHJ1Y3Qgc2tfbXNnICptc2cpO1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz05ODg9c3RhdGljIGludCBza19wc29ja19tYXBfdmVyZChpbnQgdmVyZGljdCwgYm9vbCByZWRpcilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTAwMC1cXG5uZXQvY29yZS9za21zZy5jOjEwMDE6aW50IHNrX3Bzb2NrX21zZ192ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG5uZXQvY29yZS9za21zZy5jLTEwMDItXFx0XFx0XFx0IHN0cnVjdCBza19tc2cgKm1zZylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTAzNi19XFxubmV0L2NvcmUvc2ttc2cuYzoxMDM3OkVYUE9SVF9TWU1CT0xfR1BMKHNrX3Bzb2NrX21zZ192ZXJkaWN0KTtcXG5uZXQvY29yZS9za21zZy5jLTEwMzgtXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NDE4PXN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTQzNC1cXHRcXHRkZWx0YSA9IG1zZy1cXHUwMDNlc2cuc2l6ZTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NDM1OlxcdFxcdHBzb2NrLVxcdTAwM2VldmFsID0gc2tfcHNvY2tfbXNnX3ZlcmRpY3Qoc2ssIHBzb2NrLCBtc2cpO1xcbm5ldC9pcHY0L3RjcF9icGYuYy00MzYtXFx0XFx0ZGVsdGEgLT0gbXNnLVxcdTAwM2VzZy5zaXplO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NjowMy4wNTExMTU5NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzgwNDM4MjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIEJQRiBJbmdyZXNzIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc29tZXRoaW5nIGZlZWxzIG9mZi4gYHRjcF9icGZfc2VuZF92ZXJkaWN0YCBpcyBjYWxsZWQgZnJvbSBgdGNwX2JwZl9zZW5kbXNnYCwgYnV0IHRoZSBwYXRjaCBkZXNjcmlwdGlvbiBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIGluZ3Jlc3MgZnVuY3Rpb25hbGl0eSwgbm90IHRoZSBzZW5kaW5nIHBhdGguIFRoYXQncyBteSBmaXJzdCByZWQgZmxhZywgYXMgdGhpcyBjb25uZWN0aW9uIGlzIG5vdCB0aGUgcHJpbWFyeSBmb2N1cy5cblxuTGV0J3Mgc2VlLCBpdCdzIG1vZGlmeWluZyBhIGJ1bmNoIG9mIGZ1bmN0aW9uczogYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nYCwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCwgYHNrX3Bzb2NrX2hhbmRsZV9za2JgLCBgc2tfcHNvY2tfYmFja2xvZ2AsIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAuIFJpZ2h0LCB0aGVzZSBhcmUgYWxsIGRlZmluaXRlbHkgaW5ncmVzcy1yZWxhdGVkLiBUaGF0IGxpbmVzIHVwLiBUaGUgaW5ncmVzcyBlbnRyeSBwb2ludHMgSSdtIGZhbWlsaWFyIHdpdGgsIGF0IGxlYXN0IGluIHRoaXMgY29udGV4dCwgYXJlIGBza19wc29ja19zdHJwX2RhdGFfcmVhZHlgIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5YC5cblxuV2FpdCwgYSBzZWNvbmQuIGBza19wc29ja19iYWNrbG9nYC4uLiB0aGF0J3MgdGhlIHdvcmtxdWV1ZSBjYWxsYmFjaywgaXNuJ3QgaXQ/IE9rYXksIEknbSBnZXR0aW5nIGEgYmV0dGVyIHBpY3R1cmUgaGVyZSwgYnV0IHN0aWxsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGV4YWN0IGNvbm5lY3Rpb24uXG5cbkhtbSwgSSB3b25kZXIgaWYgdGhlcmUncyBhIGdvb2QsIG5vbi1zdGF0aWMgZnVuY3Rpb24gSSBjYW4gdXNlIGFzIGEgY2VudHJhbCBwb2ludCwgYSBmb2N1cyBzeW1ib2wsIHRvIGJldHRlciB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgYWxsIGZpdHMgaW4/IFBlcmhhcHMgYHRjcF9icGZfcmVjdm1zZ2A/IFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODY4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ2OjA4LjQzMTU1NzgyM1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NzEzMjU0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYnBmX3JlY3Ztc2dcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2ttc2cuYz01OTY9c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy02MTMtXFx0ICogd2Ugd2lsbCBldmVudHVhbGx5IHJlY2VpdmUgdGhpcyBkYXRhIG9uLiBUaGUgZGF0YSB3aWxsIGJlIHJlbGVhc2VkXFxubmV0L2NvcmUvc2ttc2cuYzo2MTQ6XFx0ICogZnJvbSBza2JfY29uc3VtZSBmb3VuZCBpbiBfX3RjcF9icGZfcmVjdm1zZygpIGFmdGVyIGl0cyBiZWVuIGNvcGllZFxcbm5ldC9jb3JlL3NrbXNnLmMtNjE1LVxcdCAqIGludG8gdXNlciBidWZmZXJzLlxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz02NTA9c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTY2NC1cXG5uZXQvY29yZS9za21zZy5jOjY2NTpcXHQvKiBUaGlzIGlzIHVzZWQgaW4gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZVxcbm5ldC9jb3JlL3NrbXNnLmMtNjY2LVxcdCAqIGRhdGEgb3JpZ2luYXRlcyBmcm9tIHRoZSBzb2NrZXQncyBvd24gcHJvdG9jb2wgc3RhY2suIE5vIG5lZWQgdG9cXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9NjgxPXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTY5OC1cXG5uZXQvY29yZS9za21zZy5jOjY5OTpcXHQvKiBUaGlzIGlzIHVzZWQgaW4gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZVxcbm5ldC9jb3JlL3NrbXNnLmMtNzAwLVxcdCAqIGRhdGEgb3JpZ2luYXRlcyBmcm9tIHRoZSBzb2NrZXQncyBvd24gcHJvdG9jb2wgc3RhY2suIE5vIG5lZWQgdG9cXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz0yMDM9c3RhdGljIGJvb2wgaXNfbmV4dF9tc2dfZmluKHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMjIwLVxcbm5ldC9pcHY0L3RjcF9icGYuYzoyMjE6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMjIyLVxcdFxcdFxcdFxcdCAgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTMzNT1zdGF0aWMgaW50IHRjcF9icGZfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzY3LVxcbm5ldC9pcHY0L3RjcF9icGYuYzozNjg6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxubmV0L2lwdjQvdGNwX2JwZi5jLTM2OS1cXHRcXHRcXHQgICBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjQwPXN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQ1LVxcdHByb3RbVENQX0JQRl9CQVNFXS5jbG9zZVxcdFxcdD0gc29ja19tYXBfY2xvc2U7XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY0NjpcXHRwcm90W1RDUF9CUEZfQkFTRV0ucmVjdm1zZ1xcdFxcdD0gdGNwX2JwZl9yZWN2bXNnO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NDctXFx0cHJvdFtUQ1BfQlBGX0JBU0VdLnNvY2tfaXNfcmVhZGFibGVcXHQ9IHNrX21zZ19pc19yZWFkYWJsZTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NTMtXFx0cHJvdFtUQ1BfQlBGX1JYXVxcdFxcdFxcdD0gcHJvdFtUQ1BfQlBGX0JBU0VdO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTQ6XFx0cHJvdFtUQ1BfQlBGX1JYXS5yZWN2bXNnXFx0XFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NTUtXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY1Ni1cXHRwcm90W1RDUF9CUEZfVFhSWF1cXHRcXHRcXHQ9IHByb3RbVENQX0JQRl9UWF07XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY1NzpcXHRwcm90W1RDUF9CUEZfVFhSWF0ucmVjdm1zZ1xcdFxcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjU4LX1cXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz02OTA9aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzEzLVxcdCAqIEZvciBTS19SRURJUkVDVCwgd2UgbmVlZCB0byBhY2sgdGhlIGZyYW1lIGltbWVkaWF0ZWx5IGJ1dCBmb3JcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzE0OlxcdCAqIFNLX1BBU1MsIHdlIHdhbnQgdG8gZGVsYXkgdGhlIGFjayB1bnRpbCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkuXFxubmV0L2lwdjQvdGNwX2JwZi5jLTcxNS1cXHQgKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYz0xMTEzPXN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF96Yyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jLTExNDgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jOjExNDk6XFx0LyogdHJpZ2dlciB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyIGFuZCBpbmMgY29waWVkX3NlcSBvZiBwMSAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYy0xMTUwLVxcdHJlY3ZkID0gcmVjdl90aW1lb3V0KHAxLCByY3YsIHNpemVvZihyY3YpLCBNU0dfRE9OVFdBSVQsIDEpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmM9MTg9c3RhdGljIGNvbnN0IGludCB0ZXN0X3BhY2tldF9udW0gPSAxMDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtMTktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmM6MjA6LyogQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkgaW52b2tlcyBkYXRhX3JlYWR5XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtMjEtICogd2l0aCBzayBoZWxkIGlmIGFuIHNrYiBleGlzdHMgaW4gc2tfcmVjZWl2ZV9xdWV1ZS4gVGhlbiBmb3IgdGhlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYz0yOTM9c3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnBfcGFzcyhpbnQgZmFtaWx5LCBpbnQgc290eXBlLCBib29sIGZpb25yZWFkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMtMzExLVxcdCAqIGNvcnJlY3RseSBiZWNhdXNlIHdlIGNoZWNrIHNrX3JlY2VpdmVfcXVldWUgaW5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYzozMTI6XFx0ICogdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jLTMxMy1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDY6MTAuMDA4Njk4NjFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU4NjU2MTczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRnVuY3Rpb24gVmlzaWJpbGl0eSBpbiB0aGUgVENQIEJQRiBhbmQgU29jayBNYXAgU3Vic3lzdGVtcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgd2FzIGxvb2tpbmcgYXQgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBpbml0aWFsbHkgdGhvdWdodCBpdCB3YXMgbm9uLXN0YXRpYywgYnV0IHRoZW4gSSByZWFsaXplZCBpdCAqaXMqIHN0YXRpYyB3aXRoaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AuIEdvb2QgY2F0Y2gsIG1lISBTbywgSSBjb25maXJtZWQgYHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAuIEZpbmUuIEFuZCBgdGNwX2JwZl9yZWN2bXNnYC4uLiB5ZXAsIGFsc28gYHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnYC4gVGhhdCBtYWtlcyBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiBrZWVwaW5nIHRob3NlIHBhcnNpbmcgZnVuY3Rpb25zIGludGVybmFsIHRvIHRoZSBUQ1AgQlBGIGltcGxlbWVudGF0aW9uLlxuXG5Ob3csIHNoaWZ0aW5nIGdlYXJzLCBJIG1vdmVkIG9uIHRvIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHBhY2tldCBzb2NrZXRzIChgcHNvY2tgKS4gYHNrX3Bzb2NrX2luaXRfc3RycGAgaXMgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdCBmb3IgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uIFNpbWlsYXJseSwgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgLCBgc2tfcHNvY2tfbXNnX3ZlcmRpY3RgLCBgc2tfcHNvY2tfZHJvcGAsIGBza19wc29ja19zdG9wYCwgYHNrX3Bzb2NrX2luaXRgLCBhbmQgYHNrX3Bzb2NrX2xpbmtfcG9wYCBhcmUgYWxsIG5vbi1zdGF0aWMuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZXkncmUgcGFydCBvZiB0aGUgcHVibGljIEFQSSBvciBhdCBsZWFzdCB1c2VkIG1vcmUgYnJvYWRseSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIFNvLCB0aGV5IGFsbCBoYXZlIGEgYnJvYWRlciBzY29wZS5cblxuTmV4dCBzdGVwPyBJJ2xsIHByb2JhYmx5IHNjYW4gdGhyb3VnaCBgbmV0L2NvcmUvc29ja19tYXAuY2AgdG8gc2VlIHdoaWNoIGZ1bmN0aW9ucyB0aGVyZSBhcmUgbm9uLXN0YXRpYyBhbmQgaG93IHRoZXkgYXJlIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDYzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ2OjE4LjU5NTI2Mjg1MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNTYxODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpdLipzb2NrX21hcC4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc29ja19tYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jPTMyPXN0YXRpYyBERUZJTkVfTVVURVgoc29ja21hcF9tdXRleCk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0zMy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjM0OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzUtXFx0XFx0XFx0XFx0c3RydWN0IGJwZl9wcm9nICpvbGQsIHN0cnVjdCBicGZfbGluayAqbGluayxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM2LVxcdFxcdFxcdFxcdHUzMiB3aGljaCk7XFxubmV0L2NvcmUvc29ja19tYXAuYzozNzpzdGF0aWMgc3RydWN0IHNrX3Bzb2NrX3Byb2dzICpzb2NrX21hcF9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzk6c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjctXFxubmV0L2NvcmUvc29ja19tYXAuYzo2ODppbnQgc29ja19tYXBfZ2V0X2Zyb21fZmQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTY5LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODUtXFxubmV0L2NvcmUvc29ja19tYXAuYzo4NjppbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTg3LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTE2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTE3OnN0YXRpYyB2b2lkIHNvY2tfbWFwX3NrX2FjcXVpcmUoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTE4LVxcdF9fYWNxdWlyZXMoXFx1MDAyNnNrLVxcdTAwM2Vza19sb2NrLnNsb2NrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjMtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMjQ6c3RhdGljIHZvaWQgc29ja19tYXBfc2tfcmVsZWFzZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjUtXFx0X19yZWxlYXNlcyhcXHUwMDI2c2stXFx1MDAzZXNrX2xvY2suc2xvY2spXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEzMC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjEzMTpzdGF0aWMgdm9pZCBzb2NrX21hcF9hZGRfbGluayhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTMyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19wc29ja19saW5rICpsaW5rLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDEtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNDI6c3RhdGljIHZvaWQgc29ja19tYXBfZGVsX2xpbmsoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19wc29jayAqcHNvY2ssIHZvaWQgKmxpbmtfcmF3KVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzgtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNzk6c3RhdGljIHZvaWQgc29ja19tYXBfdW5yZWYoc3RydWN0IHNvY2sgKnNrLCB2b2lkICpsaW5rX3JhdylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4MC17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4OC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4OTpzdGF0aWMgaW50IHNvY2tfbWFwX2luaXRfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTkwLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTk2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTk3OnN0YXRpYyBzdHJ1Y3Qgc2tfcHNvY2sgKnNvY2tfbWFwX3Bzb2NrX2dldF9jaGVja2VkKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5OC17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTIxNi1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjIxNzpzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjE4LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzM4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzM5OnN0YXRpYyB2b2lkIHNvY2tfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM0MC17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTM3MS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjM3MjpzdGF0aWMgdm9pZCBzb2NrX21hcF9yZWxlYXNlX3Byb2dzKHN0cnVjdCBicGZfbWFwICptYXApXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNzMte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNzYtXFxubmV0L2NvcmUvc29ja19tYXAuYzozNzc6c3RhdGljIHN0cnVjdCBzb2NrICpfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXkpXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNzgte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zODctXFxubmV0L2NvcmUvc29ja19tYXAuYzozODg6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxubmV0L2NvcmUvc29ja19tYXAuYy0zODkte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zOTktXFxubmV0L2NvcmUvc29ja19tYXAuYzo0MDA6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDAxLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDE0LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDE1OnN0YXRpYyBpbnQgX19zb2NrX21hcF9kZWxldGUoc3RydWN0IGJwZl9zdGFiICpzdGFiLCBzdHJ1Y3Qgc29jayAqc2tfdGVzdCxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQxNi1cXHRcXHRcXHQgICAgIHN0cnVjdCBzb2NrICoqcHNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00MzMtXFxubmV0L2NvcmUvc29ja19tYXAuYzo0MzQ6c3RhdGljIHZvaWQgc29ja19tYXBfZGVsZXRlX2Zyb21fbGluayhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2NvcmUvc29ja19tYXAuYy00MzUtXFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqbGlua19yYXcpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ0MS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjQ0MjpzdGF0aWMgbG9uZyBzb2NrX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxubmV0L2NvcmUvc29ja19tYXAuYy00NDMte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00NTQtXFxubmV0L2NvcmUvc29ja19tYXAuYzo0NTU6c3RhdGljIGludCBzb2NrX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDU2LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDY5LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDcwOnN0YXRpYyBpbnQgc29ja19tYXBfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIgaWR4LFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDcxLVxcdFxcdFxcdFxcdCAgc3RydWN0IHNvY2sgKnNrLCB1NjQgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTUyMC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjUyMTpzdGF0aWMgYm9vbCBzb2NrX21hcF9vcF9va2F5KGNvbnN0IHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqb3BzKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTIyLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTI3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTI4OnN0YXRpYyBib29sIHNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTI5LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTM1LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTM2OnN0YXRpYyBib29sIHNvY2tfbWFwX3NrX2lzX3N1aXRhYmxlKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTUzNy17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTU0MC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjU0MTpzdGF0aWMgYm9vbCBzb2NrX21hcF9za19zdGF0ZV9hbGxvd2VkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU0Mi17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTU1NT1zdGF0aWMgaW50IHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTU3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTU4OmludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU1OS1cXHRcXHRcXHQgICAgIHU2NCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTk4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTk5OnN0YXRpYyBsb25nIHNvY2tfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTYwMC1cXHRcXHRcXHRcXHQgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NzE5PURFRklORV9CUEZfSVRFUl9GVU5DKHNvY2ttYXAsIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy03MjItXFxubmV0L2NvcmUvc29ja19tYXAuYzo3MjM6c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8pXFxubmV0L2NvcmUvc29ja19tYXAuYy03MjQte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy03MzMtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3MzQ6c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxubmV0L2NvcmUvc29ja19tYXAuYy03MzUtXFx0X19hY3F1aXJlcyhyY3UpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTc0Ni1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjc0NzpzdGF0aWMgdm9pZCAqc29ja19tYXBfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzQ4LVxcdF9fbXVzdF9ob2xkKHJjdSlcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzU3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NzU4OnN0YXRpYyBpbnQgc29ja19tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubmV0L2NvcmUvc29ja19tYXAuYy03NTktXFx0X19tdXN0X2hvbGQocmN1KVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy03ODAtXFxubmV0L2NvcmUvc29ja19tYXAuYzo3ODE6c3RhdGljIHZvaWQgc29ja19tYXBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubmV0L2NvcmUvc29ja19tYXAuYy03ODItXFx0X19yZWxlYXNlcyhyY3UpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTc5MT1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNvY2tfbWFwX3NlcV9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTc5Ny1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjc5ODpzdGF0aWMgaW50IHNvY2tfbWFwX2luaXRfc2VxX3ByaXZhdGUodm9pZCAqcHJpdl9kYXRhLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzk5LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTgwNy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjgwODpzdGF0aWMgdm9pZCBzb2NrX21hcF9maW5pX3NlcV9wcml2YXRlKHZvaWQgKnByaXZfZGF0YSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTgwOS17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTgxNC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjgxNTpzdGF0aWMgdTY0IHNvY2tfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODE2LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTQ0Nz1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19oYXNoX29wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ2Mi1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0NjM6c3RhdGljIHN0cnVjdCBza19wc29ja19wcm9ncyAqc29ja19tYXBfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcClcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NjQte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDc2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTQ3NzpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfbGlua19sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICoqKnBwcm9nLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ3OC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfbGluayAqKipwbGluaywgdTMyIHdoaWNoKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTE5LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTUyMDpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfYXR0YWNoX2NoZWNrKGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUyMS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MzYtICovXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNTM3OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzOC1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZCwgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTcxLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTU3MjppbnQgc29ja19tYXBfYnBmX3Byb2dfcXVlcnkoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNTczLVxcdFxcdFxcdCAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjIwLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTYyMTpzdGF0aWMgdm9pZCBzb2NrX21hcF91bmxpbmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2tfbGluayAqbGluaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2MjIte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjM0LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTYzNTpzdGF0aWMgdm9pZCBzb2NrX21hcF9yZW1vdmVfbGlua3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTYzNi17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NDQtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNjQ1OnZvaWQgc29ja19tYXBfdW5oYXNoKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE2NDYte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xNjcwPUVYUE9SVF9TWU1CT0xfR1BMKHNvY2tfbWFwX3VuaGFzaCk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xNjcxLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTY3Mjp2b2lkIHNvY2tfbWFwX2Rlc3Ryb3koc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTY3My17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTE2OTk9RVhQT1JUX1NZTUJPTF9HUEwoc29ja19tYXBfZGVzdHJveSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzAwLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTcwMTp2b2lkIHNvY2tfbWFwX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTcwMi17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTE3Mzc9c3RydWN0IHNvY2ttYXBfbGluayB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NDEtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNzQyOnN0YXRpYyB2b2lkIHNvY2tfbWFwX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzQzLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc1OC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3NTk6c3RhdGljIGludCBzb2NrX21hcF9saW5rX2RldGFjaChzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzYwLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc2NC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3NjU6c3RhdGljIHZvaWQgc29ja19tYXBfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NjYte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzczLSAqL1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTc3NDpzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmtfdXBkYXRlX3Byb2coc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc3NS1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTgzMy1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4MzQ6c3RhdGljIHUzMiBzb2NrX21hcF9saW5rX2dldF9tYXBfaWQoY29uc3Qgc3RydWN0IHNvY2ttYXBfbGluayAqc29ja21hcF9saW5rKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTgzNS17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NDQtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxODQ1OnN0YXRpYyBpbnQgc29ja19tYXBfbGlua19maWxsX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg0Ni1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg1NS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NTY6c3RhdGljIHZvaWQgc29ja19tYXBfbGlua19zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxubmV0L2NvcmUvc29ja19tYXAuYy0xODU3LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xODY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIHNvY2tfbWFwX2xpbmtfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xODc0LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg3NTppbnQgc29ja19tYXBfbGlua19jcmVhdGUoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NzYte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTM0LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTkzNTpzdGF0aWMgaW50IHNvY2tfbWFwX2l0ZXJfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTM2LVxcdFxcdFxcdFxcdCAgICAgICB1bmlvbiBicGZfaXRlcl9saW5rX2luZm8gKmxpbmZvLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTY1LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTk2NjpzdGF0aWMgdm9pZCBzb2NrX21hcF9pdGVyX2RldGFjaF90YXJnZXQoc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTY3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDY6MTguNjQyNTI5NTk2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzOTQzNjQwNzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTb2NrbWFwIEJ1ZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgc29ja21hcCBpc3N1ZSBhbmQgbmVlZCB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBMZXQncyBzZWUuLi4gaXQgbG9va3MgbGlrZSBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCwgYHNvY2tfbWFwX2dldF9mcm9tX2ZkYCwgYHNvY2tfbWFwX3Byb2dfZGV0YWNoYCwgYHNvY2tfbWFwX2JwZl9wcm9nX3F1ZXJ5YCwgYHNvY2tfbWFwX3VuaGFzaGAsIGBzb2NrX21hcF9kZXN0cm95YCwgYHNvY2tfbWFwX2Nsb3NlYCwgYW5kIGBzb2NrX21hcF9saW5rX2NyZWF0ZWAgYXJlIGFsbCBub24tc3RhdGljLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZXkncmUgZGVmaW5pdGVseSBpbiBwbGF5IGhlcmUuXG5cblRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIGFuIGBza19mb3J3YXJkX2FsbG9jYCBpc3N1ZSB3aGVuIHRoZSB0cmFmZmljIGlzIGJlaW5nIGRlbGl2ZXJlZCAqYmFjayogdG8gdGhlIHNhbWUgc29ja2V0IChgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmApLiBUaGF0IHNjcmVhbXMgc29ja21hcCBhbmQgQlBGIGludGVyYWN0aW9uLiBJdCdzIGhhcHBlbmluZyBiZWNhdXNlIGEgc29ja2V0IGdldHMgYWRkZWQgdG8gdGhlIHNvY2ttYXAsIGFuZCB0aGVuIGEgQlBGIHByb2dyYW0gcmVyb3V0ZXMgdHJhZmZpYyAqYmFjayogdG8gdGhhdCB2ZXJ5IHNvY2tldC5cblxuU28sIHdoZXJlIGRvIHRoZSBwaWVjZXMgZml0IHRvZ2V0aGVyPyBDbGVhcmx5LCBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCBpcyBhIGxpa2VseSBjYW5kaWRhdGUsIHNpbmNlIGl0J3MgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBhZGRpbmcgdGhlIHNvY2tldCB0byB0aGUgbWFwIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCdzIGEga2V5IGZ1bmN0aW9uIGZvciBteSBpbnZlc3RpZ2F0aW9uLCBkZWZpbml0ZWx5LiBBbmQgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIHJlY2VpdmluZyBkYXRhLCBgdGNwX2JwZl9yZWN2bXNnYCBpcyBjcnVjaWFsLiBJdCdzIHRoZSBmdW5jdGlvbiB3aGVyZSB0aGUgZGF0YSBpcyBhY3R1YWxseSByZWFkLiBGaW5hbGx5LCB0aGUgQlBGIHByb2dyYW0gaXRzZWxmIGdldHMgYXR0YWNoZWQgYnkgYGJwZl9wcm9nX2F0dGFjaGAgb3IgYHNvY2tfbWFwX2xpbmtfY3JlYXRlYC4gU28gdGhvc2UgYXJlIGltcG9ydGFudCBhcyB3ZWxsLlxuXG5JJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGRlZXBlciBkaXZlIGludG8gYHRjcF9icGZfcmVjdm1zZ2AgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQgdGhlcmUuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBkYXRhIGhhbmRsaW5nIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc29ja21hcCB3aXRoaW4gdGhlIHJlY2VpdmluZyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzE4MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NjozMi41ODYxNzI2MjJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjMyNzA1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYnBmX3JlY3Ztc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9icGYuYz0yMDM9c3RhdGljIGJvb2wgaXNfbmV4dF9tc2dfZmluKHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMjIwLVxcbm5ldC9pcHY0L3RjcF9icGYuYzoyMjE6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMjIyLVxcdFxcdFxcdFxcdCAgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTMzNT1zdGF0aWMgaW50IHRjcF9icGZfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzY3LVxcbm5ldC9pcHY0L3RjcF9icGYuYzozNjg6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxubmV0L2lwdjQvdGNwX2JwZi5jLTM2OS1cXHRcXHRcXHQgICBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjQwPXN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQ1LVxcdHByb3RbVENQX0JQRl9CQVNFXS5jbG9zZVxcdFxcdD0gc29ja19tYXBfY2xvc2U7XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY0NjpcXHRwcm90W1RDUF9CUEZfQkFTRV0ucmVjdm1zZ1xcdFxcdD0gdGNwX2JwZl9yZWN2bXNnO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NDctXFx0cHJvdFtUQ1BfQlBGX0JBU0VdLnNvY2tfaXNfcmVhZGFibGVcXHQ9IHNrX21zZ19pc19yZWFkYWJsZTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NTMtXFx0cHJvdFtUQ1BfQlBGX1JYXVxcdFxcdFxcdD0gcHJvdFtUQ1BfQlBGX0JBU0VdO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTQ6XFx0cHJvdFtUQ1BfQlBGX1JYXS5yZWN2bXNnXFx0XFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NTUtXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY1Ni1cXHRwcm90W1RDUF9CUEZfVFhSWF1cXHRcXHRcXHQ9IHByb3RbVENQX0JQRl9UWF07XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY1NzpcXHRwcm90W1RDUF9CUEZfVFhSWF0ucmVjdm1zZ1xcdFxcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjU4LX1cXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz02OTA9aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzEzLVxcdCAqIEZvciBTS19SRURJUkVDVCwgd2UgbmVlZCB0byBhY2sgdGhlIGZyYW1lIGltbWVkaWF0ZWx5IGJ1dCBmb3JcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzE0OlxcdCAqIFNLX1BBU1MsIHdlIHdhbnQgdG8gZGVsYXkgdGhlIGFjayB1bnRpbCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkuXFxubmV0L2lwdjQvdGNwX2JwZi5jLTcxNS1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDY6MzIuODMyNTA5MDI2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDE3ODcwNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFRDUCBCUEYgUmVjZWl2ZXIgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgYG5ldC9pcHY0L3RjcF9icGYuY2AgbW9kdWxlIGFnYWluLiBMZXQgbWUganVzdCBtYWtlIHN1cmUgSSdtIGZvbGxvd2luZyB0aGUgY29kZSBjb3JyZWN0bHkuIFJpZ2h0LCBgdGNwX2JwZl9yZWN2bXNnYCBhbmQgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFyZSBkZWZpbml0ZWx5IGRlY2xhcmVkIGFzIHN0YXRpYy4gSW50ZXJlc3RpbmcsIHNvIHRoZXkgd29uJ3QgYmUgZXhwb3NlZCBvdXRzaWRlIG9mIHRoZSBjb21waWxhdGlvbiB1bml0LiBCdXQgd2FpdCwgZm9jdXNpbmcgaW4gb24gYHRjcF9icGZfcmVjdm1zZ2Agc3BlY2lmaWNhbGx5LCBpdCdzIGFsc28gc3RhdGljLiBUaGF0IG1lYW5zLCBpdCBjYW4gbm90IGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIHNvdXJjZSBmaWxlLCB3aGljaCBsaW1pdHMgbXkgYWJpbGl0eSB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uIGFzIGl0IGlzIG5vdCBwYXJ0IG9mIHRoZSBleHRlcm5hbCBBUEkuIE5vdyBJJ20gd29uZGVyaW5nLCBhcmUgdGhlcmUgKmFueSogbm9uLXN0YXRpYyBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGlzIGZpbGU/IEkgbmVlZCB0byBrbm93IHRoZSBzY29wZSBvZiB3aGF0IGlzIHZpc2libGUgZXh0ZXJuYWxseS4gVGhpcyBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY0NywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ2OjM4LjA3NDI5ODc3M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxNTcxOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpdLip0Y3BfYnBmLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jPTMzPXN0YXRpYyBpbnQgYnBmX3RjcF9pbmdyZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy05MC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6OTE6c3RhdGljIGludCB0Y3BfYnBmX3B1c2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBhcHBseV9ieXRlcyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtOTItXFx0XFx0XFx0aW50IGZsYWdzLCBib29sIHVuY2hhcmdlKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE1Mi1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTUzOnN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTU0LVxcdFxcdFxcdCAgICAgICB1MzIgYXBwbHlfYnl0ZXMsIGludCBmbGFncywgYm9vbCB1bmNoYXJnZSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNjMtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjE2NDppbnQgdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHN0cnVjdCBzb2NrICpzaywgYm9vbCBpbmdyZXNzLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNjUtXFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcywgaW50IGZsYWdzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTIwMz1zdGF0aWMgYm9vbCBpc19uZXh0X21zZ19maW4oc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjAtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjIyMTpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzM0LVxcbm5ldC9pcHY0L3RjcF9icGYuYzozMzU6c3RhdGljIGludCB0Y3BfYnBmX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxcbm5ldC9pcHY0L3RjcF9icGYuYy0zMzYte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTM2Ny1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MzY4OnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0zNjktXFx0XFx0XFx0ICAgaW50IGZsYWdzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTQxNy1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NDE4OnN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxcbm5ldC9pcHY0L3RjcF9icGYuYy00MTktXFx0XFx0XFx0XFx0c3RydWN0IHNrX21zZyAqbXNnLCBpbnQgKmNvcGllZCwgaW50IGZsYWdzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTUzMy1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NTM0OnN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTM1LXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz02Mzg9c3RhdGljIHN0cnVjdCBwcm90byB0Y3BfYnBmX3Byb3RzW1RDUF9CUEZfTlVNX1BST1RTXVtUQ1BfQlBGX05VTV9DRkdTXTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjM5LVxcbm5ldC9pcHY0L3RjcF9icGYuYzo2NDA6c3RhdGljIHZvaWQgdGNwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUQ1BfQlBGX05VTV9DRkdTXSxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQxLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBwcm90byAqYmFzZSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NTktXFxubmV0L2lwdjQvdGNwX2JwZi5jOjY2MDpzdGF0aWMgdm9pZCB0Y3BfYnBmX2NoZWNrX3Y2X25lZWRzX3JlYnVpbGQoc3RydWN0IHByb3RvICpvcHMpXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY2MS17XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjcxLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo2NzI6c3RhdGljIGludCBfX2luaXQgdGNwX2JwZl92NF9idWlsZF9wcm90byh2b2lkKVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NzMte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTY3Nz1sYXRlX2luaXRjYWxsKHRjcF9icGZfdjRfYnVpbGRfcHJvdG8pO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NzgtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjY3OTpzdGF0aWMgaW50IHRjcF9icGZfYXNzZXJ0X3Byb3RvX29wcyhzdHJ1Y3QgcHJvdG8gKm9wcylcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjgwLXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02ODktI2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxcbm5ldC9pcHY0L3RjcF9icGYuYzo2OTA6aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY5MS1cXHRcXHRcXHQgICBza19yZWFkX2FjdG9yX3QgcmVjdl9hY3RvcilcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy03MjQtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjcyNTppbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXFxubmV0L2lwdjQvdGNwX2JwZi5jLTcyNi17XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NzYyPUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfdXBkYXRlX3Byb3RvKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy03NjgtICovXFxubmV0L2lwdjQvdGNwX2JwZi5jOjc2OTp2b2lkIHRjcF9icGZfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc3MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ2OjM4LjExOTQ2MTM4OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDA4MTg3NTQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBTdHJlYW0gUGFyc2VyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgbm90aWNpbmcgYSBmZXcgdGhpbmdzLiBgdGNwX2JwZl91cGRhdGVfcHJvdG9gLCBgdGNwX2JwZl9zZW5kbXNnX3JlZGlyYCwgYHRjcF9icGZfc3RycF9yZWFkX3NvY2tgLCBhbmQgYHRjcF9icGZfY2xvbmVgIGFyZSBhbGwgKm5vbi1zdGF0aWMqIGFuZCBleHBvcnRlZC4gVGhhdCdzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLCBhcyBpdCBpbmRpY2F0ZXMgdGhleSBhcmUgaW50ZW5kZWQgZm9yIGJyb2FkZXIgdXNlIHdpdGhpbiB0aGUga2VybmVsIChvciBwb3RlbnRpYWxseSB1c2VyIHNwYWNlKS5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW4gYSBwYWNrZXQgaXMgcmVkaXJlY3RlZCAqYmFjayogdG8gdGhlIHNhbWUgc29ja2V0LCB3aGljaCBpcyBoYW5kbGVkIGluIGVpdGhlciBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgb3IgcG9zc2libHkgYHNrX3Bzb2NrX2JhY2tsb2dgLiBcblxuVGhlIHRlc3QgY2FzZSBpcyBpbnRlcmVzdGluZy4gSXQncyB1c2luZyBgeGJwZl9wcm9nX2F0dGFjaGAgdG8gaG9vayB1cCBhIHN0cmVhbSBwYXJzZXIgKGBwcm9nX3NrYl9wYXJzZXJfb25lYCkgYW5kIGEgdmVyZGljdCBwcm9ncmFtIChgcHJvZ19za2JfdmVyZGljdF9wYXNzYCkgdG8gYSBtYXAgdXNpbmcgYEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUmAgYW5kIGBCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNUYCByZXNwZWN0aXZlbHkuIEl0IHRoZW4gc2VuZHMgc29tZSBkYXRhLiBNeSBndWVzcyBpcyB0aGF0IHRoZSBkYXRhIHRyaWdnZXJzIHRoZSBzdHJlYW0gcGFyc2VyIGFuZCB0aGUgdmVyZGljdCBsb2dpYywgYW5kIHRoZSB2ZXJkaWN0IGlzIHNldCB0byBgU0tfUEFTU2AuIEJlY2F1c2UgaXQgcGFzc2VzLCB0aGUgcGFja2V0IGVuZHMgdXAgYmVpbmcgZGVsaXZlcmVkIGJhY2sgdG8gdGhlICpzYW1lKiBzb2NrZXQsIGFsbCBoYXBwZW5pbmcgd2l0aGluIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBvciwgaWYgdGhlIHBhY2tldCBpcyBxdWV1ZWQsIGBza19wc29ja19iYWNrbG9nYC4gXG5cblRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoZSBmdW5jdGlvbiBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAgaXMgYmVpbmcgY2FsbGVkIGFzIGEgcmVzdWx0IG9mIHRoYXQgKnNhbWUtc29ja2V0KiBkZWxpdmVyeS4gSXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBjb250ZXh0LiAgVGhlIGRhdGEgdGhhdCAqdHJpZ2dlcnMqIGFsbCBvZiB0aGlzIGlzIGJlaW5nIGhhbmRsZWQgYnkgYHRjcF9icGZfc3RycF9yZWFkX3NvY2tgLiBXYWl0IGEgc2Vjb25kLiBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2AgaXMgY2xlYXJseSBmb3Igc3RyaW5nIHBhcnNlciBmdW5jdGlvbmFsaXR5LiBJdCdzIHZlcnkgbGlrZWx5IGdvaW5nIHRvIGNhbGwgYHN0cnBfZGF0YV9yZWFkeWAgb3Igc29tZXRoaW5nIGVxdWl2YWxlbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2AgaXMgY29ycmVjdC4gTGV0IG1lIGNoZWNrIGl0cyBkZWZpbml0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQwMSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0Njo0OC4yMDEzMzk0OTlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODMwMzgyNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2JwZl9zdHJwX3JlYWRfc29ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3AuaD0yODQ0PXN0cnVjdCBzdHJwYXJzZXI7XFxuaW5jbHVkZS9uZXQvdGNwLmg6Mjg0NTppbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG5pbmNsdWRlL25ldC90Y3AuaC0yODQ2LVxcdFxcdFxcdCAgIHNrX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yKTtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTIyOD1pbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTI0Mi1cXHRpZiAoc2tfaXNfdGNwKHNrKSkge1xcbm5ldC9jb3JlL3NrbXNnLmM6MTI0MzpcXHRcXHRwc29jay1cXHUwMDNlc3RycC5jYi5yZWFkX3NvY2sgPSB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTI0NC1cXHRcXHRwc29jay1cXHUwMDNlY29waWVkX3NlcSA9IHRjcF9zayhzayktXFx1MDAzZWNvcGllZF9zZXE7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9Njc5PXN0YXRpYyBpbnQgdGNwX2JwZl9hc3NlcnRfcHJvdG9fb3BzKHN0cnVjdCBwcm90byAqb3BzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY4OS0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxubmV0L2lwdjQvdGNwX2JwZi5jOjY5MDppbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjkxLVxcdFxcdFxcdCAgIHNrX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0Njo0OS43ODQzODUwNzVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMxNjYyMTU0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gU29ja2V0IEJQRiBQcm9ncmFtIEludGVyYWN0aW9uKipcblxuT2theSwgc28gSSdtIHN0YXJ0aW5nIHRvIHBpZWNlIHRvZ2V0aGVyIGhvdyB0aGlzIHNvY2tldCBCUEYgaW50ZXJhY3Rpb24gaXMgd29ya2luZy4gSXQgbG9va3MgbGlrZSBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2AgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiByZWxhdGVkIHRvIHRoZSBgc3RycGFyc2VyYCBtZWNoYW5pc20uIFRoZSBgc3RycGFyc2VyYCBpdHNlbGYgaXMgdHJpZ2dlcmVkIGJ5IGBzdHJwX2RhdGFfcmVhZHlgLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIHRoYXTigJlzIHdoYXQgZ2V0cyBjYWxsZWQgd2hlbiBkYXRhIGxhbmRzIG9uIHRoZSBzb2NrZXQuIFNvLCBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2AgaXMgZGVmaW5pdGVseSBhIGtleSBmdW5jdGlvbiB0byBmb2N1cyBvbiByaWdodCBub3cuXG5cbkkgYWxzbyBuZWVkIHRvIHNlZSBob3cgdGhlIHNvY2ttYXAgaXMgc2V0IHVwLiBgc29ja19tYXBfdXBkYXRlX2VsZW1fc3lzYCBzZWVtcyBsaWtlIGEgZ29vZCBmb2N1cyBzeW1ib2wgZm9yIHRoYXQsIHNvIEknbGwgZG91YmxlLWNoZWNrIGl0LiBBaCB5ZXMsIGl0J3MgZGVmaW5lZCBpbiBgbmV0L2NvcmUvc29ja19tYXAuY2AuIE5vdywgbGV0IG1lIHNlZSBpZiBJJ20gbWlzc2luZyBhbnkgb3RoZXIgaW1wb3J0YW50IG5vbi1zdGF0aWMgZnVuY3Rpb24gY2FsbHMgaGVyZeKApiBBaCwgaGVyZSdzIGBzb2NrX21hcF9saW5rX2NyZWF0ZWAhIFRoYXQncyBjYWxsZWQgd2hlbiBhdHRhY2hpbmcgYSBCUEYgcHJvZ3JhbSB0byBhIHNvY2ttYXAuIFNvLCBgYnBmX3Byb2dfYXR0YWNoYCBjYWxscyBlaXRoZXIgYHNvY2tfbWFwX2xpbmtfY3JlYXRlYCBvciBgc29ja19tYXBfcHJvZ191cGRhdGVgLCB3aGljaCBzdWdnZXN0cyB0aGVyZSBhcmUgdHdvIGRpc3RpbmN0IG1lY2hhbmlzbXMgZm9yIHVwZGF0aW5nIHNvY2ttYXAgcHJvZ3JhbXMuIExldCBtZSBkaWcgaW50byB0aGF0IHNlY29uZCBvcHRpb24sIGFuZCBzZWUgd2hhdCBgc29ja19tYXBfcHJvZ191cGRhdGVgIGlzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTczNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NzowMi45NTA2MDMyNTdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzQ5Njk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwX3Byb2dfdXBkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz0zMj1zdGF0aWMgREVGSU5FX01VVEVYKHNvY2ttYXBfbXV0ZXgpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzMtXFxubmV0L2NvcmUvc29ja19tYXAuYzozNDpzdGF0aWMgaW50IHNvY2tfbWFwX3Byb2dfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM1LVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTY4PWludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy04MC1cXHRtdXRleF9sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgxOlxcdHJldCA9IHNvY2tfbWFwX3Byb2dfdXBkYXRlKG1hcCwgcHJvZywgTlVMTCwgTlVMTCwgYXR0ci1cXHUwMDNlYXR0YWNoX3R5cGUpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODItXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9ODY9aW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwOS1cXHRtdXRleF9sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjExMDpcXHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIE5VTEwsIHByb2csIE5VTEwsIGF0dHItXFx1MDAzZWF0dGFjaF90eXBlKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xNTIwPXN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ19hdHRhY2hfY2hlY2soZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUsXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE1MzYtICovXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNTM3OnN0YXRpYyBpbnQgc29ja19tYXBfcHJvZ191cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTUzOC1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZCwgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xNzQyPXN0YXRpYyB2b2lkIHNvY2tfbWFwX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NDktXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNzUwOlxcdFdBUk5fT05fT05DRShzb2NrX21hcF9wcm9nX3VwZGF0ZShzb2NrbWFwX2xpbmstXFx1MDAzZW1hcCwgTlVMTCwgbGluay1cXHUwMDNlcHJvZywgbGluayxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NTEtXFx0XFx0XFx0XFx0XFx0ICBsaW5rLVxcdTAwM2VhdHRhY2hfdHlwZSkpO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xODc1PWludCBzb2NrX21hcF9saW5rX2NyZWF0ZShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTExLVxcdG11dGV4X2xvY2soXFx1MDAyNnNvY2ttYXBfbXV0ZXgpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTkxMjpcXHRyZXQgPSBzb2NrX21hcF9wcm9nX3VwZGF0ZShtYXAsIHByb2csIE5VTEwsIFxcdTAwMjZzb2NrbWFwX2xpbmstXFx1MDAzZWxpbmssIGF0dGFjaF90eXBlKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5MTMtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzb2NrbWFwX211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDc6MDIuOTk0OTU2NzczWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTk3NzIwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgYnBmX3Byb2dfYXR0YWNoYCdzIERlcGVuZGVuY3kgQ2hhaW4qKlxuXG5Pa2F5LCBzbyBgYnBmX3Byb2dfYXR0YWNoYCBpcyBtYWtpbmcgYSBjYWxsIHRvIGBzb2NrX21hcF9nZXRfZnJvbV9mZGAuIFRoYXQncyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSwgc3BlY2lmaWNhbGx5IGhvdyB0aGlzIGBzb2NrX21hcF9nZXRfZnJvbV9mZGAgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHBpY3R1cmUuIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHNvY2tfbWFwX2dldF9mcm9tX2ZkYCBpbW1lZGlhdGVseS4gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgaHlwb3RoZXNlcyBhYm91dCBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIHNvY2tldCBtYXBzLCBtYXliZSByZXRyaWV2aW5nIHNvbWUgZGF0YSBvciB2YWxpZGF0aW5nIGFuIGlucHV0LCBnaXZlbiBpdHMgbmFtZS4gVGltZSB0byBzZWUgd2hhdCdzIHJlYWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgYXR0YWNoaW5nIEJQRiBwcm9ncmFtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMwNzgsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NzowNi40MTQ3MzEzNzlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTcwMzAwMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19tYXBfZ2V0X2Zyb21fZmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0zNjU0PWludCBicGZfcHJvZ190ZXN0X3J1bl9zeXNjYWxsKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzY1Ny1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2NTg6aW50IHNvY2tfbWFwX2dldF9mcm9tX2ZkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtMzY1OS1pbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM3MzE9c3RhdGljIGlubGluZSBpbnQgYnBmX3Byb2dfdGVzdF9ydW5fc3lzY2FsbChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3MzgtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmluY2x1ZGUvbGludXgvYnBmLmg6MzczOTpzdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3NDAtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQ2MzQ9c3RhdGljIGludCBicGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00Njc2LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19NU0c6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDY3NzpcXHRcXHRyZXQgPSBzb2NrX21hcF9nZXRfZnJvbV9mZChhdHRyLCBwcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00Njc4LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0zOT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy02Ny1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjY4OmludCBzb2NrX21hcF9nZXRfZnJvbV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NzowOC4wMzE3NjcwNjFaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxNjYwMjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFByb2dyYW0gQXR0YWNobWVudCoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiBob3cgQlBGIHByb2dyYW1zIGFyZSBhdHRhY2hlZCwgc3BlY2lmaWNhbGx5IGZvciBgQlBGX1BST0dfVFlQRV9TS19TS0JgIGFuZCBgQlBGX1BST0dfVFlQRV9TS19NU0dgLiBJJ20gdHJhY2luZyB0aGUgZmxvdywgYW5kIGl0IGxvb2tzIGxpa2UgYHNvY2tfbWFwX2dldF9mcm9tX2ZkYCBpcyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgd2hlbiB1c2luZyBgYnBmX3Byb2dfYXR0YWNoYCBmb3IgdGhvc2UgcHJvZ3JhbSB0eXBlcy5cblxuQWhhLCBhbmQgbm93IEknbSByZW1lbWJlcmluZyB0aGF0IGBCUEZfUFJPR19UWVBFX1NLX1NLQmAgY292ZXJzIGJvdGggYEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUmAgYW5kIGBCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNUYCB1c2UgY2FzZXMuIEl0J3MgZ29vZCB0byBrZWVwIHRob3NlIGRpc3RpbmN0aW9ucyBjbGVhci5cblxuSSBuZWVkIHRvIGNvbmZpcm0gYWxsIG9mIHRoaXMsIHNvIGxldCBtZSBxdWlja2x5IGp1bXAgaW50byBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgYGJwZl9wcm9nX2F0dGFjaGAgZnVuY3Rpb24gZGlyZWN0bHkuIEknbGwgZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBkZXRhaWxzIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzODEwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ3OjEyLjM0ODM3MjgyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDY3NzA5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2NrX21hcF9nZXRfZnJvbV9mZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz00NjM0PXN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDY3Ni1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfTVNHOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ2Nzc6XFx0XFx0cmV0ID0gc29ja19tYXBfZ2V0X2Zyb21fZmQoYXR0ciwgcHJvZyk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDY3OC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDc6MTIuNDA5MDU2MzU0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxODgyNzU0NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBSZWxldmFudCBGb2N1cyBBcmVhcyoqXG5cbk9rYXksIHNvIEkndmUgaWRlbnRpZmllZCBhIGZldyBrZXkgZnVuY3Rpb25zIHRvIGtlZXAgaW4gbWluZCwgYW5kIHRob3NlIGFyZTogYHNvY2tfbWFwX2dldF9mcm9tX2ZkYCwgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2AsIGB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrYCwgYW5kLCBsZXQncyBhZGQgYHRjcF9icGZfcmVjdm1zZ2AgdG8gdGhlIGxpc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByZWxhdGUgdG8gdGhlIGJpZ2dlciBwaWN0dXJlLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyBCUEYgaW50ZWdyYXRpb24uXG5cbk5vdywgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIGl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCwgd2hpY2ggaXMgc2VsZWN0ZWQgYnkgdGhlIGZvcm1lciBhbmQgYE5FVGAsIGFuZCBgQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSYCBhcmUgYWxsIGltcG9ydGFudC4gSSBhbHJlYWR5IGNvbmZpcm1lZCB0aGF0IHRoZSBgQlBGX1NUUkVBTV9QQVJTRVJgIG9wdGlvbiAqaXMqIHVzZXItc2VsZWN0YWJsZSwgd2hpY2ggaXMgZ29vZC4gVGhhdCBsaWtlbHkgbWVhbnMgd2UgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSBib3RoIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAgaW4gb3VyIGNvbmZpZy5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIG9uZSB0aGluZy4uLnNwZWNpZmljYWxseSwgaG93IGBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNgIGlzIGludm9rZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNhbGwgcGF0aCwgcGFydGljdWxhcmx5IGZyb20gdGhlIHN5c3RlbSBjYWxsIHBlcnNwZWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDMyMCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NzoxNy41OTczMzQwNzFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Njk2Mzg2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19tYXBfdXBkYXRlX2VsZW1fc3lzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9MzY1OT1pbnQgc29ja19tYXBfcHJvZ19kZXRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSk7XFxuaW5jbHVkZS9saW51eC9icGYuaDozNjYwOmludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM2NjEtaW50IHNvY2tfbWFwX2JwZl9wcm9nX3F1ZXJ5KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0zNzQ1PXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfbWFwX3Byb2dfZGV0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNzUwLVxcbmluY2x1ZGUvbGludXgvYnBmLmg6Mzc1MTpzdGF0aWMgaW5saW5lIGludCBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3NTItXFx0XFx0XFx0XFx0XFx0ICAgdTY0IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjUxPXN0YXRpYyBpbnQgYnBmX21hcF91cGRhdGVfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjY0LVxcdFxcdCAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1NPQ0tNQVApIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyNjU6XFx0XFx0cmV0dXJuIHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhtYXAsIGtleSwgdmFsdWUsIGZsYWdzKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yNjYtXFx0fSBlbHNlIGlmIChJU19GRF9QUk9HX0FSUkFZKG1hcCkpIHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NTU1PXN0YXRpYyBpbnQgc29ja19oYXNoX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy01NTctXFxubmV0L2NvcmUvc29ja19tYXAuYzo1NTg6aW50IHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTU5LVxcdFxcdFxcdCAgICAgdTY0IGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NzoxOS4xNjY5NzY3MjdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODExMzUzODk0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBTb2NrbWFwIFVwZGF0ZXMgYW5kIERhdGEgUmVjZXB0aW9uKipcblxuT2theSwgc28gYHNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c2AgaXMgZGVmaW5pdGVseSB0aGUga2V5IGZ1bmN0aW9uIGhlcmU7IGl0J3MgdGhlIGdhdGV3YXkgZm9yIHVwZGF0aW5nIGEgc29ja21hcCBmcm9tIHVzZXJzcGFjZSwgYXMgaXQncyBjYWxsZWQgYnkgYGJwZl9tYXBfdXBkYXRlX3ZhbHVlYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50IEkgbmVlZCB0byBjb25zaWRlci5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBpcyByZWNlaXZlZCBvbiBhIHNvY2tldCBtYW5hZ2VkIGJ5IGEgc29ja21hcC4gTGV0J3MgbG9vayBhdCBgdGNwX2JwZl9yZWN2bXNnYC4gSXMgKnRoYXQqIHRoZSBlbnRyeSBwb2ludCBmb3IgYHJlY3Ztc2dgIG9wZXJhdGlvbnMgb24gYSBzb2NrZXQgd2l0aGluIGEgc29ja21hcD8gQWgsIHllcywgYHRjcF9icGZfcmVidWlsZF9wcm90b3NgIGhhbmRsZXMgdGhhdCBieSBzd2FwcGluZyBvdXQgdGhlIHN0YW5kYXJkIGByZWN2bXNnYCB3aXRoIGB0Y3BfYnBmX3JlY3Ztc2dgIG9yIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYC5cblxuSG1tLCBob2xkIG9uLiBgdGNwX2JwZl9yZWN2bXNnYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBsaW1pdHMgaXRzIGRpcmVjdCB1c2VmdWxuZXNzIGZvciBteSBwdXJwb3Nlcy4gQXJlIHRoZXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBhdmFpbGFibGUgdGhhdCBjYW4gYmUgbW9yZSBkaXJlY3RseSB1dGlsaXplZD9cblxuTGV0IG1lIHNlZS4uLiBgdGNwX2JwZl91cGRhdGVfcHJvdG9gIGlzIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLCBhbmQgaXQgaGFuZGxlcyB0aGUgY3J1Y2lhbCB0YXNrIG9mIHJlcGxhY2luZyB0aGUgcHJvdG9jb2wgb3BlcmF0aW9ucy4gUHJvbWlzaW5nLiBBbmQsIGFoIHllcywgYHRjcF9icGZfc3RycF9yZWFkX3NvY2tgIGlzIGFsc28gbm9uLXN0YXRpYyBhbmQgZXhwb3J0ZWQsIHNwZWNpZmljYWxseSB1c2VkIGJ5IHRoZSBgc3RycGFyc2VyYCBtZWNoYW5pc20uIEdpdmVuIHRoYXQgaXQgaXMgdXNlZCBieSBhIHN0cmluZyBwYXJzZXIsIHRoYXQgd291bGQgbGlrZWx5IGJlIGEgdmVyeSBnb29kIGZvY3VzIHN5bWJvbCBhcyB3ZWxsLlxuXG5TbywgZWl0aGVyIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2Agb3IgYHRjcF9icGZfc3RycF9yZWFkX3NvY2tgIGxvb2tzIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGRlZXAgZGl2ZS4gSSdsbCBuZWVkIHRvIGV2YWx1YXRlIGVhY2ggdG8gZGV0ZXJtaW5lIHdoaWNoIGlzIG1vcmUgcmVsZXZhbnQgYW5kIGFjdGlvbmFibGUgZm9yIG15IGdvYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTQwMSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0NzoyNy4yODA1MjAxNDZaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjY3MzQwNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2JwZl91cGRhdGVfcHJvdG9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmg9MjgzOD1zdHJ1Y3Qgc2tfcHNvY2s7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC0yODQwLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5pbmNsdWRlL25ldC90Y3AuaDoyODQxOmludCB0Y3BfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSk7XFxuaW5jbHVkZS9uZXQvdGNwLmgtMjg0Mi12b2lkIHRjcF9icGZfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spO1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTY5MD1pbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy03MjQtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjcyNTppbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXFxubmV0L2lwdjQvdGNwX2JwZi5jLTcyNi17XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzYxLX1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzYyOkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfdXBkYXRlX3Byb3RvKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzYzLVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0zMzQ4PXN0cnVjdCBwcm90byB0Y3BfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM3My0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjQvdGNwX2lwdjQuYzozMzc0OlxcdC5wc29ja191cGRhdGVfc2tfcHJvdFxcdD0gdGNwX2JwZl91cGRhdGVfcHJvdG8sXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzc1LSNlbmRpZlxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMjc2PXN0cnVjdCBwcm90byB0Y3B2Nl9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzAxLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjIzMDI6XFx0LnBzb2NrX3VwZGF0ZV9za19wcm90XFx0PSB0Y3BfYnBmX3VwZGF0ZV9wcm90byxcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIzMDMtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ3OjI4Ljg0NzI2MTAwMloiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjAzMzE1NTAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIFNvY2ttYXAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgaXMgYSBrZXkgZm9jdXMgc3ltYm9sLCBlc3BlY2lhbGx5IHNpbmNlIGl0IGdldHMgY2FsbGVkIHdoZW4gYSBzb2NrZXQgaXMgYWRkZWQgdG8gYSBzb2NrbWFwLiBUaGF0IHN1Z2dlc3RzIGEgY3JpdGljYWwgcG9pbnQgb2YgaW50ZWdyYXRpb24uXG5cbkhlcmUncyBteSBzdW1tYXJ5OiBUaGlzIHBhdGNoIGlzIGEgZml4IGZvciBhIG1lbW9yeSBhY2NvdW50aW5nIGlzc3VlIHdpdGhpbiB0aGUgQlBGIHNvY2ttYXAgaW5mcmFzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgaXQgYWRkcmVzc2VzIGEgc2NlbmFyaW8gd2hlcmUgYHNrX2ZvcndhcmRfYWxsb2NgIGlzbid0IGNvcnJlY3RseSBoYW5kbGVkIHdoZW4gYSBgc3RycGFyc2VyYCBCUEYgcHJvZ3JhbSByZXR1cm5zIGBTS19QQVNTYCBvbiBhIHNvY2tldCBhbmQgdGhlIHJlc3VsdGluZyBza2IgaXMgZGVsaXZlcmVkIGJhY2sgdG8gdGhlIHNhbWUgc29ja2V0J3MgaW5ncmVzcyBxdWV1ZS4gVGhpcyBpcyBhIGNsYXNzaWMgcG90ZW50aWFsIG1lbW9yeSBsZWFrIHNpdHVhdGlvbi4gVGhlIGludHJvZHVjZWQgc29sdXRpb24sIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbmAsIGFpbXMgdG8gc2V0dGxlIGFueSBwcmUtZXhpc3RpbmcgZm9yd2FyZCBhbGxvY2F0aW9uIGRlZmljaXQgYmVmb3JlIHJlY2VpdmUgb3duZXJzaGlwIGlzIGdyYW50ZWQsIHdoaWNoIHNlZW1zIGxpa2UgdGhlIHJpZ2h0IGFwcHJvYWNoLlxuXG5UaGlzIGNoYW5nZSBpcyBmdW5kYW1lbnRhbGx5IGZ1bmN0aW9uYWwsIHRvdWNoaW5nIGNvcmUgQlBGIGFuZCBuZXR3b3JraW5nIGNvZGUsIGFuZCB0aGF0IG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY29kZSBwYXRoIGlzIHJvYnVzdCBhbmQgY29ycmVjdC4gSSdsbCBuZWVkIHRvIHN0cmVzcyB0ZXN0IHRoaXMgdW5kZXIgbWFueSBuZXR3b3JrIGNvbmRpdGlvbnMgYW5kIHZhcmlvdXMgQlBGIHByb2dyYW1zLlxuXG5UaGUgaW1wb3J0YW50IGZvY3VzIHN5bWJvbHMgYXJlOlxuKiAgIGBzb2NrX21hcF91cGRhdGVfZWxlbV9zeXNgXG4qICAgYHNvY2tfbWFwX2dldF9mcm9tX2ZkYFxuKiAgIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2BcbiogICBgdGNwX2JwZl9zdHJwX3JlYWRfc29ja2BcblxuQXMgZm9yIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMsIGl0IGxvb2tzIGxpa2UgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9TVFJFQU1fUEFSU0VSYCBhcmUgc3VmZmljaWVudC4gYENPTkZJR19ORVRfU09DS19NU0dgIGFuZCBgQ09ORklHX1NUUkVBTV9QQVJTRVJgIGFyZSBwcm9wZXJseSBzZWxlY3RlZCBieSB0aG9zZS4gSSBkb24ndCBzZWUgYW55IG90aGVyIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi5cblxuTXkgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggZGlyZWN0bHkgYWRkcmVzc2VzIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIGluIGEgY3JpdGljYWwgcGFydCBvZiB0aGUga2VybmVsJ3MgQlBGIG5ldHdvcmtpbmcgc3RhY2suIEdvb2QgY2F0Y2guIExldCdzIGdldCB0byB0ZXN0aW5nIGFuZCB2ZXJpZnkgdGhpcyBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NjIyLCJPdXRwdXRUb2tlbnMiOjIyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0Nzo0MC44ODA0MTkxOTNaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDIyNTk5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9TVFJFQU1fUEFSU0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic29ja19tYXBfdXBkYXRlX2VsZW1fc3lzXCIsXG4gICAgXCJzb2NrX21hcF9nZXRfZnJvbV9mZFwiLFxuICAgIFwidGNwX2JwZl91cGRhdGVfcHJvdG9cIixcbiAgICBcInRjcF9icGZfc3RycF9yZWFkX3NvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHNvY2ttYXAgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBob3cgYHNrX2ZvcndhcmRfYWxsb2NgIG1lbW9yeSBhY2NvdW50aW5nIGlzIGhhbmRsZWQgd2hlbiBhIHN0cmVhbSBwYXJzZXIgKHN0cnBhcnNlcikgcHJvZ3JhbSByZXR1cm5zIGBTS19QQVNTYCBhbmQgdGhlIHNrYiBpcyBkZWxpdmVyZWQgdG8gdGhlIHNhbWUgc29ja2V0J3MgaW5ncmVzcyBxdWV1ZS4gSXQgaW50cm9kdWNlcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gIHRvIHNldHRsZSBhbnkgZXhpc3RpbmcgYHNrX2ZvcndhcmRfYWxsb2NgIGRlZmljaXQgYmVmb3JlIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcCB0byB0aGUgc2tiLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc29ja21hcCBhbmQgc3RyZWFtIHBhcnNlcikgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG1lbW9yeSBhY2NvdW50aW5nIHJlbWFpbnMgY29ycmVjdCB1bmRlciB2YXJpb3VzIG5ldHdvcmsgY29uZGl0aW9ucyBhbmQgQlBGIHByb2dyYW0gYmVoYXZpb3JzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNvY2tfbWFwX3VwZGF0ZV9lbGVtX3N5c1wiLFxuICAgIFwic29ja19tYXBfZ2V0X2Zyb21fZmRcIixcbiAgICBcInRjcF9icGZfdXBkYXRlX3Byb3RvXCIsXG4gICAgXCJ0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBzb2NrbWFwIGluZnJhc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgaG93IGBza19mb3J3YXJkX2FsbG9jYCBtZW1vcnkgYWNjb3VudGluZyBpcyBoYW5kbGVkIHdoZW4gYSBzdHJlYW0gcGFyc2VyIChzdHJwYXJzZXIpIHByb2dyYW0gcmV0dXJucyBgU0tfUEFTU2AgYW5kIHRoZSBza2IgaXMgZGVsaXZlcmVkIHRvIHRoZSBzYW1lIHNvY2tldCdzIGluZ3Jlc3MgcXVldWUuIEl0IGludHJvZHVjZXMgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduYCB0byBzZXR0bGUgYW55IGV4aXN0aW5nIGBza19mb3J3YXJkX2FsbG9jYCBkZWZpY2l0IGJlZm9yZSBhc3NpZ25pbmcgcmVjZWl2ZSBvd25lcnNoaXAgdG8gdGhlIHNrYi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQlBGIHNvY2ttYXAgYW5kIHN0cmVhbSBwYXJzZXIpIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBtZW1vcnkgYWNjb3VudGluZyByZW1haW5zIGNvcnJlY3QgdW5kZXIgdmFyaW91cyBuZXR3b3JrIGNvbmRpdGlvbnMgYW5kIEJQRiBwcm9ncmFtIGJlaGF2aW9ycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDc6NDAuOTU0NjUxNzk1WiIsIlNlcSI6NTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg1MDQ0MDYxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE2OjQ3OjQwLjk1NTE1MjA1NVoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNzg0OTkzNTk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGlzc3VlIHdpdGggc29ja2V0IG1lbW9yeSBhY2NvdW50aW5nIChgc2tfZm9yd2FyZF9hbGxvY2ApIHdoZW4gYW4gc2tiIGlzIHBhc3NlZCB0byB0aGUgc2FtZSBzb2NrZXQgdmlhIEJQRiBzdHJlYW0gcGFyc2VyL3ZlcmRpY3QuIEl0IGludHJvZHVjZXMgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduYCB0byBwcm9wZXJseSBoYW5kbGUgYHNrX3JtZW1fc2NoZWR1bGVgIGFuZCBgc2tiX3NldF9vd25lcl9yYC4gVGhlIGNoYW5nZXMgaW52b2x2ZSBtZW1vcnkgYWNjb3VudGluZywgbG9ja2luZywgYW5kIHNhdmluZy9yZXN0b3JpbmcgYHNrYi1cXHUwMDNlX3NrX3JlZGlyYC4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgbm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGNvbnRhaW4gdW5pbml0aWFsaXplZCBmaWVsZHMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgbG9naWMgZXJyb3JzLCBtZW1vcnkgbGVha3MsIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwYjBlOGNmOGIzMjFkZjg4YzAyNmRhZWE1NzY0OTFmY2E1YzczNmUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTY6NDQ6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za21zZy5jIGIvbmV0L2NvcmUvc2ttc2cuY1xuaW5kZXggMjUyMWI2NDNmYTA1ZC4uMzQ3Y2IxNjhmNzQ5MSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrbXNnLmNcbisrKyBiL25ldC9jb3JlL3NrbXNnLmNcbkBAIC01ODYsMjEgKzU4NiwyNCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB9XG4gXG4gc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYpO1xuK1x0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuK1x0XHRcdFx0ICAgICBib29sIHNldHRsZV9md2RfYWxsb2MpO1xuK3N0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuK1x0XHRcdFx0XHQgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYyk7XG4gXG4gc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0dTMyIG9mZiwgdTMyIGxlbilcbitcdFx0XHRcdHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYylcbiB7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBwc29jay1cdTAwM2VzaztcbiBcdHN0cnVjdCBza19tc2cgKm1zZztcbiBcdGludCBlcnI7XG4gXG4tXHQvKiBJZiB3ZSBhcmUgcmVjZWl2aW5nIG9uIHRoZSBzYW1lIHNvY2sgc2tiLVx1MDAzZXNrIGlzIGFscmVhZHkgYXNzaWduZWQsXG4tXHQgKiBza2lwIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBvd25lciB0cmFuc2l0aW9uIHNlZWluZyBpdCBhbHJlYWR5IHNldFxuLVx0ICogY29ycmVjdGx5LlxuLVx0ICovXG4gXHRpZiAodW5saWtlbHkoc2tiLVx1MDAzZXNrID09IHNrKSlcbi1cdFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHRydWUpO1xuK1x0XHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHBzb2NrLCBza2IsIG9mZixcbitcdFx0XHRcdFx0XHRcdCBsZW4sIHRydWUsXG4rXHRcdFx0XHRcdFx0XHQgc2V0dGxlX2Z3ZF9hbGxvYyk7XG4gXHRtc2cgPSBza19wc29ja19jcmVhdGVfaW5ncmVzc19tc2coc2ssIHNrYik7XG4gXHRpZiAoIW1zZylcbiBcdFx0cmV0dXJuIC1FQUdBSU47XG5AQCAtNjE4LDM0ICs2MjEsMTAwIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLS8qIFB1dHMgYW4gc2tiIG9uIHRoZSBpbmdyZXNzIHF1ZXVlIG9mIHRoZSBzb2NrZXQgYWxyZWFkeSBhc3NpZ25lZCB0byB0aGVcbi0gKiBza2IuIEluIHRoaXMgY2FzZSB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBtZW1vcnkgbGltaXRzIG9yIHNrYl9zZXRfb3duZXJfclxuLSAqIGJlY2F1c2UgdGhlIHNrYiBpcyBhbHJlYWR5IGFjY291bnRlZCBmb3IgaGVyZS5cbitzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduKHN0cnVjdCBzb2NrICpzayxcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRcdCAgICBib29sIHNldHRsZV9md2RfYWxsb2MpXG4re1xuK1x0LyogTGVhdmUgc2ticyBhbHJlYWR5IHJlY2VpdmUtYWNjb3VudGVkIHRvIHNrIHVudG91Y2hlZC4gKi9cbitcdGlmIChza2ItXHUwMDNlc2sgPT0gc2sgXHUwMDI2XHUwMDI2IHNrYi1cdTAwM2VkZXN0cnVjdG9yID09IHNvY2tfcmZyZWUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHNldHRsZV9md2RfYWxsb2MpIHtcbitcdFx0c29ja19vd25lZF9ieV9tZShzayk7XG4rXG4rXHRcdGlmICghc2tfcm1lbV9zY2hlZHVsZShzaywgc2tiLCAwKSlcbitcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbitcdH1cbitcbitcdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBQdXRzIGFuIHNrYiBvbiB0aGUgaW5ncmVzcyBxdWV1ZSBmb3IgcHNvY2stXHUwMDNlc2suXG4rICpcbisgKiBJZiB0aGUgc2tiIGFscmVhZHkgaGFzIHJlY2VpdmUgb3duZXJzaGlwIGZvciB0aGlzIHNvY2tldCwgbGVhdmUgc29ja2V0XG4rICogbWVtb3J5IGFjY291bnRpbmcgdW50b3VjaGVkLiBPdGhlcndpc2UsIGJlZm9yZSBhc3NpZ25pbmcgcmVjZWl2ZSBvd25lcnNoaXBcbisgKiB0byBhbiB1bm93bmVkIHN0cnBhcnNlciBTS19QQVNTIHNrYiwgc2V0dGxlIGFueSBleGlzdGluZyBza19mb3J3YXJkX2FsbG9jXG4rICogZGVmaWNpdCBmcm9tIGVhcmxpZXIgY2xvbmUgY2hhcmdlcy5cbiAgKi9cbiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZilcbitcdFx0XHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZixcbitcdFx0XHRcdCAgICAgYm9vbCBzZXR0bGVfZndkX2FsbG9jKVxuIHtcbitcdHN0cnVjdCBzb2NrICpzayA9IHBzb2NrLVx1MDAzZXNrO1xuIFx0c3RydWN0IHNrX21zZyAqbXNnID0gYWxsb2Nfc2tfbXNnKEdGUF9BVE9NSUMpO1xuK1x0aW50IGVycjtcbitcbitcdGlmICh1bmxpa2VseSghbXNnKSlcbitcdFx0cmV0dXJuIC1FQUdBSU47XG4rXG4rXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbihzaywgc2tiLCBzZXR0bGVfZndkX2FsbG9jKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZnJlZTtcbitcbitcdC8qIFRoaXMgaXMgdXNlZCBpbiB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlXG4rXHQgKiBkYXRhIG9yaWdpbmF0ZXMgZnJvbSB0aGUgc29ja2V0J3Mgb3duIHByb3RvY29sIHN0YWNrLiBObyBuZWVkIHRvXG4rXHQgKiByZWZjb3VudCBzayBiZWNhdXNlIG1zZydzIGxpZmV0aW1lIGlzIGJvdW5kIHRvIHNrIHZpYSB0aGUgaW5ncmVzc19tc2cuXG4rXHQgKi9cbitcdG1zZy1cdTAwM2VzayA9IHNrO1xuK1x0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShza2IsIG9mZiwgbGVuLCBwc29jaywgc2ssIG1zZyxcbitcdFx0XHRcdFx0ICAgdGFrZV9yZWYpO1xuK1x0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0Z290byBmcmVlO1xuK1xuK1x0cmV0dXJuIGVycjtcbitmcmVlOlxuK1x0a2ZyZWUobXNnKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nKHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuK1x0XHRcdFx0XHQgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYylcbit7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBwc29jay1cdTAwM2VzaztcbitcdHN0cnVjdCBza19tc2cgKm1zZyA9IGFsbG9jX3NrX21zZyhHRlBfQVRPTUlDKTtcbiBcdGludCBlcnI7XG4gXG4gXHRpZiAodW5saWtlbHkoIW1zZykpXG4gXHRcdHJldHVybiAtRUFHQUlOO1xuLVx0c2tiX3NldF9vd25lcl9yKHNrYiwgc2spO1xuK1xuK1x0bG9ja19zb2NrKHNrKTtcbitcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYXNzaWduKHNrLCBza2IsIHNldHRsZV9md2RfYWxsb2MpO1xuK1x0cmVsZWFzZV9zb2NrKHNrKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZnJlZTtcbiBcbiBcdC8qIFRoaXMgaXMgdXNlZCBpbiB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlXG4gXHQgKiBkYXRhIG9yaWdpbmF0ZXMgZnJvbSB0aGUgc29ja2V0J3Mgb3duIHByb3RvY29sIHN0YWNrLiBObyBuZWVkIHRvXG4gXHQgKiByZWZjb3VudCBzayBiZWNhdXNlIG1zZydzIGxpZmV0aW1lIGlzIGJvdW5kIHRvIHNrIHZpYSB0aGUgaW5ncmVzc19tc2cuXG4gXHQgKi9cbiBcdG1zZy1cdTAwM2VzayA9IHNrO1xuLVx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShza2IsIG9mZiwgbGVuLCBwc29jaywgc2ssIG1zZywgdGFrZV9yZWYpO1xuK1x0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShza2IsIG9mZiwgbGVuLCBwc29jaywgc2ssIG1zZyxcbitcdFx0XHRcdFx0ICAgdGFrZV9yZWYpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0a2ZyZWUobXNnKTtcbitcdFx0Z290byBmcmVlO1xuK1xuK1x0cmV0dXJuIGVycjtcbitmcmVlOlxuK1x0a2ZyZWUobXNnKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc2tfcHNvY2tfaGFuZGxlX3NrYihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdCAgICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIGluZ3Jlc3MpXG4rXHRcdFx0ICAgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgaW5ncmVzcyxcbitcdFx0XHQgICAgICAgYm9vbCBzZWxmX3Bhc3MsIGJvb2wgc3RycGFyc2VyKVxuIHtcbiBcdGlmICghaW5ncmVzcykge1xuIFx0XHRpZiAoIXNvY2tfd3JpdGVhYmxlKHBzb2NrLVx1MDAzZXNrKSlcbkBAIC02NTMsNyArNzIyLDExIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfaGFuZGxlX3NrYihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gc2tiX3NlbmRfc29jayhwc29jay1cdTAwM2Vzaywgc2tiLCBvZmYsIGxlbik7XG4gXHR9XG4gXG4tXHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3MocHNvY2ssIHNrYiwgb2ZmLCBsZW4pO1xuK1x0aWYgKHNlbGZfcGFzcylcbitcdFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYmFja2xvZyhwc29jaywgc2tiLCBvZmYsXG4rXHRcdFx0XHRcdFx0XHQgbGVuLCB0cnVlLCBzdHJwYXJzZXIpO1xuK1xuK1x0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBzdHJwYXJzZXIpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBza19wc29ja19za2Jfc3RhdGUoc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbkBAIC02OTQsOSArNzY3LDE0IEBAIHN0YXRpYyB2b2lkIHNrX3Bzb2NrX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRyZXR1cm47XG4gXHRtdXRleF9sb2NrKFx1MDAyNnBzb2NrLVx1MDAzZXdvcmtfbXV0ZXgpO1xuIFx0d2hpbGUgKChza2IgPSBza2JfcGVlayhcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX3NrYikpKSB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgc2F2ZWRfcmVkaXI7XG4rXHRcdGJvb2wgc3RycGFyc2VyO1xuK1x0XHRib29sIHNlbGZfcGFzcztcbitcbiBcdFx0bGVuID0gc2tiLVx1MDAzZWxlbjtcbiBcdFx0b2ZmID0gMDtcbi1cdFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcbitcdFx0c3RycGFyc2VyID0gc2tiX2JwZl9zdHJwYXJzZXIoc2tiKTtcbitcdFx0aWYgKHN0cnBhcnNlcikge1xuIFx0XHRcdHN0cnVjdCBzdHJwX21zZyAqc3RtID0gc3RycF9tc2coc2tiKTtcbiBcbiBcdFx0XHRvZmYgPSBzdG0tXHUwMDNlb2Zmc2V0O1xuQEAgLTcxMCwxNyArNzg4LDIwIEBAIHN0YXRpYyB2b2lkIHNrX3Bzb2NrX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHR9XG4gXG4gXHRcdGluZ3Jlc3MgPSBza2JfYnBmX2luZ3Jlc3Moc2tiKTtcbitcdFx0c2VsZl9wYXNzID0gaW5ncmVzcyBcdTAwMjZcdTAwMjYgIXNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKTtcbitcdFx0c2F2ZWRfcmVkaXIgPSBza2ItXHUwMDNlX3NrX3JlZGlyO1xuIFx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG4gXHRcdGRvIHtcbiBcdFx0XHRyZXQgPSAtRUlPO1xuIFx0XHRcdGlmICghc29ja19mbGFnKHBzb2NrLVx1MDAzZXNrLCBTT0NLX0RFQUQpKVxuIFx0XHRcdFx0cmV0ID0gc2tfcHNvY2tfaGFuZGxlX3NrYihwc29jaywgc2tiLCBvZmYsXG4tXHRcdFx0XHRcdFx0XHQgIGxlbiwgaW5ncmVzcyk7XG4rXHRcdFx0XHRcdFx0XHQgIGxlbiwgaW5ncmVzcyxcbitcdFx0XHRcdFx0XHRcdCAgc2VsZl9wYXNzLCBzdHJwYXJzZXIpO1xuIFx0XHRcdGlmIChyZXQgXHUwMDNjPSAwKSB7XG4gXHRcdFx0XHRpZiAocmV0ID09IC1FQUdBSU4pIHtcbiBcdFx0XHRcdFx0c2tfcHNvY2tfc2tiX3N0YXRlKHBzb2NrLCBzdGF0ZSwgbGVuLCBvZmYpO1xuIFx0XHRcdFx0XHQvKiBSZXN0b3JlIHJlZGlyIGluZm8gd2UgY2xlYXJlZCBiZWZvcmUgKi9cbi1cdFx0XHRcdFx0c2tiX2JwZl9zZXRfcmVkaXIoc2tiLCBwc29jay1cdTAwM2VzaywgaW5ncmVzcyk7XG4rXHRcdFx0XHRcdHNrYi1cdTAwM2Vfc2tfcmVkaXIgPSBzYXZlZF9yZWRpcjtcbiBcdFx0XHRcdFx0LyogRGVsYXkgc2xpZ2h0bHkgdG8gcHJpb3JpdGl6ZSBhbnlcbiBcdFx0XHRcdFx0ICogb3RoZXIgd29yayB0aGF0IG1pZ2h0IGJlIGhlcmUuXG4gXHRcdFx0XHRcdCAqL1xuQEAgLTEwMTcsNiArMTA5OCw4IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgKiByZXRyeWluZyBsYXRlciBmcm9tIHdvcmtxdWV1ZS5cbiBcdFx0ICovXG4gXHRcdGlmIChza2JfcXVldWVfZW1wdHkoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19za2IpKSB7XG4rXHRcdFx0Ym9vbCBzZXR0bGVfZndkX2FsbG9jID0gZmFsc2U7XG4rXG4gXHRcdFx0bGVuID0gc2tiLVx1MDAzZWxlbjtcbiBcdFx0XHRvZmYgPSAwO1xuIFx0XHRcdGlmIChza2JfYnBmX3N0cnBhcnNlcihza2IpKSB7XG5AQCAtMTAyNCw4ICsxMTA3LDEwIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0XHRcdFx0b2ZmID0gc3RtLVx1MDAzZW9mZnNldDtcbiBcdFx0XHRcdGxlbiA9IHN0bS1cdTAwM2VmdWxsX2xlbjtcbitcdFx0XHRcdHNldHRsZV9md2RfYWxsb2MgPSB0cnVlO1xuIFx0XHRcdH1cbi1cdFx0XHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBmYWxzZSk7XG4rXHRcdFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbixcbitcdFx0XHRcdFx0XHRcdGZhbHNlLCBzZXR0bGVfZndkX2FsbG9jKTtcbiBcdFx0fVxuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3NfbG9jayk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY1xuaW5kZXggMWQ3MjMxNzI4ZWFmZC4uYzdhZDIxZDBiYmY0OSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY1xuQEAgLTEsNSArMSw5IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAjaW5jbHVkZSBcdTAwM2NlcnJvci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW5ldF9kaWFnLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRsaW5rLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvY2tfZGlhZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0aW5ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFwic29ja21hcF9oZWxwZXJzLmhcIlxuQEAgLTQ2MCw2ICs0NjQsMTcxIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zdHJwX3BhcnNlcl9yZWplY3Qodm9pZClcbiBcdHRlc3Rfc29ja21hcF9zdHJwX19kZXN0cm95KHN0cnApO1xuIH1cbiBcbisvKiBSZWFkIHNrX2ZvcndhcmRfYWxsb2MgdGhyb3VnaCBpbmV0X2RpYWcgbWVtaW5mby4gKi9cbitzdGF0aWMgaW50IHNvY2ttYXBfc3RycF9nZXRfZndkX2FsbG9jKGludCBzb2NrLCBpbnQgKmZ3ZF9hbGxvYylcbit7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBsb2NhbCA9IHt9LCBwZWVyID0ge307XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gKmxvY2FsX2luLCAqcGVlcl9pbjtcbitcdHNvY2tsZW5fdCBhZGRyX2xlbiA9IHNpemVvZihsb2NhbCk7XG4rXHRjaGFyIGJ1ZlsxMDI0XTtcbitcdHN0cnVjdCB7XG4rXHRcdHN0cnVjdCBubG1zZ2hkciBubGg7XG4rXHRcdHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyIHJlcTtcbitcdH0gcmVxID0ge1xuK1x0XHQubmxoID0ge1xuK1x0XHRcdC5ubG1zZ19sZW4gPSBzaXplb2YocmVxKSxcbitcdFx0XHQubmxtc2dfdHlwZSA9IFNPQ0tfRElBR19CWV9GQU1JTFksXG4rXHRcdFx0Lm5sbXNnX2ZsYWdzID0gTkxNX0ZfUkVRVUVTVCxcbitcdFx0XHQubmxtc2dfc2VxID0gMSxcbitcdFx0fSxcbitcdFx0LnJlcSA9IHtcbitcdFx0XHQuc2RpYWdfZmFtaWx5ID0gQUZfSU5FVCxcbitcdFx0XHQuc2RpYWdfcHJvdG9jb2wgPSBJUFBST1RPX1RDUCxcbitcdFx0XHQuaWRpYWdfZXh0ID0gMSBcdTAwM2NcdTAwM2MgKElORVRfRElBR19NRU1JTkZPIC0gMSksXG4rXHRcdFx0LmlkaWFnX3N0YXRlcyA9IH4wVSxcbitcdFx0XHQuaWQuaWRpYWdfY29va2llID0ge1xuK1x0XHRcdFx0SU5FVF9ESUFHX05PQ09PS0lFLFxuK1x0XHRcdFx0SU5FVF9ESUFHX05PQ09PS0lFLFxuK1x0XHRcdH0sXG4rXHRcdH0sXG4rXHR9O1xuK1x0aW50IGRpYWdfZmQsIHJldCwgZXJyID0gLUVOT0VOVDtcbitcbitcdGlmIChnZXRzb2NrbmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2bG9jYWwsIFx1MDAyNmFkZHJfbGVuKSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcdGFkZHJfbGVuID0gc2l6ZW9mKHBlZXIpO1xuK1x0aWYgKGdldHBlZXJuYW1lKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZwZWVyLCBcdTAwMjZhZGRyX2xlbikpXG4rXHRcdHJldHVybiAtZXJybm87XG4rXG4rXHRsb2NhbF9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilcdTAwMjZsb2NhbDtcbitcdHBlZXJfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopXHUwMDI2cGVlcjtcbitcdHJlcS5yZXEuaWQuaWRpYWdfc3BvcnQgPSBsb2NhbF9pbi1cdTAwM2VzaW5fcG9ydDtcbitcdHJlcS5yZXEuaWQuaWRpYWdfZHBvcnQgPSBwZWVyX2luLVx1MDAzZXNpbl9wb3J0O1xuK1x0cmVxLnJlcS5pZC5pZGlhZ19zcmNbMF0gPSBsb2NhbF9pbi1cdTAwM2VzaW5fYWRkci5zX2FkZHI7XG4rXHRyZXEucmVxLmlkLmlkaWFnX2RzdFswXSA9IHBlZXJfaW4tXHUwMDNlc2luX2FkZHIuc19hZGRyO1xuK1xuK1x0ZGlhZ19mZCA9IHNvY2tldChBRl9ORVRMSU5LLCBTT0NLX1JBVyB8IFNPQ0tfQ0xPRVhFQyxcbitcdFx0XHQgTkVUTElOS19TT0NLX0RJQUcpO1xuK1x0aWYgKGRpYWdfZmQgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtZXJybm87XG4rXG4rXHRyZXQgPSBzZW5kKGRpYWdfZmQsIFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksIDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRlcnIgPSAtZXJybm87XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0aWYgKHJldCAhPSBzaXplb2YocmVxKSkge1xuK1x0XHRlcnIgPSAtRUlPO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdHJldCA9IHJlY3YoZGlhZ19mZCwgYnVmLCBzaXplb2YoYnVmKSwgMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdGVyciA9IC1lcnJubztcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRmb3IgKHN0cnVjdCBubG1zZ2hkciAqbmxoID0gKHN0cnVjdCBubG1zZ2hkciAqKWJ1ZjtcbitcdCAgICAgTkxNU0dfT0sobmxoLCByZXQpOyBubGggPSBOTE1TR19ORVhUKG5saCwgcmV0KSkge1xuK1x0XHRzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqbXNnID0gTkxNU0dfREFUQShubGgpO1xuK1x0XHRzdHJ1Y3QgcnRhdHRyICphdHRyO1xuK1x0XHRpbnQgbGVuO1xuK1xuK1x0XHRpZiAobmxoLVx1MDAzZW5sbXNnX3R5cGUgPT0gTkxNU0dfRVJST1IpIHtcbitcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHRcdGlmIChubGgtXHUwMDNlbmxtc2dfdHlwZSA9PSBOTE1TR19ET05FKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRsZW4gPSBubGgtXHUwMDNlbmxtc2dfbGVuIC0gTkxNU0dfTEVOR1RIKHNpemVvZigqbXNnKSk7XG4rXHRcdGZvciAoYXR0ciA9IChzdHJ1Y3QgcnRhdHRyICopKG1zZyArIDEpOyBSVEFfT0soYXR0ciwgbGVuKTtcbitcdFx0ICAgICBhdHRyID0gUlRBX05FWFQoYXR0ciwgbGVuKSkge1xuK1x0XHRcdHN0cnVjdCBpbmV0X2RpYWdfbWVtaW5mbyAqbWluZm87XG4rXG4rXHRcdFx0aWYgKGF0dHItXHUwMDNlcnRhX3R5cGUgIT0gSU5FVF9ESUFHX01FTUlORk8pXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRtaW5mbyA9IFJUQV9EQVRBKGF0dHIpO1xuK1x0XHRcdCpmd2RfYWxsb2MgPSAoX19zMzIpbWluZm8tXHUwMDNlaWRpYWdfZm1lbTtcbitcdFx0XHRlcnIgPSAwO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHR9XG4rXG4rb3V0OlxuK1x0Y2xvc2UoZGlhZ19mZCk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbisvKiBUZXN0IHN0cnBhcnNlciBTS19QQVNTIGRlbGl2ZXJ5IHRvIHRoZSBzYW1lIHNvY2tldC4gKi9cbitzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF9zZWxmX3Bhc3NfZndkX2FsbG9jKHZvaWQpXG4re1xuK1x0c3RydWN0IHRlc3Rfc29ja21hcF9zdHJwICpzdHJwID0gTlVMTDtcbitcdGNoYXIgc25kWzQgKiAxMDI0XTtcbitcdGludCBjID0gLTEsIHAgPSAtMTtcbitcdGludCBmd2RfYWxsb2M7XG4rXHRpbnQgc25kYnVmID0gc2l6ZW9mKHNuZCk7XG4rXHRpbnQgemVybyA9IDA7XG4rXHRjaGFyIHJjdjtcbitcdGludCBzZW50LCByZWN2ZDtcbitcdGludCBtYXA7XG4rXHRpbnQgZXJyO1xuK1xuK1x0bWVtc2V0KHNuZCwgMHhhNSwgc2l6ZW9mKHNuZCkpO1xuK1xuK1x0c3RycCA9IHRlc3Rfc29ja21hcF9zdHJwX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc3RycCwgXCJ0ZXN0X3NvY2ttYXBfc3RycF9fb3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0bWFwID0gYnBmX21hcF9fZmQoc3RycC1cdTAwM2VtYXBzLnNvY2tfbWFwKTtcbitcdGVyciA9IHhicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHN0cnAtXHUwMDNlcHJvZ3MucHJvZ19za2JfcGFyc2VyX29uZSksXG4rXHRcdFx0ICAgICAgIG1hcCwgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSLCAwKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4rXG4rXHRlcnIgPSB4YnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChzdHJwLVx1MDAzZXByb2dzLnByb2dfc2tiX3ZlcmRpY3RfcGFzcyksXG4rXHRcdFx0ICAgICAgIG1hcCwgQlBGX1NLX1NLQl9TVFJFQU1fVkVSRElDVCwgMCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dF9kZXN0cm95O1xuK1xuK1x0ZXJyID0gY3JlYXRlX3BhaXIoQUZfSU5FVCwgU09DS19TVFJFQU0sIFx1MDAyNmMsIFx1MDAyNnApO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImNyZWF0ZV9wYWlyXCIpKVxuK1x0XHRnb3RvIG91dF9kZXN0cm95O1xuK1xuK1x0ZXJyID0geHNldHNvY2tvcHQoYywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCBcdTAwMjZzbmRidWYsIHNpemVvZihzbmRidWYpKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4rXG4rXHRlcnIgPSB4c2V0c29ja29wdChwLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIFx1MDAyNnNuZGJ1Ziwgc2l6ZW9mKHNuZGJ1ZikpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXRfZGVzdHJveTtcbitcbitcdGVyciA9IHhicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcCwgXHUwMDI2emVybywgXHUwMDI2cCwgQlBGX05PRVhJU1QpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXRfZGVzdHJveTtcbitcbitcdHNlbnQgPSBzZW5kKGMsIHNuZCwgc2l6ZW9mKHNuZCksIE1TR19ET05UV0FJVCk7XG4rXHRpZiAoIUFTU0VSVF9FUShzZW50LCBzaXplb2Yoc25kKSwgXCJzZW5kXCIpKVxuK1x0XHRnb3RvIG91dF9kZXN0cm95O1xuK1xuK1x0cmVjdmQgPSByZWN2X3RpbWVvdXQocCwgXHUwMDI2cmN2LCBzaXplb2YocmN2KSwgTVNHX0RPTlRXQUlULFxuK1x0XHRcdCAgICAgSU9fVElNRU9VVF9TRUMpO1xuK1x0aWYgKCFBU1NFUlRfRVEocmVjdmQsIHNpemVvZihyY3YpLCBcInJlY3ZfdGltZW91dFwiKSB8fFxuK1x0ICAgICFBU1NFUlRfRVEocmN2LCBzbmRbMF0sIFwiZGF0YSBtaXNtYXRjaFwiKSlcbitcdFx0Z290byBvdXRfZGVzdHJveTtcbitcbitcdGVyciA9IHNvY2ttYXBfc3RycF9nZXRfZndkX2FsbG9jKHAsIFx1MDAyNmZ3ZF9hbGxvYyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwic29ja21hcF9zdHJwX2dldF9md2RfYWxsb2NcIikgfHxcbitcdCAgICAhQVNTRVJUX0dFKGZ3ZF9hbGxvYywgMCwgXCJza19mb3J3YXJkX2FsbG9jXCIpKVxuK1x0XHRnb3RvIG91dF9kZXN0cm95O1xuK291dF9kZXN0cm95OlxuK1x0dGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7XG4rXHRpZiAoYyBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGMpO1xuK1x0aWYgKHAgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShwKTtcbit9XG4rXG4gdm9pZCB0ZXN0X3NvY2ttYXBfc3RycCh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic29ja21hcCBzdHJwIHRjcCBwYXNzXCIpKVxuQEAgLTQ4Miw0ICs2NTEsNiBAQCB2b2lkIHRlc3Rfc29ja21hcF9zdHJwKHZvaWQpXG4gXHRcdHRlc3Rfc29ja21hcF9zdHJwX2Rpc3BhdGNoX3BrdChBRl9JTkVULCBTT0NLX1NUUkVBTSk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInNvY2ttYXAgc3RycCBwYXJzZXIgcmVqZWN0IHBrdCBtb2RcIikpXG4gXHRcdHRlc3Rfc29ja21hcF9zdHJwX3BhcnNlcl9yZWplY3QoKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic29ja21hcCBzdHJwIHNlbGYgcGFzcyBmd2QgYWxsb2NcIikpXG4rXHRcdHRlc3Rfc29ja21hcF9zdHJwX3NlbGZfcGFzc19md2RfYWxsb2MoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuY1xuaW5kZXggZmU4OGZhNmQ0MGJjNS4uNjgyZTUzZDQwNzUxYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuY1xuQEAgLTUwLDYgKzUwLDEyIEBAIGludCBwcm9nX3NrYl9wYXJzZXJfcGFydGlhbChzdHJ1Y3QgX19za19idWZmICpza2IpXG4gXHRyZXR1cm4gMTA7XG4gfVxuIFxuK1NFQyhcInNrX3NrYi9zdHJlYW1fcGFyc2VyXCIpXG4raW50IHByb2dfc2tiX3BhcnNlcl9vbmUoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdHJldHVybiAxO1xuK31cbitcbiBTRUMoXCJza19za2Ivc3RyZWFtX3BhcnNlclwiKVxuIGludCBwcm9nX3NrYl9wYXJzZXJfcmVzaXplKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNjo0Nzo0MC45NTUxNTI5MDVaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc4NDk5MDUzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogU0tNU0cgQ2hhbmdlcyBmb3IgU29ja2V0IE1lbW9yeSBBY2NvdW50aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoLCB0b3VjaGluZyBgbmV0L2NvcmUvc2ttc2cuY2AgYW5kIGFkZGluZyBhIHRlc3QgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jYCwgaXMgbGlrZWx5ICpub3QqIGEgS01TQU4gY29uY2Vybi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgc2VlbSB0byByZXZvbHZlIGFyb3VuZCBjb3JyZWN0aW5nIHNvY2tldCBtZW1vcnkgYWNjb3VudGluZywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYHNrX2ZvcndhcmRfYWxsb2NgLCB3aGVuIGFuIGBza2JgIGlzIHJvdXRlZCBiYWNrIHRvIHRoZSBzYW1lIHNvY2tldCB2aWEgQlBGIHN0cmVhbSBwYXJzaW5nLiBUaGlzIGludm9sdmVzIG1vZGlmaWNhdGlvbnMgdG8gYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgLCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9iYWNrbG9nYCwgYW5kIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbmAuXG5cbk15IHByaW1hcnkgY29uY2VybiwgYXMgYSBLTVNBTiBleHBlcnQsIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSByaXNrcyBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3MgZGlnIGluOiBUaGUgaW50cm9kdWN0aW9uIG9mIGBzZXR0bGVfZndkX2FsbG9jYCBhbmQgdGhlIGNhbGxzIHRvIGBza19ybWVtX3NjaGVkdWxlKHNrLCBza2IsIDApYCBhbmQgYHNrYl9zZXRfb3duZXJfcihza2IsIHNrKWAgYXJlIHB1cmVseSBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCBvbiB0aGUgKnJlY2VpdmluZyogc2lkZSwgbm90aGluZyB0aGF0IHRvdWNoZXMgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblNwZWNpZmljYWxseSwgdGhlIHBhdGNoIHNlZW1zIHRvIGFkZHJlc3MgYSBidWcgb3IgcG90ZW50aWFsIGxlYWsgcmVsYXRlZCB0byBpbmNvcnJlY3QgYWNjb3VudGluZywgcG9zc2libHkgcmVzdWx0aW5nIGluIG5lZ2F0aXZlIHZhbHVlcyBmb3IgYHNrX2ZvcndhcmRfYWxsb2NgLiBUaGF0J3Mgbm90IHRoZSBzYW1lIGFzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Zy4gSXQncyBtb3JlIG9mIGEgbG9naWMgZXJyb3IgdGhhdCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBsZWFrcyBvciwgcG90ZW50aWFsbHksIG90aGVyIG1lbW9yeS1yZWxhdGVkIGVycm9ycywgYnV0IG5vdCBkaXJlY3RseSBLTVNBTi1yZWxhdGVkLlxuXG5SZXZpZXdpbmcgdGhlIGNvZGUgc25pcHBldHMsIHRoZSBhZGRpdGlvbiBvZiBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gIGlzIHNvbGVseSBmb3IgdGhlIHB1cnBvc2Ugb2YgbWFuYWdpbmcgbWVtb3J5IG93bmVyc2hpcCBhbmQgYWNjb3VudGluZy4gSSBzZWUgbm8gYWxsb2NhdGlvbiBvZiBuZXcsIGNvbXBsZXggc3RydWN0dXJlcywgbm9yIGFueSBtYW5pcHVsYXRpb24gb2YgZXhpc3Rpbmcgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYXZlIGZpZWxkcyB1bmluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBhbHNvIGluY2x1ZGUgc2F2aW5nIGFuZCByZXN0b3JpbmcgdGhlIGBza2ItXHUwMDNlX3NrX3JlZGlyYCBmaWVsZCwgYnV0IHRoaXMgZmllbGQgaXMgaW5pdGlhbGl6ZWQgZWl0aGVyIHdoZW4gdGhlIGBza2JgIGlzIGFsbG9jYXRlZCwgb3IgY2xlYXJlZCBieSB0aGUga2VybmVsLiBUaGVyZSdzIG5vIHNjZW5hcmlvIGhlcmUgdGhhdCByaXNrcyBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZSB0ZXN0IGFkZGVkIGFwcGVhcnMgdG8gdmVyaWZ5IHRoZSBzb2NrZXQgbWVtb3J5IGluZm9ybWF0aW9uIHVzaW5nIGBpbmV0X2RpYWdfcmVxX3YyYCwgYnV0IHRoaXMgaXMgc2ltcGx5IGEgdGVzdCBhbmQgZG9lcyBub3QgY3JlYXRlIGFuIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGUgY29yZSBmdW5jdGlvbnMg4oCTIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCwgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZfYmFja2xvZ2AsIGFuZCB0aGUgbmV3IGZ1bmN0aW9uIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbmAg4oCTIGFyZSBhbGwgZm9jdXNlZCBvbiBtZW1vcnkgYWNjb3VudGluZy4gVGhleSBpbnZvbHZlIGxvY2tpbmcsIG93bmVyc2hpcCBtYW5hZ2VtZW50LCBhbmQgc2NoZWR1bGluZyByZWNlaXZlIG1lbW9yeS5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgYSBgTmVlZHNLTVNBTmAgdGFnIGlzICpub3QqIGFwcHJvcHJpYXRlIGhlcmUuIFdoaWxlIGEgYnVnIGluIHRoZXNlIGNoYW5nZXMgKmNvdWxkKiBsZWFkIHRvIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSwgdGhvc2UgYXJlIGFscmVhZHkgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZSBpbnRyb2R1Y2VkIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBwYXRocywgYm91bmRzLWNoZWNrIGNoYW5nZXMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgYW55IHVzZXIgc3BhY2UgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggZmllbGRzIHRoYXQgY291bGQgY29udGFpbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gVGhpcyBpcyBzdHJpY3RseSBsb2dpYyBmb3Igc29ja2V0IGFjY291bnRpbmc7IEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaW4gdGhpcyBpbnN0YW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI3OCwiT3V0cHV0VG9rZW5zIjoyMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTY6NDc6NTguODA1MDYxOTE5WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYW4gaXNzdWUgd2l0aCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcgKGBza19mb3J3YXJkX2FsbG9jYCkgd2hlbiBhbiBza2IgaXMgcGFzc2VkIHRvIHRoZSBzYW1lIHNvY2tldCB2aWEgQlBGIHN0cmVhbSBwYXJzZXIvdmVyZGljdC4gSXQgaW50cm9kdWNlcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZl9hc3NpZ25gIHRvIHByb3Blcmx5IGhhbmRsZSBgc2tfcm1lbV9zY2hlZHVsZWAgYW5kIGBza2Jfc2V0X293bmVyX3JgLiBUaGUgY2hhbmdlcyBpbnZvbHZlIG1lbW9yeSBhY2NvdW50aW5nLCBsb2NraW5nLCBhbmQgc2F2aW5nL3Jlc3RvcmluZyBgc2tiLVxcdTAwM2Vfc2tfcmVkaXJgLiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBubyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgY29udGFpbiB1bmluaXRpYWxpemVkIGZpZWxkcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBsb2dpYyBlcnJvcnMsIG1lbW9yeSBsZWFrcywgb3IgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBpc3N1ZSB3aXRoIHNvY2tldCBtZW1vcnkgYWNjb3VudGluZyAoYHNrX2ZvcndhcmRfYWxsb2NgKSB3aGVuIGFuIHNrYiBpcyBwYXNzZWQgdG8gdGhlIHNhbWUgc29ja2V0IHZpYSBCUEYgc3RyZWFtIHBhcnNlci92ZXJkaWN0LiBJdCBpbnRyb2R1Y2VzIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmX2Fzc2lnbmAgdG8gcHJvcGVybHkgaGFuZGxlIGBza19ybWVtX3NjaGVkdWxlYCBhbmQgYHNrYl9zZXRfb3duZXJfcmAuIFRoZSBjaGFuZ2VzIGludm9sdmUgbWVtb3J5IGFjY291bnRpbmcsIGxvY2tpbmcsIGFuZCBzYXZpbmcvcmVzdG9yaW5nIGBza2ItXFx1MDAzZV9za19yZWRpcmAuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBjb250YWluIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGxvZ2ljIGVycm9ycywgbWVtb3J5IGxlYWtzLCBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowgqn4f[1] Phase: Succeeded StartedAt: 2026-08-17 16:48:06 +0000 UTC FinishedAt: 2026-08-17 16:48:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 16:48:06 +0000 UTC FinishedAt: 2026-08-17 16:48:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[2] Phase: Succeeded StartedAt: 2026-08-17 16:48:06 +0000 UTC FinishedAt: 2026-08-17 20:50:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-17 16:48:06 +0000 UTC FinishedAt: 2026-08-17 20:50:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-17 16:48:06 +0000 UTC FinishedAt: 2026-08-17 16:48:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-17 16:48:06 +0000 UTC FinishedAt: 2026-08-17 16:48:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowgqn4f/series-workflowgqn4f-convert-artifact-2878377077/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-17 16:48:16 +0000 UTC FinishedAt: 2026-08-17 17:07:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-17 16:48:16 +0000 UTC FinishedAt: 2026-08-17 17:07:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*69801a16-a467-4b57-809e-6893584a07f2,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-workflowgqn4f/series-workflowgqn4f-convert-artifact-2878377077/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": "bfcc17a3-d65a-4c64-b204-30c85b914f6d", "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-workflowgqn4f/series-workflowgqn4f-build-action-4021544539/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-17 16:48:16 +0000 UTC FinishedAt: 2026-08-17 17:07:30 +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:*69801a16-a467-4b57-809e-6893584a07f2,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-workflowgqn4f/series-workflowgqn4f-convert-artifact-2878377077/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": "bfcc17a3-d65a-4c64-b204-30c85b914f6d", "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-workflowgqn4f/series-workflowgqn4f-build-action-4021544539/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-17 17:07:40 +0000 UTC FinishedAt: 2026-08-17 17:07:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-17 17:07:40 +0000 UTC FinishedAt: 2026-08-17 17:07:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-17 17:07:40 +0000 UTC FinishedAt: 2026-08-17 17:07:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-17 17:07:40 +0000 UTC FinishedAt: 2026-08-17 17:07:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowgqn4f/series-workflowgqn4f-convert-artifact-2324439760/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-17 17:07:50 +0000 UTC FinishedAt: 2026-08-17 17:09:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-17 17:07:50 +0000 UTC FinishedAt: 2026-08-17 17:09:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bfcc17a3-d65a-4c64-b204-30c85b914f6d,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-workflowgqn4f/series-workflowgqn4f-build-action-4021544539/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-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-17 17:09:56 +0000 UTC FinishedAt: 2026-08-17 17:09:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-17 17:09:56 +0000 UTC FinishedAt: 2026-08-17 17:09:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-17 17:09:56 +0000 UTC FinishedAt: 2026-08-17 17:26:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-17 17:09:56 +0000 UTC FinishedAt: 2026-08-17 17:26:11 +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:*69801a16-a467-4b57-809e-6893584a07f2,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-workflowgqn4f/series-workflowgqn4f-convert-artifact-2324439760/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": "27820b95-6aa0-4b9c-a67d-d9a3fb5bebd6", "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-workflowgqn4f/series-workflowgqn4f-build-action-3526418508/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-17 17:09:56 +0000 UTC FinishedAt: 2026-08-17 17:26:01 +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:*69801a16-a467-4b57-809e-6893584a07f2,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-workflowgqn4f/series-workflowgqn4f-convert-artifact-2324439760/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": "27820b95-6aa0-4b9c-a67d-d9a3fb5bebd6", "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-workflowgqn4f/series-workflowgqn4f-build-action-3526418508/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-17 17:26:11 +0000 UTC FinishedAt: 2026-08-17 17:26:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-17 17:26:11 +0000 UTC FinishedAt: 2026-08-17 17:26:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-17 17:26:11 +0000 UTC FinishedAt: 2026-08-17 17:28:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-17 17:26:11 +0000 UTC FinishedAt: 2026-08-17 17:28:04 +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:*27820b95-6aa0-4b9c-a67d-d9a3fb5bebd6,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-workflowgqn4f/series-workflowgqn4f-build-action-3526418508/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-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-17 17:28:14 +0000 UTC FinishedAt: 2026-08-17 20:50:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-17 17:28:14 +0000 UTC FinishedAt: 2026-08-17 20:50:19 +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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"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:*bfcc17a3-d65a-4c64-b204-30c85b914f6d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*27820b95-6aa0-4b9c-a67d-d9a3fb5bebd6,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-workflowgqn4f/series-workflowgqn4f-build-action-4021544539/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-workflowgqn4f/series-workflowgqn4f-build-action-3526418508/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-17 17:28:14 +0000 UTC FinishedAt: 2026-08-17 17:28:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-17 17:28:14 +0000 UTC FinishedAt: 2026-08-17 17:28:17 +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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"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-workflowgqn4f/series-workflowgqn4f-convert-artifact-4269112265/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-17 17:28:14 +0000 UTC FinishedAt: 2026-08-17 17:28:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-17 17:28:14 +0000 UTC FinishedAt: 2026-08-17 17:28:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-17 17:28:14 +0000 UTC FinishedAt: 2026-08-17 17:28:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-17 17:28:24 +0000 UTC FinishedAt: 2026-08-17 20:50:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqn4f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sock_map_update_elem_sys","sock_map_get_from_fd","tcp_bpf_update_proto","tcp_bpf_strp_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"eaef0771-aa99-4808-93a0-0796ba8c48a6","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-17 17:28:24 +0000 UTC FinishedAt: 2026-08-17 20:50:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bfcc17a3-d65a-4c64-b204-30c85b914f6d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*27820b95-6aa0-4b9c-a67d-d9a3fb5bebd6,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-workflowgqn4f/series-workflowgqn4f-build-action-4021544539/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-workflowgqn4f/series-workflowgqn4f-build-action-3526418508/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-workflowgqn4f/series-workflowgqn4f-convert-artifact-4269112265/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,}