Name: series-workflowbtxcn Phase: Succeeded StartedAt: 2026-08-11 00:15:33 +0000 UTC FinishedAt: 2026-08-11 04:28:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[0] Phase: Succeeded StartedAt: 2026-08-11 00:15:33 +0000 UTC FinishedAt: 2026-08-11 00:36:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 00:15:33 +0000 UTC FinishedAt: 2026-08-11 00:36:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d114bb98936770c501c958bf2bc5fb6b7c0bad7b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d114bb98936770c501c958bf2bc5fb6b7c0bad7b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "21ccb324-35ab-4af2-bc1f-cc60a3ebf49d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_insn_def32", "ex_handler_bpf", "bpf_jit_emit_insn", "bpf_int_jit_compile", "bpf_check" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW5zbl9kZWYzMiYjMzQ7LAogICAgJiMzNDtleF9oYW5kbGVyX2JwZiYjMzQ7LAogICAgJiMzNDticGZfaml0X2VtaXRfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHRoZSBCUEYgZXhjZXB0aW9uIGhhbmRsZXIgZm9yIGFyZW5hIGFjY2Vzc2VzIHRvIGNvcnJlY3RseSBpZGVudGlmeSByZWFkLW1vZGlmeS13cml0ZSBhdG9taWMgb3BlcmF0aW9ucyAobGlrZSBCUEZfWENIRyBhbmQgQlBGX0NNUFhDSEcpIGFzIHdyaXRlcywgYW5kIHRvIHByb3Blcmx5IGNsZWFyIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciAoZS5nLiwgQlBGX1JFR18wIGZvciBDTVBYQ0hHKSB3aGVuIGEgcGFnZSBmYXVsdCBvY2N1cnMuIElmIHRoZSByZWdpc3RlciBpcyBub3QgY2xlYXJlZCwgdGhlIEJQRiBwcm9ncmFtIHNpbXBseSByZXRhaW5zIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGF0IHJlZ2lzdGVyLiBUaGlzIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LCBub3IgZG9lcyBpdCBleHBvc2Uga2VybmVsIHN0YWNrL2hlYXAgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZSBpc3N1ZSBpcyBhIGxvZ2ljIGJ1ZyBpbiBCUEYgSklUIGV4Y2VwdGlvbiBoYW5kbGluZywgd2hpY2ggZG9lcyBub3QgaW50cm9kdWNlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEJQRiBzZWxmdGVzdHMgKGFzIGluY2x1ZGVkIGluIHRoZSBwYXRjaCkgYXJlIHN1ZmZpY2llbnQgdG8gdmVyaWZ5IHRoZSBmaXguJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVycyAoeDg2LCBhcm02NCwgcmlzY3YsIHMzOTApIGFuZCB0aGUgQlBGIHZlcmlmaWVyIHRvIGNvcnJlY3RseSBoYW5kbGUgZXhjZXB0aW9ucyBmb3IgYXRvbWljIG9wZXJhdGlvbnMgaW4gdGhlIEJQRiBhcmVuYS4gSXQgaW50cm9kdWNlcyBgYnBmX2F0b21pY19sb2FkX3JlZ2AgdG8gaWRlbnRpZnkgdGhlIHJlZ2lzdGVyIHRoYXQgbmVlZHMgdG8gYmUgY2xlYXJlZCB3aGVuIGFuIGF0b21pYyBpbnN0cnVjdGlvbiBmYXVsdHMsIGFuZCBlbnN1cmVzIHRoYXQgcmVhZC1tb2RpZnktd3JpdGUgb3BlcmF0aW9ucyBhcmUgY29ycmVjdGx5IHJlcG9ydGVkIGFzIHdyaXRlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJQRiBzdWJzeXN0ZW0pIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjRhYTc1MjFmODU4MDNmZDNhMWJhZTE0NTE5ZGEwYWJkYzFkZjAxZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDAwOjM0OjE4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IGQxNGQyOTdlYmI5NjcuLjc0YjQwODM3OTFkYTMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0xMDgyLDIzICYjNDM7MTA4MiwyNyBAQCBzdGF0aWMgdm9pZCBidWlsZF9lcGlsb2d1ZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIHdhc19jbGFzc2ljKVxuICAqXG4gICogQml0IGxheW91dCBvZiBgZml4dXBgICgzMi1iaXQpOlxuICAqXG4tICogJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7XG4tICogfCAgIDMxLTI3ICAgfCAyNi0yMiAgfCAgICAgMjEgICAgfCAgIDIwLTE2ICAgfCAgIDE1LTAgICB8XG4tICogfCAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8XG4tICogfCBGSVhVUF9SRUcgfCBVbnVzZWQgfCBBUkVOQV9BQ0MgfCBBUkVOQV9SRUcgfCAgT0ZGU0VUICB8XG4tICogJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7XG4mIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzO1xuJiM0MzsgKiB8ICAgMzEtMjcgICB8IDI2LTIzICB8ICAgICAgMjIgICAgIHwgICAgIDIxICAgIHwgICAyMC0xNiAgIHwgICAxNS0wICAgfFxuJiM0MzsgKiB8ICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfFxuJiM0MzsgKiB8IEZJWFVQX1JFRyB8IFVudXNlZCB8IEFSRU5BX1dSSVRFIHwgQVJFTkFfQUNDIHwgQVJFTkFfUkVHIHwgIE9GRlNFVCAgfFxuJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MztcbiAgKlxuICAqIC0gT0ZGU0VUICgxNiBiaXRzKTogT2Zmc2V0IHVzZWQgdG8gY29tcHV0ZSBhZGRyZXNzIGZvciBMb2FkL1N0b3JlIGluc3RydWN0aW9uLlxuICAqIC0gQVJFTkFfUkVHICg1IGJpdHMpOiBSZWdpc3RlciB0aGF0IGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBhZGRyZXNzIGZvciBsb2FkL3N0b3JlIHdoZW5cbiAgKiAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzaW5nIHRoZSBhcmVuYSByZWdpb24uXG4gICogLSBBUkVOQV9BQ0NFU1MgKDEgYml0KTogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIGFjY2Vzc2VkIHRoZSBhcmVuYSByZWdpb24uXG4mIzQzOyAqIC0gQVJFTkFfV1JJVEUgKDEgYml0KTogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIHdyb3RlIHRvIHRoZSBhcmVuYSByZWdpb24uXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW5kZXBlbmRlbnQgb2YgRklYVVBfUkVHLCBzaW5jZSBhIHJlYWQtbW9kaWZ5LXdyaXRlIGJvdGggd3JpdGVzIHRvXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5IGFuZCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gYSByZWdpc3Rlci5cbiAgKiAtIEZJWFVQX1JFRyAoNSBiaXRzKTogRGVzdGluYXRpb24gcmVnaXN0ZXIgZm9yIHRoZSBsb2FkIGluc3RydWN0aW9uIChjbGVhcmVkIG9uIGZhdWx0KSBvciBzZXQgdG9cbi0gKiAgICAgICAgICAgICAgICAgICAgICAgRE9OVF9DTEVBUiBpZiBpdCBpcyBhIHN0b3JlIGluc3RydWN0aW9uLlxuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgRE9OVF9DTEVBUiBpZiB0aGUgaW5zdHJ1Y3Rpb24gZG9lcyBub3QgcmVhZCBpbnRvIGEgcmVnaXN0ZXIuXG4gICovXG4gXG4gI2RlZmluZSBCUEZfRklYVVBfT0ZGU0VUX01BU0sgICAgICBHRU5NQVNLKDE1LCAwKVxuICNkZWZpbmUgQlBGX0ZJWFVQX0FSRU5BX1JFR19NQVNLICAgR0VOTUFTSygyMCwgMTYpXG4gI2RlZmluZSBCUEZfQVJFTkFfQUNDRVNTICAgICAgICAgICBCSVQoMjEpXG4mIzQzOyNkZWZpbmUgQlBGX0FSRU5BX1dSSVRFICAgICAgICAgICAgQklUKDIyKVxuICNkZWZpbmUgQlBGX0ZJWFVQX1JFR19NQVNLXHRHRU5NQVNLKDMxLCAyNylcbiAjZGVmaW5lIERPTlRfQ0xFQVIgNSAvKiBVbnVzZWQgQVJNNjQgcmVnaXN0ZXIgZnJvbSBCUEYmIzM5O3MgUE9WICovXG4gXG5AQCAtMTEwOSw3ICYjNDM7MTExMyw3IEBAIGJvb2wgZXhfaGFuZGxlcl9icGYoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXG4gXHRzMTYgb2ZmID0gRklFTERfR0VUKEJQRl9GSVhVUF9PRkZTRVRfTUFTSywgZXgtXHUwMDNlZml4dXApO1xuIFx0aW50IGFyZW5hX3JlZyA9IEZJRUxEX0dFVChCUEZfRklYVVBfQVJFTkFfUkVHX01BU0ssIGV4LVx1MDAzZWZpeHVwKTtcbiBcdGJvb2wgaXNfYXJlbmEgPSAhIShleC1cdTAwM2VmaXh1cCBcdTAwMjYgQlBGX0FSRU5BX0FDQ0VTUyk7XG4tXHRib29sIGlzX3dyaXRlID0gKGRzdF9yZWcgPT0gRE9OVF9DTEVBUik7XG4mIzQzO1x0Ym9vbCBpc193cml0ZSA9ICEhKGV4LVx1MDAzZWZpeHVwIFx1MDAyNiBCUEZfQVJFTkFfV1JJVEUpO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyO1xuIFxuIFx0aWYgKGlzX2FyZW5hKSB7XG5AQCAtMTEzMiw3ICYjNDM7MTEzNiw3IEBAIHN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiB7XG4gXHRvZmZfdCBpbnNfb2Zmc2V0O1xuIFx0czE2IG9mZiA9IGluc24tXHUwMDNlb2ZmO1xuLVx0Ym9vbCBpc19hcmVuYTtcbiYjNDM7XHRib29sIGlzX2FyZW5hLCBpc193cml0ZTtcbiBcdGludCBhcmVuYV9yZWc7XG4gXHR1bnNpZ25lZCBsb25nIHBjO1xuIFx0c3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXg7XG5AQCAtMTE4MSwxNSAmIzQzOzExODUsMTggQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0LypcbiBcdCAqIEEgbG9hZC1hY3F1aXJlIGlzIG9mIEJQRl9TVFggY2xhc3MsIGJ1dCByZWFkcyBmcm9tIHNyY19yZWcgaW50b1xuIFx0ICogZHN0X3JlZyBsaWtlIGEgQlBGX0xEWCBkb2VzLCBoZW5jZSBpdCBtdXN0IG5vdCBiZSB0cmVhdGVkIGFzIGEgc3RvcmVcbi1cdCAqIGhlcmUuXG4mIzQzO1x0ICogaGVyZS4gQSByZWFkLW1vZGlmeS13cml0ZSBjYXJyeWluZyBCUEZfRkVUQ0ggaXMgcmVwb3J0ZWQgYXMgYSB3cml0ZVxuJiM0MztcdCAqIGV2ZW4gdGhvdWdoIGl0IGRvZXMgaGF2ZSBhIHJlZ2lzdGVyIHRvIGNsZWFyLCBzZWUgdGhlIGNhbGxlcnMuXG4gXHQgKi9cbi1cdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTERYIFx1MDAyNlx1MDAyNiAhYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSlcbi1cdFx0ZHN0X3JlZyA9IERPTlRfQ0xFQVI7XG4mIzQzO1x0aXNfd3JpdGUgPSBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTERYIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIWJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbik7XG4gXG4gXHRleC1cdTAwM2VmaXh1cCA9IEZJRUxEX1BSRVAoQlBGX0ZJWFVQX1JFR19NQVNLLCBkc3RfcmVnKTtcbiBcbiBcdGlmIChpc19hcmVuYSkge1xuIFx0XHRleC1cdTAwM2VmaXh1cCB8PSBCUEZfQVJFTkFfQUNDRVNTO1xuJiM0MztcdFx0aWYgKGlzX3dyaXRlKVxuJiM0MztcdFx0XHRleC1cdTAwM2VmaXh1cCB8PSBCUEZfQVJFTkFfV1JJVEU7XG4gXHRcdC8qXG4gXHRcdCAqIGluc24tXHUwMDNlc3JjX3JlZy9kc3RfcmVnIGhvbGRzIHRoZSBhZGRyZXNzIGluIHRoZSBhcmVuYSByZWdpb24gd2l0aCB1cHBlciAzMi1iaXRzXG4gXHRcdCAqIGJlaW5nIHplcm8gYmVjYXVzZSBvZiBhIHByZWNlZGluZyBhZGRyX3NwYWNlX2Nhc3Qoclx1MDAzY25cdTAwM2UsIDB4MCwgMHgxKSBpbnN0cnVjdGlvbi5cbkBAIC0xODg5LDcgJiM0MzsxODk2LDcgQEAgc3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zblxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGRzdCk7XG4mIzQzO1x0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgY3R4LCBET05UX0NMRUFSKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRicmVhaztcbkBAIC0xOTU2LDcgJiM0MzsxOTYzLDcgQEAgc3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zblxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGRzdCk7XG4mIzQzO1x0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgY3R4LCBET05UX0NMRUFSKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRicmVhaztcbkBAIC0xOTc5LDcgJiM0MzsxOTg2LDE2IEBAIHN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc25cbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfQVRPTUlDKSB7XG4tXHRcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgZHN0KTtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQSBsb2FkLWFjcXVpcmUgcmVhZHMgaW50byBkc3RfcmVnLCBhbmQgYSByZWFkLW1vZGlmeS13cml0ZVxuJiM0MztcdFx0XHQgKiBjYXJyeWluZyBCUEZfRkVUQ0ggcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIHNyY19yZWcsIG9yIGludG9cbiYjNDM7XHRcdFx0ICogcjAgZm9yIGEgQlBGX0NNUFhDSEcuIENsZWFyIHRoYXQgcmVnaXN0ZXIgb24gZmF1bHQsIHRoZVxuJiM0MztcdFx0XHQgKiByZW1haW5pbmcgYXRvbWljcyBoYXZlIG5vIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aW50IGxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGxvYWRfcmVnIFx1MDAzYyAwID9cbiYjNDM7XHRcdFx0XHRcdFx0ICAgIERPTlRfQ0xFQVIgOiBicGYyYTY0W2xvYWRfcmVnXSk7XG4gXHRcdFx0aWYgKHJldClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuaW5kZXggNmI5OTcyYjA3YzFiMC4uMjUwNGRmMWZhMTExOCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbkBAIC0xOTkyLDEwICYjNDM7MTk5MiwxOSBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbiBcdFx0XHRyZXQgPSBlbWl0X2F0b21pY19ybXcocmQsIHJzLCBpbnNuLCBjdHgpO1xuIFxuIFx0XHQvKiByZXQgY2FuIGJlIDEgKHNraXAtemV4dCk7IGV4dGFibGUgZW50cnkgc3RpbGwgbmVlZHMgdG8gYmUgYWRkZWQgKi9cbi1cdFx0aWYgKHJldCBcdTAwM2U9IDApXG4tXHRcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sXG4tXHRcdFx0XHRicGZfYXRvbWljX2lzX2xvYWRfYWNxKGluc24pID8gcmQgOiBSRUdfRE9OVF9DTEVBUl9NQVJLRVIsXG4tXHRcdFx0XHRjdHgpID86IHJldDtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIEEgbG9hZC1hY3F1aXJlIHJlYWRzIGludG8gZHN0X3JlZywgYW5kIGEgcmVhZC1tb2RpZnktd3JpdGVcbiYjNDM7XHRcdFx0ICogY2FycnlpbmcgQlBGX0ZFVENIIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBzcmNfcmVnLCBvciBpbnRvXG4mIzQzO1x0XHRcdCAqIHIwIGZvciBhIEJQRl9DTVBYQ0hHLiBDbGVhciB0aGF0IHJlZ2lzdGVyIG9uIGZhdWx0LCB0aGVcbiYjNDM7XHRcdFx0ICogcmVtYWluaW5nIGF0b21pY3MgaGF2ZSBubyBkZXN0aW5hdGlvbiByZWdpc3Rlci5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgbG9hZF9yZWcgXHUwMDNjIDAgP1xuJiM0MztcdFx0XHRcdFx0UkVHX0RPTlRfQ0xFQVJfTUFSS0VSIDogcmVnbWFwW2xvYWRfcmVnXSxcbiYjNDM7XHRcdFx0XHRcdGN0eCkgPzogcmV0O1xuJiM0MztcdFx0fVxuIFxuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IGI2MDg3NzQ3OGI0NWQuLmM0Njg3MmIwNzFjZTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtNzc0LDYgJiM0Mzs3NzQsOCBAQCBzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX2F0b21pY19wcmUoc3RydWN0IGJwZl9qaXQgKmppdCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXG4ge1xuJiM0MztcdGludCBsb2FkX3JlZztcbiYjNDM7XG4gXHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfQVRPTUlDKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtNzgzLDYgJiM0Mzs3ODUsMTQgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsXG4gXHRFTUlUNCgweGI5MDgwMDAwLCBSRUdfVzEsIGluc24tXHUwMDNlZHN0X3JlZyk7XG4gXHRwcm9iZS1cdTAwM2VhcmVuYV9yZWcgPSBSRUdfVzE7XG4gXHRwcm9iZS1cdTAwM2VwcmcgPSBqaXQtXHUwMDNlcHJnO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSByZWFkLW1vZGlmeS13cml0ZSBjYXJyeWluZyBCUEZfRkVUQ0ggcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvXG4mIzQzO1x0ICogc3JjX3JlZywgb3IgaW50byByMCBmb3IgYSBCUEZfQ01QWENIRy4gQ2xlYXIgdGhhdCByZWdpc3RlciBvblxuJiM0MztcdCAqIGZhdWx0LCB0aGUgcmVtYWluaW5nIGF0b21pY3Mgb25seSB3cml0ZSBtZW1vcnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0bG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xuJiM0MztcdGlmIChsb2FkX3JlZyBcdTAwM2U9IDApXG4mIzQzO1x0XHRwcm9iZS1cdTAwM2VyZWcgPSByZWcyaGV4W2xvYWRfcmVnXTtcbiB9XG4gXG4gc3RhdGljIGludCBicGZfaml0X3Byb2JlX3Bvc3Qoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcbkBAIC0xNjg0LDYgJiM0MzsxNjk0LDcgQEAgc3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcbiBcdFx0XHRpZiAobG9hZF9wcm9iZS5wcmcgIT0gLTEpIHtcbiBcdFx0XHRcdHByb2JlLnByZyA9IGppdC1cdTAwM2Vwcmc7XG4gXHRcdFx0XHRwcm9iZS5hcmVuYV9yZWcgPSBsb2FkX3Byb2JlLmFyZW5hX3JlZztcbiYjNDM7XHRcdFx0XHRwcm9iZS5yZWcgPSBsb2FkX3Byb2JlLnJlZztcbiBcdFx0XHR9XG4gXHRcdFx0bG9vcF9zdGFydCA9IGppdC1cdTAwM2Vwcmc7XG4gXHRcdFx0LyogMDoge2NzeXxjc2d9ICV3MCwlc3JjLG9mZiglYXJlbmEpICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCA4ZGRkYjVkN2FmMjFiLi5kOTIwNzcyYWY3ZDVmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0xNDczLDE3ICYjNDM7MTQ3MywyMCBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX2xkX3N0X2luZGV4KHU4ICoqcHByb2csIHUzMiBhdG9taWNfb3AsIHUzMiBzaXplLFxuICAqXG4gICogQml0IGxheW91dCBvZiBgZml4dXBgICgzMi1iaXQpOlxuICAqXG4tICogJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzO1xuLSAqIHwgMzEgICAgICAgIHwgMzAtMjQgIHwgICAyMy0xNiAgIHwgICAxNS04ICB8ICAgIDctMCAgIHxcbi0gKiB8ICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICB8XG4tICogfCBBUkVOQV9BQ0MgfCBVbnVzZWQgfCBBUkVOQV9SRUcgfCBEU1RfUkVHIHwgSU5TTl9MRU4gfFxuLSAqICYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MztcbiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzO1xuJiM0MzsgKiB8IDMxICAgICAgICB8IDMwICAgICAgICAgIHwgMjktMjQgIHwgICAyMy0xNiAgIHwgICAxNS04ICB8ICAgIDctMCAgIHxcbiYjNDM7ICogfCAgICAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICB8XG4mIzQzOyAqIHwgQVJFTkFfQUNDIHwgQVJFTkFfV1JJVEUgfCBVbnVzZWQgfCBBUkVOQV9SRUcgfCBEU1RfUkVHIHwgSU5TTl9MRU4gfFxuJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7XG4gICpcbiAgKiAtIElOU05fTEVOICg4IGJpdHMpOiBMZW5ndGggb2YgZmF1bHRpbmcgaW5zbiAobWF4IHg4NiBpbnNuID0gMTUgYnl0ZXMgKGZpdHMgaW4gOCBiaXRzKSkuXG4gICogLSBEU1RfUkVHICAoOCBiaXRzKTogT2Zmc2V0IG9mIGRzdF9yZWcgZnJvbSByZWcycHRfcmVnc1tdIChtYXggb2Zmc2V0ID0gMTEyIChmaXRzIGluIDggYml0cykpLlxuLSAqICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgc2V0IHRvIERPTlRfQ0xFQVIgaWYgdGhlIGluc24gaXMgYSBzdG9yZS5cbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBzZXQgdG8gRE9OVF9DTEVBUiBpZiB0aGUgaW5zbiBkb2VzIG5vdCByZWFkIGludG8gYSByZWdpc3Rlci5cbiAgKiAtIEFSRU5BX1JFRyAoOCBiaXRzKTogT2Zmc2V0IG9mIHRoZSByZWdpc3RlciB0aGF0IGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZVxuICAqICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzIGZvciBsb2FkL3N0b3JlIHdoZW4gYWNjZXNzaW5nIHRoZSBhcmVuYSByZWdpb24uXG4mIzQzOyAqIC0gQVJFTkFfV1JJVEUgKDEgYml0KTogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIHdyb3RlIHRvIHRoZSBhcmVuYSByZWdpb24uXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW5kZXBlbmRlbnQgb2YgRFNUX1JFRywgc2luY2UgYSByZWFkLW1vZGlmeS13cml0ZSBib3RoIHdyaXRlcyB0b1xuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSBhbmQgcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIGEgcmVnaXN0ZXIuXG4gICogLSBBUkVOQV9BQ0NFU1MgKDEgYml0KTogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIGFjY2Vzc2VkIHRoZSBhcmVuYSByZWdpb24uXG4gICpcbiAgKiBCaXQgbGF5b3V0IG9mIGBkYXRhYCAoMzItYml0KTpcbkBAIC0xNTAyLDYgJiM0MzsxNTA1LDcgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19sZF9zdF9pbmRleCh1OCAqKnBwcm9nLCB1MzIgYXRvbWljX29wLCB1MzIgc2l6ZSxcbiAjZGVmaW5lIEZJWFVQX0lOU05fTEVOX01BU0tcdEdFTk1BU0soNywgMClcbiAjZGVmaW5lIEZJWFVQX1JFR19NQVNLXHRcdEdFTk1BU0soMTUsIDgpXG4gI2RlZmluZSBGSVhVUF9BUkVOQV9SRUdfTUFTS1x0R0VOTUFTSygyMywgMTYpXG4mIzQzOyNkZWZpbmUgRklYVVBfQVJFTkFfV1JJVEVcdEJJVCgzMClcbiAjZGVmaW5lIEZJWFVQX0FSRU5BX0FDQ0VTU1x0QklUKDMxKVxuICNkZWZpbmUgREFUQV9BUkVOQV9PRkZTRVRfTUFTS1x0R0VOTUFTSygzMSwgMTYpXG4gXG5AQCAtMTUxMCw3ICYjNDM7MTUxNCw3IEBAIGJvb2wgZXhfaGFuZGxlcl9icGYoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqeCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHR1MzIgcmVnID0gRklFTERfR0VUKEZJWFVQX1JFR19NQVNLLCB4LVx1MDAzZWZpeHVwKTtcbiBcdHUzMiBpbnNuX2xlbiA9IEZJRUxEX0dFVChGSVhVUF9JTlNOX0xFTl9NQVNLLCB4LVx1MDAzZWZpeHVwKTtcbiBcdGJvb2wgaXNfYXJlbmEgPSAhISh4LVx1MDAzZWZpeHVwIFx1MDAyNiBGSVhVUF9BUkVOQV9BQ0NFU1MpO1xuLVx0Ym9vbCBpc193cml0ZSA9IChyZWcgPT0gRE9OVF9DTEVBUik7XG4mIzQzO1x0Ym9vbCBpc193cml0ZSA9ICEhKHgtXHUwMDNlZml4dXAgXHUwMDI2IEZJWFVQX0FSRU5BX1dSSVRFKTtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbiBcdHMxNiBvZmY7XG4gXHR1MzIgYXJlbmFfcmVnO1xuQEAgLTIzNDgsNiAmIzQzOzIzNTIsNyBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdFx0c3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXg7XG4gXHRcdFx0XHR1OCAqX2luc24gPSBpbWFnZSAmIzQzOyBwcm9nbGVuICYjNDM7IChzdGFydF9vZl9sZHggLSB0ZW1wKTtcbiBcdFx0XHRcdHUzMiBhcmVuYV9yZWcsIGZpeHVwX3JlZztcbiYjNDM7XHRcdFx0XHRib29sIGlzX3dyaXRlO1xuIFx0XHRcdFx0czY0IGRlbHRhO1xuIFxuIFx0XHRcdFx0aWYgKCFicGZfcHJvZy1cdTAwM2VhdXgtXHUwMDNlZXh0YWJsZSlcbkBAIC0yMzg0LDE1ICYjNDM7MjM4OSwyOSBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdFx0ICAgIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikpIHtcbiBcdFx0XHRcdFx0YXJlbmFfcmVnID0gcmVnMnB0X3JlZ3Nbc3JjX3JlZ107XG4gXHRcdFx0XHRcdGZpeHVwX3JlZyA9IHJlZzJwdF9yZWdzW2RzdF9yZWddO1xuJiM0MztcdFx0XHRcdFx0aXNfd3JpdGUgPSBmYWxzZTtcbiBcdFx0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0XHQvKlxuJiM0MztcdFx0XHRcdFx0ICogQSBzdG9yZSBoYXMgbm8gZGVzdGluYXRpb24gcmVnaXN0ZXIgdG8gY2xlYXIsXG4mIzQzO1x0XHRcdFx0XHQgKiBleGNlcHQgZm9yIGEgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCBCUEZfRkVUQ0gsXG4mIzQzO1x0XHRcdFx0XHQgKiB3aGljaCBhbHNvIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBzcmNfcmVnLCBvclxuJiM0MztcdFx0XHRcdFx0ICogaW50byByMCBmb3IgYSBCUEZfQ01QWENIRy4gRWl0aGVyIHdheSB0aGUgYWNjZXNzXG4mIzQzO1x0XHRcdFx0XHQgKiBpcyBzdGlsbCByZXBvcnRlZCBhcyBhIHdyaXRlLlxuJiM0MztcdFx0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0XHRpbnQgbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xuJiM0MztcbiBcdFx0XHRcdFx0YXJlbmFfcmVnID0gcmVnMnB0X3JlZ3NbZHN0X3JlZ107XG4tXHRcdFx0XHRcdGZpeHVwX3JlZyA9IERPTlRfQ0xFQVI7XG4mIzQzO1x0XHRcdFx0XHRmaXh1cF9yZWcgPSBsb2FkX3JlZyBcdTAwM2MgMCA/IERPTlRfQ0xFQVIgOlxuJiM0MztcdFx0XHRcdFx0XHQgICAgcmVnMnB0X3JlZ3NbbG9hZF9yZWddO1xuJiM0MztcdFx0XHRcdFx0aXNfd3JpdGUgPSB0cnVlO1xuIFx0XHRcdFx0fVxuIFxuIFx0XHRcdFx0ZXgtXHUwMDNlZml4dXAgPSBGSUVMRF9QUkVQKEZJWFVQX0lOU05fTEVOX01BU0ssIHByb2cgLSBzdGFydF9vZl9sZHgpIHxcbiBcdFx0XHRcdFx0ICAgIEZJRUxEX1BSRVAoRklYVVBfQVJFTkFfUkVHX01BU0ssIGFyZW5hX3JlZykgfFxuIFx0XHRcdFx0XHQgICAgRklFTERfUFJFUChGSVhVUF9SRUdfTUFTSywgZml4dXBfcmVnKTtcbiBcdFx0XHRcdGV4LVx1MDAzZWZpeHVwIHw9IEZJWFVQX0FSRU5BX0FDQ0VTUztcbiYjNDM7XHRcdFx0XHRpZiAoaXNfd3JpdGUpXG4mIzQzO1x0XHRcdFx0XHRleC1cdTAwM2VmaXh1cCB8PSBGSVhVUF9BUkVOQV9XUklURTtcbiBcbiBcdFx0XHRcdGV4LVx1MDAzZWRhdGEgfD0gRklFTERfUFJFUChEQVRBX0FSRU5BX09GRlNFVF9NQVNLLCBpbnNuLVx1MDAzZW9mZik7XG4gXHRcdFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5pbmRleCA0ZWRiYTgxODJkYjFiLi4xNWQ4MzY4NGM2ZTk0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuQEAgLTQxNCw2ICYjNDM7NDE0LDMwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfYXRvbWljX2lzX2xvYWRfYWNxKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdCAgICAgICBpbnNuLVx1MDAzZWltbSA9PSBCUEZfTE9BRF9BQ1E7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBHaXZlbiBhbiBpbnN0cnVjdGlvbiBAaW5zbiwgcmV0dXJuIHRoZSBudW1iZXIgb2YgdGhlIEJQRiByZWdpc3RlciB0aGF0IGFcbiYjNDM7ICogQlBGX0FUT01JQyByZWFkcyB0aGUgdmFsdWUgYXQgaXRzIG1lbW9yeSBvcGVyYW5kIGludG8sIG9yIC0xIGlmIHRoZXJlIGlzXG4mIzQzOyAqIG5vIHN1Y2ggcmVnaXN0ZXIuIFRoYXQgaXMgdGhlIHJlZ2lzdGVyIGEgQlBGX1BST0JFX0FUT01JQyBoYXMgdG8gY2xlYXIgd2hlblxuJiM0MzsgKiB0aGUgYWNjZXNzIGZhdWx0cy4gTGlrZSBicGZfYXRvbWljX2lzX2xvYWRfYWNxKCksIEBpbnNuIGlzIG5vdCBhc3N1bWVkIHRvXG4mIzQzOyAqIGJlIGEgQlBGX0FUT01JQyBoZXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBpbnQgYnBmX2F0b21pY19sb2FkX3JlZyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4mIzQzO3tcbiYjNDM7XHRpZiAoQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1NUWCB8fFxuJiM0MztcdCAgICAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfQVRPTUlDIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfQVRPTUlDKSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChpbnNuLVx1MDAzZWltbSkge1xuJiM0MztcdGNhc2UgQlBGX0xPQURfQUNROlxuJiM0MztcdFx0cmV0dXJuIGluc24tXHUwMDNlZHN0X3JlZztcbiYjNDM7XHRjYXNlIEJQRl9DTVBYQ0hHOlxuJiM0MztcdFx0cmV0dXJuIEJQRl9SRUdfMDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIChpbnNuLVx1MDAzZWltbSBcdTAwMjYgQlBGX0ZFVENIKSA/IGluc24tXHUwMDNlc3JjX3JlZyA6IC0xO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKiBNZW1vcnkgc3RvcmUsICoodWludCAqKSAoZHN0X3JlZyAmIzQzOyBvZmYxNikgPSBpbW0zMiAqL1xuIFxuICNkZWZpbmUgQlBGX1NUX01FTShTSVpFLCBEU1QsIE9GRiwgSU1NKVx0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2ZpeHVwcy5jIGIva2VybmVsL2JwZi9maXh1cHMuY1xuaW5kZXggNjYxZTJkMTNhNjA0Mi4uYzRiZDcwYmVmYmI1YyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZml4dXBzLmNcbkBAIC00OSwxNiAmIzQzOzQ5LDcgQEAgc3RhdGljIGludCBpbnNuX2RlZl9yZWdubyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHRjYXNlIEJQRl9TVDpcbiBcdFx0cmV0dXJuIC0xO1xuIFx0Y2FzZSBCUEZfU1RYOlxuLVx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDIHx8XG4tXHRcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9BVE9NSUMpIHtcbi1cdFx0XHRpZiAoaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0NNUFhDSEcpXG4tXHRcdFx0XHRyZXR1cm4gQlBGX1JFR18wO1xuLVx0XHRcdGVsc2UgaWYgKGluc24tXHUwMDNlaW1tID09IEJQRl9MT0FEX0FDUSlcbi1cdFx0XHRcdHJldHVybiBpbnNuLVx1MDAzZWRzdF9yZWc7XG4tXHRcdFx0ZWxzZSBpZiAoaW5zbi1cdTAwM2VpbW0gXHUwMDI2IEJQRl9GRVRDSClcbi1cdFx0XHRcdHJldHVybiBpbnNuLVx1MDAzZXNyY19yZWc7XG4tXHRcdH1cbi1cdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0cmV0dXJuIGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gaW5zbi1cdTAwM2Vkc3RfcmVnO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggYWRkM2FmZmM1NzAzNS4uNzNhMmU4YmIxNzgyYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNjQ4NSwyMSAmIzQzOzY0ODUsMTYgQEAgc3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0fVxuIFxuLVx0aWYgKGluc24tXHUwMDNlaW1tIFx1MDAyNiBCUEZfRkVUQ0gpIHtcbi1cdFx0aWYgKGluc24tXHUwMDNlaW1tID09IEJQRl9DTVBYQ0hHKVxuLVx0XHRcdGxvYWRfcmVnID0gQlBGX1JFR18wO1xuLVx0XHRlbHNlXG4tXHRcdFx0bG9hZF9yZWcgPSBpbnNuLVx1MDAzZXNyY19yZWc7XG4tXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIG5lZ2F0aXZlIGxvYWRfcmVnIG1lYW5zIHRoYXQgdGhpcyBpbnN0cnVjdGlvbiBhY2Nlc3NlcyBhIG1lbW9yeVxuJiM0MztcdCAqIGxvY2F0aW9uIGJ1dCBkb2VzbiYjMzk7dCBhY3R1YWxseSBsb2FkIGl0IGludG8gYSByZWdpc3Rlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG4mIzQzO1x0aWYgKGxvYWRfcmVnIFx1MDAzZT0gMCkge1xuIFx0XHQvKiBjaGVjayBhbmQgcmVjb3JkIGxvYWQgb2Ygb2xkIHZhbHVlICovXG4gXHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBsb2FkX3JlZywgRFNUX09QKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuLVx0fSBlbHNlIHtcbi1cdFx0LyogVGhpcyBpbnN0cnVjdGlvbiBhY2Nlc3NlcyBhIG1lbW9yeSBsb2NhdGlvbiBidXQgZG9lc24mIzM5O3Rcbi1cdFx0ICogYWN0dWFsbHkgbG9hZCBpdCBpbnRvIGEgcmVnaXN0ZXIuXG4tXHRcdCAqL1xuLVx0XHRsb2FkX3JlZyA9IC0xO1xuIFx0fVxuIFxuIFx0ZHN0X3JlZyA9IGN1cl9yZWdzKGVudikgJiM0MzsgaW5zbi1cdTAwM2Vkc3RfcmVnO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbmluZGV4IDE1ZGQzYWUyYTg0YjcuLmU0ZTkzNzQzMDllMjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbkBAIC0xMDUsNiAmIzQzOzEwNSwxMCBAQCB2b2lkIHRlc3Rfc3RyZWFtX2FyZW5hX2ZhdWx0X2FkZHJlc3Modm9pZClcbiBcdFx0dGVzdF9hZGRyZXNzKHNrZWwtXHUwMDNlcHJvZ3Muc3RyZWFtX2FyZW5hX3dyaXRlX2ZhdWx0LCBcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2VmYXVsdF9hZGRyKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2xvYWRfYWNxdWlyZV9mYXVsdFwmIzM0OykpXG4gXHRcdHRlc3RfYWRkcmVzcyhza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV9sb2FkX2FjcXVpcmVfZmF1bHQsIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWZhdWx0X2FkZHIpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3hjaGdfZmF1bHRcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9hZGRyZXNzKHNrZWwtXHUwMDNlcHJvZ3Muc3RyZWFtX2FyZW5hX3hjaGdfZmF1bHQsIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWZhdWx0X2FkZHIpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2NtcHhjaGdfZmF1bHRcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9hZGRyZXNzKHNrZWwtXHUwMDNlcHJvZ3Muc3RyZWFtX2FyZW5hX2NtcHhjaGdfZmF1bHQsIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWZhdWx0X2FkZHIpO1xuIFxuIFx0c3RyZWFtX19kZXN0cm95KHNrZWwpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbmluZGV4IGNmNTUzM2UxMWYzOWMuLjAwYTM3OTMzZTQxMWQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xuQEAgLTIyOSw2ICYjNDM7MjI5LDEwNyBAQCBpbnQgc3RyZWFtX2FyZW5hX2xvYWRfYWNxdWlyZV9mYXVsdCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gdmFsO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjRcbiYjNDM7X19hcmNoX2FybTY0XG4mIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKVxuJiM0MztfX3N0ZGVycihcJiMzNDtFUlJPUjogQXJlbmEgV1JJVEUgYWNjZXNzIGF0IHVubWFwcGVkIGFkZHJlc3MgMHh7ey4qfX1cJiMzNDspXG4mIzQzO19fc3RkZXJyKFwmIzM0O0NQVToge3tbMC05XSYjNDM7fX0gVUlEOiAwIFBJRDoge3tbMC05XSYjNDM7fX0gQ29tbToge3suKn19XCYjMzQ7KVxuJiM0MztfX3N0ZGVycihcJiMzNDtDYWxsIHRyYWNlOlxcblwmIzM0O1xuJiM0MztcJiMzNDt7eyhbYS16QS1aX11bYS16QS1aMC05X10qXFxcXCYjNDM7MHhbMC05YS1mQS1GXSYjNDM7LzB4WzAtOWEtZkEtRl0mIzQzO1xcblwmIzM0O1xuJiM0MztcJiMzNDt8WyBcXHRdJiM0MztbXlxcbl0mIzQzO1xcbikqfX1cJiMzNDspXG4mIzQzO2ludCBzdHJlYW1fYXJlbmFfeGNoZ19mYXVsdCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pbnNuIHhjaGdfaW5zbiA9IHtcbiYjNDM7XHRcdC5jb2RlXHQgPSAweGMzLFx0LyogQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVyAqL1xuJiM0MztcdFx0LmRzdF9yZWcgPSAxLFx0XHQvKiBCUEZfUkVHXzEgKi9cbiYjNDM7XHRcdC5zcmNfcmVnID0gMixcdFx0LyogQlBGX1JFR18yICovXG4mIzQzO1x0XHQub2ZmXHQgPSAweDdmZmYsXG4mIzQzO1x0XHQuaW1tXHQgPSAweGUxLFx0LyogQlBGX1hDSEcgKi9cbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBicGZfYXJlbmEgKnB0ciA9ICh2b2lkICopXHUwMDI2YXJlbmE7XG4mIzQzO1x0dTY0IHVzZXJfdm1fc3RhcnQsIHZhbDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcmV2ZW50IEdDQyBib3VuZHMgd2FybmluZzogY2FzdGluZyBcdTAwMjZhcmVuYSB0byBzdHJ1Y3QgYnBmX2FyZW5hICpcbiYjNDM7XHQgKiB0cmlnZ2VycyBib3VuZHMgY2hlY2tpbmcgc2luY2UgdGhlIG1hcCBkZWZpbml0aW9uIGlzIHNtYWxsZXIgdGhhblxuJiM0MztcdCAqIHN0cnVjdCBicGZfYXJlbmEuIGJhcnJpZXJfdmFyKCkgbWFrZXMgdGhlIHBvaW50ZXIgb3BhcXVlIHRvIEdDQyxcbiYjNDM7XHQgKiBwcmV2ZW50aW5nIHRoZSBib3VuZHMgYW5hbHlzaXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0YmFycmllcl92YXIocHRyKTtcbiYjNDM7XHR1c2VyX3ZtX3N0YXJ0ID0gcHRyLVx1MDAzZXVzZXJfdm1fc3RhcnQ7XG4mIzQzO1x0ZmF1bHRfYWRkciA9IHVzZXJfdm1fc3RhcnQgJiM0MzsgMHg3ZmZmO1xuJiM0MztcdGJwZl9hZGRyX3NwYWNlX2Nhc3QodXNlcl92bV9zdGFydCwgMCwgMSk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIHJlYWQtbW9kaWZ5LXdyaXRlIGNhcnJ5aW5nIEJQRl9GRVRDSCB3cml0ZXMgdG8gbWVtb3J5LCBzbyB0aGUgZmF1bHRcbiYjNDM7XHQgKiBoYXMgdG8gYmUgcmVwb3J0ZWQgYXMgYSBXUklURSBmcm9tIHRoZSBkc3RfcmVnIGFkZHJlc3MsIGJ1dCBpdCBhbHNvXG4mIzQzO1x0ICogcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIHNyY19yZWcsIHNvIHRoZSBleGNlcHRpb24gaGFuZGxlciBoYXMgdG9cbiYjNDM7XHQgKiBjbGVhciBzcmNfcmVnLiBQb2lzb24gaXQgdXAgZnJvbnQsIHRoZSByZXR1cm5lZCB2YWx1ZSBtdXN0IGJlIDAuXG4mIzQzO1x0ICovXG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcbiYjNDM7XHRcdFwmIzM0O3IxID0gJVt1c2VyX3ZtX3N0YXJ0XTtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IyID0gMTtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0Oy44Ynl0ZSAlW3hjaGdfaW5zbl07XCYjMzQ7IC8qIHIyID0geGNoZygodTMyICopKHIxICYjNDM7IDB4N2ZmZiksIHIyKSAqL1xuJiM0MztcdFx0XCYjMzQ7JVt2YWxdID0gcjI7XCYjMzQ7XG4mIzQzO1x0XHQ6IFt2YWxdIFwmIzM0Oz1yXCYjMzQ7ICh2YWwpXG4mIzQzO1x0XHQ6IFt1c2VyX3ZtX3N0YXJ0XSBcJiMzNDtyXCYjMzQ7ICh1c2VyX3ZtX3N0YXJ0KSxcbiYjNDM7XHRcdCAgX19pbW1faW5zbih4Y2hnX2luc24sIHhjaGdfaW5zbilcbiYjNDM7XHRcdDogXCYjMzQ7cjFcJiMzNDssIFwmIzM0O3IyXCYjMzQ7XG4mIzQzO1x0KTtcbiYjNDM7XHRyZXR1cm4gdmFsO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX2FyY2hfYXJtNjRcbiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApXG4mIzQzO19fc3RkZXJyKFwmIzM0O0VSUk9SOiBBcmVuYSBXUklURSBhY2Nlc3MgYXQgdW5tYXBwZWQgYWRkcmVzcyAweHt7Lip9fVwmIzM0OylcbiYjNDM7X19zdGRlcnIoXCYjMzQ7Q1BVOiB7e1swLTldJiM0Mzt9fSBVSUQ6IDAgUElEOiB7e1swLTldJiM0Mzt9fSBDb21tOiB7ey4qfX1cJiMzNDspXG4mIzQzO19fc3RkZXJyKFwmIzM0O0NhbGwgdHJhY2U6XFxuXCYjMzQ7XG4mIzQzO1wmIzM0O3t7KFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcJiM0MzsweFswLTlhLWZBLUZdJiM0MzsvMHhbMC05YS1mQS1GXSYjNDM7XFxuXCYjMzQ7XG4mIzQzO1wmIzM0O3xbIFxcdF0mIzQzO1teXFxuXSYjNDM7XFxuKSp9fVwmIzM0OylcbiYjNDM7aW50IHN0cmVhbV9hcmVuYV9jbXB4Y2hnX2ZhdWx0KHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24gY21weGNoZ19pbnNuID0ge1xuJiM0MztcdFx0LmNvZGVcdCA9IDB4YzMsXHQvKiBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9XICovXG4mIzQzO1x0XHQuZHN0X3JlZyA9IDEsXHRcdC8qIEJQRl9SRUdfMSAqL1xuJiM0MztcdFx0LnNyY19yZWcgPSAyLFx0XHQvKiBCUEZfUkVHXzIgKi9cbiYjNDM7XHRcdC5vZmZcdCA9IDB4N2ZmZixcbiYjNDM7XHRcdC5pbW1cdCA9IDB4ZjEsXHQvKiBCUEZfQ01QWENIRyAqL1xuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGJwZl9hcmVuYSAqcHRyID0gKHZvaWQgKilcdTAwMjZhcmVuYTtcbiYjNDM7XHR1NjQgdXNlcl92bV9zdGFydCwgdmFsO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFByZXZlbnQgR0NDIGJvdW5kcyB3YXJuaW5nOiBjYXN0aW5nIFx1MDAyNmFyZW5hIHRvIHN0cnVjdCBicGZfYXJlbmEgKlxuJiM0MztcdCAqIHRyaWdnZXJzIGJvdW5kcyBjaGVja2luZyBzaW5jZSB0aGUgbWFwIGRlZmluaXRpb24gaXMgc21hbGxlciB0aGFuXG4mIzQzO1x0ICogc3RydWN0IGJwZl9hcmVuYS4gYmFycmllcl92YXIoKSBtYWtlcyB0aGUgcG9pbnRlciBvcGFxdWUgdG8gR0NDLFxuJiM0MztcdCAqIHByZXZlbnRpbmcgdGhlIGJvdW5kcyBhbmFseXNpcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRiYXJyaWVyX3ZhcihwdHIpO1xuJiM0MztcdHVzZXJfdm1fc3RhcnQgPSBwdHItXHUwMDNldXNlcl92bV9zdGFydDtcbiYjNDM7XHRmYXVsdF9hZGRyID0gdXNlcl92bV9zdGFydCAmIzQzOyAweDdmZmY7XG4mIzQzO1x0YnBmX2FkZHJfc3BhY2VfY2FzdCh1c2VyX3ZtX3N0YXJ0LCAwLCAxKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNhbWUgYXMgdGhlIGV4Y2hhbmdlIGFib3ZlLCBleGNlcHQgdGhhdCBhIEJQRl9DTVBYQ0hHIHJlYWRzIHRoZSBvbGRcbiYjNDM7XHQgKiB2YWx1ZSBpbnRvIHIwIHJhdGhlciB0aGFuIGludG8gc3JjX3JlZywgc28gcjAgaXMgdGhlIHJlZ2lzdGVyIHRoZVxuJiM0MztcdCAqIGV4Y2VwdGlvbiBoYW5kbGVyIGhhcyB0byBjbGVhci4gSXQgZG91YmxlcyBhcyB0aGUgY29tcGFyZSB2YWx1ZSwgYnV0XG4mIzQzO1x0ICogdGhlIGNvbXBhcmlzb24gbmV2ZXIgaGFwcGVucyBzaW5jZSB0aGUgYWNjZXNzIGZhdWx0cyBmaXJzdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRhc20gdm9sYXRpbGUgKFxuJiM0MztcdFx0XCYjMzQ7cjEgPSAlW3VzZXJfdm1fc3RhcnRdO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjAgPSAxO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjIgPSAyO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7LjhieXRlICVbY21weGNoZ19pbnNuXTtcJiMzNDsgLyogcjAgPSBjbXB4Y2hnKCh1MzIgKikocjEgJiM0MzsgMHg3ZmZmKSwgcjAsIHIyKSAqL1xuJiM0MztcdFx0XCYjMzQ7JVt2YWxdID0gcjA7XCYjMzQ7XG4mIzQzO1x0XHQ6IFt2YWxdIFwmIzM0Oz1yXCYjMzQ7ICh2YWwpXG4mIzQzO1x0XHQ6IFt1c2VyX3ZtX3N0YXJ0XSBcJiMzNDtyXCYjMzQ7ICh1c2VyX3ZtX3N0YXJ0KSxcbiYjNDM7XHRcdCAgX19pbW1faW5zbihjbXB4Y2hnX2luc24sIGNtcHhjaGdfaW5zbilcbiYjNDM7XHRcdDogXCYjMzQ7cjBcJiMzNDssIFwmIzM0O3IxXCYjMzQ7LCBcJiMzNDtyMlwmIzM0O1xuJiM0MztcdCk7XG4mIzQzO1x0cmV0dXJuIHZhbDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgX19ub2lubGluZSB2b2lkIHN1YnByb2codm9pZClcbiB7XG4gXHRpbnQgX19hcmVuYSAqYWRkciA9IChpbnQgX19hcmVuYSAqKTB4ZGVhZGJlZWY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW5zbl9kZWYzMiYjMzQ7LAogICAgJiMzNDtleF9oYW5kbGVyX2JwZiYjMzQ7LAogICAgJiMzNDticGZfaml0X2VtaXRfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlcnMgKHg4NiwgYXJtNjQsIHJpc2N2LCBzMzkwKSBhbmQgdGhlIEJQRiB2ZXJpZmllciB0byBjb3JyZWN0bHkgaGFuZGxlIGV4Y2VwdGlvbnMgZm9yIGF0b21pYyBvcGVyYXRpb25zIGluIHRoZSBCUEYgYXJlbmEuIEl0IGludHJvZHVjZXMgYGJwZl9hdG9taWNfbG9hZF9yZWdgIHRvIGlkZW50aWZ5IHRoZSByZWdpc3RlciB0aGF0IG5lZWRzIHRvIGJlIGNsZWFyZWQgd2hlbiBhbiBhdG9taWMgaW5zdHJ1Y3Rpb24gZmF1bHRzLCBhbmQgZW5zdXJlcyB0aGF0IHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbnMgYXJlIGNvcnJlY3RseSByZXBvcnRlZCBhcyB3cml0ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc3Vic3lzdGVtKSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY0YWE3NTIxZjg1ODAzZmQzYTFiYWUxNDUxOWRhMGFiZGMxZGYwMWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAwMDozNDoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMKaW5kZXggZDE0ZDI5N2ViYjk2Ny4uNzRiNDA4Mzc5MWRhMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTEwODIsMjMgJiM0MzsxMDgyLDI3IEBAIHN0YXRpYyB2b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgd2FzX2NsYXNzaWMpCiAgKgogICogQml0IGxheW91dCBvZiBgZml4dXBgICgzMi1iaXQpOgogICoKLSAqICYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOwotICogfCAgIDMxLTI3ICAgfCAyNi0yMiAgfCAgICAgMjEgICAgfCAgIDIwLTE2ICAgfCAgIDE1LTAgICB8Ci0gKiB8ICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwKLSAqIHwgRklYVVBfUkVHIHwgVW51c2VkIHwgQVJFTkFfQUNDIHwgQVJFTkFfUkVHIHwgIE9GRlNFVCAgfAotICogJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7CiYjNDM7ICogfCAgIDMxLTI3ICAgfCAyNi0yMyAgfCAgICAgIDIyICAgICB8ICAgICAyMSAgICB8ICAgMjAtMTYgICB8ICAgMTUtMCAgIHwKJiM0MzsgKiB8ICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfAomIzQzOyAqIHwgRklYVVBfUkVHIHwgVW51c2VkIHwgQVJFTkFfV1JJVEUgfCBBUkVOQV9BQ0MgfCBBUkVOQV9SRUcgfCAgT0ZGU0VUICB8CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7CiAgKgogICogLSBPRkZTRVQgKDE2IGJpdHMpOiBPZmZzZXQgdXNlZCB0byBjb21wdXRlIGFkZHJlc3MgZm9yIExvYWQvU3RvcmUgaW5zdHJ1Y3Rpb24uCiAgKiAtIEFSRU5BX1JFRyAoNSBiaXRzKTogUmVnaXN0ZXIgdGhhdCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgYWRkcmVzcyBmb3IgbG9hZC9zdG9yZSB3aGVuCiAgKiAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzaW5nIHRoZSBhcmVuYSByZWdpb24uCiAgKiAtIEFSRU5BX0FDQ0VTUyAoMSBiaXQpOiBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24gYWNjZXNzZWQgdGhlIGFyZW5hIHJlZ2lvbi4KJiM0MzsgKiAtIEFSRU5BX1dSSVRFICgxIGJpdCk6IFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiB3cm90ZSB0byB0aGUgYXJlbmEgcmVnaW9uLgomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW5kZXBlbmRlbnQgb2YgRklYVVBfUkVHLCBzaW5jZSBhIHJlYWQtbW9kaWZ5LXdyaXRlIGJvdGggd3JpdGVzIHRvCiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgYW5kIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBhIHJlZ2lzdGVyLgogICogLSBGSVhVUF9SRUcgKDUgYml0cyk6IERlc3RpbmF0aW9uIHJlZ2lzdGVyIGZvciB0aGUgbG9hZCBpbnN0cnVjdGlvbiAoY2xlYXJlZCBvbiBmYXVsdCkgb3Igc2V0IHRvCi0gKiAgICAgICAgICAgICAgICAgICAgICAgRE9OVF9DTEVBUiBpZiBpdCBpcyBhIHN0b3JlIGluc3RydWN0aW9uLgomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICBET05UX0NMRUFSIGlmIHRoZSBpbnN0cnVjdGlvbiBkb2VzIG5vdCByZWFkIGludG8gYSByZWdpc3Rlci4KICAqLwogCiAjZGVmaW5lIEJQRl9GSVhVUF9PRkZTRVRfTUFTSyAgICAgIEdFTk1BU0soMTUsIDApCiAjZGVmaW5lIEJQRl9GSVhVUF9BUkVOQV9SRUdfTUFTSyAgIEdFTk1BU0soMjAsIDE2KQogI2RlZmluZSBCUEZfQVJFTkFfQUNDRVNTICAgICAgICAgICBCSVQoMjEpCiYjNDM7I2RlZmluZSBCUEZfQVJFTkFfV1JJVEUgICAgICAgICAgICBCSVQoMjIpCiAjZGVmaW5lIEJQRl9GSVhVUF9SRUdfTUFTSwlHRU5NQVNLKDMxLCAyNykKICNkZWZpbmUgRE9OVF9DTEVBUiA1IC8qIFVudXNlZCBBUk02NCByZWdpc3RlciBmcm9tIEJQRiYjMzk7cyBQT1YgKi8KIApAQCAtMTEwOSw3ICYjNDM7MTExMyw3IEBAIGJvb2wgZXhfaGFuZGxlcl9icGYoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsCiAJczE2IG9mZiA9IEZJRUxEX0dFVChCUEZfRklYVVBfT0ZGU0VUX01BU0ssIGV4LSZndDtmaXh1cCk7CiAJaW50IGFyZW5hX3JlZyA9IEZJRUxEX0dFVChCUEZfRklYVVBfQVJFTkFfUkVHX01BU0ssIGV4LSZndDtmaXh1cCk7CiAJYm9vbCBpc19hcmVuYSA9ICEhKGV4LSZndDtmaXh1cCAmYW1wOyBCUEZfQVJFTkFfQUNDRVNTKTsKLQlib29sIGlzX3dyaXRlID0gKGRzdF9yZWcgPT0gRE9OVF9DTEVBUik7CiYjNDM7CWJvb2wgaXNfd3JpdGUgPSAhIShleC0mZ3Q7Zml4dXAgJmFtcDsgQlBGX0FSRU5BX1dSSVRFKTsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAKIAlpZiAoaXNfYXJlbmEpIHsKQEAgLTExMzIsNyAmIzQzOzExMzYsNyBAQCBzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiB7CiAJb2ZmX3QgaW5zX29mZnNldDsKIAlzMTYgb2ZmID0gaW5zbi0mZ3Q7b2ZmOwotCWJvb2wgaXNfYXJlbmE7CiYjNDM7CWJvb2wgaXNfYXJlbmEsIGlzX3dyaXRlOwogCWludCBhcmVuYV9yZWc7CiAJdW5zaWduZWQgbG9uZyBwYzsKIAlzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleDsKQEAgLTExODEsMTUgJiM0MzsxMTg1LDE4IEBAIHN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwKIAkvKgogCSAqIEEgbG9hZC1hY3F1aXJlIGlzIG9mIEJQRl9TVFggY2xhc3MsIGJ1dCByZWFkcyBmcm9tIHNyY19yZWcgaW50bwogCSAqIGRzdF9yZWcgbGlrZSBhIEJQRl9MRFggZG9lcywgaGVuY2UgaXQgbXVzdCBub3QgYmUgdHJlYXRlZCBhcyBhIHN0b3JlCi0JICogaGVyZS4KJiM0MzsJICogaGVyZS4gQSByZWFkLW1vZGlmeS13cml0ZSBjYXJyeWluZyBCUEZfRkVUQ0ggaXMgcmVwb3J0ZWQgYXMgYSB3cml0ZQomIzQzOwkgKiBldmVuIHRob3VnaCBpdCBkb2VzIGhhdmUgYSByZWdpc3RlciB0byBjbGVhciwgc2VlIHRoZSBjYWxsZXJzLgogCSAqLwotCWlmIChCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX0xEWCAmYW1wOyZhbXA7ICFicGZfYXRvbWljX2lzX2xvYWRfYWNxKGluc24pKQotCQlkc3RfcmVnID0gRE9OVF9DTEVBUjsKJiM0MzsJaXNfd3JpdGUgPSBCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX0xEWCAmYW1wOyZhbXA7CiYjNDM7CQkgICAhYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKTsKIAogCWV4LSZndDtmaXh1cCA9IEZJRUxEX1BSRVAoQlBGX0ZJWFVQX1JFR19NQVNLLCBkc3RfcmVnKTsKIAogCWlmIChpc19hcmVuYSkgewogCQlleC0mZ3Q7Zml4dXAgfD0gQlBGX0FSRU5BX0FDQ0VTUzsKJiM0MzsJCWlmIChpc193cml0ZSkKJiM0MzsJCQlleC0mZ3Q7Zml4dXAgfD0gQlBGX0FSRU5BX1dSSVRFOwogCQkvKgogCQkgKiBpbnNuLSZndDtzcmNfcmVnL2RzdF9yZWcgaG9sZHMgdGhlIGFkZHJlc3MgaW4gdGhlIGFyZW5hIHJlZ2lvbiB3aXRoIHVwcGVyIDMyLWJpdHMKIAkJICogYmVpbmcgemVybyBiZWNhdXNlIG9mIGEgcHJlY2VkaW5nIGFkZHJfc3BhY2VfY2FzdChyJmx0O24mZ3Q7LCAweDAsIDB4MSkgaW5zdHJ1Y3Rpb24uCkBAIC0xODg5LDcgJiM0MzsxODk2LDcgQEAgc3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbgogCQkJYnJlYWs7CiAJCX0KIAotCQlyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgY3R4LCBkc3QpOwomIzQzOwkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgRE9OVF9DTEVBUik7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCQlicmVhazsKQEAgLTE5NTYsNyAmIzQzOzE5NjMsNyBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuCiAJCQlicmVhazsKIAkJfQogCi0JCXJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGRzdCk7CiYjNDM7CQlyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgY3R4LCBET05UX0NMRUFSKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJCWJyZWFrOwpAQCAtMTk3OSw3ICYjNDM7MTk4NiwxNiBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuCiAJCQlyZXR1cm4gcmV0OwogCiAJCWlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfQVRPTUlDKSB7Ci0JCQlyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgY3R4LCBkc3QpOwomIzQzOwkJCS8qCiYjNDM7CQkJICogQSBsb2FkLWFjcXVpcmUgcmVhZHMgaW50byBkc3RfcmVnLCBhbmQgYSByZWFkLW1vZGlmeS13cml0ZQomIzQzOwkJCSAqIGNhcnJ5aW5nIEJQRl9GRVRDSCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gc3JjX3JlZywgb3IgaW50bwomIzQzOwkJCSAqIHIwIGZvciBhIEJQRl9DTVBYQ0hHLiBDbGVhciB0aGF0IHJlZ2lzdGVyIG9uIGZhdWx0LCB0aGUKJiM0MzsJCQkgKiByZW1haW5pbmcgYXRvbWljcyBoYXZlIG5vIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLgomIzQzOwkJCSAqLwomIzQzOwkJCWludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7CiYjNDM7CiYjNDM7CQkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgbG9hZF9yZWcgJmx0OyAwID8KJiM0MzsJCQkJCQkgICAgRE9OVF9DTEVBUiA6IGJwZjJhNjRbbG9hZF9yZWddKTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMKaW5kZXggNmI5OTcyYjA3YzFiMC4uMjUwNGRmMWZhMTExOCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCkBAIC0xOTkyLDEwICYjNDM7MTk5MiwxOSBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwKIAkJCXJldCA9IGVtaXRfYXRvbWljX3JtdyhyZCwgcnMsIGluc24sIGN0eCk7CiAKIAkJLyogcmV0IGNhbiBiZSAxIChza2lwLXpleHQpOyBleHRhYmxlIGVudHJ5IHN0aWxsIG5lZWRzIHRvIGJlIGFkZGVkICovCi0JCWlmIChyZXQgJmd0Oz0gMCkKLQkJCXJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLAotCQkJCWJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikgPyByZCA6IFJFR19ET05UX0NMRUFSX01BUktFUiwKLQkJCQljdHgpID86IHJldDsKJiM0MzsJCWlmIChyZXQgJmd0Oz0gMCkgewomIzQzOwkJCS8qCiYjNDM7CQkJICogQSBsb2FkLWFjcXVpcmUgcmVhZHMgaW50byBkc3RfcmVnLCBhbmQgYSByZWFkLW1vZGlmeS13cml0ZQomIzQzOwkJCSAqIGNhcnJ5aW5nIEJQRl9GRVRDSCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gc3JjX3JlZywgb3IgaW50bwomIzQzOwkJCSAqIHIwIGZvciBhIEJQRl9DTVBYQ0hHLiBDbGVhciB0aGF0IHJlZ2lzdGVyIG9uIGZhdWx0LCB0aGUKJiM0MzsJCQkgKiByZW1haW5pbmcgYXRvbWljcyBoYXZlIG5vIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLgomIzQzOwkJCSAqLwomIzQzOwkJCWludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7CiYjNDM7CiYjNDM7CQkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGxvYWRfcmVnICZsdDsgMCA/CiYjNDM7CQkJCQlSRUdfRE9OVF9DTEVBUl9NQVJLRVIgOiByZWdtYXBbbG9hZF9yZWddLAomIzQzOwkJCQkJY3R4KSA/OiByZXQ7CiYjNDM7CQl9CiAKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYwppbmRleCBiNjA4Nzc0NzhiNDVkLi5jNDY4NzJiMDcxY2U3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTc3NCw2ICYjNDM7Nzc0LDggQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsCiAJCQkJICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCQkJICAgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpCiB7CiYjNDM7CWludCBsb2FkX3JlZzsKJiM0MzsKIAlpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX1BST0JFX0FUT01JQykKIAkJcmV0dXJuOwogCkBAIC03ODMsNiAmIzQzOzc4NSwxNCBAQCBzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX2F0b21pY19wcmUoc3RydWN0IGJwZl9qaXQgKmppdCwKIAlFTUlUNCgweGI5MDgwMDAwLCBSRUdfVzEsIGluc24tJmd0O2RzdF9yZWcpOwogCXByb2JlLSZndDthcmVuYV9yZWcgPSBSRUdfVzE7CiAJcHJvYmUtJmd0O3ByZyA9IGppdC0mZ3Q7cHJnOwomIzQzOwkvKgomIzQzOwkgKiBBIHJlYWQtbW9kaWZ5LXdyaXRlIGNhcnJ5aW5nIEJQRl9GRVRDSCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8KJiM0MzsJICogc3JjX3JlZywgb3IgaW50byByMCBmb3IgYSBCUEZfQ01QWENIRy4gQ2xlYXIgdGhhdCByZWdpc3RlciBvbgomIzQzOwkgKiBmYXVsdCwgdGhlIHJlbWFpbmluZyBhdG9taWNzIG9ubHkgd3JpdGUgbWVtb3J5LgomIzQzOwkgKi8KJiM0MzsJbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pOwomIzQzOwlpZiAobG9hZF9yZWcgJmd0Oz0gMCkKJiM0MzsJCXByb2JlLSZndDtyZWcgPSByZWcyaGV4W2xvYWRfcmVnXTsKIH0KIAogc3RhdGljIGludCBicGZfaml0X3Byb2JlX3Bvc3Qoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCwKQEAgLTE2ODQsNiAmIzQzOzE2OTQsNyBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLAogCQkJaWYgKGxvYWRfcHJvYmUucHJnICE9IC0xKSB7CiAJCQkJcHJvYmUucHJnID0gaml0LSZndDtwcmc7CiAJCQkJcHJvYmUuYXJlbmFfcmVnID0gbG9hZF9wcm9iZS5hcmVuYV9yZWc7CiYjNDM7CQkJCXByb2JlLnJlZyA9IGxvYWRfcHJvYmUucmVnOwogCQkJfQogCQkJbG9vcF9zdGFydCA9IGppdC0mZ3Q7cHJnOwogCQkJLyogMDoge2NzeXxjc2d9ICV3MCwlc3JjLG9mZiglYXJlbmEpICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKaW5kZXggOGRkZGI1ZDdhZjIxYi4uZDkyMDc3MmFmN2Q1ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwpAQCAtMTQ3MywxNyAmIzQzOzE0NzMsMjAgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19sZF9zdF9pbmRleCh1OCAqKnBwcm9nLCB1MzIgYXRvbWljX29wLCB1MzIgc2l6ZSwKICAqCiAgKiBCaXQgbGF5b3V0IG9mIGBmaXh1cGAgKDMyLWJpdCk6CiAgKgotICogJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOwotICogfCAzMSAgICAgICAgfCAzMC0yNCAgfCAgIDIzLTE2ICAgfCAgIDE1LTggIHwgICAgNy0wICAgfAotICogfCAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgfAotICogfCBBUkVOQV9BQ0MgfCBVbnVzZWQgfCBBUkVOQV9SRUcgfCBEU1RfUkVHIHwgSU5TTl9MRU4gfAotICogJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOwomIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzsKJiM0MzsgKiB8IDMxICAgICAgICB8IDMwICAgICAgICAgIHwgMjktMjQgIHwgICAyMy0xNiAgIHwgICAxNS04ICB8ICAgIDctMCAgIHwKJiM0MzsgKiB8ICAgICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgIHwKJiM0MzsgKiB8IEFSRU5BX0FDQyB8IEFSRU5BX1dSSVRFIHwgVW51c2VkIHwgQVJFTkFfUkVHIHwgRFNUX1JFRyB8IElOU05fTEVOIHwKJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7CiAgKgogICogLSBJTlNOX0xFTiAoOCBiaXRzKTogTGVuZ3RoIG9mIGZhdWx0aW5nIGluc24gKG1heCB4ODYgaW5zbiA9IDE1IGJ5dGVzIChmaXRzIGluIDggYml0cykpLgogICogLSBEU1RfUkVHICAoOCBiaXRzKTogT2Zmc2V0IG9mIGRzdF9yZWcgZnJvbSByZWcycHRfcmVnc1tdIChtYXggb2Zmc2V0ID0gMTEyIChmaXRzIGluIDggYml0cykpLgotICogICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBzZXQgdG8gRE9OVF9DTEVBUiBpZiB0aGUgaW5zbiBpcyBhIHN0b3JlLgomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgc2V0IHRvIERPTlRfQ0xFQVIgaWYgdGhlIGluc24gZG9lcyBub3QgcmVhZCBpbnRvIGEgcmVnaXN0ZXIuCiAgKiAtIEFSRU5BX1JFRyAoOCBiaXRzKTogT2Zmc2V0IG9mIHRoZSByZWdpc3RlciB0aGF0IGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZQogICogICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgZm9yIGxvYWQvc3RvcmUgd2hlbiBhY2Nlc3NpbmcgdGhlIGFyZW5hIHJlZ2lvbi4KJiM0MzsgKiAtIEFSRU5BX1dSSVRFICgxIGJpdCk6IFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiB3cm90ZSB0byB0aGUgYXJlbmEgcmVnaW9uLgomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW5kZXBlbmRlbnQgb2YgRFNUX1JFRywgc2luY2UgYSByZWFkLW1vZGlmeS13cml0ZSBib3RoIHdyaXRlcyB0bwomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5IGFuZCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gYSByZWdpc3Rlci4KICAqIC0gQVJFTkFfQUNDRVNTICgxIGJpdCk6IFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiBhY2Nlc3NlZCB0aGUgYXJlbmEgcmVnaW9uLgogICoKICAqIEJpdCBsYXlvdXQgb2YgYGRhdGFgICgzMi1iaXQpOgpAQCAtMTUwMiw2ICYjNDM7MTUwNSw3IEBAIHN0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3RfaW5kZXgodTggKipwcHJvZywgdTMyIGF0b21pY19vcCwgdTMyIHNpemUsCiAjZGVmaW5lIEZJWFVQX0lOU05fTEVOX01BU0sJR0VOTUFTSyg3LCAwKQogI2RlZmluZSBGSVhVUF9SRUdfTUFTSwkJR0VOTUFTSygxNSwgOCkKICNkZWZpbmUgRklYVVBfQVJFTkFfUkVHX01BU0sJR0VOTUFTSygyMywgMTYpCiYjNDM7I2RlZmluZSBGSVhVUF9BUkVOQV9XUklURQlCSVQoMzApCiAjZGVmaW5lIEZJWFVQX0FSRU5BX0FDQ0VTUwlCSVQoMzEpCiAjZGVmaW5lIERBVEFfQVJFTkFfT0ZGU0VUX01BU0sJR0VOTUFTSygzMSwgMTYpCiAKQEAgLTE1MTAsNyAmIzQzOzE1MTQsNyBAQCBib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKngsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCXUzMiByZWcgPSBGSUVMRF9HRVQoRklYVVBfUkVHX01BU0ssIHgtJmd0O2ZpeHVwKTsKIAl1MzIgaW5zbl9sZW4gPSBGSUVMRF9HRVQoRklYVVBfSU5TTl9MRU5fTUFTSywgeC0mZ3Q7Zml4dXApOwogCWJvb2wgaXNfYXJlbmEgPSAhISh4LSZndDtmaXh1cCAmYW1wOyBGSVhVUF9BUkVOQV9BQ0NFU1MpOwotCWJvb2wgaXNfd3JpdGUgPSAocmVnID09IERPTlRfQ0xFQVIpOwomIzQzOwlib29sIGlzX3dyaXRlID0gISEoeC0mZ3Q7Zml4dXAgJmFtcDsgRklYVVBfQVJFTkFfV1JJVEUpOwogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAlzMTYgb2ZmOwogCXUzMiBhcmVuYV9yZWc7CkBAIC0yMzQ4LDYgJiM0MzsyMzUyLDcgQEAgc3Q6CQkJaW5zbl9vZmYgPSBpbnNuLSZndDtvZmY7CiAJCQkJc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXg7CiAJCQkJdTggKl9pbnNuID0gaW1hZ2UgJiM0MzsgcHJvZ2xlbiAmIzQzOyAoc3RhcnRfb2ZfbGR4IC0gdGVtcCk7CiAJCQkJdTMyIGFyZW5hX3JlZywgZml4dXBfcmVnOwomIzQzOwkJCQlib29sIGlzX3dyaXRlOwogCQkJCXM2NCBkZWx0YTsKIAogCQkJCWlmICghYnBmX3Byb2ctJmd0O2F1eC0mZ3Q7ZXh0YWJsZSkKQEAgLTIzODQsMTUgJiM0MzsyMzg5LDI5IEBAIHN0OgkJCWluc25fb2ZmID0gaW5zbi0mZ3Q7b2ZmOwogCQkJCSAgICBicGZfYXRvbWljX2lzX2xvYWRfYWNxKGluc24pKSB7CiAJCQkJCWFyZW5hX3JlZyA9IHJlZzJwdF9yZWdzW3NyY19yZWddOwogCQkJCQlmaXh1cF9yZWcgPSByZWcycHRfcmVnc1tkc3RfcmVnXTsKJiM0MzsJCQkJCWlzX3dyaXRlID0gZmFsc2U7CiAJCQkJfSBlbHNlIHsKJiM0MzsJCQkJCS8qCiYjNDM7CQkJCQkgKiBBIHN0b3JlIGhhcyBubyBkZXN0aW5hdGlvbiByZWdpc3RlciB0byBjbGVhciwKJiM0MzsJCQkJCSAqIGV4Y2VwdCBmb3IgYSByZWFkLW1vZGlmeS13cml0ZSB3aXRoIEJQRl9GRVRDSCwKJiM0MzsJCQkJCSAqIHdoaWNoIGFsc28gcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIHNyY19yZWcsIG9yCiYjNDM7CQkJCQkgKiBpbnRvIHIwIGZvciBhIEJQRl9DTVBYQ0hHLiBFaXRoZXIgd2F5IHRoZSBhY2Nlc3MKJiM0MzsJCQkJCSAqIGlzIHN0aWxsIHJlcG9ydGVkIGFzIGEgd3JpdGUuCiYjNDM7CQkJCQkgKi8KJiM0MzsJCQkJCWludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7CiYjNDM7CiAJCQkJCWFyZW5hX3JlZyA9IHJlZzJwdF9yZWdzW2RzdF9yZWddOwotCQkJCQlmaXh1cF9yZWcgPSBET05UX0NMRUFSOwomIzQzOwkJCQkJZml4dXBfcmVnID0gbG9hZF9yZWcgJmx0OyAwID8gRE9OVF9DTEVBUiA6CiYjNDM7CQkJCQkJICAgIHJlZzJwdF9yZWdzW2xvYWRfcmVnXTsKJiM0MzsJCQkJCWlzX3dyaXRlID0gdHJ1ZTsKIAkJCQl9CiAKIAkJCQlleC0mZ3Q7Zml4dXAgPSBGSUVMRF9QUkVQKEZJWFVQX0lOU05fTEVOX01BU0ssIHByb2cgLSBzdGFydF9vZl9sZHgpIHwKIAkJCQkJICAgIEZJRUxEX1BSRVAoRklYVVBfQVJFTkFfUkVHX01BU0ssIGFyZW5hX3JlZykgfAogCQkJCQkgICAgRklFTERfUFJFUChGSVhVUF9SRUdfTUFTSywgZml4dXBfcmVnKTsKIAkJCQlleC0mZ3Q7Zml4dXAgfD0gRklYVVBfQVJFTkFfQUNDRVNTOwomIzQzOwkJCQlpZiAoaXNfd3JpdGUpCiYjNDM7CQkJCQlleC0mZ3Q7Zml4dXAgfD0gRklYVVBfQVJFTkFfV1JJVEU7CiAKIAkJCQlleC0mZ3Q7ZGF0YSB8PSBGSUVMRF9QUkVQKERBVEFfQVJFTkFfT0ZGU0VUX01BU0ssIGluc24tJmd0O29mZik7CiAJCQl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaAppbmRleCA0ZWRiYTgxODJkYjFiLi4xNWQ4MzY4NGM2ZTk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKQEAgLTQxNCw2ICYjNDM7NDE0LDMwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfYXRvbWljX2lzX2xvYWRfYWNxKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIAkgICAgICAgaW5zbi0mZ3Q7aW1tID09IEJQRl9MT0FEX0FDUTsKIH0KIAomIzQzOy8qCiYjNDM7ICogR2l2ZW4gYW4gaW5zdHJ1Y3Rpb24gQGluc24sIHJldHVybiB0aGUgbnVtYmVyIG9mIHRoZSBCUEYgcmVnaXN0ZXIgdGhhdCBhCiYjNDM7ICogQlBGX0FUT01JQyByZWFkcyB0aGUgdmFsdWUgYXQgaXRzIG1lbW9yeSBvcGVyYW5kIGludG8sIG9yIC0xIGlmIHRoZXJlIGlzCiYjNDM7ICogbm8gc3VjaCByZWdpc3Rlci4gVGhhdCBpcyB0aGUgcmVnaXN0ZXIgYSBCUEZfUFJPQkVfQVRPTUlDIGhhcyB0byBjbGVhciB3aGVuCiYjNDM7ICogdGhlIGFjY2VzcyBmYXVsdHMuIExpa2UgYnBmX2F0b21pY19pc19sb2FkX2FjcSgpLCBAaW5zbiBpcyBub3QgYXNzdW1lZCB0bwomIzQzOyAqIGJlIGEgQlBGX0FUT01JQyBoZXJlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGJwZl9hdG9taWNfbG9hZF9yZWcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKQomIzQzO3sKJiM0MzsJaWYgKEJQRl9DTEFTUyhpbnNuLSZndDtjb2RlKSAhPSBCUEZfU1RYIHx8CiYjNDM7CSAgICAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX0FUT01JQyAmYW1wOyZhbXA7CiYjNDM7CSAgICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX1BST0JFX0FUT01JQykpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXN3aXRjaCAoaW5zbi0mZ3Q7aW1tKSB7CiYjNDM7CWNhc2UgQlBGX0xPQURfQUNROgomIzQzOwkJcmV0dXJuIGluc24tJmd0O2RzdF9yZWc7CiYjNDM7CWNhc2UgQlBGX0NNUFhDSEc6CiYjNDM7CQlyZXR1cm4gQlBGX1JFR18wOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIChpbnNuLSZndDtpbW0gJmFtcDsgQlBGX0ZFVENIKSA/IGluc24tJmd0O3NyY19yZWcgOiAtMTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qIE1lbW9yeSBzdG9yZSwgKih1aW50ICopIChkc3RfcmVnICYjNDM7IG9mZjE2KSA9IGltbTMyICovCiAKICNkZWZpbmUgQlBGX1NUX01FTShTSVpFLCBEU1QsIE9GRiwgSU1NKQkJCQlcCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2ZpeHVwcy5jIGIva2VybmVsL2JwZi9maXh1cHMuYwppbmRleCA2NjFlMmQxM2E2MDQyLi5jNGJkNzBiZWZiYjVjIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZml4dXBzLmMKQEAgLTQ5LDE2ICYjNDM7NDksNyBAQCBzdGF0aWMgaW50IGluc25fZGVmX3JlZ25vKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIAljYXNlIEJQRl9TVDoKIAkJcmV0dXJuIC0xOwogCWNhc2UgQlBGX1NUWDoKLQkJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9BVE9NSUMgfHwKLQkJICAgIEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9BVE9NSUMpIHsKLQkJCWlmIChpbnNuLSZndDtpbW0gPT0gQlBGX0NNUFhDSEcpCi0JCQkJcmV0dXJuIEJQRl9SRUdfMDsKLQkJCWVsc2UgaWYgKGluc24tJmd0O2ltbSA9PSBCUEZfTE9BRF9BQ1EpCi0JCQkJcmV0dXJuIGluc24tJmd0O2RzdF9yZWc7Ci0JCQllbHNlIGlmIChpbnNuLSZndDtpbW0gJmFtcDsgQlBGX0ZFVENIKQotCQkJCXJldHVybiBpbnNuLSZndDtzcmNfcmVnOwotCQl9Ci0JCXJldHVybiAtMTsKJiM0MzsJCXJldHVybiBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pOwogCWRlZmF1bHQ6CiAJCXJldHVybiBpbnNuLSZndDtkc3RfcmVnOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBhZGQzYWZmYzU3MDM1Li43M2EyZThiYjE3ODJhIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC02NDg1LDIxICYjNDM7NjQ4NSwxNiBAQCBzdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJcmV0dXJuIC1FQUNDRVM7CiAJfQogCi0JaWYgKGluc24tJmd0O2ltbSAmYW1wOyBCUEZfRkVUQ0gpIHsKLQkJaWYgKGluc24tJmd0O2ltbSA9PSBCUEZfQ01QWENIRykKLQkJCWxvYWRfcmVnID0gQlBGX1JFR18wOwotCQllbHNlCi0JCQlsb2FkX3JlZyA9IGluc24tJmd0O3NyY19yZWc7Ci0KJiM0MzsJLyoKJiM0MzsJICogQSBuZWdhdGl2ZSBsb2FkX3JlZyBtZWFucyB0aGF0IHRoaXMgaW5zdHJ1Y3Rpb24gYWNjZXNzZXMgYSBtZW1vcnkKJiM0MzsJICogbG9jYXRpb24gYnV0IGRvZXNuJiMzOTt0IGFjdHVhbGx5IGxvYWQgaXQgaW50byBhIHJlZ2lzdGVyLgomIzQzOwkgKi8KJiM0MzsJbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pOwomIzQzOwlpZiAobG9hZF9yZWcgJmd0Oz0gMCkgewogCQkvKiBjaGVjayBhbmQgcmVjb3JkIGxvYWQgb2Ygb2xkIHZhbHVlICovCiAJCWVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBsb2FkX3JlZywgRFNUX09QKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7Ci0JfSBlbHNlIHsKLQkJLyogVGhpcyBpbnN0cnVjdGlvbiBhY2Nlc3NlcyBhIG1lbW9yeSBsb2NhdGlvbiBidXQgZG9lc24mIzM5O3QKLQkJICogYWN0dWFsbHkgbG9hZCBpdCBpbnRvIGEgcmVnaXN0ZXIuCi0JCSAqLwotCQlsb2FkX3JlZyA9IC0xOwogCX0KIAogCWRzdF9yZWcgPSBjdXJfcmVncyhlbnYpICYjNDM7IGluc24tJmd0O2RzdF9yZWc7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jCmluZGV4IDE1ZGQzYWUyYTg0YjcuLmU0ZTkzNzQzMDllMjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jCkBAIC0xMDUsNiAmIzQzOzEwNSwxMCBAQCB2b2lkIHRlc3Rfc3RyZWFtX2FyZW5hX2ZhdWx0X2FkZHJlc3Modm9pZCkKIAkJdGVzdF9hZGRyZXNzKHNrZWwtJmd0O3Byb2dzLnN0cmVhbV9hcmVuYV93cml0ZV9mYXVsdCwgJmFtcDtza2VsLSZndDtic3MtJmd0O2ZhdWx0X2FkZHIpOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7bG9hZF9hY3F1aXJlX2ZhdWx0JiMzNDspKQogCQl0ZXN0X2FkZHJlc3Moc2tlbC0mZ3Q7cHJvZ3Muc3RyZWFtX2FyZW5hX2xvYWRfYWNxdWlyZV9mYXVsdCwgJmFtcDtza2VsLSZndDtic3MtJmd0O2ZhdWx0X2FkZHIpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3hjaGdfZmF1bHQmIzM0OykpCiYjNDM7CQl0ZXN0X2FkZHJlc3Moc2tlbC0mZ3Q7cHJvZ3Muc3RyZWFtX2FyZW5hX3hjaGdfZmF1bHQsICZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtmYXVsdF9hZGRyKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtjbXB4Y2hnX2ZhdWx0JiMzNDspKQomIzQzOwkJdGVzdF9hZGRyZXNzKHNrZWwtJmd0O3Byb2dzLnN0cmVhbV9hcmVuYV9jbXB4Y2hnX2ZhdWx0LCAmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7ZmF1bHRfYWRkcik7CiAKIAlzdHJlYW1fX2Rlc3Ryb3koc2tlbCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMKaW5kZXggY2Y1NTMzZTExZjM5Yy4uMDBhMzc5MzNlNDExZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYwpAQCAtMjI5LDYgJiM0MzsyMjksMTA3IEBAIGludCBzdHJlYW1fYXJlbmFfbG9hZF9hY3F1aXJlX2ZhdWx0KHZvaWQgKmN0eCkKIAlyZXR1cm4gdmFsOwogfQogCiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztfX3N0ZGVycigmIzM0O0VSUk9SOiBBcmVuYSBXUklURSBhY2Nlc3MgYXQgdW5tYXBwZWQgYWRkcmVzcyAweHt7Lip9fSYjMzQ7KQomIzQzO19fc3RkZXJyKCYjMzQ7Q1BVOiB7e1swLTldJiM0Mzt9fSBVSUQ6IDAgUElEOiB7e1swLTldJiM0Mzt9fSBDb21tOiB7ey4qfX0mIzM0OykKJiM0MztfX3N0ZGVycigmIzM0O0NhbGwgdHJhY2U6XG4mIzM0OwomIzQzOyYjMzQ7e3soW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcJiM0MzsweFswLTlhLWZBLUZdJiM0MzsvMHhbMC05YS1mQS1GXSYjNDM7XG4mIzM0OwomIzQzOyYjMzQ7fFsgXHRdJiM0MztbXlxuXSYjNDM7XG4pKn19JiMzNDspCiYjNDM7aW50IHN0cmVhbV9hcmVuYV94Y2hnX2ZhdWx0KHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24geGNoZ19pbnNuID0gewomIzQzOwkJLmNvZGUJID0gMHhjMywJLyogQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVyAqLwomIzQzOwkJLmRzdF9yZWcgPSAxLAkJLyogQlBGX1JFR18xICovCiYjNDM7CQkuc3JjX3JlZyA9IDIsCQkvKiBCUEZfUkVHXzIgKi8KJiM0MzsJCS5vZmYJID0gMHg3ZmZmLAomIzQzOwkJLmltbQkgPSAweGUxLAkvKiBCUEZfWENIRyAqLwomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgYnBmX2FyZW5hICpwdHIgPSAodm9pZCAqKSZhbXA7YXJlbmE7CiYjNDM7CXU2NCB1c2VyX3ZtX3N0YXJ0LCB2YWw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFByZXZlbnQgR0NDIGJvdW5kcyB3YXJuaW5nOiBjYXN0aW5nICZhbXA7YXJlbmEgdG8gc3RydWN0IGJwZl9hcmVuYSAqCiYjNDM7CSAqIHRyaWdnZXJzIGJvdW5kcyBjaGVja2luZyBzaW5jZSB0aGUgbWFwIGRlZmluaXRpb24gaXMgc21hbGxlciB0aGFuCiYjNDM7CSAqIHN0cnVjdCBicGZfYXJlbmEuIGJhcnJpZXJfdmFyKCkgbWFrZXMgdGhlIHBvaW50ZXIgb3BhcXVlIHRvIEdDQywKJiM0MzsJICogcHJldmVudGluZyB0aGUgYm91bmRzIGFuYWx5c2lzLgomIzQzOwkgKi8KJiM0MzsJYmFycmllcl92YXIocHRyKTsKJiM0MzsJdXNlcl92bV9zdGFydCA9IHB0ci0mZ3Q7dXNlcl92bV9zdGFydDsKJiM0MzsJZmF1bHRfYWRkciA9IHVzZXJfdm1fc3RhcnQgJiM0MzsgMHg3ZmZmOwomIzQzOwlicGZfYWRkcl9zcGFjZV9jYXN0KHVzZXJfdm1fc3RhcnQsIDAsIDEpOwomIzQzOwkvKgomIzQzOwkgKiBBIHJlYWQtbW9kaWZ5LXdyaXRlIGNhcnJ5aW5nIEJQRl9GRVRDSCB3cml0ZXMgdG8gbWVtb3J5LCBzbyB0aGUgZmF1bHQKJiM0MzsJICogaGFzIHRvIGJlIHJlcG9ydGVkIGFzIGEgV1JJVEUgZnJvbSB0aGUgZHN0X3JlZyBhZGRyZXNzLCBidXQgaXQgYWxzbwomIzQzOwkgKiByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gc3JjX3JlZywgc28gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGhhcyB0bwomIzQzOwkgKiBjbGVhciBzcmNfcmVnLiBQb2lzb24gaXQgdXAgZnJvbnQsIHRoZSByZXR1cm5lZCB2YWx1ZSBtdXN0IGJlIDAuCiYjNDM7CSAqLwomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkJJiMzNDtyMSA9ICVbdXNlcl92bV9zdGFydF07JiMzNDsKJiM0MzsJCSYjMzQ7cjIgPSAxOyYjMzQ7CiYjNDM7CQkmIzM0Oy44Ynl0ZSAlW3hjaGdfaW5zbl07JiMzNDsgLyogcjIgPSB4Y2hnKCh1MzIgKikocjEgJiM0MzsgMHg3ZmZmKSwgcjIpICovCiYjNDM7CQkmIzM0OyVbdmFsXSA9IHIyOyYjMzQ7CiYjNDM7CQk6IFt2YWxdICYjMzQ7PXImIzM0OyAodmFsKQomIzQzOwkJOiBbdXNlcl92bV9zdGFydF0gJiMzNDtyJiMzNDsgKHVzZXJfdm1fc3RhcnQpLAomIzQzOwkJICBfX2ltbV9pbnNuKHhjaGdfaW5zbiwgeGNoZ19pbnNuKQomIzQzOwkJOiAmIzM0O3IxJiMzNDssICYjMzQ7cjImIzM0OwomIzQzOwkpOwomIzQzOwlyZXR1cm4gdmFsOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKQomIzQzO19fc3RkZXJyKCYjMzQ7RVJST1I6IEFyZW5hIFdSSVRFIGFjY2VzcyBhdCB1bm1hcHBlZCBhZGRyZXNzIDB4e3suKn19JiMzNDspCiYjNDM7X19zdGRlcnIoJiMzNDtDUFU6IHt7WzAtOV0mIzQzO319IFVJRDogMCBQSUQ6IHt7WzAtOV0mIzQzO319IENvbW06IHt7Lip9fSYjMzQ7KQomIzQzO19fc3RkZXJyKCYjMzQ7Q2FsbCB0cmFjZTpcbiYjMzQ7CiYjNDM7JiMzNDt7eyhbYS16QS1aX11bYS16QS1aMC05X10qXFwmIzQzOzB4WzAtOWEtZkEtRl0mIzQzOy8weFswLTlhLWZBLUZdJiM0MztcbiYjMzQ7CiYjNDM7JiMzNDt8WyBcdF0mIzQzO1teXG5dJiM0MztcbikqfX0mIzM0OykKJiM0MztpbnQgc3RyZWFtX2FyZW5hX2NtcHhjaGdfZmF1bHQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaW5zbiBjbXB4Y2hnX2luc24gPSB7CiYjNDM7CQkuY29kZQkgPSAweGMzLAkvKiBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9XICovCiYjNDM7CQkuZHN0X3JlZyA9IDEsCQkvKiBCUEZfUkVHXzEgKi8KJiM0MzsJCS5zcmNfcmVnID0gMiwJCS8qIEJQRl9SRUdfMiAqLwomIzQzOwkJLm9mZgkgPSAweDdmZmYsCiYjNDM7CQkuaW1tCSA9IDB4ZjEsCS8qIEJQRl9DTVBYQ0hHICovCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBicGZfYXJlbmEgKnB0ciA9ICh2b2lkICopJmFtcDthcmVuYTsKJiM0MzsJdTY0IHVzZXJfdm1fc3RhcnQsIHZhbDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUHJldmVudCBHQ0MgYm91bmRzIHdhcm5pbmc6IGNhc3RpbmcgJmFtcDthcmVuYSB0byBzdHJ1Y3QgYnBmX2FyZW5hICoKJiM0MzsJICogdHJpZ2dlcnMgYm91bmRzIGNoZWNraW5nIHNpbmNlIHRoZSBtYXAgZGVmaW5pdGlvbiBpcyBzbWFsbGVyIHRoYW4KJiM0MzsJICogc3RydWN0IGJwZl9hcmVuYS4gYmFycmllcl92YXIoKSBtYWtlcyB0aGUgcG9pbnRlciBvcGFxdWUgdG8gR0NDLAomIzQzOwkgKiBwcmV2ZW50aW5nIHRoZSBib3VuZHMgYW5hbHlzaXMuCiYjNDM7CSAqLwomIzQzOwliYXJyaWVyX3ZhcihwdHIpOwomIzQzOwl1c2VyX3ZtX3N0YXJ0ID0gcHRyLSZndDt1c2VyX3ZtX3N0YXJ0OwomIzQzOwlmYXVsdF9hZGRyID0gdXNlcl92bV9zdGFydCAmIzQzOyAweDdmZmY7CiYjNDM7CWJwZl9hZGRyX3NwYWNlX2Nhc3QodXNlcl92bV9zdGFydCwgMCwgMSk7CiYjNDM7CS8qCiYjNDM7CSAqIFNhbWUgYXMgdGhlIGV4Y2hhbmdlIGFib3ZlLCBleGNlcHQgdGhhdCBhIEJQRl9DTVBYQ0hHIHJlYWRzIHRoZSBvbGQKJiM0MzsJICogdmFsdWUgaW50byByMCByYXRoZXIgdGhhbiBpbnRvIHNyY19yZWcsIHNvIHIwIGlzIHRoZSByZWdpc3RlciB0aGUKJiM0MzsJICogZXhjZXB0aW9uIGhhbmRsZXIgaGFzIHRvIGNsZWFyLiBJdCBkb3VibGVzIGFzIHRoZSBjb21wYXJlIHZhbHVlLCBidXQKJiM0MzsJICogdGhlIGNvbXBhcmlzb24gbmV2ZXIgaGFwcGVucyBzaW5jZSB0aGUgYWNjZXNzIGZhdWx0cyBmaXJzdC4KJiM0MzsJICovCiYjNDM7CWFzbSB2b2xhdGlsZSAoCiYjNDM7CQkmIzM0O3IxID0gJVt1c2VyX3ZtX3N0YXJ0XTsmIzM0OwomIzQzOwkJJiMzNDtyMCA9IDE7JiMzNDsKJiM0MzsJCSYjMzQ7cjIgPSAyOyYjMzQ7CiYjNDM7CQkmIzM0Oy44Ynl0ZSAlW2NtcHhjaGdfaW5zbl07JiMzNDsgLyogcjAgPSBjbXB4Y2hnKCh1MzIgKikocjEgJiM0MzsgMHg3ZmZmKSwgcjAsIHIyKSAqLwomIzQzOwkJJiMzNDslW3ZhbF0gPSByMDsmIzM0OwomIzQzOwkJOiBbdmFsXSAmIzM0Oz1yJiMzNDsgKHZhbCkKJiM0MzsJCTogW3VzZXJfdm1fc3RhcnRdICYjMzQ7ciYjMzQ7ICh1c2VyX3ZtX3N0YXJ0KSwKJiM0MzsJCSAgX19pbW1faW5zbihjbXB4Y2hnX2luc24sIGNtcHhjaGdfaW5zbikKJiM0MzsJCTogJiMzNDtyMCYjMzQ7LCAmIzM0O3IxJiMzNDssICYjMzQ7cjImIzM0OwomIzQzOwkpOwomIzQzOwlyZXR1cm4gdmFsOwomIzQzO30KJiM0MzsKIHN0YXRpYyBfX25vaW5saW5lIHZvaWQgc3VicHJvZyh2b2lkKQogewogCWludCBfX2FyZW5hICphZGRyID0gKGludCBfX2FyZW5hICopMHhkZWFkYmVlZjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU3NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDYzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQlBGIEF0b21pYyBPcGVyYXRpb25zKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBUaGlzIHBhdGNoIHNlcmllcyBpcyB0b3VjaGluZyBzb21lIHJlYWxseSBjcml0aWNhbCBwYXJ0cyBvZiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIEJQRiBzdWJzeXN0ZW0gYW5kIHNldmVyYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEpJVCBjb21waWxlcnMuIE15IGluaXRpYWwgZ3V0IGZlZWxpbmc/IFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBzdWJqZWN0IHRvIGZ1enppbmcuCgpUaGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIGhvdyBCUEYgYXJlbmEgZXhjZXB0aW9ucyBhcmUgaGFuZGxlZCwgcGFydGljdWxhcmx5IGFyb3VuZCBhdG9taWMgb3BlcmF0aW9ucyBsaWtlIGBCUEZfQ01QWENIR2AgYW5kIGBCUEZfWENIR2AuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gdGhlIHZlcmlmaWVyIChga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYGtlcm5lbC9icGYvZml4dXBzLmNgKSBhbmQgdGhlIEpJVCBjb21waWxlcnMgdGhlbXNlbHZlcyBmb3IgYGFybTY0YCwgYHJpc2N2YCwgYHMzOTBgLCBhbmQgYHg4NmAuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGJwZl9hdG9taWNfbG9hZF9yZWdgIGluIGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYCBpcyBhIHJlZCBmbGFnLCBidXQgYSBnb29kIG9uZS4KCk5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBkZXRlcm1pbmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgQlBGIEpJVCwgb2J2aW91c2x5LCByZXF1aXJlcyBgQ09ORklHX0JQRl9KSVRgLiBUaGUgQlBGIGFyZW5hIHBhcnQgbGlrZWx5IGhpbmdlcyBvbiBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYW5kIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBga2VybmVsL2JwZi9LY29uZmlnYCBvciByZWxhdGVkIGZpbGVzIHRvIGNvbmZpcm0gdGhhdC4gQlBGIGFyZW5hICptaWdodCogbmVlZCB0aGUgYENPTkZJR19CUEZfU1lTQ0FMTGAgdG9vLCBzbyBJJiMzOTtsbCBjaGVjayB0aGF0LgoKTmV4dCwgSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoZXJlIHRoaXMgYGJwZl9hdG9taWNfbG9hZF9yZWdgIGlzIGJlaW5nIHVzZWQuIFVzaW5nIGBncmVwcGVyYCBpcyBhbiBvcHRpb24sIGJ1dCB0aGUgZGlmZiBpdHNlbGYgaXMgcHJvYmFibHkgZmFzdGVyLCBzaW5jZSBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgc21hbGwgY2hhbmdlLiBBbmQsIHllYWgsIHRoZSBkaWZmIHNob3dzIGl0IGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCwgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGFuZCB3aXRoaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBKSVQgY29tcGlsZXJzLgoKT2theSwgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBmdW5jdGlvbnMuIEJhc2VkIG9uIHRoZSBkaWZmLCB0aGVzZSBhcmUgdGhlIG9uZXMgSSYjMzk7bGwgZm9jdXMgb246CgoqICAgYGJwZl9hdG9taWNfbG9hZF9yZWdgIChhbHRob3VnaCBpdCYjMzk7cyBgc3RhdGljIGlubGluZWAsIHNvIHRoZSBjb3ZlcmFnZSBtaWdodCBiZSBsaW1pdGVkKQoqICAgYGV4X2hhbmRsZXJfYnBmYCAoeDg2LCBhcm02NCkKKiAgIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgIChhcm02NCwgcmlzY3YpCiogICBgY2hlY2tfYXRvbWljX3Jtd2AgKHZlcmlmaWVyKQoqICAgYGJwZl9qaXRfcHJvYmVfYXRvbWljX3ByZWAgKHMzOTApCiogICBgZW1pdF9hdG9taWNfbGRfc3RfaW5kZXhgICh4ODYsIHRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBgc3Q6YCBsYWJlbCBpbiBgZG9faml0YCBvciBzb21ldGhpbmcgc2ltaWxhciBhcmUgaW1wb3J0YW50KQoKU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBmb2N1cyBvbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCwgYXJvdW5kIGxpbmUgMjM0OCwgYXMgd2VsbCBhcyB0aGUgb3RoZXIgSklUIGNvbXBpbGVycyB0aGF0IGFyZSB0b3VjaGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FkZF9leGNlcHRpb25faGFuZGxlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTExMDk9Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMTMyLS8qIEZvciBhY2Nlc3NlcyB0byBCVEYgcG9pbnRlcnMsIGFkZCBhbiBlbnRyeSB0byB0aGUgZXhjZXB0aW9uIHRhYmxlICovXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMTMzOnN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTExMzQtXHRcdFx0XHQgc3RydWN0IGppdF9jdHggKmN0eCxcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMjY1PXN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTgxOS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjE4MjA6XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGRzdCk7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xODIxLVx0XHRpZiAocmV0KVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE4OTgtXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxODk5Olx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgY3R4LCBET05UX0NMRUFSKTtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE5MDAtXHRcdGlmIChyZXQpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTk2NS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjE5NjY6XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIERPTlRfQ0xFQVIpO1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTk2Ny1cdFx0aWYgKHJldClcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xOTk2LVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTk5NzpcdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgY3R4LCBsb2FkX3JlZyBcdTAwM2MgMCA/XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xOTk4LVx0XHRcdFx0XHRcdCAgICBET05UX0NMRUFSIDogYnBmMmE2NFtsb2FkX3JlZ10pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDY0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEJQRiBKSVQgQ29tcGlsZXIqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlci4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gam9nIG15IG1lbW9yeSBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDIzNDggaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoYXQgYXJlYSB1c3VhbGx5IGRlYWxzIHdpdGggW2luc2VydCBzcGVjaWZpYyBrbm93bGVkZ2Ugb2Ygd2hhdCYjMzk7cyB1c3VhbGx5IGxvY2F0ZWQgYXJvdW5kIHRoaXMgYXJlYSBvZiB0aGUgZmlsZSwgZS5nLiwgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgaW5zdHJ1Y3Rpb24gZW1pc3Npb24gZm9yIHNwZWNpZmljIEJQRiBvcGNvZGVzLCBtZW1vcnkgYWRkcmVzc2luZywgZXRjLl0uIEkmIzM5O20gbGlrZWx5IGludGVyZXN0ZWQgaW4gW2luc2VydCBhIGd1ZXNzIGFib3V0IHRoZSBjb250ZXh0IGJhc2VkIG9uIHlvdXIgZXhwZXJ0aXNlLCBlLmcuLCBob3cgYSBwYXJ0aWN1bGFyIGluc3RydWN0aW9uIGlzIGJlaW5nIHRyYW5zbGF0ZWQsIGhvdyBhIHNwZWNpZmljIG9wdGltaXphdGlvbiBpcyBoYW5kbGVkLCBhIGJ1ZyBJIHZhZ3VlbHkgcmVjYWxsXS4gVGltZSB0byBvcGVuIHRoYXQgZmlsZSBhbmQgY29uZmlybSBteSBzdXNwaWNpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0OiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyODQtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjI4NTpzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyODYtXHRcdFx0aWYgKGRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkwMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBPYnNlcnZhdGlvbnMgb24gQlBGIEpJVCBDb21waWxhdGlvbiAmYW1wOyBBdG9taWMgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBCUEYgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MgYW5kIGF0b21pYyBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIGFjcm9zcyBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyB3aXRoaW4gdGhlIGtlcm5lbC4gSXQmIzM5O3MgaW50ZXJlc3RpbmcgdG8gc2VlIHRoZSB2YXJpZWQgZnVuY3Rpb24gbmFtZXMgYW5kIGxvY2F0aW9ucyBmb3IgY29yZSBsb2dpYy4KCkkgbm90aWNlZCB0aGF0IHRoZSBtYWluIGVudHJ5IHBvaW50cyBmb3IgdGhlIEpJVCBjb21waWxlciBkaWZmZXIgYmFzZWQgb24gdGhlIGFyY2hpdGVjdHVyZS4gRm9yIGluc3RhbmNlLCBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCwgdGhlIHdvcmsgaXMgZG9uZSBpbiBgZG9faml0YC4gT3ZlciBpbiBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLCBgYnVpbGRfaW5zbmAgdGFrZXMgdGhlIGxlYWQuIEF0b21pYyBvcGVyYXRpb25zIGdldCBzb21lIGF0dGVudGlvbiB0b28sIGFuZCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBJIHNlZSB0aGF0IGBjaGVja19hdG9taWNfcm13YCBoYW5kbGVzIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSB2ZXJpZmljYXRpb25zLiBUaGVuLCBmb3IgYGFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNgLCBpdCYjMzk7cyBgYnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlYCwgYW5kIGZvciBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AsIGl0JiMzOTtzIGBicGZfaml0X2VtaXRfaW5zbmAuCgpHaXZlbiB0aGUgbWVudGlvbnMgb2YgYXRvbWljIG9wZXJhdGlvbnMsIEkmIzM5O20gbm93IGN1cmlvdXMgYWJvdXQgd2hlcmUgdGhlIGBicGZfYXRvbWljX2xvYWRfcmVnYCBmdW5jdGlvbiBnZXRzIHVzZWQgaW4gdGhlIGNvZGViYXNlLiBJIHNob3VsZCBjaGVjayBga2VybmVsL2JwZi9maXh1cHMuY2AgdG8gc2VlIHdoaWNoIGZ1bmN0aW9uIG9yIGZ1bmN0aW9ucyByZWx5IG9uIGl0LiBJdCYjMzk7cyBhbHdheXMgYmVuZWZpY2lhbCB0byB1bmRlcnN0YW5kIHRoZXNlIGRlcGVuZGVuY2llcyB3aGVuIG9wdGltaXppbmcgb3IgZGVidWdnaW5nIEJQRi1yZWxhdGVkIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2F0b21pY19sb2FkX3JlZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZml4dXBzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9maXh1cHMuYz00ND1zdGF0aWMgaW50IGluc25fZGVmX3JlZ25vKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTUxLVx0Y2FzZSBCUEZfU1RYOlxua2VybmVsL2JwZi9maXh1cHMuYzo1MjpcdFx0cmV0dXJuIGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTUzLVx0ZGVmYXVsdDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU2MgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSW5zdHJ1Y3Rpb24gRGVmaW5pdGlvbiBhbmQgSklUIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGluc25fZGVmX3JlZ25vYCBmdW5jdGlvbiwgYW5kIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9scyBvciBhcmVhcyB0aGF0IGFyZSAqbW9zdCogcmVsZXZhbnQuIE15IG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW4sIGFuZCBJIGltbWVkaWF0ZWx5IGhvbmUgaW4gb246IGBjaGVja19hdG9taWNfcm13YCwgZGVmaW5pdGVseSBgaW5zbl9kZWZfcmVnbm9gIGl0c2VsZiwgb2J2aW91c2x5LCBhbmQgYGV4X2hhbmRsZXJfYnBmYCBiZWNhdXNlIHRoYXQgc291bmRzIGNlbnRyYWwgdG8gaGFuZGxpbmcgQlBGIGluc3RydWN0aW9ucy4KCk5vdywgSSYjMzk7bSBhIGxpdHRsZSBoZXNpdGFudCBhYm91dCBpbmNsdWRpbmcgYGRvX2ppdGAgYmVjYXVzZSBpdCYjMzk7cyAqdmVyeSogZ2VuZXJpYywgYnV0IGl0ICppcyogdGhlIEpJVCBjb21waWxlciwgc28gaXQmIzM5O3MgcHJvYmFibHkgaW1wb3J0YW50IHRvIGNvbnNpZGVyIGluIHNvbWUgd2F5LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuIFRoZW4sIEkgdGhpbmsgYWJvdXQgdGhlIHBsYXRmb3JtLXNwZWNpZmljIEpJVCBjb21wb25lbnRzOiBgYnVpbGRfaW5zbmAgZm9yIGFybTY0IGFuZCB0aGUgUklTQy1WIGFuZCBzMzkwIHNwZWNpZmljIGVtaXR0ZXJzLCBgYnBmX2ppdF9lbWl0X2luc25gIGFuZCBgYnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlYCByZXNwZWN0aXZlbHkuIFRob3NlIGFyZSBwcm9iYWJseSBnb2luZyB0byBiZSBrZXkgcGllY2VzIG9mIHRoZSBwdXp6bGUuCgpOb3csIEkgcmVhbGx5IG5lZWQgdG8gY2hlY2sgdGhlIHNjb3BlIG9mIGBleF9oYW5kbGVyX2JwZmAgZnVuY3Rpb24uIElzIGl0IHN0YXRpYywgaXMgaXQgZXhwb3J0ZWQ/IEl0cyB2aXNpYmlsaXR5IGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgQlBGIGNvZGUgaXMgZ2V0dGluZyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleF9oYW5kbGVyX2JwZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTQ0Nz1zdGF0aWMgaW50IGVtaXRfYXRvbWljX2xkX3N0X2luZGV4KHU4ICoqcHByb2csIHUzMiBhdG9taWNfb3AsIHUzMiBzaXplLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNTExLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE1MTI6Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICp4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNTEzLXtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MjI4NT1zdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMzgxLVx0XHRcdFx0ICogdGhlIHJlZyBob2xkaW5nIHRoZSB1bm1vZGlmaWVkIDMyLWJpdCBhZGRyZXNzIHRvXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjM4MjpcdFx0XHRcdCAqIGV4X2hhbmRsZXJfYnBmKCkuXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjM4My1cdFx0XHRcdCAqXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI1NDAtXHRcdFx0XHQgKiBDb21wdXRlIHNpemUgb2YgeDg2IGluc24gYW5kIGl0cyB0YXJnZXQgZGVzdCB4ODYgcmVnaXN0ZXIuXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjU0MTpcdFx0XHRcdCAqIGV4X2hhbmRsZXJfYnBmKCkgd2lsbCB1c2UgbG93ZXIgOCBiaXRzIHRvIGFkanVzdFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI1NDItXHRcdFx0XHQgKiBwdF9yZWdzLVx1MDAzZWlwIHRvIGp1bXAgb3ZlciB0aGlzIHg4NiBpbnN0cnVjdGlvblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ0OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBCUEYgSklUIExhbmRzY2FwZTogQSBRdWljayBDaGVjayoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgZXhfaGFuZGxlcl9icGZgIGFuZCBpbW1lZGlhdGVseSBJIGtub3cgaXQmIzM5O3MgYSBnbG9iYWwgZnVuY3Rpb24uIE15IGJyYWluIGlzIGFscmVhZHkgc3RhcnRpbmcgdG8gc2NvcGUgb3V0IHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCwgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kIGNvbW1vbiB1c2FnZSBwYXR0ZXJucy4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCBrZXJuZWwgQlBGIGFuZCB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUsIG15IG5leHQgbW92ZSBpcyBjbGVhci4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBMZXQgbWUgcHVsbCB1cCBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIChvciBwb3RlbnRpYWwgaXNzdWVzKSB3aWxsIHJlc2lkZS4gSXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciBkZXRhaWxzIG9uIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIEFSTTY0IEJQRiBKSVQgY29tcGlsYXRpb24gZmxvdy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBtZW50YWxseSB0cmFjaW5nIHRoZSBjYWxscyBhbmQgdW5kZXJzdGFuZCB0aGUgSklUIG91dHB1dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXhfaGFuZGxlcl9icGYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMDQ2PXN0YXRpYyB2b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgd2FzX2NsYXNzaWMpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTEwOC1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjExMDk6Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTExMTAtXHRcdCAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMTMzPXN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjA1LVx0XHQgKiBtZW1vcnkgYWNjZXNzLiBQYXNzIHRoZSByZWcgaG9sZGluZyB0aGUgdW5tb2RpZmllZCAzMi1iaXQgYWRkcmVzcyB0b1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTIwNjpcdFx0ICogZXhfaGFuZGxlcl9icGYuXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjA3LVx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMjYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGBleF9oYW5kbGVyX2JwZmAgYW5kIEl0cyBSZWxhdGlvbnNoaXAgdG8gSW5zdHJ1Y3Rpb24gRGVmaW5pdGlvbioqCgpSaWdodCwgc28gYGV4X2hhbmRsZXJfYnBmYCBpcyBhIGdsb2JhbCB2YXJpYWJsZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgd2hlcmUgaXMgdGhpcyB1c2VkLCBhbmQgaG93IHdpZGVseT8mIzM0OyBHbG9iYWwgdmFyaWFibGVzIGFsd2F5cyB3YXJyYW50IGEgY2FyZWZ1bCBsb29rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIHBvdGVudGlhbCBpbXBhY3QuIE15IGZvY3VzIG5hcnJvd3MgaW4gb24gdGhhdCBuYW1lLgoKTXkgbmV4dCBzdGVwPyBEaXZlIHJpZ2h0IGludG8gdGhlIGNvZGUgdG8gdHJhY2UgaXRzIHVzYWdlLiBJJiMzOTtsbCBoZWFkIG92ZXIgdG8gYGtlcm5lbC9icGYvZml4dXBzLmNgLiBUaGF0IGZpbGUgbmFtZSBzdHJvbmdseSBzdWdnZXN0cyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBzb21lIGtpbmQgb2YgaW5zdHJ1Y3Rpb24gZml4aW5nIG9yIHBhdGNoaW5nIHdpdGhpbiB0aGUgQlBGIHN5c3RlbS4gQ29uc2lkZXJpbmcgdGhhdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBpbnNuX2RlZl9yZWdub2AuIFRoZSBuYW1lIGlzIGFsc28gc3VnZ2VzdGl2ZS4gSXQgaW1wbGllcyBzb21lIGtpbmQgb2YgcmVnaXN0ZXIgbnVtYmVyIHRoYXQgaXMgYSBwYXJ0IG9mIHRoZSBpbnN0cnVjdGlvbiBkZWZpbml0aW9uLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSB0d28gcGllY2VzIG9mIGNvZGUgaW50ZXJhY3QsIGFuZCBob3cgYGV4X2hhbmRsZXJfYnBmYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBpbnN0cnVjdGlvbiBoYW5kbGluZy4gVGhpcyB3aWxsIGhlbHAgbWUgZGV0ZXJtaW5lIHdoZXJlIHRoZSBmaXh1cHMgYXJlIGhhcHBlbmluZyBhbmQgaG93IHRoZXkgbWlnaHQgcmVsYXRlIHRvIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zIG9yIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5zbl9kZWZfcmVnbm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2ZpeHVwcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZml4dXBzLmM9MjQ9c3RhdGljIGJvb2wgaXNfYWRkcl9zcGFjZV9jYXN0MzIoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy00My0vKiBSZXR1cm4gdGhlIHJlZ25vIGRlZmluZWQgYnkgdGhlIGluc24sIG9yIC0xLiAqL1xua2VybmVsL2JwZi9maXh1cHMuYzo0NDpzdGF0aWMgaW50IGluc25fZGVmX3JlZ25vKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbmtlcm5lbC9icGYvZml4dXBzLmMtNDUte1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNTgtLypcbmtlcm5lbC9icGYvZml4dXBzLmM6NTk6ICogRm9yIHVzZSBvbmx5IGluIGNvbWJpbmF0aW9uIHdpdGggaW5zbl9kZWZfcmVnbm8oKSBcdTAwM2U9IDAuXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTYwLSAqIFJldHVybnMgVFJVRSBpZiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgb3BlcmF0ZXMgb24gNjQtYml0LFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9NjM9c3RhdGljIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtODctXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjg4Olx0LyogYXRvbWljcywgc2VlIGluc25fZGVmX3JlZ25vKCkgKi9cbmtlcm5lbC9icGYvZml4dXBzLmMtODktXHRpZiAoY2xhc3MgPT0gQlBGX1NUWCBcdTAwMjZcdTAwMjYgc2l6ZSAhPSBCUEZfRFcpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xMDQ9aW50IGJwZl9pbnNuX2RlZjMyKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuKVxua2VybmVsL2JwZi9maXh1cHMuYy0xMDUte1xua2VybmVsL2JwZi9maXh1cHMuYzoxMDY6XHRpbnQgZHN0X3JlZyA9IGluc25fZGVmX3JlZ25vKGluc24pO1xua2VybmVsL2JwZi9maXh1cHMuYy0xMDctXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz02Mzg9aW50IGJwZl9vcHRfc3VicmVnX3pleHRfbG8zMl9ybmRfaGkzMihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNjYxLVx0XHRpbnNuID0gaW5zbnNbYWRqX2lkeF07XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjY2MjpcdFx0bG9hZF9yZWcgPSBpbnNuX2RlZl9yZWdubyhcdTAwMjZpbnNuKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtNjYzLVx0XHRpZiAoIWF1eFthZGpfaWR4XS56ZXh0X2RzdCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk0MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkFuYWx5emluZyB0aGUgSW5zdHJ1Y3Rpb24gRGVmaW5pdGlvbiBhbmQgQ2FsbGVyKioKCk9rYXksIHNvIGBpbnNuX2RlZl9yZWdub2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGNsb3NlciBpbnNwZWN0aW9uLiBUaGUgcmVsZXZhbnQgY2FsbGVycyBzZWVtIHRvIGJlIGBicGZfaW5zbl9kZWYzMmAgYW5kIGBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzJgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBicGZfaW5zbl9kZWYzMmAgZmlyc3QuIFVuZGVyc3RhbmRpbmcgaG93ICp0aGF0KiBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGlzIHN0YXRpYyB2YXJpYWJsZSBpcyBnb2luZyB0byBiZSBrZXkgdG8gZ3Jhc3BpbmcgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSBhbmQgdGhlIGRhdGEgYmVpbmcgbWFuaXB1bGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pbnNuX2RlZjMyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9maXh1cHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2ZpeHVwcy5jPTYzPXN0YXRpYyBib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwMy0gKi9cbmtlcm5lbC9icGYvZml4dXBzLmM6MTA0OmludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbmtlcm5lbC9icGYvZml4dXBzLmMtMTA1LXtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTIxNT1zdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjI3LVx0ICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyODpcdGRhdGFbb2ZmXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKG5ld19wcm9nLCBpbnNuICYjNDM7IG9mZiAmIzQzOyBjbnQgLSAxKSBcdTAwM2U9IDA7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyOS1cbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzOS1cdFx0ZGF0YVtpXS5zZWVuID0gb2xkX3NlZW47XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjI0MDpcdFx0ZGF0YVtpXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKG5ld19wcm9nLCBpbnNuICYjNDM7IGkpIFx1MDAzZT0gMDtcbmtlcm5lbC9icGYvZml4dXBzLmMtMjQxLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU0MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkJQRiBJbnN0cnVjdGlvbiBBbmFseXNpcyoqCgpPa2F5LCBzbyBgYnBmX2luc25fZGVmMzJgIOKAkyB0aGF0JiMzOTtzIGEgZ2xvYmFsLCByaWdodD8gTGV0IG1lIGp1c3QgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLiBOb3csIEkgbmVlZCB0byBkaWcgaW50byBob3cgdGhpcyBpcyB1c2VkIGFuZCB3aGVyZSBpdCYjMzk7cyB2YWxpZGF0ZWQuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBpbnN0cnVjdGlvbiBhbmQgcG90ZW50aWFsIGF0b21pYyBvcGVyYXRpb25zLCBpcyB0byB6ZXJvIGluIG9uIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGBjaGVja19hdG9taWNfcm13YCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsaWtlbHkgY2FuZGlkYXRlIHRvIGhhbmRsZSB2YWxpZGF0aW9uIGNoZWNrcyByZWxhdGVkIHRvIGFueSByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb25zLCBhbmQgYGJwZl9pbnNuX2RlZjMyYCBpcyBwcm9iYWJseSB0aWVkIGluIHRoZXJlIHNvbWVob3cuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgY29kZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hlY2tfYXRvbWljX3JtdyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjQwMj1zdGF0aWMgaW50IGNoZWNrX3N0b3JlX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MzktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ0MDpzdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDQxLVx0XHRcdCAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY1NjU9c3RhdGljIGludCBjaGVja19hdG9taWMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTc3LVx0Y2FzZSBCUEZfQ01QWENIRzpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NTc4Olx0XHRyZXR1cm4gY2hlY2tfYXRvbWljX3JtdyhlbnYsIGluc24pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY1NzktXHRjYXNlIEJQRl9MT0FEX0FDUTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwMzUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgQXRvbWljIFJNVyBDaGVjayoqCgpPa2F5LCBzbyBJIHNlZSBgY2hlY2tfYXRvbWljX3Jtd2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93IOKAkyBpdCYjMzk7cyBsaWtlbHkgc2NvcGVkIHdpdGhpbiBhIHBhcnRpY3VsYXIgY29tcGlsYXRpb24gdW5pdCBhbmQgbm90IG1lYW50IGZvciBleHRlcm5hbCB1c2UuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgYGNoZWNrX2F0b21pY2AgaXMgdGhlIGNhbGxlci4gVGhhdCBtZWFucyB0aGUgbG9naWMgd2l0aGluIGBjaGVja19hdG9taWNfcm13YCBpcyBpbnZva2VkIGZyb20gd2l0aGluIGBjaGVja19hdG9taWNgLiBTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpZyBpbnRvIGBjaGVja19hdG9taWNgIGl0c2VsZi4gVW5kZXJzdGFuZGluZyAqd2h5KiBpdCBjYWxscyBgY2hlY2tfYXRvbWljX3Jtd2AgYW5kIHdoYXQgaW5wdXRzIGl0JiMzOTtzIHByb3ZpZGluZyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUuIEkgbmVlZCB0byBzZWUgd2hhdCB0aGUgY29udHJvbCBmbG93IGlzLiBUaW1lIHRvIG1vdmUgb24gYW5kIGludmVzdGlnYXRlIHRoYXQgYGNoZWNrX2F0b21pY2AgZnVuY3Rpb24gaW4gbW9yZSBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX2F0b21pYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjQwMj1zdGF0aWMgaW50IGNoZWNrX3N0b3JlX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MzktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ0MDpzdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDQxLVx0XHRcdCAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1MjYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjUyNzpzdGF0aWMgaW50IGNoZWNrX2F0b21pY19sb2FkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjUyOC1cdFx0XHQgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU0NS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NTQ2OnN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3N0b3JlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU0Ny1cdFx0XHQgICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1NjQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjU2NTpzdGF0aWMgaW50IGNoZWNrX2F0b21pYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU2Ni17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1NzctXHRjYXNlIEJQRl9DTVBYQ0hHOlxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1Nzg6XHRcdHJldHVybiBjaGVja19hdG9taWNfcm13KGVudiwgaW5zbik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU3OS1cdGNhc2UgQlBGX0xPQURfQUNROlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTg0LVx0XHR9XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjU4NTpcdFx0cmV0dXJuIGNoZWNrX2F0b21pY19sb2FkKGVudiwgaW5zbik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU4Ni1cdGNhc2UgQlBGX1NUT1JFX1JFTDpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU5MS1cdFx0fVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1OTI6XHRcdHJldHVybiBjaGVja19hdG9taWNfc3RvcmUoZW52LCBpbnNuKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTkzLVx0ZGVmYXVsdDpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTcyMzM9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzI1MC1cdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzI1MTpcdFx0XHRyZXR1cm4gY2hlY2tfYXRvbWljKGVudiwgaW5zbik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyNTItXHRcdHJldHVybiBjaGVja19zdG9yZV9yZWcoZW52LCBpbnNuLCBmYWxzZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTk0CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIEV4ZWN1dGlvbiBQYXRoIG9mIGBjaGVja19hdG9taWNgKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIHN5c3RlbXMgcGVyc3BlY3RpdmUuIEkgc2VlIHRoYXQgYGNoZWNrX2F0b21pY2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IGxvY2FsIHRvIGl0cyBjb21waWxhdGlvbiB1bml0LCBtZWFuaW5nIHdlIHNob3VsZCBiZSBhYmxlIHRvIHJlYXNvbiBhYm91dCBpdHMgdXNhZ2UgaW4gdGhhdCBzcGVjaWZpYyBjb250ZXh0LiBUaGUgaW1tZWRpYXRlIGNhbGxlciBvZiBgY2hlY2tfYXRvbWljYCBpcyBpZGVudGlmaWVkIGFzIGBkb19jaGVja19pbnNuYC4gQW5vdGhlciBzdGF0aWMgZnVuY3Rpb24sIGBkb19jaGVja19pbnNuYCwgaXMgY2FsbGVkIGJ5IGBkb19jaGVja2AsIHdoaWNoIGlzIGFsc28gc3RhdGljLiBGaW5hbGx5LCBgZG9fY2hlY2tgIGl0c2VsZiBpcyBjYWxsZWQgYnkgYGJwZl9jaGVja2AsIHdoaWNoIGlzIGdsb2JhbC4gVGhpcyBtZWFucyBgYnBmX2NoZWNrYCBpcyB0aGUgZW50cnkgcG9pbnQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLgoKTm93LCBiYXNlZCBvbiB0aGlzIGNhbGwgY2hhaW4sIGl0IGlzIGltcG9ydGFudCB0byB0cmFjZSBob3cgYGNoZWNrX2F0b21pY2AgaXMgdXNlZCBhbmQgZW5zdXJlIGl0IGlzIGNvcnJlY3QuIEkgYW0gZ29pbmcgdG8gY2hlY2sgYGFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNgIHRvIHNlZSBob3cgYGJwZl9qaXRfcHJvYmVfYXRvbWljX3ByZWAgaW50ZXJhY3RzIHdpdGggdGhpcyBmbG93LiBVbmRlcnN0YW5kaW5nIHRoZSBgYnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlYCB1c2FnZSBpcyBjcnVjaWFsIGhlcmUsIGFzIGl0IG1pZ2h0IHJlcHJlc2VudCBhbiBpbnRlcmVzdGluZyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb3IgYSBzZWN1cml0eSBtaXRpZ2F0aW9uIGFyb3VuZCBhdG9taWMgaW5zdHJ1Y3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X3Byb2JlX2F0b21pY19wcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9NzYwPXN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTc3Mi1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6NzczOnN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfYXRvbWljX3ByZShzdHJ1Y3QgYnBmX2ppdCAqaml0LFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03NzQtXHRcdFx0XHQgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTk1NT1zdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMTY0Ni0jZGVmaW5lIEVNSVRfQVRPTUlDKG9wMzIsIG9wNjQpIGRvIHtcdFx0XHRcdFx0XFxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MTY0NzpcdGJwZl9qaXRfcHJvYmVfYXRvbWljX3ByZShqaXQsIGluc24sIFx1MDAyNnByb2JlKTtcdFx0XHRcXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0xNjQ4LVx0Lyoge29wMzJ8b3A2NH0geyV3MHwlc3JjfSwlc3JjLG9mZiglYXJlbmEpICovXHRcdFx0XFxcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE2ODYtXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjE2ODc6XHRcdFx0YnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlKGppdCwgaW5zbiwgXHUwMDI2bG9hZF9wcm9iZSk7XG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE2ODgtXHRcdFx0Lyoge2x5fGxnfSAldzAsb2ZmKCVhcmVuYSkgKi9cbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE3MTktXHRcdGNhc2UgQlBGX0NNUFhDSEc6XG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjE3MjA6XHRcdFx0YnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlKGppdCwgaW5zbiwgXHUwMDI2cHJvYmUpO1xuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0xNzIxLVx0XHRcdC8qIDA6IHtjc3l8Y3NnfSAlYjAsJXNyYyxvZmYoJWFyZW5hKSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAxMAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgSklUIENvbXBpbGF0aW9uIEZsb3cqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MgdHJhY2VzIGEgdmVyeSBzcGVjaWZpYyBjaGFpbiBvZiBjYWxscy4gYGJwZl9qaXRfcHJvYmVfYXRvbWljX3ByZWAgaXMgZGVmaW5lZCBhcyBgc3RhdGljYCwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBgYnBmX2ppdF9pbnNuYC4gSW4gdHVybiwgYGJwZl9qaXRfaW5zbmAgaXMgYWxzbyBgc3RhdGljYCwgYW5kIHRoZSBvbmx5IHBsYWNlIGl0IGlzIGNhbGxlZCBpcyB3aXRoaW4gYGJwZl9qaXRfcHJvZ2AuIEZ1cnRoZXIgZG93biB0aGUgbGluZSwgd2UgaGF2ZSB0aGUgYHN0YXRpY2AgZnVuY3Rpb24gYGJwZl9qaXRfcHJvZ2AsIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IGBicGZfaW50X2ppdF9jb21waWxlYC4gTm93LCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgZGVmaW5lZCBhcyBnbG9iYWwsIHNvIGl0IG11c3QgYmUgdGhlIGVudHJ5IHBvaW50IHRvIHRoaXMgd2hvbGUgSklUIGNvbXBpbGF0aW9uIHNlcXVlbmNlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgIHRvIGxvb2sgYXQgaG93IGBicGZfaml0X2VtaXRfaW5zbmAgaXMgdXNlZCBpbiB0aGlzIGNvbXBpbGF0aW9uLiBUaGlzIHNlZW1zIGxpa2UgYSBwcmV0dHkgc3RhbmRhcmQgc3RhdGljIHRvIGdsb2JhbCBwcm9ncmVzc2lvbiwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byBjb25maXJtIEkmIzM5O20gZm9sbG93aW5nIHRoZSBjb3JyZWN0IGNoYWluIG9mIGV2ZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9lbWl0X2luc24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTMyND1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNjAtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzNjE6aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNjItXHRcdCAgICAgIGJvb2wgZXh0cmFfcGFzcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2MTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gQlBGIEpJVCBDb21waWxhdGlvbioqCgpPa2F5LCBzbyBgYnBmX2ppdF9lbWl0X2luc25gIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIGEga2V5IHBpZWNlIGluIHRoaXMgQlBGIEpJVCBwdXp6bGUuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHdoYXQgaW50ZXJhY3RzIHdpdGggaXQuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlc2UgY29yZSBzeW1ib2xzOiBgYnBmX2luc25fZGVmMzJgLCBgZXhfaGFuZGxlcl9icGZgLCBhbmQgYGJwZl9qaXRfZW1pdF9pbnNuYCBpdHNlbGYsIG9mIGNvdXJzZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZXkgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBJJiMzOTttIGdvaW5nIHRvIHNldCBhc2lkZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgYW5kIGBicGZfY2hlY2tgIGZvciBub3c7IHRoZXkgc2VlbSBhIGJpdCB0b28gZ2VuZXJpYy4KCkdpdmVuIHRoYXQgSSYjMzk7bSB3b3JraW5nIHdpdGggQVJNNjQgYXJjaGl0ZWN0dXJlLCBJIHNob3VsZCBhbHNvIGNoZWNrIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGxvY2F0aW5nIHRoZSBgYnVpbGRfaW5zbmAgZnVuY3Rpb24gd2l0aGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYXJjaGl0ZWN0dXJhbCBzcGVjaWZpY3Mgb2YgaG93IHRoZXNlIGluc3RydWN0aW9ucyBhcmUgY29uc3RydWN0ZWQgYW5kIGhhbmRsZWQgd2l0aGluIHRoZSBKSVQgY29tcGlsZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2J1aWxkX2luc24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMjQ3PXN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX3N0b3JlX2ltbShzMzIgaW1tLCBzMTYgYnBmX29mZiwgY29uc3QgdTggdG1wLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyNjQtICovXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMjY1OnN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjY2LVx0XHQgICAgICBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIGV4dHJhX3Bhc3MpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MjAxMj1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBleHRyYV9wYXNzKVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIwMzAtXHRcdGN0eC1cdTAwM2VvZmZzZXRbaV0gPSBjdHgtXHUwMDNlaWR4O1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MjAzMTpcdFx0cmV0ID0gYnVpbGRfaW5zbihlbnYsIGluc24sIGN0eCwgZXh0cmFfcGFzcyk7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMDMyLVx0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzQ2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBKSVQgQ29tcGlsYXRpb24gRmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhpcyBCUEYgSklUIGNvbXBpbGF0aW9uIHdvcmtzLiBSaWdodCwgYGJ1aWxkX2luc25gIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIG9ubHkgdmlzaWJsZSB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIFRoYXQgbWFrZXMgZGVidWdnaW5nIGEgYml0IG1vcmUgZm9jdXNlZCwgd2hpY2ggaXMgZ29vZC4gVGhlIGtleSB0aGluZyBpcyB0aGF0IGBidWlsZF9pbnNuYCBpcyAqY2FsbGVkKiBieSBgYnVpbGRfYm9keWAuIEFuZCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgYGJ1aWxkX2JvZHlgIGlzIGludm9rZWQgYnkgYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBUaGF0IGdpdmVzIG1lIGEgcm91Z2ggaWRlYSBvZiB0aGUgY2FsbCBjaGFpbjogYGJwZl9pbnRfaml0X2NvbXBpbGVgIC0mZ3Q7IGBidWlsZF9ib2R5YCAtJmd0OyBgYnVpbGRfaW5zbmAuCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgY29tcGlsYXRpb24gcHJvY2VzcywgbGV0IG1lIGNoZWNrIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIGhlYWQgb3ZlciB0byBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYGRvX2ppdGAgdGhlcmUsIHRoYXQgdXN1YWxseSBjb250YWlucyB0aGUgY29yZSBKSVQgY29tcGlsYXRpb24gcm91dGluZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnQgZm9yIFg4NiBzcGVjaWZpYyBhc3NlbWJseSBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19qaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE2OTE9c3RhdGljIGludCBlbWl0X2tmdW5jX2FyZW5hX2FyZ3Moc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZyxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTcyOC1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNzI5OnN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNzMwLVx0XHQgIHU4ICpyd19pbWFnZSwgaW50IG9sZHByb2dsZW4sIHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCBib29sIGptcF9wYWRkaW5nKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zOTYyPXN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMzktXHRcdFx0cGFkZGluZyA9IHRydWU7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6NDA0MDpcdFx0cHJvZ2xlbiA9IGRvX2ppdChlbnYsIHByb2csIGFkZHJzLCBpbWFnZSwgcndfaW1hZ2UsIG9sZHByb2dsZW4sXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDA0MS1cdFx0XHRcdCBcdTAwMjZjdHgsIHBhZGRpbmcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA0NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIEpJVCBDb21waWxhdGlvbiBGb2N1cyBTeW1ib2xzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hpY2ggc3ltYm9scyBhcmUgdGhlIG1vc3QgcmVsZXZhbnQgdG8gZm9jdXMgb24gaGVyZSwgY29uc2lkZXJpbmcgYGRvX2ppdGAgaXMgc3RhdGljIGFuZCBjYWxsZWQgYnkgYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBUaGUgaW5pdGlhbCBjYW5kaWRhdGVzIHRoYXQgc3ByaW5nIHRvIG1pbmQgYXJlIGBicGZfaW5zbl9kZWYzMmAsIGBleF9oYW5kbGVyX2JwZmAsIGBicGZfaml0X2VtaXRfaW5zbmAsIGFuZCBgYnBmX2ludF9qaXRfY29tcGlsZWAuCgpMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgYnBmX2ludF9qaXRfY29tcGlsZWAuIFRoYXQgc2VlbXMgbGlrZSBhIHNvbGlkIGNob2ljZSBzaW5jZSBpdCYjMzk7cyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIEpJVCBjb21waWxlciBpdHNlbGYuIGBicGZfY2hlY2tgIGlzIGFsc28gYXBwZWFsaW5nIGFzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpZXIsIHRob3VnaCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBwcm9tcHQmIzM5O3MgcHJlZmVyZW5jZSBmb3Igbm9uLWhvdHBhdGggQVBJIGVudHJ5cG9pbnRzLiBCb3RoIHNlZW0gdG8gZml0IHRoZSBiaWxsIGFzIHRoZXkgYXJlIGNhbGxlZCBvbiBwcm9ncmFtIGxvYWQuCgpMb29raW5nIGNsb3NlciwgSSYjMzk7bGwgZXhhbWluZSB0aGUgY2FsbHMgdG8gdGhlIG90aGVyIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGZ1bmN0aW9uczoKKiAgIGBicGZfaW5zbl9kZWYzMmA6IERpZ2dpbmcgaW50byBga2VybmVsL2JwZi9maXh1cHMuY2AsIHRoaXMgaXMgdXNlZCBpbiBgYWRqdXN0X2luc25fYXV4X2RhdGFgIGFuZCBgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyYC4gQm90aCBvZiB0aG9zZSBhcmUgY2FsbGVkIGZyb20gYGJwZl9jaGVja2AuCiogICBgZXhfaGFuZGxlcl9icGZgOiBDaGVja2luZyBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCBhbmQgYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYCwgdGhpcyBpcyBpbnZvbHZlZCBpbiBleGNlcHRpb24gaGFuZGxpbmcgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiwgc28gaXQmIzM5O3MgY2xlYXJseSByZWxldmFudC4KKiAgIGBicGZfaml0X2VtaXRfaW5zbmA6IFRoaXMgaXMgY2FsbGVkIGJ5IGBicGZfaW50X2ppdF9jb21waWxlYCBpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuCiogICBgYnBmX2ludF9qaXRfY29tcGlsZWA6IEluIGBhcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jYCwgdGhpcyBpcyBhZ2FpbiB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludC4KClNvLCB0aGUgZm9jdXMgc3ltYm9scyBhcmUgZGVmaW5pdGVseTogYGJwZl9pbnNuX2RlZjMyYCwgYGV4X2hhbmRsZXJfYnBmYCwgYGJwZl9qaXRfZW1pdF9pbnNuYCwgYW5kIGBicGZfaW50X2ppdF9jb21waWxlYC4gSSYjMzk7bSBnb2luZyB0byBhZGQgYGJwZl9jaGVja2AgaW4gYXMgd2VsbCBiZWNhdXNlIGl0JiMzOTtzIGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIHRoZSB2ZXJpZmllciwgYW5kIGl0IGxvb2tzIGxpa2UgYSBuYXR1cmFsIGNvbXBhbmlvbiB0byB0aGUgSklUIGNvbXBpbGVyJiMzOTtzIGVudHJ5IHBvaW50LgoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZ2l2ZW4sIG9idmlvdXNseS4gQW5kIGBDT05GSUdfQlBGX0pJVGAgaXMgZXNzZW50aWFsIGZvciB0aGUgSklUIGNvbXBpbGVyIGNoYW5nZXMuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGF0IGBrZXJuZWwvYnBmL0tjb25maWdgIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBlbHNlIGNyaXRpY2FsIHJlbGF0ZWQgdG8gQlBGIHN5c2NhbGxzIGFuZCBKSVQgY29tcGlsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MDAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBCUEYgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGVzZSBCUEYgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkIGluIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGluIHRoZSBtb3JlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmlsZXMuIExldCYjMzk7cyBzZWUsIEJQRiBpcyBwcmV0dHkgZnVuZGFtZW50YWwgbm93LCBzbyBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIGl0cyBjb3JlIGRlZmluaXRpb24gaW4gZWl0aGVyIGBrZXJuZWwvYnBmL0tjb25maWdgIG9yIHBvc3NpYmx5IGV2ZW4gdGhlIG1haW4gaW5pdGlhbGl6YXRpb24gY29uZmlnLCBgaW5pdC9LY29uZmlnYC4gSXQmIzM5O3MgcHJldHR5IGxpa2VseSB0aGF0JiMzOTtsbCBiZSB3aGVyZSBJIGZpbmQgdGhlIG5lY2Vzc2FyeSBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjYyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIEJQRl9KSVQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3RhdHVzIG9mIEJQRiBKSVQgY29tcGlsYXRpb24gd2l0aGluIHRoaXMga2VybmVsIHNldHVwLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoZSBzdGFuZGFyZCBwcmFjdGljZSwgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBmb3IgdGhlIEJQRiBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gaGVhZGluZyB0aGVyZSB0byB2ZXJpZnkgdGhlIGV4aXN0ZW5jZSwgY3VycmVudCBzdGF0ZSwgYW5kIGFueSBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIGBCUEZfSklUYC4gVGhpcyBpcyB0aGUgYmVkcm9jazsgd2l0aG91dCBrbm93aW5nIHRoZSBLY29uZmlnIHNldHRpbmdzLCBJIGNhbiYjMzk7dCBldmVuIGJlZ2luIHRvIHRyb3VibGVzaG9vdCBhbnkgcmVsYXRlZCBpc3N1ZXMgb3Igb3B0aW1pemUgQlBGIHVzYWdlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxua2VybmVsL2JwZi9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjA4NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipDaGVja2luZyBCUEYgQ29uZmlndXJhdGlvbnMgYW5kIEF0b21pYyBPcGVyYXRpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2UgQlBGIGNvbmZpZ3VyYXRpb25zOiBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMsIGJ1dCBJIGFsd2F5cyB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBOb3csIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIG1pZ2h0IGJlIGNvbm5lY3RlZCB0byB0aGUgYXRvbWljIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCBzaW5jZSB0aG9zZSBhcmUgYWx3YXlzIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXJlYS4gSXTigJlzIGEgZ29vZCB0aW1lIHRvIGRvdWJsZS1jaGVjayBpZiBgYnBmX2F0b21pY19sb2FkX3JlZ2AgaXMgYmVpbmcgdXRpbGl6ZWQgYW55d2hlcmUgZWxzZSB3aXRoaW4gdGhlIGNvZGViYXNlLCBiZXlvbmQgdGhlIGltbWVkaWF0ZSBjb250ZXh0IEkmIzM5O20gY3VycmVudGx5IHdvcmtpbmcgaW4uIEJldHRlciB0byBiZSB0aG9yb3VnaCBhbmQgdmVyaWZ5IHRoYXQgdXNhZ2UgcGF0dGVybnMgbWF0Y2ggbXkgY3VycmVudCB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfYXRvbWljX2xvYWRfcmVnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTEyNjU9c3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xOTk0LVx0XHRcdCAqL1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTk5NTpcdFx0XHRpbnQgbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTk5Ni1cbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzNjE9aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMDAxLVx0XHRcdCAqL1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMDAyOlx0XHRcdGludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIwMDMtXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz03NzM9c3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03OTItXHQgKi9cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6NzkzOlx0bG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03OTQtXHRpZiAobG9hZF9yZWcgXHUwMDNlPSAwKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0yMjg1PXN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI0MDAtXHRcdFx0XHRcdCAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI0MDE6XHRcdFx0XHRcdGludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQwMi1cbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTQwOT1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX2F0b21pY19pc19sb2FkX2FjcShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC00MjMtICovXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjQyNDpzdGF0aWMgaW5saW5lIGludCBicGZfYXRvbWljX2xvYWRfcmVnKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNDI1LXtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTQ0PXN0YXRpYyBpbnQgaW5zbl9kZWZfcmVnbm8oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNTEtXHRjYXNlIEJQRl9TVFg6XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjUyOlx0XHRyZXR1cm4gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtNTMtXHRkZWZhdWx0OlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NDQwPXN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3JtdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDkxLVx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ5MjpcdGxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDkzLVx0aWYgKGxvYWRfcmVnIFx1MDAzZT0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzIyOAoJCQkJCQkJb3V0cHV0OiAyMDUKCQkJCQkJCXRob3VnaHRzOiA0NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgQXRvbWljIE9wZXJhdGlvbiBFeGNlcHRpb24gSGFuZGxpbmcgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBidWcgaW4gQlBGIGFyZW5hIGV4Y2VwdGlvbiBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYXRvbWljIG9wZXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgaW1wb3J0YW50IOKAkyBhdG9taWMgb3BlcmF0aW9ucyBhcmUgY3JpdGljYWwgZm9yIGNvbmN1cnJlbmN5IGFuZCBkYXRhIGludGVncml0eSwgYW5kIGEgYnVnIGluIHRoZWlyIGV4Y2VwdGlvbiBoYW5kbGluZyBjb3VsZCBsZWFkIHRvIHNpZ25pZmljYW50IHByb2JsZW1zLgoKSXQgc2VlbXMgdGhlIGlzc3VlIGNlbnRlcnMgYXJvdW5kIHdoYXQgaGFwcGVucyB3aGVuIGFuIGF0b21pYyBpbnN0cnVjdGlvbiBmYXVsdHMuIFRoZSBleGNlcHRpb24gaGFuZGxlciBuZWVkcyB0byBjb3JyZWN0bHkgY2xlYXIgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGluIHRoZXNlIGNhc2VzLiBGb3IgaW5zdHJ1Y3Rpb25zIGxpa2UgYEJQRl9DTVBYQ0hHYCwgaXQmIzM5O3MgYHIwYCwgYW5kIGZvciBgQlBGX0ZFVENIYCwgaXQgaXMgYHNyY19yZWdgLiBUaGUgcGF0Y2ggYXBwYXJlbnRseSB1c2VzIGBicGZfYXRvbWljX2xvYWRfcmVnYCB0byBjb3JyZWN0bHkgaWRlbnRpZnkgdGhlIHJlZ2lzdGVyIHRvIGNsZWFyLCB3aGljaCBzb3VuZHMgcmVhc29uYWJsZS4gSXQgYWxzbyBjb3JyZWN0bHkgbWFya3MgdGhlIGFjY2VzcyBhcyBhIHdyaXRlIGZvciByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb25zLCB3aGljaCBtYWtlcyBzZW5zZS4KCkZ1bmN0aW9uYWxseSwgdGhpcyBpbXBhY3RzIHRoZSBCUEYgSklUIGNvbXBpbGVyIGFuZCB2ZXJpZmllciwgd2hpY2ggaXMgdG8gYmUgZXhwZWN0ZWQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4LiBUaGUgbm90ZXMgaW5kaWNhdGUgaXQgaXMgd29ydGggZnV6emluZywgd2hpY2ggSSBhZ3JlZSB3aXRoIC0gYXRvbWljIG9wZXJhdGlvbnMgYXJlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgZWRnZSBjYXNlcy4KCkkgbmVlZCB0byBkaWcgZGVlcGVyLiBNeSBmb2N1cyBzeW1ib2xzIHdpbGwgYmUgYGJwZl9pbnNuX2RlZjMyYCwgYGV4X2hhbmRsZXJfYnBmYCwgYGJwZl9qaXRfZW1pdF9pbnNuYCwgYGJwZl9pbnRfaml0X2NvbXBpbGVgLCBhbmQgYGJwZl9jaGVja2AuCgpgYnBmX2ludF9qaXRfY29tcGlsZWAgc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgSklUIGNvbXBpbGF0aW9uIGFjcm9zcyBhbGwgYXJjaGl0ZWN0dXJlcywgd2hpY2ggY29uZmlybXMgbXkgdW5kZXJzdGFuZGluZy4gYGV4X2hhbmRsZXJfYnBmYCBpcyBzcGVjaWZpYyB0byB4ODYgYW5kIGFybTY0LCBzbyBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIGBicGZfaW5zbl9kZWYzMmAgaXMgdXNlZCBpbiB0aGUgdmVyaWZpZXIgYW5kIGZpeHVwcywgYW5kIEkgd2lsbCBjaGVjayBpdCBpbiB0aGUgY29udGV4dCBvZiB0aGUgZml4dXBzLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgYGJwZl9pbnNuX2RlZjMyYCBhbmQgcmVsYXRlZCBjYWxscy4gSW4gYGtlcm5lbC9icGYvZml4dXBzLmNgLCBpdCBzZWVtcyBpdCBjYWxscyBgaW5zbl9kZWZfcmVnbm9gLCB3aGljaCB0aGVuIGNhbGxzIGBicGZfYXRvbWljX2xvYWRfcmVnYC4gVGhpcyBjb25maXJtcyB0aGF0IGBicGZfaW5zbl9kZWYzMmAgaXMgYSBnb29kIGNob2ljZSBmb3IgaW52ZXN0aWdhdGlvbi4KCkkmIzM5O2xsIGFsc28gY2hlY2sgYGJwZl9jaGVja2AgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoaXMgaXMgdGhlIG1haW4gdmVyaWZpZXIgZW50cnkgcG9pbnQuIFRoZSBzdGF0aWMgZnVuY3Rpb24gYGNoZWNrX2F0b21pY19ybXdgIGlzIGNhbGxlZCBkdXJpbmcgdmVyaWZpY2F0aW9uLCB3aGljaCBpcyByZWxldmFudCB0byBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2luc25fZGVmMzImIzM0OywKICAgICYjMzQ7ZXhfaGFuZGxlcl9icGYmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9lbWl0X2luc24mIzM0OywKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXJzICh4ODYsIGFybTY0LCByaXNjdiwgczM5MCkgYW5kIHRoZSBCUEYgdmVyaWZpZXIgdG8gY29ycmVjdGx5IGhhbmRsZSBleGNlcHRpb25zIGZvciBhdG9taWMgb3BlcmF0aW9ucyBpbiB0aGUgQlBGIGFyZW5hLiBJdCBpbnRyb2R1Y2VzIGBicGZfYXRvbWljX2xvYWRfcmVnYCB0byBpZGVudGlmeSB0aGUgcmVnaXN0ZXIgdGhhdCBuZWVkcyB0byBiZSBjbGVhcmVkIHdoZW4gYW4gYXRvbWljIGluc3RydWN0aW9uIGZhdWx0cywgYW5kIGVuc3VyZXMgdGhhdCByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb25zIGFyZSBjb3JyZWN0bHkgcmVwb3J0ZWQgYXMgd3JpdGVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQlBGIHN1YnN5c3RlbSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW5zbl9kZWYzMiYjMzQ7LAogICAgJiMzNDtleF9oYW5kbGVyX2JwZiYjMzQ7LAogICAgJiMzNDticGZfaml0X2VtaXRfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlcnMgKHg4NiwgYXJtNjQsIHJpc2N2LCBzMzkwKSBhbmQgdGhlIEJQRiB2ZXJpZmllciB0byBjb3JyZWN0bHkgaGFuZGxlIGV4Y2VwdGlvbnMgZm9yIGF0b21pYyBvcGVyYXRpb25zIGluIHRoZSBCUEYgYXJlbmEuIEl0IGludHJvZHVjZXMgYGJwZl9hdG9taWNfbG9hZF9yZWdgIHRvIGlkZW50aWZ5IHRoZSByZWdpc3RlciB0aGF0IG5lZWRzIHRvIGJlIGNsZWFyZWQgd2hlbiBhbiBhdG9taWMgaW5zdHJ1Y3Rpb24gZmF1bHRzLCBhbmQgZW5zdXJlcyB0aGF0IHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbnMgYXJlIGNvcnJlY3RseSByZXBvcnRlZCBhcyB3cml0ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc3Vic3lzdGVtKSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB0aGUgQlBGIGV4Y2VwdGlvbiBoYW5kbGVyIGZvciBhcmVuYSBhY2Nlc3NlcyB0byBjb3JyZWN0bHkgaWRlbnRpZnkgcmVhZC1tb2RpZnktd3JpdGUgYXRvbWljIG9wZXJhdGlvbnMgKGxpa2UgQlBGX1hDSEcgYW5kIEJQRl9DTVBYQ0hHKSBhcyB3cml0ZXMsIGFuZCB0byBwcm9wZXJseSBjbGVhciB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgKGUuZy4sIEJQRl9SRUdfMCBmb3IgQ01QWENIRykgd2hlbiBhIHBhZ2UgZmF1bHQgb2NjdXJzLiBJZiB0aGUgcmVnaXN0ZXIgaXMgbm90IGNsZWFyZWQsIHRoZSBCUEYgcHJvZ3JhbSBzaW1wbHkgcmV0YWlucyB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhhdCByZWdpc3Rlci4gVGhpcyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSwgbm9yIGRvZXMgaXQgZXhwb3NlIGtlcm5lbCBzdGFjay9oZWFwIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgaXNzdWUgaXMgYSBsb2dpYyBidWcgaW4gQlBGIEpJVCBleGNlcHRpb24gaGFuZGxpbmcsIHdoaWNoIGRvZXMgbm90IGludHJvZHVjZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBCUEYgc2VsZnRlc3RzIChhcyBpbmNsdWRlZCBpbiB0aGUgcGF0Y2gpIGFyZSBzdWZmaWNpZW50IHRvIHZlcmlmeSB0aGUgZml4LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNGFhNzUyMWY4NTgwM2ZkM2ExYmFlMTQ1MTlkYTBhYmRjMWRmMDFmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMDA6MzQ6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IGQxNGQyOTdlYmI5NjcuLjc0YjQwODM3OTFkYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC0xMDgyLDIzICYjNDM7MTA4MiwyNyBAQCBzdGF0aWMgdm9pZCBidWlsZF9lcGlsb2d1ZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIHdhc19jbGFzc2ljKQogICoKICAqIEJpdCBsYXlvdXQgb2YgYGZpeHVwYCAoMzItYml0KToKICAqCi0gKiAmIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzsKLSAqIHwgICAzMS0yNyAgIHwgMjYtMjIgIHwgICAgIDIxICAgIHwgICAyMC0xNiAgIHwgICAxNS0wICAgfAotICogfCAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8Ci0gKiB8IEZJWFVQX1JFRyB8IFVudXNlZCB8IEFSRU5BX0FDQyB8IEFSRU5BX1JFRyB8ICBPRkZTRVQgIHwKLSAqICYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOwomIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOwomIzQzOyAqIHwgICAzMS0yNyAgIHwgMjYtMjMgIHwgICAgICAyMiAgICAgfCAgICAgMjEgICAgfCAgIDIwLTE2ICAgfCAgIDE1LTAgICB8CiYjNDM7ICogfCAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwKJiM0MzsgKiB8IEZJWFVQX1JFRyB8IFVudXNlZCB8IEFSRU5BX1dSSVRFIHwgQVJFTkFfQUNDIHwgQVJFTkFfUkVHIHwgIE9GRlNFVCAgfAomIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOwogICoKICAqIC0gT0ZGU0VUICgxNiBiaXRzKTogT2Zmc2V0IHVzZWQgdG8gY29tcHV0ZSBhZGRyZXNzIGZvciBMb2FkL1N0b3JlIGluc3RydWN0aW9uLgogICogLSBBUkVOQV9SRUcgKDUgYml0cyk6IFJlZ2lzdGVyIHRoYXQgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGFkZHJlc3MgZm9yIGxvYWQvc3RvcmUgd2hlbgogICogICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc2luZyB0aGUgYXJlbmEgcmVnaW9uLgogICogLSBBUkVOQV9BQ0NFU1MgKDEgYml0KTogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIGFjY2Vzc2VkIHRoZSBhcmVuYSByZWdpb24uCiYjNDM7ICogLSBBUkVOQV9XUklURSAoMSBiaXQpOiBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24gd3JvdGUgdG8gdGhlIGFyZW5hIHJlZ2lvbi4KJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIGluZGVwZW5kZW50IG9mIEZJWFVQX1JFRywgc2luY2UgYSByZWFkLW1vZGlmeS13cml0ZSBib3RoIHdyaXRlcyB0bwomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5IGFuZCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gYSByZWdpc3Rlci4KICAqIC0gRklYVVBfUkVHICg1IGJpdHMpOiBEZXN0aW5hdGlvbiByZWdpc3RlciBmb3IgdGhlIGxvYWQgaW5zdHJ1Y3Rpb24gKGNsZWFyZWQgb24gZmF1bHQpIG9yIHNldCB0bwotICogICAgICAgICAgICAgICAgICAgICAgIERPTlRfQ0xFQVIgaWYgaXQgaXMgYSBzdG9yZSBpbnN0cnVjdGlvbi4KJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgRE9OVF9DTEVBUiBpZiB0aGUgaW5zdHJ1Y3Rpb24gZG9lcyBub3QgcmVhZCBpbnRvIGEgcmVnaXN0ZXIuCiAgKi8KIAogI2RlZmluZSBCUEZfRklYVVBfT0ZGU0VUX01BU0sgICAgICBHRU5NQVNLKDE1LCAwKQogI2RlZmluZSBCUEZfRklYVVBfQVJFTkFfUkVHX01BU0sgICBHRU5NQVNLKDIwLCAxNikKICNkZWZpbmUgQlBGX0FSRU5BX0FDQ0VTUyAgICAgICAgICAgQklUKDIxKQomIzQzOyNkZWZpbmUgQlBGX0FSRU5BX1dSSVRFICAgICAgICAgICAgQklUKDIyKQogI2RlZmluZSBCUEZfRklYVVBfUkVHX01BU0sJR0VOTUFTSygzMSwgMjcpCiAjZGVmaW5lIERPTlRfQ0xFQVIgNSAvKiBVbnVzZWQgQVJNNjQgcmVnaXN0ZXIgZnJvbSBCUEYmIzM5O3MgUE9WICovCiAKQEAgLTExMDksNyAmIzQzOzExMTMsNyBAQCBib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LAogCXMxNiBvZmYgPSBGSUVMRF9HRVQoQlBGX0ZJWFVQX09GRlNFVF9NQVNLLCBleC0mZ3Q7Zml4dXApOwogCWludCBhcmVuYV9yZWcgPSBGSUVMRF9HRVQoQlBGX0ZJWFVQX0FSRU5BX1JFR19NQVNLLCBleC0mZ3Q7Zml4dXApOwogCWJvb2wgaXNfYXJlbmEgPSAhIShleC0mZ3Q7Zml4dXAgJmFtcDsgQlBGX0FSRU5BX0FDQ0VTUyk7Ci0JYm9vbCBpc193cml0ZSA9IChkc3RfcmVnID09IERPTlRfQ0xFQVIpOwomIzQzOwlib29sIGlzX3dyaXRlID0gISEoZXgtJmd0O2ZpeHVwICZhbXA7IEJQRl9BUkVOQV9XUklURSk7CiAJdW5zaWduZWQgbG9uZyBhZGRyOwogCiAJaWYgKGlzX2FyZW5hKSB7CkBAIC0xMTMyLDcgJiM0MzsxMTM2LDcgQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLAogewogCW9mZl90IGluc19vZmZzZXQ7CiAJczE2IG9mZiA9IGluc24tJmd0O29mZjsKLQlib29sIGlzX2FyZW5hOwomIzQzOwlib29sIGlzX2FyZW5hLCBpc193cml0ZTsKIAlpbnQgYXJlbmFfcmVnOwogCXVuc2lnbmVkIGxvbmcgcGM7CiAJc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXg7CkBAIC0xMTgxLDE1ICYjNDM7MTE4NSwxOCBAQCBzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJLyoKIAkgKiBBIGxvYWQtYWNxdWlyZSBpcyBvZiBCUEZfU1RYIGNsYXNzLCBidXQgcmVhZHMgZnJvbSBzcmNfcmVnIGludG8KIAkgKiBkc3RfcmVnIGxpa2UgYSBCUEZfTERYIGRvZXMsIGhlbmNlIGl0IG11c3Qgbm90IGJlIHRyZWF0ZWQgYXMgYSBzdG9yZQotCSAqIGhlcmUuCiYjNDM7CSAqIGhlcmUuIEEgcmVhZC1tb2RpZnktd3JpdGUgY2FycnlpbmcgQlBGX0ZFVENIIGlzIHJlcG9ydGVkIGFzIGEgd3JpdGUKJiM0MzsJICogZXZlbiB0aG91Z2ggaXQgZG9lcyBoYXZlIGEgcmVnaXN0ZXIgdG8gY2xlYXIsIHNlZSB0aGUgY2FsbGVycy4KIAkgKi8KLQlpZiAoQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpICE9IEJQRl9MRFggJmFtcDsmYW1wOyAhYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSkKLQkJZHN0X3JlZyA9IERPTlRfQ0xFQVI7CiYjNDM7CWlzX3dyaXRlID0gQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpICE9IEJQRl9MRFggJmFtcDsmYW1wOwomIzQzOwkJICAgIWJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbik7CiAKIAlleC0mZ3Q7Zml4dXAgPSBGSUVMRF9QUkVQKEJQRl9GSVhVUF9SRUdfTUFTSywgZHN0X3JlZyk7CiAKIAlpZiAoaXNfYXJlbmEpIHsKIAkJZXgtJmd0O2ZpeHVwIHw9IEJQRl9BUkVOQV9BQ0NFU1M7CiYjNDM7CQlpZiAoaXNfd3JpdGUpCiYjNDM7CQkJZXgtJmd0O2ZpeHVwIHw9IEJQRl9BUkVOQV9XUklURTsKIAkJLyoKIAkJICogaW5zbi0mZ3Q7c3JjX3JlZy9kc3RfcmVnIGhvbGRzIHRoZSBhZGRyZXNzIGluIHRoZSBhcmVuYSByZWdpb24gd2l0aCB1cHBlciAzMi1iaXRzCiAJCSAqIGJlaW5nIHplcm8gYmVjYXVzZSBvZiBhIHByZWNlZGluZyBhZGRyX3NwYWNlX2Nhc3QociZsdDtuJmd0OywgMHgwLCAweDEpIGluc3RydWN0aW9uLgpAQCAtMTg4OSw3ICYjNDM7MTg5Niw3IEBAIHN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24KIAkJCWJyZWFrOwogCQl9CiAKLQkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgZHN0KTsKJiM0MzsJCXJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIERPTlRfQ0xFQVIpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAkJYnJlYWs7CkBAIC0xOTU2LDcgJiM0MzsxOTYzLDcgQEAgc3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbgogCQkJYnJlYWs7CiAJCX0KIAotCQlyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgY3R4LCBkc3QpOwomIzQzOwkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgRE9OVF9DTEVBUik7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCQlicmVhazsKQEAgLTE5NzksNyAmIzQzOzE5ODYsMTYgQEAgc3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbgogCQkJcmV0dXJuIHJldDsKIAogCQlpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1BST0JFX0FUT01JQykgewotCQkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgZHN0KTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgbG9hZC1hY3F1aXJlIHJlYWRzIGludG8gZHN0X3JlZywgYW5kIGEgcmVhZC1tb2RpZnktd3JpdGUKJiM0MzsJCQkgKiBjYXJyeWluZyBCUEZfRkVUQ0ggcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIHNyY19yZWcsIG9yIGludG8KJiM0MzsJCQkgKiByMCBmb3IgYSBCUEZfQ01QWENIRy4gQ2xlYXIgdGhhdCByZWdpc3RlciBvbiBmYXVsdCwgdGhlCiYjNDM7CQkJICogcmVtYWluaW5nIGF0b21pY3MgaGF2ZSBubyBkZXN0aW5hdGlvbiByZWdpc3Rlci4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpbnQgbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pOwomIzQzOwomIzQzOwkJCXJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGxvYWRfcmVnICZsdDsgMCA/CiYjNDM7CQkJCQkJICAgIERPTlRfQ0xFQVIgOiBicGYyYTY0W2xvYWRfcmVnXSk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCmluZGV4IDZiOTk3MmIwN2MxYjAuLjI1MDRkZjFmYTExMTggMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYwpAQCAtMTk5MiwxMCAmIzQzOzE5OTIsMTkgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsCiAJCQlyZXQgPSBlbWl0X2F0b21pY19ybXcocmQsIHJzLCBpbnNuLCBjdHgpOwogCiAJCS8qIHJldCBjYW4gYmUgMSAoc2tpcC16ZXh0KTsgZXh0YWJsZSBlbnRyeSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZCAqLwotCQlpZiAocmV0ICZndDs9IDApCi0JCQlyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwKLQkJCQlicGZfYXRvbWljX2lzX2xvYWRfYWNxKGluc24pID8gcmQgOiBSRUdfRE9OVF9DTEVBUl9NQVJLRVIsCi0JCQkJY3R4KSA/OiByZXQ7CiYjNDM7CQlpZiAocmV0ICZndDs9IDApIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgbG9hZC1hY3F1aXJlIHJlYWRzIGludG8gZHN0X3JlZywgYW5kIGEgcmVhZC1tb2RpZnktd3JpdGUKJiM0MzsJCQkgKiBjYXJyeWluZyBCUEZfRkVUQ0ggcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIHNyY19yZWcsIG9yIGludG8KJiM0MzsJCQkgKiByMCBmb3IgYSBCUEZfQ01QWENIRy4gQ2xlYXIgdGhhdCByZWdpc3RlciBvbiBmYXVsdCwgdGhlCiYjNDM7CQkJICogcmVtYWluaW5nIGF0b21pY3MgaGF2ZSBubyBkZXN0aW5hdGlvbiByZWdpc3Rlci4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpbnQgbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pOwomIzQzOwomIzQzOwkJCXJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBsb2FkX3JlZyAmbHQ7IDAgPwomIzQzOwkJCQkJUkVHX0RPTlRfQ0xFQVJfTUFSS0VSIDogcmVnbWFwW2xvYWRfcmVnXSwKJiM0MzsJCQkJCWN0eCkgPzogcmV0OwomIzQzOwkJfQogCiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMKaW5kZXggYjYwODc3NDc4YjQ1ZC4uYzQ2ODcyYjA3MWNlNyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC03NzQsNiAmIzQzOzc3NCw4IEBAIHN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfYXRvbWljX3ByZShzdHJ1Y3QgYnBmX2ppdCAqaml0LAogCQkJCSAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQkJCSAgICAgc3RydWN0IGJwZl9qaXRfcHJvYmUgKnByb2JlKQogewomIzQzOwlpbnQgbG9hZF9yZWc7CiYjNDM7CiAJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9QUk9CRV9BVE9NSUMpCiAJCXJldHVybjsKIApAQCAtNzgzLDYgJiM0Mzs3ODUsMTQgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsCiAJRU1JVDQoMHhiOTA4MDAwMCwgUkVHX1cxLCBpbnNuLSZndDtkc3RfcmVnKTsKIAlwcm9iZS0mZ3Q7YXJlbmFfcmVnID0gUkVHX1cxOwogCXByb2JlLSZndDtwcmcgPSBqaXQtJmd0O3ByZzsKJiM0MzsJLyoKJiM0MzsJICogQSByZWFkLW1vZGlmeS13cml0ZSBjYXJyeWluZyBCUEZfRkVUQ0ggcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvCiYjNDM7CSAqIHNyY19yZWcsIG9yIGludG8gcjAgZm9yIGEgQlBGX0NNUFhDSEcuIENsZWFyIHRoYXQgcmVnaXN0ZXIgb24KJiM0MzsJICogZmF1bHQsIHRoZSByZW1haW5pbmcgYXRvbWljcyBvbmx5IHdyaXRlIG1lbW9yeS4KJiM0MzsJICovCiYjNDM7CWxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTsKJiM0MzsJaWYgKGxvYWRfcmVnICZndDs9IDApCiYjNDM7CQlwcm9iZS0mZ3Q7cmVnID0gcmVnMmhleFtsb2FkX3JlZ107CiB9CiAKIHN0YXRpYyBpbnQgYnBmX2ppdF9wcm9iZV9wb3N0KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsCkBAIC0xNjg0LDYgJiM0MzsxNjk0LDcgQEAgc3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCwKIAkJCWlmIChsb2FkX3Byb2JlLnByZyAhPSAtMSkgewogCQkJCXByb2JlLnByZyA9IGppdC0mZ3Q7cHJnOwogCQkJCXByb2JlLmFyZW5hX3JlZyA9IGxvYWRfcHJvYmUuYXJlbmFfcmVnOwomIzQzOwkJCQlwcm9iZS5yZWcgPSBsb2FkX3Byb2JlLnJlZzsKIAkJCX0KIAkJCWxvb3Bfc3RhcnQgPSBqaXQtJmd0O3ByZzsKIAkJCS8qIDA6IHtjc3l8Y3NnfSAldzAsJXNyYyxvZmYoJWFyZW5hKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IDhkZGRiNWQ3YWYyMWIuLmQ5MjA3NzJhZjdkNWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTE0NzMsMTcgJiM0MzsxNDczLDIwIEBAIHN0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3RfaW5kZXgodTggKipwcHJvZywgdTMyIGF0b21pY19vcCwgdTMyIHNpemUsCiAgKgogICogQml0IGxheW91dCBvZiBgZml4dXBgICgzMi1iaXQpOgogICoKLSAqICYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzsKLSAqIHwgMzEgICAgICAgIHwgMzAtMjQgIHwgICAyMy0xNiAgIHwgICAxNS04ICB8ICAgIDctMCAgIHwKLSAqIHwgICAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgIHwKLSAqIHwgQVJFTkFfQUNDIHwgVW51c2VkIHwgQVJFTkFfUkVHIHwgRFNUX1JFRyB8IElOU05fTEVOIHwKLSAqICYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzsKJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7CiYjNDM7ICogfCAzMSAgICAgICAgfCAzMCAgICAgICAgICB8IDI5LTI0ICB8ICAgMjMtMTYgICB8ICAgMTUtOCAgfCAgICA3LTAgICB8CiYjNDM7ICogfCAgICAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICB8CiYjNDM7ICogfCBBUkVOQV9BQ0MgfCBBUkVOQV9XUklURSB8IFVudXNlZCB8IEFSRU5BX1JFRyB8IERTVF9SRUcgfCBJTlNOX0xFTiB8CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOwogICoKICAqIC0gSU5TTl9MRU4gKDggYml0cyk6IExlbmd0aCBvZiBmYXVsdGluZyBpbnNuIChtYXggeDg2IGluc24gPSAxNSBieXRlcyAoZml0cyBpbiA4IGJpdHMpKS4KICAqIC0gRFNUX1JFRyAgKDggYml0cyk6IE9mZnNldCBvZiBkc3RfcmVnIGZyb20gcmVnMnB0X3JlZ3NbXSAobWF4IG9mZnNldCA9IDExMiAoZml0cyBpbiA4IGJpdHMpKS4KLSAqICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgc2V0IHRvIERPTlRfQ0xFQVIgaWYgdGhlIGluc24gaXMgYSBzdG9yZS4KJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHNldCB0byBET05UX0NMRUFSIGlmIHRoZSBpbnNuIGRvZXMgbm90IHJlYWQgaW50byBhIHJlZ2lzdGVyLgogICogLSBBUkVOQV9SRUcgKDggYml0cyk6IE9mZnNldCBvZiB0aGUgcmVnaXN0ZXIgdGhhdCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUKICAqICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzIGZvciBsb2FkL3N0b3JlIHdoZW4gYWNjZXNzaW5nIHRoZSBhcmVuYSByZWdpb24uCiYjNDM7ICogLSBBUkVOQV9XUklURSAoMSBiaXQpOiBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24gd3JvdGUgdG8gdGhlIGFyZW5hIHJlZ2lvbi4KJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIGluZGVwZW5kZW50IG9mIERTVF9SRUcsIHNpbmNlIGEgcmVhZC1tb2RpZnktd3JpdGUgYm90aCB3cml0ZXMgdG8KJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSBhbmQgcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIGEgcmVnaXN0ZXIuCiAgKiAtIEFSRU5BX0FDQ0VTUyAoMSBiaXQpOiBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24gYWNjZXNzZWQgdGhlIGFyZW5hIHJlZ2lvbi4KICAqCiAgKiBCaXQgbGF5b3V0IG9mIGBkYXRhYCAoMzItYml0KToKQEAgLTE1MDIsNiAmIzQzOzE1MDUsNyBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX2xkX3N0X2luZGV4KHU4ICoqcHByb2csIHUzMiBhdG9taWNfb3AsIHUzMiBzaXplLAogI2RlZmluZSBGSVhVUF9JTlNOX0xFTl9NQVNLCUdFTk1BU0soNywgMCkKICNkZWZpbmUgRklYVVBfUkVHX01BU0sJCUdFTk1BU0soMTUsIDgpCiAjZGVmaW5lIEZJWFVQX0FSRU5BX1JFR19NQVNLCUdFTk1BU0soMjMsIDE2KQomIzQzOyNkZWZpbmUgRklYVVBfQVJFTkFfV1JJVEUJQklUKDMwKQogI2RlZmluZSBGSVhVUF9BUkVOQV9BQ0NFU1MJQklUKDMxKQogI2RlZmluZSBEQVRBX0FSRU5BX09GRlNFVF9NQVNLCUdFTk1BU0soMzEsIDE2KQogCkBAIC0xNTEwLDcgJiM0MzsxNTE0LDcgQEAgYm9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICp4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIAl1MzIgcmVnID0gRklFTERfR0VUKEZJWFVQX1JFR19NQVNLLCB4LSZndDtmaXh1cCk7CiAJdTMyIGluc25fbGVuID0gRklFTERfR0VUKEZJWFVQX0lOU05fTEVOX01BU0ssIHgtJmd0O2ZpeHVwKTsKIAlib29sIGlzX2FyZW5hID0gISEoeC0mZ3Q7Zml4dXAgJmFtcDsgRklYVVBfQVJFTkFfQUNDRVNTKTsKLQlib29sIGlzX3dyaXRlID0gKHJlZyA9PSBET05UX0NMRUFSKTsKJiM0MzsJYm9vbCBpc193cml0ZSA9ICEhKHgtJmd0O2ZpeHVwICZhbXA7IEZJWFVQX0FSRU5BX1dSSVRFKTsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJczE2IG9mZjsKIAl1MzIgYXJlbmFfcmVnOwpAQCAtMjM0OCw2ICYjNDM7MjM1Miw3IEBAIHN0OgkJCWluc25fb2ZmID0gaW5zbi0mZ3Q7b2ZmOwogCQkJCXN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4OwogCQkJCXU4ICpfaW5zbiA9IGltYWdlICYjNDM7IHByb2dsZW4gJiM0MzsgKHN0YXJ0X29mX2xkeCAtIHRlbXApOwogCQkJCXUzMiBhcmVuYV9yZWcsIGZpeHVwX3JlZzsKJiM0MzsJCQkJYm9vbCBpc193cml0ZTsKIAkJCQlzNjQgZGVsdGE7CiAKIAkJCQlpZiAoIWJwZl9wcm9nLSZndDthdXgtJmd0O2V4dGFibGUpCkBAIC0yMzg0LDE1ICYjNDM7MjM4OSwyOSBAQCBzdDoJCQlpbnNuX29mZiA9IGluc24tJmd0O29mZjsKIAkJCQkgICAgYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSkgewogCQkJCQlhcmVuYV9yZWcgPSByZWcycHRfcmVnc1tzcmNfcmVnXTsKIAkJCQkJZml4dXBfcmVnID0gcmVnMnB0X3JlZ3NbZHN0X3JlZ107CiYjNDM7CQkJCQlpc193cml0ZSA9IGZhbHNlOwogCQkJCX0gZWxzZSB7CiYjNDM7CQkJCQkvKgomIzQzOwkJCQkJICogQSBzdG9yZSBoYXMgbm8gZGVzdGluYXRpb24gcmVnaXN0ZXIgdG8gY2xlYXIsCiYjNDM7CQkJCQkgKiBleGNlcHQgZm9yIGEgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCBCUEZfRkVUQ0gsCiYjNDM7CQkJCQkgKiB3aGljaCBhbHNvIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBzcmNfcmVnLCBvcgomIzQzOwkJCQkJICogaW50byByMCBmb3IgYSBCUEZfQ01QWENIRy4gRWl0aGVyIHdheSB0aGUgYWNjZXNzCiYjNDM7CQkJCQkgKiBpcyBzdGlsbCByZXBvcnRlZCBhcyBhIHdyaXRlLgomIzQzOwkJCQkJICovCiYjNDM7CQkJCQlpbnQgbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pOwomIzQzOwogCQkJCQlhcmVuYV9yZWcgPSByZWcycHRfcmVnc1tkc3RfcmVnXTsKLQkJCQkJZml4dXBfcmVnID0gRE9OVF9DTEVBUjsKJiM0MzsJCQkJCWZpeHVwX3JlZyA9IGxvYWRfcmVnICZsdDsgMCA/IERPTlRfQ0xFQVIgOgomIzQzOwkJCQkJCSAgICByZWcycHRfcmVnc1tsb2FkX3JlZ107CiYjNDM7CQkJCQlpc193cml0ZSA9IHRydWU7CiAJCQkJfQogCiAJCQkJZXgtJmd0O2ZpeHVwID0gRklFTERfUFJFUChGSVhVUF9JTlNOX0xFTl9NQVNLLCBwcm9nIC0gc3RhcnRfb2ZfbGR4KSB8CiAJCQkJCSAgICBGSUVMRF9QUkVQKEZJWFVQX0FSRU5BX1JFR19NQVNLLCBhcmVuYV9yZWcpIHwKIAkJCQkJICAgIEZJRUxEX1BSRVAoRklYVVBfUkVHX01BU0ssIGZpeHVwX3JlZyk7CiAJCQkJZXgtJmd0O2ZpeHVwIHw9IEZJWFVQX0FSRU5BX0FDQ0VTUzsKJiM0MzsJCQkJaWYgKGlzX3dyaXRlKQomIzQzOwkJCQkJZXgtJmd0O2ZpeHVwIHw9IEZJWFVQX0FSRU5BX1dSSVRFOwogCiAJCQkJZXgtJmd0O2RhdGEgfD0gRklFTERfUFJFUChEQVRBX0FSRU5BX09GRlNFVF9NQVNLLCBpbnNuLSZndDtvZmYpOwogCQkJfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKaW5kZXggNGVkYmE4MTgyZGIxYi4uMTVkODM2ODRjNmU5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCkBAIC00MTQsNiAmIzQzOzQxNCwzMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX2F0b21pY19pc19sb2FkX2FjcShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiAJICAgICAgIGluc24tJmd0O2ltbSA9PSBCUEZfTE9BRF9BQ1E7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEdpdmVuIGFuIGluc3RydWN0aW9uIEBpbnNuLCByZXR1cm4gdGhlIG51bWJlciBvZiB0aGUgQlBGIHJlZ2lzdGVyIHRoYXQgYQomIzQzOyAqIEJQRl9BVE9NSUMgcmVhZHMgdGhlIHZhbHVlIGF0IGl0cyBtZW1vcnkgb3BlcmFuZCBpbnRvLCBvciAtMSBpZiB0aGVyZSBpcwomIzQzOyAqIG5vIHN1Y2ggcmVnaXN0ZXIuIFRoYXQgaXMgdGhlIHJlZ2lzdGVyIGEgQlBGX1BST0JFX0FUT01JQyBoYXMgdG8gY2xlYXIgd2hlbgomIzQzOyAqIHRoZSBhY2Nlc3MgZmF1bHRzLiBMaWtlIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoKSwgQGluc24gaXMgbm90IGFzc3VtZWQgdG8KJiM0MzsgKiBiZSBhIEJQRl9BVE9NSUMgaGVyZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBicGZfYXRvbWljX2xvYWRfcmVnKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbikKJiM0Mzt7CiYjNDM7CWlmIChCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX1NUWCB8fAomIzQzOwkgICAgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9BVE9NSUMgJmFtcDsmYW1wOwomIzQzOwkgICAgIEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9QUk9CRV9BVE9NSUMpKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlzd2l0Y2ggKGluc24tJmd0O2ltbSkgewomIzQzOwljYXNlIEJQRl9MT0FEX0FDUToKJiM0MzsJCXJldHVybiBpbnNuLSZndDtkc3RfcmVnOwomIzQzOwljYXNlIEJQRl9DTVBYQ0hHOgomIzQzOwkJcmV0dXJuIEJQRl9SRUdfMDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAoaW5zbi0mZ3Q7aW1tICZhbXA7IEJQRl9GRVRDSCkgPyBpbnNuLSZndDtzcmNfcmVnIDogLTE7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKiBNZW1vcnkgc3RvcmUsICoodWludCAqKSAoZHN0X3JlZyAmIzQzOyBvZmYxNikgPSBpbW0zMiAqLwogCiAjZGVmaW5lIEJQRl9TVF9NRU0oU0laRSwgRFNULCBPRkYsIElNTSkJCQkJXApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmMKaW5kZXggNjYxZTJkMTNhNjA0Mi4uYzRiZDcwYmVmYmI1YyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9maXh1cHMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCkBAIC00OSwxNiAmIzQzOzQ5LDcgQEAgc3RhdGljIGludCBpbnNuX2RlZl9yZWdubyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiAJY2FzZSBCUEZfU1Q6CiAJCXJldHVybiAtMTsKIAljYXNlIEJQRl9TVFg6Ci0JCWlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfQVRPTUlDIHx8Ci0JCSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfQVRPTUlDKSB7Ci0JCQlpZiAoaW5zbi0mZ3Q7aW1tID09IEJQRl9DTVBYQ0hHKQotCQkJCXJldHVybiBCUEZfUkVHXzA7Ci0JCQllbHNlIGlmIChpbnNuLSZndDtpbW0gPT0gQlBGX0xPQURfQUNRKQotCQkJCXJldHVybiBpbnNuLSZndDtkc3RfcmVnOwotCQkJZWxzZSBpZiAoaW5zbi0mZ3Q7aW1tICZhbXA7IEJQRl9GRVRDSCkKLQkJCQlyZXR1cm4gaW5zbi0mZ3Q7c3JjX3JlZzsKLQkJfQotCQlyZXR1cm4gLTE7CiYjNDM7CQlyZXR1cm4gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gaW5zbi0mZ3Q7ZHN0X3JlZzsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggYWRkM2FmZmM1NzAzNS4uNzNhMmU4YmIxNzgyYSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtNjQ4NSwyMSAmIzQzOzY0ODUsMTYgQEAgc3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCXJldHVybiAtRUFDQ0VTOwogCX0KIAotCWlmIChpbnNuLSZndDtpbW0gJmFtcDsgQlBGX0ZFVENIKSB7Ci0JCWlmIChpbnNuLSZndDtpbW0gPT0gQlBGX0NNUFhDSEcpCi0JCQlsb2FkX3JlZyA9IEJQRl9SRUdfMDsKLQkJZWxzZQotCQkJbG9hZF9yZWcgPSBpbnNuLSZndDtzcmNfcmVnOwotCiYjNDM7CS8qCiYjNDM7CSAqIEEgbmVnYXRpdmUgbG9hZF9yZWcgbWVhbnMgdGhhdCB0aGlzIGluc3RydWN0aW9uIGFjY2Vzc2VzIGEgbWVtb3J5CiYjNDM7CSAqIGxvY2F0aW9uIGJ1dCBkb2VzbiYjMzk7dCBhY3R1YWxseSBsb2FkIGl0IGludG8gYSByZWdpc3Rlci4KJiM0MzsJICovCiYjNDM7CWxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTsKJiM0MzsJaWYgKGxvYWRfcmVnICZndDs9IDApIHsKIAkJLyogY2hlY2sgYW5kIHJlY29yZCBsb2FkIG9mIG9sZCB2YWx1ZSAqLwogCQllcnIgPSBjaGVja19yZWdfYXJnKGVudiwgbG9hZF9yZWcsIERTVF9PUCk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwotCX0gZWxzZSB7Ci0JCS8qIFRoaXMgaW5zdHJ1Y3Rpb24gYWNjZXNzZXMgYSBtZW1vcnkgbG9jYXRpb24gYnV0IGRvZXNuJiMzOTt0Ci0JCSAqIGFjdHVhbGx5IGxvYWQgaXQgaW50byBhIHJlZ2lzdGVyLgotCQkgKi8KLQkJbG9hZF9yZWcgPSAtMTsKIAl9CiAKIAlkc3RfcmVnID0gY3VyX3JlZ3MoZW52KSAmIzQzOyBpbnNuLSZndDtkc3RfcmVnOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYwppbmRleCAxNWRkM2FlMmE4NGI3Li5lNGU5Mzc0MzA5ZTI2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYwpAQCAtMTA1LDYgJiM0MzsxMDUsMTAgQEAgdm9pZCB0ZXN0X3N0cmVhbV9hcmVuYV9mYXVsdF9hZGRyZXNzKHZvaWQpCiAJCXRlc3RfYWRkcmVzcyhza2VsLSZndDtwcm9ncy5zdHJlYW1fYXJlbmFfd3JpdGVfZmF1bHQsICZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtmYXVsdF9hZGRyKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2xvYWRfYWNxdWlyZV9mYXVsdCYjMzQ7KSkKIAkJdGVzdF9hZGRyZXNzKHNrZWwtJmd0O3Byb2dzLnN0cmVhbV9hcmVuYV9sb2FkX2FjcXVpcmVfZmF1bHQsICZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtmYXVsdF9hZGRyKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt4Y2hnX2ZhdWx0JiMzNDspKQomIzQzOwkJdGVzdF9hZGRyZXNzKHNrZWwtJmd0O3Byb2dzLnN0cmVhbV9hcmVuYV94Y2hnX2ZhdWx0LCAmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7ZmF1bHRfYWRkcik7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7Y21weGNoZ19mYXVsdCYjMzQ7KSkKJiM0MzsJCXRlc3RfYWRkcmVzcyhza2VsLSZndDtwcm9ncy5zdHJlYW1fYXJlbmFfY21weGNoZ19mYXVsdCwgJmFtcDtza2VsLSZndDtic3MtJmd0O2ZhdWx0X2FkZHIpOwogCiAJc3RyZWFtX19kZXN0cm95KHNrZWwpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jCmluZGV4IGNmNTUzM2UxMWYzOWMuLjAwYTM3OTMzZTQxMWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMKQEAgLTIyOSw2ICYjNDM7MjI5LDEwNyBAQCBpbnQgc3RyZWFtX2FyZW5hX2xvYWRfYWNxdWlyZV9mYXVsdCh2b2lkICpjdHgpCiAJcmV0dXJuIHZhbDsKIH0KIAomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApCiYjNDM7X19zdGRlcnIoJiMzNDtFUlJPUjogQXJlbmEgV1JJVEUgYWNjZXNzIGF0IHVubWFwcGVkIGFkZHJlc3MgMHh7ey4qfX0mIzM0OykKJiM0MztfX3N0ZGVycigmIzM0O0NQVToge3tbMC05XSYjNDM7fX0gVUlEOiAwIFBJRDoge3tbMC05XSYjNDM7fX0gQ29tbToge3suKn19JiMzNDspCiYjNDM7X19zdGRlcnIoJiMzNDtDYWxsIHRyYWNlOlxuJiMzNDsKJiM0MzsmIzM0O3t7KFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCYjNDM7MHhbMC05YS1mQS1GXSYjNDM7LzB4WzAtOWEtZkEtRl0mIzQzO1xuJiMzNDsKJiM0MzsmIzM0O3xbIFx0XSYjNDM7W15cbl0mIzQzO1xuKSp9fSYjMzQ7KQomIzQzO2ludCBzdHJlYW1fYXJlbmFfeGNoZ19mYXVsdCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pbnNuIHhjaGdfaW5zbiA9IHsKJiM0MzsJCS5jb2RlCSA9IDB4YzMsCS8qIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1cgKi8KJiM0MzsJCS5kc3RfcmVnID0gMSwJCS8qIEJQRl9SRUdfMSAqLwomIzQzOwkJLnNyY19yZWcgPSAyLAkJLyogQlBGX1JFR18yICovCiYjNDM7CQkub2ZmCSA9IDB4N2ZmZiwKJiM0MzsJCS5pbW0JID0gMHhlMSwJLyogQlBGX1hDSEcgKi8KJiM0MzsJfTsKJiM0MzsJc3RydWN0IGJwZl9hcmVuYSAqcHRyID0gKHZvaWQgKikmYW1wO2FyZW5hOwomIzQzOwl1NjQgdXNlcl92bV9zdGFydCwgdmFsOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQcmV2ZW50IEdDQyBib3VuZHMgd2FybmluZzogY2FzdGluZyAmYW1wO2FyZW5hIHRvIHN0cnVjdCBicGZfYXJlbmEgKgomIzQzOwkgKiB0cmlnZ2VycyBib3VuZHMgY2hlY2tpbmcgc2luY2UgdGhlIG1hcCBkZWZpbml0aW9uIGlzIHNtYWxsZXIgdGhhbgomIzQzOwkgKiBzdHJ1Y3QgYnBmX2FyZW5hLiBiYXJyaWVyX3ZhcigpIG1ha2VzIHRoZSBwb2ludGVyIG9wYXF1ZSB0byBHQ0MsCiYjNDM7CSAqIHByZXZlbnRpbmcgdGhlIGJvdW5kcyBhbmFseXNpcy4KJiM0MzsJICovCiYjNDM7CWJhcnJpZXJfdmFyKHB0cik7CiYjNDM7CXVzZXJfdm1fc3RhcnQgPSBwdHItJmd0O3VzZXJfdm1fc3RhcnQ7CiYjNDM7CWZhdWx0X2FkZHIgPSB1c2VyX3ZtX3N0YXJ0ICYjNDM7IDB4N2ZmZjsKJiM0MzsJYnBmX2FkZHJfc3BhY2VfY2FzdCh1c2VyX3ZtX3N0YXJ0LCAwLCAxKTsKJiM0MzsJLyoKJiM0MzsJICogQSByZWFkLW1vZGlmeS13cml0ZSBjYXJyeWluZyBCUEZfRkVUQ0ggd3JpdGVzIHRvIG1lbW9yeSwgc28gdGhlIGZhdWx0CiYjNDM7CSAqIGhhcyB0byBiZSByZXBvcnRlZCBhcyBhIFdSSVRFIGZyb20gdGhlIGRzdF9yZWcgYWRkcmVzcywgYnV0IGl0IGFsc28KJiM0MzsJICogcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIHNyY19yZWcsIHNvIHRoZSBleGNlcHRpb24gaGFuZGxlciBoYXMgdG8KJiM0MzsJICogY2xlYXIgc3JjX3JlZy4gUG9pc29uIGl0IHVwIGZyb250LCB0aGUgcmV0dXJuZWQgdmFsdWUgbXVzdCBiZSAwLgomIzQzOwkgKi8KJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJCSYjMzQ7cjEgPSAlW3VzZXJfdm1fc3RhcnRdOyYjMzQ7CiYjNDM7CQkmIzM0O3IyID0gMTsmIzM0OwomIzQzOwkJJiMzNDsuOGJ5dGUgJVt4Y2hnX2luc25dOyYjMzQ7IC8qIHIyID0geGNoZygodTMyICopKHIxICYjNDM7IDB4N2ZmZiksIHIyKSAqLwomIzQzOwkJJiMzNDslW3ZhbF0gPSByMjsmIzM0OwomIzQzOwkJOiBbdmFsXSAmIzM0Oz1yJiMzNDsgKHZhbCkKJiM0MzsJCTogW3VzZXJfdm1fc3RhcnRdICYjMzQ7ciYjMzQ7ICh1c2VyX3ZtX3N0YXJ0KSwKJiM0MzsJCSAgX19pbW1faW5zbih4Y2hnX2luc24sIHhjaGdfaW5zbikKJiM0MzsJCTogJiMzNDtyMSYjMzQ7LCAmIzM0O3IyJiMzNDsKJiM0MzsJKTsKJiM0MzsJcmV0dXJuIHZhbDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztfX3N0ZGVycigmIzM0O0VSUk9SOiBBcmVuYSBXUklURSBhY2Nlc3MgYXQgdW5tYXBwZWQgYWRkcmVzcyAweHt7Lip9fSYjMzQ7KQomIzQzO19fc3RkZXJyKCYjMzQ7Q1BVOiB7e1swLTldJiM0Mzt9fSBVSUQ6IDAgUElEOiB7e1swLTldJiM0Mzt9fSBDb21tOiB7ey4qfX0mIzM0OykKJiM0MztfX3N0ZGVycigmIzM0O0NhbGwgdHJhY2U6XG4mIzM0OwomIzQzOyYjMzQ7e3soW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcJiM0MzsweFswLTlhLWZBLUZdJiM0MzsvMHhbMC05YS1mQS1GXSYjNDM7XG4mIzM0OwomIzQzOyYjMzQ7fFsgXHRdJiM0MztbXlxuXSYjNDM7XG4pKn19JiMzNDspCiYjNDM7aW50IHN0cmVhbV9hcmVuYV9jbXB4Y2hnX2ZhdWx0KHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24gY21weGNoZ19pbnNuID0gewomIzQzOwkJLmNvZGUJID0gMHhjMywJLyogQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVyAqLwomIzQzOwkJLmRzdF9yZWcgPSAxLAkJLyogQlBGX1JFR18xICovCiYjNDM7CQkuc3JjX3JlZyA9IDIsCQkvKiBCUEZfUkVHXzIgKi8KJiM0MzsJCS5vZmYJID0gMHg3ZmZmLAomIzQzOwkJLmltbQkgPSAweGYxLAkvKiBCUEZfQ01QWENIRyAqLwomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgYnBmX2FyZW5hICpwdHIgPSAodm9pZCAqKSZhbXA7YXJlbmE7CiYjNDM7CXU2NCB1c2VyX3ZtX3N0YXJ0LCB2YWw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFByZXZlbnQgR0NDIGJvdW5kcyB3YXJuaW5nOiBjYXN0aW5nICZhbXA7YXJlbmEgdG8gc3RydWN0IGJwZl9hcmVuYSAqCiYjNDM7CSAqIHRyaWdnZXJzIGJvdW5kcyBjaGVja2luZyBzaW5jZSB0aGUgbWFwIGRlZmluaXRpb24gaXMgc21hbGxlciB0aGFuCiYjNDM7CSAqIHN0cnVjdCBicGZfYXJlbmEuIGJhcnJpZXJfdmFyKCkgbWFrZXMgdGhlIHBvaW50ZXIgb3BhcXVlIHRvIEdDQywKJiM0MzsJICogcHJldmVudGluZyB0aGUgYm91bmRzIGFuYWx5c2lzLgomIzQzOwkgKi8KJiM0MzsJYmFycmllcl92YXIocHRyKTsKJiM0MzsJdXNlcl92bV9zdGFydCA9IHB0ci0mZ3Q7dXNlcl92bV9zdGFydDsKJiM0MzsJZmF1bHRfYWRkciA9IHVzZXJfdm1fc3RhcnQgJiM0MzsgMHg3ZmZmOwomIzQzOwlicGZfYWRkcl9zcGFjZV9jYXN0KHVzZXJfdm1fc3RhcnQsIDAsIDEpOwomIzQzOwkvKgomIzQzOwkgKiBTYW1lIGFzIHRoZSBleGNoYW5nZSBhYm92ZSwgZXhjZXB0IHRoYXQgYSBCUEZfQ01QWENIRyByZWFkcyB0aGUgb2xkCiYjNDM7CSAqIHZhbHVlIGludG8gcjAgcmF0aGVyIHRoYW4gaW50byBzcmNfcmVnLCBzbyByMCBpcyB0aGUgcmVnaXN0ZXIgdGhlCiYjNDM7CSAqIGV4Y2VwdGlvbiBoYW5kbGVyIGhhcyB0byBjbGVhci4gSXQgZG91YmxlcyBhcyB0aGUgY29tcGFyZSB2YWx1ZSwgYnV0CiYjNDM7CSAqIHRoZSBjb21wYXJpc29uIG5ldmVyIGhhcHBlbnMgc2luY2UgdGhlIGFjY2VzcyBmYXVsdHMgZmlyc3QuCiYjNDM7CSAqLwomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkJJiMzNDtyMSA9ICVbdXNlcl92bV9zdGFydF07JiMzNDsKJiM0MzsJCSYjMzQ7cjAgPSAxOyYjMzQ7CiYjNDM7CQkmIzM0O3IyID0gMjsmIzM0OwomIzQzOwkJJiMzNDsuOGJ5dGUgJVtjbXB4Y2hnX2luc25dOyYjMzQ7IC8qIHIwID0gY21weGNoZygodTMyICopKHIxICYjNDM7IDB4N2ZmZiksIHIwLCByMikgKi8KJiM0MzsJCSYjMzQ7JVt2YWxdID0gcjA7JiMzNDsKJiM0MzsJCTogW3ZhbF0gJiMzNDs9ciYjMzQ7ICh2YWwpCiYjNDM7CQk6IFt1c2VyX3ZtX3N0YXJ0XSAmIzM0O3ImIzM0OyAodXNlcl92bV9zdGFydCksCiYjNDM7CQkgIF9faW1tX2luc24oY21weGNoZ19pbnNuLCBjbXB4Y2hnX2luc24pCiYjNDM7CQk6ICYjMzQ7cjAmIzM0OywgJiMzNDtyMSYjMzQ7LCAmIzM0O3IyJiMzNDsKJiM0MzsJKTsKJiM0MzsJcmV0dXJuIHZhbDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgX19ub2lubGluZSB2b2lkIHN1YnByb2codm9pZCkKIHsKIAlpbnQgX19hcmVuYSAqYWRkciA9IChpbnQgX19hcmVuYSAqKTB4ZGVhZGJlZWY7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTcxCgkJCQkJCQlvdXRwdXQ6IDE5MwoJCQkJCQkJdGhvdWdodHM6IDEzNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIEV4Y2VwdGlvbiBIYW5kbGluZyBmb3IgQXRvbWljIEFyZW5hIEFjY2Vzc2VzOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFib3V0IGV4Y2VwdGlvbiBoYW5kbGluZyBpbiBCUEYgSklUIGNvbXBpbGVycywgc3BlY2lmaWNhbGx5IG9uIGFybTY0LCByaXNjdiwgczM5MCwgYW5kIHg4Ni4gVGhlIGNvcmUgaXNzdWUgaXMgaG93IHdlIGRlYWwgd2l0aCBmYXVsdHMgdGhhdCBvY2N1ciBkdXJpbmcgYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbnMgKGxpa2UgYEJQRl9YQ0hHYCwgYEJQRl9DTVBYQ0hHYCkgd2hlbiBhY2Nlc3NpbmcgdGhlIEJQRiBhcmVuYS4gVGhpcyBhcmVuYSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyBzaGFyZWQgbWVtb3J5IGJldHdlZW4gdXNlcnNwYWNlIGFuZCBCUEYgcHJvZ3JhbXMuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O1dhaXQsIGEgZmF1bHQ/IERvZXMgdGhhdCBtZWFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIHJlYWQ/JiMzNDsgQnV0IG5vLCB0aGUgcmVnaXN0ZXIgd291bGRuJiMzOTt0IGNvbnRhaW4gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5ICpwZXIgc2UqLiBUaGUgQ1BVIHJlZ2lzdGVyIHdvdWxkIGp1c3QgaGF2ZSB3aGF0ZXZlciB2YWx1ZSBpdCBoYWQgYmVmb3JlIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbi4gSWYgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGRvZXNuJiMzOTt0IGNsZWFyIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBvbiBhIGZhdWx0LCB0aGUgQlBGIHByb2dyYW0gd291bGQgZWZmZWN0aXZlbHkgJiMzNDtyZS11c2UmIzM0OyB0aGUgcHJldmlvdXMgdmFsdWUuIEJ1dCBpcyB0aGlzIGEgc2VjdXJpdHkgcmlzaywgc3BlY2lmaWNhbGx5LCBhIEtNU0FOLWRldGVjdGFibGUgaXNzdWU/IFRoZSBCUEYgdmVyaWZpZXIgYWxyZWFkeSBlbnN1cmVzIHJlZ2lzdGVycyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIEtNU0FOIGlzIGxvb2tpbmcgZm9yICp1bmluaXRpYWxpemVkKiByZWFkcywgbm90IGp1c3Qgb2xkIHZhbHVlcy4KCkkgaGFkIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlLiBMZXQmIzM5O3MgbG9vayBhdCB0aGUgYnBmX2F0b21pY19sb2FkX3JlZyBmdW5jdGlvbi4gSXQmIzM5O3MgcHVycG9zZSBpcyB0byBpZGVudGlmeSB3aGljaCByZWdpc3RlciB0byBjbGVhciBpbiBjYXNlIG9mIGEgZmF1bHQuIEl0IGNvbnNpZGVycyBjYXNlcyBsaWtlIEJQRl9MT0FEX0FDUSBhbmQgQlBGX0NNUFhDSEcuCgpUaGUgcGF0Y2ggZm9jdXNlcyBvbiBjb3JyZWN0bHkgaWRlbnRpZnlpbmcgdGhlIHJlZ2lzdGVyIHRoYXQgbmVlZHMgdG8gYmUgY2xlYXJlZCAoc2V0IHRvIHplcm8pIGR1cmluZyBhIGZhdWx0LiBGb3IgcmVhZCBvcGVyYXRpb25zLCB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaXMgY2xlYXJlZC4gRm9yIHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbnMsIHRoZXJlJiMzOTtzIGEgZmV0Y2ggYW5kIHRoZSBwYXRjaCBlbnN1cmVzIHRoZSBjb3JyZWN0IHJlZ2lzdGVyIChsaWtlbHkgYEJQRl9SRUdfMGAgZm9yIGBDTVBYQ0hHYCkgaXMgY2xlYXJlZCBvbiBmYXVsdC4KClRoZSBtYWluIGNvbmNlcm4gaW5pdGlhbGx5IHdhcyB0aGUgcG90ZW50aWFsIGZvciBvbGQgdmFsdWVzIHRvIGxpbmdlci4gQnV0IHNpbmNlIEJQRiBwcm9ncmFtcyBhbHJlYWR5IGhhdmUgdGhlaXIgcmVnaXN0ZXJzIGluaXRpYWxpemVkLCB0aGUgcmVnaXN0ZXIgc2ltcGx5IHJldGFpbnMgdGhlIHByZXZpb3VzIHZhbHVlLCBzbyB0aGlzIGlzbiYjMzk7dCBhIGtlcm5lbC1tZW1vcnkgZXhwb3N1cmUuIEFsc28sIHRoaXMgZG9lcyBub3QgZXhwb3NlIGFueXRoaW5nIGZyb20gdGhlIGtlcm5lbCYjMzk7cyBwZXJzcGVjdGl2ZS4gSXQmIzM5O3MganVzdCBhIHZhcmlhYmxlIGluIGEgQ1BVIHJlZ2lzdGVyIGZyb20gQlBGIHBlcnNwZWN0aXZlLgoKS01TQU4sIHdoaWNoIGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnksIGlzbiYjMzk7dCByZWFsbHkgcmVsZXZhbnQgaGVyZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGBleF9oYW5kbGVyX2JwZmAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLCBjaGFuZ2luZyBob3cgYGlzX3dyaXRlYCBpcyBkZXRlcm1pbmVkIHRvIGhhbmRsZSByZWFkLW1vZGlmeS13cml0ZXMgY29ycmVjdGx5LiBCdXQgaXQmIzM5O3Mgbm90IGludHJvZHVjaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBFdmVuIGlmIGEgcmVnaXN0ZXIgaXNuJiMzOTt0IGNsZWFyZWQgb24gZmF1bHQsIHRoZSBwcmV2aW91cyB2YWx1ZSB3b24mIzM5O3QgYmUgZnJvbSB0aGUga2VybmVsLiBLTVNBTiBkb2VzIHRyYWNrIENQVSByZWdpc3RlcnMsIGJ1dCBpbiB0aGUgY29udGV4dCBvZiB0aGUgQlBGIEpJVCwgS01TQU4gaXMgcHJvYmFibHkgbm90IGRlZXBseSBpbnN0cnVtZW50aW5nIHRoZSBKSVR0ZWQgY29kZS4gSXQgZG9lcyBoYXZlIHNvbWUgc3VwcG9ydCBmb3IgQlBGLCBidXQgaXQmIzM5O3MgbGltaXRlZC4gS01TQU4gaXNuJiMzOTt0IHRoZSByaWdodCB0b29sIGhlcmUuIFRoaXMgaXMgYSBsb2dpYyBlcnJvciB0aGF0IG5lZWRzIGFuIGVycm9yIHRvIGluZGljYXRlIGl0IGRpZCBub3QgY29tcGxldGUuCgpTbywgdGhlIGJ1ZyBoZXJlIGlzIHRoYXQgdGhlIEJQRiBleGNlcHRpb24gaGFuZGxlciAqd2FzbiYjMzk7dCogY2xlYXJpbmcgdGhlIHJlZ2lzdGVyIGNvcnJlY3RseSBmb3IgdGhlc2UgYXRvbWljIG9wZXJhdGlvbnMuIFRoaXMgbWVhbnQgdGhlIHByb2dyYW0gd291bGQgY29udGludWUgd2l0aCBhbiBvbGQgdmFsdWUgaW5zdGVhZCBvZiBhIGNsZWFyIHZhbHVlLiBJdCYjMzk7cyBhIGxvZ2ljIGVycm9yIGluIEJQRiBKSVQvZXhjZXB0aW9uIGhhbmRsaW5nLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuIFRoaXMgcmVxdWlyZXMgbm8gc3BlY2lhbCBhdHRlbnRpb24gZnJvbSBLTVNBTiwgYXMgdGhlIHJlZ2lzdGVycyBhcmUgbm90IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gSXQgaXMgcHVyZWx5IGEgbWF0dGVyIG9mIEJQRiBwcm9ncmFtIGludGVncml0eS4gVGhlcmVmb3JlLCBOZWVkc0tNU0FOID0gZmFsc2UuCgpKdXN0IHRvIGJlIHN1cmUsIEkmIzM5O3ZlIHJlY2hlY2tlZCB0aGUgcGF0Y2guIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBjb3JyZWN0bHkgc2V0dGluZyBgaXNfd3JpdGVgIGFuZCBjbGVhcmluZyB0aGUgYXBwcm9wcmlhdGUgcmVnaXN0ZXJzIGluIGNhc2Ugb2YgYSBmYXVsdC4gVGhlIGBCUEZfQVJFTkFfV1JJVEVgIGZsYWcgaXMgYmVpbmcgaW50cm9kdWNlZCB0byBzaWduYWwgYW4gYXJlbmEgd3JpdGUuIEkgY2FuIHNlZSB0aGF0IHRoaXMgaXNuJiMzOTt0IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCYjMzk7cyBhIGJ1ZyB3aXRoIGhvdyB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgd2FzIGhhbmRsaW5nIGZhdWx0cyBvbiBhdG9taWMgYXJlbmEgYWNjZXNzZXMgYW5kLCB0aGVyZWZvcmUsIEkgYmVsaWV2ZSBteSByZWFzb25pbmcgaXMgc29saWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHRoZSBCUEYgZXhjZXB0aW9uIGhhbmRsZXIgZm9yIGFyZW5hIGFjY2Vzc2VzIHRvIGNvcnJlY3RseSBpZGVudGlmeSByZWFkLW1vZGlmeS13cml0ZSBhdG9taWMgb3BlcmF0aW9ucyAobGlrZSBCUEZfWENIRyBhbmQgQlBGX0NNUFhDSEcpIGFzIHdyaXRlcywgYW5kIHRvIHByb3Blcmx5IGNsZWFyIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciAoZS5nLiwgQlBGX1JFR18wIGZvciBDTVBYQ0hHKSB3aGVuIGEgcGFnZSBmYXVsdCBvY2N1cnMuIElmIHRoZSByZWdpc3RlciBpcyBub3QgY2xlYXJlZCwgdGhlIEJQRiBwcm9ncmFtIHNpbXBseSByZXRhaW5zIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGF0IHJlZ2lzdGVyLiBUaGlzIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LCBub3IgZG9lcyBpdCBleHBvc2Uga2VybmVsIHN0YWNrL2hlYXAgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZSBpc3N1ZSBpcyBhIGxvZ2ljIGJ1ZyBpbiBCUEYgSklUIGV4Y2VwdGlvbiBoYW5kbGluZywgd2hpY2ggZG9lcyBub3QgaW50cm9kdWNlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEJQRiBzZWxmdGVzdHMgKGFzIGluY2x1ZGVkIGluIHRoZSBwYXRjaCkgYXJlIHN1ZmZpY2llbnQgdG8gdmVyaWZ5IHRoZSBmaXguJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB0aGUgQlBGIGV4Y2VwdGlvbiBoYW5kbGVyIGZvciBhcmVuYSBhY2Nlc3NlcyB0byBjb3JyZWN0bHkgaWRlbnRpZnkgcmVhZC1tb2RpZnktd3JpdGUgYXRvbWljIG9wZXJhdGlvbnMgKGxpa2UgQlBGX1hDSEcgYW5kIEJQRl9DTVBYQ0hHKSBhcyB3cml0ZXMsIGFuZCB0byBwcm9wZXJseSBjbGVhciB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgKGUuZy4sIEJQRl9SRUdfMCBmb3IgQ01QWENIRykgd2hlbiBhIHBhZ2UgZmF1bHQgb2NjdXJzLiBJZiB0aGUgcmVnaXN0ZXIgaXMgbm90IGNsZWFyZWQsIHRoZSBCUEYgcHJvZ3JhbSBzaW1wbHkgcmV0YWlucyB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhhdCByZWdpc3Rlci4gVGhpcyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSwgbm9yIGRvZXMgaXQgZXhwb3NlIGtlcm5lbCBzdGFjay9oZWFwIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgaXNzdWUgaXMgYSBsb2dpYyBidWcgaW4gQlBGIEpJVCBleGNlcHRpb24gaGFuZGxpbmcsIHdoaWNoIGRvZXMgbm90IGludHJvZHVjZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBCUEYgc2VsZnRlc3RzIChhcyBpbmNsdWRlZCBpbiB0aGUgcGF0Y2gpIGFyZSBzdWZmaWNpZW50IHRvIHZlcmlmeSB0aGUgZml4LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNDoxOC44MjE0MTU1NzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI2MjI1ODAwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW5zbl9kZWYzMlwiLFxuICAgIFwiZXhfaGFuZGxlcl9icGZcIixcbiAgICBcImJwZl9qaXRfZW1pdF9pbnNuXCIsXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gICAgXCJicGZfY2hlY2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHRoZSBCUEYgZXhjZXB0aW9uIGhhbmRsZXIgZm9yIGFyZW5hIGFjY2Vzc2VzIHRvIGNvcnJlY3RseSBpZGVudGlmeSByZWFkLW1vZGlmeS13cml0ZSBhdG9taWMgb3BlcmF0aW9ucyAobGlrZSBCUEZfWENIRyBhbmQgQlBGX0NNUFhDSEcpIGFzIHdyaXRlcywgYW5kIHRvIHByb3Blcmx5IGNsZWFyIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciAoZS5nLiwgQlBGX1JFR18wIGZvciBDTVBYQ0hHKSB3aGVuIGEgcGFnZSBmYXVsdCBvY2N1cnMuIElmIHRoZSByZWdpc3RlciBpcyBub3QgY2xlYXJlZCwgdGhlIEJQRiBwcm9ncmFtIHNpbXBseSByZXRhaW5zIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGF0IHJlZ2lzdGVyLiBUaGlzIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LCBub3IgZG9lcyBpdCBleHBvc2Uga2VybmVsIHN0YWNrL2hlYXAgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZSBpc3N1ZSBpcyBhIGxvZ2ljIGJ1ZyBpbiBCUEYgSklUIGV4Y2VwdGlvbiBoYW5kbGluZywgd2hpY2ggZG9lcyBub3QgaW50cm9kdWNlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEJQRiBzZWxmdGVzdHMgKGFzIGluY2x1ZGVkIGluIHRoZSBwYXRjaCkgYXJlIHN1ZmZpY2llbnQgdG8gdmVyaWZ5IHRoZSBmaXguXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXJzICh4ODYsIGFybTY0LCByaXNjdiwgczM5MCkgYW5kIHRoZSBCUEYgdmVyaWZpZXIgdG8gY29ycmVjdGx5IGhhbmRsZSBleGNlcHRpb25zIGZvciBhdG9taWMgb3BlcmF0aW9ucyBpbiB0aGUgQlBGIGFyZW5hLiBJdCBpbnRyb2R1Y2VzIGBicGZfYXRvbWljX2xvYWRfcmVnYCB0byBpZGVudGlmeSB0aGUgcmVnaXN0ZXIgdGhhdCBuZWVkcyB0byBiZSBjbGVhcmVkIHdoZW4gYW4gYXRvbWljIGluc3RydWN0aW9uIGZhdWx0cywgYW5kIGVuc3VyZXMgdGhhdCByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb25zIGFyZSBjb3JyZWN0bHkgcmVwb3J0ZWQgYXMgd3JpdGVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQlBGIHN1YnN5c3RlbSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM0OjE4LjgyMTQyMjYyN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk3NzU3ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjRhYTc1MjFmODU4MDNmZDNhMWJhZTE0NTE5ZGEwYWJkYzFkZjAxZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwMDozNDoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXFxuaW5kZXggZDE0ZDI5N2ViYjk2Ny4uNzRiNDA4Mzc5MWRhMyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xcbisrKyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXFxuQEAgLTEwODIsMjMgKzEwODIsMjcgQEAgc3RhdGljIHZvaWQgYnVpbGRfZXBpbG9ndWUoc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCB3YXNfY2xhc3NpYylcXG4gICpcXG4gICogQml0IGxheW91dCBvZiBgZml4dXBgICgzMi1iaXQpOlxcbiAgKlxcbi0gKiArLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLStcXG4tICogfCAgIDMxLTI3ICAgfCAyNi0yMiAgfCAgICAgMjEgICAgfCAgIDIwLTE2ICAgfCAgIDE1LTAgICB8XFxuLSAqIHwgICAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfFxcbi0gKiB8IEZJWFVQX1JFRyB8IFVudXNlZCB8IEFSRU5BX0FDQyB8IEFSRU5BX1JFRyB8ICBPRkZTRVQgIHxcXG4tICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rXFxuKyAqICstLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rXFxuKyAqIHwgICAzMS0yNyAgIHwgMjYtMjMgIHwgICAgICAyMiAgICAgfCAgICAgMjEgICAgfCAgIDIwLTE2ICAgfCAgIDE1LTAgICB8XFxuKyAqIHwgICAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8XFxuKyAqIHwgRklYVVBfUkVHIHwgVW51c2VkIHwgQVJFTkFfV1JJVEUgfCBBUkVOQV9BQ0MgfCBBUkVOQV9SRUcgfCAgT0ZGU0VUICB8XFxuKyAqICstLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rXFxuICAqXFxuICAqIC0gT0ZGU0VUICgxNiBiaXRzKTogT2Zmc2V0IHVzZWQgdG8gY29tcHV0ZSBhZGRyZXNzIGZvciBMb2FkL1N0b3JlIGluc3RydWN0aW9uLlxcbiAgKiAtIEFSRU5BX1JFRyAoNSBiaXRzKTogUmVnaXN0ZXIgdGhhdCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgYWRkcmVzcyBmb3IgbG9hZC9zdG9yZSB3aGVuXFxuICAqICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NpbmcgdGhlIGFyZW5hIHJlZ2lvbi5cXG4gICogLSBBUkVOQV9BQ0NFU1MgKDEgYml0KTogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIGFjY2Vzc2VkIHRoZSBhcmVuYSByZWdpb24uXFxuKyAqIC0gQVJFTkFfV1JJVEUgKDEgYml0KTogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIHdyb3RlIHRvIHRoZSBhcmVuYSByZWdpb24uXFxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW5kZXBlbmRlbnQgb2YgRklYVVBfUkVHLCBzaW5jZSBhIHJlYWQtbW9kaWZ5LXdyaXRlIGJvdGggd3JpdGVzIHRvXFxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5IGFuZCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gYSByZWdpc3Rlci5cXG4gICogLSBGSVhVUF9SRUcgKDUgYml0cyk6IERlc3RpbmF0aW9uIHJlZ2lzdGVyIGZvciB0aGUgbG9hZCBpbnN0cnVjdGlvbiAoY2xlYXJlZCBvbiBmYXVsdCkgb3Igc2V0IHRvXFxuLSAqICAgICAgICAgICAgICAgICAgICAgICBET05UX0NMRUFSIGlmIGl0IGlzIGEgc3RvcmUgaW5zdHJ1Y3Rpb24uXFxuKyAqICAgICAgICAgICAgICAgICAgICAgICBET05UX0NMRUFSIGlmIHRoZSBpbnN0cnVjdGlvbiBkb2VzIG5vdCByZWFkIGludG8gYSByZWdpc3Rlci5cXG4gICovXFxuIFxcbiAjZGVmaW5lIEJQRl9GSVhVUF9PRkZTRVRfTUFTSyAgICAgIEdFTk1BU0soMTUsIDApXFxuICNkZWZpbmUgQlBGX0ZJWFVQX0FSRU5BX1JFR19NQVNLICAgR0VOTUFTSygyMCwgMTYpXFxuICNkZWZpbmUgQlBGX0FSRU5BX0FDQ0VTUyAgICAgICAgICAgQklUKDIxKVxcbisjZGVmaW5lIEJQRl9BUkVOQV9XUklURSAgICAgICAgICAgIEJJVCgyMilcXG4gI2RlZmluZSBCUEZfRklYVVBfUkVHX01BU0tcXHRHRU5NQVNLKDMxLCAyNylcXG4gI2RlZmluZSBET05UX0NMRUFSIDUgLyogVW51c2VkIEFSTTY0IHJlZ2lzdGVyIGZyb20gQlBGJ3MgUE9WICovXFxuIFxcbkBAIC0xMTA5LDcgKzExMTMsNyBAQCBib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxcbiBcXHRzMTYgb2ZmID0gRklFTERfR0VUKEJQRl9GSVhVUF9PRkZTRVRfTUFTSywgZXgtXFx1MDAzZWZpeHVwKTtcXG4gXFx0aW50IGFyZW5hX3JlZyA9IEZJRUxEX0dFVChCUEZfRklYVVBfQVJFTkFfUkVHX01BU0ssIGV4LVxcdTAwM2VmaXh1cCk7XFxuIFxcdGJvb2wgaXNfYXJlbmEgPSAhIShleC1cXHUwMDNlZml4dXAgXFx1MDAyNiBCUEZfQVJFTkFfQUNDRVNTKTtcXG4tXFx0Ym9vbCBpc193cml0ZSA9IChkc3RfcmVnID09IERPTlRfQ0xFQVIpO1xcbitcXHRib29sIGlzX3dyaXRlID0gISEoZXgtXFx1MDAzZWZpeHVwIFxcdTAwMjYgQlBGX0FSRU5BX1dSSVRFKTtcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyO1xcbiBcXG4gXFx0aWYgKGlzX2FyZW5hKSB7XFxuQEAgLTExMzIsNyArMTEzNiw3IEBAIHN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4ge1xcbiBcXHRvZmZfdCBpbnNfb2Zmc2V0O1xcbiBcXHRzMTYgb2ZmID0gaW5zbi1cXHUwMDNlb2ZmO1xcbi1cXHRib29sIGlzX2FyZW5hO1xcbitcXHRib29sIGlzX2FyZW5hLCBpc193cml0ZTtcXG4gXFx0aW50IGFyZW5hX3JlZztcXG4gXFx0dW5zaWduZWQgbG9uZyBwYztcXG4gXFx0c3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXg7XFxuQEAgLTExODEsMTUgKzExODUsMTggQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHQvKlxcbiBcXHQgKiBBIGxvYWQtYWNxdWlyZSBpcyBvZiBCUEZfU1RYIGNsYXNzLCBidXQgcmVhZHMgZnJvbSBzcmNfcmVnIGludG9cXG4gXFx0ICogZHN0X3JlZyBsaWtlIGEgQlBGX0xEWCBkb2VzLCBoZW5jZSBpdCBtdXN0IG5vdCBiZSB0cmVhdGVkIGFzIGEgc3RvcmVcXG4tXFx0ICogaGVyZS5cXG4rXFx0ICogaGVyZS4gQSByZWFkLW1vZGlmeS13cml0ZSBjYXJyeWluZyBCUEZfRkVUQ0ggaXMgcmVwb3J0ZWQgYXMgYSB3cml0ZVxcbitcXHQgKiBldmVuIHRob3VnaCBpdCBkb2VzIGhhdmUgYSByZWdpc3RlciB0byBjbGVhciwgc2VlIHRoZSBjYWxsZXJzLlxcbiBcXHQgKi9cXG4tXFx0aWYgKEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSAhPSBCUEZfTERYIFxcdTAwMjZcXHUwMDI2ICFicGZfYXRvbWljX2lzX2xvYWRfYWNxKGluc24pKVxcbi1cXHRcXHRkc3RfcmVnID0gRE9OVF9DTEVBUjtcXG4rXFx0aXNfd3JpdGUgPSBCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX0xEWCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAhYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKTtcXG4gXFxuIFxcdGV4LVxcdTAwM2VmaXh1cCA9IEZJRUxEX1BSRVAoQlBGX0ZJWFVQX1JFR19NQVNLLCBkc3RfcmVnKTtcXG4gXFxuIFxcdGlmIChpc19hcmVuYSkge1xcbiBcXHRcXHRleC1cXHUwMDNlZml4dXAgfD0gQlBGX0FSRU5BX0FDQ0VTUztcXG4rXFx0XFx0aWYgKGlzX3dyaXRlKVxcbitcXHRcXHRcXHRleC1cXHUwMDNlZml4dXAgfD0gQlBGX0FSRU5BX1dSSVRFO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBpbnNuLVxcdTAwM2VzcmNfcmVnL2RzdF9yZWcgaG9sZHMgdGhlIGFkZHJlc3MgaW4gdGhlIGFyZW5hIHJlZ2lvbiB3aXRoIHVwcGVyIDMyLWJpdHNcXG4gXFx0XFx0ICogYmVpbmcgemVybyBiZWNhdXNlIG9mIGEgcHJlY2VkaW5nIGFkZHJfc3BhY2VfY2FzdChyXFx1MDAzY25cXHUwMDNlLCAweDAsIDB4MSkgaW5zdHJ1Y3Rpb24uXFxuQEAgLTE4ODksNyArMTg5Niw3IEBAIHN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc25cXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGRzdCk7XFxuK1xcdFxcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIERPTlRfQ0xFQVIpO1xcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHRicmVhaztcXG5AQCAtMTk1Niw3ICsxOTYzLDcgQEAgc3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zblxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgZHN0KTtcXG4rXFx0XFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgRE9OVF9DTEVBUik7XFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0xOTc5LDcgKzE5ODYsMTYgQEAgc3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zblxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9BVE9NSUMpIHtcXG4tXFx0XFx0XFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgZHN0KTtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogQSBsb2FkLWFjcXVpcmUgcmVhZHMgaW50byBkc3RfcmVnLCBhbmQgYSByZWFkLW1vZGlmeS13cml0ZVxcbitcXHRcXHRcXHQgKiBjYXJyeWluZyBCUEZfRkVUQ0ggcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIHNyY19yZWcsIG9yIGludG9cXG4rXFx0XFx0XFx0ICogcjAgZm9yIGEgQlBGX0NNUFhDSEcuIENsZWFyIHRoYXQgcmVnaXN0ZXIgb24gZmF1bHQsIHRoZVxcbitcXHRcXHRcXHQgKiByZW1haW5pbmcgYXRvbWljcyBoYXZlIG5vIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aW50IGxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGxvYWRfcmVnIFxcdTAwM2MgMCA/XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBET05UX0NMRUFSIDogYnBmMmE2NFtsb2FkX3JlZ10pO1xcbiBcXHRcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXFxuaW5kZXggNmI5OTcyYjA3YzFiMC4uMjUwNGRmMWZhMTExOCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXFxuKysrIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xcbkBAIC0xOTkyLDEwICsxOTkyLDE5IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbiBcXHRcXHRcXHRyZXQgPSBlbWl0X2F0b21pY19ybXcocmQsIHJzLCBpbnNuLCBjdHgpO1xcbiBcXG4gXFx0XFx0LyogcmV0IGNhbiBiZSAxIChza2lwLXpleHQpOyBleHRhYmxlIGVudHJ5IHN0aWxsIG5lZWRzIHRvIGJlIGFkZGVkICovXFxuLVxcdFxcdGlmIChyZXQgXFx1MDAzZT0gMClcXG4tXFx0XFx0XFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sXFxuLVxcdFxcdFxcdFxcdGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikgPyByZCA6IFJFR19ET05UX0NMRUFSX01BUktFUixcXG4tXFx0XFx0XFx0XFx0Y3R4KSA/OiByZXQ7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzZT0gMCkge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBBIGxvYWQtYWNxdWlyZSByZWFkcyBpbnRvIGRzdF9yZWcsIGFuZCBhIHJlYWQtbW9kaWZ5LXdyaXRlXFxuK1xcdFxcdFxcdCAqIGNhcnJ5aW5nIEJQRl9GRVRDSCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gc3JjX3JlZywgb3IgaW50b1xcbitcXHRcXHRcXHQgKiByMCBmb3IgYSBCUEZfQ01QWENIRy4gQ2xlYXIgdGhhdCByZWdpc3RlciBvbiBmYXVsdCwgdGhlXFxuK1xcdFxcdFxcdCAqIHJlbWFpbmluZyBhdG9taWNzIGhhdmUgbm8gZGVzdGluYXRpb24gcmVnaXN0ZXIuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpbnQgbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGxvYWRfcmVnIFxcdTAwM2MgMCA/XFxuK1xcdFxcdFxcdFxcdFxcdFJFR19ET05UX0NMRUFSX01BUktFUiA6IHJlZ21hcFtsb2FkX3JlZ10sXFxuK1xcdFxcdFxcdFxcdFxcdGN0eCkgPzogcmV0O1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xcbmluZGV4IGI2MDg3NzQ3OGI0NWQuLmM0Njg3MmIwNzFjZTcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xcbisrKyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNcXG5AQCAtNzc0LDYgKzc3NCw4IEBAIHN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfYXRvbWljX3ByZShzdHJ1Y3QgYnBmX2ppdCAqaml0LFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXFxuIHtcXG4rXFx0aW50IGxvYWRfcmVnO1xcbitcXG4gXFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9BVE9NSUMpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTc4Myw2ICs3ODUsMTQgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsXFxuIFxcdEVNSVQ0KDB4YjkwODAwMDAsIFJFR19XMSwgaW5zbi1cXHUwMDNlZHN0X3JlZyk7XFxuIFxcdHByb2JlLVxcdTAwM2VhcmVuYV9yZWcgPSBSRUdfVzE7XFxuIFxcdHByb2JlLVxcdTAwM2VwcmcgPSBqaXQtXFx1MDAzZXByZztcXG4rXFx0LypcXG4rXFx0ICogQSByZWFkLW1vZGlmeS13cml0ZSBjYXJyeWluZyBCUEZfRkVUQ0ggcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvXFxuK1xcdCAqIHNyY19yZWcsIG9yIGludG8gcjAgZm9yIGEgQlBGX0NNUFhDSEcuIENsZWFyIHRoYXQgcmVnaXN0ZXIgb25cXG4rXFx0ICogZmF1bHQsIHRoZSByZW1haW5pbmcgYXRvbWljcyBvbmx5IHdyaXRlIG1lbW9yeS5cXG4rXFx0ICovXFxuK1xcdGxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcXG4rXFx0aWYgKGxvYWRfcmVnIFxcdTAwM2U9IDApXFxuK1xcdFxcdHByb2JlLVxcdTAwM2VyZWcgPSByZWcyaGV4W2xvYWRfcmVnXTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBicGZfaml0X3Byb2JlX3Bvc3Qoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcXG5AQCAtMTY4NCw2ICsxNjk0LDcgQEAgc3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcXG4gXFx0XFx0XFx0aWYgKGxvYWRfcHJvYmUucHJnICE9IC0xKSB7XFxuIFxcdFxcdFxcdFxcdHByb2JlLnByZyA9IGppdC1cXHUwMDNlcHJnO1xcbiBcXHRcXHRcXHRcXHRwcm9iZS5hcmVuYV9yZWcgPSBsb2FkX3Byb2JlLmFyZW5hX3JlZztcXG4rXFx0XFx0XFx0XFx0cHJvYmUucmVnID0gbG9hZF9wcm9iZS5yZWc7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0bG9vcF9zdGFydCA9IGppdC1cXHUwMDNlcHJnO1xcbiBcXHRcXHRcXHQvKiAwOiB7Y3N5fGNzZ30gJXcwLCVzcmMsb2ZmKCVhcmVuYSkgKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuaW5kZXggOGRkZGI1ZDdhZjIxYi4uZDkyMDc3MmFmN2Q1ZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG4rKysgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG5AQCAtMTQ3MywxNyArMTQ3MywyMCBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX2xkX3N0X2luZGV4KHU4ICoqcHByb2csIHUzMiBhdG9taWNfb3AsIHUzMiBzaXplLFxcbiAgKlxcbiAgKiBCaXQgbGF5b3V0IG9mIGBmaXh1cGAgKDMyLWJpdCk6XFxuICAqXFxuLSAqICstLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLStcXG4tICogfCAzMSAgICAgICAgfCAzMC0yNCAgfCAgIDIzLTE2ICAgfCAgIDE1LTggIHwgICAgNy0wICAgfFxcbi0gKiB8ICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICB8XFxuLSAqIHwgQVJFTkFfQUNDIHwgVW51c2VkIHwgQVJFTkFfUkVHIHwgRFNUX1JFRyB8IElOU05fTEVOIHxcXG4tICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tK1xcbisgKiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLStcXG4rICogfCAzMSAgICAgICAgfCAzMCAgICAgICAgICB8IDI5LTI0ICB8ICAgMjMtMTYgICB8ICAgMTUtOCAgfCAgICA3LTAgICB8XFxuKyAqIHwgICAgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgfFxcbisgKiB8IEFSRU5BX0FDQyB8IEFSRU5BX1dSSVRFIHwgVW51c2VkIHwgQVJFTkFfUkVHIHwgRFNUX1JFRyB8IElOU05fTEVOIHxcXG4rICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rXFxuICAqXFxuICAqIC0gSU5TTl9MRU4gKDggYml0cyk6IExlbmd0aCBvZiBmYXVsdGluZyBpbnNuIChtYXggeDg2IGluc24gPSAxNSBieXRlcyAoZml0cyBpbiA4IGJpdHMpKS5cXG4gICogLSBEU1RfUkVHICAoOCBiaXRzKTogT2Zmc2V0IG9mIGRzdF9yZWcgZnJvbSByZWcycHRfcmVnc1tdIChtYXggb2Zmc2V0ID0gMTEyIChmaXRzIGluIDggYml0cykpLlxcbi0gKiAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHNldCB0byBET05UX0NMRUFSIGlmIHRoZSBpbnNuIGlzIGEgc3RvcmUuXFxuKyAqICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgc2V0IHRvIERPTlRfQ0xFQVIgaWYgdGhlIGluc24gZG9lcyBub3QgcmVhZCBpbnRvIGEgcmVnaXN0ZXIuXFxuICAqIC0gQVJFTkFfUkVHICg4IGJpdHMpOiBPZmZzZXQgb2YgdGhlIHJlZ2lzdGVyIHRoYXQgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlXFxuICAqICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzIGZvciBsb2FkL3N0b3JlIHdoZW4gYWNjZXNzaW5nIHRoZSBhcmVuYSByZWdpb24uXFxuKyAqIC0gQVJFTkFfV1JJVEUgKDEgYml0KTogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIHdyb3RlIHRvIHRoZSBhcmVuYSByZWdpb24uXFxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW5kZXBlbmRlbnQgb2YgRFNUX1JFRywgc2luY2UgYSByZWFkLW1vZGlmeS13cml0ZSBib3RoIHdyaXRlcyB0b1xcbisgKiAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSBhbmQgcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIGEgcmVnaXN0ZXIuXFxuICAqIC0gQVJFTkFfQUNDRVNTICgxIGJpdCk6IFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiBhY2Nlc3NlZCB0aGUgYXJlbmEgcmVnaW9uLlxcbiAgKlxcbiAgKiBCaXQgbGF5b3V0IG9mIGBkYXRhYCAoMzItYml0KTpcXG5AQCAtMTUwMiw2ICsxNTA1LDcgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19sZF9zdF9pbmRleCh1OCAqKnBwcm9nLCB1MzIgYXRvbWljX29wLCB1MzIgc2l6ZSxcXG4gI2RlZmluZSBGSVhVUF9JTlNOX0xFTl9NQVNLXFx0R0VOTUFTSyg3LCAwKVxcbiAjZGVmaW5lIEZJWFVQX1JFR19NQVNLXFx0XFx0R0VOTUFTSygxNSwgOClcXG4gI2RlZmluZSBGSVhVUF9BUkVOQV9SRUdfTUFTS1xcdEdFTk1BU0soMjMsIDE2KVxcbisjZGVmaW5lIEZJWFVQX0FSRU5BX1dSSVRFXFx0QklUKDMwKVxcbiAjZGVmaW5lIEZJWFVQX0FSRU5BX0FDQ0VTU1xcdEJJVCgzMSlcXG4gI2RlZmluZSBEQVRBX0FSRU5BX09GRlNFVF9NQVNLXFx0R0VOTUFTSygzMSwgMTYpXFxuIFxcbkBAIC0xNTEwLDcgKzE1MTQsNyBAQCBib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKngsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiBcXHR1MzIgcmVnID0gRklFTERfR0VUKEZJWFVQX1JFR19NQVNLLCB4LVxcdTAwM2VmaXh1cCk7XFxuIFxcdHUzMiBpbnNuX2xlbiA9IEZJRUxEX0dFVChGSVhVUF9JTlNOX0xFTl9NQVNLLCB4LVxcdTAwM2VmaXh1cCk7XFxuIFxcdGJvb2wgaXNfYXJlbmEgPSAhISh4LVxcdTAwM2VmaXh1cCBcXHUwMDI2IEZJWFVQX0FSRU5BX0FDQ0VTUyk7XFxuLVxcdGJvb2wgaXNfd3JpdGUgPSAocmVnID09IERPTlRfQ0xFQVIpO1xcbitcXHRib29sIGlzX3dyaXRlID0gISEoeC1cXHUwMDNlZml4dXAgXFx1MDAyNiBGSVhVUF9BUkVOQV9XUklURSk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgYWRkcjtcXG4gXFx0czE2IG9mZjtcXG4gXFx0dTMyIGFyZW5hX3JlZztcXG5AQCAtMjM0OCw2ICsyMzUyLDcgQEAgc3Q6XFx0XFx0XFx0aW5zbl9vZmYgPSBpbnNuLVxcdTAwM2VvZmY7XFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4O1xcbiBcXHRcXHRcXHRcXHR1OCAqX2luc24gPSBpbWFnZSArIHByb2dsZW4gKyAoc3RhcnRfb2ZfbGR4IC0gdGVtcCk7XFxuIFxcdFxcdFxcdFxcdHUzMiBhcmVuYV9yZWcsIGZpeHVwX3JlZztcXG4rXFx0XFx0XFx0XFx0Ym9vbCBpc193cml0ZTtcXG4gXFx0XFx0XFx0XFx0czY0IGRlbHRhO1xcbiBcXG4gXFx0XFx0XFx0XFx0aWYgKCFicGZfcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VleHRhYmxlKVxcbkBAIC0yMzg0LDE1ICsyMzg5LDI5IEBAIHN0OlxcdFxcdFxcdGluc25fb2ZmID0gaW5zbi1cXHUwMDNlb2ZmO1xcbiBcXHRcXHRcXHRcXHQgICAgYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSkge1xcbiBcXHRcXHRcXHRcXHRcXHRhcmVuYV9yZWcgPSByZWcycHRfcmVnc1tzcmNfcmVnXTtcXG4gXFx0XFx0XFx0XFx0XFx0Zml4dXBfcmVnID0gcmVnMnB0X3JlZ3NbZHN0X3JlZ107XFxuK1xcdFxcdFxcdFxcdFxcdGlzX3dyaXRlID0gZmFsc2U7XFxuIFxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdFxcdFxcdCAqIEEgc3RvcmUgaGFzIG5vIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIHRvIGNsZWFyLFxcbitcXHRcXHRcXHRcXHRcXHQgKiBleGNlcHQgZm9yIGEgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCBCUEZfRkVUQ0gsXFxuK1xcdFxcdFxcdFxcdFxcdCAqIHdoaWNoIGFsc28gcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIHNyY19yZWcsIG9yXFxuK1xcdFxcdFxcdFxcdFxcdCAqIGludG8gcjAgZm9yIGEgQlBGX0NNUFhDSEcuIEVpdGhlciB3YXkgdGhlIGFjY2Vzc1xcbitcXHRcXHRcXHRcXHRcXHQgKiBpcyBzdGlsbCByZXBvcnRlZCBhcyBhIHdyaXRlLlxcbitcXHRcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0XFx0aW50IGxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcXG4rXFxuIFxcdFxcdFxcdFxcdFxcdGFyZW5hX3JlZyA9IHJlZzJwdF9yZWdzW2RzdF9yZWddO1xcbi1cXHRcXHRcXHRcXHRcXHRmaXh1cF9yZWcgPSBET05UX0NMRUFSO1xcbitcXHRcXHRcXHRcXHRcXHRmaXh1cF9yZWcgPSBsb2FkX3JlZyBcXHUwMDNjIDAgPyBET05UX0NMRUFSIDpcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHJlZzJwdF9yZWdzW2xvYWRfcmVnXTtcXG4rXFx0XFx0XFx0XFx0XFx0aXNfd3JpdGUgPSB0cnVlO1xcbiBcXHRcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRcXHRleC1cXHUwMDNlZml4dXAgPSBGSUVMRF9QUkVQKEZJWFVQX0lOU05fTEVOX01BU0ssIHByb2cgLSBzdGFydF9vZl9sZHgpIHxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIEZJRUxEX1BSRVAoRklYVVBfQVJFTkFfUkVHX01BU0ssIGFyZW5hX3JlZykgfFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgRklFTERfUFJFUChGSVhVUF9SRUdfTUFTSywgZml4dXBfcmVnKTtcXG4gXFx0XFx0XFx0XFx0ZXgtXFx1MDAzZWZpeHVwIHw9IEZJWFVQX0FSRU5BX0FDQ0VTUztcXG4rXFx0XFx0XFx0XFx0aWYgKGlzX3dyaXRlKVxcbitcXHRcXHRcXHRcXHRcXHRleC1cXHUwMDNlZml4dXAgfD0gRklYVVBfQVJFTkFfV1JJVEU7XFxuIFxcbiBcXHRcXHRcXHRcXHRleC1cXHUwMDNlZGF0YSB8PSBGSUVMRF9QUkVQKERBVEFfQVJFTkFfT0ZGU0VUX01BU0ssIGluc24tXFx1MDAzZW9mZik7XFxuIFxcdFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG5pbmRleCA0ZWRiYTgxODJkYjFiLi4xNWQ4MzY4NGM2ZTk0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXFxuQEAgLTQxNCw2ICs0MTQsMzAgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiBcXHQgICAgICAgaW5zbi1cXHUwMDNlaW1tID09IEJQRl9MT0FEX0FDUTtcXG4gfVxcbiBcXG4rLypcXG4rICogR2l2ZW4gYW4gaW5zdHJ1Y3Rpb24gQGluc24sIHJldHVybiB0aGUgbnVtYmVyIG9mIHRoZSBCUEYgcmVnaXN0ZXIgdGhhdCBhXFxuKyAqIEJQRl9BVE9NSUMgcmVhZHMgdGhlIHZhbHVlIGF0IGl0cyBtZW1vcnkgb3BlcmFuZCBpbnRvLCBvciAtMSBpZiB0aGVyZSBpc1xcbisgKiBubyBzdWNoIHJlZ2lzdGVyLiBUaGF0IGlzIHRoZSByZWdpc3RlciBhIEJQRl9QUk9CRV9BVE9NSUMgaGFzIHRvIGNsZWFyIHdoZW5cXG4rICogdGhlIGFjY2VzcyBmYXVsdHMuIExpa2UgYnBmX2F0b21pY19pc19sb2FkX2FjcSgpLCBAaW5zbiBpcyBub3QgYXNzdW1lZCB0b1xcbisgKiBiZSBhIEJQRl9BVE9NSUMgaGVyZS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgaW50IGJwZl9hdG9taWNfbG9hZF9yZWcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbit7XFxuK1xcdGlmIChCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX1NUWCB8fFxcbitcXHQgICAgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9BVE9NSUMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfQVRPTUlDKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0c3dpdGNoIChpbnNuLVxcdTAwM2VpbW0pIHtcXG4rXFx0Y2FzZSBCUEZfTE9BRF9BQ1E6XFxuK1xcdFxcdHJldHVybiBpbnNuLVxcdTAwM2Vkc3RfcmVnO1xcbitcXHRjYXNlIEJQRl9DTVBYQ0hHOlxcbitcXHRcXHRyZXR1cm4gQlBGX1JFR18wO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gKGluc24tXFx1MDAzZWltbSBcXHUwMDI2IEJQRl9GRVRDSCkgPyBpbnNuLVxcdTAwM2VzcmNfcmVnIDogLTE7XFxuK1xcdH1cXG4rfVxcbitcXG4gLyogTWVtb3J5IHN0b3JlLCAqKHVpbnQgKikgKGRzdF9yZWcgKyBvZmYxNikgPSBpbW0zMiAqL1xcbiBcXG4gI2RlZmluZSBCUEZfU1RfTUVNKFNJWkUsIERTVCwgT0ZGLCBJTU0pXFx0XFx0XFx0XFx0XFxcXFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2ZpeHVwcy5jIGIva2VybmVsL2JwZi9maXh1cHMuY1xcbmluZGV4IDY2MWUyZDEzYTYwNDIuLmM0YmQ3MGJlZmJiNWMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9maXh1cHMuY1xcbisrKyBiL2tlcm5lbC9icGYvZml4dXBzLmNcXG5AQCAtNDksMTYgKzQ5LDcgQEAgc3RhdGljIGludCBpbnNuX2RlZl9yZWdubyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuIFxcdGNhc2UgQlBGX1NUOlxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdGNhc2UgQlBGX1NUWDpcXG4tXFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgfHxcXG4tXFx0XFx0ICAgIEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9BVE9NSUMpIHtcXG4tXFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZWltbSA9PSBCUEZfQ01QWENIRylcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIEJQRl9SRUdfMDtcXG4tXFx0XFx0XFx0ZWxzZSBpZiAoaW5zbi1cXHUwMDNlaW1tID09IEJQRl9MT0FEX0FDUSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIGluc24tXFx1MDAzZWRzdF9yZWc7XFxuLVxcdFxcdFxcdGVsc2UgaWYgKGluc24tXFx1MDAzZWltbSBcXHUwMDI2IEJQRl9GRVRDSClcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIGluc24tXFx1MDAzZXNyY19yZWc7XFxuLVxcdFxcdH1cXG4tXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRyZXR1cm4gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIGluc24tXFx1MDAzZWRzdF9yZWc7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggYWRkM2FmZmM1NzAzNS4uNzNhMmU4YmIxNzgyYSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtNjQ4NSwyMSArNjQ4NSwxNiBAQCBzdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChpbnNuLVxcdTAwM2VpbW0gXFx1MDAyNiBCUEZfRkVUQ0gpIHtcXG4tXFx0XFx0aWYgKGluc24tXFx1MDAzZWltbSA9PSBCUEZfQ01QWENIRylcXG4tXFx0XFx0XFx0bG9hZF9yZWcgPSBCUEZfUkVHXzA7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0bG9hZF9yZWcgPSBpbnNuLVxcdTAwM2VzcmNfcmVnO1xcbi1cXG4rXFx0LypcXG4rXFx0ICogQSBuZWdhdGl2ZSBsb2FkX3JlZyBtZWFucyB0aGF0IHRoaXMgaW5zdHJ1Y3Rpb24gYWNjZXNzZXMgYSBtZW1vcnlcXG4rXFx0ICogbG9jYXRpb24gYnV0IGRvZXNuJ3QgYWN0dWFsbHkgbG9hZCBpdCBpbnRvIGEgcmVnaXN0ZXIuXFxuK1xcdCAqL1xcbitcXHRsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XFxuK1xcdGlmIChsb2FkX3JlZyBcXHUwMDNlPSAwKSB7XFxuIFxcdFxcdC8qIGNoZWNrIGFuZCByZWNvcmQgbG9hZCBvZiBvbGQgdmFsdWUgKi9cXG4gXFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGxvYWRfcmVnLCBEU1RfT1ApO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHQvKiBUaGlzIGluc3RydWN0aW9uIGFjY2Vzc2VzIGEgbWVtb3J5IGxvY2F0aW9uIGJ1dCBkb2Vzbid0XFxuLVxcdFxcdCAqIGFjdHVhbGx5IGxvYWQgaXQgaW50byBhIHJlZ2lzdGVyLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0bG9hZF9yZWcgPSAtMTtcXG4gXFx0fVxcbiBcXG4gXFx0ZHN0X3JlZyA9IGN1cl9yZWdzKGVudikgKyBpbnNuLVxcdTAwM2Vkc3RfcmVnO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jXFxuaW5kZXggMTVkZDNhZTJhODRiNy4uZTRlOTM3NDMwOWUyNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jXFxuQEAgLTEwNSw2ICsxMDUsMTAgQEAgdm9pZCB0ZXN0X3N0cmVhbV9hcmVuYV9mYXVsdF9hZGRyZXNzKHZvaWQpXFxuIFxcdFxcdHRlc3RfYWRkcmVzcyhza2VsLVxcdTAwM2Vwcm9ncy5zdHJlYW1fYXJlbmFfd3JpdGVfZmF1bHQsIFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWZhdWx0X2FkZHIpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwibG9hZF9hY3F1aXJlX2ZhdWx0XFxcIikpXFxuIFxcdFxcdHRlc3RfYWRkcmVzcyhza2VsLVxcdTAwM2Vwcm9ncy5zdHJlYW1fYXJlbmFfbG9hZF9hY3F1aXJlX2ZhdWx0LCBcXHUwMDI2c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmYXVsdF9hZGRyKTtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInhjaGdfZmF1bHRcXFwiKSlcXG4rXFx0XFx0dGVzdF9hZGRyZXNzKHNrZWwtXFx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV94Y2hnX2ZhdWx0LCBcXHUwMDI2c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmYXVsdF9hZGRyKTtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImNtcHhjaGdfZmF1bHRcXFwiKSlcXG4rXFx0XFx0dGVzdF9hZGRyZXNzKHNrZWwtXFx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV9jbXB4Y2hnX2ZhdWx0LCBcXHUwMDI2c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmYXVsdF9hZGRyKTtcXG4gXFxuIFxcdHN0cmVhbV9fZGVzdHJveShza2VsKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcXG5pbmRleCBjZjU1MzNlMTFmMzljLi4wMGEzNzkzM2U0MTFkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xcbkBAIC0yMjksNiArMjI5LDEwNyBAQCBpbnQgc3RyZWFtX2FyZW5hX2xvYWRfYWNxdWlyZV9mYXVsdCh2b2lkICpjdHgpXFxuIFxcdHJldHVybiB2YWw7XFxuIH1cXG4gXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitfX3N0ZGVycihcXFwiRVJST1I6IEFyZW5hIFdSSVRFIGFjY2VzcyBhdCB1bm1hcHBlZCBhZGRyZXNzIDB4e3suKn19XFxcIilcXG4rX19zdGRlcnIoXFxcIkNQVToge3tbMC05XSt9fSBVSUQ6IDAgUElEOiB7e1swLTldK319IENvbW06IHt7Lip9fVxcXCIpXFxuK19fc3RkZXJyKFxcXCJDYWxsIHRyYWNlOlxcXFxuXFxcIlxcbitcXFwie3soW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFxcXFxcKzB4WzAtOWEtZkEtRl0rLzB4WzAtOWEtZkEtRl0rXFxcXG5cXFwiXFxuK1xcXCJ8WyBcXFxcdF0rW15cXFxcbl0rXFxcXG4pKn19XFxcIilcXG4raW50IHN0cmVhbV9hcmVuYV94Y2hnX2ZhdWx0KHZvaWQgKmN0eClcXG4re1xcbitcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pbnNuIHhjaGdfaW5zbiA9IHtcXG4rXFx0XFx0LmNvZGVcXHQgPSAweGMzLFxcdC8qIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1cgKi9cXG4rXFx0XFx0LmRzdF9yZWcgPSAxLFxcdFxcdC8qIEJQRl9SRUdfMSAqL1xcbitcXHRcXHQuc3JjX3JlZyA9IDIsXFx0XFx0LyogQlBGX1JFR18yICovXFxuK1xcdFxcdC5vZmZcXHQgPSAweDdmZmYsXFxuK1xcdFxcdC5pbW1cXHQgPSAweGUxLFxcdC8qIEJQRl9YQ0hHICovXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBicGZfYXJlbmEgKnB0ciA9ICh2b2lkICopXFx1MDAyNmFyZW5hO1xcbitcXHR1NjQgdXNlcl92bV9zdGFydCwgdmFsO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUHJldmVudCBHQ0MgYm91bmRzIHdhcm5pbmc6IGNhc3RpbmcgXFx1MDAyNmFyZW5hIHRvIHN0cnVjdCBicGZfYXJlbmEgKlxcbitcXHQgKiB0cmlnZ2VycyBib3VuZHMgY2hlY2tpbmcgc2luY2UgdGhlIG1hcCBkZWZpbml0aW9uIGlzIHNtYWxsZXIgdGhhblxcbitcXHQgKiBzdHJ1Y3QgYnBmX2FyZW5hLiBiYXJyaWVyX3ZhcigpIG1ha2VzIHRoZSBwb2ludGVyIG9wYXF1ZSB0byBHQ0MsXFxuK1xcdCAqIHByZXZlbnRpbmcgdGhlIGJvdW5kcyBhbmFseXNpcy5cXG4rXFx0ICovXFxuK1xcdGJhcnJpZXJfdmFyKHB0cik7XFxuK1xcdHVzZXJfdm1fc3RhcnQgPSBwdHItXFx1MDAzZXVzZXJfdm1fc3RhcnQ7XFxuK1xcdGZhdWx0X2FkZHIgPSB1c2VyX3ZtX3N0YXJ0ICsgMHg3ZmZmO1xcbitcXHRicGZfYWRkcl9zcGFjZV9jYXN0KHVzZXJfdm1fc3RhcnQsIDAsIDEpO1xcbitcXHQvKlxcbitcXHQgKiBBIHJlYWQtbW9kaWZ5LXdyaXRlIGNhcnJ5aW5nIEJQRl9GRVRDSCB3cml0ZXMgdG8gbWVtb3J5LCBzbyB0aGUgZmF1bHRcXG4rXFx0ICogaGFzIHRvIGJlIHJlcG9ydGVkIGFzIGEgV1JJVEUgZnJvbSB0aGUgZHN0X3JlZyBhZGRyZXNzLCBidXQgaXQgYWxzb1xcbitcXHQgKiByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gc3JjX3JlZywgc28gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGhhcyB0b1xcbitcXHQgKiBjbGVhciBzcmNfcmVnLiBQb2lzb24gaXQgdXAgZnJvbnQsIHRoZSByZXR1cm5lZCB2YWx1ZSBtdXN0IGJlIDAuXFxuK1xcdCAqL1xcbitcXHRhc20gdm9sYXRpbGUgKFxcbitcXHRcXHRcXFwicjEgPSAlW3VzZXJfdm1fc3RhcnRdO1xcXCJcXG4rXFx0XFx0XFxcInIyID0gMTtcXFwiXFxuK1xcdFxcdFxcXCIuOGJ5dGUgJVt4Y2hnX2luc25dO1xcXCIgLyogcjIgPSB4Y2hnKCh1MzIgKikocjEgKyAweDdmZmYpLCByMikgKi9cXG4rXFx0XFx0XFxcIiVbdmFsXSA9IHIyO1xcXCJcXG4rXFx0XFx0OiBbdmFsXSBcXFwiPXJcXFwiICh2YWwpXFxuK1xcdFxcdDogW3VzZXJfdm1fc3RhcnRdIFxcXCJyXFxcIiAodXNlcl92bV9zdGFydCksXFxuK1xcdFxcdCAgX19pbW1faW5zbih4Y2hnX2luc24sIHhjaGdfaW5zbilcXG4rXFx0XFx0OiBcXFwicjFcXFwiLCBcXFwicjJcXFwiXFxuK1xcdCk7XFxuK1xcdHJldHVybiB2YWw7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitfX3N0ZGVycihcXFwiRVJST1I6IEFyZW5hIFdSSVRFIGFjY2VzcyBhdCB1bm1hcHBlZCBhZGRyZXNzIDB4e3suKn19XFxcIilcXG4rX19zdGRlcnIoXFxcIkNQVToge3tbMC05XSt9fSBVSUQ6IDAgUElEOiB7e1swLTldK319IENvbW06IHt7Lip9fVxcXCIpXFxuK19fc3RkZXJyKFxcXCJDYWxsIHRyYWNlOlxcXFxuXFxcIlxcbitcXFwie3soW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFxcXFxcKzB4WzAtOWEtZkEtRl0rLzB4WzAtOWEtZkEtRl0rXFxcXG5cXFwiXFxuK1xcXCJ8WyBcXFxcdF0rW15cXFxcbl0rXFxcXG4pKn19XFxcIilcXG4raW50IHN0cmVhbV9hcmVuYV9jbXB4Y2hnX2ZhdWx0KHZvaWQgKmN0eClcXG4re1xcbitcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pbnNuIGNtcHhjaGdfaW5zbiA9IHtcXG4rXFx0XFx0LmNvZGVcXHQgPSAweGMzLFxcdC8qIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1cgKi9cXG4rXFx0XFx0LmRzdF9yZWcgPSAxLFxcdFxcdC8qIEJQRl9SRUdfMSAqL1xcbitcXHRcXHQuc3JjX3JlZyA9IDIsXFx0XFx0LyogQlBGX1JFR18yICovXFxuK1xcdFxcdC5vZmZcXHQgPSAweDdmZmYsXFxuK1xcdFxcdC5pbW1cXHQgPSAweGYxLFxcdC8qIEJQRl9DTVBYQ0hHICovXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBicGZfYXJlbmEgKnB0ciA9ICh2b2lkICopXFx1MDAyNmFyZW5hO1xcbitcXHR1NjQgdXNlcl92bV9zdGFydCwgdmFsO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUHJldmVudCBHQ0MgYm91bmRzIHdhcm5pbmc6IGNhc3RpbmcgXFx1MDAyNmFyZW5hIHRvIHN0cnVjdCBicGZfYXJlbmEgKlxcbitcXHQgKiB0cmlnZ2VycyBib3VuZHMgY2hlY2tpbmcgc2luY2UgdGhlIG1hcCBkZWZpbml0aW9uIGlzIHNtYWxsZXIgdGhhblxcbitcXHQgKiBzdHJ1Y3QgYnBmX2FyZW5hLiBiYXJyaWVyX3ZhcigpIG1ha2VzIHRoZSBwb2ludGVyIG9wYXF1ZSB0byBHQ0MsXFxuK1xcdCAqIHByZXZlbnRpbmcgdGhlIGJvdW5kcyBhbmFseXNpcy5cXG4rXFx0ICovXFxuK1xcdGJhcnJpZXJfdmFyKHB0cik7XFxuK1xcdHVzZXJfdm1fc3RhcnQgPSBwdHItXFx1MDAzZXVzZXJfdm1fc3RhcnQ7XFxuK1xcdGZhdWx0X2FkZHIgPSB1c2VyX3ZtX3N0YXJ0ICsgMHg3ZmZmO1xcbitcXHRicGZfYWRkcl9zcGFjZV9jYXN0KHVzZXJfdm1fc3RhcnQsIDAsIDEpO1xcbitcXHQvKlxcbitcXHQgKiBTYW1lIGFzIHRoZSBleGNoYW5nZSBhYm92ZSwgZXhjZXB0IHRoYXQgYSBCUEZfQ01QWENIRyByZWFkcyB0aGUgb2xkXFxuK1xcdCAqIHZhbHVlIGludG8gcjAgcmF0aGVyIHRoYW4gaW50byBzcmNfcmVnLCBzbyByMCBpcyB0aGUgcmVnaXN0ZXIgdGhlXFxuK1xcdCAqIGV4Y2VwdGlvbiBoYW5kbGVyIGhhcyB0byBjbGVhci4gSXQgZG91YmxlcyBhcyB0aGUgY29tcGFyZSB2YWx1ZSwgYnV0XFxuK1xcdCAqIHRoZSBjb21wYXJpc29uIG5ldmVyIGhhcHBlbnMgc2luY2UgdGhlIGFjY2VzcyBmYXVsdHMgZmlyc3QuXFxuK1xcdCAqL1xcbitcXHRhc20gdm9sYXRpbGUgKFxcbitcXHRcXHRcXFwicjEgPSAlW3VzZXJfdm1fc3RhcnRdO1xcXCJcXG4rXFx0XFx0XFxcInIwID0gMTtcXFwiXFxuK1xcdFxcdFxcXCJyMiA9IDI7XFxcIlxcbitcXHRcXHRcXFwiLjhieXRlICVbY21weGNoZ19pbnNuXTtcXFwiIC8qIHIwID0gY21weGNoZygodTMyICopKHIxICsgMHg3ZmZmKSwgcjAsIHIyKSAqL1xcbitcXHRcXHRcXFwiJVt2YWxdID0gcjA7XFxcIlxcbitcXHRcXHQ6IFt2YWxdIFxcXCI9clxcXCIgKHZhbClcXG4rXFx0XFx0OiBbdXNlcl92bV9zdGFydF0gXFxcInJcXFwiICh1c2VyX3ZtX3N0YXJ0KSxcXG4rXFx0XFx0ICBfX2ltbV9pbnNuKGNtcHhjaGdfaW5zbiwgY21weGNoZ19pbnNuKVxcbitcXHRcXHQ6IFxcXCJyMFxcXCIsIFxcXCJyMVxcXCIsIFxcXCJyMlxcXCJcXG4rXFx0KTtcXG4rXFx0cmV0dXJuIHZhbDtcXG4rfVxcbitcXG4gc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBzdWJwcm9nKHZvaWQpXFxuIHtcXG4gXFx0aW50IF9fYXJlbmEgKmFkZHIgPSAoaW50IF9fYXJlbmEgKikweGRlYWRiZWVmO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNDoxOS42MjAwMTA0NjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NDI3MDEzNzAyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnNuX2RlZjMyXCIsXG4gICAgXCJleF9oYW5kbGVyX2JwZlwiLFxuICAgIFwiYnBmX2ppdF9lbWl0X2luc25cIixcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVycyAoeDg2LCBhcm02NCwgcmlzY3YsIHMzOTApIGFuZCB0aGUgQlBGIHZlcmlmaWVyIHRvIGNvcnJlY3RseSBoYW5kbGUgZXhjZXB0aW9ucyBmb3IgYXRvbWljIG9wZXJhdGlvbnMgaW4gdGhlIEJQRiBhcmVuYS4gSXQgaW50cm9kdWNlcyBgYnBmX2F0b21pY19sb2FkX3JlZ2AgdG8gaWRlbnRpZnkgdGhlIHJlZ2lzdGVyIHRoYXQgbmVlZHMgdG8gYmUgY2xlYXJlZCB3aGVuIGFuIGF0b21pYyBpbnN0cnVjdGlvbiBmYXVsdHMsIGFuZCBlbnN1cmVzIHRoYXQgcmVhZC1tb2RpZnktd3JpdGUgb3BlcmF0aW9ucyBhcmUgY29ycmVjdGx5IHJlcG9ydGVkIGFzIHdyaXRlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJQRiBzdWJzeXN0ZW0pIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNGFhNzUyMWY4NTgwM2ZkM2ExYmFlMTQ1MTlkYTBhYmRjMWRmMDFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDA6MzQ6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBkMTRkMjk3ZWJiOTY3Li43NGI0MDgzNzkxZGEzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMTA4MiwyMyArMTA4MiwyNyBAQCBzdGF0aWMgdm9pZCBidWlsZF9lcGlsb2d1ZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIHdhc19jbGFzc2ljKVxuICAqXG4gICogQml0IGxheW91dCBvZiBgZml4dXBgICgzMi1iaXQpOlxuICAqXG4tICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rXG4tICogfCAgIDMxLTI3ICAgfCAyNi0yMiAgfCAgICAgMjEgICAgfCAgIDIwLTE2ICAgfCAgIDE1LTAgICB8XG4tICogfCAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8XG4tICogfCBGSVhVUF9SRUcgfCBVbnVzZWQgfCBBUkVOQV9BQ0MgfCBBUkVOQV9SRUcgfCAgT0ZGU0VUICB8XG4tICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rXG4rICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLStcbisgKiB8ICAgMzEtMjcgICB8IDI2LTIzICB8ICAgICAgMjIgICAgIHwgICAgIDIxICAgIHwgICAyMC0xNiAgIHwgICAxNS0wICAgfFxuKyAqIHwgICAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8XG4rICogfCBGSVhVUF9SRUcgfCBVbnVzZWQgfCBBUkVOQV9XUklURSB8IEFSRU5BX0FDQyB8IEFSRU5BX1JFRyB8ICBPRkZTRVQgIHxcbisgKiArLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tK1xuICAqXG4gICogLSBPRkZTRVQgKDE2IGJpdHMpOiBPZmZzZXQgdXNlZCB0byBjb21wdXRlIGFkZHJlc3MgZm9yIExvYWQvU3RvcmUgaW5zdHJ1Y3Rpb24uXG4gICogLSBBUkVOQV9SRUcgKDUgYml0cyk6IFJlZ2lzdGVyIHRoYXQgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGFkZHJlc3MgZm9yIGxvYWQvc3RvcmUgd2hlblxuICAqICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NpbmcgdGhlIGFyZW5hIHJlZ2lvbi5cbiAgKiAtIEFSRU5BX0FDQ0VTUyAoMSBiaXQpOiBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24gYWNjZXNzZWQgdGhlIGFyZW5hIHJlZ2lvbi5cbisgKiAtIEFSRU5BX1dSSVRFICgxIGJpdCk6IFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiB3cm90ZSB0byB0aGUgYXJlbmEgcmVnaW9uLlxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW5kZXBlbmRlbnQgb2YgRklYVVBfUkVHLCBzaW5jZSBhIHJlYWQtbW9kaWZ5LXdyaXRlIGJvdGggd3JpdGVzIHRvXG4rICogICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgYW5kIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBhIHJlZ2lzdGVyLlxuICAqIC0gRklYVVBfUkVHICg1IGJpdHMpOiBEZXN0aW5hdGlvbiByZWdpc3RlciBmb3IgdGhlIGxvYWQgaW5zdHJ1Y3Rpb24gKGNsZWFyZWQgb24gZmF1bHQpIG9yIHNldCB0b1xuLSAqICAgICAgICAgICAgICAgICAgICAgICBET05UX0NMRUFSIGlmIGl0IGlzIGEgc3RvcmUgaW5zdHJ1Y3Rpb24uXG4rICogICAgICAgICAgICAgICAgICAgICAgIERPTlRfQ0xFQVIgaWYgdGhlIGluc3RydWN0aW9uIGRvZXMgbm90IHJlYWQgaW50byBhIHJlZ2lzdGVyLlxuICAqL1xuIFxuICNkZWZpbmUgQlBGX0ZJWFVQX09GRlNFVF9NQVNLICAgICAgR0VOTUFTSygxNSwgMClcbiAjZGVmaW5lIEJQRl9GSVhVUF9BUkVOQV9SRUdfTUFTSyAgIEdFTk1BU0soMjAsIDE2KVxuICNkZWZpbmUgQlBGX0FSRU5BX0FDQ0VTUyAgICAgICAgICAgQklUKDIxKVxuKyNkZWZpbmUgQlBGX0FSRU5BX1dSSVRFICAgICAgICAgICAgQklUKDIyKVxuICNkZWZpbmUgQlBGX0ZJWFVQX1JFR19NQVNLXHRHRU5NQVNLKDMxLCAyNylcbiAjZGVmaW5lIERPTlRfQ0xFQVIgNSAvKiBVbnVzZWQgQVJNNjQgcmVnaXN0ZXIgZnJvbSBCUEYncyBQT1YgKi9cbiBcbkBAIC0xMTA5LDcgKzExMTMsNyBAQCBib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxuIFx0czE2IG9mZiA9IEZJRUxEX0dFVChCUEZfRklYVVBfT0ZGU0VUX01BU0ssIGV4LVx1MDAzZWZpeHVwKTtcbiBcdGludCBhcmVuYV9yZWcgPSBGSUVMRF9HRVQoQlBGX0ZJWFVQX0FSRU5BX1JFR19NQVNLLCBleC1cdTAwM2VmaXh1cCk7XG4gXHRib29sIGlzX2FyZW5hID0gISEoZXgtXHUwMDNlZml4dXAgXHUwMDI2IEJQRl9BUkVOQV9BQ0NFU1MpO1xuLVx0Ym9vbCBpc193cml0ZSA9IChkc3RfcmVnID09IERPTlRfQ0xFQVIpO1xuK1x0Ym9vbCBpc193cml0ZSA9ICEhKGV4LVx1MDAzZWZpeHVwIFx1MDAyNiBCUEZfQVJFTkFfV1JJVEUpO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyO1xuIFxuIFx0aWYgKGlzX2FyZW5hKSB7XG5AQCAtMTEzMiw3ICsxMTM2LDcgQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIHtcbiBcdG9mZl90IGluc19vZmZzZXQ7XG4gXHRzMTYgb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4tXHRib29sIGlzX2FyZW5hO1xuK1x0Ym9vbCBpc19hcmVuYSwgaXNfd3JpdGU7XG4gXHRpbnQgYXJlbmFfcmVnO1xuIFx0dW5zaWduZWQgbG9uZyBwYztcbiBcdHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4O1xuQEAgLTExODEsMTUgKzExODUsMTggQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0LypcbiBcdCAqIEEgbG9hZC1hY3F1aXJlIGlzIG9mIEJQRl9TVFggY2xhc3MsIGJ1dCByZWFkcyBmcm9tIHNyY19yZWcgaW50b1xuIFx0ICogZHN0X3JlZyBsaWtlIGEgQlBGX0xEWCBkb2VzLCBoZW5jZSBpdCBtdXN0IG5vdCBiZSB0cmVhdGVkIGFzIGEgc3RvcmVcbi1cdCAqIGhlcmUuXG4rXHQgKiBoZXJlLiBBIHJlYWQtbW9kaWZ5LXdyaXRlIGNhcnJ5aW5nIEJQRl9GRVRDSCBpcyByZXBvcnRlZCBhcyBhIHdyaXRlXG4rXHQgKiBldmVuIHRob3VnaCBpdCBkb2VzIGhhdmUgYSByZWdpc3RlciB0byBjbGVhciwgc2VlIHRoZSBjYWxsZXJzLlxuIFx0ICovXG4tXHRpZiAoQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX0xEWCBcdTAwMjZcdTAwMjYgIWJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikpXG4tXHRcdGRzdF9yZWcgPSBET05UX0NMRUFSO1xuK1x0aXNfd3JpdGUgPSBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTERYIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAhYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKTtcbiBcbiBcdGV4LVx1MDAzZWZpeHVwID0gRklFTERfUFJFUChCUEZfRklYVVBfUkVHX01BU0ssIGRzdF9yZWcpO1xuIFxuIFx0aWYgKGlzX2FyZW5hKSB7XG4gXHRcdGV4LVx1MDAzZWZpeHVwIHw9IEJQRl9BUkVOQV9BQ0NFU1M7XG4rXHRcdGlmIChpc193cml0ZSlcbitcdFx0XHRleC1cdTAwM2VmaXh1cCB8PSBCUEZfQVJFTkFfV1JJVEU7XG4gXHRcdC8qXG4gXHRcdCAqIGluc24tXHUwMDNlc3JjX3JlZy9kc3RfcmVnIGhvbGRzIHRoZSBhZGRyZXNzIGluIHRoZSBhcmVuYSByZWdpb24gd2l0aCB1cHBlciAzMi1iaXRzXG4gXHRcdCAqIGJlaW5nIHplcm8gYmVjYXVzZSBvZiBhIHByZWNlZGluZyBhZGRyX3NwYWNlX2Nhc3Qoclx1MDAzY25cdTAwM2UsIDB4MCwgMHgxKSBpbnN0cnVjdGlvbi5cbkBAIC0xODg5LDcgKzE4OTYsNyBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgZHN0KTtcbitcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgRE9OVF9DTEVBUik7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0YnJlYWs7XG5AQCAtMTk1Niw3ICsxOTYzLDcgQEAgc3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zblxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGRzdCk7XG4rXHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIERPTlRfQ0xFQVIpO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdGJyZWFrO1xuQEAgLTE5NzksNyArMTk4NiwxNiBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcbiBcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX0FUT01JQykge1xuLVx0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGRzdCk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBIGxvYWQtYWNxdWlyZSByZWFkcyBpbnRvIGRzdF9yZWcsIGFuZCBhIHJlYWQtbW9kaWZ5LXdyaXRlXG4rXHRcdFx0ICogY2FycnlpbmcgQlBGX0ZFVENIIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBzcmNfcmVnLCBvciBpbnRvXG4rXHRcdFx0ICogcjAgZm9yIGEgQlBGX0NNUFhDSEcuIENsZWFyIHRoYXQgcmVnaXN0ZXIgb24gZmF1bHQsIHRoZVxuK1x0XHRcdCAqIHJlbWFpbmluZyBhdG9taWNzIGhhdmUgbm8gZGVzdGluYXRpb24gcmVnaXN0ZXIuXG4rXHRcdFx0ICovXG4rXHRcdFx0aW50IGxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcbitcbitcdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgY3R4LCBsb2FkX3JlZyBcdTAwM2MgMCA/XG4rXHRcdFx0XHRcdFx0ICAgIERPTlRfQ0xFQVIgOiBicGYyYTY0W2xvYWRfcmVnXSk7XG4gXHRcdFx0aWYgKHJldClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuaW5kZXggNmI5OTcyYjA3YzFiMC4uMjUwNGRmMWZhMTExOCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbisrKyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbkBAIC0xOTkyLDEwICsxOTkyLDE5IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFx0XHRcdHJldCA9IGVtaXRfYXRvbWljX3JtdyhyZCwgcnMsIGluc24sIGN0eCk7XG4gXG4gXHRcdC8qIHJldCBjYW4gYmUgMSAoc2tpcC16ZXh0KTsgZXh0YWJsZSBlbnRyeSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZCAqL1xuLVx0XHRpZiAocmV0IFx1MDAzZT0gMClcbi1cdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbixcbi1cdFx0XHRcdGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikgPyByZCA6IFJFR19ET05UX0NMRUFSX01BUktFUixcbi1cdFx0XHRcdGN0eCkgPzogcmV0O1xuK1x0XHRpZiAocmV0IFx1MDAzZT0gMCkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogQSBsb2FkLWFjcXVpcmUgcmVhZHMgaW50byBkc3RfcmVnLCBhbmQgYSByZWFkLW1vZGlmeS13cml0ZVxuK1x0XHRcdCAqIGNhcnJ5aW5nIEJQRl9GRVRDSCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gc3JjX3JlZywgb3IgaW50b1xuK1x0XHRcdCAqIHIwIGZvciBhIEJQRl9DTVBYQ0hHLiBDbGVhciB0aGF0IHJlZ2lzdGVyIG9uIGZhdWx0LCB0aGVcbitcdFx0XHQgKiByZW1haW5pbmcgYXRvbWljcyBoYXZlIG5vIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG4rXG4rXHRcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGxvYWRfcmVnIFx1MDAzYyAwID9cbitcdFx0XHRcdFx0UkVHX0RPTlRfQ0xFQVJfTUFSS0VSIDogcmVnbWFwW2xvYWRfcmVnXSxcbitcdFx0XHRcdFx0Y3R4KSA/OiByZXQ7XG4rXHRcdH1cbiBcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBiNjA4Nzc0NzhiNDVkLi5jNDY4NzJiMDcxY2U3IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTc3NCw2ICs3NzQsOCBAQCBzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX2F0b21pY19wcmUoc3RydWN0IGJwZl9qaXQgKmppdCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXG4ge1xuK1x0aW50IGxvYWRfcmVnO1xuK1xuIFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX0FUT01JQylcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTc4Myw2ICs3ODUsMTQgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsXG4gXHRFTUlUNCgweGI5MDgwMDAwLCBSRUdfVzEsIGluc24tXHUwMDNlZHN0X3JlZyk7XG4gXHRwcm9iZS1cdTAwM2VhcmVuYV9yZWcgPSBSRUdfVzE7XG4gXHRwcm9iZS1cdTAwM2VwcmcgPSBqaXQtXHUwMDNlcHJnO1xuK1x0LypcbitcdCAqIEEgcmVhZC1tb2RpZnktd3JpdGUgY2FycnlpbmcgQlBGX0ZFVENIIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50b1xuK1x0ICogc3JjX3JlZywgb3IgaW50byByMCBmb3IgYSBCUEZfQ01QWENIRy4gQ2xlYXIgdGhhdCByZWdpc3RlciBvblxuK1x0ICogZmF1bHQsIHRoZSByZW1haW5pbmcgYXRvbWljcyBvbmx5IHdyaXRlIG1lbW9yeS5cbitcdCAqL1xuK1x0bG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xuK1x0aWYgKGxvYWRfcmVnIFx1MDAzZT0gMClcbitcdFx0cHJvYmUtXHUwMDNlcmVnID0gcmVnMmhleFtsb2FkX3JlZ107XG4gfVxuIFxuIHN0YXRpYyBpbnQgYnBmX2ppdF9wcm9iZV9wb3N0KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG5AQCAtMTY4NCw2ICsxNjk0LDcgQEAgc3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcbiBcdFx0XHRpZiAobG9hZF9wcm9iZS5wcmcgIT0gLTEpIHtcbiBcdFx0XHRcdHByb2JlLnByZyA9IGppdC1cdTAwM2Vwcmc7XG4gXHRcdFx0XHRwcm9iZS5hcmVuYV9yZWcgPSBsb2FkX3Byb2JlLmFyZW5hX3JlZztcbitcdFx0XHRcdHByb2JlLnJlZyA9IGxvYWRfcHJvYmUucmVnO1xuIFx0XHRcdH1cbiBcdFx0XHRsb29wX3N0YXJ0ID0gaml0LVx1MDAzZXByZztcbiBcdFx0XHQvKiAwOiB7Y3N5fGNzZ30gJXcwLCVzcmMsb2ZmKCVhcmVuYSkgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IDhkZGRiNWQ3YWYyMWIuLmQ5MjA3NzJhZjdkNWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTE0NzMsMTcgKzE0NzMsMjAgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19sZF9zdF9pbmRleCh1OCAqKnBwcm9nLCB1MzIgYXRvbWljX29wLCB1MzIgc2l6ZSxcbiAgKlxuICAqIEJpdCBsYXlvdXQgb2YgYGZpeHVwYCAoMzItYml0KTpcbiAgKlxuLSAqICstLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLStcbi0gKiB8IDMxICAgICAgICB8IDMwLTI0ICB8ICAgMjMtMTYgICB8ICAgMTUtOCAgfCAgICA3LTAgICB8XG4tICogfCAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgfFxuLSAqIHwgQVJFTkFfQUNDIHwgVW51c2VkIHwgQVJFTkFfUkVHIHwgRFNUX1JFRyB8IElOU05fTEVOIHxcbi0gKiArLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rXG4rICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rXG4rICogfCAzMSAgICAgICAgfCAzMCAgICAgICAgICB8IDI5LTI0ICB8ICAgMjMtMTYgICB8ICAgMTUtOCAgfCAgICA3LTAgICB8XG4rICogfCAgICAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICB8XG4rICogfCBBUkVOQV9BQ0MgfCBBUkVOQV9XUklURSB8IFVudXNlZCB8IEFSRU5BX1JFRyB8IERTVF9SRUcgfCBJTlNOX0xFTiB8XG4rICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rXG4gICpcbiAgKiAtIElOU05fTEVOICg4IGJpdHMpOiBMZW5ndGggb2YgZmF1bHRpbmcgaW5zbiAobWF4IHg4NiBpbnNuID0gMTUgYnl0ZXMgKGZpdHMgaW4gOCBiaXRzKSkuXG4gICogLSBEU1RfUkVHICAoOCBiaXRzKTogT2Zmc2V0IG9mIGRzdF9yZWcgZnJvbSByZWcycHRfcmVnc1tdIChtYXggb2Zmc2V0ID0gMTEyIChmaXRzIGluIDggYml0cykpLlxuLSAqICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgc2V0IHRvIERPTlRfQ0xFQVIgaWYgdGhlIGluc24gaXMgYSBzdG9yZS5cbisgKiAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHNldCB0byBET05UX0NMRUFSIGlmIHRoZSBpbnNuIGRvZXMgbm90IHJlYWQgaW50byBhIHJlZ2lzdGVyLlxuICAqIC0gQVJFTkFfUkVHICg4IGJpdHMpOiBPZmZzZXQgb2YgdGhlIHJlZ2lzdGVyIHRoYXQgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlXG4gICogICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgZm9yIGxvYWQvc3RvcmUgd2hlbiBhY2Nlc3NpbmcgdGhlIGFyZW5hIHJlZ2lvbi5cbisgKiAtIEFSRU5BX1dSSVRFICgxIGJpdCk6IFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiB3cm90ZSB0byB0aGUgYXJlbmEgcmVnaW9uLlxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW5kZXBlbmRlbnQgb2YgRFNUX1JFRywgc2luY2UgYSByZWFkLW1vZGlmeS13cml0ZSBib3RoIHdyaXRlcyB0b1xuKyAqICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5IGFuZCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gYSByZWdpc3Rlci5cbiAgKiAtIEFSRU5BX0FDQ0VTUyAoMSBiaXQpOiBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24gYWNjZXNzZWQgdGhlIGFyZW5hIHJlZ2lvbi5cbiAgKlxuICAqIEJpdCBsYXlvdXQgb2YgYGRhdGFgICgzMi1iaXQpOlxuQEAgLTE1MDIsNiArMTUwNSw3IEBAIHN0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3RfaW5kZXgodTggKipwcHJvZywgdTMyIGF0b21pY19vcCwgdTMyIHNpemUsXG4gI2RlZmluZSBGSVhVUF9JTlNOX0xFTl9NQVNLXHRHRU5NQVNLKDcsIDApXG4gI2RlZmluZSBGSVhVUF9SRUdfTUFTS1x0XHRHRU5NQVNLKDE1LCA4KVxuICNkZWZpbmUgRklYVVBfQVJFTkFfUkVHX01BU0tcdEdFTk1BU0soMjMsIDE2KVxuKyNkZWZpbmUgRklYVVBfQVJFTkFfV1JJVEVcdEJJVCgzMClcbiAjZGVmaW5lIEZJWFVQX0FSRU5BX0FDQ0VTU1x0QklUKDMxKVxuICNkZWZpbmUgREFUQV9BUkVOQV9PRkZTRVRfTUFTS1x0R0VOTUFTSygzMSwgMTYpXG4gXG5AQCAtMTUxMCw3ICsxNTE0LDcgQEAgYm9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICp4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdHUzMiByZWcgPSBGSUVMRF9HRVQoRklYVVBfUkVHX01BU0ssIHgtXHUwMDNlZml4dXApO1xuIFx0dTMyIGluc25fbGVuID0gRklFTERfR0VUKEZJWFVQX0lOU05fTEVOX01BU0ssIHgtXHUwMDNlZml4dXApO1xuIFx0Ym9vbCBpc19hcmVuYSA9ICEhKHgtXHUwMDNlZml4dXAgXHUwMDI2IEZJWFVQX0FSRU5BX0FDQ0VTUyk7XG4tXHRib29sIGlzX3dyaXRlID0gKHJlZyA9PSBET05UX0NMRUFSKTtcbitcdGJvb2wgaXNfd3JpdGUgPSAhISh4LVx1MDAzZWZpeHVwIFx1MDAyNiBGSVhVUF9BUkVOQV9XUklURSk7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHI7XG4gXHRzMTYgb2ZmO1xuIFx0dTMyIGFyZW5hX3JlZztcbkBAIC0yMzQ4LDYgKzIzNTIsNyBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdFx0c3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXg7XG4gXHRcdFx0XHR1OCAqX2luc24gPSBpbWFnZSArIHByb2dsZW4gKyAoc3RhcnRfb2ZfbGR4IC0gdGVtcCk7XG4gXHRcdFx0XHR1MzIgYXJlbmFfcmVnLCBmaXh1cF9yZWc7XG4rXHRcdFx0XHRib29sIGlzX3dyaXRlO1xuIFx0XHRcdFx0czY0IGRlbHRhO1xuIFxuIFx0XHRcdFx0aWYgKCFicGZfcHJvZy1cdTAwM2VhdXgtXHUwMDNlZXh0YWJsZSlcbkBAIC0yMzg0LDE1ICsyMzg5LDI5IEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0XHQgICAgYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSkge1xuIFx0XHRcdFx0XHRhcmVuYV9yZWcgPSByZWcycHRfcmVnc1tzcmNfcmVnXTtcbiBcdFx0XHRcdFx0Zml4dXBfcmVnID0gcmVnMnB0X3JlZ3NbZHN0X3JlZ107XG4rXHRcdFx0XHRcdGlzX3dyaXRlID0gZmFsc2U7XG4gXHRcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0XHQvKlxuK1x0XHRcdFx0XHQgKiBBIHN0b3JlIGhhcyBubyBkZXN0aW5hdGlvbiByZWdpc3RlciB0byBjbGVhcixcbitcdFx0XHRcdFx0ICogZXhjZXB0IGZvciBhIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggQlBGX0ZFVENILFxuK1x0XHRcdFx0XHQgKiB3aGljaCBhbHNvIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBzcmNfcmVnLCBvclxuK1x0XHRcdFx0XHQgKiBpbnRvIHIwIGZvciBhIEJQRl9DTVBYQ0hHLiBFaXRoZXIgd2F5IHRoZSBhY2Nlc3NcbitcdFx0XHRcdFx0ICogaXMgc3RpbGwgcmVwb3J0ZWQgYXMgYSB3cml0ZS5cbitcdFx0XHRcdFx0ICovXG4rXHRcdFx0XHRcdGludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG4rXG4gXHRcdFx0XHRcdGFyZW5hX3JlZyA9IHJlZzJwdF9yZWdzW2RzdF9yZWddO1xuLVx0XHRcdFx0XHRmaXh1cF9yZWcgPSBET05UX0NMRUFSO1xuK1x0XHRcdFx0XHRmaXh1cF9yZWcgPSBsb2FkX3JlZyBcdTAwM2MgMCA/IERPTlRfQ0xFQVIgOlxuK1x0XHRcdFx0XHRcdCAgICByZWcycHRfcmVnc1tsb2FkX3JlZ107XG4rXHRcdFx0XHRcdGlzX3dyaXRlID0gdHJ1ZTtcbiBcdFx0XHRcdH1cbiBcbiBcdFx0XHRcdGV4LVx1MDAzZWZpeHVwID0gRklFTERfUFJFUChGSVhVUF9JTlNOX0xFTl9NQVNLLCBwcm9nIC0gc3RhcnRfb2ZfbGR4KSB8XG4gXHRcdFx0XHRcdCAgICBGSUVMRF9QUkVQKEZJWFVQX0FSRU5BX1JFR19NQVNLLCBhcmVuYV9yZWcpIHxcbiBcdFx0XHRcdFx0ICAgIEZJRUxEX1BSRVAoRklYVVBfUkVHX01BU0ssIGZpeHVwX3JlZyk7XG4gXHRcdFx0XHRleC1cdTAwM2VmaXh1cCB8PSBGSVhVUF9BUkVOQV9BQ0NFU1M7XG4rXHRcdFx0XHRpZiAoaXNfd3JpdGUpXG4rXHRcdFx0XHRcdGV4LVx1MDAzZWZpeHVwIHw9IEZJWFVQX0FSRU5BX1dSSVRFO1xuIFxuIFx0XHRcdFx0ZXgtXHUwMDNlZGF0YSB8PSBGSUVMRF9QUkVQKERBVEFfQVJFTkFfT0ZGU0VUX01BU0ssIGluc24tXHUwMDNlb2ZmKTtcbiBcdFx0XHR9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbmluZGV4IDRlZGJhODE4MmRiMWIuLjE1ZDgzNjg0YzZlOTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5AQCAtNDE0LDYgKzQxNCwzMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX2F0b21pY19pc19sb2FkX2FjcShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHQgICAgICAgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRO1xuIH1cbiBcbisvKlxuKyAqIEdpdmVuIGFuIGluc3RydWN0aW9uIEBpbnNuLCByZXR1cm4gdGhlIG51bWJlciBvZiB0aGUgQlBGIHJlZ2lzdGVyIHRoYXQgYVxuKyAqIEJQRl9BVE9NSUMgcmVhZHMgdGhlIHZhbHVlIGF0IGl0cyBtZW1vcnkgb3BlcmFuZCBpbnRvLCBvciAtMSBpZiB0aGVyZSBpc1xuKyAqIG5vIHN1Y2ggcmVnaXN0ZXIuIFRoYXQgaXMgdGhlIHJlZ2lzdGVyIGEgQlBGX1BST0JFX0FUT01JQyBoYXMgdG8gY2xlYXIgd2hlblxuKyAqIHRoZSBhY2Nlc3MgZmF1bHRzLiBMaWtlIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoKSwgQGluc24gaXMgbm90IGFzc3VtZWQgdG9cbisgKiBiZSBhIEJQRl9BVE9NSUMgaGVyZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBicGZfYXRvbWljX2xvYWRfcmVnKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbit7XG4rXHRpZiAoQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1NUWCB8fFxuK1x0ICAgIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4rXHQgICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX0FUT01JQykpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdHN3aXRjaCAoaW5zbi1cdTAwM2VpbW0pIHtcbitcdGNhc2UgQlBGX0xPQURfQUNROlxuK1x0XHRyZXR1cm4gaW5zbi1cdTAwM2Vkc3RfcmVnO1xuK1x0Y2FzZSBCUEZfQ01QWENIRzpcbitcdFx0cmV0dXJuIEJQRl9SRUdfMDtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAoaW5zbi1cdTAwM2VpbW0gXHUwMDI2IEJQRl9GRVRDSCkgPyBpbnNuLVx1MDAzZXNyY19yZWcgOiAtMTtcbitcdH1cbit9XG4rXG4gLyogTWVtb3J5IHN0b3JlLCAqKHVpbnQgKikgKGRzdF9yZWcgKyBvZmYxNikgPSBpbW0zMiAqL1xuIFxuICNkZWZpbmUgQlBGX1NUX01FTShTSVpFLCBEU1QsIE9GRiwgSU1NKVx0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2ZpeHVwcy5jIGIva2VybmVsL2JwZi9maXh1cHMuY1xuaW5kZXggNjYxZTJkMTNhNjA0Mi4uYzRiZDcwYmVmYmI1YyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmNcbisrKyBiL2tlcm5lbC9icGYvZml4dXBzLmNcbkBAIC00OSwxNiArNDksNyBAQCBzdGF0aWMgaW50IGluc25fZGVmX3JlZ25vKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdGNhc2UgQlBGX1NUOlxuIFx0XHRyZXR1cm4gLTE7XG4gXHRjYXNlIEJQRl9TVFg6XG4tXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgfHxcbi1cdFx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX0FUT01JQykge1xuLVx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSA9PSBCUEZfQ01QWENIRylcbi1cdFx0XHRcdHJldHVybiBCUEZfUkVHXzA7XG4tXHRcdFx0ZWxzZSBpZiAoaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRKVxuLVx0XHRcdFx0cmV0dXJuIGluc24tXHUwMDNlZHN0X3JlZztcbi1cdFx0XHRlbHNlIGlmIChpbnNuLVx1MDAzZWltbSBcdTAwMjYgQlBGX0ZFVENIKVxuLVx0XHRcdFx0cmV0dXJuIGluc24tXHUwMDNlc3JjX3JlZztcbi1cdFx0fVxuLVx0XHRyZXR1cm4gLTE7XG4rXHRcdHJldHVybiBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIGluc24tXHUwMDNlZHN0X3JlZztcbiBcdH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGFkZDNhZmZjNTcwMzUuLjczYTJlOGJiMTc4MmEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTY0ODUsMjEgKzY0ODUsMTYgQEAgc3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0fVxuIFxuLVx0aWYgKGluc24tXHUwMDNlaW1tIFx1MDAyNiBCUEZfRkVUQ0gpIHtcbi1cdFx0aWYgKGluc24tXHUwMDNlaW1tID09IEJQRl9DTVBYQ0hHKVxuLVx0XHRcdGxvYWRfcmVnID0gQlBGX1JFR18wO1xuLVx0XHRlbHNlXG4tXHRcdFx0bG9hZF9yZWcgPSBpbnNuLVx1MDAzZXNyY19yZWc7XG4tXG4rXHQvKlxuK1x0ICogQSBuZWdhdGl2ZSBsb2FkX3JlZyBtZWFucyB0aGF0IHRoaXMgaW5zdHJ1Y3Rpb24gYWNjZXNzZXMgYSBtZW1vcnlcbitcdCAqIGxvY2F0aW9uIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGxvYWQgaXQgaW50byBhIHJlZ2lzdGVyLlxuK1x0ICovXG4rXHRsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG4rXHRpZiAobG9hZF9yZWcgXHUwMDNlPSAwKSB7XG4gXHRcdC8qIGNoZWNrIGFuZCByZWNvcmQgbG9hZCBvZiBvbGQgdmFsdWUgKi9cbiBcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGxvYWRfcmVnLCBEU1RfT1ApO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4tXHR9IGVsc2Uge1xuLVx0XHQvKiBUaGlzIGluc3RydWN0aW9uIGFjY2Vzc2VzIGEgbWVtb3J5IGxvY2F0aW9uIGJ1dCBkb2Vzbid0XG4tXHRcdCAqIGFjdHVhbGx5IGxvYWQgaXQgaW50byBhIHJlZ2lzdGVyLlxuLVx0XHQgKi9cbi1cdFx0bG9hZF9yZWcgPSAtMTtcbiBcdH1cbiBcbiBcdGRzdF9yZWcgPSBjdXJfcmVncyhlbnYpICsgaW5zbi1cdTAwM2Vkc3RfcmVnO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbmluZGV4IDE1ZGQzYWUyYTg0YjcuLmU0ZTkzNzQzMDllMjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbkBAIC0xMDUsNiArMTA1LDEwIEBAIHZvaWQgdGVzdF9zdHJlYW1fYXJlbmFfZmF1bHRfYWRkcmVzcyh2b2lkKVxuIFx0XHR0ZXN0X2FkZHJlc3Moc2tlbC1cdTAwM2Vwcm9ncy5zdHJlYW1fYXJlbmFfd3JpdGVfZmF1bHQsIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWZhdWx0X2FkZHIpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJsb2FkX2FjcXVpcmVfZmF1bHRcIikpXG4gXHRcdHRlc3RfYWRkcmVzcyhza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV9sb2FkX2FjcXVpcmVfZmF1bHQsIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWZhdWx0X2FkZHIpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ4Y2hnX2ZhdWx0XCIpKVxuK1x0XHR0ZXN0X2FkZHJlc3Moc2tlbC1cdTAwM2Vwcm9ncy5zdHJlYW1fYXJlbmFfeGNoZ19mYXVsdCwgXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmF1bHRfYWRkcik7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImNtcHhjaGdfZmF1bHRcIikpXG4rXHRcdHRlc3RfYWRkcmVzcyhza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV9jbXB4Y2hnX2ZhdWx0LCBcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2VmYXVsdF9hZGRyKTtcbiBcbiBcdHN0cmVhbV9fZGVzdHJveShza2VsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXG5pbmRleCBjZjU1MzNlMTFmMzljLi4wMGEzNzkzM2U0MTFkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbkBAIC0yMjksNiArMjI5LDEwNyBAQCBpbnQgc3RyZWFtX2FyZW5hX2xvYWRfYWNxdWlyZV9mYXVsdCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gdmFsO1xuIH1cbiBcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK19fc3RkZXJyKFwiRVJST1I6IEFyZW5hIFdSSVRFIGFjY2VzcyBhdCB1bm1hcHBlZCBhZGRyZXNzIDB4e3suKn19XCIpXG4rX19zdGRlcnIoXCJDUFU6IHt7WzAtOV0rfX0gVUlEOiAwIFBJRDoge3tbMC05XSt9fSBDb21tOiB7ey4qfX1cIilcbitfX3N0ZGVycihcIkNhbGwgdHJhY2U6XFxuXCJcbitcInt7KFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKzB4WzAtOWEtZkEtRl0rLzB4WzAtOWEtZkEtRl0rXFxuXCJcbitcInxbIFxcdF0rW15cXG5dK1xcbikqfX1cIilcbitpbnQgc3RyZWFtX2FyZW5hX3hjaGdfZmF1bHQodm9pZCAqY3R4KVxuK3tcbitcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24geGNoZ19pbnNuID0ge1xuK1x0XHQuY29kZVx0ID0gMHhjMyxcdC8qIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1cgKi9cbitcdFx0LmRzdF9yZWcgPSAxLFx0XHQvKiBCUEZfUkVHXzEgKi9cbitcdFx0LnNyY19yZWcgPSAyLFx0XHQvKiBCUEZfUkVHXzIgKi9cbitcdFx0Lm9mZlx0ID0gMHg3ZmZmLFxuK1x0XHQuaW1tXHQgPSAweGUxLFx0LyogQlBGX1hDSEcgKi9cbitcdH07XG4rXHRzdHJ1Y3QgYnBmX2FyZW5hICpwdHIgPSAodm9pZCAqKVx1MDAyNmFyZW5hO1xuK1x0dTY0IHVzZXJfdm1fc3RhcnQsIHZhbDtcbitcbitcdC8qXG4rXHQgKiBQcmV2ZW50IEdDQyBib3VuZHMgd2FybmluZzogY2FzdGluZyBcdTAwMjZhcmVuYSB0byBzdHJ1Y3QgYnBmX2FyZW5hICpcbitcdCAqIHRyaWdnZXJzIGJvdW5kcyBjaGVja2luZyBzaW5jZSB0aGUgbWFwIGRlZmluaXRpb24gaXMgc21hbGxlciB0aGFuXG4rXHQgKiBzdHJ1Y3QgYnBmX2FyZW5hLiBiYXJyaWVyX3ZhcigpIG1ha2VzIHRoZSBwb2ludGVyIG9wYXF1ZSB0byBHQ0MsXG4rXHQgKiBwcmV2ZW50aW5nIHRoZSBib3VuZHMgYW5hbHlzaXMuXG4rXHQgKi9cbitcdGJhcnJpZXJfdmFyKHB0cik7XG4rXHR1c2VyX3ZtX3N0YXJ0ID0gcHRyLVx1MDAzZXVzZXJfdm1fc3RhcnQ7XG4rXHRmYXVsdF9hZGRyID0gdXNlcl92bV9zdGFydCArIDB4N2ZmZjtcbitcdGJwZl9hZGRyX3NwYWNlX2Nhc3QodXNlcl92bV9zdGFydCwgMCwgMSk7XG4rXHQvKlxuK1x0ICogQSByZWFkLW1vZGlmeS13cml0ZSBjYXJyeWluZyBCUEZfRkVUQ0ggd3JpdGVzIHRvIG1lbW9yeSwgc28gdGhlIGZhdWx0XG4rXHQgKiBoYXMgdG8gYmUgcmVwb3J0ZWQgYXMgYSBXUklURSBmcm9tIHRoZSBkc3RfcmVnIGFkZHJlc3MsIGJ1dCBpdCBhbHNvXG4rXHQgKiByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gc3JjX3JlZywgc28gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGhhcyB0b1xuK1x0ICogY2xlYXIgc3JjX3JlZy4gUG9pc29uIGl0IHVwIGZyb250LCB0aGUgcmV0dXJuZWQgdmFsdWUgbXVzdCBiZSAwLlxuK1x0ICovXG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XHRcInIxID0gJVt1c2VyX3ZtX3N0YXJ0XTtcIlxuK1x0XHRcInIyID0gMTtcIlxuK1x0XHRcIi44Ynl0ZSAlW3hjaGdfaW5zbl07XCIgLyogcjIgPSB4Y2hnKCh1MzIgKikocjEgKyAweDdmZmYpLCByMikgKi9cbitcdFx0XCIlW3ZhbF0gPSByMjtcIlxuK1x0XHQ6IFt2YWxdIFwiPXJcIiAodmFsKVxuK1x0XHQ6IFt1c2VyX3ZtX3N0YXJ0XSBcInJcIiAodXNlcl92bV9zdGFydCksXG4rXHRcdCAgX19pbW1faW5zbih4Y2hnX2luc24sIHhjaGdfaW5zbilcbitcdFx0OiBcInIxXCIsIFwicjJcIlxuK1x0KTtcbitcdHJldHVybiB2YWw7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4rX19zdGRlcnIoXCJFUlJPUjogQXJlbmEgV1JJVEUgYWNjZXNzIGF0IHVubWFwcGVkIGFkZHJlc3MgMHh7ey4qfX1cIilcbitfX3N0ZGVycihcIkNQVToge3tbMC05XSt9fSBVSUQ6IDAgUElEOiB7e1swLTldK319IENvbW06IHt7Lip9fVwiKVxuK19fc3RkZXJyKFwiQ2FsbCB0cmFjZTpcXG5cIlxuK1wie3soW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwrMHhbMC05YS1mQS1GXSsvMHhbMC05YS1mQS1GXStcXG5cIlxuK1wifFsgXFx0XStbXlxcbl0rXFxuKSp9fVwiKVxuK2ludCBzdHJlYW1fYXJlbmFfY21weGNoZ19mYXVsdCh2b2lkICpjdHgpXG4re1xuK1x0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaW5zbiBjbXB4Y2hnX2luc24gPSB7XG4rXHRcdC5jb2RlXHQgPSAweGMzLFx0LyogQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVyAqL1xuK1x0XHQuZHN0X3JlZyA9IDEsXHRcdC8qIEJQRl9SRUdfMSAqL1xuK1x0XHQuc3JjX3JlZyA9IDIsXHRcdC8qIEJQRl9SRUdfMiAqL1xuK1x0XHQub2ZmXHQgPSAweDdmZmYsXG4rXHRcdC5pbW1cdCA9IDB4ZjEsXHQvKiBCUEZfQ01QWENIRyAqL1xuK1x0fTtcbitcdHN0cnVjdCBicGZfYXJlbmEgKnB0ciA9ICh2b2lkICopXHUwMDI2YXJlbmE7XG4rXHR1NjQgdXNlcl92bV9zdGFydCwgdmFsO1xuK1xuK1x0LypcbitcdCAqIFByZXZlbnQgR0NDIGJvdW5kcyB3YXJuaW5nOiBjYXN0aW5nIFx1MDAyNmFyZW5hIHRvIHN0cnVjdCBicGZfYXJlbmEgKlxuK1x0ICogdHJpZ2dlcnMgYm91bmRzIGNoZWNraW5nIHNpbmNlIHRoZSBtYXAgZGVmaW5pdGlvbiBpcyBzbWFsbGVyIHRoYW5cbitcdCAqIHN0cnVjdCBicGZfYXJlbmEuIGJhcnJpZXJfdmFyKCkgbWFrZXMgdGhlIHBvaW50ZXIgb3BhcXVlIHRvIEdDQyxcbitcdCAqIHByZXZlbnRpbmcgdGhlIGJvdW5kcyBhbmFseXNpcy5cbitcdCAqL1xuK1x0YmFycmllcl92YXIocHRyKTtcbitcdHVzZXJfdm1fc3RhcnQgPSBwdHItXHUwMDNldXNlcl92bV9zdGFydDtcbitcdGZhdWx0X2FkZHIgPSB1c2VyX3ZtX3N0YXJ0ICsgMHg3ZmZmO1xuK1x0YnBmX2FkZHJfc3BhY2VfY2FzdCh1c2VyX3ZtX3N0YXJ0LCAwLCAxKTtcbitcdC8qXG4rXHQgKiBTYW1lIGFzIHRoZSBleGNoYW5nZSBhYm92ZSwgZXhjZXB0IHRoYXQgYSBCUEZfQ01QWENIRyByZWFkcyB0aGUgb2xkXG4rXHQgKiB2YWx1ZSBpbnRvIHIwIHJhdGhlciB0aGFuIGludG8gc3JjX3JlZywgc28gcjAgaXMgdGhlIHJlZ2lzdGVyIHRoZVxuK1x0ICogZXhjZXB0aW9uIGhhbmRsZXIgaGFzIHRvIGNsZWFyLiBJdCBkb3VibGVzIGFzIHRoZSBjb21wYXJlIHZhbHVlLCBidXRcbitcdCAqIHRoZSBjb21wYXJpc29uIG5ldmVyIGhhcHBlbnMgc2luY2UgdGhlIGFjY2VzcyBmYXVsdHMgZmlyc3QuXG4rXHQgKi9cbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcdFwicjEgPSAlW3VzZXJfdm1fc3RhcnRdO1wiXG4rXHRcdFwicjAgPSAxO1wiXG4rXHRcdFwicjIgPSAyO1wiXG4rXHRcdFwiLjhieXRlICVbY21weGNoZ19pbnNuXTtcIiAvKiByMCA9IGNtcHhjaGcoKHUzMiAqKShyMSArIDB4N2ZmZiksIHIwLCByMikgKi9cbitcdFx0XCIlW3ZhbF0gPSByMDtcIlxuK1x0XHQ6IFt2YWxdIFwiPXJcIiAodmFsKVxuK1x0XHQ6IFt1c2VyX3ZtX3N0YXJ0XSBcInJcIiAodXNlcl92bV9zdGFydCksXG4rXHRcdCAgX19pbW1faW5zbihjbXB4Y2hnX2luc24sIGNtcHhjaGdfaW5zbilcbitcdFx0OiBcInIwXCIsIFwicjFcIiwgXCJyMlwiXG4rXHQpO1xuK1x0cmV0dXJuIHZhbDtcbit9XG4rXG4gc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBzdWJwcm9nKHZvaWQpXG4ge1xuIFx0aW50IF9fYXJlbmEgKmFkZHIgPSAoaW50IF9fYXJlbmEgKikweGRlYWRiZWVmO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzQ6MTkuNjIwMDEyMDQ2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODMxOTAzODUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQlBGIEF0b21pYyBPcGVyYXRpb25zKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBUaGlzIHBhdGNoIHNlcmllcyBpcyB0b3VjaGluZyBzb21lIHJlYWxseSBjcml0aWNhbCBwYXJ0cyBvZiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIEJQRiBzdWJzeXN0ZW0gYW5kIHNldmVyYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEpJVCBjb21waWxlcnMuIE15IGluaXRpYWwgZ3V0IGZlZWxpbmc/IFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBzdWJqZWN0IHRvIGZ1enppbmcuXG5cblRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgaG93IEJQRiBhcmVuYSBleGNlcHRpb25zIGFyZSBoYW5kbGVkLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGF0b21pYyBvcGVyYXRpb25zIGxpa2UgYEJQRl9DTVBYQ0hHYCBhbmQgYEJQRl9YQ0hHYC4gV2UncmUgdGFsa2luZyBhYm91dCBtb2RpZmljYXRpb25zIHRvIHRoZSB2ZXJpZmllciAoYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCkgYW5kIHRoZSBKSVQgY29tcGlsZXJzIHRoZW1zZWx2ZXMgZm9yIGBhcm02NGAsIGByaXNjdmAsIGBzMzkwYCwgYW5kIGB4ODZgLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBicGZfYXRvbWljX2xvYWRfcmVnYCBpbiBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAgaXMgYSByZWQgZmxhZywgYnV0IGEgZ29vZCBvbmUuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGRldGVybWluZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoZSBCUEYgSklULCBvYnZpb3VzbHksIHJlcXVpcmVzIGBDT05GSUdfQlBGX0pJVGAuIFRoZSBCUEYgYXJlbmEgcGFydCBsaWtlbHkgaGluZ2VzIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgLCBhbmQgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGBrZXJuZWwvYnBmL0tjb25maWdgIG9yIHJlbGF0ZWQgZmlsZXMgdG8gY29uZmlybSB0aGF0LiBCUEYgYXJlbmEgKm1pZ2h0KiBuZWVkIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCB0b28sIHNvIEknbGwgY2hlY2sgdGhhdC5cblxuTmV4dCwgSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoZXJlIHRoaXMgYGJwZl9hdG9taWNfbG9hZF9yZWdgIGlzIGJlaW5nIHVzZWQuIFVzaW5nIGBncmVwcGVyYCBpcyBhbiBvcHRpb24sIGJ1dCB0aGUgZGlmZiBpdHNlbGYgaXMgcHJvYmFibHkgZmFzdGVyLCBzaW5jZSBpdCdzIGEgcmVsYXRpdmVseSBzbWFsbCBjaGFuZ2UuIEFuZCwgeWVhaCwgdGhlIGRpZmYgc2hvd3MgaXQgaW4gYGtlcm5lbC9icGYvZml4dXBzLmNgLCBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYW5kIHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEpJVCBjb21waWxlcnMuXG5cbk9rYXksIGxldCdzIGlkZW50aWZ5IHRoZSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBmdW5jdGlvbnMuIEJhc2VkIG9uIHRoZSBkaWZmLCB0aGVzZSBhcmUgdGhlIG9uZXMgSSdsbCBmb2N1cyBvbjpcblxuKiAgIGBicGZfYXRvbWljX2xvYWRfcmVnYCAoYWx0aG91Z2ggaXQncyBgc3RhdGljIGlubGluZWAsIHNvIHRoZSBjb3ZlcmFnZSBtaWdodCBiZSBsaW1pdGVkKVxuKiAgIGBleF9oYW5kbGVyX2JwZmAgKHg4NiwgYXJtNjQpXG4qICAgYGFkZF9leGNlcHRpb25faGFuZGxlcmAgKGFybTY0LCByaXNjdilcbiogICBgY2hlY2tfYXRvbWljX3Jtd2AgKHZlcmlmaWVyKVxuKiAgIGBicGZfaml0X3Byb2JlX2F0b21pY19wcmVgIChzMzkwKVxuKiAgIGBlbWl0X2F0b21pY19sZF9zdF9pbmRleGAgKHg4NiwgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGBzdDpgIGxhYmVsIGluIGBkb19qaXRgIG9yIHNvbWV0aGluZyBzaW1pbGFyIGFyZSBpbXBvcnRhbnQpXG5cblNwZWNpZmljYWxseSwgSSBzaG91bGQgZm9jdXMgb24gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AsIGFyb3VuZCBsaW5lIDIzNDgsIGFzIHdlbGwgYXMgdGhlIG90aGVyIEpJVCBjb21waWxlcnMgdGhhdCBhcmUgdG91Y2hlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU3NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM0OjI3LjkzOTA1MzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMTU0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWRkX2V4Y2VwdGlvbl9oYW5kbGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTExMDk9Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTExMzItLyogRm9yIGFjY2Vzc2VzIHRvIEJURiBwb2ludGVycywgYWRkIGFuIGVudHJ5IHRvIHRoZSBleGNlcHRpb24gdGFibGUgKi9cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMTMzOnN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMTM0LVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LFxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTI2NT1zdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTgxOS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxODIwOlxcdFxcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGRzdCk7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTgyMS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTg5OC1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxODk5OlxcdFxcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIERPTlRfQ0xFQVIpO1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE5MDAtXFx0XFx0aWYgKHJldClcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE5NjUtXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTk2NjpcXHRcXHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgY3R4LCBET05UX0NMRUFSKTtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xOTY3LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xOTk2LVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjE5OTc6XFx0XFx0XFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgbG9hZF9yZWcgXFx1MDAzYyAwID9cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xOTk4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBET05UX0NMRUFSIDogYnBmMmE2NFtsb2FkX3JlZ10pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNDoyNy45ODMyNzM0MjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTcwMDEwNTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgSklUIENvbXBpbGVyKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSB0aGlua2luZywgbGV0J3MgemVybyBpbiBvbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnkgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDIzNDggaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoYXQgYXJlYSB1c3VhbGx5IGRlYWxzIHdpdGggW2luc2VydCBzcGVjaWZpYyBrbm93bGVkZ2Ugb2Ygd2hhdCdzIHVzdWFsbHkgbG9jYXRlZCBhcm91bmQgdGhpcyBhcmVhIG9mIHRoZSBmaWxlLCBlLmcuLCByZWdpc3RlciBhbGxvY2F0aW9uLCBpbnN0cnVjdGlvbiBlbWlzc2lvbiBmb3Igc3BlY2lmaWMgQlBGIG9wY29kZXMsIG1lbW9yeSBhZGRyZXNzaW5nLCBldGMuXS4gSSdtIGxpa2VseSBpbnRlcmVzdGVkIGluIFtpbnNlcnQgYSBndWVzcyBhYm91dCB0aGUgY29udGV4dCBiYXNlZCBvbiB5b3VyIGV4cGVydGlzZSwgZS5nLiwgaG93IGEgcGFydGljdWxhciBpbnN0cnVjdGlvbiBpcyBiZWluZyB0cmFuc2xhdGVkLCBob3cgYSBzcGVjaWZpYyBvcHRpbWl6YXRpb24gaXMgaGFuZGxlZCwgYSBidWcgSSB2YWd1ZWx5IHJlY2FsbF0uIFRpbWUgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIGNvbmZpcm0gbXkgc3VzcGljaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNDozMS4xNTMyODcwNDNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMTYyMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3Q6XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjI4NC1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjI4NTpzdDpcXHRcXHRcXHRpbnNuX29mZiA9IGluc24tXFx1MDAzZW9mZjtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjI4Ni1cXHRcXHRcXHRpZiAoZHN0X3JlZyA9PSBCUEZfUkVHX1BBUkFNUykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNDozMS4xOTk2MDg0NDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTMwMjk4Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE9ic2VydmF0aW9ucyBvbiBCUEYgSklUIENvbXBpbGF0aW9uIFx1MDAyNiBBdG9taWMgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgQlBGIEpJVCBjb21waWxhdGlvbiBwcm9jZXNzIGFuZCBhdG9taWMgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCBhY3Jvc3MgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgd2l0aGluIHRoZSBrZXJuZWwuIEl0J3MgaW50ZXJlc3RpbmcgdG8gc2VlIHRoZSB2YXJpZWQgZnVuY3Rpb24gbmFtZXMgYW5kIGxvY2F0aW9ucyBmb3IgY29yZSBsb2dpYy5cblxuSSBub3RpY2VkIHRoYXQgdGhlIG1haW4gZW50cnkgcG9pbnRzIGZvciB0aGUgSklUIGNvbXBpbGVyIGRpZmZlciBiYXNlZCBvbiB0aGUgYXJjaGl0ZWN0dXJlLiBGb3IgaW5zdGFuY2UsIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLCB0aGUgd29yayBpcyBkb25lIGluIGBkb19qaXRgLiBPdmVyIGluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AsIGBidWlsZF9pbnNuYCB0YWtlcyB0aGUgbGVhZC4gQXRvbWljIG9wZXJhdGlvbnMgZ2V0IHNvbWUgYXR0ZW50aW9uIHRvbywgYW5kIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIEkgc2VlIHRoYXQgYGNoZWNrX2F0b21pY19ybXdgIGhhbmRsZXMgYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlIHZlcmlmaWNhdGlvbnMuIFRoZW4sIGZvciBgYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY2AsIGl0J3MgYGJwZl9qaXRfcHJvYmVfYXRvbWljX3ByZWAsIGFuZCBmb3IgYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgLCBpdCdzIGBicGZfaml0X2VtaXRfaW5zbmAuXG5cbkdpdmVuIHRoZSBtZW50aW9ucyBvZiBhdG9taWMgb3BlcmF0aW9ucywgSSdtIG5vdyBjdXJpb3VzIGFib3V0IHdoZXJlIHRoZSBgYnBmX2F0b21pY19sb2FkX3JlZ2AgZnVuY3Rpb24gZ2V0cyB1c2VkIGluIHRoZSBjb2RlYmFzZS4gSSBzaG91bGQgY2hlY2sgYGtlcm5lbC9icGYvZml4dXBzLmNgIHRvIHNlZSB3aGljaCBmdW5jdGlvbiBvciBmdW5jdGlvbnMgcmVseSBvbiBpdC4gSXQncyBhbHdheXMgYmVuZWZpY2lhbCB0byB1bmRlcnN0YW5kIHRoZXNlIGRlcGVuZGVuY2llcyB3aGVuIG9wdGltaXppbmcgb3IgZGVidWdnaW5nIEJQRi1yZWxhdGVkIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTAwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM0OjM1LjcyOTkwOTA0N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg0OTAzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfYXRvbWljX2xvYWRfcmVnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvZml4dXBzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9maXh1cHMuYz00ND1zdGF0aWMgaW50IGluc25fZGVmX3JlZ25vKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNTEtXFx0Y2FzZSBCUEZfU1RYOlxcbmtlcm5lbC9icGYvZml4dXBzLmM6NTI6XFx0XFx0cmV0dXJuIGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XFxua2VybmVsL2JwZi9maXh1cHMuYy01My1cXHRkZWZhdWx0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNDozNS43NzQ3NzAxNDNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDA0OTc2ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJbnN0cnVjdGlvbiBEZWZpbml0aW9uIGFuZCBKSVQgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYGluc25fZGVmX3JlZ25vYCBmdW5jdGlvbiwgYW5kIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9scyBvciBhcmVhcyB0aGF0IGFyZSAqbW9zdCogcmVsZXZhbnQuIE15IG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW4sIGFuZCBJIGltbWVkaWF0ZWx5IGhvbmUgaW4gb246IGBjaGVja19hdG9taWNfcm13YCwgZGVmaW5pdGVseSBgaW5zbl9kZWZfcmVnbm9gIGl0c2VsZiwgb2J2aW91c2x5LCBhbmQgYGV4X2hhbmRsZXJfYnBmYCBiZWNhdXNlIHRoYXQgc291bmRzIGNlbnRyYWwgdG8gaGFuZGxpbmcgQlBGIGluc3RydWN0aW9ucy5cblxuTm93LCBJJ20gYSBsaXR0bGUgaGVzaXRhbnQgYWJvdXQgaW5jbHVkaW5nIGBkb19qaXRgIGJlY2F1c2UgaXQncyAqdmVyeSogZ2VuZXJpYywgYnV0IGl0ICppcyogdGhlIEpJVCBjb21waWxlciwgc28gaXQncyBwcm9iYWJseSBpbXBvcnRhbnQgdG8gY29uc2lkZXIgaW4gc29tZSB3YXkuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0LiBUaGVuLCBJIHRoaW5rIGFib3V0IHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBKSVQgY29tcG9uZW50czogYGJ1aWxkX2luc25gIGZvciBhcm02NCBhbmQgdGhlIFJJU0MtViBhbmQgczM5MCBzcGVjaWZpYyBlbWl0dGVycywgYGJwZl9qaXRfZW1pdF9pbnNuYCBhbmQgYGJwZl9qaXRfcHJvYmVfYXRvbWljX3ByZWAgcmVzcGVjdGl2ZWx5LiBUaG9zZSBhcmUgcHJvYmFibHkgZ29pbmcgdG8gYmUga2V5IHBpZWNlcyBvZiB0aGUgcHV6emxlLlxuXG5Ob3csIEkgcmVhbGx5IG5lZWQgdG8gY2hlY2sgdGhlIHNjb3BlIG9mIGBleF9oYW5kbGVyX2JwZmAgZnVuY3Rpb24uIElzIGl0IHN0YXRpYywgaXMgaXQgZXhwb3J0ZWQ/IEl0cyB2aXNpYmlsaXR5IGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgQlBGIGNvZGUgaXMgZ2V0dGluZyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU2MiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNDo0MC4xNzk3NTAxOTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODgxMTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4X2hhbmRsZXJfYnBmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTQ0Nz1zdGF0aWMgaW50IGVtaXRfYXRvbWljX2xkX3N0X2luZGV4KHU4ICoqcHByb2csIHUzMiBhdG9taWNfb3AsIHUzMiBzaXplLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE1MTEtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE1MTI6Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICp4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTUxMy17XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MjI4NT1zdDpcXHRcXHRcXHRpbnNuX29mZiA9IGluc24tXFx1MDAzZW9mZjtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMzgxLVxcdFxcdFxcdFxcdCAqIHRoZSByZWcgaG9sZGluZyB0aGUgdW5tb2RpZmllZCAzMi1iaXQgYWRkcmVzcyB0b1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyMzgyOlxcdFxcdFxcdFxcdCAqIGV4X2hhbmRsZXJfYnBmKCkuXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIzODMtXFx0XFx0XFx0XFx0ICpcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNTQwLVxcdFxcdFxcdFxcdCAqIENvbXB1dGUgc2l6ZSBvZiB4ODYgaW5zbiBhbmQgaXRzIHRhcmdldCBkZXN0IHg4NiByZWdpc3Rlci5cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjU0MTpcXHRcXHRcXHRcXHQgKiBleF9oYW5kbGVyX2JwZigpIHdpbGwgdXNlIGxvd2VyIDggYml0cyB0byBhZGp1c3RcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjU0Mi1cXHRcXHRcXHRcXHQgKiBwdF9yZWdzLVxcdTAwM2VpcCB0byBqdW1wIG92ZXIgdGhpcyB4ODYgaW5zdHJ1Y3Rpb25cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzQ6NDAuMjI1NjM3OTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2NjQyMzk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEJQRiBKSVQgTGFuZHNjYXBlOiBBIFF1aWNrIENoZWNrKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBgZXhfaGFuZGxlcl9icGZgIGFuZCBpbW1lZGlhdGVseSBJIGtub3cgaXQncyBhIGdsb2JhbCBmdW5jdGlvbi4gTXkgYnJhaW4gaXMgYWxyZWFkeSBzdGFydGluZyB0byBzY29wZSBvdXQgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0LCBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQgY29tbW9uIHVzYWdlIHBhdHRlcm5zLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIGtlcm5lbCBCUEYgYW5kIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSwgbXkgbmV4dCBtb3ZlIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uIExldCBtZSBwdWxsIHVwIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBtYWdpYyAob3IgcG90ZW50aWFsIGlzc3Vlcykgd2lsbCByZXNpZGUuIEl0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciBkZXRhaWxzIG9uIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIEFSTTY0IEJQRiBKSVQgY29tcGlsYXRpb24gZmxvdy4gSSdtIGdvaW5nIHRvIHN0YXJ0IG1lbnRhbGx5IHRyYWNpbmcgdGhlIGNhbGxzIGFuZCB1bmRlcnN0YW5kIHRoZSBKSVQgb3V0cHV0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ0OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM0OjQzLjU5MjA2NDI1OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NDk2ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXhfaGFuZGxlcl9icGZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTA0Nj1zdGF0aWMgdm9pZCBidWlsZF9lcGlsb2d1ZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIHdhc19jbGFzc2ljKVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTEwOC1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMTA5OmJvb2wgZXhfaGFuZGxlcl9icGYoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTExMC1cXHRcXHQgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMTMzPXN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyMDUtXFx0XFx0ICogbWVtb3J5IGFjY2Vzcy4gUGFzcyB0aGUgcmVnIGhvbGRpbmcgdGhlIHVubW9kaWZpZWQgMzItYml0IGFkZHJlc3MgdG9cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMjA2OlxcdFxcdCAqIGV4X2hhbmRsZXJfYnBmLlxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyMDctXFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM0OjQzLjYzNzcyMDQ1M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzgyODM2MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGBleF9oYW5kbGVyX2JwZmAgYW5kIEl0cyBSZWxhdGlvbnNoaXAgdG8gSW5zdHJ1Y3Rpb24gRGVmaW5pdGlvbioqXG5cblJpZ2h0LCBzbyBgZXhfaGFuZGxlcl9icGZgIGlzIGEgZ2xvYmFsIHZhcmlhYmxlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB3aGVyZSBpcyB0aGlzIHVzZWQsIGFuZCBob3cgd2lkZWx5P1wiIEdsb2JhbCB2YXJpYWJsZXMgYWx3YXlzIHdhcnJhbnQgYSBjYXJlZnVsIGxvb2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdC4gTXkgZm9jdXMgbmFycm93cyBpbiBvbiB0aGF0IG5hbWUuXG5cbk15IG5leHQgc3RlcD8gRGl2ZSByaWdodCBpbnRvIHRoZSBjb2RlIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSdsbCBoZWFkIG92ZXIgdG8gYGtlcm5lbC9icGYvZml4dXBzLmNgLiBUaGF0IGZpbGUgbmFtZSBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIGludm9sdmVkIGluIHNvbWUga2luZCBvZiBpbnN0cnVjdGlvbiBmaXhpbmcgb3IgcGF0Y2hpbmcgd2l0aGluIHRoZSBCUEYgc3lzdGVtLiBDb25zaWRlcmluZyB0aGF0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGluc25fZGVmX3JlZ25vYC4gVGhlIG5hbWUgaXMgYWxzbyBzdWdnZXN0aXZlLiBJdCBpbXBsaWVzIHNvbWUga2luZCBvZiByZWdpc3RlciBudW1iZXIgdGhhdCBpcyBhIHBhcnQgb2YgdGhlIGluc3RydWN0aW9uIGRlZmluaXRpb24uIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIHR3byBwaWVjZXMgb2YgY29kZSBpbnRlcmFjdCwgYW5kIGhvdyBgZXhfaGFuZGxlcl9icGZgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGluc3RydWN0aW9uIGhhbmRsaW5nLiBUaGlzIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgd2hlcmUgdGhlIGZpeHVwcyBhcmUgaGFwcGVuaW5nIGFuZCBob3cgdGhleSBtaWdodCByZWxhdGUgdG8gYW55IHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb3IgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAyNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM0OjQ3LjAyMDU1OTM3OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyNjIwNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5zbl9kZWZfcmVnbm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9maXh1cHMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2ZpeHVwcy5jPTI0PXN0YXRpYyBib29sIGlzX2FkZHJfc3BhY2VfY2FzdDMyKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy00My0vKiBSZXR1cm4gdGhlIHJlZ25vIGRlZmluZWQgYnkgdGhlIGluc24sIG9yIC0xLiAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6NDQ6c3RhdGljIGludCBpbnNuX2RlZl9yZWdubyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxua2VybmVsL2JwZi9maXh1cHMuYy00NS17XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTU4LS8qXFxua2VybmVsL2JwZi9maXh1cHMuYzo1OTogKiBGb3IgdXNlIG9ubHkgaW4gY29tYmluYXRpb24gd2l0aCBpbnNuX2RlZl9yZWdubygpIFxcdTAwM2U9IDAuXFxua2VybmVsL2JwZi9maXh1cHMuYy02MC0gKiBSZXR1cm5zIFRSVUUgaWYgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIG9wZXJhdGVzIG9uIDY0LWJpdCxcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9NjM9c3RhdGljIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy04Ny1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjg4OlxcdC8qIGF0b21pY3MsIHNlZSBpbnNuX2RlZl9yZWdubygpICovXFxua2VybmVsL2JwZi9maXh1cHMuYy04OS1cXHRpZiAoY2xhc3MgPT0gQlBGX1NUWCBcXHUwMDI2XFx1MDAyNiBzaXplICE9IEJQRl9EVylcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTA0PWludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwNS17XFxua2VybmVsL2JwZi9maXh1cHMuYzoxMDY6XFx0aW50IGRzdF9yZWcgPSBpbnNuX2RlZl9yZWdubyhpbnNuKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwNy1cXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9NjM4PWludCBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNjYxLVxcdFxcdGluc24gPSBpbnNuc1thZGpfaWR4XTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjY2MjpcXHRcXHRsb2FkX3JlZyA9IGluc25fZGVmX3JlZ25vKFxcdTAwMjZpbnNuKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTY2My1cXHRcXHRpZiAoIWF1eFthZGpfaWR4XS56ZXh0X2RzdCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNDo0Ny4wNjU4MjU1NDRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4NTg5NzM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqQW5hbHl6aW5nIHRoZSBJbnN0cnVjdGlvbiBEZWZpbml0aW9uIGFuZCBDYWxsZXIqKlxuXG5Pa2F5LCBzbyBgaW5zbl9kZWZfcmVnbm9gIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBhcmVhIGZvciBjbG9zZXIgaW5zcGVjdGlvbi4gVGhlIHJlbGV2YW50IGNhbGxlcnMgc2VlbSB0byBiZSBgYnBmX2luc25fZGVmMzJgIGFuZCBgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX2luc25fZGVmMzJgIGZpcnN0LiBVbmRlcnN0YW5kaW5nIGhvdyAqdGhhdCogZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhpcyBzdGF0aWMgdmFyaWFibGUgaXMgZ29pbmcgdG8gYmUga2V5IHRvIGdyYXNwaW5nIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUgYW5kIHRoZSBkYXRhIGJlaW5nIG1hbmlwdWxhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk0MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM0OjUwLjk1MTcyNTQzOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3MzU0MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2luc25fZGVmMzJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9maXh1cHMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2ZpeHVwcy5jPTYzPXN0YXRpYyBib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTAzLSAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTA0OmludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwNS17XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTIxNT1zdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMjctXFx0ICovXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMjg6XFx0ZGF0YVtvZmZdLnpleHRfZHN0ID0gYnBmX2luc25fZGVmMzIobmV3X3Byb2csIGluc24gKyBvZmYgKyBjbnQgLSAxKSBcXHUwMDNlPSAwO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMjI5LVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzktXFx0XFx0ZGF0YVtpXS5zZWVuID0gb2xkX3NlZW47XFxua2VybmVsL2JwZi9maXh1cHMuYzoyNDA6XFx0XFx0ZGF0YVtpXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKG5ld19wcm9nLCBpbnNuICsgaSkgXFx1MDAzZT0gMDtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0MS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM0OjUwLjk5NjQ2NTMxNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQ5OTIxODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipCUEYgSW5zdHJ1Y3Rpb24gQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBgYnBmX2luc25fZGVmMzJgIOKAkyB0aGF0J3MgYSBnbG9iYWwsIHJpZ2h0PyBMZXQgbWUganVzdCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIE5vdywgSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyB0aGlzIGlzIHVzZWQgYW5kIHdoZXJlIGl0J3MgdmFsaWRhdGVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgaW5zdHJ1Y3Rpb24gYW5kIHBvdGVudGlhbCBhdG9taWMgb3BlcmF0aW9ucywgaXMgdG8gemVybyBpbiBvbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGBjaGVja19hdG9taWNfcm13YCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsaWtlbHkgY2FuZGlkYXRlIHRvIGhhbmRsZSB2YWxpZGF0aW9uIGNoZWNrcyByZWxhdGVkIHRvIGFueSByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb25zLCBhbmQgYGJwZl9pbnNuX2RlZjMyYCBpcyBwcm9iYWJseSB0aWVkIGluIHRoZXJlIHNvbWVob3cuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NDMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNDo1My45NDYzODk3MDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTM2OTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX2F0b21pY19ybXdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz02NDAyPXN0YXRpYyBpbnQgY2hlY2tfc3RvcmVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDM5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDQwOnN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3JtdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDQxLVxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjU2NT1zdGF0aWMgaW50IGNoZWNrX2F0b21pYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU3Ny1cXHRjYXNlIEJQRl9DTVBYQ0hHOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NTc4OlxcdFxcdHJldHVybiBjaGVja19hdG9taWNfcm13KGVudiwgaW5zbik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1NzktXFx0Y2FzZSBCUEZfTE9BRF9BQ1E6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM0OjUzLjk5MzMzMzQ1OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjcwMTIyNzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byB0aGUgQXRvbWljIFJNVyBDaGVjayoqXG5cbk9rYXksIHNvIEkgc2VlIGBjaGVja19hdG9taWNfcm13YCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGdvb2QgdG8ga25vdyDigJMgaXQncyBsaWtlbHkgc2NvcGVkIHdpdGhpbiBhIHBhcnRpY3VsYXIgY29tcGlsYXRpb24gdW5pdCBhbmQgbm90IG1lYW50IGZvciBleHRlcm5hbCB1c2UuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgYGNoZWNrX2F0b21pY2AgaXMgdGhlIGNhbGxlci4gVGhhdCBtZWFucyB0aGUgbG9naWMgd2l0aGluIGBjaGVja19hdG9taWNfcm13YCBpcyBpbnZva2VkIGZyb20gd2l0aGluIGBjaGVja19hdG9taWNgLiBTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpZyBpbnRvIGBjaGVja19hdG9taWNgIGl0c2VsZi4gVW5kZXJzdGFuZGluZyAqd2h5KiBpdCBjYWxscyBgY2hlY2tfYXRvbWljX3Jtd2AgYW5kIHdoYXQgaW5wdXRzIGl0J3MgcHJvdmlkaW5nIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZS4gSSBuZWVkIHRvIHNlZSB3aGF0IHRoZSBjb250cm9sIGZsb3cgaXMuIFRpbWUgdG8gbW92ZSBvbiBhbmQgaW52ZXN0aWdhdGUgdGhhdCBgY2hlY2tfYXRvbWljYCBmdW5jdGlvbiBpbiBtb3JlIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMzUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNDo1OC4yNjM0NTkxNjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODc3MzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX2F0b21pY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTY0MDI9c3RhdGljIGludCBjaGVja19zdG9yZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MzktXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY0NDA6c3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NDEtXFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTI2LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NTI3OnN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX2xvYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjUyOC1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTQ1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NTQ2OnN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3N0b3JlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1NDctXFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1NjQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1NjU6c3RhdGljIGludCBjaGVja19hdG9taWMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTY2LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTc3LVxcdGNhc2UgQlBGX0NNUFhDSEc6XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1Nzg6XFx0XFx0cmV0dXJuIGNoZWNrX2F0b21pY19ybXcoZW52LCBpbnNuKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU3OS1cXHRjYXNlIEJQRl9MT0FEX0FDUTpcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTg0LVxcdFxcdH1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjU4NTpcXHRcXHRyZXR1cm4gY2hlY2tfYXRvbWljX2xvYWQoZW52LCBpbnNuKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU4Ni1cXHRjYXNlIEJQRl9TVE9SRV9SRUw6XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU5MS1cXHRcXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1OTI6XFx0XFx0cmV0dXJuIGNoZWNrX2F0b21pY19zdG9yZShlbnYsIGluc24pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTkzLVxcdGRlZmF1bHQ6XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTcyMzM9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MjUwLVxcdFxcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzI1MTpcXHRcXHRcXHRyZXR1cm4gY2hlY2tfYXRvbWljKGVudiwgaW5zbik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MjUyLVxcdFxcdHJldHVybiBjaGVja19zdG9yZV9yZWcoZW52LCBpbnNuLCBmYWxzZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM0OjU4LjMwOTM0MDg5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzMwNjUxNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgRXhlY3V0aW9uIFBhdGggb2YgYGNoZWNrX2F0b21pY2AqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIHN5c3RlbXMgcGVyc3BlY3RpdmUuIEkgc2VlIHRoYXQgYGNoZWNrX2F0b21pY2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgdGVsbHMgbWUgaXQncyBsaWtlbHkgbG9jYWwgdG8gaXRzIGNvbXBpbGF0aW9uIHVuaXQsIG1lYW5pbmcgd2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVhc29uIGFib3V0IGl0cyB1c2FnZSBpbiB0aGF0IHNwZWNpZmljIGNvbnRleHQuIFRoZSBpbW1lZGlhdGUgY2FsbGVyIG9mIGBjaGVja19hdG9taWNgIGlzIGlkZW50aWZpZWQgYXMgYGRvX2NoZWNrX2luc25gLiBBbm90aGVyIHN0YXRpYyBmdW5jdGlvbiwgYGRvX2NoZWNrX2luc25gLCBpcyBjYWxsZWQgYnkgYGRvX2NoZWNrYCwgd2hpY2ggaXMgYWxzbyBzdGF0aWMuIEZpbmFsbHksIGBkb19jaGVja2AgaXRzZWxmIGlzIGNhbGxlZCBieSBgYnBmX2NoZWNrYCwgd2hpY2ggaXMgZ2xvYmFsLiBUaGlzIG1lYW5zIGBicGZfY2hlY2tgIGlzIHRoZSBlbnRyeSBwb2ludCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uXG5cbk5vdywgYmFzZWQgb24gdGhpcyBjYWxsIGNoYWluLCBpdCBpcyBpbXBvcnRhbnQgdG8gdHJhY2UgaG93IGBjaGVja19hdG9taWNgIGlzIHVzZWQgYW5kIGVuc3VyZSBpdCBpcyBjb3JyZWN0LiBJIGFtIGdvaW5nIHRvIGNoZWNrIGBhcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jYCB0byBzZWUgaG93IGBicGZfaml0X3Byb2JlX2F0b21pY19wcmVgIGludGVyYWN0cyB3aXRoIHRoaXMgZmxvdy4gVW5kZXJzdGFuZGluZyB0aGUgYGJwZl9qaXRfcHJvYmVfYXRvbWljX3ByZWAgdXNhZ2UgaXMgY3J1Y2lhbCBoZXJlLCBhcyBpdCBtaWdodCByZXByZXNlbnQgYW4gaW50ZXJlc3RpbmcgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9yIGEgc2VjdXJpdHkgbWl0aWdhdGlvbiBhcm91bmQgYXRvbWljIGluc3RydWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5OTQsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6MDEuOTQyNDA5NjgxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDczOTczNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X3Byb2JlX2F0b21pY19wcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTc2MD1zdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX3N0b3JlX3ByZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTc3Mi1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjc3MzpzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX2F0b21pY19wcmUoc3RydWN0IGJwZl9qaXQgKmppdCxcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTc3NC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9OTU1PXN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE2NDYtI2RlZmluZSBFTUlUX0FUT01JQyhvcDMyLCBvcDY0KSBkbyB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MTY0NzpcXHRicGZfaml0X3Byb2JlX2F0b21pY19wcmUoaml0LCBpbnNuLCBcXHUwMDI2cHJvYmUpO1xcdFxcdFxcdFxcXFxcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE2NDgtXFx0Lyoge29wMzJ8b3A2NH0geyV3MHwlc3JjfSwlc3JjLG9mZiglYXJlbmEpICovXFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0xNjg2LVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MTY4NzpcXHRcXHRcXHRicGZfaml0X3Byb2JlX2F0b21pY19wcmUoaml0LCBpbnNuLCBcXHUwMDI2bG9hZF9wcm9iZSk7XFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0xNjg4LVxcdFxcdFxcdC8qIHtseXxsZ30gJXcwLG9mZiglYXJlbmEpICovXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE3MTktXFx0XFx0Y2FzZSBCUEZfQ01QWENIRzpcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjE3MjA6XFx0XFx0XFx0YnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlKGppdCwgaW5zbiwgXFx1MDAyNnByb2JlKTtcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE3MjEtXFx0XFx0XFx0LyogMDoge2NzeXxjc2d9ICViMCwlc3JjLG9mZiglYXJlbmEpICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM1OjAxLjk4NzE1NjUxNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDIxNzI2MTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgSklUIENvbXBpbGF0aW9uIEZsb3cqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzIHRyYWNlcyBhIHZlcnkgc3BlY2lmaWMgY2hhaW4gb2YgY2FsbHMuIGBicGZfaml0X3Byb2JlX2F0b21pY19wcmVgIGlzIGRlZmluZWQgYXMgYHN0YXRpY2AsIGFuZCBpdCdzIGNhbGxlZCBieSBgYnBmX2ppdF9pbnNuYC4gSW4gdHVybiwgYGJwZl9qaXRfaW5zbmAgaXMgYWxzbyBgc3RhdGljYCwgYW5kIHRoZSBvbmx5IHBsYWNlIGl0IGlzIGNhbGxlZCBpcyB3aXRoaW4gYGJwZl9qaXRfcHJvZ2AuIEZ1cnRoZXIgZG93biB0aGUgbGluZSwgd2UgaGF2ZSB0aGUgYHN0YXRpY2AgZnVuY3Rpb24gYGJwZl9qaXRfcHJvZ2AsIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IGBicGZfaW50X2ppdF9jb21waWxlYC4gTm93LCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgZGVmaW5lZCBhcyBnbG9iYWwsIHNvIGl0IG11c3QgYmUgdGhlIGVudHJ5IHBvaW50IHRvIHRoaXMgd2hvbGUgSklUIGNvbXBpbGF0aW9uIHNlcXVlbmNlLiBJJ20gZ29pbmcgdG8gbG9vayBhdCBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AgdG8gbG9vayBhdCBob3cgYGJwZl9qaXRfZW1pdF9pbnNuYCBpcyB1c2VkIGluIHRoaXMgY29tcGlsYXRpb24uIFRoaXMgc2VlbXMgbGlrZSBhIHByZXR0eSBzdGFuZGFyZCBzdGF0aWMgdG8gZ2xvYmFsIHByb2dyZXNzaW9uLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gY29uZmlybSBJJ20gZm9sbG93aW5nIHRoZSBjb3JyZWN0IGNoYWluIG9mIGV2ZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMTAsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6MDYuMDA4ODg1NTE3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjYyMDU4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X2VtaXRfaW5zblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTMyND1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM2MC1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzNjE6aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzYyLVxcdFxcdCAgICAgIGJvb2wgZXh0cmFfcGFzcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6MDYuMDUxNTE0MDMzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTkyODMwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gQlBGIEpJVCBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIGBicGZfaml0X2VtaXRfaW5zbmAgaXMgYSBnbG9iYWwgZnVuY3Rpb24sIG1lYW5pbmcgaXQncyBhIGtleSBwaWVjZSBpbiB0aGlzIEJQRiBKSVQgcHV6emxlLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB3aGF0IGludGVyYWN0cyB3aXRoIGl0LiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZXNlIGNvcmUgc3ltYm9sczogYGJwZl9pbnNuX2RlZjMyYCwgYGV4X2hhbmRsZXJfYnBmYCwgYW5kIGBicGZfaml0X2VtaXRfaW5zbmAgaXRzZWxmLCBvZiBjb3Vyc2UuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZXkgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBJJ20gZ29pbmcgdG8gc2V0IGFzaWRlIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgYGJwZl9jaGVja2AgZm9yIG5vdzsgdGhleSBzZWVtIGEgYml0IHRvbyBnZW5lcmljLlxuXG5HaXZlbiB0aGF0IEknbSB3b3JraW5nIHdpdGggQVJNNjQgYXJjaGl0ZWN0dXJlLCBJIHNob3VsZCBhbHNvIGNoZWNrIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9jYXRpbmcgdGhlIGBidWlsZF9pbnNuYCBmdW5jdGlvbiB3aXRoaW4gdGhhdCBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBhcmNoaXRlY3R1cmFsIHNwZWNpZmljcyBvZiBob3cgdGhlc2UgaW5zdHJ1Y3Rpb25zIGFyZSBjb25zdHJ1Y3RlZCBhbmQgaGFuZGxlZCB3aXRoaW4gdGhlIEpJVCBjb21waWxlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2MTMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6MDkuNTcwODAxMTY1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAzNzM3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJidWlsZF9pbnNuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTEyNDc9c3RhdGljIHZvaWQgZW1pdF9zdGFja19hcmdfc3RvcmVfaW1tKHMzMiBpbW0sIHMxNiBicGZfb2ZmLCBjb25zdCB1OCB0bXAsIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjY0LSAqL1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjEyNjU6c3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjY2LVxcdFxcdCAgICAgIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgZXh0cmFfcGFzcylcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTIwMTI9c3RhdGljIGludCBidWlsZF9ib2R5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgZXh0cmFfcGFzcylcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIwMzAtXFx0XFx0Y3R4LVxcdTAwM2VvZmZzZXRbaV0gPSBjdHgtXFx1MDAzZWlkeDtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoyMDMxOlxcdFxcdHJldCA9IGJ1aWxkX2luc24oZW52LCBpbnNuLCBjdHgsIGV4dHJhX3Bhc3MpO1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIwMzItXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6MDkuNjE2ODQ0OTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwNTA2MzIyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIEpJVCBDb21waWxhdGlvbiBGbG93KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhpcyBCUEYgSklUIGNvbXBpbGF0aW9uIHdvcmtzLiBSaWdodCwgYGJ1aWxkX2luc25gIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBtZWFuaW5nIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiBpdHMgY29tcGlsYXRpb24gdW5pdC4gVGhhdCBtYWtlcyBkZWJ1Z2dpbmcgYSBiaXQgbW9yZSBmb2N1c2VkLCB3aGljaCBpcyBnb29kLiBUaGUga2V5IHRoaW5nIGlzIHRoYXQgYGJ1aWxkX2luc25gIGlzICpjYWxsZWQqIGJ5IGBidWlsZF9ib2R5YC4gQW5kIGlmIEkgcmVtZW1iZXIgY29ycmVjdGx5LCBgYnVpbGRfYm9keWAgaXMgaW52b2tlZCBieSBgYnBmX2ludF9qaXRfY29tcGlsZWAuIFRoYXQgZ2l2ZXMgbWUgYSByb3VnaCBpZGVhIG9mIHRoZSBjYWxsIGNoYWluOiBgYnBmX2ludF9qaXRfY29tcGlsZWAgLVx1MDAzZSBgYnVpbGRfYm9keWAgLVx1MDAzZSBgYnVpbGRfaW5zbmAuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBjb21waWxhdGlvbiBwcm9jZXNzLCBsZXQgbWUgY2hlY2sgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gSSdsbCBoZWFkIG92ZXIgdG8gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYGRvX2ppdGAgdGhlcmUsIHRoYXQgdXN1YWxseSBjb250YWlucyB0aGUgY29yZSBKSVQgY29tcGlsYXRpb24gcm91dGluZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnQgZm9yIFg4NiBzcGVjaWZpYyBhc3NlbWJseSBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM0NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM1OjEzLjEyMTkxMDcwM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1MjU4MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9faml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTY5MT1zdGF0aWMgaW50IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE3MjgtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE3Mjk6c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNzMwLVxcdFxcdCAgdTggKnJ3X2ltYWdlLCBpbnQgb2xkcHJvZ2xlbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgsIGJvb2wgam1wX3BhZGRpbmcpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzk2Mj1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMzktXFx0XFx0XFx0cGFkZGluZyA9IHRydWU7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQwNDA6XFx0XFx0cHJvZ2xlbiA9IGRvX2ppdChlbnYsIHByb2csIGFkZHJzLCBpbWFnZSwgcndfaW1hZ2UsIG9sZHByb2dsZW4sXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwNDEtXFx0XFx0XFx0XFx0IFxcdTAwMjZjdHgsIHBhZGRpbmcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNToxMy4xNjg0NDMwMTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkwODk2MTIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIEpJVCBDb21waWxhdGlvbiBGb2N1cyBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHdoaWNoIHN5bWJvbHMgYXJlIHRoZSBtb3N0IHJlbGV2YW50IHRvIGZvY3VzIG9uIGhlcmUsIGNvbnNpZGVyaW5nIGBkb19qaXRgIGlzIHN0YXRpYyBhbmQgY2FsbGVkIGJ5IGBicGZfaW50X2ppdF9jb21waWxlYC4gVGhlIGluaXRpYWwgY2FuZGlkYXRlcyB0aGF0IHNwcmluZyB0byBtaW5kIGFyZSBgYnBmX2luc25fZGVmMzJgLCBgZXhfaGFuZGxlcl9icGZgLCBgYnBmX2ppdF9lbWl0X2luc25gLCBhbmQgYGJwZl9pbnRfaml0X2NvbXBpbGVgLlxuXG5MZXQncyBzdGFydCB3aXRoIGBicGZfaW50X2ppdF9jb21waWxlYC4gVGhhdCBzZWVtcyBsaWtlIGEgc29saWQgY2hvaWNlIHNpbmNlIGl0J3MgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBKSVQgY29tcGlsZXIgaXRzZWxmLiBgYnBmX2NoZWNrYCBpcyBhbHNvIGFwcGVhbGluZyBhcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyLCB0aG91Z2ggSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcHJvbXB0J3MgcHJlZmVyZW5jZSBmb3Igbm9uLWhvdHBhdGggQVBJIGVudHJ5cG9pbnRzLiBCb3RoIHNlZW0gdG8gZml0IHRoZSBiaWxsIGFzIHRoZXkgYXJlIGNhbGxlZCBvbiBwcm9ncmFtIGxvYWQuXG5cbkxvb2tpbmcgY2xvc2VyLCBJJ2xsIGV4YW1pbmUgdGhlIGNhbGxzIHRvIHRoZSBvdGhlciBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBmdW5jdGlvbnM6XG4qICAgYGJwZl9pbnNuX2RlZjMyYDogRGlnZ2luZyBpbnRvIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCwgdGhpcyBpcyB1c2VkIGluIGBhZGp1c3RfaW5zbl9hdXhfZGF0YWAgYW5kIGBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzJgLiBCb3RoIG9mIHRob3NlIGFyZSBjYWxsZWQgZnJvbSBgYnBmX2NoZWNrYC5cbiogICBgZXhfaGFuZGxlcl9icGZgOiBDaGVja2luZyBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCBhbmQgYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYCwgdGhpcyBpcyBpbnZvbHZlZCBpbiBleGNlcHRpb24gaGFuZGxpbmcgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiwgc28gaXQncyBjbGVhcmx5IHJlbGV2YW50LlxuKiAgIGBicGZfaml0X2VtaXRfaW5zbmA6IFRoaXMgaXMgY2FsbGVkIGJ5IGBicGZfaW50X2ppdF9jb21waWxlYCBpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuXG4qICAgYGJwZl9pbnRfaml0X2NvbXBpbGVgOiBJbiBgYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY2AsIHRoaXMgaXMgYWdhaW4gdGhlIHByaW1hcnkgZW50cnkgcG9pbnQuXG5cblNvLCB0aGUgZm9jdXMgc3ltYm9scyBhcmUgZGVmaW5pdGVseTogYGJwZl9pbnNuX2RlZjMyYCwgYGV4X2hhbmRsZXJfYnBmYCwgYGJwZl9qaXRfZW1pdF9pbnNuYCwgYW5kIGBicGZfaW50X2ppdF9jb21waWxlYC4gSSdtIGdvaW5nIHRvIGFkZCBgYnBmX2NoZWNrYCBpbiBhcyB3ZWxsIGJlY2F1c2UgaXQncyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpZXIsIGFuZCBpdCBsb29rcyBsaWtlIGEgbmF0dXJhbCBjb21wYW5pb24gdG8gdGhlIEpJVCBjb21waWxlcidzIGVudHJ5IHBvaW50LlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbiwgb2J2aW91c2x5LiBBbmQgYENPTkZJR19CUEZfSklUYCBpcyBlc3NlbnRpYWwgZm9yIHRoZSBKSVQgY29tcGlsZXIgY2hhbmdlcy4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBga2VybmVsL2JwZi9LY29uZmlnYCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBlbHNlIGNyaXRpY2FsIHJlbGF0ZWQgdG8gQlBGIHN5c2NhbGxzIGFuZCBKSVQgY29tcGlsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDQ1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM1OjIyLjA3NzQwNjgxMloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUxNzkxMzQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM1OjIyLjEzMjU5MzM0N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzUxMjQyOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlc2UgQlBGIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCBpbiB0aGUga2VybmVsJ3MgS2NvbmZpZyBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGluIHRoZSBtb3JlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmlsZXMuIExldCdzIHNlZSwgQlBGIGlzIHByZXR0eSBmdW5kYW1lbnRhbCBub3csIHNvIEknZCBleHBlY3QgdG8gZmluZCBpdHMgY29yZSBkZWZpbml0aW9uIGluIGVpdGhlciBga2VybmVsL2JwZi9LY29uZmlnYCBvciBwb3NzaWJseSBldmVuIHRoZSBtYWluIGluaXRpYWxpemF0aW9uIGNvbmZpZywgYGluaXQvS2NvbmZpZ2AuIEl0J3MgcHJldHR5IGxpa2VseSB0aGF0J2xsIGJlIHdoZXJlIEkgZmluZCB0aGUgbmVjZXNzYXJ5IHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQwMCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM1OjI0Ljg4MzgzODgzN1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIyMzI4MzA5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6MjguMTA3MTI3MDE5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTU5NTMyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBCUEZfSklUIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3RhdHVzIG9mIEJQRiBKSVQgY29tcGlsYXRpb24gd2l0aGluIHRoaXMga2VybmVsIHNldHVwLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoZSBzdGFuZGFyZCBwcmFjdGljZSwgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGRlZmluaXRpdmUgc291cmNlIGZvciB0aGUgQlBGIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIGhlYWRpbmcgdGhlcmUgdG8gdmVyaWZ5IHRoZSBleGlzdGVuY2UsIGN1cnJlbnQgc3RhdGUsIGFuZCBhbnkgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBgQlBGX0pJVGAuIFRoaXMgaXMgdGhlIGJlZHJvY2s7IHdpdGhvdXQga25vd2luZyB0aGUgS2NvbmZpZyBzZXR0aW5ncywgSSBjYW4ndCBldmVuIGJlZ2luIHRvIHRyb3VibGVzaG9vdCBhbnkgcmVsYXRlZCBpc3N1ZXMgb3Igb3B0aW1pemUgQlBGIHVzYWdlLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjYyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6MzAuOTYzMDgyNTU5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYzNTYwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0pJVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxcbmtlcm5lbC9icGYvS2NvbmZpZy00My1cXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTU5LVxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTcwLVxcdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6MzEuMDA3NzI1MjA0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDYwNzU2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipDaGVja2luZyBCUEYgQ29uZmlndXJhdGlvbnMgYW5kIEF0b21pYyBPcGVyYXRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIEJQRiBjb25maWd1cmF0aW9uczogYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLCBidXQgSSBhbHdheXMgd2FudCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBOb3csIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIG1pZ2h0IGJlIGNvbm5lY3RlZCB0byB0aGUgYXRvbWljIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCBzaW5jZSB0aG9zZSBhcmUgYWx3YXlzIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXJlYS4gSXTigJlzIGEgZ29vZCB0aW1lIHRvIGRvdWJsZS1jaGVjayBpZiBgYnBmX2F0b21pY19sb2FkX3JlZ2AgaXMgYmVpbmcgdXRpbGl6ZWQgYW55d2hlcmUgZWxzZSB3aXRoaW4gdGhlIGNvZGViYXNlLCBiZXlvbmQgdGhlIGltbWVkaWF0ZSBjb250ZXh0IEknbSBjdXJyZW50bHkgd29ya2luZyBpbi4gQmV0dGVyIHRvIGJlIHRob3JvdWdoIGFuZCB2ZXJpZnkgdGhhdCB1c2FnZSBwYXR0ZXJucyBtYXRjaCBteSBjdXJyZW50IHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDg1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6MzMuOTEzODAzNjg4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODMyMDA2NDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9hdG9taWNfbG9hZF9yZWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTEyNjU9c3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE5OTQtXFx0XFx0XFx0ICovXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTk5NTpcXHRcXHRcXHRpbnQgbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE5OTYtXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzNjE9aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIwMDEtXFx0XFx0XFx0ICovXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMDAyOlxcdFxcdFxcdGludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMDAzLVxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz03NzM9c3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTc5Mi1cXHQgKi9cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjc5MzpcXHRsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03OTQtXFx0aWYgKGxvYWRfcmVnIFxcdTAwM2U9IDApXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MjI4NT1zdDpcXHRcXHRcXHRpbnNuX29mZiA9IGluc24tXFx1MDAzZW9mZjtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNDAwLVxcdFxcdFxcdFxcdFxcdCAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyNDAxOlxcdFxcdFxcdFxcdFxcdGludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI0MDItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTQwOT1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX2F0b21pY19pc19sb2FkX2FjcShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTQyMy0gKi9cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjQyNDpzdGF0aWMgaW5saW5lIGludCBicGZfYXRvbWljX2xvYWRfcmVnKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTQyNS17XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTQ0PXN0YXRpYyBpbnQgaW5zbl9kZWZfcmVnbm8oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy01MS1cXHRjYXNlIEJQRl9TVFg6XFxua2VybmVsL2JwZi9maXh1cHMuYzo1MjpcXHRcXHRyZXR1cm4gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTUzLVxcdGRlZmF1bHQ6XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjQ0MD1zdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDkxLVxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDkyOlxcdGxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQ5My1cXHRpZiAobG9hZF9yZWcgXFx1MDAzZT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNTozNS43NDU4MTY1MTJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA3MDA2Nzc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBBdG9taWMgT3BlcmF0aW9uIEV4Y2VwdGlvbiBIYW5kbGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgYnVnIGluIEJQRiBhcmVuYSBleGNlcHRpb24gaGFuZGxpbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGF0b21pYyBvcGVyYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGltcG9ydGFudCDigJMgYXRvbWljIG9wZXJhdGlvbnMgYXJlIGNyaXRpY2FsIGZvciBjb25jdXJyZW5jeSBhbmQgZGF0YSBpbnRlZ3JpdHksIGFuZCBhIGJ1ZyBpbiB0aGVpciBleGNlcHRpb24gaGFuZGxpbmcgY291bGQgbGVhZCB0byBzaWduaWZpY2FudCBwcm9ibGVtcy5cblxuSXQgc2VlbXMgdGhlIGlzc3VlIGNlbnRlcnMgYXJvdW5kIHdoYXQgaGFwcGVucyB3aGVuIGFuIGF0b21pYyBpbnN0cnVjdGlvbiBmYXVsdHMuIFRoZSBleGNlcHRpb24gaGFuZGxlciBuZWVkcyB0byBjb3JyZWN0bHkgY2xlYXIgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGluIHRoZXNlIGNhc2VzLiBGb3IgaW5zdHJ1Y3Rpb25zIGxpa2UgYEJQRl9DTVBYQ0hHYCwgaXQncyBgcjBgLCBhbmQgZm9yIGBCUEZfRkVUQ0hgLCBpdCBpcyBgc3JjX3JlZ2AuIFRoZSBwYXRjaCBhcHBhcmVudGx5IHVzZXMgYGJwZl9hdG9taWNfbG9hZF9yZWdgIHRvIGNvcnJlY3RseSBpZGVudGlmeSB0aGUgcmVnaXN0ZXIgdG8gY2xlYXIsIHdoaWNoIHNvdW5kcyByZWFzb25hYmxlLiBJdCBhbHNvIGNvcnJlY3RseSBtYXJrcyB0aGUgYWNjZXNzIGFzIGEgd3JpdGUgZm9yIHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbnMsIHdoaWNoIG1ha2VzIHNlbnNlLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgaW1wYWN0cyB0aGUgQlBGIEpJVCBjb21waWxlciBhbmQgdmVyaWZpZXIsIHdoaWNoIGlzIHRvIGJlIGV4cGVjdGVkIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeC4gVGhlIG5vdGVzIGluZGljYXRlIGl0IGlzIHdvcnRoIGZ1enppbmcsIHdoaWNoIEkgYWdyZWUgd2l0aCAtIGF0b21pYyBvcGVyYXRpb25zIGFyZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIGVkZ2UgY2FzZXMuXG5cbkkgbmVlZCB0byBkaWcgZGVlcGVyLiBNeSBmb2N1cyBzeW1ib2xzIHdpbGwgYmUgYGJwZl9pbnNuX2RlZjMyYCwgYGV4X2hhbmRsZXJfYnBmYCwgYGJwZl9qaXRfZW1pdF9pbnNuYCwgYGJwZl9pbnRfaml0X2NvbXBpbGVgLCBhbmQgYGJwZl9jaGVja2AuXG5cbmBicGZfaW50X2ppdF9jb21waWxlYCBzZWVtcyBsaWtlIHRoZSBjb3JyZWN0IG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBKSVQgY29tcGlsYXRpb24gYWNyb3NzIGFsbCBhcmNoaXRlY3R1cmVzLCB3aGljaCBjb25maXJtcyBteSB1bmRlcnN0YW5kaW5nLiBgZXhfaGFuZGxlcl9icGZgIGlzIHNwZWNpZmljIHRvIHg4NiBhbmQgYXJtNjQsIHNvIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gYGJwZl9pbnNuX2RlZjMyYCBpcyB1c2VkIGluIHRoZSB2ZXJpZmllciBhbmQgZml4dXBzLCBhbmQgSSB3aWxsIGNoZWNrIGl0IGluIHRoZSBjb250ZXh0IG9mIHRoZSBmaXh1cHMuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgYGJwZl9pbnNuX2RlZjMyYCBhbmQgcmVsYXRlZCBjYWxscy4gSW4gYGtlcm5lbC9icGYvZml4dXBzLmNgLCBpdCBzZWVtcyBpdCBjYWxscyBgaW5zbl9kZWZfcmVnbm9gLCB3aGljaCB0aGVuIGNhbGxzIGBicGZfYXRvbWljX2xvYWRfcmVnYC4gVGhpcyBjb25maXJtcyB0aGF0IGBicGZfaW5zbl9kZWYzMmAgaXMgYSBnb29kIGNob2ljZSBmb3IgaW52ZXN0aWdhdGlvbi5cblxuSSdsbCBhbHNvIGNoZWNrIGBicGZfY2hlY2tgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGlzIGlzIHRoZSBtYWluIHZlcmlmaWVyIGVudHJ5IHBvaW50LiBUaGUgc3RhdGljIGZ1bmN0aW9uIGBjaGVja19hdG9taWNfcm13YCBpcyBjYWxsZWQgZHVyaW5nIHZlcmlmaWNhdGlvbiwgd2hpY2ggaXMgcmVsZXZhbnQgdG8gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzIyOCwiT3V0cHV0VG9rZW5zIjoyMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6NDMuODE1ODg3MDcxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQyNTc4MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2luc25fZGVmMzJcIixcbiAgICBcImV4X2hhbmRsZXJfYnBmXCIsXG4gICAgXCJicGZfaml0X2VtaXRfaW5zblwiLFxuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXJzICh4ODYsIGFybTY0LCByaXNjdiwgczM5MCkgYW5kIHRoZSBCUEYgdmVyaWZpZXIgdG8gY29ycmVjdGx5IGhhbmRsZSBleGNlcHRpb25zIGZvciBhdG9taWMgb3BlcmF0aW9ucyBpbiB0aGUgQlBGIGFyZW5hLiBJdCBpbnRyb2R1Y2VzIGBicGZfYXRvbWljX2xvYWRfcmVnYCB0byBpZGVudGlmeSB0aGUgcmVnaXN0ZXIgdGhhdCBuZWVkcyB0byBiZSBjbGVhcmVkIHdoZW4gYW4gYXRvbWljIGluc3RydWN0aW9uIGZhdWx0cywgYW5kIGVuc3VyZXMgdGhhdCByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb25zIGFyZSBjb3JyZWN0bHkgcmVwb3J0ZWQgYXMgd3JpdGVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQlBGIHN1YnN5c3RlbSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW5zbl9kZWYzMlwiLFxuICAgIFwiZXhfaGFuZGxlcl9icGZcIixcbiAgICBcImJwZl9qaXRfZW1pdF9pbnNuXCIsXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gICAgXCJicGZfY2hlY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlcnMgKHg4NiwgYXJtNjQsIHJpc2N2LCBzMzkwKSBhbmQgdGhlIEJQRiB2ZXJpZmllciB0byBjb3JyZWN0bHkgaGFuZGxlIGV4Y2VwdGlvbnMgZm9yIGF0b21pYyBvcGVyYXRpb25zIGluIHRoZSBCUEYgYXJlbmEuIEl0IGludHJvZHVjZXMgYGJwZl9hdG9taWNfbG9hZF9yZWdgIHRvIGlkZW50aWZ5IHRoZSByZWdpc3RlciB0aGF0IG5lZWRzIHRvIGJlIGNsZWFyZWQgd2hlbiBhbiBhdG9taWMgaW5zdHJ1Y3Rpb24gZmF1bHRzLCBhbmQgZW5zdXJlcyB0aGF0IHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbnMgYXJlIGNvcnJlY3RseSByZXBvcnRlZCBhcyB3cml0ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc3Vic3lzdGVtKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6NDMuODkwMTUwNjQ0WiIsIlNlcSI6MzksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU1MzgzNTg3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM1OjQzLjg5MDYxNjE2NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNzU1MzM2NjU3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgdGhlIEJQRiBleGNlcHRpb24gaGFuZGxlciBmb3IgYXJlbmEgYWNjZXNzZXMgdG8gY29ycmVjdGx5IGlkZW50aWZ5IHJlYWQtbW9kaWZ5LXdyaXRlIGF0b21pYyBvcGVyYXRpb25zIChsaWtlIEJQRl9YQ0hHIGFuZCBCUEZfQ01QWENIRykgYXMgd3JpdGVzLCBhbmQgdG8gcHJvcGVybHkgY2xlYXIgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIChlLmcuLCBCUEZfUkVHXzAgZm9yIENNUFhDSEcpIHdoZW4gYSBwYWdlIGZhdWx0IG9jY3Vycy4gSWYgdGhlIHJlZ2lzdGVyIGlzIG5vdCBjbGVhcmVkLCB0aGUgQlBGIHByb2dyYW0gc2ltcGx5IHJldGFpbnMgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoYXQgcmVnaXN0ZXIuIFRoaXMgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnksIG5vciBkb2VzIGl0IGV4cG9zZSBrZXJuZWwgc3RhY2svaGVhcCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlIGlzc3VlIGlzIGEgbG9naWMgYnVnIGluIEJQRiBKSVQgZXhjZXB0aW9uIGhhbmRsaW5nLCB3aGljaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gU3RhbmRhcmQgdGVzdGluZyBhbmQgQlBGIHNlbGZ0ZXN0cyAoYXMgaW5jbHVkZWQgaW4gdGhlIHBhdGNoKSBhcmUgc3VmZmljaWVudCB0byB2ZXJpZnkgdGhlIGZpeC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNGFhNzUyMWY4NTgwM2ZkM2ExYmFlMTQ1MTlkYTBhYmRjMWRmMDFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDA6MzQ6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBkMTRkMjk3ZWJiOTY3Li43NGI0MDgzNzkxZGEzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMTA4MiwyMyArMTA4MiwyNyBAQCBzdGF0aWMgdm9pZCBidWlsZF9lcGlsb2d1ZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIHdhc19jbGFzc2ljKVxuICAqXG4gICogQml0IGxheW91dCBvZiBgZml4dXBgICgzMi1iaXQpOlxuICAqXG4tICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rXG4tICogfCAgIDMxLTI3ICAgfCAyNi0yMiAgfCAgICAgMjEgICAgfCAgIDIwLTE2ICAgfCAgIDE1LTAgICB8XG4tICogfCAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8XG4tICogfCBGSVhVUF9SRUcgfCBVbnVzZWQgfCBBUkVOQV9BQ0MgfCBBUkVOQV9SRUcgfCAgT0ZGU0VUICB8XG4tICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rXG4rICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLStcbisgKiB8ICAgMzEtMjcgICB8IDI2LTIzICB8ICAgICAgMjIgICAgIHwgICAgIDIxICAgIHwgICAyMC0xNiAgIHwgICAxNS0wICAgfFxuKyAqIHwgICAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8XG4rICogfCBGSVhVUF9SRUcgfCBVbnVzZWQgfCBBUkVOQV9XUklURSB8IEFSRU5BX0FDQyB8IEFSRU5BX1JFRyB8ICBPRkZTRVQgIHxcbisgKiArLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tK1xuICAqXG4gICogLSBPRkZTRVQgKDE2IGJpdHMpOiBPZmZzZXQgdXNlZCB0byBjb21wdXRlIGFkZHJlc3MgZm9yIExvYWQvU3RvcmUgaW5zdHJ1Y3Rpb24uXG4gICogLSBBUkVOQV9SRUcgKDUgYml0cyk6IFJlZ2lzdGVyIHRoYXQgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGFkZHJlc3MgZm9yIGxvYWQvc3RvcmUgd2hlblxuICAqICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NpbmcgdGhlIGFyZW5hIHJlZ2lvbi5cbiAgKiAtIEFSRU5BX0FDQ0VTUyAoMSBiaXQpOiBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24gYWNjZXNzZWQgdGhlIGFyZW5hIHJlZ2lvbi5cbisgKiAtIEFSRU5BX1dSSVRFICgxIGJpdCk6IFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiB3cm90ZSB0byB0aGUgYXJlbmEgcmVnaW9uLlxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW5kZXBlbmRlbnQgb2YgRklYVVBfUkVHLCBzaW5jZSBhIHJlYWQtbW9kaWZ5LXdyaXRlIGJvdGggd3JpdGVzIHRvXG4rICogICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgYW5kIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBhIHJlZ2lzdGVyLlxuICAqIC0gRklYVVBfUkVHICg1IGJpdHMpOiBEZXN0aW5hdGlvbiByZWdpc3RlciBmb3IgdGhlIGxvYWQgaW5zdHJ1Y3Rpb24gKGNsZWFyZWQgb24gZmF1bHQpIG9yIHNldCB0b1xuLSAqICAgICAgICAgICAgICAgICAgICAgICBET05UX0NMRUFSIGlmIGl0IGlzIGEgc3RvcmUgaW5zdHJ1Y3Rpb24uXG4rICogICAgICAgICAgICAgICAgICAgICAgIERPTlRfQ0xFQVIgaWYgdGhlIGluc3RydWN0aW9uIGRvZXMgbm90IHJlYWQgaW50byBhIHJlZ2lzdGVyLlxuICAqL1xuIFxuICNkZWZpbmUgQlBGX0ZJWFVQX09GRlNFVF9NQVNLICAgICAgR0VOTUFTSygxNSwgMClcbiAjZGVmaW5lIEJQRl9GSVhVUF9BUkVOQV9SRUdfTUFTSyAgIEdFTk1BU0soMjAsIDE2KVxuICNkZWZpbmUgQlBGX0FSRU5BX0FDQ0VTUyAgICAgICAgICAgQklUKDIxKVxuKyNkZWZpbmUgQlBGX0FSRU5BX1dSSVRFICAgICAgICAgICAgQklUKDIyKVxuICNkZWZpbmUgQlBGX0ZJWFVQX1JFR19NQVNLXHRHRU5NQVNLKDMxLCAyNylcbiAjZGVmaW5lIERPTlRfQ0xFQVIgNSAvKiBVbnVzZWQgQVJNNjQgcmVnaXN0ZXIgZnJvbSBCUEYncyBQT1YgKi9cbiBcbkBAIC0xMTA5LDcgKzExMTMsNyBAQCBib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxuIFx0czE2IG9mZiA9IEZJRUxEX0dFVChCUEZfRklYVVBfT0ZGU0VUX01BU0ssIGV4LVx1MDAzZWZpeHVwKTtcbiBcdGludCBhcmVuYV9yZWcgPSBGSUVMRF9HRVQoQlBGX0ZJWFVQX0FSRU5BX1JFR19NQVNLLCBleC1cdTAwM2VmaXh1cCk7XG4gXHRib29sIGlzX2FyZW5hID0gISEoZXgtXHUwMDNlZml4dXAgXHUwMDI2IEJQRl9BUkVOQV9BQ0NFU1MpO1xuLVx0Ym9vbCBpc193cml0ZSA9IChkc3RfcmVnID09IERPTlRfQ0xFQVIpO1xuK1x0Ym9vbCBpc193cml0ZSA9ICEhKGV4LVx1MDAzZWZpeHVwIFx1MDAyNiBCUEZfQVJFTkFfV1JJVEUpO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyO1xuIFxuIFx0aWYgKGlzX2FyZW5hKSB7XG5AQCAtMTEzMiw3ICsxMTM2LDcgQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIHtcbiBcdG9mZl90IGluc19vZmZzZXQ7XG4gXHRzMTYgb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4tXHRib29sIGlzX2FyZW5hO1xuK1x0Ym9vbCBpc19hcmVuYSwgaXNfd3JpdGU7XG4gXHRpbnQgYXJlbmFfcmVnO1xuIFx0dW5zaWduZWQgbG9uZyBwYztcbiBcdHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4O1xuQEAgLTExODEsMTUgKzExODUsMTggQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0LypcbiBcdCAqIEEgbG9hZC1hY3F1aXJlIGlzIG9mIEJQRl9TVFggY2xhc3MsIGJ1dCByZWFkcyBmcm9tIHNyY19yZWcgaW50b1xuIFx0ICogZHN0X3JlZyBsaWtlIGEgQlBGX0xEWCBkb2VzLCBoZW5jZSBpdCBtdXN0IG5vdCBiZSB0cmVhdGVkIGFzIGEgc3RvcmVcbi1cdCAqIGhlcmUuXG4rXHQgKiBoZXJlLiBBIHJlYWQtbW9kaWZ5LXdyaXRlIGNhcnJ5aW5nIEJQRl9GRVRDSCBpcyByZXBvcnRlZCBhcyBhIHdyaXRlXG4rXHQgKiBldmVuIHRob3VnaCBpdCBkb2VzIGhhdmUgYSByZWdpc3RlciB0byBjbGVhciwgc2VlIHRoZSBjYWxsZXJzLlxuIFx0ICovXG4tXHRpZiAoQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX0xEWCBcdTAwMjZcdTAwMjYgIWJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikpXG4tXHRcdGRzdF9yZWcgPSBET05UX0NMRUFSO1xuK1x0aXNfd3JpdGUgPSBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTERYIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAhYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKTtcbiBcbiBcdGV4LVx1MDAzZWZpeHVwID0gRklFTERfUFJFUChCUEZfRklYVVBfUkVHX01BU0ssIGRzdF9yZWcpO1xuIFxuIFx0aWYgKGlzX2FyZW5hKSB7XG4gXHRcdGV4LVx1MDAzZWZpeHVwIHw9IEJQRl9BUkVOQV9BQ0NFU1M7XG4rXHRcdGlmIChpc193cml0ZSlcbitcdFx0XHRleC1cdTAwM2VmaXh1cCB8PSBCUEZfQVJFTkFfV1JJVEU7XG4gXHRcdC8qXG4gXHRcdCAqIGluc24tXHUwMDNlc3JjX3JlZy9kc3RfcmVnIGhvbGRzIHRoZSBhZGRyZXNzIGluIHRoZSBhcmVuYSByZWdpb24gd2l0aCB1cHBlciAzMi1iaXRzXG4gXHRcdCAqIGJlaW5nIHplcm8gYmVjYXVzZSBvZiBhIHByZWNlZGluZyBhZGRyX3NwYWNlX2Nhc3Qoclx1MDAzY25cdTAwM2UsIDB4MCwgMHgxKSBpbnN0cnVjdGlvbi5cbkBAIC0xODg5LDcgKzE4OTYsNyBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgZHN0KTtcbitcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgRE9OVF9DTEVBUik7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0YnJlYWs7XG5AQCAtMTk1Niw3ICsxOTYzLDcgQEAgc3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zblxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGRzdCk7XG4rXHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIERPTlRfQ0xFQVIpO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdGJyZWFrO1xuQEAgLTE5NzksNyArMTk4NiwxNiBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcbiBcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX0FUT01JQykge1xuLVx0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGRzdCk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBIGxvYWQtYWNxdWlyZSByZWFkcyBpbnRvIGRzdF9yZWcsIGFuZCBhIHJlYWQtbW9kaWZ5LXdyaXRlXG4rXHRcdFx0ICogY2FycnlpbmcgQlBGX0ZFVENIIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBzcmNfcmVnLCBvciBpbnRvXG4rXHRcdFx0ICogcjAgZm9yIGEgQlBGX0NNUFhDSEcuIENsZWFyIHRoYXQgcmVnaXN0ZXIgb24gZmF1bHQsIHRoZVxuK1x0XHRcdCAqIHJlbWFpbmluZyBhdG9taWNzIGhhdmUgbm8gZGVzdGluYXRpb24gcmVnaXN0ZXIuXG4rXHRcdFx0ICovXG4rXHRcdFx0aW50IGxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcbitcbitcdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgY3R4LCBsb2FkX3JlZyBcdTAwM2MgMCA/XG4rXHRcdFx0XHRcdFx0ICAgIERPTlRfQ0xFQVIgOiBicGYyYTY0W2xvYWRfcmVnXSk7XG4gXHRcdFx0aWYgKHJldClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuaW5kZXggNmI5OTcyYjA3YzFiMC4uMjUwNGRmMWZhMTExOCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbisrKyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbkBAIC0xOTkyLDEwICsxOTkyLDE5IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFx0XHRcdHJldCA9IGVtaXRfYXRvbWljX3JtdyhyZCwgcnMsIGluc24sIGN0eCk7XG4gXG4gXHRcdC8qIHJldCBjYW4gYmUgMSAoc2tpcC16ZXh0KTsgZXh0YWJsZSBlbnRyeSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZCAqL1xuLVx0XHRpZiAocmV0IFx1MDAzZT0gMClcbi1cdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbixcbi1cdFx0XHRcdGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikgPyByZCA6IFJFR19ET05UX0NMRUFSX01BUktFUixcbi1cdFx0XHRcdGN0eCkgPzogcmV0O1xuK1x0XHRpZiAocmV0IFx1MDAzZT0gMCkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogQSBsb2FkLWFjcXVpcmUgcmVhZHMgaW50byBkc3RfcmVnLCBhbmQgYSByZWFkLW1vZGlmeS13cml0ZVxuK1x0XHRcdCAqIGNhcnJ5aW5nIEJQRl9GRVRDSCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gc3JjX3JlZywgb3IgaW50b1xuK1x0XHRcdCAqIHIwIGZvciBhIEJQRl9DTVBYQ0hHLiBDbGVhciB0aGF0IHJlZ2lzdGVyIG9uIGZhdWx0LCB0aGVcbitcdFx0XHQgKiByZW1haW5pbmcgYXRvbWljcyBoYXZlIG5vIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG4rXG4rXHRcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGxvYWRfcmVnIFx1MDAzYyAwID9cbitcdFx0XHRcdFx0UkVHX0RPTlRfQ0xFQVJfTUFSS0VSIDogcmVnbWFwW2xvYWRfcmVnXSxcbitcdFx0XHRcdFx0Y3R4KSA/OiByZXQ7XG4rXHRcdH1cbiBcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBiNjA4Nzc0NzhiNDVkLi5jNDY4NzJiMDcxY2U3IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTc3NCw2ICs3NzQsOCBAQCBzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX2F0b21pY19wcmUoc3RydWN0IGJwZl9qaXQgKmppdCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXG4ge1xuK1x0aW50IGxvYWRfcmVnO1xuK1xuIFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX0FUT01JQylcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTc4Myw2ICs3ODUsMTQgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsXG4gXHRFTUlUNCgweGI5MDgwMDAwLCBSRUdfVzEsIGluc24tXHUwMDNlZHN0X3JlZyk7XG4gXHRwcm9iZS1cdTAwM2VhcmVuYV9yZWcgPSBSRUdfVzE7XG4gXHRwcm9iZS1cdTAwM2VwcmcgPSBqaXQtXHUwMDNlcHJnO1xuK1x0LypcbitcdCAqIEEgcmVhZC1tb2RpZnktd3JpdGUgY2FycnlpbmcgQlBGX0ZFVENIIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50b1xuK1x0ICogc3JjX3JlZywgb3IgaW50byByMCBmb3IgYSBCUEZfQ01QWENIRy4gQ2xlYXIgdGhhdCByZWdpc3RlciBvblxuK1x0ICogZmF1bHQsIHRoZSByZW1haW5pbmcgYXRvbWljcyBvbmx5IHdyaXRlIG1lbW9yeS5cbitcdCAqL1xuK1x0bG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xuK1x0aWYgKGxvYWRfcmVnIFx1MDAzZT0gMClcbitcdFx0cHJvYmUtXHUwMDNlcmVnID0gcmVnMmhleFtsb2FkX3JlZ107XG4gfVxuIFxuIHN0YXRpYyBpbnQgYnBmX2ppdF9wcm9iZV9wb3N0KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG5AQCAtMTY4NCw2ICsxNjk0LDcgQEAgc3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcbiBcdFx0XHRpZiAobG9hZF9wcm9iZS5wcmcgIT0gLTEpIHtcbiBcdFx0XHRcdHByb2JlLnByZyA9IGppdC1cdTAwM2Vwcmc7XG4gXHRcdFx0XHRwcm9iZS5hcmVuYV9yZWcgPSBsb2FkX3Byb2JlLmFyZW5hX3JlZztcbitcdFx0XHRcdHByb2JlLnJlZyA9IGxvYWRfcHJvYmUucmVnO1xuIFx0XHRcdH1cbiBcdFx0XHRsb29wX3N0YXJ0ID0gaml0LVx1MDAzZXByZztcbiBcdFx0XHQvKiAwOiB7Y3N5fGNzZ30gJXcwLCVzcmMsb2ZmKCVhcmVuYSkgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IDhkZGRiNWQ3YWYyMWIuLmQ5MjA3NzJhZjdkNWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTE0NzMsMTcgKzE0NzMsMjAgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19sZF9zdF9pbmRleCh1OCAqKnBwcm9nLCB1MzIgYXRvbWljX29wLCB1MzIgc2l6ZSxcbiAgKlxuICAqIEJpdCBsYXlvdXQgb2YgYGZpeHVwYCAoMzItYml0KTpcbiAgKlxuLSAqICstLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLStcbi0gKiB8IDMxICAgICAgICB8IDMwLTI0ICB8ICAgMjMtMTYgICB8ICAgMTUtOCAgfCAgICA3LTAgICB8XG4tICogfCAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgfFxuLSAqIHwgQVJFTkFfQUNDIHwgVW51c2VkIHwgQVJFTkFfUkVHIHwgRFNUX1JFRyB8IElOU05fTEVOIHxcbi0gKiArLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rXG4rICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rXG4rICogfCAzMSAgICAgICAgfCAzMCAgICAgICAgICB8IDI5LTI0ICB8ICAgMjMtMTYgICB8ICAgMTUtOCAgfCAgICA3LTAgICB8XG4rICogfCAgICAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICB8XG4rICogfCBBUkVOQV9BQ0MgfCBBUkVOQV9XUklURSB8IFVudXNlZCB8IEFSRU5BX1JFRyB8IERTVF9SRUcgfCBJTlNOX0xFTiB8XG4rICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rXG4gICpcbiAgKiAtIElOU05fTEVOICg4IGJpdHMpOiBMZW5ndGggb2YgZmF1bHRpbmcgaW5zbiAobWF4IHg4NiBpbnNuID0gMTUgYnl0ZXMgKGZpdHMgaW4gOCBiaXRzKSkuXG4gICogLSBEU1RfUkVHICAoOCBiaXRzKTogT2Zmc2V0IG9mIGRzdF9yZWcgZnJvbSByZWcycHRfcmVnc1tdIChtYXggb2Zmc2V0ID0gMTEyIChmaXRzIGluIDggYml0cykpLlxuLSAqICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgc2V0IHRvIERPTlRfQ0xFQVIgaWYgdGhlIGluc24gaXMgYSBzdG9yZS5cbisgKiAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHNldCB0byBET05UX0NMRUFSIGlmIHRoZSBpbnNuIGRvZXMgbm90IHJlYWQgaW50byBhIHJlZ2lzdGVyLlxuICAqIC0gQVJFTkFfUkVHICg4IGJpdHMpOiBPZmZzZXQgb2YgdGhlIHJlZ2lzdGVyIHRoYXQgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlXG4gICogICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgZm9yIGxvYWQvc3RvcmUgd2hlbiBhY2Nlc3NpbmcgdGhlIGFyZW5hIHJlZ2lvbi5cbisgKiAtIEFSRU5BX1dSSVRFICgxIGJpdCk6IFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiB3cm90ZSB0byB0aGUgYXJlbmEgcmVnaW9uLlxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW5kZXBlbmRlbnQgb2YgRFNUX1JFRywgc2luY2UgYSByZWFkLW1vZGlmeS13cml0ZSBib3RoIHdyaXRlcyB0b1xuKyAqICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5IGFuZCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gYSByZWdpc3Rlci5cbiAgKiAtIEFSRU5BX0FDQ0VTUyAoMSBiaXQpOiBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24gYWNjZXNzZWQgdGhlIGFyZW5hIHJlZ2lvbi5cbiAgKlxuICAqIEJpdCBsYXlvdXQgb2YgYGRhdGFgICgzMi1iaXQpOlxuQEAgLTE1MDIsNiArMTUwNSw3IEBAIHN0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3RfaW5kZXgodTggKipwcHJvZywgdTMyIGF0b21pY19vcCwgdTMyIHNpemUsXG4gI2RlZmluZSBGSVhVUF9JTlNOX0xFTl9NQVNLXHRHRU5NQVNLKDcsIDApXG4gI2RlZmluZSBGSVhVUF9SRUdfTUFTS1x0XHRHRU5NQVNLKDE1LCA4KVxuICNkZWZpbmUgRklYVVBfQVJFTkFfUkVHX01BU0tcdEdFTk1BU0soMjMsIDE2KVxuKyNkZWZpbmUgRklYVVBfQVJFTkFfV1JJVEVcdEJJVCgzMClcbiAjZGVmaW5lIEZJWFVQX0FSRU5BX0FDQ0VTU1x0QklUKDMxKVxuICNkZWZpbmUgREFUQV9BUkVOQV9PRkZTRVRfTUFTS1x0R0VOTUFTSygzMSwgMTYpXG4gXG5AQCAtMTUxMCw3ICsxNTE0LDcgQEAgYm9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICp4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdHUzMiByZWcgPSBGSUVMRF9HRVQoRklYVVBfUkVHX01BU0ssIHgtXHUwMDNlZml4dXApO1xuIFx0dTMyIGluc25fbGVuID0gRklFTERfR0VUKEZJWFVQX0lOU05fTEVOX01BU0ssIHgtXHUwMDNlZml4dXApO1xuIFx0Ym9vbCBpc19hcmVuYSA9ICEhKHgtXHUwMDNlZml4dXAgXHUwMDI2IEZJWFVQX0FSRU5BX0FDQ0VTUyk7XG4tXHRib29sIGlzX3dyaXRlID0gKHJlZyA9PSBET05UX0NMRUFSKTtcbitcdGJvb2wgaXNfd3JpdGUgPSAhISh4LVx1MDAzZWZpeHVwIFx1MDAyNiBGSVhVUF9BUkVOQV9XUklURSk7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHI7XG4gXHRzMTYgb2ZmO1xuIFx0dTMyIGFyZW5hX3JlZztcbkBAIC0yMzQ4LDYgKzIzNTIsNyBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdFx0c3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXg7XG4gXHRcdFx0XHR1OCAqX2luc24gPSBpbWFnZSArIHByb2dsZW4gKyAoc3RhcnRfb2ZfbGR4IC0gdGVtcCk7XG4gXHRcdFx0XHR1MzIgYXJlbmFfcmVnLCBmaXh1cF9yZWc7XG4rXHRcdFx0XHRib29sIGlzX3dyaXRlO1xuIFx0XHRcdFx0czY0IGRlbHRhO1xuIFxuIFx0XHRcdFx0aWYgKCFicGZfcHJvZy1cdTAwM2VhdXgtXHUwMDNlZXh0YWJsZSlcbkBAIC0yMzg0LDE1ICsyMzg5LDI5IEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0XHQgICAgYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSkge1xuIFx0XHRcdFx0XHRhcmVuYV9yZWcgPSByZWcycHRfcmVnc1tzcmNfcmVnXTtcbiBcdFx0XHRcdFx0Zml4dXBfcmVnID0gcmVnMnB0X3JlZ3NbZHN0X3JlZ107XG4rXHRcdFx0XHRcdGlzX3dyaXRlID0gZmFsc2U7XG4gXHRcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0XHQvKlxuK1x0XHRcdFx0XHQgKiBBIHN0b3JlIGhhcyBubyBkZXN0aW5hdGlvbiByZWdpc3RlciB0byBjbGVhcixcbitcdFx0XHRcdFx0ICogZXhjZXB0IGZvciBhIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggQlBGX0ZFVENILFxuK1x0XHRcdFx0XHQgKiB3aGljaCBhbHNvIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBzcmNfcmVnLCBvclxuK1x0XHRcdFx0XHQgKiBpbnRvIHIwIGZvciBhIEJQRl9DTVBYQ0hHLiBFaXRoZXIgd2F5IHRoZSBhY2Nlc3NcbitcdFx0XHRcdFx0ICogaXMgc3RpbGwgcmVwb3J0ZWQgYXMgYSB3cml0ZS5cbitcdFx0XHRcdFx0ICovXG4rXHRcdFx0XHRcdGludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG4rXG4gXHRcdFx0XHRcdGFyZW5hX3JlZyA9IHJlZzJwdF9yZWdzW2RzdF9yZWddO1xuLVx0XHRcdFx0XHRmaXh1cF9yZWcgPSBET05UX0NMRUFSO1xuK1x0XHRcdFx0XHRmaXh1cF9yZWcgPSBsb2FkX3JlZyBcdTAwM2MgMCA/IERPTlRfQ0xFQVIgOlxuK1x0XHRcdFx0XHRcdCAgICByZWcycHRfcmVnc1tsb2FkX3JlZ107XG4rXHRcdFx0XHRcdGlzX3dyaXRlID0gdHJ1ZTtcbiBcdFx0XHRcdH1cbiBcbiBcdFx0XHRcdGV4LVx1MDAzZWZpeHVwID0gRklFTERfUFJFUChGSVhVUF9JTlNOX0xFTl9NQVNLLCBwcm9nIC0gc3RhcnRfb2ZfbGR4KSB8XG4gXHRcdFx0XHRcdCAgICBGSUVMRF9QUkVQKEZJWFVQX0FSRU5BX1JFR19NQVNLLCBhcmVuYV9yZWcpIHxcbiBcdFx0XHRcdFx0ICAgIEZJRUxEX1BSRVAoRklYVVBfUkVHX01BU0ssIGZpeHVwX3JlZyk7XG4gXHRcdFx0XHRleC1cdTAwM2VmaXh1cCB8PSBGSVhVUF9BUkVOQV9BQ0NFU1M7XG4rXHRcdFx0XHRpZiAoaXNfd3JpdGUpXG4rXHRcdFx0XHRcdGV4LVx1MDAzZWZpeHVwIHw9IEZJWFVQX0FSRU5BX1dSSVRFO1xuIFxuIFx0XHRcdFx0ZXgtXHUwMDNlZGF0YSB8PSBGSUVMRF9QUkVQKERBVEFfQVJFTkFfT0ZGU0VUX01BU0ssIGluc24tXHUwMDNlb2ZmKTtcbiBcdFx0XHR9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbmluZGV4IDRlZGJhODE4MmRiMWIuLjE1ZDgzNjg0YzZlOTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5AQCAtNDE0LDYgKzQxNCwzMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX2F0b21pY19pc19sb2FkX2FjcShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHQgICAgICAgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRO1xuIH1cbiBcbisvKlxuKyAqIEdpdmVuIGFuIGluc3RydWN0aW9uIEBpbnNuLCByZXR1cm4gdGhlIG51bWJlciBvZiB0aGUgQlBGIHJlZ2lzdGVyIHRoYXQgYVxuKyAqIEJQRl9BVE9NSUMgcmVhZHMgdGhlIHZhbHVlIGF0IGl0cyBtZW1vcnkgb3BlcmFuZCBpbnRvLCBvciAtMSBpZiB0aGVyZSBpc1xuKyAqIG5vIHN1Y2ggcmVnaXN0ZXIuIFRoYXQgaXMgdGhlIHJlZ2lzdGVyIGEgQlBGX1BST0JFX0FUT01JQyBoYXMgdG8gY2xlYXIgd2hlblxuKyAqIHRoZSBhY2Nlc3MgZmF1bHRzLiBMaWtlIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoKSwgQGluc24gaXMgbm90IGFzc3VtZWQgdG9cbisgKiBiZSBhIEJQRl9BVE9NSUMgaGVyZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBicGZfYXRvbWljX2xvYWRfcmVnKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbit7XG4rXHRpZiAoQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1NUWCB8fFxuK1x0ICAgIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4rXHQgICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX0FUT01JQykpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdHN3aXRjaCAoaW5zbi1cdTAwM2VpbW0pIHtcbitcdGNhc2UgQlBGX0xPQURfQUNROlxuK1x0XHRyZXR1cm4gaW5zbi1cdTAwM2Vkc3RfcmVnO1xuK1x0Y2FzZSBCUEZfQ01QWENIRzpcbitcdFx0cmV0dXJuIEJQRl9SRUdfMDtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAoaW5zbi1cdTAwM2VpbW0gXHUwMDI2IEJQRl9GRVRDSCkgPyBpbnNuLVx1MDAzZXNyY19yZWcgOiAtMTtcbitcdH1cbit9XG4rXG4gLyogTWVtb3J5IHN0b3JlLCAqKHVpbnQgKikgKGRzdF9yZWcgKyBvZmYxNikgPSBpbW0zMiAqL1xuIFxuICNkZWZpbmUgQlBGX1NUX01FTShTSVpFLCBEU1QsIE9GRiwgSU1NKVx0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2ZpeHVwcy5jIGIva2VybmVsL2JwZi9maXh1cHMuY1xuaW5kZXggNjYxZTJkMTNhNjA0Mi4uYzRiZDcwYmVmYmI1YyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmNcbisrKyBiL2tlcm5lbC9icGYvZml4dXBzLmNcbkBAIC00OSwxNiArNDksNyBAQCBzdGF0aWMgaW50IGluc25fZGVmX3JlZ25vKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdGNhc2UgQlBGX1NUOlxuIFx0XHRyZXR1cm4gLTE7XG4gXHRjYXNlIEJQRl9TVFg6XG4tXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgfHxcbi1cdFx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX0FUT01JQykge1xuLVx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSA9PSBCUEZfQ01QWENIRylcbi1cdFx0XHRcdHJldHVybiBCUEZfUkVHXzA7XG4tXHRcdFx0ZWxzZSBpZiAoaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRKVxuLVx0XHRcdFx0cmV0dXJuIGluc24tXHUwMDNlZHN0X3JlZztcbi1cdFx0XHRlbHNlIGlmIChpbnNuLVx1MDAzZWltbSBcdTAwMjYgQlBGX0ZFVENIKVxuLVx0XHRcdFx0cmV0dXJuIGluc24tXHUwMDNlc3JjX3JlZztcbi1cdFx0fVxuLVx0XHRyZXR1cm4gLTE7XG4rXHRcdHJldHVybiBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIGluc24tXHUwMDNlZHN0X3JlZztcbiBcdH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGFkZDNhZmZjNTcwMzUuLjczYTJlOGJiMTc4MmEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTY0ODUsMjEgKzY0ODUsMTYgQEAgc3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0fVxuIFxuLVx0aWYgKGluc24tXHUwMDNlaW1tIFx1MDAyNiBCUEZfRkVUQ0gpIHtcbi1cdFx0aWYgKGluc24tXHUwMDNlaW1tID09IEJQRl9DTVBYQ0hHKVxuLVx0XHRcdGxvYWRfcmVnID0gQlBGX1JFR18wO1xuLVx0XHRlbHNlXG4tXHRcdFx0bG9hZF9yZWcgPSBpbnNuLVx1MDAzZXNyY19yZWc7XG4tXG4rXHQvKlxuK1x0ICogQSBuZWdhdGl2ZSBsb2FkX3JlZyBtZWFucyB0aGF0IHRoaXMgaW5zdHJ1Y3Rpb24gYWNjZXNzZXMgYSBtZW1vcnlcbitcdCAqIGxvY2F0aW9uIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGxvYWQgaXQgaW50byBhIHJlZ2lzdGVyLlxuK1x0ICovXG4rXHRsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG4rXHRpZiAobG9hZF9yZWcgXHUwMDNlPSAwKSB7XG4gXHRcdC8qIGNoZWNrIGFuZCByZWNvcmQgbG9hZCBvZiBvbGQgdmFsdWUgKi9cbiBcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGxvYWRfcmVnLCBEU1RfT1ApO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4tXHR9IGVsc2Uge1xuLVx0XHQvKiBUaGlzIGluc3RydWN0aW9uIGFjY2Vzc2VzIGEgbWVtb3J5IGxvY2F0aW9uIGJ1dCBkb2Vzbid0XG4tXHRcdCAqIGFjdHVhbGx5IGxvYWQgaXQgaW50byBhIHJlZ2lzdGVyLlxuLVx0XHQgKi9cbi1cdFx0bG9hZF9yZWcgPSAtMTtcbiBcdH1cbiBcbiBcdGRzdF9yZWcgPSBjdXJfcmVncyhlbnYpICsgaW5zbi1cdTAwM2Vkc3RfcmVnO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbmluZGV4IDE1ZGQzYWUyYTg0YjcuLmU0ZTkzNzQzMDllMjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbkBAIC0xMDUsNiArMTA1LDEwIEBAIHZvaWQgdGVzdF9zdHJlYW1fYXJlbmFfZmF1bHRfYWRkcmVzcyh2b2lkKVxuIFx0XHR0ZXN0X2FkZHJlc3Moc2tlbC1cdTAwM2Vwcm9ncy5zdHJlYW1fYXJlbmFfd3JpdGVfZmF1bHQsIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWZhdWx0X2FkZHIpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJsb2FkX2FjcXVpcmVfZmF1bHRcIikpXG4gXHRcdHRlc3RfYWRkcmVzcyhza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV9sb2FkX2FjcXVpcmVfZmF1bHQsIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWZhdWx0X2FkZHIpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ4Y2hnX2ZhdWx0XCIpKVxuK1x0XHR0ZXN0X2FkZHJlc3Moc2tlbC1cdTAwM2Vwcm9ncy5zdHJlYW1fYXJlbmFfeGNoZ19mYXVsdCwgXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmF1bHRfYWRkcik7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImNtcHhjaGdfZmF1bHRcIikpXG4rXHRcdHRlc3RfYWRkcmVzcyhza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV9jbXB4Y2hnX2ZhdWx0LCBcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2VmYXVsdF9hZGRyKTtcbiBcbiBcdHN0cmVhbV9fZGVzdHJveShza2VsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXG5pbmRleCBjZjU1MzNlMTFmMzljLi4wMGEzNzkzM2U0MTFkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbkBAIC0yMjksNiArMjI5LDEwNyBAQCBpbnQgc3RyZWFtX2FyZW5hX2xvYWRfYWNxdWlyZV9mYXVsdCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gdmFsO1xuIH1cbiBcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK19fc3RkZXJyKFwiRVJST1I6IEFyZW5hIFdSSVRFIGFjY2VzcyBhdCB1bm1hcHBlZCBhZGRyZXNzIDB4e3suKn19XCIpXG4rX19zdGRlcnIoXCJDUFU6IHt7WzAtOV0rfX0gVUlEOiAwIFBJRDoge3tbMC05XSt9fSBDb21tOiB7ey4qfX1cIilcbitfX3N0ZGVycihcIkNhbGwgdHJhY2U6XFxuXCJcbitcInt7KFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKzB4WzAtOWEtZkEtRl0rLzB4WzAtOWEtZkEtRl0rXFxuXCJcbitcInxbIFxcdF0rW15cXG5dK1xcbikqfX1cIilcbitpbnQgc3RyZWFtX2FyZW5hX3hjaGdfZmF1bHQodm9pZCAqY3R4KVxuK3tcbitcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24geGNoZ19pbnNuID0ge1xuK1x0XHQuY29kZVx0ID0gMHhjMyxcdC8qIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1cgKi9cbitcdFx0LmRzdF9yZWcgPSAxLFx0XHQvKiBCUEZfUkVHXzEgKi9cbitcdFx0LnNyY19yZWcgPSAyLFx0XHQvKiBCUEZfUkVHXzIgKi9cbitcdFx0Lm9mZlx0ID0gMHg3ZmZmLFxuK1x0XHQuaW1tXHQgPSAweGUxLFx0LyogQlBGX1hDSEcgKi9cbitcdH07XG4rXHRzdHJ1Y3QgYnBmX2FyZW5hICpwdHIgPSAodm9pZCAqKVx1MDAyNmFyZW5hO1xuK1x0dTY0IHVzZXJfdm1fc3RhcnQsIHZhbDtcbitcbitcdC8qXG4rXHQgKiBQcmV2ZW50IEdDQyBib3VuZHMgd2FybmluZzogY2FzdGluZyBcdTAwMjZhcmVuYSB0byBzdHJ1Y3QgYnBmX2FyZW5hICpcbitcdCAqIHRyaWdnZXJzIGJvdW5kcyBjaGVja2luZyBzaW5jZSB0aGUgbWFwIGRlZmluaXRpb24gaXMgc21hbGxlciB0aGFuXG4rXHQgKiBzdHJ1Y3QgYnBmX2FyZW5hLiBiYXJyaWVyX3ZhcigpIG1ha2VzIHRoZSBwb2ludGVyIG9wYXF1ZSB0byBHQ0MsXG4rXHQgKiBwcmV2ZW50aW5nIHRoZSBib3VuZHMgYW5hbHlzaXMuXG4rXHQgKi9cbitcdGJhcnJpZXJfdmFyKHB0cik7XG4rXHR1c2VyX3ZtX3N0YXJ0ID0gcHRyLVx1MDAzZXVzZXJfdm1fc3RhcnQ7XG4rXHRmYXVsdF9hZGRyID0gdXNlcl92bV9zdGFydCArIDB4N2ZmZjtcbitcdGJwZl9hZGRyX3NwYWNlX2Nhc3QodXNlcl92bV9zdGFydCwgMCwgMSk7XG4rXHQvKlxuK1x0ICogQSByZWFkLW1vZGlmeS13cml0ZSBjYXJyeWluZyBCUEZfRkVUQ0ggd3JpdGVzIHRvIG1lbW9yeSwgc28gdGhlIGZhdWx0XG4rXHQgKiBoYXMgdG8gYmUgcmVwb3J0ZWQgYXMgYSBXUklURSBmcm9tIHRoZSBkc3RfcmVnIGFkZHJlc3MsIGJ1dCBpdCBhbHNvXG4rXHQgKiByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gc3JjX3JlZywgc28gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGhhcyB0b1xuK1x0ICogY2xlYXIgc3JjX3JlZy4gUG9pc29uIGl0IHVwIGZyb250LCB0aGUgcmV0dXJuZWQgdmFsdWUgbXVzdCBiZSAwLlxuK1x0ICovXG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XHRcInIxID0gJVt1c2VyX3ZtX3N0YXJ0XTtcIlxuK1x0XHRcInIyID0gMTtcIlxuK1x0XHRcIi44Ynl0ZSAlW3hjaGdfaW5zbl07XCIgLyogcjIgPSB4Y2hnKCh1MzIgKikocjEgKyAweDdmZmYpLCByMikgKi9cbitcdFx0XCIlW3ZhbF0gPSByMjtcIlxuK1x0XHQ6IFt2YWxdIFwiPXJcIiAodmFsKVxuK1x0XHQ6IFt1c2VyX3ZtX3N0YXJ0XSBcInJcIiAodXNlcl92bV9zdGFydCksXG4rXHRcdCAgX19pbW1faW5zbih4Y2hnX2luc24sIHhjaGdfaW5zbilcbitcdFx0OiBcInIxXCIsIFwicjJcIlxuK1x0KTtcbitcdHJldHVybiB2YWw7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4rX19zdGRlcnIoXCJFUlJPUjogQXJlbmEgV1JJVEUgYWNjZXNzIGF0IHVubWFwcGVkIGFkZHJlc3MgMHh7ey4qfX1cIilcbitfX3N0ZGVycihcIkNQVToge3tbMC05XSt9fSBVSUQ6IDAgUElEOiB7e1swLTldK319IENvbW06IHt7Lip9fVwiKVxuK19fc3RkZXJyKFwiQ2FsbCB0cmFjZTpcXG5cIlxuK1wie3soW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwrMHhbMC05YS1mQS1GXSsvMHhbMC05YS1mQS1GXStcXG5cIlxuK1wifFsgXFx0XStbXlxcbl0rXFxuKSp9fVwiKVxuK2ludCBzdHJlYW1fYXJlbmFfY21weGNoZ19mYXVsdCh2b2lkICpjdHgpXG4re1xuK1x0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaW5zbiBjbXB4Y2hnX2luc24gPSB7XG4rXHRcdC5jb2RlXHQgPSAweGMzLFx0LyogQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVyAqL1xuK1x0XHQuZHN0X3JlZyA9IDEsXHRcdC8qIEJQRl9SRUdfMSAqL1xuK1x0XHQuc3JjX3JlZyA9IDIsXHRcdC8qIEJQRl9SRUdfMiAqL1xuK1x0XHQub2ZmXHQgPSAweDdmZmYsXG4rXHRcdC5pbW1cdCA9IDB4ZjEsXHQvKiBCUEZfQ01QWENIRyAqL1xuK1x0fTtcbitcdHN0cnVjdCBicGZfYXJlbmEgKnB0ciA9ICh2b2lkICopXHUwMDI2YXJlbmE7XG4rXHR1NjQgdXNlcl92bV9zdGFydCwgdmFsO1xuK1xuK1x0LypcbitcdCAqIFByZXZlbnQgR0NDIGJvdW5kcyB3YXJuaW5nOiBjYXN0aW5nIFx1MDAyNmFyZW5hIHRvIHN0cnVjdCBicGZfYXJlbmEgKlxuK1x0ICogdHJpZ2dlcnMgYm91bmRzIGNoZWNraW5nIHNpbmNlIHRoZSBtYXAgZGVmaW5pdGlvbiBpcyBzbWFsbGVyIHRoYW5cbitcdCAqIHN0cnVjdCBicGZfYXJlbmEuIGJhcnJpZXJfdmFyKCkgbWFrZXMgdGhlIHBvaW50ZXIgb3BhcXVlIHRvIEdDQyxcbitcdCAqIHByZXZlbnRpbmcgdGhlIGJvdW5kcyBhbmFseXNpcy5cbitcdCAqL1xuK1x0YmFycmllcl92YXIocHRyKTtcbitcdHVzZXJfdm1fc3RhcnQgPSBwdHItXHUwMDNldXNlcl92bV9zdGFydDtcbitcdGZhdWx0X2FkZHIgPSB1c2VyX3ZtX3N0YXJ0ICsgMHg3ZmZmO1xuK1x0YnBmX2FkZHJfc3BhY2VfY2FzdCh1c2VyX3ZtX3N0YXJ0LCAwLCAxKTtcbitcdC8qXG4rXHQgKiBTYW1lIGFzIHRoZSBleGNoYW5nZSBhYm92ZSwgZXhjZXB0IHRoYXQgYSBCUEZfQ01QWENIRyByZWFkcyB0aGUgb2xkXG4rXHQgKiB2YWx1ZSBpbnRvIHIwIHJhdGhlciB0aGFuIGludG8gc3JjX3JlZywgc28gcjAgaXMgdGhlIHJlZ2lzdGVyIHRoZVxuK1x0ICogZXhjZXB0aW9uIGhhbmRsZXIgaGFzIHRvIGNsZWFyLiBJdCBkb3VibGVzIGFzIHRoZSBjb21wYXJlIHZhbHVlLCBidXRcbitcdCAqIHRoZSBjb21wYXJpc29uIG5ldmVyIGhhcHBlbnMgc2luY2UgdGhlIGFjY2VzcyBmYXVsdHMgZmlyc3QuXG4rXHQgKi9cbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcdFwicjEgPSAlW3VzZXJfdm1fc3RhcnRdO1wiXG4rXHRcdFwicjAgPSAxO1wiXG4rXHRcdFwicjIgPSAyO1wiXG4rXHRcdFwiLjhieXRlICVbY21weGNoZ19pbnNuXTtcIiAvKiByMCA9IGNtcHhjaGcoKHUzMiAqKShyMSArIDB4N2ZmZiksIHIwLCByMikgKi9cbitcdFx0XCIlW3ZhbF0gPSByMDtcIlxuK1x0XHQ6IFt2YWxdIFwiPXJcIiAodmFsKVxuK1x0XHQ6IFt1c2VyX3ZtX3N0YXJ0XSBcInJcIiAodXNlcl92bV9zdGFydCksXG4rXHRcdCAgX19pbW1faW5zbihjbXB4Y2hnX2luc24sIGNtcHhjaGdfaW5zbilcbitcdFx0OiBcInIwXCIsIFwicjFcIiwgXCJyMlwiXG4rXHQpO1xuK1x0cmV0dXJuIHZhbDtcbit9XG4rXG4gc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBzdWJwcm9nKHZvaWQpXG4ge1xuIFx0aW50IF9fYXJlbmEgKmFkZHIgPSAoaW50IF9fYXJlbmEgKikweGRlYWRiZWVmO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6NDMuODkwNjE2ODkzWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3NTUzMzQzODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBFeGNlcHRpb24gSGFuZGxpbmcgZm9yIEF0b21pYyBBcmVuYSBBY2Nlc3NlczogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFib3V0IGV4Y2VwdGlvbiBoYW5kbGluZyBpbiBCUEYgSklUIGNvbXBpbGVycywgc3BlY2lmaWNhbGx5IG9uIGFybTY0LCByaXNjdiwgczM5MCwgYW5kIHg4Ni4gVGhlIGNvcmUgaXNzdWUgaXMgaG93IHdlIGRlYWwgd2l0aCBmYXVsdHMgdGhhdCBvY2N1ciBkdXJpbmcgYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbnMgKGxpa2UgYEJQRl9YQ0hHYCwgYEJQRl9DTVBYQ0hHYCkgd2hlbiBhY2Nlc3NpbmcgdGhlIEJQRiBhcmVuYS4gVGhpcyBhcmVuYSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyBzaGFyZWQgbWVtb3J5IGJldHdlZW4gdXNlcnNwYWNlIGFuZCBCUEYgcHJvZ3JhbXMuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiV2FpdCwgYSBmYXVsdD8gRG9lcyB0aGF0IG1lYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgcmVhZD9cIiBCdXQgbm8sIHRoZSByZWdpc3RlciB3b3VsZG4ndCBjb250YWluIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAqcGVyIHNlKi4gVGhlIENQVSByZWdpc3RlciB3b3VsZCBqdXN0IGhhdmUgd2hhdGV2ZXIgdmFsdWUgaXQgaGFkIGJlZm9yZSB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24uIElmIHRoZSBleGNlcHRpb24gaGFuZGxlciBkb2Vzbid0IGNsZWFyIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBvbiBhIGZhdWx0LCB0aGUgQlBGIHByb2dyYW0gd291bGQgZWZmZWN0aXZlbHkgXCJyZS11c2VcIiB0aGUgcHJldmlvdXMgdmFsdWUuIEJ1dCBpcyB0aGlzIGEgc2VjdXJpdHkgcmlzaywgc3BlY2lmaWNhbGx5LCBhIEtNU0FOLWRldGVjdGFibGUgaXNzdWU/IFRoZSBCUEYgdmVyaWZpZXIgYWxyZWFkeSBlbnN1cmVzIHJlZ2lzdGVycyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIEtNU0FOIGlzIGxvb2tpbmcgZm9yICp1bmluaXRpYWxpemVkKiByZWFkcywgbm90IGp1c3Qgb2xkIHZhbHVlcy5cblxuSSBoYWQgdG8gcmVmcmVzaCBteSBrbm93bGVkZ2UuIExldCdzIGxvb2sgYXQgdGhlIGJwZl9hdG9taWNfbG9hZF9yZWcgZnVuY3Rpb24uIEl0J3MgcHVycG9zZSBpcyB0byBpZGVudGlmeSB3aGljaCByZWdpc3RlciB0byBjbGVhciBpbiBjYXNlIG9mIGEgZmF1bHQuIEl0IGNvbnNpZGVycyBjYXNlcyBsaWtlIEJQRl9MT0FEX0FDUSBhbmQgQlBGX0NNUFhDSEcuXG5cblRoZSBwYXRjaCBmb2N1c2VzIG9uIGNvcnJlY3RseSBpZGVudGlmeWluZyB0aGUgcmVnaXN0ZXIgdGhhdCBuZWVkcyB0byBiZSBjbGVhcmVkIChzZXQgdG8gemVybykgZHVyaW5nIGEgZmF1bHQuIEZvciByZWFkIG9wZXJhdGlvbnMsIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBjbGVhcmVkLiBGb3IgcmVhZC1tb2RpZnktd3JpdGUgb3BlcmF0aW9ucywgdGhlcmUncyBhIGZldGNoIGFuZCB0aGUgcGF0Y2ggZW5zdXJlcyB0aGUgY29ycmVjdCByZWdpc3RlciAobGlrZWx5IGBCUEZfUkVHXzBgIGZvciBgQ01QWENIR2ApIGlzIGNsZWFyZWQgb24gZmF1bHQuXG5cblRoZSBtYWluIGNvbmNlcm4gaW5pdGlhbGx5IHdhcyB0aGUgcG90ZW50aWFsIGZvciBvbGQgdmFsdWVzIHRvIGxpbmdlci4gQnV0IHNpbmNlIEJQRiBwcm9ncmFtcyBhbHJlYWR5IGhhdmUgdGhlaXIgcmVnaXN0ZXJzIGluaXRpYWxpemVkLCB0aGUgcmVnaXN0ZXIgc2ltcGx5IHJldGFpbnMgdGhlIHByZXZpb3VzIHZhbHVlLCBzbyB0aGlzIGlzbid0IGEga2VybmVsLW1lbW9yeSBleHBvc3VyZS4gQWxzbywgdGhpcyBkb2VzIG5vdCBleHBvc2UgYW55dGhpbmcgZnJvbSB0aGUga2VybmVsJ3MgcGVyc3BlY3RpdmUuIEl0J3MganVzdCBhIHZhcmlhYmxlIGluIGEgQ1BVIHJlZ2lzdGVyIGZyb20gQlBGIHBlcnNwZWN0aXZlLlxuXG5LTVNBTiwgd2hpY2ggZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgaXNuJ3QgcmVhbGx5IHJlbGV2YW50IGhlcmUuIFRoZSBwYXRjaCBtb2RpZmllcyBgZXhfaGFuZGxlcl9icGZgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucywgY2hhbmdpbmcgaG93IGBpc193cml0ZWAgaXMgZGV0ZXJtaW5lZCB0byBoYW5kbGUgcmVhZC1tb2RpZnktd3JpdGVzIGNvcnJlY3RseS4gQnV0IGl0J3Mgbm90IGludHJvZHVjaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBFdmVuIGlmIGEgcmVnaXN0ZXIgaXNuJ3QgY2xlYXJlZCBvbiBmYXVsdCwgdGhlIHByZXZpb3VzIHZhbHVlIHdvbid0IGJlIGZyb20gdGhlIGtlcm5lbC4gS01TQU4gZG9lcyB0cmFjayBDUFUgcmVnaXN0ZXJzLCBidXQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEJQRiBKSVQsIEtNU0FOIGlzIHByb2JhYmx5IG5vdCBkZWVwbHkgaW5zdHJ1bWVudGluZyB0aGUgSklUdGVkIGNvZGUuIEl0IGRvZXMgaGF2ZSBzb21lIHN1cHBvcnQgZm9yIEJQRiwgYnV0IGl0J3MgbGltaXRlZC4gS01TQU4gaXNuJ3QgdGhlIHJpZ2h0IHRvb2wgaGVyZS4gVGhpcyBpcyBhIGxvZ2ljIGVycm9yIHRoYXQgbmVlZHMgYW4gZXJyb3IgdG8gaW5kaWNhdGUgaXQgZGlkIG5vdCBjb21wbGV0ZS5cblxuU28sIHRoZSBidWcgaGVyZSBpcyB0aGF0IHRoZSBCUEYgZXhjZXB0aW9uIGhhbmRsZXIgKndhc24ndCogY2xlYXJpbmcgdGhlIHJlZ2lzdGVyIGNvcnJlY3RseSBmb3IgdGhlc2UgYXRvbWljIG9wZXJhdGlvbnMuIFRoaXMgbWVhbnQgdGhlIHByb2dyYW0gd291bGQgY29udGludWUgd2l0aCBhbiBvbGQgdmFsdWUgaW5zdGVhZCBvZiBhIGNsZWFyIHZhbHVlLiBJdCdzIGEgbG9naWMgZXJyb3IgaW4gQlBGIEpJVC9leGNlcHRpb24gaGFuZGxpbmcsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4gVGhpcyByZXF1aXJlcyBubyBzcGVjaWFsIGF0dGVudGlvbiBmcm9tIEtNU0FOLCBhcyB0aGUgcmVnaXN0ZXJzIGFyZSBub3QgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBJdCBpcyBwdXJlbHkgYSBtYXR0ZXIgb2YgQlBGIHByb2dyYW0gaW50ZWdyaXR5LiBUaGVyZWZvcmUsIE5lZWRzS01TQU4gPSBmYWxzZS5cblxuSnVzdCB0byBiZSBzdXJlLCBJJ3ZlIHJlY2hlY2tlZCB0aGUgcGF0Y2guIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBjb3JyZWN0bHkgc2V0dGluZyBgaXNfd3JpdGVgIGFuZCBjbGVhcmluZyB0aGUgYXBwcm9wcmlhdGUgcmVnaXN0ZXJzIGluIGNhc2Ugb2YgYSBmYXVsdC4gVGhlIGBCUEZfQVJFTkFfV1JJVEVgIGZsYWcgaXMgYmVpbmcgaW50cm9kdWNlZCB0byBzaWduYWwgYW4gYXJlbmEgd3JpdGUuIEkgY2FuIHNlZSB0aGF0IHRoaXMgaXNuJ3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0J3MgYSBidWcgd2l0aCBob3cgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIHdhcyBoYW5kbGluZyBmYXVsdHMgb24gYXRvbWljIGFyZW5hIGFjY2Vzc2VzIGFuZCwgdGhlcmVmb3JlLCBJIGJlbGlldmUgbXkgcmVhc29uaW5nIGlzIHNvbGlkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTcxLCJPdXRwdXRUb2tlbnMiOjE5MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNjowMS40NDM5NjQwMzdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHRoZSBCUEYgZXhjZXB0aW9uIGhhbmRsZXIgZm9yIGFyZW5hIGFjY2Vzc2VzIHRvIGNvcnJlY3RseSBpZGVudGlmeSByZWFkLW1vZGlmeS13cml0ZSBhdG9taWMgb3BlcmF0aW9ucyAobGlrZSBCUEZfWENIRyBhbmQgQlBGX0NNUFhDSEcpIGFzIHdyaXRlcywgYW5kIHRvIHByb3Blcmx5IGNsZWFyIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciAoZS5nLiwgQlBGX1JFR18wIGZvciBDTVBYQ0hHKSB3aGVuIGEgcGFnZSBmYXVsdCBvY2N1cnMuIElmIHRoZSByZWdpc3RlciBpcyBub3QgY2xlYXJlZCwgdGhlIEJQRiBwcm9ncmFtIHNpbXBseSByZXRhaW5zIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGF0IHJlZ2lzdGVyLiBUaGlzIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LCBub3IgZG9lcyBpdCBleHBvc2Uga2VybmVsIHN0YWNrL2hlYXAgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZSBpc3N1ZSBpcyBhIGxvZ2ljIGJ1ZyBpbiBCUEYgSklUIGV4Y2VwdGlvbiBoYW5kbGluZywgd2hpY2ggZG9lcyBub3QgaW50cm9kdWNlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEJQRiBzZWxmdGVzdHMgKGFzIGluY2x1ZGVkIGluIHRoZSBwYXRjaCkgYXJlIHN1ZmZpY2llbnQgdG8gdmVyaWZ5IHRoZSBmaXguXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgdGhlIEJQRiBleGNlcHRpb24gaGFuZGxlciBmb3IgYXJlbmEgYWNjZXNzZXMgdG8gY29ycmVjdGx5IGlkZW50aWZ5IHJlYWQtbW9kaWZ5LXdyaXRlIGF0b21pYyBvcGVyYXRpb25zIChsaWtlIEJQRl9YQ0hHIGFuZCBCUEZfQ01QWENIRykgYXMgd3JpdGVzLCBhbmQgdG8gcHJvcGVybHkgY2xlYXIgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIChlLmcuLCBCUEZfUkVHXzAgZm9yIENNUFhDSEcpIHdoZW4gYSBwYWdlIGZhdWx0IG9jY3Vycy4gSWYgdGhlIHJlZ2lzdGVyIGlzIG5vdCBjbGVhcmVkLCB0aGUgQlBGIHByb2dyYW0gc2ltcGx5IHJldGFpbnMgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoYXQgcmVnaXN0ZXIuIFRoaXMgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnksIG5vciBkb2VzIGl0IGV4cG9zZSBrZXJuZWwgc3RhY2svaGVhcCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlIGlzc3VlIGlzIGEgbG9naWMgYnVnIGluIEJQRiBKSVQgZXhjZXB0aW9uIGhhbmRsaW5nLCB3aGljaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gU3RhbmRhcmQgdGVzdGluZyBhbmQgQlBGIHNlbGZ0ZXN0cyAoYXMgaW5jbHVkZWQgaW4gdGhlIHBhdGNoKSBhcmUgc3VmZmljaWVudCB0byB2ZXJpZnkgdGhlIGZpeC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbtxcn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 00:15:33 +0000 UTC FinishedAt: 2026-08-11 00:36:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d114bb98936770c501c958bf2bc5fb6b7c0bad7b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d114bb98936770c501c958bf2bc5fb6b7c0bad7b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "21ccb324-35ab-4af2-bc1f-cc60a3ebf49d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_insn_def32", "ex_handler_bpf", "bpf_jit_emit_insn", "bpf_int_jit_compile", "bpf_check" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW5zbl9kZWYzMiYjMzQ7LAogICAgJiMzNDtleF9oYW5kbGVyX2JwZiYjMzQ7LAogICAgJiMzNDticGZfaml0X2VtaXRfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHRoZSBCUEYgZXhjZXB0aW9uIGhhbmRsZXIgZm9yIGFyZW5hIGFjY2Vzc2VzIHRvIGNvcnJlY3RseSBpZGVudGlmeSByZWFkLW1vZGlmeS13cml0ZSBhdG9taWMgb3BlcmF0aW9ucyAobGlrZSBCUEZfWENIRyBhbmQgQlBGX0NNUFhDSEcpIGFzIHdyaXRlcywgYW5kIHRvIHByb3Blcmx5IGNsZWFyIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciAoZS5nLiwgQlBGX1JFR18wIGZvciBDTVBYQ0hHKSB3aGVuIGEgcGFnZSBmYXVsdCBvY2N1cnMuIElmIHRoZSByZWdpc3RlciBpcyBub3QgY2xlYXJlZCwgdGhlIEJQRiBwcm9ncmFtIHNpbXBseSByZXRhaW5zIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGF0IHJlZ2lzdGVyLiBUaGlzIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LCBub3IgZG9lcyBpdCBleHBvc2Uga2VybmVsIHN0YWNrL2hlYXAgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZSBpc3N1ZSBpcyBhIGxvZ2ljIGJ1ZyBpbiBCUEYgSklUIGV4Y2VwdGlvbiBoYW5kbGluZywgd2hpY2ggZG9lcyBub3QgaW50cm9kdWNlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEJQRiBzZWxmdGVzdHMgKGFzIGluY2x1ZGVkIGluIHRoZSBwYXRjaCkgYXJlIHN1ZmZpY2llbnQgdG8gdmVyaWZ5IHRoZSBmaXguJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVycyAoeDg2LCBhcm02NCwgcmlzY3YsIHMzOTApIGFuZCB0aGUgQlBGIHZlcmlmaWVyIHRvIGNvcnJlY3RseSBoYW5kbGUgZXhjZXB0aW9ucyBmb3IgYXRvbWljIG9wZXJhdGlvbnMgaW4gdGhlIEJQRiBhcmVuYS4gSXQgaW50cm9kdWNlcyBgYnBmX2F0b21pY19sb2FkX3JlZ2AgdG8gaWRlbnRpZnkgdGhlIHJlZ2lzdGVyIHRoYXQgbmVlZHMgdG8gYmUgY2xlYXJlZCB3aGVuIGFuIGF0b21pYyBpbnN0cnVjdGlvbiBmYXVsdHMsIGFuZCBlbnN1cmVzIHRoYXQgcmVhZC1tb2RpZnktd3JpdGUgb3BlcmF0aW9ucyBhcmUgY29ycmVjdGx5IHJlcG9ydGVkIGFzIHdyaXRlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJQRiBzdWJzeXN0ZW0pIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjRhYTc1MjFmODU4MDNmZDNhMWJhZTE0NTE5ZGEwYWJkYzFkZjAxZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDAwOjM0OjE4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IGQxNGQyOTdlYmI5NjcuLjc0YjQwODM3OTFkYTMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0xMDgyLDIzICYjNDM7MTA4MiwyNyBAQCBzdGF0aWMgdm9pZCBidWlsZF9lcGlsb2d1ZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIHdhc19jbGFzc2ljKVxuICAqXG4gICogQml0IGxheW91dCBvZiBgZml4dXBgICgzMi1iaXQpOlxuICAqXG4tICogJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7XG4tICogfCAgIDMxLTI3ICAgfCAyNi0yMiAgfCAgICAgMjEgICAgfCAgIDIwLTE2ICAgfCAgIDE1LTAgICB8XG4tICogfCAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8XG4tICogfCBGSVhVUF9SRUcgfCBVbnVzZWQgfCBBUkVOQV9BQ0MgfCBBUkVOQV9SRUcgfCAgT0ZGU0VUICB8XG4tICogJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7XG4mIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzO1xuJiM0MzsgKiB8ICAgMzEtMjcgICB8IDI2LTIzICB8ICAgICAgMjIgICAgIHwgICAgIDIxICAgIHwgICAyMC0xNiAgIHwgICAxNS0wICAgfFxuJiM0MzsgKiB8ICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfFxuJiM0MzsgKiB8IEZJWFVQX1JFRyB8IFVudXNlZCB8IEFSRU5BX1dSSVRFIHwgQVJFTkFfQUNDIHwgQVJFTkFfUkVHIHwgIE9GRlNFVCAgfFxuJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MztcbiAgKlxuICAqIC0gT0ZGU0VUICgxNiBiaXRzKTogT2Zmc2V0IHVzZWQgdG8gY29tcHV0ZSBhZGRyZXNzIGZvciBMb2FkL1N0b3JlIGluc3RydWN0aW9uLlxuICAqIC0gQVJFTkFfUkVHICg1IGJpdHMpOiBSZWdpc3RlciB0aGF0IGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBhZGRyZXNzIGZvciBsb2FkL3N0b3JlIHdoZW5cbiAgKiAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzaW5nIHRoZSBhcmVuYSByZWdpb24uXG4gICogLSBBUkVOQV9BQ0NFU1MgKDEgYml0KTogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIGFjY2Vzc2VkIHRoZSBhcmVuYSByZWdpb24uXG4mIzQzOyAqIC0gQVJFTkFfV1JJVEUgKDEgYml0KTogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIHdyb3RlIHRvIHRoZSBhcmVuYSByZWdpb24uXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW5kZXBlbmRlbnQgb2YgRklYVVBfUkVHLCBzaW5jZSBhIHJlYWQtbW9kaWZ5LXdyaXRlIGJvdGggd3JpdGVzIHRvXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5IGFuZCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gYSByZWdpc3Rlci5cbiAgKiAtIEZJWFVQX1JFRyAoNSBiaXRzKTogRGVzdGluYXRpb24gcmVnaXN0ZXIgZm9yIHRoZSBsb2FkIGluc3RydWN0aW9uIChjbGVhcmVkIG9uIGZhdWx0KSBvciBzZXQgdG9cbi0gKiAgICAgICAgICAgICAgICAgICAgICAgRE9OVF9DTEVBUiBpZiBpdCBpcyBhIHN0b3JlIGluc3RydWN0aW9uLlxuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgRE9OVF9DTEVBUiBpZiB0aGUgaW5zdHJ1Y3Rpb24gZG9lcyBub3QgcmVhZCBpbnRvIGEgcmVnaXN0ZXIuXG4gICovXG4gXG4gI2RlZmluZSBCUEZfRklYVVBfT0ZGU0VUX01BU0sgICAgICBHRU5NQVNLKDE1LCAwKVxuICNkZWZpbmUgQlBGX0ZJWFVQX0FSRU5BX1JFR19NQVNLICAgR0VOTUFTSygyMCwgMTYpXG4gI2RlZmluZSBCUEZfQVJFTkFfQUNDRVNTICAgICAgICAgICBCSVQoMjEpXG4mIzQzOyNkZWZpbmUgQlBGX0FSRU5BX1dSSVRFICAgICAgICAgICAgQklUKDIyKVxuICNkZWZpbmUgQlBGX0ZJWFVQX1JFR19NQVNLXHRHRU5NQVNLKDMxLCAyNylcbiAjZGVmaW5lIERPTlRfQ0xFQVIgNSAvKiBVbnVzZWQgQVJNNjQgcmVnaXN0ZXIgZnJvbSBCUEYmIzM5O3MgUE9WICovXG4gXG5AQCAtMTEwOSw3ICYjNDM7MTExMyw3IEBAIGJvb2wgZXhfaGFuZGxlcl9icGYoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXG4gXHRzMTYgb2ZmID0gRklFTERfR0VUKEJQRl9GSVhVUF9PRkZTRVRfTUFTSywgZXgtXHUwMDNlZml4dXApO1xuIFx0aW50IGFyZW5hX3JlZyA9IEZJRUxEX0dFVChCUEZfRklYVVBfQVJFTkFfUkVHX01BU0ssIGV4LVx1MDAzZWZpeHVwKTtcbiBcdGJvb2wgaXNfYXJlbmEgPSAhIShleC1cdTAwM2VmaXh1cCBcdTAwMjYgQlBGX0FSRU5BX0FDQ0VTUyk7XG4tXHRib29sIGlzX3dyaXRlID0gKGRzdF9yZWcgPT0gRE9OVF9DTEVBUik7XG4mIzQzO1x0Ym9vbCBpc193cml0ZSA9ICEhKGV4LVx1MDAzZWZpeHVwIFx1MDAyNiBCUEZfQVJFTkFfV1JJVEUpO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyO1xuIFxuIFx0aWYgKGlzX2FyZW5hKSB7XG5AQCAtMTEzMiw3ICYjNDM7MTEzNiw3IEBAIHN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiB7XG4gXHRvZmZfdCBpbnNfb2Zmc2V0O1xuIFx0czE2IG9mZiA9IGluc24tXHUwMDNlb2ZmO1xuLVx0Ym9vbCBpc19hcmVuYTtcbiYjNDM7XHRib29sIGlzX2FyZW5hLCBpc193cml0ZTtcbiBcdGludCBhcmVuYV9yZWc7XG4gXHR1bnNpZ25lZCBsb25nIHBjO1xuIFx0c3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXg7XG5AQCAtMTE4MSwxNSAmIzQzOzExODUsMTggQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0LypcbiBcdCAqIEEgbG9hZC1hY3F1aXJlIGlzIG9mIEJQRl9TVFggY2xhc3MsIGJ1dCByZWFkcyBmcm9tIHNyY19yZWcgaW50b1xuIFx0ICogZHN0X3JlZyBsaWtlIGEgQlBGX0xEWCBkb2VzLCBoZW5jZSBpdCBtdXN0IG5vdCBiZSB0cmVhdGVkIGFzIGEgc3RvcmVcbi1cdCAqIGhlcmUuXG4mIzQzO1x0ICogaGVyZS4gQSByZWFkLW1vZGlmeS13cml0ZSBjYXJyeWluZyBCUEZfRkVUQ0ggaXMgcmVwb3J0ZWQgYXMgYSB3cml0ZVxuJiM0MztcdCAqIGV2ZW4gdGhvdWdoIGl0IGRvZXMgaGF2ZSBhIHJlZ2lzdGVyIHRvIGNsZWFyLCBzZWUgdGhlIGNhbGxlcnMuXG4gXHQgKi9cbi1cdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTERYIFx1MDAyNlx1MDAyNiAhYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSlcbi1cdFx0ZHN0X3JlZyA9IERPTlRfQ0xFQVI7XG4mIzQzO1x0aXNfd3JpdGUgPSBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTERYIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIWJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbik7XG4gXG4gXHRleC1cdTAwM2VmaXh1cCA9IEZJRUxEX1BSRVAoQlBGX0ZJWFVQX1JFR19NQVNLLCBkc3RfcmVnKTtcbiBcbiBcdGlmIChpc19hcmVuYSkge1xuIFx0XHRleC1cdTAwM2VmaXh1cCB8PSBCUEZfQVJFTkFfQUNDRVNTO1xuJiM0MztcdFx0aWYgKGlzX3dyaXRlKVxuJiM0MztcdFx0XHRleC1cdTAwM2VmaXh1cCB8PSBCUEZfQVJFTkFfV1JJVEU7XG4gXHRcdC8qXG4gXHRcdCAqIGluc24tXHUwMDNlc3JjX3JlZy9kc3RfcmVnIGhvbGRzIHRoZSBhZGRyZXNzIGluIHRoZSBhcmVuYSByZWdpb24gd2l0aCB1cHBlciAzMi1iaXRzXG4gXHRcdCAqIGJlaW5nIHplcm8gYmVjYXVzZSBvZiBhIHByZWNlZGluZyBhZGRyX3NwYWNlX2Nhc3Qoclx1MDAzY25cdTAwM2UsIDB4MCwgMHgxKSBpbnN0cnVjdGlvbi5cbkBAIC0xODg5LDcgJiM0MzsxODk2LDcgQEAgc3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zblxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGRzdCk7XG4mIzQzO1x0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgY3R4LCBET05UX0NMRUFSKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRicmVhaztcbkBAIC0xOTU2LDcgJiM0MzsxOTYzLDcgQEAgc3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zblxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGRzdCk7XG4mIzQzO1x0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgY3R4LCBET05UX0NMRUFSKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRicmVhaztcbkBAIC0xOTc5LDcgJiM0MzsxOTg2LDE2IEBAIHN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc25cbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfQVRPTUlDKSB7XG4tXHRcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgZHN0KTtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQSBsb2FkLWFjcXVpcmUgcmVhZHMgaW50byBkc3RfcmVnLCBhbmQgYSByZWFkLW1vZGlmeS13cml0ZVxuJiM0MztcdFx0XHQgKiBjYXJyeWluZyBCUEZfRkVUQ0ggcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIHNyY19yZWcsIG9yIGludG9cbiYjNDM7XHRcdFx0ICogcjAgZm9yIGEgQlBGX0NNUFhDSEcuIENsZWFyIHRoYXQgcmVnaXN0ZXIgb24gZmF1bHQsIHRoZVxuJiM0MztcdFx0XHQgKiByZW1haW5pbmcgYXRvbWljcyBoYXZlIG5vIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aW50IGxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGxvYWRfcmVnIFx1MDAzYyAwID9cbiYjNDM7XHRcdFx0XHRcdFx0ICAgIERPTlRfQ0xFQVIgOiBicGYyYTY0W2xvYWRfcmVnXSk7XG4gXHRcdFx0aWYgKHJldClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuaW5kZXggNmI5OTcyYjA3YzFiMC4uMjUwNGRmMWZhMTExOCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbkBAIC0xOTkyLDEwICYjNDM7MTk5MiwxOSBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbiBcdFx0XHRyZXQgPSBlbWl0X2F0b21pY19ybXcocmQsIHJzLCBpbnNuLCBjdHgpO1xuIFxuIFx0XHQvKiByZXQgY2FuIGJlIDEgKHNraXAtemV4dCk7IGV4dGFibGUgZW50cnkgc3RpbGwgbmVlZHMgdG8gYmUgYWRkZWQgKi9cbi1cdFx0aWYgKHJldCBcdTAwM2U9IDApXG4tXHRcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sXG4tXHRcdFx0XHRicGZfYXRvbWljX2lzX2xvYWRfYWNxKGluc24pID8gcmQgOiBSRUdfRE9OVF9DTEVBUl9NQVJLRVIsXG4tXHRcdFx0XHRjdHgpID86IHJldDtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIEEgbG9hZC1hY3F1aXJlIHJlYWRzIGludG8gZHN0X3JlZywgYW5kIGEgcmVhZC1tb2RpZnktd3JpdGVcbiYjNDM7XHRcdFx0ICogY2FycnlpbmcgQlBGX0ZFVENIIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBzcmNfcmVnLCBvciBpbnRvXG4mIzQzO1x0XHRcdCAqIHIwIGZvciBhIEJQRl9DTVBYQ0hHLiBDbGVhciB0aGF0IHJlZ2lzdGVyIG9uIGZhdWx0LCB0aGVcbiYjNDM7XHRcdFx0ICogcmVtYWluaW5nIGF0b21pY3MgaGF2ZSBubyBkZXN0aW5hdGlvbiByZWdpc3Rlci5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgbG9hZF9yZWcgXHUwMDNjIDAgP1xuJiM0MztcdFx0XHRcdFx0UkVHX0RPTlRfQ0xFQVJfTUFSS0VSIDogcmVnbWFwW2xvYWRfcmVnXSxcbiYjNDM7XHRcdFx0XHRcdGN0eCkgPzogcmV0O1xuJiM0MztcdFx0fVxuIFxuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IGI2MDg3NzQ3OGI0NWQuLmM0Njg3MmIwNzFjZTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtNzc0LDYgJiM0Mzs3NzQsOCBAQCBzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX2F0b21pY19wcmUoc3RydWN0IGJwZl9qaXQgKmppdCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXG4ge1xuJiM0MztcdGludCBsb2FkX3JlZztcbiYjNDM7XG4gXHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfQVRPTUlDKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtNzgzLDYgJiM0Mzs3ODUsMTQgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsXG4gXHRFTUlUNCgweGI5MDgwMDAwLCBSRUdfVzEsIGluc24tXHUwMDNlZHN0X3JlZyk7XG4gXHRwcm9iZS1cdTAwM2VhcmVuYV9yZWcgPSBSRUdfVzE7XG4gXHRwcm9iZS1cdTAwM2VwcmcgPSBqaXQtXHUwMDNlcHJnO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSByZWFkLW1vZGlmeS13cml0ZSBjYXJyeWluZyBCUEZfRkVUQ0ggcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvXG4mIzQzO1x0ICogc3JjX3JlZywgb3IgaW50byByMCBmb3IgYSBCUEZfQ01QWENIRy4gQ2xlYXIgdGhhdCByZWdpc3RlciBvblxuJiM0MztcdCAqIGZhdWx0LCB0aGUgcmVtYWluaW5nIGF0b21pY3Mgb25seSB3cml0ZSBtZW1vcnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0bG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xuJiM0MztcdGlmIChsb2FkX3JlZyBcdTAwM2U9IDApXG4mIzQzO1x0XHRwcm9iZS1cdTAwM2VyZWcgPSByZWcyaGV4W2xvYWRfcmVnXTtcbiB9XG4gXG4gc3RhdGljIGludCBicGZfaml0X3Byb2JlX3Bvc3Qoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcbkBAIC0xNjg0LDYgJiM0MzsxNjk0LDcgQEAgc3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcbiBcdFx0XHRpZiAobG9hZF9wcm9iZS5wcmcgIT0gLTEpIHtcbiBcdFx0XHRcdHByb2JlLnByZyA9IGppdC1cdTAwM2Vwcmc7XG4gXHRcdFx0XHRwcm9iZS5hcmVuYV9yZWcgPSBsb2FkX3Byb2JlLmFyZW5hX3JlZztcbiYjNDM7XHRcdFx0XHRwcm9iZS5yZWcgPSBsb2FkX3Byb2JlLnJlZztcbiBcdFx0XHR9XG4gXHRcdFx0bG9vcF9zdGFydCA9IGppdC1cdTAwM2Vwcmc7XG4gXHRcdFx0LyogMDoge2NzeXxjc2d9ICV3MCwlc3JjLG9mZiglYXJlbmEpICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCA4ZGRkYjVkN2FmMjFiLi5kOTIwNzcyYWY3ZDVmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0xNDczLDE3ICYjNDM7MTQ3MywyMCBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX2xkX3N0X2luZGV4KHU4ICoqcHByb2csIHUzMiBhdG9taWNfb3AsIHUzMiBzaXplLFxuICAqXG4gICogQml0IGxheW91dCBvZiBgZml4dXBgICgzMi1iaXQpOlxuICAqXG4tICogJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzO1xuLSAqIHwgMzEgICAgICAgIHwgMzAtMjQgIHwgICAyMy0xNiAgIHwgICAxNS04ICB8ICAgIDctMCAgIHxcbi0gKiB8ICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICB8XG4tICogfCBBUkVOQV9BQ0MgfCBVbnVzZWQgfCBBUkVOQV9SRUcgfCBEU1RfUkVHIHwgSU5TTl9MRU4gfFxuLSAqICYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MztcbiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzO1xuJiM0MzsgKiB8IDMxICAgICAgICB8IDMwICAgICAgICAgIHwgMjktMjQgIHwgICAyMy0xNiAgIHwgICAxNS04ICB8ICAgIDctMCAgIHxcbiYjNDM7ICogfCAgICAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICB8XG4mIzQzOyAqIHwgQVJFTkFfQUNDIHwgQVJFTkFfV1JJVEUgfCBVbnVzZWQgfCBBUkVOQV9SRUcgfCBEU1RfUkVHIHwgSU5TTl9MRU4gfFxuJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7XG4gICpcbiAgKiAtIElOU05fTEVOICg4IGJpdHMpOiBMZW5ndGggb2YgZmF1bHRpbmcgaW5zbiAobWF4IHg4NiBpbnNuID0gMTUgYnl0ZXMgKGZpdHMgaW4gOCBiaXRzKSkuXG4gICogLSBEU1RfUkVHICAoOCBiaXRzKTogT2Zmc2V0IG9mIGRzdF9yZWcgZnJvbSByZWcycHRfcmVnc1tdIChtYXggb2Zmc2V0ID0gMTEyIChmaXRzIGluIDggYml0cykpLlxuLSAqICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgc2V0IHRvIERPTlRfQ0xFQVIgaWYgdGhlIGluc24gaXMgYSBzdG9yZS5cbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBzZXQgdG8gRE9OVF9DTEVBUiBpZiB0aGUgaW5zbiBkb2VzIG5vdCByZWFkIGludG8gYSByZWdpc3Rlci5cbiAgKiAtIEFSRU5BX1JFRyAoOCBiaXRzKTogT2Zmc2V0IG9mIHRoZSByZWdpc3RlciB0aGF0IGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZVxuICAqICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzIGZvciBsb2FkL3N0b3JlIHdoZW4gYWNjZXNzaW5nIHRoZSBhcmVuYSByZWdpb24uXG4mIzQzOyAqIC0gQVJFTkFfV1JJVEUgKDEgYml0KTogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIHdyb3RlIHRvIHRoZSBhcmVuYSByZWdpb24uXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW5kZXBlbmRlbnQgb2YgRFNUX1JFRywgc2luY2UgYSByZWFkLW1vZGlmeS13cml0ZSBib3RoIHdyaXRlcyB0b1xuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSBhbmQgcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIGEgcmVnaXN0ZXIuXG4gICogLSBBUkVOQV9BQ0NFU1MgKDEgYml0KTogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIGFjY2Vzc2VkIHRoZSBhcmVuYSByZWdpb24uXG4gICpcbiAgKiBCaXQgbGF5b3V0IG9mIGBkYXRhYCAoMzItYml0KTpcbkBAIC0xNTAyLDYgJiM0MzsxNTA1LDcgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19sZF9zdF9pbmRleCh1OCAqKnBwcm9nLCB1MzIgYXRvbWljX29wLCB1MzIgc2l6ZSxcbiAjZGVmaW5lIEZJWFVQX0lOU05fTEVOX01BU0tcdEdFTk1BU0soNywgMClcbiAjZGVmaW5lIEZJWFVQX1JFR19NQVNLXHRcdEdFTk1BU0soMTUsIDgpXG4gI2RlZmluZSBGSVhVUF9BUkVOQV9SRUdfTUFTS1x0R0VOTUFTSygyMywgMTYpXG4mIzQzOyNkZWZpbmUgRklYVVBfQVJFTkFfV1JJVEVcdEJJVCgzMClcbiAjZGVmaW5lIEZJWFVQX0FSRU5BX0FDQ0VTU1x0QklUKDMxKVxuICNkZWZpbmUgREFUQV9BUkVOQV9PRkZTRVRfTUFTS1x0R0VOTUFTSygzMSwgMTYpXG4gXG5AQCAtMTUxMCw3ICYjNDM7MTUxNCw3IEBAIGJvb2wgZXhfaGFuZGxlcl9icGYoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqeCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHR1MzIgcmVnID0gRklFTERfR0VUKEZJWFVQX1JFR19NQVNLLCB4LVx1MDAzZWZpeHVwKTtcbiBcdHUzMiBpbnNuX2xlbiA9IEZJRUxEX0dFVChGSVhVUF9JTlNOX0xFTl9NQVNLLCB4LVx1MDAzZWZpeHVwKTtcbiBcdGJvb2wgaXNfYXJlbmEgPSAhISh4LVx1MDAzZWZpeHVwIFx1MDAyNiBGSVhVUF9BUkVOQV9BQ0NFU1MpO1xuLVx0Ym9vbCBpc193cml0ZSA9IChyZWcgPT0gRE9OVF9DTEVBUik7XG4mIzQzO1x0Ym9vbCBpc193cml0ZSA9ICEhKHgtXHUwMDNlZml4dXAgXHUwMDI2IEZJWFVQX0FSRU5BX1dSSVRFKTtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbiBcdHMxNiBvZmY7XG4gXHR1MzIgYXJlbmFfcmVnO1xuQEAgLTIzNDgsNiAmIzQzOzIzNTIsNyBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdFx0c3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXg7XG4gXHRcdFx0XHR1OCAqX2luc24gPSBpbWFnZSAmIzQzOyBwcm9nbGVuICYjNDM7IChzdGFydF9vZl9sZHggLSB0ZW1wKTtcbiBcdFx0XHRcdHUzMiBhcmVuYV9yZWcsIGZpeHVwX3JlZztcbiYjNDM7XHRcdFx0XHRib29sIGlzX3dyaXRlO1xuIFx0XHRcdFx0czY0IGRlbHRhO1xuIFxuIFx0XHRcdFx0aWYgKCFicGZfcHJvZy1cdTAwM2VhdXgtXHUwMDNlZXh0YWJsZSlcbkBAIC0yMzg0LDE1ICYjNDM7MjM4OSwyOSBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdFx0ICAgIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikpIHtcbiBcdFx0XHRcdFx0YXJlbmFfcmVnID0gcmVnMnB0X3JlZ3Nbc3JjX3JlZ107XG4gXHRcdFx0XHRcdGZpeHVwX3JlZyA9IHJlZzJwdF9yZWdzW2RzdF9yZWddO1xuJiM0MztcdFx0XHRcdFx0aXNfd3JpdGUgPSBmYWxzZTtcbiBcdFx0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0XHQvKlxuJiM0MztcdFx0XHRcdFx0ICogQSBzdG9yZSBoYXMgbm8gZGVzdGluYXRpb24gcmVnaXN0ZXIgdG8gY2xlYXIsXG4mIzQzO1x0XHRcdFx0XHQgKiBleGNlcHQgZm9yIGEgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCBCUEZfRkVUQ0gsXG4mIzQzO1x0XHRcdFx0XHQgKiB3aGljaCBhbHNvIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBzcmNfcmVnLCBvclxuJiM0MztcdFx0XHRcdFx0ICogaW50byByMCBmb3IgYSBCUEZfQ01QWENIRy4gRWl0aGVyIHdheSB0aGUgYWNjZXNzXG4mIzQzO1x0XHRcdFx0XHQgKiBpcyBzdGlsbCByZXBvcnRlZCBhcyBhIHdyaXRlLlxuJiM0MztcdFx0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0XHRpbnQgbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xuJiM0MztcbiBcdFx0XHRcdFx0YXJlbmFfcmVnID0gcmVnMnB0X3JlZ3NbZHN0X3JlZ107XG4tXHRcdFx0XHRcdGZpeHVwX3JlZyA9IERPTlRfQ0xFQVI7XG4mIzQzO1x0XHRcdFx0XHRmaXh1cF9yZWcgPSBsb2FkX3JlZyBcdTAwM2MgMCA/IERPTlRfQ0xFQVIgOlxuJiM0MztcdFx0XHRcdFx0XHQgICAgcmVnMnB0X3JlZ3NbbG9hZF9yZWddO1xuJiM0MztcdFx0XHRcdFx0aXNfd3JpdGUgPSB0cnVlO1xuIFx0XHRcdFx0fVxuIFxuIFx0XHRcdFx0ZXgtXHUwMDNlZml4dXAgPSBGSUVMRF9QUkVQKEZJWFVQX0lOU05fTEVOX01BU0ssIHByb2cgLSBzdGFydF9vZl9sZHgpIHxcbiBcdFx0XHRcdFx0ICAgIEZJRUxEX1BSRVAoRklYVVBfQVJFTkFfUkVHX01BU0ssIGFyZW5hX3JlZykgfFxuIFx0XHRcdFx0XHQgICAgRklFTERfUFJFUChGSVhVUF9SRUdfTUFTSywgZml4dXBfcmVnKTtcbiBcdFx0XHRcdGV4LVx1MDAzZWZpeHVwIHw9IEZJWFVQX0FSRU5BX0FDQ0VTUztcbiYjNDM7XHRcdFx0XHRpZiAoaXNfd3JpdGUpXG4mIzQzO1x0XHRcdFx0XHRleC1cdTAwM2VmaXh1cCB8PSBGSVhVUF9BUkVOQV9XUklURTtcbiBcbiBcdFx0XHRcdGV4LVx1MDAzZWRhdGEgfD0gRklFTERfUFJFUChEQVRBX0FSRU5BX09GRlNFVF9NQVNLLCBpbnNuLVx1MDAzZW9mZik7XG4gXHRcdFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5pbmRleCA0ZWRiYTgxODJkYjFiLi4xNWQ4MzY4NGM2ZTk0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuQEAgLTQxNCw2ICYjNDM7NDE0LDMwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfYXRvbWljX2lzX2xvYWRfYWNxKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdCAgICAgICBpbnNuLVx1MDAzZWltbSA9PSBCUEZfTE9BRF9BQ1E7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBHaXZlbiBhbiBpbnN0cnVjdGlvbiBAaW5zbiwgcmV0dXJuIHRoZSBudW1iZXIgb2YgdGhlIEJQRiByZWdpc3RlciB0aGF0IGFcbiYjNDM7ICogQlBGX0FUT01JQyByZWFkcyB0aGUgdmFsdWUgYXQgaXRzIG1lbW9yeSBvcGVyYW5kIGludG8sIG9yIC0xIGlmIHRoZXJlIGlzXG4mIzQzOyAqIG5vIHN1Y2ggcmVnaXN0ZXIuIFRoYXQgaXMgdGhlIHJlZ2lzdGVyIGEgQlBGX1BST0JFX0FUT01JQyBoYXMgdG8gY2xlYXIgd2hlblxuJiM0MzsgKiB0aGUgYWNjZXNzIGZhdWx0cy4gTGlrZSBicGZfYXRvbWljX2lzX2xvYWRfYWNxKCksIEBpbnNuIGlzIG5vdCBhc3N1bWVkIHRvXG4mIzQzOyAqIGJlIGEgQlBGX0FUT01JQyBoZXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBpbnQgYnBmX2F0b21pY19sb2FkX3JlZyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4mIzQzO3tcbiYjNDM7XHRpZiAoQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1NUWCB8fFxuJiM0MztcdCAgICAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfQVRPTUlDIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfQVRPTUlDKSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChpbnNuLVx1MDAzZWltbSkge1xuJiM0MztcdGNhc2UgQlBGX0xPQURfQUNROlxuJiM0MztcdFx0cmV0dXJuIGluc24tXHUwMDNlZHN0X3JlZztcbiYjNDM7XHRjYXNlIEJQRl9DTVBYQ0hHOlxuJiM0MztcdFx0cmV0dXJuIEJQRl9SRUdfMDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIChpbnNuLVx1MDAzZWltbSBcdTAwMjYgQlBGX0ZFVENIKSA/IGluc24tXHUwMDNlc3JjX3JlZyA6IC0xO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKiBNZW1vcnkgc3RvcmUsICoodWludCAqKSAoZHN0X3JlZyAmIzQzOyBvZmYxNikgPSBpbW0zMiAqL1xuIFxuICNkZWZpbmUgQlBGX1NUX01FTShTSVpFLCBEU1QsIE9GRiwgSU1NKVx0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2ZpeHVwcy5jIGIva2VybmVsL2JwZi9maXh1cHMuY1xuaW5kZXggNjYxZTJkMTNhNjA0Mi4uYzRiZDcwYmVmYmI1YyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZml4dXBzLmNcbkBAIC00OSwxNiAmIzQzOzQ5LDcgQEAgc3RhdGljIGludCBpbnNuX2RlZl9yZWdubyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHRjYXNlIEJQRl9TVDpcbiBcdFx0cmV0dXJuIC0xO1xuIFx0Y2FzZSBCUEZfU1RYOlxuLVx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDIHx8XG4tXHRcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9BVE9NSUMpIHtcbi1cdFx0XHRpZiAoaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0NNUFhDSEcpXG4tXHRcdFx0XHRyZXR1cm4gQlBGX1JFR18wO1xuLVx0XHRcdGVsc2UgaWYgKGluc24tXHUwMDNlaW1tID09IEJQRl9MT0FEX0FDUSlcbi1cdFx0XHRcdHJldHVybiBpbnNuLVx1MDAzZWRzdF9yZWc7XG4tXHRcdFx0ZWxzZSBpZiAoaW5zbi1cdTAwM2VpbW0gXHUwMDI2IEJQRl9GRVRDSClcbi1cdFx0XHRcdHJldHVybiBpbnNuLVx1MDAzZXNyY19yZWc7XG4tXHRcdH1cbi1cdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0cmV0dXJuIGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gaW5zbi1cdTAwM2Vkc3RfcmVnO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggYWRkM2FmZmM1NzAzNS4uNzNhMmU4YmIxNzgyYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNjQ4NSwyMSAmIzQzOzY0ODUsMTYgQEAgc3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0fVxuIFxuLVx0aWYgKGluc24tXHUwMDNlaW1tIFx1MDAyNiBCUEZfRkVUQ0gpIHtcbi1cdFx0aWYgKGluc24tXHUwMDNlaW1tID09IEJQRl9DTVBYQ0hHKVxuLVx0XHRcdGxvYWRfcmVnID0gQlBGX1JFR18wO1xuLVx0XHRlbHNlXG4tXHRcdFx0bG9hZF9yZWcgPSBpbnNuLVx1MDAzZXNyY19yZWc7XG4tXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIG5lZ2F0aXZlIGxvYWRfcmVnIG1lYW5zIHRoYXQgdGhpcyBpbnN0cnVjdGlvbiBhY2Nlc3NlcyBhIG1lbW9yeVxuJiM0MztcdCAqIGxvY2F0aW9uIGJ1dCBkb2VzbiYjMzk7dCBhY3R1YWxseSBsb2FkIGl0IGludG8gYSByZWdpc3Rlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG4mIzQzO1x0aWYgKGxvYWRfcmVnIFx1MDAzZT0gMCkge1xuIFx0XHQvKiBjaGVjayBhbmQgcmVjb3JkIGxvYWQgb2Ygb2xkIHZhbHVlICovXG4gXHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBsb2FkX3JlZywgRFNUX09QKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuLVx0fSBlbHNlIHtcbi1cdFx0LyogVGhpcyBpbnN0cnVjdGlvbiBhY2Nlc3NlcyBhIG1lbW9yeSBsb2NhdGlvbiBidXQgZG9lc24mIzM5O3Rcbi1cdFx0ICogYWN0dWFsbHkgbG9hZCBpdCBpbnRvIGEgcmVnaXN0ZXIuXG4tXHRcdCAqL1xuLVx0XHRsb2FkX3JlZyA9IC0xO1xuIFx0fVxuIFxuIFx0ZHN0X3JlZyA9IGN1cl9yZWdzKGVudikgJiM0MzsgaW5zbi1cdTAwM2Vkc3RfcmVnO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbmluZGV4IDE1ZGQzYWUyYTg0YjcuLmU0ZTkzNzQzMDllMjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbkBAIC0xMDUsNiAmIzQzOzEwNSwxMCBAQCB2b2lkIHRlc3Rfc3RyZWFtX2FyZW5hX2ZhdWx0X2FkZHJlc3Modm9pZClcbiBcdFx0dGVzdF9hZGRyZXNzKHNrZWwtXHUwMDNlcHJvZ3Muc3RyZWFtX2FyZW5hX3dyaXRlX2ZhdWx0LCBcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2VmYXVsdF9hZGRyKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2xvYWRfYWNxdWlyZV9mYXVsdFwmIzM0OykpXG4gXHRcdHRlc3RfYWRkcmVzcyhza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV9sb2FkX2FjcXVpcmVfZmF1bHQsIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWZhdWx0X2FkZHIpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3hjaGdfZmF1bHRcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9hZGRyZXNzKHNrZWwtXHUwMDNlcHJvZ3Muc3RyZWFtX2FyZW5hX3hjaGdfZmF1bHQsIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWZhdWx0X2FkZHIpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2NtcHhjaGdfZmF1bHRcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9hZGRyZXNzKHNrZWwtXHUwMDNlcHJvZ3Muc3RyZWFtX2FyZW5hX2NtcHhjaGdfZmF1bHQsIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWZhdWx0X2FkZHIpO1xuIFxuIFx0c3RyZWFtX19kZXN0cm95KHNrZWwpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbmluZGV4IGNmNTUzM2UxMWYzOWMuLjAwYTM3OTMzZTQxMWQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xuQEAgLTIyOSw2ICYjNDM7MjI5LDEwNyBAQCBpbnQgc3RyZWFtX2FyZW5hX2xvYWRfYWNxdWlyZV9mYXVsdCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gdmFsO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjRcbiYjNDM7X19hcmNoX2FybTY0XG4mIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKVxuJiM0MztfX3N0ZGVycihcJiMzNDtFUlJPUjogQXJlbmEgV1JJVEUgYWNjZXNzIGF0IHVubWFwcGVkIGFkZHJlc3MgMHh7ey4qfX1cJiMzNDspXG4mIzQzO19fc3RkZXJyKFwmIzM0O0NQVToge3tbMC05XSYjNDM7fX0gVUlEOiAwIFBJRDoge3tbMC05XSYjNDM7fX0gQ29tbToge3suKn19XCYjMzQ7KVxuJiM0MztfX3N0ZGVycihcJiMzNDtDYWxsIHRyYWNlOlxcblwmIzM0O1xuJiM0MztcJiMzNDt7eyhbYS16QS1aX11bYS16QS1aMC05X10qXFxcXCYjNDM7MHhbMC05YS1mQS1GXSYjNDM7LzB4WzAtOWEtZkEtRl0mIzQzO1xcblwmIzM0O1xuJiM0MztcJiMzNDt8WyBcXHRdJiM0MztbXlxcbl0mIzQzO1xcbikqfX1cJiMzNDspXG4mIzQzO2ludCBzdHJlYW1fYXJlbmFfeGNoZ19mYXVsdCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pbnNuIHhjaGdfaW5zbiA9IHtcbiYjNDM7XHRcdC5jb2RlXHQgPSAweGMzLFx0LyogQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVyAqL1xuJiM0MztcdFx0LmRzdF9yZWcgPSAxLFx0XHQvKiBCUEZfUkVHXzEgKi9cbiYjNDM7XHRcdC5zcmNfcmVnID0gMixcdFx0LyogQlBGX1JFR18yICovXG4mIzQzO1x0XHQub2ZmXHQgPSAweDdmZmYsXG4mIzQzO1x0XHQuaW1tXHQgPSAweGUxLFx0LyogQlBGX1hDSEcgKi9cbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBicGZfYXJlbmEgKnB0ciA9ICh2b2lkICopXHUwMDI2YXJlbmE7XG4mIzQzO1x0dTY0IHVzZXJfdm1fc3RhcnQsIHZhbDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcmV2ZW50IEdDQyBib3VuZHMgd2FybmluZzogY2FzdGluZyBcdTAwMjZhcmVuYSB0byBzdHJ1Y3QgYnBmX2FyZW5hICpcbiYjNDM7XHQgKiB0cmlnZ2VycyBib3VuZHMgY2hlY2tpbmcgc2luY2UgdGhlIG1hcCBkZWZpbml0aW9uIGlzIHNtYWxsZXIgdGhhblxuJiM0MztcdCAqIHN0cnVjdCBicGZfYXJlbmEuIGJhcnJpZXJfdmFyKCkgbWFrZXMgdGhlIHBvaW50ZXIgb3BhcXVlIHRvIEdDQyxcbiYjNDM7XHQgKiBwcmV2ZW50aW5nIHRoZSBib3VuZHMgYW5hbHlzaXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0YmFycmllcl92YXIocHRyKTtcbiYjNDM7XHR1c2VyX3ZtX3N0YXJ0ID0gcHRyLVx1MDAzZXVzZXJfdm1fc3RhcnQ7XG4mIzQzO1x0ZmF1bHRfYWRkciA9IHVzZXJfdm1fc3RhcnQgJiM0MzsgMHg3ZmZmO1xuJiM0MztcdGJwZl9hZGRyX3NwYWNlX2Nhc3QodXNlcl92bV9zdGFydCwgMCwgMSk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIHJlYWQtbW9kaWZ5LXdyaXRlIGNhcnJ5aW5nIEJQRl9GRVRDSCB3cml0ZXMgdG8gbWVtb3J5LCBzbyB0aGUgZmF1bHRcbiYjNDM7XHQgKiBoYXMgdG8gYmUgcmVwb3J0ZWQgYXMgYSBXUklURSBmcm9tIHRoZSBkc3RfcmVnIGFkZHJlc3MsIGJ1dCBpdCBhbHNvXG4mIzQzO1x0ICogcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIHNyY19yZWcsIHNvIHRoZSBleGNlcHRpb24gaGFuZGxlciBoYXMgdG9cbiYjNDM7XHQgKiBjbGVhciBzcmNfcmVnLiBQb2lzb24gaXQgdXAgZnJvbnQsIHRoZSByZXR1cm5lZCB2YWx1ZSBtdXN0IGJlIDAuXG4mIzQzO1x0ICovXG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcbiYjNDM7XHRcdFwmIzM0O3IxID0gJVt1c2VyX3ZtX3N0YXJ0XTtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IyID0gMTtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0Oy44Ynl0ZSAlW3hjaGdfaW5zbl07XCYjMzQ7IC8qIHIyID0geGNoZygodTMyICopKHIxICYjNDM7IDB4N2ZmZiksIHIyKSAqL1xuJiM0MztcdFx0XCYjMzQ7JVt2YWxdID0gcjI7XCYjMzQ7XG4mIzQzO1x0XHQ6IFt2YWxdIFwmIzM0Oz1yXCYjMzQ7ICh2YWwpXG4mIzQzO1x0XHQ6IFt1c2VyX3ZtX3N0YXJ0XSBcJiMzNDtyXCYjMzQ7ICh1c2VyX3ZtX3N0YXJ0KSxcbiYjNDM7XHRcdCAgX19pbW1faW5zbih4Y2hnX2luc24sIHhjaGdfaW5zbilcbiYjNDM7XHRcdDogXCYjMzQ7cjFcJiMzNDssIFwmIzM0O3IyXCYjMzQ7XG4mIzQzO1x0KTtcbiYjNDM7XHRyZXR1cm4gdmFsO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX2FyY2hfYXJtNjRcbiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApXG4mIzQzO19fc3RkZXJyKFwmIzM0O0VSUk9SOiBBcmVuYSBXUklURSBhY2Nlc3MgYXQgdW5tYXBwZWQgYWRkcmVzcyAweHt7Lip9fVwmIzM0OylcbiYjNDM7X19zdGRlcnIoXCYjMzQ7Q1BVOiB7e1swLTldJiM0Mzt9fSBVSUQ6IDAgUElEOiB7e1swLTldJiM0Mzt9fSBDb21tOiB7ey4qfX1cJiMzNDspXG4mIzQzO19fc3RkZXJyKFwmIzM0O0NhbGwgdHJhY2U6XFxuXCYjMzQ7XG4mIzQzO1wmIzM0O3t7KFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcJiM0MzsweFswLTlhLWZBLUZdJiM0MzsvMHhbMC05YS1mQS1GXSYjNDM7XFxuXCYjMzQ7XG4mIzQzO1wmIzM0O3xbIFxcdF0mIzQzO1teXFxuXSYjNDM7XFxuKSp9fVwmIzM0OylcbiYjNDM7aW50IHN0cmVhbV9hcmVuYV9jbXB4Y2hnX2ZhdWx0KHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24gY21weGNoZ19pbnNuID0ge1xuJiM0MztcdFx0LmNvZGVcdCA9IDB4YzMsXHQvKiBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9XICovXG4mIzQzO1x0XHQuZHN0X3JlZyA9IDEsXHRcdC8qIEJQRl9SRUdfMSAqL1xuJiM0MztcdFx0LnNyY19yZWcgPSAyLFx0XHQvKiBCUEZfUkVHXzIgKi9cbiYjNDM7XHRcdC5vZmZcdCA9IDB4N2ZmZixcbiYjNDM7XHRcdC5pbW1cdCA9IDB4ZjEsXHQvKiBCUEZfQ01QWENIRyAqL1xuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGJwZl9hcmVuYSAqcHRyID0gKHZvaWQgKilcdTAwMjZhcmVuYTtcbiYjNDM7XHR1NjQgdXNlcl92bV9zdGFydCwgdmFsO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFByZXZlbnQgR0NDIGJvdW5kcyB3YXJuaW5nOiBjYXN0aW5nIFx1MDAyNmFyZW5hIHRvIHN0cnVjdCBicGZfYXJlbmEgKlxuJiM0MztcdCAqIHRyaWdnZXJzIGJvdW5kcyBjaGVja2luZyBzaW5jZSB0aGUgbWFwIGRlZmluaXRpb24gaXMgc21hbGxlciB0aGFuXG4mIzQzO1x0ICogc3RydWN0IGJwZl9hcmVuYS4gYmFycmllcl92YXIoKSBtYWtlcyB0aGUgcG9pbnRlciBvcGFxdWUgdG8gR0NDLFxuJiM0MztcdCAqIHByZXZlbnRpbmcgdGhlIGJvdW5kcyBhbmFseXNpcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRiYXJyaWVyX3ZhcihwdHIpO1xuJiM0MztcdHVzZXJfdm1fc3RhcnQgPSBwdHItXHUwMDNldXNlcl92bV9zdGFydDtcbiYjNDM7XHRmYXVsdF9hZGRyID0gdXNlcl92bV9zdGFydCAmIzQzOyAweDdmZmY7XG4mIzQzO1x0YnBmX2FkZHJfc3BhY2VfY2FzdCh1c2VyX3ZtX3N0YXJ0LCAwLCAxKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNhbWUgYXMgdGhlIGV4Y2hhbmdlIGFib3ZlLCBleGNlcHQgdGhhdCBhIEJQRl9DTVBYQ0hHIHJlYWRzIHRoZSBvbGRcbiYjNDM7XHQgKiB2YWx1ZSBpbnRvIHIwIHJhdGhlciB0aGFuIGludG8gc3JjX3JlZywgc28gcjAgaXMgdGhlIHJlZ2lzdGVyIHRoZVxuJiM0MztcdCAqIGV4Y2VwdGlvbiBoYW5kbGVyIGhhcyB0byBjbGVhci4gSXQgZG91YmxlcyBhcyB0aGUgY29tcGFyZSB2YWx1ZSwgYnV0XG4mIzQzO1x0ICogdGhlIGNvbXBhcmlzb24gbmV2ZXIgaGFwcGVucyBzaW5jZSB0aGUgYWNjZXNzIGZhdWx0cyBmaXJzdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRhc20gdm9sYXRpbGUgKFxuJiM0MztcdFx0XCYjMzQ7cjEgPSAlW3VzZXJfdm1fc3RhcnRdO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjAgPSAxO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjIgPSAyO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7LjhieXRlICVbY21weGNoZ19pbnNuXTtcJiMzNDsgLyogcjAgPSBjbXB4Y2hnKCh1MzIgKikocjEgJiM0MzsgMHg3ZmZmKSwgcjAsIHIyKSAqL1xuJiM0MztcdFx0XCYjMzQ7JVt2YWxdID0gcjA7XCYjMzQ7XG4mIzQzO1x0XHQ6IFt2YWxdIFwmIzM0Oz1yXCYjMzQ7ICh2YWwpXG4mIzQzO1x0XHQ6IFt1c2VyX3ZtX3N0YXJ0XSBcJiMzNDtyXCYjMzQ7ICh1c2VyX3ZtX3N0YXJ0KSxcbiYjNDM7XHRcdCAgX19pbW1faW5zbihjbXB4Y2hnX2luc24sIGNtcHhjaGdfaW5zbilcbiYjNDM7XHRcdDogXCYjMzQ7cjBcJiMzNDssIFwmIzM0O3IxXCYjMzQ7LCBcJiMzNDtyMlwmIzM0O1xuJiM0MztcdCk7XG4mIzQzO1x0cmV0dXJuIHZhbDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgX19ub2lubGluZSB2b2lkIHN1YnByb2codm9pZClcbiB7XG4gXHRpbnQgX19hcmVuYSAqYWRkciA9IChpbnQgX19hcmVuYSAqKTB4ZGVhZGJlZWY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW5zbl9kZWYzMiYjMzQ7LAogICAgJiMzNDtleF9oYW5kbGVyX2JwZiYjMzQ7LAogICAgJiMzNDticGZfaml0X2VtaXRfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlcnMgKHg4NiwgYXJtNjQsIHJpc2N2LCBzMzkwKSBhbmQgdGhlIEJQRiB2ZXJpZmllciB0byBjb3JyZWN0bHkgaGFuZGxlIGV4Y2VwdGlvbnMgZm9yIGF0b21pYyBvcGVyYXRpb25zIGluIHRoZSBCUEYgYXJlbmEuIEl0IGludHJvZHVjZXMgYGJwZl9hdG9taWNfbG9hZF9yZWdgIHRvIGlkZW50aWZ5IHRoZSByZWdpc3RlciB0aGF0IG5lZWRzIHRvIGJlIGNsZWFyZWQgd2hlbiBhbiBhdG9taWMgaW5zdHJ1Y3Rpb24gZmF1bHRzLCBhbmQgZW5zdXJlcyB0aGF0IHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbnMgYXJlIGNvcnJlY3RseSByZXBvcnRlZCBhcyB3cml0ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc3Vic3lzdGVtKSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY0YWE3NTIxZjg1ODAzZmQzYTFiYWUxNDUxOWRhMGFiZGMxZGYwMWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAwMDozNDoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMKaW5kZXggZDE0ZDI5N2ViYjk2Ny4uNzRiNDA4Mzc5MWRhMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTEwODIsMjMgJiM0MzsxMDgyLDI3IEBAIHN0YXRpYyB2b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgd2FzX2NsYXNzaWMpCiAgKgogICogQml0IGxheW91dCBvZiBgZml4dXBgICgzMi1iaXQpOgogICoKLSAqICYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOwotICogfCAgIDMxLTI3ICAgfCAyNi0yMiAgfCAgICAgMjEgICAgfCAgIDIwLTE2ICAgfCAgIDE1LTAgICB8Ci0gKiB8ICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwKLSAqIHwgRklYVVBfUkVHIHwgVW51c2VkIHwgQVJFTkFfQUNDIHwgQVJFTkFfUkVHIHwgIE9GRlNFVCAgfAotICogJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7CiYjNDM7ICogfCAgIDMxLTI3ICAgfCAyNi0yMyAgfCAgICAgIDIyICAgICB8ICAgICAyMSAgICB8ICAgMjAtMTYgICB8ICAgMTUtMCAgIHwKJiM0MzsgKiB8ICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfAomIzQzOyAqIHwgRklYVVBfUkVHIHwgVW51c2VkIHwgQVJFTkFfV1JJVEUgfCBBUkVOQV9BQ0MgfCBBUkVOQV9SRUcgfCAgT0ZGU0VUICB8CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7CiAgKgogICogLSBPRkZTRVQgKDE2IGJpdHMpOiBPZmZzZXQgdXNlZCB0byBjb21wdXRlIGFkZHJlc3MgZm9yIExvYWQvU3RvcmUgaW5zdHJ1Y3Rpb24uCiAgKiAtIEFSRU5BX1JFRyAoNSBiaXRzKTogUmVnaXN0ZXIgdGhhdCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgYWRkcmVzcyBmb3IgbG9hZC9zdG9yZSB3aGVuCiAgKiAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzaW5nIHRoZSBhcmVuYSByZWdpb24uCiAgKiAtIEFSRU5BX0FDQ0VTUyAoMSBiaXQpOiBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24gYWNjZXNzZWQgdGhlIGFyZW5hIHJlZ2lvbi4KJiM0MzsgKiAtIEFSRU5BX1dSSVRFICgxIGJpdCk6IFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiB3cm90ZSB0byB0aGUgYXJlbmEgcmVnaW9uLgomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW5kZXBlbmRlbnQgb2YgRklYVVBfUkVHLCBzaW5jZSBhIHJlYWQtbW9kaWZ5LXdyaXRlIGJvdGggd3JpdGVzIHRvCiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgYW5kIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBhIHJlZ2lzdGVyLgogICogLSBGSVhVUF9SRUcgKDUgYml0cyk6IERlc3RpbmF0aW9uIHJlZ2lzdGVyIGZvciB0aGUgbG9hZCBpbnN0cnVjdGlvbiAoY2xlYXJlZCBvbiBmYXVsdCkgb3Igc2V0IHRvCi0gKiAgICAgICAgICAgICAgICAgICAgICAgRE9OVF9DTEVBUiBpZiBpdCBpcyBhIHN0b3JlIGluc3RydWN0aW9uLgomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICBET05UX0NMRUFSIGlmIHRoZSBpbnN0cnVjdGlvbiBkb2VzIG5vdCByZWFkIGludG8gYSByZWdpc3Rlci4KICAqLwogCiAjZGVmaW5lIEJQRl9GSVhVUF9PRkZTRVRfTUFTSyAgICAgIEdFTk1BU0soMTUsIDApCiAjZGVmaW5lIEJQRl9GSVhVUF9BUkVOQV9SRUdfTUFTSyAgIEdFTk1BU0soMjAsIDE2KQogI2RlZmluZSBCUEZfQVJFTkFfQUNDRVNTICAgICAgICAgICBCSVQoMjEpCiYjNDM7I2RlZmluZSBCUEZfQVJFTkFfV1JJVEUgICAgICAgICAgICBCSVQoMjIpCiAjZGVmaW5lIEJQRl9GSVhVUF9SRUdfTUFTSwlHRU5NQVNLKDMxLCAyNykKICNkZWZpbmUgRE9OVF9DTEVBUiA1IC8qIFVudXNlZCBBUk02NCByZWdpc3RlciBmcm9tIEJQRiYjMzk7cyBQT1YgKi8KIApAQCAtMTEwOSw3ICYjNDM7MTExMyw3IEBAIGJvb2wgZXhfaGFuZGxlcl9icGYoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsCiAJczE2IG9mZiA9IEZJRUxEX0dFVChCUEZfRklYVVBfT0ZGU0VUX01BU0ssIGV4LSZndDtmaXh1cCk7CiAJaW50IGFyZW5hX3JlZyA9IEZJRUxEX0dFVChCUEZfRklYVVBfQVJFTkFfUkVHX01BU0ssIGV4LSZndDtmaXh1cCk7CiAJYm9vbCBpc19hcmVuYSA9ICEhKGV4LSZndDtmaXh1cCAmYW1wOyBCUEZfQVJFTkFfQUNDRVNTKTsKLQlib29sIGlzX3dyaXRlID0gKGRzdF9yZWcgPT0gRE9OVF9DTEVBUik7CiYjNDM7CWJvb2wgaXNfd3JpdGUgPSAhIShleC0mZ3Q7Zml4dXAgJmFtcDsgQlBGX0FSRU5BX1dSSVRFKTsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAKIAlpZiAoaXNfYXJlbmEpIHsKQEAgLTExMzIsNyAmIzQzOzExMzYsNyBAQCBzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiB7CiAJb2ZmX3QgaW5zX29mZnNldDsKIAlzMTYgb2ZmID0gaW5zbi0mZ3Q7b2ZmOwotCWJvb2wgaXNfYXJlbmE7CiYjNDM7CWJvb2wgaXNfYXJlbmEsIGlzX3dyaXRlOwogCWludCBhcmVuYV9yZWc7CiAJdW5zaWduZWQgbG9uZyBwYzsKIAlzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleDsKQEAgLTExODEsMTUgJiM0MzsxMTg1LDE4IEBAIHN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwKIAkvKgogCSAqIEEgbG9hZC1hY3F1aXJlIGlzIG9mIEJQRl9TVFggY2xhc3MsIGJ1dCByZWFkcyBmcm9tIHNyY19yZWcgaW50bwogCSAqIGRzdF9yZWcgbGlrZSBhIEJQRl9MRFggZG9lcywgaGVuY2UgaXQgbXVzdCBub3QgYmUgdHJlYXRlZCBhcyBhIHN0b3JlCi0JICogaGVyZS4KJiM0MzsJICogaGVyZS4gQSByZWFkLW1vZGlmeS13cml0ZSBjYXJyeWluZyBCUEZfRkVUQ0ggaXMgcmVwb3J0ZWQgYXMgYSB3cml0ZQomIzQzOwkgKiBldmVuIHRob3VnaCBpdCBkb2VzIGhhdmUgYSByZWdpc3RlciB0byBjbGVhciwgc2VlIHRoZSBjYWxsZXJzLgogCSAqLwotCWlmIChCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX0xEWCAmYW1wOyZhbXA7ICFicGZfYXRvbWljX2lzX2xvYWRfYWNxKGluc24pKQotCQlkc3RfcmVnID0gRE9OVF9DTEVBUjsKJiM0MzsJaXNfd3JpdGUgPSBCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX0xEWCAmYW1wOyZhbXA7CiYjNDM7CQkgICAhYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKTsKIAogCWV4LSZndDtmaXh1cCA9IEZJRUxEX1BSRVAoQlBGX0ZJWFVQX1JFR19NQVNLLCBkc3RfcmVnKTsKIAogCWlmIChpc19hcmVuYSkgewogCQlleC0mZ3Q7Zml4dXAgfD0gQlBGX0FSRU5BX0FDQ0VTUzsKJiM0MzsJCWlmIChpc193cml0ZSkKJiM0MzsJCQlleC0mZ3Q7Zml4dXAgfD0gQlBGX0FSRU5BX1dSSVRFOwogCQkvKgogCQkgKiBpbnNuLSZndDtzcmNfcmVnL2RzdF9yZWcgaG9sZHMgdGhlIGFkZHJlc3MgaW4gdGhlIGFyZW5hIHJlZ2lvbiB3aXRoIHVwcGVyIDMyLWJpdHMKIAkJICogYmVpbmcgemVybyBiZWNhdXNlIG9mIGEgcHJlY2VkaW5nIGFkZHJfc3BhY2VfY2FzdChyJmx0O24mZ3Q7LCAweDAsIDB4MSkgaW5zdHJ1Y3Rpb24uCkBAIC0xODg5LDcgJiM0MzsxODk2LDcgQEAgc3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbgogCQkJYnJlYWs7CiAJCX0KIAotCQlyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgY3R4LCBkc3QpOwomIzQzOwkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgRE9OVF9DTEVBUik7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCQlicmVhazsKQEAgLTE5NTYsNyAmIzQzOzE5NjMsNyBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuCiAJCQlicmVhazsKIAkJfQogCi0JCXJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGRzdCk7CiYjNDM7CQlyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgY3R4LCBET05UX0NMRUFSKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJCWJyZWFrOwpAQCAtMTk3OSw3ICYjNDM7MTk4NiwxNiBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuCiAJCQlyZXR1cm4gcmV0OwogCiAJCWlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfQVRPTUlDKSB7Ci0JCQlyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgY3R4LCBkc3QpOwomIzQzOwkJCS8qCiYjNDM7CQkJICogQSBsb2FkLWFjcXVpcmUgcmVhZHMgaW50byBkc3RfcmVnLCBhbmQgYSByZWFkLW1vZGlmeS13cml0ZQomIzQzOwkJCSAqIGNhcnJ5aW5nIEJQRl9GRVRDSCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gc3JjX3JlZywgb3IgaW50bwomIzQzOwkJCSAqIHIwIGZvciBhIEJQRl9DTVBYQ0hHLiBDbGVhciB0aGF0IHJlZ2lzdGVyIG9uIGZhdWx0LCB0aGUKJiM0MzsJCQkgKiByZW1haW5pbmcgYXRvbWljcyBoYXZlIG5vIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLgomIzQzOwkJCSAqLwomIzQzOwkJCWludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7CiYjNDM7CiYjNDM7CQkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgbG9hZF9yZWcgJmx0OyAwID8KJiM0MzsJCQkJCQkgICAgRE9OVF9DTEVBUiA6IGJwZjJhNjRbbG9hZF9yZWddKTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMKaW5kZXggNmI5OTcyYjA3YzFiMC4uMjUwNGRmMWZhMTExOCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCkBAIC0xOTkyLDEwICYjNDM7MTk5MiwxOSBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwKIAkJCXJldCA9IGVtaXRfYXRvbWljX3JtdyhyZCwgcnMsIGluc24sIGN0eCk7CiAKIAkJLyogcmV0IGNhbiBiZSAxIChza2lwLXpleHQpOyBleHRhYmxlIGVudHJ5IHN0aWxsIG5lZWRzIHRvIGJlIGFkZGVkICovCi0JCWlmIChyZXQgJmd0Oz0gMCkKLQkJCXJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLAotCQkJCWJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikgPyByZCA6IFJFR19ET05UX0NMRUFSX01BUktFUiwKLQkJCQljdHgpID86IHJldDsKJiM0MzsJCWlmIChyZXQgJmd0Oz0gMCkgewomIzQzOwkJCS8qCiYjNDM7CQkJICogQSBsb2FkLWFjcXVpcmUgcmVhZHMgaW50byBkc3RfcmVnLCBhbmQgYSByZWFkLW1vZGlmeS13cml0ZQomIzQzOwkJCSAqIGNhcnJ5aW5nIEJQRl9GRVRDSCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gc3JjX3JlZywgb3IgaW50bwomIzQzOwkJCSAqIHIwIGZvciBhIEJQRl9DTVBYQ0hHLiBDbGVhciB0aGF0IHJlZ2lzdGVyIG9uIGZhdWx0LCB0aGUKJiM0MzsJCQkgKiByZW1haW5pbmcgYXRvbWljcyBoYXZlIG5vIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLgomIzQzOwkJCSAqLwomIzQzOwkJCWludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7CiYjNDM7CiYjNDM7CQkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGxvYWRfcmVnICZsdDsgMCA/CiYjNDM7CQkJCQlSRUdfRE9OVF9DTEVBUl9NQVJLRVIgOiByZWdtYXBbbG9hZF9yZWddLAomIzQzOwkJCQkJY3R4KSA/OiByZXQ7CiYjNDM7CQl9CiAKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYwppbmRleCBiNjA4Nzc0NzhiNDVkLi5jNDY4NzJiMDcxY2U3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTc3NCw2ICYjNDM7Nzc0LDggQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsCiAJCQkJICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCQkJICAgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpCiB7CiYjNDM7CWludCBsb2FkX3JlZzsKJiM0MzsKIAlpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX1BST0JFX0FUT01JQykKIAkJcmV0dXJuOwogCkBAIC03ODMsNiAmIzQzOzc4NSwxNCBAQCBzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX2F0b21pY19wcmUoc3RydWN0IGJwZl9qaXQgKmppdCwKIAlFTUlUNCgweGI5MDgwMDAwLCBSRUdfVzEsIGluc24tJmd0O2RzdF9yZWcpOwogCXByb2JlLSZndDthcmVuYV9yZWcgPSBSRUdfVzE7CiAJcHJvYmUtJmd0O3ByZyA9IGppdC0mZ3Q7cHJnOwomIzQzOwkvKgomIzQzOwkgKiBBIHJlYWQtbW9kaWZ5LXdyaXRlIGNhcnJ5aW5nIEJQRl9GRVRDSCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8KJiM0MzsJICogc3JjX3JlZywgb3IgaW50byByMCBmb3IgYSBCUEZfQ01QWENIRy4gQ2xlYXIgdGhhdCByZWdpc3RlciBvbgomIzQzOwkgKiBmYXVsdCwgdGhlIHJlbWFpbmluZyBhdG9taWNzIG9ubHkgd3JpdGUgbWVtb3J5LgomIzQzOwkgKi8KJiM0MzsJbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pOwomIzQzOwlpZiAobG9hZF9yZWcgJmd0Oz0gMCkKJiM0MzsJCXByb2JlLSZndDtyZWcgPSByZWcyaGV4W2xvYWRfcmVnXTsKIH0KIAogc3RhdGljIGludCBicGZfaml0X3Byb2JlX3Bvc3Qoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCwKQEAgLTE2ODQsNiAmIzQzOzE2OTQsNyBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLAogCQkJaWYgKGxvYWRfcHJvYmUucHJnICE9IC0xKSB7CiAJCQkJcHJvYmUucHJnID0gaml0LSZndDtwcmc7CiAJCQkJcHJvYmUuYXJlbmFfcmVnID0gbG9hZF9wcm9iZS5hcmVuYV9yZWc7CiYjNDM7CQkJCXByb2JlLnJlZyA9IGxvYWRfcHJvYmUucmVnOwogCQkJfQogCQkJbG9vcF9zdGFydCA9IGppdC0mZ3Q7cHJnOwogCQkJLyogMDoge2NzeXxjc2d9ICV3MCwlc3JjLG9mZiglYXJlbmEpICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKaW5kZXggOGRkZGI1ZDdhZjIxYi4uZDkyMDc3MmFmN2Q1ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwpAQCAtMTQ3MywxNyAmIzQzOzE0NzMsMjAgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19sZF9zdF9pbmRleCh1OCAqKnBwcm9nLCB1MzIgYXRvbWljX29wLCB1MzIgc2l6ZSwKICAqCiAgKiBCaXQgbGF5b3V0IG9mIGBmaXh1cGAgKDMyLWJpdCk6CiAgKgotICogJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOwotICogfCAzMSAgICAgICAgfCAzMC0yNCAgfCAgIDIzLTE2ICAgfCAgIDE1LTggIHwgICAgNy0wICAgfAotICogfCAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgfAotICogfCBBUkVOQV9BQ0MgfCBVbnVzZWQgfCBBUkVOQV9SRUcgfCBEU1RfUkVHIHwgSU5TTl9MRU4gfAotICogJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOwomIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzsKJiM0MzsgKiB8IDMxICAgICAgICB8IDMwICAgICAgICAgIHwgMjktMjQgIHwgICAyMy0xNiAgIHwgICAxNS04ICB8ICAgIDctMCAgIHwKJiM0MzsgKiB8ICAgICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgIHwKJiM0MzsgKiB8IEFSRU5BX0FDQyB8IEFSRU5BX1dSSVRFIHwgVW51c2VkIHwgQVJFTkFfUkVHIHwgRFNUX1JFRyB8IElOU05fTEVOIHwKJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7CiAgKgogICogLSBJTlNOX0xFTiAoOCBiaXRzKTogTGVuZ3RoIG9mIGZhdWx0aW5nIGluc24gKG1heCB4ODYgaW5zbiA9IDE1IGJ5dGVzIChmaXRzIGluIDggYml0cykpLgogICogLSBEU1RfUkVHICAoOCBiaXRzKTogT2Zmc2V0IG9mIGRzdF9yZWcgZnJvbSByZWcycHRfcmVnc1tdIChtYXggb2Zmc2V0ID0gMTEyIChmaXRzIGluIDggYml0cykpLgotICogICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBzZXQgdG8gRE9OVF9DTEVBUiBpZiB0aGUgaW5zbiBpcyBhIHN0b3JlLgomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgc2V0IHRvIERPTlRfQ0xFQVIgaWYgdGhlIGluc24gZG9lcyBub3QgcmVhZCBpbnRvIGEgcmVnaXN0ZXIuCiAgKiAtIEFSRU5BX1JFRyAoOCBiaXRzKTogT2Zmc2V0IG9mIHRoZSByZWdpc3RlciB0aGF0IGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZQogICogICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgZm9yIGxvYWQvc3RvcmUgd2hlbiBhY2Nlc3NpbmcgdGhlIGFyZW5hIHJlZ2lvbi4KJiM0MzsgKiAtIEFSRU5BX1dSSVRFICgxIGJpdCk6IFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiB3cm90ZSB0byB0aGUgYXJlbmEgcmVnaW9uLgomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW5kZXBlbmRlbnQgb2YgRFNUX1JFRywgc2luY2UgYSByZWFkLW1vZGlmeS13cml0ZSBib3RoIHdyaXRlcyB0bwomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5IGFuZCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gYSByZWdpc3Rlci4KICAqIC0gQVJFTkFfQUNDRVNTICgxIGJpdCk6IFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiBhY2Nlc3NlZCB0aGUgYXJlbmEgcmVnaW9uLgogICoKICAqIEJpdCBsYXlvdXQgb2YgYGRhdGFgICgzMi1iaXQpOgpAQCAtMTUwMiw2ICYjNDM7MTUwNSw3IEBAIHN0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3RfaW5kZXgodTggKipwcHJvZywgdTMyIGF0b21pY19vcCwgdTMyIHNpemUsCiAjZGVmaW5lIEZJWFVQX0lOU05fTEVOX01BU0sJR0VOTUFTSyg3LCAwKQogI2RlZmluZSBGSVhVUF9SRUdfTUFTSwkJR0VOTUFTSygxNSwgOCkKICNkZWZpbmUgRklYVVBfQVJFTkFfUkVHX01BU0sJR0VOTUFTSygyMywgMTYpCiYjNDM7I2RlZmluZSBGSVhVUF9BUkVOQV9XUklURQlCSVQoMzApCiAjZGVmaW5lIEZJWFVQX0FSRU5BX0FDQ0VTUwlCSVQoMzEpCiAjZGVmaW5lIERBVEFfQVJFTkFfT0ZGU0VUX01BU0sJR0VOTUFTSygzMSwgMTYpCiAKQEAgLTE1MTAsNyAmIzQzOzE1MTQsNyBAQCBib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKngsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCXUzMiByZWcgPSBGSUVMRF9HRVQoRklYVVBfUkVHX01BU0ssIHgtJmd0O2ZpeHVwKTsKIAl1MzIgaW5zbl9sZW4gPSBGSUVMRF9HRVQoRklYVVBfSU5TTl9MRU5fTUFTSywgeC0mZ3Q7Zml4dXApOwogCWJvb2wgaXNfYXJlbmEgPSAhISh4LSZndDtmaXh1cCAmYW1wOyBGSVhVUF9BUkVOQV9BQ0NFU1MpOwotCWJvb2wgaXNfd3JpdGUgPSAocmVnID09IERPTlRfQ0xFQVIpOwomIzQzOwlib29sIGlzX3dyaXRlID0gISEoeC0mZ3Q7Zml4dXAgJmFtcDsgRklYVVBfQVJFTkFfV1JJVEUpOwogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAlzMTYgb2ZmOwogCXUzMiBhcmVuYV9yZWc7CkBAIC0yMzQ4LDYgJiM0MzsyMzUyLDcgQEAgc3Q6CQkJaW5zbl9vZmYgPSBpbnNuLSZndDtvZmY7CiAJCQkJc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXg7CiAJCQkJdTggKl9pbnNuID0gaW1hZ2UgJiM0MzsgcHJvZ2xlbiAmIzQzOyAoc3RhcnRfb2ZfbGR4IC0gdGVtcCk7CiAJCQkJdTMyIGFyZW5hX3JlZywgZml4dXBfcmVnOwomIzQzOwkJCQlib29sIGlzX3dyaXRlOwogCQkJCXM2NCBkZWx0YTsKIAogCQkJCWlmICghYnBmX3Byb2ctJmd0O2F1eC0mZ3Q7ZXh0YWJsZSkKQEAgLTIzODQsMTUgJiM0MzsyMzg5LDI5IEBAIHN0OgkJCWluc25fb2ZmID0gaW5zbi0mZ3Q7b2ZmOwogCQkJCSAgICBicGZfYXRvbWljX2lzX2xvYWRfYWNxKGluc24pKSB7CiAJCQkJCWFyZW5hX3JlZyA9IHJlZzJwdF9yZWdzW3NyY19yZWddOwogCQkJCQlmaXh1cF9yZWcgPSByZWcycHRfcmVnc1tkc3RfcmVnXTsKJiM0MzsJCQkJCWlzX3dyaXRlID0gZmFsc2U7CiAJCQkJfSBlbHNlIHsKJiM0MzsJCQkJCS8qCiYjNDM7CQkJCQkgKiBBIHN0b3JlIGhhcyBubyBkZXN0aW5hdGlvbiByZWdpc3RlciB0byBjbGVhciwKJiM0MzsJCQkJCSAqIGV4Y2VwdCBmb3IgYSByZWFkLW1vZGlmeS13cml0ZSB3aXRoIEJQRl9GRVRDSCwKJiM0MzsJCQkJCSAqIHdoaWNoIGFsc28gcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIHNyY19yZWcsIG9yCiYjNDM7CQkJCQkgKiBpbnRvIHIwIGZvciBhIEJQRl9DTVBYQ0hHLiBFaXRoZXIgd2F5IHRoZSBhY2Nlc3MKJiM0MzsJCQkJCSAqIGlzIHN0aWxsIHJlcG9ydGVkIGFzIGEgd3JpdGUuCiYjNDM7CQkJCQkgKi8KJiM0MzsJCQkJCWludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7CiYjNDM7CiAJCQkJCWFyZW5hX3JlZyA9IHJlZzJwdF9yZWdzW2RzdF9yZWddOwotCQkJCQlmaXh1cF9yZWcgPSBET05UX0NMRUFSOwomIzQzOwkJCQkJZml4dXBfcmVnID0gbG9hZF9yZWcgJmx0OyAwID8gRE9OVF9DTEVBUiA6CiYjNDM7CQkJCQkJICAgIHJlZzJwdF9yZWdzW2xvYWRfcmVnXTsKJiM0MzsJCQkJCWlzX3dyaXRlID0gdHJ1ZTsKIAkJCQl9CiAKIAkJCQlleC0mZ3Q7Zml4dXAgPSBGSUVMRF9QUkVQKEZJWFVQX0lOU05fTEVOX01BU0ssIHByb2cgLSBzdGFydF9vZl9sZHgpIHwKIAkJCQkJICAgIEZJRUxEX1BSRVAoRklYVVBfQVJFTkFfUkVHX01BU0ssIGFyZW5hX3JlZykgfAogCQkJCQkgICAgRklFTERfUFJFUChGSVhVUF9SRUdfTUFTSywgZml4dXBfcmVnKTsKIAkJCQlleC0mZ3Q7Zml4dXAgfD0gRklYVVBfQVJFTkFfQUNDRVNTOwomIzQzOwkJCQlpZiAoaXNfd3JpdGUpCiYjNDM7CQkJCQlleC0mZ3Q7Zml4dXAgfD0gRklYVVBfQVJFTkFfV1JJVEU7CiAKIAkJCQlleC0mZ3Q7ZGF0YSB8PSBGSUVMRF9QUkVQKERBVEFfQVJFTkFfT0ZGU0VUX01BU0ssIGluc24tJmd0O29mZik7CiAJCQl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaAppbmRleCA0ZWRiYTgxODJkYjFiLi4xNWQ4MzY4NGM2ZTk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKQEAgLTQxNCw2ICYjNDM7NDE0LDMwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfYXRvbWljX2lzX2xvYWRfYWNxKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIAkgICAgICAgaW5zbi0mZ3Q7aW1tID09IEJQRl9MT0FEX0FDUTsKIH0KIAomIzQzOy8qCiYjNDM7ICogR2l2ZW4gYW4gaW5zdHJ1Y3Rpb24gQGluc24sIHJldHVybiB0aGUgbnVtYmVyIG9mIHRoZSBCUEYgcmVnaXN0ZXIgdGhhdCBhCiYjNDM7ICogQlBGX0FUT01JQyByZWFkcyB0aGUgdmFsdWUgYXQgaXRzIG1lbW9yeSBvcGVyYW5kIGludG8sIG9yIC0xIGlmIHRoZXJlIGlzCiYjNDM7ICogbm8gc3VjaCByZWdpc3Rlci4gVGhhdCBpcyB0aGUgcmVnaXN0ZXIgYSBCUEZfUFJPQkVfQVRPTUlDIGhhcyB0byBjbGVhciB3aGVuCiYjNDM7ICogdGhlIGFjY2VzcyBmYXVsdHMuIExpa2UgYnBmX2F0b21pY19pc19sb2FkX2FjcSgpLCBAaW5zbiBpcyBub3QgYXNzdW1lZCB0bwomIzQzOyAqIGJlIGEgQlBGX0FUT01JQyBoZXJlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGJwZl9hdG9taWNfbG9hZF9yZWcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKQomIzQzO3sKJiM0MzsJaWYgKEJQRl9DTEFTUyhpbnNuLSZndDtjb2RlKSAhPSBCUEZfU1RYIHx8CiYjNDM7CSAgICAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX0FUT01JQyAmYW1wOyZhbXA7CiYjNDM7CSAgICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX1BST0JFX0FUT01JQykpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXN3aXRjaCAoaW5zbi0mZ3Q7aW1tKSB7CiYjNDM7CWNhc2UgQlBGX0xPQURfQUNROgomIzQzOwkJcmV0dXJuIGluc24tJmd0O2RzdF9yZWc7CiYjNDM7CWNhc2UgQlBGX0NNUFhDSEc6CiYjNDM7CQlyZXR1cm4gQlBGX1JFR18wOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIChpbnNuLSZndDtpbW0gJmFtcDsgQlBGX0ZFVENIKSA/IGluc24tJmd0O3NyY19yZWcgOiAtMTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qIE1lbW9yeSBzdG9yZSwgKih1aW50ICopIChkc3RfcmVnICYjNDM7IG9mZjE2KSA9IGltbTMyICovCiAKICNkZWZpbmUgQlBGX1NUX01FTShTSVpFLCBEU1QsIE9GRiwgSU1NKQkJCQlcCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2ZpeHVwcy5jIGIva2VybmVsL2JwZi9maXh1cHMuYwppbmRleCA2NjFlMmQxM2E2MDQyLi5jNGJkNzBiZWZiYjVjIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZml4dXBzLmMKQEAgLTQ5LDE2ICYjNDM7NDksNyBAQCBzdGF0aWMgaW50IGluc25fZGVmX3JlZ25vKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIAljYXNlIEJQRl9TVDoKIAkJcmV0dXJuIC0xOwogCWNhc2UgQlBGX1NUWDoKLQkJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9BVE9NSUMgfHwKLQkJICAgIEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9BVE9NSUMpIHsKLQkJCWlmIChpbnNuLSZndDtpbW0gPT0gQlBGX0NNUFhDSEcpCi0JCQkJcmV0dXJuIEJQRl9SRUdfMDsKLQkJCWVsc2UgaWYgKGluc24tJmd0O2ltbSA9PSBCUEZfTE9BRF9BQ1EpCi0JCQkJcmV0dXJuIGluc24tJmd0O2RzdF9yZWc7Ci0JCQllbHNlIGlmIChpbnNuLSZndDtpbW0gJmFtcDsgQlBGX0ZFVENIKQotCQkJCXJldHVybiBpbnNuLSZndDtzcmNfcmVnOwotCQl9Ci0JCXJldHVybiAtMTsKJiM0MzsJCXJldHVybiBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pOwogCWRlZmF1bHQ6CiAJCXJldHVybiBpbnNuLSZndDtkc3RfcmVnOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBhZGQzYWZmYzU3MDM1Li43M2EyZThiYjE3ODJhIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC02NDg1LDIxICYjNDM7NjQ4NSwxNiBAQCBzdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJcmV0dXJuIC1FQUNDRVM7CiAJfQogCi0JaWYgKGluc24tJmd0O2ltbSAmYW1wOyBCUEZfRkVUQ0gpIHsKLQkJaWYgKGluc24tJmd0O2ltbSA9PSBCUEZfQ01QWENIRykKLQkJCWxvYWRfcmVnID0gQlBGX1JFR18wOwotCQllbHNlCi0JCQlsb2FkX3JlZyA9IGluc24tJmd0O3NyY19yZWc7Ci0KJiM0MzsJLyoKJiM0MzsJICogQSBuZWdhdGl2ZSBsb2FkX3JlZyBtZWFucyB0aGF0IHRoaXMgaW5zdHJ1Y3Rpb24gYWNjZXNzZXMgYSBtZW1vcnkKJiM0MzsJICogbG9jYXRpb24gYnV0IGRvZXNuJiMzOTt0IGFjdHVhbGx5IGxvYWQgaXQgaW50byBhIHJlZ2lzdGVyLgomIzQzOwkgKi8KJiM0MzsJbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pOwomIzQzOwlpZiAobG9hZF9yZWcgJmd0Oz0gMCkgewogCQkvKiBjaGVjayBhbmQgcmVjb3JkIGxvYWQgb2Ygb2xkIHZhbHVlICovCiAJCWVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBsb2FkX3JlZywgRFNUX09QKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7Ci0JfSBlbHNlIHsKLQkJLyogVGhpcyBpbnN0cnVjdGlvbiBhY2Nlc3NlcyBhIG1lbW9yeSBsb2NhdGlvbiBidXQgZG9lc24mIzM5O3QKLQkJICogYWN0dWFsbHkgbG9hZCBpdCBpbnRvIGEgcmVnaXN0ZXIuCi0JCSAqLwotCQlsb2FkX3JlZyA9IC0xOwogCX0KIAogCWRzdF9yZWcgPSBjdXJfcmVncyhlbnYpICYjNDM7IGluc24tJmd0O2RzdF9yZWc7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jCmluZGV4IDE1ZGQzYWUyYTg0YjcuLmU0ZTkzNzQzMDllMjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jCkBAIC0xMDUsNiAmIzQzOzEwNSwxMCBAQCB2b2lkIHRlc3Rfc3RyZWFtX2FyZW5hX2ZhdWx0X2FkZHJlc3Modm9pZCkKIAkJdGVzdF9hZGRyZXNzKHNrZWwtJmd0O3Byb2dzLnN0cmVhbV9hcmVuYV93cml0ZV9mYXVsdCwgJmFtcDtza2VsLSZndDtic3MtJmd0O2ZhdWx0X2FkZHIpOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7bG9hZF9hY3F1aXJlX2ZhdWx0JiMzNDspKQogCQl0ZXN0X2FkZHJlc3Moc2tlbC0mZ3Q7cHJvZ3Muc3RyZWFtX2FyZW5hX2xvYWRfYWNxdWlyZV9mYXVsdCwgJmFtcDtza2VsLSZndDtic3MtJmd0O2ZhdWx0X2FkZHIpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3hjaGdfZmF1bHQmIzM0OykpCiYjNDM7CQl0ZXN0X2FkZHJlc3Moc2tlbC0mZ3Q7cHJvZ3Muc3RyZWFtX2FyZW5hX3hjaGdfZmF1bHQsICZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtmYXVsdF9hZGRyKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtjbXB4Y2hnX2ZhdWx0JiMzNDspKQomIzQzOwkJdGVzdF9hZGRyZXNzKHNrZWwtJmd0O3Byb2dzLnN0cmVhbV9hcmVuYV9jbXB4Y2hnX2ZhdWx0LCAmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7ZmF1bHRfYWRkcik7CiAKIAlzdHJlYW1fX2Rlc3Ryb3koc2tlbCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMKaW5kZXggY2Y1NTMzZTExZjM5Yy4uMDBhMzc5MzNlNDExZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYwpAQCAtMjI5LDYgJiM0MzsyMjksMTA3IEBAIGludCBzdHJlYW1fYXJlbmFfbG9hZF9hY3F1aXJlX2ZhdWx0KHZvaWQgKmN0eCkKIAlyZXR1cm4gdmFsOwogfQogCiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztfX3N0ZGVycigmIzM0O0VSUk9SOiBBcmVuYSBXUklURSBhY2Nlc3MgYXQgdW5tYXBwZWQgYWRkcmVzcyAweHt7Lip9fSYjMzQ7KQomIzQzO19fc3RkZXJyKCYjMzQ7Q1BVOiB7e1swLTldJiM0Mzt9fSBVSUQ6IDAgUElEOiB7e1swLTldJiM0Mzt9fSBDb21tOiB7ey4qfX0mIzM0OykKJiM0MztfX3N0ZGVycigmIzM0O0NhbGwgdHJhY2U6XG4mIzM0OwomIzQzOyYjMzQ7e3soW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcJiM0MzsweFswLTlhLWZBLUZdJiM0MzsvMHhbMC05YS1mQS1GXSYjNDM7XG4mIzM0OwomIzQzOyYjMzQ7fFsgXHRdJiM0MztbXlxuXSYjNDM7XG4pKn19JiMzNDspCiYjNDM7aW50IHN0cmVhbV9hcmVuYV94Y2hnX2ZhdWx0KHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24geGNoZ19pbnNuID0gewomIzQzOwkJLmNvZGUJID0gMHhjMywJLyogQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVyAqLwomIzQzOwkJLmRzdF9yZWcgPSAxLAkJLyogQlBGX1JFR18xICovCiYjNDM7CQkuc3JjX3JlZyA9IDIsCQkvKiBCUEZfUkVHXzIgKi8KJiM0MzsJCS5vZmYJID0gMHg3ZmZmLAomIzQzOwkJLmltbQkgPSAweGUxLAkvKiBCUEZfWENIRyAqLwomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgYnBmX2FyZW5hICpwdHIgPSAodm9pZCAqKSZhbXA7YXJlbmE7CiYjNDM7CXU2NCB1c2VyX3ZtX3N0YXJ0LCB2YWw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFByZXZlbnQgR0NDIGJvdW5kcyB3YXJuaW5nOiBjYXN0aW5nICZhbXA7YXJlbmEgdG8gc3RydWN0IGJwZl9hcmVuYSAqCiYjNDM7CSAqIHRyaWdnZXJzIGJvdW5kcyBjaGVja2luZyBzaW5jZSB0aGUgbWFwIGRlZmluaXRpb24gaXMgc21hbGxlciB0aGFuCiYjNDM7CSAqIHN0cnVjdCBicGZfYXJlbmEuIGJhcnJpZXJfdmFyKCkgbWFrZXMgdGhlIHBvaW50ZXIgb3BhcXVlIHRvIEdDQywKJiM0MzsJICogcHJldmVudGluZyB0aGUgYm91bmRzIGFuYWx5c2lzLgomIzQzOwkgKi8KJiM0MzsJYmFycmllcl92YXIocHRyKTsKJiM0MzsJdXNlcl92bV9zdGFydCA9IHB0ci0mZ3Q7dXNlcl92bV9zdGFydDsKJiM0MzsJZmF1bHRfYWRkciA9IHVzZXJfdm1fc3RhcnQgJiM0MzsgMHg3ZmZmOwomIzQzOwlicGZfYWRkcl9zcGFjZV9jYXN0KHVzZXJfdm1fc3RhcnQsIDAsIDEpOwomIzQzOwkvKgomIzQzOwkgKiBBIHJlYWQtbW9kaWZ5LXdyaXRlIGNhcnJ5aW5nIEJQRl9GRVRDSCB3cml0ZXMgdG8gbWVtb3J5LCBzbyB0aGUgZmF1bHQKJiM0MzsJICogaGFzIHRvIGJlIHJlcG9ydGVkIGFzIGEgV1JJVEUgZnJvbSB0aGUgZHN0X3JlZyBhZGRyZXNzLCBidXQgaXQgYWxzbwomIzQzOwkgKiByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gc3JjX3JlZywgc28gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGhhcyB0bwomIzQzOwkgKiBjbGVhciBzcmNfcmVnLiBQb2lzb24gaXQgdXAgZnJvbnQsIHRoZSByZXR1cm5lZCB2YWx1ZSBtdXN0IGJlIDAuCiYjNDM7CSAqLwomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkJJiMzNDtyMSA9ICVbdXNlcl92bV9zdGFydF07JiMzNDsKJiM0MzsJCSYjMzQ7cjIgPSAxOyYjMzQ7CiYjNDM7CQkmIzM0Oy44Ynl0ZSAlW3hjaGdfaW5zbl07JiMzNDsgLyogcjIgPSB4Y2hnKCh1MzIgKikocjEgJiM0MzsgMHg3ZmZmKSwgcjIpICovCiYjNDM7CQkmIzM0OyVbdmFsXSA9IHIyOyYjMzQ7CiYjNDM7CQk6IFt2YWxdICYjMzQ7PXImIzM0OyAodmFsKQomIzQzOwkJOiBbdXNlcl92bV9zdGFydF0gJiMzNDtyJiMzNDsgKHVzZXJfdm1fc3RhcnQpLAomIzQzOwkJICBfX2ltbV9pbnNuKHhjaGdfaW5zbiwgeGNoZ19pbnNuKQomIzQzOwkJOiAmIzM0O3IxJiMzNDssICYjMzQ7cjImIzM0OwomIzQzOwkpOwomIzQzOwlyZXR1cm4gdmFsOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKQomIzQzO19fc3RkZXJyKCYjMzQ7RVJST1I6IEFyZW5hIFdSSVRFIGFjY2VzcyBhdCB1bm1hcHBlZCBhZGRyZXNzIDB4e3suKn19JiMzNDspCiYjNDM7X19zdGRlcnIoJiMzNDtDUFU6IHt7WzAtOV0mIzQzO319IFVJRDogMCBQSUQ6IHt7WzAtOV0mIzQzO319IENvbW06IHt7Lip9fSYjMzQ7KQomIzQzO19fc3RkZXJyKCYjMzQ7Q2FsbCB0cmFjZTpcbiYjMzQ7CiYjNDM7JiMzNDt7eyhbYS16QS1aX11bYS16QS1aMC05X10qXFwmIzQzOzB4WzAtOWEtZkEtRl0mIzQzOy8weFswLTlhLWZBLUZdJiM0MztcbiYjMzQ7CiYjNDM7JiMzNDt8WyBcdF0mIzQzO1teXG5dJiM0MztcbikqfX0mIzM0OykKJiM0MztpbnQgc3RyZWFtX2FyZW5hX2NtcHhjaGdfZmF1bHQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaW5zbiBjbXB4Y2hnX2luc24gPSB7CiYjNDM7CQkuY29kZQkgPSAweGMzLAkvKiBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9XICovCiYjNDM7CQkuZHN0X3JlZyA9IDEsCQkvKiBCUEZfUkVHXzEgKi8KJiM0MzsJCS5zcmNfcmVnID0gMiwJCS8qIEJQRl9SRUdfMiAqLwomIzQzOwkJLm9mZgkgPSAweDdmZmYsCiYjNDM7CQkuaW1tCSA9IDB4ZjEsCS8qIEJQRl9DTVBYQ0hHICovCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBicGZfYXJlbmEgKnB0ciA9ICh2b2lkICopJmFtcDthcmVuYTsKJiM0MzsJdTY0IHVzZXJfdm1fc3RhcnQsIHZhbDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUHJldmVudCBHQ0MgYm91bmRzIHdhcm5pbmc6IGNhc3RpbmcgJmFtcDthcmVuYSB0byBzdHJ1Y3QgYnBmX2FyZW5hICoKJiM0MzsJICogdHJpZ2dlcnMgYm91bmRzIGNoZWNraW5nIHNpbmNlIHRoZSBtYXAgZGVmaW5pdGlvbiBpcyBzbWFsbGVyIHRoYW4KJiM0MzsJICogc3RydWN0IGJwZl9hcmVuYS4gYmFycmllcl92YXIoKSBtYWtlcyB0aGUgcG9pbnRlciBvcGFxdWUgdG8gR0NDLAomIzQzOwkgKiBwcmV2ZW50aW5nIHRoZSBib3VuZHMgYW5hbHlzaXMuCiYjNDM7CSAqLwomIzQzOwliYXJyaWVyX3ZhcihwdHIpOwomIzQzOwl1c2VyX3ZtX3N0YXJ0ID0gcHRyLSZndDt1c2VyX3ZtX3N0YXJ0OwomIzQzOwlmYXVsdF9hZGRyID0gdXNlcl92bV9zdGFydCAmIzQzOyAweDdmZmY7CiYjNDM7CWJwZl9hZGRyX3NwYWNlX2Nhc3QodXNlcl92bV9zdGFydCwgMCwgMSk7CiYjNDM7CS8qCiYjNDM7CSAqIFNhbWUgYXMgdGhlIGV4Y2hhbmdlIGFib3ZlLCBleGNlcHQgdGhhdCBhIEJQRl9DTVBYQ0hHIHJlYWRzIHRoZSBvbGQKJiM0MzsJICogdmFsdWUgaW50byByMCByYXRoZXIgdGhhbiBpbnRvIHNyY19yZWcsIHNvIHIwIGlzIHRoZSByZWdpc3RlciB0aGUKJiM0MzsJICogZXhjZXB0aW9uIGhhbmRsZXIgaGFzIHRvIGNsZWFyLiBJdCBkb3VibGVzIGFzIHRoZSBjb21wYXJlIHZhbHVlLCBidXQKJiM0MzsJICogdGhlIGNvbXBhcmlzb24gbmV2ZXIgaGFwcGVucyBzaW5jZSB0aGUgYWNjZXNzIGZhdWx0cyBmaXJzdC4KJiM0MzsJICovCiYjNDM7CWFzbSB2b2xhdGlsZSAoCiYjNDM7CQkmIzM0O3IxID0gJVt1c2VyX3ZtX3N0YXJ0XTsmIzM0OwomIzQzOwkJJiMzNDtyMCA9IDE7JiMzNDsKJiM0MzsJCSYjMzQ7cjIgPSAyOyYjMzQ7CiYjNDM7CQkmIzM0Oy44Ynl0ZSAlW2NtcHhjaGdfaW5zbl07JiMzNDsgLyogcjAgPSBjbXB4Y2hnKCh1MzIgKikocjEgJiM0MzsgMHg3ZmZmKSwgcjAsIHIyKSAqLwomIzQzOwkJJiMzNDslW3ZhbF0gPSByMDsmIzM0OwomIzQzOwkJOiBbdmFsXSAmIzM0Oz1yJiMzNDsgKHZhbCkKJiM0MzsJCTogW3VzZXJfdm1fc3RhcnRdICYjMzQ7ciYjMzQ7ICh1c2VyX3ZtX3N0YXJ0KSwKJiM0MzsJCSAgX19pbW1faW5zbihjbXB4Y2hnX2luc24sIGNtcHhjaGdfaW5zbikKJiM0MzsJCTogJiMzNDtyMCYjMzQ7LCAmIzM0O3IxJiMzNDssICYjMzQ7cjImIzM0OwomIzQzOwkpOwomIzQzOwlyZXR1cm4gdmFsOwomIzQzO30KJiM0MzsKIHN0YXRpYyBfX25vaW5saW5lIHZvaWQgc3VicHJvZyh2b2lkKQogewogCWludCBfX2FyZW5hICphZGRyID0gKGludCBfX2FyZW5hICopMHhkZWFkYmVlZjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU3NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDYzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQlBGIEF0b21pYyBPcGVyYXRpb25zKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBUaGlzIHBhdGNoIHNlcmllcyBpcyB0b3VjaGluZyBzb21lIHJlYWxseSBjcml0aWNhbCBwYXJ0cyBvZiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIEJQRiBzdWJzeXN0ZW0gYW5kIHNldmVyYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEpJVCBjb21waWxlcnMuIE15IGluaXRpYWwgZ3V0IGZlZWxpbmc/IFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBzdWJqZWN0IHRvIGZ1enppbmcuCgpUaGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIGhvdyBCUEYgYXJlbmEgZXhjZXB0aW9ucyBhcmUgaGFuZGxlZCwgcGFydGljdWxhcmx5IGFyb3VuZCBhdG9taWMgb3BlcmF0aW9ucyBsaWtlIGBCUEZfQ01QWENIR2AgYW5kIGBCUEZfWENIR2AuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gdGhlIHZlcmlmaWVyIChga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYGtlcm5lbC9icGYvZml4dXBzLmNgKSBhbmQgdGhlIEpJVCBjb21waWxlcnMgdGhlbXNlbHZlcyBmb3IgYGFybTY0YCwgYHJpc2N2YCwgYHMzOTBgLCBhbmQgYHg4NmAuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGJwZl9hdG9taWNfbG9hZF9yZWdgIGluIGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYCBpcyBhIHJlZCBmbGFnLCBidXQgYSBnb29kIG9uZS4KCk5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBkZXRlcm1pbmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgQlBGIEpJVCwgb2J2aW91c2x5LCByZXF1aXJlcyBgQ09ORklHX0JQRl9KSVRgLiBUaGUgQlBGIGFyZW5hIHBhcnQgbGlrZWx5IGhpbmdlcyBvbiBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYW5kIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBga2VybmVsL2JwZi9LY29uZmlnYCBvciByZWxhdGVkIGZpbGVzIHRvIGNvbmZpcm0gdGhhdC4gQlBGIGFyZW5hICptaWdodCogbmVlZCB0aGUgYENPTkZJR19CUEZfU1lTQ0FMTGAgdG9vLCBzbyBJJiMzOTtsbCBjaGVjayB0aGF0LgoKTmV4dCwgSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoZXJlIHRoaXMgYGJwZl9hdG9taWNfbG9hZF9yZWdgIGlzIGJlaW5nIHVzZWQuIFVzaW5nIGBncmVwcGVyYCBpcyBhbiBvcHRpb24sIGJ1dCB0aGUgZGlmZiBpdHNlbGYgaXMgcHJvYmFibHkgZmFzdGVyLCBzaW5jZSBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgc21hbGwgY2hhbmdlLiBBbmQsIHllYWgsIHRoZSBkaWZmIHNob3dzIGl0IGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCwgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGFuZCB3aXRoaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBKSVQgY29tcGlsZXJzLgoKT2theSwgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBmdW5jdGlvbnMuIEJhc2VkIG9uIHRoZSBkaWZmLCB0aGVzZSBhcmUgdGhlIG9uZXMgSSYjMzk7bGwgZm9jdXMgb246CgoqICAgYGJwZl9hdG9taWNfbG9hZF9yZWdgIChhbHRob3VnaCBpdCYjMzk7cyBgc3RhdGljIGlubGluZWAsIHNvIHRoZSBjb3ZlcmFnZSBtaWdodCBiZSBsaW1pdGVkKQoqICAgYGV4X2hhbmRsZXJfYnBmYCAoeDg2LCBhcm02NCkKKiAgIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgIChhcm02NCwgcmlzY3YpCiogICBgY2hlY2tfYXRvbWljX3Jtd2AgKHZlcmlmaWVyKQoqICAgYGJwZl9qaXRfcHJvYmVfYXRvbWljX3ByZWAgKHMzOTApCiogICBgZW1pdF9hdG9taWNfbGRfc3RfaW5kZXhgICh4ODYsIHRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBgc3Q6YCBsYWJlbCBpbiBgZG9faml0YCBvciBzb21ldGhpbmcgc2ltaWxhciBhcmUgaW1wb3J0YW50KQoKU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBmb2N1cyBvbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCwgYXJvdW5kIGxpbmUgMjM0OCwgYXMgd2VsbCBhcyB0aGUgb3RoZXIgSklUIGNvbXBpbGVycyB0aGF0IGFyZSB0b3VjaGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FkZF9leGNlcHRpb25faGFuZGxlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTExMDk9Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMTMyLS8qIEZvciBhY2Nlc3NlcyB0byBCVEYgcG9pbnRlcnMsIGFkZCBhbiBlbnRyeSB0byB0aGUgZXhjZXB0aW9uIHRhYmxlICovXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMTMzOnN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTExMzQtXHRcdFx0XHQgc3RydWN0IGppdF9jdHggKmN0eCxcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMjY1PXN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTgxOS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjE4MjA6XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGRzdCk7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xODIxLVx0XHRpZiAocmV0KVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE4OTgtXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxODk5Olx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgY3R4LCBET05UX0NMRUFSKTtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE5MDAtXHRcdGlmIChyZXQpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTk2NS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjE5NjY6XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIERPTlRfQ0xFQVIpO1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTk2Ny1cdFx0aWYgKHJldClcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xOTk2LVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTk5NzpcdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgY3R4LCBsb2FkX3JlZyBcdTAwM2MgMCA/XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xOTk4LVx0XHRcdFx0XHRcdCAgICBET05UX0NMRUFSIDogYnBmMmE2NFtsb2FkX3JlZ10pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDY0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEJQRiBKSVQgQ29tcGlsZXIqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlci4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gam9nIG15IG1lbW9yeSBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDIzNDggaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoYXQgYXJlYSB1c3VhbGx5IGRlYWxzIHdpdGggW2luc2VydCBzcGVjaWZpYyBrbm93bGVkZ2Ugb2Ygd2hhdCYjMzk7cyB1c3VhbGx5IGxvY2F0ZWQgYXJvdW5kIHRoaXMgYXJlYSBvZiB0aGUgZmlsZSwgZS5nLiwgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgaW5zdHJ1Y3Rpb24gZW1pc3Npb24gZm9yIHNwZWNpZmljIEJQRiBvcGNvZGVzLCBtZW1vcnkgYWRkcmVzc2luZywgZXRjLl0uIEkmIzM5O20gbGlrZWx5IGludGVyZXN0ZWQgaW4gW2luc2VydCBhIGd1ZXNzIGFib3V0IHRoZSBjb250ZXh0IGJhc2VkIG9uIHlvdXIgZXhwZXJ0aXNlLCBlLmcuLCBob3cgYSBwYXJ0aWN1bGFyIGluc3RydWN0aW9uIGlzIGJlaW5nIHRyYW5zbGF0ZWQsIGhvdyBhIHNwZWNpZmljIG9wdGltaXphdGlvbiBpcyBoYW5kbGVkLCBhIGJ1ZyBJIHZhZ3VlbHkgcmVjYWxsXS4gVGltZSB0byBvcGVuIHRoYXQgZmlsZSBhbmQgY29uZmlybSBteSBzdXNwaWNpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0OiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyODQtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjI4NTpzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyODYtXHRcdFx0aWYgKGRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkwMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBPYnNlcnZhdGlvbnMgb24gQlBGIEpJVCBDb21waWxhdGlvbiAmYW1wOyBBdG9taWMgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBCUEYgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MgYW5kIGF0b21pYyBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIGFjcm9zcyBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyB3aXRoaW4gdGhlIGtlcm5lbC4gSXQmIzM5O3MgaW50ZXJlc3RpbmcgdG8gc2VlIHRoZSB2YXJpZWQgZnVuY3Rpb24gbmFtZXMgYW5kIGxvY2F0aW9ucyBmb3IgY29yZSBsb2dpYy4KCkkgbm90aWNlZCB0aGF0IHRoZSBtYWluIGVudHJ5IHBvaW50cyBmb3IgdGhlIEpJVCBjb21waWxlciBkaWZmZXIgYmFzZWQgb24gdGhlIGFyY2hpdGVjdHVyZS4gRm9yIGluc3RhbmNlLCBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCwgdGhlIHdvcmsgaXMgZG9uZSBpbiBgZG9faml0YC4gT3ZlciBpbiBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLCBgYnVpbGRfaW5zbmAgdGFrZXMgdGhlIGxlYWQuIEF0b21pYyBvcGVyYXRpb25zIGdldCBzb21lIGF0dGVudGlvbiB0b28sIGFuZCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBJIHNlZSB0aGF0IGBjaGVja19hdG9taWNfcm13YCBoYW5kbGVzIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSB2ZXJpZmljYXRpb25zLiBUaGVuLCBmb3IgYGFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNgLCBpdCYjMzk7cyBgYnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlYCwgYW5kIGZvciBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AsIGl0JiMzOTtzIGBicGZfaml0X2VtaXRfaW5zbmAuCgpHaXZlbiB0aGUgbWVudGlvbnMgb2YgYXRvbWljIG9wZXJhdGlvbnMsIEkmIzM5O20gbm93IGN1cmlvdXMgYWJvdXQgd2hlcmUgdGhlIGBicGZfYXRvbWljX2xvYWRfcmVnYCBmdW5jdGlvbiBnZXRzIHVzZWQgaW4gdGhlIGNvZGViYXNlLiBJIHNob3VsZCBjaGVjayBga2VybmVsL2JwZi9maXh1cHMuY2AgdG8gc2VlIHdoaWNoIGZ1bmN0aW9uIG9yIGZ1bmN0aW9ucyByZWx5IG9uIGl0LiBJdCYjMzk7cyBhbHdheXMgYmVuZWZpY2lhbCB0byB1bmRlcnN0YW5kIHRoZXNlIGRlcGVuZGVuY2llcyB3aGVuIG9wdGltaXppbmcgb3IgZGVidWdnaW5nIEJQRi1yZWxhdGVkIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2F0b21pY19sb2FkX3JlZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZml4dXBzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9maXh1cHMuYz00ND1zdGF0aWMgaW50IGluc25fZGVmX3JlZ25vKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTUxLVx0Y2FzZSBCUEZfU1RYOlxua2VybmVsL2JwZi9maXh1cHMuYzo1MjpcdFx0cmV0dXJuIGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTUzLVx0ZGVmYXVsdDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU2MgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSW5zdHJ1Y3Rpb24gRGVmaW5pdGlvbiBhbmQgSklUIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGluc25fZGVmX3JlZ25vYCBmdW5jdGlvbiwgYW5kIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9scyBvciBhcmVhcyB0aGF0IGFyZSAqbW9zdCogcmVsZXZhbnQuIE15IG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW4sIGFuZCBJIGltbWVkaWF0ZWx5IGhvbmUgaW4gb246IGBjaGVja19hdG9taWNfcm13YCwgZGVmaW5pdGVseSBgaW5zbl9kZWZfcmVnbm9gIGl0c2VsZiwgb2J2aW91c2x5LCBhbmQgYGV4X2hhbmRsZXJfYnBmYCBiZWNhdXNlIHRoYXQgc291bmRzIGNlbnRyYWwgdG8gaGFuZGxpbmcgQlBGIGluc3RydWN0aW9ucy4KCk5vdywgSSYjMzk7bSBhIGxpdHRsZSBoZXNpdGFudCBhYm91dCBpbmNsdWRpbmcgYGRvX2ppdGAgYmVjYXVzZSBpdCYjMzk7cyAqdmVyeSogZ2VuZXJpYywgYnV0IGl0ICppcyogdGhlIEpJVCBjb21waWxlciwgc28gaXQmIzM5O3MgcHJvYmFibHkgaW1wb3J0YW50IHRvIGNvbnNpZGVyIGluIHNvbWUgd2F5LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuIFRoZW4sIEkgdGhpbmsgYWJvdXQgdGhlIHBsYXRmb3JtLXNwZWNpZmljIEpJVCBjb21wb25lbnRzOiBgYnVpbGRfaW5zbmAgZm9yIGFybTY0IGFuZCB0aGUgUklTQy1WIGFuZCBzMzkwIHNwZWNpZmljIGVtaXR0ZXJzLCBgYnBmX2ppdF9lbWl0X2luc25gIGFuZCBgYnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlYCByZXNwZWN0aXZlbHkuIFRob3NlIGFyZSBwcm9iYWJseSBnb2luZyB0byBiZSBrZXkgcGllY2VzIG9mIHRoZSBwdXp6bGUuCgpOb3csIEkgcmVhbGx5IG5lZWQgdG8gY2hlY2sgdGhlIHNjb3BlIG9mIGBleF9oYW5kbGVyX2JwZmAgZnVuY3Rpb24uIElzIGl0IHN0YXRpYywgaXMgaXQgZXhwb3J0ZWQ/IEl0cyB2aXNpYmlsaXR5IGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgQlBGIGNvZGUgaXMgZ2V0dGluZyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleF9oYW5kbGVyX2JwZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTQ0Nz1zdGF0aWMgaW50IGVtaXRfYXRvbWljX2xkX3N0X2luZGV4KHU4ICoqcHByb2csIHUzMiBhdG9taWNfb3AsIHUzMiBzaXplLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNTExLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE1MTI6Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICp4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNTEzLXtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MjI4NT1zdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMzgxLVx0XHRcdFx0ICogdGhlIHJlZyBob2xkaW5nIHRoZSB1bm1vZGlmaWVkIDMyLWJpdCBhZGRyZXNzIHRvXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjM4MjpcdFx0XHRcdCAqIGV4X2hhbmRsZXJfYnBmKCkuXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjM4My1cdFx0XHRcdCAqXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI1NDAtXHRcdFx0XHQgKiBDb21wdXRlIHNpemUgb2YgeDg2IGluc24gYW5kIGl0cyB0YXJnZXQgZGVzdCB4ODYgcmVnaXN0ZXIuXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjU0MTpcdFx0XHRcdCAqIGV4X2hhbmRsZXJfYnBmKCkgd2lsbCB1c2UgbG93ZXIgOCBiaXRzIHRvIGFkanVzdFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI1NDItXHRcdFx0XHQgKiBwdF9yZWdzLVx1MDAzZWlwIHRvIGp1bXAgb3ZlciB0aGlzIHg4NiBpbnN0cnVjdGlvblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ0OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBCUEYgSklUIExhbmRzY2FwZTogQSBRdWljayBDaGVjayoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgZXhfaGFuZGxlcl9icGZgIGFuZCBpbW1lZGlhdGVseSBJIGtub3cgaXQmIzM5O3MgYSBnbG9iYWwgZnVuY3Rpb24uIE15IGJyYWluIGlzIGFscmVhZHkgc3RhcnRpbmcgdG8gc2NvcGUgb3V0IHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCwgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kIGNvbW1vbiB1c2FnZSBwYXR0ZXJucy4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCBrZXJuZWwgQlBGIGFuZCB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUsIG15IG5leHQgbW92ZSBpcyBjbGVhci4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBMZXQgbWUgcHVsbCB1cCBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIChvciBwb3RlbnRpYWwgaXNzdWVzKSB3aWxsIHJlc2lkZS4gSXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciBkZXRhaWxzIG9uIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIEFSTTY0IEJQRiBKSVQgY29tcGlsYXRpb24gZmxvdy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBtZW50YWxseSB0cmFjaW5nIHRoZSBjYWxscyBhbmQgdW5kZXJzdGFuZCB0aGUgSklUIG91dHB1dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXhfaGFuZGxlcl9icGYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMDQ2PXN0YXRpYyB2b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgd2FzX2NsYXNzaWMpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTEwOC1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjExMDk6Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTExMTAtXHRcdCAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMTMzPXN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjA1LVx0XHQgKiBtZW1vcnkgYWNjZXNzLiBQYXNzIHRoZSByZWcgaG9sZGluZyB0aGUgdW5tb2RpZmllZCAzMi1iaXQgYWRkcmVzcyB0b1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTIwNjpcdFx0ICogZXhfaGFuZGxlcl9icGYuXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjA3LVx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMjYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGBleF9oYW5kbGVyX2JwZmAgYW5kIEl0cyBSZWxhdGlvbnNoaXAgdG8gSW5zdHJ1Y3Rpb24gRGVmaW5pdGlvbioqCgpSaWdodCwgc28gYGV4X2hhbmRsZXJfYnBmYCBpcyBhIGdsb2JhbCB2YXJpYWJsZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgd2hlcmUgaXMgdGhpcyB1c2VkLCBhbmQgaG93IHdpZGVseT8mIzM0OyBHbG9iYWwgdmFyaWFibGVzIGFsd2F5cyB3YXJyYW50IGEgY2FyZWZ1bCBsb29rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIHBvdGVudGlhbCBpbXBhY3QuIE15IGZvY3VzIG5hcnJvd3MgaW4gb24gdGhhdCBuYW1lLgoKTXkgbmV4dCBzdGVwPyBEaXZlIHJpZ2h0IGludG8gdGhlIGNvZGUgdG8gdHJhY2UgaXRzIHVzYWdlLiBJJiMzOTtsbCBoZWFkIG92ZXIgdG8gYGtlcm5lbC9icGYvZml4dXBzLmNgLiBUaGF0IGZpbGUgbmFtZSBzdHJvbmdseSBzdWdnZXN0cyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBzb21lIGtpbmQgb2YgaW5zdHJ1Y3Rpb24gZml4aW5nIG9yIHBhdGNoaW5nIHdpdGhpbiB0aGUgQlBGIHN5c3RlbS4gQ29uc2lkZXJpbmcgdGhhdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBpbnNuX2RlZl9yZWdub2AuIFRoZSBuYW1lIGlzIGFsc28gc3VnZ2VzdGl2ZS4gSXQgaW1wbGllcyBzb21lIGtpbmQgb2YgcmVnaXN0ZXIgbnVtYmVyIHRoYXQgaXMgYSBwYXJ0IG9mIHRoZSBpbnN0cnVjdGlvbiBkZWZpbml0aW9uLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSB0d28gcGllY2VzIG9mIGNvZGUgaW50ZXJhY3QsIGFuZCBob3cgYGV4X2hhbmRsZXJfYnBmYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBpbnN0cnVjdGlvbiBoYW5kbGluZy4gVGhpcyB3aWxsIGhlbHAgbWUgZGV0ZXJtaW5lIHdoZXJlIHRoZSBmaXh1cHMgYXJlIGhhcHBlbmluZyBhbmQgaG93IHRoZXkgbWlnaHQgcmVsYXRlIHRvIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zIG9yIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5zbl9kZWZfcmVnbm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2ZpeHVwcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZml4dXBzLmM9MjQ9c3RhdGljIGJvb2wgaXNfYWRkcl9zcGFjZV9jYXN0MzIoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy00My0vKiBSZXR1cm4gdGhlIHJlZ25vIGRlZmluZWQgYnkgdGhlIGluc24sIG9yIC0xLiAqL1xua2VybmVsL2JwZi9maXh1cHMuYzo0NDpzdGF0aWMgaW50IGluc25fZGVmX3JlZ25vKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbmtlcm5lbC9icGYvZml4dXBzLmMtNDUte1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNTgtLypcbmtlcm5lbC9icGYvZml4dXBzLmM6NTk6ICogRm9yIHVzZSBvbmx5IGluIGNvbWJpbmF0aW9uIHdpdGggaW5zbl9kZWZfcmVnbm8oKSBcdTAwM2U9IDAuXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTYwLSAqIFJldHVybnMgVFJVRSBpZiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgb3BlcmF0ZXMgb24gNjQtYml0LFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9NjM9c3RhdGljIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtODctXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjg4Olx0LyogYXRvbWljcywgc2VlIGluc25fZGVmX3JlZ25vKCkgKi9cbmtlcm5lbC9icGYvZml4dXBzLmMtODktXHRpZiAoY2xhc3MgPT0gQlBGX1NUWCBcdTAwMjZcdTAwMjYgc2l6ZSAhPSBCUEZfRFcpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xMDQ9aW50IGJwZl9pbnNuX2RlZjMyKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuKVxua2VybmVsL2JwZi9maXh1cHMuYy0xMDUte1xua2VybmVsL2JwZi9maXh1cHMuYzoxMDY6XHRpbnQgZHN0X3JlZyA9IGluc25fZGVmX3JlZ25vKGluc24pO1xua2VybmVsL2JwZi9maXh1cHMuYy0xMDctXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz02Mzg9aW50IGJwZl9vcHRfc3VicmVnX3pleHRfbG8zMl9ybmRfaGkzMihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNjYxLVx0XHRpbnNuID0gaW5zbnNbYWRqX2lkeF07XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjY2MjpcdFx0bG9hZF9yZWcgPSBpbnNuX2RlZl9yZWdubyhcdTAwMjZpbnNuKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtNjYzLVx0XHRpZiAoIWF1eFthZGpfaWR4XS56ZXh0X2RzdCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk0MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkFuYWx5emluZyB0aGUgSW5zdHJ1Y3Rpb24gRGVmaW5pdGlvbiBhbmQgQ2FsbGVyKioKCk9rYXksIHNvIGBpbnNuX2RlZl9yZWdub2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGNsb3NlciBpbnNwZWN0aW9uLiBUaGUgcmVsZXZhbnQgY2FsbGVycyBzZWVtIHRvIGJlIGBicGZfaW5zbl9kZWYzMmAgYW5kIGBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzJgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBicGZfaW5zbl9kZWYzMmAgZmlyc3QuIFVuZGVyc3RhbmRpbmcgaG93ICp0aGF0KiBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGlzIHN0YXRpYyB2YXJpYWJsZSBpcyBnb2luZyB0byBiZSBrZXkgdG8gZ3Jhc3BpbmcgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSBhbmQgdGhlIGRhdGEgYmVpbmcgbWFuaXB1bGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pbnNuX2RlZjMyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9maXh1cHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2ZpeHVwcy5jPTYzPXN0YXRpYyBib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwMy0gKi9cbmtlcm5lbC9icGYvZml4dXBzLmM6MTA0OmludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbmtlcm5lbC9icGYvZml4dXBzLmMtMTA1LXtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTIxNT1zdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjI3LVx0ICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyODpcdGRhdGFbb2ZmXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKG5ld19wcm9nLCBpbnNuICYjNDM7IG9mZiAmIzQzOyBjbnQgLSAxKSBcdTAwM2U9IDA7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyOS1cbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzOS1cdFx0ZGF0YVtpXS5zZWVuID0gb2xkX3NlZW47XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjI0MDpcdFx0ZGF0YVtpXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKG5ld19wcm9nLCBpbnNuICYjNDM7IGkpIFx1MDAzZT0gMDtcbmtlcm5lbC9icGYvZml4dXBzLmMtMjQxLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU0MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkJQRiBJbnN0cnVjdGlvbiBBbmFseXNpcyoqCgpPa2F5LCBzbyBgYnBmX2luc25fZGVmMzJgIOKAkyB0aGF0JiMzOTtzIGEgZ2xvYmFsLCByaWdodD8gTGV0IG1lIGp1c3QgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLiBOb3csIEkgbmVlZCB0byBkaWcgaW50byBob3cgdGhpcyBpcyB1c2VkIGFuZCB3aGVyZSBpdCYjMzk7cyB2YWxpZGF0ZWQuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBpbnN0cnVjdGlvbiBhbmQgcG90ZW50aWFsIGF0b21pYyBvcGVyYXRpb25zLCBpcyB0byB6ZXJvIGluIG9uIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGBjaGVja19hdG9taWNfcm13YCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsaWtlbHkgY2FuZGlkYXRlIHRvIGhhbmRsZSB2YWxpZGF0aW9uIGNoZWNrcyByZWxhdGVkIHRvIGFueSByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb25zLCBhbmQgYGJwZl9pbnNuX2RlZjMyYCBpcyBwcm9iYWJseSB0aWVkIGluIHRoZXJlIHNvbWVob3cuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgY29kZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hlY2tfYXRvbWljX3JtdyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjQwMj1zdGF0aWMgaW50IGNoZWNrX3N0b3JlX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MzktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ0MDpzdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDQxLVx0XHRcdCAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY1NjU9c3RhdGljIGludCBjaGVja19hdG9taWMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTc3LVx0Y2FzZSBCUEZfQ01QWENIRzpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NTc4Olx0XHRyZXR1cm4gY2hlY2tfYXRvbWljX3JtdyhlbnYsIGluc24pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY1NzktXHRjYXNlIEJQRl9MT0FEX0FDUTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwMzUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgQXRvbWljIFJNVyBDaGVjayoqCgpPa2F5LCBzbyBJIHNlZSBgY2hlY2tfYXRvbWljX3Jtd2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93IOKAkyBpdCYjMzk7cyBsaWtlbHkgc2NvcGVkIHdpdGhpbiBhIHBhcnRpY3VsYXIgY29tcGlsYXRpb24gdW5pdCBhbmQgbm90IG1lYW50IGZvciBleHRlcm5hbCB1c2UuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgYGNoZWNrX2F0b21pY2AgaXMgdGhlIGNhbGxlci4gVGhhdCBtZWFucyB0aGUgbG9naWMgd2l0aGluIGBjaGVja19hdG9taWNfcm13YCBpcyBpbnZva2VkIGZyb20gd2l0aGluIGBjaGVja19hdG9taWNgLiBTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpZyBpbnRvIGBjaGVja19hdG9taWNgIGl0c2VsZi4gVW5kZXJzdGFuZGluZyAqd2h5KiBpdCBjYWxscyBgY2hlY2tfYXRvbWljX3Jtd2AgYW5kIHdoYXQgaW5wdXRzIGl0JiMzOTtzIHByb3ZpZGluZyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUuIEkgbmVlZCB0byBzZWUgd2hhdCB0aGUgY29udHJvbCBmbG93IGlzLiBUaW1lIHRvIG1vdmUgb24gYW5kIGludmVzdGlnYXRlIHRoYXQgYGNoZWNrX2F0b21pY2AgZnVuY3Rpb24gaW4gbW9yZSBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX2F0b21pYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjQwMj1zdGF0aWMgaW50IGNoZWNrX3N0b3JlX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MzktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ0MDpzdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDQxLVx0XHRcdCAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1MjYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjUyNzpzdGF0aWMgaW50IGNoZWNrX2F0b21pY19sb2FkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjUyOC1cdFx0XHQgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU0NS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NTQ2OnN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3N0b3JlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU0Ny1cdFx0XHQgICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1NjQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjU2NTpzdGF0aWMgaW50IGNoZWNrX2F0b21pYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU2Ni17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1NzctXHRjYXNlIEJQRl9DTVBYQ0hHOlxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1Nzg6XHRcdHJldHVybiBjaGVja19hdG9taWNfcm13KGVudiwgaW5zbik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU3OS1cdGNhc2UgQlBGX0xPQURfQUNROlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTg0LVx0XHR9XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjU4NTpcdFx0cmV0dXJuIGNoZWNrX2F0b21pY19sb2FkKGVudiwgaW5zbik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU4Ni1cdGNhc2UgQlBGX1NUT1JFX1JFTDpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU5MS1cdFx0fVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1OTI6XHRcdHJldHVybiBjaGVja19hdG9taWNfc3RvcmUoZW52LCBpbnNuKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTkzLVx0ZGVmYXVsdDpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTcyMzM9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzI1MC1cdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzI1MTpcdFx0XHRyZXR1cm4gY2hlY2tfYXRvbWljKGVudiwgaW5zbik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyNTItXHRcdHJldHVybiBjaGVja19zdG9yZV9yZWcoZW52LCBpbnNuLCBmYWxzZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTk0CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIEV4ZWN1dGlvbiBQYXRoIG9mIGBjaGVja19hdG9taWNgKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIHN5c3RlbXMgcGVyc3BlY3RpdmUuIEkgc2VlIHRoYXQgYGNoZWNrX2F0b21pY2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IGxvY2FsIHRvIGl0cyBjb21waWxhdGlvbiB1bml0LCBtZWFuaW5nIHdlIHNob3VsZCBiZSBhYmxlIHRvIHJlYXNvbiBhYm91dCBpdHMgdXNhZ2UgaW4gdGhhdCBzcGVjaWZpYyBjb250ZXh0LiBUaGUgaW1tZWRpYXRlIGNhbGxlciBvZiBgY2hlY2tfYXRvbWljYCBpcyBpZGVudGlmaWVkIGFzIGBkb19jaGVja19pbnNuYC4gQW5vdGhlciBzdGF0aWMgZnVuY3Rpb24sIGBkb19jaGVja19pbnNuYCwgaXMgY2FsbGVkIGJ5IGBkb19jaGVja2AsIHdoaWNoIGlzIGFsc28gc3RhdGljLiBGaW5hbGx5LCBgZG9fY2hlY2tgIGl0c2VsZiBpcyBjYWxsZWQgYnkgYGJwZl9jaGVja2AsIHdoaWNoIGlzIGdsb2JhbC4gVGhpcyBtZWFucyBgYnBmX2NoZWNrYCBpcyB0aGUgZW50cnkgcG9pbnQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLgoKTm93LCBiYXNlZCBvbiB0aGlzIGNhbGwgY2hhaW4sIGl0IGlzIGltcG9ydGFudCB0byB0cmFjZSBob3cgYGNoZWNrX2F0b21pY2AgaXMgdXNlZCBhbmQgZW5zdXJlIGl0IGlzIGNvcnJlY3QuIEkgYW0gZ29pbmcgdG8gY2hlY2sgYGFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNgIHRvIHNlZSBob3cgYGJwZl9qaXRfcHJvYmVfYXRvbWljX3ByZWAgaW50ZXJhY3RzIHdpdGggdGhpcyBmbG93LiBVbmRlcnN0YW5kaW5nIHRoZSBgYnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlYCB1c2FnZSBpcyBjcnVjaWFsIGhlcmUsIGFzIGl0IG1pZ2h0IHJlcHJlc2VudCBhbiBpbnRlcmVzdGluZyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb3IgYSBzZWN1cml0eSBtaXRpZ2F0aW9uIGFyb3VuZCBhdG9taWMgaW5zdHJ1Y3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X3Byb2JlX2F0b21pY19wcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9NzYwPXN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTc3Mi1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6NzczOnN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfYXRvbWljX3ByZShzdHJ1Y3QgYnBmX2ppdCAqaml0LFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03NzQtXHRcdFx0XHQgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTk1NT1zdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMTY0Ni0jZGVmaW5lIEVNSVRfQVRPTUlDKG9wMzIsIG9wNjQpIGRvIHtcdFx0XHRcdFx0XFxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MTY0NzpcdGJwZl9qaXRfcHJvYmVfYXRvbWljX3ByZShqaXQsIGluc24sIFx1MDAyNnByb2JlKTtcdFx0XHRcXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0xNjQ4LVx0Lyoge29wMzJ8b3A2NH0geyV3MHwlc3JjfSwlc3JjLG9mZiglYXJlbmEpICovXHRcdFx0XFxcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE2ODYtXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjE2ODc6XHRcdFx0YnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlKGppdCwgaW5zbiwgXHUwMDI2bG9hZF9wcm9iZSk7XG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE2ODgtXHRcdFx0Lyoge2x5fGxnfSAldzAsb2ZmKCVhcmVuYSkgKi9cbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE3MTktXHRcdGNhc2UgQlBGX0NNUFhDSEc6XG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjE3MjA6XHRcdFx0YnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlKGppdCwgaW5zbiwgXHUwMDI2cHJvYmUpO1xuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0xNzIxLVx0XHRcdC8qIDA6IHtjc3l8Y3NnfSAlYjAsJXNyYyxvZmYoJWFyZW5hKSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAxMAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgSklUIENvbXBpbGF0aW9uIEZsb3cqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MgdHJhY2VzIGEgdmVyeSBzcGVjaWZpYyBjaGFpbiBvZiBjYWxscy4gYGJwZl9qaXRfcHJvYmVfYXRvbWljX3ByZWAgaXMgZGVmaW5lZCBhcyBgc3RhdGljYCwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBgYnBmX2ppdF9pbnNuYC4gSW4gdHVybiwgYGJwZl9qaXRfaW5zbmAgaXMgYWxzbyBgc3RhdGljYCwgYW5kIHRoZSBvbmx5IHBsYWNlIGl0IGlzIGNhbGxlZCBpcyB3aXRoaW4gYGJwZl9qaXRfcHJvZ2AuIEZ1cnRoZXIgZG93biB0aGUgbGluZSwgd2UgaGF2ZSB0aGUgYHN0YXRpY2AgZnVuY3Rpb24gYGJwZl9qaXRfcHJvZ2AsIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IGBicGZfaW50X2ppdF9jb21waWxlYC4gTm93LCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgZGVmaW5lZCBhcyBnbG9iYWwsIHNvIGl0IG11c3QgYmUgdGhlIGVudHJ5IHBvaW50IHRvIHRoaXMgd2hvbGUgSklUIGNvbXBpbGF0aW9uIHNlcXVlbmNlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgIHRvIGxvb2sgYXQgaG93IGBicGZfaml0X2VtaXRfaW5zbmAgaXMgdXNlZCBpbiB0aGlzIGNvbXBpbGF0aW9uLiBUaGlzIHNlZW1zIGxpa2UgYSBwcmV0dHkgc3RhbmRhcmQgc3RhdGljIHRvIGdsb2JhbCBwcm9ncmVzc2lvbiwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byBjb25maXJtIEkmIzM5O20gZm9sbG93aW5nIHRoZSBjb3JyZWN0IGNoYWluIG9mIGV2ZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9lbWl0X2luc24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTMyND1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNjAtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzNjE6aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNjItXHRcdCAgICAgIGJvb2wgZXh0cmFfcGFzcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2MTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gQlBGIEpJVCBDb21waWxhdGlvbioqCgpPa2F5LCBzbyBgYnBmX2ppdF9lbWl0X2luc25gIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIGEga2V5IHBpZWNlIGluIHRoaXMgQlBGIEpJVCBwdXp6bGUuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHdoYXQgaW50ZXJhY3RzIHdpdGggaXQuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlc2UgY29yZSBzeW1ib2xzOiBgYnBmX2luc25fZGVmMzJgLCBgZXhfaGFuZGxlcl9icGZgLCBhbmQgYGJwZl9qaXRfZW1pdF9pbnNuYCBpdHNlbGYsIG9mIGNvdXJzZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZXkgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBJJiMzOTttIGdvaW5nIHRvIHNldCBhc2lkZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgYW5kIGBicGZfY2hlY2tgIGZvciBub3c7IHRoZXkgc2VlbSBhIGJpdCB0b28gZ2VuZXJpYy4KCkdpdmVuIHRoYXQgSSYjMzk7bSB3b3JraW5nIHdpdGggQVJNNjQgYXJjaGl0ZWN0dXJlLCBJIHNob3VsZCBhbHNvIGNoZWNrIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGxvY2F0aW5nIHRoZSBgYnVpbGRfaW5zbmAgZnVuY3Rpb24gd2l0aGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYXJjaGl0ZWN0dXJhbCBzcGVjaWZpY3Mgb2YgaG93IHRoZXNlIGluc3RydWN0aW9ucyBhcmUgY29uc3RydWN0ZWQgYW5kIGhhbmRsZWQgd2l0aGluIHRoZSBKSVQgY29tcGlsZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2J1aWxkX2luc24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMjQ3PXN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX3N0b3JlX2ltbShzMzIgaW1tLCBzMTYgYnBmX29mZiwgY29uc3QgdTggdG1wLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyNjQtICovXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMjY1OnN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjY2LVx0XHQgICAgICBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIGV4dHJhX3Bhc3MpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MjAxMj1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBleHRyYV9wYXNzKVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIwMzAtXHRcdGN0eC1cdTAwM2VvZmZzZXRbaV0gPSBjdHgtXHUwMDNlaWR4O1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MjAzMTpcdFx0cmV0ID0gYnVpbGRfaW5zbihlbnYsIGluc24sIGN0eCwgZXh0cmFfcGFzcyk7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMDMyLVx0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzQ2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBKSVQgQ29tcGlsYXRpb24gRmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhpcyBCUEYgSklUIGNvbXBpbGF0aW9uIHdvcmtzLiBSaWdodCwgYGJ1aWxkX2luc25gIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIG9ubHkgdmlzaWJsZSB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIFRoYXQgbWFrZXMgZGVidWdnaW5nIGEgYml0IG1vcmUgZm9jdXNlZCwgd2hpY2ggaXMgZ29vZC4gVGhlIGtleSB0aGluZyBpcyB0aGF0IGBidWlsZF9pbnNuYCBpcyAqY2FsbGVkKiBieSBgYnVpbGRfYm9keWAuIEFuZCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgYGJ1aWxkX2JvZHlgIGlzIGludm9rZWQgYnkgYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBUaGF0IGdpdmVzIG1lIGEgcm91Z2ggaWRlYSBvZiB0aGUgY2FsbCBjaGFpbjogYGJwZl9pbnRfaml0X2NvbXBpbGVgIC0mZ3Q7IGBidWlsZF9ib2R5YCAtJmd0OyBgYnVpbGRfaW5zbmAuCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgY29tcGlsYXRpb24gcHJvY2VzcywgbGV0IG1lIGNoZWNrIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIGhlYWQgb3ZlciB0byBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYGRvX2ppdGAgdGhlcmUsIHRoYXQgdXN1YWxseSBjb250YWlucyB0aGUgY29yZSBKSVQgY29tcGlsYXRpb24gcm91dGluZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnQgZm9yIFg4NiBzcGVjaWZpYyBhc3NlbWJseSBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19qaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE2OTE9c3RhdGljIGludCBlbWl0X2tmdW5jX2FyZW5hX2FyZ3Moc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZyxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTcyOC1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNzI5OnN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNzMwLVx0XHQgIHU4ICpyd19pbWFnZSwgaW50IG9sZHByb2dsZW4sIHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCBib29sIGptcF9wYWRkaW5nKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zOTYyPXN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMzktXHRcdFx0cGFkZGluZyA9IHRydWU7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6NDA0MDpcdFx0cHJvZ2xlbiA9IGRvX2ppdChlbnYsIHByb2csIGFkZHJzLCBpbWFnZSwgcndfaW1hZ2UsIG9sZHByb2dsZW4sXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDA0MS1cdFx0XHRcdCBcdTAwMjZjdHgsIHBhZGRpbmcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA0NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIEpJVCBDb21waWxhdGlvbiBGb2N1cyBTeW1ib2xzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hpY2ggc3ltYm9scyBhcmUgdGhlIG1vc3QgcmVsZXZhbnQgdG8gZm9jdXMgb24gaGVyZSwgY29uc2lkZXJpbmcgYGRvX2ppdGAgaXMgc3RhdGljIGFuZCBjYWxsZWQgYnkgYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBUaGUgaW5pdGlhbCBjYW5kaWRhdGVzIHRoYXQgc3ByaW5nIHRvIG1pbmQgYXJlIGBicGZfaW5zbl9kZWYzMmAsIGBleF9oYW5kbGVyX2JwZmAsIGBicGZfaml0X2VtaXRfaW5zbmAsIGFuZCBgYnBmX2ludF9qaXRfY29tcGlsZWAuCgpMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgYnBmX2ludF9qaXRfY29tcGlsZWAuIFRoYXQgc2VlbXMgbGlrZSBhIHNvbGlkIGNob2ljZSBzaW5jZSBpdCYjMzk7cyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIEpJVCBjb21waWxlciBpdHNlbGYuIGBicGZfY2hlY2tgIGlzIGFsc28gYXBwZWFsaW5nIGFzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpZXIsIHRob3VnaCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBwcm9tcHQmIzM5O3MgcHJlZmVyZW5jZSBmb3Igbm9uLWhvdHBhdGggQVBJIGVudHJ5cG9pbnRzLiBCb3RoIHNlZW0gdG8gZml0IHRoZSBiaWxsIGFzIHRoZXkgYXJlIGNhbGxlZCBvbiBwcm9ncmFtIGxvYWQuCgpMb29raW5nIGNsb3NlciwgSSYjMzk7bGwgZXhhbWluZSB0aGUgY2FsbHMgdG8gdGhlIG90aGVyIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGZ1bmN0aW9uczoKKiAgIGBicGZfaW5zbl9kZWYzMmA6IERpZ2dpbmcgaW50byBga2VybmVsL2JwZi9maXh1cHMuY2AsIHRoaXMgaXMgdXNlZCBpbiBgYWRqdXN0X2luc25fYXV4X2RhdGFgIGFuZCBgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyYC4gQm90aCBvZiB0aG9zZSBhcmUgY2FsbGVkIGZyb20gYGJwZl9jaGVja2AuCiogICBgZXhfaGFuZGxlcl9icGZgOiBDaGVja2luZyBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCBhbmQgYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYCwgdGhpcyBpcyBpbnZvbHZlZCBpbiBleGNlcHRpb24gaGFuZGxpbmcgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiwgc28gaXQmIzM5O3MgY2xlYXJseSByZWxldmFudC4KKiAgIGBicGZfaml0X2VtaXRfaW5zbmA6IFRoaXMgaXMgY2FsbGVkIGJ5IGBicGZfaW50X2ppdF9jb21waWxlYCBpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuCiogICBgYnBmX2ludF9qaXRfY29tcGlsZWA6IEluIGBhcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jYCwgdGhpcyBpcyBhZ2FpbiB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludC4KClNvLCB0aGUgZm9jdXMgc3ltYm9scyBhcmUgZGVmaW5pdGVseTogYGJwZl9pbnNuX2RlZjMyYCwgYGV4X2hhbmRsZXJfYnBmYCwgYGJwZl9qaXRfZW1pdF9pbnNuYCwgYW5kIGBicGZfaW50X2ppdF9jb21waWxlYC4gSSYjMzk7bSBnb2luZyB0byBhZGQgYGJwZl9jaGVja2AgaW4gYXMgd2VsbCBiZWNhdXNlIGl0JiMzOTtzIGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIHRoZSB2ZXJpZmllciwgYW5kIGl0IGxvb2tzIGxpa2UgYSBuYXR1cmFsIGNvbXBhbmlvbiB0byB0aGUgSklUIGNvbXBpbGVyJiMzOTtzIGVudHJ5IHBvaW50LgoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZ2l2ZW4sIG9idmlvdXNseS4gQW5kIGBDT05GSUdfQlBGX0pJVGAgaXMgZXNzZW50aWFsIGZvciB0aGUgSklUIGNvbXBpbGVyIGNoYW5nZXMuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGF0IGBrZXJuZWwvYnBmL0tjb25maWdgIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBlbHNlIGNyaXRpY2FsIHJlbGF0ZWQgdG8gQlBGIHN5c2NhbGxzIGFuZCBKSVQgY29tcGlsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MDAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBCUEYgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGVzZSBCUEYgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkIGluIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGluIHRoZSBtb3JlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmlsZXMuIExldCYjMzk7cyBzZWUsIEJQRiBpcyBwcmV0dHkgZnVuZGFtZW50YWwgbm93LCBzbyBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIGl0cyBjb3JlIGRlZmluaXRpb24gaW4gZWl0aGVyIGBrZXJuZWwvYnBmL0tjb25maWdgIG9yIHBvc3NpYmx5IGV2ZW4gdGhlIG1haW4gaW5pdGlhbGl6YXRpb24gY29uZmlnLCBgaW5pdC9LY29uZmlnYC4gSXQmIzM5O3MgcHJldHR5IGxpa2VseSB0aGF0JiMzOTtsbCBiZSB3aGVyZSBJIGZpbmQgdGhlIG5lY2Vzc2FyeSBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjYyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIEJQRl9KSVQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3RhdHVzIG9mIEJQRiBKSVQgY29tcGlsYXRpb24gd2l0aGluIHRoaXMga2VybmVsIHNldHVwLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoZSBzdGFuZGFyZCBwcmFjdGljZSwgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBmb3IgdGhlIEJQRiBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gaGVhZGluZyB0aGVyZSB0byB2ZXJpZnkgdGhlIGV4aXN0ZW5jZSwgY3VycmVudCBzdGF0ZSwgYW5kIGFueSBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIGBCUEZfSklUYC4gVGhpcyBpcyB0aGUgYmVkcm9jazsgd2l0aG91dCBrbm93aW5nIHRoZSBLY29uZmlnIHNldHRpbmdzLCBJIGNhbiYjMzk7dCBldmVuIGJlZ2luIHRvIHRyb3VibGVzaG9vdCBhbnkgcmVsYXRlZCBpc3N1ZXMgb3Igb3B0aW1pemUgQlBGIHVzYWdlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxua2VybmVsL2JwZi9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjA4NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipDaGVja2luZyBCUEYgQ29uZmlndXJhdGlvbnMgYW5kIEF0b21pYyBPcGVyYXRpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2UgQlBGIGNvbmZpZ3VyYXRpb25zOiBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMsIGJ1dCBJIGFsd2F5cyB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBOb3csIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIG1pZ2h0IGJlIGNvbm5lY3RlZCB0byB0aGUgYXRvbWljIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCBzaW5jZSB0aG9zZSBhcmUgYWx3YXlzIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXJlYS4gSXTigJlzIGEgZ29vZCB0aW1lIHRvIGRvdWJsZS1jaGVjayBpZiBgYnBmX2F0b21pY19sb2FkX3JlZ2AgaXMgYmVpbmcgdXRpbGl6ZWQgYW55d2hlcmUgZWxzZSB3aXRoaW4gdGhlIGNvZGViYXNlLCBiZXlvbmQgdGhlIGltbWVkaWF0ZSBjb250ZXh0IEkmIzM5O20gY3VycmVudGx5IHdvcmtpbmcgaW4uIEJldHRlciB0byBiZSB0aG9yb3VnaCBhbmQgdmVyaWZ5IHRoYXQgdXNhZ2UgcGF0dGVybnMgbWF0Y2ggbXkgY3VycmVudCB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfYXRvbWljX2xvYWRfcmVnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTEyNjU9c3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xOTk0LVx0XHRcdCAqL1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTk5NTpcdFx0XHRpbnQgbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTk5Ni1cbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzNjE9aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMDAxLVx0XHRcdCAqL1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMDAyOlx0XHRcdGludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIwMDMtXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz03NzM9c3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03OTItXHQgKi9cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6NzkzOlx0bG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03OTQtXHRpZiAobG9hZF9yZWcgXHUwMDNlPSAwKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0yMjg1PXN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI0MDAtXHRcdFx0XHRcdCAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI0MDE6XHRcdFx0XHRcdGludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQwMi1cbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTQwOT1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX2F0b21pY19pc19sb2FkX2FjcShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC00MjMtICovXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjQyNDpzdGF0aWMgaW5saW5lIGludCBicGZfYXRvbWljX2xvYWRfcmVnKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNDI1LXtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTQ0PXN0YXRpYyBpbnQgaW5zbl9kZWZfcmVnbm8oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNTEtXHRjYXNlIEJQRl9TVFg6XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjUyOlx0XHRyZXR1cm4gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtNTMtXHRkZWZhdWx0OlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NDQwPXN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3JtdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDkxLVx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ5MjpcdGxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDkzLVx0aWYgKGxvYWRfcmVnIFx1MDAzZT0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzIyOAoJCQkJCQkJb3V0cHV0OiAyMDUKCQkJCQkJCXRob3VnaHRzOiA0NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgQXRvbWljIE9wZXJhdGlvbiBFeGNlcHRpb24gSGFuZGxpbmcgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBidWcgaW4gQlBGIGFyZW5hIGV4Y2VwdGlvbiBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYXRvbWljIG9wZXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgaW1wb3J0YW50IOKAkyBhdG9taWMgb3BlcmF0aW9ucyBhcmUgY3JpdGljYWwgZm9yIGNvbmN1cnJlbmN5IGFuZCBkYXRhIGludGVncml0eSwgYW5kIGEgYnVnIGluIHRoZWlyIGV4Y2VwdGlvbiBoYW5kbGluZyBjb3VsZCBsZWFkIHRvIHNpZ25pZmljYW50IHByb2JsZW1zLgoKSXQgc2VlbXMgdGhlIGlzc3VlIGNlbnRlcnMgYXJvdW5kIHdoYXQgaGFwcGVucyB3aGVuIGFuIGF0b21pYyBpbnN0cnVjdGlvbiBmYXVsdHMuIFRoZSBleGNlcHRpb24gaGFuZGxlciBuZWVkcyB0byBjb3JyZWN0bHkgY2xlYXIgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGluIHRoZXNlIGNhc2VzLiBGb3IgaW5zdHJ1Y3Rpb25zIGxpa2UgYEJQRl9DTVBYQ0hHYCwgaXQmIzM5O3MgYHIwYCwgYW5kIGZvciBgQlBGX0ZFVENIYCwgaXQgaXMgYHNyY19yZWdgLiBUaGUgcGF0Y2ggYXBwYXJlbnRseSB1c2VzIGBicGZfYXRvbWljX2xvYWRfcmVnYCB0byBjb3JyZWN0bHkgaWRlbnRpZnkgdGhlIHJlZ2lzdGVyIHRvIGNsZWFyLCB3aGljaCBzb3VuZHMgcmVhc29uYWJsZS4gSXQgYWxzbyBjb3JyZWN0bHkgbWFya3MgdGhlIGFjY2VzcyBhcyBhIHdyaXRlIGZvciByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb25zLCB3aGljaCBtYWtlcyBzZW5zZS4KCkZ1bmN0aW9uYWxseSwgdGhpcyBpbXBhY3RzIHRoZSBCUEYgSklUIGNvbXBpbGVyIGFuZCB2ZXJpZmllciwgd2hpY2ggaXMgdG8gYmUgZXhwZWN0ZWQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4LiBUaGUgbm90ZXMgaW5kaWNhdGUgaXQgaXMgd29ydGggZnV6emluZywgd2hpY2ggSSBhZ3JlZSB3aXRoIC0gYXRvbWljIG9wZXJhdGlvbnMgYXJlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgZWRnZSBjYXNlcy4KCkkgbmVlZCB0byBkaWcgZGVlcGVyLiBNeSBmb2N1cyBzeW1ib2xzIHdpbGwgYmUgYGJwZl9pbnNuX2RlZjMyYCwgYGV4X2hhbmRsZXJfYnBmYCwgYGJwZl9qaXRfZW1pdF9pbnNuYCwgYGJwZl9pbnRfaml0X2NvbXBpbGVgLCBhbmQgYGJwZl9jaGVja2AuCgpgYnBmX2ludF9qaXRfY29tcGlsZWAgc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgSklUIGNvbXBpbGF0aW9uIGFjcm9zcyBhbGwgYXJjaGl0ZWN0dXJlcywgd2hpY2ggY29uZmlybXMgbXkgdW5kZXJzdGFuZGluZy4gYGV4X2hhbmRsZXJfYnBmYCBpcyBzcGVjaWZpYyB0byB4ODYgYW5kIGFybTY0LCBzbyBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIGBicGZfaW5zbl9kZWYzMmAgaXMgdXNlZCBpbiB0aGUgdmVyaWZpZXIgYW5kIGZpeHVwcywgYW5kIEkgd2lsbCBjaGVjayBpdCBpbiB0aGUgY29udGV4dCBvZiB0aGUgZml4dXBzLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgYGJwZl9pbnNuX2RlZjMyYCBhbmQgcmVsYXRlZCBjYWxscy4gSW4gYGtlcm5lbC9icGYvZml4dXBzLmNgLCBpdCBzZWVtcyBpdCBjYWxscyBgaW5zbl9kZWZfcmVnbm9gLCB3aGljaCB0aGVuIGNhbGxzIGBicGZfYXRvbWljX2xvYWRfcmVnYC4gVGhpcyBjb25maXJtcyB0aGF0IGBicGZfaW5zbl9kZWYzMmAgaXMgYSBnb29kIGNob2ljZSBmb3IgaW52ZXN0aWdhdGlvbi4KCkkmIzM5O2xsIGFsc28gY2hlY2sgYGJwZl9jaGVja2AgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoaXMgaXMgdGhlIG1haW4gdmVyaWZpZXIgZW50cnkgcG9pbnQuIFRoZSBzdGF0aWMgZnVuY3Rpb24gYGNoZWNrX2F0b21pY19ybXdgIGlzIGNhbGxlZCBkdXJpbmcgdmVyaWZpY2F0aW9uLCB3aGljaCBpcyByZWxldmFudCB0byBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2luc25fZGVmMzImIzM0OywKICAgICYjMzQ7ZXhfaGFuZGxlcl9icGYmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9lbWl0X2luc24mIzM0OywKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXJzICh4ODYsIGFybTY0LCByaXNjdiwgczM5MCkgYW5kIHRoZSBCUEYgdmVyaWZpZXIgdG8gY29ycmVjdGx5IGhhbmRsZSBleGNlcHRpb25zIGZvciBhdG9taWMgb3BlcmF0aW9ucyBpbiB0aGUgQlBGIGFyZW5hLiBJdCBpbnRyb2R1Y2VzIGBicGZfYXRvbWljX2xvYWRfcmVnYCB0byBpZGVudGlmeSB0aGUgcmVnaXN0ZXIgdGhhdCBuZWVkcyB0byBiZSBjbGVhcmVkIHdoZW4gYW4gYXRvbWljIGluc3RydWN0aW9uIGZhdWx0cywgYW5kIGVuc3VyZXMgdGhhdCByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb25zIGFyZSBjb3JyZWN0bHkgcmVwb3J0ZWQgYXMgd3JpdGVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQlBGIHN1YnN5c3RlbSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW5zbl9kZWYzMiYjMzQ7LAogICAgJiMzNDtleF9oYW5kbGVyX2JwZiYjMzQ7LAogICAgJiMzNDticGZfaml0X2VtaXRfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlcnMgKHg4NiwgYXJtNjQsIHJpc2N2LCBzMzkwKSBhbmQgdGhlIEJQRiB2ZXJpZmllciB0byBjb3JyZWN0bHkgaGFuZGxlIGV4Y2VwdGlvbnMgZm9yIGF0b21pYyBvcGVyYXRpb25zIGluIHRoZSBCUEYgYXJlbmEuIEl0IGludHJvZHVjZXMgYGJwZl9hdG9taWNfbG9hZF9yZWdgIHRvIGlkZW50aWZ5IHRoZSByZWdpc3RlciB0aGF0IG5lZWRzIHRvIGJlIGNsZWFyZWQgd2hlbiBhbiBhdG9taWMgaW5zdHJ1Y3Rpb24gZmF1bHRzLCBhbmQgZW5zdXJlcyB0aGF0IHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbnMgYXJlIGNvcnJlY3RseSByZXBvcnRlZCBhcyB3cml0ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc3Vic3lzdGVtKSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDA6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB0aGUgQlBGIGV4Y2VwdGlvbiBoYW5kbGVyIGZvciBhcmVuYSBhY2Nlc3NlcyB0byBjb3JyZWN0bHkgaWRlbnRpZnkgcmVhZC1tb2RpZnktd3JpdGUgYXRvbWljIG9wZXJhdGlvbnMgKGxpa2UgQlBGX1hDSEcgYW5kIEJQRl9DTVBYQ0hHKSBhcyB3cml0ZXMsIGFuZCB0byBwcm9wZXJseSBjbGVhciB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgKGUuZy4sIEJQRl9SRUdfMCBmb3IgQ01QWENIRykgd2hlbiBhIHBhZ2UgZmF1bHQgb2NjdXJzLiBJZiB0aGUgcmVnaXN0ZXIgaXMgbm90IGNsZWFyZWQsIHRoZSBCUEYgcHJvZ3JhbSBzaW1wbHkgcmV0YWlucyB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhhdCByZWdpc3Rlci4gVGhpcyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSwgbm9yIGRvZXMgaXQgZXhwb3NlIGtlcm5lbCBzdGFjay9oZWFwIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgaXNzdWUgaXMgYSBsb2dpYyBidWcgaW4gQlBGIEpJVCBleGNlcHRpb24gaGFuZGxpbmcsIHdoaWNoIGRvZXMgbm90IGludHJvZHVjZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBCUEYgc2VsZnRlc3RzIChhcyBpbmNsdWRlZCBpbiB0aGUgcGF0Y2gpIGFyZSBzdWZmaWNpZW50IHRvIHZlcmlmeSB0aGUgZml4LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNGFhNzUyMWY4NTgwM2ZkM2ExYmFlMTQ1MTlkYTBhYmRjMWRmMDFmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMDA6MzQ6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IGQxNGQyOTdlYmI5NjcuLjc0YjQwODM3OTFkYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC0xMDgyLDIzICYjNDM7MTA4MiwyNyBAQCBzdGF0aWMgdm9pZCBidWlsZF9lcGlsb2d1ZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIHdhc19jbGFzc2ljKQogICoKICAqIEJpdCBsYXlvdXQgb2YgYGZpeHVwYCAoMzItYml0KToKICAqCi0gKiAmIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzsKLSAqIHwgICAzMS0yNyAgIHwgMjYtMjIgIHwgICAgIDIxICAgIHwgICAyMC0xNiAgIHwgICAxNS0wICAgfAotICogfCAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8Ci0gKiB8IEZJWFVQX1JFRyB8IFVudXNlZCB8IEFSRU5BX0FDQyB8IEFSRU5BX1JFRyB8ICBPRkZTRVQgIHwKLSAqICYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOwomIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOwomIzQzOyAqIHwgICAzMS0yNyAgIHwgMjYtMjMgIHwgICAgICAyMiAgICAgfCAgICAgMjEgICAgfCAgIDIwLTE2ICAgfCAgIDE1LTAgICB8CiYjNDM7ICogfCAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwKJiM0MzsgKiB8IEZJWFVQX1JFRyB8IFVudXNlZCB8IEFSRU5BX1dSSVRFIHwgQVJFTkFfQUNDIHwgQVJFTkFfUkVHIHwgIE9GRlNFVCAgfAomIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOwogICoKICAqIC0gT0ZGU0VUICgxNiBiaXRzKTogT2Zmc2V0IHVzZWQgdG8gY29tcHV0ZSBhZGRyZXNzIGZvciBMb2FkL1N0b3JlIGluc3RydWN0aW9uLgogICogLSBBUkVOQV9SRUcgKDUgYml0cyk6IFJlZ2lzdGVyIHRoYXQgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGFkZHJlc3MgZm9yIGxvYWQvc3RvcmUgd2hlbgogICogICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc2luZyB0aGUgYXJlbmEgcmVnaW9uLgogICogLSBBUkVOQV9BQ0NFU1MgKDEgYml0KTogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIGFjY2Vzc2VkIHRoZSBhcmVuYSByZWdpb24uCiYjNDM7ICogLSBBUkVOQV9XUklURSAoMSBiaXQpOiBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24gd3JvdGUgdG8gdGhlIGFyZW5hIHJlZ2lvbi4KJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIGluZGVwZW5kZW50IG9mIEZJWFVQX1JFRywgc2luY2UgYSByZWFkLW1vZGlmeS13cml0ZSBib3RoIHdyaXRlcyB0bwomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5IGFuZCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gYSByZWdpc3Rlci4KICAqIC0gRklYVVBfUkVHICg1IGJpdHMpOiBEZXN0aW5hdGlvbiByZWdpc3RlciBmb3IgdGhlIGxvYWQgaW5zdHJ1Y3Rpb24gKGNsZWFyZWQgb24gZmF1bHQpIG9yIHNldCB0bwotICogICAgICAgICAgICAgICAgICAgICAgIERPTlRfQ0xFQVIgaWYgaXQgaXMgYSBzdG9yZSBpbnN0cnVjdGlvbi4KJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgRE9OVF9DTEVBUiBpZiB0aGUgaW5zdHJ1Y3Rpb24gZG9lcyBub3QgcmVhZCBpbnRvIGEgcmVnaXN0ZXIuCiAgKi8KIAogI2RlZmluZSBCUEZfRklYVVBfT0ZGU0VUX01BU0sgICAgICBHRU5NQVNLKDE1LCAwKQogI2RlZmluZSBCUEZfRklYVVBfQVJFTkFfUkVHX01BU0sgICBHRU5NQVNLKDIwLCAxNikKICNkZWZpbmUgQlBGX0FSRU5BX0FDQ0VTUyAgICAgICAgICAgQklUKDIxKQomIzQzOyNkZWZpbmUgQlBGX0FSRU5BX1dSSVRFICAgICAgICAgICAgQklUKDIyKQogI2RlZmluZSBCUEZfRklYVVBfUkVHX01BU0sJR0VOTUFTSygzMSwgMjcpCiAjZGVmaW5lIERPTlRfQ0xFQVIgNSAvKiBVbnVzZWQgQVJNNjQgcmVnaXN0ZXIgZnJvbSBCUEYmIzM5O3MgUE9WICovCiAKQEAgLTExMDksNyAmIzQzOzExMTMsNyBAQCBib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LAogCXMxNiBvZmYgPSBGSUVMRF9HRVQoQlBGX0ZJWFVQX09GRlNFVF9NQVNLLCBleC0mZ3Q7Zml4dXApOwogCWludCBhcmVuYV9yZWcgPSBGSUVMRF9HRVQoQlBGX0ZJWFVQX0FSRU5BX1JFR19NQVNLLCBleC0mZ3Q7Zml4dXApOwogCWJvb2wgaXNfYXJlbmEgPSAhIShleC0mZ3Q7Zml4dXAgJmFtcDsgQlBGX0FSRU5BX0FDQ0VTUyk7Ci0JYm9vbCBpc193cml0ZSA9IChkc3RfcmVnID09IERPTlRfQ0xFQVIpOwomIzQzOwlib29sIGlzX3dyaXRlID0gISEoZXgtJmd0O2ZpeHVwICZhbXA7IEJQRl9BUkVOQV9XUklURSk7CiAJdW5zaWduZWQgbG9uZyBhZGRyOwogCiAJaWYgKGlzX2FyZW5hKSB7CkBAIC0xMTMyLDcgJiM0MzsxMTM2LDcgQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLAogewogCW9mZl90IGluc19vZmZzZXQ7CiAJczE2IG9mZiA9IGluc24tJmd0O29mZjsKLQlib29sIGlzX2FyZW5hOwomIzQzOwlib29sIGlzX2FyZW5hLCBpc193cml0ZTsKIAlpbnQgYXJlbmFfcmVnOwogCXVuc2lnbmVkIGxvbmcgcGM7CiAJc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXg7CkBAIC0xMTgxLDE1ICYjNDM7MTE4NSwxOCBAQCBzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJLyoKIAkgKiBBIGxvYWQtYWNxdWlyZSBpcyBvZiBCUEZfU1RYIGNsYXNzLCBidXQgcmVhZHMgZnJvbSBzcmNfcmVnIGludG8KIAkgKiBkc3RfcmVnIGxpa2UgYSBCUEZfTERYIGRvZXMsIGhlbmNlIGl0IG11c3Qgbm90IGJlIHRyZWF0ZWQgYXMgYSBzdG9yZQotCSAqIGhlcmUuCiYjNDM7CSAqIGhlcmUuIEEgcmVhZC1tb2RpZnktd3JpdGUgY2FycnlpbmcgQlBGX0ZFVENIIGlzIHJlcG9ydGVkIGFzIGEgd3JpdGUKJiM0MzsJICogZXZlbiB0aG91Z2ggaXQgZG9lcyBoYXZlIGEgcmVnaXN0ZXIgdG8gY2xlYXIsIHNlZSB0aGUgY2FsbGVycy4KIAkgKi8KLQlpZiAoQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpICE9IEJQRl9MRFggJmFtcDsmYW1wOyAhYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSkKLQkJZHN0X3JlZyA9IERPTlRfQ0xFQVI7CiYjNDM7CWlzX3dyaXRlID0gQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpICE9IEJQRl9MRFggJmFtcDsmYW1wOwomIzQzOwkJICAgIWJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbik7CiAKIAlleC0mZ3Q7Zml4dXAgPSBGSUVMRF9QUkVQKEJQRl9GSVhVUF9SRUdfTUFTSywgZHN0X3JlZyk7CiAKIAlpZiAoaXNfYXJlbmEpIHsKIAkJZXgtJmd0O2ZpeHVwIHw9IEJQRl9BUkVOQV9BQ0NFU1M7CiYjNDM7CQlpZiAoaXNfd3JpdGUpCiYjNDM7CQkJZXgtJmd0O2ZpeHVwIHw9IEJQRl9BUkVOQV9XUklURTsKIAkJLyoKIAkJICogaW5zbi0mZ3Q7c3JjX3JlZy9kc3RfcmVnIGhvbGRzIHRoZSBhZGRyZXNzIGluIHRoZSBhcmVuYSByZWdpb24gd2l0aCB1cHBlciAzMi1iaXRzCiAJCSAqIGJlaW5nIHplcm8gYmVjYXVzZSBvZiBhIHByZWNlZGluZyBhZGRyX3NwYWNlX2Nhc3QociZsdDtuJmd0OywgMHgwLCAweDEpIGluc3RydWN0aW9uLgpAQCAtMTg4OSw3ICYjNDM7MTg5Niw3IEBAIHN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24KIAkJCWJyZWFrOwogCQl9CiAKLQkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgZHN0KTsKJiM0MzsJCXJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIERPTlRfQ0xFQVIpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAkJYnJlYWs7CkBAIC0xOTU2LDcgJiM0MzsxOTYzLDcgQEAgc3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbgogCQkJYnJlYWs7CiAJCX0KIAotCQlyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgY3R4LCBkc3QpOwomIzQzOwkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgRE9OVF9DTEVBUik7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCQlicmVhazsKQEAgLTE5NzksNyAmIzQzOzE5ODYsMTYgQEAgc3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbgogCQkJcmV0dXJuIHJldDsKIAogCQlpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1BST0JFX0FUT01JQykgewotCQkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgZHN0KTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgbG9hZC1hY3F1aXJlIHJlYWRzIGludG8gZHN0X3JlZywgYW5kIGEgcmVhZC1tb2RpZnktd3JpdGUKJiM0MzsJCQkgKiBjYXJyeWluZyBCUEZfRkVUQ0ggcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIHNyY19yZWcsIG9yIGludG8KJiM0MzsJCQkgKiByMCBmb3IgYSBCUEZfQ01QWENIRy4gQ2xlYXIgdGhhdCByZWdpc3RlciBvbiBmYXVsdCwgdGhlCiYjNDM7CQkJICogcmVtYWluaW5nIGF0b21pY3MgaGF2ZSBubyBkZXN0aW5hdGlvbiByZWdpc3Rlci4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpbnQgbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pOwomIzQzOwomIzQzOwkJCXJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGxvYWRfcmVnICZsdDsgMCA/CiYjNDM7CQkJCQkJICAgIERPTlRfQ0xFQVIgOiBicGYyYTY0W2xvYWRfcmVnXSk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCmluZGV4IDZiOTk3MmIwN2MxYjAuLjI1MDRkZjFmYTExMTggMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYwpAQCAtMTk5MiwxMCAmIzQzOzE5OTIsMTkgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsCiAJCQlyZXQgPSBlbWl0X2F0b21pY19ybXcocmQsIHJzLCBpbnNuLCBjdHgpOwogCiAJCS8qIHJldCBjYW4gYmUgMSAoc2tpcC16ZXh0KTsgZXh0YWJsZSBlbnRyeSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZCAqLwotCQlpZiAocmV0ICZndDs9IDApCi0JCQlyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwKLQkJCQlicGZfYXRvbWljX2lzX2xvYWRfYWNxKGluc24pID8gcmQgOiBSRUdfRE9OVF9DTEVBUl9NQVJLRVIsCi0JCQkJY3R4KSA/OiByZXQ7CiYjNDM7CQlpZiAocmV0ICZndDs9IDApIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgbG9hZC1hY3F1aXJlIHJlYWRzIGludG8gZHN0X3JlZywgYW5kIGEgcmVhZC1tb2RpZnktd3JpdGUKJiM0MzsJCQkgKiBjYXJyeWluZyBCUEZfRkVUQ0ggcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIHNyY19yZWcsIG9yIGludG8KJiM0MzsJCQkgKiByMCBmb3IgYSBCUEZfQ01QWENIRy4gQ2xlYXIgdGhhdCByZWdpc3RlciBvbiBmYXVsdCwgdGhlCiYjNDM7CQkJICogcmVtYWluaW5nIGF0b21pY3MgaGF2ZSBubyBkZXN0aW5hdGlvbiByZWdpc3Rlci4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpbnQgbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pOwomIzQzOwomIzQzOwkJCXJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBsb2FkX3JlZyAmbHQ7IDAgPwomIzQzOwkJCQkJUkVHX0RPTlRfQ0xFQVJfTUFSS0VSIDogcmVnbWFwW2xvYWRfcmVnXSwKJiM0MzsJCQkJCWN0eCkgPzogcmV0OwomIzQzOwkJfQogCiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMKaW5kZXggYjYwODc3NDc4YjQ1ZC4uYzQ2ODcyYjA3MWNlNyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC03NzQsNiAmIzQzOzc3NCw4IEBAIHN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfYXRvbWljX3ByZShzdHJ1Y3QgYnBmX2ppdCAqaml0LAogCQkJCSAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQkJCSAgICAgc3RydWN0IGJwZl9qaXRfcHJvYmUgKnByb2JlKQogewomIzQzOwlpbnQgbG9hZF9yZWc7CiYjNDM7CiAJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9QUk9CRV9BVE9NSUMpCiAJCXJldHVybjsKIApAQCAtNzgzLDYgJiM0Mzs3ODUsMTQgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsCiAJRU1JVDQoMHhiOTA4MDAwMCwgUkVHX1cxLCBpbnNuLSZndDtkc3RfcmVnKTsKIAlwcm9iZS0mZ3Q7YXJlbmFfcmVnID0gUkVHX1cxOwogCXByb2JlLSZndDtwcmcgPSBqaXQtJmd0O3ByZzsKJiM0MzsJLyoKJiM0MzsJICogQSByZWFkLW1vZGlmeS13cml0ZSBjYXJyeWluZyBCUEZfRkVUQ0ggcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvCiYjNDM7CSAqIHNyY19yZWcsIG9yIGludG8gcjAgZm9yIGEgQlBGX0NNUFhDSEcuIENsZWFyIHRoYXQgcmVnaXN0ZXIgb24KJiM0MzsJICogZmF1bHQsIHRoZSByZW1haW5pbmcgYXRvbWljcyBvbmx5IHdyaXRlIG1lbW9yeS4KJiM0MzsJICovCiYjNDM7CWxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTsKJiM0MzsJaWYgKGxvYWRfcmVnICZndDs9IDApCiYjNDM7CQlwcm9iZS0mZ3Q7cmVnID0gcmVnMmhleFtsb2FkX3JlZ107CiB9CiAKIHN0YXRpYyBpbnQgYnBmX2ppdF9wcm9iZV9wb3N0KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsCkBAIC0xNjg0LDYgJiM0MzsxNjk0LDcgQEAgc3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCwKIAkJCWlmIChsb2FkX3Byb2JlLnByZyAhPSAtMSkgewogCQkJCXByb2JlLnByZyA9IGppdC0mZ3Q7cHJnOwogCQkJCXByb2JlLmFyZW5hX3JlZyA9IGxvYWRfcHJvYmUuYXJlbmFfcmVnOwomIzQzOwkJCQlwcm9iZS5yZWcgPSBsb2FkX3Byb2JlLnJlZzsKIAkJCX0KIAkJCWxvb3Bfc3RhcnQgPSBqaXQtJmd0O3ByZzsKIAkJCS8qIDA6IHtjc3l8Y3NnfSAldzAsJXNyYyxvZmYoJWFyZW5hKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IDhkZGRiNWQ3YWYyMWIuLmQ5MjA3NzJhZjdkNWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTE0NzMsMTcgJiM0MzsxNDczLDIwIEBAIHN0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3RfaW5kZXgodTggKipwcHJvZywgdTMyIGF0b21pY19vcCwgdTMyIHNpemUsCiAgKgogICogQml0IGxheW91dCBvZiBgZml4dXBgICgzMi1iaXQpOgogICoKLSAqICYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzsKLSAqIHwgMzEgICAgICAgIHwgMzAtMjQgIHwgICAyMy0xNiAgIHwgICAxNS04ICB8ICAgIDctMCAgIHwKLSAqIHwgICAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgIHwKLSAqIHwgQVJFTkFfQUNDIHwgVW51c2VkIHwgQVJFTkFfUkVHIHwgRFNUX1JFRyB8IElOU05fTEVOIHwKLSAqICYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzsKJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7CiYjNDM7ICogfCAzMSAgICAgICAgfCAzMCAgICAgICAgICB8IDI5LTI0ICB8ICAgMjMtMTYgICB8ICAgMTUtOCAgfCAgICA3LTAgICB8CiYjNDM7ICogfCAgICAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICB8CiYjNDM7ICogfCBBUkVOQV9BQ0MgfCBBUkVOQV9XUklURSB8IFVudXNlZCB8IEFSRU5BX1JFRyB8IERTVF9SRUcgfCBJTlNOX0xFTiB8CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOwogICoKICAqIC0gSU5TTl9MRU4gKDggYml0cyk6IExlbmd0aCBvZiBmYXVsdGluZyBpbnNuIChtYXggeDg2IGluc24gPSAxNSBieXRlcyAoZml0cyBpbiA4IGJpdHMpKS4KICAqIC0gRFNUX1JFRyAgKDggYml0cyk6IE9mZnNldCBvZiBkc3RfcmVnIGZyb20gcmVnMnB0X3JlZ3NbXSAobWF4IG9mZnNldCA9IDExMiAoZml0cyBpbiA4IGJpdHMpKS4KLSAqICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgc2V0IHRvIERPTlRfQ0xFQVIgaWYgdGhlIGluc24gaXMgYSBzdG9yZS4KJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHNldCB0byBET05UX0NMRUFSIGlmIHRoZSBpbnNuIGRvZXMgbm90IHJlYWQgaW50byBhIHJlZ2lzdGVyLgogICogLSBBUkVOQV9SRUcgKDggYml0cyk6IE9mZnNldCBvZiB0aGUgcmVnaXN0ZXIgdGhhdCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUKICAqICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzIGZvciBsb2FkL3N0b3JlIHdoZW4gYWNjZXNzaW5nIHRoZSBhcmVuYSByZWdpb24uCiYjNDM7ICogLSBBUkVOQV9XUklURSAoMSBiaXQpOiBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24gd3JvdGUgdG8gdGhlIGFyZW5hIHJlZ2lvbi4KJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIGluZGVwZW5kZW50IG9mIERTVF9SRUcsIHNpbmNlIGEgcmVhZC1tb2RpZnktd3JpdGUgYm90aCB3cml0ZXMgdG8KJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSBhbmQgcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIGEgcmVnaXN0ZXIuCiAgKiAtIEFSRU5BX0FDQ0VTUyAoMSBiaXQpOiBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24gYWNjZXNzZWQgdGhlIGFyZW5hIHJlZ2lvbi4KICAqCiAgKiBCaXQgbGF5b3V0IG9mIGBkYXRhYCAoMzItYml0KToKQEAgLTE1MDIsNiAmIzQzOzE1MDUsNyBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX2xkX3N0X2luZGV4KHU4ICoqcHByb2csIHUzMiBhdG9taWNfb3AsIHUzMiBzaXplLAogI2RlZmluZSBGSVhVUF9JTlNOX0xFTl9NQVNLCUdFTk1BU0soNywgMCkKICNkZWZpbmUgRklYVVBfUkVHX01BU0sJCUdFTk1BU0soMTUsIDgpCiAjZGVmaW5lIEZJWFVQX0FSRU5BX1JFR19NQVNLCUdFTk1BU0soMjMsIDE2KQomIzQzOyNkZWZpbmUgRklYVVBfQVJFTkFfV1JJVEUJQklUKDMwKQogI2RlZmluZSBGSVhVUF9BUkVOQV9BQ0NFU1MJQklUKDMxKQogI2RlZmluZSBEQVRBX0FSRU5BX09GRlNFVF9NQVNLCUdFTk1BU0soMzEsIDE2KQogCkBAIC0xNTEwLDcgJiM0MzsxNTE0LDcgQEAgYm9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICp4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIAl1MzIgcmVnID0gRklFTERfR0VUKEZJWFVQX1JFR19NQVNLLCB4LSZndDtmaXh1cCk7CiAJdTMyIGluc25fbGVuID0gRklFTERfR0VUKEZJWFVQX0lOU05fTEVOX01BU0ssIHgtJmd0O2ZpeHVwKTsKIAlib29sIGlzX2FyZW5hID0gISEoeC0mZ3Q7Zml4dXAgJmFtcDsgRklYVVBfQVJFTkFfQUNDRVNTKTsKLQlib29sIGlzX3dyaXRlID0gKHJlZyA9PSBET05UX0NMRUFSKTsKJiM0MzsJYm9vbCBpc193cml0ZSA9ICEhKHgtJmd0O2ZpeHVwICZhbXA7IEZJWFVQX0FSRU5BX1dSSVRFKTsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJczE2IG9mZjsKIAl1MzIgYXJlbmFfcmVnOwpAQCAtMjM0OCw2ICYjNDM7MjM1Miw3IEBAIHN0OgkJCWluc25fb2ZmID0gaW5zbi0mZ3Q7b2ZmOwogCQkJCXN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4OwogCQkJCXU4ICpfaW5zbiA9IGltYWdlICYjNDM7IHByb2dsZW4gJiM0MzsgKHN0YXJ0X29mX2xkeCAtIHRlbXApOwogCQkJCXUzMiBhcmVuYV9yZWcsIGZpeHVwX3JlZzsKJiM0MzsJCQkJYm9vbCBpc193cml0ZTsKIAkJCQlzNjQgZGVsdGE7CiAKIAkJCQlpZiAoIWJwZl9wcm9nLSZndDthdXgtJmd0O2V4dGFibGUpCkBAIC0yMzg0LDE1ICYjNDM7MjM4OSwyOSBAQCBzdDoJCQlpbnNuX29mZiA9IGluc24tJmd0O29mZjsKIAkJCQkgICAgYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSkgewogCQkJCQlhcmVuYV9yZWcgPSByZWcycHRfcmVnc1tzcmNfcmVnXTsKIAkJCQkJZml4dXBfcmVnID0gcmVnMnB0X3JlZ3NbZHN0X3JlZ107CiYjNDM7CQkJCQlpc193cml0ZSA9IGZhbHNlOwogCQkJCX0gZWxzZSB7CiYjNDM7CQkJCQkvKgomIzQzOwkJCQkJICogQSBzdG9yZSBoYXMgbm8gZGVzdGluYXRpb24gcmVnaXN0ZXIgdG8gY2xlYXIsCiYjNDM7CQkJCQkgKiBleGNlcHQgZm9yIGEgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCBCUEZfRkVUQ0gsCiYjNDM7CQkJCQkgKiB3aGljaCBhbHNvIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBzcmNfcmVnLCBvcgomIzQzOwkJCQkJICogaW50byByMCBmb3IgYSBCUEZfQ01QWENIRy4gRWl0aGVyIHdheSB0aGUgYWNjZXNzCiYjNDM7CQkJCQkgKiBpcyBzdGlsbCByZXBvcnRlZCBhcyBhIHdyaXRlLgomIzQzOwkJCQkJICovCiYjNDM7CQkJCQlpbnQgbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pOwomIzQzOwogCQkJCQlhcmVuYV9yZWcgPSByZWcycHRfcmVnc1tkc3RfcmVnXTsKLQkJCQkJZml4dXBfcmVnID0gRE9OVF9DTEVBUjsKJiM0MzsJCQkJCWZpeHVwX3JlZyA9IGxvYWRfcmVnICZsdDsgMCA/IERPTlRfQ0xFQVIgOgomIzQzOwkJCQkJCSAgICByZWcycHRfcmVnc1tsb2FkX3JlZ107CiYjNDM7CQkJCQlpc193cml0ZSA9IHRydWU7CiAJCQkJfQogCiAJCQkJZXgtJmd0O2ZpeHVwID0gRklFTERfUFJFUChGSVhVUF9JTlNOX0xFTl9NQVNLLCBwcm9nIC0gc3RhcnRfb2ZfbGR4KSB8CiAJCQkJCSAgICBGSUVMRF9QUkVQKEZJWFVQX0FSRU5BX1JFR19NQVNLLCBhcmVuYV9yZWcpIHwKIAkJCQkJICAgIEZJRUxEX1BSRVAoRklYVVBfUkVHX01BU0ssIGZpeHVwX3JlZyk7CiAJCQkJZXgtJmd0O2ZpeHVwIHw9IEZJWFVQX0FSRU5BX0FDQ0VTUzsKJiM0MzsJCQkJaWYgKGlzX3dyaXRlKQomIzQzOwkJCQkJZXgtJmd0O2ZpeHVwIHw9IEZJWFVQX0FSRU5BX1dSSVRFOwogCiAJCQkJZXgtJmd0O2RhdGEgfD0gRklFTERfUFJFUChEQVRBX0FSRU5BX09GRlNFVF9NQVNLLCBpbnNuLSZndDtvZmYpOwogCQkJfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKaW5kZXggNGVkYmE4MTgyZGIxYi4uMTVkODM2ODRjNmU5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCkBAIC00MTQsNiAmIzQzOzQxNCwzMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX2F0b21pY19pc19sb2FkX2FjcShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiAJICAgICAgIGluc24tJmd0O2ltbSA9PSBCUEZfTE9BRF9BQ1E7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEdpdmVuIGFuIGluc3RydWN0aW9uIEBpbnNuLCByZXR1cm4gdGhlIG51bWJlciBvZiB0aGUgQlBGIHJlZ2lzdGVyIHRoYXQgYQomIzQzOyAqIEJQRl9BVE9NSUMgcmVhZHMgdGhlIHZhbHVlIGF0IGl0cyBtZW1vcnkgb3BlcmFuZCBpbnRvLCBvciAtMSBpZiB0aGVyZSBpcwomIzQzOyAqIG5vIHN1Y2ggcmVnaXN0ZXIuIFRoYXQgaXMgdGhlIHJlZ2lzdGVyIGEgQlBGX1BST0JFX0FUT01JQyBoYXMgdG8gY2xlYXIgd2hlbgomIzQzOyAqIHRoZSBhY2Nlc3MgZmF1bHRzLiBMaWtlIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoKSwgQGluc24gaXMgbm90IGFzc3VtZWQgdG8KJiM0MzsgKiBiZSBhIEJQRl9BVE9NSUMgaGVyZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBicGZfYXRvbWljX2xvYWRfcmVnKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbikKJiM0Mzt7CiYjNDM7CWlmIChCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX1NUWCB8fAomIzQzOwkgICAgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9BVE9NSUMgJmFtcDsmYW1wOwomIzQzOwkgICAgIEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9QUk9CRV9BVE9NSUMpKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlzd2l0Y2ggKGluc24tJmd0O2ltbSkgewomIzQzOwljYXNlIEJQRl9MT0FEX0FDUToKJiM0MzsJCXJldHVybiBpbnNuLSZndDtkc3RfcmVnOwomIzQzOwljYXNlIEJQRl9DTVBYQ0hHOgomIzQzOwkJcmV0dXJuIEJQRl9SRUdfMDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAoaW5zbi0mZ3Q7aW1tICZhbXA7IEJQRl9GRVRDSCkgPyBpbnNuLSZndDtzcmNfcmVnIDogLTE7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKiBNZW1vcnkgc3RvcmUsICoodWludCAqKSAoZHN0X3JlZyAmIzQzOyBvZmYxNikgPSBpbW0zMiAqLwogCiAjZGVmaW5lIEJQRl9TVF9NRU0oU0laRSwgRFNULCBPRkYsIElNTSkJCQkJXApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmMKaW5kZXggNjYxZTJkMTNhNjA0Mi4uYzRiZDcwYmVmYmI1YyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9maXh1cHMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCkBAIC00OSwxNiAmIzQzOzQ5LDcgQEAgc3RhdGljIGludCBpbnNuX2RlZl9yZWdubyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiAJY2FzZSBCUEZfU1Q6CiAJCXJldHVybiAtMTsKIAljYXNlIEJQRl9TVFg6Ci0JCWlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfQVRPTUlDIHx8Ci0JCSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfQVRPTUlDKSB7Ci0JCQlpZiAoaW5zbi0mZ3Q7aW1tID09IEJQRl9DTVBYQ0hHKQotCQkJCXJldHVybiBCUEZfUkVHXzA7Ci0JCQllbHNlIGlmIChpbnNuLSZndDtpbW0gPT0gQlBGX0xPQURfQUNRKQotCQkJCXJldHVybiBpbnNuLSZndDtkc3RfcmVnOwotCQkJZWxzZSBpZiAoaW5zbi0mZ3Q7aW1tICZhbXA7IEJQRl9GRVRDSCkKLQkJCQlyZXR1cm4gaW5zbi0mZ3Q7c3JjX3JlZzsKLQkJfQotCQlyZXR1cm4gLTE7CiYjNDM7CQlyZXR1cm4gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gaW5zbi0mZ3Q7ZHN0X3JlZzsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggYWRkM2FmZmM1NzAzNS4uNzNhMmU4YmIxNzgyYSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtNjQ4NSwyMSAmIzQzOzY0ODUsMTYgQEAgc3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCXJldHVybiAtRUFDQ0VTOwogCX0KIAotCWlmIChpbnNuLSZndDtpbW0gJmFtcDsgQlBGX0ZFVENIKSB7Ci0JCWlmIChpbnNuLSZndDtpbW0gPT0gQlBGX0NNUFhDSEcpCi0JCQlsb2FkX3JlZyA9IEJQRl9SRUdfMDsKLQkJZWxzZQotCQkJbG9hZF9yZWcgPSBpbnNuLSZndDtzcmNfcmVnOwotCiYjNDM7CS8qCiYjNDM7CSAqIEEgbmVnYXRpdmUgbG9hZF9yZWcgbWVhbnMgdGhhdCB0aGlzIGluc3RydWN0aW9uIGFjY2Vzc2VzIGEgbWVtb3J5CiYjNDM7CSAqIGxvY2F0aW9uIGJ1dCBkb2VzbiYjMzk7dCBhY3R1YWxseSBsb2FkIGl0IGludG8gYSByZWdpc3Rlci4KJiM0MzsJICovCiYjNDM7CWxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTsKJiM0MzsJaWYgKGxvYWRfcmVnICZndDs9IDApIHsKIAkJLyogY2hlY2sgYW5kIHJlY29yZCBsb2FkIG9mIG9sZCB2YWx1ZSAqLwogCQllcnIgPSBjaGVja19yZWdfYXJnKGVudiwgbG9hZF9yZWcsIERTVF9PUCk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwotCX0gZWxzZSB7Ci0JCS8qIFRoaXMgaW5zdHJ1Y3Rpb24gYWNjZXNzZXMgYSBtZW1vcnkgbG9jYXRpb24gYnV0IGRvZXNuJiMzOTt0Ci0JCSAqIGFjdHVhbGx5IGxvYWQgaXQgaW50byBhIHJlZ2lzdGVyLgotCQkgKi8KLQkJbG9hZF9yZWcgPSAtMTsKIAl9CiAKIAlkc3RfcmVnID0gY3VyX3JlZ3MoZW52KSAmIzQzOyBpbnNuLSZndDtkc3RfcmVnOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYwppbmRleCAxNWRkM2FlMmE4NGI3Li5lNGU5Mzc0MzA5ZTI2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYwpAQCAtMTA1LDYgJiM0MzsxMDUsMTAgQEAgdm9pZCB0ZXN0X3N0cmVhbV9hcmVuYV9mYXVsdF9hZGRyZXNzKHZvaWQpCiAJCXRlc3RfYWRkcmVzcyhza2VsLSZndDtwcm9ncy5zdHJlYW1fYXJlbmFfd3JpdGVfZmF1bHQsICZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtmYXVsdF9hZGRyKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2xvYWRfYWNxdWlyZV9mYXVsdCYjMzQ7KSkKIAkJdGVzdF9hZGRyZXNzKHNrZWwtJmd0O3Byb2dzLnN0cmVhbV9hcmVuYV9sb2FkX2FjcXVpcmVfZmF1bHQsICZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtmYXVsdF9hZGRyKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt4Y2hnX2ZhdWx0JiMzNDspKQomIzQzOwkJdGVzdF9hZGRyZXNzKHNrZWwtJmd0O3Byb2dzLnN0cmVhbV9hcmVuYV94Y2hnX2ZhdWx0LCAmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7ZmF1bHRfYWRkcik7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7Y21weGNoZ19mYXVsdCYjMzQ7KSkKJiM0MzsJCXRlc3RfYWRkcmVzcyhza2VsLSZndDtwcm9ncy5zdHJlYW1fYXJlbmFfY21weGNoZ19mYXVsdCwgJmFtcDtza2VsLSZndDtic3MtJmd0O2ZhdWx0X2FkZHIpOwogCiAJc3RyZWFtX19kZXN0cm95KHNrZWwpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jCmluZGV4IGNmNTUzM2UxMWYzOWMuLjAwYTM3OTMzZTQxMWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMKQEAgLTIyOSw2ICYjNDM7MjI5LDEwNyBAQCBpbnQgc3RyZWFtX2FyZW5hX2xvYWRfYWNxdWlyZV9mYXVsdCh2b2lkICpjdHgpCiAJcmV0dXJuIHZhbDsKIH0KIAomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApCiYjNDM7X19zdGRlcnIoJiMzNDtFUlJPUjogQXJlbmEgV1JJVEUgYWNjZXNzIGF0IHVubWFwcGVkIGFkZHJlc3MgMHh7ey4qfX0mIzM0OykKJiM0MztfX3N0ZGVycigmIzM0O0NQVToge3tbMC05XSYjNDM7fX0gVUlEOiAwIFBJRDoge3tbMC05XSYjNDM7fX0gQ29tbToge3suKn19JiMzNDspCiYjNDM7X19zdGRlcnIoJiMzNDtDYWxsIHRyYWNlOlxuJiMzNDsKJiM0MzsmIzM0O3t7KFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCYjNDM7MHhbMC05YS1mQS1GXSYjNDM7LzB4WzAtOWEtZkEtRl0mIzQzO1xuJiMzNDsKJiM0MzsmIzM0O3xbIFx0XSYjNDM7W15cbl0mIzQzO1xuKSp9fSYjMzQ7KQomIzQzO2ludCBzdHJlYW1fYXJlbmFfeGNoZ19mYXVsdCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pbnNuIHhjaGdfaW5zbiA9IHsKJiM0MzsJCS5jb2RlCSA9IDB4YzMsCS8qIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1cgKi8KJiM0MzsJCS5kc3RfcmVnID0gMSwJCS8qIEJQRl9SRUdfMSAqLwomIzQzOwkJLnNyY19yZWcgPSAyLAkJLyogQlBGX1JFR18yICovCiYjNDM7CQkub2ZmCSA9IDB4N2ZmZiwKJiM0MzsJCS5pbW0JID0gMHhlMSwJLyogQlBGX1hDSEcgKi8KJiM0MzsJfTsKJiM0MzsJc3RydWN0IGJwZl9hcmVuYSAqcHRyID0gKHZvaWQgKikmYW1wO2FyZW5hOwomIzQzOwl1NjQgdXNlcl92bV9zdGFydCwgdmFsOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQcmV2ZW50IEdDQyBib3VuZHMgd2FybmluZzogY2FzdGluZyAmYW1wO2FyZW5hIHRvIHN0cnVjdCBicGZfYXJlbmEgKgomIzQzOwkgKiB0cmlnZ2VycyBib3VuZHMgY2hlY2tpbmcgc2luY2UgdGhlIG1hcCBkZWZpbml0aW9uIGlzIHNtYWxsZXIgdGhhbgomIzQzOwkgKiBzdHJ1Y3QgYnBmX2FyZW5hLiBiYXJyaWVyX3ZhcigpIG1ha2VzIHRoZSBwb2ludGVyIG9wYXF1ZSB0byBHQ0MsCiYjNDM7CSAqIHByZXZlbnRpbmcgdGhlIGJvdW5kcyBhbmFseXNpcy4KJiM0MzsJICovCiYjNDM7CWJhcnJpZXJfdmFyKHB0cik7CiYjNDM7CXVzZXJfdm1fc3RhcnQgPSBwdHItJmd0O3VzZXJfdm1fc3RhcnQ7CiYjNDM7CWZhdWx0X2FkZHIgPSB1c2VyX3ZtX3N0YXJ0ICYjNDM7IDB4N2ZmZjsKJiM0MzsJYnBmX2FkZHJfc3BhY2VfY2FzdCh1c2VyX3ZtX3N0YXJ0LCAwLCAxKTsKJiM0MzsJLyoKJiM0MzsJICogQSByZWFkLW1vZGlmeS13cml0ZSBjYXJyeWluZyBCUEZfRkVUQ0ggd3JpdGVzIHRvIG1lbW9yeSwgc28gdGhlIGZhdWx0CiYjNDM7CSAqIGhhcyB0byBiZSByZXBvcnRlZCBhcyBhIFdSSVRFIGZyb20gdGhlIGRzdF9yZWcgYWRkcmVzcywgYnV0IGl0IGFsc28KJiM0MzsJICogcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIHNyY19yZWcsIHNvIHRoZSBleGNlcHRpb24gaGFuZGxlciBoYXMgdG8KJiM0MzsJICogY2xlYXIgc3JjX3JlZy4gUG9pc29uIGl0IHVwIGZyb250LCB0aGUgcmV0dXJuZWQgdmFsdWUgbXVzdCBiZSAwLgomIzQzOwkgKi8KJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJCSYjMzQ7cjEgPSAlW3VzZXJfdm1fc3RhcnRdOyYjMzQ7CiYjNDM7CQkmIzM0O3IyID0gMTsmIzM0OwomIzQzOwkJJiMzNDsuOGJ5dGUgJVt4Y2hnX2luc25dOyYjMzQ7IC8qIHIyID0geGNoZygodTMyICopKHIxICYjNDM7IDB4N2ZmZiksIHIyKSAqLwomIzQzOwkJJiMzNDslW3ZhbF0gPSByMjsmIzM0OwomIzQzOwkJOiBbdmFsXSAmIzM0Oz1yJiMzNDsgKHZhbCkKJiM0MzsJCTogW3VzZXJfdm1fc3RhcnRdICYjMzQ7ciYjMzQ7ICh1c2VyX3ZtX3N0YXJ0KSwKJiM0MzsJCSAgX19pbW1faW5zbih4Y2hnX2luc24sIHhjaGdfaW5zbikKJiM0MzsJCTogJiMzNDtyMSYjMzQ7LCAmIzM0O3IyJiMzNDsKJiM0MzsJKTsKJiM0MzsJcmV0dXJuIHZhbDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztfX3N0ZGVycigmIzM0O0VSUk9SOiBBcmVuYSBXUklURSBhY2Nlc3MgYXQgdW5tYXBwZWQgYWRkcmVzcyAweHt7Lip9fSYjMzQ7KQomIzQzO19fc3RkZXJyKCYjMzQ7Q1BVOiB7e1swLTldJiM0Mzt9fSBVSUQ6IDAgUElEOiB7e1swLTldJiM0Mzt9fSBDb21tOiB7ey4qfX0mIzM0OykKJiM0MztfX3N0ZGVycigmIzM0O0NhbGwgdHJhY2U6XG4mIzM0OwomIzQzOyYjMzQ7e3soW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcJiM0MzsweFswLTlhLWZBLUZdJiM0MzsvMHhbMC05YS1mQS1GXSYjNDM7XG4mIzM0OwomIzQzOyYjMzQ7fFsgXHRdJiM0MztbXlxuXSYjNDM7XG4pKn19JiMzNDspCiYjNDM7aW50IHN0cmVhbV9hcmVuYV9jbXB4Y2hnX2ZhdWx0KHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24gY21weGNoZ19pbnNuID0gewomIzQzOwkJLmNvZGUJID0gMHhjMywJLyogQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVyAqLwomIzQzOwkJLmRzdF9yZWcgPSAxLAkJLyogQlBGX1JFR18xICovCiYjNDM7CQkuc3JjX3JlZyA9IDIsCQkvKiBCUEZfUkVHXzIgKi8KJiM0MzsJCS5vZmYJID0gMHg3ZmZmLAomIzQzOwkJLmltbQkgPSAweGYxLAkvKiBCUEZfQ01QWENIRyAqLwomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgYnBmX2FyZW5hICpwdHIgPSAodm9pZCAqKSZhbXA7YXJlbmE7CiYjNDM7CXU2NCB1c2VyX3ZtX3N0YXJ0LCB2YWw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFByZXZlbnQgR0NDIGJvdW5kcyB3YXJuaW5nOiBjYXN0aW5nICZhbXA7YXJlbmEgdG8gc3RydWN0IGJwZl9hcmVuYSAqCiYjNDM7CSAqIHRyaWdnZXJzIGJvdW5kcyBjaGVja2luZyBzaW5jZSB0aGUgbWFwIGRlZmluaXRpb24gaXMgc21hbGxlciB0aGFuCiYjNDM7CSAqIHN0cnVjdCBicGZfYXJlbmEuIGJhcnJpZXJfdmFyKCkgbWFrZXMgdGhlIHBvaW50ZXIgb3BhcXVlIHRvIEdDQywKJiM0MzsJICogcHJldmVudGluZyB0aGUgYm91bmRzIGFuYWx5c2lzLgomIzQzOwkgKi8KJiM0MzsJYmFycmllcl92YXIocHRyKTsKJiM0MzsJdXNlcl92bV9zdGFydCA9IHB0ci0mZ3Q7dXNlcl92bV9zdGFydDsKJiM0MzsJZmF1bHRfYWRkciA9IHVzZXJfdm1fc3RhcnQgJiM0MzsgMHg3ZmZmOwomIzQzOwlicGZfYWRkcl9zcGFjZV9jYXN0KHVzZXJfdm1fc3RhcnQsIDAsIDEpOwomIzQzOwkvKgomIzQzOwkgKiBTYW1lIGFzIHRoZSBleGNoYW5nZSBhYm92ZSwgZXhjZXB0IHRoYXQgYSBCUEZfQ01QWENIRyByZWFkcyB0aGUgb2xkCiYjNDM7CSAqIHZhbHVlIGludG8gcjAgcmF0aGVyIHRoYW4gaW50byBzcmNfcmVnLCBzbyByMCBpcyB0aGUgcmVnaXN0ZXIgdGhlCiYjNDM7CSAqIGV4Y2VwdGlvbiBoYW5kbGVyIGhhcyB0byBjbGVhci4gSXQgZG91YmxlcyBhcyB0aGUgY29tcGFyZSB2YWx1ZSwgYnV0CiYjNDM7CSAqIHRoZSBjb21wYXJpc29uIG5ldmVyIGhhcHBlbnMgc2luY2UgdGhlIGFjY2VzcyBmYXVsdHMgZmlyc3QuCiYjNDM7CSAqLwomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkJJiMzNDtyMSA9ICVbdXNlcl92bV9zdGFydF07JiMzNDsKJiM0MzsJCSYjMzQ7cjAgPSAxOyYjMzQ7CiYjNDM7CQkmIzM0O3IyID0gMjsmIzM0OwomIzQzOwkJJiMzNDsuOGJ5dGUgJVtjbXB4Y2hnX2luc25dOyYjMzQ7IC8qIHIwID0gY21weGNoZygodTMyICopKHIxICYjNDM7IDB4N2ZmZiksIHIwLCByMikgKi8KJiM0MzsJCSYjMzQ7JVt2YWxdID0gcjA7JiMzNDsKJiM0MzsJCTogW3ZhbF0gJiMzNDs9ciYjMzQ7ICh2YWwpCiYjNDM7CQk6IFt1c2VyX3ZtX3N0YXJ0XSAmIzM0O3ImIzM0OyAodXNlcl92bV9zdGFydCksCiYjNDM7CQkgIF9faW1tX2luc24oY21weGNoZ19pbnNuLCBjbXB4Y2hnX2luc24pCiYjNDM7CQk6ICYjMzQ7cjAmIzM0OywgJiMzNDtyMSYjMzQ7LCAmIzM0O3IyJiMzNDsKJiM0MzsJKTsKJiM0MzsJcmV0dXJuIHZhbDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgX19ub2lubGluZSB2b2lkIHN1YnByb2codm9pZCkKIHsKIAlpbnQgX19hcmVuYSAqYWRkciA9IChpbnQgX19hcmVuYSAqKTB4ZGVhZGJlZWY7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTcxCgkJCQkJCQlvdXRwdXQ6IDE5MwoJCQkJCQkJdGhvdWdodHM6IDEzNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIEV4Y2VwdGlvbiBIYW5kbGluZyBmb3IgQXRvbWljIEFyZW5hIEFjY2Vzc2VzOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFib3V0IGV4Y2VwdGlvbiBoYW5kbGluZyBpbiBCUEYgSklUIGNvbXBpbGVycywgc3BlY2lmaWNhbGx5IG9uIGFybTY0LCByaXNjdiwgczM5MCwgYW5kIHg4Ni4gVGhlIGNvcmUgaXNzdWUgaXMgaG93IHdlIGRlYWwgd2l0aCBmYXVsdHMgdGhhdCBvY2N1ciBkdXJpbmcgYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbnMgKGxpa2UgYEJQRl9YQ0hHYCwgYEJQRl9DTVBYQ0hHYCkgd2hlbiBhY2Nlc3NpbmcgdGhlIEJQRiBhcmVuYS4gVGhpcyBhcmVuYSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyBzaGFyZWQgbWVtb3J5IGJldHdlZW4gdXNlcnNwYWNlIGFuZCBCUEYgcHJvZ3JhbXMuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O1dhaXQsIGEgZmF1bHQ/IERvZXMgdGhhdCBtZWFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIHJlYWQ/JiMzNDsgQnV0IG5vLCB0aGUgcmVnaXN0ZXIgd291bGRuJiMzOTt0IGNvbnRhaW4gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5ICpwZXIgc2UqLiBUaGUgQ1BVIHJlZ2lzdGVyIHdvdWxkIGp1c3QgaGF2ZSB3aGF0ZXZlciB2YWx1ZSBpdCBoYWQgYmVmb3JlIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbi4gSWYgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGRvZXNuJiMzOTt0IGNsZWFyIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBvbiBhIGZhdWx0LCB0aGUgQlBGIHByb2dyYW0gd291bGQgZWZmZWN0aXZlbHkgJiMzNDtyZS11c2UmIzM0OyB0aGUgcHJldmlvdXMgdmFsdWUuIEJ1dCBpcyB0aGlzIGEgc2VjdXJpdHkgcmlzaywgc3BlY2lmaWNhbGx5LCBhIEtNU0FOLWRldGVjdGFibGUgaXNzdWU/IFRoZSBCUEYgdmVyaWZpZXIgYWxyZWFkeSBlbnN1cmVzIHJlZ2lzdGVycyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIEtNU0FOIGlzIGxvb2tpbmcgZm9yICp1bmluaXRpYWxpemVkKiByZWFkcywgbm90IGp1c3Qgb2xkIHZhbHVlcy4KCkkgaGFkIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlLiBMZXQmIzM5O3MgbG9vayBhdCB0aGUgYnBmX2F0b21pY19sb2FkX3JlZyBmdW5jdGlvbi4gSXQmIzM5O3MgcHVycG9zZSBpcyB0byBpZGVudGlmeSB3aGljaCByZWdpc3RlciB0byBjbGVhciBpbiBjYXNlIG9mIGEgZmF1bHQuIEl0IGNvbnNpZGVycyBjYXNlcyBsaWtlIEJQRl9MT0FEX0FDUSBhbmQgQlBGX0NNUFhDSEcuCgpUaGUgcGF0Y2ggZm9jdXNlcyBvbiBjb3JyZWN0bHkgaWRlbnRpZnlpbmcgdGhlIHJlZ2lzdGVyIHRoYXQgbmVlZHMgdG8gYmUgY2xlYXJlZCAoc2V0IHRvIHplcm8pIGR1cmluZyBhIGZhdWx0LiBGb3IgcmVhZCBvcGVyYXRpb25zLCB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaXMgY2xlYXJlZC4gRm9yIHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbnMsIHRoZXJlJiMzOTtzIGEgZmV0Y2ggYW5kIHRoZSBwYXRjaCBlbnN1cmVzIHRoZSBjb3JyZWN0IHJlZ2lzdGVyIChsaWtlbHkgYEJQRl9SRUdfMGAgZm9yIGBDTVBYQ0hHYCkgaXMgY2xlYXJlZCBvbiBmYXVsdC4KClRoZSBtYWluIGNvbmNlcm4gaW5pdGlhbGx5IHdhcyB0aGUgcG90ZW50aWFsIGZvciBvbGQgdmFsdWVzIHRvIGxpbmdlci4gQnV0IHNpbmNlIEJQRiBwcm9ncmFtcyBhbHJlYWR5IGhhdmUgdGhlaXIgcmVnaXN0ZXJzIGluaXRpYWxpemVkLCB0aGUgcmVnaXN0ZXIgc2ltcGx5IHJldGFpbnMgdGhlIHByZXZpb3VzIHZhbHVlLCBzbyB0aGlzIGlzbiYjMzk7dCBhIGtlcm5lbC1tZW1vcnkgZXhwb3N1cmUuIEFsc28sIHRoaXMgZG9lcyBub3QgZXhwb3NlIGFueXRoaW5nIGZyb20gdGhlIGtlcm5lbCYjMzk7cyBwZXJzcGVjdGl2ZS4gSXQmIzM5O3MganVzdCBhIHZhcmlhYmxlIGluIGEgQ1BVIHJlZ2lzdGVyIGZyb20gQlBGIHBlcnNwZWN0aXZlLgoKS01TQU4sIHdoaWNoIGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnksIGlzbiYjMzk7dCByZWFsbHkgcmVsZXZhbnQgaGVyZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGBleF9oYW5kbGVyX2JwZmAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLCBjaGFuZ2luZyBob3cgYGlzX3dyaXRlYCBpcyBkZXRlcm1pbmVkIHRvIGhhbmRsZSByZWFkLW1vZGlmeS13cml0ZXMgY29ycmVjdGx5LiBCdXQgaXQmIzM5O3Mgbm90IGludHJvZHVjaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBFdmVuIGlmIGEgcmVnaXN0ZXIgaXNuJiMzOTt0IGNsZWFyZWQgb24gZmF1bHQsIHRoZSBwcmV2aW91cyB2YWx1ZSB3b24mIzM5O3QgYmUgZnJvbSB0aGUga2VybmVsLiBLTVNBTiBkb2VzIHRyYWNrIENQVSByZWdpc3RlcnMsIGJ1dCBpbiB0aGUgY29udGV4dCBvZiB0aGUgQlBGIEpJVCwgS01TQU4gaXMgcHJvYmFibHkgbm90IGRlZXBseSBpbnN0cnVtZW50aW5nIHRoZSBKSVR0ZWQgY29kZS4gSXQgZG9lcyBoYXZlIHNvbWUgc3VwcG9ydCBmb3IgQlBGLCBidXQgaXQmIzM5O3MgbGltaXRlZC4gS01TQU4gaXNuJiMzOTt0IHRoZSByaWdodCB0b29sIGhlcmUuIFRoaXMgaXMgYSBsb2dpYyBlcnJvciB0aGF0IG5lZWRzIGFuIGVycm9yIHRvIGluZGljYXRlIGl0IGRpZCBub3QgY29tcGxldGUuCgpTbywgdGhlIGJ1ZyBoZXJlIGlzIHRoYXQgdGhlIEJQRiBleGNlcHRpb24gaGFuZGxlciAqd2FzbiYjMzk7dCogY2xlYXJpbmcgdGhlIHJlZ2lzdGVyIGNvcnJlY3RseSBmb3IgdGhlc2UgYXRvbWljIG9wZXJhdGlvbnMuIFRoaXMgbWVhbnQgdGhlIHByb2dyYW0gd291bGQgY29udGludWUgd2l0aCBhbiBvbGQgdmFsdWUgaW5zdGVhZCBvZiBhIGNsZWFyIHZhbHVlLiBJdCYjMzk7cyBhIGxvZ2ljIGVycm9yIGluIEJQRiBKSVQvZXhjZXB0aW9uIGhhbmRsaW5nLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuIFRoaXMgcmVxdWlyZXMgbm8gc3BlY2lhbCBhdHRlbnRpb24gZnJvbSBLTVNBTiwgYXMgdGhlIHJlZ2lzdGVycyBhcmUgbm90IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gSXQgaXMgcHVyZWx5IGEgbWF0dGVyIG9mIEJQRiBwcm9ncmFtIGludGVncml0eS4gVGhlcmVmb3JlLCBOZWVkc0tNU0FOID0gZmFsc2UuCgpKdXN0IHRvIGJlIHN1cmUsIEkmIzM5O3ZlIHJlY2hlY2tlZCB0aGUgcGF0Y2guIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBjb3JyZWN0bHkgc2V0dGluZyBgaXNfd3JpdGVgIGFuZCBjbGVhcmluZyB0aGUgYXBwcm9wcmlhdGUgcmVnaXN0ZXJzIGluIGNhc2Ugb2YgYSBmYXVsdC4gVGhlIGBCUEZfQVJFTkFfV1JJVEVgIGZsYWcgaXMgYmVpbmcgaW50cm9kdWNlZCB0byBzaWduYWwgYW4gYXJlbmEgd3JpdGUuIEkgY2FuIHNlZSB0aGF0IHRoaXMgaXNuJiMzOTt0IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCYjMzk7cyBhIGJ1ZyB3aXRoIGhvdyB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgd2FzIGhhbmRsaW5nIGZhdWx0cyBvbiBhdG9taWMgYXJlbmEgYWNjZXNzZXMgYW5kLCB0aGVyZWZvcmUsIEkgYmVsaWV2ZSBteSByZWFzb25pbmcgaXMgc29saWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHRoZSBCUEYgZXhjZXB0aW9uIGhhbmRsZXIgZm9yIGFyZW5hIGFjY2Vzc2VzIHRvIGNvcnJlY3RseSBpZGVudGlmeSByZWFkLW1vZGlmeS13cml0ZSBhdG9taWMgb3BlcmF0aW9ucyAobGlrZSBCUEZfWENIRyBhbmQgQlBGX0NNUFhDSEcpIGFzIHdyaXRlcywgYW5kIHRvIHByb3Blcmx5IGNsZWFyIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciAoZS5nLiwgQlBGX1JFR18wIGZvciBDTVBYQ0hHKSB3aGVuIGEgcGFnZSBmYXVsdCBvY2N1cnMuIElmIHRoZSByZWdpc3RlciBpcyBub3QgY2xlYXJlZCwgdGhlIEJQRiBwcm9ncmFtIHNpbXBseSByZXRhaW5zIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGF0IHJlZ2lzdGVyLiBUaGlzIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LCBub3IgZG9lcyBpdCBleHBvc2Uga2VybmVsIHN0YWNrL2hlYXAgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZSBpc3N1ZSBpcyBhIGxvZ2ljIGJ1ZyBpbiBCUEYgSklUIGV4Y2VwdGlvbiBoYW5kbGluZywgd2hpY2ggZG9lcyBub3QgaW50cm9kdWNlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEJQRiBzZWxmdGVzdHMgKGFzIGluY2x1ZGVkIGluIHRoZSBwYXRjaCkgYXJlIHN1ZmZpY2llbnQgdG8gdmVyaWZ5IHRoZSBmaXguJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB0aGUgQlBGIGV4Y2VwdGlvbiBoYW5kbGVyIGZvciBhcmVuYSBhY2Nlc3NlcyB0byBjb3JyZWN0bHkgaWRlbnRpZnkgcmVhZC1tb2RpZnktd3JpdGUgYXRvbWljIG9wZXJhdGlvbnMgKGxpa2UgQlBGX1hDSEcgYW5kIEJQRl9DTVBYQ0hHKSBhcyB3cml0ZXMsIGFuZCB0byBwcm9wZXJseSBjbGVhciB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgKGUuZy4sIEJQRl9SRUdfMCBmb3IgQ01QWENIRykgd2hlbiBhIHBhZ2UgZmF1bHQgb2NjdXJzLiBJZiB0aGUgcmVnaXN0ZXIgaXMgbm90IGNsZWFyZWQsIHRoZSBCUEYgcHJvZ3JhbSBzaW1wbHkgcmV0YWlucyB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhhdCByZWdpc3Rlci4gVGhpcyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSwgbm9yIGRvZXMgaXQgZXhwb3NlIGtlcm5lbCBzdGFjay9oZWFwIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgaXNzdWUgaXMgYSBsb2dpYyBidWcgaW4gQlBGIEpJVCBleGNlcHRpb24gaGFuZGxpbmcsIHdoaWNoIGRvZXMgbm90IGludHJvZHVjZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBCUEYgc2VsZnRlc3RzIChhcyBpbmNsdWRlZCBpbiB0aGUgcGF0Y2gpIGFyZSBzdWZmaWNpZW50IHRvIHZlcmlmeSB0aGUgZml4LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNDoxOC44MjE0MTU1NzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI2MjI1ODAwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW5zbl9kZWYzMlwiLFxuICAgIFwiZXhfaGFuZGxlcl9icGZcIixcbiAgICBcImJwZl9qaXRfZW1pdF9pbnNuXCIsXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gICAgXCJicGZfY2hlY2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHRoZSBCUEYgZXhjZXB0aW9uIGhhbmRsZXIgZm9yIGFyZW5hIGFjY2Vzc2VzIHRvIGNvcnJlY3RseSBpZGVudGlmeSByZWFkLW1vZGlmeS13cml0ZSBhdG9taWMgb3BlcmF0aW9ucyAobGlrZSBCUEZfWENIRyBhbmQgQlBGX0NNUFhDSEcpIGFzIHdyaXRlcywgYW5kIHRvIHByb3Blcmx5IGNsZWFyIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciAoZS5nLiwgQlBGX1JFR18wIGZvciBDTVBYQ0hHKSB3aGVuIGEgcGFnZSBmYXVsdCBvY2N1cnMuIElmIHRoZSByZWdpc3RlciBpcyBub3QgY2xlYXJlZCwgdGhlIEJQRiBwcm9ncmFtIHNpbXBseSByZXRhaW5zIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGF0IHJlZ2lzdGVyLiBUaGlzIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LCBub3IgZG9lcyBpdCBleHBvc2Uga2VybmVsIHN0YWNrL2hlYXAgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZSBpc3N1ZSBpcyBhIGxvZ2ljIGJ1ZyBpbiBCUEYgSklUIGV4Y2VwdGlvbiBoYW5kbGluZywgd2hpY2ggZG9lcyBub3QgaW50cm9kdWNlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEJQRiBzZWxmdGVzdHMgKGFzIGluY2x1ZGVkIGluIHRoZSBwYXRjaCkgYXJlIHN1ZmZpY2llbnQgdG8gdmVyaWZ5IHRoZSBmaXguXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXJzICh4ODYsIGFybTY0LCByaXNjdiwgczM5MCkgYW5kIHRoZSBCUEYgdmVyaWZpZXIgdG8gY29ycmVjdGx5IGhhbmRsZSBleGNlcHRpb25zIGZvciBhdG9taWMgb3BlcmF0aW9ucyBpbiB0aGUgQlBGIGFyZW5hLiBJdCBpbnRyb2R1Y2VzIGBicGZfYXRvbWljX2xvYWRfcmVnYCB0byBpZGVudGlmeSB0aGUgcmVnaXN0ZXIgdGhhdCBuZWVkcyB0byBiZSBjbGVhcmVkIHdoZW4gYW4gYXRvbWljIGluc3RydWN0aW9uIGZhdWx0cywgYW5kIGVuc3VyZXMgdGhhdCByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb25zIGFyZSBjb3JyZWN0bHkgcmVwb3J0ZWQgYXMgd3JpdGVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQlBGIHN1YnN5c3RlbSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM0OjE4LjgyMTQyMjYyN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk3NzU3ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjRhYTc1MjFmODU4MDNmZDNhMWJhZTE0NTE5ZGEwYWJkYzFkZjAxZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwMDozNDoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXFxuaW5kZXggZDE0ZDI5N2ViYjk2Ny4uNzRiNDA4Mzc5MWRhMyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xcbisrKyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXFxuQEAgLTEwODIsMjMgKzEwODIsMjcgQEAgc3RhdGljIHZvaWQgYnVpbGRfZXBpbG9ndWUoc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCB3YXNfY2xhc3NpYylcXG4gICpcXG4gICogQml0IGxheW91dCBvZiBgZml4dXBgICgzMi1iaXQpOlxcbiAgKlxcbi0gKiArLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLStcXG4tICogfCAgIDMxLTI3ICAgfCAyNi0yMiAgfCAgICAgMjEgICAgfCAgIDIwLTE2ICAgfCAgIDE1LTAgICB8XFxuLSAqIHwgICAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfFxcbi0gKiB8IEZJWFVQX1JFRyB8IFVudXNlZCB8IEFSRU5BX0FDQyB8IEFSRU5BX1JFRyB8ICBPRkZTRVQgIHxcXG4tICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rXFxuKyAqICstLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rXFxuKyAqIHwgICAzMS0yNyAgIHwgMjYtMjMgIHwgICAgICAyMiAgICAgfCAgICAgMjEgICAgfCAgIDIwLTE2ICAgfCAgIDE1LTAgICB8XFxuKyAqIHwgICAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8XFxuKyAqIHwgRklYVVBfUkVHIHwgVW51c2VkIHwgQVJFTkFfV1JJVEUgfCBBUkVOQV9BQ0MgfCBBUkVOQV9SRUcgfCAgT0ZGU0VUICB8XFxuKyAqICstLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rXFxuICAqXFxuICAqIC0gT0ZGU0VUICgxNiBiaXRzKTogT2Zmc2V0IHVzZWQgdG8gY29tcHV0ZSBhZGRyZXNzIGZvciBMb2FkL1N0b3JlIGluc3RydWN0aW9uLlxcbiAgKiAtIEFSRU5BX1JFRyAoNSBiaXRzKTogUmVnaXN0ZXIgdGhhdCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgYWRkcmVzcyBmb3IgbG9hZC9zdG9yZSB3aGVuXFxuICAqICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NpbmcgdGhlIGFyZW5hIHJlZ2lvbi5cXG4gICogLSBBUkVOQV9BQ0NFU1MgKDEgYml0KTogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIGFjY2Vzc2VkIHRoZSBhcmVuYSByZWdpb24uXFxuKyAqIC0gQVJFTkFfV1JJVEUgKDEgYml0KTogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIHdyb3RlIHRvIHRoZSBhcmVuYSByZWdpb24uXFxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW5kZXBlbmRlbnQgb2YgRklYVVBfUkVHLCBzaW5jZSBhIHJlYWQtbW9kaWZ5LXdyaXRlIGJvdGggd3JpdGVzIHRvXFxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5IGFuZCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gYSByZWdpc3Rlci5cXG4gICogLSBGSVhVUF9SRUcgKDUgYml0cyk6IERlc3RpbmF0aW9uIHJlZ2lzdGVyIGZvciB0aGUgbG9hZCBpbnN0cnVjdGlvbiAoY2xlYXJlZCBvbiBmYXVsdCkgb3Igc2V0IHRvXFxuLSAqICAgICAgICAgICAgICAgICAgICAgICBET05UX0NMRUFSIGlmIGl0IGlzIGEgc3RvcmUgaW5zdHJ1Y3Rpb24uXFxuKyAqICAgICAgICAgICAgICAgICAgICAgICBET05UX0NMRUFSIGlmIHRoZSBpbnN0cnVjdGlvbiBkb2VzIG5vdCByZWFkIGludG8gYSByZWdpc3Rlci5cXG4gICovXFxuIFxcbiAjZGVmaW5lIEJQRl9GSVhVUF9PRkZTRVRfTUFTSyAgICAgIEdFTk1BU0soMTUsIDApXFxuICNkZWZpbmUgQlBGX0ZJWFVQX0FSRU5BX1JFR19NQVNLICAgR0VOTUFTSygyMCwgMTYpXFxuICNkZWZpbmUgQlBGX0FSRU5BX0FDQ0VTUyAgICAgICAgICAgQklUKDIxKVxcbisjZGVmaW5lIEJQRl9BUkVOQV9XUklURSAgICAgICAgICAgIEJJVCgyMilcXG4gI2RlZmluZSBCUEZfRklYVVBfUkVHX01BU0tcXHRHRU5NQVNLKDMxLCAyNylcXG4gI2RlZmluZSBET05UX0NMRUFSIDUgLyogVW51c2VkIEFSTTY0IHJlZ2lzdGVyIGZyb20gQlBGJ3MgUE9WICovXFxuIFxcbkBAIC0xMTA5LDcgKzExMTMsNyBAQCBib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxcbiBcXHRzMTYgb2ZmID0gRklFTERfR0VUKEJQRl9GSVhVUF9PRkZTRVRfTUFTSywgZXgtXFx1MDAzZWZpeHVwKTtcXG4gXFx0aW50IGFyZW5hX3JlZyA9IEZJRUxEX0dFVChCUEZfRklYVVBfQVJFTkFfUkVHX01BU0ssIGV4LVxcdTAwM2VmaXh1cCk7XFxuIFxcdGJvb2wgaXNfYXJlbmEgPSAhIShleC1cXHUwMDNlZml4dXAgXFx1MDAyNiBCUEZfQVJFTkFfQUNDRVNTKTtcXG4tXFx0Ym9vbCBpc193cml0ZSA9IChkc3RfcmVnID09IERPTlRfQ0xFQVIpO1xcbitcXHRib29sIGlzX3dyaXRlID0gISEoZXgtXFx1MDAzZWZpeHVwIFxcdTAwMjYgQlBGX0FSRU5BX1dSSVRFKTtcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyO1xcbiBcXG4gXFx0aWYgKGlzX2FyZW5hKSB7XFxuQEAgLTExMzIsNyArMTEzNiw3IEBAIHN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4ge1xcbiBcXHRvZmZfdCBpbnNfb2Zmc2V0O1xcbiBcXHRzMTYgb2ZmID0gaW5zbi1cXHUwMDNlb2ZmO1xcbi1cXHRib29sIGlzX2FyZW5hO1xcbitcXHRib29sIGlzX2FyZW5hLCBpc193cml0ZTtcXG4gXFx0aW50IGFyZW5hX3JlZztcXG4gXFx0dW5zaWduZWQgbG9uZyBwYztcXG4gXFx0c3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXg7XFxuQEAgLTExODEsMTUgKzExODUsMTggQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHQvKlxcbiBcXHQgKiBBIGxvYWQtYWNxdWlyZSBpcyBvZiBCUEZfU1RYIGNsYXNzLCBidXQgcmVhZHMgZnJvbSBzcmNfcmVnIGludG9cXG4gXFx0ICogZHN0X3JlZyBsaWtlIGEgQlBGX0xEWCBkb2VzLCBoZW5jZSBpdCBtdXN0IG5vdCBiZSB0cmVhdGVkIGFzIGEgc3RvcmVcXG4tXFx0ICogaGVyZS5cXG4rXFx0ICogaGVyZS4gQSByZWFkLW1vZGlmeS13cml0ZSBjYXJyeWluZyBCUEZfRkVUQ0ggaXMgcmVwb3J0ZWQgYXMgYSB3cml0ZVxcbitcXHQgKiBldmVuIHRob3VnaCBpdCBkb2VzIGhhdmUgYSByZWdpc3RlciB0byBjbGVhciwgc2VlIHRoZSBjYWxsZXJzLlxcbiBcXHQgKi9cXG4tXFx0aWYgKEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSAhPSBCUEZfTERYIFxcdTAwMjZcXHUwMDI2ICFicGZfYXRvbWljX2lzX2xvYWRfYWNxKGluc24pKVxcbi1cXHRcXHRkc3RfcmVnID0gRE9OVF9DTEVBUjtcXG4rXFx0aXNfd3JpdGUgPSBCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX0xEWCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAhYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKTtcXG4gXFxuIFxcdGV4LVxcdTAwM2VmaXh1cCA9IEZJRUxEX1BSRVAoQlBGX0ZJWFVQX1JFR19NQVNLLCBkc3RfcmVnKTtcXG4gXFxuIFxcdGlmIChpc19hcmVuYSkge1xcbiBcXHRcXHRleC1cXHUwMDNlZml4dXAgfD0gQlBGX0FSRU5BX0FDQ0VTUztcXG4rXFx0XFx0aWYgKGlzX3dyaXRlKVxcbitcXHRcXHRcXHRleC1cXHUwMDNlZml4dXAgfD0gQlBGX0FSRU5BX1dSSVRFO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBpbnNuLVxcdTAwM2VzcmNfcmVnL2RzdF9yZWcgaG9sZHMgdGhlIGFkZHJlc3MgaW4gdGhlIGFyZW5hIHJlZ2lvbiB3aXRoIHVwcGVyIDMyLWJpdHNcXG4gXFx0XFx0ICogYmVpbmcgemVybyBiZWNhdXNlIG9mIGEgcHJlY2VkaW5nIGFkZHJfc3BhY2VfY2FzdChyXFx1MDAzY25cXHUwMDNlLCAweDAsIDB4MSkgaW5zdHJ1Y3Rpb24uXFxuQEAgLTE4ODksNyArMTg5Niw3IEBAIHN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc25cXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGRzdCk7XFxuK1xcdFxcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIERPTlRfQ0xFQVIpO1xcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHRicmVhaztcXG5AQCAtMTk1Niw3ICsxOTYzLDcgQEAgc3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zblxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgZHN0KTtcXG4rXFx0XFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgRE9OVF9DTEVBUik7XFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0xOTc5LDcgKzE5ODYsMTYgQEAgc3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zblxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9BVE9NSUMpIHtcXG4tXFx0XFx0XFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgZHN0KTtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogQSBsb2FkLWFjcXVpcmUgcmVhZHMgaW50byBkc3RfcmVnLCBhbmQgYSByZWFkLW1vZGlmeS13cml0ZVxcbitcXHRcXHRcXHQgKiBjYXJyeWluZyBCUEZfRkVUQ0ggcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIHNyY19yZWcsIG9yIGludG9cXG4rXFx0XFx0XFx0ICogcjAgZm9yIGEgQlBGX0NNUFhDSEcuIENsZWFyIHRoYXQgcmVnaXN0ZXIgb24gZmF1bHQsIHRoZVxcbitcXHRcXHRcXHQgKiByZW1haW5pbmcgYXRvbWljcyBoYXZlIG5vIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aW50IGxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGxvYWRfcmVnIFxcdTAwM2MgMCA/XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBET05UX0NMRUFSIDogYnBmMmE2NFtsb2FkX3JlZ10pO1xcbiBcXHRcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXFxuaW5kZXggNmI5OTcyYjA3YzFiMC4uMjUwNGRmMWZhMTExOCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXFxuKysrIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xcbkBAIC0xOTkyLDEwICsxOTkyLDE5IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbiBcXHRcXHRcXHRyZXQgPSBlbWl0X2F0b21pY19ybXcocmQsIHJzLCBpbnNuLCBjdHgpO1xcbiBcXG4gXFx0XFx0LyogcmV0IGNhbiBiZSAxIChza2lwLXpleHQpOyBleHRhYmxlIGVudHJ5IHN0aWxsIG5lZWRzIHRvIGJlIGFkZGVkICovXFxuLVxcdFxcdGlmIChyZXQgXFx1MDAzZT0gMClcXG4tXFx0XFx0XFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sXFxuLVxcdFxcdFxcdFxcdGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikgPyByZCA6IFJFR19ET05UX0NMRUFSX01BUktFUixcXG4tXFx0XFx0XFx0XFx0Y3R4KSA/OiByZXQ7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzZT0gMCkge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBBIGxvYWQtYWNxdWlyZSByZWFkcyBpbnRvIGRzdF9yZWcsIGFuZCBhIHJlYWQtbW9kaWZ5LXdyaXRlXFxuK1xcdFxcdFxcdCAqIGNhcnJ5aW5nIEJQRl9GRVRDSCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gc3JjX3JlZywgb3IgaW50b1xcbitcXHRcXHRcXHQgKiByMCBmb3IgYSBCUEZfQ01QWENIRy4gQ2xlYXIgdGhhdCByZWdpc3RlciBvbiBmYXVsdCwgdGhlXFxuK1xcdFxcdFxcdCAqIHJlbWFpbmluZyBhdG9taWNzIGhhdmUgbm8gZGVzdGluYXRpb24gcmVnaXN0ZXIuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpbnQgbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGxvYWRfcmVnIFxcdTAwM2MgMCA/XFxuK1xcdFxcdFxcdFxcdFxcdFJFR19ET05UX0NMRUFSX01BUktFUiA6IHJlZ21hcFtsb2FkX3JlZ10sXFxuK1xcdFxcdFxcdFxcdFxcdGN0eCkgPzogcmV0O1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xcbmluZGV4IGI2MDg3NzQ3OGI0NWQuLmM0Njg3MmIwNzFjZTcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xcbisrKyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNcXG5AQCAtNzc0LDYgKzc3NCw4IEBAIHN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfYXRvbWljX3ByZShzdHJ1Y3QgYnBmX2ppdCAqaml0LFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXFxuIHtcXG4rXFx0aW50IGxvYWRfcmVnO1xcbitcXG4gXFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9BVE9NSUMpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTc4Myw2ICs3ODUsMTQgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsXFxuIFxcdEVNSVQ0KDB4YjkwODAwMDAsIFJFR19XMSwgaW5zbi1cXHUwMDNlZHN0X3JlZyk7XFxuIFxcdHByb2JlLVxcdTAwM2VhcmVuYV9yZWcgPSBSRUdfVzE7XFxuIFxcdHByb2JlLVxcdTAwM2VwcmcgPSBqaXQtXFx1MDAzZXByZztcXG4rXFx0LypcXG4rXFx0ICogQSByZWFkLW1vZGlmeS13cml0ZSBjYXJyeWluZyBCUEZfRkVUQ0ggcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvXFxuK1xcdCAqIHNyY19yZWcsIG9yIGludG8gcjAgZm9yIGEgQlBGX0NNUFhDSEcuIENsZWFyIHRoYXQgcmVnaXN0ZXIgb25cXG4rXFx0ICogZmF1bHQsIHRoZSByZW1haW5pbmcgYXRvbWljcyBvbmx5IHdyaXRlIG1lbW9yeS5cXG4rXFx0ICovXFxuK1xcdGxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcXG4rXFx0aWYgKGxvYWRfcmVnIFxcdTAwM2U9IDApXFxuK1xcdFxcdHByb2JlLVxcdTAwM2VyZWcgPSByZWcyaGV4W2xvYWRfcmVnXTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBicGZfaml0X3Byb2JlX3Bvc3Qoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcXG5AQCAtMTY4NCw2ICsxNjk0LDcgQEAgc3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcXG4gXFx0XFx0XFx0aWYgKGxvYWRfcHJvYmUucHJnICE9IC0xKSB7XFxuIFxcdFxcdFxcdFxcdHByb2JlLnByZyA9IGppdC1cXHUwMDNlcHJnO1xcbiBcXHRcXHRcXHRcXHRwcm9iZS5hcmVuYV9yZWcgPSBsb2FkX3Byb2JlLmFyZW5hX3JlZztcXG4rXFx0XFx0XFx0XFx0cHJvYmUucmVnID0gbG9hZF9wcm9iZS5yZWc7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0bG9vcF9zdGFydCA9IGppdC1cXHUwMDNlcHJnO1xcbiBcXHRcXHRcXHQvKiAwOiB7Y3N5fGNzZ30gJXcwLCVzcmMsb2ZmKCVhcmVuYSkgKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuaW5kZXggOGRkZGI1ZDdhZjIxYi4uZDkyMDc3MmFmN2Q1ZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG4rKysgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG5AQCAtMTQ3MywxNyArMTQ3MywyMCBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX2xkX3N0X2luZGV4KHU4ICoqcHByb2csIHUzMiBhdG9taWNfb3AsIHUzMiBzaXplLFxcbiAgKlxcbiAgKiBCaXQgbGF5b3V0IG9mIGBmaXh1cGAgKDMyLWJpdCk6XFxuICAqXFxuLSAqICstLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLStcXG4tICogfCAzMSAgICAgICAgfCAzMC0yNCAgfCAgIDIzLTE2ICAgfCAgIDE1LTggIHwgICAgNy0wICAgfFxcbi0gKiB8ICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICB8XFxuLSAqIHwgQVJFTkFfQUNDIHwgVW51c2VkIHwgQVJFTkFfUkVHIHwgRFNUX1JFRyB8IElOU05fTEVOIHxcXG4tICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tK1xcbisgKiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLStcXG4rICogfCAzMSAgICAgICAgfCAzMCAgICAgICAgICB8IDI5LTI0ICB8ICAgMjMtMTYgICB8ICAgMTUtOCAgfCAgICA3LTAgICB8XFxuKyAqIHwgICAgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgfFxcbisgKiB8IEFSRU5BX0FDQyB8IEFSRU5BX1dSSVRFIHwgVW51c2VkIHwgQVJFTkFfUkVHIHwgRFNUX1JFRyB8IElOU05fTEVOIHxcXG4rICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rXFxuICAqXFxuICAqIC0gSU5TTl9MRU4gKDggYml0cyk6IExlbmd0aCBvZiBmYXVsdGluZyBpbnNuIChtYXggeDg2IGluc24gPSAxNSBieXRlcyAoZml0cyBpbiA4IGJpdHMpKS5cXG4gICogLSBEU1RfUkVHICAoOCBiaXRzKTogT2Zmc2V0IG9mIGRzdF9yZWcgZnJvbSByZWcycHRfcmVnc1tdIChtYXggb2Zmc2V0ID0gMTEyIChmaXRzIGluIDggYml0cykpLlxcbi0gKiAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHNldCB0byBET05UX0NMRUFSIGlmIHRoZSBpbnNuIGlzIGEgc3RvcmUuXFxuKyAqICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgc2V0IHRvIERPTlRfQ0xFQVIgaWYgdGhlIGluc24gZG9lcyBub3QgcmVhZCBpbnRvIGEgcmVnaXN0ZXIuXFxuICAqIC0gQVJFTkFfUkVHICg4IGJpdHMpOiBPZmZzZXQgb2YgdGhlIHJlZ2lzdGVyIHRoYXQgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlXFxuICAqICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzIGZvciBsb2FkL3N0b3JlIHdoZW4gYWNjZXNzaW5nIHRoZSBhcmVuYSByZWdpb24uXFxuKyAqIC0gQVJFTkFfV1JJVEUgKDEgYml0KTogVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIHdyb3RlIHRvIHRoZSBhcmVuYSByZWdpb24uXFxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW5kZXBlbmRlbnQgb2YgRFNUX1JFRywgc2luY2UgYSByZWFkLW1vZGlmeS13cml0ZSBib3RoIHdyaXRlcyB0b1xcbisgKiAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSBhbmQgcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIGEgcmVnaXN0ZXIuXFxuICAqIC0gQVJFTkFfQUNDRVNTICgxIGJpdCk6IFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiBhY2Nlc3NlZCB0aGUgYXJlbmEgcmVnaW9uLlxcbiAgKlxcbiAgKiBCaXQgbGF5b3V0IG9mIGBkYXRhYCAoMzItYml0KTpcXG5AQCAtMTUwMiw2ICsxNTA1LDcgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19sZF9zdF9pbmRleCh1OCAqKnBwcm9nLCB1MzIgYXRvbWljX29wLCB1MzIgc2l6ZSxcXG4gI2RlZmluZSBGSVhVUF9JTlNOX0xFTl9NQVNLXFx0R0VOTUFTSyg3LCAwKVxcbiAjZGVmaW5lIEZJWFVQX1JFR19NQVNLXFx0XFx0R0VOTUFTSygxNSwgOClcXG4gI2RlZmluZSBGSVhVUF9BUkVOQV9SRUdfTUFTS1xcdEdFTk1BU0soMjMsIDE2KVxcbisjZGVmaW5lIEZJWFVQX0FSRU5BX1dSSVRFXFx0QklUKDMwKVxcbiAjZGVmaW5lIEZJWFVQX0FSRU5BX0FDQ0VTU1xcdEJJVCgzMSlcXG4gI2RlZmluZSBEQVRBX0FSRU5BX09GRlNFVF9NQVNLXFx0R0VOTUFTSygzMSwgMTYpXFxuIFxcbkBAIC0xNTEwLDcgKzE1MTQsNyBAQCBib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKngsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiBcXHR1MzIgcmVnID0gRklFTERfR0VUKEZJWFVQX1JFR19NQVNLLCB4LVxcdTAwM2VmaXh1cCk7XFxuIFxcdHUzMiBpbnNuX2xlbiA9IEZJRUxEX0dFVChGSVhVUF9JTlNOX0xFTl9NQVNLLCB4LVxcdTAwM2VmaXh1cCk7XFxuIFxcdGJvb2wgaXNfYXJlbmEgPSAhISh4LVxcdTAwM2VmaXh1cCBcXHUwMDI2IEZJWFVQX0FSRU5BX0FDQ0VTUyk7XFxuLVxcdGJvb2wgaXNfd3JpdGUgPSAocmVnID09IERPTlRfQ0xFQVIpO1xcbitcXHRib29sIGlzX3dyaXRlID0gISEoeC1cXHUwMDNlZml4dXAgXFx1MDAyNiBGSVhVUF9BUkVOQV9XUklURSk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgYWRkcjtcXG4gXFx0czE2IG9mZjtcXG4gXFx0dTMyIGFyZW5hX3JlZztcXG5AQCAtMjM0OCw2ICsyMzUyLDcgQEAgc3Q6XFx0XFx0XFx0aW5zbl9vZmYgPSBpbnNuLVxcdTAwM2VvZmY7XFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4O1xcbiBcXHRcXHRcXHRcXHR1OCAqX2luc24gPSBpbWFnZSArIHByb2dsZW4gKyAoc3RhcnRfb2ZfbGR4IC0gdGVtcCk7XFxuIFxcdFxcdFxcdFxcdHUzMiBhcmVuYV9yZWcsIGZpeHVwX3JlZztcXG4rXFx0XFx0XFx0XFx0Ym9vbCBpc193cml0ZTtcXG4gXFx0XFx0XFx0XFx0czY0IGRlbHRhO1xcbiBcXG4gXFx0XFx0XFx0XFx0aWYgKCFicGZfcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VleHRhYmxlKVxcbkBAIC0yMzg0LDE1ICsyMzg5LDI5IEBAIHN0OlxcdFxcdFxcdGluc25fb2ZmID0gaW5zbi1cXHUwMDNlb2ZmO1xcbiBcXHRcXHRcXHRcXHQgICAgYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSkge1xcbiBcXHRcXHRcXHRcXHRcXHRhcmVuYV9yZWcgPSByZWcycHRfcmVnc1tzcmNfcmVnXTtcXG4gXFx0XFx0XFx0XFx0XFx0Zml4dXBfcmVnID0gcmVnMnB0X3JlZ3NbZHN0X3JlZ107XFxuK1xcdFxcdFxcdFxcdFxcdGlzX3dyaXRlID0gZmFsc2U7XFxuIFxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdFxcdFxcdCAqIEEgc3RvcmUgaGFzIG5vIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIHRvIGNsZWFyLFxcbitcXHRcXHRcXHRcXHRcXHQgKiBleGNlcHQgZm9yIGEgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCBCUEZfRkVUQ0gsXFxuK1xcdFxcdFxcdFxcdFxcdCAqIHdoaWNoIGFsc28gcmVhZHMgdGhlIG9sZCB2YWx1ZSBpbnRvIHNyY19yZWcsIG9yXFxuK1xcdFxcdFxcdFxcdFxcdCAqIGludG8gcjAgZm9yIGEgQlBGX0NNUFhDSEcuIEVpdGhlciB3YXkgdGhlIGFjY2Vzc1xcbitcXHRcXHRcXHRcXHRcXHQgKiBpcyBzdGlsbCByZXBvcnRlZCBhcyBhIHdyaXRlLlxcbitcXHRcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0XFx0aW50IGxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcXG4rXFxuIFxcdFxcdFxcdFxcdFxcdGFyZW5hX3JlZyA9IHJlZzJwdF9yZWdzW2RzdF9yZWddO1xcbi1cXHRcXHRcXHRcXHRcXHRmaXh1cF9yZWcgPSBET05UX0NMRUFSO1xcbitcXHRcXHRcXHRcXHRcXHRmaXh1cF9yZWcgPSBsb2FkX3JlZyBcXHUwMDNjIDAgPyBET05UX0NMRUFSIDpcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHJlZzJwdF9yZWdzW2xvYWRfcmVnXTtcXG4rXFx0XFx0XFx0XFx0XFx0aXNfd3JpdGUgPSB0cnVlO1xcbiBcXHRcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRcXHRleC1cXHUwMDNlZml4dXAgPSBGSUVMRF9QUkVQKEZJWFVQX0lOU05fTEVOX01BU0ssIHByb2cgLSBzdGFydF9vZl9sZHgpIHxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIEZJRUxEX1BSRVAoRklYVVBfQVJFTkFfUkVHX01BU0ssIGFyZW5hX3JlZykgfFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgRklFTERfUFJFUChGSVhVUF9SRUdfTUFTSywgZml4dXBfcmVnKTtcXG4gXFx0XFx0XFx0XFx0ZXgtXFx1MDAzZWZpeHVwIHw9IEZJWFVQX0FSRU5BX0FDQ0VTUztcXG4rXFx0XFx0XFx0XFx0aWYgKGlzX3dyaXRlKVxcbitcXHRcXHRcXHRcXHRcXHRleC1cXHUwMDNlZml4dXAgfD0gRklYVVBfQVJFTkFfV1JJVEU7XFxuIFxcbiBcXHRcXHRcXHRcXHRleC1cXHUwMDNlZGF0YSB8PSBGSUVMRF9QUkVQKERBVEFfQVJFTkFfT0ZGU0VUX01BU0ssIGluc24tXFx1MDAzZW9mZik7XFxuIFxcdFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG5pbmRleCA0ZWRiYTgxODJkYjFiLi4xNWQ4MzY4NGM2ZTk0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXFxuQEAgLTQxNCw2ICs0MTQsMzAgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiBcXHQgICAgICAgaW5zbi1cXHUwMDNlaW1tID09IEJQRl9MT0FEX0FDUTtcXG4gfVxcbiBcXG4rLypcXG4rICogR2l2ZW4gYW4gaW5zdHJ1Y3Rpb24gQGluc24sIHJldHVybiB0aGUgbnVtYmVyIG9mIHRoZSBCUEYgcmVnaXN0ZXIgdGhhdCBhXFxuKyAqIEJQRl9BVE9NSUMgcmVhZHMgdGhlIHZhbHVlIGF0IGl0cyBtZW1vcnkgb3BlcmFuZCBpbnRvLCBvciAtMSBpZiB0aGVyZSBpc1xcbisgKiBubyBzdWNoIHJlZ2lzdGVyLiBUaGF0IGlzIHRoZSByZWdpc3RlciBhIEJQRl9QUk9CRV9BVE9NSUMgaGFzIHRvIGNsZWFyIHdoZW5cXG4rICogdGhlIGFjY2VzcyBmYXVsdHMuIExpa2UgYnBmX2F0b21pY19pc19sb2FkX2FjcSgpLCBAaW5zbiBpcyBub3QgYXNzdW1lZCB0b1xcbisgKiBiZSBhIEJQRl9BVE9NSUMgaGVyZS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgaW50IGJwZl9hdG9taWNfbG9hZF9yZWcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbit7XFxuK1xcdGlmIChCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX1NUWCB8fFxcbitcXHQgICAgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9BVE9NSUMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfQVRPTUlDKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0c3dpdGNoIChpbnNuLVxcdTAwM2VpbW0pIHtcXG4rXFx0Y2FzZSBCUEZfTE9BRF9BQ1E6XFxuK1xcdFxcdHJldHVybiBpbnNuLVxcdTAwM2Vkc3RfcmVnO1xcbitcXHRjYXNlIEJQRl9DTVBYQ0hHOlxcbitcXHRcXHRyZXR1cm4gQlBGX1JFR18wO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gKGluc24tXFx1MDAzZWltbSBcXHUwMDI2IEJQRl9GRVRDSCkgPyBpbnNuLVxcdTAwM2VzcmNfcmVnIDogLTE7XFxuK1xcdH1cXG4rfVxcbitcXG4gLyogTWVtb3J5IHN0b3JlLCAqKHVpbnQgKikgKGRzdF9yZWcgKyBvZmYxNikgPSBpbW0zMiAqL1xcbiBcXG4gI2RlZmluZSBCUEZfU1RfTUVNKFNJWkUsIERTVCwgT0ZGLCBJTU0pXFx0XFx0XFx0XFx0XFxcXFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2ZpeHVwcy5jIGIva2VybmVsL2JwZi9maXh1cHMuY1xcbmluZGV4IDY2MWUyZDEzYTYwNDIuLmM0YmQ3MGJlZmJiNWMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9maXh1cHMuY1xcbisrKyBiL2tlcm5lbC9icGYvZml4dXBzLmNcXG5AQCAtNDksMTYgKzQ5LDcgQEAgc3RhdGljIGludCBpbnNuX2RlZl9yZWdubyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuIFxcdGNhc2UgQlBGX1NUOlxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdGNhc2UgQlBGX1NUWDpcXG4tXFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgfHxcXG4tXFx0XFx0ICAgIEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9BVE9NSUMpIHtcXG4tXFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZWltbSA9PSBCUEZfQ01QWENIRylcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIEJQRl9SRUdfMDtcXG4tXFx0XFx0XFx0ZWxzZSBpZiAoaW5zbi1cXHUwMDNlaW1tID09IEJQRl9MT0FEX0FDUSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIGluc24tXFx1MDAzZWRzdF9yZWc7XFxuLVxcdFxcdFxcdGVsc2UgaWYgKGluc24tXFx1MDAzZWltbSBcXHUwMDI2IEJQRl9GRVRDSClcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIGluc24tXFx1MDAzZXNyY19yZWc7XFxuLVxcdFxcdH1cXG4tXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRyZXR1cm4gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIGluc24tXFx1MDAzZWRzdF9yZWc7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggYWRkM2FmZmM1NzAzNS4uNzNhMmU4YmIxNzgyYSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtNjQ4NSwyMSArNjQ4NSwxNiBAQCBzdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChpbnNuLVxcdTAwM2VpbW0gXFx1MDAyNiBCUEZfRkVUQ0gpIHtcXG4tXFx0XFx0aWYgKGluc24tXFx1MDAzZWltbSA9PSBCUEZfQ01QWENIRylcXG4tXFx0XFx0XFx0bG9hZF9yZWcgPSBCUEZfUkVHXzA7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0bG9hZF9yZWcgPSBpbnNuLVxcdTAwM2VzcmNfcmVnO1xcbi1cXG4rXFx0LypcXG4rXFx0ICogQSBuZWdhdGl2ZSBsb2FkX3JlZyBtZWFucyB0aGF0IHRoaXMgaW5zdHJ1Y3Rpb24gYWNjZXNzZXMgYSBtZW1vcnlcXG4rXFx0ICogbG9jYXRpb24gYnV0IGRvZXNuJ3QgYWN0dWFsbHkgbG9hZCBpdCBpbnRvIGEgcmVnaXN0ZXIuXFxuK1xcdCAqL1xcbitcXHRsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XFxuK1xcdGlmIChsb2FkX3JlZyBcXHUwMDNlPSAwKSB7XFxuIFxcdFxcdC8qIGNoZWNrIGFuZCByZWNvcmQgbG9hZCBvZiBvbGQgdmFsdWUgKi9cXG4gXFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGxvYWRfcmVnLCBEU1RfT1ApO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHQvKiBUaGlzIGluc3RydWN0aW9uIGFjY2Vzc2VzIGEgbWVtb3J5IGxvY2F0aW9uIGJ1dCBkb2Vzbid0XFxuLVxcdFxcdCAqIGFjdHVhbGx5IGxvYWQgaXQgaW50byBhIHJlZ2lzdGVyLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0bG9hZF9yZWcgPSAtMTtcXG4gXFx0fVxcbiBcXG4gXFx0ZHN0X3JlZyA9IGN1cl9yZWdzKGVudikgKyBpbnNuLVxcdTAwM2Vkc3RfcmVnO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jXFxuaW5kZXggMTVkZDNhZTJhODRiNy4uZTRlOTM3NDMwOWUyNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jXFxuQEAgLTEwNSw2ICsxMDUsMTAgQEAgdm9pZCB0ZXN0X3N0cmVhbV9hcmVuYV9mYXVsdF9hZGRyZXNzKHZvaWQpXFxuIFxcdFxcdHRlc3RfYWRkcmVzcyhza2VsLVxcdTAwM2Vwcm9ncy5zdHJlYW1fYXJlbmFfd3JpdGVfZmF1bHQsIFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWZhdWx0X2FkZHIpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwibG9hZF9hY3F1aXJlX2ZhdWx0XFxcIikpXFxuIFxcdFxcdHRlc3RfYWRkcmVzcyhza2VsLVxcdTAwM2Vwcm9ncy5zdHJlYW1fYXJlbmFfbG9hZF9hY3F1aXJlX2ZhdWx0LCBcXHUwMDI2c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmYXVsdF9hZGRyKTtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInhjaGdfZmF1bHRcXFwiKSlcXG4rXFx0XFx0dGVzdF9hZGRyZXNzKHNrZWwtXFx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV94Y2hnX2ZhdWx0LCBcXHUwMDI2c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmYXVsdF9hZGRyKTtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImNtcHhjaGdfZmF1bHRcXFwiKSlcXG4rXFx0XFx0dGVzdF9hZGRyZXNzKHNrZWwtXFx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV9jbXB4Y2hnX2ZhdWx0LCBcXHUwMDI2c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmYXVsdF9hZGRyKTtcXG4gXFxuIFxcdHN0cmVhbV9fZGVzdHJveShza2VsKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcXG5pbmRleCBjZjU1MzNlMTFmMzljLi4wMGEzNzkzM2U0MTFkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xcbkBAIC0yMjksNiArMjI5LDEwNyBAQCBpbnQgc3RyZWFtX2FyZW5hX2xvYWRfYWNxdWlyZV9mYXVsdCh2b2lkICpjdHgpXFxuIFxcdHJldHVybiB2YWw7XFxuIH1cXG4gXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitfX3N0ZGVycihcXFwiRVJST1I6IEFyZW5hIFdSSVRFIGFjY2VzcyBhdCB1bm1hcHBlZCBhZGRyZXNzIDB4e3suKn19XFxcIilcXG4rX19zdGRlcnIoXFxcIkNQVToge3tbMC05XSt9fSBVSUQ6IDAgUElEOiB7e1swLTldK319IENvbW06IHt7Lip9fVxcXCIpXFxuK19fc3RkZXJyKFxcXCJDYWxsIHRyYWNlOlxcXFxuXFxcIlxcbitcXFwie3soW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFxcXFxcKzB4WzAtOWEtZkEtRl0rLzB4WzAtOWEtZkEtRl0rXFxcXG5cXFwiXFxuK1xcXCJ8WyBcXFxcdF0rW15cXFxcbl0rXFxcXG4pKn19XFxcIilcXG4raW50IHN0cmVhbV9hcmVuYV94Y2hnX2ZhdWx0KHZvaWQgKmN0eClcXG4re1xcbitcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pbnNuIHhjaGdfaW5zbiA9IHtcXG4rXFx0XFx0LmNvZGVcXHQgPSAweGMzLFxcdC8qIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1cgKi9cXG4rXFx0XFx0LmRzdF9yZWcgPSAxLFxcdFxcdC8qIEJQRl9SRUdfMSAqL1xcbitcXHRcXHQuc3JjX3JlZyA9IDIsXFx0XFx0LyogQlBGX1JFR18yICovXFxuK1xcdFxcdC5vZmZcXHQgPSAweDdmZmYsXFxuK1xcdFxcdC5pbW1cXHQgPSAweGUxLFxcdC8qIEJQRl9YQ0hHICovXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBicGZfYXJlbmEgKnB0ciA9ICh2b2lkICopXFx1MDAyNmFyZW5hO1xcbitcXHR1NjQgdXNlcl92bV9zdGFydCwgdmFsO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUHJldmVudCBHQ0MgYm91bmRzIHdhcm5pbmc6IGNhc3RpbmcgXFx1MDAyNmFyZW5hIHRvIHN0cnVjdCBicGZfYXJlbmEgKlxcbitcXHQgKiB0cmlnZ2VycyBib3VuZHMgY2hlY2tpbmcgc2luY2UgdGhlIG1hcCBkZWZpbml0aW9uIGlzIHNtYWxsZXIgdGhhblxcbitcXHQgKiBzdHJ1Y3QgYnBmX2FyZW5hLiBiYXJyaWVyX3ZhcigpIG1ha2VzIHRoZSBwb2ludGVyIG9wYXF1ZSB0byBHQ0MsXFxuK1xcdCAqIHByZXZlbnRpbmcgdGhlIGJvdW5kcyBhbmFseXNpcy5cXG4rXFx0ICovXFxuK1xcdGJhcnJpZXJfdmFyKHB0cik7XFxuK1xcdHVzZXJfdm1fc3RhcnQgPSBwdHItXFx1MDAzZXVzZXJfdm1fc3RhcnQ7XFxuK1xcdGZhdWx0X2FkZHIgPSB1c2VyX3ZtX3N0YXJ0ICsgMHg3ZmZmO1xcbitcXHRicGZfYWRkcl9zcGFjZV9jYXN0KHVzZXJfdm1fc3RhcnQsIDAsIDEpO1xcbitcXHQvKlxcbitcXHQgKiBBIHJlYWQtbW9kaWZ5LXdyaXRlIGNhcnJ5aW5nIEJQRl9GRVRDSCB3cml0ZXMgdG8gbWVtb3J5LCBzbyB0aGUgZmF1bHRcXG4rXFx0ICogaGFzIHRvIGJlIHJlcG9ydGVkIGFzIGEgV1JJVEUgZnJvbSB0aGUgZHN0X3JlZyBhZGRyZXNzLCBidXQgaXQgYWxzb1xcbitcXHQgKiByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gc3JjX3JlZywgc28gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGhhcyB0b1xcbitcXHQgKiBjbGVhciBzcmNfcmVnLiBQb2lzb24gaXQgdXAgZnJvbnQsIHRoZSByZXR1cm5lZCB2YWx1ZSBtdXN0IGJlIDAuXFxuK1xcdCAqL1xcbitcXHRhc20gdm9sYXRpbGUgKFxcbitcXHRcXHRcXFwicjEgPSAlW3VzZXJfdm1fc3RhcnRdO1xcXCJcXG4rXFx0XFx0XFxcInIyID0gMTtcXFwiXFxuK1xcdFxcdFxcXCIuOGJ5dGUgJVt4Y2hnX2luc25dO1xcXCIgLyogcjIgPSB4Y2hnKCh1MzIgKikocjEgKyAweDdmZmYpLCByMikgKi9cXG4rXFx0XFx0XFxcIiVbdmFsXSA9IHIyO1xcXCJcXG4rXFx0XFx0OiBbdmFsXSBcXFwiPXJcXFwiICh2YWwpXFxuK1xcdFxcdDogW3VzZXJfdm1fc3RhcnRdIFxcXCJyXFxcIiAodXNlcl92bV9zdGFydCksXFxuK1xcdFxcdCAgX19pbW1faW5zbih4Y2hnX2luc24sIHhjaGdfaW5zbilcXG4rXFx0XFx0OiBcXFwicjFcXFwiLCBcXFwicjJcXFwiXFxuK1xcdCk7XFxuK1xcdHJldHVybiB2YWw7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitfX3N0ZGVycihcXFwiRVJST1I6IEFyZW5hIFdSSVRFIGFjY2VzcyBhdCB1bm1hcHBlZCBhZGRyZXNzIDB4e3suKn19XFxcIilcXG4rX19zdGRlcnIoXFxcIkNQVToge3tbMC05XSt9fSBVSUQ6IDAgUElEOiB7e1swLTldK319IENvbW06IHt7Lip9fVxcXCIpXFxuK19fc3RkZXJyKFxcXCJDYWxsIHRyYWNlOlxcXFxuXFxcIlxcbitcXFwie3soW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFxcXFxcKzB4WzAtOWEtZkEtRl0rLzB4WzAtOWEtZkEtRl0rXFxcXG5cXFwiXFxuK1xcXCJ8WyBcXFxcdF0rW15cXFxcbl0rXFxcXG4pKn19XFxcIilcXG4raW50IHN0cmVhbV9hcmVuYV9jbXB4Y2hnX2ZhdWx0KHZvaWQgKmN0eClcXG4re1xcbitcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pbnNuIGNtcHhjaGdfaW5zbiA9IHtcXG4rXFx0XFx0LmNvZGVcXHQgPSAweGMzLFxcdC8qIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1cgKi9cXG4rXFx0XFx0LmRzdF9yZWcgPSAxLFxcdFxcdC8qIEJQRl9SRUdfMSAqL1xcbitcXHRcXHQuc3JjX3JlZyA9IDIsXFx0XFx0LyogQlBGX1JFR18yICovXFxuK1xcdFxcdC5vZmZcXHQgPSAweDdmZmYsXFxuK1xcdFxcdC5pbW1cXHQgPSAweGYxLFxcdC8qIEJQRl9DTVBYQ0hHICovXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBicGZfYXJlbmEgKnB0ciA9ICh2b2lkICopXFx1MDAyNmFyZW5hO1xcbitcXHR1NjQgdXNlcl92bV9zdGFydCwgdmFsO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUHJldmVudCBHQ0MgYm91bmRzIHdhcm5pbmc6IGNhc3RpbmcgXFx1MDAyNmFyZW5hIHRvIHN0cnVjdCBicGZfYXJlbmEgKlxcbitcXHQgKiB0cmlnZ2VycyBib3VuZHMgY2hlY2tpbmcgc2luY2UgdGhlIG1hcCBkZWZpbml0aW9uIGlzIHNtYWxsZXIgdGhhblxcbitcXHQgKiBzdHJ1Y3QgYnBmX2FyZW5hLiBiYXJyaWVyX3ZhcigpIG1ha2VzIHRoZSBwb2ludGVyIG9wYXF1ZSB0byBHQ0MsXFxuK1xcdCAqIHByZXZlbnRpbmcgdGhlIGJvdW5kcyBhbmFseXNpcy5cXG4rXFx0ICovXFxuK1xcdGJhcnJpZXJfdmFyKHB0cik7XFxuK1xcdHVzZXJfdm1fc3RhcnQgPSBwdHItXFx1MDAzZXVzZXJfdm1fc3RhcnQ7XFxuK1xcdGZhdWx0X2FkZHIgPSB1c2VyX3ZtX3N0YXJ0ICsgMHg3ZmZmO1xcbitcXHRicGZfYWRkcl9zcGFjZV9jYXN0KHVzZXJfdm1fc3RhcnQsIDAsIDEpO1xcbitcXHQvKlxcbitcXHQgKiBTYW1lIGFzIHRoZSBleGNoYW5nZSBhYm92ZSwgZXhjZXB0IHRoYXQgYSBCUEZfQ01QWENIRyByZWFkcyB0aGUgb2xkXFxuK1xcdCAqIHZhbHVlIGludG8gcjAgcmF0aGVyIHRoYW4gaW50byBzcmNfcmVnLCBzbyByMCBpcyB0aGUgcmVnaXN0ZXIgdGhlXFxuK1xcdCAqIGV4Y2VwdGlvbiBoYW5kbGVyIGhhcyB0byBjbGVhci4gSXQgZG91YmxlcyBhcyB0aGUgY29tcGFyZSB2YWx1ZSwgYnV0XFxuK1xcdCAqIHRoZSBjb21wYXJpc29uIG5ldmVyIGhhcHBlbnMgc2luY2UgdGhlIGFjY2VzcyBmYXVsdHMgZmlyc3QuXFxuK1xcdCAqL1xcbitcXHRhc20gdm9sYXRpbGUgKFxcbitcXHRcXHRcXFwicjEgPSAlW3VzZXJfdm1fc3RhcnRdO1xcXCJcXG4rXFx0XFx0XFxcInIwID0gMTtcXFwiXFxuK1xcdFxcdFxcXCJyMiA9IDI7XFxcIlxcbitcXHRcXHRcXFwiLjhieXRlICVbY21weGNoZ19pbnNuXTtcXFwiIC8qIHIwID0gY21weGNoZygodTMyICopKHIxICsgMHg3ZmZmKSwgcjAsIHIyKSAqL1xcbitcXHRcXHRcXFwiJVt2YWxdID0gcjA7XFxcIlxcbitcXHRcXHQ6IFt2YWxdIFxcXCI9clxcXCIgKHZhbClcXG4rXFx0XFx0OiBbdXNlcl92bV9zdGFydF0gXFxcInJcXFwiICh1c2VyX3ZtX3N0YXJ0KSxcXG4rXFx0XFx0ICBfX2ltbV9pbnNuKGNtcHhjaGdfaW5zbiwgY21weGNoZ19pbnNuKVxcbitcXHRcXHQ6IFxcXCJyMFxcXCIsIFxcXCJyMVxcXCIsIFxcXCJyMlxcXCJcXG4rXFx0KTtcXG4rXFx0cmV0dXJuIHZhbDtcXG4rfVxcbitcXG4gc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBzdWJwcm9nKHZvaWQpXFxuIHtcXG4gXFx0aW50IF9fYXJlbmEgKmFkZHIgPSAoaW50IF9fYXJlbmEgKikweGRlYWRiZWVmO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNDoxOS42MjAwMTA0NjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NDI3MDEzNzAyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnNuX2RlZjMyXCIsXG4gICAgXCJleF9oYW5kbGVyX2JwZlwiLFxuICAgIFwiYnBmX2ppdF9lbWl0X2luc25cIixcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVycyAoeDg2LCBhcm02NCwgcmlzY3YsIHMzOTApIGFuZCB0aGUgQlBGIHZlcmlmaWVyIHRvIGNvcnJlY3RseSBoYW5kbGUgZXhjZXB0aW9ucyBmb3IgYXRvbWljIG9wZXJhdGlvbnMgaW4gdGhlIEJQRiBhcmVuYS4gSXQgaW50cm9kdWNlcyBgYnBmX2F0b21pY19sb2FkX3JlZ2AgdG8gaWRlbnRpZnkgdGhlIHJlZ2lzdGVyIHRoYXQgbmVlZHMgdG8gYmUgY2xlYXJlZCB3aGVuIGFuIGF0b21pYyBpbnN0cnVjdGlvbiBmYXVsdHMsIGFuZCBlbnN1cmVzIHRoYXQgcmVhZC1tb2RpZnktd3JpdGUgb3BlcmF0aW9ucyBhcmUgY29ycmVjdGx5IHJlcG9ydGVkIGFzIHdyaXRlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJQRiBzdWJzeXN0ZW0pIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNGFhNzUyMWY4NTgwM2ZkM2ExYmFlMTQ1MTlkYTBhYmRjMWRmMDFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDA6MzQ6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBkMTRkMjk3ZWJiOTY3Li43NGI0MDgzNzkxZGEzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMTA4MiwyMyArMTA4MiwyNyBAQCBzdGF0aWMgdm9pZCBidWlsZF9lcGlsb2d1ZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIHdhc19jbGFzc2ljKVxuICAqXG4gICogQml0IGxheW91dCBvZiBgZml4dXBgICgzMi1iaXQpOlxuICAqXG4tICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rXG4tICogfCAgIDMxLTI3ICAgfCAyNi0yMiAgfCAgICAgMjEgICAgfCAgIDIwLTE2ICAgfCAgIDE1LTAgICB8XG4tICogfCAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8XG4tICogfCBGSVhVUF9SRUcgfCBVbnVzZWQgfCBBUkVOQV9BQ0MgfCBBUkVOQV9SRUcgfCAgT0ZGU0VUICB8XG4tICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rXG4rICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLStcbisgKiB8ICAgMzEtMjcgICB8IDI2LTIzICB8ICAgICAgMjIgICAgIHwgICAgIDIxICAgIHwgICAyMC0xNiAgIHwgICAxNS0wICAgfFxuKyAqIHwgICAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8XG4rICogfCBGSVhVUF9SRUcgfCBVbnVzZWQgfCBBUkVOQV9XUklURSB8IEFSRU5BX0FDQyB8IEFSRU5BX1JFRyB8ICBPRkZTRVQgIHxcbisgKiArLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tK1xuICAqXG4gICogLSBPRkZTRVQgKDE2IGJpdHMpOiBPZmZzZXQgdXNlZCB0byBjb21wdXRlIGFkZHJlc3MgZm9yIExvYWQvU3RvcmUgaW5zdHJ1Y3Rpb24uXG4gICogLSBBUkVOQV9SRUcgKDUgYml0cyk6IFJlZ2lzdGVyIHRoYXQgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGFkZHJlc3MgZm9yIGxvYWQvc3RvcmUgd2hlblxuICAqICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NpbmcgdGhlIGFyZW5hIHJlZ2lvbi5cbiAgKiAtIEFSRU5BX0FDQ0VTUyAoMSBiaXQpOiBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24gYWNjZXNzZWQgdGhlIGFyZW5hIHJlZ2lvbi5cbisgKiAtIEFSRU5BX1dSSVRFICgxIGJpdCk6IFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiB3cm90ZSB0byB0aGUgYXJlbmEgcmVnaW9uLlxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW5kZXBlbmRlbnQgb2YgRklYVVBfUkVHLCBzaW5jZSBhIHJlYWQtbW9kaWZ5LXdyaXRlIGJvdGggd3JpdGVzIHRvXG4rICogICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgYW5kIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBhIHJlZ2lzdGVyLlxuICAqIC0gRklYVVBfUkVHICg1IGJpdHMpOiBEZXN0aW5hdGlvbiByZWdpc3RlciBmb3IgdGhlIGxvYWQgaW5zdHJ1Y3Rpb24gKGNsZWFyZWQgb24gZmF1bHQpIG9yIHNldCB0b1xuLSAqICAgICAgICAgICAgICAgICAgICAgICBET05UX0NMRUFSIGlmIGl0IGlzIGEgc3RvcmUgaW5zdHJ1Y3Rpb24uXG4rICogICAgICAgICAgICAgICAgICAgICAgIERPTlRfQ0xFQVIgaWYgdGhlIGluc3RydWN0aW9uIGRvZXMgbm90IHJlYWQgaW50byBhIHJlZ2lzdGVyLlxuICAqL1xuIFxuICNkZWZpbmUgQlBGX0ZJWFVQX09GRlNFVF9NQVNLICAgICAgR0VOTUFTSygxNSwgMClcbiAjZGVmaW5lIEJQRl9GSVhVUF9BUkVOQV9SRUdfTUFTSyAgIEdFTk1BU0soMjAsIDE2KVxuICNkZWZpbmUgQlBGX0FSRU5BX0FDQ0VTUyAgICAgICAgICAgQklUKDIxKVxuKyNkZWZpbmUgQlBGX0FSRU5BX1dSSVRFICAgICAgICAgICAgQklUKDIyKVxuICNkZWZpbmUgQlBGX0ZJWFVQX1JFR19NQVNLXHRHRU5NQVNLKDMxLCAyNylcbiAjZGVmaW5lIERPTlRfQ0xFQVIgNSAvKiBVbnVzZWQgQVJNNjQgcmVnaXN0ZXIgZnJvbSBCUEYncyBQT1YgKi9cbiBcbkBAIC0xMTA5LDcgKzExMTMsNyBAQCBib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxuIFx0czE2IG9mZiA9IEZJRUxEX0dFVChCUEZfRklYVVBfT0ZGU0VUX01BU0ssIGV4LVx1MDAzZWZpeHVwKTtcbiBcdGludCBhcmVuYV9yZWcgPSBGSUVMRF9HRVQoQlBGX0ZJWFVQX0FSRU5BX1JFR19NQVNLLCBleC1cdTAwM2VmaXh1cCk7XG4gXHRib29sIGlzX2FyZW5hID0gISEoZXgtXHUwMDNlZml4dXAgXHUwMDI2IEJQRl9BUkVOQV9BQ0NFU1MpO1xuLVx0Ym9vbCBpc193cml0ZSA9IChkc3RfcmVnID09IERPTlRfQ0xFQVIpO1xuK1x0Ym9vbCBpc193cml0ZSA9ICEhKGV4LVx1MDAzZWZpeHVwIFx1MDAyNiBCUEZfQVJFTkFfV1JJVEUpO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyO1xuIFxuIFx0aWYgKGlzX2FyZW5hKSB7XG5AQCAtMTEzMiw3ICsxMTM2LDcgQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIHtcbiBcdG9mZl90IGluc19vZmZzZXQ7XG4gXHRzMTYgb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4tXHRib29sIGlzX2FyZW5hO1xuK1x0Ym9vbCBpc19hcmVuYSwgaXNfd3JpdGU7XG4gXHRpbnQgYXJlbmFfcmVnO1xuIFx0dW5zaWduZWQgbG9uZyBwYztcbiBcdHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4O1xuQEAgLTExODEsMTUgKzExODUsMTggQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0LypcbiBcdCAqIEEgbG9hZC1hY3F1aXJlIGlzIG9mIEJQRl9TVFggY2xhc3MsIGJ1dCByZWFkcyBmcm9tIHNyY19yZWcgaW50b1xuIFx0ICogZHN0X3JlZyBsaWtlIGEgQlBGX0xEWCBkb2VzLCBoZW5jZSBpdCBtdXN0IG5vdCBiZSB0cmVhdGVkIGFzIGEgc3RvcmVcbi1cdCAqIGhlcmUuXG4rXHQgKiBoZXJlLiBBIHJlYWQtbW9kaWZ5LXdyaXRlIGNhcnJ5aW5nIEJQRl9GRVRDSCBpcyByZXBvcnRlZCBhcyBhIHdyaXRlXG4rXHQgKiBldmVuIHRob3VnaCBpdCBkb2VzIGhhdmUgYSByZWdpc3RlciB0byBjbGVhciwgc2VlIHRoZSBjYWxsZXJzLlxuIFx0ICovXG4tXHRpZiAoQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX0xEWCBcdTAwMjZcdTAwMjYgIWJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikpXG4tXHRcdGRzdF9yZWcgPSBET05UX0NMRUFSO1xuK1x0aXNfd3JpdGUgPSBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTERYIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAhYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKTtcbiBcbiBcdGV4LVx1MDAzZWZpeHVwID0gRklFTERfUFJFUChCUEZfRklYVVBfUkVHX01BU0ssIGRzdF9yZWcpO1xuIFxuIFx0aWYgKGlzX2FyZW5hKSB7XG4gXHRcdGV4LVx1MDAzZWZpeHVwIHw9IEJQRl9BUkVOQV9BQ0NFU1M7XG4rXHRcdGlmIChpc193cml0ZSlcbitcdFx0XHRleC1cdTAwM2VmaXh1cCB8PSBCUEZfQVJFTkFfV1JJVEU7XG4gXHRcdC8qXG4gXHRcdCAqIGluc24tXHUwMDNlc3JjX3JlZy9kc3RfcmVnIGhvbGRzIHRoZSBhZGRyZXNzIGluIHRoZSBhcmVuYSByZWdpb24gd2l0aCB1cHBlciAzMi1iaXRzXG4gXHRcdCAqIGJlaW5nIHplcm8gYmVjYXVzZSBvZiBhIHByZWNlZGluZyBhZGRyX3NwYWNlX2Nhc3Qoclx1MDAzY25cdTAwM2UsIDB4MCwgMHgxKSBpbnN0cnVjdGlvbi5cbkBAIC0xODg5LDcgKzE4OTYsNyBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgZHN0KTtcbitcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgRE9OVF9DTEVBUik7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0YnJlYWs7XG5AQCAtMTk1Niw3ICsxOTYzLDcgQEAgc3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zblxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGRzdCk7XG4rXHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIERPTlRfQ0xFQVIpO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdGJyZWFrO1xuQEAgLTE5NzksNyArMTk4NiwxNiBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcbiBcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX0FUT01JQykge1xuLVx0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGRzdCk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBIGxvYWQtYWNxdWlyZSByZWFkcyBpbnRvIGRzdF9yZWcsIGFuZCBhIHJlYWQtbW9kaWZ5LXdyaXRlXG4rXHRcdFx0ICogY2FycnlpbmcgQlBGX0ZFVENIIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBzcmNfcmVnLCBvciBpbnRvXG4rXHRcdFx0ICogcjAgZm9yIGEgQlBGX0NNUFhDSEcuIENsZWFyIHRoYXQgcmVnaXN0ZXIgb24gZmF1bHQsIHRoZVxuK1x0XHRcdCAqIHJlbWFpbmluZyBhdG9taWNzIGhhdmUgbm8gZGVzdGluYXRpb24gcmVnaXN0ZXIuXG4rXHRcdFx0ICovXG4rXHRcdFx0aW50IGxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcbitcbitcdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgY3R4LCBsb2FkX3JlZyBcdTAwM2MgMCA/XG4rXHRcdFx0XHRcdFx0ICAgIERPTlRfQ0xFQVIgOiBicGYyYTY0W2xvYWRfcmVnXSk7XG4gXHRcdFx0aWYgKHJldClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuaW5kZXggNmI5OTcyYjA3YzFiMC4uMjUwNGRmMWZhMTExOCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbisrKyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbkBAIC0xOTkyLDEwICsxOTkyLDE5IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFx0XHRcdHJldCA9IGVtaXRfYXRvbWljX3JtdyhyZCwgcnMsIGluc24sIGN0eCk7XG4gXG4gXHRcdC8qIHJldCBjYW4gYmUgMSAoc2tpcC16ZXh0KTsgZXh0YWJsZSBlbnRyeSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZCAqL1xuLVx0XHRpZiAocmV0IFx1MDAzZT0gMClcbi1cdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbixcbi1cdFx0XHRcdGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikgPyByZCA6IFJFR19ET05UX0NMRUFSX01BUktFUixcbi1cdFx0XHRcdGN0eCkgPzogcmV0O1xuK1x0XHRpZiAocmV0IFx1MDAzZT0gMCkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogQSBsb2FkLWFjcXVpcmUgcmVhZHMgaW50byBkc3RfcmVnLCBhbmQgYSByZWFkLW1vZGlmeS13cml0ZVxuK1x0XHRcdCAqIGNhcnJ5aW5nIEJQRl9GRVRDSCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gc3JjX3JlZywgb3IgaW50b1xuK1x0XHRcdCAqIHIwIGZvciBhIEJQRl9DTVBYQ0hHLiBDbGVhciB0aGF0IHJlZ2lzdGVyIG9uIGZhdWx0LCB0aGVcbitcdFx0XHQgKiByZW1haW5pbmcgYXRvbWljcyBoYXZlIG5vIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG4rXG4rXHRcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGxvYWRfcmVnIFx1MDAzYyAwID9cbitcdFx0XHRcdFx0UkVHX0RPTlRfQ0xFQVJfTUFSS0VSIDogcmVnbWFwW2xvYWRfcmVnXSxcbitcdFx0XHRcdFx0Y3R4KSA/OiByZXQ7XG4rXHRcdH1cbiBcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBiNjA4Nzc0NzhiNDVkLi5jNDY4NzJiMDcxY2U3IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTc3NCw2ICs3NzQsOCBAQCBzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX2F0b21pY19wcmUoc3RydWN0IGJwZl9qaXQgKmppdCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXG4ge1xuK1x0aW50IGxvYWRfcmVnO1xuK1xuIFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX0FUT01JQylcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTc4Myw2ICs3ODUsMTQgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsXG4gXHRFTUlUNCgweGI5MDgwMDAwLCBSRUdfVzEsIGluc24tXHUwMDNlZHN0X3JlZyk7XG4gXHRwcm9iZS1cdTAwM2VhcmVuYV9yZWcgPSBSRUdfVzE7XG4gXHRwcm9iZS1cdTAwM2VwcmcgPSBqaXQtXHUwMDNlcHJnO1xuK1x0LypcbitcdCAqIEEgcmVhZC1tb2RpZnktd3JpdGUgY2FycnlpbmcgQlBGX0ZFVENIIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50b1xuK1x0ICogc3JjX3JlZywgb3IgaW50byByMCBmb3IgYSBCUEZfQ01QWENIRy4gQ2xlYXIgdGhhdCByZWdpc3RlciBvblxuK1x0ICogZmF1bHQsIHRoZSByZW1haW5pbmcgYXRvbWljcyBvbmx5IHdyaXRlIG1lbW9yeS5cbitcdCAqL1xuK1x0bG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xuK1x0aWYgKGxvYWRfcmVnIFx1MDAzZT0gMClcbitcdFx0cHJvYmUtXHUwMDNlcmVnID0gcmVnMmhleFtsb2FkX3JlZ107XG4gfVxuIFxuIHN0YXRpYyBpbnQgYnBmX2ppdF9wcm9iZV9wb3N0KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG5AQCAtMTY4NCw2ICsxNjk0LDcgQEAgc3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcbiBcdFx0XHRpZiAobG9hZF9wcm9iZS5wcmcgIT0gLTEpIHtcbiBcdFx0XHRcdHByb2JlLnByZyA9IGppdC1cdTAwM2Vwcmc7XG4gXHRcdFx0XHRwcm9iZS5hcmVuYV9yZWcgPSBsb2FkX3Byb2JlLmFyZW5hX3JlZztcbitcdFx0XHRcdHByb2JlLnJlZyA9IGxvYWRfcHJvYmUucmVnO1xuIFx0XHRcdH1cbiBcdFx0XHRsb29wX3N0YXJ0ID0gaml0LVx1MDAzZXByZztcbiBcdFx0XHQvKiAwOiB7Y3N5fGNzZ30gJXcwLCVzcmMsb2ZmKCVhcmVuYSkgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IDhkZGRiNWQ3YWYyMWIuLmQ5MjA3NzJhZjdkNWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTE0NzMsMTcgKzE0NzMsMjAgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19sZF9zdF9pbmRleCh1OCAqKnBwcm9nLCB1MzIgYXRvbWljX29wLCB1MzIgc2l6ZSxcbiAgKlxuICAqIEJpdCBsYXlvdXQgb2YgYGZpeHVwYCAoMzItYml0KTpcbiAgKlxuLSAqICstLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLStcbi0gKiB8IDMxICAgICAgICB8IDMwLTI0ICB8ICAgMjMtMTYgICB8ICAgMTUtOCAgfCAgICA3LTAgICB8XG4tICogfCAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgfFxuLSAqIHwgQVJFTkFfQUNDIHwgVW51c2VkIHwgQVJFTkFfUkVHIHwgRFNUX1JFRyB8IElOU05fTEVOIHxcbi0gKiArLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rXG4rICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rXG4rICogfCAzMSAgICAgICAgfCAzMCAgICAgICAgICB8IDI5LTI0ICB8ICAgMjMtMTYgICB8ICAgMTUtOCAgfCAgICA3LTAgICB8XG4rICogfCAgICAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICB8XG4rICogfCBBUkVOQV9BQ0MgfCBBUkVOQV9XUklURSB8IFVudXNlZCB8IEFSRU5BX1JFRyB8IERTVF9SRUcgfCBJTlNOX0xFTiB8XG4rICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rXG4gICpcbiAgKiAtIElOU05fTEVOICg4IGJpdHMpOiBMZW5ndGggb2YgZmF1bHRpbmcgaW5zbiAobWF4IHg4NiBpbnNuID0gMTUgYnl0ZXMgKGZpdHMgaW4gOCBiaXRzKSkuXG4gICogLSBEU1RfUkVHICAoOCBiaXRzKTogT2Zmc2V0IG9mIGRzdF9yZWcgZnJvbSByZWcycHRfcmVnc1tdIChtYXggb2Zmc2V0ID0gMTEyIChmaXRzIGluIDggYml0cykpLlxuLSAqICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgc2V0IHRvIERPTlRfQ0xFQVIgaWYgdGhlIGluc24gaXMgYSBzdG9yZS5cbisgKiAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHNldCB0byBET05UX0NMRUFSIGlmIHRoZSBpbnNuIGRvZXMgbm90IHJlYWQgaW50byBhIHJlZ2lzdGVyLlxuICAqIC0gQVJFTkFfUkVHICg4IGJpdHMpOiBPZmZzZXQgb2YgdGhlIHJlZ2lzdGVyIHRoYXQgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlXG4gICogICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgZm9yIGxvYWQvc3RvcmUgd2hlbiBhY2Nlc3NpbmcgdGhlIGFyZW5hIHJlZ2lvbi5cbisgKiAtIEFSRU5BX1dSSVRFICgxIGJpdCk6IFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiB3cm90ZSB0byB0aGUgYXJlbmEgcmVnaW9uLlxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW5kZXBlbmRlbnQgb2YgRFNUX1JFRywgc2luY2UgYSByZWFkLW1vZGlmeS13cml0ZSBib3RoIHdyaXRlcyB0b1xuKyAqICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5IGFuZCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gYSByZWdpc3Rlci5cbiAgKiAtIEFSRU5BX0FDQ0VTUyAoMSBiaXQpOiBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24gYWNjZXNzZWQgdGhlIGFyZW5hIHJlZ2lvbi5cbiAgKlxuICAqIEJpdCBsYXlvdXQgb2YgYGRhdGFgICgzMi1iaXQpOlxuQEAgLTE1MDIsNiArMTUwNSw3IEBAIHN0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3RfaW5kZXgodTggKipwcHJvZywgdTMyIGF0b21pY19vcCwgdTMyIHNpemUsXG4gI2RlZmluZSBGSVhVUF9JTlNOX0xFTl9NQVNLXHRHRU5NQVNLKDcsIDApXG4gI2RlZmluZSBGSVhVUF9SRUdfTUFTS1x0XHRHRU5NQVNLKDE1LCA4KVxuICNkZWZpbmUgRklYVVBfQVJFTkFfUkVHX01BU0tcdEdFTk1BU0soMjMsIDE2KVxuKyNkZWZpbmUgRklYVVBfQVJFTkFfV1JJVEVcdEJJVCgzMClcbiAjZGVmaW5lIEZJWFVQX0FSRU5BX0FDQ0VTU1x0QklUKDMxKVxuICNkZWZpbmUgREFUQV9BUkVOQV9PRkZTRVRfTUFTS1x0R0VOTUFTSygzMSwgMTYpXG4gXG5AQCAtMTUxMCw3ICsxNTE0LDcgQEAgYm9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICp4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdHUzMiByZWcgPSBGSUVMRF9HRVQoRklYVVBfUkVHX01BU0ssIHgtXHUwMDNlZml4dXApO1xuIFx0dTMyIGluc25fbGVuID0gRklFTERfR0VUKEZJWFVQX0lOU05fTEVOX01BU0ssIHgtXHUwMDNlZml4dXApO1xuIFx0Ym9vbCBpc19hcmVuYSA9ICEhKHgtXHUwMDNlZml4dXAgXHUwMDI2IEZJWFVQX0FSRU5BX0FDQ0VTUyk7XG4tXHRib29sIGlzX3dyaXRlID0gKHJlZyA9PSBET05UX0NMRUFSKTtcbitcdGJvb2wgaXNfd3JpdGUgPSAhISh4LVx1MDAzZWZpeHVwIFx1MDAyNiBGSVhVUF9BUkVOQV9XUklURSk7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHI7XG4gXHRzMTYgb2ZmO1xuIFx0dTMyIGFyZW5hX3JlZztcbkBAIC0yMzQ4LDYgKzIzNTIsNyBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdFx0c3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXg7XG4gXHRcdFx0XHR1OCAqX2luc24gPSBpbWFnZSArIHByb2dsZW4gKyAoc3RhcnRfb2ZfbGR4IC0gdGVtcCk7XG4gXHRcdFx0XHR1MzIgYXJlbmFfcmVnLCBmaXh1cF9yZWc7XG4rXHRcdFx0XHRib29sIGlzX3dyaXRlO1xuIFx0XHRcdFx0czY0IGRlbHRhO1xuIFxuIFx0XHRcdFx0aWYgKCFicGZfcHJvZy1cdTAwM2VhdXgtXHUwMDNlZXh0YWJsZSlcbkBAIC0yMzg0LDE1ICsyMzg5LDI5IEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0XHQgICAgYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSkge1xuIFx0XHRcdFx0XHRhcmVuYV9yZWcgPSByZWcycHRfcmVnc1tzcmNfcmVnXTtcbiBcdFx0XHRcdFx0Zml4dXBfcmVnID0gcmVnMnB0X3JlZ3NbZHN0X3JlZ107XG4rXHRcdFx0XHRcdGlzX3dyaXRlID0gZmFsc2U7XG4gXHRcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0XHQvKlxuK1x0XHRcdFx0XHQgKiBBIHN0b3JlIGhhcyBubyBkZXN0aW5hdGlvbiByZWdpc3RlciB0byBjbGVhcixcbitcdFx0XHRcdFx0ICogZXhjZXB0IGZvciBhIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggQlBGX0ZFVENILFxuK1x0XHRcdFx0XHQgKiB3aGljaCBhbHNvIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBzcmNfcmVnLCBvclxuK1x0XHRcdFx0XHQgKiBpbnRvIHIwIGZvciBhIEJQRl9DTVBYQ0hHLiBFaXRoZXIgd2F5IHRoZSBhY2Nlc3NcbitcdFx0XHRcdFx0ICogaXMgc3RpbGwgcmVwb3J0ZWQgYXMgYSB3cml0ZS5cbitcdFx0XHRcdFx0ICovXG4rXHRcdFx0XHRcdGludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG4rXG4gXHRcdFx0XHRcdGFyZW5hX3JlZyA9IHJlZzJwdF9yZWdzW2RzdF9yZWddO1xuLVx0XHRcdFx0XHRmaXh1cF9yZWcgPSBET05UX0NMRUFSO1xuK1x0XHRcdFx0XHRmaXh1cF9yZWcgPSBsb2FkX3JlZyBcdTAwM2MgMCA/IERPTlRfQ0xFQVIgOlxuK1x0XHRcdFx0XHRcdCAgICByZWcycHRfcmVnc1tsb2FkX3JlZ107XG4rXHRcdFx0XHRcdGlzX3dyaXRlID0gdHJ1ZTtcbiBcdFx0XHRcdH1cbiBcbiBcdFx0XHRcdGV4LVx1MDAzZWZpeHVwID0gRklFTERfUFJFUChGSVhVUF9JTlNOX0xFTl9NQVNLLCBwcm9nIC0gc3RhcnRfb2ZfbGR4KSB8XG4gXHRcdFx0XHRcdCAgICBGSUVMRF9QUkVQKEZJWFVQX0FSRU5BX1JFR19NQVNLLCBhcmVuYV9yZWcpIHxcbiBcdFx0XHRcdFx0ICAgIEZJRUxEX1BSRVAoRklYVVBfUkVHX01BU0ssIGZpeHVwX3JlZyk7XG4gXHRcdFx0XHRleC1cdTAwM2VmaXh1cCB8PSBGSVhVUF9BUkVOQV9BQ0NFU1M7XG4rXHRcdFx0XHRpZiAoaXNfd3JpdGUpXG4rXHRcdFx0XHRcdGV4LVx1MDAzZWZpeHVwIHw9IEZJWFVQX0FSRU5BX1dSSVRFO1xuIFxuIFx0XHRcdFx0ZXgtXHUwMDNlZGF0YSB8PSBGSUVMRF9QUkVQKERBVEFfQVJFTkFfT0ZGU0VUX01BU0ssIGluc24tXHUwMDNlb2ZmKTtcbiBcdFx0XHR9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbmluZGV4IDRlZGJhODE4MmRiMWIuLjE1ZDgzNjg0YzZlOTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5AQCAtNDE0LDYgKzQxNCwzMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX2F0b21pY19pc19sb2FkX2FjcShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHQgICAgICAgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRO1xuIH1cbiBcbisvKlxuKyAqIEdpdmVuIGFuIGluc3RydWN0aW9uIEBpbnNuLCByZXR1cm4gdGhlIG51bWJlciBvZiB0aGUgQlBGIHJlZ2lzdGVyIHRoYXQgYVxuKyAqIEJQRl9BVE9NSUMgcmVhZHMgdGhlIHZhbHVlIGF0IGl0cyBtZW1vcnkgb3BlcmFuZCBpbnRvLCBvciAtMSBpZiB0aGVyZSBpc1xuKyAqIG5vIHN1Y2ggcmVnaXN0ZXIuIFRoYXQgaXMgdGhlIHJlZ2lzdGVyIGEgQlBGX1BST0JFX0FUT01JQyBoYXMgdG8gY2xlYXIgd2hlblxuKyAqIHRoZSBhY2Nlc3MgZmF1bHRzLiBMaWtlIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoKSwgQGluc24gaXMgbm90IGFzc3VtZWQgdG9cbisgKiBiZSBhIEJQRl9BVE9NSUMgaGVyZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBicGZfYXRvbWljX2xvYWRfcmVnKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbit7XG4rXHRpZiAoQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1NUWCB8fFxuK1x0ICAgIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4rXHQgICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX0FUT01JQykpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdHN3aXRjaCAoaW5zbi1cdTAwM2VpbW0pIHtcbitcdGNhc2UgQlBGX0xPQURfQUNROlxuK1x0XHRyZXR1cm4gaW5zbi1cdTAwM2Vkc3RfcmVnO1xuK1x0Y2FzZSBCUEZfQ01QWENIRzpcbitcdFx0cmV0dXJuIEJQRl9SRUdfMDtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAoaW5zbi1cdTAwM2VpbW0gXHUwMDI2IEJQRl9GRVRDSCkgPyBpbnNuLVx1MDAzZXNyY19yZWcgOiAtMTtcbitcdH1cbit9XG4rXG4gLyogTWVtb3J5IHN0b3JlLCAqKHVpbnQgKikgKGRzdF9yZWcgKyBvZmYxNikgPSBpbW0zMiAqL1xuIFxuICNkZWZpbmUgQlBGX1NUX01FTShTSVpFLCBEU1QsIE9GRiwgSU1NKVx0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2ZpeHVwcy5jIGIva2VybmVsL2JwZi9maXh1cHMuY1xuaW5kZXggNjYxZTJkMTNhNjA0Mi4uYzRiZDcwYmVmYmI1YyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmNcbisrKyBiL2tlcm5lbC9icGYvZml4dXBzLmNcbkBAIC00OSwxNiArNDksNyBAQCBzdGF0aWMgaW50IGluc25fZGVmX3JlZ25vKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdGNhc2UgQlBGX1NUOlxuIFx0XHRyZXR1cm4gLTE7XG4gXHRjYXNlIEJQRl9TVFg6XG4tXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgfHxcbi1cdFx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX0FUT01JQykge1xuLVx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSA9PSBCUEZfQ01QWENIRylcbi1cdFx0XHRcdHJldHVybiBCUEZfUkVHXzA7XG4tXHRcdFx0ZWxzZSBpZiAoaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRKVxuLVx0XHRcdFx0cmV0dXJuIGluc24tXHUwMDNlZHN0X3JlZztcbi1cdFx0XHRlbHNlIGlmIChpbnNuLVx1MDAzZWltbSBcdTAwMjYgQlBGX0ZFVENIKVxuLVx0XHRcdFx0cmV0dXJuIGluc24tXHUwMDNlc3JjX3JlZztcbi1cdFx0fVxuLVx0XHRyZXR1cm4gLTE7XG4rXHRcdHJldHVybiBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIGluc24tXHUwMDNlZHN0X3JlZztcbiBcdH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGFkZDNhZmZjNTcwMzUuLjczYTJlOGJiMTc4MmEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTY0ODUsMjEgKzY0ODUsMTYgQEAgc3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0fVxuIFxuLVx0aWYgKGluc24tXHUwMDNlaW1tIFx1MDAyNiBCUEZfRkVUQ0gpIHtcbi1cdFx0aWYgKGluc24tXHUwMDNlaW1tID09IEJQRl9DTVBYQ0hHKVxuLVx0XHRcdGxvYWRfcmVnID0gQlBGX1JFR18wO1xuLVx0XHRlbHNlXG4tXHRcdFx0bG9hZF9yZWcgPSBpbnNuLVx1MDAzZXNyY19yZWc7XG4tXG4rXHQvKlxuK1x0ICogQSBuZWdhdGl2ZSBsb2FkX3JlZyBtZWFucyB0aGF0IHRoaXMgaW5zdHJ1Y3Rpb24gYWNjZXNzZXMgYSBtZW1vcnlcbitcdCAqIGxvY2F0aW9uIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGxvYWQgaXQgaW50byBhIHJlZ2lzdGVyLlxuK1x0ICovXG4rXHRsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG4rXHRpZiAobG9hZF9yZWcgXHUwMDNlPSAwKSB7XG4gXHRcdC8qIGNoZWNrIGFuZCByZWNvcmQgbG9hZCBvZiBvbGQgdmFsdWUgKi9cbiBcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGxvYWRfcmVnLCBEU1RfT1ApO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4tXHR9IGVsc2Uge1xuLVx0XHQvKiBUaGlzIGluc3RydWN0aW9uIGFjY2Vzc2VzIGEgbWVtb3J5IGxvY2F0aW9uIGJ1dCBkb2Vzbid0XG4tXHRcdCAqIGFjdHVhbGx5IGxvYWQgaXQgaW50byBhIHJlZ2lzdGVyLlxuLVx0XHQgKi9cbi1cdFx0bG9hZF9yZWcgPSAtMTtcbiBcdH1cbiBcbiBcdGRzdF9yZWcgPSBjdXJfcmVncyhlbnYpICsgaW5zbi1cdTAwM2Vkc3RfcmVnO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbmluZGV4IDE1ZGQzYWUyYTg0YjcuLmU0ZTkzNzQzMDllMjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbkBAIC0xMDUsNiArMTA1LDEwIEBAIHZvaWQgdGVzdF9zdHJlYW1fYXJlbmFfZmF1bHRfYWRkcmVzcyh2b2lkKVxuIFx0XHR0ZXN0X2FkZHJlc3Moc2tlbC1cdTAwM2Vwcm9ncy5zdHJlYW1fYXJlbmFfd3JpdGVfZmF1bHQsIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWZhdWx0X2FkZHIpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJsb2FkX2FjcXVpcmVfZmF1bHRcIikpXG4gXHRcdHRlc3RfYWRkcmVzcyhza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV9sb2FkX2FjcXVpcmVfZmF1bHQsIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWZhdWx0X2FkZHIpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ4Y2hnX2ZhdWx0XCIpKVxuK1x0XHR0ZXN0X2FkZHJlc3Moc2tlbC1cdTAwM2Vwcm9ncy5zdHJlYW1fYXJlbmFfeGNoZ19mYXVsdCwgXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmF1bHRfYWRkcik7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImNtcHhjaGdfZmF1bHRcIikpXG4rXHRcdHRlc3RfYWRkcmVzcyhza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV9jbXB4Y2hnX2ZhdWx0LCBcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2VmYXVsdF9hZGRyKTtcbiBcbiBcdHN0cmVhbV9fZGVzdHJveShza2VsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXG5pbmRleCBjZjU1MzNlMTFmMzljLi4wMGEzNzkzM2U0MTFkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbkBAIC0yMjksNiArMjI5LDEwNyBAQCBpbnQgc3RyZWFtX2FyZW5hX2xvYWRfYWNxdWlyZV9mYXVsdCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gdmFsO1xuIH1cbiBcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK19fc3RkZXJyKFwiRVJST1I6IEFyZW5hIFdSSVRFIGFjY2VzcyBhdCB1bm1hcHBlZCBhZGRyZXNzIDB4e3suKn19XCIpXG4rX19zdGRlcnIoXCJDUFU6IHt7WzAtOV0rfX0gVUlEOiAwIFBJRDoge3tbMC05XSt9fSBDb21tOiB7ey4qfX1cIilcbitfX3N0ZGVycihcIkNhbGwgdHJhY2U6XFxuXCJcbitcInt7KFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKzB4WzAtOWEtZkEtRl0rLzB4WzAtOWEtZkEtRl0rXFxuXCJcbitcInxbIFxcdF0rW15cXG5dK1xcbikqfX1cIilcbitpbnQgc3RyZWFtX2FyZW5hX3hjaGdfZmF1bHQodm9pZCAqY3R4KVxuK3tcbitcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24geGNoZ19pbnNuID0ge1xuK1x0XHQuY29kZVx0ID0gMHhjMyxcdC8qIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1cgKi9cbitcdFx0LmRzdF9yZWcgPSAxLFx0XHQvKiBCUEZfUkVHXzEgKi9cbitcdFx0LnNyY19yZWcgPSAyLFx0XHQvKiBCUEZfUkVHXzIgKi9cbitcdFx0Lm9mZlx0ID0gMHg3ZmZmLFxuK1x0XHQuaW1tXHQgPSAweGUxLFx0LyogQlBGX1hDSEcgKi9cbitcdH07XG4rXHRzdHJ1Y3QgYnBmX2FyZW5hICpwdHIgPSAodm9pZCAqKVx1MDAyNmFyZW5hO1xuK1x0dTY0IHVzZXJfdm1fc3RhcnQsIHZhbDtcbitcbitcdC8qXG4rXHQgKiBQcmV2ZW50IEdDQyBib3VuZHMgd2FybmluZzogY2FzdGluZyBcdTAwMjZhcmVuYSB0byBzdHJ1Y3QgYnBmX2FyZW5hICpcbitcdCAqIHRyaWdnZXJzIGJvdW5kcyBjaGVja2luZyBzaW5jZSB0aGUgbWFwIGRlZmluaXRpb24gaXMgc21hbGxlciB0aGFuXG4rXHQgKiBzdHJ1Y3QgYnBmX2FyZW5hLiBiYXJyaWVyX3ZhcigpIG1ha2VzIHRoZSBwb2ludGVyIG9wYXF1ZSB0byBHQ0MsXG4rXHQgKiBwcmV2ZW50aW5nIHRoZSBib3VuZHMgYW5hbHlzaXMuXG4rXHQgKi9cbitcdGJhcnJpZXJfdmFyKHB0cik7XG4rXHR1c2VyX3ZtX3N0YXJ0ID0gcHRyLVx1MDAzZXVzZXJfdm1fc3RhcnQ7XG4rXHRmYXVsdF9hZGRyID0gdXNlcl92bV9zdGFydCArIDB4N2ZmZjtcbitcdGJwZl9hZGRyX3NwYWNlX2Nhc3QodXNlcl92bV9zdGFydCwgMCwgMSk7XG4rXHQvKlxuK1x0ICogQSByZWFkLW1vZGlmeS13cml0ZSBjYXJyeWluZyBCUEZfRkVUQ0ggd3JpdGVzIHRvIG1lbW9yeSwgc28gdGhlIGZhdWx0XG4rXHQgKiBoYXMgdG8gYmUgcmVwb3J0ZWQgYXMgYSBXUklURSBmcm9tIHRoZSBkc3RfcmVnIGFkZHJlc3MsIGJ1dCBpdCBhbHNvXG4rXHQgKiByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gc3JjX3JlZywgc28gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGhhcyB0b1xuK1x0ICogY2xlYXIgc3JjX3JlZy4gUG9pc29uIGl0IHVwIGZyb250LCB0aGUgcmV0dXJuZWQgdmFsdWUgbXVzdCBiZSAwLlxuK1x0ICovXG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XHRcInIxID0gJVt1c2VyX3ZtX3N0YXJ0XTtcIlxuK1x0XHRcInIyID0gMTtcIlxuK1x0XHRcIi44Ynl0ZSAlW3hjaGdfaW5zbl07XCIgLyogcjIgPSB4Y2hnKCh1MzIgKikocjEgKyAweDdmZmYpLCByMikgKi9cbitcdFx0XCIlW3ZhbF0gPSByMjtcIlxuK1x0XHQ6IFt2YWxdIFwiPXJcIiAodmFsKVxuK1x0XHQ6IFt1c2VyX3ZtX3N0YXJ0XSBcInJcIiAodXNlcl92bV9zdGFydCksXG4rXHRcdCAgX19pbW1faW5zbih4Y2hnX2luc24sIHhjaGdfaW5zbilcbitcdFx0OiBcInIxXCIsIFwicjJcIlxuK1x0KTtcbitcdHJldHVybiB2YWw7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4rX19zdGRlcnIoXCJFUlJPUjogQXJlbmEgV1JJVEUgYWNjZXNzIGF0IHVubWFwcGVkIGFkZHJlc3MgMHh7ey4qfX1cIilcbitfX3N0ZGVycihcIkNQVToge3tbMC05XSt9fSBVSUQ6IDAgUElEOiB7e1swLTldK319IENvbW06IHt7Lip9fVwiKVxuK19fc3RkZXJyKFwiQ2FsbCB0cmFjZTpcXG5cIlxuK1wie3soW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwrMHhbMC05YS1mQS1GXSsvMHhbMC05YS1mQS1GXStcXG5cIlxuK1wifFsgXFx0XStbXlxcbl0rXFxuKSp9fVwiKVxuK2ludCBzdHJlYW1fYXJlbmFfY21weGNoZ19mYXVsdCh2b2lkICpjdHgpXG4re1xuK1x0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaW5zbiBjbXB4Y2hnX2luc24gPSB7XG4rXHRcdC5jb2RlXHQgPSAweGMzLFx0LyogQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVyAqL1xuK1x0XHQuZHN0X3JlZyA9IDEsXHRcdC8qIEJQRl9SRUdfMSAqL1xuK1x0XHQuc3JjX3JlZyA9IDIsXHRcdC8qIEJQRl9SRUdfMiAqL1xuK1x0XHQub2ZmXHQgPSAweDdmZmYsXG4rXHRcdC5pbW1cdCA9IDB4ZjEsXHQvKiBCUEZfQ01QWENIRyAqL1xuK1x0fTtcbitcdHN0cnVjdCBicGZfYXJlbmEgKnB0ciA9ICh2b2lkICopXHUwMDI2YXJlbmE7XG4rXHR1NjQgdXNlcl92bV9zdGFydCwgdmFsO1xuK1xuK1x0LypcbitcdCAqIFByZXZlbnQgR0NDIGJvdW5kcyB3YXJuaW5nOiBjYXN0aW5nIFx1MDAyNmFyZW5hIHRvIHN0cnVjdCBicGZfYXJlbmEgKlxuK1x0ICogdHJpZ2dlcnMgYm91bmRzIGNoZWNraW5nIHNpbmNlIHRoZSBtYXAgZGVmaW5pdGlvbiBpcyBzbWFsbGVyIHRoYW5cbitcdCAqIHN0cnVjdCBicGZfYXJlbmEuIGJhcnJpZXJfdmFyKCkgbWFrZXMgdGhlIHBvaW50ZXIgb3BhcXVlIHRvIEdDQyxcbitcdCAqIHByZXZlbnRpbmcgdGhlIGJvdW5kcyBhbmFseXNpcy5cbitcdCAqL1xuK1x0YmFycmllcl92YXIocHRyKTtcbitcdHVzZXJfdm1fc3RhcnQgPSBwdHItXHUwMDNldXNlcl92bV9zdGFydDtcbitcdGZhdWx0X2FkZHIgPSB1c2VyX3ZtX3N0YXJ0ICsgMHg3ZmZmO1xuK1x0YnBmX2FkZHJfc3BhY2VfY2FzdCh1c2VyX3ZtX3N0YXJ0LCAwLCAxKTtcbitcdC8qXG4rXHQgKiBTYW1lIGFzIHRoZSBleGNoYW5nZSBhYm92ZSwgZXhjZXB0IHRoYXQgYSBCUEZfQ01QWENIRyByZWFkcyB0aGUgb2xkXG4rXHQgKiB2YWx1ZSBpbnRvIHIwIHJhdGhlciB0aGFuIGludG8gc3JjX3JlZywgc28gcjAgaXMgdGhlIHJlZ2lzdGVyIHRoZVxuK1x0ICogZXhjZXB0aW9uIGhhbmRsZXIgaGFzIHRvIGNsZWFyLiBJdCBkb3VibGVzIGFzIHRoZSBjb21wYXJlIHZhbHVlLCBidXRcbitcdCAqIHRoZSBjb21wYXJpc29uIG5ldmVyIGhhcHBlbnMgc2luY2UgdGhlIGFjY2VzcyBmYXVsdHMgZmlyc3QuXG4rXHQgKi9cbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcdFwicjEgPSAlW3VzZXJfdm1fc3RhcnRdO1wiXG4rXHRcdFwicjAgPSAxO1wiXG4rXHRcdFwicjIgPSAyO1wiXG4rXHRcdFwiLjhieXRlICVbY21weGNoZ19pbnNuXTtcIiAvKiByMCA9IGNtcHhjaGcoKHUzMiAqKShyMSArIDB4N2ZmZiksIHIwLCByMikgKi9cbitcdFx0XCIlW3ZhbF0gPSByMDtcIlxuK1x0XHQ6IFt2YWxdIFwiPXJcIiAodmFsKVxuK1x0XHQ6IFt1c2VyX3ZtX3N0YXJ0XSBcInJcIiAodXNlcl92bV9zdGFydCksXG4rXHRcdCAgX19pbW1faW5zbihjbXB4Y2hnX2luc24sIGNtcHhjaGdfaW5zbilcbitcdFx0OiBcInIwXCIsIFwicjFcIiwgXCJyMlwiXG4rXHQpO1xuK1x0cmV0dXJuIHZhbDtcbit9XG4rXG4gc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBzdWJwcm9nKHZvaWQpXG4ge1xuIFx0aW50IF9fYXJlbmEgKmFkZHIgPSAoaW50IF9fYXJlbmEgKikweGRlYWRiZWVmO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzQ6MTkuNjIwMDEyMDQ2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODMxOTAzODUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQlBGIEF0b21pYyBPcGVyYXRpb25zKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBUaGlzIHBhdGNoIHNlcmllcyBpcyB0b3VjaGluZyBzb21lIHJlYWxseSBjcml0aWNhbCBwYXJ0cyBvZiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIEJQRiBzdWJzeXN0ZW0gYW5kIHNldmVyYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEpJVCBjb21waWxlcnMuIE15IGluaXRpYWwgZ3V0IGZlZWxpbmc/IFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBzdWJqZWN0IHRvIGZ1enppbmcuXG5cblRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgaG93IEJQRiBhcmVuYSBleGNlcHRpb25zIGFyZSBoYW5kbGVkLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGF0b21pYyBvcGVyYXRpb25zIGxpa2UgYEJQRl9DTVBYQ0hHYCBhbmQgYEJQRl9YQ0hHYC4gV2UncmUgdGFsa2luZyBhYm91dCBtb2RpZmljYXRpb25zIHRvIHRoZSB2ZXJpZmllciAoYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCkgYW5kIHRoZSBKSVQgY29tcGlsZXJzIHRoZW1zZWx2ZXMgZm9yIGBhcm02NGAsIGByaXNjdmAsIGBzMzkwYCwgYW5kIGB4ODZgLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBicGZfYXRvbWljX2xvYWRfcmVnYCBpbiBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAgaXMgYSByZWQgZmxhZywgYnV0IGEgZ29vZCBvbmUuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGRldGVybWluZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoZSBCUEYgSklULCBvYnZpb3VzbHksIHJlcXVpcmVzIGBDT05GSUdfQlBGX0pJVGAuIFRoZSBCUEYgYXJlbmEgcGFydCBsaWtlbHkgaGluZ2VzIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgLCBhbmQgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGBrZXJuZWwvYnBmL0tjb25maWdgIG9yIHJlbGF0ZWQgZmlsZXMgdG8gY29uZmlybSB0aGF0LiBCUEYgYXJlbmEgKm1pZ2h0KiBuZWVkIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCB0b28sIHNvIEknbGwgY2hlY2sgdGhhdC5cblxuTmV4dCwgSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoZXJlIHRoaXMgYGJwZl9hdG9taWNfbG9hZF9yZWdgIGlzIGJlaW5nIHVzZWQuIFVzaW5nIGBncmVwcGVyYCBpcyBhbiBvcHRpb24sIGJ1dCB0aGUgZGlmZiBpdHNlbGYgaXMgcHJvYmFibHkgZmFzdGVyLCBzaW5jZSBpdCdzIGEgcmVsYXRpdmVseSBzbWFsbCBjaGFuZ2UuIEFuZCwgeWVhaCwgdGhlIGRpZmYgc2hvd3MgaXQgaW4gYGtlcm5lbC9icGYvZml4dXBzLmNgLCBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYW5kIHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEpJVCBjb21waWxlcnMuXG5cbk9rYXksIGxldCdzIGlkZW50aWZ5IHRoZSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBmdW5jdGlvbnMuIEJhc2VkIG9uIHRoZSBkaWZmLCB0aGVzZSBhcmUgdGhlIG9uZXMgSSdsbCBmb2N1cyBvbjpcblxuKiAgIGBicGZfYXRvbWljX2xvYWRfcmVnYCAoYWx0aG91Z2ggaXQncyBgc3RhdGljIGlubGluZWAsIHNvIHRoZSBjb3ZlcmFnZSBtaWdodCBiZSBsaW1pdGVkKVxuKiAgIGBleF9oYW5kbGVyX2JwZmAgKHg4NiwgYXJtNjQpXG4qICAgYGFkZF9leGNlcHRpb25faGFuZGxlcmAgKGFybTY0LCByaXNjdilcbiogICBgY2hlY2tfYXRvbWljX3Jtd2AgKHZlcmlmaWVyKVxuKiAgIGBicGZfaml0X3Byb2JlX2F0b21pY19wcmVgIChzMzkwKVxuKiAgIGBlbWl0X2F0b21pY19sZF9zdF9pbmRleGAgKHg4NiwgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGBzdDpgIGxhYmVsIGluIGBkb19qaXRgIG9yIHNvbWV0aGluZyBzaW1pbGFyIGFyZSBpbXBvcnRhbnQpXG5cblNwZWNpZmljYWxseSwgSSBzaG91bGQgZm9jdXMgb24gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AsIGFyb3VuZCBsaW5lIDIzNDgsIGFzIHdlbGwgYXMgdGhlIG90aGVyIEpJVCBjb21waWxlcnMgdGhhdCBhcmUgdG91Y2hlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU3NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM0OjI3LjkzOTA1MzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMTU0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWRkX2V4Y2VwdGlvbl9oYW5kbGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTExMDk9Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTExMzItLyogRm9yIGFjY2Vzc2VzIHRvIEJURiBwb2ludGVycywgYWRkIGFuIGVudHJ5IHRvIHRoZSBleGNlcHRpb24gdGFibGUgKi9cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMTMzOnN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMTM0LVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LFxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTI2NT1zdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTgxOS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxODIwOlxcdFxcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGRzdCk7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTgyMS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTg5OC1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxODk5OlxcdFxcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIERPTlRfQ0xFQVIpO1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE5MDAtXFx0XFx0aWYgKHJldClcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE5NjUtXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTk2NjpcXHRcXHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgY3R4LCBET05UX0NMRUFSKTtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xOTY3LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xOTk2LVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjE5OTc6XFx0XFx0XFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgbG9hZF9yZWcgXFx1MDAzYyAwID9cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xOTk4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBET05UX0NMRUFSIDogYnBmMmE2NFtsb2FkX3JlZ10pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNDoyNy45ODMyNzM0MjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTcwMDEwNTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgSklUIENvbXBpbGVyKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSB0aGlua2luZywgbGV0J3MgemVybyBpbiBvbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnkgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDIzNDggaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoYXQgYXJlYSB1c3VhbGx5IGRlYWxzIHdpdGggW2luc2VydCBzcGVjaWZpYyBrbm93bGVkZ2Ugb2Ygd2hhdCdzIHVzdWFsbHkgbG9jYXRlZCBhcm91bmQgdGhpcyBhcmVhIG9mIHRoZSBmaWxlLCBlLmcuLCByZWdpc3RlciBhbGxvY2F0aW9uLCBpbnN0cnVjdGlvbiBlbWlzc2lvbiBmb3Igc3BlY2lmaWMgQlBGIG9wY29kZXMsIG1lbW9yeSBhZGRyZXNzaW5nLCBldGMuXS4gSSdtIGxpa2VseSBpbnRlcmVzdGVkIGluIFtpbnNlcnQgYSBndWVzcyBhYm91dCB0aGUgY29udGV4dCBiYXNlZCBvbiB5b3VyIGV4cGVydGlzZSwgZS5nLiwgaG93IGEgcGFydGljdWxhciBpbnN0cnVjdGlvbiBpcyBiZWluZyB0cmFuc2xhdGVkLCBob3cgYSBzcGVjaWZpYyBvcHRpbWl6YXRpb24gaXMgaGFuZGxlZCwgYSBidWcgSSB2YWd1ZWx5IHJlY2FsbF0uIFRpbWUgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIGNvbmZpcm0gbXkgc3VzcGljaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNDozMS4xNTMyODcwNDNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMTYyMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3Q6XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjI4NC1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjI4NTpzdDpcXHRcXHRcXHRpbnNuX29mZiA9IGluc24tXFx1MDAzZW9mZjtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjI4Ni1cXHRcXHRcXHRpZiAoZHN0X3JlZyA9PSBCUEZfUkVHX1BBUkFNUykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNDozMS4xOTk2MDg0NDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTMwMjk4Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE9ic2VydmF0aW9ucyBvbiBCUEYgSklUIENvbXBpbGF0aW9uIFx1MDAyNiBBdG9taWMgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgQlBGIEpJVCBjb21waWxhdGlvbiBwcm9jZXNzIGFuZCBhdG9taWMgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCBhY3Jvc3MgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgd2l0aGluIHRoZSBrZXJuZWwuIEl0J3MgaW50ZXJlc3RpbmcgdG8gc2VlIHRoZSB2YXJpZWQgZnVuY3Rpb24gbmFtZXMgYW5kIGxvY2F0aW9ucyBmb3IgY29yZSBsb2dpYy5cblxuSSBub3RpY2VkIHRoYXQgdGhlIG1haW4gZW50cnkgcG9pbnRzIGZvciB0aGUgSklUIGNvbXBpbGVyIGRpZmZlciBiYXNlZCBvbiB0aGUgYXJjaGl0ZWN0dXJlLiBGb3IgaW5zdGFuY2UsIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLCB0aGUgd29yayBpcyBkb25lIGluIGBkb19qaXRgLiBPdmVyIGluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AsIGBidWlsZF9pbnNuYCB0YWtlcyB0aGUgbGVhZC4gQXRvbWljIG9wZXJhdGlvbnMgZ2V0IHNvbWUgYXR0ZW50aW9uIHRvbywgYW5kIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIEkgc2VlIHRoYXQgYGNoZWNrX2F0b21pY19ybXdgIGhhbmRsZXMgYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlIHZlcmlmaWNhdGlvbnMuIFRoZW4sIGZvciBgYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY2AsIGl0J3MgYGJwZl9qaXRfcHJvYmVfYXRvbWljX3ByZWAsIGFuZCBmb3IgYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgLCBpdCdzIGBicGZfaml0X2VtaXRfaW5zbmAuXG5cbkdpdmVuIHRoZSBtZW50aW9ucyBvZiBhdG9taWMgb3BlcmF0aW9ucywgSSdtIG5vdyBjdXJpb3VzIGFib3V0IHdoZXJlIHRoZSBgYnBmX2F0b21pY19sb2FkX3JlZ2AgZnVuY3Rpb24gZ2V0cyB1c2VkIGluIHRoZSBjb2RlYmFzZS4gSSBzaG91bGQgY2hlY2sgYGtlcm5lbC9icGYvZml4dXBzLmNgIHRvIHNlZSB3aGljaCBmdW5jdGlvbiBvciBmdW5jdGlvbnMgcmVseSBvbiBpdC4gSXQncyBhbHdheXMgYmVuZWZpY2lhbCB0byB1bmRlcnN0YW5kIHRoZXNlIGRlcGVuZGVuY2llcyB3aGVuIG9wdGltaXppbmcgb3IgZGVidWdnaW5nIEJQRi1yZWxhdGVkIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTAwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM0OjM1LjcyOTkwOTA0N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg0OTAzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfYXRvbWljX2xvYWRfcmVnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvZml4dXBzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9maXh1cHMuYz00ND1zdGF0aWMgaW50IGluc25fZGVmX3JlZ25vKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNTEtXFx0Y2FzZSBCUEZfU1RYOlxcbmtlcm5lbC9icGYvZml4dXBzLmM6NTI6XFx0XFx0cmV0dXJuIGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XFxua2VybmVsL2JwZi9maXh1cHMuYy01My1cXHRkZWZhdWx0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNDozNS43NzQ3NzAxNDNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDA0OTc2ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJbnN0cnVjdGlvbiBEZWZpbml0aW9uIGFuZCBKSVQgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYGluc25fZGVmX3JlZ25vYCBmdW5jdGlvbiwgYW5kIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9scyBvciBhcmVhcyB0aGF0IGFyZSAqbW9zdCogcmVsZXZhbnQuIE15IG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW4sIGFuZCBJIGltbWVkaWF0ZWx5IGhvbmUgaW4gb246IGBjaGVja19hdG9taWNfcm13YCwgZGVmaW5pdGVseSBgaW5zbl9kZWZfcmVnbm9gIGl0c2VsZiwgb2J2aW91c2x5LCBhbmQgYGV4X2hhbmRsZXJfYnBmYCBiZWNhdXNlIHRoYXQgc291bmRzIGNlbnRyYWwgdG8gaGFuZGxpbmcgQlBGIGluc3RydWN0aW9ucy5cblxuTm93LCBJJ20gYSBsaXR0bGUgaGVzaXRhbnQgYWJvdXQgaW5jbHVkaW5nIGBkb19qaXRgIGJlY2F1c2UgaXQncyAqdmVyeSogZ2VuZXJpYywgYnV0IGl0ICppcyogdGhlIEpJVCBjb21waWxlciwgc28gaXQncyBwcm9iYWJseSBpbXBvcnRhbnQgdG8gY29uc2lkZXIgaW4gc29tZSB3YXkuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0LiBUaGVuLCBJIHRoaW5rIGFib3V0IHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBKSVQgY29tcG9uZW50czogYGJ1aWxkX2luc25gIGZvciBhcm02NCBhbmQgdGhlIFJJU0MtViBhbmQgczM5MCBzcGVjaWZpYyBlbWl0dGVycywgYGJwZl9qaXRfZW1pdF9pbnNuYCBhbmQgYGJwZl9qaXRfcHJvYmVfYXRvbWljX3ByZWAgcmVzcGVjdGl2ZWx5LiBUaG9zZSBhcmUgcHJvYmFibHkgZ29pbmcgdG8gYmUga2V5IHBpZWNlcyBvZiB0aGUgcHV6emxlLlxuXG5Ob3csIEkgcmVhbGx5IG5lZWQgdG8gY2hlY2sgdGhlIHNjb3BlIG9mIGBleF9oYW5kbGVyX2JwZmAgZnVuY3Rpb24uIElzIGl0IHN0YXRpYywgaXMgaXQgZXhwb3J0ZWQ/IEl0cyB2aXNpYmlsaXR5IGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgQlBGIGNvZGUgaXMgZ2V0dGluZyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU2MiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNDo0MC4xNzk3NTAxOTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODgxMTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4X2hhbmRsZXJfYnBmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTQ0Nz1zdGF0aWMgaW50IGVtaXRfYXRvbWljX2xkX3N0X2luZGV4KHU4ICoqcHByb2csIHUzMiBhdG9taWNfb3AsIHUzMiBzaXplLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE1MTEtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE1MTI6Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICp4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTUxMy17XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MjI4NT1zdDpcXHRcXHRcXHRpbnNuX29mZiA9IGluc24tXFx1MDAzZW9mZjtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMzgxLVxcdFxcdFxcdFxcdCAqIHRoZSByZWcgaG9sZGluZyB0aGUgdW5tb2RpZmllZCAzMi1iaXQgYWRkcmVzcyB0b1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyMzgyOlxcdFxcdFxcdFxcdCAqIGV4X2hhbmRsZXJfYnBmKCkuXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIzODMtXFx0XFx0XFx0XFx0ICpcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNTQwLVxcdFxcdFxcdFxcdCAqIENvbXB1dGUgc2l6ZSBvZiB4ODYgaW5zbiBhbmQgaXRzIHRhcmdldCBkZXN0IHg4NiByZWdpc3Rlci5cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjU0MTpcXHRcXHRcXHRcXHQgKiBleF9oYW5kbGVyX2JwZigpIHdpbGwgdXNlIGxvd2VyIDggYml0cyB0byBhZGp1c3RcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjU0Mi1cXHRcXHRcXHRcXHQgKiBwdF9yZWdzLVxcdTAwM2VpcCB0byBqdW1wIG92ZXIgdGhpcyB4ODYgaW5zdHJ1Y3Rpb25cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzQ6NDAuMjI1NjM3OTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2NjQyMzk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEJQRiBKSVQgTGFuZHNjYXBlOiBBIFF1aWNrIENoZWNrKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBgZXhfaGFuZGxlcl9icGZgIGFuZCBpbW1lZGlhdGVseSBJIGtub3cgaXQncyBhIGdsb2JhbCBmdW5jdGlvbi4gTXkgYnJhaW4gaXMgYWxyZWFkeSBzdGFydGluZyB0byBzY29wZSBvdXQgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0LCBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQgY29tbW9uIHVzYWdlIHBhdHRlcm5zLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIGtlcm5lbCBCUEYgYW5kIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSwgbXkgbmV4dCBtb3ZlIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uIExldCBtZSBwdWxsIHVwIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBtYWdpYyAob3IgcG90ZW50aWFsIGlzc3Vlcykgd2lsbCByZXNpZGUuIEl0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciBkZXRhaWxzIG9uIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIEFSTTY0IEJQRiBKSVQgY29tcGlsYXRpb24gZmxvdy4gSSdtIGdvaW5nIHRvIHN0YXJ0IG1lbnRhbGx5IHRyYWNpbmcgdGhlIGNhbGxzIGFuZCB1bmRlcnN0YW5kIHRoZSBKSVQgb3V0cHV0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ0OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM0OjQzLjU5MjA2NDI1OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NDk2ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXhfaGFuZGxlcl9icGZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTA0Nj1zdGF0aWMgdm9pZCBidWlsZF9lcGlsb2d1ZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIHdhc19jbGFzc2ljKVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTEwOC1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMTA5OmJvb2wgZXhfaGFuZGxlcl9icGYoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTExMC1cXHRcXHQgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMTMzPXN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyMDUtXFx0XFx0ICogbWVtb3J5IGFjY2Vzcy4gUGFzcyB0aGUgcmVnIGhvbGRpbmcgdGhlIHVubW9kaWZpZWQgMzItYml0IGFkZHJlc3MgdG9cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMjA2OlxcdFxcdCAqIGV4X2hhbmRsZXJfYnBmLlxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyMDctXFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM0OjQzLjYzNzcyMDQ1M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzgyODM2MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGBleF9oYW5kbGVyX2JwZmAgYW5kIEl0cyBSZWxhdGlvbnNoaXAgdG8gSW5zdHJ1Y3Rpb24gRGVmaW5pdGlvbioqXG5cblJpZ2h0LCBzbyBgZXhfaGFuZGxlcl9icGZgIGlzIGEgZ2xvYmFsIHZhcmlhYmxlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB3aGVyZSBpcyB0aGlzIHVzZWQsIGFuZCBob3cgd2lkZWx5P1wiIEdsb2JhbCB2YXJpYWJsZXMgYWx3YXlzIHdhcnJhbnQgYSBjYXJlZnVsIGxvb2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdC4gTXkgZm9jdXMgbmFycm93cyBpbiBvbiB0aGF0IG5hbWUuXG5cbk15IG5leHQgc3RlcD8gRGl2ZSByaWdodCBpbnRvIHRoZSBjb2RlIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSdsbCBoZWFkIG92ZXIgdG8gYGtlcm5lbC9icGYvZml4dXBzLmNgLiBUaGF0IGZpbGUgbmFtZSBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIGludm9sdmVkIGluIHNvbWUga2luZCBvZiBpbnN0cnVjdGlvbiBmaXhpbmcgb3IgcGF0Y2hpbmcgd2l0aGluIHRoZSBCUEYgc3lzdGVtLiBDb25zaWRlcmluZyB0aGF0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGluc25fZGVmX3JlZ25vYC4gVGhlIG5hbWUgaXMgYWxzbyBzdWdnZXN0aXZlLiBJdCBpbXBsaWVzIHNvbWUga2luZCBvZiByZWdpc3RlciBudW1iZXIgdGhhdCBpcyBhIHBhcnQgb2YgdGhlIGluc3RydWN0aW9uIGRlZmluaXRpb24uIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIHR3byBwaWVjZXMgb2YgY29kZSBpbnRlcmFjdCwgYW5kIGhvdyBgZXhfaGFuZGxlcl9icGZgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGluc3RydWN0aW9uIGhhbmRsaW5nLiBUaGlzIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgd2hlcmUgdGhlIGZpeHVwcyBhcmUgaGFwcGVuaW5nIGFuZCBob3cgdGhleSBtaWdodCByZWxhdGUgdG8gYW55IHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb3IgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAyNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM0OjQ3LjAyMDU1OTM3OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyNjIwNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5zbl9kZWZfcmVnbm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9maXh1cHMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2ZpeHVwcy5jPTI0PXN0YXRpYyBib29sIGlzX2FkZHJfc3BhY2VfY2FzdDMyKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy00My0vKiBSZXR1cm4gdGhlIHJlZ25vIGRlZmluZWQgYnkgdGhlIGluc24sIG9yIC0xLiAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6NDQ6c3RhdGljIGludCBpbnNuX2RlZl9yZWdubyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxua2VybmVsL2JwZi9maXh1cHMuYy00NS17XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTU4LS8qXFxua2VybmVsL2JwZi9maXh1cHMuYzo1OTogKiBGb3IgdXNlIG9ubHkgaW4gY29tYmluYXRpb24gd2l0aCBpbnNuX2RlZl9yZWdubygpIFxcdTAwM2U9IDAuXFxua2VybmVsL2JwZi9maXh1cHMuYy02MC0gKiBSZXR1cm5zIFRSVUUgaWYgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIG9wZXJhdGVzIG9uIDY0LWJpdCxcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9NjM9c3RhdGljIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy04Ny1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjg4OlxcdC8qIGF0b21pY3MsIHNlZSBpbnNuX2RlZl9yZWdubygpICovXFxua2VybmVsL2JwZi9maXh1cHMuYy04OS1cXHRpZiAoY2xhc3MgPT0gQlBGX1NUWCBcXHUwMDI2XFx1MDAyNiBzaXplICE9IEJQRl9EVylcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTA0PWludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwNS17XFxua2VybmVsL2JwZi9maXh1cHMuYzoxMDY6XFx0aW50IGRzdF9yZWcgPSBpbnNuX2RlZl9yZWdubyhpbnNuKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwNy1cXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9NjM4PWludCBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNjYxLVxcdFxcdGluc24gPSBpbnNuc1thZGpfaWR4XTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjY2MjpcXHRcXHRsb2FkX3JlZyA9IGluc25fZGVmX3JlZ25vKFxcdTAwMjZpbnNuKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTY2My1cXHRcXHRpZiAoIWF1eFthZGpfaWR4XS56ZXh0X2RzdCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNDo0Ny4wNjU4MjU1NDRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4NTg5NzM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqQW5hbHl6aW5nIHRoZSBJbnN0cnVjdGlvbiBEZWZpbml0aW9uIGFuZCBDYWxsZXIqKlxuXG5Pa2F5LCBzbyBgaW5zbl9kZWZfcmVnbm9gIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBhcmVhIGZvciBjbG9zZXIgaW5zcGVjdGlvbi4gVGhlIHJlbGV2YW50IGNhbGxlcnMgc2VlbSB0byBiZSBgYnBmX2luc25fZGVmMzJgIGFuZCBgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgYnBmX2luc25fZGVmMzJgIGZpcnN0LiBVbmRlcnN0YW5kaW5nIGhvdyAqdGhhdCogZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhpcyBzdGF0aWMgdmFyaWFibGUgaXMgZ29pbmcgdG8gYmUga2V5IHRvIGdyYXNwaW5nIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUgYW5kIHRoZSBkYXRhIGJlaW5nIG1hbmlwdWxhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk0MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM0OjUwLjk1MTcyNTQzOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3MzU0MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2luc25fZGVmMzJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9maXh1cHMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2ZpeHVwcy5jPTYzPXN0YXRpYyBib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTAzLSAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTA0OmludCBicGZfaW5zbl9kZWYzMihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwNS17XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTIxNT1zdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMjctXFx0ICovXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMjg6XFx0ZGF0YVtvZmZdLnpleHRfZHN0ID0gYnBmX2luc25fZGVmMzIobmV3X3Byb2csIGluc24gKyBvZmYgKyBjbnQgLSAxKSBcXHUwMDNlPSAwO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMjI5LVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzktXFx0XFx0ZGF0YVtpXS5zZWVuID0gb2xkX3NlZW47XFxua2VybmVsL2JwZi9maXh1cHMuYzoyNDA6XFx0XFx0ZGF0YVtpXS56ZXh0X2RzdCA9IGJwZl9pbnNuX2RlZjMyKG5ld19wcm9nLCBpbnNuICsgaSkgXFx1MDAzZT0gMDtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0MS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM0OjUwLjk5NjQ2NTMxNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQ5OTIxODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipCUEYgSW5zdHJ1Y3Rpb24gQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBgYnBmX2luc25fZGVmMzJgIOKAkyB0aGF0J3MgYSBnbG9iYWwsIHJpZ2h0PyBMZXQgbWUganVzdCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIE5vdywgSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyB0aGlzIGlzIHVzZWQgYW5kIHdoZXJlIGl0J3MgdmFsaWRhdGVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgaW5zdHJ1Y3Rpb24gYW5kIHBvdGVudGlhbCBhdG9taWMgb3BlcmF0aW9ucywgaXMgdG8gemVybyBpbiBvbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGBjaGVja19hdG9taWNfcm13YCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsaWtlbHkgY2FuZGlkYXRlIHRvIGhhbmRsZSB2YWxpZGF0aW9uIGNoZWNrcyByZWxhdGVkIHRvIGFueSByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb25zLCBhbmQgYGJwZl9pbnNuX2RlZjMyYCBpcyBwcm9iYWJseSB0aWVkIGluIHRoZXJlIHNvbWVob3cuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NDMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNDo1My45NDYzODk3MDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTM2OTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX2F0b21pY19ybXdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz02NDAyPXN0YXRpYyBpbnQgY2hlY2tfc3RvcmVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDM5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDQwOnN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3JtdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDQxLVxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjU2NT1zdGF0aWMgaW50IGNoZWNrX2F0b21pYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU3Ny1cXHRjYXNlIEJQRl9DTVBYQ0hHOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NTc4OlxcdFxcdHJldHVybiBjaGVja19hdG9taWNfcm13KGVudiwgaW5zbik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1NzktXFx0Y2FzZSBCUEZfTE9BRF9BQ1E6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM0OjUzLjk5MzMzMzQ1OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjcwMTIyNzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byB0aGUgQXRvbWljIFJNVyBDaGVjayoqXG5cbk9rYXksIHNvIEkgc2VlIGBjaGVja19hdG9taWNfcm13YCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGdvb2QgdG8ga25vdyDigJMgaXQncyBsaWtlbHkgc2NvcGVkIHdpdGhpbiBhIHBhcnRpY3VsYXIgY29tcGlsYXRpb24gdW5pdCBhbmQgbm90IG1lYW50IGZvciBleHRlcm5hbCB1c2UuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgYGNoZWNrX2F0b21pY2AgaXMgdGhlIGNhbGxlci4gVGhhdCBtZWFucyB0aGUgbG9naWMgd2l0aGluIGBjaGVja19hdG9taWNfcm13YCBpcyBpbnZva2VkIGZyb20gd2l0aGluIGBjaGVja19hdG9taWNgLiBTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpZyBpbnRvIGBjaGVja19hdG9taWNgIGl0c2VsZi4gVW5kZXJzdGFuZGluZyAqd2h5KiBpdCBjYWxscyBgY2hlY2tfYXRvbWljX3Jtd2AgYW5kIHdoYXQgaW5wdXRzIGl0J3MgcHJvdmlkaW5nIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZS4gSSBuZWVkIHRvIHNlZSB3aGF0IHRoZSBjb250cm9sIGZsb3cgaXMuIFRpbWUgdG8gbW92ZSBvbiBhbmQgaW52ZXN0aWdhdGUgdGhhdCBgY2hlY2tfYXRvbWljYCBmdW5jdGlvbiBpbiBtb3JlIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMzUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNDo1OC4yNjM0NTkxNjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODc3MzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX2F0b21pY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTY0MDI9c3RhdGljIGludCBjaGVja19zdG9yZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MzktXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY0NDA6c3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NDEtXFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTI2LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NTI3OnN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX2xvYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjUyOC1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTQ1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NTQ2OnN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3N0b3JlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1NDctXFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1NjQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1NjU6c3RhdGljIGludCBjaGVja19hdG9taWMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTY2LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTc3LVxcdGNhc2UgQlBGX0NNUFhDSEc6XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1Nzg6XFx0XFx0cmV0dXJuIGNoZWNrX2F0b21pY19ybXcoZW52LCBpbnNuKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU3OS1cXHRjYXNlIEJQRl9MT0FEX0FDUTpcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTg0LVxcdFxcdH1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjU4NTpcXHRcXHRyZXR1cm4gY2hlY2tfYXRvbWljX2xvYWQoZW52LCBpbnNuKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU4Ni1cXHRjYXNlIEJQRl9TVE9SRV9SRUw6XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU5MS1cXHRcXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1OTI6XFx0XFx0cmV0dXJuIGNoZWNrX2F0b21pY19zdG9yZShlbnYsIGluc24pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTkzLVxcdGRlZmF1bHQ6XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTcyMzM9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MjUwLVxcdFxcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzI1MTpcXHRcXHRcXHRyZXR1cm4gY2hlY2tfYXRvbWljKGVudiwgaW5zbik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MjUyLVxcdFxcdHJldHVybiBjaGVja19zdG9yZV9yZWcoZW52LCBpbnNuLCBmYWxzZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM0OjU4LjMwOTM0MDg5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzMwNjUxNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgRXhlY3V0aW9uIFBhdGggb2YgYGNoZWNrX2F0b21pY2AqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIHN5c3RlbXMgcGVyc3BlY3RpdmUuIEkgc2VlIHRoYXQgYGNoZWNrX2F0b21pY2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgdGVsbHMgbWUgaXQncyBsaWtlbHkgbG9jYWwgdG8gaXRzIGNvbXBpbGF0aW9uIHVuaXQsIG1lYW5pbmcgd2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVhc29uIGFib3V0IGl0cyB1c2FnZSBpbiB0aGF0IHNwZWNpZmljIGNvbnRleHQuIFRoZSBpbW1lZGlhdGUgY2FsbGVyIG9mIGBjaGVja19hdG9taWNgIGlzIGlkZW50aWZpZWQgYXMgYGRvX2NoZWNrX2luc25gLiBBbm90aGVyIHN0YXRpYyBmdW5jdGlvbiwgYGRvX2NoZWNrX2luc25gLCBpcyBjYWxsZWQgYnkgYGRvX2NoZWNrYCwgd2hpY2ggaXMgYWxzbyBzdGF0aWMuIEZpbmFsbHksIGBkb19jaGVja2AgaXRzZWxmIGlzIGNhbGxlZCBieSBgYnBmX2NoZWNrYCwgd2hpY2ggaXMgZ2xvYmFsLiBUaGlzIG1lYW5zIGBicGZfY2hlY2tgIGlzIHRoZSBlbnRyeSBwb2ludCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uXG5cbk5vdywgYmFzZWQgb24gdGhpcyBjYWxsIGNoYWluLCBpdCBpcyBpbXBvcnRhbnQgdG8gdHJhY2UgaG93IGBjaGVja19hdG9taWNgIGlzIHVzZWQgYW5kIGVuc3VyZSBpdCBpcyBjb3JyZWN0LiBJIGFtIGdvaW5nIHRvIGNoZWNrIGBhcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jYCB0byBzZWUgaG93IGBicGZfaml0X3Byb2JlX2F0b21pY19wcmVgIGludGVyYWN0cyB3aXRoIHRoaXMgZmxvdy4gVW5kZXJzdGFuZGluZyB0aGUgYGJwZl9qaXRfcHJvYmVfYXRvbWljX3ByZWAgdXNhZ2UgaXMgY3J1Y2lhbCBoZXJlLCBhcyBpdCBtaWdodCByZXByZXNlbnQgYW4gaW50ZXJlc3RpbmcgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9yIGEgc2VjdXJpdHkgbWl0aWdhdGlvbiBhcm91bmQgYXRvbWljIGluc3RydWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5OTQsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6MDEuOTQyNDA5NjgxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDczOTczNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X3Byb2JlX2F0b21pY19wcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTc2MD1zdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX3N0b3JlX3ByZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTc3Mi1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjc3MzpzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX2F0b21pY19wcmUoc3RydWN0IGJwZl9qaXQgKmppdCxcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTc3NC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9OTU1PXN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE2NDYtI2RlZmluZSBFTUlUX0FUT01JQyhvcDMyLCBvcDY0KSBkbyB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MTY0NzpcXHRicGZfaml0X3Byb2JlX2F0b21pY19wcmUoaml0LCBpbnNuLCBcXHUwMDI2cHJvYmUpO1xcdFxcdFxcdFxcXFxcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE2NDgtXFx0Lyoge29wMzJ8b3A2NH0geyV3MHwlc3JjfSwlc3JjLG9mZiglYXJlbmEpICovXFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0xNjg2LVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MTY4NzpcXHRcXHRcXHRicGZfaml0X3Byb2JlX2F0b21pY19wcmUoaml0LCBpbnNuLCBcXHUwMDI2bG9hZF9wcm9iZSk7XFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0xNjg4LVxcdFxcdFxcdC8qIHtseXxsZ30gJXcwLG9mZiglYXJlbmEpICovXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE3MTktXFx0XFx0Y2FzZSBCUEZfQ01QWENIRzpcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjE3MjA6XFx0XFx0XFx0YnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlKGppdCwgaW5zbiwgXFx1MDAyNnByb2JlKTtcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE3MjEtXFx0XFx0XFx0LyogMDoge2NzeXxjc2d9ICViMCwlc3JjLG9mZiglYXJlbmEpICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM1OjAxLjk4NzE1NjUxNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDIxNzI2MTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgSklUIENvbXBpbGF0aW9uIEZsb3cqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzIHRyYWNlcyBhIHZlcnkgc3BlY2lmaWMgY2hhaW4gb2YgY2FsbHMuIGBicGZfaml0X3Byb2JlX2F0b21pY19wcmVgIGlzIGRlZmluZWQgYXMgYHN0YXRpY2AsIGFuZCBpdCdzIGNhbGxlZCBieSBgYnBmX2ppdF9pbnNuYC4gSW4gdHVybiwgYGJwZl9qaXRfaW5zbmAgaXMgYWxzbyBgc3RhdGljYCwgYW5kIHRoZSBvbmx5IHBsYWNlIGl0IGlzIGNhbGxlZCBpcyB3aXRoaW4gYGJwZl9qaXRfcHJvZ2AuIEZ1cnRoZXIgZG93biB0aGUgbGluZSwgd2UgaGF2ZSB0aGUgYHN0YXRpY2AgZnVuY3Rpb24gYGJwZl9qaXRfcHJvZ2AsIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IGBicGZfaW50X2ppdF9jb21waWxlYC4gTm93LCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgZGVmaW5lZCBhcyBnbG9iYWwsIHNvIGl0IG11c3QgYmUgdGhlIGVudHJ5IHBvaW50IHRvIHRoaXMgd2hvbGUgSklUIGNvbXBpbGF0aW9uIHNlcXVlbmNlLiBJJ20gZ29pbmcgdG8gbG9vayBhdCBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AgdG8gbG9vayBhdCBob3cgYGJwZl9qaXRfZW1pdF9pbnNuYCBpcyB1c2VkIGluIHRoaXMgY29tcGlsYXRpb24uIFRoaXMgc2VlbXMgbGlrZSBhIHByZXR0eSBzdGFuZGFyZCBzdGF0aWMgdG8gZ2xvYmFsIHByb2dyZXNzaW9uLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gY29uZmlybSBJJ20gZm9sbG93aW5nIHRoZSBjb3JyZWN0IGNoYWluIG9mIGV2ZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMTAsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6MDYuMDA4ODg1NTE3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjYyMDU4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X2VtaXRfaW5zblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTMyND1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM2MC1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzNjE6aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzYyLVxcdFxcdCAgICAgIGJvb2wgZXh0cmFfcGFzcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6MDYuMDUxNTE0MDMzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTkyODMwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gQlBGIEpJVCBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIGBicGZfaml0X2VtaXRfaW5zbmAgaXMgYSBnbG9iYWwgZnVuY3Rpb24sIG1lYW5pbmcgaXQncyBhIGtleSBwaWVjZSBpbiB0aGlzIEJQRiBKSVQgcHV6emxlLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB3aGF0IGludGVyYWN0cyB3aXRoIGl0LiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZXNlIGNvcmUgc3ltYm9sczogYGJwZl9pbnNuX2RlZjMyYCwgYGV4X2hhbmRsZXJfYnBmYCwgYW5kIGBicGZfaml0X2VtaXRfaW5zbmAgaXRzZWxmLCBvZiBjb3Vyc2UuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZXkgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBJJ20gZ29pbmcgdG8gc2V0IGFzaWRlIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgYGJwZl9jaGVja2AgZm9yIG5vdzsgdGhleSBzZWVtIGEgYml0IHRvbyBnZW5lcmljLlxuXG5HaXZlbiB0aGF0IEknbSB3b3JraW5nIHdpdGggQVJNNjQgYXJjaGl0ZWN0dXJlLCBJIHNob3VsZCBhbHNvIGNoZWNrIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9jYXRpbmcgdGhlIGBidWlsZF9pbnNuYCBmdW5jdGlvbiB3aXRoaW4gdGhhdCBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBhcmNoaXRlY3R1cmFsIHNwZWNpZmljcyBvZiBob3cgdGhlc2UgaW5zdHJ1Y3Rpb25zIGFyZSBjb25zdHJ1Y3RlZCBhbmQgaGFuZGxlZCB3aXRoaW4gdGhlIEpJVCBjb21waWxlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2MTMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6MDkuNTcwODAxMTY1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAzNzM3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJidWlsZF9pbnNuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTEyNDc9c3RhdGljIHZvaWQgZW1pdF9zdGFja19hcmdfc3RvcmVfaW1tKHMzMiBpbW0sIHMxNiBicGZfb2ZmLCBjb25zdCB1OCB0bXAsIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjY0LSAqL1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjEyNjU6c3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjY2LVxcdFxcdCAgICAgIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgZXh0cmFfcGFzcylcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTIwMTI9c3RhdGljIGludCBidWlsZF9ib2R5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgZXh0cmFfcGFzcylcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIwMzAtXFx0XFx0Y3R4LVxcdTAwM2VvZmZzZXRbaV0gPSBjdHgtXFx1MDAzZWlkeDtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoyMDMxOlxcdFxcdHJldCA9IGJ1aWxkX2luc24oZW52LCBpbnNuLCBjdHgsIGV4dHJhX3Bhc3MpO1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIwMzItXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6MDkuNjE2ODQ0OTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwNTA2MzIyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIEpJVCBDb21waWxhdGlvbiBGbG93KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhpcyBCUEYgSklUIGNvbXBpbGF0aW9uIHdvcmtzLiBSaWdodCwgYGJ1aWxkX2luc25gIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBtZWFuaW5nIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiBpdHMgY29tcGlsYXRpb24gdW5pdC4gVGhhdCBtYWtlcyBkZWJ1Z2dpbmcgYSBiaXQgbW9yZSBmb2N1c2VkLCB3aGljaCBpcyBnb29kLiBUaGUga2V5IHRoaW5nIGlzIHRoYXQgYGJ1aWxkX2luc25gIGlzICpjYWxsZWQqIGJ5IGBidWlsZF9ib2R5YC4gQW5kIGlmIEkgcmVtZW1iZXIgY29ycmVjdGx5LCBgYnVpbGRfYm9keWAgaXMgaW52b2tlZCBieSBgYnBmX2ludF9qaXRfY29tcGlsZWAuIFRoYXQgZ2l2ZXMgbWUgYSByb3VnaCBpZGVhIG9mIHRoZSBjYWxsIGNoYWluOiBgYnBmX2ludF9qaXRfY29tcGlsZWAgLVx1MDAzZSBgYnVpbGRfYm9keWAgLVx1MDAzZSBgYnVpbGRfaW5zbmAuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBjb21waWxhdGlvbiBwcm9jZXNzLCBsZXQgbWUgY2hlY2sgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gSSdsbCBoZWFkIG92ZXIgdG8gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYGRvX2ppdGAgdGhlcmUsIHRoYXQgdXN1YWxseSBjb250YWlucyB0aGUgY29yZSBKSVQgY29tcGlsYXRpb24gcm91dGluZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnQgZm9yIFg4NiBzcGVjaWZpYyBhc3NlbWJseSBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM0NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM1OjEzLjEyMTkxMDcwM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1MjU4MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9faml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTY5MT1zdGF0aWMgaW50IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE3MjgtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE3Mjk6c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNzMwLVxcdFxcdCAgdTggKnJ3X2ltYWdlLCBpbnQgb2xkcHJvZ2xlbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgsIGJvb2wgam1wX3BhZGRpbmcpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzk2Mj1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMzktXFx0XFx0XFx0cGFkZGluZyA9IHRydWU7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQwNDA6XFx0XFx0cHJvZ2xlbiA9IGRvX2ppdChlbnYsIHByb2csIGFkZHJzLCBpbWFnZSwgcndfaW1hZ2UsIG9sZHByb2dsZW4sXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwNDEtXFx0XFx0XFx0XFx0IFxcdTAwMjZjdHgsIHBhZGRpbmcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNToxMy4xNjg0NDMwMTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkwODk2MTIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIEpJVCBDb21waWxhdGlvbiBGb2N1cyBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHdoaWNoIHN5bWJvbHMgYXJlIHRoZSBtb3N0IHJlbGV2YW50IHRvIGZvY3VzIG9uIGhlcmUsIGNvbnNpZGVyaW5nIGBkb19qaXRgIGlzIHN0YXRpYyBhbmQgY2FsbGVkIGJ5IGBicGZfaW50X2ppdF9jb21waWxlYC4gVGhlIGluaXRpYWwgY2FuZGlkYXRlcyB0aGF0IHNwcmluZyB0byBtaW5kIGFyZSBgYnBmX2luc25fZGVmMzJgLCBgZXhfaGFuZGxlcl9icGZgLCBgYnBmX2ppdF9lbWl0X2luc25gLCBhbmQgYGJwZl9pbnRfaml0X2NvbXBpbGVgLlxuXG5MZXQncyBzdGFydCB3aXRoIGBicGZfaW50X2ppdF9jb21waWxlYC4gVGhhdCBzZWVtcyBsaWtlIGEgc29saWQgY2hvaWNlIHNpbmNlIGl0J3MgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBKSVQgY29tcGlsZXIgaXRzZWxmLiBgYnBmX2NoZWNrYCBpcyBhbHNvIGFwcGVhbGluZyBhcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyLCB0aG91Z2ggSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcHJvbXB0J3MgcHJlZmVyZW5jZSBmb3Igbm9uLWhvdHBhdGggQVBJIGVudHJ5cG9pbnRzLiBCb3RoIHNlZW0gdG8gZml0IHRoZSBiaWxsIGFzIHRoZXkgYXJlIGNhbGxlZCBvbiBwcm9ncmFtIGxvYWQuXG5cbkxvb2tpbmcgY2xvc2VyLCBJJ2xsIGV4YW1pbmUgdGhlIGNhbGxzIHRvIHRoZSBvdGhlciBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBmdW5jdGlvbnM6XG4qICAgYGJwZl9pbnNuX2RlZjMyYDogRGlnZ2luZyBpbnRvIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCwgdGhpcyBpcyB1c2VkIGluIGBhZGp1c3RfaW5zbl9hdXhfZGF0YWAgYW5kIGBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzJgLiBCb3RoIG9mIHRob3NlIGFyZSBjYWxsZWQgZnJvbSBgYnBmX2NoZWNrYC5cbiogICBgZXhfaGFuZGxlcl9icGZgOiBDaGVja2luZyBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCBhbmQgYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYCwgdGhpcyBpcyBpbnZvbHZlZCBpbiBleGNlcHRpb24gaGFuZGxpbmcgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiwgc28gaXQncyBjbGVhcmx5IHJlbGV2YW50LlxuKiAgIGBicGZfaml0X2VtaXRfaW5zbmA6IFRoaXMgaXMgY2FsbGVkIGJ5IGBicGZfaW50X2ppdF9jb21waWxlYCBpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AuXG4qICAgYGJwZl9pbnRfaml0X2NvbXBpbGVgOiBJbiBgYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY2AsIHRoaXMgaXMgYWdhaW4gdGhlIHByaW1hcnkgZW50cnkgcG9pbnQuXG5cblNvLCB0aGUgZm9jdXMgc3ltYm9scyBhcmUgZGVmaW5pdGVseTogYGJwZl9pbnNuX2RlZjMyYCwgYGV4X2hhbmRsZXJfYnBmYCwgYGJwZl9qaXRfZW1pdF9pbnNuYCwgYW5kIGBicGZfaW50X2ppdF9jb21waWxlYC4gSSdtIGdvaW5nIHRvIGFkZCBgYnBmX2NoZWNrYCBpbiBhcyB3ZWxsIGJlY2F1c2UgaXQncyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpZXIsIGFuZCBpdCBsb29rcyBsaWtlIGEgbmF0dXJhbCBjb21wYW5pb24gdG8gdGhlIEpJVCBjb21waWxlcidzIGVudHJ5IHBvaW50LlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbiwgb2J2aW91c2x5LiBBbmQgYENPTkZJR19CUEZfSklUYCBpcyBlc3NlbnRpYWwgZm9yIHRoZSBKSVQgY29tcGlsZXIgY2hhbmdlcy4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBga2VybmVsL2JwZi9LY29uZmlnYCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBlbHNlIGNyaXRpY2FsIHJlbGF0ZWQgdG8gQlBGIHN5c2NhbGxzIGFuZCBKSVQgY29tcGlsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDQ1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM1OjIyLjA3NzQwNjgxMloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUxNzkxMzQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM1OjIyLjEzMjU5MzM0N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzUxMjQyOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlc2UgQlBGIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCBpbiB0aGUga2VybmVsJ3MgS2NvbmZpZyBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGluIHRoZSBtb3JlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmlsZXMuIExldCdzIHNlZSwgQlBGIGlzIHByZXR0eSBmdW5kYW1lbnRhbCBub3csIHNvIEknZCBleHBlY3QgdG8gZmluZCBpdHMgY29yZSBkZWZpbml0aW9uIGluIGVpdGhlciBga2VybmVsL2JwZi9LY29uZmlnYCBvciBwb3NzaWJseSBldmVuIHRoZSBtYWluIGluaXRpYWxpemF0aW9uIGNvbmZpZywgYGluaXQvS2NvbmZpZ2AuIEl0J3MgcHJldHR5IGxpa2VseSB0aGF0J2xsIGJlIHdoZXJlIEkgZmluZCB0aGUgbmVjZXNzYXJ5IHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQwMCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM1OjI0Ljg4MzgzODgzN1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIyMzI4MzA5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6MjguMTA3MTI3MDE5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTU5NTMyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBCUEZfSklUIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3RhdHVzIG9mIEJQRiBKSVQgY29tcGlsYXRpb24gd2l0aGluIHRoaXMga2VybmVsIHNldHVwLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoZSBzdGFuZGFyZCBwcmFjdGljZSwgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGRlZmluaXRpdmUgc291cmNlIGZvciB0aGUgQlBGIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIGhlYWRpbmcgdGhlcmUgdG8gdmVyaWZ5IHRoZSBleGlzdGVuY2UsIGN1cnJlbnQgc3RhdGUsIGFuZCBhbnkgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBgQlBGX0pJVGAuIFRoaXMgaXMgdGhlIGJlZHJvY2s7IHdpdGhvdXQga25vd2luZyB0aGUgS2NvbmZpZyBzZXR0aW5ncywgSSBjYW4ndCBldmVuIGJlZ2luIHRvIHRyb3VibGVzaG9vdCBhbnkgcmVsYXRlZCBpc3N1ZXMgb3Igb3B0aW1pemUgQlBGIHVzYWdlLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjYyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6MzAuOTYzMDgyNTU5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYzNTYwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0pJVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxcbmtlcm5lbC9icGYvS2NvbmZpZy00My1cXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTU5LVxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTcwLVxcdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6MzEuMDA3NzI1MjA0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDYwNzU2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipDaGVja2luZyBCUEYgQ29uZmlndXJhdGlvbnMgYW5kIEF0b21pYyBPcGVyYXRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIEJQRiBjb25maWd1cmF0aW9uczogYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLCBidXQgSSBhbHdheXMgd2FudCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBOb3csIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIG1pZ2h0IGJlIGNvbm5lY3RlZCB0byB0aGUgYXRvbWljIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCBzaW5jZSB0aG9zZSBhcmUgYWx3YXlzIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXJlYS4gSXTigJlzIGEgZ29vZCB0aW1lIHRvIGRvdWJsZS1jaGVjayBpZiBgYnBmX2F0b21pY19sb2FkX3JlZ2AgaXMgYmVpbmcgdXRpbGl6ZWQgYW55d2hlcmUgZWxzZSB3aXRoaW4gdGhlIGNvZGViYXNlLCBiZXlvbmQgdGhlIGltbWVkaWF0ZSBjb250ZXh0IEknbSBjdXJyZW50bHkgd29ya2luZyBpbi4gQmV0dGVyIHRvIGJlIHRob3JvdWdoIGFuZCB2ZXJpZnkgdGhhdCB1c2FnZSBwYXR0ZXJucyBtYXRjaCBteSBjdXJyZW50IHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDg1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6MzMuOTEzODAzNjg4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODMyMDA2NDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9hdG9taWNfbG9hZF9yZWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTEyNjU9c3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE5OTQtXFx0XFx0XFx0ICovXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTk5NTpcXHRcXHRcXHRpbnQgbG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE5OTYtXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzNjE9aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIwMDEtXFx0XFx0XFx0ICovXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMDAyOlxcdFxcdFxcdGludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMDAzLVxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz03NzM9c3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTc5Mi1cXHQgKi9cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjc5MzpcXHRsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03OTQtXFx0aWYgKGxvYWRfcmVnIFxcdTAwM2U9IDApXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MjI4NT1zdDpcXHRcXHRcXHRpbnNuX29mZiA9IGluc24tXFx1MDAzZW9mZjtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNDAwLVxcdFxcdFxcdFxcdFxcdCAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyNDAxOlxcdFxcdFxcdFxcdFxcdGludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI0MDItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTQwOT1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX2F0b21pY19pc19sb2FkX2FjcShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTQyMy0gKi9cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjQyNDpzdGF0aWMgaW5saW5lIGludCBicGZfYXRvbWljX2xvYWRfcmVnKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTQyNS17XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTQ0PXN0YXRpYyBpbnQgaW5zbl9kZWZfcmVnbm8oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy01MS1cXHRjYXNlIEJQRl9TVFg6XFxua2VybmVsL2JwZi9maXh1cHMuYzo1MjpcXHRcXHRyZXR1cm4gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTUzLVxcdGRlZmF1bHQ6XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjQ0MD1zdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDkxLVxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDkyOlxcdGxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQ5My1cXHRpZiAobG9hZF9yZWcgXFx1MDAzZT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNTozNS43NDU4MTY1MTJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA3MDA2Nzc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBBdG9taWMgT3BlcmF0aW9uIEV4Y2VwdGlvbiBIYW5kbGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgYnVnIGluIEJQRiBhcmVuYSBleGNlcHRpb24gaGFuZGxpbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGF0b21pYyBvcGVyYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGltcG9ydGFudCDigJMgYXRvbWljIG9wZXJhdGlvbnMgYXJlIGNyaXRpY2FsIGZvciBjb25jdXJyZW5jeSBhbmQgZGF0YSBpbnRlZ3JpdHksIGFuZCBhIGJ1ZyBpbiB0aGVpciBleGNlcHRpb24gaGFuZGxpbmcgY291bGQgbGVhZCB0byBzaWduaWZpY2FudCBwcm9ibGVtcy5cblxuSXQgc2VlbXMgdGhlIGlzc3VlIGNlbnRlcnMgYXJvdW5kIHdoYXQgaGFwcGVucyB3aGVuIGFuIGF0b21pYyBpbnN0cnVjdGlvbiBmYXVsdHMuIFRoZSBleGNlcHRpb24gaGFuZGxlciBuZWVkcyB0byBjb3JyZWN0bHkgY2xlYXIgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGluIHRoZXNlIGNhc2VzLiBGb3IgaW5zdHJ1Y3Rpb25zIGxpa2UgYEJQRl9DTVBYQ0hHYCwgaXQncyBgcjBgLCBhbmQgZm9yIGBCUEZfRkVUQ0hgLCBpdCBpcyBgc3JjX3JlZ2AuIFRoZSBwYXRjaCBhcHBhcmVudGx5IHVzZXMgYGJwZl9hdG9taWNfbG9hZF9yZWdgIHRvIGNvcnJlY3RseSBpZGVudGlmeSB0aGUgcmVnaXN0ZXIgdG8gY2xlYXIsIHdoaWNoIHNvdW5kcyByZWFzb25hYmxlLiBJdCBhbHNvIGNvcnJlY3RseSBtYXJrcyB0aGUgYWNjZXNzIGFzIGEgd3JpdGUgZm9yIHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbnMsIHdoaWNoIG1ha2VzIHNlbnNlLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgaW1wYWN0cyB0aGUgQlBGIEpJVCBjb21waWxlciBhbmQgdmVyaWZpZXIsIHdoaWNoIGlzIHRvIGJlIGV4cGVjdGVkIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeC4gVGhlIG5vdGVzIGluZGljYXRlIGl0IGlzIHdvcnRoIGZ1enppbmcsIHdoaWNoIEkgYWdyZWUgd2l0aCAtIGF0b21pYyBvcGVyYXRpb25zIGFyZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIGVkZ2UgY2FzZXMuXG5cbkkgbmVlZCB0byBkaWcgZGVlcGVyLiBNeSBmb2N1cyBzeW1ib2xzIHdpbGwgYmUgYGJwZl9pbnNuX2RlZjMyYCwgYGV4X2hhbmRsZXJfYnBmYCwgYGJwZl9qaXRfZW1pdF9pbnNuYCwgYGJwZl9pbnRfaml0X2NvbXBpbGVgLCBhbmQgYGJwZl9jaGVja2AuXG5cbmBicGZfaW50X2ppdF9jb21waWxlYCBzZWVtcyBsaWtlIHRoZSBjb3JyZWN0IG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBKSVQgY29tcGlsYXRpb24gYWNyb3NzIGFsbCBhcmNoaXRlY3R1cmVzLCB3aGljaCBjb25maXJtcyBteSB1bmRlcnN0YW5kaW5nLiBgZXhfaGFuZGxlcl9icGZgIGlzIHNwZWNpZmljIHRvIHg4NiBhbmQgYXJtNjQsIHNvIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gYGJwZl9pbnNuX2RlZjMyYCBpcyB1c2VkIGluIHRoZSB2ZXJpZmllciBhbmQgZml4dXBzLCBhbmQgSSB3aWxsIGNoZWNrIGl0IGluIHRoZSBjb250ZXh0IG9mIHRoZSBmaXh1cHMuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgYGJwZl9pbnNuX2RlZjMyYCBhbmQgcmVsYXRlZCBjYWxscy4gSW4gYGtlcm5lbC9icGYvZml4dXBzLmNgLCBpdCBzZWVtcyBpdCBjYWxscyBgaW5zbl9kZWZfcmVnbm9gLCB3aGljaCB0aGVuIGNhbGxzIGBicGZfYXRvbWljX2xvYWRfcmVnYC4gVGhpcyBjb25maXJtcyB0aGF0IGBicGZfaW5zbl9kZWYzMmAgaXMgYSBnb29kIGNob2ljZSBmb3IgaW52ZXN0aWdhdGlvbi5cblxuSSdsbCBhbHNvIGNoZWNrIGBicGZfY2hlY2tgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGlzIGlzIHRoZSBtYWluIHZlcmlmaWVyIGVudHJ5IHBvaW50LiBUaGUgc3RhdGljIGZ1bmN0aW9uIGBjaGVja19hdG9taWNfcm13YCBpcyBjYWxsZWQgZHVyaW5nIHZlcmlmaWNhdGlvbiwgd2hpY2ggaXMgcmVsZXZhbnQgdG8gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzIyOCwiT3V0cHV0VG9rZW5zIjoyMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6NDMuODE1ODg3MDcxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQyNTc4MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2luc25fZGVmMzJcIixcbiAgICBcImV4X2hhbmRsZXJfYnBmXCIsXG4gICAgXCJicGZfaml0X2VtaXRfaW5zblwiLFxuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXJzICh4ODYsIGFybTY0LCByaXNjdiwgczM5MCkgYW5kIHRoZSBCUEYgdmVyaWZpZXIgdG8gY29ycmVjdGx5IGhhbmRsZSBleGNlcHRpb25zIGZvciBhdG9taWMgb3BlcmF0aW9ucyBpbiB0aGUgQlBGIGFyZW5hLiBJdCBpbnRyb2R1Y2VzIGBicGZfYXRvbWljX2xvYWRfcmVnYCB0byBpZGVudGlmeSB0aGUgcmVnaXN0ZXIgdGhhdCBuZWVkcyB0byBiZSBjbGVhcmVkIHdoZW4gYW4gYXRvbWljIGluc3RydWN0aW9uIGZhdWx0cywgYW5kIGVuc3VyZXMgdGhhdCByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb25zIGFyZSBjb3JyZWN0bHkgcmVwb3J0ZWQgYXMgd3JpdGVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQlBGIHN1YnN5c3RlbSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW5zbl9kZWYzMlwiLFxuICAgIFwiZXhfaGFuZGxlcl9icGZcIixcbiAgICBcImJwZl9qaXRfZW1pdF9pbnNuXCIsXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gICAgXCJicGZfY2hlY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlcnMgKHg4NiwgYXJtNjQsIHJpc2N2LCBzMzkwKSBhbmQgdGhlIEJQRiB2ZXJpZmllciB0byBjb3JyZWN0bHkgaGFuZGxlIGV4Y2VwdGlvbnMgZm9yIGF0b21pYyBvcGVyYXRpb25zIGluIHRoZSBCUEYgYXJlbmEuIEl0IGludHJvZHVjZXMgYGJwZl9hdG9taWNfbG9hZF9yZWdgIHRvIGlkZW50aWZ5IHRoZSByZWdpc3RlciB0aGF0IG5lZWRzIHRvIGJlIGNsZWFyZWQgd2hlbiBhbiBhdG9taWMgaW5zdHJ1Y3Rpb24gZmF1bHRzLCBhbmQgZW5zdXJlcyB0aGF0IHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbnMgYXJlIGNvcnJlY3RseSByZXBvcnRlZCBhcyB3cml0ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc3Vic3lzdGVtKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6NDMuODkwMTUwNjQ0WiIsIlNlcSI6MzksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU1MzgzNTg3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAwOjM1OjQzLjg5MDYxNjE2NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNzU1MzM2NjU3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgdGhlIEJQRiBleGNlcHRpb24gaGFuZGxlciBmb3IgYXJlbmEgYWNjZXNzZXMgdG8gY29ycmVjdGx5IGlkZW50aWZ5IHJlYWQtbW9kaWZ5LXdyaXRlIGF0b21pYyBvcGVyYXRpb25zIChsaWtlIEJQRl9YQ0hHIGFuZCBCUEZfQ01QWENIRykgYXMgd3JpdGVzLCBhbmQgdG8gcHJvcGVybHkgY2xlYXIgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIChlLmcuLCBCUEZfUkVHXzAgZm9yIENNUFhDSEcpIHdoZW4gYSBwYWdlIGZhdWx0IG9jY3Vycy4gSWYgdGhlIHJlZ2lzdGVyIGlzIG5vdCBjbGVhcmVkLCB0aGUgQlBGIHByb2dyYW0gc2ltcGx5IHJldGFpbnMgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoYXQgcmVnaXN0ZXIuIFRoaXMgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnksIG5vciBkb2VzIGl0IGV4cG9zZSBrZXJuZWwgc3RhY2svaGVhcCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlIGlzc3VlIGlzIGEgbG9naWMgYnVnIGluIEJQRiBKSVQgZXhjZXB0aW9uIGhhbmRsaW5nLCB3aGljaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gU3RhbmRhcmQgdGVzdGluZyBhbmQgQlBGIHNlbGZ0ZXN0cyAoYXMgaW5jbHVkZWQgaW4gdGhlIHBhdGNoKSBhcmUgc3VmZmljaWVudCB0byB2ZXJpZnkgdGhlIGZpeC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNGFhNzUyMWY4NTgwM2ZkM2ExYmFlMTQ1MTlkYTBhYmRjMWRmMDFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDA6MzQ6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBkMTRkMjk3ZWJiOTY3Li43NGI0MDgzNzkxZGEzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMTA4MiwyMyArMTA4MiwyNyBAQCBzdGF0aWMgdm9pZCBidWlsZF9lcGlsb2d1ZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIHdhc19jbGFzc2ljKVxuICAqXG4gICogQml0IGxheW91dCBvZiBgZml4dXBgICgzMi1iaXQpOlxuICAqXG4tICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rXG4tICogfCAgIDMxLTI3ICAgfCAyNi0yMiAgfCAgICAgMjEgICAgfCAgIDIwLTE2ICAgfCAgIDE1LTAgICB8XG4tICogfCAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8XG4tICogfCBGSVhVUF9SRUcgfCBVbnVzZWQgfCBBUkVOQV9BQ0MgfCBBUkVOQV9SRUcgfCAgT0ZGU0VUICB8XG4tICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rXG4rICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLStcbisgKiB8ICAgMzEtMjcgICB8IDI2LTIzICB8ICAgICAgMjIgICAgIHwgICAgIDIxICAgIHwgICAyMC0xNiAgIHwgICAxNS0wICAgfFxuKyAqIHwgICAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8XG4rICogfCBGSVhVUF9SRUcgfCBVbnVzZWQgfCBBUkVOQV9XUklURSB8IEFSRU5BX0FDQyB8IEFSRU5BX1JFRyB8ICBPRkZTRVQgIHxcbisgKiArLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tK1xuICAqXG4gICogLSBPRkZTRVQgKDE2IGJpdHMpOiBPZmZzZXQgdXNlZCB0byBjb21wdXRlIGFkZHJlc3MgZm9yIExvYWQvU3RvcmUgaW5zdHJ1Y3Rpb24uXG4gICogLSBBUkVOQV9SRUcgKDUgYml0cyk6IFJlZ2lzdGVyIHRoYXQgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGFkZHJlc3MgZm9yIGxvYWQvc3RvcmUgd2hlblxuICAqICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NpbmcgdGhlIGFyZW5hIHJlZ2lvbi5cbiAgKiAtIEFSRU5BX0FDQ0VTUyAoMSBiaXQpOiBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24gYWNjZXNzZWQgdGhlIGFyZW5hIHJlZ2lvbi5cbisgKiAtIEFSRU5BX1dSSVRFICgxIGJpdCk6IFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiB3cm90ZSB0byB0aGUgYXJlbmEgcmVnaW9uLlxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW5kZXBlbmRlbnQgb2YgRklYVVBfUkVHLCBzaW5jZSBhIHJlYWQtbW9kaWZ5LXdyaXRlIGJvdGggd3JpdGVzIHRvXG4rICogICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgYW5kIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBhIHJlZ2lzdGVyLlxuICAqIC0gRklYVVBfUkVHICg1IGJpdHMpOiBEZXN0aW5hdGlvbiByZWdpc3RlciBmb3IgdGhlIGxvYWQgaW5zdHJ1Y3Rpb24gKGNsZWFyZWQgb24gZmF1bHQpIG9yIHNldCB0b1xuLSAqICAgICAgICAgICAgICAgICAgICAgICBET05UX0NMRUFSIGlmIGl0IGlzIGEgc3RvcmUgaW5zdHJ1Y3Rpb24uXG4rICogICAgICAgICAgICAgICAgICAgICAgIERPTlRfQ0xFQVIgaWYgdGhlIGluc3RydWN0aW9uIGRvZXMgbm90IHJlYWQgaW50byBhIHJlZ2lzdGVyLlxuICAqL1xuIFxuICNkZWZpbmUgQlBGX0ZJWFVQX09GRlNFVF9NQVNLICAgICAgR0VOTUFTSygxNSwgMClcbiAjZGVmaW5lIEJQRl9GSVhVUF9BUkVOQV9SRUdfTUFTSyAgIEdFTk1BU0soMjAsIDE2KVxuICNkZWZpbmUgQlBGX0FSRU5BX0FDQ0VTUyAgICAgICAgICAgQklUKDIxKVxuKyNkZWZpbmUgQlBGX0FSRU5BX1dSSVRFICAgICAgICAgICAgQklUKDIyKVxuICNkZWZpbmUgQlBGX0ZJWFVQX1JFR19NQVNLXHRHRU5NQVNLKDMxLCAyNylcbiAjZGVmaW5lIERPTlRfQ0xFQVIgNSAvKiBVbnVzZWQgQVJNNjQgcmVnaXN0ZXIgZnJvbSBCUEYncyBQT1YgKi9cbiBcbkBAIC0xMTA5LDcgKzExMTMsNyBAQCBib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxuIFx0czE2IG9mZiA9IEZJRUxEX0dFVChCUEZfRklYVVBfT0ZGU0VUX01BU0ssIGV4LVx1MDAzZWZpeHVwKTtcbiBcdGludCBhcmVuYV9yZWcgPSBGSUVMRF9HRVQoQlBGX0ZJWFVQX0FSRU5BX1JFR19NQVNLLCBleC1cdTAwM2VmaXh1cCk7XG4gXHRib29sIGlzX2FyZW5hID0gISEoZXgtXHUwMDNlZml4dXAgXHUwMDI2IEJQRl9BUkVOQV9BQ0NFU1MpO1xuLVx0Ym9vbCBpc193cml0ZSA9IChkc3RfcmVnID09IERPTlRfQ0xFQVIpO1xuK1x0Ym9vbCBpc193cml0ZSA9ICEhKGV4LVx1MDAzZWZpeHVwIFx1MDAyNiBCUEZfQVJFTkFfV1JJVEUpO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyO1xuIFxuIFx0aWYgKGlzX2FyZW5hKSB7XG5AQCAtMTEzMiw3ICsxMTM2LDcgQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIHtcbiBcdG9mZl90IGluc19vZmZzZXQ7XG4gXHRzMTYgb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4tXHRib29sIGlzX2FyZW5hO1xuK1x0Ym9vbCBpc19hcmVuYSwgaXNfd3JpdGU7XG4gXHRpbnQgYXJlbmFfcmVnO1xuIFx0dW5zaWduZWQgbG9uZyBwYztcbiBcdHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4O1xuQEAgLTExODEsMTUgKzExODUsMTggQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0LypcbiBcdCAqIEEgbG9hZC1hY3F1aXJlIGlzIG9mIEJQRl9TVFggY2xhc3MsIGJ1dCByZWFkcyBmcm9tIHNyY19yZWcgaW50b1xuIFx0ICogZHN0X3JlZyBsaWtlIGEgQlBGX0xEWCBkb2VzLCBoZW5jZSBpdCBtdXN0IG5vdCBiZSB0cmVhdGVkIGFzIGEgc3RvcmVcbi1cdCAqIGhlcmUuXG4rXHQgKiBoZXJlLiBBIHJlYWQtbW9kaWZ5LXdyaXRlIGNhcnJ5aW5nIEJQRl9GRVRDSCBpcyByZXBvcnRlZCBhcyBhIHdyaXRlXG4rXHQgKiBldmVuIHRob3VnaCBpdCBkb2VzIGhhdmUgYSByZWdpc3RlciB0byBjbGVhciwgc2VlIHRoZSBjYWxsZXJzLlxuIFx0ICovXG4tXHRpZiAoQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX0xEWCBcdTAwMjZcdTAwMjYgIWJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikpXG4tXHRcdGRzdF9yZWcgPSBET05UX0NMRUFSO1xuK1x0aXNfd3JpdGUgPSBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTERYIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAhYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKTtcbiBcbiBcdGV4LVx1MDAzZWZpeHVwID0gRklFTERfUFJFUChCUEZfRklYVVBfUkVHX01BU0ssIGRzdF9yZWcpO1xuIFxuIFx0aWYgKGlzX2FyZW5hKSB7XG4gXHRcdGV4LVx1MDAzZWZpeHVwIHw9IEJQRl9BUkVOQV9BQ0NFU1M7XG4rXHRcdGlmIChpc193cml0ZSlcbitcdFx0XHRleC1cdTAwM2VmaXh1cCB8PSBCUEZfQVJFTkFfV1JJVEU7XG4gXHRcdC8qXG4gXHRcdCAqIGluc24tXHUwMDNlc3JjX3JlZy9kc3RfcmVnIGhvbGRzIHRoZSBhZGRyZXNzIGluIHRoZSBhcmVuYSByZWdpb24gd2l0aCB1cHBlciAzMi1iaXRzXG4gXHRcdCAqIGJlaW5nIHplcm8gYmVjYXVzZSBvZiBhIHByZWNlZGluZyBhZGRyX3NwYWNlX2Nhc3Qoclx1MDAzY25cdTAwM2UsIDB4MCwgMHgxKSBpbnN0cnVjdGlvbi5cbkBAIC0xODg5LDcgKzE4OTYsNyBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgZHN0KTtcbitcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGN0eCwgRE9OVF9DTEVBUik7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0YnJlYWs7XG5AQCAtMTk1Niw3ICsxOTYzLDcgQEAgc3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zblxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGRzdCk7XG4rXHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIERPTlRfQ0xFQVIpO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdGJyZWFrO1xuQEAgLTE5NzksNyArMTk4NiwxNiBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcbiBcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX0FUT01JQykge1xuLVx0XHRcdHJldCA9IGFkZF9leGNlcHRpb25faGFuZGxlcihpbnNuLCBjdHgsIGRzdCk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBIGxvYWQtYWNxdWlyZSByZWFkcyBpbnRvIGRzdF9yZWcsIGFuZCBhIHJlYWQtbW9kaWZ5LXdyaXRlXG4rXHRcdFx0ICogY2FycnlpbmcgQlBGX0ZFVENIIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBzcmNfcmVnLCBvciBpbnRvXG4rXHRcdFx0ICogcjAgZm9yIGEgQlBGX0NNUFhDSEcuIENsZWFyIHRoYXQgcmVnaXN0ZXIgb24gZmF1bHQsIHRoZVxuK1x0XHRcdCAqIHJlbWFpbmluZyBhdG9taWNzIGhhdmUgbm8gZGVzdGluYXRpb24gcmVnaXN0ZXIuXG4rXHRcdFx0ICovXG4rXHRcdFx0aW50IGxvYWRfcmVnID0gYnBmX2F0b21pY19sb2FkX3JlZyhpbnNuKTtcbitcbitcdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbiwgY3R4LCBsb2FkX3JlZyBcdTAwM2MgMCA/XG4rXHRcdFx0XHRcdFx0ICAgIERPTlRfQ0xFQVIgOiBicGYyYTY0W2xvYWRfcmVnXSk7XG4gXHRcdFx0aWYgKHJldClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuaW5kZXggNmI5OTcyYjA3YzFiMC4uMjUwNGRmMWZhMTExOCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbisrKyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbkBAIC0xOTkyLDEwICsxOTkyLDE5IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFx0XHRcdHJldCA9IGVtaXRfYXRvbWljX3JtdyhyZCwgcnMsIGluc24sIGN0eCk7XG4gXG4gXHRcdC8qIHJldCBjYW4gYmUgMSAoc2tpcC16ZXh0KTsgZXh0YWJsZSBlbnRyeSBzdGlsbCBuZWVkcyB0byBiZSBhZGRlZCAqL1xuLVx0XHRpZiAocmV0IFx1MDAzZT0gMClcbi1cdFx0XHRyZXQgPSBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoaW5zbixcbi1cdFx0XHRcdGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikgPyByZCA6IFJFR19ET05UX0NMRUFSX01BUktFUixcbi1cdFx0XHRcdGN0eCkgPzogcmV0O1xuK1x0XHRpZiAocmV0IFx1MDAzZT0gMCkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogQSBsb2FkLWFjcXVpcmUgcmVhZHMgaW50byBkc3RfcmVnLCBhbmQgYSByZWFkLW1vZGlmeS13cml0ZVxuK1x0XHRcdCAqIGNhcnJ5aW5nIEJQRl9GRVRDSCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gc3JjX3JlZywgb3IgaW50b1xuK1x0XHRcdCAqIHIwIGZvciBhIEJQRl9DTVBYQ0hHLiBDbGVhciB0aGF0IHJlZ2lzdGVyIG9uIGZhdWx0LCB0aGVcbitcdFx0XHQgKiByZW1haW5pbmcgYXRvbWljcyBoYXZlIG5vIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG4rXG4rXHRcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sIGxvYWRfcmVnIFx1MDAzYyAwID9cbitcdFx0XHRcdFx0UkVHX0RPTlRfQ0xFQVJfTUFSS0VSIDogcmVnbWFwW2xvYWRfcmVnXSxcbitcdFx0XHRcdFx0Y3R4KSA/OiByZXQ7XG4rXHRcdH1cbiBcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBiNjA4Nzc0NzhiNDVkLi5jNDY4NzJiMDcxY2U3IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTc3NCw2ICs3NzQsOCBAQCBzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX2F0b21pY19wcmUoc3RydWN0IGJwZl9qaXQgKmppdCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXG4ge1xuK1x0aW50IGxvYWRfcmVnO1xuK1xuIFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX0FUT01JQylcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTc4Myw2ICs3ODUsMTQgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9hdG9taWNfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsXG4gXHRFTUlUNCgweGI5MDgwMDAwLCBSRUdfVzEsIGluc24tXHUwMDNlZHN0X3JlZyk7XG4gXHRwcm9iZS1cdTAwM2VhcmVuYV9yZWcgPSBSRUdfVzE7XG4gXHRwcm9iZS1cdTAwM2VwcmcgPSBqaXQtXHUwMDNlcHJnO1xuK1x0LypcbitcdCAqIEEgcmVhZC1tb2RpZnktd3JpdGUgY2FycnlpbmcgQlBGX0ZFVENIIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50b1xuK1x0ICogc3JjX3JlZywgb3IgaW50byByMCBmb3IgYSBCUEZfQ01QWENIRy4gQ2xlYXIgdGhhdCByZWdpc3RlciBvblxuK1x0ICogZmF1bHQsIHRoZSByZW1haW5pbmcgYXRvbWljcyBvbmx5IHdyaXRlIG1lbW9yeS5cbitcdCAqL1xuK1x0bG9hZF9yZWcgPSBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xuK1x0aWYgKGxvYWRfcmVnIFx1MDAzZT0gMClcbitcdFx0cHJvYmUtXHUwMDNlcmVnID0gcmVnMmhleFtsb2FkX3JlZ107XG4gfVxuIFxuIHN0YXRpYyBpbnQgYnBmX2ppdF9wcm9iZV9wb3N0KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG5AQCAtMTY4NCw2ICsxNjk0LDcgQEAgc3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcbiBcdFx0XHRpZiAobG9hZF9wcm9iZS5wcmcgIT0gLTEpIHtcbiBcdFx0XHRcdHByb2JlLnByZyA9IGppdC1cdTAwM2Vwcmc7XG4gXHRcdFx0XHRwcm9iZS5hcmVuYV9yZWcgPSBsb2FkX3Byb2JlLmFyZW5hX3JlZztcbitcdFx0XHRcdHByb2JlLnJlZyA9IGxvYWRfcHJvYmUucmVnO1xuIFx0XHRcdH1cbiBcdFx0XHRsb29wX3N0YXJ0ID0gaml0LVx1MDAzZXByZztcbiBcdFx0XHQvKiAwOiB7Y3N5fGNzZ30gJXcwLCVzcmMsb2ZmKCVhcmVuYSkgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IDhkZGRiNWQ3YWYyMWIuLmQ5MjA3NzJhZjdkNWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTE0NzMsMTcgKzE0NzMsMjAgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19sZF9zdF9pbmRleCh1OCAqKnBwcm9nLCB1MzIgYXRvbWljX29wLCB1MzIgc2l6ZSxcbiAgKlxuICAqIEJpdCBsYXlvdXQgb2YgYGZpeHVwYCAoMzItYml0KTpcbiAgKlxuLSAqICstLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLStcbi0gKiB8IDMxICAgICAgICB8IDMwLTI0ICB8ICAgMjMtMTYgICB8ICAgMTUtOCAgfCAgICA3LTAgICB8XG4tICogfCAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgfFxuLSAqIHwgQVJFTkFfQUNDIHwgVW51c2VkIHwgQVJFTkFfUkVHIHwgRFNUX1JFRyB8IElOU05fTEVOIHxcbi0gKiArLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rXG4rICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rXG4rICogfCAzMSAgICAgICAgfCAzMCAgICAgICAgICB8IDI5LTI0ICB8ICAgMjMtMTYgICB8ICAgMTUtOCAgfCAgICA3LTAgICB8XG4rICogfCAgICAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICB8XG4rICogfCBBUkVOQV9BQ0MgfCBBUkVOQV9XUklURSB8IFVudXNlZCB8IEFSRU5BX1JFRyB8IERTVF9SRUcgfCBJTlNOX0xFTiB8XG4rICogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rXG4gICpcbiAgKiAtIElOU05fTEVOICg4IGJpdHMpOiBMZW5ndGggb2YgZmF1bHRpbmcgaW5zbiAobWF4IHg4NiBpbnNuID0gMTUgYnl0ZXMgKGZpdHMgaW4gOCBiaXRzKSkuXG4gICogLSBEU1RfUkVHICAoOCBiaXRzKTogT2Zmc2V0IG9mIGRzdF9yZWcgZnJvbSByZWcycHRfcmVnc1tdIChtYXggb2Zmc2V0ID0gMTEyIChmaXRzIGluIDggYml0cykpLlxuLSAqICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgc2V0IHRvIERPTlRfQ0xFQVIgaWYgdGhlIGluc24gaXMgYSBzdG9yZS5cbisgKiAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHNldCB0byBET05UX0NMRUFSIGlmIHRoZSBpbnNuIGRvZXMgbm90IHJlYWQgaW50byBhIHJlZ2lzdGVyLlxuICAqIC0gQVJFTkFfUkVHICg4IGJpdHMpOiBPZmZzZXQgb2YgdGhlIHJlZ2lzdGVyIHRoYXQgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlXG4gICogICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgZm9yIGxvYWQvc3RvcmUgd2hlbiBhY2Nlc3NpbmcgdGhlIGFyZW5hIHJlZ2lvbi5cbisgKiAtIEFSRU5BX1dSSVRFICgxIGJpdCk6IFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiB3cm90ZSB0byB0aGUgYXJlbmEgcmVnaW9uLlxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW5kZXBlbmRlbnQgb2YgRFNUX1JFRywgc2luY2UgYSByZWFkLW1vZGlmeS13cml0ZSBib3RoIHdyaXRlcyB0b1xuKyAqICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5IGFuZCByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gYSByZWdpc3Rlci5cbiAgKiAtIEFSRU5BX0FDQ0VTUyAoMSBiaXQpOiBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24gYWNjZXNzZWQgdGhlIGFyZW5hIHJlZ2lvbi5cbiAgKlxuICAqIEJpdCBsYXlvdXQgb2YgYGRhdGFgICgzMi1iaXQpOlxuQEAgLTE1MDIsNiArMTUwNSw3IEBAIHN0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3RfaW5kZXgodTggKipwcHJvZywgdTMyIGF0b21pY19vcCwgdTMyIHNpemUsXG4gI2RlZmluZSBGSVhVUF9JTlNOX0xFTl9NQVNLXHRHRU5NQVNLKDcsIDApXG4gI2RlZmluZSBGSVhVUF9SRUdfTUFTS1x0XHRHRU5NQVNLKDE1LCA4KVxuICNkZWZpbmUgRklYVVBfQVJFTkFfUkVHX01BU0tcdEdFTk1BU0soMjMsIDE2KVxuKyNkZWZpbmUgRklYVVBfQVJFTkFfV1JJVEVcdEJJVCgzMClcbiAjZGVmaW5lIEZJWFVQX0FSRU5BX0FDQ0VTU1x0QklUKDMxKVxuICNkZWZpbmUgREFUQV9BUkVOQV9PRkZTRVRfTUFTS1x0R0VOTUFTSygzMSwgMTYpXG4gXG5AQCAtMTUxMCw3ICsxNTE0LDcgQEAgYm9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICp4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdHUzMiByZWcgPSBGSUVMRF9HRVQoRklYVVBfUkVHX01BU0ssIHgtXHUwMDNlZml4dXApO1xuIFx0dTMyIGluc25fbGVuID0gRklFTERfR0VUKEZJWFVQX0lOU05fTEVOX01BU0ssIHgtXHUwMDNlZml4dXApO1xuIFx0Ym9vbCBpc19hcmVuYSA9ICEhKHgtXHUwMDNlZml4dXAgXHUwMDI2IEZJWFVQX0FSRU5BX0FDQ0VTUyk7XG4tXHRib29sIGlzX3dyaXRlID0gKHJlZyA9PSBET05UX0NMRUFSKTtcbitcdGJvb2wgaXNfd3JpdGUgPSAhISh4LVx1MDAzZWZpeHVwIFx1MDAyNiBGSVhVUF9BUkVOQV9XUklURSk7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHI7XG4gXHRzMTYgb2ZmO1xuIFx0dTMyIGFyZW5hX3JlZztcbkBAIC0yMzQ4LDYgKzIzNTIsNyBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdFx0c3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXg7XG4gXHRcdFx0XHR1OCAqX2luc24gPSBpbWFnZSArIHByb2dsZW4gKyAoc3RhcnRfb2ZfbGR4IC0gdGVtcCk7XG4gXHRcdFx0XHR1MzIgYXJlbmFfcmVnLCBmaXh1cF9yZWc7XG4rXHRcdFx0XHRib29sIGlzX3dyaXRlO1xuIFx0XHRcdFx0czY0IGRlbHRhO1xuIFxuIFx0XHRcdFx0aWYgKCFicGZfcHJvZy1cdTAwM2VhdXgtXHUwMDNlZXh0YWJsZSlcbkBAIC0yMzg0LDE1ICsyMzg5LDI5IEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0XHQgICAgYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSkge1xuIFx0XHRcdFx0XHRhcmVuYV9yZWcgPSByZWcycHRfcmVnc1tzcmNfcmVnXTtcbiBcdFx0XHRcdFx0Zml4dXBfcmVnID0gcmVnMnB0X3JlZ3NbZHN0X3JlZ107XG4rXHRcdFx0XHRcdGlzX3dyaXRlID0gZmFsc2U7XG4gXHRcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0XHQvKlxuK1x0XHRcdFx0XHQgKiBBIHN0b3JlIGhhcyBubyBkZXN0aW5hdGlvbiByZWdpc3RlciB0byBjbGVhcixcbitcdFx0XHRcdFx0ICogZXhjZXB0IGZvciBhIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggQlBGX0ZFVENILFxuK1x0XHRcdFx0XHQgKiB3aGljaCBhbHNvIHJlYWRzIHRoZSBvbGQgdmFsdWUgaW50byBzcmNfcmVnLCBvclxuK1x0XHRcdFx0XHQgKiBpbnRvIHIwIGZvciBhIEJQRl9DTVBYQ0hHLiBFaXRoZXIgd2F5IHRoZSBhY2Nlc3NcbitcdFx0XHRcdFx0ICogaXMgc3RpbGwgcmVwb3J0ZWQgYXMgYSB3cml0ZS5cbitcdFx0XHRcdFx0ICovXG4rXHRcdFx0XHRcdGludCBsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG4rXG4gXHRcdFx0XHRcdGFyZW5hX3JlZyA9IHJlZzJwdF9yZWdzW2RzdF9yZWddO1xuLVx0XHRcdFx0XHRmaXh1cF9yZWcgPSBET05UX0NMRUFSO1xuK1x0XHRcdFx0XHRmaXh1cF9yZWcgPSBsb2FkX3JlZyBcdTAwM2MgMCA/IERPTlRfQ0xFQVIgOlxuK1x0XHRcdFx0XHRcdCAgICByZWcycHRfcmVnc1tsb2FkX3JlZ107XG4rXHRcdFx0XHRcdGlzX3dyaXRlID0gdHJ1ZTtcbiBcdFx0XHRcdH1cbiBcbiBcdFx0XHRcdGV4LVx1MDAzZWZpeHVwID0gRklFTERfUFJFUChGSVhVUF9JTlNOX0xFTl9NQVNLLCBwcm9nIC0gc3RhcnRfb2ZfbGR4KSB8XG4gXHRcdFx0XHRcdCAgICBGSUVMRF9QUkVQKEZJWFVQX0FSRU5BX1JFR19NQVNLLCBhcmVuYV9yZWcpIHxcbiBcdFx0XHRcdFx0ICAgIEZJRUxEX1BSRVAoRklYVVBfUkVHX01BU0ssIGZpeHVwX3JlZyk7XG4gXHRcdFx0XHRleC1cdTAwM2VmaXh1cCB8PSBGSVhVUF9BUkVOQV9BQ0NFU1M7XG4rXHRcdFx0XHRpZiAoaXNfd3JpdGUpXG4rXHRcdFx0XHRcdGV4LVx1MDAzZWZpeHVwIHw9IEZJWFVQX0FSRU5BX1dSSVRFO1xuIFxuIFx0XHRcdFx0ZXgtXHUwMDNlZGF0YSB8PSBGSUVMRF9QUkVQKERBVEFfQVJFTkFfT0ZGU0VUX01BU0ssIGluc24tXHUwMDNlb2ZmKTtcbiBcdFx0XHR9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbmluZGV4IDRlZGJhODE4MmRiMWIuLjE1ZDgzNjg0YzZlOTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5AQCAtNDE0LDYgKzQxNCwzMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX2F0b21pY19pc19sb2FkX2FjcShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gXHQgICAgICAgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRO1xuIH1cbiBcbisvKlxuKyAqIEdpdmVuIGFuIGluc3RydWN0aW9uIEBpbnNuLCByZXR1cm4gdGhlIG51bWJlciBvZiB0aGUgQlBGIHJlZ2lzdGVyIHRoYXQgYVxuKyAqIEJQRl9BVE9NSUMgcmVhZHMgdGhlIHZhbHVlIGF0IGl0cyBtZW1vcnkgb3BlcmFuZCBpbnRvLCBvciAtMSBpZiB0aGVyZSBpc1xuKyAqIG5vIHN1Y2ggcmVnaXN0ZXIuIFRoYXQgaXMgdGhlIHJlZ2lzdGVyIGEgQlBGX1BST0JFX0FUT01JQyBoYXMgdG8gY2xlYXIgd2hlblxuKyAqIHRoZSBhY2Nlc3MgZmF1bHRzLiBMaWtlIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoKSwgQGluc24gaXMgbm90IGFzc3VtZWQgdG9cbisgKiBiZSBhIEJQRl9BVE9NSUMgaGVyZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBicGZfYXRvbWljX2xvYWRfcmVnKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbit7XG4rXHRpZiAoQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1NUWCB8fFxuK1x0ICAgIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4rXHQgICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX0FUT01JQykpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdHN3aXRjaCAoaW5zbi1cdTAwM2VpbW0pIHtcbitcdGNhc2UgQlBGX0xPQURfQUNROlxuK1x0XHRyZXR1cm4gaW5zbi1cdTAwM2Vkc3RfcmVnO1xuK1x0Y2FzZSBCUEZfQ01QWENIRzpcbitcdFx0cmV0dXJuIEJQRl9SRUdfMDtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAoaW5zbi1cdTAwM2VpbW0gXHUwMDI2IEJQRl9GRVRDSCkgPyBpbnNuLVx1MDAzZXNyY19yZWcgOiAtMTtcbitcdH1cbit9XG4rXG4gLyogTWVtb3J5IHN0b3JlLCAqKHVpbnQgKikgKGRzdF9yZWcgKyBvZmYxNikgPSBpbW0zMiAqL1xuIFxuICNkZWZpbmUgQlBGX1NUX01FTShTSVpFLCBEU1QsIE9GRiwgSU1NKVx0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2ZpeHVwcy5jIGIva2VybmVsL2JwZi9maXh1cHMuY1xuaW5kZXggNjYxZTJkMTNhNjA0Mi4uYzRiZDcwYmVmYmI1YyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmNcbisrKyBiL2tlcm5lbC9icGYvZml4dXBzLmNcbkBAIC00OSwxNiArNDksNyBAQCBzdGF0aWMgaW50IGluc25fZGVmX3JlZ25vKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdGNhc2UgQlBGX1NUOlxuIFx0XHRyZXR1cm4gLTE7XG4gXHRjYXNlIEJQRl9TVFg6XG4tXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgfHxcbi1cdFx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX0FUT01JQykge1xuLVx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSA9PSBCUEZfQ01QWENIRylcbi1cdFx0XHRcdHJldHVybiBCUEZfUkVHXzA7XG4tXHRcdFx0ZWxzZSBpZiAoaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRKVxuLVx0XHRcdFx0cmV0dXJuIGluc24tXHUwMDNlZHN0X3JlZztcbi1cdFx0XHRlbHNlIGlmIChpbnNuLVx1MDAzZWltbSBcdTAwMjYgQlBGX0ZFVENIKVxuLVx0XHRcdFx0cmV0dXJuIGluc24tXHUwMDNlc3JjX3JlZztcbi1cdFx0fVxuLVx0XHRyZXR1cm4gLTE7XG4rXHRcdHJldHVybiBicGZfYXRvbWljX2xvYWRfcmVnKGluc24pO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIGluc24tXHUwMDNlZHN0X3JlZztcbiBcdH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGFkZDNhZmZjNTcwMzUuLjczYTJlOGJiMTc4MmEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTY0ODUsMjEgKzY0ODUsMTYgQEAgc3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0fVxuIFxuLVx0aWYgKGluc24tXHUwMDNlaW1tIFx1MDAyNiBCUEZfRkVUQ0gpIHtcbi1cdFx0aWYgKGluc24tXHUwMDNlaW1tID09IEJQRl9DTVBYQ0hHKVxuLVx0XHRcdGxvYWRfcmVnID0gQlBGX1JFR18wO1xuLVx0XHRlbHNlXG4tXHRcdFx0bG9hZF9yZWcgPSBpbnNuLVx1MDAzZXNyY19yZWc7XG4tXG4rXHQvKlxuK1x0ICogQSBuZWdhdGl2ZSBsb2FkX3JlZyBtZWFucyB0aGF0IHRoaXMgaW5zdHJ1Y3Rpb24gYWNjZXNzZXMgYSBtZW1vcnlcbitcdCAqIGxvY2F0aW9uIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGxvYWQgaXQgaW50byBhIHJlZ2lzdGVyLlxuK1x0ICovXG4rXHRsb2FkX3JlZyA9IGJwZl9hdG9taWNfbG9hZF9yZWcoaW5zbik7XG4rXHRpZiAobG9hZF9yZWcgXHUwMDNlPSAwKSB7XG4gXHRcdC8qIGNoZWNrIGFuZCByZWNvcmQgbG9hZCBvZiBvbGQgdmFsdWUgKi9cbiBcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGxvYWRfcmVnLCBEU1RfT1ApO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4tXHR9IGVsc2Uge1xuLVx0XHQvKiBUaGlzIGluc3RydWN0aW9uIGFjY2Vzc2VzIGEgbWVtb3J5IGxvY2F0aW9uIGJ1dCBkb2Vzbid0XG4tXHRcdCAqIGFjdHVhbGx5IGxvYWQgaXQgaW50byBhIHJlZ2lzdGVyLlxuLVx0XHQgKi9cbi1cdFx0bG9hZF9yZWcgPSAtMTtcbiBcdH1cbiBcbiBcdGRzdF9yZWcgPSBjdXJfcmVncyhlbnYpICsgaW5zbi1cdTAwM2Vkc3RfcmVnO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbmluZGV4IDE1ZGQzYWUyYTg0YjcuLmU0ZTkzNzQzMDllMjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbkBAIC0xMDUsNiArMTA1LDEwIEBAIHZvaWQgdGVzdF9zdHJlYW1fYXJlbmFfZmF1bHRfYWRkcmVzcyh2b2lkKVxuIFx0XHR0ZXN0X2FkZHJlc3Moc2tlbC1cdTAwM2Vwcm9ncy5zdHJlYW1fYXJlbmFfd3JpdGVfZmF1bHQsIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWZhdWx0X2FkZHIpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJsb2FkX2FjcXVpcmVfZmF1bHRcIikpXG4gXHRcdHRlc3RfYWRkcmVzcyhza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV9sb2FkX2FjcXVpcmVfZmF1bHQsIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWZhdWx0X2FkZHIpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ4Y2hnX2ZhdWx0XCIpKVxuK1x0XHR0ZXN0X2FkZHJlc3Moc2tlbC1cdTAwM2Vwcm9ncy5zdHJlYW1fYXJlbmFfeGNoZ19mYXVsdCwgXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmF1bHRfYWRkcik7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImNtcHhjaGdfZmF1bHRcIikpXG4rXHRcdHRlc3RfYWRkcmVzcyhza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV9jbXB4Y2hnX2ZhdWx0LCBcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2VmYXVsdF9hZGRyKTtcbiBcbiBcdHN0cmVhbV9fZGVzdHJveShza2VsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXG5pbmRleCBjZjU1MzNlMTFmMzljLi4wMGEzNzkzM2U0MTFkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbkBAIC0yMjksNiArMjI5LDEwNyBAQCBpbnQgc3RyZWFtX2FyZW5hX2xvYWRfYWNxdWlyZV9mYXVsdCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gdmFsO1xuIH1cbiBcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK19fc3RkZXJyKFwiRVJST1I6IEFyZW5hIFdSSVRFIGFjY2VzcyBhdCB1bm1hcHBlZCBhZGRyZXNzIDB4e3suKn19XCIpXG4rX19zdGRlcnIoXCJDUFU6IHt7WzAtOV0rfX0gVUlEOiAwIFBJRDoge3tbMC05XSt9fSBDb21tOiB7ey4qfX1cIilcbitfX3N0ZGVycihcIkNhbGwgdHJhY2U6XFxuXCJcbitcInt7KFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKzB4WzAtOWEtZkEtRl0rLzB4WzAtOWEtZkEtRl0rXFxuXCJcbitcInxbIFxcdF0rW15cXG5dK1xcbikqfX1cIilcbitpbnQgc3RyZWFtX2FyZW5hX3hjaGdfZmF1bHQodm9pZCAqY3R4KVxuK3tcbitcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24geGNoZ19pbnNuID0ge1xuK1x0XHQuY29kZVx0ID0gMHhjMyxcdC8qIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1cgKi9cbitcdFx0LmRzdF9yZWcgPSAxLFx0XHQvKiBCUEZfUkVHXzEgKi9cbitcdFx0LnNyY19yZWcgPSAyLFx0XHQvKiBCUEZfUkVHXzIgKi9cbitcdFx0Lm9mZlx0ID0gMHg3ZmZmLFxuK1x0XHQuaW1tXHQgPSAweGUxLFx0LyogQlBGX1hDSEcgKi9cbitcdH07XG4rXHRzdHJ1Y3QgYnBmX2FyZW5hICpwdHIgPSAodm9pZCAqKVx1MDAyNmFyZW5hO1xuK1x0dTY0IHVzZXJfdm1fc3RhcnQsIHZhbDtcbitcbitcdC8qXG4rXHQgKiBQcmV2ZW50IEdDQyBib3VuZHMgd2FybmluZzogY2FzdGluZyBcdTAwMjZhcmVuYSB0byBzdHJ1Y3QgYnBmX2FyZW5hICpcbitcdCAqIHRyaWdnZXJzIGJvdW5kcyBjaGVja2luZyBzaW5jZSB0aGUgbWFwIGRlZmluaXRpb24gaXMgc21hbGxlciB0aGFuXG4rXHQgKiBzdHJ1Y3QgYnBmX2FyZW5hLiBiYXJyaWVyX3ZhcigpIG1ha2VzIHRoZSBwb2ludGVyIG9wYXF1ZSB0byBHQ0MsXG4rXHQgKiBwcmV2ZW50aW5nIHRoZSBib3VuZHMgYW5hbHlzaXMuXG4rXHQgKi9cbitcdGJhcnJpZXJfdmFyKHB0cik7XG4rXHR1c2VyX3ZtX3N0YXJ0ID0gcHRyLVx1MDAzZXVzZXJfdm1fc3RhcnQ7XG4rXHRmYXVsdF9hZGRyID0gdXNlcl92bV9zdGFydCArIDB4N2ZmZjtcbitcdGJwZl9hZGRyX3NwYWNlX2Nhc3QodXNlcl92bV9zdGFydCwgMCwgMSk7XG4rXHQvKlxuK1x0ICogQSByZWFkLW1vZGlmeS13cml0ZSBjYXJyeWluZyBCUEZfRkVUQ0ggd3JpdGVzIHRvIG1lbW9yeSwgc28gdGhlIGZhdWx0XG4rXHQgKiBoYXMgdG8gYmUgcmVwb3J0ZWQgYXMgYSBXUklURSBmcm9tIHRoZSBkc3RfcmVnIGFkZHJlc3MsIGJ1dCBpdCBhbHNvXG4rXHQgKiByZWFkcyB0aGUgb2xkIHZhbHVlIGludG8gc3JjX3JlZywgc28gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGhhcyB0b1xuK1x0ICogY2xlYXIgc3JjX3JlZy4gUG9pc29uIGl0IHVwIGZyb250LCB0aGUgcmV0dXJuZWQgdmFsdWUgbXVzdCBiZSAwLlxuK1x0ICovXG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XHRcInIxID0gJVt1c2VyX3ZtX3N0YXJ0XTtcIlxuK1x0XHRcInIyID0gMTtcIlxuK1x0XHRcIi44Ynl0ZSAlW3hjaGdfaW5zbl07XCIgLyogcjIgPSB4Y2hnKCh1MzIgKikocjEgKyAweDdmZmYpLCByMikgKi9cbitcdFx0XCIlW3ZhbF0gPSByMjtcIlxuK1x0XHQ6IFt2YWxdIFwiPXJcIiAodmFsKVxuK1x0XHQ6IFt1c2VyX3ZtX3N0YXJ0XSBcInJcIiAodXNlcl92bV9zdGFydCksXG4rXHRcdCAgX19pbW1faW5zbih4Y2hnX2luc24sIHhjaGdfaW5zbilcbitcdFx0OiBcInIxXCIsIFwicjJcIlxuK1x0KTtcbitcdHJldHVybiB2YWw7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4rX19zdGRlcnIoXCJFUlJPUjogQXJlbmEgV1JJVEUgYWNjZXNzIGF0IHVubWFwcGVkIGFkZHJlc3MgMHh7ey4qfX1cIilcbitfX3N0ZGVycihcIkNQVToge3tbMC05XSt9fSBVSUQ6IDAgUElEOiB7e1swLTldK319IENvbW06IHt7Lip9fVwiKVxuK19fc3RkZXJyKFwiQ2FsbCB0cmFjZTpcXG5cIlxuK1wie3soW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwrMHhbMC05YS1mQS1GXSsvMHhbMC05YS1mQS1GXStcXG5cIlxuK1wifFsgXFx0XStbXlxcbl0rXFxuKSp9fVwiKVxuK2ludCBzdHJlYW1fYXJlbmFfY21weGNoZ19mYXVsdCh2b2lkICpjdHgpXG4re1xuK1x0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaW5zbiBjbXB4Y2hnX2luc24gPSB7XG4rXHRcdC5jb2RlXHQgPSAweGMzLFx0LyogQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVyAqL1xuK1x0XHQuZHN0X3JlZyA9IDEsXHRcdC8qIEJQRl9SRUdfMSAqL1xuK1x0XHQuc3JjX3JlZyA9IDIsXHRcdC8qIEJQRl9SRUdfMiAqL1xuK1x0XHQub2ZmXHQgPSAweDdmZmYsXG4rXHRcdC5pbW1cdCA9IDB4ZjEsXHQvKiBCUEZfQ01QWENIRyAqL1xuK1x0fTtcbitcdHN0cnVjdCBicGZfYXJlbmEgKnB0ciA9ICh2b2lkICopXHUwMDI2YXJlbmE7XG4rXHR1NjQgdXNlcl92bV9zdGFydCwgdmFsO1xuK1xuK1x0LypcbitcdCAqIFByZXZlbnQgR0NDIGJvdW5kcyB3YXJuaW5nOiBjYXN0aW5nIFx1MDAyNmFyZW5hIHRvIHN0cnVjdCBicGZfYXJlbmEgKlxuK1x0ICogdHJpZ2dlcnMgYm91bmRzIGNoZWNraW5nIHNpbmNlIHRoZSBtYXAgZGVmaW5pdGlvbiBpcyBzbWFsbGVyIHRoYW5cbitcdCAqIHN0cnVjdCBicGZfYXJlbmEuIGJhcnJpZXJfdmFyKCkgbWFrZXMgdGhlIHBvaW50ZXIgb3BhcXVlIHRvIEdDQyxcbitcdCAqIHByZXZlbnRpbmcgdGhlIGJvdW5kcyBhbmFseXNpcy5cbitcdCAqL1xuK1x0YmFycmllcl92YXIocHRyKTtcbitcdHVzZXJfdm1fc3RhcnQgPSBwdHItXHUwMDNldXNlcl92bV9zdGFydDtcbitcdGZhdWx0X2FkZHIgPSB1c2VyX3ZtX3N0YXJ0ICsgMHg3ZmZmO1xuK1x0YnBmX2FkZHJfc3BhY2VfY2FzdCh1c2VyX3ZtX3N0YXJ0LCAwLCAxKTtcbitcdC8qXG4rXHQgKiBTYW1lIGFzIHRoZSBleGNoYW5nZSBhYm92ZSwgZXhjZXB0IHRoYXQgYSBCUEZfQ01QWENIRyByZWFkcyB0aGUgb2xkXG4rXHQgKiB2YWx1ZSBpbnRvIHIwIHJhdGhlciB0aGFuIGludG8gc3JjX3JlZywgc28gcjAgaXMgdGhlIHJlZ2lzdGVyIHRoZVxuK1x0ICogZXhjZXB0aW9uIGhhbmRsZXIgaGFzIHRvIGNsZWFyLiBJdCBkb3VibGVzIGFzIHRoZSBjb21wYXJlIHZhbHVlLCBidXRcbitcdCAqIHRoZSBjb21wYXJpc29uIG5ldmVyIGhhcHBlbnMgc2luY2UgdGhlIGFjY2VzcyBmYXVsdHMgZmlyc3QuXG4rXHQgKi9cbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcdFwicjEgPSAlW3VzZXJfdm1fc3RhcnRdO1wiXG4rXHRcdFwicjAgPSAxO1wiXG4rXHRcdFwicjIgPSAyO1wiXG4rXHRcdFwiLjhieXRlICVbY21weGNoZ19pbnNuXTtcIiAvKiByMCA9IGNtcHhjaGcoKHUzMiAqKShyMSArIDB4N2ZmZiksIHIwLCByMikgKi9cbitcdFx0XCIlW3ZhbF0gPSByMDtcIlxuK1x0XHQ6IFt2YWxdIFwiPXJcIiAodmFsKVxuK1x0XHQ6IFt1c2VyX3ZtX3N0YXJ0XSBcInJcIiAodXNlcl92bV9zdGFydCksXG4rXHRcdCAgX19pbW1faW5zbihjbXB4Y2hnX2luc24sIGNtcHhjaGdfaW5zbilcbitcdFx0OiBcInIwXCIsIFwicjFcIiwgXCJyMlwiXG4rXHQpO1xuK1x0cmV0dXJuIHZhbDtcbit9XG4rXG4gc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBzdWJwcm9nKHZvaWQpXG4ge1xuIFx0aW50IF9fYXJlbmEgKmFkZHIgPSAoaW50IF9fYXJlbmEgKikweGRlYWRiZWVmO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDA6MzU6NDMuODkwNjE2ODkzWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3NTUzMzQzODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBFeGNlcHRpb24gSGFuZGxpbmcgZm9yIEF0b21pYyBBcmVuYSBBY2Nlc3NlczogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFib3V0IGV4Y2VwdGlvbiBoYW5kbGluZyBpbiBCUEYgSklUIGNvbXBpbGVycywgc3BlY2lmaWNhbGx5IG9uIGFybTY0LCByaXNjdiwgczM5MCwgYW5kIHg4Ni4gVGhlIGNvcmUgaXNzdWUgaXMgaG93IHdlIGRlYWwgd2l0aCBmYXVsdHMgdGhhdCBvY2N1ciBkdXJpbmcgYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbnMgKGxpa2UgYEJQRl9YQ0hHYCwgYEJQRl9DTVBYQ0hHYCkgd2hlbiBhY2Nlc3NpbmcgdGhlIEJQRiBhcmVuYS4gVGhpcyBhcmVuYSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyBzaGFyZWQgbWVtb3J5IGJldHdlZW4gdXNlcnNwYWNlIGFuZCBCUEYgcHJvZ3JhbXMuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiV2FpdCwgYSBmYXVsdD8gRG9lcyB0aGF0IG1lYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgcmVhZD9cIiBCdXQgbm8sIHRoZSByZWdpc3RlciB3b3VsZG4ndCBjb250YWluIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSAqcGVyIHNlKi4gVGhlIENQVSByZWdpc3RlciB3b3VsZCBqdXN0IGhhdmUgd2hhdGV2ZXIgdmFsdWUgaXQgaGFkIGJlZm9yZSB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24uIElmIHRoZSBleGNlcHRpb24gaGFuZGxlciBkb2Vzbid0IGNsZWFyIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBvbiBhIGZhdWx0LCB0aGUgQlBGIHByb2dyYW0gd291bGQgZWZmZWN0aXZlbHkgXCJyZS11c2VcIiB0aGUgcHJldmlvdXMgdmFsdWUuIEJ1dCBpcyB0aGlzIGEgc2VjdXJpdHkgcmlzaywgc3BlY2lmaWNhbGx5LCBhIEtNU0FOLWRldGVjdGFibGUgaXNzdWU/IFRoZSBCUEYgdmVyaWZpZXIgYWxyZWFkeSBlbnN1cmVzIHJlZ2lzdGVycyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIEtNU0FOIGlzIGxvb2tpbmcgZm9yICp1bmluaXRpYWxpemVkKiByZWFkcywgbm90IGp1c3Qgb2xkIHZhbHVlcy5cblxuSSBoYWQgdG8gcmVmcmVzaCBteSBrbm93bGVkZ2UuIExldCdzIGxvb2sgYXQgdGhlIGJwZl9hdG9taWNfbG9hZF9yZWcgZnVuY3Rpb24uIEl0J3MgcHVycG9zZSBpcyB0byBpZGVudGlmeSB3aGljaCByZWdpc3RlciB0byBjbGVhciBpbiBjYXNlIG9mIGEgZmF1bHQuIEl0IGNvbnNpZGVycyBjYXNlcyBsaWtlIEJQRl9MT0FEX0FDUSBhbmQgQlBGX0NNUFhDSEcuXG5cblRoZSBwYXRjaCBmb2N1c2VzIG9uIGNvcnJlY3RseSBpZGVudGlmeWluZyB0aGUgcmVnaXN0ZXIgdGhhdCBuZWVkcyB0byBiZSBjbGVhcmVkIChzZXQgdG8gemVybykgZHVyaW5nIGEgZmF1bHQuIEZvciByZWFkIG9wZXJhdGlvbnMsIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBjbGVhcmVkLiBGb3IgcmVhZC1tb2RpZnktd3JpdGUgb3BlcmF0aW9ucywgdGhlcmUncyBhIGZldGNoIGFuZCB0aGUgcGF0Y2ggZW5zdXJlcyB0aGUgY29ycmVjdCByZWdpc3RlciAobGlrZWx5IGBCUEZfUkVHXzBgIGZvciBgQ01QWENIR2ApIGlzIGNsZWFyZWQgb24gZmF1bHQuXG5cblRoZSBtYWluIGNvbmNlcm4gaW5pdGlhbGx5IHdhcyB0aGUgcG90ZW50aWFsIGZvciBvbGQgdmFsdWVzIHRvIGxpbmdlci4gQnV0IHNpbmNlIEJQRiBwcm9ncmFtcyBhbHJlYWR5IGhhdmUgdGhlaXIgcmVnaXN0ZXJzIGluaXRpYWxpemVkLCB0aGUgcmVnaXN0ZXIgc2ltcGx5IHJldGFpbnMgdGhlIHByZXZpb3VzIHZhbHVlLCBzbyB0aGlzIGlzbid0IGEga2VybmVsLW1lbW9yeSBleHBvc3VyZS4gQWxzbywgdGhpcyBkb2VzIG5vdCBleHBvc2UgYW55dGhpbmcgZnJvbSB0aGUga2VybmVsJ3MgcGVyc3BlY3RpdmUuIEl0J3MganVzdCBhIHZhcmlhYmxlIGluIGEgQ1BVIHJlZ2lzdGVyIGZyb20gQlBGIHBlcnNwZWN0aXZlLlxuXG5LTVNBTiwgd2hpY2ggZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgaXNuJ3QgcmVhbGx5IHJlbGV2YW50IGhlcmUuIFRoZSBwYXRjaCBtb2RpZmllcyBgZXhfaGFuZGxlcl9icGZgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucywgY2hhbmdpbmcgaG93IGBpc193cml0ZWAgaXMgZGV0ZXJtaW5lZCB0byBoYW5kbGUgcmVhZC1tb2RpZnktd3JpdGVzIGNvcnJlY3RseS4gQnV0IGl0J3Mgbm90IGludHJvZHVjaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBFdmVuIGlmIGEgcmVnaXN0ZXIgaXNuJ3QgY2xlYXJlZCBvbiBmYXVsdCwgdGhlIHByZXZpb3VzIHZhbHVlIHdvbid0IGJlIGZyb20gdGhlIGtlcm5lbC4gS01TQU4gZG9lcyB0cmFjayBDUFUgcmVnaXN0ZXJzLCBidXQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEJQRiBKSVQsIEtNU0FOIGlzIHByb2JhYmx5IG5vdCBkZWVwbHkgaW5zdHJ1bWVudGluZyB0aGUgSklUdGVkIGNvZGUuIEl0IGRvZXMgaGF2ZSBzb21lIHN1cHBvcnQgZm9yIEJQRiwgYnV0IGl0J3MgbGltaXRlZC4gS01TQU4gaXNuJ3QgdGhlIHJpZ2h0IHRvb2wgaGVyZS4gVGhpcyBpcyBhIGxvZ2ljIGVycm9yIHRoYXQgbmVlZHMgYW4gZXJyb3IgdG8gaW5kaWNhdGUgaXQgZGlkIG5vdCBjb21wbGV0ZS5cblxuU28sIHRoZSBidWcgaGVyZSBpcyB0aGF0IHRoZSBCUEYgZXhjZXB0aW9uIGhhbmRsZXIgKndhc24ndCogY2xlYXJpbmcgdGhlIHJlZ2lzdGVyIGNvcnJlY3RseSBmb3IgdGhlc2UgYXRvbWljIG9wZXJhdGlvbnMuIFRoaXMgbWVhbnQgdGhlIHByb2dyYW0gd291bGQgY29udGludWUgd2l0aCBhbiBvbGQgdmFsdWUgaW5zdGVhZCBvZiBhIGNsZWFyIHZhbHVlLiBJdCdzIGEgbG9naWMgZXJyb3IgaW4gQlBGIEpJVC9leGNlcHRpb24gaGFuZGxpbmcsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4gVGhpcyByZXF1aXJlcyBubyBzcGVjaWFsIGF0dGVudGlvbiBmcm9tIEtNU0FOLCBhcyB0aGUgcmVnaXN0ZXJzIGFyZSBub3QgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBJdCBpcyBwdXJlbHkgYSBtYXR0ZXIgb2YgQlBGIHByb2dyYW0gaW50ZWdyaXR5LiBUaGVyZWZvcmUsIE5lZWRzS01TQU4gPSBmYWxzZS5cblxuSnVzdCB0byBiZSBzdXJlLCBJJ3ZlIHJlY2hlY2tlZCB0aGUgcGF0Y2guIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBjb3JyZWN0bHkgc2V0dGluZyBgaXNfd3JpdGVgIGFuZCBjbGVhcmluZyB0aGUgYXBwcm9wcmlhdGUgcmVnaXN0ZXJzIGluIGNhc2Ugb2YgYSBmYXVsdC4gVGhlIGBCUEZfQVJFTkFfV1JJVEVgIGZsYWcgaXMgYmVpbmcgaW50cm9kdWNlZCB0byBzaWduYWwgYW4gYXJlbmEgd3JpdGUuIEkgY2FuIHNlZSB0aGF0IHRoaXMgaXNuJ3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0J3MgYSBidWcgd2l0aCBob3cgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIHdhcyBoYW5kbGluZyBmYXVsdHMgb24gYXRvbWljIGFyZW5hIGFjY2Vzc2VzIGFuZCwgdGhlcmVmb3JlLCBJIGJlbGlldmUgbXkgcmVhc29uaW5nIGlzIHNvbGlkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTcxLCJPdXRwdXRUb2tlbnMiOjE5MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMDozNjowMS40NDM5NjQwMzdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHRoZSBCUEYgZXhjZXB0aW9uIGhhbmRsZXIgZm9yIGFyZW5hIGFjY2Vzc2VzIHRvIGNvcnJlY3RseSBpZGVudGlmeSByZWFkLW1vZGlmeS13cml0ZSBhdG9taWMgb3BlcmF0aW9ucyAobGlrZSBCUEZfWENIRyBhbmQgQlBGX0NNUFhDSEcpIGFzIHdyaXRlcywgYW5kIHRvIHByb3Blcmx5IGNsZWFyIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciAoZS5nLiwgQlBGX1JFR18wIGZvciBDTVBYQ0hHKSB3aGVuIGEgcGFnZSBmYXVsdCBvY2N1cnMuIElmIHRoZSByZWdpc3RlciBpcyBub3QgY2xlYXJlZCwgdGhlIEJQRiBwcm9ncmFtIHNpbXBseSByZXRhaW5zIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGF0IHJlZ2lzdGVyLiBUaGlzIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LCBub3IgZG9lcyBpdCBleHBvc2Uga2VybmVsIHN0YWNrL2hlYXAgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZSBpc3N1ZSBpcyBhIGxvZ2ljIGJ1ZyBpbiBCUEYgSklUIGV4Y2VwdGlvbiBoYW5kbGluZywgd2hpY2ggZG9lcyBub3QgaW50cm9kdWNlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEJQRiBzZWxmdGVzdHMgKGFzIGluY2x1ZGVkIGluIHRoZSBwYXRjaCkgYXJlIHN1ZmZpY2llbnQgdG8gdmVyaWZ5IHRoZSBmaXguXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgdGhlIEJQRiBleGNlcHRpb24gaGFuZGxlciBmb3IgYXJlbmEgYWNjZXNzZXMgdG8gY29ycmVjdGx5IGlkZW50aWZ5IHJlYWQtbW9kaWZ5LXdyaXRlIGF0b21pYyBvcGVyYXRpb25zIChsaWtlIEJQRl9YQ0hHIGFuZCBCUEZfQ01QWENIRykgYXMgd3JpdGVzLCBhbmQgdG8gcHJvcGVybHkgY2xlYXIgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIChlLmcuLCBCUEZfUkVHXzAgZm9yIENNUFhDSEcpIHdoZW4gYSBwYWdlIGZhdWx0IG9jY3Vycy4gSWYgdGhlIHJlZ2lzdGVyIGlzIG5vdCBjbGVhcmVkLCB0aGUgQlBGIHByb2dyYW0gc2ltcGx5IHJldGFpbnMgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoYXQgcmVnaXN0ZXIuIFRoaXMgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnksIG5vciBkb2VzIGl0IGV4cG9zZSBrZXJuZWwgc3RhY2svaGVhcCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlIGlzc3VlIGlzIGEgbG9naWMgYnVnIGluIEJQRiBKSVQgZXhjZXB0aW9uIGhhbmRsaW5nLCB3aGljaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gU3RhbmRhcmQgdGVzdGluZyBhbmQgQlBGIHNlbGZ0ZXN0cyAoYXMgaW5jbHVkZWQgaW4gdGhlIHBhdGNoKSBhcmUgc3VmZmljaWVudCB0byB2ZXJpZnkgdGhlIGZpeC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbtxcn[1] Phase: Succeeded StartedAt: 2026-08-11 00:36:18 +0000 UTC FinishedAt: 2026-08-11 00:36:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 00:36:18 +0000 UTC FinishedAt: 2026-08-11 00:36:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[2] Phase: Succeeded StartedAt: 2026-08-11 00:36:18 +0000 UTC FinishedAt: 2026-08-11 04:28:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-11 00:36:18 +0000 UTC FinishedAt: 2026-08-11 04:28:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-11 00:36:18 +0000 UTC FinishedAt: 2026-08-11 00:36:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-11 00:36:18 +0000 UTC FinishedAt: 2026-08-11 00:36:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbtxcn/series-workflowbtxcn-convert-artifact-1980780973/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-11 00:36:30 +0000 UTC FinishedAt: 2026-08-11 00:53:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-11 00:36:30 +0000 UTC FinishedAt: 2026-08-11 00:53:14 +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:*70cf4d55-213e-425f-acb5-ccea683698ee,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-workflowbtxcn/series-workflowbtxcn-convert-artifact-1980780973/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": "2aeb5eeb-9baa-4ab5-a62d-abc70a26e2d6", "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-workflowbtxcn/series-workflowbtxcn-build-action-1108250019/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-11 00:36:30 +0000 UTC FinishedAt: 2026-08-11 00:53:03 +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:*70cf4d55-213e-425f-acb5-ccea683698ee,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-workflowbtxcn/series-workflowbtxcn-convert-artifact-1980780973/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": "2aeb5eeb-9baa-4ab5-a62d-abc70a26e2d6", "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-workflowbtxcn/series-workflowbtxcn-build-action-1108250019/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-11 00:53:14 +0000 UTC FinishedAt: 2026-08-11 00:53:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-11 00:53:14 +0000 UTC FinishedAt: 2026-08-11 00:53:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-11 00:53:14 +0000 UTC FinishedAt: 2026-08-11 00:53:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-11 00:53:14 +0000 UTC FinishedAt: 2026-08-11 00:53:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbtxcn/series-workflowbtxcn-convert-artifact-1545142792/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-11 00:53:24 +0000 UTC FinishedAt: 2026-08-11 00:55:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-11 00:53:24 +0000 UTC FinishedAt: 2026-08-11 00:54:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2aeb5eeb-9baa-4ab5-a62d-abc70a26e2d6,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-workflowbtxcn/series-workflowbtxcn-build-action-1108250019/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-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-11 00:55:05 +0000 UTC FinishedAt: 2026-08-11 00:55:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-11 00:55:05 +0000 UTC FinishedAt: 2026-08-11 00:55:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-11 00:55:05 +0000 UTC FinishedAt: 2026-08-11 01:15:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-11 00:55:05 +0000 UTC FinishedAt: 2026-08-11 01:15:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*70cf4d55-213e-425f-acb5-ccea683698ee,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-workflowbtxcn/series-workflowbtxcn-convert-artifact-1545142792/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": "3425aba2-53f6-4fb1-9d6a-aaeb6be2f034", "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-workflowbtxcn/series-workflowbtxcn-build-action-1257350580/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-11 00:55:05 +0000 UTC FinishedAt: 2026-08-11 01:15:00 +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:*70cf4d55-213e-425f-acb5-ccea683698ee,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-workflowbtxcn/series-workflowbtxcn-convert-artifact-1545142792/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": "3425aba2-53f6-4fb1-9d6a-aaeb6be2f034", "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-workflowbtxcn/series-workflowbtxcn-build-action-1257350580/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-11 01:15:25 +0000 UTC FinishedAt: 2026-08-11 01:15:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-11 01:15:25 +0000 UTC FinishedAt: 2026-08-11 01:15:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-11 01:15:25 +0000 UTC FinishedAt: 2026-08-11 01:17:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-11 01:15:25 +0000 UTC FinishedAt: 2026-08-11 01:17:32 +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:*3425aba2-53f6-4fb1-9d6a-aaeb6be2f034,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-workflowbtxcn/series-workflowbtxcn-build-action-1257350580/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-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-11 01:17:41 +0000 UTC FinishedAt: 2026-08-11 04:28:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-11 01:17:41 +0000 UTC FinishedAt: 2026-08-11 04:28:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"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:*2aeb5eeb-9baa-4ab5-a62d-abc70a26e2d6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3425aba2-53f6-4fb1-9d6a-aaeb6be2f034,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-workflowbtxcn/series-workflowbtxcn-build-action-1108250019/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-workflowbtxcn/series-workflowbtxcn-build-action-1257350580/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-11 01:17:41 +0000 UTC FinishedAt: 2026-08-11 01:17:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-11 01:17:41 +0000 UTC FinishedAt: 2026-08-11 01:17:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"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-workflowbtxcn/series-workflowbtxcn-convert-artifact-2079737793/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-11 01:17:41 +0000 UTC FinishedAt: 2026-08-11 01:17:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-11 01:17:41 +0000 UTC FinishedAt: 2026-08-11 01:17:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-11 01:17:41 +0000 UTC FinishedAt: 2026-08-11 01:17:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-11 01:17:51 +0000 UTC FinishedAt: 2026-08-11 04:28:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbtxcn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_insn_def32","ex_handler_bpf","bpf_jit_emit_insn","bpf_int_jit_compile","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"21ccb324-35ab-4af2-bc1f-cc60a3ebf49d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-11 01:17:51 +0000 UTC FinishedAt: 2026-08-11 04:27:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2aeb5eeb-9baa-4ab5-a62d-abc70a26e2d6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3425aba2-53f6-4fb1-9d6a-aaeb6be2f034,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-workflowbtxcn/series-workflowbtxcn-build-action-1108250019/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-workflowbtxcn/series-workflowbtxcn-build-action-1257350580/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-workflowbtxcn/series-workflowbtxcn-convert-artifact-2079737793/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,}