Name: series-workflowh2jjw Phase: Succeeded StartedAt: 2026-07-30 04:17:44 +0000 UTC FinishedAt: 2026-07-30 05:38:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[0] Phase: Succeeded StartedAt: 2026-07-30 04:17:44 +0000 UTC FinishedAt: 2026-07-30 04:51:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 04:17:44 +0000 UTC FinishedAt: 2026-07-30 04:51:08 +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": "8522d806d84e2c3816c275ae6dd79e124c1b3dac", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "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": "8522d806d84e2c3816c275ae6dd79e124c1b3dac", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT" ], "series_id": "b88440f3-0761-4f9b-9753-6b767544e77d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_int_jit_compile", "bpf_jit_needs_zext" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMwIDA0OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfbmVlZHNfemV4dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBKSVQgY29tcGlsZXIgZm9yIHRoZSBtNjhrIGFyY2hpdGVjdHVyZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGR1cmluZyBCUEYgcHJvZ3JhbSBsb2FkaW5nIHdoZW4gSklUIGlzIGVuYWJsZWQsIGFuZCBjYW4gYmUgdGVzdGVkIGluIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDQ6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzYzcwY2I2ZDM4Nzc3ZDVmNTE4ZjUyZjgzNDExZTRlYWJkZjRkN2QwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMDQ6NTA6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggMmZiMWM3NWFmZDE2My4uNTMwNTUxODM0YzE2MyAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTQ3MDEsNiAmIzQzOzQ3MDEsMTIgQEAgTDpcdGJwZkB2Z2VyLmtlcm5lbC5vcmdcbiBTOlx0TWFpbnRhaW5lZFxuIEY6XHRhcmNoL2xvb25nYXJjaC9uZXQvXG4gXG4mIzQzO0JQRiBKSVQgZm9yIE02OEtcbiYjNDM7TTpcdEt1YW4tV2VpIENoaXUgXHUwMDNjdmlzaXRvcmNrd0BnbWFpbC5jb21cdTAwM2VcbiYjNDM7TDpcdGJwZkB2Z2VyLmtlcm5lbC5vcmdcbiYjNDM7UzpcdE1haW50YWluZWRcbiYjNDM7RjpcdGFyY2gvbTY4ay9uZXQvXG4mIzQzO1xuIEJQRiBKSVQgZm9yIE1JUFMgKDMyLUJJVCBBTkQgNjQtQklUKVxuIE06XHRKb2hhbiBBbG1ibGFkaCBcdTAwM2Nqb2hhbi5hbG1ibGFkaEBhbnlmaW5ldHdvcmtzLmNvbVx1MDAzZVxuIE06XHRQYXVsIEJ1cnRvbiBcdTAwM2NwYXVsYnVydG9uQGtlcm5lbC5vcmdcdTAwM2VcbmRpZmYgLS1naXQgYS9hcmNoL202OGsvS2J1aWxkIGIvYXJjaC9tNjhrL0tidWlsZFxuaW5kZXggNzc2MmFmOWY2ZGVmZS4uMDU4YWQ0MWE3MjhjNSAxMDA2NDRcbi0tLSBhL2FyY2gvbTY4ay9LYnVpbGRcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbTY4ay9LYnVpbGRcbkBAIC0xLDUgJiM0MzsxLDUgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbi1vYmoteVx0XHRcdFx0JiM0Mzs9IGtlcm5lbC8gbW0vXG4mIzQzO29iai15XHRcdFx0XHQmIzQzOz0ga2VybmVsLyBtbS8gbmV0L1xuIG9iai0kKENPTkZJR19RNDApXHRcdCYjNDM7PSBxNDAvXG4gb2JqLSQoQ09ORklHX0FNSUdBKVx0XHQmIzQzOz0gYW1pZ2EvXG4gb2JqLSQoQ09ORklHX0FUQVJJKVx0XHQmIzQzOz0gYXRhcmkvXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcgYi9hcmNoL202OGsvS2NvbmZpZ1xuaW5kZXggMTE4MzVlYjU5ZDk0ZC4uZGE0M2Q2NjYwYzVjZSAxMDA2NDRcbi0tLSBhL2FyY2gvbTY4ay9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL202OGsvS2NvbmZpZ1xuQEAgLTgsNiAmIzQzOzgsNyBAQCBjb25maWcgTTY4S1xuIFx0c2VsZWN0IEFSQ0hfSEFTX0NQVV9GSU5BTElaRV9JTklUIGlmIE1NVVxuIFx0c2VsZWN0IEFSQ0hfSEFTX0NVUlJFTlRfU1RBQ0tfUE9JTlRFUlxuIFx0c2VsZWN0IEFSQ0hfSEFTX0RNQV9QUkVQX0NPSEVSRU5UIGlmIE02OEtfTk9OQ09IRVJFTlRfRE1BIFx1MDAyNlx1MDAyNiAhQ09MREZJUkVcbiYjNDM7XHRzZWxlY3QgSEFWRV9FQlBGX0pJVCBpZiAoIUNPTERGSVJFIFx1MDAyNlx1MDAyNiAhTTY4MDAwKVxuIFx0c2VsZWN0IEFSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9ERVZJQ0UgaWYgTTY4S19OT05DT0hFUkVOVF9ETUFcbiBcdHNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIRyBpZiBSTVdfSU5TTlNcbiBcdHNlbGVjdCBBUkNIX01JR0hUX0hBVkVfUENfUEFSUE9SVCBpZiBJU0FcbmRpZmYgLS1naXQgYS9hcmNoL202OGsvbmV0L01ha2VmaWxlIGIvYXJjaC9tNjhrL25ldC9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmVjNWIxNDc2MzMxNjdcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbTY4ay9uZXQvTWFrZWZpbGVcbkBAIC0wLDAgJiM0MzsxLDIgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzO29iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wLm9cbmRpZmYgLS1naXQgYS9hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjZkNjQ3YmJhOTZlYjRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0wLDAgJiM0MzsxLDE2MzAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBCUEYgSklUIGNvbXBpbGVyIGZvciBtNjhrXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBLdWFuLVdlaSBDaGl1IFx1MDAzY3Zpc2l0b3Jja3dAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZmlsdGVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaXJxZmxhZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2NhY2hlZmx1c2guaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tYXRoNjQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9saW1pdHMuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBTVEFDS19PRkZTRVQoaykgKC00IC0gKDQgKiAoaykpKVxuJiM0MztcbiYjNDM7ZW51bSB7XG4mIzQzO1x0QlBGX1IxX0hJLCBCUEZfUjFfTE8sXG4mIzQzO1x0QlBGX1IyX0hJLCBCUEZfUjJfTE8sXG4mIzQzO1x0QlBGX1IzX0hJLCBCUEZfUjNfTE8sXG4mIzQzO1x0QlBGX1I0X0hJLCBCUEZfUjRfTE8sXG4mIzQzO1x0QlBGX1I1X0hJLCBCUEZfUjVfTE8sXG4mIzQzO1x0QlBGX1I2X0hJLCBCUEZfUjZfTE8sXG4mIzQzO1x0QlBGX1I3X0hJLCBCUEZfUjdfTE8sXG4mIzQzO1x0QlBGX1I4X0hJLCBCUEZfUjhfTE8sXG4mIzQzO1x0QlBGX1I5X0hJLCBCUEZfUjlfTE8sXG4mIzQzO1x0QlBGX1IxMF9ISSwgQlBGX1IxMF9MTyxcbiYjNDM7XHRCUEZfQVhfSEksIEJQRl9BWF9MTyxcbiYjNDM7XHRCUEZfVENfSEksIEJQRl9UQ19MTyxcbiYjNDM7XHRCUEZfSklUX1NDUkFUQ0hfUkVHUyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgU0NSQVRDSF9TSVpFIChCUEZfSklUX1NDUkFUQ0hfUkVHUyAqIDQpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFRNUF9SRUdfMSAxNFxuJiM0MzsjZGVmaW5lIFRNUF9SRUdfMiAxNVxuJiM0MztcbiYjNDM7I2RlZmluZSBNNjhLX0QwIDBcbiYjNDM7I2RlZmluZSBNNjhLX0QxIDFcbiYjNDM7I2RlZmluZSBNNjhLX0QyIDJcbiYjNDM7I2RlZmluZSBNNjhLX0QzIDNcbiYjNDM7I2RlZmluZSBNNjhLX0Q0IDRcbiYjNDM7I2RlZmluZSBNNjhLX0Q1IDVcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzOCBicGYybTY4a1sxNl1bMl0gPSB7XG4mIzQzO1x0W0JQRl9SRUdfMF0gID0ge002OEtfRDEsIE02OEtfRDB9LFxuJiM0MztcdFtCUEZfUkVHXzFdICA9IHtTVEFDS19PRkZTRVQoQlBGX1IxX0hJKSwgIFNUQUNLX09GRlNFVChCUEZfUjFfTE8pfSxcbiYjNDM7XHRbQlBGX1JFR18yXSAgPSB7U1RBQ0tfT0ZGU0VUKEJQRl9SMl9ISSksICBTVEFDS19PRkZTRVQoQlBGX1IyX0xPKX0sXG4mIzQzO1x0W0JQRl9SRUdfM10gID0ge1NUQUNLX09GRlNFVChCUEZfUjNfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SM19MTyl9LFxuJiM0MztcdFtCUEZfUkVHXzRdICA9IHtTVEFDS19PRkZTRVQoQlBGX1I0X0hJKSwgIFNUQUNLX09GRlNFVChCUEZfUjRfTE8pfSxcbiYjNDM7XHRbQlBGX1JFR181XSAgPSB7U1RBQ0tfT0ZGU0VUKEJQRl9SNV9ISSksICBTVEFDS19PRkZTRVQoQlBGX1I1X0xPKX0sXG4mIzQzO1x0W0JQRl9SRUdfNl0gID0ge1NUQUNLX09GRlNFVChCUEZfUjZfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SNl9MTyl9LFxuJiM0MztcdFtCUEZfUkVHXzddICA9IHtTVEFDS19PRkZTRVQoQlBGX1I3X0hJKSwgIFNUQUNLX09GRlNFVChCUEZfUjdfTE8pfSxcbiYjNDM7XHRbQlBGX1JFR184XSAgPSB7U1RBQ0tfT0ZGU0VUKEJQRl9SOF9ISSksICBTVEFDS19PRkZTRVQoQlBGX1I4X0xPKX0sXG4mIzQzO1x0W0JQRl9SRUdfOV0gID0ge1NUQUNLX09GRlNFVChCUEZfUjlfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SOV9MTyl9LFxuJiM0MztcdFtCUEZfUkVHXzEwXSA9IHtTVEFDS19PRkZTRVQoQlBGX1IxMF9ISSksIFNUQUNLX09GRlNFVChCUEZfUjEwX0xPKX0sXG4mIzQzO1x0W0JQRl9SRUdfQVhdID0ge1NUQUNLX09GRlNFVChCUEZfQVhfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9BWF9MTyl9LFxuJiM0MztcdFtUTVBfUkVHXzFdICA9IHtNNjhLX0QzLCBNNjhLX0QyfSxcbiYjNDM7XHRbVE1QX1JFR18yXSAgPSB7TTY4S19ENSwgTTY4S19ENH0sXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3Qgaml0X2N0eCB7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nO1xuJiM0MztcdHUxNiAqdGFyZ2V0O1xuJiM0MztcdHVuc2lnbmVkIGludCBpZHg7XG4mIzQzO1x0aW50ICpvZmZzZXRzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIG5vaW5saW5lIHUzMiBqaXRfbXVsMzIodTMyIGEsIHUzMiBiKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGEgKiBiO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgbm9pbmxpbmUgdTMyIGppdF9kaXYzMih1MzIgYSwgdTMyIGIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYiA/IGEgLyBiIDogMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIG5vaW5saW5lIHUzMiBqaXRfbW9kMzIodTMyIGEsIHUzMiBiKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGIgPyBhICUgYiA6IGE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBub2lubGluZSBzMzIgaml0X3NkaXYzMihzMzIgYSwgczMyIGIpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYiA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKGEgPT0gUzMyX01JTiBcdTAwMjZcdTAwMjYgYiA9PSAtMSlcbiYjNDM7XHRcdHJldHVybiBTMzJfTUlOO1xuJiM0MztcdHJldHVybiBhIC8gYjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIG5vaW5saW5lIHMzMiBqaXRfc21vZDMyKHMzMiBhLCBzMzIgYilcbiYjNDM7e1xuJiM0MztcdGlmIChiID09IDApXG4mIzQzO1x0XHRyZXR1cm4gYTtcbiYjNDM7XHRpZiAoYSA9PSBTMzJfTUlOIFx1MDAyNlx1MDAyNiBiID09IC0xKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIGEgJSBiO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgbm9pbmxpbmUgdTY0IGppdF9tdWw2NCh1NjQgYSwgdTY0IGIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYSAqIGI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBub2lubGluZSB1NjQgaml0X2RpdjY0KHU2NCBhLCB1NjQgYilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBiID8gZGl2NjRfdTY0KGEsIGIpIDogMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIG5vaW5saW5lIHM2NCBqaXRfc2RpdjY0KHM2NCBhLCBzNjQgYilcbiYjNDM7e1xuJiM0MztcdGlmIChiID09IDApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoYSA9PSBTNjRfTUlOIFx1MDAyNlx1MDAyNiBiID09IC0xKVxuJiM0MztcdFx0cmV0dXJuIFM2NF9NSU47XG4mIzQzO1x0cmV0dXJuIGRpdjY0X3M2NChhLCBiKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIG5vaW5saW5lIHU2NCBqaXRfbW9kNjQodTY0IGEsIHU2NCBiKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHJlbTtcbiYjNDM7XG4mIzQzO1x0aWYgKGIgPT0gMClcbiYjNDM7XHRcdHJldHVybiBhO1xuJiM0MztcdGRpdjY0X3U2NF9yZW0oYSwgYiwgXHUwMDI2cmVtKTtcbiYjNDM7XHRyZXR1cm4gcmVtO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgbm9pbmxpbmUgczY0IGppdF9zbW9kNjQoczY0IGEsIHM2NCBiKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGIgPT0gMClcbiYjNDM7XHRcdHJldHVybiBhO1xuJiM0MztcdGlmIChhID09IFM2NF9NSU4gXHUwMDI2XHUwMDI2IGIgPT0gLTEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gYSAtIGRpdjY0X3M2NChhLCBiKSAqIGI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1MzIgaml0X2F0b21pYzMyKHUzMiAqcHRyLCB1MzIgdmFsLCB1MzIgb3AsIHUzMiBjbXApXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdHUzMiBvbGQ7XG4mIzQzO1xuJiM0MztcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiYjNDM7XHRvbGQgPSAqcHRyO1xuJiM0MztcdHN3aXRjaCAob3ApIHtcbiYjNDM7XHRjYXNlIEJQRl9BREQ6XG4mIzQzO1x0Y2FzZSBCUEZfQUREIHwgQlBGX0ZFVENIOlxuJiM0MztcdFx0KnB0ciAmIzQzOz0gdmFsO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfQU5EOlxuJiM0MztcdGNhc2UgQlBGX0FORCB8IEJQRl9GRVRDSDpcbiYjNDM7XHRcdCpwdHIgXHUwMDI2PSB2YWw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9PUjpcbiYjNDM7XHRjYXNlIEJQRl9PUiB8IEJQRl9GRVRDSDpcbiYjNDM7XHRcdCpwdHIgfD0gdmFsO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfWE9SOlxuJiM0MztcdGNhc2UgQlBGX1hPUiB8IEJQRl9GRVRDSDpcbiYjNDM7XHRcdCpwdHIgXj0gdmFsO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfWENIRzpcbiYjNDM7XHRcdCpwdHIgPSB2YWw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9DTVBYQ0hHOlxuJiM0MztcdFx0aWYgKG9sZCA9PSBjbXApXG4mIzQzO1x0XHRcdCpwdHIgPSB2YWw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb2xkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTY0IGppdF9hdG9taWM2NCh1MzIgKnB0ciwgdTMyIHZhbF9oaSwgdTMyIHZhbF9sbywgdTMyIG9wLCB1MzIgY21wX2hpLCB1MzIgY21wX2xvKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHR1NjQgb2xkLCB2YWwsIGNtcDtcbiYjNDM7XHR1NjQgKnB0cjY0ID0gKHU2NCAqKXB0cjtcbiYjNDM7XG4mIzQzO1x0dmFsID0gKCh1NjQpdmFsX2hpIFx1MDAzY1x1MDAzYyAzMikgfCB2YWxfbG87XG4mIzQzO1x0Y21wID0gKCh1NjQpY21wX2hpIFx1MDAzY1x1MDAzYyAzMikgfCBjbXBfbG87XG4mIzQzO1xuJiM0MztcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiYjNDM7XHRvbGQgPSAqcHRyNjQ7XG4mIzQzO1x0c3dpdGNoIChvcCkge1xuJiM0MztcdGNhc2UgQlBGX0FERDpcbiYjNDM7XHRjYXNlIEJQRl9BREQgfCBCUEZfRkVUQ0g6XG4mIzQzO1x0XHQqcHRyNjQgJiM0Mzs9IHZhbDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX0FORDpcbiYjNDM7XHRjYXNlIEJQRl9BTkQgfCBCUEZfRkVUQ0g6XG4mIzQzO1x0XHQqcHRyNjQgXHUwMDI2PSB2YWw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9PUjpcbiYjNDM7XHRjYXNlIEJQRl9PUiB8IEJQRl9GRVRDSDpcbiYjNDM7XHRcdCpwdHI2NCB8PSB2YWw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9YT1I6XG4mIzQzO1x0Y2FzZSBCUEZfWE9SIHwgQlBGX0ZFVENIOlxuJiM0MztcdFx0KnB0cjY0IF49IHZhbDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX1hDSEc6XG4mIzQzO1x0XHQqcHRyNjQgPSB2YWw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9DTVBYQ0hHOlxuJiM0MztcdFx0aWYgKG9sZCA9PSBjbXApXG4mIzQzO1x0XHRcdCpwdHI2NCA9IHZhbDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBvbGQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBlbWl0XzE2KHN0cnVjdCBqaXRfY3R4ICpjdHgsIHUxNiBpbnN0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGN0eC1cdTAwM2V0YXJnZXQpXG4mIzQzO1x0XHRjdHgtXHUwMDNldGFyZ2V0W2N0eC1cdTAwM2VpZHhdID0gaW5zdDtcbiYjNDM7XHRjdHgtXHUwMDNlaWR4JiM0MzsmIzQzOztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVtaXRfMzIoc3RydWN0IGppdF9jdHggKmN0eCwgdTMyIHZhbClcbiYjNDM7e1xuJiM0MztcdGVtaXRfMTYoY3R4LCB2YWwgXHUwMDNlXHUwMDNlIDE2KTtcbiYjNDM7XHRlbWl0XzE2KGN0eCwgdmFsIFx1MDAyNiAweGZmZmYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfc3RhY2tlZChzOCByZWcpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVnIFx1MDAzYyAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgczggYnBmX2dldF9yZWczMihzOCBicGZfcmVnLCBzOCB0bXBfcmVnLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGlzX3N0YWNrZWQoYnBmX3JlZykpIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwMmUgfCAodG1wX3JlZyBcdTAwM2NcdTAwM2MgOSkpO1x0XHQvKiBtb3ZlLmwgZDE2KCVmcCksIHJlZyAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsICh1MTYpYnBmX3JlZyk7XG4mIzQzO1x0XHRyZXR1cm4gdG1wX3JlZztcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIGJwZl9yZWc7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJwZl9wdXRfcmVnMzIoczggYnBmX3JlZywgczggc3JjX3JlZywgc3RydWN0IGppdF9jdHggKmN0eClcbiYjNDM7e1xuJiM0MztcdGlmIChpc19zdGFja2VkKGJwZl9yZWcpKSB7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyZDQwIHwgc3JjX3JlZyk7XHRcdFx0LyogbW92ZS5sIHJlZywgZDE2KCVmcCkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAodTE2KWJwZl9yZWcpO1xuJiM0MztcdH0gZWxzZSBpZiAoYnBmX3JlZyAhPSBzcmNfcmVnKSB7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGJwZl9yZWcgXHUwMDNjXHUwMDNjIDkpIHwgc3JjX3JlZyk7IC8qIG1vdmUubCBzcmMsIGRzdCAqL1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hbHUzMl9uZWcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXHUwMDNlZHN0X3JlZ107XG4mIzQzO1x0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xuJiM0MztcdHM4IGRfcmVnID0gYnBmX2dldF9yZWczMihkc3RbMV0sIHRtcDFbMV0sIGN0eCk7XG4mIzQzO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDQ0ODAgfCBkX3JlZyk7XHRcdFx0XHQvKiBuZWcubCBkX3JlZyAqL1xuJiM0MztcbiYjNDM7XHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9yZWcsIGN0eCk7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4NzAwMCB8ICh0bXAxWzBdIFx1MDAzY1x1MDAzYyA5KSk7XHRcdFx0LyogbW92ZXEgIzAsIHRtcDEgKi9cbiYjNDM7XHRicGZfcHV0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hbHU2NF9uZWcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXHUwMDNlZHN0X3JlZ107XG4mIzQzO1x0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xuJiM0MztcdHM4IGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcbiYjNDM7XHRzOCBkX2hpID0gYnBmX2dldF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7XG4mIzQzO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDQ0ODAgfCBkX2xvKTtcdFx0XHRcdC8qIG5lZy5sIGRfbG8gKi9cbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHg0MDgwIHwgZF9oaSk7XHRcdFx0XHQvKiBuZWd4LmwgZF9oaSAqL1xuJiM0MztcbiYjNDM7XHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9sbywgY3R4KTtcbiYjNDM7XHRicGZfcHV0X3JlZzMyKGRzdFswXSwgZF9oaSwgY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hbHUzMl94KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVx1MDAzZWRzdF9yZWddO1xuJiM0MztcdGNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLVx1MDAzZXNyY19yZWddO1xuJiM0MztcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcbiYjNDM7XHRjb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07XG4mIzQzO1x0czggZF9yZWcsIHNfcmVnO1xuJiM0MztcbiYjNDM7XHRkX3JlZyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpO1xuJiM0MztcdHNfcmVnID0gYnBmX2dldF9yZWczMihzcmNbMV0sIHRtcDJbMV0sIGN0eCk7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoQlBGX09QKGluc24tXHUwMDNlY29kZSkpIHtcbiYjNDM7XHRjYXNlIEJQRl9NT1Y6XG4mIzQzO1x0XHRpZiAoaW5zbi1cdTAwM2VvZmYgPT0gOCB8fCBpbnNuLVx1MDAzZW9mZiA9PSAxNikge1xuJiM0MztcdFx0XHRpZiAoZF9yZWcgIT0gc19yZWcpXG4mIzQzO1x0XHRcdFx0ZW1pdF8xNihjdHgsIDB4MjAwMCB8IChkX3JlZyBcdTAwM2NcdTAwM2MgOSkgfCBzX3JlZyk7IC8qIG1vdmUubCBzcmMsIGRzdCAqL1xuJiM0MztcdFx0XHRpZiAoaW5zbi1cdTAwM2VvZmYgPT0gOClcbiYjNDM7XHRcdFx0XHRlbWl0XzE2KGN0eCwgMHg0OWMwIHwgZF9yZWcpO1x0LyogZXh0Yi5sIGRfcmVnICovXG4mIzQzO1x0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHRlbWl0XzE2KGN0eCwgMHg0OGMwIHwgZF9yZWcpO1x0LyogZXh0LmwgZF9yZWcgKi9cbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGlmIChkX3JlZyAhPSBzX3JlZylcbiYjNDM7XHRcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IHNfcmVnKTsgLyogbW92ZS5sIHNyYywgZHN0ICovXG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9BREQ6XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHhkMDgwIHwgKGRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IHNfcmVnKTtcdC8qIGFkZC5sIHNyYywgZHN0ICovXG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9TVUI6XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg5MDgwIHwgKGRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IHNfcmVnKTtcdC8qIHN1Yi5sIHNyYywgZHN0ICovXG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9BTkQ6XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHhjMDgwIHwgKGRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IHNfcmVnKTtcdC8qIGFuZC5sIHNyYywgZHN0ICovXG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9PUjpcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDgwODAgfCAoZF9yZWcgXHUwMDNjXHUwMDNjIDkpIHwgc19yZWcpO1x0Lyogb3IubCBzcmMsIGRzdCAqL1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfWE9SOlxuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4YjE4MCB8IChzX3JlZyBcdTAwM2NcdTAwM2MgOSkgfCBkX3JlZyk7XHQvKiBlb3IubCBzcmMsIGRzdCAqL1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfTFNIOlxuJiM0MztcdGNhc2UgQlBGX1JTSDpcbiYjNDM7XHRjYXNlIEJQRl9BUlNIOiB7XG4mIzQzO1x0XHRzOCBjb3VudF9yZWcgPSB0bXAyWzFdO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzX3JlZyAhPSBjb3VudF9yZWcpXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDIwMDAgfCAoY291bnRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IHNfcmVnKTsgLyogbW92ZS5sIHNyYywgY291bnQgKi9cbiYjNDM7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgwMjgwIHwgY291bnRfcmVnKTtcdFx0LyogYW5kaS5sICNpbW0sIGNvdW50ICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgMHgxZik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9MU0gpXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGUxYTggfCAoY291bnRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IGRfcmVnKTsgLyogbHNsLmwgY291bnQsIGRzdCAqL1xuJiM0MztcdFx0ZWxzZSBpZiAoQlBGX09QKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1JTSClcbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4ZTBhOCB8IChjb3VudF9yZWcgXHUwMDNjXHUwMDNjIDkpIHwgZF9yZWcpOyAvKiBsc3IubCBjb3VudCwgZHN0ICovXG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGUwYTAgfCAoY291bnRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IGRfcmVnKTsgLyogYXNyLmwgY291bnQsIGRzdCAqL1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnBmX3B1dF9yZWczMihkc3RbMV0sIGRfcmVnLCBjdHgpO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDcwMDAgfCAodG1wMVswXSBcdTAwM2NcdTAwM2MgOSkpO1x0XHRcdC8qIG1vdmVxICMwLCB0bXAxICovXG4mIzQzO1x0YnBmX3B1dF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVtaXRfYWx1MzJfayhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbiYjNDM7XHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4mIzQzO1x0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xuJiM0MztcdHM4IGRfcmVnO1xuJiM0MztcbiYjNDM7XHRkX3JlZyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpKSB7XG4mIzQzO1x0Y2FzZSBCUEZfTU9WOlxuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MjAzYyB8IChkX3JlZyBcdTAwM2NcdTAwM2MgOSkpO1x0XHQvKiBtb3ZlLmwgI2ltbSwgZHN0ICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfQUREOlxuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MDY4MCB8IGRfcmVnKTtcdFx0XHQvKiBhZGRpLmwgI2ltbSwgZHN0ICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfU1VCOlxuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MDQ4MCB8IGRfcmVnKTtcdFx0XHQvKiBzdWJpLmwgI2ltbSwgZHN0ICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfQU5EOlxuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MDI4MCB8IGRfcmVnKTtcdFx0XHQvKiBhbmRpLmwgI2ltbSwgZHN0ICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfT1I6XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgwMDgwIHwgZF9yZWcpO1x0XHRcdC8qIG9yaS5sICNpbW0sIGRzdCAqL1xuJiM0MztcdFx0ZW1pdF8zMihjdHgsIGluc24tXHUwMDNlaW1tKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX1hPUjpcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDBhODAgfCBkX3JlZyk7XHRcdFx0LyogZW9yaS5sICNpbW0sIGRzdCAqL1xuJiM0MztcdFx0ZW1pdF8zMihjdHgsIGluc24tXHUwMDNlaW1tKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX0xTSDpcbiYjNDM7XHRjYXNlIEJQRl9SU0g6XG4mIzQzO1x0Y2FzZSBCUEZfQVJTSDpcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAodG1wMlsxXSBcdTAwM2NcdTAwM2MgOSkpO1x0XHQvKiBtb3ZlLmwgI2ltbSwgY291bnQgKi9cbiYjNDM7XHRcdGVtaXRfMzIoY3R4LCBpbnNuLVx1MDAzZWltbSBcdTAwMjYgMHgxZik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9MU0gpXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGUxYTggfCAodG1wMlsxXSBcdTAwM2NcdTAwM2MgOSkgfCBkX3JlZyk7XHQvKiBsc2wubCBjb3VudCwgZHN0ICovXG4mIzQzO1x0XHRlbHNlIGlmIChCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUlNIKVxuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHhlMGE4IHwgKHRtcDJbMV0gXHUwMDNjXHUwMDNjIDkpIHwgZF9yZWcpO1x0LyogbHNyLmwgY291bnQsIGRzdCAqL1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHhlMGEwIHwgKHRtcDJbMV0gXHUwMDNjXHUwMDNjIDkpIHwgZF9yZWcpO1x0LyogYXNyLmwgY291bnQsIGRzdCAqL1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9yZWcsIGN0eCk7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4NzAwMCB8ICh0bXAxWzBdIFx1MDAzY1x1MDAzYyA5KSk7XHRcdFx0LyogbW92ZXEgIzAsIHRtcDEgKi9cbiYjNDM7XHRicGZfcHV0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hbHU2NF94KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVx1MDAzZWRzdF9yZWddO1xuJiM0MztcdGNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLVx1MDAzZXNyY19yZWddO1xuJiM0MztcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcbiYjNDM7XHRjb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07XG4mIzQzO1x0czggZF9sbywgZF9oaSwgc19sbywgc19oaTtcbiYjNDM7XG4mIzQzO1x0ZF9sbyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpO1xuJiM0MztcdGRfaGkgPSBicGZfZ2V0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcbiYjNDM7XHRzX2xvID0gYnBmX2dldF9yZWczMihzcmNbMV0sIHRtcDJbMV0sIGN0eCk7XG4mIzQzO1x0c19oaSA9IGJwZl9nZXRfcmVnMzIoc3JjWzBdLCB0bXAyWzBdLCBjdHgpO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpKSB7XG4mIzQzO1x0Y2FzZSBCUEZfTU9WOlxuJiM0MztcdFx0aWYgKGluc24tXHUwMDNlb2ZmID09IDggfHwgaW5zbi1cdTAwM2VvZmYgPT0gMTYgfHwgaW5zbi1cdTAwM2VvZmYgPT0gMzIpIHtcbiYjNDM7XHRcdFx0aWYgKGRfbG8gIT0gc19sbylcbiYjNDM7XHRcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7IC8qIG1vdmUubCBzcmMsIGRzdCAqL1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKGluc24tXHUwMDNlb2ZmID09IDgpXG4mIzQzO1x0XHRcdFx0ZW1pdF8xNihjdHgsIDB4NDljMCB8IGRfbG8pO1x0XHQvKiBleHRiLmwgZF9sbyAqL1xuJiM0MztcdFx0XHRlbHNlIGlmIChpbnNuLVx1MDAzZW9mZiA9PSAxNilcbiYjNDM7XHRcdFx0XHRlbWl0XzE2KGN0eCwgMHg0OGMwIHwgZF9sbyk7XHRcdC8qIGV4dC5sIGRfbG8gKi9cbiYjNDM7XG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDRhODAgfCBkX2xvKTtcdFx0XHQvKiB0c3QubCBkX2xvICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDViYzAgfCBkX2hpKTtcdFx0XHQvKiBzbWkgZF9oaSAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg0OWMwIHwgZF9oaSk7XHRcdFx0LyogZXh0Yi5sIGRfaGkgKi9cbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGlmIChkX2xvICE9IHNfbG8pXG4mIzQzO1x0XHRcdFx0ZW1pdF8xNihjdHgsIDB4MjAwMCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSB8IHNfbG8pOyAvKiBtb3ZlLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0XHRpZiAoZF9oaSAhPSBzX2hpKVxuJiM0MztcdFx0XHRcdGVtaXRfMTYoY3R4LCAweDIwMDAgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkgfCBzX2hpKTsgLyogbW92ZS5sIHNfaGksIGRfaGkgKi9cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX0FERDpcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGQwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTtcdFx0LyogYWRkLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4ZDE4MCB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSB8IHNfaGkpO1x0XHQvKiBhZGR4Lmwgc19oaSwgZF9oaSAqL1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfU1VCOlxuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4OTA4MCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSB8IHNfbG8pO1x0XHQvKiBzdWIubCBzX2xvLCBkX2xvICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg5MTgwIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpIHwgc19oaSk7XHRcdC8qIHN1YngubCBzX2hpLCBkX2hpICovXG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9BTkQ6XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHhjMDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7XHRcdC8qIGFuZC5sIHNfbG8sIGRfbG8gKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGMwODAgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkgfCBzX2hpKTtcdFx0LyogYW5kLmwgc19oaSwgZF9oaSAqL1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfT1I6XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7XHRcdC8qIG9yLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4ODA4MCB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSB8IHNfaGkpO1x0XHQvKiBvci5sIHNfaGksIGRfaGkgKi9cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX1hPUjpcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGIxODAgfCAoc19sbyBcdTAwM2NcdTAwM2MgOSkgfCBkX2xvKTtcdFx0LyogZW9yLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4YjE4MCB8IChzX2hpIFx1MDAzY1x1MDAzYyA5KSB8IGRfaGkpO1x0XHQvKiBlb3IubCBzX2hpLCBkX2hpICovXG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX2xvLCBjdHgpO1xuJiM0MztcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlbWl0X2FsdTY0X2soY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXHUwMDNlZHN0X3JlZ107XG4mIzQzO1x0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xuJiM0MztcdGNvbnN0IHM4ICp0bXAyID0gYnBmMm02OGtbVE1QX1JFR18yXTtcbiYjNDM7XHRzOCBkX2xvLCBkX2hpLCBzX2xvLCBzX2hpO1xuJiM0MztcdHUzMiBpbW1fbG8gPSBpbnNuLVx1MDAzZWltbTtcbiYjNDM7XHR1MzIgaW1tX2hpID0gaW5zbi1cdTAwM2VpbW0gXHUwMDNjIDAgPyAweGZmZmZmZmZmIDogMDtcbiYjNDM7XG4mIzQzO1x0ZF9sbyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpO1xuJiM0MztcdGRfaGkgPSBicGZfZ2V0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NT1YpIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkpO1x0XHRcdC8qIG1vdmUubCAjaW1tLCBkX2xvICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgaW1tX2xvKTtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkpO1x0XHRcdC8qIG1vdmUubCAjaW1tLCBkX2hpICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgaW1tX2hpKTtcbiYjNDM7XHRcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX2xvLCBjdHgpO1xuJiM0MztcdFx0YnBmX3B1dF9yZWczMihkc3RbMF0sIGRfaGksIGN0eCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzX2xvID0gdG1wMlsxXTtcbiYjNDM7XHRzX2hpID0gdG1wMlswXTtcbiYjNDM7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4MjAzYyB8IChzX2xvIFx1MDAzY1x1MDAzYyA5KSk7XHRcdFx0XHQvKiBtb3ZlLmwgI2ltbSwgc19sbyAqL1xuJiM0MztcdGVtaXRfMzIoY3R4LCBpbW1fbG8pO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAoc19oaSBcdTAwM2NcdTAwM2MgOSkpO1x0XHRcdFx0LyogbW92ZS5sICNpbW0sIHNfaGkgKi9cbiYjNDM7XHRlbWl0XzMyKGN0eCwgaW1tX2hpKTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSkge1xuJiM0MztcdGNhc2UgQlBGX0FERDpcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGQwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTtcdFx0LyogYWRkLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4ZDE4MCB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSB8IHNfaGkpO1x0XHQvKiBhZGR4Lmwgc19oaSwgZF9oaSAqL1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfU1VCOlxuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4OTA4MCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSB8IHNfbG8pO1x0XHQvKiBzdWIubCBzX2xvLCBkX2xvICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg5MTgwIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpIHwgc19oaSk7XHRcdC8qIHN1YngubCBzX2hpLCBkX2hpICovXG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9BTkQ6XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHhjMDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7XHRcdC8qIGFuZC5sIHNfbG8sIGRfbG8gKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGMwODAgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkgfCBzX2hpKTtcdFx0LyogYW5kLmwgc19oaSwgZF9oaSAqL1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfT1I6XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7XHRcdC8qIG9yLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4ODA4MCB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSB8IHNfaGkpO1x0XHQvKiBvci5sIHNfaGksIGRfaGkgKi9cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX1hPUjpcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGIxODAgfCAoc19sbyBcdTAwM2NcdTAwM2MgOSkgfCBkX2xvKTtcdFx0LyogZW9yLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4YjE4MCB8IChzX2hpIFx1MDAzY1x1MDAzYyA5KSB8IGRfaGkpO1x0XHQvKiBlb3IubCBzX2hpLCBkX2hpICovXG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX2xvLCBjdHgpO1xuJiM0MztcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlbWl0X2FsdTY0X3NoaWZ0KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBpc19pbW0pXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbiYjNDM7XHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4mIzQzO1x0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xuJiM0MztcdHM4IGRfbG8sIGRfaGksIGNvdW50X3JlZztcbiYjNDM7XHRpbnQgbG9vcF9zdGFydCwgZG9uZV9pZHg7XG4mIzQzO1xuJiM0MztcdGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcbiYjNDM7XHRkX2hpID0gYnBmX2dldF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7XG4mIzQzO1x0Y291bnRfcmVnID0gdG1wMlsxXTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX2ltbSkge1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MjAzYyB8IChjb3VudF9yZWcgXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZS5sICNpbW0sIGNvdW50X3JlZyAqL1xuJiM0MztcdFx0ZW1pdF8zMihjdHgsIGluc24tXHUwMDNlaW1tKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0Y29uc3QgczggKnNyYyA9IGJwZjJtNjhrW2luc24tXHUwMDNlc3JjX3JlZ107XG4mIzQzO1x0XHRzOCBzX2xvID0gYnBmX2dldF9yZWczMihzcmNbMV0sIHRtcDJbMV0sIGN0eCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGNvdW50X3JlZyAhPSBzX2xvKVxuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGNvdW50X3JlZyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTtcdC8qIG1vdmUubCBzX2xvLCBjb3VudF9yZWcgKi9cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDAyODAgfCBjb3VudF9yZWcpO1x0XHRcdC8qIGFuZGkubCAjMHgzZiwgY291bnRfcmVnICovXG4mIzQzO1x0ZW1pdF8zMihjdHgsIDB4M2YpO1xuJiM0MztcbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHg0YTgwIHwgY291bnRfcmVnKTtcdFx0XHRcdC8qIHRzdC5sIGNvdW50X3JlZyAqL1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDY3MDApO1x0XHRcdFx0XHRcdC8qIGJlcS53IGRvbmVfaWR4ICovXG4mIzQzO1x0ZG9uZV9pZHggPSBjdHgtXHUwMDNlaWR4O1xuJiM0MztcdGVtaXRfMTYoY3R4LCAwKTtcbiYjNDM7XG4mIzQzO1x0bG9vcF9zdGFydCA9IGN0eC1cdTAwM2VpZHg7XG4mIzQzO1xuJiM0MztcdGlmIChCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTFNIKSB7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHhlMzg4IHwgZF9sbyk7XHRcdFx0XHQvKiBsc2xsICMxLCBkX2xvICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHhlMzkwIHwgZF9oaSk7XHRcdFx0XHQvKiByb3hsLmwgIzEsIGRfaGkgKi9cbiYjNDM7XHR9IGVsc2UgaWYgKEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9SU0gpIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGUyODggfCBkX2hpKTtcdFx0XHRcdC8qIGxzcmwgIzEsIGRfaGkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGUyOTAgfCBkX2xvKTtcdFx0XHRcdC8qIHJveHIubCAjMSwgZF9sbyAqL1xuJiM0MztcdH0gZWxzZSBpZiAoQlBGX09QKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FSU0gpIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGUyODAgfCBkX2hpKTtcdFx0XHRcdC8qIGFzcmwgIzEsIGRfaGkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGUyOTAgfCBkX2xvKTtcdFx0XHRcdC8qIHJveHIubCAjMSwgZF9sbyAqL1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4NTM4MCB8IGNvdW50X3JlZyk7XHRcdFx0XHQvKiBzdWJxLmwgIzEsIGNvdW50X3JlZyAqL1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDY2MDApO1x0XHRcdFx0XHRcdC8qIGJuZS53IGxvb3Bfc3RhcnQgKi9cbiYjNDM7XHRlbWl0XzE2KGN0eCwgKGxvb3Bfc3RhcnQgLSAoaW50KWN0eC1cdTAwM2VpZHgpICogMik7XG4mIzQzO1xuJiM0MztcdGlmIChjdHgtXHUwMDNldGFyZ2V0KVxuJiM0MztcdFx0Y3R4LVx1MDAzZXRhcmdldFtkb25lX2lkeF0gPSAoY3R4LVx1MDAzZWlkeCAtIGRvbmVfaWR4KSAqIDI7XG4mIzQzO1xuJiM0MztcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX2xvLCBjdHgpO1xuJiM0MztcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlbWl0X2JwZl9lbmQoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXHUwMDNlZHN0X3JlZ107XG4mIzQzO1x0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xuJiM0MztcdHM4IGRfbG8sIGRfaGk7XG4mIzQzO1x0Ym9vbCB0b19sZSA9IEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfVE9fTEU7XG4mIzQzO1x0aW50IGltbSA9IGluc24tXHUwMDNlaW1tO1xuJiM0MztcbiYjNDM7XHRkX2xvID0gYnBmX2dldF9yZWczMihkc3RbMV0sIHRtcDFbMV0sIGN0eCk7XG4mIzQzO1x0ZF9oaSA9IGJwZl9nZXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpO1xuJiM0MztcbiYjNDM7XHRpZiAodG9fbGUpIHtcbiYjNDM7XHRcdHN3aXRjaCAoaW1tKSB7XG4mIzQzO1x0XHRjYXNlIDE2OlxuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHgwMjgwIHwgZF9sbyk7XHRcdFx0LyogYW5kaS5sICMweGZmZmYsIGRfbG8gKi9cbiYjNDM7XHRcdFx0ZW1pdF8zMihjdHgsIDB4ZmZmZik7XG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGUwNTggfCBkX2xvKTtcdFx0XHQvKiByb3IudyAjOCwgZF9sbyAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg3MDAwIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZXEgIzAsIGRfaGkgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIDMyOlxuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9sbyk7XHRcdFx0Lyogcm9yLncgIzgsIGRfbG8gKi9cbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4NDg0MCB8IGRfbG8pO1x0XHRcdC8qIHN3YXAgZF9sbyAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9sbyk7XHRcdFx0Lyogcm9yLncgIzgsIGRfbG8gKi9cbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSk7XHRcdC8qIG1vdmVxICMwLCBkX2hpICovXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSA2NDpcbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4ZTA1OCB8IGRfbG8pO1x0XHRcdC8qIHJvci53ICM4LCBkX2xvICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDQ4NDAgfCBkX2xvKTtcdFx0XHQvKiBzd2FwIGRfbG8gKi9cbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4ZTA1OCB8IGRfbG8pO1x0XHRcdC8qIHJvci53ICM4LCBkX2xvICovXG4mIzQzO1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9oaSk7XHRcdFx0Lyogcm9yLncgIzgsIGRfaGkgKi9cbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4NDg0MCB8IGRfaGkpO1x0XHRcdC8qIHN3YXAgZF9oaSAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9oaSk7XHRcdFx0Lyogcm9yLncgIzgsIGRfaGkgKi9cbiYjNDM7XG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGMxNDAgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkgfCBkX2xvKTtcdC8qIGV4ZyBkX2xvLCBkX2hpICovXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRzd2l0Y2ggKGltbSkge1xuJiM0MztcdFx0Y2FzZSAxNjpcbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4MDI4MCB8IGRfbG8pO1x0XHRcdC8qIGFuZGkubCAjMHhmZmZmLCBkX2xvICovXG4mIzQzO1x0XHRcdGVtaXRfMzIoY3R4LCAweGZmZmYpO1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg3MDAwIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZXEgIzAsIGRfaGkgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIDMyOlxuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg3MDAwIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZXEgIzAsIGRfaGkgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIDY0OlxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX2xvLCBjdHgpO1xuJiM0MztcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlbWl0X21hdGhfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgaXNfNjQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbiYjNDM7XHRjb25zdCBzOCAqc3JjID0gYnBmMm02OGtbaW5zbi1cdTAwM2VzcmNfcmVnXTtcbiYjNDM7XHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4mIzQzO1x0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xuJiM0MztcdHM4IGRfbG8sIGRfaGksIHNfbG8sIHNfaGkgPSAwO1xuJiM0MztcdHZvaWQgKmZ1bmMgPSBOVUxMO1xuJiM0MztcdHU4IG9wID0gQlBGX09QKGluc24tXHUwMDNlY29kZSk7XG4mIzQzO1xuJiM0MztcdGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcbiYjNDM7XHRkX2hpID0gYnBmX2dldF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7XG4mIzQzO1xuJiM0MztcdGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1gpIHtcbiYjNDM7XHRcdHNfbG8gPSBicGZfZ2V0X3JlZzMyKHNyY1sxXSwgdG1wMlsxXSwgY3R4KTtcbiYjNDM7XHRcdGlmIChpc182NClcbiYjNDM7XHRcdFx0c19oaSA9IGJwZl9nZXRfcmVnMzIoc3JjWzBdLCB0bXAyWzBdLCBjdHgpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRzX2xvID0gdG1wMlsxXTtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAoc19sbyBcdTAwM2NcdTAwM2MgOSkpO1x0XHRcdC8qIG1vdmUubCAjaW1tLCBzX2xvICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuJiM0MztcdFx0aWYgKGlzXzY0KSB7XG4mIzQzO1x0XHRcdHNfaGkgPSB0bXAyWzBdO1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHNfaGkgXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZS5sICNpbW0sIHNfaGkgKi9cbiYjNDM7XHRcdFx0ZW1pdF8zMihjdHgsIGluc24tXHUwMDNlaW1tIFx1MDAzYyAwID8gMHhmZmZmZmZmZiA6IDApO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGlzXzY0KSB7XG4mIzQzO1x0XHRzd2l0Y2ggKG9wKSB7XG4mIzQzO1x0XHRjYXNlIEJQRl9NVUw6XG4mIzQzO1x0XHRcdGZ1bmMgPSAodm9pZCAqKWppdF9tdWw2NDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9ESVY6XG4mIzQzO1x0XHRcdGZ1bmMgPSAodm9pZCAqKWppdF9kaXY2NDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9NT0Q6XG4mIzQzO1x0XHRcdGZ1bmMgPSAodm9pZCAqKWppdF9tb2Q2NDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FMVTY0IFx1MDAyNlx1MDAyNiBvcCA9PSBCUEZfRElWIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZW9mZiA9PSAxKVxuJiM0MztcdFx0XHRmdW5jID0gKHZvaWQgKilqaXRfc2RpdjY0O1xuJiM0MztcdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFU2NCBcdTAwMjZcdTAwMjYgb3AgPT0gQlBGX01PRCBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gMSlcbiYjNDM7XHRcdFx0ZnVuYyA9ICh2b2lkICopaml0X3Ntb2Q2NDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3dpdGNoIChvcCkge1xuJiM0MztcdFx0Y2FzZSBCUEZfTVVMOlxuJiM0MztcdFx0XHRmdW5jID0gKHZvaWQgKilqaXRfbXVsMzI7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBCUEZfRElWOlxuJiM0MztcdFx0XHRmdW5jID0gKHZvaWQgKilqaXRfZGl2MzI7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBCUEZfTU9EOlxuJiM0MztcdFx0XHRmdW5jID0gKHZvaWQgKilqaXRfbW9kMzI7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFUgXHUwMDI2XHUwMDI2IG9wID09IEJQRl9ESVYgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlb2ZmID09IDEpXG4mIzQzO1x0XHRcdGZ1bmMgPSAodm9pZCAqKWppdF9zZGl2MzI7XG4mIzQzO1x0XHRpZiAoQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FMVSBcdTAwMjZcdTAwMjYgb3AgPT0gQlBGX01PRCBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gMSlcbiYjNDM7XHRcdFx0ZnVuYyA9ICh2b2lkICopaml0X3Ntb2QzMjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChpc182NCkge1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4NDhlNyk7XHRcdFx0XHRcdC8qIG1vdmVtLmwgZDAtZDEsIC0oJXNwKSAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4YzAwMCk7XG4mIzQzO1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IHNfbG8pO1x0XHRcdFx0LyogbW92ZS5sIHNfbG8sIC0oJXNwKSAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IHNfaGkpO1x0XHRcdFx0LyogbW92ZS5sIHNfaGksIC0oJXNwKSAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IGRfbG8pO1x0XHRcdFx0LyogbW92ZS5sIGRfbG8sIC0oJXNwKSAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IGRfaGkpO1x0XHRcdFx0LyogbW92ZS5sIGRfaGksIC0oJXNwKSAqL1xuJiM0MztcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwN2MpO1x0XHRcdFx0XHQvKiBtb3ZlYS5sICNmdW5jLCAlYTAgKi9cbiYjNDM7XHRcdGVtaXRfMzIoY3R4LCAodTMyKWZ1bmMpO1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4NGU5MCk7XHRcdFx0XHRcdC8qIGpzciAoJWEwKSAqL1xuJiM0MztcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDRmZWYpO1x0XHRcdFx0XHQvKiBsZWEgMTYoJXNwKSwgJXNwICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMTYpO1xuJiM0MztcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDI2MDEpO1x0XHRcdFx0XHQvKiBtb3ZlLmwgJWQxLCAlZDMgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDI0MDApO1x0XHRcdFx0XHQvKiBtb3ZlLmwgJWQwLCAlZDIgKi9cbiYjNDM7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg0Y2RmKTtcdFx0XHRcdFx0LyogbW92ZW0ubCAoJXNwKSYjNDM7LCBkMC1kMSAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MDAwMyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDQ4ZTcpO1x0XHRcdFx0XHQvKiBtb3ZlbS5sIGQwLWQxLCAtKCVzcCkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGMwMDApO1xuJiM0MztcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBzX2xvKTtcdFx0XHRcdC8qIG1vdmUubCBzX2xvLCAtKCVzcCkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBkX2xvKTtcdFx0XHRcdC8qIG1vdmUubCBkX2xvLCAtKCVzcCkgKi9cbiYjNDM7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyMDdjKTtcdFx0XHRcdFx0LyogbW92ZWEubCAjZnVuYywgJWEwICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgKHUzMilmdW5jKTtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDRlOTApO1x0XHRcdFx0XHQvKiBqc3IgKCVhMCkgKi9cbiYjNDM7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg0ZmVmKTtcdFx0XHRcdFx0LyogbGVhIDgoJXNwKSwgJXNwICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgOCk7XG4mIzQzO1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MjYwMCk7XHRcdFx0XHRcdC8qIG1vdmUubCAlZDAsICVkMyAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4NzQwMCk7XHRcdFx0XHRcdC8qIG1vdmVxICMwLCAlZDIgKi9cbiYjNDM7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg0Y2RmKTtcdFx0XHRcdFx0LyogbW92ZW0ubCAoJXNwKSYjNDM7LCBkMC1kMSAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MDAwMyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgTTY4S19EMywgY3R4KTtcbiYjNDM7XHRicGZfcHV0X3JlZzMyKGRzdFswXSwgTTY4S19EMiwgY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW1pdF9sZHgoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXHUwMDNlZHN0X3JlZ107XG4mIzQzO1x0Y29uc3QgczggKnNyYyA9IGJwZjJtNjhrW2luc24tXHUwMDNlc3JjX3JlZ107XG4mIzQzO1x0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xuJiM0MztcdHM4IGRfbG8sIGRfaGk7XG4mIzQzO1x0Ym9vbCBpc19tZW1fc3ggPSBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU1TWDtcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX3N0YWNrZWQoc3JjWzFdKSkge1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MjA2ZSk7XHRcdFx0XHQvKiBtb3ZlYS5sIGQxNiglZnApLCAlYTAgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAodTE2KXNyY1sxXSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwNDAgfCBzcmNbMV0pO1x0XHRcdC8qIG1vdmVhLmwgc3JjLCAlYTAgKi9cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRfbG8gPSBpc19zdGFja2VkKGRzdFsxXSkgPyB0bXAxWzFdIDogZHN0WzFdO1xuJiM0MztcdGRfaGkgPSBpc19zdGFja2VkKGRzdFswXSkgPyB0bXAxWzBdIDogZHN0WzBdO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkpIHtcbiYjNDM7XHRjYXNlIEJQRl9COlxuJiM0MztcdFx0aWYgKCFpc19tZW1fc3gpXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDcwMDAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkpO1x0LyogbW92ZXEgIzAsIGRfbG8gKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDEwMjggfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkpO1x0XHQvKiBtb3ZlLmIgZDE2KCVhMCksIGRfbG8gKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRpZiAoaXNfbWVtX3N4KVxuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg0OWMwIHwgZF9sbyk7XHQvKiBleHRiLmwgZF9sbyAqL1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfSDpcbiYjNDM7XHRcdGlmICghaXNfbWVtX3N4KVxuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg3MDAwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpKTtcdC8qIG1vdmVxICMwLCBkX2xvICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgzMDI4IHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZS53IGQxNiglYTApLCBkX2xvICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgaW5zbi1cdTAwM2VvZmYpO1xuJiM0MztcdFx0aWYgKGlzX21lbV9zeClcbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4NDhjMCB8IGRfbG8pO1x0LyogZXh0LmwgZF9sbyAqL1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfVzpcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwMjggfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkpO1x0XHQvKiBtb3ZlLmwgZDE2KCVhMCksIGRfbG8gKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9EVzpcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwMjggfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkpO1x0XHQvKiBtb3ZlLmwgZDE2KCVhMCksIGRfaGkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg0MWU4KTtcdFx0XHRcdC8qIGxlYSA0KCVhMCksICVhMCAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDQpO1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MjAyOCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSk7XHRcdC8qIG1vdmUubCBkMTYoJWEwKSwgZF9sbyAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIGluc24tXHUwMDNlb2ZmKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX0RXKSB7XG4mIzQzO1x0XHRpZiAoaXNfbWVtX3N4KSB7XG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDRhODAgfCBkX2xvKTtcdFx0XHQvKiB0c3QubCBkX2xvICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDViYzAgfCBkX2hpKTtcdFx0XHQvKiBzbWkgZF9oaSAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg0OWMwIHwgZF9oaSk7XHRcdFx0LyogZXh0Yi5sIGRfaGkgKi9cbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDcwMDAgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkpO1x0LyogbW92ZXEgIzAsIGRfaGkgKi9cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX2xvLCBjdHgpO1xuJiM0MztcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlbWl0X3N0eChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbiYjNDM7XHRjb25zdCBzOCAqc3JjID0gYnBmMm02OGtbaW5zbi1cdTAwM2VzcmNfcmVnXTtcbiYjNDM7XHRjb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07XG4mIzQzO1x0czggc19sbywgc19oaTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX3N0YWNrZWQoZHN0WzFdKSkge1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MjA2ZSk7XHRcdFx0XHQvKiBtb3ZlYS5sIGQxNiglZnApLCAlYTAgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAodTE2KWRzdFsxXSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwNDAgfCBkc3RbMV0pO1x0XHRcdC8qIG1vdmVhLmwgZHN0LCAlYTAgKi9cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNfbG8gPSBicGZfZ2V0X3JlZzMyKHNyY1sxXSwgdG1wMlsxXSwgY3R4KTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpKSB7XG4mIzQzO1x0Y2FzZSBCUEZfQjpcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDExNDAgfCBzX2xvKTtcdFx0XHQvKiBtb3ZlLmIgc19sbywgZDE2KCVhMCkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9IOlxuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MzE0MCB8IHNfbG8pO1x0XHRcdC8qIG1vdmUudyBzX2xvLCBkMTYoJWEwKSAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIGluc24tXHUwMDNlb2ZmKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX1c6XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyMTQwIHwgc19sbyk7XHRcdFx0LyogbW92ZS5sIHNfbG8sIGQxNiglYTApICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgaW5zbi1cdTAwM2VvZmYpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfRFc6XG4mIzQzO1x0XHRzX2hpID0gYnBmX2dldF9yZWczMihzcmNbMF0sIHRtcDJbMF0sIGN0eCk7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyMTQwIHwgc19oaSk7XHRcdFx0LyogbW92ZS5sIHNfaGksIGQxNiglYTApICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgaW5zbi1cdTAwM2VvZmYpO1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4NDFlOCk7XHRcdFx0XHQvKiBsZWEgNCglYTApLCAlYTAgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCA0KTtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIxNDAgfCBzX2xvKTtcdFx0XHQvKiBtb3ZlLmwgc19sbywgZDE2KCVhMCkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVtaXRfc3QoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXHUwMDNlZHN0X3JlZ107XG4mIzQzO1x0Y29uc3QgczggKnRtcCA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4mIzQzO1xuJiM0MztcdGlmIChpc19zdGFja2VkKGRzdFsxXSkpIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwNmUpO1x0XHRcdFx0LyogbW92ZWEubCBkMTYoJWZwKSwgJWEwICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgKHUxNilkc3RbMV0pO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyMDQwIHwgZHN0WzFdKTtcdFx0XHQvKiBtb3ZlYS5sIGRzdCwgJWEwICovXG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHRtcFsxXSBcdTAwM2NcdTAwM2MgOSkpO1x0XHRcdC8qIG1vdmUubCAjaW1tLCB0bXAgKi9cbiYjNDM7XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkpIHtcbiYjNDM7XHRjYXNlIEJQRl9COlxuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MTE0MCB8IHRtcFsxXSk7XHRcdFx0LyogbW92ZS5iIHRtcCwgZDE2KCVhMCkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9IOlxuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MzE0MCB8IHRtcFsxXSk7XHRcdFx0LyogbW92ZS53IHRtcCwgZDE2KCVhMCkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9XOlxuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MjE0MCB8IHRtcFsxXSk7XHRcdFx0LyogbW92ZS5sIHRtcCwgZDE2KCVhMCkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9EVzpcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAodG1wWzBdIFx1MDAzY1x1MDAzYyA5KSk7XHRcdC8qIG1vdmUubCAjaW1tLCB0bXAgKi9cbiYjNDM7XHRcdGVtaXRfMzIoY3R4LCBpbnNuLVx1MDAzZWltbSBcdTAwM2MgMCA/IDB4ZmZmZmZmZmYgOiAwKTtcbiYjNDM7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyMTQwIHwgdG1wWzBdKTtcdFx0XHQvKiBtb3ZlLmwgdG1wLCBkMTYoJWEwKSAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIGluc24tXHUwMDNlb2ZmKTtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDQxZTgpO1x0XHRcdFx0LyogbGVhIDQoJWEwKSwgJWEwICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgNCk7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyMTQwIHwgdG1wWzFdKTtcdFx0XHQvKiBtb3ZlLmwgdG1wLCBkMTYoJWEwKSAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIGluc24tXHUwMDNlb2ZmKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hdG9taWMoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXHUwMDNlZHN0X3JlZ107XG4mIzQzO1x0Y29uc3QgczggKnNyYyA9IGJwZjJtNjhrW2luc24tXHUwMDNlc3JjX3JlZ107XG4mIzQzO1x0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xuJiM0MztcbiYjNDM7XHRpZiAoaXNfc3RhY2tlZChkc3RbMV0pKSB7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyMDZlKTtcdFx0XHRcdC8qIG1vdmVhLmwgZDE2KCVmcCksICVhMCAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsICh1MTYpZHN0WzFdKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MjA0MCB8IGRzdFsxXSk7XHRcdFx0LyogbW92ZWEubCBkc3QsICVhMCAqL1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGluc24tXHUwMDNlb2ZmKSB7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg0MWU4KTtcdFx0XHRcdC8qIGxlYSBkMTYoJWEwKSwgJWEwICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgaW5zbi1cdTAwM2VvZmYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1cpIHtcbiYjNDM7XHRcdHM4IHNfbG8gPSBicGZfZ2V0X3JlZzMyKHNyY1sxXSwgdG1wMlsxXSwgY3R4KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaW5zbi1cdTAwM2VpbW0gIT0gQlBGX0NNUFhDSEcpIHtcbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4NDhlNyk7XHRcdFx0LyogbW92ZW0ubCBkMC1kMSwgLSglc3ApICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGMwMDApO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBNNjhLX0QwKTtcdFx0XHQvKiBtb3ZlLmwgJWQwLCAtKCVzcCkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDJmM2MpO1x0XHRcdFx0LyogbW92ZS5sICNpbW0sIC0oJXNwKSAqL1xuJiM0MztcdFx0ZW1pdF8zMihjdHgsIGluc24tXHUwMDNlaW1tKTtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBzX2xvKTtcdFx0XHQvKiBtb3ZlLmwgc19sbywgLSglc3ApICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyZjA4KTtcdFx0XHRcdC8qIG1vdmUubCAlYTAsIC0oJXNwKSAqL1xuJiM0MztcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwN2MpO1x0XHRcdFx0LyogbW92ZWEubCAjZnVuYywgJWEwICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgKHUzMilqaXRfYXRvbWljMzIpO1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4NGU5MCk7XHRcdFx0XHQvKiBqc3IgKCVhMCkgKi9cbiYjNDM7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg0ZmVmKTtcdFx0XHRcdC8qIGxlYSAxNiglc3ApLCAlc3AgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAxNik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGluc24tXHUwMDNlaW1tID09IEJQRl9DTVBYQ0hHKSB7XG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDcyMDApO1x0XHRcdC8qIG1vdmVxICMwLCAlZDEgKi9cbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGJvb2wgaXNfZmV0Y2ggPSAoaW5zbi1cdTAwM2VpbW0gXHUwMDI2IEJQRl9GRVRDSCkgfHwgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX1hDSEc7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoaXNfZmV0Y2gpXG4mIzQzO1x0XHRcdFx0ZW1pdF8xNihjdHgsIDB4MjYwMCk7XHRcdC8qIG1vdmUubCAlZDAsICVkMyAqL1xuJiM0MztcbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4NGNkZik7XHRcdFx0LyogbW92ZW0ubCAoJXNwKSYjNDM7LCBkMC1kMSAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHgwMDAzKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChpc19mZXRjaCkge1xuJiM0MztcdFx0XHRcdGJwZl9wdXRfcmVnMzIoc3JjWzFdLCBNNjhLX0QzLCBjdHgpO1xuJiM0MztcdFx0XHRcdGVtaXRfMTYoY3R4LCAweDc0MDApO1x0XHQvKiBtb3ZlcSAjMCwgJWQyICovXG4mIzQzO1x0XHRcdFx0YnBmX3B1dF9yZWczMihzcmNbMF0sIE02OEtfRDIsIGN0eCk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0fSBlbHNlIGlmIChCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9EVykge1xuJiM0MztcdFx0czggc19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpO1xuJiM0MztcdFx0czggc19oaSA9IGJwZl9nZXRfcmVnMzIoc3JjWzBdLCB0bXAyWzBdLCBjdHgpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpbnNuLVx1MDAzZWltbSAhPSBCUEZfQ01QWENIRykge1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg0OGU3KTtcdFx0XHQvKiBtb3ZlbS5sIGQwLWQxLCAtKCVzcCkgKi9cbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4YzAwMCk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IE02OEtfRDApO1x0XHRcdC8qIG1vdmUubCAlZDAsIC0oJXNwKSAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IE02OEtfRDEpO1x0XHRcdC8qIG1vdmUubCAlZDEsIC0oJXNwKSAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MmYzYyk7XHRcdFx0XHQvKiBtb3ZlLmwgI2ltbSwgLSglc3ApICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IHNfbG8pO1x0XHRcdC8qIG1vdmUubCBzX2xvLCAtKCVzcCkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBzX2hpKTtcdFx0XHQvKiBtb3ZlLmwgc19oaSwgLSglc3ApICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyZjA4KTtcdFx0XHRcdC8qIG1vdmUubCAlYTAsIC0oJXNwKSAqL1xuJiM0MztcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwN2MpO1x0XHRcdFx0LyogbW92ZWEubCAjZnVuYywgJWEwICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgKHUzMilqaXRfYXRvbWljNjQpO1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4NGU5MCk7XHRcdFx0XHQvKiBqc3IgKCVhMCkgKi9cbiYjNDM7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg0ZmVmKTtcdFx0XHRcdC8qIGxlYSAyNCglc3ApLCAlc3AgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAyNCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGluc24tXHUwMDNlaW1tID09IEJQRl9DTVBYQ0hHKSB7XG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGMxNDEpO1x0XHRcdC8qIGV4ZyAlZDAsICVkMSAqL1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0Ym9vbCBpc19mZXRjaCA9IChpbnNuLVx1MDAzZWltbSBcdTAwMjYgQlBGX0ZFVENIKSB8fCBpbnNuLVx1MDAzZWltbSA9PSBCUEZfWENIRztcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChpc19mZXRjaCkge1xuJiM0MztcdFx0XHRcdGVtaXRfMTYoY3R4LCAweDI2MDApO1x0XHQvKiBtb3ZlLmwgJWQwLCAlZDMgKi9cbiYjNDM7XHRcdFx0XHRlbWl0XzE2KGN0eCwgMHgyNDAxKTtcdFx0LyogbW92ZS5sICVkMSwgJWQyICovXG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDRjZGYpO1x0XHRcdC8qIG1vdmVtLmwgKCVzcCkmIzQzOywgZDAtZDEgKi9cbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4MDAwMyk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoaXNfZmV0Y2gpIHtcbiYjNDM7XHRcdFx0XHRicGZfcHV0X3JlZzMyKHNyY1sxXSwgTTY4S19EMiwgY3R4KTtcbiYjNDM7XHRcdFx0XHRicGZfcHV0X3JlZzMyKHNyY1swXSwgTTY4S19EMywgY3R4KTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW1pdF90YWlsX2NhbGwoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgczggKnIyID0gYnBmMm02OGtbQlBGX1JFR18yXTtcbiYjNDM7XHRjb25zdCBzOCAqcjMgPSBicGYybTY4a1tCUEZfUkVHXzNdO1xuJiM0MztcdGludCBqbXBfb3V0XzEsIGptcF9vdXRfMiwgam1wX291dF8zO1xuJiM0MztcbiYjNDM7XHRpZiAoaXNfc3RhY2tlZChyMlsxXSkpIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwNmUpO1x0XHRcdFx0LyogbW92ZWEubCBkMTYoJWZwKSwgJWEwICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgKHUxNilyMlsxXSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwNDAgfCByMlsxXSk7XHRcdFx0LyogbW92ZWEubCByMiwgJWEwICovXG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaXNfc3RhY2tlZChyM1sxXSkpIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDI0MmUpO1x0XHRcdFx0LyogbW92ZS5sIGQxNiglZnApLCAlZDIgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAodTE2KXIzWzFdKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MjQwMCB8IHIzWzFdKTtcdFx0XHQvKiBtb3ZlLmwgcjMsICVkMiAqL1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4YjRhOCk7XHRcdFx0XHRcdC8qIGNtcC5sIGQxNiglYTApLCAlZDIgKi9cbiYjNDM7XHRlbWl0XzE2KGN0eCwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9hcnJheSwgbWFwLm1heF9lbnRyaWVzKSk7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4NjQwMCk7XHRcdFx0XHRcdC8qIGJjYy53IGptcF9vdXRfMSAqL1xuJiM0MztcdGptcF9vdXRfMSA9IGN0eC1cdTAwM2VpZHg7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDApO1xuJiM0MztcbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHgyNjJlKTtcdFx0XHRcdFx0LyogbW92ZS5sIGQxNiglZnApLCAlZDMgKi9cbiYjNDM7XHRlbWl0XzE2KGN0eCwgKHUxNilTVEFDS19PRkZTRVQoQlBGX1RDX0xPKSk7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4NGE4Myk7XHRcdFx0XHRcdC8qIHRzdC5sICVkMyAqL1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDY3MDApO1x0XHRcdFx0XHQvKiBiZXEudyBqbXBfb3V0XzIgKi9cbiYjNDM7XHRqbXBfb3V0XzIgPSBjdHgtXHUwMDNlaWR4O1xuJiM0MztcdGVtaXRfMTYoY3R4LCAwKTtcbiYjNDM7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4NTM4Myk7XHRcdFx0XHRcdC8qIHN1YnEubCAjMSwgJWQzICovXG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4MmQ0Myk7XHRcdFx0XHRcdC8qIG1vdmUubCAlZDMsIGQxNiglZnApICovXG4mIzQzO1x0ZW1pdF8xNihjdHgsICh1MTYpU1RBQ0tfT0ZGU0VUKEJQRl9UQ19MTykpO1xuJiM0MztcbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHhkNDgyKTtcdFx0XHRcdFx0LyogYWRkLmwgJWQyLCAlZDIgKi9cbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHhkNDgyKTtcdFx0XHRcdFx0LyogYWRkLmwgJWQyLCAlZDIgKi9cbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHg0M2U4KTtcdFx0XHRcdFx0LyogbGVhIGQxNiglYTApLCAlYTEgKi9cbiYjNDM7XHRlbWl0XzE2KGN0eCwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9hcnJheSwgcHRycykpO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweGQzYzIpO1x0XHRcdFx0XHQvKiBhZGRhLmwgJWQyLCAlYTEgKi9cbiYjNDM7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4MjA1MSk7XHRcdFx0XHRcdC8qIG1vdmVhLmwgKCVhMSksICVhMCAqL1xuJiM0MztcbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHgyNDA4KTtcdFx0XHRcdFx0LyogbW92ZS5sICVhMCwgJWQyICovXG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4NGE4Mik7XHRcdFx0XHRcdC8qIHRzdC5sICVkMiAqL1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDY3MDApO1x0XHRcdFx0XHQvKiBiZXEudyBqbXBfb3V0XzMgKi9cbiYjNDM7XHRqbXBfb3V0XzMgPSBjdHgtXHUwMDNlaWR4O1xuJiM0MztcdGVtaXRfMTYoY3R4LCAwKTtcbiYjNDM7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4MjA2OCk7XHRcdFx0XHRcdC8qIG1vdmVhLmwgZDE2KCVhMCksICVhMCAqL1xuJiM0MztcdGVtaXRfMTYoY3R4LCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3Byb2csIGJwZl9mdW5jKSk7XG4mIzQzO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDRlZTgpO1x0XHRcdFx0XHQvKiBqbXAgZDE2KCVhMCkgKi9cbiYjNDM7XHRlbWl0XzE2KGN0eCwgNDQpO1xuJiM0MztcbiYjNDM7XHRpZiAoY3R4LVx1MDAzZXRhcmdldCkge1xuJiM0MztcdFx0Y3R4LVx1MDAzZXRhcmdldFtqbXBfb3V0XzFdID0gKGN0eC1cdTAwM2VpZHggLSBqbXBfb3V0XzEpICogMjtcbiYjNDM7XHRcdGN0eC1cdTAwM2V0YXJnZXRbam1wX291dF8yXSA9IChjdHgtXHUwMDNlaWR4IC0gam1wX291dF8yKSAqIDI7XG4mIzQzO1x0XHRjdHgtXHUwMDNldGFyZ2V0W2ptcF9vdXRfM10gPSAoY3R4LVx1MDAzZWlkeCAtIGptcF9vdXRfMykgKiAyO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbWl0X2ptcChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBjdXJyX2kpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbiYjNDM7XHRjb25zdCBzOCAqc3JjID0gYnBmMm02OGtbaW5zbi1cdTAwM2VzcmNfcmVnXTtcbiYjNDM7XHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4mIzQzO1x0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xuJiM0MztcdHM4IGRfbG8sIGRfaGkgPSAwLCBzX2xvLCBzX2hpID0gMDtcbiYjNDM7XHRib29sIGlzX2ptcDMyID0gQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0pNUDMyO1xuJiM0MztcdHU4IG9wID0gQlBGX09QKGluc24tXHUwMDNlY29kZSk7XG4mIzQzO1x0aW50IHRhcmdldF9pbnNuO1xuJiM0MztcbiYjNDM7XHRpZiAoaXNfam1wMzIgXHUwMDI2XHUwMDI2IG9wID09IEJQRl9KQSlcbiYjNDM7XHRcdHRhcmdldF9pbnNuID0gY3Vycl9pICYjNDM7IDEgJiM0MzsgaW5zbi1cdTAwM2VpbW07XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dGFyZ2V0X2luc24gPSBjdXJyX2kgJiM0MzsgMSAmIzQzOyBpbnNuLVx1MDAzZW9mZjtcbiYjNDM7XG4mIzQzO1x0aWYgKHRhcmdldF9pbnNuIFx1MDAzYyAwIHx8IHRhcmdldF9pbnNuIFx1MDAzZSBjdHgtXHUwMDNlcHJvZy1cdTAwM2VsZW4pXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdCNkZWZpbmUgRU1JVF9KTVAzMihvcF9iYXNlKSBcXFxuJiM0MztcdFx0ZG8geyBcXFxuJiM0MztcdFx0XHRpbnQgZGlzcCA9IChjdHgtXHUwMDNlb2Zmc2V0c1t0YXJnZXRfaW5zbl0gLSAoY3R4LVx1MDAzZWlkeCAmIzQzOyAxKSkgKiAyOyBcXFxuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgKG9wX2Jhc2UpIHwgMHgwMGZmKTsgXFxcbiYjNDM7XHRcdFx0ZW1pdF8zMihjdHgsIGRpc3ApOyBcXFxuJiM0MztcdFx0fSB3aGlsZSAoMClcbiYjNDM7XG4mIzQzO1x0aWYgKG9wID09IEJQRl9KQSkge1xuJiM0MztcdFx0RU1JVF9KTVAzMigweDYwMDApO1x0XHRcdFx0LyogYnJhLmwgKi9cbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZF9sbyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpO1xuJiM0MztcdGlmICghaXNfam1wMzIpXG4mIzQzO1x0XHRkX2hpID0gYnBmX2dldF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7XG4mIzQzO1xuJiM0MztcdGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1gpIHtcbiYjNDM7XHRcdHNfbG8gPSBicGZfZ2V0X3JlZzMyKHNyY1sxXSwgdG1wMlsxXSwgY3R4KTtcbiYjNDM7XHRcdGlmICghaXNfam1wMzIpXG4mIzQzO1x0XHRcdHNfaGkgPSBicGZfZ2V0X3JlZzMyKHNyY1swXSwgdG1wMlswXSwgY3R4KTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c19sbyA9IHRtcDJbMV07XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHNfbG8gXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZS5sICNpbW0sIHNfbG8gKi9cbiYjNDM7XHRcdGVtaXRfMzIoY3R4LCBpbnNuLVx1MDAzZWltbSk7XG4mIzQzO1x0XHRpZiAoIWlzX2ptcDMyKSB7XG4mIzQzO1x0XHRcdHNfaGkgPSB0bXAyWzBdO1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHNfaGkgXHUwMDNjXHUwMDNjIDkpKTtcdC8qIG1vdmUubCAjaW1tLCBzX2hpICovXG4mIzQzO1x0XHRcdGVtaXRfMzIoY3R4LCBpbnNuLVx1MDAzZWltbSBcdTAwM2MgMCA/IDB4ZmZmZmZmZmYgOiAwKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChvcCA9PSBCUEZfSlNFVCkge1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MjAwMCB8ICh0bXAxWzFdIFx1MDAzY1x1MDAzYyA5KSB8IGRfbG8pO1x0LyogbW92ZS5sIGRfbG8sIHRtcDFfbG8gKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGMwODAgfCAodG1wMVsxXSBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTtcdC8qIGFuZC5sIHNfbG8sIHRtcDFfbG8gKi9cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWlzX2ptcDMyKSB7XG4mIzQzO1x0XHRcdEVNSVRfSk1QMzIoMHg2NjAwKTtcdFx0XHQvKiBibmUubCAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKHRtcDFbMF0gXHUwMDNjXHUwMDNjIDkpIHwgZF9oaSk7IC8qIG1vdmUubCBkX2hpLCB0bXAxX2hpICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGMwODAgfCAodG1wMVswXSBcdTAwM2NcdTAwM2MgOSkgfCBzX2hpKTsgLyogYW5kLmwgc19oaSwgdG1wMV9oaSAqL1xuJiM0MztcdFx0fVxuJiM0MztcdFx0RU1JVF9KTVAzMigweDY2MDApO1x0XHRcdFx0LyogYm5lLmwgKi9cbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGlzX2ptcDMyKSB7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7XHQvKiBjbXAubCBzX2xvLCBkX2xvICovXG4mIzQzO1x0XHRzd2l0Y2ggKG9wKSB7XG4mIzQzO1x0XHRjYXNlIEJQRl9KRVE6XG4mIzQzO1x0XHRcdEVNSVRfSk1QMzIoMHg2NzAwKTtcdFx0XHQvKiBiZXEubCAqL1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgQlBGX0pORTpcbiYjNDM7XHRcdFx0RU1JVF9KTVAzMigweDY2MDApO1x0XHRcdC8qIGJuZS5sICovXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBCUEZfSkdUOlxuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NjIwMCk7XHRcdFx0LyogYmhpLmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9KR0U6XG4mIzQzO1x0XHRcdEVNSVRfSk1QMzIoMHg2NDAwKTtcdFx0XHQvKiBiY2MubCAqL1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgQlBGX0pMVDpcbiYjNDM7XHRcdFx0RU1JVF9KTVAzMigweDY1MDApO1x0XHRcdC8qIGJjcy5sICovXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBCUEZfSkxFOlxuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NjMwMCk7XHRcdFx0LyogYmxzLmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9KU0dUOlxuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NmUwMCk7XHRcdFx0LyogYmd0LmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9KU0dFOlxuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NmMwMCk7XHRcdFx0LyogYmdlLmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9KU0xUOlxuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NmQwMCk7XHRcdFx0LyogYmx0LmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9KU0xFOlxuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NmYwMCk7XHRcdFx0LyogYmxlLmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkgfCBzX2hpKTtcdC8qIGNtcC5sIHNfaGksIGRfaGkgKi9cbiYjNDM7XG4mIzQzO1x0XHRzd2l0Y2ggKG9wKSB7XG4mIzQzO1x0XHRjYXNlIEJQRl9KRVE6XG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDY2MDgpO1x0XHRcdC8qIGJuZS5zIC4mIzQzOzggKi9cbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSB8IHNfbG8pOyAvKiBjbXAubCBzX2xvLCBkX2xvICovXG4mIzQzO1x0XHRcdEVNSVRfSk1QMzIoMHg2NzAwKTtcdFx0XHQvKiBiZXEubCAqL1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgQlBGX0pORTpcbiYjNDM7XHRcdFx0RU1JVF9KTVAzMigweDY2MDApO1x0XHRcdC8qIGJuZS5sICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NjYwMCk7XHRcdFx0LyogYm5lLmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9KR1Q6XG4mIzQzO1x0XHRcdEVNSVRfSk1QMzIoMHg2MjAwKTtcdFx0XHQvKiBiaGkubCAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg2NTA4KTtcdFx0XHQvKiBiY3MucyAuJiM0Mzs4ICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NjIwMCk7XHRcdFx0LyogYmhpLmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9KR0U6XG4mIzQzO1x0XHRcdEVNSVRfSk1QMzIoMHg2MjAwKTtcdFx0XHQvKiBiaGkubCAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg2NTA4KTtcdFx0XHQvKiBiY3MucyAuJiM0Mzs4ICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NjQwMCk7XHRcdFx0LyogYmNjLmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9KTFQ6XG4mIzQzO1x0XHRcdEVNSVRfSk1QMzIoMHg2NTAwKTtcdFx0XHQvKiBiY3MubCAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg2MjA4KTtcdFx0XHQvKiBiaGkucyAuJiM0Mzs4ICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NjUwMCk7XHRcdFx0LyogYmNzLmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9KTEU6XG4mIzQzO1x0XHRcdEVNSVRfSk1QMzIoMHg2NTAwKTtcdFx0XHQvKiBiY3MubCAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg2MjA4KTtcdFx0XHQvKiBiaGkucyAuJiM0Mzs4ICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NjMwMCk7XHRcdFx0LyogYmxzLmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9KU0dUOlxuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NmUwMCk7XHRcdFx0LyogYmd0LmwgKi9cbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4NmQwOCk7XHRcdFx0LyogYmx0LnMgLiYjNDM7OCAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi9cbiYjNDM7XHRcdFx0RU1JVF9KTVAzMigweDYyMDApO1x0XHRcdC8qIGJoaS5sICovXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBCUEZfSlNHRTpcbiYjNDM7XHRcdFx0RU1JVF9KTVAzMigweDZlMDApO1x0XHRcdC8qIGJndC5sICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDZkMDgpO1x0XHRcdC8qIGJsdC5zIC4mIzQzOzggKi9cbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSB8IHNfbG8pOyAvKiBjbXAubCBzX2xvLCBkX2xvICovXG4mIzQzO1x0XHRcdEVNSVRfSk1QMzIoMHg2NDAwKTtcdFx0XHQvKiBiY2MubCAqL1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgQlBGX0pTTFQ6XG4mIzQzO1x0XHRcdEVNSVRfSk1QMzIoMHg2ZDAwKTtcdFx0XHQvKiBibHQubCAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg2ZTA4KTtcdFx0XHQvKiBiZ3QucyAuJiM0Mzs4ICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NjUwMCk7XHRcdFx0LyogYmNzLmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9KU0xFOlxuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NmQwMCk7XHRcdFx0LyogYmx0LmwgKi9cbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4NmUwOCk7XHRcdFx0LyogYmd0LnMgLiYjNDM7OCAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi9cbiYjNDM7XHRcdFx0RU1JVF9KTVAzMigweDYzMDApO1x0XHRcdC8qIGJscy5sICovXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHQjdW5kZWYgRU1JVF9KTVAzMlxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVtaXRfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzOCBhcmdfcmVnc1tdID0geyBCUEZfUkVHXzUsIEJQRl9SRUdfNCwgQlBGX1JFR18zLCBCUEZfUkVHXzIsIEJQRl9SRUdfMSB9O1xuJiM0MztcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcbiYjNDM7XHRib29sIGV4dHJhX3Bhc3MgPSBjdHgtXHUwMDNlcHJvZy1cdTAwM2VqaXRlZDtcbiYjNDM7XHR1NjQgZnVuY19hZGRyO1xuJiM0MztcdGJvb2wgZml4ZWQ7XG4mIzQzO1x0aW50IGksIGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX2ppdF9nZXRfZnVuY19hZGRyKGN0eC1cdTAwM2Vwcm9nLCBpbnNuLCBleHRyYV9wYXNzLCBcdTAwMjZmdW5jX2FkZHIsIFx1MDAyNmZpeGVkKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgNTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHM4ICpyZWcgPSBicGYybTY4a1thcmdfcmVnc1tpXV07XG4mIzQzO1x0XHRzOCBkX2xvID0gYnBmX2dldF9yZWczMihyZWdbMV0sIHRtcDFbMV0sIGN0eCk7XG4mIzQzO1x0XHRzOCBkX2hpID0gYnBmX2dldF9yZWczMihyZWdbMF0sIHRtcDFbMF0sIGN0eCk7XG4mIzQzO1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IGRfbG8pO1x0XHRcdC8qIG1vdmUubCBkX2xvLCAtKCVzcCkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBkX2hpKTtcdFx0XHQvKiBtb3ZlLmwgZF9oaSwgLSglc3ApICovXG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHgyMDdjKTtcdFx0XHRcdFx0LyogbW92ZWEubCAjZnVuY19hZGRyLCAlYTAgKi9cbiYjNDM7XHRlbWl0XzMyKGN0eCwgKHUzMilmdW5jX2FkZHIpO1xuJiM0MztcbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHg0ZTkwKTtcdFx0XHRcdFx0LyoganNyICglYTApICovXG4mIzQzO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDRmZWYpO1x0XHRcdFx0XHQvKiBsZWEgNDAoJXNwKSwgJXNwICovXG4mIzQzO1x0ZW1pdF8xNihjdHgsIDQwKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGluc24tXHUwMDNlc3JjX3JlZyAhPSBCUEZfUFNFVURPX0NBTEwpXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHhjMzQwKTtcdFx0XHRcdFx0LyogZXhnICVkMCwgJWQxICovXG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBidWlsZF9wcm9sb2d1ZShzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGJwZl9zdGFjayA9IE1BWF9CUEZfU1RBQ0s7XG4mIzQzO1x0aW50IHRvdGFsX3N0YWNrID0gU0NSQVRDSF9TSVpFICYjNDM7IGJwZl9zdGFjaztcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4NzAyMSk7XHRcdFx0XHRcdC8qIG1vdmVxICMzMywgJWQwICovXG4mIzQzO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDRlNTYpO1x0XHRcdFx0XHQvKiBsaW5rICVhNiwgIy10b3RhbF9zdGFjayAqL1xuJiM0MztcdGVtaXRfMTYoY3R4LCAtdG90YWxfc3RhY2spO1xuJiM0MztcbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHg0OGU3KTtcdFx0XHRcdFx0LyogbW92ZW0ubCBkMi1kNSwgLSglc3ApICovXG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4M2MwMCk7XG4mIzQzO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDJkNDApO1x0XHRcdFx0XHQvKiBtb3ZlLmwgJWQwLCBvZmYoJWZwKSAqL1xuJiM0MztcdGVtaXRfMTYoY3R4LCAodTE2KVNUQUNLX09GRlNFVChCUEZfVENfTE8pKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGN0eC1cdTAwM2Vwcm9nLVx1MDAzZWlzX2Z1bmMpIHtcbiYjNDM7XHRcdGNvbnN0IHM4IGFyZ19yZWdzW10gPSB7IEJQRl9SRUdfMSwgQlBGX1JFR18yLCBCUEZfUkVHXzMsIEJQRl9SRUdfNCwgQlBGX1JFR181IH07XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgNTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aW50IG9mZnNldCA9IDggJiM0MzsgaSAqIDg7XG4mIzQzO1x0XHRcdGNvbnN0IHM4ICpyZWcgPSBicGYybTY4a1thcmdfcmVnc1tpXV07XG4mIzQzO1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDJlKTsgLyogbW92ZS5sIG9mZnNldCglZnApLCAlZDAgKi9cbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIG9mZnNldCk7XG4mIzQzO1x0XHRcdGJwZl9wdXRfcmVnMzIocmVnWzBdLCBNNjhLX0QwLCBjdHgpO1xuJiM0MztcbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4MjAyZSk7IC8qIG1vdmUubCBvZmZzZXQmIzQzOzQoJWZwKSwgJWQwICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCBvZmZzZXQgJiM0MzsgNCk7XG4mIzQzO1x0XHRcdGJwZl9wdXRfcmVnMzIocmVnWzFdLCBNNjhLX0QwLCBjdHgpO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyMDJlKTtcdFx0XHRcdC8qIG1vdmUubCA4KCVmcCksICVkMCAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDgpO1xuJiM0MztcdFx0YnBmX3B1dF9yZWczMihicGYybTY4a1tCUEZfUkVHXzFdWzFdLCBNNjhLX0QwLCBjdHgpO1xuJiM0MztcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDcwMDAgfCAoTTY4S19EMCBcdTAwM2NcdTAwM2MgOSkpO1x0XHRcdC8qIG1vdmVxICMwLCAlZDAgKi9cbiYjNDM7XHRcdGJwZl9wdXRfcmVnMzIoYnBmMm02OGtbQlBGX1JFR18xXVswXSwgTTY4S19EMCwgY3R4KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDQxZWUpO1x0XHRcdFx0XHQvKiBsZWEgLVNDUkFUQ0hfU0laRSglZnApLCAlYTAgKi9cbiYjNDM7XHRlbWl0XzE2KGN0eCwgLVNDUkFUQ0hfU0laRSk7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4MjAwOCk7XHRcdFx0XHRcdC8qIG1vdmUubCAlYTAsICVkMCAqL1xuJiM0MztcbiYjNDM7XHRicGZfcHV0X3JlZzMyKGJwZjJtNjhrW0JQRl9SRUdfMTBdWzFdLCBNNjhLX0QwLCBjdHgpO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDcwMDAgfCAoTTY4S19EMCBcdTAwM2NcdTAwM2MgOSkpO1x0XHRcdC8qIG1vdmVxICMwLCAlZDAgKi9cbiYjNDM7XHRicGZfcHV0X3JlZzMyKGJwZjJtNjhrW0JQRl9SRUdfMTBdWzBdLCBNNjhLX0QwLCBjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBidWlsZF9lcGlsb2d1ZShzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4NGNkZik7XHRcdFx0XHRcdC8qIG1vdmVtLmwgKCVzcCkmIzQzOywgZDItZDUgKi9cbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHgwMDNjKTtcbiYjNDM7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4NGU1ZSk7XHRcdFx0XHRcdC8qIHVubGsgJWZwICovXG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4NGU3NSk7XHRcdFx0XHRcdC8qIHJ0cyAqL1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgaSlcbiYjNDM7e1xuJiM0MztcdHU4IGNvZGUgPSBpbnNuLVx1MDAzZWNvZGU7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoY29kZSkge1xuJiM0MztcdGNhc2UgQlBGX0FMVSB8IEJQRl9ORUc6XG4mIzQzO1x0XHRlbWl0X2FsdTMyX25lZyhpbnNuLCBjdHgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTkVHOlxuJiM0MztcdFx0ZW1pdF9hbHU2NF9uZWcoaW5zbiwgY3R4KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX1g6XG4mIzQzO1x0Y2FzZSBCUEZfQUxVIHwgQlBGX0FERCB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0FMVSB8IEJQRl9TVUIgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9BTFUgfCBCUEZfQU5EIHwgQlBGX1g6XG4mIzQzO1x0Y2FzZSBCUEZfQUxVIHwgQlBGX09SICB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0FMVSB8IEJQRl9YT1IgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9BTFUgfCBCUEZfTFNIIHwgQlBGX1g6XG4mIzQzO1x0Y2FzZSBCUEZfQUxVIHwgQlBGX1JTSCB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0FMVSB8IEJQRl9BUlNIIHwgQlBGX1g6XG4mIzQzO1x0XHRlbWl0X2FsdTMyX3goaW5zbiwgY3R4KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX0s6XG4mIzQzO1x0Y2FzZSBCUEZfQUxVIHwgQlBGX0FERCB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0FMVSB8IEJQRl9TVUIgfCBCUEZfSzpcbiYjNDM7XHRjYXNlIEJQRl9BTFUgfCBCUEZfQU5EIHwgQlBGX0s6XG4mIzQzO1x0Y2FzZSBCUEZfQUxVIHwgQlBGX09SICB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0FMVSB8IEJQRl9YT1IgfCBCUEZfSzpcbiYjNDM7XHRjYXNlIEJQRl9BTFUgfCBCUEZfTFNIIHwgQlBGX0s6XG4mIzQzO1x0Y2FzZSBCUEZfQUxVIHwgQlBGX1JTSCB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0FMVSB8IEJQRl9BUlNIIHwgQlBGX0s6XG4mIzQzO1x0XHRlbWl0X2FsdTMyX2soaW5zbiwgY3R4KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9BREQgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9TVUIgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9BTkQgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9PUiAgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9YT1IgfCBCUEZfWDpcbiYjNDM7XHRcdGVtaXRfYWx1NjRfeChpbnNuLCBjdHgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0FERCB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX1NVQiB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0FORCB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX09SICB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX1hPUiB8IEJQRl9LOlxuJiM0MztcdFx0ZW1pdF9hbHU2NF9rKGluc24sIGN0eCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTFNIIHwgQlBGX1g6XG4mIzQzO1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfUlNIIHwgQlBGX1g6XG4mIzQzO1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfQVJTSCB8IEJQRl9YOlxuJiM0MztcdFx0ZW1pdF9hbHU2NF9zaGlmdChpbnNuLCBjdHgsIGZhbHNlKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9MU0ggfCBCUEZfSzpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9SU0ggfCBCUEZfSzpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9BUlNIIHwgQlBGX0s6XG4mIzQzO1x0XHRlbWl0X2FsdTY0X3NoaWZ0KGluc24sIGN0eCwgdHJ1ZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0Y2FzZSBCUEZfQUxVIHwgQlBGX01VTCB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0FMVSB8IEJQRl9ESVYgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9EIHwgQlBGX1g6XG4mIzQzO1x0Y2FzZSBCUEZfQUxVIHwgQlBGX01VTCB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0FMVSB8IEJQRl9ESVYgfCBCUEZfSzpcbiYjNDM7XHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9EIHwgQlBGX0s6XG4mIzQzO1x0XHRlbWl0X21hdGhfY2FsbChpbnNuLCBjdHgsIGZhbHNlKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NVUwgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9ESVYgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NT0QgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NVUwgfCBCUEZfSzpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9ESVYgfCBCUEZfSzpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NT0QgfCBCUEZfSzpcbiYjNDM7XHRcdGVtaXRfbWF0aF9jYWxsKGluc24sIGN0eCwgdHJ1ZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0Y2FzZSBCUEZfQUxVIHwgQlBGX0VORCB8IEJQRl9UT19CRTpcbiYjNDM7XHRjYXNlIEJQRl9BTFUgfCBCUEZfRU5EIHwgQlBGX1RPX0xFOlxuJiM0MztcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0VORCB8IEJQRl9UT19CRTpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9FTkQgfCBCUEZfVE9fTEU6XG4mIzQzO1x0XHRlbWl0X2JwZl9lbmQoaW5zbiwgY3R4KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIEJQRl9MRCB8IEJQRl9JTU0gfCBCUEZfRFc6IHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbjEgPSBpbnNuICYjNDM7IDE7XG4mIzQzO1x0XHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbiYjNDM7XHRcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcbiYjNDM7XHRcdHM4IGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcbiYjNDM7XHRcdHM4IGRfaGkgPSBicGZfZ2V0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcbiYjNDM7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpKTtcdFx0XHQvKiBtb3ZlLmwgI2ltbSwgZF9sbyAqL1xuJiM0MztcdFx0ZW1pdF8zMihjdHgsIGluc24tXHUwMDNlaW1tKTtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkpO1x0XHRcdC8qIG1vdmUubCAjaW1tLCBkX2hpICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgaW5zbjEtXHUwMDNlaW1tKTtcbiYjNDM7XG4mIzQzO1x0XHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9sbywgY3R4KTtcbiYjNDM7XHRcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0I6XG4mIzQzO1x0Y2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9IOlxuJiM0MztcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfVzpcbiYjNDM7XHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0RXOlxuJiM0MztcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9COlxuJiM0MztcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9IOlxuJiM0MztcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9XOlxuJiM0MztcdFx0ZW1pdF9sZHgoaW5zbiwgY3R4KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX0I6XG4mIzQzO1x0Y2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9IOlxuJiM0MztcdGNhc2UgQlBGX1NUWCB8IEJQRl9NRU0gfCBCUEZfVzpcbiYjNDM7XHRjYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX0RXOlxuJiM0MztcdFx0ZW1pdF9zdHgoaW5zbiwgY3R4KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfQjpcbiYjNDM7XHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfSDpcbiYjNDM7XHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfVzpcbiYjNDM7XHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfRFc6XG4mIzQzO1x0XHRlbWl0X3N0KGluc24sIGN0eCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9XOlxuJiM0MztcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfRFc6XG4mIzQzO1x0XHRlbWl0X2F0b21pYyhpbnNuLCBjdHgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgQlBGX0pNUCB8IEJQRl9UQUlMX0NBTEw6XG4mIzQzO1x0XHRlbWl0X3RhaWxfY2FsbChpbnNuLCBjdHgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgQlBGX0pNUCB8IEJQRl9KQTpcbiYjNDM7XHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KQTpcbiYjNDM7XHRjYXNlIEJQRl9KTVAgfCBCUEZfSkVRIHwgQlBGX1g6XG4mIzQzO1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0pFUSB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0pNUCB8IEJQRl9KTkUgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9KTVAgfCBCUEZfSk5FIHwgQlBGX0s6XG4mIzQzO1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0pHVCB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUCB8IEJQRl9KR1QgfCBCUEZfSzpcbiYjNDM7XHRjYXNlIEJQRl9KTVAgfCBCUEZfSkdFIHwgQlBGX1g6XG4mIzQzO1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0pHRSB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0pNUCB8IEJQRl9KTFQgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9KTVAgfCBCUEZfSkxUIHwgQlBGX0s6XG4mIzQzO1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0pMRSB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUCB8IEJQRl9KTEUgfCBCUEZfSzpcbiYjNDM7XHRjYXNlIEJQRl9KTVAgfCBCUEZfSlNHVCB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0dUIHwgQlBGX0s6XG4mIzQzO1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0pTR0UgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9KTVAgfCBCUEZfSlNHRSB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0xUIHwgQlBGX1g6XG4mIzQzO1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0pTTFQgfCBCUEZfSzpcbiYjNDM7XHRjYXNlIEJQRl9KTVAgfCBCUEZfSlNMRSB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0xFIHwgQlBGX0s6XG4mIzQzO1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0pTRVQgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9KTVAgfCBCUEZfSlNFVCB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pFUSB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pFUSB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pORSB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pORSB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pHVCB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pHVCB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pHRSB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pHRSB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pMVCB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pMVCB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pMRSB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pMRSB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pTR1QgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KU0dUIHwgQlBGX0s6XG4mIzQzO1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNHRSB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pTR0UgfCBCUEZfSzpcbiYjNDM7XHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KU0xUIHwgQlBGX1g6XG4mIzQzO1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNMVCB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pTTEUgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KU0xFIHwgQlBGX0s6XG4mIzQzO1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNFVCB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pTRVQgfCBCUEZfSzpcbiYjNDM7XHRcdHJldHVybiBlbWl0X2ptcChpbnNuLCBjdHgsIGkpO1xuJiM0MztcbiYjNDM7XHRjYXNlIEJQRl9KTVAgfCBCUEZfQ0FMTDpcbiYjNDM7XHRcdHJldHVybiBlbWl0X2NhbGwoaW5zbiwgY3R4KTtcbiYjNDM7XG4mIzQzO1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0VYSVQ6XG4mIzQzO1x0XHRidWlsZF9lcGlsb2d1ZShjdHgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBidWlsZF9ib2R5KHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBjdHgtXHUwMDNlcHJvZztcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvZy1cdTAwM2VsZW47IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBcdTAwMjZwcm9nLVx1MDAzZWluc25zaVtpXTtcbiYjNDM7XHRcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFjdHgtXHUwMDNldGFyZ2V0KVxuJiM0MztcdFx0XHRjdHgtXHUwMDNlb2Zmc2V0c1tpXSA9IGN0eC1cdTAwM2VpZHg7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gYnVpbGRfaW5zbihpbnNuLCBjdHgsIGkpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfTEQgfCBCUEZfSU1NIHwgQlBGX0RXKSkge1xuJiM0MztcdFx0XHRpJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0aWYgKCFjdHgtXHUwMDNldGFyZ2V0KVxuJiM0MztcdFx0XHRcdGN0eC1cdTAwM2VvZmZzZXRzW2ldID0gY3R4LVx1MDAzZWlkeDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghY3R4LVx1MDAzZXRhcmdldClcbiYjNDM7XHRcdGN0eC1cdTAwM2VvZmZzZXRzW3Byb2ctXHUwMDNlbGVuXSA9IGN0eC1cdTAwM2VpZHg7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztib29sIGJwZl9qaXRfbmVlZHNfemV4dCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGppdF9maWxsX2hvbGUodm9pZCAqYXJlYSwgdW5zaWduZWQgaW50IHNpemUpXG4mIzQzO3tcbiYjNDM7XHR1MTYgKnB0cjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChwdHIgPSBhcmVhOyBzaXplIFx1MDAzZT0gMjsgc2l6ZSAtPSAyKVxuJiM0MztcdFx0KnB0ciYjNDM7JiM0MzsgPSAweDRhZmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKmhlYWRlcjtcbiYjNDM7XHRzdHJ1Y3Qgaml0X2N0eCBjdHg7XG4mIzQzO1x0dW5zaWduZWQgaW50IGltYWdlX3NpemU7XG4mIzQzO1x0dTggKmltYWdlX3B0cjtcbiYjNDM7XHRib29sIGV4dHJhX3Bhc3MgPSBwcm9nLVx1MDAzZWppdGVkO1xuJiM0MztcbiYjNDM7XHRpZiAoIXByb2ctXHUwMDNlaml0X3JlcXVlc3RlZClcbiYjNDM7XHRcdHJldHVybiBwcm9nO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvZy1cdTAwM2VqaXRlZCBcdTAwMjZcdTAwMjYgIXByb2ctXHUwMDNlYXV4LVx1MDAzZWZ1bmMpXG4mIzQzO1x0XHRyZXR1cm4gcHJvZztcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNmN0eCwgMCwgc2l6ZW9mKGN0eCkpO1xuJiM0MztcdGN0eC5wcm9nID0gcHJvZztcbiYjNDM7XG4mIzQzO1x0Y3R4Lm9mZnNldHMgPSBrdmNhbGxvYyhwcm9nLVx1MDAzZWxlbiAmIzQzOyAxLCBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFjdHgub2Zmc2V0cylcbiYjNDM7XHRcdHJldHVybiBwcm9nO1xuJiM0MztcbiYjNDM7XHRidWlsZF9wcm9sb2d1ZShcdTAwMjZjdHgpO1xuJiM0MztcdGlmIChidWlsZF9ib2R5KFx1MDAyNmN0eCkgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dF9vZmY7XG4mIzQzO1x0YnVpbGRfZXBpbG9ndWUoXHUwMDI2Y3R4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGV4dHJhX3Bhc3MpIHtcbiYjNDM7XHRcdGhlYWRlciA9IHByb2ctXHUwMDNlYXV4LVx1MDAzZWppdF9kYXRhO1xuJiM0MztcdFx0aW1hZ2VfcHRyID0gKHU4ICopcHJvZy1cdTAwM2VicGZfZnVuYztcbiYjNDM7XHRcdGltYWdlX3NpemUgPSBwcm9nLVx1MDAzZWppdGVkX2xlbjtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aW1hZ2Vfc2l6ZSA9IGN0eC5pZHggKiAyO1xuJiM0MztcdFx0aGVhZGVyID0gYnBmX2ppdF9iaW5hcnlfYWxsb2MoaW1hZ2Vfc2l6ZSwgXHUwMDI2aW1hZ2VfcHRyLCAyLCBqaXRfZmlsbF9ob2xlKTtcbiYjNDM7XHRcdGlmICghaGVhZGVyKVxuJiM0MztcdFx0XHRnb3RvIG91dF9vZmY7XG4mIzQzO1x0XHRwcm9nLVx1MDAzZWF1eC1cdTAwM2VqaXRfZGF0YSA9IGhlYWRlcjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGN0eC50YXJnZXQgPSAodTE2ICopaW1hZ2VfcHRyO1xuJiM0MztcdGN0eC5pZHggPSAwO1xuJiM0MztcbiYjNDM7XHRidWlsZF9wcm9sb2d1ZShcdTAwMjZjdHgpO1xuJiM0MztcdGlmIChidWlsZF9ib2R5KFx1MDAyNmN0eCkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGJwZl9qaXRfYmluYXJ5X2ZyZWUoaGVhZGVyKTtcbiYjNDM7XHRcdHByb2ctXHUwMDNlYXV4LVx1MDAzZWppdF9kYXRhID0gTlVMTDtcbiYjNDM7XHRcdHByb2ctXHUwMDNlYnBmX2Z1bmMgPSBOVUxMO1xuJiM0MztcdFx0cHJvZy1cdTAwM2VqaXRlZCA9IDA7XG4mIzQzO1x0XHRwcm9nLVx1MDAzZWppdGVkX2xlbiA9IDA7XG4mIzQzO1x0XHRnb3RvIG91dF9vZmY7XG4mIzQzO1x0fVxuJiM0MztcdGJ1aWxkX2VwaWxvZ3VlKFx1MDAyNmN0eCk7XG4mIzQzO1xuJiM0MztcdGZsdXNoX2ljYWNoZV9yYW5nZSgodTMyKWhlYWRlciwgKHUzMikoY3R4LnRhcmdldCAmIzQzOyBjdHguaWR4KSk7XG4mIzQzO1xuJiM0MztcdGlmIChicGZfaml0X2VuYWJsZSBcdTAwM2UgMSlcbiYjNDM7XHRcdGJwZl9qaXRfZHVtcChwcm9nLVx1MDAzZWxlbiwgaW1hZ2Vfc2l6ZSwgMiwgY3R4LnRhcmdldCk7XG4mIzQzO1xuJiM0MztcdGlmICgoIXByb2ctXHUwMDNlYXV4LVx1MDAzZWZ1bmMgfHwgZXh0cmFfcGFzcykgXHUwMDI2XHUwMDI2IGJwZl9qaXRfYmluYXJ5X2xvY2tfcm8oaGVhZGVyKSkge1xuJiM0MztcdFx0YnBmX2ppdF9iaW5hcnlfZnJlZShoZWFkZXIpO1xuJiM0MztcdFx0cHJvZy1cdTAwM2VicGZfZnVuYyA9IE5VTEw7XG4mIzQzO1x0XHRwcm9nLVx1MDAzZWppdGVkID0gMDtcbiYjNDM7XHRcdHByb2ctXHUwMDNlaml0ZWRfbGVuID0gMDtcbiYjNDM7XHRcdHByb2ctXHUwMDNlYXV4LVx1MDAzZWppdF9kYXRhID0gTlVMTDtcbiYjNDM7XHRcdGdvdG8gb3V0X29mZjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByb2ctXHUwMDNlYnBmX2Z1bmMgPSAodm9pZCAqKWN0eC50YXJnZXQ7XG4mIzQzO1x0cHJvZy1cdTAwM2VqaXRlZCA9IDE7XG4mIzQzO1x0cHJvZy1cdTAwM2VqaXRlZF9sZW4gPSBpbWFnZV9zaXplO1xuJiM0MztcbiYjNDM7b3V0X29mZjpcbiYjNDM7XHRrdmZyZWUoY3R4Lm9mZnNldHMpO1xuJiM0MztcdHJldHVybiBwcm9nO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDQ6NTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfbmVlZHNfemV4dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBKSVQgY29tcGlsZXIgZm9yIHRoZSBtNjhrIGFyY2hpdGVjdHVyZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGR1cmluZyBCUEYgcHJvZ3JhbSBsb2FkaW5nIHdoZW4gSklUIGlzIGVuYWJsZWQsIGFuZCBjYW4gYmUgdGVzdGVkIGluIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYzcwY2I2ZDM4Nzc3ZDVmNTE4ZjUyZjgzNDExZTRlYWJkZjRkN2QwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMzAgMDQ6NTA6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDJmYjFjNzVhZmQxNjMuLjUzMDU1MTgzNGMxNjMgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC00NzAxLDYgJiM0Mzs0NzAxLDEyIEBAIEw6CWJwZkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWFyY2gvbG9vbmdhcmNoL25ldC8KIAomIzQzO0JQRiBKSVQgZm9yIE02OEsKJiM0MztNOglLdWFuLVdlaSBDaGl1ICZsdDt2aXNpdG9yY2t3QGdtYWlsLmNvbSZndDsKJiM0MztMOglicGZAdmdlci5rZXJuZWwub3JnCiYjNDM7UzoJTWFpbnRhaW5lZAomIzQzO0Y6CWFyY2gvbTY4ay9uZXQvCiYjNDM7CiBCUEYgSklUIGZvciBNSVBTICgzMi1CSVQgQU5EIDY0LUJJVCkKIE06CUpvaGFuIEFsbWJsYWRoICZsdDtqb2hhbi5hbG1ibGFkaEBhbnlmaW5ldHdvcmtzLmNvbSZndDsKIE06CVBhdWwgQnVydG9uICZsdDtwYXVsYnVydG9uQGtlcm5lbC5vcmcmZ3Q7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvS2J1aWxkIGIvYXJjaC9tNjhrL0tidWlsZAppbmRleCA3NzYyYWY5ZjZkZWZlLi4wNThhZDQxYTcyOGM1IDEwMDY0NAotLS0gYS9hcmNoL202OGsvS2J1aWxkCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbTY4ay9LYnVpbGQKQEAgLTEsNSAmIzQzOzEsNSBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci1vYmoteQkJCQkmIzQzOz0ga2VybmVsLyBtbS8KJiM0MztvYmoteQkJCQkmIzQzOz0ga2VybmVsLyBtbS8gbmV0Lwogb2JqLSQoQ09ORklHX1E0MCkJCSYjNDM7PSBxNDAvCiBvYmotJChDT05GSUdfQU1JR0EpCQkmIzQzOz0gYW1pZ2EvCiBvYmotJChDT05GSUdfQVRBUkkpCQkmIzQzOz0gYXRhcmkvCmRpZmYgLS1naXQgYS9hcmNoL202OGsvS2NvbmZpZyBiL2FyY2gvbTY4ay9LY29uZmlnCmluZGV4IDExODM1ZWI1OWQ5NGQuLmRhNDNkNjY2MGM1Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbTY4ay9LY29uZmlnCkBAIC04LDYgJiM0Mzs4LDcgQEAgY29uZmlnIE02OEsKIAlzZWxlY3QgQVJDSF9IQVNfQ1BVX0ZJTkFMSVpFX0lOSVQgaWYgTU1VCiAJc2VsZWN0IEFSQ0hfSEFTX0NVUlJFTlRfU1RBQ0tfUE9JTlRFUgogCXNlbGVjdCBBUkNIX0hBU19ETUFfUFJFUF9DT0hFUkVOVCBpZiBNNjhLX05PTkNPSEVSRU5UX0RNQSAmYW1wOyZhbXA7ICFDT0xERklSRQomIzQzOwlzZWxlY3QgSEFWRV9FQlBGX0pJVCBpZiAoIUNPTERGSVJFICZhbXA7JmFtcDsgIU02ODAwMCkKIAlzZWxlY3QgQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0RFVklDRSBpZiBNNjhLX05PTkNPSEVSRU5UX0RNQQogCXNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIRyBpZiBSTVdfSU5TTlMKIAlzZWxlY3QgQVJDSF9NSUdIVF9IQVZFX1BDX1BBUlBPUlQgaWYgSVNBCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbmV0L01ha2VmaWxlIGIvYXJjaC9tNjhrL25ldC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5lYzViMTQ3NjMzMTY3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9tNjhrL25ldC9NYWtlZmlsZQpAQCAtMCwwICYjNDM7MSwyIEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBicGZfaml0X2NvbXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNmQ2NDdiYmE5NmViNAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTAsMCAmIzQzOzEsMTYzMCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIEJQRiBKSVQgY29tcGlsZXIgZm9yIG02OGsKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBLdWFuLVdlaSBDaGl1ICZsdDt2aXNpdG9yY2t3QGdtYWlsLmNvbSZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZpbHRlci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pcnFmbGFncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9jYWNoZWZsdXNoLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21hdGg2NC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saW1pdHMuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIFNUQUNLX09GRlNFVChrKSAoLTQgLSAoNCAqIChrKSkpCiYjNDM7CiYjNDM7ZW51bSB7CiYjNDM7CUJQRl9SMV9ISSwgQlBGX1IxX0xPLAomIzQzOwlCUEZfUjJfSEksIEJQRl9SMl9MTywKJiM0MzsJQlBGX1IzX0hJLCBCUEZfUjNfTE8sCiYjNDM7CUJQRl9SNF9ISSwgQlBGX1I0X0xPLAomIzQzOwlCUEZfUjVfSEksIEJQRl9SNV9MTywKJiM0MzsJQlBGX1I2X0hJLCBCUEZfUjZfTE8sCiYjNDM7CUJQRl9SN19ISSwgQlBGX1I3X0xPLAomIzQzOwlCUEZfUjhfSEksIEJQRl9SOF9MTywKJiM0MzsJQlBGX1I5X0hJLCBCUEZfUjlfTE8sCiYjNDM7CUJQRl9SMTBfSEksIEJQRl9SMTBfTE8sCiYjNDM7CUJQRl9BWF9ISSwgQlBGX0FYX0xPLAomIzQzOwlCUEZfVENfSEksIEJQRl9UQ19MTywKJiM0MzsJQlBGX0pJVF9TQ1JBVENIX1JFR1MsCiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIFNDUkFUQ0hfU0laRSAoQlBGX0pJVF9TQ1JBVENIX1JFR1MgKiA0KQomIzQzOwomIzQzOyNkZWZpbmUgVE1QX1JFR18xIDE0CiYjNDM7I2RlZmluZSBUTVBfUkVHXzIgMTUKJiM0MzsKJiM0MzsjZGVmaW5lIE02OEtfRDAgMAomIzQzOyNkZWZpbmUgTTY4S19EMSAxCiYjNDM7I2RlZmluZSBNNjhLX0QyIDIKJiM0MzsjZGVmaW5lIE02OEtfRDMgMwomIzQzOyNkZWZpbmUgTTY4S19ENCA0CiYjNDM7I2RlZmluZSBNNjhLX0Q1IDUKJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgczggYnBmMm02OGtbMTZdWzJdID0gewomIzQzOwlbQlBGX1JFR18wXSAgPSB7TTY4S19EMSwgTTY4S19EMH0sCiYjNDM7CVtCUEZfUkVHXzFdICA9IHtTVEFDS19PRkZTRVQoQlBGX1IxX0hJKSwgIFNUQUNLX09GRlNFVChCUEZfUjFfTE8pfSwKJiM0MzsJW0JQRl9SRUdfMl0gID0ge1NUQUNLX09GRlNFVChCUEZfUjJfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SMl9MTyl9LAomIzQzOwlbQlBGX1JFR18zXSAgPSB7U1RBQ0tfT0ZGU0VUKEJQRl9SM19ISSksICBTVEFDS19PRkZTRVQoQlBGX1IzX0xPKX0sCiYjNDM7CVtCUEZfUkVHXzRdICA9IHtTVEFDS19PRkZTRVQoQlBGX1I0X0hJKSwgIFNUQUNLX09GRlNFVChCUEZfUjRfTE8pfSwKJiM0MzsJW0JQRl9SRUdfNV0gID0ge1NUQUNLX09GRlNFVChCUEZfUjVfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SNV9MTyl9LAomIzQzOwlbQlBGX1JFR182XSAgPSB7U1RBQ0tfT0ZGU0VUKEJQRl9SNl9ISSksICBTVEFDS19PRkZTRVQoQlBGX1I2X0xPKX0sCiYjNDM7CVtCUEZfUkVHXzddICA9IHtTVEFDS19PRkZTRVQoQlBGX1I3X0hJKSwgIFNUQUNLX09GRlNFVChCUEZfUjdfTE8pfSwKJiM0MzsJW0JQRl9SRUdfOF0gID0ge1NUQUNLX09GRlNFVChCUEZfUjhfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SOF9MTyl9LAomIzQzOwlbQlBGX1JFR185XSAgPSB7U1RBQ0tfT0ZGU0VUKEJQRl9SOV9ISSksICBTVEFDS19PRkZTRVQoQlBGX1I5X0xPKX0sCiYjNDM7CVtCUEZfUkVHXzEwXSA9IHtTVEFDS19PRkZTRVQoQlBGX1IxMF9ISSksIFNUQUNLX09GRlNFVChCUEZfUjEwX0xPKX0sCiYjNDM7CVtCUEZfUkVHX0FYXSA9IHtTVEFDS19PRkZTRVQoQlBGX0FYX0hJKSwgIFNUQUNLX09GRlNFVChCUEZfQVhfTE8pfSwKJiM0MzsJW1RNUF9SRUdfMV0gID0ge002OEtfRDMsIE02OEtfRDJ9LAomIzQzOwlbVE1QX1JFR18yXSAgPSB7TTY4S19ENSwgTTY4S19ENH0sCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3Qgaml0X2N0eCB7CiYjNDM7CWNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZzsKJiM0MzsJdTE2ICp0YXJnZXQ7CiYjNDM7CXVuc2lnbmVkIGludCBpZHg7CiYjNDM7CWludCAqb2Zmc2V0czsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBub2lubGluZSB1MzIgaml0X211bDMyKHUzMiBhLCB1MzIgYikKJiM0Mzt7CiYjNDM7CXJldHVybiBhICogYjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIG5vaW5saW5lIHUzMiBqaXRfZGl2MzIodTMyIGEsIHUzMiBiKQomIzQzO3sKJiM0MzsJcmV0dXJuIGIgPyBhIC8gYiA6IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBub2lubGluZSB1MzIgaml0X21vZDMyKHUzMiBhLCB1MzIgYikKJiM0Mzt7CiYjNDM7CXJldHVybiBiID8gYSAlIGIgOiBhOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbm9pbmxpbmUgczMyIGppdF9zZGl2MzIoczMyIGEsIHMzMiBiKQomIzQzO3sKJiM0MzsJaWYgKGIgPT0gMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlpZiAoYSA9PSBTMzJfTUlOICZhbXA7JmFtcDsgYiA9PSAtMSkKJiM0MzsJCXJldHVybiBTMzJfTUlOOwomIzQzOwlyZXR1cm4gYSAvIGI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBub2lubGluZSBzMzIgaml0X3Ntb2QzMihzMzIgYSwgczMyIGIpCiYjNDM7ewomIzQzOwlpZiAoYiA9PSAwKQomIzQzOwkJcmV0dXJuIGE7CiYjNDM7CWlmIChhID09IFMzMl9NSU4gJmFtcDsmYW1wOyBiID09IC0xKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiBhICUgYjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIG5vaW5saW5lIHU2NCBqaXRfbXVsNjQodTY0IGEsIHU2NCBiKQomIzQzO3sKJiM0MzsJcmV0dXJuIGEgKiBiOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbm9pbmxpbmUgdTY0IGppdF9kaXY2NCh1NjQgYSwgdTY0IGIpCiYjNDM7ewomIzQzOwlyZXR1cm4gYiA/IGRpdjY0X3U2NChhLCBiKSA6IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBub2lubGluZSBzNjQgaml0X3NkaXY2NChzNjQgYSwgczY0IGIpCiYjNDM7ewomIzQzOwlpZiAoYiA9PSAwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWlmIChhID09IFM2NF9NSU4gJmFtcDsmYW1wOyBiID09IC0xKQomIzQzOwkJcmV0dXJuIFM2NF9NSU47CiYjNDM7CXJldHVybiBkaXY2NF9zNjQoYSwgYik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBub2lubGluZSB1NjQgaml0X21vZDY0KHU2NCBhLCB1NjQgYikKJiM0Mzt7CiYjNDM7CXU2NCByZW07CiYjNDM7CiYjNDM7CWlmIChiID09IDApCiYjNDM7CQlyZXR1cm4gYTsKJiM0MzsJZGl2NjRfdTY0X3JlbShhLCBiLCAmYW1wO3JlbSk7CiYjNDM7CXJldHVybiByZW07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBub2lubGluZSBzNjQgaml0X3Ntb2Q2NChzNjQgYSwgczY0IGIpCiYjNDM7ewomIzQzOwlpZiAoYiA9PSAwKQomIzQzOwkJcmV0dXJuIGE7CiYjNDM7CWlmIChhID09IFM2NF9NSU4gJmFtcDsmYW1wOyBiID09IC0xKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiBhIC0gZGl2NjRfczY0KGEsIGIpICogYjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHUzMiBqaXRfYXRvbWljMzIodTMyICpwdHIsIHUzMiB2YWwsIHUzMiBvcCwgdTMyIGNtcCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXUzMiBvbGQ7CiYjNDM7CiYjNDM7CWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKJiM0MzsJb2xkID0gKnB0cjsKJiM0MzsJc3dpdGNoIChvcCkgewomIzQzOwljYXNlIEJQRl9BREQ6CiYjNDM7CWNhc2UgQlBGX0FERCB8IEJQRl9GRVRDSDoKJiM0MzsJCSpwdHIgJiM0Mzs9IHZhbDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9BTkQ6CiYjNDM7CWNhc2UgQlBGX0FORCB8IEJQRl9GRVRDSDoKJiM0MzsJCSpwdHIgJmFtcDs9IHZhbDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9PUjoKJiM0MzsJY2FzZSBCUEZfT1IgfCBCUEZfRkVUQ0g6CiYjNDM7CQkqcHRyIHw9IHZhbDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9YT1I6CiYjNDM7CWNhc2UgQlBGX1hPUiB8IEJQRl9GRVRDSDoKJiM0MzsJCSpwdHIgXj0gdmFsOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX1hDSEc6CiYjNDM7CQkqcHRyID0gdmFsOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0NNUFhDSEc6CiYjNDM7CQlpZiAob2xkID09IGNtcCkKJiM0MzsJCQkqcHRyID0gdmFsOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwomIzQzOwomIzQzOwlyZXR1cm4gb2xkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTY0IGppdF9hdG9taWM2NCh1MzIgKnB0ciwgdTMyIHZhbF9oaSwgdTMyIHZhbF9sbywgdTMyIG9wLCB1MzIgY21wX2hpLCB1MzIgY21wX2xvKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJdTY0IG9sZCwgdmFsLCBjbXA7CiYjNDM7CXU2NCAqcHRyNjQgPSAodTY0ICopcHRyOwomIzQzOwomIzQzOwl2YWwgPSAoKHU2NCl2YWxfaGkgJmx0OyZsdDsgMzIpIHwgdmFsX2xvOwomIzQzOwljbXAgPSAoKHU2NCljbXBfaGkgJmx0OyZsdDsgMzIpIHwgY21wX2xvOwomIzQzOwomIzQzOwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiYjNDM7CW9sZCA9ICpwdHI2NDsKJiM0MzsJc3dpdGNoIChvcCkgewomIzQzOwljYXNlIEJQRl9BREQ6CiYjNDM7CWNhc2UgQlBGX0FERCB8IEJQRl9GRVRDSDoKJiM0MzsJCSpwdHI2NCAmIzQzOz0gdmFsOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0FORDoKJiM0MzsJY2FzZSBCUEZfQU5EIHwgQlBGX0ZFVENIOgomIzQzOwkJKnB0cjY0ICZhbXA7PSB2YWw7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfT1I6CiYjNDM7CWNhc2UgQlBGX09SIHwgQlBGX0ZFVENIOgomIzQzOwkJKnB0cjY0IHw9IHZhbDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9YT1I6CiYjNDM7CWNhc2UgQlBGX1hPUiB8IEJQRl9GRVRDSDoKJiM0MzsJCSpwdHI2NCBePSB2YWw7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfWENIRzoKJiM0MzsJCSpwdHI2NCA9IHZhbDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9DTVBYQ0hHOgomIzQzOwkJaWYgKG9sZCA9PSBjbXApCiYjNDM7CQkJKnB0cjY0ID0gdmFsOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwomIzQzOwomIzQzOwlyZXR1cm4gb2xkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZW1pdF8xNihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1MTYgaW5zdCkKJiM0Mzt7CiYjNDM7CWlmIChjdHgtJmd0O3RhcmdldCkKJiM0MzsJCWN0eC0mZ3Q7dGFyZ2V0W2N0eC0mZ3Q7aWR4XSA9IGluc3Q7CiYjNDM7CWN0eC0mZ3Q7aWR4JiM0MzsmIzQzOzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVtaXRfMzIoc3RydWN0IGppdF9jdHggKmN0eCwgdTMyIHZhbCkKJiM0Mzt7CiYjNDM7CWVtaXRfMTYoY3R4LCB2YWwgJmd0OyZndDsgMTYpOwomIzQzOwllbWl0XzE2KGN0eCwgdmFsICZhbXA7IDB4ZmZmZik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBpc19zdGFja2VkKHM4IHJlZykKJiM0Mzt7CiYjNDM7CXJldHVybiByZWcgJmx0OyAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgczggYnBmX2dldF9yZWczMihzOCBicGZfcmVnLCBzOCB0bXBfcmVnLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJaWYgKGlzX3N0YWNrZWQoYnBmX3JlZykpIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIwMmUgfCAodG1wX3JlZyAmbHQ7Jmx0OyA5KSk7CQkvKiBtb3ZlLmwgZDE2KCVmcCksIHJlZyAqLwomIzQzOwkJZW1pdF8xNihjdHgsICh1MTYpYnBmX3JlZyk7CiYjNDM7CQlyZXR1cm4gdG1wX3JlZzsKJiM0MzsJfQomIzQzOwlyZXR1cm4gYnBmX3JlZzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYnBmX3B1dF9yZWczMihzOCBicGZfcmVnLCBzOCBzcmNfcmVnLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJaWYgKGlzX3N0YWNrZWQoYnBmX3JlZykpIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDJkNDAgfCBzcmNfcmVnKTsJCQkvKiBtb3ZlLmwgcmVnLCBkMTYoJWZwKSAqLwomIzQzOwkJZW1pdF8xNihjdHgsICh1MTYpYnBmX3JlZyk7CiYjNDM7CX0gZWxzZSBpZiAoYnBmX3JlZyAhPSBzcmNfcmVnKSB7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGJwZl9yZWcgJmx0OyZsdDsgOSkgfCBzcmNfcmVnKTsgLyogbW92ZS5sIHNyYywgZHN0ICovCiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hbHUzMl9uZWcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJY29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tJmd0O2RzdF9yZWddOwomIzQzOwljb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07CiYjNDM7CXM4IGRfcmVnID0gYnBmX2dldF9yZWczMihkc3RbMV0sIHRtcDFbMV0sIGN0eCk7CiYjNDM7CiYjNDM7CWVtaXRfMTYoY3R4LCAweDQ0ODAgfCBkX3JlZyk7CQkJCS8qIG5lZy5sIGRfcmVnICovCiYjNDM7CiYjNDM7CWJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX3JlZywgY3R4KTsKJiM0MzsJZW1pdF8xNihjdHgsIDB4NzAwMCB8ICh0bXAxWzBdICZsdDsmbHQ7IDkpKTsJCQkvKiBtb3ZlcSAjMCwgdG1wMSAqLwomIzQzOwlicGZfcHV0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hbHU2NF9uZWcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJY29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tJmd0O2RzdF9yZWddOwomIzQzOwljb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07CiYjNDM7CXM4IGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTsKJiM0MzsJczggZF9oaSA9IGJwZl9nZXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpOwomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHg0NDgwIHwgZF9sbyk7CQkJCS8qIG5lZy5sIGRfbG8gKi8KJiM0MzsJZW1pdF8xNihjdHgsIDB4NDA4MCB8IGRfaGkpOwkJCQkvKiBuZWd4LmwgZF9oaSAqLwomIzQzOwomIzQzOwlicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9sbywgY3R4KTsKJiM0MzsJYnBmX3B1dF9yZWczMihkc3RbMF0sIGRfaGksIGN0eCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVtaXRfYWx1MzJfeChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwljb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi0mZ3Q7ZHN0X3JlZ107CiYjNDM7CWNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLSZndDtzcmNfcmVnXTsKJiM0MzsJY29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdOwomIzQzOwljb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07CiYjNDM7CXM4IGRfcmVnLCBzX3JlZzsKJiM0MzsKJiM0MzsJZF9yZWcgPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTsKJiM0MzsJc19yZWcgPSBicGZfZ2V0X3JlZzMyKHNyY1sxXSwgdG1wMlsxXSwgY3R4KTsKJiM0MzsKJiM0MzsJc3dpdGNoIChCUEZfT1AoaW5zbi0mZ3Q7Y29kZSkpIHsKJiM0MzsJY2FzZSBCUEZfTU9WOgomIzQzOwkJaWYgKGluc24tJmd0O29mZiA9PSA4IHx8IGluc24tJmd0O29mZiA9PSAxNikgewomIzQzOwkJCWlmIChkX3JlZyAhPSBzX3JlZykKJiM0MzsJCQkJZW1pdF8xNihjdHgsIDB4MjAwMCB8IChkX3JlZyAmbHQ7Jmx0OyA5KSB8IHNfcmVnKTsgLyogbW92ZS5sIHNyYywgZHN0ICovCiYjNDM7CQkJaWYgKGluc24tJmd0O29mZiA9PSA4KQomIzQzOwkJCQllbWl0XzE2KGN0eCwgMHg0OWMwIHwgZF9yZWcpOwkvKiBleHRiLmwgZF9yZWcgKi8KJiM0MzsJCQllbHNlCiYjNDM7CQkJCWVtaXRfMTYoY3R4LCAweDQ4YzAgfCBkX3JlZyk7CS8qIGV4dC5sIGRfcmVnICovCiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWlmIChkX3JlZyAhPSBzX3JlZykKJiM0MzsJCQkJZW1pdF8xNihjdHgsIDB4MjAwMCB8IChkX3JlZyAmbHQ7Jmx0OyA5KSB8IHNfcmVnKTsgLyogbW92ZS5sIHNyYywgZHN0ICovCiYjNDM7CQl9CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfQUREOgomIzQzOwkJZW1pdF8xNihjdHgsIDB4ZDA4MCB8IChkX3JlZyAmbHQ7Jmx0OyA5KSB8IHNfcmVnKTsJLyogYWRkLmwgc3JjLCBkc3QgKi8KJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9TVUI6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHg5MDgwIHwgKGRfcmVnICZsdDsmbHQ7IDkpIHwgc19yZWcpOwkvKiBzdWIubCBzcmMsIGRzdCAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0FORDoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweGMwODAgfCAoZF9yZWcgJmx0OyZsdDsgOSkgfCBzX3JlZyk7CS8qIGFuZC5sIHNyYywgZHN0ICovCiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfT1I6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfcmVnICZsdDsmbHQ7IDkpIHwgc19yZWcpOwkvKiBvci5sIHNyYywgZHN0ICovCiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfWE9SOgomIzQzOwkJZW1pdF8xNihjdHgsIDB4YjE4MCB8IChzX3JlZyAmbHQ7Jmx0OyA5KSB8IGRfcmVnKTsJLyogZW9yLmwgc3JjLCBkc3QgKi8KJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9MU0g6CiYjNDM7CWNhc2UgQlBGX1JTSDoKJiM0MzsJY2FzZSBCUEZfQVJTSDogewomIzQzOwkJczggY291bnRfcmVnID0gdG1wMlsxXTsKJiM0MzsKJiM0MzsJCWlmIChzX3JlZyAhPSBjb3VudF9yZWcpCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4MjAwMCB8IChjb3VudF9yZWcgJmx0OyZsdDsgOSkgfCBzX3JlZyk7IC8qIG1vdmUubCBzcmMsIGNvdW50ICovCiYjNDM7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgwMjgwIHwgY291bnRfcmVnKTsJCS8qIGFuZGkubCAjaW1tLCBjb3VudCAqLwomIzQzOwkJZW1pdF8zMihjdHgsIDB4MWYpOwomIzQzOwomIzQzOwkJaWYgKEJQRl9PUChpbnNuLSZndDtjb2RlKSA9PSBCUEZfTFNIKQomIzQzOwkJCWVtaXRfMTYoY3R4LCAweGUxYTggfCAoY291bnRfcmVnICZsdDsmbHQ7IDkpIHwgZF9yZWcpOyAvKiBsc2wubCBjb3VudCwgZHN0ICovCiYjNDM7CQllbHNlIGlmIChCUEZfT1AoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1JTSCkKJiM0MzsJCQllbWl0XzE2KGN0eCwgMHhlMGE4IHwgKGNvdW50X3JlZyAmbHQ7Jmx0OyA5KSB8IGRfcmVnKTsgLyogbHNyLmwgY291bnQsIGRzdCAqLwomIzQzOwkJZWxzZQomIzQzOwkJCWVtaXRfMTYoY3R4LCAweGUwYTAgfCAoY291bnRfcmVnICZsdDsmbHQ7IDkpIHwgZF9yZWcpOyAvKiBhc3IubCBjb3VudCwgZHN0ICovCiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX3JlZywgY3R4KTsKJiM0MzsJZW1pdF8xNihjdHgsIDB4NzAwMCB8ICh0bXAxWzBdICZsdDsmbHQ7IDkpKTsJCQkvKiBtb3ZlcSAjMCwgdG1wMSAqLwomIzQzOwlicGZfcHV0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hbHUzMl9rKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLSZndDtkc3RfcmVnXTsKJiM0MzsJY29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdOwomIzQzOwljb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07CiYjNDM7CXM4IGRfcmVnOwomIzQzOwomIzQzOwlkX3JlZyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpOwomIzQzOwomIzQzOwlzd2l0Y2ggKEJQRl9PUChpbnNuLSZndDtjb2RlKSkgewomIzQzOwljYXNlIEJQRl9NT1Y6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyMDNjIHwgKGRfcmVnICZsdDsmbHQ7IDkpKTsJCS8qIG1vdmUubCAjaW1tLCBkc3QgKi8KJiM0MzsJCWVtaXRfMzIoY3R4LCBpbnNuLSZndDtpbW0pOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0FERDoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDA2ODAgfCBkX3JlZyk7CQkJLyogYWRkaS5sICNpbW0sIGRzdCAqLwomIzQzOwkJZW1pdF8zMihjdHgsIGluc24tJmd0O2ltbSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfU1VCOgomIzQzOwkJZW1pdF8xNihjdHgsIDB4MDQ4MCB8IGRfcmVnKTsJCQkvKiBzdWJpLmwgI2ltbSwgZHN0ICovCiYjNDM7CQllbWl0XzMyKGN0eCwgaW5zbi0mZ3Q7aW1tKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9BTkQ6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgwMjgwIHwgZF9yZWcpOwkJCS8qIGFuZGkubCAjaW1tLCBkc3QgKi8KJiM0MzsJCWVtaXRfMzIoY3R4LCBpbnNuLSZndDtpbW0pOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX09SOgomIzQzOwkJZW1pdF8xNihjdHgsIDB4MDA4MCB8IGRfcmVnKTsJCQkvKiBvcmkubCAjaW1tLCBkc3QgKi8KJiM0MzsJCWVtaXRfMzIoY3R4LCBpbnNuLSZndDtpbW0pOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX1hPUjoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDBhODAgfCBkX3JlZyk7CQkJLyogZW9yaS5sICNpbW0sIGRzdCAqLwomIzQzOwkJZW1pdF8zMihjdHgsIGluc24tJmd0O2ltbSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfTFNIOgomIzQzOwljYXNlIEJQRl9SU0g6CiYjNDM7CWNhc2UgQlBGX0FSU0g6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHRtcDJbMV0gJmx0OyZsdDsgOSkpOwkJLyogbW92ZS5sICNpbW0sIGNvdW50ICovCiYjNDM7CQllbWl0XzMyKGN0eCwgaW5zbi0mZ3Q7aW1tICZhbXA7IDB4MWYpOwomIzQzOwomIzQzOwkJaWYgKEJQRl9PUChpbnNuLSZndDtjb2RlKSA9PSBCUEZfTFNIKQomIzQzOwkJCWVtaXRfMTYoY3R4LCAweGUxYTggfCAodG1wMlsxXSAmbHQ7Jmx0OyA5KSB8IGRfcmVnKTsJLyogbHNsLmwgY291bnQsIGRzdCAqLwomIzQzOwkJZWxzZSBpZiAoQlBGX09QKGluc24tJmd0O2NvZGUpID09IEJQRl9SU0gpCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4ZTBhOCB8ICh0bXAyWzFdICZsdDsmbHQ7IDkpIHwgZF9yZWcpOwkvKiBsc3IubCBjb3VudCwgZHN0ICovCiYjNDM7CQllbHNlCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4ZTBhMCB8ICh0bXAyWzFdICZsdDsmbHQ7IDkpIHwgZF9yZWcpOwkvKiBhc3IubCBjb3VudCwgZHN0ICovCiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9yZWcsIGN0eCk7CiYjNDM7CWVtaXRfMTYoY3R4LCAweDcwMDAgfCAodG1wMVswXSAmbHQ7Jmx0OyA5KSk7CQkJLyogbW92ZXEgIzAsIHRtcDEgKi8KJiM0MzsJYnBmX3B1dF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVtaXRfYWx1NjRfeChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwljb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi0mZ3Q7ZHN0X3JlZ107CiYjNDM7CWNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLSZndDtzcmNfcmVnXTsKJiM0MzsJY29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdOwomIzQzOwljb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07CiYjNDM7CXM4IGRfbG8sIGRfaGksIHNfbG8sIHNfaGk7CiYjNDM7CiYjNDM7CWRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTsKJiM0MzsJZF9oaSA9IGJwZl9nZXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpOwomIzQzOwlzX2xvID0gYnBmX2dldF9yZWczMihzcmNbMV0sIHRtcDJbMV0sIGN0eCk7CiYjNDM7CXNfaGkgPSBicGZfZ2V0X3JlZzMyKHNyY1swXSwgdG1wMlswXSwgY3R4KTsKJiM0MzsKJiM0MzsJc3dpdGNoIChCUEZfT1AoaW5zbi0mZ3Q7Y29kZSkpIHsKJiM0MzsJY2FzZSBCUEZfTU9WOgomIzQzOwkJaWYgKGluc24tJmd0O29mZiA9PSA4IHx8IGluc24tJmd0O29mZiA9PSAxNiB8fCBpbnNuLSZndDtvZmYgPT0gMzIpIHsKJiM0MzsJCQlpZiAoZF9sbyAhPSBzX2xvKQomIzQzOwkJCQllbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGRfbG8gJmx0OyZsdDsgOSkgfCBzX2xvKTsgLyogbW92ZS5sIHNyYywgZHN0ICovCiYjNDM7CiYjNDM7CQkJaWYgKGluc24tJmd0O29mZiA9PSA4KQomIzQzOwkJCQllbWl0XzE2KGN0eCwgMHg0OWMwIHwgZF9sbyk7CQkvKiBleHRiLmwgZF9sbyAqLwomIzQzOwkJCWVsc2UgaWYgKGluc24tJmd0O29mZiA9PSAxNikKJiM0MzsJCQkJZW1pdF8xNihjdHgsIDB4NDhjMCB8IGRfbG8pOwkJLyogZXh0LmwgZF9sbyAqLwomIzQzOwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweDRhODAgfCBkX2xvKTsJCQkvKiB0c3QubCBkX2xvICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4NWJjMCB8IGRfaGkpOwkJCS8qIHNtaSBkX2hpICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4NDljMCB8IGRfaGkpOwkJCS8qIGV4dGIubCBkX2hpICovCiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWlmIChkX2xvICE9IHNfbG8pCiYjNDM7CQkJCWVtaXRfMTYoY3R4LCAweDIwMDAgfCAoZF9sbyAmbHQ7Jmx0OyA5KSB8IHNfbG8pOyAvKiBtb3ZlLmwgc19sbywgZF9sbyAqLwomIzQzOwkJCWlmIChkX2hpICE9IHNfaGkpCiYjNDM7CQkJCWVtaXRfMTYoY3R4LCAweDIwMDAgfCAoZF9oaSAmbHQ7Jmx0OyA5KSB8IHNfaGkpOyAvKiBtb3ZlLmwgc19oaSwgZF9oaSAqLwomIzQzOwkJfQomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0FERDoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweGQwODAgfCAoZF9sbyAmbHQ7Jmx0OyA5KSB8IHNfbG8pOwkJLyogYWRkLmwgc19sbywgZF9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4ZDE4MCB8IChkX2hpICZsdDsmbHQ7IDkpIHwgc19oaSk7CQkvKiBhZGR4Lmwgc19oaSwgZF9oaSAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX1NVQjoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDkwODAgfCAoZF9sbyAmbHQ7Jmx0OyA5KSB8IHNfbG8pOwkJLyogc3ViLmwgc19sbywgZF9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4OTE4MCB8IChkX2hpICZsdDsmbHQ7IDkpIHwgc19oaSk7CQkvKiBzdWJ4Lmwgc19oaSwgZF9oaSAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0FORDoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweGMwODAgfCAoZF9sbyAmbHQ7Jmx0OyA5KSB8IHNfbG8pOwkJLyogYW5kLmwgc19sbywgZF9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4YzA4MCB8IChkX2hpICZsdDsmbHQ7IDkpIHwgc19oaSk7CQkvKiBhbmQubCBzX2hpLCBkX2hpICovCiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfT1I6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfbG8gJmx0OyZsdDsgOSkgfCBzX2xvKTsJCS8qIG9yLmwgc19sbywgZF9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4ODA4MCB8IChkX2hpICZsdDsmbHQ7IDkpIHwgc19oaSk7CQkvKiBvci5sIHNfaGksIGRfaGkgKi8KJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9YT1I6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHhiMTgwIHwgKHNfbG8gJmx0OyZsdDsgOSkgfCBkX2xvKTsJCS8qIGVvci5sIHNfbG8sIGRfbG8gKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCAweGIxODAgfCAoc19oaSAmbHQ7Jmx0OyA5KSB8IGRfaGkpOwkJLyogZW9yLmwgc19oaSwgZF9oaSAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnBmX3B1dF9yZWczMihkc3RbMV0sIGRfbG8sIGN0eCk7CiYjNDM7CWJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbWl0X2FsdTY0X2soY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJY29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tJmd0O2RzdF9yZWddOwomIzQzOwljb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07CiYjNDM7CWNvbnN0IHM4ICp0bXAyID0gYnBmMm02OGtbVE1QX1JFR18yXTsKJiM0MzsJczggZF9sbywgZF9oaSwgc19sbywgc19oaTsKJiM0MzsJdTMyIGltbV9sbyA9IGluc24tJmd0O2ltbTsKJiM0MzsJdTMyIGltbV9oaSA9IGluc24tJmd0O2ltbSAmbHQ7IDAgPyAweGZmZmZmZmZmIDogMDsKJiM0MzsKJiM0MzsJZF9sbyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpOwomIzQzOwlkX2hpID0gYnBmX2dldF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7CiYjNDM7CiYjNDM7CWlmIChCUEZfT1AoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX01PVikgewomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjAzYyB8IChkX2xvICZsdDsmbHQ7IDkpKTsJCQkvKiBtb3ZlLmwgI2ltbSwgZF9sbyAqLwomIzQzOwkJZW1pdF8zMihjdHgsIGltbV9sbyk7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyMDNjIHwgKGRfaGkgJmx0OyZsdDsgOSkpOwkJCS8qIG1vdmUubCAjaW1tLCBkX2hpICovCiYjNDM7CQllbWl0XzMyKGN0eCwgaW1tX2hpKTsKJiM0MzsJCWJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX2xvLCBjdHgpOwomIzQzOwkJYnBmX3B1dF9yZWczMihkc3RbMF0sIGRfaGksIGN0eCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc19sbyA9IHRtcDJbMV07CiYjNDM7CXNfaGkgPSB0bXAyWzBdOwomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHNfbG8gJmx0OyZsdDsgOSkpOwkJCQkvKiBtb3ZlLmwgI2ltbSwgc19sbyAqLwomIzQzOwllbWl0XzMyKGN0eCwgaW1tX2xvKTsKJiM0MzsJZW1pdF8xNihjdHgsIDB4MjAzYyB8IChzX2hpICZsdDsmbHQ7IDkpKTsJCQkJLyogbW92ZS5sICNpbW0sIHNfaGkgKi8KJiM0MzsJZW1pdF8zMihjdHgsIGltbV9oaSk7CiYjNDM7CiYjNDM7CXN3aXRjaCAoQlBGX09QKGluc24tJmd0O2NvZGUpKSB7CiYjNDM7CWNhc2UgQlBGX0FERDoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweGQwODAgfCAoZF9sbyAmbHQ7Jmx0OyA5KSB8IHNfbG8pOwkJLyogYWRkLmwgc19sbywgZF9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4ZDE4MCB8IChkX2hpICZsdDsmbHQ7IDkpIHwgc19oaSk7CQkvKiBhZGR4Lmwgc19oaSwgZF9oaSAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX1NVQjoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDkwODAgfCAoZF9sbyAmbHQ7Jmx0OyA5KSB8IHNfbG8pOwkJLyogc3ViLmwgc19sbywgZF9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4OTE4MCB8IChkX2hpICZsdDsmbHQ7IDkpIHwgc19oaSk7CQkvKiBzdWJ4Lmwgc19oaSwgZF9oaSAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0FORDoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweGMwODAgfCAoZF9sbyAmbHQ7Jmx0OyA5KSB8IHNfbG8pOwkJLyogYW5kLmwgc19sbywgZF9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4YzA4MCB8IChkX2hpICZsdDsmbHQ7IDkpIHwgc19oaSk7CQkvKiBhbmQubCBzX2hpLCBkX2hpICovCiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfT1I6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfbG8gJmx0OyZsdDsgOSkgfCBzX2xvKTsJCS8qIG9yLmwgc19sbywgZF9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4ODA4MCB8IChkX2hpICZsdDsmbHQ7IDkpIHwgc19oaSk7CQkvKiBvci5sIHNfaGksIGRfaGkgKi8KJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9YT1I6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHhiMTgwIHwgKHNfbG8gJmx0OyZsdDsgOSkgfCBkX2xvKTsJCS8qIGVvci5sIHNfbG8sIGRfbG8gKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCAweGIxODAgfCAoc19oaSAmbHQ7Jmx0OyA5KSB8IGRfaGkpOwkJLyogZW9yLmwgc19oaSwgZF9oaSAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnBmX3B1dF9yZWczMihkc3RbMV0sIGRfbG8sIGN0eCk7CiYjNDM7CWJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbWl0X2FsdTY0X3NoaWZ0KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBpc19pbW0pCiYjNDM7ewomIzQzOwljb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi0mZ3Q7ZHN0X3JlZ107CiYjNDM7CWNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTsKJiM0MzsJY29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdOwomIzQzOwlzOCBkX2xvLCBkX2hpLCBjb3VudF9yZWc7CiYjNDM7CWludCBsb29wX3N0YXJ0LCBkb25lX2lkeDsKJiM0MzsKJiM0MzsJZF9sbyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpOwomIzQzOwlkX2hpID0gYnBmX2dldF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7CiYjNDM7CWNvdW50X3JlZyA9IHRtcDJbMV07CiYjNDM7CiYjNDM7CWlmIChpc19pbW0pIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIwM2MgfCAoY291bnRfcmVnICZsdDsmbHQ7IDkpKTsJCS8qIG1vdmUubCAjaW1tLCBjb3VudF9yZWcgKi8KJiM0MzsJCWVtaXRfMzIoY3R4LCBpbnNuLSZndDtpbW0pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJY29uc3QgczggKnNyYyA9IGJwZjJtNjhrW2luc24tJmd0O3NyY19yZWddOwomIzQzOwkJczggc19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpOwomIzQzOwomIzQzOwkJaWYgKGNvdW50X3JlZyAhPSBzX2xvKQomIzQzOwkJCWVtaXRfMTYoY3R4LCAweDIwMDAgfCAoY291bnRfcmVnICZsdDsmbHQ7IDkpIHwgc19sbyk7CS8qIG1vdmUubCBzX2xvLCBjb3VudF9yZWcgKi8KJiM0MzsJfQomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHgwMjgwIHwgY291bnRfcmVnKTsJCQkvKiBhbmRpLmwgIzB4M2YsIGNvdW50X3JlZyAqLwomIzQzOwllbWl0XzMyKGN0eCwgMHgzZik7CiYjNDM7CiYjNDM7CWVtaXRfMTYoY3R4LCAweDRhODAgfCBjb3VudF9yZWcpOwkJCQkvKiB0c3QubCBjb3VudF9yZWcgKi8KJiM0MzsJZW1pdF8xNihjdHgsIDB4NjcwMCk7CQkJCQkJLyogYmVxLncgZG9uZV9pZHggKi8KJiM0MzsJZG9uZV9pZHggPSBjdHgtJmd0O2lkeDsKJiM0MzsJZW1pdF8xNihjdHgsIDApOwomIzQzOwomIzQzOwlsb29wX3N0YXJ0ID0gY3R4LSZndDtpZHg7CiYjNDM7CiYjNDM7CWlmIChCUEZfT1AoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0xTSCkgewomIzQzOwkJZW1pdF8xNihjdHgsIDB4ZTM4OCB8IGRfbG8pOwkJCQkvKiBsc2xsICMxLCBkX2xvICovCiYjNDM7CQllbWl0XzE2KGN0eCwgMHhlMzkwIHwgZF9oaSk7CQkJCS8qIHJveGwubCAjMSwgZF9oaSAqLwomIzQzOwl9IGVsc2UgaWYgKEJQRl9PUChpbnNuLSZndDtjb2RlKSA9PSBCUEZfUlNIKSB7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHhlMjg4IHwgZF9oaSk7CQkJCS8qIGxzcmwgIzEsIGRfaGkgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCAweGUyOTAgfCBkX2xvKTsJCQkJLyogcm94ci5sICMxLCBkX2xvICovCiYjNDM7CX0gZWxzZSBpZiAoQlBGX09QKGluc24tJmd0O2NvZGUpID09IEJQRl9BUlNIKSB7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHhlMjgwIHwgZF9oaSk7CQkJCS8qIGFzcmwgIzEsIGRfaGkgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCAweGUyOTAgfCBkX2xvKTsJCQkJLyogcm94ci5sICMxLCBkX2xvICovCiYjNDM7CX0KJiM0MzsKJiM0MzsJZW1pdF8xNihjdHgsIDB4NTM4MCB8IGNvdW50X3JlZyk7CQkJCS8qIHN1YnEubCAjMSwgY291bnRfcmVnICovCiYjNDM7CWVtaXRfMTYoY3R4LCAweDY2MDApOwkJCQkJCS8qIGJuZS53IGxvb3Bfc3RhcnQgKi8KJiM0MzsJZW1pdF8xNihjdHgsIChsb29wX3N0YXJ0IC0gKGludCljdHgtJmd0O2lkeCkgKiAyKTsKJiM0MzsKJiM0MzsJaWYgKGN0eC0mZ3Q7dGFyZ2V0KQomIzQzOwkJY3R4LSZndDt0YXJnZXRbZG9uZV9pZHhdID0gKGN0eC0mZ3Q7aWR4IC0gZG9uZV9pZHgpICogMjsKJiM0MzsKJiM0MzsJYnBmX3B1dF9yZWczMihkc3RbMV0sIGRfbG8sIGN0eCk7CiYjNDM7CWJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbWl0X2JwZl9lbmQoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJY29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tJmd0O2RzdF9yZWddOwomIzQzOwljb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07CiYjNDM7CXM4IGRfbG8sIGRfaGk7CiYjNDM7CWJvb2wgdG9fbGUgPSBCUEZfU1JDKGluc24tJmd0O2NvZGUpID09IEJQRl9UT19MRTsKJiM0MzsJaW50IGltbSA9IGluc24tJmd0O2ltbTsKJiM0MzsKJiM0MzsJZF9sbyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpOwomIzQzOwlkX2hpID0gYnBmX2dldF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7CiYjNDM7CiYjNDM7CWlmICh0b19sZSkgewomIzQzOwkJc3dpdGNoIChpbW0pIHsKJiM0MzsJCWNhc2UgMTY6CiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4MDI4MCB8IGRfbG8pOwkJCS8qIGFuZGkubCAjMHhmZmZmLCBkX2xvICovCiYjNDM7CQkJZW1pdF8zMihjdHgsIDB4ZmZmZik7CiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4ZTA1OCB8IGRfbG8pOwkJCS8qIHJvci53ICM4LCBkX2xvICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2hpICZsdDsmbHQ7IDkpKTsJCS8qIG1vdmVxICMwLCBkX2hpICovCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIDMyOgomIzQzOwkJCWVtaXRfMTYoY3R4LCAweGUwNTggfCBkX2xvKTsJCQkvKiByb3IudyAjOCwgZF9sbyAqLwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweDQ4NDAgfCBkX2xvKTsJCQkvKiBzd2FwIGRfbG8gKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9sbyk7CQkJLyogcm9yLncgIzgsIGRfbG8gKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg3MDAwIHwgKGRfaGkgJmx0OyZsdDsgOSkpOwkJLyogbW92ZXEgIzAsIGRfaGkgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgNjQ6CiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4ZTA1OCB8IGRfbG8pOwkJCS8qIHJvci53ICM4LCBkX2xvICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4NDg0MCB8IGRfbG8pOwkJCS8qIHN3YXAgZF9sbyAqLwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweGUwNTggfCBkX2xvKTsJCQkvKiByb3IudyAjOCwgZF9sbyAqLwomIzQzOwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweGUwNTggfCBkX2hpKTsJCQkvKiByb3IudyAjOCwgZF9oaSAqLwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweDQ4NDAgfCBkX2hpKTsJCQkvKiBzd2FwIGRfaGkgKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9oaSk7CQkJLyogcm9yLncgIzgsIGRfaGkgKi8KJiM0MzsKJiM0MzsJCQllbWl0XzE2KGN0eCwgMHhjMTQwIHwgKGRfaGkgJmx0OyZsdDsgOSkgfCBkX2xvKTsJLyogZXhnIGRfbG8sIGRfaGkgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXN3aXRjaCAoaW1tKSB7CiYjNDM7CQljYXNlIDE2OgomIzQzOwkJCWVtaXRfMTYoY3R4LCAweDAyODAgfCBkX2xvKTsJCQkvKiBhbmRpLmwgIzB4ZmZmZiwgZF9sbyAqLwomIzQzOwkJCWVtaXRfMzIoY3R4LCAweGZmZmYpOwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweDcwMDAgfCAoZF9oaSAmbHQ7Jmx0OyA5KSk7CQkvKiBtb3ZlcSAjMCwgZF9oaSAqLwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSAzMjoKJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg3MDAwIHwgKGRfaGkgJmx0OyZsdDsgOSkpOwkJLyogbW92ZXEgIzAsIGRfaGkgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgNjQ6CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnBmX3B1dF9yZWczMihkc3RbMV0sIGRfbG8sIGN0eCk7CiYjNDM7CWJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbWl0X21hdGhfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgaXNfNjQpCiYjNDM7ewomIzQzOwljb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi0mZ3Q7ZHN0X3JlZ107CiYjNDM7CWNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLSZndDtzcmNfcmVnXTsKJiM0MzsJY29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdOwomIzQzOwljb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07CiYjNDM7CXM4IGRfbG8sIGRfaGksIHNfbG8sIHNfaGkgPSAwOwomIzQzOwl2b2lkICpmdW5jID0gTlVMTDsKJiM0MzsJdTggb3AgPSBCUEZfT1AoaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CiYjNDM7CWRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTsKJiM0MzsJZF9oaSA9IGJwZl9nZXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpOwomIzQzOwomIzQzOwlpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCkgewomIzQzOwkJc19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpOwomIzQzOwkJaWYgKGlzXzY0KQomIzQzOwkJCXNfaGkgPSBicGZfZ2V0X3JlZzMyKHNyY1swXSwgdG1wMlswXSwgY3R4KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXNfbG8gPSB0bXAyWzFdOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjAzYyB8IChzX2xvICZsdDsmbHQ7IDkpKTsJCQkvKiBtb3ZlLmwgI2ltbSwgc19sbyAqLwomIzQzOwkJZW1pdF8zMihjdHgsIGluc24tJmd0O2ltbSk7CiYjNDM7CQlpZiAoaXNfNjQpIHsKJiM0MzsJCQlzX2hpID0gdG1wMlswXTsKJiM0MzsJCQllbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHNfaGkgJmx0OyZsdDsgOSkpOwkJLyogbW92ZS5sICNpbW0sIHNfaGkgKi8KJiM0MzsJCQllbWl0XzMyKGN0eCwgaW5zbi0mZ3Q7aW1tICZsdDsgMCA/IDB4ZmZmZmZmZmYgOiAwKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaXNfNjQpIHsKJiM0MzsJCXN3aXRjaCAob3ApIHsKJiM0MzsJCWNhc2UgQlBGX01VTDoKJiM0MzsJCQlmdW5jID0gKHZvaWQgKilqaXRfbXVsNjQ7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIEJQRl9ESVY6CiYjNDM7CQkJZnVuYyA9ICh2b2lkICopaml0X2RpdjY0OwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBCUEZfTU9EOgomIzQzOwkJCWZ1bmMgPSAodm9pZCAqKWppdF9tb2Q2NDsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCWlmIChCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FMVTY0ICZhbXA7JmFtcDsgb3AgPT0gQlBGX0RJViAmYW1wOyZhbXA7IGluc24tJmd0O29mZiA9PSAxKQomIzQzOwkJCWZ1bmMgPSAodm9pZCAqKWppdF9zZGl2NjQ7CiYjNDM7CQlpZiAoQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpID09IEJQRl9BTFU2NCAmYW1wOyZhbXA7IG9wID09IEJQRl9NT0QgJmFtcDsmYW1wOyBpbnNuLSZndDtvZmYgPT0gMSkKJiM0MzsJCQlmdW5jID0gKHZvaWQgKilqaXRfc21vZDY0OwomIzQzOwl9IGVsc2UgewomIzQzOwkJc3dpdGNoIChvcCkgewomIzQzOwkJY2FzZSBCUEZfTVVMOgomIzQzOwkJCWZ1bmMgPSAodm9pZCAqKWppdF9tdWwzMjsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgQlBGX0RJVjoKJiM0MzsJCQlmdW5jID0gKHZvaWQgKilqaXRfZGl2MzI7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIEJQRl9NT0Q6CiYjNDM7CQkJZnVuYyA9ICh2b2lkICopaml0X21vZDMyOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJaWYgKEJQRl9DTEFTUyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfQUxVICZhbXA7JmFtcDsgb3AgPT0gQlBGX0RJViAmYW1wOyZhbXA7IGluc24tJmd0O29mZiA9PSAxKQomIzQzOwkJCWZ1bmMgPSAodm9pZCAqKWppdF9zZGl2MzI7CiYjNDM7CQlpZiAoQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpID09IEJQRl9BTFUgJmFtcDsmYW1wOyBvcCA9PSBCUEZfTU9EICZhbXA7JmFtcDsgaW5zbi0mZ3Q7b2ZmID09IDEpCiYjNDM7CQkJZnVuYyA9ICh2b2lkICopaml0X3Ntb2QzMjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaXNfNjQpIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDQ4ZTcpOwkJCQkJLyogbW92ZW0ubCBkMC1kMSwgLSglc3ApICovCiYjNDM7CQllbWl0XzE2KGN0eCwgMHhjMDAwKTsKJiM0MzsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDJmMDAgfCBzX2xvKTsJCQkJLyogbW92ZS5sIHNfbG8sIC0oJXNwKSAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MmYwMCB8IHNfaGkpOwkJCQkvKiBtb3ZlLmwgc19oaSwgLSglc3ApICovCiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyZjAwIHwgZF9sbyk7CQkJCS8qIG1vdmUubCBkX2xvLCAtKCVzcCkgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCAweDJmMDAgfCBkX2hpKTsJCQkJLyogbW92ZS5sIGRfaGksIC0oJXNwKSAqLwomIzQzOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjA3Yyk7CQkJCQkvKiBtb3ZlYS5sICNmdW5jLCAlYTAgKi8KJiM0MzsJCWVtaXRfMzIoY3R4LCAodTMyKWZ1bmMpOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4NGU5MCk7CQkJCQkvKiBqc3IgKCVhMCkgKi8KJiM0MzsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDRmZWYpOwkJCQkJLyogbGVhIDE2KCVzcCksICVzcCAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDE2KTsKJiM0MzsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDI2MDEpOwkJCQkJLyogbW92ZS5sICVkMSwgJWQzICovCiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyNDAwKTsJCQkJCS8qIG1vdmUubCAlZDAsICVkMiAqLwomIzQzOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4NGNkZik7CQkJCQkvKiBtb3ZlbS5sICglc3ApJiM0MzssIGQwLWQxICovCiYjNDM7CQllbWl0XzE2KGN0eCwgMHgwMDAzKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDQ4ZTcpOwkJCQkJLyogbW92ZW0ubCBkMC1kMSwgLSglc3ApICovCiYjNDM7CQllbWl0XzE2KGN0eCwgMHhjMDAwKTsKJiM0MzsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDJmMDAgfCBzX2xvKTsJCQkJLyogbW92ZS5sIHNfbG8sIC0oJXNwKSAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MmYwMCB8IGRfbG8pOwkJCQkvKiBtb3ZlLmwgZF9sbywgLSglc3ApICovCiYjNDM7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyMDdjKTsJCQkJCS8qIG1vdmVhLmwgI2Z1bmMsICVhMCAqLwomIzQzOwkJZW1pdF8zMihjdHgsICh1MzIpZnVuYyk7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHg0ZTkwKTsJCQkJCS8qIGpzciAoJWEwKSAqLwomIzQzOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4NGZlZik7CQkJCQkvKiBsZWEgOCglc3ApLCAlc3AgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCA4KTsKJiM0MzsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDI2MDApOwkJCQkJLyogbW92ZS5sICVkMCwgJWQzICovCiYjNDM7CQllbWl0XzE2KGN0eCwgMHg3NDAwKTsJCQkJCS8qIG1vdmVxICMwLCAlZDIgKi8KJiM0MzsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDRjZGYpOwkJCQkJLyogbW92ZW0ubCAoJXNwKSYjNDM7LCBkMC1kMSAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MDAwMyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnBmX3B1dF9yZWczMihkc3RbMV0sIE02OEtfRDMsIGN0eCk7CiYjNDM7CWJwZl9wdXRfcmVnMzIoZHN0WzBdLCBNNjhLX0QyLCBjdHgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbWl0X2xkeChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwljb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi0mZ3Q7ZHN0X3JlZ107CiYjNDM7CWNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLSZndDtzcmNfcmVnXTsKJiM0MzsJY29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdOwomIzQzOwlzOCBkX2xvLCBkX2hpOwomIzQzOwlib29sIGlzX21lbV9zeCA9IEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9NRU1TWDsKJiM0MzsKJiM0MzsJaWYgKGlzX3N0YWNrZWQoc3JjWzFdKSkgewomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjA2ZSk7CQkJCS8qIG1vdmVhLmwgZDE2KCVmcCksICVhMCAqLwomIzQzOwkJZW1pdF8xNihjdHgsICh1MTYpc3JjWzFdKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIwNDAgfCBzcmNbMV0pOwkJCS8qIG1vdmVhLmwgc3JjLCAlYTAgKi8KJiM0MzsJfQomIzQzOwomIzQzOwlkX2xvID0gaXNfc3RhY2tlZChkc3RbMV0pID8gdG1wMVsxXSA6IGRzdFsxXTsKJiM0MzsJZF9oaSA9IGlzX3N0YWNrZWQoZHN0WzBdKSA/IHRtcDFbMF0gOiBkc3RbMF07CiYjNDM7CiYjNDM7CXN3aXRjaCAoQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSkpIHsKJiM0MzsJY2FzZSBCUEZfQjoKJiM0MzsJCWlmICghaXNfbWVtX3N4KQomIzQzOwkJCWVtaXRfMTYoY3R4LCAweDcwMDAgfCAoZF9sbyAmbHQ7Jmx0OyA5KSk7CS8qIG1vdmVxICMwLCBkX2xvICovCiYjNDM7CQllbWl0XzE2KGN0eCwgMHgxMDI4IHwgKGRfbG8gJmx0OyZsdDsgOSkpOwkJLyogbW92ZS5iIGQxNiglYTApLCBkX2xvICovCiYjNDM7CQllbWl0XzE2KGN0eCwgaW5zbi0mZ3Q7b2ZmKTsKJiM0MzsJCWlmIChpc19tZW1fc3gpCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4NDljMCB8IGRfbG8pOwkvKiBleHRiLmwgZF9sbyAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0g6CiYjNDM7CQlpZiAoIWlzX21lbV9zeCkKJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg3MDAwIHwgKGRfbG8gJmx0OyZsdDsgOSkpOwkvKiBtb3ZlcSAjMCwgZF9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MzAyOCB8IChkX2xvICZsdDsmbHQ7IDkpKTsJCS8qIG1vdmUudyBkMTYoJWEwKSwgZF9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIGluc24tJmd0O29mZik7CiYjNDM7CQlpZiAoaXNfbWVtX3N4KQomIzQzOwkJCWVtaXRfMTYoY3R4LCAweDQ4YzAgfCBkX2xvKTsJLyogZXh0LmwgZF9sbyAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX1c6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyMDI4IHwgKGRfbG8gJmx0OyZsdDsgOSkpOwkJLyogbW92ZS5sIGQxNiglYTApLCBkX2xvICovCiYjNDM7CQllbWl0XzE2KGN0eCwgaW5zbi0mZ3Q7b2ZmKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9EVzoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIwMjggfCAoZF9oaSAmbHQ7Jmx0OyA5KSk7CQkvKiBtb3ZlLmwgZDE2KCVhMCksIGRfaGkgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCBpbnNuLSZndDtvZmYpOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4NDFlOCk7CQkJCS8qIGxlYSA0KCVhMCksICVhMCAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDQpOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjAyOCB8IChkX2xvICZsdDsmbHQ7IDkpKTsJCS8qIG1vdmUubCBkMTYoJWEwKSwgZF9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIGluc24tJmd0O29mZik7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX0RXKSB7CiYjNDM7CQlpZiAoaXNfbWVtX3N4KSB7CiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4NGE4MCB8IGRfbG8pOwkJCS8qIHRzdC5sIGRfbG8gKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg1YmMwIHwgZF9oaSk7CQkJLyogc21pIGRfaGkgKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg0OWMwIHwgZF9oaSk7CQkJLyogZXh0Yi5sIGRfaGkgKi8KJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2hpICZsdDsmbHQ7IDkpKTsJLyogbW92ZXEgIzAsIGRfaGkgKi8KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9sbywgY3R4KTsKJiM0MzsJYnBmX3B1dF9yZWczMihkc3RbMF0sIGRfaGksIGN0eCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVtaXRfc3R4KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLSZndDtkc3RfcmVnXTsKJiM0MzsJY29uc3QgczggKnNyYyA9IGJwZjJtNjhrW2luc24tJmd0O3NyY19yZWddOwomIzQzOwljb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07CiYjNDM7CXM4IHNfbG8sIHNfaGk7CiYjNDM7CiYjNDM7CWlmIChpc19zdGFja2VkKGRzdFsxXSkpIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIwNmUpOwkJCQkvKiBtb3ZlYS5sIGQxNiglZnApLCAlYTAgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCAodTE2KWRzdFsxXSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyMDQwIHwgZHN0WzFdKTsJCQkvKiBtb3ZlYS5sIGRzdCwgJWEwICovCiYjNDM7CX0KJiM0MzsKJiM0MzsJc19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpOwomIzQzOwomIzQzOwlzd2l0Y2ggKEJQRl9TSVpFKGluc24tJmd0O2NvZGUpKSB7CiYjNDM7CWNhc2UgQlBGX0I6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgxMTQwIHwgc19sbyk7CQkJLyogbW92ZS5iIHNfbG8sIGQxNiglYTApICovCiYjNDM7CQllbWl0XzE2KGN0eCwgaW5zbi0mZ3Q7b2ZmKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9IOgomIzQzOwkJZW1pdF8xNihjdHgsIDB4MzE0MCB8IHNfbG8pOwkJCS8qIG1vdmUudyBzX2xvLCBkMTYoJWEwKSAqLwomIzQzOwkJZW1pdF8xNihjdHgsIGluc24tJmd0O29mZik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfVzoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIxNDAgfCBzX2xvKTsJCQkvKiBtb3ZlLmwgc19sbywgZDE2KCVhMCkgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCBpbnNuLSZndDtvZmYpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0RXOgomIzQzOwkJc19oaSA9IGJwZl9nZXRfcmVnMzIoc3JjWzBdLCB0bXAyWzBdLCBjdHgpOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjE0MCB8IHNfaGkpOwkJCS8qIG1vdmUubCBzX2hpLCBkMTYoJWEwKSAqLwomIzQzOwkJZW1pdF8xNihjdHgsIGluc24tJmd0O29mZik7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHg0MWU4KTsJCQkJLyogbGVhIDQoJWEwKSwgJWEwICovCiYjNDM7CQllbWl0XzE2KGN0eCwgNCk7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyMTQwIHwgc19sbyk7CQkJLyogbW92ZS5sIHNfbG8sIGQxNiglYTApICovCiYjNDM7CQllbWl0XzE2KGN0eCwgaW5zbi0mZ3Q7b2ZmKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVtaXRfc3QoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJY29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tJmd0O2RzdF9yZWddOwomIzQzOwljb25zdCBzOCAqdG1wID0gYnBmMm02OGtbVE1QX1JFR18xXTsKJiM0MzsKJiM0MzsJaWYgKGlzX3N0YWNrZWQoZHN0WzFdKSkgewomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjA2ZSk7CQkJCS8qIG1vdmVhLmwgZDE2KCVmcCksICVhMCAqLwomIzQzOwkJZW1pdF8xNihjdHgsICh1MTYpZHN0WzFdKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIwNDAgfCBkc3RbMV0pOwkJCS8qIG1vdmVhLmwgZHN0LCAlYTAgKi8KJiM0MzsJfQomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHRtcFsxXSAmbHQ7Jmx0OyA5KSk7CQkJLyogbW92ZS5sICNpbW0sIHRtcCAqLwomIzQzOwllbWl0XzMyKGN0eCwgaW5zbi0mZ3Q7aW1tKTsKJiM0MzsKJiM0MzsJc3dpdGNoIChCUEZfU0laRShpbnNuLSZndDtjb2RlKSkgewomIzQzOwljYXNlIEJQRl9COgomIzQzOwkJZW1pdF8xNihjdHgsIDB4MTE0MCB8IHRtcFsxXSk7CQkJLyogbW92ZS5iIHRtcCwgZDE2KCVhMCkgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCBpbnNuLSZndDtvZmYpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0g6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgzMTQwIHwgdG1wWzFdKTsJCQkvKiBtb3ZlLncgdG1wLCBkMTYoJWEwKSAqLwomIzQzOwkJZW1pdF8xNihjdHgsIGluc24tJmd0O29mZik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfVzoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIxNDAgfCB0bXBbMV0pOwkJCS8qIG1vdmUubCB0bXAsIGQxNiglYTApICovCiYjNDM7CQllbWl0XzE2KGN0eCwgaW5zbi0mZ3Q7b2ZmKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9EVzoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIwM2MgfCAodG1wWzBdICZsdDsmbHQ7IDkpKTsJCS8qIG1vdmUubCAjaW1tLCB0bXAgKi8KJiM0MzsJCWVtaXRfMzIoY3R4LCBpbnNuLSZndDtpbW0gJmx0OyAwID8gMHhmZmZmZmZmZiA6IDApOwomIzQzOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjE0MCB8IHRtcFswXSk7CQkJLyogbW92ZS5sIHRtcCwgZDE2KCVhMCkgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCBpbnNuLSZndDtvZmYpOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4NDFlOCk7CQkJCS8qIGxlYSA0KCVhMCksICVhMCAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDQpOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjE0MCB8IHRtcFsxXSk7CQkJLyogbW92ZS5sIHRtcCwgZDE2KCVhMCkgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCBpbnNuLSZndDtvZmYpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hdG9taWMoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJY29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tJmd0O2RzdF9yZWddOwomIzQzOwljb25zdCBzOCAqc3JjID0gYnBmMm02OGtbaW5zbi0mZ3Q7c3JjX3JlZ107CiYjNDM7CWNvbnN0IHM4ICp0bXAyID0gYnBmMm02OGtbVE1QX1JFR18yXTsKJiM0MzsKJiM0MzsJaWYgKGlzX3N0YWNrZWQoZHN0WzFdKSkgewomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjA2ZSk7CQkJCS8qIG1vdmVhLmwgZDE2KCVmcCksICVhMCAqLwomIzQzOwkJZW1pdF8xNihjdHgsICh1MTYpZHN0WzFdKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIwNDAgfCBkc3RbMV0pOwkJCS8qIG1vdmVhLmwgZHN0LCAlYTAgKi8KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaW5zbi0mZ3Q7b2ZmKSB7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHg0MWU4KTsJCQkJLyogbGVhIGQxNiglYTApLCAlYTAgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCBpbnNuLSZndDtvZmYpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChCUEZfU0laRShpbnNuLSZndDtjb2RlKSA9PSBCUEZfVykgewomIzQzOwkJczggc19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpOwomIzQzOwomIzQzOwkJaWYgKGluc24tJmd0O2ltbSAhPSBCUEZfQ01QWENIRykgewomIzQzOwkJCWVtaXRfMTYoY3R4LCAweDQ4ZTcpOwkJCS8qIG1vdmVtLmwgZDAtZDEsIC0oJXNwKSAqLwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweGMwMDApOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MmYwMCB8IE02OEtfRDApOwkJCS8qIG1vdmUubCAlZDAsIC0oJXNwKSAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MmYzYyk7CQkJCS8qIG1vdmUubCAjaW1tLCAtKCVzcCkgKi8KJiM0MzsJCWVtaXRfMzIoY3R4LCBpbnNuLSZndDtpbW0pOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MmYwMCB8IHNfbG8pOwkJCS8qIG1vdmUubCBzX2xvLCAtKCVzcCkgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCAweDJmMDgpOwkJCQkvKiBtb3ZlLmwgJWEwLCAtKCVzcCkgKi8KJiM0MzsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIwN2MpOwkJCQkvKiBtb3ZlYS5sICNmdW5jLCAlYTAgKi8KJiM0MzsJCWVtaXRfMzIoY3R4LCAodTMyKWppdF9hdG9taWMzMik7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHg0ZTkwKTsJCQkJLyoganNyICglYTApICovCiYjNDM7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHg0ZmVmKTsJCQkJLyogbGVhIDE2KCVzcCksICVzcCAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDE2KTsKJiM0MzsKJiM0MzsJCWlmIChpbnNuLSZndDtpbW0gPT0gQlBGX0NNUFhDSEcpIHsKJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg3MjAwKTsJCQkvKiBtb3ZlcSAjMCwgJWQxICovCiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWJvb2wgaXNfZmV0Y2ggPSAoaW5zbi0mZ3Q7aW1tICZhbXA7IEJQRl9GRVRDSCkgfHwgaW5zbi0mZ3Q7aW1tID09IEJQRl9YQ0hHOwomIzQzOwomIzQzOwkJCWlmIChpc19mZXRjaCkKJiM0MzsJCQkJZW1pdF8xNihjdHgsIDB4MjYwMCk7CQkvKiBtb3ZlLmwgJWQwLCAlZDMgKi8KJiM0MzsKJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg0Y2RmKTsJCQkvKiBtb3ZlbS5sICglc3ApJiM0MzssIGQwLWQxICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4MDAwMyk7CiYjNDM7CiYjNDM7CQkJaWYgKGlzX2ZldGNoKSB7CiYjNDM7CQkJCWJwZl9wdXRfcmVnMzIoc3JjWzFdLCBNNjhLX0QzLCBjdHgpOwomIzQzOwkJCQllbWl0XzE2KGN0eCwgMHg3NDAwKTsJCS8qIG1vdmVxICMwLCAlZDIgKi8KJiM0MzsJCQkJYnBmX3B1dF9yZWczMihzcmNbMF0sIE02OEtfRDIsIGN0eCk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwomIzQzOwl9IGVsc2UgaWYgKEJQRl9TSVpFKGluc24tJmd0O2NvZGUpID09IEJQRl9EVykgewomIzQzOwkJczggc19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpOwomIzQzOwkJczggc19oaSA9IGJwZl9nZXRfcmVnMzIoc3JjWzBdLCB0bXAyWzBdLCBjdHgpOwomIzQzOwomIzQzOwkJaWYgKGluc24tJmd0O2ltbSAhPSBCUEZfQ01QWENIRykgewomIzQzOwkJCWVtaXRfMTYoY3R4LCAweDQ4ZTcpOwkJCS8qIG1vdmVtLmwgZDAtZDEsIC0oJXNwKSAqLwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweGMwMDApOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MmYwMCB8IE02OEtfRDApOwkJCS8qIG1vdmUubCAlZDAsIC0oJXNwKSAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MmYwMCB8IE02OEtfRDEpOwkJCS8qIG1vdmUubCAlZDEsIC0oJXNwKSAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MmYzYyk7CQkJCS8qIG1vdmUubCAjaW1tLCAtKCVzcCkgKi8KJiM0MzsJCWVtaXRfMzIoY3R4LCBpbnNuLSZndDtpbW0pOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MmYwMCB8IHNfbG8pOwkJCS8qIG1vdmUubCBzX2xvLCAtKCVzcCkgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCAweDJmMDAgfCBzX2hpKTsJCQkvKiBtb3ZlLmwgc19oaSwgLSglc3ApICovCiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyZjA4KTsJCQkJLyogbW92ZS5sICVhMCwgLSglc3ApICovCiYjNDM7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyMDdjKTsJCQkJLyogbW92ZWEubCAjZnVuYywgJWEwICovCiYjNDM7CQllbWl0XzMyKGN0eCwgKHUzMilqaXRfYXRvbWljNjQpOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4NGU5MCk7CQkJCS8qIGpzciAoJWEwKSAqLwomIzQzOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4NGZlZik7CQkJCS8qIGxlYSAyNCglc3ApLCAlc3AgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCAyNCk7CiYjNDM7CiYjNDM7CQlpZiAoaW5zbi0mZ3Q7aW1tID09IEJQRl9DTVBYQ0hHKSB7CiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4YzE0MSk7CQkJLyogZXhnICVkMCwgJWQxICovCiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWJvb2wgaXNfZmV0Y2ggPSAoaW5zbi0mZ3Q7aW1tICZhbXA7IEJQRl9GRVRDSCkgfHwgaW5zbi0mZ3Q7aW1tID09IEJQRl9YQ0hHOwomIzQzOwomIzQzOwkJCWlmIChpc19mZXRjaCkgewomIzQzOwkJCQllbWl0XzE2KGN0eCwgMHgyNjAwKTsJCS8qIG1vdmUubCAlZDAsICVkMyAqLwomIzQzOwkJCQllbWl0XzE2KGN0eCwgMHgyNDAxKTsJCS8qIG1vdmUubCAlZDEsICVkMiAqLwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg0Y2RmKTsJCQkvKiBtb3ZlbS5sICglc3ApJiM0MzssIGQwLWQxICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4MDAwMyk7CiYjNDM7CiYjNDM7CQkJaWYgKGlzX2ZldGNoKSB7CiYjNDM7CQkJCWJwZl9wdXRfcmVnMzIoc3JjWzFdLCBNNjhLX0QyLCBjdHgpOwomIzQzOwkJCQlicGZfcHV0X3JlZzMyKHNyY1swXSwgTTY4S19EMywgY3R4KTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW1pdF90YWlsX2NhbGwoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJY29uc3QgczggKnIyID0gYnBmMm02OGtbQlBGX1JFR18yXTsKJiM0MzsJY29uc3QgczggKnIzID0gYnBmMm02OGtbQlBGX1JFR18zXTsKJiM0MzsJaW50IGptcF9vdXRfMSwgam1wX291dF8yLCBqbXBfb3V0XzM7CiYjNDM7CiYjNDM7CWlmIChpc19zdGFja2VkKHIyWzFdKSkgewomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjA2ZSk7CQkJCS8qIG1vdmVhLmwgZDE2KCVmcCksICVhMCAqLwomIzQzOwkJZW1pdF8xNihjdHgsICh1MTYpcjJbMV0pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjA0MCB8IHIyWzFdKTsJCQkvKiBtb3ZlYS5sIHIyLCAlYTAgKi8KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaXNfc3RhY2tlZChyM1sxXSkpIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDI0MmUpOwkJCQkvKiBtb3ZlLmwgZDE2KCVmcCksICVkMiAqLwomIzQzOwkJZW1pdF8xNihjdHgsICh1MTYpcjNbMV0pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjQwMCB8IHIzWzFdKTsJCQkvKiBtb3ZlLmwgcjMsICVkMiAqLwomIzQzOwl9CiYjNDM7CiYjNDM7CWVtaXRfMTYoY3R4LCAweGI0YTgpOwkJCQkJLyogY21wLmwgZDE2KCVhMCksICVkMiAqLwomIzQzOwllbWl0XzE2KGN0eCwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9hcnJheSwgbWFwLm1heF9lbnRyaWVzKSk7CiYjNDM7CWVtaXRfMTYoY3R4LCAweDY0MDApOwkJCQkJLyogYmNjLncgam1wX291dF8xICovCiYjNDM7CWptcF9vdXRfMSA9IGN0eC0mZ3Q7aWR4OwomIzQzOwllbWl0XzE2KGN0eCwgMCk7CiYjNDM7CiYjNDM7CWVtaXRfMTYoY3R4LCAweDI2MmUpOwkJCQkJLyogbW92ZS5sIGQxNiglZnApLCAlZDMgKi8KJiM0MzsJZW1pdF8xNihjdHgsICh1MTYpU1RBQ0tfT0ZGU0VUKEJQRl9UQ19MTykpOwomIzQzOwllbWl0XzE2KGN0eCwgMHg0YTgzKTsJCQkJCS8qIHRzdC5sICVkMyAqLwomIzQzOwllbWl0XzE2KGN0eCwgMHg2NzAwKTsJCQkJCS8qIGJlcS53IGptcF9vdXRfMiAqLwomIzQzOwlqbXBfb3V0XzIgPSBjdHgtJmd0O2lkeDsKJiM0MzsJZW1pdF8xNihjdHgsIDApOwomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHg1MzgzKTsJCQkJCS8qIHN1YnEubCAjMSwgJWQzICovCiYjNDM7CWVtaXRfMTYoY3R4LCAweDJkNDMpOwkJCQkJLyogbW92ZS5sICVkMywgZDE2KCVmcCkgKi8KJiM0MzsJZW1pdF8xNihjdHgsICh1MTYpU1RBQ0tfT0ZGU0VUKEJQRl9UQ19MTykpOwomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHhkNDgyKTsJCQkJCS8qIGFkZC5sICVkMiwgJWQyICovCiYjNDM7CWVtaXRfMTYoY3R4LCAweGQ0ODIpOwkJCQkJLyogYWRkLmwgJWQyLCAlZDIgKi8KJiM0MzsJZW1pdF8xNihjdHgsIDB4NDNlOCk7CQkJCQkvKiBsZWEgZDE2KCVhMCksICVhMSAqLwomIzQzOwllbWl0XzE2KGN0eCwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9hcnJheSwgcHRycykpOwomIzQzOwllbWl0XzE2KGN0eCwgMHhkM2MyKTsJCQkJCS8qIGFkZGEubCAlZDIsICVhMSAqLwomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHgyMDUxKTsJCQkJCS8qIG1vdmVhLmwgKCVhMSksICVhMCAqLwomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHgyNDA4KTsJCQkJCS8qIG1vdmUubCAlYTAsICVkMiAqLwomIzQzOwllbWl0XzE2KGN0eCwgMHg0YTgyKTsJCQkJCS8qIHRzdC5sICVkMiAqLwomIzQzOwllbWl0XzE2KGN0eCwgMHg2NzAwKTsJCQkJCS8qIGJlcS53IGptcF9vdXRfMyAqLwomIzQzOwlqbXBfb3V0XzMgPSBjdHgtJmd0O2lkeDsKJiM0MzsJZW1pdF8xNihjdHgsIDApOwomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHgyMDY4KTsJCQkJCS8qIG1vdmVhLmwgZDE2KCVhMCksICVhMCAqLwomIzQzOwllbWl0XzE2KGN0eCwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9wcm9nLCBicGZfZnVuYykpOwomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHg0ZWU4KTsJCQkJCS8qIGptcCBkMTYoJWEwKSAqLwomIzQzOwllbWl0XzE2KGN0eCwgNDQpOwomIzQzOwomIzQzOwlpZiAoY3R4LSZndDt0YXJnZXQpIHsKJiM0MzsJCWN0eC0mZ3Q7dGFyZ2V0W2ptcF9vdXRfMV0gPSAoY3R4LSZndDtpZHggLSBqbXBfb3V0XzEpICogMjsKJiM0MzsJCWN0eC0mZ3Q7dGFyZ2V0W2ptcF9vdXRfMl0gPSAoY3R4LSZndDtpZHggLSBqbXBfb3V0XzIpICogMjsKJiM0MzsJCWN0eC0mZ3Q7dGFyZ2V0W2ptcF9vdXRfM10gPSAoY3R4LSZndDtpZHggLSBqbXBfb3V0XzMpICogMjsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVtaXRfam1wKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eCwgaW50IGN1cnJfaSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLSZndDtkc3RfcmVnXTsKJiM0MzsJY29uc3QgczggKnNyYyA9IGJwZjJtNjhrW2luc24tJmd0O3NyY19yZWddOwomIzQzOwljb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07CiYjNDM7CWNvbnN0IHM4ICp0bXAyID0gYnBmMm02OGtbVE1QX1JFR18yXTsKJiM0MzsJczggZF9sbywgZF9oaSA9IDAsIHNfbG8sIHNfaGkgPSAwOwomIzQzOwlib29sIGlzX2ptcDMyID0gQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpID09IEJQRl9KTVAzMjsKJiM0MzsJdTggb3AgPSBCUEZfT1AoaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CWludCB0YXJnZXRfaW5zbjsKJiM0MzsKJiM0MzsJaWYgKGlzX2ptcDMyICZhbXA7JmFtcDsgb3AgPT0gQlBGX0pBKQomIzQzOwkJdGFyZ2V0X2luc24gPSBjdXJyX2kgJiM0MzsgMSAmIzQzOyBpbnNuLSZndDtpbW07CiYjNDM7CWVsc2UKJiM0MzsJCXRhcmdldF9pbnNuID0gY3Vycl9pICYjNDM7IDEgJiM0MzsgaW5zbi0mZ3Q7b2ZmOwomIzQzOwomIzQzOwlpZiAodGFyZ2V0X2luc24gJmx0OyAwIHx8IHRhcmdldF9pbnNuICZndDsgY3R4LSZndDtwcm9nLSZndDtsZW4pCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CSNkZWZpbmUgRU1JVF9KTVAzMihvcF9iYXNlKSBcCiYjNDM7CQlkbyB7IFwKJiM0MzsJCQlpbnQgZGlzcCA9IChjdHgtJmd0O29mZnNldHNbdGFyZ2V0X2luc25dIC0gKGN0eC0mZ3Q7aWR4ICYjNDM7IDEpKSAqIDI7IFwKJiM0MzsJCQllbWl0XzE2KGN0eCwgKG9wX2Jhc2UpIHwgMHgwMGZmKTsgXAomIzQzOwkJCWVtaXRfMzIoY3R4LCBkaXNwKTsgXAomIzQzOwkJfSB3aGlsZSAoMCkKJiM0MzsKJiM0MzsJaWYgKG9wID09IEJQRl9KQSkgewomIzQzOwkJRU1JVF9KTVAzMigweDYwMDApOwkJCQkvKiBicmEubCAqLwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZF9sbyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpOwomIzQzOwlpZiAoIWlzX2ptcDMyKQomIzQzOwkJZF9oaSA9IGJwZl9nZXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpOwomIzQzOwomIzQzOwlpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCkgewomIzQzOwkJc19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpOwomIzQzOwkJaWYgKCFpc19qbXAzMikKJiM0MzsJCQlzX2hpID0gYnBmX2dldF9yZWczMihzcmNbMF0sIHRtcDJbMF0sIGN0eCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzX2xvID0gdG1wMlsxXTsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIwM2MgfCAoc19sbyAmbHQ7Jmx0OyA5KSk7CQkvKiBtb3ZlLmwgI2ltbSwgc19sbyAqLwomIzQzOwkJZW1pdF8zMihjdHgsIGluc24tJmd0O2ltbSk7CiYjNDM7CQlpZiAoIWlzX2ptcDMyKSB7CiYjNDM7CQkJc19oaSA9IHRtcDJbMF07CiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4MjAzYyB8IChzX2hpICZsdDsmbHQ7IDkpKTsJLyogbW92ZS5sICNpbW0sIHNfaGkgKi8KJiM0MzsJCQllbWl0XzMyKGN0eCwgaW5zbi0mZ3Q7aW1tICZsdDsgMCA/IDB4ZmZmZmZmZmYgOiAwKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAob3AgPT0gQlBGX0pTRVQpIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIwMDAgfCAodG1wMVsxXSAmbHQ7Jmx0OyA5KSB8IGRfbG8pOwkvKiBtb3ZlLmwgZF9sbywgdG1wMV9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4YzA4MCB8ICh0bXAxWzFdICZsdDsmbHQ7IDkpIHwgc19sbyk7CS8qIGFuZC5sIHNfbG8sIHRtcDFfbG8gKi8KJiM0MzsKJiM0MzsJCWlmICghaXNfam1wMzIpIHsKJiM0MzsJCQlFTUlUX0pNUDMyKDB4NjYwMCk7CQkJLyogYm5lLmwgKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHgyMDAwIHwgKHRtcDFbMF0gJmx0OyZsdDsgOSkgfCBkX2hpKTsgLyogbW92ZS5sIGRfaGksIHRtcDFfaGkgKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHhjMDgwIHwgKHRtcDFbMF0gJmx0OyZsdDsgOSkgfCBzX2hpKTsgLyogYW5kLmwgc19oaSwgdG1wMV9oaSAqLwomIzQzOwkJfQomIzQzOwkJRU1JVF9KTVAzMigweDY2MDApOwkJCQkvKiBibmUubCAqLwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGlzX2ptcDMyKSB7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gJmx0OyZsdDsgOSkgfCBzX2xvKTsJLyogY21wLmwgc19sbywgZF9sbyAqLwomIzQzOwkJc3dpdGNoIChvcCkgewomIzQzOwkJY2FzZSBCUEZfSkVROgomIzQzOwkJCUVNSVRfSk1QMzIoMHg2NzAwKTsJCQkvKiBiZXEubCAqLwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBCUEZfSk5FOgomIzQzOwkJCUVNSVRfSk1QMzIoMHg2NjAwKTsJCQkvKiBibmUubCAqLwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBCUEZfSkdUOgomIzQzOwkJCUVNSVRfSk1QMzIoMHg2MjAwKTsJCQkvKiBiaGkubCAqLwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBCUEZfSkdFOgomIzQzOwkJCUVNSVRfSk1QMzIoMHg2NDAwKTsJCQkvKiBiY2MubCAqLwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBCUEZfSkxUOgomIzQzOwkJCUVNSVRfSk1QMzIoMHg2NTAwKTsJCQkvKiBiY3MubCAqLwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBCUEZfSkxFOgomIzQzOwkJCUVNSVRfSk1QMzIoMHg2MzAwKTsJCQkvKiBibHMubCAqLwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBCUEZfSlNHVDoKJiM0MzsJCQlFTUlUX0pNUDMyKDB4NmUwMCk7CQkJLyogYmd0LmwgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgQlBGX0pTR0U6CiYjNDM7CQkJRU1JVF9KTVAzMigweDZjMDApOwkJCS8qIGJnZS5sICovCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIEJQRl9KU0xUOgomIzQzOwkJCUVNSVRfSk1QMzIoMHg2ZDAwKTsJCQkvKiBibHQubCAqLwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBCUEZfSlNMRToKJiM0MzsJCQlFTUlUX0pNUDMyKDB4NmYwMCk7CQkJLyogYmxlLmwgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9oaSAmbHQ7Jmx0OyA5KSB8IHNfaGkpOwkvKiBjbXAubCBzX2hpLCBkX2hpICovCiYjNDM7CiYjNDM7CQlzd2l0Y2ggKG9wKSB7CiYjNDM7CQljYXNlIEJQRl9KRVE6CiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4NjYwOCk7CQkJLyogYm5lLnMgLiYjNDM7OCAqLwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyAmbHQ7Jmx0OyA5KSB8IHNfbG8pOyAvKiBjbXAubCBzX2xvLCBkX2xvICovCiYjNDM7CQkJRU1JVF9KTVAzMigweDY3MDApOwkJCS8qIGJlcS5sICovCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIEJQRl9KTkU6CiYjNDM7CQkJRU1JVF9KTVAzMigweDY2MDApOwkJCS8qIGJuZS5sICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvICZsdDsmbHQ7IDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi8KJiM0MzsJCQlFTUlUX0pNUDMyKDB4NjYwMCk7CQkJLyogYm5lLmwgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgQlBGX0pHVDoKJiM0MzsJCQlFTUlUX0pNUDMyKDB4NjIwMCk7CQkJLyogYmhpLmwgKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg2NTA4KTsJCQkvKiBiY3MucyAuJiM0Mzs4ICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvICZsdDsmbHQ7IDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi8KJiM0MzsJCQlFTUlUX0pNUDMyKDB4NjIwMCk7CQkJLyogYmhpLmwgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgQlBGX0pHRToKJiM0MzsJCQlFTUlUX0pNUDMyKDB4NjIwMCk7CQkJLyogYmhpLmwgKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg2NTA4KTsJCQkvKiBiY3MucyAuJiM0Mzs4ICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvICZsdDsmbHQ7IDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi8KJiM0MzsJCQlFTUlUX0pNUDMyKDB4NjQwMCk7CQkJLyogYmNjLmwgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgQlBGX0pMVDoKJiM0MzsJCQlFTUlUX0pNUDMyKDB4NjUwMCk7CQkJLyogYmNzLmwgKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg2MjA4KTsJCQkvKiBiaGkucyAuJiM0Mzs4ICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvICZsdDsmbHQ7IDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi8KJiM0MzsJCQlFTUlUX0pNUDMyKDB4NjUwMCk7CQkJLyogYmNzLmwgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgQlBGX0pMRToKJiM0MzsJCQlFTUlUX0pNUDMyKDB4NjUwMCk7CQkJLyogYmNzLmwgKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg2MjA4KTsJCQkvKiBiaGkucyAuJiM0Mzs4ICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvICZsdDsmbHQ7IDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi8KJiM0MzsJCQlFTUlUX0pNUDMyKDB4NjMwMCk7CQkJLyogYmxzLmwgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgQlBGX0pTR1Q6CiYjNDM7CQkJRU1JVF9KTVAzMigweDZlMDApOwkJCS8qIGJndC5sICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4NmQwOCk7CQkJLyogYmx0LnMgLiYjNDM7OCAqLwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyAmbHQ7Jmx0OyA5KSB8IHNfbG8pOyAvKiBjbXAubCBzX2xvLCBkX2xvICovCiYjNDM7CQkJRU1JVF9KTVAzMigweDYyMDApOwkJCS8qIGJoaS5sICovCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIEJQRl9KU0dFOgomIzQzOwkJCUVNSVRfSk1QMzIoMHg2ZTAwKTsJCQkvKiBiZ3QubCAqLwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweDZkMDgpOwkJCS8qIGJsdC5zIC4mIzQzOzggKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gJmx0OyZsdDsgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqLwomIzQzOwkJCUVNSVRfSk1QMzIoMHg2NDAwKTsJCQkvKiBiY2MubCAqLwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBCUEZfSlNMVDoKJiM0MzsJCQlFTUlUX0pNUDMyKDB4NmQwMCk7CQkJLyogYmx0LmwgKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg2ZTA4KTsJCQkvKiBiZ3QucyAuJiM0Mzs4ICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvICZsdDsmbHQ7IDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi8KJiM0MzsJCQlFTUlUX0pNUDMyKDB4NjUwMCk7CQkJLyogYmNzLmwgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgQlBGX0pTTEU6CiYjNDM7CQkJRU1JVF9KTVAzMigweDZkMDApOwkJCS8qIGJsdC5sICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4NmUwOCk7CQkJLyogYmd0LnMgLiYjNDM7OCAqLwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyAmbHQ7Jmx0OyA5KSB8IHNfbG8pOyAvKiBjbXAubCBzX2xvLCBkX2xvICovCiYjNDM7CQkJRU1JVF9KTVAzMigweDYzMDApOwkJCS8qIGJscy5sICovCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJI3VuZGVmIEVNSVRfSk1QMzIKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW1pdF9jYWxsKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHM4IGFyZ19yZWdzW10gPSB7IEJQRl9SRUdfNSwgQlBGX1JFR180LCBCUEZfUkVHXzMsIEJQRl9SRUdfMiwgQlBGX1JFR18xIH07CiYjNDM7CWNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTsKJiM0MzsJYm9vbCBleHRyYV9wYXNzID0gY3R4LSZndDtwcm9nLSZndDtqaXRlZDsKJiM0MzsJdTY0IGZ1bmNfYWRkcjsKJiM0MzsJYm9vbCBmaXhlZDsKJiM0MzsJaW50IGksIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX2ppdF9nZXRfZnVuY19hZGRyKGN0eC0mZ3Q7cHJvZywgaW5zbiwgZXh0cmFfcGFzcywgJmFtcDtmdW5jX2FkZHIsICZhbXA7Zml4ZWQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IDU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzOCAqcmVnID0gYnBmMm02OGtbYXJnX3JlZ3NbaV1dOwomIzQzOwkJczggZF9sbyA9IGJwZl9nZXRfcmVnMzIocmVnWzFdLCB0bXAxWzFdLCBjdHgpOwomIzQzOwkJczggZF9oaSA9IGJwZl9nZXRfcmVnMzIocmVnWzBdLCB0bXAxWzBdLCBjdHgpOwomIzQzOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MmYwMCB8IGRfbG8pOwkJCS8qIG1vdmUubCBkX2xvLCAtKCVzcCkgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCAweDJmMDAgfCBkX2hpKTsJCQkvKiBtb3ZlLmwgZF9oaSwgLSglc3ApICovCiYjNDM7CX0KJiM0MzsKJiM0MzsJZW1pdF8xNihjdHgsIDB4MjA3Yyk7CQkJCQkvKiBtb3ZlYS5sICNmdW5jX2FkZHIsICVhMCAqLwomIzQzOwllbWl0XzMyKGN0eCwgKHUzMilmdW5jX2FkZHIpOwomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHg0ZTkwKTsJCQkJCS8qIGpzciAoJWEwKSAqLwomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHg0ZmVmKTsJCQkJCS8qIGxlYSA0MCglc3ApLCAlc3AgKi8KJiM0MzsJZW1pdF8xNihjdHgsIDQwKTsKJiM0MzsKJiM0MzsJaWYgKGluc24tJmd0O3NyY19yZWcgIT0gQlBGX1BTRVVET19DQUxMKQomIzQzOwkJZW1pdF8xNihjdHgsIDB4YzM0MCk7CQkJCQkvKiBleGcgJWQwLCAlZDEgKi8KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJ1aWxkX3Byb2xvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwlpbnQgYnBmX3N0YWNrID0gTUFYX0JQRl9TVEFDSzsKJiM0MzsJaW50IHRvdGFsX3N0YWNrID0gU0NSQVRDSF9TSVpFICYjNDM7IGJwZl9zdGFjazsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWVtaXRfMTYoY3R4LCAweDcwMjEpOwkJCQkJLyogbW92ZXEgIzMzLCAlZDAgKi8KJiM0MzsKJiM0MzsJZW1pdF8xNihjdHgsIDB4NGU1Nik7CQkJCQkvKiBsaW5rICVhNiwgIy10b3RhbF9zdGFjayAqLwomIzQzOwllbWl0XzE2KGN0eCwgLXRvdGFsX3N0YWNrKTsKJiM0MzsKJiM0MzsJZW1pdF8xNihjdHgsIDB4NDhlNyk7CQkJCQkvKiBtb3ZlbS5sIGQyLWQ1LCAtKCVzcCkgKi8KJiM0MzsJZW1pdF8xNihjdHgsIDB4M2MwMCk7CiYjNDM7CiYjNDM7CWVtaXRfMTYoY3R4LCAweDJkNDApOwkJCQkJLyogbW92ZS5sICVkMCwgb2ZmKCVmcCkgKi8KJiM0MzsJZW1pdF8xNihjdHgsICh1MTYpU1RBQ0tfT0ZGU0VUKEJQRl9UQ19MTykpOwomIzQzOwomIzQzOwlpZiAoY3R4LSZndDtwcm9nLSZndDtpc19mdW5jKSB7CiYjNDM7CQljb25zdCBzOCBhcmdfcmVnc1tdID0geyBCUEZfUkVHXzEsIEJQRl9SRUdfMiwgQlBGX1JFR18zLCBCUEZfUkVHXzQsIEJQRl9SRUdfNSB9OwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IDU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJaW50IG9mZnNldCA9IDggJiM0MzsgaSAqIDg7CiYjNDM7CQkJY29uc3QgczggKnJlZyA9IGJwZjJtNjhrW2FyZ19yZWdzW2ldXTsKJiM0MzsKJiM0MzsJCQllbWl0XzE2KGN0eCwgMHgyMDJlKTsgLyogbW92ZS5sIG9mZnNldCglZnApLCAlZDAgKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgb2Zmc2V0KTsKJiM0MzsJCQlicGZfcHV0X3JlZzMyKHJlZ1swXSwgTTY4S19EMCwgY3R4KTsKJiM0MzsKJiM0MzsJCQllbWl0XzE2KGN0eCwgMHgyMDJlKTsgLyogbW92ZS5sIG9mZnNldCYjNDM7NCglZnApLCAlZDAgKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgb2Zmc2V0ICYjNDM7IDQpOwomIzQzOwkJCWJwZl9wdXRfcmVnMzIocmVnWzFdLCBNNjhLX0QwLCBjdHgpOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjAyZSk7CQkJCS8qIG1vdmUubCA4KCVmcCksICVkMCAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDgpOwomIzQzOwkJYnBmX3B1dF9yZWczMihicGYybTY4a1tCUEZfUkVHXzFdWzFdLCBNNjhLX0QwLCBjdHgpOwomIzQzOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4NzAwMCB8IChNNjhLX0QwICZsdDsmbHQ7IDkpKTsJCQkvKiBtb3ZlcSAjMCwgJWQwICovCiYjNDM7CQlicGZfcHV0X3JlZzMyKGJwZjJtNjhrW0JQRl9SRUdfMV1bMF0sIE02OEtfRDAsIGN0eCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZW1pdF8xNihjdHgsIDB4NDFlZSk7CQkJCQkvKiBsZWEgLVNDUkFUQ0hfU0laRSglZnApLCAlYTAgKi8KJiM0MzsJZW1pdF8xNihjdHgsIC1TQ1JBVENIX1NJWkUpOwomIzQzOwllbWl0XzE2KGN0eCwgMHgyMDA4KTsJCQkJCS8qIG1vdmUubCAlYTAsICVkMCAqLwomIzQzOwomIzQzOwlicGZfcHV0X3JlZzMyKGJwZjJtNjhrW0JQRl9SRUdfMTBdWzFdLCBNNjhLX0QwLCBjdHgpOwomIzQzOwllbWl0XzE2KGN0eCwgMHg3MDAwIHwgKE02OEtfRDAgJmx0OyZsdDsgOSkpOwkJCS8qIG1vdmVxICMwLCAlZDAgKi8KJiM0MzsJYnBmX3B1dF9yZWczMihicGYybTY4a1tCUEZfUkVHXzEwXVswXSwgTTY4S19EMCwgY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYnVpbGRfZXBpbG9ndWUoc3RydWN0IGppdF9jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CWVtaXRfMTYoY3R4LCAweDRjZGYpOwkJCQkJLyogbW92ZW0ubCAoJXNwKSYjNDM7LCBkMi1kNSAqLwomIzQzOwllbWl0XzE2KGN0eCwgMHgwMDNjKTsKJiM0MzsKJiM0MzsJZW1pdF8xNihjdHgsIDB4NGU1ZSk7CQkJCQkvKiB1bmxrICVmcCAqLwomIzQzOwllbWl0XzE2KGN0eCwgMHg0ZTc1KTsJCQkJCS8qIHJ0cyAqLwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgaSkKJiM0Mzt7CiYjNDM7CXU4IGNvZGUgPSBpbnNuLSZndDtjb2RlOwomIzQzOwomIzQzOwlzd2l0Y2ggKGNvZGUpIHsKJiM0MzsJY2FzZSBCUEZfQUxVIHwgQlBGX05FRzoKJiM0MzsJCWVtaXRfYWx1MzJfbmVnKGluc24sIGN0eCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfQUxVNjQgfCBCUEZfTkVHOgomIzQzOwkJZW1pdF9hbHU2NF9uZWcoaW5zbiwgY3R4KTsKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwljYXNlIEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0FMVSB8IEJQRl9BREQgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfQUxVIHwgQlBGX1NVQiB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9BTFUgfCBCUEZfQU5EIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0FMVSB8IEJQRl9PUiAgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfQUxVIHwgQlBGX1hPUiB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9BTFUgfCBCUEZfTFNIIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0FMVSB8IEJQRl9SU0ggfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfQUxVIHwgQlBGX0FSU0ggfCBCUEZfWDoKJiM0MzsJCWVtaXRfYWx1MzJfeChpbnNuLCBjdHgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgQlBGX0FMVSB8IEJQRl9NT1YgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfQUxVIHwgQlBGX0FERCB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9BTFUgfCBCUEZfU1VCIHwgQlBGX0s6CiYjNDM7CWNhc2UgQlBGX0FMVSB8IEJQRl9BTkQgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfQUxVIHwgQlBGX09SICB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9BTFUgfCBCUEZfWE9SIHwgQlBGX0s6CiYjNDM7CWNhc2UgQlBGX0FMVSB8IEJQRl9MU0ggfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfQUxVIHwgQlBGX1JTSCB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9BTFUgfCBCUEZfQVJTSCB8IEJQRl9LOgomIzQzOwkJZW1pdF9hbHUzMl9rKGluc24sIGN0eCk7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0FMVTY0IHwgQlBGX0FERCB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9BTFU2NCB8IEJQRl9TVUIgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfQUxVNjQgfCBCUEZfQU5EIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0FMVTY0IHwgQlBGX09SICB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9BTFU2NCB8IEJQRl9YT1IgfCBCUEZfWDoKJiM0MzsJCWVtaXRfYWx1NjRfeChpbnNuLCBjdHgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9BTFU2NCB8IEJQRl9BREQgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfQUxVNjQgfCBCUEZfU1VCIHwgQlBGX0s6CiYjNDM7CWNhc2UgQlBGX0FMVTY0IHwgQlBGX0FORCB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9BTFU2NCB8IEJQRl9PUiAgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfQUxVNjQgfCBCUEZfWE9SIHwgQlBGX0s6CiYjNDM7CQllbWl0X2FsdTY0X2soaW5zbiwgY3R4KTsKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwljYXNlIEJQRl9BTFU2NCB8IEJQRl9MU0ggfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfQUxVNjQgfCBCUEZfUlNIIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0FMVTY0IHwgQlBGX0FSU0ggfCBCUEZfWDoKJiM0MzsJCWVtaXRfYWx1NjRfc2hpZnQoaW5zbiwgY3R4LCBmYWxzZSk7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBCUEZfQUxVNjQgfCBCUEZfTFNIIHwgQlBGX0s6CiYjNDM7CWNhc2UgQlBGX0FMVTY0IHwgQlBGX1JTSCB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9BTFU2NCB8IEJQRl9BUlNIIHwgQlBGX0s6CiYjNDM7CQllbWl0X2FsdTY0X3NoaWZ0KGluc24sIGN0eCwgdHJ1ZSk7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBCUEZfQUxVIHwgQlBGX01VTCB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9BTFUgfCBCUEZfRElWIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0FMVSB8IEJQRl9NT0QgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfQUxVIHwgQlBGX01VTCB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9BTFUgfCBCUEZfRElWIHwgQlBGX0s6CiYjNDM7CWNhc2UgQlBGX0FMVSB8IEJQRl9NT0QgfCBCUEZfSzoKJiM0MzsJCWVtaXRfbWF0aF9jYWxsKGluc24sIGN0eCwgZmFsc2UpOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgQlBGX0FMVTY0IHwgQlBGX01VTCB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9BTFU2NCB8IEJQRl9ESVYgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9EIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0FMVTY0IHwgQlBGX01VTCB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9BTFU2NCB8IEJQRl9ESVYgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9EIHwgQlBGX0s6CiYjNDM7CQllbWl0X21hdGhfY2FsbChpbnNuLCBjdHgsIHRydWUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgQlBGX0FMVSB8IEJQRl9FTkQgfCBCUEZfVE9fQkU6CiYjNDM7CWNhc2UgQlBGX0FMVSB8IEJQRl9FTkQgfCBCUEZfVE9fTEU6CiYjNDM7CWNhc2UgQlBGX0FMVTY0IHwgQlBGX0VORCB8IEJQRl9UT19CRToKJiM0MzsJY2FzZSBCUEZfQUxVNjQgfCBCUEZfRU5EIHwgQlBGX1RPX0xFOgomIzQzOwkJZW1pdF9icGZfZW5kKGluc24sIGN0eCk7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBCUEZfTEQgfCBCUEZfSU1NIHwgQlBGX0RXOiB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24xID0gaW5zbiAmIzQzOyAxOwomIzQzOwkJY29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tJmd0O2RzdF9yZWddOwomIzQzOwkJY29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdOwomIzQzOwkJczggZF9sbyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpOwomIzQzOwkJczggZF9oaSA9IGJwZl9nZXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpOwomIzQzOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjAzYyB8IChkX2xvICZsdDsmbHQ7IDkpKTsJCQkvKiBtb3ZlLmwgI2ltbSwgZF9sbyAqLwomIzQzOwkJZW1pdF8zMihjdHgsIGluc24tJmd0O2ltbSk7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyMDNjIHwgKGRfaGkgJmx0OyZsdDsgOSkpOwkJCS8qIG1vdmUubCAjaW1tLCBkX2hpICovCiYjNDM7CQllbWl0XzMyKGN0eCwgaW5zbjEtJmd0O2ltbSk7CiYjNDM7CiYjNDM7CQlicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9sbywgY3R4KTsKJiM0MzsJCWJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9COgomIzQzOwljYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0g6CiYjNDM7CWNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfVzoKJiM0MzsJY2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9EVzoKJiM0MzsJY2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX0I6CiYjNDM7CWNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9IOgomIzQzOwljYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfVzoKJiM0MzsJCWVtaXRfbGR4KGluc24sIGN0eCk7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9COgomIzQzOwljYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX0g6CiYjNDM7CWNhc2UgQlBGX1NUWCB8IEJQRl9NRU0gfCBCUEZfVzoKJiM0MzsJY2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9EVzoKJiM0MzsJCWVtaXRfc3R4KGluc24sIGN0eCk7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBCUEZfU1QgfCBCUEZfTUVNIHwgQlBGX0I6CiYjNDM7CWNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9IOgomIzQzOwljYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfVzoKJiM0MzsJY2FzZSBCUEZfU1QgfCBCUEZfTUVNIHwgQlBGX0RXOgomIzQzOwkJZW1pdF9zdChpbnNuLCBjdHgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVzoKJiM0MzsJY2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9EVzoKJiM0MzsJCWVtaXRfYXRvbWljKGluc24sIGN0eCk7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX1RBSUxfQ0FMTDoKJiM0MzsJCWVtaXRfdGFpbF9jYWxsKGluc24sIGN0eCk7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pBOgomIzQzOwljYXNlIEJQRl9KTVAzMiB8IEJQRl9KQToKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pFUSB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9KTVAgfCBCUEZfSkVRIHwgQlBGX0s6CiYjNDM7CWNhc2UgQlBGX0pNUCB8IEJQRl9KTkUgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pORSB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9KTVAgfCBCUEZfSkdUIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0pNUCB8IEJQRl9KR1QgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pHRSB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9KTVAgfCBCUEZfSkdFIHwgQlBGX0s6CiYjNDM7CWNhc2UgQlBGX0pNUCB8IEJQRl9KTFQgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pMVCB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9KTVAgfCBCUEZfSkxFIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0pNUCB8IEJQRl9KTEUgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pTR1QgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pTR1QgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pTR0UgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pTR0UgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pTTFQgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pTTFQgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pTTEUgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pTTEUgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pTRVQgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pTRVQgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfSk1QMzIgfCBCUEZfSkVRIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0pNUDMyIHwgQlBGX0pFUSB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9KTVAzMiB8IEJQRl9KTkUgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfSk1QMzIgfCBCUEZfSk5FIHwgQlBGX0s6CiYjNDM7CWNhc2UgQlBGX0pNUDMyIHwgQlBGX0pHVCB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9KTVAzMiB8IEJQRl9KR1QgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfSk1QMzIgfCBCUEZfSkdFIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0pNUDMyIHwgQlBGX0pHRSB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9KTVAzMiB8IEJQRl9KTFQgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfSk1QMzIgfCBCUEZfSkxUIHwgQlBGX0s6CiYjNDM7CWNhc2UgQlBGX0pNUDMyIHwgQlBGX0pMRSB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9KTVAzMiB8IEJQRl9KTEUgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNHVCB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9KTVAzMiB8IEJQRl9KU0dUIHwgQlBGX0s6CiYjNDM7CWNhc2UgQlBGX0pNUDMyIHwgQlBGX0pTR0UgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNHRSB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9KTVAzMiB8IEJQRl9KU0xUIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0pNUDMyIHwgQlBGX0pTTFQgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNMRSB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9KTVAzMiB8IEJQRl9KU0xFIHwgQlBGX0s6CiYjNDM7CWNhc2UgQlBGX0pNUDMyIHwgQlBGX0pTRVQgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNFVCB8IEJQRl9LOgomIzQzOwkJcmV0dXJuIGVtaXRfam1wKGluc24sIGN0eCwgaSk7CiYjNDM7CiYjNDM7CWNhc2UgQlBGX0pNUCB8IEJQRl9DQUxMOgomIzQzOwkJcmV0dXJuIGVtaXRfY2FsbChpbnNuLCBjdHgpOwomIzQzOwomIzQzOwljYXNlIEJQRl9KTVAgfCBCUEZfRVhJVDoKJiM0MzsJCWJ1aWxkX2VwaWxvZ3VlKGN0eCk7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBidWlsZF9ib2R5KHN0cnVjdCBqaXRfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBjdHgtJmd0O3Byb2c7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcHJvZy0mZ3Q7bGVuOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuID0gJmFtcDtwcm9nLSZndDtpbnNuc2lbaV07CiYjNDM7CQlpbnQgcmV0OwomIzQzOwomIzQzOwkJaWYgKCFjdHgtJmd0O3RhcmdldCkKJiM0MzsJCQljdHgtJmd0O29mZnNldHNbaV0gPSBjdHgtJmd0O2lkeDsKJiM0MzsKJiM0MzsJCXJldCA9IGJ1aWxkX2luc24oaW5zbiwgY3R4LCBpKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlpZiAoaW5zbi0mZ3Q7Y29kZSA9PSAoQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVykpIHsKJiM0MzsJCQlpJiM0MzsmIzQzOzsKJiM0MzsJCQlpZiAoIWN0eC0mZ3Q7dGFyZ2V0KQomIzQzOwkJCQljdHgtJmd0O29mZnNldHNbaV0gPSBjdHgtJmd0O2lkeDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWN0eC0mZ3Q7dGFyZ2V0KQomIzQzOwkJY3R4LSZndDtvZmZzZXRzW3Byb2ctJmd0O2xlbl0gPSBjdHgtJmd0O2lkeDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgYnBmX2ppdF9uZWVkc196ZXh0KHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaml0X2ZpbGxfaG9sZSh2b2lkICphcmVhLCB1bnNpZ25lZCBpbnQgc2l6ZSkKJiM0Mzt7CiYjNDM7CXUxNiAqcHRyOwomIzQzOwomIzQzOwlmb3IgKHB0ciA9IGFyZWE7IHNpemUgJmd0Oz0gMjsgc2l6ZSAtPSAyKQomIzQzOwkJKnB0ciYjNDM7JiM0MzsgPSAweDRhZmM7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKmhlYWRlcjsKJiM0MzsJc3RydWN0IGppdF9jdHggY3R4OwomIzQzOwl1bnNpZ25lZCBpbnQgaW1hZ2Vfc2l6ZTsKJiM0MzsJdTggKmltYWdlX3B0cjsKJiM0MzsJYm9vbCBleHRyYV9wYXNzID0gcHJvZy0mZ3Q7aml0ZWQ7CiYjNDM7CiYjNDM7CWlmICghcHJvZy0mZ3Q7aml0X3JlcXVlc3RlZCkKJiM0MzsJCXJldHVybiBwcm9nOwomIzQzOwomIzQzOwlpZiAocHJvZy0mZ3Q7aml0ZWQgJmFtcDsmYW1wOyAhcHJvZy0mZ3Q7YXV4LSZndDtmdW5jKQomIzQzOwkJcmV0dXJuIHByb2c7CiYjNDM7CiYjNDM7CW1lbXNldCgmYW1wO2N0eCwgMCwgc2l6ZW9mKGN0eCkpOwomIzQzOwljdHgucHJvZyA9IHByb2c7CiYjNDM7CiYjNDM7CWN0eC5vZmZzZXRzID0ga3ZjYWxsb2MocHJvZy0mZ3Q7bGVuICYjNDM7IDEsIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFjdHgub2Zmc2V0cykKJiM0MzsJCXJldHVybiBwcm9nOwomIzQzOwomIzQzOwlidWlsZF9wcm9sb2d1ZSgmYW1wO2N0eCk7CiYjNDM7CWlmIChidWlsZF9ib2R5KCZhbXA7Y3R4KSAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dF9vZmY7CiYjNDM7CWJ1aWxkX2VwaWxvZ3VlKCZhbXA7Y3R4KTsKJiM0MzsKJiM0MzsJaWYgKGV4dHJhX3Bhc3MpIHsKJiM0MzsJCWhlYWRlciA9IHByb2ctJmd0O2F1eC0mZ3Q7aml0X2RhdGE7CiYjNDM7CQlpbWFnZV9wdHIgPSAodTggKilwcm9nLSZndDticGZfZnVuYzsKJiM0MzsJCWltYWdlX3NpemUgPSBwcm9nLSZndDtqaXRlZF9sZW47CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpbWFnZV9zaXplID0gY3R4LmlkeCAqIDI7CiYjNDM7CQloZWFkZXIgPSBicGZfaml0X2JpbmFyeV9hbGxvYyhpbWFnZV9zaXplLCAmYW1wO2ltYWdlX3B0ciwgMiwgaml0X2ZpbGxfaG9sZSk7CiYjNDM7CQlpZiAoIWhlYWRlcikKJiM0MzsJCQlnb3RvIG91dF9vZmY7CiYjNDM7CQlwcm9nLSZndDthdXgtJmd0O2ppdF9kYXRhID0gaGVhZGVyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWN0eC50YXJnZXQgPSAodTE2ICopaW1hZ2VfcHRyOwomIzQzOwljdHguaWR4ID0gMDsKJiM0MzsKJiM0MzsJYnVpbGRfcHJvbG9ndWUoJmFtcDtjdHgpOwomIzQzOwlpZiAoYnVpbGRfYm9keSgmYW1wO2N0eCkgJmx0OyAwKSB7CiYjNDM7CQlicGZfaml0X2JpbmFyeV9mcmVlKGhlYWRlcik7CiYjNDM7CQlwcm9nLSZndDthdXgtJmd0O2ppdF9kYXRhID0gTlVMTDsKJiM0MzsJCXByb2ctJmd0O2JwZl9mdW5jID0gTlVMTDsKJiM0MzsJCXByb2ctJmd0O2ppdGVkID0gMDsKJiM0MzsJCXByb2ctJmd0O2ppdGVkX2xlbiA9IDA7CiYjNDM7CQlnb3RvIG91dF9vZmY7CiYjNDM7CX0KJiM0MzsJYnVpbGRfZXBpbG9ndWUoJmFtcDtjdHgpOwomIzQzOwomIzQzOwlmbHVzaF9pY2FjaGVfcmFuZ2UoKHUzMiloZWFkZXIsICh1MzIpKGN0eC50YXJnZXQgJiM0MzsgY3R4LmlkeCkpOwomIzQzOwomIzQzOwlpZiAoYnBmX2ppdF9lbmFibGUgJmd0OyAxKQomIzQzOwkJYnBmX2ppdF9kdW1wKHByb2ctJmd0O2xlbiwgaW1hZ2Vfc2l6ZSwgMiwgY3R4LnRhcmdldCk7CiYjNDM7CiYjNDM7CWlmICgoIXByb2ctJmd0O2F1eC0mZ3Q7ZnVuYyB8fCBleHRyYV9wYXNzKSAmYW1wOyZhbXA7IGJwZl9qaXRfYmluYXJ5X2xvY2tfcm8oaGVhZGVyKSkgewomIzQzOwkJYnBmX2ppdF9iaW5hcnlfZnJlZShoZWFkZXIpOwomIzQzOwkJcHJvZy0mZ3Q7YnBmX2Z1bmMgPSBOVUxMOwomIzQzOwkJcHJvZy0mZ3Q7aml0ZWQgPSAwOwomIzQzOwkJcHJvZy0mZ3Q7aml0ZWRfbGVuID0gMDsKJiM0MzsJCXByb2ctJmd0O2F1eC0mZ3Q7aml0X2RhdGEgPSBOVUxMOwomIzQzOwkJZ290byBvdXRfb2ZmOwomIzQzOwl9CiYjNDM7CiYjNDM7CXByb2ctJmd0O2JwZl9mdW5jID0gKHZvaWQgKiljdHgudGFyZ2V0OwomIzQzOwlwcm9nLSZndDtqaXRlZCA9IDE7CiYjNDM7CXByb2ctJmd0O2ppdGVkX2xlbiA9IGltYWdlX3NpemU7CiYjNDM7CiYjNDM7b3V0X29mZjoKJiM0MzsJa3ZmcmVlKGN0eC5vZmZzZXRzKTsKJiM0MzsJcmV0dXJuIHByb2c7CiYjNDM7fQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODg1MAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDExOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBvZiBtNjhrIEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2gqKgoKT2theSwgc28gd2UgaGF2ZSBhIHBhdGNoIGludHJvZHVjaW5nIGEgQlBGIEpJVCBjb21waWxlciBzcGVjaWZpY2FsbHkgZm9yIHRoZSBtNjhrIGFyY2hpdGVjdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0NhbiB3ZSBldmVuIGZ1enogdGhpcz8mIzM0OyBNeSBrbm93bGVkZ2UgdGVsbHMgbWUgdGhhdCBtNjhrIGlzbiYjMzk7dCBhICpzdGFuZGFyZCogdGFyZ2V0IGZvciBmdXp6aW5nIHdpdGhpbiB0aGUgdXN1YWwgc3l6a2FsbGVyIHNldHVwcywgd2hpY2ggbGVhbiB0b3dhcmRzIGFyY2hpdGVjdHVyZXMgbGlrZSB4ODZfNjQsIGFybTY0LCBldGMuIEhvd2V2ZXIsIGxldCYjMzk7cyBub3QganVtcCB0byBjb25jbHVzaW9ucy4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgZXhjbHVkZXMgdGhpbmdzIHRoYXQgY2FuJiMzOTt0IGJlIHJlYWNoZWQgaW4gUUVNVSwgYW5kIFFFTVUgKmRvZXMqIHN1cHBvcnQgbTY4ay4gVGhhdCYjMzk7cyBhIGtleSBwb2ludC4KClRoZSBwYXRjaCBtb2RpZmllcyBgTUFJTlRBSU5FUlNgLCBgS2J1aWxkYCwgYEtjb25maWdgLCBgTWFrZWZpbGVgLCBhbmQgaW50cm9kdWNlcyBgYnBmX2ppdF9jb21wLmNgLCB3aGljaCBpcyB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gVGhpcyBuZXcgZmlsZSBpbXBsZW1lbnRzIHRoZSBhY3R1YWwgQlBGIEpJVCBjb21waWxlciBmb3IgbTY4ay4gTm93LCBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlPyBUaGUgaW1wb3J0YW50IHRoaW5nIGlzOiAqSXMgaXQgcG9zc2libGUgdG8gcmVhY2ggdGhlIHBhdGNoZWQgY29kZT8qCgpMb29raW5nIGF0IHRoZSBjb2RlLCBpdCBpbXBsZW1lbnRzIGBicGZfaW50X2ppdF9jb21waWxlYC4gIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50OyB0aGUgcHJvbXB0IHNheXMgdG8gbG9vayBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBzdGF0aWMuIFRoZSBgTWFrZWZpbGVgIGNvbmZpcm1zIHRoYXQgYENPTkZJR19CUEZfSklUYCBpcyBuZWNlc3NhcnkuIE5vdyBJIG5lZWQgdG8gY29uZmlybSBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgYW4gQVBJIGVudHJ5IHBvaW50LCBzbyBJJiMzOTttIHN1cmUgb2Ygd2hhdCB0byBlbmFibGUuIFRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtLiBXaGVuIGEgQlBGIHByb2dyYW0gaXMgbG9hZGVkIGFuZCBKSVQgaXMgZW5hYmxlZCwgaXQmIzM5O3MgY2FsbGVkLiBUaGlzIG1lYW5zIHRoYXQsIGFzc3VtaW5nIHRoZSBjb25maWcgaXMgZW5hYmxlZCwgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHRyaWdnZXIgdGhlIG5ldyBjb2RlLgoKVGhlIHByb21wdCBndWlkZXMgbWUgdG93YXJkIGEgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBkZWNpc2lvbi4gIFNpbmNlIGl0JiMzOTtzIG02OGstc3BlY2lmaWMsIGFuZCBtNjhrICppcyogZW11bGFibGUgaW4gUUVNVSwgdGhlIGNvZGUgKnNob3VsZCogYmUgcmVhY2hhYmxlIHVuZGVyIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoaXMgc3VnZ2VzdHMgZnV6emluZyBpcyAqcG9zc2libGUqLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSAmIzM0O2lmIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpbiBRRU1VLCByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUmIzM0Oy4gSXQmIzM5O3Mgbm90IGV4Y2x1ZGVkIGFuZCBpcyBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmVhdHVyZSBpbiBhbiBhcmNoaXRlY3R1cmUgc3VwcG9ydGVkIGJ5IFFFTVUuCgpTbywgbGV0IG1lIGV4dHJhY3QgdGhlIGNvbmZpZyByZXF1aXJlbWVudHMuIFRoZSBgTWFrZWZpbGVgIHNob3dzIGBDT05GSUdfQlBGX0pJVGAgaXMgbmVlZGVkLiBgSEFWRV9FQlBGX0pJVGAgaXMgYWxzbyBzZWxlY3RlZCBpZiBub3QgYENPTERGSVJFYCBvciBgTTY4MDAwYCwgYmFzZWQgb24gdGhlIGBLY29uZmlnYC4gVGhlcmVmb3JlLCBJIG11c3QgZW5hYmxlIGBCUEZfSklUYC4KCkkgY29uZmlybSBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgdGhlIGVudHJ5IHBvaW50LCBhbmQgdGhhdCBgYnBmX2ppdF9uZWVkc196ZXh0YCBpcyB0aGUgb25seSBmdW5jdGlvbiBub3Qgc3RhdGljLCBhcGFydCBmcm9tIGBicGZfaW50X2ppdF9jb21waWxlYC4KClRoZSBjb25jbHVzaW9uIGlzLCBpdCBpcyBmZWFzaWJsZSB0byBmdXp6LCBhbmQgSSB3b3VsZCBub3cgbW92ZSBvbiB0byBjb25maXJtaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHJ1bm5pbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgdGVzdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYz0xNTQ5PXN0YXRpYyB2b2lkIGppdF9maWxsX2hvbGUodm9pZCAqYXJlYSwgdW5zaWduZWQgaW50IHNpemUpXG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNTU2LVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxNTU3OnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE1NTgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA0OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwODczCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQlBGIEpJVCBDb21waWxlciBTeW1ib2xzKioKCkFscmlnaHQsIHNvIGBicGZfaW50X2ppdF9jb21waWxlYCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgY29uZmlybWluZyBteSBpbml0aWFsIGh1bmNoLiBCdXQgbm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBhYm91dCBgYnBmX2ppdF9uZWVkc196ZXh0YD8gSXMgdGhhdCBzdGF0aWMgb3Igbm90PyBUaGUgYW5zd2VyIHRvIHRoYXQgd2lsbCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgdGhlIEpJVCBjb21waWxlciBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IG1vZHVsYXIgdGhpbmdzIGFyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHZpc2liaWxpdHkgb2YgdGhhdCBzeW1ib2wgdG8gZW5zdXJlIHByb3BlciBsaW5raW5nIGFuZCBwb3RlbnRpYWwgaW50ZWdyYXRpb24gd2l0aCBvdGhlciBCUEYgY29tcG9uZW50cy4gSXQmIzM5O3MgYSBrZXkgcGllY2UgaW4gdGhlIHB1enpsZSwgYW5kIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X25lZWRzX3pleHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM9MTUxNT1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGppdF9jdHggKmN0eClcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE1NDMtXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjE1NDQ6Ym9vbCBicGZfaml0X25lZWRzX3pleHQodm9pZClcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTU0NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEyNDAKCQkJCQkJCW91dHB1dDogODEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEZ1bmN0aW9uIFNjb3BlIGluIEJQRiBKSVQqKgoKUmlnaHQsIHNvIEkmIzM5O20gcmV2aXNpdGluZyB0aGUgQlBGIEpJVCBjb2RlIGFuZCB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCBmdW5jdGlvbiBzY29wZS4gSSBzZWUgdGhhdCBgYnBmX2ppdF9uZWVkc196ZXh0YCBpcyAqYWxzbyogZGVjbGFyZWQgbm9uLXN0YXRpYy4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbiwgd29ydGggbm90aW5nLiBOb3csIHRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IHBvcHMgaW50byBteSBoZWFkIGlzOiBhcmUgdGhlcmUgKmFueSogb3RoZXIgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGNvZGUgYmFzZSB0aGF0IGFyZW4mIzM5O3QgZGVjbGFyZWQgYXMgc3RhdGljPyBJdOKAmXMgYSBnb29kIHByYWN0aWNlIHRvIGRlY2xhcmUgZnVuY3Rpb25zIHN0YXRpYyB3aGVuIHBvc3NpYmxlLCB0byBhdm9pZCBpbmFkdmVydGVudCBleHRlcm5hbCBsaW5rYWdlIGFuZCByZWR1Y2UgdGhlIGNoYW5jZXMgb2YgbmFtZSBjb2xsaXNpb25zIGluIGxhcmdlciBwcm9qZWN0cy4gSWRlbnRpZnlpbmcgKmFsbCogc3VjaCBub24tc3RhdGljIGZ1bmN0aW9ucyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBvciB0aG9zZSBhcmVhcyB3aGVyZSBleHRlcm5hbCBsaW5rYWdlIG1pZ2h0IGJlIGludGVudGlvbmFsLiBJIG5lZWQgdG8gbWFrZSBhIHRob3JvdWdoIHBhc3MgdGhyb3VnaCB0aGUgc291cmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qXFxzJiM0MztcXCoqW2EtekEtWl9dW2EtekEtWjAtOV9dKlxccypcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM9MTUxNT1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGppdF9jdHggKmN0eClcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE1NDMtXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjE1NDQ6Ym9vbCBicGZfaml0X25lZWRzX3pleHQodm9pZClcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTU0NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE2NzYKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemluZyB0aGVtIGZyb20gYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGluIHRoaXMgY29kZToKCioqUmVnZXggU25hZnUgYW5kIGEgUXVpY2sgRml4KioKClJpZ2h0LCBkYW1uIGl0ISBJIGp1c3QgcmVhbGl6ZWQgbXkgaW5pdGlhbCByZWdleCBkaWRuJiMzOTt0IGZsYWcgYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBJdCYjMzk7cyBnb3QgdGhhdCBgc3RydWN0IGJwZl9wcm9nICpgIHJldHVybiB0eXBlLCB3aGljaCBteSBwcmV2aW91cyBwYXR0ZXJuIGNvbXBsZXRlbHkgbWlzc2VkLiBJIHdhcyBzbyBmb2N1c2VkIG9uIHRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiwgSSBvdmVybG9va2VkIHRoYXQgZGV0YWlsIGluIHRoZSBzaWduYXR1cmUuIE9rYXksIG5vIHByb2JsZW0sIEkgY2FuIGFkYXB0LiBUaGlua2luZyBJJiMzOTtsbCBqdXN0IGJyb2FkZW4gdGhlIHNlYXJjaC4gSSBjYW4gdXNlIHNvbWV0aGluZyBzaW1wbGUgbGlrZSBgXnN0cnVjdCAuKmAgdG8gbWF0Y2ggYW55IGxpbmUgdGhhdCBzdGFydHMgd2l0aCBgc3RydWN0YCBmb2xsb3dlZCBieSBhbnl0aGluZy4gVGhhdCBzaG91bGQgZ3JhYiB0aGUgb25lcyBJIG5lZWQgd2l0aG91dCBnZXR0aW5nIHRvbyBzcGVjaWZpYy4gTmVlZCB0byBrZWVwIHRoaXMgbW92aW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dLipcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM9NjM9c3RydWN0IGppdF9jdHgge1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNjktXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjcwOnN0YXRpYyBub2lubGluZSB1MzIgaml0X211bDMyKHUzMiBhLCB1MzIgYilcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNzEte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNzQtXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjc1OnN0YXRpYyBub2lubGluZSB1MzIgaml0X2RpdjMyKHUzMiBhLCB1MzIgYilcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNzYte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNzktXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjgwOnN0YXRpYyBub2lubGluZSB1MzIgaml0X21vZDMyKHUzMiBhLCB1MzIgYilcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtODEte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtODQtXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjg1OnN0YXRpYyBub2lubGluZSBzMzIgaml0X3NkaXYzMihzMzIgYSwgczMyIGIpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTg2LXtcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTkzLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo5NDpzdGF0aWMgbm9pbmxpbmUgczMyIGppdF9zbW9kMzIoczMyIGEsIHMzMiBiKVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy05NS17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMDItXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjEwMzpzdGF0aWMgbm9pbmxpbmUgdTY0IGppdF9tdWw2NCh1NjQgYSwgdTY0IGIpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTEwNC17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMDctXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjEwODpzdGF0aWMgbm9pbmxpbmUgdTY0IGppdF9kaXY2NCh1NjQgYSwgdTY0IGIpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTEwOS17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMTItXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjExMzpzdGF0aWMgbm9pbmxpbmUgczY0IGppdF9zZGl2NjQoczY0IGEsIHM2NCBiKVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMTQte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTIxLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxMjI6c3RhdGljIG5vaW5saW5lIHU2NCBqaXRfbW9kNjQodTY0IGEsIHU2NCBiKVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMjMte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTMxLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxMzI6c3RhdGljIG5vaW5saW5lIHM2NCBqaXRfc21vZDY0KHM2NCBhLCBzNjQgYilcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTMzLXtcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE0MC1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MTQxOnN0YXRpYyB1MzIgaml0X2F0b21pYzMyKHUzMiAqcHRyLCB1MzIgdmFsLCB1MzIgb3AsIHUzMiBjbXApXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE0Mi17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNzctXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjE3ODpzdGF0aWMgdTY0IGppdF9hdG9taWM2NCh1MzIgKnB0ciwgdTMyIHZhbF9oaSwgdTMyIHZhbF9sbywgdTMyIG9wLCB1MzIgY21wX2hpLCB1MzIgY21wX2xvKVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNzkte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjE4LVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoyMTk6c3RhdGljIGlubGluZSB2b2lkIGVtaXRfMTYoc3RydWN0IGppdF9jdHggKmN0eCwgdTE2IGluc3QpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTIyMC17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0yMjUtXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjIyNjpzdGF0aWMgaW5saW5lIHZvaWQgZW1pdF8zMihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1MzIgdmFsKVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0yMjcte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjMxLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoyMzI6c3RhdGljIGlubGluZSBib29sIGlzX3N0YWNrZWQoczggcmVnKVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0yMzMte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjM2LVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoyMzc6c3RhdGljIHM4IGJwZl9nZXRfcmVnMzIoczggYnBmX3JlZywgczggdG1wX3JlZywgc3RydWN0IGppdF9jdHggKmN0eClcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjM4LXtcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTI0Ni1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MjQ3OnN0YXRpYyB2b2lkIGJwZl9wdXRfcmVnMzIoczggYnBmX3JlZywgczggc3JjX3JlZywgc3RydWN0IGppdF9jdHggKmN0eClcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjQ4LXtcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTI1Ni1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MjU3OnN0YXRpYyB2b2lkIGVtaXRfYWx1MzJfbmVnKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjU4LXtcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTI2OS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MjcwOnN0YXRpYyB2b2lkIGVtaXRfYWx1NjRfbmVnKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjcxLXtcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTI4My1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6Mjg0OnN0YXRpYyB2b2lkIGVtaXRfYWx1MzJfeChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTI4NS17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0zNDktXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjM1MDpzdGF0aWMgdm9pZCBlbWl0X2FsdTMyX2soY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0zNTEte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNDAzLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo0MDQ6c3RhdGljIHZvaWQgZW1pdF9hbHU2NF94KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNDA1LXtcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTQ2My1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6NDY0OnN0YXRpYyB2b2lkIGVtaXRfYWx1NjRfayhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTQ2NS17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy01MjAtXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjUyMTpzdGF0aWMgdm9pZCBlbWl0X2FsdTY0X3NoaWZ0KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBpc19pbW0pXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTUyMi17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy01NzUtXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjU3NjpzdGF0aWMgdm9pZCBlbWl0X2JwZl9lbmQoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy01Nzcte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNjMxLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo2MzI6c3RhdGljIHZvaWQgZW1pdF9tYXRoX2NhbGwoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIGlzXzY0KVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy02MzMte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNzM5LVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo3NDA6c3RhdGljIHZvaWQgZW1pdF9sZHgoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy03NDEte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtODAyLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo4MDM6c3RhdGljIHZvaWQgZW1pdF9zdHgoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy04MDQte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtODQzLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo4NDQ6c3RhdGljIHZvaWQgZW1pdF9zdChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTg0NS17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy04ODUtXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjg4NjpzdGF0aWMgdm9pZCBlbWl0X2F0b21pYyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTg4Ny17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy05ODctXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjk4ODpzdGF0aWMgdm9pZCBlbWl0X3RhaWxfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTk4OS17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMDUxLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxMDUyOnN0YXRpYyBpbnQgZW1pdF9qbXAoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgY3Vycl9pKVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMDUzLXtcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTEyMTYtXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjEyMTc6c3RhdGljIGludCBlbWl0X2NhbGwoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMjE4LXtcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTEyNTItXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjEyNTM6c3RhdGljIHZvaWQgYnVpbGRfcHJvbG9ndWUoc3RydWN0IGppdF9jdHggKmN0eClcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTI1NC17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMzAyLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxMzAzOnN0YXRpYyB2b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTEzMDQte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTMxMS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MTMxMjpzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgaSlcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTMxMy17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNTE0LVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxNTE1OnN0YXRpYyBpbnQgYnVpbGRfYm9keShzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNTE2LXtcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE1NDMtXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjE1NDQ6Ym9vbCBicGZfaml0X25lZWRzX3pleHQodm9pZClcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTU0NS17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNTQ4LVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxNTQ5OnN0YXRpYyB2b2lkIGppdF9maWxsX2hvbGUodm9pZCAqYXJlYSwgdW5zaWduZWQgaW50IHNpemUpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE1NTAte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTU1Ni1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MTU1NzpzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNTU4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU4MTUKCQkJCQkJCW91dHB1dDogMTAyCgkJCQkJCQl0aG91Z2h0czogODY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBCUEYgSklUIENvbXBpbGVyIFBhdGNoIGZvciBtNjhrIEFyY2hpdGVjdHVyZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBgYnBmX2ppdF9uZWVkc196ZXh0YCBhcmUgdGhlIHR3byBrZXkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBwYXRjaC4gIGBicGZfaW50X2ppdF9jb21waWxlYCBsb29rcyBsaWtlIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgSklUIGNvbXBpbGVyIGl0c2VsZiwgd2hpY2ggaXMgY3J1Y2lhbC4gIGBicGZfaml0X25lZWRzX3pleHRgIGlzIGFsc28gYW4gaW1wb3J0YW50IGVudHJ5IHBvaW50IGNhbGxlZCBmcm9tIHRoZSBjb3JlIEJQRiBjb2RlLgoKTm93LCBjaGVja2luZyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYGFyY2gvbTY4ay9LY29uZmlnYCByZXZlYWxzIHRoYXQgYENPTkZJR19CUEZfSklUYCBpcyB0aGUgY3JpdGljYWwgb3B0aW9uIGhlcmUuICBUaGUgY29kZSBzZWxlY3RzIGBIQVZFX0VCUEZfSklUYCBpZiB3ZSYjMzk7cmUgKm5vdCogZGVhbGluZyB3aXRoIENPTERGSVJFIG9yIE02ODAwMCBwcm9jZXNzb3JzLgoKVGhlIHByb21wdCBzdGlwdWxhdGVzIHRoYXQgd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgaXMgJiMzNDtXb3J0aEZ1enppbmcuJiMzNDsgQ29uc2lkZXJpbmcgdGhlIGNyaXRlcmlhLCB0aGUgbTY4ayBhcmNoaXRlY3R1cmUgaXMgYSBmYWN0b3IuICBXaGlsZSBTeXprYWxsZXIgZG9lc24mIzM5O3QgdHlwaWNhbGx5IGZvY3VzIG9uIG02OGssIFFFTVUgZG9lcyBzdXBwb3J0IGl0LCB3aGljaCBtYWtlcyBtZSB0aGluayBpdCYjMzk7cyBmdXp6YWJsZS4gIFRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBCUEYgSklUIGNvbXBpbGVyIGZvciBhIG5ldyBhcmNoaXRlY3R1cmUuCgpNeSBzdHJhdGVneSBpcyB0byBkZWZpbmUgdGhlICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgcGFyYW1ldGVyLiBTaW5jZSB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUga2VybmVsIChhIEpJVCBjb21waWxlciBmb3IgYSBuZXcgYXJjaGl0ZWN0dXJlKSwgSSYjMzk7bGwgc2V0IHRoaXMgdG8gdHJ1ZS4KClRvIHN1cHBvcnQgdGhpcyBkZWNpc2lvbiwgSSBuZWVkIHRvIHByb3ZpZGUgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYC4gIFRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgcmV2b2x2ZXMgYXJvdW5kIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgYGJwZl9qaXRfbmVlZHNfemV4dGAuICBTbyBteSBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlIGBbJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssICYjMzQ7YnBmX2ppdF9uZWVkc196ZXh0JiMzNDtdYC4gIFRoZSByZWxldmFudCBjb25maWcsIGFuZCB2ZXJpZmllZCBieSBgYXJjaC9tNjhrL25ldC9NYWtlZmlsZWAsIGlzIGBCUEZfSklUYCwgc28gbXkgYEVuYWJsZUNvbmZpZ3NgIGxpc3Qgd2lsbCBiZSBgWyYjMzQ7QlBGX0pJVCYjMzQ7XWAuCgpJJiMzOTt2ZSBhbHNvIGNvbmZpcm1lZCB0aGF0IGBCUEZfSklUYCB1c3VhbGx5IGRlcGVuZHMgb24gYEhBVkVfRUJQRl9KSVRgLCB3aGljaCwgaW4gdGhpcyBjYXNlLCBpcyBpbmRlZWQgc2VsZWN0ZWQgYmFzZWQgb24gdGhlIEtjb25maWcgZmlsZS4gSSB3aWxsIGFsc28gbWFrZSBzdXJlIHRvIHNwZWNpZnkgYSBnb29kIHJlYXNvbiBpbiB0aGUgZmluYWwgcmVzcG9uc2UuCgpGaW5hbGx5LCBuZWl0aGVyIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaG90LXBhdGggZnVuY3Rpb25zLiBUaGlzIGlzIGJlY2F1c2UgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIGNhbGxlZCB3aGVuIGEgQlBGIHByb2dyYW0gaXMgbG9hZGVkIGFuZCBgYnBmX2ppdF9uZWVkc196ZXh0YCBpcyBjYWxsZWQgZHVyaW5nIHByb2dyYW0gbG9hZGluZyBvciB2ZXJpZmljYXRpb24uIFRoaXMgaW1wbGllcyB0aGF0IHRoZXkgd2lsbCBiZSBjYWxsZWQgZHVyaW5nIGNvbnRyb2wtcGF0aCBvcGVyYXRpb24gYW5kIGFyZSB0aGVyZWZvcmUgdGVzdGFibGUuCgpTbyB0aGUgZmluYWwgc2V0IHdpbGwgYmU6CldvcnRoRnV6emluZzogdHJ1ZQpGb2N1c1N5bWJvbHM6IFsmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywgJiMzNDticGZfaml0X25lZWRzX3pleHQmIzM0O10KRW5hYmxlQ29uZmlnczogWyYjMzQ7QlBGX0pJVCYjMzQ7XQpSZWFzb25pbmc6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIEpJVCBjb21waWxlciBmb3IgdGhlIG02OGsgYXJjaGl0ZWN0dXJlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIEJQRiBwcm9ncmFtIGxvYWRpbmcgd2hlbiBKSVQgaXMgZW5hYmxlZCwgYW5kIGNhbiBiZSB0ZXN0ZWQgaW4gUUVNVS4mIzM0OwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9uZWVkc196ZXh0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIEpJVCBjb21waWxlciBmb3IgdGhlIG02OGsgYXJjaGl0ZWN0dXJlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIEJQRiBwcm9ncmFtIGxvYWRpbmcgd2hlbiBKSVQgaXMgZW5hYmxlZCwgYW5kIGNhbiBiZSB0ZXN0ZWQgaW4gUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9uZWVkc196ZXh0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIEpJVCBjb21waWxlciBmb3IgdGhlIG02OGsgYXJjaGl0ZWN0dXJlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIEJQRiBwcm9ncmFtIGxvYWRpbmcgd2hlbiBKSVQgaXMgZW5hYmxlZCwgYW5kIGNhbiBiZSB0ZXN0ZWQgaW4gUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA0OjUwOjA3LjU1NTA2OTUzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MDg5NzU3Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gICAgXCJicGZfaml0X25lZWRzX3pleHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBKSVQgY29tcGlsZXIgZm9yIHRoZSBtNjhrIGFyY2hpdGVjdHVyZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGR1cmluZyBCUEYgcHJvZ3JhbSBsb2FkaW5nIHdoZW4gSklUIGlzIGVuYWJsZWQsIGFuZCBjYW4gYmUgdGVzdGVkIGluIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA0OjUwOjA3LjU1NTA3NzcwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc4NDU3NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2M3MGNiNmQzODc3N2Q1ZjUxOGY1MmY4MzQxMWU0ZWFiZGY0ZDdkMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAzMCAwNDo1MDowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggMmZiMWM3NWFmZDE2My4uNTMwNTUxODM0YzE2MyAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTQ3MDEsNiArNDcwMSwxMiBAQCBMOlxcdGJwZkB2Z2VyLmtlcm5lbC5vcmdcXG4gUzpcXHRNYWludGFpbmVkXFxuIEY6XFx0YXJjaC9sb29uZ2FyY2gvbmV0L1xcbiBcXG4rQlBGIEpJVCBmb3IgTTY4S1xcbitNOlxcdEt1YW4tV2VpIENoaXUgXFx1MDAzY3Zpc2l0b3Jja3dAZ21haWwuY29tXFx1MDAzZVxcbitMOlxcdGJwZkB2Z2VyLmtlcm5lbC5vcmdcXG4rUzpcXHRNYWludGFpbmVkXFxuK0Y6XFx0YXJjaC9tNjhrL25ldC9cXG4rXFxuIEJQRiBKSVQgZm9yIE1JUFMgKDMyLUJJVCBBTkQgNjQtQklUKVxcbiBNOlxcdEpvaGFuIEFsbWJsYWRoIFxcdTAwM2Nqb2hhbi5hbG1ibGFkaEBhbnlmaW5ldHdvcmtzLmNvbVxcdTAwM2VcXG4gTTpcXHRQYXVsIEJ1cnRvbiBcXHUwMDNjcGF1bGJ1cnRvbkBrZXJuZWwub3JnXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9hcmNoL202OGsvS2J1aWxkIGIvYXJjaC9tNjhrL0tidWlsZFxcbmluZGV4IDc3NjJhZjlmNmRlZmUuLjA1OGFkNDFhNzI4YzUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9tNjhrL0tidWlsZFxcbisrKyBiL2FyY2gvbTY4ay9LYnVpbGRcXG5AQCAtMSw1ICsxLDUgQEBcXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuLW9iai15XFx0XFx0XFx0XFx0Kz0ga2VybmVsLyBtbS9cXG4rb2JqLXlcXHRcXHRcXHRcXHQrPSBrZXJuZWwvIG1tLyBuZXQvXFxuIG9iai0kKENPTkZJR19RNDApXFx0XFx0Kz0gcTQwL1xcbiBvYmotJChDT05GSUdfQU1JR0EpXFx0XFx0Kz0gYW1pZ2EvXFxuIG9iai0kKENPTkZJR19BVEFSSSlcXHRcXHQrPSBhdGFyaS9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcgYi9hcmNoL202OGsvS2NvbmZpZ1xcbmluZGV4IDExODM1ZWI1OWQ5NGQuLmRhNDNkNjY2MGM1Y2UgMTAwNjQ0XFxuLS0tIGEvYXJjaC9tNjhrL0tjb25maWdcXG4rKysgYi9hcmNoL202OGsvS2NvbmZpZ1xcbkBAIC04LDYgKzgsNyBAQCBjb25maWcgTTY4S1xcbiBcXHRzZWxlY3QgQVJDSF9IQVNfQ1BVX0ZJTkFMSVpFX0lOSVQgaWYgTU1VXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19DVVJSRU5UX1NUQUNLX1BPSU5URVJcXG4gXFx0c2VsZWN0IEFSQ0hfSEFTX0RNQV9QUkVQX0NPSEVSRU5UIGlmIE02OEtfTk9OQ09IRVJFTlRfRE1BIFxcdTAwMjZcXHUwMDI2ICFDT0xERklSRVxcbitcXHRzZWxlY3QgSEFWRV9FQlBGX0pJVCBpZiAoIUNPTERGSVJFIFxcdTAwMjZcXHUwMDI2ICFNNjgwMDApXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19TWU5DX0RNQV9GT1JfREVWSUNFIGlmIE02OEtfTk9OQ09IRVJFTlRfRE1BXFxuIFxcdHNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIRyBpZiBSTVdfSU5TTlNcXG4gXFx0c2VsZWN0IEFSQ0hfTUlHSFRfSEFWRV9QQ19QQVJQT1JUIGlmIElTQVxcbmRpZmYgLS1naXQgYS9hcmNoL202OGsvbmV0L01ha2VmaWxlIGIvYXJjaC9tNjhrL25ldC9NYWtlZmlsZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWM1YjE0NzYzMzE2N1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9hcmNoL202OGsvbmV0L01ha2VmaWxlXFxuQEAgLTAsMCArMSwyIEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbitvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX2ppdF9jb21wLm9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjZkNjQ3YmJhOTZlYjRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuY1xcbkBAIC0wLDAgKzEsMTYzMCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIEJQRiBKSVQgY29tcGlsZXIgZm9yIG02OGtcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEt1YW4tV2VpIENoaXUgXFx1MDAzY3Zpc2l0b3Jja3dAZ21haWwuY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbHRlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaXJxZmxhZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS9jYWNoZWZsdXNoLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYXRoNjQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpbWl0cy5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBTVEFDS19PRkZTRVQoaykgKC00IC0gKDQgKiAoaykpKVxcbitcXG4rZW51bSB7XFxuK1xcdEJQRl9SMV9ISSwgQlBGX1IxX0xPLFxcbitcXHRCUEZfUjJfSEksIEJQRl9SMl9MTyxcXG4rXFx0QlBGX1IzX0hJLCBCUEZfUjNfTE8sXFxuK1xcdEJQRl9SNF9ISSwgQlBGX1I0X0xPLFxcbitcXHRCUEZfUjVfSEksIEJQRl9SNV9MTyxcXG4rXFx0QlBGX1I2X0hJLCBCUEZfUjZfTE8sXFxuK1xcdEJQRl9SN19ISSwgQlBGX1I3X0xPLFxcbitcXHRCUEZfUjhfSEksIEJQRl9SOF9MTyxcXG4rXFx0QlBGX1I5X0hJLCBCUEZfUjlfTE8sXFxuK1xcdEJQRl9SMTBfSEksIEJQRl9SMTBfTE8sXFxuK1xcdEJQRl9BWF9ISSwgQlBGX0FYX0xPLFxcbitcXHRCUEZfVENfSEksIEJQRl9UQ19MTyxcXG4rXFx0QlBGX0pJVF9TQ1JBVENIX1JFR1MsXFxuK307XFxuK1xcbisjZGVmaW5lIFNDUkFUQ0hfU0laRSAoQlBGX0pJVF9TQ1JBVENIX1JFR1MgKiA0KVxcbitcXG4rI2RlZmluZSBUTVBfUkVHXzEgMTRcXG4rI2RlZmluZSBUTVBfUkVHXzIgMTVcXG4rXFxuKyNkZWZpbmUgTTY4S19EMCAwXFxuKyNkZWZpbmUgTTY4S19EMSAxXFxuKyNkZWZpbmUgTTY4S19EMiAyXFxuKyNkZWZpbmUgTTY4S19EMyAzXFxuKyNkZWZpbmUgTTY4S19ENCA0XFxuKyNkZWZpbmUgTTY4S19ENSA1XFxuK1xcbitzdGF0aWMgY29uc3QgczggYnBmMm02OGtbMTZdWzJdID0ge1xcbitcXHRbQlBGX1JFR18wXSAgPSB7TTY4S19EMSwgTTY4S19EMH0sXFxuK1xcdFtCUEZfUkVHXzFdICA9IHtTVEFDS19PRkZTRVQoQlBGX1IxX0hJKSwgIFNUQUNLX09GRlNFVChCUEZfUjFfTE8pfSxcXG4rXFx0W0JQRl9SRUdfMl0gID0ge1NUQUNLX09GRlNFVChCUEZfUjJfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SMl9MTyl9LFxcbitcXHRbQlBGX1JFR18zXSAgPSB7U1RBQ0tfT0ZGU0VUKEJQRl9SM19ISSksICBTVEFDS19PRkZTRVQoQlBGX1IzX0xPKX0sXFxuK1xcdFtCUEZfUkVHXzRdICA9IHtTVEFDS19PRkZTRVQoQlBGX1I0X0hJKSwgIFNUQUNLX09GRlNFVChCUEZfUjRfTE8pfSxcXG4rXFx0W0JQRl9SRUdfNV0gID0ge1NUQUNLX09GRlNFVChCUEZfUjVfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SNV9MTyl9LFxcbitcXHRbQlBGX1JFR182XSAgPSB7U1RBQ0tfT0ZGU0VUKEJQRl9SNl9ISSksICBTVEFDS19PRkZTRVQoQlBGX1I2X0xPKX0sXFxuK1xcdFtCUEZfUkVHXzddICA9IHtTVEFDS19PRkZTRVQoQlBGX1I3X0hJKSwgIFNUQUNLX09GRlNFVChCUEZfUjdfTE8pfSxcXG4rXFx0W0JQRl9SRUdfOF0gID0ge1NUQUNLX09GRlNFVChCUEZfUjhfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SOF9MTyl9LFxcbitcXHRbQlBGX1JFR185XSAgPSB7U1RBQ0tfT0ZGU0VUKEJQRl9SOV9ISSksICBTVEFDS19PRkZTRVQoQlBGX1I5X0xPKX0sXFxuK1xcdFtCUEZfUkVHXzEwXSA9IHtTVEFDS19PRkZTRVQoQlBGX1IxMF9ISSksIFNUQUNLX09GRlNFVChCUEZfUjEwX0xPKX0sXFxuK1xcdFtCUEZfUkVHX0FYXSA9IHtTVEFDS19PRkZTRVQoQlBGX0FYX0hJKSwgIFNUQUNLX09GRlNFVChCUEZfQVhfTE8pfSxcXG4rXFx0W1RNUF9SRUdfMV0gID0ge002OEtfRDMsIE02OEtfRDJ9LFxcbitcXHRbVE1QX1JFR18yXSAgPSB7TTY4S19ENSwgTTY4S19ENH0sXFxuK307XFxuK1xcbitzdHJ1Y3Qgaml0X2N0eCB7XFxuK1xcdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZztcXG4rXFx0dTE2ICp0YXJnZXQ7XFxuK1xcdHVuc2lnbmVkIGludCBpZHg7XFxuK1xcdGludCAqb2Zmc2V0cztcXG4rfTtcXG4rXFxuK3N0YXRpYyBub2lubGluZSB1MzIgaml0X211bDMyKHUzMiBhLCB1MzIgYilcXG4re1xcbitcXHRyZXR1cm4gYSAqIGI7XFxuK31cXG4rXFxuK3N0YXRpYyBub2lubGluZSB1MzIgaml0X2RpdjMyKHUzMiBhLCB1MzIgYilcXG4re1xcbitcXHRyZXR1cm4gYiA/IGEgLyBiIDogMDtcXG4rfVxcbitcXG4rc3RhdGljIG5vaW5saW5lIHUzMiBqaXRfbW9kMzIodTMyIGEsIHUzMiBiKVxcbit7XFxuK1xcdHJldHVybiBiID8gYSAlIGIgOiBhO1xcbit9XFxuK1xcbitzdGF0aWMgbm9pbmxpbmUgczMyIGppdF9zZGl2MzIoczMyIGEsIHMzMiBiKVxcbit7XFxuK1xcdGlmIChiID09IDApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRpZiAoYSA9PSBTMzJfTUlOIFxcdTAwMjZcXHUwMDI2IGIgPT0gLTEpXFxuK1xcdFxcdHJldHVybiBTMzJfTUlOO1xcbitcXHRyZXR1cm4gYSAvIGI7XFxuK31cXG4rXFxuK3N0YXRpYyBub2lubGluZSBzMzIgaml0X3Ntb2QzMihzMzIgYSwgczMyIGIpXFxuK3tcXG4rXFx0aWYgKGIgPT0gMClcXG4rXFx0XFx0cmV0dXJuIGE7XFxuK1xcdGlmIChhID09IFMzMl9NSU4gXFx1MDAyNlxcdTAwMjYgYiA9PSAtMSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBhICUgYjtcXG4rfVxcbitcXG4rc3RhdGljIG5vaW5saW5lIHU2NCBqaXRfbXVsNjQodTY0IGEsIHU2NCBiKVxcbit7XFxuK1xcdHJldHVybiBhICogYjtcXG4rfVxcbitcXG4rc3RhdGljIG5vaW5saW5lIHU2NCBqaXRfZGl2NjQodTY0IGEsIHU2NCBiKVxcbit7XFxuK1xcdHJldHVybiBiID8gZGl2NjRfdTY0KGEsIGIpIDogMDtcXG4rfVxcbitcXG4rc3RhdGljIG5vaW5saW5lIHM2NCBqaXRfc2RpdjY0KHM2NCBhLCBzNjQgYilcXG4re1xcbitcXHRpZiAoYiA9PSAwKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKGEgPT0gUzY0X01JTiBcXHUwMDI2XFx1MDAyNiBiID09IC0xKVxcbitcXHRcXHRyZXR1cm4gUzY0X01JTjtcXG4rXFx0cmV0dXJuIGRpdjY0X3M2NChhLCBiKTtcXG4rfVxcbitcXG4rc3RhdGljIG5vaW5saW5lIHU2NCBqaXRfbW9kNjQodTY0IGEsIHU2NCBiKVxcbit7XFxuK1xcdHU2NCByZW07XFxuK1xcbitcXHRpZiAoYiA9PSAwKVxcbitcXHRcXHRyZXR1cm4gYTtcXG4rXFx0ZGl2NjRfdTY0X3JlbShhLCBiLCBcXHUwMDI2cmVtKTtcXG4rXFx0cmV0dXJuIHJlbTtcXG4rfVxcbitcXG4rc3RhdGljIG5vaW5saW5lIHM2NCBqaXRfc21vZDY0KHM2NCBhLCBzNjQgYilcXG4re1xcbitcXHRpZiAoYiA9PSAwKVxcbitcXHRcXHRyZXR1cm4gYTtcXG4rXFx0aWYgKGEgPT0gUzY0X01JTiBcXHUwMDI2XFx1MDAyNiBiID09IC0xKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIGEgLSBkaXY2NF9zNjQoYSwgYikgKiBiO1xcbit9XFxuK1xcbitzdGF0aWMgdTMyIGppdF9hdG9taWMzMih1MzIgKnB0ciwgdTMyIHZhbCwgdTMyIG9wLCB1MzIgY21wKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHUzMiBvbGQ7XFxuK1xcbitcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuK1xcdG9sZCA9ICpwdHI7XFxuK1xcdHN3aXRjaCAob3ApIHtcXG4rXFx0Y2FzZSBCUEZfQUREOlxcbitcXHRjYXNlIEJQRl9BREQgfCBCUEZfRkVUQ0g6XFxuK1xcdFxcdCpwdHIgKz0gdmFsO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfQU5EOlxcbitcXHRjYXNlIEJQRl9BTkQgfCBCUEZfRkVUQ0g6XFxuK1xcdFxcdCpwdHIgXFx1MDAyNj0gdmFsO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfT1I6XFxuK1xcdGNhc2UgQlBGX09SIHwgQlBGX0ZFVENIOlxcbitcXHRcXHQqcHRyIHw9IHZhbDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX1hPUjpcXG4rXFx0Y2FzZSBCUEZfWE9SIHwgQlBGX0ZFVENIOlxcbitcXHRcXHQqcHRyIF49IHZhbDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX1hDSEc6XFxuK1xcdFxcdCpwdHIgPSB2YWw7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9DTVBYQ0hHOlxcbitcXHRcXHRpZiAob2xkID09IGNtcClcXG4rXFx0XFx0XFx0KnB0ciA9IHZhbDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbitcXG4rXFx0cmV0dXJuIG9sZDtcXG4rfVxcbitcXG4rc3RhdGljIHU2NCBqaXRfYXRvbWljNjQodTMyICpwdHIsIHUzMiB2YWxfaGksIHUzMiB2YWxfbG8sIHUzMiBvcCwgdTMyIGNtcF9oaSwgdTMyIGNtcF9sbylcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHR1NjQgb2xkLCB2YWwsIGNtcDtcXG4rXFx0dTY0ICpwdHI2NCA9ICh1NjQgKilwdHI7XFxuK1xcbitcXHR2YWwgPSAoKHU2NCl2YWxfaGkgXFx1MDAzY1xcdTAwM2MgMzIpIHwgdmFsX2xvO1xcbitcXHRjbXAgPSAoKHU2NCljbXBfaGkgXFx1MDAzY1xcdTAwM2MgMzIpIHwgY21wX2xvO1xcbitcXG4rXFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbitcXHRvbGQgPSAqcHRyNjQ7XFxuK1xcdHN3aXRjaCAob3ApIHtcXG4rXFx0Y2FzZSBCUEZfQUREOlxcbitcXHRjYXNlIEJQRl9BREQgfCBCUEZfRkVUQ0g6XFxuK1xcdFxcdCpwdHI2NCArPSB2YWw7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9BTkQ6XFxuK1xcdGNhc2UgQlBGX0FORCB8IEJQRl9GRVRDSDpcXG4rXFx0XFx0KnB0cjY0IFxcdTAwMjY9IHZhbDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX09SOlxcbitcXHRjYXNlIEJQRl9PUiB8IEJQRl9GRVRDSDpcXG4rXFx0XFx0KnB0cjY0IHw9IHZhbDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX1hPUjpcXG4rXFx0Y2FzZSBCUEZfWE9SIHwgQlBGX0ZFVENIOlxcbitcXHRcXHQqcHRyNjQgXj0gdmFsO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfWENIRzpcXG4rXFx0XFx0KnB0cjY0ID0gdmFsO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfQ01QWENIRzpcXG4rXFx0XFx0aWYgKG9sZCA9PSBjbXApXFxuK1xcdFxcdFxcdCpwdHI2NCA9IHZhbDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbitcXG4rXFx0cmV0dXJuIG9sZDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGVtaXRfMTYoc3RydWN0IGppdF9jdHggKmN0eCwgdTE2IGluc3QpXFxuK3tcXG4rXFx0aWYgKGN0eC1cXHUwMDNldGFyZ2V0KVxcbitcXHRcXHRjdHgtXFx1MDAzZXRhcmdldFtjdHgtXFx1MDAzZWlkeF0gPSBpbnN0O1xcbitcXHRjdHgtXFx1MDAzZWlkeCsrO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZW1pdF8zMihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1MzIgdmFsKVxcbit7XFxuK1xcdGVtaXRfMTYoY3R4LCB2YWwgXFx1MDAzZVxcdTAwM2UgMTYpO1xcbitcXHRlbWl0XzE2KGN0eCwgdmFsIFxcdTAwMjYgMHhmZmZmKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIGlzX3N0YWNrZWQoczggcmVnKVxcbit7XFxuK1xcdHJldHVybiByZWcgXFx1MDAzYyAwO1xcbit9XFxuK1xcbitzdGF0aWMgczggYnBmX2dldF9yZWczMihzOCBicGZfcmVnLCBzOCB0bXBfcmVnLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbit7XFxuK1xcdGlmIChpc19zdGFja2VkKGJwZl9yZWcpKSB7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDIwMmUgfCAodG1wX3JlZyBcXHUwMDNjXFx1MDAzYyA5KSk7XFx0XFx0LyogbW92ZS5sIGQxNiglZnApLCByZWcgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsICh1MTYpYnBmX3JlZyk7XFxuK1xcdFxcdHJldHVybiB0bXBfcmVnO1xcbitcXHR9XFxuK1xcdHJldHVybiBicGZfcmVnO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBicGZfcHV0X3JlZzMyKHM4IGJwZl9yZWcsIHM4IHNyY19yZWcsIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuK3tcXG4rXFx0aWYgKGlzX3N0YWNrZWQoYnBmX3JlZykpIHtcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MmQ0MCB8IHNyY19yZWcpO1xcdFxcdFxcdC8qIG1vdmUubCByZWcsIGQxNiglZnApICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAodTE2KWJwZl9yZWcpO1xcbitcXHR9IGVsc2UgaWYgKGJwZl9yZWcgIT0gc3JjX3JlZykge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGJwZl9yZWcgXFx1MDAzY1xcdTAwM2MgOSkgfCBzcmNfcmVnKTsgLyogbW92ZS5sIHNyYywgZHN0ICovXFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZW1pdF9hbHUzMl9uZWcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbit7XFxuK1xcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVxcdTAwM2Vkc3RfcmVnXTtcXG4rXFx0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xcbitcXHRzOCBkX3JlZyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpO1xcbitcXG4rXFx0ZW1pdF8xNihjdHgsIDB4NDQ4MCB8IGRfcmVnKTtcXHRcXHRcXHRcXHQvKiBuZWcubCBkX3JlZyAqL1xcbitcXG4rXFx0YnBmX3B1dF9yZWczMihkc3RbMV0sIGRfcmVnLCBjdHgpO1xcbitcXHRlbWl0XzE2KGN0eCwgMHg3MDAwIHwgKHRtcDFbMF0gXFx1MDAzY1xcdTAwM2MgOSkpO1xcdFxcdFxcdC8qIG1vdmVxICMwLCB0bXAxICovXFxuK1xcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlbWl0X2FsdTY0X25lZyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuK3tcXG4rXFx0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXFx1MDAzZWRzdF9yZWddO1xcbitcXHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XFxuK1xcdHM4IGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcXG4rXFx0czggZF9oaSA9IGJwZl9nZXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpO1xcbitcXG4rXFx0ZW1pdF8xNihjdHgsIDB4NDQ4MCB8IGRfbG8pO1xcdFxcdFxcdFxcdC8qIG5lZy5sIGRfbG8gKi9cXG4rXFx0ZW1pdF8xNihjdHgsIDB4NDA4MCB8IGRfaGkpO1xcdFxcdFxcdFxcdC8qIG5lZ3gubCBkX2hpICovXFxuK1xcbitcXHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9sbywgY3R4KTtcXG4rXFx0YnBmX3B1dF9yZWczMihkc3RbMF0sIGRfaGksIGN0eCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVtaXRfYWx1MzJfeChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuK3tcXG4rXFx0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXFx1MDAzZWRzdF9yZWddO1xcbitcXHRjb25zdCBzOCAqc3JjID0gYnBmMm02OGtbaW5zbi1cXHUwMDNlc3JjX3JlZ107XFxuK1xcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcXG4rXFx0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xcbitcXHRzOCBkX3JlZywgc19yZWc7XFxuK1xcbitcXHRkX3JlZyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpO1xcbitcXHRzX3JlZyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpO1xcbitcXG4rXFx0c3dpdGNoIChCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSkpIHtcXG4rXFx0Y2FzZSBCUEZfTU9WOlxcbitcXHRcXHRpZiAoaW5zbi1cXHUwMDNlb2ZmID09IDggfHwgaW5zbi1cXHUwMDNlb2ZmID09IDE2KSB7XFxuK1xcdFxcdFxcdGlmIChkX3JlZyAhPSBzX3JlZylcXG4rXFx0XFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4MjAwMCB8IChkX3JlZyBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfcmVnKTsgLyogbW92ZS5sIHNyYywgZHN0ICovXFxuK1xcdFxcdFxcdGlmIChpbnNuLVxcdTAwM2VvZmYgPT0gOClcXG4rXFx0XFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NDljMCB8IGRfcmVnKTtcXHQvKiBleHRiLmwgZF9yZWcgKi9cXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHg0OGMwIHwgZF9yZWcpO1xcdC8qIGV4dC5sIGRfcmVnICovXFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGlmIChkX3JlZyAhPSBzX3JlZylcXG4rXFx0XFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4MjAwMCB8IChkX3JlZyBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfcmVnKTsgLyogbW92ZS5sIHNyYywgZHN0ICovXFxuK1xcdFxcdH1cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX0FERDpcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4ZDA4MCB8IChkX3JlZyBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfcmVnKTtcXHQvKiBhZGQubCBzcmMsIGRzdCAqL1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfU1VCOlxcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHg5MDgwIHwgKGRfcmVnIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19yZWcpO1xcdC8qIHN1Yi5sIHNyYywgZHN0ICovXFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9BTkQ6XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweGMwODAgfCAoZF9yZWcgXFx1MDAzY1xcdTAwM2MgOSkgfCBzX3JlZyk7XFx0LyogYW5kLmwgc3JjLCBkc3QgKi9cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX09SOlxcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfcmVnIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19yZWcpO1xcdC8qIG9yLmwgc3JjLCBkc3QgKi9cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX1hPUjpcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4YjE4MCB8IChzX3JlZyBcXHUwMDNjXFx1MDAzYyA5KSB8IGRfcmVnKTtcXHQvKiBlb3IubCBzcmMsIGRzdCAqL1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfTFNIOlxcbitcXHRjYXNlIEJQRl9SU0g6XFxuK1xcdGNhc2UgQlBGX0FSU0g6IHtcXG4rXFx0XFx0czggY291bnRfcmVnID0gdG1wMlsxXTtcXG4rXFxuK1xcdFxcdGlmIChzX3JlZyAhPSBjb3VudF9yZWcpXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDIwMDAgfCAoY291bnRfcmVnIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19yZWcpOyAvKiBtb3ZlLmwgc3JjLCBjb3VudCAqL1xcbitcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MDI4MCB8IGNvdW50X3JlZyk7XFx0XFx0LyogYW5kaS5sICNpbW0sIGNvdW50ICovXFxuK1xcdFxcdGVtaXRfMzIoY3R4LCAweDFmKTtcXG4rXFxuK1xcdFxcdGlmIChCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0xTSClcXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4ZTFhOCB8IChjb3VudF9yZWcgXFx1MDAzY1xcdTAwM2MgOSkgfCBkX3JlZyk7IC8qIGxzbC5sIGNvdW50LCBkc3QgKi9cXG4rXFx0XFx0ZWxzZSBpZiAoQlBGX09QKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9SU0gpXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweGUwYTggfCAoY291bnRfcmVnIFxcdTAwM2NcXHUwMDNjIDkpIHwgZF9yZWcpOyAvKiBsc3IubCBjb3VudCwgZHN0ICovXFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4ZTBhMCB8IChjb3VudF9yZWcgXFx1MDAzY1xcdTAwM2MgOSkgfCBkX3JlZyk7IC8qIGFzci5sIGNvdW50LCBkc3QgKi9cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0fVxcbitcXG4rXFx0YnBmX3B1dF9yZWczMihkc3RbMV0sIGRfcmVnLCBjdHgpO1xcbitcXHRlbWl0XzE2KGN0eCwgMHg3MDAwIHwgKHRtcDFbMF0gXFx1MDAzY1xcdTAwM2MgOSkpO1xcdFxcdFxcdC8qIG1vdmVxICMwLCB0bXAxICovXFxuK1xcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlbWl0X2FsdTMyX2soY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbit7XFxuK1xcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVxcdTAwM2Vkc3RfcmVnXTtcXG4rXFx0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xcbitcXHRjb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07XFxuK1xcdHM4IGRfcmVnO1xcbitcXG4rXFx0ZF9yZWcgPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcXG4rXFxuK1xcdHN3aXRjaCAoQlBGX09QKGluc24tXFx1MDAzZWNvZGUpKSB7XFxuK1xcdGNhc2UgQlBGX01PVjpcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjAzYyB8IChkX3JlZyBcXHUwMDNjXFx1MDAzYyA5KSk7XFx0XFx0LyogbW92ZS5sICNpbW0sIGRzdCAqL1xcbitcXHRcXHRlbWl0XzMyKGN0eCwgaW5zbi1cXHUwMDNlaW1tKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX0FERDpcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MDY4MCB8IGRfcmVnKTtcXHRcXHRcXHQvKiBhZGRpLmwgI2ltbSwgZHN0ICovXFxuK1xcdFxcdGVtaXRfMzIoY3R4LCBpbnNuLVxcdTAwM2VpbW0pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfU1VCOlxcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgwNDgwIHwgZF9yZWcpO1xcdFxcdFxcdC8qIHN1YmkubCAjaW1tLCBkc3QgKi9cXG4rXFx0XFx0ZW1pdF8zMihjdHgsIGluc24tXFx1MDAzZWltbSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9BTkQ6XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDAyODAgfCBkX3JlZyk7XFx0XFx0XFx0LyogYW5kaS5sICNpbW0sIGRzdCAqL1xcbitcXHRcXHRlbWl0XzMyKGN0eCwgaW5zbi1cXHUwMDNlaW1tKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX09SOlxcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgwMDgwIHwgZF9yZWcpO1xcdFxcdFxcdC8qIG9yaS5sICNpbW0sIGRzdCAqL1xcbitcXHRcXHRlbWl0XzMyKGN0eCwgaW5zbi1cXHUwMDNlaW1tKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX1hPUjpcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MGE4MCB8IGRfcmVnKTtcXHRcXHRcXHQvKiBlb3JpLmwgI2ltbSwgZHN0ICovXFxuK1xcdFxcdGVtaXRfMzIoY3R4LCBpbnNuLVxcdTAwM2VpbW0pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfTFNIOlxcbitcXHRjYXNlIEJQRl9SU0g6XFxuK1xcdGNhc2UgQlBGX0FSU0g6XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAodG1wMlsxXSBcXHUwMDNjXFx1MDAzYyA5KSk7XFx0XFx0LyogbW92ZS5sICNpbW0sIGNvdW50ICovXFxuK1xcdFxcdGVtaXRfMzIoY3R4LCBpbnNuLVxcdTAwM2VpbW0gXFx1MDAyNiAweDFmKTtcXG4rXFxuK1xcdFxcdGlmIChCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0xTSClcXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4ZTFhOCB8ICh0bXAyWzFdIFxcdTAwM2NcXHUwMDNjIDkpIHwgZF9yZWcpO1xcdC8qIGxzbC5sIGNvdW50LCBkc3QgKi9cXG4rXFx0XFx0ZWxzZSBpZiAoQlBGX09QKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9SU0gpXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweGUwYTggfCAodG1wMlsxXSBcXHUwMDNjXFx1MDAzYyA5KSB8IGRfcmVnKTtcXHQvKiBsc3IubCBjb3VudCwgZHN0ICovXFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4ZTBhMCB8ICh0bXAyWzFdIFxcdTAwM2NcXHUwMDNjIDkpIHwgZF9yZWcpO1xcdC8qIGFzci5sIGNvdW50LCBkc3QgKi9cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX3JlZywgY3R4KTtcXG4rXFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8ICh0bXAxWzBdIFxcdTAwM2NcXHUwMDNjIDkpKTtcXHRcXHRcXHQvKiBtb3ZlcSAjMCwgdG1wMSAqL1xcbitcXHRicGZfcHV0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZW1pdF9hbHU2NF94KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG4re1xcbitcXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cXHUwMDNlZHN0X3JlZ107XFxuK1xcdGNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLVxcdTAwM2VzcmNfcmVnXTtcXG4rXFx0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xcbitcXHRjb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07XFxuK1xcdHM4IGRfbG8sIGRfaGksIHNfbG8sIHNfaGk7XFxuK1xcbitcXHRkX2xvID0gYnBmX2dldF9yZWczMihkc3RbMV0sIHRtcDFbMV0sIGN0eCk7XFxuK1xcdGRfaGkgPSBicGZfZ2V0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcXG4rXFx0c19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpO1xcbitcXHRzX2hpID0gYnBmX2dldF9yZWczMihzcmNbMF0sIHRtcDJbMF0sIGN0eCk7XFxuK1xcbitcXHRzd2l0Y2ggKEJQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKSkge1xcbitcXHRjYXNlIEJQRl9NT1Y6XFxuK1xcdFxcdGlmIChpbnNuLVxcdTAwM2VvZmYgPT0gOCB8fCBpbnNuLVxcdTAwM2VvZmYgPT0gMTYgfHwgaW5zbi1cXHUwMDNlb2ZmID09IDMyKSB7XFxuK1xcdFxcdFxcdGlmIChkX2xvICE9IHNfbG8pXFxuK1xcdFxcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDIwMDAgfCAoZF9sbyBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfbG8pOyAvKiBtb3ZlLmwgc3JjLCBkc3QgKi9cXG4rXFxuK1xcdFxcdFxcdGlmIChpbnNuLVxcdTAwM2VvZmYgPT0gOClcXG4rXFx0XFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NDljMCB8IGRfbG8pO1xcdFxcdC8qIGV4dGIubCBkX2xvICovXFxuK1xcdFxcdFxcdGVsc2UgaWYgKGluc24tXFx1MDAzZW9mZiA9PSAxNilcXG4rXFx0XFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NDhjMCB8IGRfbG8pO1xcdFxcdC8qIGV4dC5sIGRfbG8gKi9cXG4rXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDRhODAgfCBkX2xvKTtcXHRcXHRcXHQvKiB0c3QubCBkX2xvICovXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDViYzAgfCBkX2hpKTtcXHRcXHRcXHQvKiBzbWkgZF9oaSAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHg0OWMwIHwgZF9oaSk7XFx0XFx0XFx0LyogZXh0Yi5sIGRfaGkgKi9cXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0aWYgKGRfbG8gIT0gc19sbylcXG4rXFx0XFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4MjAwMCB8IChkX2xvIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19sbyk7IC8qIG1vdmUubCBzX2xvLCBkX2xvICovXFxuK1xcdFxcdFxcdGlmIChkX2hpICE9IHNfaGkpXFxuK1xcdFxcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDIwMDAgfCAoZF9oaSBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfaGkpOyAvKiBtb3ZlLmwgc19oaSwgZF9oaSAqL1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9BREQ6XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweGQwODAgfCAoZF9sbyBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfbG8pO1xcdFxcdC8qIGFkZC5sIHNfbG8sIGRfbG8gKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4ZDE4MCB8IChkX2hpIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19oaSk7XFx0XFx0LyogYWRkeC5sIHNfaGksIGRfaGkgKi9cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX1NVQjpcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4OTA4MCB8IChkX2xvIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19sbyk7XFx0XFx0Lyogc3ViLmwgc19sbywgZF9sbyAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHg5MTgwIHwgKGRfaGkgXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2hpKTtcXHRcXHQvKiBzdWJ4Lmwgc19oaSwgZF9oaSAqL1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfQU5EOlxcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHhjMDgwIHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2xvKTtcXHRcXHQvKiBhbmQubCBzX2xvLCBkX2xvICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweGMwODAgfCAoZF9oaSBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfaGkpO1xcdFxcdC8qIGFuZC5sIHNfaGksIGRfaGkgKi9cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX09SOlxcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2xvKTtcXHRcXHQvKiBvci5sIHNfbG8sIGRfbG8gKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4ODA4MCB8IChkX2hpIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19oaSk7XFx0XFx0Lyogb3IubCBzX2hpLCBkX2hpICovXFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9YT1I6XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweGIxODAgfCAoc19sbyBcXHUwMDNjXFx1MDAzYyA5KSB8IGRfbG8pO1xcdFxcdC8qIGVvci5sIHNfbG8sIGRfbG8gKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4YjE4MCB8IChzX2hpIFxcdTAwM2NcXHUwMDNjIDkpIHwgZF9oaSk7XFx0XFx0LyogZW9yLmwgc19oaSwgZF9oaSAqL1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0YnBmX3B1dF9yZWczMihkc3RbMV0sIGRfbG8sIGN0eCk7XFxuK1xcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlbWl0X2FsdTY0X2soY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbit7XFxuK1xcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVxcdTAwM2Vkc3RfcmVnXTtcXG4rXFx0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xcbitcXHRjb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07XFxuK1xcdHM4IGRfbG8sIGRfaGksIHNfbG8sIHNfaGk7XFxuK1xcdHUzMiBpbW1fbG8gPSBpbnNuLVxcdTAwM2VpbW07XFxuK1xcdHUzMiBpbW1faGkgPSBpbnNuLVxcdTAwM2VpbW0gXFx1MDAzYyAwID8gMHhmZmZmZmZmZiA6IDA7XFxuK1xcbitcXHRkX2xvID0gYnBmX2dldF9yZWczMihkc3RbMV0sIHRtcDFbMV0sIGN0eCk7XFxuK1xcdGRfaGkgPSBicGZfZ2V0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcXG4rXFxuK1xcdGlmIChCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX01PVikge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkpO1xcdFxcdFxcdC8qIG1vdmUubCAjaW1tLCBkX2xvICovXFxuK1xcdFxcdGVtaXRfMzIoY3R4LCBpbW1fbG8pO1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKGRfaGkgXFx1MDAzY1xcdTAwM2MgOSkpO1xcdFxcdFxcdC8qIG1vdmUubCAjaW1tLCBkX2hpICovXFxuK1xcdFxcdGVtaXRfMzIoY3R4LCBpbW1faGkpO1xcbitcXHRcXHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9sbywgY3R4KTtcXG4rXFx0XFx0YnBmX3B1dF9yZWczMihkc3RbMF0sIGRfaGksIGN0eCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0c19sbyA9IHRtcDJbMV07XFxuK1xcdHNfaGkgPSB0bXAyWzBdO1xcbitcXG4rXFx0ZW1pdF8xNihjdHgsIDB4MjAzYyB8IChzX2xvIFxcdTAwM2NcXHUwMDNjIDkpKTtcXHRcXHRcXHRcXHQvKiBtb3ZlLmwgI2ltbSwgc19sbyAqL1xcbitcXHRlbWl0XzMyKGN0eCwgaW1tX2xvKTtcXG4rXFx0ZW1pdF8xNihjdHgsIDB4MjAzYyB8IChzX2hpIFxcdTAwM2NcXHUwMDNjIDkpKTtcXHRcXHRcXHRcXHQvKiBtb3ZlLmwgI2ltbSwgc19oaSAqL1xcbitcXHRlbWl0XzMyKGN0eCwgaW1tX2hpKTtcXG4rXFxuK1xcdHN3aXRjaCAoQlBGX09QKGluc24tXFx1MDAzZWNvZGUpKSB7XFxuK1xcdGNhc2UgQlBGX0FERDpcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4ZDA4MCB8IChkX2xvIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19sbyk7XFx0XFx0LyogYWRkLmwgc19sbywgZF9sbyAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHhkMTgwIHwgKGRfaGkgXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2hpKTtcXHRcXHQvKiBhZGR4Lmwgc19oaSwgZF9oaSAqL1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfU1VCOlxcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHg5MDgwIHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2xvKTtcXHRcXHQvKiBzdWIubCBzX2xvLCBkX2xvICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDkxODAgfCAoZF9oaSBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfaGkpO1xcdFxcdC8qIHN1YngubCBzX2hpLCBkX2hpICovXFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9BTkQ6XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweGMwODAgfCAoZF9sbyBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfbG8pO1xcdFxcdC8qIGFuZC5sIHNfbG8sIGRfbG8gKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4YzA4MCB8IChkX2hpIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19oaSk7XFx0XFx0LyogYW5kLmwgc19oaSwgZF9oaSAqL1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfT1I6XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDgwODAgfCAoZF9sbyBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfbG8pO1xcdFxcdC8qIG9yLmwgc19sbywgZF9sbyAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfaGkgXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2hpKTtcXHRcXHQvKiBvci5sIHNfaGksIGRfaGkgKi9cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX1hPUjpcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4YjE4MCB8IChzX2xvIFxcdTAwM2NcXHUwMDNjIDkpIHwgZF9sbyk7XFx0XFx0LyogZW9yLmwgc19sbywgZF9sbyAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHhiMTgwIHwgKHNfaGkgXFx1MDAzY1xcdTAwM2MgOSkgfCBkX2hpKTtcXHRcXHQvKiBlb3IubCBzX2hpLCBkX2hpICovXFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9sbywgY3R4KTtcXG4rXFx0YnBmX3B1dF9yZWczMihkc3RbMF0sIGRfaGksIGN0eCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVtaXRfYWx1NjRfc2hpZnQoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIGlzX2ltbSlcXG4re1xcbitcXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cXHUwMDNlZHN0X3JlZ107XFxuK1xcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcXG4rXFx0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xcbitcXHRzOCBkX2xvLCBkX2hpLCBjb3VudF9yZWc7XFxuK1xcdGludCBsb29wX3N0YXJ0LCBkb25lX2lkeDtcXG4rXFxuK1xcdGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcXG4rXFx0ZF9oaSA9IGJwZl9nZXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpO1xcbitcXHRjb3VudF9yZWcgPSB0bXAyWzFdO1xcbitcXG4rXFx0aWYgKGlzX2ltbSkge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKGNvdW50X3JlZyBcXHUwMDNjXFx1MDAzYyA5KSk7XFx0XFx0LyogbW92ZS5sICNpbW0sIGNvdW50X3JlZyAqL1xcbitcXHRcXHRlbWl0XzMyKGN0eCwgaW5zbi1cXHUwMDNlaW1tKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0Y29uc3QgczggKnNyYyA9IGJwZjJtNjhrW2luc24tXFx1MDAzZXNyY19yZWddO1xcbitcXHRcXHRzOCBzX2xvID0gYnBmX2dldF9yZWczMihzcmNbMV0sIHRtcDJbMV0sIGN0eCk7XFxuK1xcbitcXHRcXHRpZiAoY291bnRfcmVnICE9IHNfbG8pXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDIwMDAgfCAoY291bnRfcmVnIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19sbyk7XFx0LyogbW92ZS5sIHNfbG8sIGNvdW50X3JlZyAqL1xcbitcXHR9XFxuK1xcbitcXHRlbWl0XzE2KGN0eCwgMHgwMjgwIHwgY291bnRfcmVnKTtcXHRcXHRcXHQvKiBhbmRpLmwgIzB4M2YsIGNvdW50X3JlZyAqL1xcbitcXHRlbWl0XzMyKGN0eCwgMHgzZik7XFxuK1xcbitcXHRlbWl0XzE2KGN0eCwgMHg0YTgwIHwgY291bnRfcmVnKTtcXHRcXHRcXHRcXHQvKiB0c3QubCBjb3VudF9yZWcgKi9cXG4rXFx0ZW1pdF8xNihjdHgsIDB4NjcwMCk7XFx0XFx0XFx0XFx0XFx0XFx0LyogYmVxLncgZG9uZV9pZHggKi9cXG4rXFx0ZG9uZV9pZHggPSBjdHgtXFx1MDAzZWlkeDtcXG4rXFx0ZW1pdF8xNihjdHgsIDApO1xcbitcXG4rXFx0bG9vcF9zdGFydCA9IGN0eC1cXHUwMDNlaWR4O1xcbitcXG4rXFx0aWYgKEJQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfTFNIKSB7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweGUzODggfCBkX2xvKTtcXHRcXHRcXHRcXHQvKiBsc2xsICMxLCBkX2xvICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweGUzOTAgfCBkX2hpKTtcXHRcXHRcXHRcXHQvKiByb3hsLmwgIzEsIGRfaGkgKi9cXG4rXFx0fSBlbHNlIGlmIChCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1JTSCkge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHhlMjg4IHwgZF9oaSk7XFx0XFx0XFx0XFx0LyogbHNybCAjMSwgZF9oaSAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHhlMjkwIHwgZF9sbyk7XFx0XFx0XFx0XFx0Lyogcm94ci5sICMxLCBkX2xvICovXFxuK1xcdH0gZWxzZSBpZiAoQlBGX09QKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9BUlNIKSB7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweGUyODAgfCBkX2hpKTtcXHRcXHRcXHRcXHQvKiBhc3JsICMxLCBkX2hpICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweGUyOTAgfCBkX2xvKTtcXHRcXHRcXHRcXHQvKiByb3hyLmwgIzEsIGRfbG8gKi9cXG4rXFx0fVxcbitcXG4rXFx0ZW1pdF8xNihjdHgsIDB4NTM4MCB8IGNvdW50X3JlZyk7XFx0XFx0XFx0XFx0Lyogc3VicS5sICMxLCBjb3VudF9yZWcgKi9cXG4rXFx0ZW1pdF8xNihjdHgsIDB4NjYwMCk7XFx0XFx0XFx0XFx0XFx0XFx0LyogYm5lLncgbG9vcF9zdGFydCAqL1xcbitcXHRlbWl0XzE2KGN0eCwgKGxvb3Bfc3RhcnQgLSAoaW50KWN0eC1cXHUwMDNlaWR4KSAqIDIpO1xcbitcXG4rXFx0aWYgKGN0eC1cXHUwMDNldGFyZ2V0KVxcbitcXHRcXHRjdHgtXFx1MDAzZXRhcmdldFtkb25lX2lkeF0gPSAoY3R4LVxcdTAwM2VpZHggLSBkb25lX2lkeCkgKiAyO1xcbitcXG4rXFx0YnBmX3B1dF9yZWczMihkc3RbMV0sIGRfbG8sIGN0eCk7XFxuK1xcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlbWl0X2JwZl9lbmQoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbit7XFxuK1xcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVxcdTAwM2Vkc3RfcmVnXTtcXG4rXFx0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xcbitcXHRzOCBkX2xvLCBkX2hpO1xcbitcXHRib29sIHRvX2xlID0gQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfVE9fTEU7XFxuK1xcdGludCBpbW0gPSBpbnNuLVxcdTAwM2VpbW07XFxuK1xcbitcXHRkX2xvID0gYnBmX2dldF9yZWczMihkc3RbMV0sIHRtcDFbMV0sIGN0eCk7XFxuK1xcdGRfaGkgPSBicGZfZ2V0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcXG4rXFxuK1xcdGlmICh0b19sZSkge1xcbitcXHRcXHRzd2l0Y2ggKGltbSkge1xcbitcXHRcXHRjYXNlIDE2OlxcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHgwMjgwIHwgZF9sbyk7XFx0XFx0XFx0LyogYW5kaS5sICMweGZmZmYsIGRfbG8gKi9cXG4rXFx0XFx0XFx0ZW1pdF8zMihjdHgsIDB4ZmZmZik7XFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweGUwNTggfCBkX2xvKTtcXHRcXHRcXHQvKiByb3IudyAjOCwgZF9sbyAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHg3MDAwIHwgKGRfaGkgXFx1MDAzY1xcdTAwM2MgOSkpO1xcdFxcdC8qIG1vdmVxICMwLCBkX2hpICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIDMyOlxcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9sbyk7XFx0XFx0XFx0Lyogcm9yLncgIzgsIGRfbG8gKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NDg0MCB8IGRfbG8pO1xcdFxcdFxcdC8qIHN3YXAgZF9sbyAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9sbyk7XFx0XFx0XFx0Lyogcm9yLncgIzgsIGRfbG8gKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2hpIFxcdTAwM2NcXHUwMDNjIDkpKTtcXHRcXHQvKiBtb3ZlcSAjMCwgZF9oaSAqL1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSA2NDpcXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4ZTA1OCB8IGRfbG8pO1xcdFxcdFxcdC8qIHJvci53ICM4LCBkX2xvICovXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDQ4NDAgfCBkX2xvKTtcXHRcXHRcXHQvKiBzd2FwIGRfbG8gKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4ZTA1OCB8IGRfbG8pO1xcdFxcdFxcdC8qIHJvci53ICM4LCBkX2xvICovXFxuK1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9oaSk7XFx0XFx0XFx0Lyogcm9yLncgIzgsIGRfaGkgKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NDg0MCB8IGRfaGkpO1xcdFxcdFxcdC8qIHN3YXAgZF9oaSAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9oaSk7XFx0XFx0XFx0Lyogcm9yLncgIzgsIGRfaGkgKi9cXG4rXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweGMxNDAgfCAoZF9oaSBcXHUwMDNjXFx1MDAzYyA5KSB8IGRfbG8pO1xcdC8qIGV4ZyBkX2xvLCBkX2hpICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHN3aXRjaCAoaW1tKSB7XFxuK1xcdFxcdGNhc2UgMTY6XFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDAyODAgfCBkX2xvKTtcXHRcXHRcXHQvKiBhbmRpLmwgIzB4ZmZmZiwgZF9sbyAqL1xcbitcXHRcXHRcXHRlbWl0XzMyKGN0eCwgMHhmZmZmKTtcXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2hpIFxcdTAwM2NcXHUwMDNjIDkpKTtcXHRcXHQvKiBtb3ZlcSAjMCwgZF9oaSAqL1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAzMjpcXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2hpIFxcdTAwM2NcXHUwMDNjIDkpKTtcXHRcXHQvKiBtb3ZlcSAjMCwgZF9oaSAqL1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSA2NDpcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0YnBmX3B1dF9yZWczMihkc3RbMV0sIGRfbG8sIGN0eCk7XFxuK1xcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlbWl0X21hdGhfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgaXNfNjQpXFxuK3tcXG4rXFx0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXFx1MDAzZWRzdF9yZWddO1xcbitcXHRjb25zdCBzOCAqc3JjID0gYnBmMm02OGtbaW5zbi1cXHUwMDNlc3JjX3JlZ107XFxuK1xcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcXG4rXFx0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xcbitcXHRzOCBkX2xvLCBkX2hpLCBzX2xvLCBzX2hpID0gMDtcXG4rXFx0dm9pZCAqZnVuYyA9IE5VTEw7XFxuK1xcdHU4IG9wID0gQlBGX09QKGluc24tXFx1MDAzZWNvZGUpO1xcbitcXG4rXFx0ZF9sbyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpO1xcbitcXHRkX2hpID0gYnBmX2dldF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7XFxuK1xcbitcXHRpZiAoQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xcbitcXHRcXHRzX2xvID0gYnBmX2dldF9yZWczMihzcmNbMV0sIHRtcDJbMV0sIGN0eCk7XFxuK1xcdFxcdGlmIChpc182NClcXG4rXFx0XFx0XFx0c19oaSA9IGJwZl9nZXRfcmVnMzIoc3JjWzBdLCB0bXAyWzBdLCBjdHgpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRzX2xvID0gdG1wMlsxXTtcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjAzYyB8IChzX2xvIFxcdTAwM2NcXHUwMDNjIDkpKTtcXHRcXHRcXHQvKiBtb3ZlLmwgI2ltbSwgc19sbyAqL1xcbitcXHRcXHRlbWl0XzMyKGN0eCwgaW5zbi1cXHUwMDNlaW1tKTtcXG4rXFx0XFx0aWYgKGlzXzY0KSB7XFxuK1xcdFxcdFxcdHNfaGkgPSB0bXAyWzBdO1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHNfaGkgXFx1MDAzY1xcdTAwM2MgOSkpO1xcdFxcdC8qIG1vdmUubCAjaW1tLCBzX2hpICovXFxuK1xcdFxcdFxcdGVtaXRfMzIoY3R4LCBpbnNuLVxcdTAwM2VpbW0gXFx1MDAzYyAwID8gMHhmZmZmZmZmZiA6IDApO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChpc182NCkge1xcbitcXHRcXHRzd2l0Y2ggKG9wKSB7XFxuK1xcdFxcdGNhc2UgQlBGX01VTDpcXG4rXFx0XFx0XFx0ZnVuYyA9ICh2b2lkICopaml0X211bDY0O1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBCUEZfRElWOlxcbitcXHRcXHRcXHRmdW5jID0gKHZvaWQgKilqaXRfZGl2NjQ7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEJQRl9NT0Q6XFxuK1xcdFxcdFxcdGZ1bmMgPSAodm9pZCAqKWppdF9tb2Q2NDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQgXFx1MDAyNlxcdTAwMjYgb3AgPT0gQlBGX0RJViBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VvZmYgPT0gMSlcXG4rXFx0XFx0XFx0ZnVuYyA9ICh2b2lkICopaml0X3NkaXY2NDtcXG4rXFx0XFx0aWYgKEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQgXFx1MDAyNlxcdTAwMjYgb3AgPT0gQlBGX01PRCBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VvZmYgPT0gMSlcXG4rXFx0XFx0XFx0ZnVuYyA9ICh2b2lkICopaml0X3Ntb2Q2NDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c3dpdGNoIChvcCkge1xcbitcXHRcXHRjYXNlIEJQRl9NVUw6XFxuK1xcdFxcdFxcdGZ1bmMgPSAodm9pZCAqKWppdF9tdWwzMjtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgQlBGX0RJVjpcXG4rXFx0XFx0XFx0ZnVuYyA9ICh2b2lkICopaml0X2RpdjMyO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBCUEZfTU9EOlxcbitcXHRcXHRcXHRmdW5jID0gKHZvaWQgKilqaXRfbW9kMzI7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FMVSBcXHUwMDI2XFx1MDAyNiBvcCA9PSBCUEZfRElWIFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZW9mZiA9PSAxKVxcbitcXHRcXHRcXHRmdW5jID0gKHZvaWQgKilqaXRfc2RpdjMyO1xcbitcXHRcXHRpZiAoQlBGX0NMQVNTKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9BTFUgXFx1MDAyNlxcdTAwMjYgb3AgPT0gQlBGX01PRCBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VvZmYgPT0gMSlcXG4rXFx0XFx0XFx0ZnVuYyA9ICh2b2lkICopaml0X3Ntb2QzMjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGlzXzY0KSB7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDQ4ZTcpO1xcdFxcdFxcdFxcdFxcdC8qIG1vdmVtLmwgZDAtZDEsIC0oJXNwKSAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHhjMDAwKTtcXG4rXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBzX2xvKTtcXHRcXHRcXHRcXHQvKiBtb3ZlLmwgc19sbywgLSglc3ApICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBzX2hpKTtcXHRcXHRcXHRcXHQvKiBtb3ZlLmwgc19oaSwgLSglc3ApICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBkX2xvKTtcXHRcXHRcXHRcXHQvKiBtb3ZlLmwgZF9sbywgLSglc3ApICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBkX2hpKTtcXHRcXHRcXHRcXHQvKiBtb3ZlLmwgZF9oaSwgLSglc3ApICovXFxuK1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDdjKTtcXHRcXHRcXHRcXHRcXHQvKiBtb3ZlYS5sICNmdW5jLCAlYTAgKi9cXG4rXFx0XFx0ZW1pdF8zMihjdHgsICh1MzIpZnVuYyk7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDRlOTApO1xcdFxcdFxcdFxcdFxcdC8qIGpzciAoJWEwKSAqL1xcbitcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4NGZlZik7XFx0XFx0XFx0XFx0XFx0LyogbGVhIDE2KCVzcCksICVzcCAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMTYpO1xcbitcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjYwMSk7XFx0XFx0XFx0XFx0XFx0LyogbW92ZS5sICVkMSwgJWQzICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDI0MDApO1xcdFxcdFxcdFxcdFxcdC8qIG1vdmUubCAlZDAsICVkMiAqL1xcbitcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4NGNkZik7XFx0XFx0XFx0XFx0XFx0LyogbW92ZW0ubCAoJXNwKSssIGQwLWQxICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDAwMDMpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHg0OGU3KTtcXHRcXHRcXHRcXHRcXHQvKiBtb3ZlbS5sIGQwLWQxLCAtKCVzcCkgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4YzAwMCk7XFxuK1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyZjAwIHwgc19sbyk7XFx0XFx0XFx0XFx0LyogbW92ZS5sIHNfbG8sIC0oJXNwKSAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyZjAwIHwgZF9sbyk7XFx0XFx0XFx0XFx0LyogbW92ZS5sIGRfbG8sIC0oJXNwKSAqL1xcbitcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjA3Yyk7XFx0XFx0XFx0XFx0XFx0LyogbW92ZWEubCAjZnVuYywgJWEwICovXFxuK1xcdFxcdGVtaXRfMzIoY3R4LCAodTMyKWZ1bmMpO1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHg0ZTkwKTtcXHRcXHRcXHRcXHRcXHQvKiBqc3IgKCVhMCkgKi9cXG4rXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDRmZWYpO1xcdFxcdFxcdFxcdFxcdC8qIGxlYSA4KCVzcCksICVzcCAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgOCk7XFxuK1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyNjAwKTtcXHRcXHRcXHRcXHRcXHQvKiBtb3ZlLmwgJWQwLCAlZDMgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4NzQwMCk7XFx0XFx0XFx0XFx0XFx0LyogbW92ZXEgIzAsICVkMiAqL1xcbitcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4NGNkZik7XFx0XFx0XFx0XFx0XFx0LyogbW92ZW0ubCAoJXNwKSssIGQwLWQxICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDAwMDMpO1xcbitcXHR9XFxuK1xcbitcXHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgTTY4S19EMywgY3R4KTtcXG4rXFx0YnBmX3B1dF9yZWczMihkc3RbMF0sIE02OEtfRDIsIGN0eCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVtaXRfbGR4KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG4re1xcbitcXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cXHUwMDNlZHN0X3JlZ107XFxuK1xcdGNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLVxcdTAwM2VzcmNfcmVnXTtcXG4rXFx0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xcbitcXHRzOCBkX2xvLCBkX2hpO1xcbitcXHRib29sIGlzX21lbV9zeCA9IEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU1TWDtcXG4rXFxuK1xcdGlmIChpc19zdGFja2VkKHNyY1sxXSkpIHtcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjA2ZSk7XFx0XFx0XFx0XFx0LyogbW92ZWEubCBkMTYoJWZwKSwgJWEwICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAodTE2KXNyY1sxXSk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDIwNDAgfCBzcmNbMV0pO1xcdFxcdFxcdC8qIG1vdmVhLmwgc3JjLCAlYTAgKi9cXG4rXFx0fVxcbitcXG4rXFx0ZF9sbyA9IGlzX3N0YWNrZWQoZHN0WzFdKSA/IHRtcDFbMV0gOiBkc3RbMV07XFxuK1xcdGRfaGkgPSBpc19zdGFja2VkKGRzdFswXSkgPyB0bXAxWzBdIDogZHN0WzBdO1xcbitcXG4rXFx0c3dpdGNoIChCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSkge1xcbitcXHRjYXNlIEJQRl9COlxcbitcXHRcXHRpZiAoIWlzX21lbV9zeClcXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2xvIFxcdTAwM2NcXHUwMDNjIDkpKTtcXHQvKiBtb3ZlcSAjMCwgZF9sbyAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgxMDI4IHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkpO1xcdFxcdC8qIG1vdmUuYiBkMTYoJWEwKSwgZF9sbyAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgaW5zbi1cXHUwMDNlb2ZmKTtcXG4rXFx0XFx0aWYgKGlzX21lbV9zeClcXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NDljMCB8IGRfbG8pO1xcdC8qIGV4dGIubCBkX2xvICovXFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9IOlxcbitcXHRcXHRpZiAoIWlzX21lbV9zeClcXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2xvIFxcdTAwM2NcXHUwMDNjIDkpKTtcXHQvKiBtb3ZlcSAjMCwgZF9sbyAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgzMDI4IHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkpO1xcdFxcdC8qIG1vdmUudyBkMTYoJWEwKSwgZF9sbyAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgaW5zbi1cXHUwMDNlb2ZmKTtcXG4rXFx0XFx0aWYgKGlzX21lbV9zeClcXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NDhjMCB8IGRfbG8pO1xcdC8qIGV4dC5sIGRfbG8gKi9cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX1c6XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDIwMjggfCAoZF9sbyBcXHUwMDNjXFx1MDAzYyA5KSk7XFx0XFx0LyogbW92ZS5sIGQxNiglYTApLCBkX2xvICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCBpbnNuLVxcdTAwM2VvZmYpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfRFc6XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDIwMjggfCAoZF9oaSBcXHUwMDNjXFx1MDAzYyA5KSk7XFx0XFx0LyogbW92ZS5sIGQxNiglYTApLCBkX2hpICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCBpbnNuLVxcdTAwM2VvZmYpO1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHg0MWU4KTtcXHRcXHRcXHRcXHQvKiBsZWEgNCglYTApLCAlYTAgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDQpO1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDI4IHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkpO1xcdFxcdC8qIG1vdmUubCBkMTYoJWEwKSwgZF9sbyAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgaW5zbi1cXHUwMDNlb2ZmKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSAhPSBCUEZfRFcpIHtcXG4rXFx0XFx0aWYgKGlzX21lbV9zeCkge1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHg0YTgwIHwgZF9sbyk7XFx0XFx0XFx0LyogdHN0LmwgZF9sbyAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHg1YmMwIHwgZF9oaSk7XFx0XFx0XFx0Lyogc21pIGRfaGkgKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NDljMCB8IGRfaGkpO1xcdFxcdFxcdC8qIGV4dGIubCBkX2hpICovXFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDcwMDAgfCAoZF9oaSBcXHUwMDNjXFx1MDAzYyA5KSk7XFx0LyogbW92ZXEgIzAsIGRfaGkgKi9cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9sbywgY3R4KTtcXG4rXFx0YnBmX3B1dF9yZWczMihkc3RbMF0sIGRfaGksIGN0eCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVtaXRfc3R4KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG4re1xcbitcXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cXHUwMDNlZHN0X3JlZ107XFxuK1xcdGNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLVxcdTAwM2VzcmNfcmVnXTtcXG4rXFx0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xcbitcXHRzOCBzX2xvLCBzX2hpO1xcbitcXG4rXFx0aWYgKGlzX3N0YWNrZWQoZHN0WzFdKSkge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDZlKTtcXHRcXHRcXHRcXHQvKiBtb3ZlYS5sIGQxNiglZnApLCAlYTAgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsICh1MTYpZHN0WzFdKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjA0MCB8IGRzdFsxXSk7XFx0XFx0XFx0LyogbW92ZWEubCBkc3QsICVhMCAqL1xcbitcXHR9XFxuK1xcbitcXHRzX2xvID0gYnBmX2dldF9yZWczMihzcmNbMV0sIHRtcDJbMV0sIGN0eCk7XFxuK1xcbitcXHRzd2l0Y2ggKEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpKSB7XFxuK1xcdGNhc2UgQlBGX0I6XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDExNDAgfCBzX2xvKTtcXHRcXHRcXHQvKiBtb3ZlLmIgc19sbywgZDE2KCVhMCkgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIGluc24tXFx1MDAzZW9mZik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9IOlxcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgzMTQwIHwgc19sbyk7XFx0XFx0XFx0LyogbW92ZS53IHNfbG8sIGQxNiglYTApICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCBpbnNuLVxcdTAwM2VvZmYpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfVzpcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjE0MCB8IHNfbG8pO1xcdFxcdFxcdC8qIG1vdmUubCBzX2xvLCBkMTYoJWEwKSAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgaW5zbi1cXHUwMDNlb2ZmKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX0RXOlxcbitcXHRcXHRzX2hpID0gYnBmX2dldF9yZWczMihzcmNbMF0sIHRtcDJbMF0sIGN0eCk7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDIxNDAgfCBzX2hpKTtcXHRcXHRcXHQvKiBtb3ZlLmwgc19oaSwgZDE2KCVhMCkgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIGluc24tXFx1MDAzZW9mZik7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDQxZTgpO1xcdFxcdFxcdFxcdC8qIGxlYSA0KCVhMCksICVhMCAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgNCk7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDIxNDAgfCBzX2xvKTtcXHRcXHRcXHQvKiBtb3ZlLmwgc19sbywgZDE2KCVhMCkgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIGluc24tXFx1MDAzZW9mZik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVtaXRfc3QoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbit7XFxuK1xcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVxcdTAwM2Vkc3RfcmVnXTtcXG4rXFx0Y29uc3QgczggKnRtcCA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XFxuK1xcbitcXHRpZiAoaXNfc3RhY2tlZChkc3RbMV0pKSB7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDIwNmUpO1xcdFxcdFxcdFxcdC8qIG1vdmVhLmwgZDE2KCVmcCksICVhMCAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgKHUxNilkc3RbMV0pO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDQwIHwgZHN0WzFdKTtcXHRcXHRcXHQvKiBtb3ZlYS5sIGRzdCwgJWEwICovXFxuK1xcdH1cXG4rXFxuK1xcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAodG1wWzFdIFxcdTAwM2NcXHUwMDNjIDkpKTtcXHRcXHRcXHQvKiBtb3ZlLmwgI2ltbSwgdG1wICovXFxuK1xcdGVtaXRfMzIoY3R4LCBpbnNuLVxcdTAwM2VpbW0pO1xcbitcXG4rXFx0c3dpdGNoIChCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSkge1xcbitcXHRjYXNlIEJQRl9COlxcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgxMTQwIHwgdG1wWzFdKTtcXHRcXHRcXHQvKiBtb3ZlLmIgdG1wLCBkMTYoJWEwKSAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgaW5zbi1cXHUwMDNlb2ZmKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX0g6XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDMxNDAgfCB0bXBbMV0pO1xcdFxcdFxcdC8qIG1vdmUudyB0bXAsIGQxNiglYTApICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCBpbnNuLVxcdTAwM2VvZmYpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfVzpcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjE0MCB8IHRtcFsxXSk7XFx0XFx0XFx0LyogbW92ZS5sIHRtcCwgZDE2KCVhMCkgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIGluc24tXFx1MDAzZW9mZik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9EVzpcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjAzYyB8ICh0bXBbMF0gXFx1MDAzY1xcdTAwM2MgOSkpO1xcdFxcdC8qIG1vdmUubCAjaW1tLCB0bXAgKi9cXG4rXFx0XFx0ZW1pdF8zMihjdHgsIGluc24tXFx1MDAzZWltbSBcXHUwMDNjIDAgPyAweGZmZmZmZmZmIDogMCk7XFxuK1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMTQwIHwgdG1wWzBdKTtcXHRcXHRcXHQvKiBtb3ZlLmwgdG1wLCBkMTYoJWEwKSAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgaW5zbi1cXHUwMDNlb2ZmKTtcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4NDFlOCk7XFx0XFx0XFx0XFx0LyogbGVhIDQoJWEwKSwgJWEwICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCA0KTtcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjE0MCB8IHRtcFsxXSk7XFx0XFx0XFx0LyogbW92ZS5sIHRtcCwgZDE2KCVhMCkgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIGluc24tXFx1MDAzZW9mZik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVtaXRfYXRvbWljKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG4re1xcbitcXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cXHUwMDNlZHN0X3JlZ107XFxuK1xcdGNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLVxcdTAwM2VzcmNfcmVnXTtcXG4rXFx0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xcbitcXG4rXFx0aWYgKGlzX3N0YWNrZWQoZHN0WzFdKSkge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDZlKTtcXHRcXHRcXHRcXHQvKiBtb3ZlYS5sIGQxNiglZnApLCAlYTAgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsICh1MTYpZHN0WzFdKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjA0MCB8IGRzdFsxXSk7XFx0XFx0XFx0LyogbW92ZWEubCBkc3QsICVhMCAqL1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaW5zbi1cXHUwMDNlb2ZmKSB7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDQxZTgpO1xcdFxcdFxcdFxcdC8qIGxlYSBkMTYoJWEwKSwgJWEwICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCBpbnNuLVxcdTAwM2VvZmYpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1cpIHtcXG4rXFx0XFx0czggc19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpO1xcbitcXG4rXFx0XFx0aWYgKGluc24tXFx1MDAzZWltbSAhPSBCUEZfQ01QWENIRykge1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHg0OGU3KTtcXHRcXHRcXHQvKiBtb3ZlbS5sIGQwLWQxLCAtKCVzcCkgKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4YzAwMCk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBNNjhLX0QwKTtcXHRcXHRcXHQvKiBtb3ZlLmwgJWQwLCAtKCVzcCkgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MmYzYyk7XFx0XFx0XFx0XFx0LyogbW92ZS5sICNpbW0sIC0oJXNwKSAqL1xcbitcXHRcXHRlbWl0XzMyKGN0eCwgaW5zbi1cXHUwMDNlaW1tKTtcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IHNfbG8pO1xcdFxcdFxcdC8qIG1vdmUubCBzX2xvLCAtKCVzcCkgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MmYwOCk7XFx0XFx0XFx0XFx0LyogbW92ZS5sICVhMCwgLSglc3ApICovXFxuK1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDdjKTtcXHRcXHRcXHRcXHQvKiBtb3ZlYS5sICNmdW5jLCAlYTAgKi9cXG4rXFx0XFx0ZW1pdF8zMihjdHgsICh1MzIpaml0X2F0b21pYzMyKTtcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4NGU5MCk7XFx0XFx0XFx0XFx0LyoganNyICglYTApICovXFxuK1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHg0ZmVmKTtcXHRcXHRcXHRcXHQvKiBsZWEgMTYoJXNwKSwgJXNwICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAxNik7XFxuK1xcbitcXHRcXHRpZiAoaW5zbi1cXHUwMDNlaW1tID09IEJQRl9DTVBYQ0hHKSB7XFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDcyMDApO1xcdFxcdFxcdC8qIG1vdmVxICMwLCAlZDEgKi9cXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0Ym9vbCBpc19mZXRjaCA9IChpbnNuLVxcdTAwM2VpbW0gXFx1MDAyNiBCUEZfRkVUQ0gpIHx8IGluc24tXFx1MDAzZWltbSA9PSBCUEZfWENIRztcXG4rXFxuK1xcdFxcdFxcdGlmIChpc19mZXRjaClcXG4rXFx0XFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4MjYwMCk7XFx0XFx0LyogbW92ZS5sICVkMCwgJWQzICovXFxuK1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHg0Y2RmKTtcXHRcXHRcXHQvKiBtb3ZlbS5sICglc3ApKywgZDAtZDEgKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4MDAwMyk7XFxuK1xcbitcXHRcXHRcXHRpZiAoaXNfZmV0Y2gpIHtcXG4rXFx0XFx0XFx0XFx0YnBmX3B1dF9yZWczMihzcmNbMV0sIE02OEtfRDMsIGN0eCk7XFxuK1xcdFxcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDc0MDApO1xcdFxcdC8qIG1vdmVxICMwLCAlZDIgKi9cXG4rXFx0XFx0XFx0XFx0YnBmX3B1dF9yZWczMihzcmNbMF0sIE02OEtfRDIsIGN0eCk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXG4rXFx0fSBlbHNlIGlmIChCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfRFcpIHtcXG4rXFx0XFx0czggc19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpO1xcbitcXHRcXHRzOCBzX2hpID0gYnBmX2dldF9yZWczMihzcmNbMF0sIHRtcDJbMF0sIGN0eCk7XFxuK1xcbitcXHRcXHRpZiAoaW5zbi1cXHUwMDNlaW1tICE9IEJQRl9DTVBYQ0hHKSB7XFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDQ4ZTcpO1xcdFxcdFxcdC8qIG1vdmVtLmwgZDAtZDEsIC0oJXNwKSAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhjMDAwKTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IE02OEtfRDApO1xcdFxcdFxcdC8qIG1vdmUubCAlZDAsIC0oJXNwKSAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyZjAwIHwgTTY4S19EMSk7XFx0XFx0XFx0LyogbW92ZS5sICVkMSwgLSglc3ApICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDJmM2MpO1xcdFxcdFxcdFxcdC8qIG1vdmUubCAjaW1tLCAtKCVzcCkgKi9cXG4rXFx0XFx0ZW1pdF8zMihjdHgsIGluc24tXFx1MDAzZWltbSk7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBzX2xvKTtcXHRcXHRcXHQvKiBtb3ZlLmwgc19sbywgLSglc3ApICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBzX2hpKTtcXHRcXHRcXHQvKiBtb3ZlLmwgc19oaSwgLSglc3ApICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDJmMDgpO1xcdFxcdFxcdFxcdC8qIG1vdmUubCAlYTAsIC0oJXNwKSAqL1xcbitcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjA3Yyk7XFx0XFx0XFx0XFx0LyogbW92ZWEubCAjZnVuYywgJWEwICovXFxuK1xcdFxcdGVtaXRfMzIoY3R4LCAodTMyKWppdF9hdG9taWM2NCk7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDRlOTApO1xcdFxcdFxcdFxcdC8qIGpzciAoJWEwKSAqL1xcbitcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4NGZlZik7XFx0XFx0XFx0XFx0LyogbGVhIDI0KCVzcCksICVzcCAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMjQpO1xcbitcXG4rXFx0XFx0aWYgKGluc24tXFx1MDAzZWltbSA9PSBCUEZfQ01QWENIRykge1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhjMTQxKTtcXHRcXHRcXHQvKiBleGcgJWQwLCAlZDEgKi9cXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0Ym9vbCBpc19mZXRjaCA9IChpbnNuLVxcdTAwM2VpbW0gXFx1MDAyNiBCUEZfRkVUQ0gpIHx8IGluc24tXFx1MDAzZWltbSA9PSBCUEZfWENIRztcXG4rXFxuK1xcdFxcdFxcdGlmIChpc19mZXRjaCkge1xcbitcXHRcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHgyNjAwKTtcXHRcXHQvKiBtb3ZlLmwgJWQwLCAlZDMgKi9cXG4rXFx0XFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4MjQwMSk7XFx0XFx0LyogbW92ZS5sICVkMSwgJWQyICovXFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDRjZGYpO1xcdFxcdFxcdC8qIG1vdmVtLmwgKCVzcCkrLCBkMC1kMSAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHgwMDAzKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChpc19mZXRjaCkge1xcbitcXHRcXHRcXHRcXHRicGZfcHV0X3JlZzMyKHNyY1sxXSwgTTY4S19EMiwgY3R4KTtcXG4rXFx0XFx0XFx0XFx0YnBmX3B1dF9yZWczMihzcmNbMF0sIE02OEtfRDMsIGN0eCk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVtaXRfdGFpbF9jYWxsKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG4re1xcbitcXHRjb25zdCBzOCAqcjIgPSBicGYybTY4a1tCUEZfUkVHXzJdO1xcbitcXHRjb25zdCBzOCAqcjMgPSBicGYybTY4a1tCUEZfUkVHXzNdO1xcbitcXHRpbnQgam1wX291dF8xLCBqbXBfb3V0XzIsIGptcF9vdXRfMztcXG4rXFxuK1xcdGlmIChpc19zdGFja2VkKHIyWzFdKSkge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDZlKTtcXHRcXHRcXHRcXHQvKiBtb3ZlYS5sIGQxNiglZnApLCAlYTAgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsICh1MTYpcjJbMV0pO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDQwIHwgcjJbMV0pO1xcdFxcdFxcdC8qIG1vdmVhLmwgcjIsICVhMCAqL1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaXNfc3RhY2tlZChyM1sxXSkpIHtcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjQyZSk7XFx0XFx0XFx0XFx0LyogbW92ZS5sIGQxNiglZnApLCAlZDIgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsICh1MTYpcjNbMV0pO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyNDAwIHwgcjNbMV0pO1xcdFxcdFxcdC8qIG1vdmUubCByMywgJWQyICovXFxuK1xcdH1cXG4rXFxuK1xcdGVtaXRfMTYoY3R4LCAweGI0YTgpO1xcdFxcdFxcdFxcdFxcdC8qIGNtcC5sIGQxNiglYTApLCAlZDIgKi9cXG4rXFx0ZW1pdF8xNihjdHgsIG9mZnNldG9mKHN0cnVjdCBicGZfYXJyYXksIG1hcC5tYXhfZW50cmllcykpO1xcbitcXHRlbWl0XzE2KGN0eCwgMHg2NDAwKTtcXHRcXHRcXHRcXHRcXHQvKiBiY2MudyBqbXBfb3V0XzEgKi9cXG4rXFx0am1wX291dF8xID0gY3R4LVxcdTAwM2VpZHg7XFxuK1xcdGVtaXRfMTYoY3R4LCAwKTtcXG4rXFxuK1xcdGVtaXRfMTYoY3R4LCAweDI2MmUpO1xcdFxcdFxcdFxcdFxcdC8qIG1vdmUubCBkMTYoJWZwKSwgJWQzICovXFxuK1xcdGVtaXRfMTYoY3R4LCAodTE2KVNUQUNLX09GRlNFVChCUEZfVENfTE8pKTtcXG4rXFx0ZW1pdF8xNihjdHgsIDB4NGE4Myk7XFx0XFx0XFx0XFx0XFx0LyogdHN0LmwgJWQzICovXFxuK1xcdGVtaXRfMTYoY3R4LCAweDY3MDApO1xcdFxcdFxcdFxcdFxcdC8qIGJlcS53IGptcF9vdXRfMiAqL1xcbitcXHRqbXBfb3V0XzIgPSBjdHgtXFx1MDAzZWlkeDtcXG4rXFx0ZW1pdF8xNihjdHgsIDApO1xcbitcXG4rXFx0ZW1pdF8xNihjdHgsIDB4NTM4Myk7XFx0XFx0XFx0XFx0XFx0Lyogc3VicS5sICMxLCAlZDMgKi9cXG4rXFx0ZW1pdF8xNihjdHgsIDB4MmQ0Myk7XFx0XFx0XFx0XFx0XFx0LyogbW92ZS5sICVkMywgZDE2KCVmcCkgKi9cXG4rXFx0ZW1pdF8xNihjdHgsICh1MTYpU1RBQ0tfT0ZGU0VUKEJQRl9UQ19MTykpO1xcbitcXG4rXFx0ZW1pdF8xNihjdHgsIDB4ZDQ4Mik7XFx0XFx0XFx0XFx0XFx0LyogYWRkLmwgJWQyLCAlZDIgKi9cXG4rXFx0ZW1pdF8xNihjdHgsIDB4ZDQ4Mik7XFx0XFx0XFx0XFx0XFx0LyogYWRkLmwgJWQyLCAlZDIgKi9cXG4rXFx0ZW1pdF8xNihjdHgsIDB4NDNlOCk7XFx0XFx0XFx0XFx0XFx0LyogbGVhIGQxNiglYTApLCAlYTEgKi9cXG4rXFx0ZW1pdF8xNihjdHgsIG9mZnNldG9mKHN0cnVjdCBicGZfYXJyYXksIHB0cnMpKTtcXG4rXFx0ZW1pdF8xNihjdHgsIDB4ZDNjMik7XFx0XFx0XFx0XFx0XFx0LyogYWRkYS5sICVkMiwgJWExICovXFxuK1xcbitcXHRlbWl0XzE2KGN0eCwgMHgyMDUxKTtcXHRcXHRcXHRcXHRcXHQvKiBtb3ZlYS5sICglYTEpLCAlYTAgKi9cXG4rXFxuK1xcdGVtaXRfMTYoY3R4LCAweDI0MDgpO1xcdFxcdFxcdFxcdFxcdC8qIG1vdmUubCAlYTAsICVkMiAqL1xcbitcXHRlbWl0XzE2KGN0eCwgMHg0YTgyKTtcXHRcXHRcXHRcXHRcXHQvKiB0c3QubCAlZDIgKi9cXG4rXFx0ZW1pdF8xNihjdHgsIDB4NjcwMCk7XFx0XFx0XFx0XFx0XFx0LyogYmVxLncgam1wX291dF8zICovXFxuK1xcdGptcF9vdXRfMyA9IGN0eC1cXHUwMDNlaWR4O1xcbitcXHRlbWl0XzE2KGN0eCwgMCk7XFxuK1xcbitcXHRlbWl0XzE2KGN0eCwgMHgyMDY4KTtcXHRcXHRcXHRcXHRcXHQvKiBtb3ZlYS5sIGQxNiglYTApLCAlYTAgKi9cXG4rXFx0ZW1pdF8xNihjdHgsIG9mZnNldG9mKHN0cnVjdCBicGZfcHJvZywgYnBmX2Z1bmMpKTtcXG4rXFxuK1xcdGVtaXRfMTYoY3R4LCAweDRlZTgpO1xcdFxcdFxcdFxcdFxcdC8qIGptcCBkMTYoJWEwKSAqL1xcbitcXHRlbWl0XzE2KGN0eCwgNDQpO1xcbitcXG4rXFx0aWYgKGN0eC1cXHUwMDNldGFyZ2V0KSB7XFxuK1xcdFxcdGN0eC1cXHUwMDNldGFyZ2V0W2ptcF9vdXRfMV0gPSAoY3R4LVxcdTAwM2VpZHggLSBqbXBfb3V0XzEpICogMjtcXG4rXFx0XFx0Y3R4LVxcdTAwM2V0YXJnZXRbam1wX291dF8yXSA9IChjdHgtXFx1MDAzZWlkeCAtIGptcF9vdXRfMikgKiAyO1xcbitcXHRcXHRjdHgtXFx1MDAzZXRhcmdldFtqbXBfb3V0XzNdID0gKGN0eC1cXHUwMDNlaWR4IC0gam1wX291dF8zKSAqIDI7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCBlbWl0X2ptcChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBjdXJyX2kpXFxuK3tcXG4rXFx0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXFx1MDAzZWRzdF9yZWddO1xcbitcXHRjb25zdCBzOCAqc3JjID0gYnBmMm02OGtbaW5zbi1cXHUwMDNlc3JjX3JlZ107XFxuK1xcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcXG4rXFx0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xcbitcXHRzOCBkX2xvLCBkX2hpID0gMCwgc19sbywgc19oaSA9IDA7XFxuK1xcdGJvb2wgaXNfam1wMzIgPSBCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0pNUDMyO1xcbitcXHR1OCBvcCA9IEJQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKTtcXG4rXFx0aW50IHRhcmdldF9pbnNuO1xcbitcXG4rXFx0aWYgKGlzX2ptcDMyIFxcdTAwMjZcXHUwMDI2IG9wID09IEJQRl9KQSlcXG4rXFx0XFx0dGFyZ2V0X2luc24gPSBjdXJyX2kgKyAxICsgaW5zbi1cXHUwMDNlaW1tO1xcbitcXHRlbHNlXFxuK1xcdFxcdHRhcmdldF9pbnNuID0gY3Vycl9pICsgMSArIGluc24tXFx1MDAzZW9mZjtcXG4rXFxuK1xcdGlmICh0YXJnZXRfaW5zbiBcXHUwMDNjIDAgfHwgdGFyZ2V0X2luc24gXFx1MDAzZSBjdHgtXFx1MDAzZXByb2ctXFx1MDAzZWxlbilcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0I2RlZmluZSBFTUlUX0pNUDMyKG9wX2Jhc2UpIFxcXFxcXG4rXFx0XFx0ZG8geyBcXFxcXFxuK1xcdFxcdFxcdGludCBkaXNwID0gKGN0eC1cXHUwMDNlb2Zmc2V0c1t0YXJnZXRfaW5zbl0gLSAoY3R4LVxcdTAwM2VpZHggKyAxKSkgKiAyOyBcXFxcXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAob3BfYmFzZSkgfCAweDAwZmYpOyBcXFxcXFxuK1xcdFxcdFxcdGVtaXRfMzIoY3R4LCBkaXNwKTsgXFxcXFxcbitcXHRcXHR9IHdoaWxlICgwKVxcbitcXG4rXFx0aWYgKG9wID09IEJQRl9KQSkge1xcbitcXHRcXHRFTUlUX0pNUDMyKDB4NjAwMCk7XFx0XFx0XFx0XFx0LyogYnJhLmwgKi9cXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcXG4rXFx0aWYgKCFpc19qbXAzMilcXG4rXFx0XFx0ZF9oaSA9IGJwZl9nZXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpO1xcbitcXG4rXFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1gpIHtcXG4rXFx0XFx0c19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpO1xcbitcXHRcXHRpZiAoIWlzX2ptcDMyKVxcbitcXHRcXHRcXHRzX2hpID0gYnBmX2dldF9yZWczMihzcmNbMF0sIHRtcDJbMF0sIGN0eCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHNfbG8gPSB0bXAyWzFdO1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHNfbG8gXFx1MDAzY1xcdTAwM2MgOSkpO1xcdFxcdC8qIG1vdmUubCAjaW1tLCBzX2xvICovXFxuK1xcdFxcdGVtaXRfMzIoY3R4LCBpbnNuLVxcdTAwM2VpbW0pO1xcbitcXHRcXHRpZiAoIWlzX2ptcDMyKSB7XFxuK1xcdFxcdFxcdHNfaGkgPSB0bXAyWzBdO1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHNfaGkgXFx1MDAzY1xcdTAwM2MgOSkpO1xcdC8qIG1vdmUubCAjaW1tLCBzX2hpICovXFxuK1xcdFxcdFxcdGVtaXRfMzIoY3R4LCBpbnNuLVxcdTAwM2VpbW0gXFx1MDAzYyAwID8gMHhmZmZmZmZmZiA6IDApO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChvcCA9PSBCUEZfSlNFVCkge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKHRtcDFbMV0gXFx1MDAzY1xcdTAwM2MgOSkgfCBkX2xvKTtcXHQvKiBtb3ZlLmwgZF9sbywgdG1wMV9sbyAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHhjMDgwIHwgKHRtcDFbMV0gXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2xvKTtcXHQvKiBhbmQubCBzX2xvLCB0bXAxX2xvICovXFxuK1xcbitcXHRcXHRpZiAoIWlzX2ptcDMyKSB7XFxuK1xcdFxcdFxcdEVNSVRfSk1QMzIoMHg2NjAwKTtcXHRcXHRcXHQvKiBibmUubCAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKHRtcDFbMF0gXFx1MDAzY1xcdTAwM2MgOSkgfCBkX2hpKTsgLyogbW92ZS5sIGRfaGksIHRtcDFfaGkgKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4YzA4MCB8ICh0bXAxWzBdIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19oaSk7IC8qIGFuZC5sIHNfaGksIHRtcDFfaGkgKi9cXG4rXFx0XFx0fVxcbitcXHRcXHRFTUlUX0pNUDMyKDB4NjYwMCk7XFx0XFx0XFx0XFx0LyogYm5lLmwgKi9cXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChpc19qbXAzMikge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2xvKTtcXHQvKiBjbXAubCBzX2xvLCBkX2xvICovXFxuK1xcdFxcdHN3aXRjaCAob3ApIHtcXG4rXFx0XFx0Y2FzZSBCUEZfSkVROlxcbitcXHRcXHRcXHRFTUlUX0pNUDMyKDB4NjcwMCk7XFx0XFx0XFx0LyogYmVxLmwgKi9cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgQlBGX0pORTpcXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDY2MDApO1xcdFxcdFxcdC8qIGJuZS5sICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEJQRl9KR1Q6XFxuK1xcdFxcdFxcdEVNSVRfSk1QMzIoMHg2MjAwKTtcXHRcXHRcXHQvKiBiaGkubCAqL1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBCUEZfSkdFOlxcbitcXHRcXHRcXHRFTUlUX0pNUDMyKDB4NjQwMCk7XFx0XFx0XFx0LyogYmNjLmwgKi9cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgQlBGX0pMVDpcXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDY1MDApO1xcdFxcdFxcdC8qIGJjcy5sICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEJQRl9KTEU6XFxuK1xcdFxcdFxcdEVNSVRfSk1QMzIoMHg2MzAwKTtcXHRcXHRcXHQvKiBibHMubCAqL1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBCUEZfSlNHVDpcXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDZlMDApO1xcdFxcdFxcdC8qIGJndC5sICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEJQRl9KU0dFOlxcbitcXHRcXHRcXHRFTUlUX0pNUDMyKDB4NmMwMCk7XFx0XFx0XFx0LyogYmdlLmwgKi9cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgQlBGX0pTTFQ6XFxuK1xcdFxcdFxcdEVNSVRfSk1QMzIoMHg2ZDAwKTtcXHRcXHRcXHQvKiBibHQubCAqL1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBCUEZfSlNMRTpcXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDZmMDApO1xcdFxcdFxcdC8qIGJsZS5sICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9oaSBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfaGkpO1xcdC8qIGNtcC5sIHNfaGksIGRfaGkgKi9cXG4rXFxuK1xcdFxcdHN3aXRjaCAob3ApIHtcXG4rXFx0XFx0Y2FzZSBCUEZfSkVROlxcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHg2NjA4KTtcXHRcXHRcXHQvKiBibmUucyAuKzggKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi9cXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDY3MDApO1xcdFxcdFxcdC8qIGJlcS5sICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEJQRl9KTkU6XFxuK1xcdFxcdFxcdEVNSVRfSk1QMzIoMHg2NjAwKTtcXHRcXHRcXHQvKiBibmUubCAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xcbitcXHRcXHRcXHRFTUlUX0pNUDMyKDB4NjYwMCk7XFx0XFx0XFx0LyogYm5lLmwgKi9cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgQlBGX0pHVDpcXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDYyMDApO1xcdFxcdFxcdC8qIGJoaS5sICovXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDY1MDgpO1xcdFxcdFxcdC8qIGJjcy5zIC4rOCAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xcbitcXHRcXHRcXHRFTUlUX0pNUDMyKDB4NjIwMCk7XFx0XFx0XFx0LyogYmhpLmwgKi9cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgQlBGX0pHRTpcXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDYyMDApO1xcdFxcdFxcdC8qIGJoaS5sICovXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDY1MDgpO1xcdFxcdFxcdC8qIGJjcy5zIC4rOCAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xcbitcXHRcXHRcXHRFTUlUX0pNUDMyKDB4NjQwMCk7XFx0XFx0XFx0LyogYmNjLmwgKi9cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgQlBGX0pMVDpcXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDY1MDApO1xcdFxcdFxcdC8qIGJjcy5sICovXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDYyMDgpO1xcdFxcdFxcdC8qIGJoaS5zIC4rOCAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xcbitcXHRcXHRcXHRFTUlUX0pNUDMyKDB4NjUwMCk7XFx0XFx0XFx0LyogYmNzLmwgKi9cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgQlBGX0pMRTpcXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDY1MDApO1xcdFxcdFxcdC8qIGJjcy5sICovXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDYyMDgpO1xcdFxcdFxcdC8qIGJoaS5zIC4rOCAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xcbitcXHRcXHRcXHRFTUlUX0pNUDMyKDB4NjMwMCk7XFx0XFx0XFx0LyogYmxzLmwgKi9cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgQlBGX0pTR1Q6XFxuK1xcdFxcdFxcdEVNSVRfSk1QMzIoMHg2ZTAwKTtcXHRcXHRcXHQvKiBiZ3QubCAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHg2ZDA4KTtcXHRcXHRcXHQvKiBibHQucyAuKzggKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi9cXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDYyMDApO1xcdFxcdFxcdC8qIGJoaS5sICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEJQRl9KU0dFOlxcbitcXHRcXHRcXHRFTUlUX0pNUDMyKDB4NmUwMCk7XFx0XFx0XFx0LyogYmd0LmwgKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NmQwOCk7XFx0XFx0XFx0LyogYmx0LnMgLis4ICovXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfbG8pOyAvKiBjbXAubCBzX2xvLCBkX2xvICovXFxuK1xcdFxcdFxcdEVNSVRfSk1QMzIoMHg2NDAwKTtcXHRcXHRcXHQvKiBiY2MubCAqL1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBCUEZfSlNMVDpcXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDZkMDApO1xcdFxcdFxcdC8qIGJsdC5sICovXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDZlMDgpO1xcdFxcdFxcdC8qIGJndC5zIC4rOCAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xcbitcXHRcXHRcXHRFTUlUX0pNUDMyKDB4NjUwMCk7XFx0XFx0XFx0LyogYmNzLmwgKi9cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgQlBGX0pTTEU6XFxuK1xcdFxcdFxcdEVNSVRfSk1QMzIoMHg2ZDAwKTtcXHRcXHRcXHQvKiBibHQubCAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHg2ZTA4KTtcXHRcXHRcXHQvKiBiZ3QucyAuKzggKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi9cXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDYzMDApO1xcdFxcdFxcdC8qIGJscy5sICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0I3VuZGVmIEVNSVRfSk1QMzJcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW1pdF9jYWxsKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG4re1xcbitcXHRjb25zdCBzOCBhcmdfcmVnc1tdID0geyBCUEZfUkVHXzUsIEJQRl9SRUdfNCwgQlBGX1JFR18zLCBCUEZfUkVHXzIsIEJQRl9SRUdfMSB9O1xcbitcXHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XFxuK1xcdGJvb2wgZXh0cmFfcGFzcyA9IGN0eC1cXHUwMDNlcHJvZy1cXHUwMDNlaml0ZWQ7XFxuK1xcdHU2NCBmdW5jX2FkZHI7XFxuK1xcdGJvb2wgZml4ZWQ7XFxuK1xcdGludCBpLCBlcnI7XFxuK1xcbitcXHRlcnIgPSBicGZfaml0X2dldF9mdW5jX2FkZHIoY3R4LVxcdTAwM2Vwcm9nLCBpbnNuLCBleHRyYV9wYXNzLCBcXHUwMDI2ZnVuY19hZGRyLCBcXHUwMDI2Zml4ZWQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDU7IGkrKykge1xcbitcXHRcXHRjb25zdCBzOCAqcmVnID0gYnBmMm02OGtbYXJnX3JlZ3NbaV1dO1xcbitcXHRcXHRzOCBkX2xvID0gYnBmX2dldF9yZWczMihyZWdbMV0sIHRtcDFbMV0sIGN0eCk7XFxuK1xcdFxcdHM4IGRfaGkgPSBicGZfZ2V0X3JlZzMyKHJlZ1swXSwgdG1wMVswXSwgY3R4KTtcXG4rXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBkX2xvKTtcXHRcXHRcXHQvKiBtb3ZlLmwgZF9sbywgLSglc3ApICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBkX2hpKTtcXHRcXHRcXHQvKiBtb3ZlLmwgZF9oaSwgLSglc3ApICovXFxuK1xcdH1cXG4rXFxuK1xcdGVtaXRfMTYoY3R4LCAweDIwN2MpO1xcdFxcdFxcdFxcdFxcdC8qIG1vdmVhLmwgI2Z1bmNfYWRkciwgJWEwICovXFxuK1xcdGVtaXRfMzIoY3R4LCAodTMyKWZ1bmNfYWRkcik7XFxuK1xcbitcXHRlbWl0XzE2KGN0eCwgMHg0ZTkwKTtcXHRcXHRcXHRcXHRcXHQvKiBqc3IgKCVhMCkgKi9cXG4rXFxuK1xcdGVtaXRfMTYoY3R4LCAweDRmZWYpO1xcdFxcdFxcdFxcdFxcdC8qIGxlYSA0MCglc3ApLCAlc3AgKi9cXG4rXFx0ZW1pdF8xNihjdHgsIDQwKTtcXG4rXFxuK1xcdGlmIChpbnNuLVxcdTAwM2VzcmNfcmVnICE9IEJQRl9QU0VVRE9fQ0FMTClcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4YzM0MCk7XFx0XFx0XFx0XFx0XFx0LyogZXhnICVkMCwgJWQxICovXFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYnVpbGRfcHJvbG9ndWUoc3RydWN0IGppdF9jdHggKmN0eClcXG4re1xcbitcXHRpbnQgYnBmX3N0YWNrID0gTUFYX0JQRl9TVEFDSztcXG4rXFx0aW50IHRvdGFsX3N0YWNrID0gU0NSQVRDSF9TSVpFICsgYnBmX3N0YWNrO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGVtaXRfMTYoY3R4LCAweDcwMjEpO1xcdFxcdFxcdFxcdFxcdC8qIG1vdmVxICMzMywgJWQwICovXFxuK1xcbitcXHRlbWl0XzE2KGN0eCwgMHg0ZTU2KTtcXHRcXHRcXHRcXHRcXHQvKiBsaW5rICVhNiwgIy10b3RhbF9zdGFjayAqL1xcbitcXHRlbWl0XzE2KGN0eCwgLXRvdGFsX3N0YWNrKTtcXG4rXFxuK1xcdGVtaXRfMTYoY3R4LCAweDQ4ZTcpO1xcdFxcdFxcdFxcdFxcdC8qIG1vdmVtLmwgZDItZDUsIC0oJXNwKSAqL1xcbitcXHRlbWl0XzE2KGN0eCwgMHgzYzAwKTtcXG4rXFxuK1xcdGVtaXRfMTYoY3R4LCAweDJkNDApO1xcdFxcdFxcdFxcdFxcdC8qIG1vdmUubCAlZDAsIG9mZiglZnApICovXFxuK1xcdGVtaXRfMTYoY3R4LCAodTE2KVNUQUNLX09GRlNFVChCUEZfVENfTE8pKTtcXG4rXFxuK1xcdGlmIChjdHgtXFx1MDAzZXByb2ctXFx1MDAzZWlzX2Z1bmMpIHtcXG4rXFx0XFx0Y29uc3QgczggYXJnX3JlZ3NbXSA9IHsgQlBGX1JFR18xLCBCUEZfUkVHXzIsIEJQRl9SRUdfMywgQlBGX1JFR180LCBCUEZfUkVHXzUgfTtcXG4rXFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA1OyBpKyspIHtcXG4rXFx0XFx0XFx0aW50IG9mZnNldCA9IDggKyBpICogODtcXG4rXFx0XFx0XFx0Y29uc3QgczggKnJlZyA9IGJwZjJtNjhrW2FyZ19yZWdzW2ldXTtcXG4rXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDIwMmUpOyAvKiBtb3ZlLmwgb2Zmc2V0KCVmcCksICVkMCAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgb2Zmc2V0KTtcXG4rXFx0XFx0XFx0YnBmX3B1dF9yZWczMihyZWdbMF0sIE02OEtfRDAsIGN0eCk7XFxuK1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDJlKTsgLyogbW92ZS5sIG9mZnNldCs0KCVmcCksICVkMCAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgb2Zmc2V0ICsgNCk7XFxuK1xcdFxcdFxcdGJwZl9wdXRfcmVnMzIocmVnWzFdLCBNNjhLX0QwLCBjdHgpO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDIwMmUpO1xcdFxcdFxcdFxcdC8qIG1vdmUubCA4KCVmcCksICVkMCAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgOCk7XFxuK1xcdFxcdGJwZl9wdXRfcmVnMzIoYnBmMm02OGtbQlBGX1JFR18xXVsxXSwgTTY4S19EMCwgY3R4KTtcXG4rXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDcwMDAgfCAoTTY4S19EMCBcXHUwMDNjXFx1MDAzYyA5KSk7XFx0XFx0XFx0LyogbW92ZXEgIzAsICVkMCAqL1xcbitcXHRcXHRicGZfcHV0X3JlZzMyKGJwZjJtNjhrW0JQRl9SRUdfMV1bMF0sIE02OEtfRDAsIGN0eCk7XFxuK1xcdH1cXG4rXFxuK1xcdGVtaXRfMTYoY3R4LCAweDQxZWUpO1xcdFxcdFxcdFxcdFxcdC8qIGxlYSAtU0NSQVRDSF9TSVpFKCVmcCksICVhMCAqL1xcbitcXHRlbWl0XzE2KGN0eCwgLVNDUkFUQ0hfU0laRSk7XFxuK1xcdGVtaXRfMTYoY3R4LCAweDIwMDgpO1xcdFxcdFxcdFxcdFxcdC8qIG1vdmUubCAlYTAsICVkMCAqL1xcbitcXG4rXFx0YnBmX3B1dF9yZWczMihicGYybTY4a1tCUEZfUkVHXzEwXVsxXSwgTTY4S19EMCwgY3R4KTtcXG4rXFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChNNjhLX0QwIFxcdTAwM2NcXHUwMDNjIDkpKTtcXHRcXHRcXHQvKiBtb3ZlcSAjMCwgJWQwICovXFxuK1xcdGJwZl9wdXRfcmVnMzIoYnBmMm02OGtbQlBGX1JFR18xMF1bMF0sIE02OEtfRDAsIGN0eCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuK3tcXG4rXFx0ZW1pdF8xNihjdHgsIDB4NGNkZik7XFx0XFx0XFx0XFx0XFx0LyogbW92ZW0ubCAoJXNwKSssIGQyLWQ1ICovXFxuK1xcdGVtaXRfMTYoY3R4LCAweDAwM2MpO1xcbitcXG4rXFx0ZW1pdF8xNihjdHgsIDB4NGU1ZSk7XFx0XFx0XFx0XFx0XFx0LyogdW5sayAlZnAgKi9cXG4rXFx0ZW1pdF8xNihjdHgsIDB4NGU3NSk7XFx0XFx0XFx0XFx0XFx0LyogcnRzICovXFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBpKVxcbit7XFxuK1xcdHU4IGNvZGUgPSBpbnNuLVxcdTAwM2Vjb2RlO1xcbitcXG4rXFx0c3dpdGNoIChjb2RlKSB7XFxuK1xcdGNhc2UgQlBGX0FMVSB8IEJQRl9ORUc6XFxuK1xcdFxcdGVtaXRfYWx1MzJfbmVnKGluc24sIGN0eCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9ORUc6XFxuK1xcdFxcdGVtaXRfYWx1NjRfbmVnKGluc24sIGN0eCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSBCUEZfQUxVIHwgQlBGX01PViB8IEJQRl9YOlxcbitcXHRjYXNlIEJQRl9BTFUgfCBCUEZfQUREIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0FMVSB8IEJQRl9TVUIgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfQUxVIHwgQlBGX0FORCB8IEJQRl9YOlxcbitcXHRjYXNlIEJQRl9BTFUgfCBCUEZfT1IgIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0FMVSB8IEJQRl9YT1IgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfQUxVIHwgQlBGX0xTSCB8IEJQRl9YOlxcbitcXHRjYXNlIEJQRl9BTFUgfCBCUEZfUlNIIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0FMVSB8IEJQRl9BUlNIIHwgQlBGX1g6XFxuK1xcdFxcdGVtaXRfYWx1MzJfeChpbnNuLCBjdHgpO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgQlBGX0FMVSB8IEJQRl9NT1YgfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfQUxVIHwgQlBGX0FERCB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9BTFUgfCBCUEZfU1VCIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0FMVSB8IEJQRl9BTkQgfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfQUxVIHwgQlBGX09SICB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9BTFUgfCBCUEZfWE9SIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0FMVSB8IEJQRl9MU0ggfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfQUxVIHwgQlBGX1JTSCB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9BTFUgfCBCUEZfQVJTSCB8IEJQRl9LOlxcbitcXHRcXHRlbWl0X2FsdTMyX2soaW5zbiwgY3R4KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfQUREIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX1NVQiB8IEJQRl9YOlxcbitcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9BTkQgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfT1IgIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX1hPUiB8IEJQRl9YOlxcbitcXHRcXHRlbWl0X2FsdTY0X3goaW5zbiwgY3R4KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfQUREIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX1NVQiB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9BTkQgfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfT1IgIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX1hPUiB8IEJQRl9LOlxcbitcXHRcXHRlbWl0X2FsdTY0X2soaW5zbiwgY3R4KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9MU0ggfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfUlNIIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0FSU0ggfCBCUEZfWDpcXG4rXFx0XFx0ZW1pdF9hbHU2NF9zaGlmdChpbnNuLCBjdHgsIGZhbHNlKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9MU0ggfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfUlNIIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0FSU0ggfCBCUEZfSzpcXG4rXFx0XFx0ZW1pdF9hbHU2NF9zaGlmdChpbnNuLCBjdHgsIHRydWUpO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgQlBGX0FMVSB8IEJQRl9NVUwgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfQUxVIHwgQlBGX0RJViB8IEJQRl9YOlxcbitcXHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9EIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0FMVSB8IEJQRl9NVUwgfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfQUxVIHwgQlBGX0RJViB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9EIHwgQlBGX0s6XFxuK1xcdFxcdGVtaXRfbWF0aF9jYWxsKGluc24sIGN0eCwgZmFsc2UpO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX01VTCB8IEJQRl9YOlxcbitcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9ESVYgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9EIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX01VTCB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9ESVYgfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9EIHwgQlBGX0s6XFxuK1xcdFxcdGVtaXRfbWF0aF9jYWxsKGluc24sIGN0eCwgdHJ1ZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSBCUEZfQUxVIHwgQlBGX0VORCB8IEJQRl9UT19CRTpcXG4rXFx0Y2FzZSBCUEZfQUxVIHwgQlBGX0VORCB8IEJQRl9UT19MRTpcXG4rXFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfRU5EIHwgQlBGX1RPX0JFOlxcbitcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9FTkQgfCBCUEZfVE9fTEU6XFxuK1xcdFxcdGVtaXRfYnBmX2VuZChpbnNuLCBjdHgpO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVzoge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24xID0gaW5zbiArIDE7XFxuK1xcdFxcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVxcdTAwM2Vkc3RfcmVnXTtcXG4rXFx0XFx0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xcbitcXHRcXHRzOCBkX2xvID0gYnBmX2dldF9yZWczMihkc3RbMV0sIHRtcDFbMV0sIGN0eCk7XFxuK1xcdFxcdHM4IGRfaGkgPSBicGZfZ2V0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcXG4rXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAoZF9sbyBcXHUwMDNjXFx1MDAzYyA5KSk7XFx0XFx0XFx0LyogbW92ZS5sICNpbW0sIGRfbG8gKi9cXG4rXFx0XFx0ZW1pdF8zMihjdHgsIGluc24tXFx1MDAzZWltbSk7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAoZF9oaSBcXHUwMDNjXFx1MDAzYyA5KSk7XFx0XFx0XFx0LyogbW92ZS5sICNpbW0sIGRfaGkgKi9cXG4rXFx0XFx0ZW1pdF8zMihjdHgsIGluc24xLVxcdTAwM2VpbW0pO1xcbitcXG4rXFx0XFx0YnBmX3B1dF9yZWczMihkc3RbMV0sIGRfbG8sIGN0eCk7XFxuK1xcdFxcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9COlxcbitcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0g6XFxuK1xcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfVzpcXG4rXFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9EVzpcXG4rXFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX0I6XFxuK1xcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9IOlxcbitcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfVzpcXG4rXFx0XFx0ZW1pdF9sZHgoaW5zbiwgY3R4KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX0I6XFxuK1xcdGNhc2UgQlBGX1NUWCB8IEJQRl9NRU0gfCBCUEZfSDpcXG4rXFx0Y2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9XOlxcbitcXHRjYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX0RXOlxcbitcXHRcXHRlbWl0X3N0eChpbnNuLCBjdHgpO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9COlxcbitcXHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfSDpcXG4rXFx0Y2FzZSBCUEZfU1QgfCBCUEZfTUVNIHwgQlBGX1c6XFxuK1xcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9EVzpcXG4rXFx0XFx0ZW1pdF9zdChpbnNuLCBjdHgpO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVzpcXG4rXFx0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9EVzpcXG4rXFx0XFx0ZW1pdF9hdG9taWMoaW5zbiwgY3R4KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIEJQRl9KTVAgfCBCUEZfVEFJTF9DQUxMOlxcbitcXHRcXHRlbWl0X3RhaWxfY2FsbChpbnNuLCBjdHgpO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KQTpcXG4rXFx0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSkE6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KRVEgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfSk1QIHwgQlBGX0pFUSB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9KTVAgfCBCUEZfSk5FIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KTkUgfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfSk1QIHwgQlBGX0pHVCB8IEJQRl9YOlxcbitcXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkdUIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KR0UgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfSk1QIHwgQlBGX0pHRSB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkxUIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KTFQgfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfSk1QIHwgQlBGX0pMRSB8IEJQRl9YOlxcbitcXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkxFIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0dUIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0dUIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0dFIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0dFIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0xUIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0xUIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0xFIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0xFIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0VUIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0VUIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pFUSB8IEJQRl9YOlxcbitcXHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KRVEgfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSk5FIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pORSB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KR1QgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSkdUIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pHRSB8IEJQRl9YOlxcbitcXHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KR0UgfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSkxUIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pMVCB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KTEUgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSkxFIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pTR1QgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNHVCB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KU0dFIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pTR0UgfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNMVCB8IEJQRl9YOlxcbitcXHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KU0xUIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pTTEUgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNMRSB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KU0VUIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pTRVQgfCBCUEZfSzpcXG4rXFx0XFx0cmV0dXJuIGVtaXRfam1wKGluc24sIGN0eCwgaSk7XFxuK1xcbitcXHRjYXNlIEJQRl9KTVAgfCBCUEZfQ0FMTDpcXG4rXFx0XFx0cmV0dXJuIGVtaXRfY2FsbChpbnNuLCBjdHgpO1xcbitcXG4rXFx0Y2FzZSBCUEZfSk1QIHwgQlBGX0VYSVQ6XFxuK1xcdFxcdGJ1aWxkX2VwaWxvZ3VlKGN0eCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBidWlsZF9ib2R5KHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nID0gY3R4LVxcdTAwM2Vwcm9nO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwcm9nLVxcdTAwM2VsZW47IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBcXHUwMDI2cHJvZy1cXHUwMDNlaW5zbnNpW2ldO1xcbitcXHRcXHRpbnQgcmV0O1xcbitcXG4rXFx0XFx0aWYgKCFjdHgtXFx1MDAzZXRhcmdldClcXG4rXFx0XFx0XFx0Y3R4LVxcdTAwM2VvZmZzZXRzW2ldID0gY3R4LVxcdTAwM2VpZHg7XFxuK1xcbitcXHRcXHRyZXQgPSBidWlsZF9pbnNuKGluc24sIGN0eCwgaSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0aWYgKGluc24tXFx1MDAzZWNvZGUgPT0gKEJQRl9MRCB8IEJQRl9JTU0gfCBCUEZfRFcpKSB7XFxuK1xcdFxcdFxcdGkrKztcXG4rXFx0XFx0XFx0aWYgKCFjdHgtXFx1MDAzZXRhcmdldClcXG4rXFx0XFx0XFx0XFx0Y3R4LVxcdTAwM2VvZmZzZXRzW2ldID0gY3R4LVxcdTAwM2VpZHg7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFjdHgtXFx1MDAzZXRhcmdldClcXG4rXFx0XFx0Y3R4LVxcdTAwM2VvZmZzZXRzW3Byb2ctXFx1MDAzZWxlbl0gPSBjdHgtXFx1MDAzZWlkeDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitib29sIGJwZl9qaXRfbmVlZHNfemV4dCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBqaXRfZmlsbF9ob2xlKHZvaWQgKmFyZWEsIHVuc2lnbmVkIGludCBzaXplKVxcbit7XFxuK1xcdHUxNiAqcHRyO1xcbitcXG4rXFx0Zm9yIChwdHIgPSBhcmVhOyBzaXplIFxcdTAwM2U9IDI7IHNpemUgLT0gMilcXG4rXFx0XFx0KnB0cisrID0gMHg0YWZjO1xcbit9XFxuK1xcbitzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqaGVhZGVyO1xcbitcXHRzdHJ1Y3Qgaml0X2N0eCBjdHg7XFxuK1xcdHVuc2lnbmVkIGludCBpbWFnZV9zaXplO1xcbitcXHR1OCAqaW1hZ2VfcHRyO1xcbitcXHRib29sIGV4dHJhX3Bhc3MgPSBwcm9nLVxcdTAwM2VqaXRlZDtcXG4rXFxuK1xcdGlmICghcHJvZy1cXHUwMDNlaml0X3JlcXVlc3RlZClcXG4rXFx0XFx0cmV0dXJuIHByb2c7XFxuK1xcbitcXHRpZiAocHJvZy1cXHUwMDNlaml0ZWQgXFx1MDAyNlxcdTAwMjYgIXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlZnVuYylcXG4rXFx0XFx0cmV0dXJuIHByb2c7XFxuK1xcbitcXHRtZW1zZXQoXFx1MDAyNmN0eCwgMCwgc2l6ZW9mKGN0eCkpO1xcbitcXHRjdHgucHJvZyA9IHByb2c7XFxuK1xcbitcXHRjdHgub2Zmc2V0cyA9IGt2Y2FsbG9jKHByb2ctXFx1MDAzZWxlbiArIDEsIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFjdHgub2Zmc2V0cylcXG4rXFx0XFx0cmV0dXJuIHByb2c7XFxuK1xcbitcXHRidWlsZF9wcm9sb2d1ZShcXHUwMDI2Y3R4KTtcXG4rXFx0aWYgKGJ1aWxkX2JvZHkoXFx1MDAyNmN0eCkgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIG91dF9vZmY7XFxuK1xcdGJ1aWxkX2VwaWxvZ3VlKFxcdTAwMjZjdHgpO1xcbitcXG4rXFx0aWYgKGV4dHJhX3Bhc3MpIHtcXG4rXFx0XFx0aGVhZGVyID0gcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VqaXRfZGF0YTtcXG4rXFx0XFx0aW1hZ2VfcHRyID0gKHU4ICopcHJvZy1cXHUwMDNlYnBmX2Z1bmM7XFxuK1xcdFxcdGltYWdlX3NpemUgPSBwcm9nLVxcdTAwM2VqaXRlZF9sZW47XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGltYWdlX3NpemUgPSBjdHguaWR4ICogMjtcXG4rXFx0XFx0aGVhZGVyID0gYnBmX2ppdF9iaW5hcnlfYWxsb2MoaW1hZ2Vfc2l6ZSwgXFx1MDAyNmltYWdlX3B0ciwgMiwgaml0X2ZpbGxfaG9sZSk7XFxuK1xcdFxcdGlmICghaGVhZGVyKVxcbitcXHRcXHRcXHRnb3RvIG91dF9vZmY7XFxuK1xcdFxcdHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlaml0X2RhdGEgPSBoZWFkZXI7XFxuK1xcdH1cXG4rXFxuK1xcdGN0eC50YXJnZXQgPSAodTE2ICopaW1hZ2VfcHRyO1xcbitcXHRjdHguaWR4ID0gMDtcXG4rXFxuK1xcdGJ1aWxkX3Byb2xvZ3VlKFxcdTAwMjZjdHgpO1xcbitcXHRpZiAoYnVpbGRfYm9keShcXHUwMDI2Y3R4KSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0YnBmX2ppdF9iaW5hcnlfZnJlZShoZWFkZXIpO1xcbitcXHRcXHRwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWppdF9kYXRhID0gTlVMTDtcXG4rXFx0XFx0cHJvZy1cXHUwMDNlYnBmX2Z1bmMgPSBOVUxMO1xcbitcXHRcXHRwcm9nLVxcdTAwM2VqaXRlZCA9IDA7XFxuK1xcdFxcdHByb2ctXFx1MDAzZWppdGVkX2xlbiA9IDA7XFxuK1xcdFxcdGdvdG8gb3V0X29mZjtcXG4rXFx0fVxcbitcXHRidWlsZF9lcGlsb2d1ZShcXHUwMDI2Y3R4KTtcXG4rXFxuK1xcdGZsdXNoX2ljYWNoZV9yYW5nZSgodTMyKWhlYWRlciwgKHUzMikoY3R4LnRhcmdldCArIGN0eC5pZHgpKTtcXG4rXFxuK1xcdGlmIChicGZfaml0X2VuYWJsZSBcXHUwMDNlIDEpXFxuK1xcdFxcdGJwZl9qaXRfZHVtcChwcm9nLVxcdTAwM2VsZW4sIGltYWdlX3NpemUsIDIsIGN0eC50YXJnZXQpO1xcbitcXG4rXFx0aWYgKCghcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VmdW5jIHx8IGV4dHJhX3Bhc3MpIFxcdTAwMjZcXHUwMDI2IGJwZl9qaXRfYmluYXJ5X2xvY2tfcm8oaGVhZGVyKSkge1xcbitcXHRcXHRicGZfaml0X2JpbmFyeV9mcmVlKGhlYWRlcik7XFxuK1xcdFxcdHByb2ctXFx1MDAzZWJwZl9mdW5jID0gTlVMTDtcXG4rXFx0XFx0cHJvZy1cXHUwMDNlaml0ZWQgPSAwO1xcbitcXHRcXHRwcm9nLVxcdTAwM2VqaXRlZF9sZW4gPSAwO1xcbitcXHRcXHRwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWppdF9kYXRhID0gTlVMTDtcXG4rXFx0XFx0Z290byBvdXRfb2ZmO1xcbitcXHR9XFxuK1xcbitcXHRwcm9nLVxcdTAwM2VicGZfZnVuYyA9ICh2b2lkICopY3R4LnRhcmdldDtcXG4rXFx0cHJvZy1cXHUwMDNlaml0ZWQgPSAxO1xcbitcXHRwcm9nLVxcdTAwM2VqaXRlZF9sZW4gPSBpbWFnZV9zaXplO1xcbitcXG4rb3V0X29mZjpcXG4rXFx0a3ZmcmVlKGN0eC5vZmZzZXRzKTtcXG4rXFx0cmV0dXJuIHByb2c7XFxuK31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDQ6NTA6MDguMTM0ODE0OTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNzUxMDAwMjA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICAgIFwiYnBmX2ppdF9uZWVkc196ZXh0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYgSklUIGNvbXBpbGVyIGZvciB0aGUgbTY4ayBhcmNoaXRlY3R1cmUuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgQlBGIHByb2dyYW0gbG9hZGluZyB3aGVuIEpJVCBpcyBlbmFibGVkLCBhbmQgY2FuIGJlIHRlc3RlZCBpbiBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYzcwY2I2ZDM4Nzc3ZDVmNTE4ZjUyZjgzNDExZTRlYWJkZjRkN2QwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMDQ6NTA6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCAyZmIxYzc1YWZkMTYzLi41MzA1NTE4MzRjMTYzIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtNDcwMSw2ICs0NzAxLDEyIEBAIEw6XHRicGZAdmdlci5rZXJuZWwub3JnXG4gUzpcdE1haW50YWluZWRcbiBGOlx0YXJjaC9sb29uZ2FyY2gvbmV0L1xuIFxuK0JQRiBKSVQgZm9yIE02OEtcbitNOlx0S3Vhbi1XZWkgQ2hpdSBcdTAwM2N2aXNpdG9yY2t3QGdtYWlsLmNvbVx1MDAzZVxuK0w6XHRicGZAdmdlci5rZXJuZWwub3JnXG4rUzpcdE1haW50YWluZWRcbitGOlx0YXJjaC9tNjhrL25ldC9cbitcbiBCUEYgSklUIGZvciBNSVBTICgzMi1CSVQgQU5EIDY0LUJJVClcbiBNOlx0Sm9oYW4gQWxtYmxhZGggXHUwMDNjam9oYW4uYWxtYmxhZGhAYW55ZmluZXR3b3Jrcy5jb21cdTAwM2VcbiBNOlx0UGF1bCBCdXJ0b24gXHUwMDNjcGF1bGJ1cnRvbkBrZXJuZWwub3JnXHUwMDNlXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tidWlsZCBiL2FyY2gvbTY4ay9LYnVpbGRcbmluZGV4IDc3NjJhZjlmNmRlZmUuLjA1OGFkNDFhNzI4YzUgMTAwNjQ0XG4tLS0gYS9hcmNoL202OGsvS2J1aWxkXG4rKysgYi9hcmNoL202OGsvS2J1aWxkXG5AQCAtMSw1ICsxLDUgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbi1vYmoteVx0XHRcdFx0Kz0ga2VybmVsLyBtbS9cbitvYmoteVx0XHRcdFx0Kz0ga2VybmVsLyBtbS8gbmV0L1xuIG9iai0kKENPTkZJR19RNDApXHRcdCs9IHE0MC9cbiBvYmotJChDT05GSUdfQU1JR0EpXHRcdCs9IGFtaWdhL1xuIG9iai0kKENPTkZJR19BVEFSSSlcdFx0Kz0gYXRhcmkvXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcgYi9hcmNoL202OGsvS2NvbmZpZ1xuaW5kZXggMTE4MzVlYjU5ZDk0ZC4uZGE0M2Q2NjYwYzVjZSAxMDA2NDRcbi0tLSBhL2FyY2gvbTY4ay9LY29uZmlnXG4rKysgYi9hcmNoL202OGsvS2NvbmZpZ1xuQEAgLTgsNiArOCw3IEBAIGNvbmZpZyBNNjhLXG4gXHRzZWxlY3QgQVJDSF9IQVNfQ1BVX0ZJTkFMSVpFX0lOSVQgaWYgTU1VXG4gXHRzZWxlY3QgQVJDSF9IQVNfQ1VSUkVOVF9TVEFDS19QT0lOVEVSXG4gXHRzZWxlY3QgQVJDSF9IQVNfRE1BX1BSRVBfQ09IRVJFTlQgaWYgTTY4S19OT05DT0hFUkVOVF9ETUEgXHUwMDI2XHUwMDI2ICFDT0xERklSRVxuK1x0c2VsZWN0IEhBVkVfRUJQRl9KSVQgaWYgKCFDT0xERklSRSBcdTAwMjZcdTAwMjYgIU02ODAwMClcbiBcdHNlbGVjdCBBUkNIX0hBU19TWU5DX0RNQV9GT1JfREVWSUNFIGlmIE02OEtfTk9OQ09IRVJFTlRfRE1BXG4gXHRzZWxlY3QgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEcgaWYgUk1XX0lOU05TXG4gXHRzZWxlY3QgQVJDSF9NSUdIVF9IQVZFX1BDX1BBUlBPUlQgaWYgSVNBXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL25ldC9NYWtlZmlsZSBiL2FyY2gvbTY4ay9uZXQvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lYzViMTQ3NjMzMTY3XG4tLS0gL2Rldi9udWxsXG4rKysgYi9hcmNoL202OGsvbmV0L01ha2VmaWxlXG5AQCAtMCwwICsxLDIgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbitvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX2ppdF9jb21wLm9cbmRpZmYgLS1naXQgYS9hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjZkNjQ3YmJhOTZlYjRcbi0tLSAvZGV2L251bGxcbisrKyBiL2FyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0wLDAgKzEsMTYzMCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIEJQRiBKSVQgY29tcGlsZXIgZm9yIG02OGtcbisgKlxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBLdWFuLVdlaSBDaGl1IFx1MDAzY3Zpc2l0b3Jja3dAZ21haWwuY29tXHUwMDNlXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9maWx0ZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycWZsYWdzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vY2FjaGVmbHVzaC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWF0aDY0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9saW1pdHMuaFx1MDAzZVxuK1xuKyNkZWZpbmUgU1RBQ0tfT0ZGU0VUKGspICgtNCAtICg0ICogKGspKSlcbitcbitlbnVtIHtcbitcdEJQRl9SMV9ISSwgQlBGX1IxX0xPLFxuK1x0QlBGX1IyX0hJLCBCUEZfUjJfTE8sXG4rXHRCUEZfUjNfSEksIEJQRl9SM19MTyxcbitcdEJQRl9SNF9ISSwgQlBGX1I0X0xPLFxuK1x0QlBGX1I1X0hJLCBCUEZfUjVfTE8sXG4rXHRCUEZfUjZfSEksIEJQRl9SNl9MTyxcbitcdEJQRl9SN19ISSwgQlBGX1I3X0xPLFxuK1x0QlBGX1I4X0hJLCBCUEZfUjhfTE8sXG4rXHRCUEZfUjlfSEksIEJQRl9SOV9MTyxcbitcdEJQRl9SMTBfSEksIEJQRl9SMTBfTE8sXG4rXHRCUEZfQVhfSEksIEJQRl9BWF9MTyxcbitcdEJQRl9UQ19ISSwgQlBGX1RDX0xPLFxuK1x0QlBGX0pJVF9TQ1JBVENIX1JFR1MsXG4rfTtcbitcbisjZGVmaW5lIFNDUkFUQ0hfU0laRSAoQlBGX0pJVF9TQ1JBVENIX1JFR1MgKiA0KVxuK1xuKyNkZWZpbmUgVE1QX1JFR18xIDE0XG4rI2RlZmluZSBUTVBfUkVHXzIgMTVcbitcbisjZGVmaW5lIE02OEtfRDAgMFxuKyNkZWZpbmUgTTY4S19EMSAxXG4rI2RlZmluZSBNNjhLX0QyIDJcbisjZGVmaW5lIE02OEtfRDMgM1xuKyNkZWZpbmUgTTY4S19ENCA0XG4rI2RlZmluZSBNNjhLX0Q1IDVcbitcbitzdGF0aWMgY29uc3QgczggYnBmMm02OGtbMTZdWzJdID0ge1xuK1x0W0JQRl9SRUdfMF0gID0ge002OEtfRDEsIE02OEtfRDB9LFxuK1x0W0JQRl9SRUdfMV0gID0ge1NUQUNLX09GRlNFVChCUEZfUjFfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SMV9MTyl9LFxuK1x0W0JQRl9SRUdfMl0gID0ge1NUQUNLX09GRlNFVChCUEZfUjJfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SMl9MTyl9LFxuK1x0W0JQRl9SRUdfM10gID0ge1NUQUNLX09GRlNFVChCUEZfUjNfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SM19MTyl9LFxuK1x0W0JQRl9SRUdfNF0gID0ge1NUQUNLX09GRlNFVChCUEZfUjRfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SNF9MTyl9LFxuK1x0W0JQRl9SRUdfNV0gID0ge1NUQUNLX09GRlNFVChCUEZfUjVfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SNV9MTyl9LFxuK1x0W0JQRl9SRUdfNl0gID0ge1NUQUNLX09GRlNFVChCUEZfUjZfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SNl9MTyl9LFxuK1x0W0JQRl9SRUdfN10gID0ge1NUQUNLX09GRlNFVChCUEZfUjdfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SN19MTyl9LFxuK1x0W0JQRl9SRUdfOF0gID0ge1NUQUNLX09GRlNFVChCUEZfUjhfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SOF9MTyl9LFxuK1x0W0JQRl9SRUdfOV0gID0ge1NUQUNLX09GRlNFVChCUEZfUjlfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SOV9MTyl9LFxuK1x0W0JQRl9SRUdfMTBdID0ge1NUQUNLX09GRlNFVChCUEZfUjEwX0hJKSwgU1RBQ0tfT0ZGU0VUKEJQRl9SMTBfTE8pfSxcbitcdFtCUEZfUkVHX0FYXSA9IHtTVEFDS19PRkZTRVQoQlBGX0FYX0hJKSwgIFNUQUNLX09GRlNFVChCUEZfQVhfTE8pfSxcbitcdFtUTVBfUkVHXzFdICA9IHtNNjhLX0QzLCBNNjhLX0QyfSxcbitcdFtUTVBfUkVHXzJdICA9IHtNNjhLX0Q1LCBNNjhLX0Q0fSxcbit9O1xuK1xuK3N0cnVjdCBqaXRfY3R4IHtcbitcdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbitcdHUxNiAqdGFyZ2V0O1xuK1x0dW5zaWduZWQgaW50IGlkeDtcbitcdGludCAqb2Zmc2V0cztcbit9O1xuK1xuK3N0YXRpYyBub2lubGluZSB1MzIgaml0X211bDMyKHUzMiBhLCB1MzIgYilcbit7XG4rXHRyZXR1cm4gYSAqIGI7XG4rfVxuK1xuK3N0YXRpYyBub2lubGluZSB1MzIgaml0X2RpdjMyKHUzMiBhLCB1MzIgYilcbit7XG4rXHRyZXR1cm4gYiA/IGEgLyBiIDogMDtcbit9XG4rXG4rc3RhdGljIG5vaW5saW5lIHUzMiBqaXRfbW9kMzIodTMyIGEsIHUzMiBiKVxuK3tcbitcdHJldHVybiBiID8gYSAlIGIgOiBhO1xuK31cbitcbitzdGF0aWMgbm9pbmxpbmUgczMyIGppdF9zZGl2MzIoczMyIGEsIHMzMiBiKVxuK3tcbitcdGlmIChiID09IDApXG4rXHRcdHJldHVybiAwO1xuK1x0aWYgKGEgPT0gUzMyX01JTiBcdTAwMjZcdTAwMjYgYiA9PSAtMSlcbitcdFx0cmV0dXJuIFMzMl9NSU47XG4rXHRyZXR1cm4gYSAvIGI7XG4rfVxuK1xuK3N0YXRpYyBub2lubGluZSBzMzIgaml0X3Ntb2QzMihzMzIgYSwgczMyIGIpXG4re1xuK1x0aWYgKGIgPT0gMClcbitcdFx0cmV0dXJuIGE7XG4rXHRpZiAoYSA9PSBTMzJfTUlOIFx1MDAyNlx1MDAyNiBiID09IC0xKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiBhICUgYjtcbit9XG4rXG4rc3RhdGljIG5vaW5saW5lIHU2NCBqaXRfbXVsNjQodTY0IGEsIHU2NCBiKVxuK3tcbitcdHJldHVybiBhICogYjtcbit9XG4rXG4rc3RhdGljIG5vaW5saW5lIHU2NCBqaXRfZGl2NjQodTY0IGEsIHU2NCBiKVxuK3tcbitcdHJldHVybiBiID8gZGl2NjRfdTY0KGEsIGIpIDogMDtcbit9XG4rXG4rc3RhdGljIG5vaW5saW5lIHM2NCBqaXRfc2RpdjY0KHM2NCBhLCBzNjQgYilcbit7XG4rXHRpZiAoYiA9PSAwKVxuK1x0XHRyZXR1cm4gMDtcbitcdGlmIChhID09IFM2NF9NSU4gXHUwMDI2XHUwMDI2IGIgPT0gLTEpXG4rXHRcdHJldHVybiBTNjRfTUlOO1xuK1x0cmV0dXJuIGRpdjY0X3M2NChhLCBiKTtcbit9XG4rXG4rc3RhdGljIG5vaW5saW5lIHU2NCBqaXRfbW9kNjQodTY0IGEsIHU2NCBiKVxuK3tcbitcdHU2NCByZW07XG4rXG4rXHRpZiAoYiA9PSAwKVxuK1x0XHRyZXR1cm4gYTtcbitcdGRpdjY0X3U2NF9yZW0oYSwgYiwgXHUwMDI2cmVtKTtcbitcdHJldHVybiByZW07XG4rfVxuK1xuK3N0YXRpYyBub2lubGluZSBzNjQgaml0X3Ntb2Q2NChzNjQgYSwgczY0IGIpXG4re1xuK1x0aWYgKGIgPT0gMClcbitcdFx0cmV0dXJuIGE7XG4rXHRpZiAoYSA9PSBTNjRfTUlOIFx1MDAyNlx1MDAyNiBiID09IC0xKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiBhIC0gZGl2NjRfczY0KGEsIGIpICogYjtcbit9XG4rXG4rc3RhdGljIHUzMiBqaXRfYXRvbWljMzIodTMyICpwdHIsIHUzMiB2YWwsIHUzMiBvcCwgdTMyIGNtcClcbit7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0dTMyIG9sZDtcbitcbitcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdG9sZCA9ICpwdHI7XG4rXHRzd2l0Y2ggKG9wKSB7XG4rXHRjYXNlIEJQRl9BREQ6XG4rXHRjYXNlIEJQRl9BREQgfCBCUEZfRkVUQ0g6XG4rXHRcdCpwdHIgKz0gdmFsO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0FORDpcbitcdGNhc2UgQlBGX0FORCB8IEJQRl9GRVRDSDpcbitcdFx0KnB0ciBcdTAwMjY9IHZhbDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9PUjpcbitcdGNhc2UgQlBGX09SIHwgQlBGX0ZFVENIOlxuK1x0XHQqcHRyIHw9IHZhbDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9YT1I6XG4rXHRjYXNlIEJQRl9YT1IgfCBCUEZfRkVUQ0g6XG4rXHRcdCpwdHIgXj0gdmFsO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX1hDSEc6XG4rXHRcdCpwdHIgPSB2YWw7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfQ01QWENIRzpcbitcdFx0aWYgKG9sZCA9PSBjbXApXG4rXHRcdFx0KnB0ciA9IHZhbDtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4rXG4rXHRyZXR1cm4gb2xkO1xuK31cbitcbitzdGF0aWMgdTY0IGppdF9hdG9taWM2NCh1MzIgKnB0ciwgdTMyIHZhbF9oaSwgdTMyIHZhbF9sbywgdTMyIG9wLCB1MzIgY21wX2hpLCB1MzIgY21wX2xvKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHR1NjQgb2xkLCB2YWwsIGNtcDtcbitcdHU2NCAqcHRyNjQgPSAodTY0ICopcHRyO1xuK1xuK1x0dmFsID0gKCh1NjQpdmFsX2hpIFx1MDAzY1x1MDAzYyAzMikgfCB2YWxfbG87XG4rXHRjbXAgPSAoKHU2NCljbXBfaGkgXHUwMDNjXHUwMDNjIDMyKSB8IGNtcF9sbztcbitcbitcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdG9sZCA9ICpwdHI2NDtcbitcdHN3aXRjaCAob3ApIHtcbitcdGNhc2UgQlBGX0FERDpcbitcdGNhc2UgQlBGX0FERCB8IEJQRl9GRVRDSDpcbitcdFx0KnB0cjY0ICs9IHZhbDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9BTkQ6XG4rXHRjYXNlIEJQRl9BTkQgfCBCUEZfRkVUQ0g6XG4rXHRcdCpwdHI2NCBcdTAwMjY9IHZhbDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9PUjpcbitcdGNhc2UgQlBGX09SIHwgQlBGX0ZFVENIOlxuK1x0XHQqcHRyNjQgfD0gdmFsO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX1hPUjpcbitcdGNhc2UgQlBGX1hPUiB8IEJQRl9GRVRDSDpcbitcdFx0KnB0cjY0IF49IHZhbDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9YQ0hHOlxuK1x0XHQqcHRyNjQgPSB2YWw7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfQ01QWENIRzpcbitcdFx0aWYgKG9sZCA9PSBjbXApXG4rXHRcdFx0KnB0cjY0ID0gdmFsO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbitcbitcdHJldHVybiBvbGQ7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBlbWl0XzE2KHN0cnVjdCBqaXRfY3R4ICpjdHgsIHUxNiBpbnN0KVxuK3tcbitcdGlmIChjdHgtXHUwMDNldGFyZ2V0KVxuK1x0XHRjdHgtXHUwMDNldGFyZ2V0W2N0eC1cdTAwM2VpZHhdID0gaW5zdDtcbitcdGN0eC1cdTAwM2VpZHgrKztcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGVtaXRfMzIoc3RydWN0IGppdF9jdHggKmN0eCwgdTMyIHZhbClcbit7XG4rXHRlbWl0XzE2KGN0eCwgdmFsIFx1MDAzZVx1MDAzZSAxNik7XG4rXHRlbWl0XzE2KGN0eCwgdmFsIFx1MDAyNiAweGZmZmYpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfc3RhY2tlZChzOCByZWcpXG4re1xuK1x0cmV0dXJuIHJlZyBcdTAwM2MgMDtcbit9XG4rXG4rc3RhdGljIHM4IGJwZl9nZXRfcmVnMzIoczggYnBmX3JlZywgczggdG1wX3JlZywgc3RydWN0IGppdF9jdHggKmN0eClcbit7XG4rXHRpZiAoaXNfc3RhY2tlZChicGZfcmVnKSkge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDJlIHwgKHRtcF9yZWcgXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZS5sIGQxNiglZnApLCByZWcgKi9cbitcdFx0ZW1pdF8xNihjdHgsICh1MTYpYnBmX3JlZyk7XG4rXHRcdHJldHVybiB0bXBfcmVnO1xuK1x0fVxuK1x0cmV0dXJuIGJwZl9yZWc7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGJwZl9wdXRfcmVnMzIoczggYnBmX3JlZywgczggc3JjX3JlZywgc3RydWN0IGppdF9jdHggKmN0eClcbit7XG4rXHRpZiAoaXNfc3RhY2tlZChicGZfcmVnKSkge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyZDQwIHwgc3JjX3JlZyk7XHRcdFx0LyogbW92ZS5sIHJlZywgZDE2KCVmcCkgKi9cbitcdFx0ZW1pdF8xNihjdHgsICh1MTYpYnBmX3JlZyk7XG4rXHR9IGVsc2UgaWYgKGJwZl9yZWcgIT0gc3JjX3JlZykge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGJwZl9yZWcgXHUwMDNjXHUwMDNjIDkpIHwgc3JjX3JlZyk7IC8qIG1vdmUubCBzcmMsIGRzdCAqL1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBlbWl0X2FsdTMyX25lZyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4re1xuK1x0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXHUwMDNlZHN0X3JlZ107XG4rXHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4rXHRzOCBkX3JlZyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpO1xuK1xuK1x0ZW1pdF8xNihjdHgsIDB4NDQ4MCB8IGRfcmVnKTtcdFx0XHRcdC8qIG5lZy5sIGRfcmVnICovXG4rXG4rXHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9yZWcsIGN0eCk7XG4rXHRlbWl0XzE2KGN0eCwgMHg3MDAwIHwgKHRtcDFbMF0gXHUwMDNjXHUwMDNjIDkpKTtcdFx0XHQvKiBtb3ZlcSAjMCwgdG1wMSAqL1xuK1x0YnBmX3B1dF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVtaXRfYWx1NjRfbmVnKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbit7XG4rXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbitcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcbitcdHM4IGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcbitcdHM4IGRfaGkgPSBicGZfZ2V0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcbitcbitcdGVtaXRfMTYoY3R4LCAweDQ0ODAgfCBkX2xvKTtcdFx0XHRcdC8qIG5lZy5sIGRfbG8gKi9cbitcdGVtaXRfMTYoY3R4LCAweDQwODAgfCBkX2hpKTtcdFx0XHRcdC8qIG5lZ3gubCBkX2hpICovXG4rXG4rXHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9sbywgY3R4KTtcbitcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbWl0X2FsdTMyX3goY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuK3tcbitcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVx1MDAzZWRzdF9yZWddO1xuK1x0Y29uc3QgczggKnNyYyA9IGJwZjJtNjhrW2luc24tXHUwMDNlc3JjX3JlZ107XG4rXHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4rXHRjb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07XG4rXHRzOCBkX3JlZywgc19yZWc7XG4rXG4rXHRkX3JlZyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpO1xuK1x0c19yZWcgPSBicGZfZ2V0X3JlZzMyKHNyY1sxXSwgdG1wMlsxXSwgY3R4KTtcbitcbitcdHN3aXRjaCAoQlBGX09QKGluc24tXHUwMDNlY29kZSkpIHtcbitcdGNhc2UgQlBGX01PVjpcbitcdFx0aWYgKGluc24tXHUwMDNlb2ZmID09IDggfHwgaW5zbi1cdTAwM2VvZmYgPT0gMTYpIHtcbitcdFx0XHRpZiAoZF9yZWcgIT0gc19yZWcpXG4rXHRcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IHNfcmVnKTsgLyogbW92ZS5sIHNyYywgZHN0ICovXG4rXHRcdFx0aWYgKGluc24tXHUwMDNlb2ZmID09IDgpXG4rXHRcdFx0XHRlbWl0XzE2KGN0eCwgMHg0OWMwIHwgZF9yZWcpO1x0LyogZXh0Yi5sIGRfcmVnICovXG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0ZW1pdF8xNihjdHgsIDB4NDhjMCB8IGRfcmVnKTtcdC8qIGV4dC5sIGRfcmVnICovXG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0aWYgKGRfcmVnICE9IHNfcmVnKVxuK1x0XHRcdFx0ZW1pdF8xNihjdHgsIDB4MjAwMCB8IChkX3JlZyBcdTAwM2NcdTAwM2MgOSkgfCBzX3JlZyk7IC8qIG1vdmUubCBzcmMsIGRzdCAqL1xuK1x0XHR9XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfQUREOlxuK1x0XHRlbWl0XzE2KGN0eCwgMHhkMDgwIHwgKGRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IHNfcmVnKTtcdC8qIGFkZC5sIHNyYywgZHN0ICovXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfU1VCOlxuK1x0XHRlbWl0XzE2KGN0eCwgMHg5MDgwIHwgKGRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IHNfcmVnKTtcdC8qIHN1Yi5sIHNyYywgZHN0ICovXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfQU5EOlxuK1x0XHRlbWl0XzE2KGN0eCwgMHhjMDgwIHwgKGRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IHNfcmVnKTtcdC8qIGFuZC5sIHNyYywgZHN0ICovXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfT1I6XG4rXHRcdGVtaXRfMTYoY3R4LCAweDgwODAgfCAoZF9yZWcgXHUwMDNjXHUwMDNjIDkpIHwgc19yZWcpO1x0Lyogb3IubCBzcmMsIGRzdCAqL1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX1hPUjpcbitcdFx0ZW1pdF8xNihjdHgsIDB4YjE4MCB8IChzX3JlZyBcdTAwM2NcdTAwM2MgOSkgfCBkX3JlZyk7XHQvKiBlb3IubCBzcmMsIGRzdCAqL1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0xTSDpcbitcdGNhc2UgQlBGX1JTSDpcbitcdGNhc2UgQlBGX0FSU0g6IHtcbitcdFx0czggY291bnRfcmVnID0gdG1wMlsxXTtcbitcbitcdFx0aWYgKHNfcmVnICE9IGNvdW50X3JlZylcbitcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGNvdW50X3JlZyBcdTAwM2NcdTAwM2MgOSkgfCBzX3JlZyk7IC8qIG1vdmUubCBzcmMsIGNvdW50ICovXG4rXG4rXHRcdGVtaXRfMTYoY3R4LCAweDAyODAgfCBjb3VudF9yZWcpO1x0XHQvKiBhbmRpLmwgI2ltbSwgY291bnQgKi9cbitcdFx0ZW1pdF8zMihjdHgsIDB4MWYpO1xuK1xuK1x0XHRpZiAoQlBGX09QKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0xTSClcbitcdFx0XHRlbWl0XzE2KGN0eCwgMHhlMWE4IHwgKGNvdW50X3JlZyBcdTAwM2NcdTAwM2MgOSkgfCBkX3JlZyk7IC8qIGxzbC5sIGNvdW50LCBkc3QgKi9cbitcdFx0ZWxzZSBpZiAoQlBGX09QKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1JTSClcbitcdFx0XHRlbWl0XzE2KGN0eCwgMHhlMGE4IHwgKGNvdW50X3JlZyBcdTAwM2NcdTAwM2MgOSkgfCBkX3JlZyk7IC8qIGxzci5sIGNvdW50LCBkc3QgKi9cbitcdFx0ZWxzZVxuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGUwYTAgfCAoY291bnRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IGRfcmVnKTsgLyogYXNyLmwgY291bnQsIGRzdCAqL1xuK1x0XHRicmVhaztcbitcdH1cbitcdH1cbitcbitcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX3JlZywgY3R4KTtcbitcdGVtaXRfMTYoY3R4LCAweDcwMDAgfCAodG1wMVswXSBcdTAwM2NcdTAwM2MgOSkpO1x0XHRcdC8qIG1vdmVxICMwLCB0bXAxICovXG4rXHRicGZfcHV0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZW1pdF9hbHUzMl9rKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbit7XG4rXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbitcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcbitcdGNvbnN0IHM4ICp0bXAyID0gYnBmMm02OGtbVE1QX1JFR18yXTtcbitcdHM4IGRfcmVnO1xuK1xuK1x0ZF9yZWcgPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcbitcbitcdHN3aXRjaCAoQlBGX09QKGluc24tXHUwMDNlY29kZSkpIHtcbitcdGNhc2UgQlBGX01PVjpcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjAzYyB8IChkX3JlZyBcdTAwM2NcdTAwM2MgOSkpO1x0XHQvKiBtb3ZlLmwgI2ltbSwgZHN0ICovXG4rXHRcdGVtaXRfMzIoY3R4LCBpbnNuLVx1MDAzZWltbSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfQUREOlxuK1x0XHRlbWl0XzE2KGN0eCwgMHgwNjgwIHwgZF9yZWcpO1x0XHRcdC8qIGFkZGkubCAjaW1tLCBkc3QgKi9cbitcdFx0ZW1pdF8zMihjdHgsIGluc24tXHUwMDNlaW1tKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9TVUI6XG4rXHRcdGVtaXRfMTYoY3R4LCAweDA0ODAgfCBkX3JlZyk7XHRcdFx0Lyogc3ViaS5sICNpbW0sIGRzdCAqL1xuK1x0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0FORDpcbitcdFx0ZW1pdF8xNihjdHgsIDB4MDI4MCB8IGRfcmVnKTtcdFx0XHQvKiBhbmRpLmwgI2ltbSwgZHN0ICovXG4rXHRcdGVtaXRfMzIoY3R4LCBpbnNuLVx1MDAzZWltbSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfT1I6XG4rXHRcdGVtaXRfMTYoY3R4LCAweDAwODAgfCBkX3JlZyk7XHRcdFx0Lyogb3JpLmwgI2ltbSwgZHN0ICovXG4rXHRcdGVtaXRfMzIoY3R4LCBpbnNuLVx1MDAzZWltbSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfWE9SOlxuK1x0XHRlbWl0XzE2KGN0eCwgMHgwYTgwIHwgZF9yZWcpO1x0XHRcdC8qIGVvcmkubCAjaW1tLCBkc3QgKi9cbitcdFx0ZW1pdF8zMihjdHgsIGluc24tXHUwMDNlaW1tKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9MU0g6XG4rXHRjYXNlIEJQRl9SU0g6XG4rXHRjYXNlIEJQRl9BUlNIOlxuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHRtcDJbMV0gXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZS5sICNpbW0sIGNvdW50ICovXG4rXHRcdGVtaXRfMzIoY3R4LCBpbnNuLVx1MDAzZWltbSBcdTAwMjYgMHgxZik7XG4rXG4rXHRcdGlmIChCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTFNIKVxuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGUxYTggfCAodG1wMlsxXSBcdTAwM2NcdTAwM2MgOSkgfCBkX3JlZyk7XHQvKiBsc2wubCBjb3VudCwgZHN0ICovXG4rXHRcdGVsc2UgaWYgKEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9SU0gpXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4ZTBhOCB8ICh0bXAyWzFdIFx1MDAzY1x1MDAzYyA5KSB8IGRfcmVnKTtcdC8qIGxzci5sIGNvdW50LCBkc3QgKi9cbitcdFx0ZWxzZVxuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGUwYTAgfCAodG1wMlsxXSBcdTAwM2NcdTAwM2MgOSkgfCBkX3JlZyk7XHQvKiBhc3IubCBjb3VudCwgZHN0ICovXG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0YnBmX3B1dF9yZWczMihkc3RbMV0sIGRfcmVnLCBjdHgpO1xuK1x0ZW1pdF8xNihjdHgsIDB4NzAwMCB8ICh0bXAxWzBdIFx1MDAzY1x1MDAzYyA5KSk7XHRcdFx0LyogbW92ZXEgIzAsIHRtcDEgKi9cbitcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbWl0X2FsdTY0X3goY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuK3tcbitcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVx1MDAzZWRzdF9yZWddO1xuK1x0Y29uc3QgczggKnNyYyA9IGJwZjJtNjhrW2luc24tXHUwMDNlc3JjX3JlZ107XG4rXHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4rXHRjb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07XG4rXHRzOCBkX2xvLCBkX2hpLCBzX2xvLCBzX2hpO1xuK1xuK1x0ZF9sbyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpO1xuK1x0ZF9oaSA9IGJwZl9nZXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpO1xuK1x0c19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpO1xuK1x0c19oaSA9IGJwZl9nZXRfcmVnMzIoc3JjWzBdLCB0bXAyWzBdLCBjdHgpO1xuK1xuK1x0c3dpdGNoIChCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSkge1xuK1x0Y2FzZSBCUEZfTU9WOlxuK1x0XHRpZiAoaW5zbi1cdTAwM2VvZmYgPT0gOCB8fCBpbnNuLVx1MDAzZW9mZiA9PSAxNiB8fCBpbnNuLVx1MDAzZW9mZiA9PSAzMikge1xuK1x0XHRcdGlmIChkX2xvICE9IHNfbG8pXG4rXHRcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7IC8qIG1vdmUubCBzcmMsIGRzdCAqL1xuK1xuK1x0XHRcdGlmIChpbnNuLVx1MDAzZW9mZiA9PSA4KVxuK1x0XHRcdFx0ZW1pdF8xNihjdHgsIDB4NDljMCB8IGRfbG8pO1x0XHQvKiBleHRiLmwgZF9sbyAqL1xuK1x0XHRcdGVsc2UgaWYgKGluc24tXHUwMDNlb2ZmID09IDE2KVxuK1x0XHRcdFx0ZW1pdF8xNihjdHgsIDB4NDhjMCB8IGRfbG8pO1x0XHQvKiBleHQubCBkX2xvICovXG4rXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NGE4MCB8IGRfbG8pO1x0XHRcdC8qIHRzdC5sIGRfbG8gKi9cbitcdFx0XHRlbWl0XzE2KGN0eCwgMHg1YmMwIHwgZF9oaSk7XHRcdFx0Lyogc21pIGRfaGkgKi9cbitcdFx0XHRlbWl0XzE2KGN0eCwgMHg0OWMwIHwgZF9oaSk7XHRcdFx0LyogZXh0Yi5sIGRfaGkgKi9cbitcdFx0fSBlbHNlIHtcbitcdFx0XHRpZiAoZF9sbyAhPSBzX2xvKVxuK1x0XHRcdFx0ZW1pdF8xNihjdHgsIDB4MjAwMCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSB8IHNfbG8pOyAvKiBtb3ZlLmwgc19sbywgZF9sbyAqL1xuK1x0XHRcdGlmIChkX2hpICE9IHNfaGkpXG4rXHRcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpIHwgc19oaSk7IC8qIG1vdmUubCBzX2hpLCBkX2hpICovXG4rXHRcdH1cbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9BREQ6XG4rXHRcdGVtaXRfMTYoY3R4LCAweGQwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTtcdFx0LyogYWRkLmwgc19sbywgZF9sbyAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHhkMTgwIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpIHwgc19oaSk7XHRcdC8qIGFkZHgubCBzX2hpLCBkX2hpICovXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfU1VCOlxuK1x0XHRlbWl0XzE2KGN0eCwgMHg5MDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7XHRcdC8qIHN1Yi5sIHNfbG8sIGRfbG8gKi9cbitcdFx0ZW1pdF8xNihjdHgsIDB4OTE4MCB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSB8IHNfaGkpO1x0XHQvKiBzdWJ4Lmwgc19oaSwgZF9oaSAqL1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0FORDpcbitcdFx0ZW1pdF8xNihjdHgsIDB4YzA4MCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSB8IHNfbG8pO1x0XHQvKiBhbmQubCBzX2xvLCBkX2xvICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweGMwODAgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkgfCBzX2hpKTtcdFx0LyogYW5kLmwgc19oaSwgZF9oaSAqL1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX09SOlxuK1x0XHRlbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7XHRcdC8qIG9yLmwgc19sbywgZF9sbyAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpIHwgc19oaSk7XHRcdC8qIG9yLmwgc19oaSwgZF9oaSAqL1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX1hPUjpcbitcdFx0ZW1pdF8xNihjdHgsIDB4YjE4MCB8IChzX2xvIFx1MDAzY1x1MDAzYyA5KSB8IGRfbG8pO1x0XHQvKiBlb3IubCBzX2xvLCBkX2xvICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweGIxODAgfCAoc19oaSBcdTAwM2NcdTAwM2MgOSkgfCBkX2hpKTtcdFx0LyogZW9yLmwgc19oaSwgZF9oaSAqL1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX2xvLCBjdHgpO1xuK1x0YnBmX3B1dF9yZWczMihkc3RbMF0sIGRfaGksIGN0eCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVtaXRfYWx1NjRfayhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4re1xuK1x0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXHUwMDNlZHN0X3JlZ107XG4rXHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4rXHRjb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07XG4rXHRzOCBkX2xvLCBkX2hpLCBzX2xvLCBzX2hpO1xuK1x0dTMyIGltbV9sbyA9IGluc24tXHUwMDNlaW1tO1xuK1x0dTMyIGltbV9oaSA9IGluc24tXHUwMDNlaW1tIFx1MDAzYyAwID8gMHhmZmZmZmZmZiA6IDA7XG4rXG4rXHRkX2xvID0gYnBmX2dldF9yZWczMihkc3RbMV0sIHRtcDFbMV0sIGN0eCk7XG4rXHRkX2hpID0gYnBmX2dldF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7XG4rXG4rXHRpZiAoQlBGX09QKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX01PVikge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpKTtcdFx0XHQvKiBtb3ZlLmwgI2ltbSwgZF9sbyAqL1xuK1x0XHRlbWl0XzMyKGN0eCwgaW1tX2xvKTtcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjAzYyB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSk7XHRcdFx0LyogbW92ZS5sICNpbW0sIGRfaGkgKi9cbitcdFx0ZW1pdF8zMihjdHgsIGltbV9oaSk7XG4rXHRcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX2xvLCBjdHgpO1xuK1x0XHRicGZfcHV0X3JlZzMyKGRzdFswXSwgZF9oaSwgY3R4KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0c19sbyA9IHRtcDJbMV07XG4rXHRzX2hpID0gdG1wMlswXTtcbitcbitcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAoc19sbyBcdTAwM2NcdTAwM2MgOSkpO1x0XHRcdFx0LyogbW92ZS5sICNpbW0sIHNfbG8gKi9cbitcdGVtaXRfMzIoY3R4LCBpbW1fbG8pO1xuK1x0ZW1pdF8xNihjdHgsIDB4MjAzYyB8IChzX2hpIFx1MDAzY1x1MDAzYyA5KSk7XHRcdFx0XHQvKiBtb3ZlLmwgI2ltbSwgc19oaSAqL1xuK1x0ZW1pdF8zMihjdHgsIGltbV9oaSk7XG4rXG4rXHRzd2l0Y2ggKEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpKSB7XG4rXHRjYXNlIEJQRl9BREQ6XG4rXHRcdGVtaXRfMTYoY3R4LCAweGQwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTtcdFx0LyogYWRkLmwgc19sbywgZF9sbyAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHhkMTgwIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpIHwgc19oaSk7XHRcdC8qIGFkZHgubCBzX2hpLCBkX2hpICovXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfU1VCOlxuK1x0XHRlbWl0XzE2KGN0eCwgMHg5MDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7XHRcdC8qIHN1Yi5sIHNfbG8sIGRfbG8gKi9cbitcdFx0ZW1pdF8xNihjdHgsIDB4OTE4MCB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSB8IHNfaGkpO1x0XHQvKiBzdWJ4Lmwgc19oaSwgZF9oaSAqL1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0FORDpcbitcdFx0ZW1pdF8xNihjdHgsIDB4YzA4MCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSB8IHNfbG8pO1x0XHQvKiBhbmQubCBzX2xvLCBkX2xvICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweGMwODAgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkgfCBzX2hpKTtcdFx0LyogYW5kLmwgc19oaSwgZF9oaSAqL1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX09SOlxuK1x0XHRlbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7XHRcdC8qIG9yLmwgc19sbywgZF9sbyAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpIHwgc19oaSk7XHRcdC8qIG9yLmwgc19oaSwgZF9oaSAqL1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX1hPUjpcbitcdFx0ZW1pdF8xNihjdHgsIDB4YjE4MCB8IChzX2xvIFx1MDAzY1x1MDAzYyA5KSB8IGRfbG8pO1x0XHQvKiBlb3IubCBzX2xvLCBkX2xvICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweGIxODAgfCAoc19oaSBcdTAwM2NcdTAwM2MgOSkgfCBkX2hpKTtcdFx0LyogZW9yLmwgc19oaSwgZF9oaSAqL1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX2xvLCBjdHgpO1xuK1x0YnBmX3B1dF9yZWczMihkc3RbMF0sIGRfaGksIGN0eCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVtaXRfYWx1NjRfc2hpZnQoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIGlzX2ltbSlcbit7XG4rXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbitcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcbitcdGNvbnN0IHM4ICp0bXAyID0gYnBmMm02OGtbVE1QX1JFR18yXTtcbitcdHM4IGRfbG8sIGRfaGksIGNvdW50X3JlZztcbitcdGludCBsb29wX3N0YXJ0LCBkb25lX2lkeDtcbitcbitcdGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcbitcdGRfaGkgPSBicGZfZ2V0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcbitcdGNvdW50X3JlZyA9IHRtcDJbMV07XG4rXG4rXHRpZiAoaXNfaW1tKSB7XG4rXHRcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAoY291bnRfcmVnIFx1MDAzY1x1MDAzYyA5KSk7XHRcdC8qIG1vdmUubCAjaW1tLCBjb3VudF9yZWcgKi9cbitcdFx0ZW1pdF8zMihjdHgsIGluc24tXHUwMDNlaW1tKTtcbitcdH0gZWxzZSB7XG4rXHRcdGNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLVx1MDAzZXNyY19yZWddO1xuK1x0XHRzOCBzX2xvID0gYnBmX2dldF9yZWczMihzcmNbMV0sIHRtcDJbMV0sIGN0eCk7XG4rXG4rXHRcdGlmIChjb3VudF9yZWcgIT0gc19sbylcbitcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGNvdW50X3JlZyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTtcdC8qIG1vdmUubCBzX2xvLCBjb3VudF9yZWcgKi9cbitcdH1cbitcbitcdGVtaXRfMTYoY3R4LCAweDAyODAgfCBjb3VudF9yZWcpO1x0XHRcdC8qIGFuZGkubCAjMHgzZiwgY291bnRfcmVnICovXG4rXHRlbWl0XzMyKGN0eCwgMHgzZik7XG4rXG4rXHRlbWl0XzE2KGN0eCwgMHg0YTgwIHwgY291bnRfcmVnKTtcdFx0XHRcdC8qIHRzdC5sIGNvdW50X3JlZyAqL1xuK1x0ZW1pdF8xNihjdHgsIDB4NjcwMCk7XHRcdFx0XHRcdFx0LyogYmVxLncgZG9uZV9pZHggKi9cbitcdGRvbmVfaWR4ID0gY3R4LVx1MDAzZWlkeDtcbitcdGVtaXRfMTYoY3R4LCAwKTtcbitcbitcdGxvb3Bfc3RhcnQgPSBjdHgtXHUwMDNlaWR4O1xuK1xuK1x0aWYgKEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9MU0gpIHtcbitcdFx0ZW1pdF8xNihjdHgsIDB4ZTM4OCB8IGRfbG8pO1x0XHRcdFx0LyogbHNsbCAjMSwgZF9sbyAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHhlMzkwIHwgZF9oaSk7XHRcdFx0XHQvKiByb3hsLmwgIzEsIGRfaGkgKi9cbitcdH0gZWxzZSBpZiAoQlBGX09QKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1JTSCkge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHhlMjg4IHwgZF9oaSk7XHRcdFx0XHQvKiBsc3JsICMxLCBkX2hpICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweGUyOTAgfCBkX2xvKTtcdFx0XHRcdC8qIHJveHIubCAjMSwgZF9sbyAqL1xuK1x0fSBlbHNlIGlmIChCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQVJTSCkge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHhlMjgwIHwgZF9oaSk7XHRcdFx0XHQvKiBhc3JsICMxLCBkX2hpICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweGUyOTAgfCBkX2xvKTtcdFx0XHRcdC8qIHJveHIubCAjMSwgZF9sbyAqL1xuK1x0fVxuK1xuK1x0ZW1pdF8xNihjdHgsIDB4NTM4MCB8IGNvdW50X3JlZyk7XHRcdFx0XHQvKiBzdWJxLmwgIzEsIGNvdW50X3JlZyAqL1xuK1x0ZW1pdF8xNihjdHgsIDB4NjYwMCk7XHRcdFx0XHRcdFx0LyogYm5lLncgbG9vcF9zdGFydCAqL1xuK1x0ZW1pdF8xNihjdHgsIChsb29wX3N0YXJ0IC0gKGludCljdHgtXHUwMDNlaWR4KSAqIDIpO1xuK1xuK1x0aWYgKGN0eC1cdTAwM2V0YXJnZXQpXG4rXHRcdGN0eC1cdTAwM2V0YXJnZXRbZG9uZV9pZHhdID0gKGN0eC1cdTAwM2VpZHggLSBkb25lX2lkeCkgKiAyO1xuK1xuK1x0YnBmX3B1dF9yZWczMihkc3RbMV0sIGRfbG8sIGN0eCk7XG4rXHRicGZfcHV0X3JlZzMyKGRzdFswXSwgZF9oaSwgY3R4KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZW1pdF9icGZfZW5kKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbit7XG4rXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbitcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcbitcdHM4IGRfbG8sIGRfaGk7XG4rXHRib29sIHRvX2xlID0gQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9UT19MRTtcbitcdGludCBpbW0gPSBpbnNuLVx1MDAzZWltbTtcbitcbitcdGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcbitcdGRfaGkgPSBicGZfZ2V0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcbitcbitcdGlmICh0b19sZSkge1xuK1x0XHRzd2l0Y2ggKGltbSkge1xuK1x0XHRjYXNlIDE2OlxuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDAyODAgfCBkX2xvKTtcdFx0XHQvKiBhbmRpLmwgIzB4ZmZmZiwgZF9sbyAqL1xuK1x0XHRcdGVtaXRfMzIoY3R4LCAweGZmZmYpO1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGUwNTggfCBkX2xvKTtcdFx0XHQvKiByb3IudyAjOCwgZF9sbyAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDcwMDAgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkpO1x0XHQvKiBtb3ZlcSAjMCwgZF9oaSAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIDMyOlxuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGUwNTggfCBkX2xvKTtcdFx0XHQvKiByb3IudyAjOCwgZF9sbyAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDQ4NDAgfCBkX2xvKTtcdFx0XHQvKiBzd2FwIGRfbG8gKi9cbitcdFx0XHRlbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9sbyk7XHRcdFx0Lyogcm9yLncgIzgsIGRfbG8gKi9cbitcdFx0XHRlbWl0XzE2KGN0eCwgMHg3MDAwIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZXEgIzAsIGRfaGkgKi9cbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSA2NDpcbitcdFx0XHRlbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9sbyk7XHRcdFx0Lyogcm9yLncgIzgsIGRfbG8gKi9cbitcdFx0XHRlbWl0XzE2KGN0eCwgMHg0ODQwIHwgZF9sbyk7XHRcdFx0Lyogc3dhcCBkX2xvICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4ZTA1OCB8IGRfbG8pO1x0XHRcdC8qIHJvci53ICM4LCBkX2xvICovXG4rXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4ZTA1OCB8IGRfaGkpO1x0XHRcdC8qIHJvci53ICM4LCBkX2hpICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NDg0MCB8IGRfaGkpO1x0XHRcdC8qIHN3YXAgZF9oaSAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGUwNTggfCBkX2hpKTtcdFx0XHQvKiByb3IudyAjOCwgZF9oaSAqL1xuK1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGMxNDAgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkgfCBkX2xvKTtcdC8qIGV4ZyBkX2xvLCBkX2hpICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdHN3aXRjaCAoaW1tKSB7XG4rXHRcdGNhc2UgMTY6XG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4MDI4MCB8IGRfbG8pO1x0XHRcdC8qIGFuZGkubCAjMHhmZmZmLCBkX2xvICovXG4rXHRcdFx0ZW1pdF8zMihjdHgsIDB4ZmZmZik7XG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSk7XHRcdC8qIG1vdmVxICMwLCBkX2hpICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgMzI6XG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSk7XHRcdC8qIG1vdmVxICMwLCBkX2hpICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgNjQ6XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcbitcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX2xvLCBjdHgpO1xuK1x0YnBmX3B1dF9yZWczMihkc3RbMF0sIGRfaGksIGN0eCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVtaXRfbWF0aF9jYWxsKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBpc182NClcbit7XG4rXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbitcdGNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLVx1MDAzZXNyY19yZWddO1xuK1x0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xuK1x0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xuK1x0czggZF9sbywgZF9oaSwgc19sbywgc19oaSA9IDA7XG4rXHR2b2lkICpmdW5jID0gTlVMTDtcbitcdHU4IG9wID0gQlBGX09QKGluc24tXHUwMDNlY29kZSk7XG4rXG4rXHRkX2xvID0gYnBmX2dldF9yZWczMihkc3RbMV0sIHRtcDFbMV0sIGN0eCk7XG4rXHRkX2hpID0gYnBmX2dldF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7XG4rXG4rXHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YKSB7XG4rXHRcdHNfbG8gPSBicGZfZ2V0X3JlZzMyKHNyY1sxXSwgdG1wMlsxXSwgY3R4KTtcbitcdFx0aWYgKGlzXzY0KVxuK1x0XHRcdHNfaGkgPSBicGZfZ2V0X3JlZzMyKHNyY1swXSwgdG1wMlswXSwgY3R4KTtcbitcdH0gZWxzZSB7XG4rXHRcdHNfbG8gPSB0bXAyWzFdO1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHNfbG8gXHUwMDNjXHUwMDNjIDkpKTtcdFx0XHQvKiBtb3ZlLmwgI2ltbSwgc19sbyAqL1xuK1x0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuK1x0XHRpZiAoaXNfNjQpIHtcbitcdFx0XHRzX2hpID0gdG1wMlswXTtcbitcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHNfaGkgXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZS5sICNpbW0sIHNfaGkgKi9cbitcdFx0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0gXHUwMDNjIDAgPyAweGZmZmZmZmZmIDogMCk7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChpc182NCkge1xuK1x0XHRzd2l0Y2ggKG9wKSB7XG4rXHRcdGNhc2UgQlBGX01VTDpcbitcdFx0XHRmdW5jID0gKHZvaWQgKilqaXRfbXVsNjQ7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX0RJVjpcbitcdFx0XHRmdW5jID0gKHZvaWQgKilqaXRfZGl2NjQ7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX01PRDpcbitcdFx0XHRmdW5jID0gKHZvaWQgKilqaXRfbW9kNjQ7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFU2NCBcdTAwMjZcdTAwMjYgb3AgPT0gQlBGX0RJViBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gMSlcbitcdFx0XHRmdW5jID0gKHZvaWQgKilqaXRfc2RpdjY0O1xuK1x0XHRpZiAoQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FMVTY0IFx1MDAyNlx1MDAyNiBvcCA9PSBCUEZfTU9EIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZW9mZiA9PSAxKVxuK1x0XHRcdGZ1bmMgPSAodm9pZCAqKWppdF9zbW9kNjQ7XG4rXHR9IGVsc2Uge1xuK1x0XHRzd2l0Y2ggKG9wKSB7XG4rXHRcdGNhc2UgQlBGX01VTDpcbitcdFx0XHRmdW5jID0gKHZvaWQgKilqaXRfbXVsMzI7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX0RJVjpcbitcdFx0XHRmdW5jID0gKHZvaWQgKilqaXRfZGl2MzI7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX01PRDpcbitcdFx0XHRmdW5jID0gKHZvaWQgKilqaXRfbW9kMzI7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFUgXHUwMDI2XHUwMDI2IG9wID09IEJQRl9ESVYgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlb2ZmID09IDEpXG4rXHRcdFx0ZnVuYyA9ICh2b2lkICopaml0X3NkaXYzMjtcbitcdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFUgXHUwMDI2XHUwMDI2IG9wID09IEJQRl9NT0QgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlb2ZmID09IDEpXG4rXHRcdFx0ZnVuYyA9ICh2b2lkICopaml0X3Ntb2QzMjtcbitcdH1cbitcbitcdGlmIChpc182NCkge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHg0OGU3KTtcdFx0XHRcdFx0LyogbW92ZW0ubCBkMC1kMSwgLSglc3ApICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweGMwMDApO1xuK1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyZjAwIHwgc19sbyk7XHRcdFx0XHQvKiBtb3ZlLmwgc19sbywgLSglc3ApICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBzX2hpKTtcdFx0XHRcdC8qIG1vdmUubCBzX2hpLCAtKCVzcCkgKi9cbitcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IGRfbG8pO1x0XHRcdFx0LyogbW92ZS5sIGRfbG8sIC0oJXNwKSAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyZjAwIHwgZF9oaSk7XHRcdFx0XHQvKiBtb3ZlLmwgZF9oaSwgLSglc3ApICovXG4rXG4rXHRcdGVtaXRfMTYoY3R4LCAweDIwN2MpO1x0XHRcdFx0XHQvKiBtb3ZlYS5sICNmdW5jLCAlYTAgKi9cbitcdFx0ZW1pdF8zMihjdHgsICh1MzIpZnVuYyk7XG4rXHRcdGVtaXRfMTYoY3R4LCAweDRlOTApO1x0XHRcdFx0XHQvKiBqc3IgKCVhMCkgKi9cbitcbitcdFx0ZW1pdF8xNihjdHgsIDB4NGZlZik7XHRcdFx0XHRcdC8qIGxlYSAxNiglc3ApLCAlc3AgKi9cbitcdFx0ZW1pdF8xNihjdHgsIDE2KTtcbitcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjYwMSk7XHRcdFx0XHRcdC8qIG1vdmUubCAlZDEsICVkMyAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyNDAwKTtcdFx0XHRcdFx0LyogbW92ZS5sICVkMCwgJWQyICovXG4rXG4rXHRcdGVtaXRfMTYoY3R4LCAweDRjZGYpO1x0XHRcdFx0XHQvKiBtb3ZlbS5sICglc3ApKywgZDAtZDEgKi9cbitcdFx0ZW1pdF8xNihjdHgsIDB4MDAwMyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHg0OGU3KTtcdFx0XHRcdFx0LyogbW92ZW0ubCBkMC1kMSwgLSglc3ApICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweGMwMDApO1xuK1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyZjAwIHwgc19sbyk7XHRcdFx0XHQvKiBtb3ZlLmwgc19sbywgLSglc3ApICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBkX2xvKTtcdFx0XHRcdC8qIG1vdmUubCBkX2xvLCAtKCVzcCkgKi9cbitcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjA3Yyk7XHRcdFx0XHRcdC8qIG1vdmVhLmwgI2Z1bmMsICVhMCAqL1xuK1x0XHRlbWl0XzMyKGN0eCwgKHUzMilmdW5jKTtcbitcdFx0ZW1pdF8xNihjdHgsIDB4NGU5MCk7XHRcdFx0XHRcdC8qIGpzciAoJWEwKSAqL1xuK1xuK1x0XHRlbWl0XzE2KGN0eCwgMHg0ZmVmKTtcdFx0XHRcdFx0LyogbGVhIDgoJXNwKSwgJXNwICovXG4rXHRcdGVtaXRfMTYoY3R4LCA4KTtcbitcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjYwMCk7XHRcdFx0XHRcdC8qIG1vdmUubCAlZDAsICVkMyAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHg3NDAwKTtcdFx0XHRcdFx0LyogbW92ZXEgIzAsICVkMiAqL1xuK1xuK1x0XHRlbWl0XzE2KGN0eCwgMHg0Y2RmKTtcdFx0XHRcdFx0LyogbW92ZW0ubCAoJXNwKSssIGQwLWQxICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweDAwMDMpO1xuK1x0fVxuK1xuK1x0YnBmX3B1dF9yZWczMihkc3RbMV0sIE02OEtfRDMsIGN0eCk7XG4rXHRicGZfcHV0X3JlZzMyKGRzdFswXSwgTTY4S19EMiwgY3R4KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZW1pdF9sZHgoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuK3tcbitcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVx1MDAzZWRzdF9yZWddO1xuK1x0Y29uc3QgczggKnNyYyA9IGJwZjJtNjhrW2luc24tXHUwMDNlc3JjX3JlZ107XG4rXHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4rXHRzOCBkX2xvLCBkX2hpO1xuK1x0Ym9vbCBpc19tZW1fc3ggPSBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU1TWDtcbitcbitcdGlmIChpc19zdGFja2VkKHNyY1sxXSkpIHtcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjA2ZSk7XHRcdFx0XHQvKiBtb3ZlYS5sIGQxNiglZnApLCAlYTAgKi9cbitcdFx0ZW1pdF8xNihjdHgsICh1MTYpc3JjWzFdKTtcbitcdH0gZWxzZSB7XG4rXHRcdGVtaXRfMTYoY3R4LCAweDIwNDAgfCBzcmNbMV0pO1x0XHRcdC8qIG1vdmVhLmwgc3JjLCAlYTAgKi9cbitcdH1cbitcbitcdGRfbG8gPSBpc19zdGFja2VkKGRzdFsxXSkgPyB0bXAxWzFdIDogZHN0WzFdO1xuK1x0ZF9oaSA9IGlzX3N0YWNrZWQoZHN0WzBdKSA/IHRtcDFbMF0gOiBkc3RbMF07XG4rXG4rXHRzd2l0Y2ggKEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkpIHtcbitcdGNhc2UgQlBGX0I6XG4rXHRcdGlmICghaXNfbWVtX3N4KVxuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDcwMDAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkpO1x0LyogbW92ZXEgIzAsIGRfbG8gKi9cbitcdFx0ZW1pdF8xNihjdHgsIDB4MTAyOCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSk7XHRcdC8qIG1vdmUuYiBkMTYoJWEwKSwgZF9sbyAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgaW5zbi1cdTAwM2VvZmYpO1xuK1x0XHRpZiAoaXNfbWVtX3N4KVxuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDQ5YzAgfCBkX2xvKTtcdC8qIGV4dGIubCBkX2xvICovXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfSDpcbitcdFx0aWYgKCFpc19tZW1fc3gpXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSk7XHQvKiBtb3ZlcSAjMCwgZF9sbyAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgzMDI4IHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZS53IGQxNiglYTApLCBkX2xvICovXG4rXHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4rXHRcdGlmIChpc19tZW1fc3gpXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NDhjMCB8IGRfbG8pO1x0LyogZXh0LmwgZF9sbyAqL1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX1c6XG4rXHRcdGVtaXRfMTYoY3R4LCAweDIwMjggfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkpO1x0XHQvKiBtb3ZlLmwgZDE2KCVhMCksIGRfbG8gKi9cbitcdFx0ZW1pdF8xNihjdHgsIGluc24tXHUwMDNlb2ZmKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9EVzpcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjAyOCB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSk7XHRcdC8qIG1vdmUubCBkMTYoJWEwKSwgZF9oaSAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgaW5zbi1cdTAwM2VvZmYpO1xuK1x0XHRlbWl0XzE2KGN0eCwgMHg0MWU4KTtcdFx0XHRcdC8qIGxlYSA0KCVhMCksICVhMCAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgNCk7XG4rXHRcdGVtaXRfMTYoY3R4LCAweDIwMjggfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkpO1x0XHQvKiBtb3ZlLmwgZDE2KCVhMCksIGRfbG8gKi9cbitcdFx0ZW1pdF8xNihjdHgsIGluc24tXHUwMDNlb2ZmKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRpZiAoQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfRFcpIHtcbitcdFx0aWYgKGlzX21lbV9zeCkge1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDRhODAgfCBkX2xvKTtcdFx0XHQvKiB0c3QubCBkX2xvICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NWJjMCB8IGRfaGkpO1x0XHRcdC8qIHNtaSBkX2hpICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NDljMCB8IGRfaGkpO1x0XHRcdC8qIGV4dGIubCBkX2hpICovXG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSk7XHQvKiBtb3ZlcSAjMCwgZF9oaSAqL1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9sbywgY3R4KTtcbitcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbWl0X3N0eChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4re1xuK1x0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXHUwMDNlZHN0X3JlZ107XG4rXHRjb25zdCBzOCAqc3JjID0gYnBmMm02OGtbaW5zbi1cdTAwM2VzcmNfcmVnXTtcbitcdGNvbnN0IHM4ICp0bXAyID0gYnBmMm02OGtbVE1QX1JFR18yXTtcbitcdHM4IHNfbG8sIHNfaGk7XG4rXG4rXHRpZiAoaXNfc3RhY2tlZChkc3RbMV0pKSB7XG4rXHRcdGVtaXRfMTYoY3R4LCAweDIwNmUpO1x0XHRcdFx0LyogbW92ZWEubCBkMTYoJWZwKSwgJWEwICovXG4rXHRcdGVtaXRfMTYoY3R4LCAodTE2KWRzdFsxXSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDQwIHwgZHN0WzFdKTtcdFx0XHQvKiBtb3ZlYS5sIGRzdCwgJWEwICovXG4rXHR9XG4rXG4rXHRzX2xvID0gYnBmX2dldF9yZWczMihzcmNbMV0sIHRtcDJbMV0sIGN0eCk7XG4rXG4rXHRzd2l0Y2ggKEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkpIHtcbitcdGNhc2UgQlBGX0I6XG4rXHRcdGVtaXRfMTYoY3R4LCAweDExNDAgfCBzX2xvKTtcdFx0XHQvKiBtb3ZlLmIgc19sbywgZDE2KCVhMCkgKi9cbitcdFx0ZW1pdF8xNihjdHgsIGluc24tXHUwMDNlb2ZmKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9IOlxuK1x0XHRlbWl0XzE2KGN0eCwgMHgzMTQwIHwgc19sbyk7XHRcdFx0LyogbW92ZS53IHNfbG8sIGQxNiglYTApICovXG4rXHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfVzpcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjE0MCB8IHNfbG8pO1x0XHRcdC8qIG1vdmUubCBzX2xvLCBkMTYoJWEwKSAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgaW5zbi1cdTAwM2VvZmYpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0RXOlxuK1x0XHRzX2hpID0gYnBmX2dldF9yZWczMihzcmNbMF0sIHRtcDJbMF0sIGN0eCk7XG4rXHRcdGVtaXRfMTYoY3R4LCAweDIxNDAgfCBzX2hpKTtcdFx0XHQvKiBtb3ZlLmwgc19oaSwgZDE2KCVhMCkgKi9cbitcdFx0ZW1pdF8xNihjdHgsIGluc24tXHUwMDNlb2ZmKTtcbitcdFx0ZW1pdF8xNihjdHgsIDB4NDFlOCk7XHRcdFx0XHQvKiBsZWEgNCglYTApLCAlYTAgKi9cbitcdFx0ZW1pdF8xNihjdHgsIDQpO1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMTQwIHwgc19sbyk7XHRcdFx0LyogbW92ZS5sIHNfbG8sIGQxNiglYTApICovXG4rXHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBlbWl0X3N0KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbit7XG4rXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbitcdGNvbnN0IHM4ICp0bXAgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xuK1xuK1x0aWYgKGlzX3N0YWNrZWQoZHN0WzFdKSkge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDZlKTtcdFx0XHRcdC8qIG1vdmVhLmwgZDE2KCVmcCksICVhMCAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgKHUxNilkc3RbMV0pO1xuK1x0fSBlbHNlIHtcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjA0MCB8IGRzdFsxXSk7XHRcdFx0LyogbW92ZWEubCBkc3QsICVhMCAqL1xuK1x0fVxuK1xuK1x0ZW1pdF8xNihjdHgsIDB4MjAzYyB8ICh0bXBbMV0gXHUwMDNjXHUwMDNjIDkpKTtcdFx0XHQvKiBtb3ZlLmwgI2ltbSwgdG1wICovXG4rXHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuK1xuK1x0c3dpdGNoIChCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpKSB7XG4rXHRjYXNlIEJQRl9COlxuK1x0XHRlbWl0XzE2KGN0eCwgMHgxMTQwIHwgdG1wWzFdKTtcdFx0XHQvKiBtb3ZlLmIgdG1wLCBkMTYoJWEwKSAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgaW5zbi1cdTAwM2VvZmYpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0g6XG4rXHRcdGVtaXRfMTYoY3R4LCAweDMxNDAgfCB0bXBbMV0pO1x0XHRcdC8qIG1vdmUudyB0bXAsIGQxNiglYTApICovXG4rXHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfVzpcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjE0MCB8IHRtcFsxXSk7XHRcdFx0LyogbW92ZS5sIHRtcCwgZDE2KCVhMCkgKi9cbitcdFx0ZW1pdF8xNihjdHgsIGluc24tXHUwMDNlb2ZmKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9EVzpcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjAzYyB8ICh0bXBbMF0gXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZS5sICNpbW0sIHRtcCAqL1xuK1x0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0gXHUwMDNjIDAgPyAweGZmZmZmZmZmIDogMCk7XG4rXG4rXHRcdGVtaXRfMTYoY3R4LCAweDIxNDAgfCB0bXBbMF0pO1x0XHRcdC8qIG1vdmUubCB0bXAsIGQxNiglYTApICovXG4rXHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4rXHRcdGVtaXRfMTYoY3R4LCAweDQxZTgpO1x0XHRcdFx0LyogbGVhIDQoJWEwKSwgJWEwICovXG4rXHRcdGVtaXRfMTYoY3R4LCA0KTtcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjE0MCB8IHRtcFsxXSk7XHRcdFx0LyogbW92ZS5sIHRtcCwgZDE2KCVhMCkgKi9cbitcdFx0ZW1pdF8xNihjdHgsIGluc24tXHUwMDNlb2ZmKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVtaXRfYXRvbWljKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbit7XG4rXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbitcdGNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLVx1MDAzZXNyY19yZWddO1xuK1x0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xuK1xuK1x0aWYgKGlzX3N0YWNrZWQoZHN0WzFdKSkge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDZlKTtcdFx0XHRcdC8qIG1vdmVhLmwgZDE2KCVmcCksICVhMCAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgKHUxNilkc3RbMV0pO1xuK1x0fSBlbHNlIHtcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjA0MCB8IGRzdFsxXSk7XHRcdFx0LyogbW92ZWEubCBkc3QsICVhMCAqL1xuK1x0fVxuK1xuK1x0aWYgKGluc24tXHUwMDNlb2ZmKSB7XG4rXHRcdGVtaXRfMTYoY3R4LCAweDQxZTgpO1x0XHRcdFx0LyogbGVhIGQxNiglYTApLCAlYTAgKi9cbitcdFx0ZW1pdF8xNihjdHgsIGluc24tXHUwMDNlb2ZmKTtcbitcdH1cbitcbitcdGlmIChCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9XKSB7XG4rXHRcdHM4IHNfbG8gPSBicGZfZ2V0X3JlZzMyKHNyY1sxXSwgdG1wMlsxXSwgY3R4KTtcbitcbitcdFx0aWYgKGluc24tXHUwMDNlaW1tICE9IEJQRl9DTVBYQ0hHKSB7XG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NDhlNyk7XHRcdFx0LyogbW92ZW0ubCBkMC1kMSwgLSglc3ApICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4YzAwMCk7XG4rXHRcdH1cbitcbitcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IE02OEtfRDApO1x0XHRcdC8qIG1vdmUubCAlZDAsIC0oJXNwKSAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyZjNjKTtcdFx0XHRcdC8qIG1vdmUubCAjaW1tLCAtKCVzcCkgKi9cbitcdFx0ZW1pdF8zMihjdHgsIGluc24tXHUwMDNlaW1tKTtcbitcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IHNfbG8pO1x0XHRcdC8qIG1vdmUubCBzX2xvLCAtKCVzcCkgKi9cbitcdFx0ZW1pdF8xNihjdHgsIDB4MmYwOCk7XHRcdFx0XHQvKiBtb3ZlLmwgJWEwLCAtKCVzcCkgKi9cbitcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjA3Yyk7XHRcdFx0XHQvKiBtb3ZlYS5sICNmdW5jLCAlYTAgKi9cbitcdFx0ZW1pdF8zMihjdHgsICh1MzIpaml0X2F0b21pYzMyKTtcbitcdFx0ZW1pdF8xNihjdHgsIDB4NGU5MCk7XHRcdFx0XHQvKiBqc3IgKCVhMCkgKi9cbitcbitcdFx0ZW1pdF8xNihjdHgsIDB4NGZlZik7XHRcdFx0XHQvKiBsZWEgMTYoJXNwKSwgJXNwICovXG4rXHRcdGVtaXRfMTYoY3R4LCAxNik7XG4rXG4rXHRcdGlmIChpbnNuLVx1MDAzZWltbSA9PSBCUEZfQ01QWENIRykge1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDcyMDApO1x0XHRcdC8qIG1vdmVxICMwLCAlZDEgKi9cbitcdFx0fSBlbHNlIHtcbitcdFx0XHRib29sIGlzX2ZldGNoID0gKGluc24tXHUwMDNlaW1tIFx1MDAyNiBCUEZfRkVUQ0gpIHx8IGluc24tXHUwMDNlaW1tID09IEJQRl9YQ0hHO1xuK1xuK1x0XHRcdGlmIChpc19mZXRjaClcbitcdFx0XHRcdGVtaXRfMTYoY3R4LCAweDI2MDApO1x0XHQvKiBtb3ZlLmwgJWQwLCAlZDMgKi9cbitcbitcdFx0XHRlbWl0XzE2KGN0eCwgMHg0Y2RmKTtcdFx0XHQvKiBtb3ZlbS5sICglc3ApKywgZDAtZDEgKi9cbitcdFx0XHRlbWl0XzE2KGN0eCwgMHgwMDAzKTtcbitcbitcdFx0XHRpZiAoaXNfZmV0Y2gpIHtcbitcdFx0XHRcdGJwZl9wdXRfcmVnMzIoc3JjWzFdLCBNNjhLX0QzLCBjdHgpO1xuK1x0XHRcdFx0ZW1pdF8xNihjdHgsIDB4NzQwMCk7XHRcdC8qIG1vdmVxICMwLCAlZDIgKi9cbitcdFx0XHRcdGJwZl9wdXRfcmVnMzIoc3JjWzBdLCBNNjhLX0QyLCBjdHgpO1xuK1x0XHRcdH1cbitcdFx0fVxuK1xuK1x0fSBlbHNlIGlmIChCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9EVykge1xuK1x0XHRzOCBzX2xvID0gYnBmX2dldF9yZWczMihzcmNbMV0sIHRtcDJbMV0sIGN0eCk7XG4rXHRcdHM4IHNfaGkgPSBicGZfZ2V0X3JlZzMyKHNyY1swXSwgdG1wMlswXSwgY3R4KTtcbitcbitcdFx0aWYgKGluc24tXHUwMDNlaW1tICE9IEJQRl9DTVBYQ0hHKSB7XG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NDhlNyk7XHRcdFx0LyogbW92ZW0ubCBkMC1kMSwgLSglc3ApICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4YzAwMCk7XG4rXHRcdH1cbitcbitcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IE02OEtfRDApO1x0XHRcdC8qIG1vdmUubCAlZDAsIC0oJXNwKSAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyZjAwIHwgTTY4S19EMSk7XHRcdFx0LyogbW92ZS5sICVkMSwgLSglc3ApICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweDJmM2MpO1x0XHRcdFx0LyogbW92ZS5sICNpbW0sIC0oJXNwKSAqL1xuK1x0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyZjAwIHwgc19sbyk7XHRcdFx0LyogbW92ZS5sIHNfbG8sIC0oJXNwKSAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyZjAwIHwgc19oaSk7XHRcdFx0LyogbW92ZS5sIHNfaGksIC0oJXNwKSAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyZjA4KTtcdFx0XHRcdC8qIG1vdmUubCAlYTAsIC0oJXNwKSAqL1xuK1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDdjKTtcdFx0XHRcdC8qIG1vdmVhLmwgI2Z1bmMsICVhMCAqL1xuK1x0XHRlbWl0XzMyKGN0eCwgKHUzMilqaXRfYXRvbWljNjQpO1xuK1x0XHRlbWl0XzE2KGN0eCwgMHg0ZTkwKTtcdFx0XHRcdC8qIGpzciAoJWEwKSAqL1xuK1xuK1x0XHRlbWl0XzE2KGN0eCwgMHg0ZmVmKTtcdFx0XHRcdC8qIGxlYSAyNCglc3ApLCAlc3AgKi9cbitcdFx0ZW1pdF8xNihjdHgsIDI0KTtcbitcbitcdFx0aWYgKGluc24tXHUwMDNlaW1tID09IEJQRl9DTVBYQ0hHKSB7XG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4YzE0MSk7XHRcdFx0LyogZXhnICVkMCwgJWQxICovXG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0Ym9vbCBpc19mZXRjaCA9IChpbnNuLVx1MDAzZWltbSBcdTAwMjYgQlBGX0ZFVENIKSB8fCBpbnNuLVx1MDAzZWltbSA9PSBCUEZfWENIRztcbitcbitcdFx0XHRpZiAoaXNfZmV0Y2gpIHtcbitcdFx0XHRcdGVtaXRfMTYoY3R4LCAweDI2MDApO1x0XHQvKiBtb3ZlLmwgJWQwLCAlZDMgKi9cbitcdFx0XHRcdGVtaXRfMTYoY3R4LCAweDI0MDEpO1x0XHQvKiBtb3ZlLmwgJWQxLCAlZDIgKi9cbitcdFx0XHR9XG4rXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NGNkZik7XHRcdFx0LyogbW92ZW0ubCAoJXNwKSssIGQwLWQxICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4MDAwMyk7XG4rXG4rXHRcdFx0aWYgKGlzX2ZldGNoKSB7XG4rXHRcdFx0XHRicGZfcHV0X3JlZzMyKHNyY1sxXSwgTTY4S19EMiwgY3R4KTtcbitcdFx0XHRcdGJwZl9wdXRfcmVnMzIoc3JjWzBdLCBNNjhLX0QzLCBjdHgpO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBlbWl0X3RhaWxfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4re1xuK1x0Y29uc3QgczggKnIyID0gYnBmMm02OGtbQlBGX1JFR18yXTtcbitcdGNvbnN0IHM4ICpyMyA9IGJwZjJtNjhrW0JQRl9SRUdfM107XG4rXHRpbnQgam1wX291dF8xLCBqbXBfb3V0XzIsIGptcF9vdXRfMztcbitcbitcdGlmIChpc19zdGFja2VkKHIyWzFdKSkge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDZlKTtcdFx0XHRcdC8qIG1vdmVhLmwgZDE2KCVmcCksICVhMCAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgKHUxNilyMlsxXSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDQwIHwgcjJbMV0pO1x0XHRcdC8qIG1vdmVhLmwgcjIsICVhMCAqL1xuK1x0fVxuK1xuK1x0aWYgKGlzX3N0YWNrZWQocjNbMV0pKSB7XG4rXHRcdGVtaXRfMTYoY3R4LCAweDI0MmUpO1x0XHRcdFx0LyogbW92ZS5sIGQxNiglZnApLCAlZDIgKi9cbitcdFx0ZW1pdF8xNihjdHgsICh1MTYpcjNbMV0pO1xuK1x0fSBlbHNlIHtcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjQwMCB8IHIzWzFdKTtcdFx0XHQvKiBtb3ZlLmwgcjMsICVkMiAqL1xuK1x0fVxuK1xuK1x0ZW1pdF8xNihjdHgsIDB4YjRhOCk7XHRcdFx0XHRcdC8qIGNtcC5sIGQxNiglYTApLCAlZDIgKi9cbitcdGVtaXRfMTYoY3R4LCBvZmZzZXRvZihzdHJ1Y3QgYnBmX2FycmF5LCBtYXAubWF4X2VudHJpZXMpKTtcbitcdGVtaXRfMTYoY3R4LCAweDY0MDApO1x0XHRcdFx0XHQvKiBiY2MudyBqbXBfb3V0XzEgKi9cbitcdGptcF9vdXRfMSA9IGN0eC1cdTAwM2VpZHg7XG4rXHRlbWl0XzE2KGN0eCwgMCk7XG4rXG4rXHRlbWl0XzE2KGN0eCwgMHgyNjJlKTtcdFx0XHRcdFx0LyogbW92ZS5sIGQxNiglZnApLCAlZDMgKi9cbitcdGVtaXRfMTYoY3R4LCAodTE2KVNUQUNLX09GRlNFVChCUEZfVENfTE8pKTtcbitcdGVtaXRfMTYoY3R4LCAweDRhODMpO1x0XHRcdFx0XHQvKiB0c3QubCAlZDMgKi9cbitcdGVtaXRfMTYoY3R4LCAweDY3MDApO1x0XHRcdFx0XHQvKiBiZXEudyBqbXBfb3V0XzIgKi9cbitcdGptcF9vdXRfMiA9IGN0eC1cdTAwM2VpZHg7XG4rXHRlbWl0XzE2KGN0eCwgMCk7XG4rXG4rXHRlbWl0XzE2KGN0eCwgMHg1MzgzKTtcdFx0XHRcdFx0Lyogc3VicS5sICMxLCAlZDMgKi9cbitcdGVtaXRfMTYoY3R4LCAweDJkNDMpO1x0XHRcdFx0XHQvKiBtb3ZlLmwgJWQzLCBkMTYoJWZwKSAqL1xuK1x0ZW1pdF8xNihjdHgsICh1MTYpU1RBQ0tfT0ZGU0VUKEJQRl9UQ19MTykpO1xuK1xuK1x0ZW1pdF8xNihjdHgsIDB4ZDQ4Mik7XHRcdFx0XHRcdC8qIGFkZC5sICVkMiwgJWQyICovXG4rXHRlbWl0XzE2KGN0eCwgMHhkNDgyKTtcdFx0XHRcdFx0LyogYWRkLmwgJWQyLCAlZDIgKi9cbitcdGVtaXRfMTYoY3R4LCAweDQzZTgpO1x0XHRcdFx0XHQvKiBsZWEgZDE2KCVhMCksICVhMSAqL1xuK1x0ZW1pdF8xNihjdHgsIG9mZnNldG9mKHN0cnVjdCBicGZfYXJyYXksIHB0cnMpKTtcbitcdGVtaXRfMTYoY3R4LCAweGQzYzIpO1x0XHRcdFx0XHQvKiBhZGRhLmwgJWQyLCAlYTEgKi9cbitcbitcdGVtaXRfMTYoY3R4LCAweDIwNTEpO1x0XHRcdFx0XHQvKiBtb3ZlYS5sICglYTEpLCAlYTAgKi9cbitcbitcdGVtaXRfMTYoY3R4LCAweDI0MDgpO1x0XHRcdFx0XHQvKiBtb3ZlLmwgJWEwLCAlZDIgKi9cbitcdGVtaXRfMTYoY3R4LCAweDRhODIpO1x0XHRcdFx0XHQvKiB0c3QubCAlZDIgKi9cbitcdGVtaXRfMTYoY3R4LCAweDY3MDApO1x0XHRcdFx0XHQvKiBiZXEudyBqbXBfb3V0XzMgKi9cbitcdGptcF9vdXRfMyA9IGN0eC1cdTAwM2VpZHg7XG4rXHRlbWl0XzE2KGN0eCwgMCk7XG4rXG4rXHRlbWl0XzE2KGN0eCwgMHgyMDY4KTtcdFx0XHRcdFx0LyogbW92ZWEubCBkMTYoJWEwKSwgJWEwICovXG4rXHRlbWl0XzE2KGN0eCwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9wcm9nLCBicGZfZnVuYykpO1xuK1xuK1x0ZW1pdF8xNihjdHgsIDB4NGVlOCk7XHRcdFx0XHRcdC8qIGptcCBkMTYoJWEwKSAqL1xuK1x0ZW1pdF8xNihjdHgsIDQ0KTtcbitcbitcdGlmIChjdHgtXHUwMDNldGFyZ2V0KSB7XG4rXHRcdGN0eC1cdTAwM2V0YXJnZXRbam1wX291dF8xXSA9IChjdHgtXHUwMDNlaWR4IC0gam1wX291dF8xKSAqIDI7XG4rXHRcdGN0eC1cdTAwM2V0YXJnZXRbam1wX291dF8yXSA9IChjdHgtXHUwMDNlaWR4IC0gam1wX291dF8yKSAqIDI7XG4rXHRcdGN0eC1cdTAwM2V0YXJnZXRbam1wX291dF8zXSA9IChjdHgtXHUwMDNlaWR4IC0gam1wX291dF8zKSAqIDI7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgZW1pdF9qbXAoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgY3Vycl9pKVxuK3tcbitcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVx1MDAzZWRzdF9yZWddO1xuK1x0Y29uc3QgczggKnNyYyA9IGJwZjJtNjhrW2luc24tXHUwMDNlc3JjX3JlZ107XG4rXHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4rXHRjb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07XG4rXHRzOCBkX2xvLCBkX2hpID0gMCwgc19sbywgc19oaSA9IDA7XG4rXHRib29sIGlzX2ptcDMyID0gQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0pNUDMyO1xuK1x0dTggb3AgPSBCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKTtcbitcdGludCB0YXJnZXRfaW5zbjtcbitcbitcdGlmIChpc19qbXAzMiBcdTAwMjZcdTAwMjYgb3AgPT0gQlBGX0pBKVxuK1x0XHR0YXJnZXRfaW5zbiA9IGN1cnJfaSArIDEgKyBpbnNuLVx1MDAzZWltbTtcbitcdGVsc2VcbitcdFx0dGFyZ2V0X2luc24gPSBjdXJyX2kgKyAxICsgaW5zbi1cdTAwM2VvZmY7XG4rXG4rXHRpZiAodGFyZ2V0X2luc24gXHUwMDNjIDAgfHwgdGFyZ2V0X2luc24gXHUwMDNlIGN0eC1cdTAwM2Vwcm9nLVx1MDAzZWxlbilcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0I2RlZmluZSBFTUlUX0pNUDMyKG9wX2Jhc2UpIFxcXG4rXHRcdGRvIHsgXFxcbitcdFx0XHRpbnQgZGlzcCA9IChjdHgtXHUwMDNlb2Zmc2V0c1t0YXJnZXRfaW5zbl0gLSAoY3R4LVx1MDAzZWlkeCArIDEpKSAqIDI7IFxcXG4rXHRcdFx0ZW1pdF8xNihjdHgsIChvcF9iYXNlKSB8IDB4MDBmZik7IFxcXG4rXHRcdFx0ZW1pdF8zMihjdHgsIGRpc3ApOyBcXFxuK1x0XHR9IHdoaWxlICgwKVxuK1xuK1x0aWYgKG9wID09IEJQRl9KQSkge1xuK1x0XHRFTUlUX0pNUDMyKDB4NjAwMCk7XHRcdFx0XHQvKiBicmEubCAqL1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcbitcdGlmICghaXNfam1wMzIpXG4rXHRcdGRfaGkgPSBicGZfZ2V0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcbitcbitcdGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1gpIHtcbitcdFx0c19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpO1xuK1x0XHRpZiAoIWlzX2ptcDMyKVxuK1x0XHRcdHNfaGkgPSBicGZfZ2V0X3JlZzMyKHNyY1swXSwgdG1wMlswXSwgY3R4KTtcbitcdH0gZWxzZSB7XG4rXHRcdHNfbG8gPSB0bXAyWzFdO1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHNfbG8gXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZS5sICNpbW0sIHNfbG8gKi9cbitcdFx0ZW1pdF8zMihjdHgsIGluc24tXHUwMDNlaW1tKTtcbitcdFx0aWYgKCFpc19qbXAzMikge1xuK1x0XHRcdHNfaGkgPSB0bXAyWzBdO1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAoc19oaSBcdTAwM2NcdTAwM2MgOSkpO1x0LyogbW92ZS5sICNpbW0sIHNfaGkgKi9cbitcdFx0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0gXHUwMDNjIDAgPyAweGZmZmZmZmZmIDogMCk7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChvcCA9PSBCUEZfSlNFVCkge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKHRtcDFbMV0gXHUwMDNjXHUwMDNjIDkpIHwgZF9sbyk7XHQvKiBtb3ZlLmwgZF9sbywgdG1wMV9sbyAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHhjMDgwIHwgKHRtcDFbMV0gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7XHQvKiBhbmQubCBzX2xvLCB0bXAxX2xvICovXG4rXG4rXHRcdGlmICghaXNfam1wMzIpIHtcbitcdFx0XHRFTUlUX0pNUDMyKDB4NjYwMCk7XHRcdFx0LyogYm5lLmwgKi9cbitcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKHRtcDFbMF0gXHUwMDNjXHUwMDNjIDkpIHwgZF9oaSk7IC8qIG1vdmUubCBkX2hpLCB0bXAxX2hpICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4YzA4MCB8ICh0bXAxWzBdIFx1MDAzY1x1MDAzYyA5KSB8IHNfaGkpOyAvKiBhbmQubCBzX2hpLCB0bXAxX2hpICovXG4rXHRcdH1cbitcdFx0RU1JVF9KTVAzMigweDY2MDApO1x0XHRcdFx0LyogYm5lLmwgKi9cbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZiAoaXNfam1wMzIpIHtcbitcdFx0ZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSB8IHNfbG8pO1x0LyogY21wLmwgc19sbywgZF9sbyAqL1xuK1x0XHRzd2l0Y2ggKG9wKSB7XG4rXHRcdGNhc2UgQlBGX0pFUTpcbitcdFx0XHRFTUlUX0pNUDMyKDB4NjcwMCk7XHRcdFx0LyogYmVxLmwgKi9cbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBCUEZfSk5FOlxuK1x0XHRcdEVNSVRfSk1QMzIoMHg2NjAwKTtcdFx0XHQvKiBibmUubCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEJQRl9KR1Q6XG4rXHRcdFx0RU1JVF9KTVAzMigweDYyMDApO1x0XHRcdC8qIGJoaS5sICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX0pHRTpcbitcdFx0XHRFTUlUX0pNUDMyKDB4NjQwMCk7XHRcdFx0LyogYmNjLmwgKi9cbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBCUEZfSkxUOlxuK1x0XHRcdEVNSVRfSk1QMzIoMHg2NTAwKTtcdFx0XHQvKiBiY3MubCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEJQRl9KTEU6XG4rXHRcdFx0RU1JVF9KTVAzMigweDYzMDApO1x0XHRcdC8qIGJscy5sICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX0pTR1Q6XG4rXHRcdFx0RU1JVF9KTVAzMigweDZlMDApO1x0XHRcdC8qIGJndC5sICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX0pTR0U6XG4rXHRcdFx0RU1JVF9KTVAzMigweDZjMDApO1x0XHRcdC8qIGJnZS5sICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX0pTTFQ6XG4rXHRcdFx0RU1JVF9KTVAzMigweDZkMDApO1x0XHRcdC8qIGJsdC5sICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX0pTTEU6XG4rXHRcdFx0RU1JVF9KTVAzMigweDZmMDApO1x0XHRcdC8qIGJsZS5sICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkgfCBzX2hpKTtcdC8qIGNtcC5sIHNfaGksIGRfaGkgKi9cbitcbitcdFx0c3dpdGNoIChvcCkge1xuK1x0XHRjYXNlIEJQRl9KRVE6XG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NjYwOCk7XHRcdFx0LyogYm5lLnMgLis4ICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSB8IHNfbG8pOyAvKiBjbXAubCBzX2xvLCBkX2xvICovXG4rXHRcdFx0RU1JVF9KTVAzMigweDY3MDApO1x0XHRcdC8qIGJlcS5sICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX0pORTpcbitcdFx0XHRFTUlUX0pNUDMyKDB4NjYwMCk7XHRcdFx0LyogYm5lLmwgKi9cbitcdFx0XHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi9cbitcdFx0XHRFTUlUX0pNUDMyKDB4NjYwMCk7XHRcdFx0LyogYm5lLmwgKi9cbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBCUEZfSkdUOlxuK1x0XHRcdEVNSVRfSk1QMzIoMHg2MjAwKTtcdFx0XHQvKiBiaGkubCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDY1MDgpO1x0XHRcdC8qIGJjcy5zIC4rOCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuK1x0XHRcdEVNSVRfSk1QMzIoMHg2MjAwKTtcdFx0XHQvKiBiaGkubCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEJQRl9KR0U6XG4rXHRcdFx0RU1JVF9KTVAzMigweDYyMDApO1x0XHRcdC8qIGJoaS5sICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NjUwOCk7XHRcdFx0LyogYmNzLnMgLis4ICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSB8IHNfbG8pOyAvKiBjbXAubCBzX2xvLCBkX2xvICovXG4rXHRcdFx0RU1JVF9KTVAzMigweDY0MDApO1x0XHRcdC8qIGJjYy5sICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX0pMVDpcbitcdFx0XHRFTUlUX0pNUDMyKDB4NjUwMCk7XHRcdFx0LyogYmNzLmwgKi9cbitcdFx0XHRlbWl0XzE2KGN0eCwgMHg2MjA4KTtcdFx0XHQvKiBiaGkucyAuKzggKi9cbitcdFx0XHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi9cbitcdFx0XHRFTUlUX0pNUDMyKDB4NjUwMCk7XHRcdFx0LyogYmNzLmwgKi9cbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBCUEZfSkxFOlxuK1x0XHRcdEVNSVRfSk1QMzIoMHg2NTAwKTtcdFx0XHQvKiBiY3MubCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDYyMDgpO1x0XHRcdC8qIGJoaS5zIC4rOCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuK1x0XHRcdEVNSVRfSk1QMzIoMHg2MzAwKTtcdFx0XHQvKiBibHMubCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEJQRl9KU0dUOlxuK1x0XHRcdEVNSVRfSk1QMzIoMHg2ZTAwKTtcdFx0XHQvKiBiZ3QubCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDZkMDgpO1x0XHRcdC8qIGJsdC5zIC4rOCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuK1x0XHRcdEVNSVRfSk1QMzIoMHg2MjAwKTtcdFx0XHQvKiBiaGkubCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEJQRl9KU0dFOlxuK1x0XHRcdEVNSVRfSk1QMzIoMHg2ZTAwKTtcdFx0XHQvKiBiZ3QubCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDZkMDgpO1x0XHRcdC8qIGJsdC5zIC4rOCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuK1x0XHRcdEVNSVRfSk1QMzIoMHg2NDAwKTtcdFx0XHQvKiBiY2MubCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEJQRl9KU0xUOlxuK1x0XHRcdEVNSVRfSk1QMzIoMHg2ZDAwKTtcdFx0XHQvKiBibHQubCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDZlMDgpO1x0XHRcdC8qIGJndC5zIC4rOCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuK1x0XHRcdEVNSVRfSk1QMzIoMHg2NTAwKTtcdFx0XHQvKiBiY3MubCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEJQRl9KU0xFOlxuK1x0XHRcdEVNSVRfSk1QMzIoMHg2ZDAwKTtcdFx0XHQvKiBibHQubCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDZlMDgpO1x0XHRcdC8qIGJndC5zIC4rOCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuK1x0XHRcdEVNSVRfSk1QMzIoMHg2MzAwKTtcdFx0XHQvKiBibHMubCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXHQjdW5kZWYgRU1JVF9KTVAzMlxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZW1pdF9jYWxsKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbit7XG4rXHRjb25zdCBzOCBhcmdfcmVnc1tdID0geyBCUEZfUkVHXzUsIEJQRl9SRUdfNCwgQlBGX1JFR18zLCBCUEZfUkVHXzIsIEJQRl9SRUdfMSB9O1xuK1x0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xuK1x0Ym9vbCBleHRyYV9wYXNzID0gY3R4LVx1MDAzZXByb2ctXHUwMDNlaml0ZWQ7XG4rXHR1NjQgZnVuY19hZGRyO1xuK1x0Ym9vbCBmaXhlZDtcbitcdGludCBpLCBlcnI7XG4rXG4rXHRlcnIgPSBicGZfaml0X2dldF9mdW5jX2FkZHIoY3R4LVx1MDAzZXByb2csIGluc24sIGV4dHJhX3Bhc3MsIFx1MDAyNmZ1bmNfYWRkciwgXHUwMDI2Zml4ZWQpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDU7IGkrKykge1xuK1x0XHRjb25zdCBzOCAqcmVnID0gYnBmMm02OGtbYXJnX3JlZ3NbaV1dO1xuK1x0XHRzOCBkX2xvID0gYnBmX2dldF9yZWczMihyZWdbMV0sIHRtcDFbMV0sIGN0eCk7XG4rXHRcdHM4IGRfaGkgPSBicGZfZ2V0X3JlZzMyKHJlZ1swXSwgdG1wMVswXSwgY3R4KTtcbitcbitcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IGRfbG8pO1x0XHRcdC8qIG1vdmUubCBkX2xvLCAtKCVzcCkgKi9cbitcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IGRfaGkpO1x0XHRcdC8qIG1vdmUubCBkX2hpLCAtKCVzcCkgKi9cbitcdH1cbitcbitcdGVtaXRfMTYoY3R4LCAweDIwN2MpO1x0XHRcdFx0XHQvKiBtb3ZlYS5sICNmdW5jX2FkZHIsICVhMCAqL1xuK1x0ZW1pdF8zMihjdHgsICh1MzIpZnVuY19hZGRyKTtcbitcbitcdGVtaXRfMTYoY3R4LCAweDRlOTApO1x0XHRcdFx0XHQvKiBqc3IgKCVhMCkgKi9cbitcbitcdGVtaXRfMTYoY3R4LCAweDRmZWYpO1x0XHRcdFx0XHQvKiBsZWEgNDAoJXNwKSwgJXNwICovXG4rXHRlbWl0XzE2KGN0eCwgNDApO1xuK1xuK1x0aWYgKGluc24tXHUwMDNlc3JjX3JlZyAhPSBCUEZfUFNFVURPX0NBTEwpXG4rXHRcdGVtaXRfMTYoY3R4LCAweGMzNDApO1x0XHRcdFx0XHQvKiBleGcgJWQwLCAlZDEgKi9cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBidWlsZF9wcm9sb2d1ZShzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuK3tcbitcdGludCBicGZfc3RhY2sgPSBNQVhfQlBGX1NUQUNLO1xuK1x0aW50IHRvdGFsX3N0YWNrID0gU0NSQVRDSF9TSVpFICsgYnBmX3N0YWNrO1xuK1x0aW50IGk7XG4rXG4rXHRlbWl0XzE2KGN0eCwgMHg3MDIxKTtcdFx0XHRcdFx0LyogbW92ZXEgIzMzLCAlZDAgKi9cbitcbitcdGVtaXRfMTYoY3R4LCAweDRlNTYpO1x0XHRcdFx0XHQvKiBsaW5rICVhNiwgIy10b3RhbF9zdGFjayAqL1xuK1x0ZW1pdF8xNihjdHgsIC10b3RhbF9zdGFjayk7XG4rXG4rXHRlbWl0XzE2KGN0eCwgMHg0OGU3KTtcdFx0XHRcdFx0LyogbW92ZW0ubCBkMi1kNSwgLSglc3ApICovXG4rXHRlbWl0XzE2KGN0eCwgMHgzYzAwKTtcbitcbitcdGVtaXRfMTYoY3R4LCAweDJkNDApO1x0XHRcdFx0XHQvKiBtb3ZlLmwgJWQwLCBvZmYoJWZwKSAqL1xuK1x0ZW1pdF8xNihjdHgsICh1MTYpU1RBQ0tfT0ZGU0VUKEJQRl9UQ19MTykpO1xuK1xuK1x0aWYgKGN0eC1cdTAwM2Vwcm9nLVx1MDAzZWlzX2Z1bmMpIHtcbitcdFx0Y29uc3QgczggYXJnX3JlZ3NbXSA9IHsgQlBGX1JFR18xLCBCUEZfUkVHXzIsIEJQRl9SRUdfMywgQlBGX1JFR180LCBCUEZfUkVHXzUgfTtcbitcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgNTsgaSsrKSB7XG4rXHRcdFx0aW50IG9mZnNldCA9IDggKyBpICogODtcbitcdFx0XHRjb25zdCBzOCAqcmVnID0gYnBmMm02OGtbYXJnX3JlZ3NbaV1dO1xuK1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDIwMmUpOyAvKiBtb3ZlLmwgb2Zmc2V0KCVmcCksICVkMCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCBvZmZzZXQpO1xuK1x0XHRcdGJwZl9wdXRfcmVnMzIocmVnWzBdLCBNNjhLX0QwLCBjdHgpO1xuK1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDIwMmUpOyAvKiBtb3ZlLmwgb2Zmc2V0KzQoJWZwKSwgJWQwICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIG9mZnNldCArIDQpO1xuK1x0XHRcdGJwZl9wdXRfcmVnMzIocmVnWzFdLCBNNjhLX0QwLCBjdHgpO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDJlKTtcdFx0XHRcdC8qIG1vdmUubCA4KCVmcCksICVkMCAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgOCk7XG4rXHRcdGJwZl9wdXRfcmVnMzIoYnBmMm02OGtbQlBGX1JFR18xXVsxXSwgTTY4S19EMCwgY3R4KTtcbitcbitcdFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChNNjhLX0QwIFx1MDAzY1x1MDAzYyA5KSk7XHRcdFx0LyogbW92ZXEgIzAsICVkMCAqL1xuK1x0XHRicGZfcHV0X3JlZzMyKGJwZjJtNjhrW0JQRl9SRUdfMV1bMF0sIE02OEtfRDAsIGN0eCk7XG4rXHR9XG4rXG4rXHRlbWl0XzE2KGN0eCwgMHg0MWVlKTtcdFx0XHRcdFx0LyogbGVhIC1TQ1JBVENIX1NJWkUoJWZwKSwgJWEwICovXG4rXHRlbWl0XzE2KGN0eCwgLVNDUkFUQ0hfU0laRSk7XG4rXHRlbWl0XzE2KGN0eCwgMHgyMDA4KTtcdFx0XHRcdFx0LyogbW92ZS5sICVhMCwgJWQwICovXG4rXG4rXHRicGZfcHV0X3JlZzMyKGJwZjJtNjhrW0JQRl9SRUdfMTBdWzFdLCBNNjhLX0QwLCBjdHgpO1xuK1x0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChNNjhLX0QwIFx1MDAzY1x1MDAzYyA5KSk7XHRcdFx0LyogbW92ZXEgIzAsICVkMCAqL1xuK1x0YnBmX3B1dF9yZWczMihicGYybTY4a1tCUEZfUkVHXzEwXVswXSwgTTY4S19EMCwgY3R4KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnVpbGRfZXBpbG9ndWUoc3RydWN0IGppdF9jdHggKmN0eClcbit7XG4rXHRlbWl0XzE2KGN0eCwgMHg0Y2RmKTtcdFx0XHRcdFx0LyogbW92ZW0ubCAoJXNwKSssIGQyLWQ1ICovXG4rXHRlbWl0XzE2KGN0eCwgMHgwMDNjKTtcbitcbitcdGVtaXRfMTYoY3R4LCAweDRlNWUpO1x0XHRcdFx0XHQvKiB1bmxrICVmcCAqL1xuK1x0ZW1pdF8xNihjdHgsIDB4NGU3NSk7XHRcdFx0XHRcdC8qIHJ0cyAqL1xuK31cbitcbitzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgaSlcbit7XG4rXHR1OCBjb2RlID0gaW5zbi1cdTAwM2Vjb2RlO1xuK1xuK1x0c3dpdGNoIChjb2RlKSB7XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfTkVHOlxuK1x0XHRlbWl0X2FsdTMyX25lZyhpbnNuLCBjdHgpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX05FRzpcbitcdFx0ZW1pdF9hbHU2NF9uZWcoaW5zbiwgY3R4KTtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfQUREIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfU1VCIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfQU5EIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfT1IgIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfWE9SIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfTFNIIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfUlNIIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfQVJTSCB8IEJQRl9YOlxuK1x0XHRlbWl0X2FsdTMyX3goaW5zbiwgY3R4KTtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfQUREIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfU1VCIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfQU5EIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfT1IgIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfWE9SIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfTFNIIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfUlNIIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfQVJTSCB8IEJQRl9LOlxuK1x0XHRlbWl0X2FsdTMyX2soaW5zbiwgY3R4KTtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWDpcbitcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0FERCB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfU1VCIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9BTkQgfCBCUEZfWDpcbitcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX09SICB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfWE9SIHwgQlBGX1g6XG4rXHRcdGVtaXRfYWx1NjRfeChpbnNuLCBjdHgpO1xuK1x0XHRicmVhaztcbitcbitcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfQUREIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9TVUIgfCBCUEZfSzpcbitcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0FORCB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfT1IgIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9YT1IgfCBCUEZfSzpcbitcdFx0ZW1pdF9hbHU2NF9rKGluc24sIGN0eCk7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTFNIIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9SU0ggfCBCUEZfWDpcbitcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0FSU0ggfCBCUEZfWDpcbitcdFx0ZW1pdF9hbHU2NF9zaGlmdChpbnNuLCBjdHgsIGZhbHNlKTtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9MU0ggfCBCUEZfSzpcbitcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX1JTSCB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfQVJTSCB8IEJQRl9LOlxuK1x0XHRlbWl0X2FsdTY0X3NoaWZ0KGluc24sIGN0eCwgdHJ1ZSk7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBCUEZfQUxVIHwgQlBGX01VTCB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfQUxVIHwgQlBGX0RJViB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfQUxVIHwgQlBGX01PRCB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfQUxVIHwgQlBGX01VTCB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfQUxVIHwgQlBGX0RJViB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfQUxVIHwgQlBGX01PRCB8IEJQRl9LOlxuK1x0XHRlbWl0X21hdGhfY2FsbChpbnNuLCBjdHgsIGZhbHNlKTtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NVUwgfCBCUEZfWDpcbitcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0RJViB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9EIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NVUwgfCBCUEZfSzpcbitcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0RJViB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9EIHwgQlBGX0s6XG4rXHRcdGVtaXRfbWF0aF9jYWxsKGluc24sIGN0eCwgdHJ1ZSk7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBCUEZfQUxVIHwgQlBGX0VORCB8IEJQRl9UT19CRTpcbitcdGNhc2UgQlBGX0FMVSB8IEJQRl9FTkQgfCBCUEZfVE9fTEU6XG4rXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9FTkQgfCBCUEZfVE9fQkU6XG4rXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9FTkQgfCBCUEZfVE9fTEU6XG4rXHRcdGVtaXRfYnBmX2VuZChpbnNuLCBjdHgpO1xuK1x0XHRicmVhaztcbitcbitcdGNhc2UgQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVzoge1xuK1x0XHRjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24xID0gaW5zbiArIDE7XG4rXHRcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVx1MDAzZWRzdF9yZWddO1xuK1x0XHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4rXHRcdHM4IGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcbitcdFx0czggZF9oaSA9IGJwZl9nZXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpO1xuK1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpKTtcdFx0XHQvKiBtb3ZlLmwgI2ltbSwgZF9sbyAqL1xuK1x0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpKTtcdFx0XHQvKiBtb3ZlLmwgI2ltbSwgZF9oaSAqL1xuK1x0XHRlbWl0XzMyKGN0eCwgaW5zbjEtXHUwMDNlaW1tKTtcbitcbitcdFx0YnBmX3B1dF9yZWczMihkc3RbMV0sIGRfbG8sIGN0eCk7XG4rXHRcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfQjpcbitcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfSDpcbitcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfVzpcbitcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfRFc6XG4rXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfQjpcbitcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9IOlxuK1x0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX1c6XG4rXHRcdGVtaXRfbGR4KGluc24sIGN0eCk7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9COlxuK1x0Y2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9IOlxuK1x0Y2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9XOlxuK1x0Y2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9EVzpcbitcdFx0ZW1pdF9zdHgoaW5zbiwgY3R4KTtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfQjpcbitcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9IOlxuK1x0Y2FzZSBCUEZfU1QgfCBCUEZfTUVNIHwgQlBGX1c6XG4rXHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfRFc6XG4rXHRcdGVtaXRfc3QoaW5zbiwgY3R4KTtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1c6XG4rXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0RXOlxuK1x0XHRlbWl0X2F0b21pYyhpbnNuLCBjdHgpO1xuK1x0XHRicmVhaztcbitcbitcdGNhc2UgQlBGX0pNUCB8IEJQRl9UQUlMX0NBTEw6XG4rXHRcdGVtaXRfdGFpbF9jYWxsKGluc24sIGN0eCk7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0pBOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSkE6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkVRIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkVRIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSk5FIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSk5FIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkdUIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkdUIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkdFIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkdFIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkxUIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkxUIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkxFIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkxFIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSlNHVCB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0pTR1QgfCBCUEZfSzpcbitcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0dFIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSlNHRSB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0pTTFQgfCBCUEZfWDpcbitcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0xUIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSlNMRSB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0pTTEUgfCBCUEZfSzpcbitcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0VUIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSlNFVCB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSkVRIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KRVEgfCBCUEZfSzpcbitcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pORSB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSk5FIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KR1QgfCBCUEZfWDpcbitcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pHVCB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSkdFIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KR0UgfCBCUEZfSzpcbitcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pMVCB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSkxUIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KTEUgfCBCUEZfWDpcbitcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pMRSB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNHVCB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNHVCB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNHRSB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNHRSB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNMVCB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNMVCB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNMRSB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNMRSB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNFVCB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNFVCB8IEJQRl9LOlxuK1x0XHRyZXR1cm4gZW1pdF9qbXAoaW5zbiwgY3R4LCBpKTtcbitcbitcdGNhc2UgQlBGX0pNUCB8IEJQRl9DQUxMOlxuK1x0XHRyZXR1cm4gZW1pdF9jYWxsKGluc24sIGN0eCk7XG4rXG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfRVhJVDpcbitcdFx0YnVpbGRfZXBpbG9ndWUoY3R4KTtcbitcdFx0YnJlYWs7XG4rXG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBidWlsZF9ib2R5KHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nID0gY3R4LVx1MDAzZXByb2c7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByb2ctXHUwMDNlbGVuOyBpKyspIHtcbitcdFx0Y29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuID0gXHUwMDI2cHJvZy1cdTAwM2VpbnNuc2lbaV07XG4rXHRcdGludCByZXQ7XG4rXG4rXHRcdGlmICghY3R4LVx1MDAzZXRhcmdldClcbitcdFx0XHRjdHgtXHUwMDNlb2Zmc2V0c1tpXSA9IGN0eC1cdTAwM2VpZHg7XG4rXG4rXHRcdHJldCA9IGJ1aWxkX2luc24oaW5zbiwgY3R4LCBpKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRpZiAoaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfTEQgfCBCUEZfSU1NIHwgQlBGX0RXKSkge1xuK1x0XHRcdGkrKztcbitcdFx0XHRpZiAoIWN0eC1cdTAwM2V0YXJnZXQpXG4rXHRcdFx0XHRjdHgtXHUwMDNlb2Zmc2V0c1tpXSA9IGN0eC1cdTAwM2VpZHg7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmICghY3R4LVx1MDAzZXRhcmdldClcbitcdFx0Y3R4LVx1MDAzZW9mZnNldHNbcHJvZy1cdTAwM2VsZW5dID0gY3R4LVx1MDAzZWlkeDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitib29sIGJwZl9qaXRfbmVlZHNfemV4dCh2b2lkKVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgdm9pZCBqaXRfZmlsbF9ob2xlKHZvaWQgKmFyZWEsIHVuc2lnbmVkIGludCBzaXplKVxuK3tcbitcdHUxNiAqcHRyO1xuK1xuK1x0Zm9yIChwdHIgPSBhcmVhOyBzaXplIFx1MDAzZT0gMjsgc2l6ZSAtPSAyKVxuK1x0XHQqcHRyKysgPSAweDRhZmM7XG4rfVxuK1xuK3N0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4re1xuK1x0c3RydWN0IGJwZl9iaW5hcnlfaGVhZGVyICpoZWFkZXI7XG4rXHRzdHJ1Y3Qgaml0X2N0eCBjdHg7XG4rXHR1bnNpZ25lZCBpbnQgaW1hZ2Vfc2l6ZTtcbitcdHU4ICppbWFnZV9wdHI7XG4rXHRib29sIGV4dHJhX3Bhc3MgPSBwcm9nLVx1MDAzZWppdGVkO1xuK1xuK1x0aWYgKCFwcm9nLVx1MDAzZWppdF9yZXF1ZXN0ZWQpXG4rXHRcdHJldHVybiBwcm9nO1xuK1xuK1x0aWYgKHByb2ctXHUwMDNlaml0ZWQgXHUwMDI2XHUwMDI2ICFwcm9nLVx1MDAzZWF1eC1cdTAwM2VmdW5jKVxuK1x0XHRyZXR1cm4gcHJvZztcbitcbitcdG1lbXNldChcdTAwMjZjdHgsIDAsIHNpemVvZihjdHgpKTtcbitcdGN0eC5wcm9nID0gcHJvZztcbitcbitcdGN0eC5vZmZzZXRzID0ga3ZjYWxsb2MocHJvZy1cdTAwM2VsZW4gKyAxLCBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWN0eC5vZmZzZXRzKVxuK1x0XHRyZXR1cm4gcHJvZztcbitcbitcdGJ1aWxkX3Byb2xvZ3VlKFx1MDAyNmN0eCk7XG4rXHRpZiAoYnVpbGRfYm9keShcdTAwMjZjdHgpIFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dF9vZmY7XG4rXHRidWlsZF9lcGlsb2d1ZShcdTAwMjZjdHgpO1xuK1xuK1x0aWYgKGV4dHJhX3Bhc3MpIHtcbitcdFx0aGVhZGVyID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlaml0X2RhdGE7XG4rXHRcdGltYWdlX3B0ciA9ICh1OCAqKXByb2ctXHUwMDNlYnBmX2Z1bmM7XG4rXHRcdGltYWdlX3NpemUgPSBwcm9nLVx1MDAzZWppdGVkX2xlbjtcbitcdH0gZWxzZSB7XG4rXHRcdGltYWdlX3NpemUgPSBjdHguaWR4ICogMjtcbitcdFx0aGVhZGVyID0gYnBmX2ppdF9iaW5hcnlfYWxsb2MoaW1hZ2Vfc2l6ZSwgXHUwMDI2aW1hZ2VfcHRyLCAyLCBqaXRfZmlsbF9ob2xlKTtcbitcdFx0aWYgKCFoZWFkZXIpXG4rXHRcdFx0Z290byBvdXRfb2ZmO1xuK1x0XHRwcm9nLVx1MDAzZWF1eC1cdTAwM2VqaXRfZGF0YSA9IGhlYWRlcjtcbitcdH1cbitcbitcdGN0eC50YXJnZXQgPSAodTE2ICopaW1hZ2VfcHRyO1xuK1x0Y3R4LmlkeCA9IDA7XG4rXG4rXHRidWlsZF9wcm9sb2d1ZShcdTAwMjZjdHgpO1xuK1x0aWYgKGJ1aWxkX2JvZHkoXHUwMDI2Y3R4KSBcdTAwM2MgMCkge1xuK1x0XHRicGZfaml0X2JpbmFyeV9mcmVlKGhlYWRlcik7XG4rXHRcdHByb2ctXHUwMDNlYXV4LVx1MDAzZWppdF9kYXRhID0gTlVMTDtcbitcdFx0cHJvZy1cdTAwM2VicGZfZnVuYyA9IE5VTEw7XG4rXHRcdHByb2ctXHUwMDNlaml0ZWQgPSAwO1xuK1x0XHRwcm9nLVx1MDAzZWppdGVkX2xlbiA9IDA7XG4rXHRcdGdvdG8gb3V0X29mZjtcbitcdH1cbitcdGJ1aWxkX2VwaWxvZ3VlKFx1MDAyNmN0eCk7XG4rXG4rXHRmbHVzaF9pY2FjaGVfcmFuZ2UoKHUzMiloZWFkZXIsICh1MzIpKGN0eC50YXJnZXQgKyBjdHguaWR4KSk7XG4rXG4rXHRpZiAoYnBmX2ppdF9lbmFibGUgXHUwMDNlIDEpXG4rXHRcdGJwZl9qaXRfZHVtcChwcm9nLVx1MDAzZWxlbiwgaW1hZ2Vfc2l6ZSwgMiwgY3R4LnRhcmdldCk7XG4rXG4rXHRpZiAoKCFwcm9nLVx1MDAzZWF1eC1cdTAwM2VmdW5jIHx8IGV4dHJhX3Bhc3MpIFx1MDAyNlx1MDAyNiBicGZfaml0X2JpbmFyeV9sb2NrX3JvKGhlYWRlcikpIHtcbitcdFx0YnBmX2ppdF9iaW5hcnlfZnJlZShoZWFkZXIpO1xuK1x0XHRwcm9nLVx1MDAzZWJwZl9mdW5jID0gTlVMTDtcbitcdFx0cHJvZy1cdTAwM2VqaXRlZCA9IDA7XG4rXHRcdHByb2ctXHUwMDNlaml0ZWRfbGVuID0gMDtcbitcdFx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlaml0X2RhdGEgPSBOVUxMO1xuK1x0XHRnb3RvIG91dF9vZmY7XG4rXHR9XG4rXG4rXHRwcm9nLVx1MDAzZWJwZl9mdW5jID0gKHZvaWQgKiljdHgudGFyZ2V0O1xuK1x0cHJvZy1cdTAwM2VqaXRlZCA9IDE7XG4rXHRwcm9nLVx1MDAzZWppdGVkX2xlbiA9IGltYWdlX3NpemU7XG4rXG4rb3V0X29mZjpcbitcdGt2ZnJlZShjdHgub2Zmc2V0cyk7XG4rXHRyZXR1cm4gcHJvZztcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNDo1MDowOC4xMzQ4MTc5NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NDk0NjM1MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHkgb2YgbTY4ayBCUEYgSklUIENvbXBpbGVyIFBhdGNoKipcblxuT2theSwgc28gd2UgaGF2ZSBhIHBhdGNoIGludHJvZHVjaW5nIGEgQlBGIEpJVCBjb21waWxlciBzcGVjaWZpY2FsbHkgZm9yIHRoZSBtNjhrIGFyY2hpdGVjdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkNhbiB3ZSBldmVuIGZ1enogdGhpcz9cIiBNeSBrbm93bGVkZ2UgdGVsbHMgbWUgdGhhdCBtNjhrIGlzbid0IGEgKnN0YW5kYXJkKiB0YXJnZXQgZm9yIGZ1enppbmcgd2l0aGluIHRoZSB1c3VhbCBzeXprYWxsZXIgc2V0dXBzLCB3aGljaCBsZWFuIHRvd2FyZHMgYXJjaGl0ZWN0dXJlcyBsaWtlIHg4Nl82NCwgYXJtNjQsIGV0Yy4gSG93ZXZlciwgbGV0J3Mgbm90IGp1bXAgdG8gY29uY2x1c2lvbnMuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGV4Y2x1ZGVzIHRoaW5ncyB0aGF0IGNhbid0IGJlIHJlYWNoZWQgaW4gUUVNVSwgYW5kIFFFTVUgKmRvZXMqIHN1cHBvcnQgbTY4ay4gVGhhdCdzIGEga2V5IHBvaW50LlxuXG5UaGUgcGF0Y2ggbW9kaWZpZXMgYE1BSU5UQUlORVJTYCwgYEtidWlsZGAsIGBLY29uZmlnYCwgYE1ha2VmaWxlYCwgYW5kIGludHJvZHVjZXMgYGJwZl9qaXRfY29tcC5jYCwgd2hpY2ggaXMgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24uIFRoaXMgbmV3IGZpbGUgaW1wbGVtZW50cyB0aGUgYWN0dWFsIEJQRiBKSVQgY29tcGlsZXIgZm9yIG02OGsuIE5vdywgaXMgdGhpcyBjb2RlIHJlYWNoYWJsZT8gVGhlIGltcG9ydGFudCB0aGluZyBpczogKklzIGl0IHBvc3NpYmxlIHRvIHJlYWNoIHRoZSBwYXRjaGVkIGNvZGU/KlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpdCBpbXBsZW1lbnRzIGBicGZfaW50X2ppdF9jb21waWxlYC4gIFRoYXQncyB0aGUgZW50cnkgcG9pbnQ7IHRoZSBwcm9tcHQgc2F5cyB0byBsb29rIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgbm90IHN0YXRpYy4gVGhlIGBNYWtlZmlsZWAgY29uZmlybXMgdGhhdCBgQ09ORklHX0JQRl9KSVRgIGlzIG5lY2Vzc2FyeS4gTm93IEkgbmVlZCB0byBjb25maXJtIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyBhbiBBUEkgZW50cnkgcG9pbnQsIHNvIEknbSBzdXJlIG9mIHdoYXQgdG8gZW5hYmxlLiBUaGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIGNvcmUgQlBGIHN1YnN5c3RlbS4gV2hlbiBhIEJQRiBwcm9ncmFtIGlzIGxvYWRlZCBhbmQgSklUIGlzIGVuYWJsZWQsIGl0J3MgY2FsbGVkLiBUaGlzIG1lYW5zIHRoYXQsIGFzc3VtaW5nIHRoZSBjb25maWcgaXMgZW5hYmxlZCwgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHRyaWdnZXIgdGhlIG5ldyBjb2RlLlxuXG5UaGUgcHJvbXB0IGd1aWRlcyBtZSB0b3dhcmQgYSBcIldvcnRoRnV6emluZ1wiIGRlY2lzaW9uLiAgU2luY2UgaXQncyBtNjhrLXNwZWNpZmljLCBhbmQgbTY4ayAqaXMqIGVtdWxhYmxlIGluIFFFTVUsIHRoZSBjb2RlICpzaG91bGQqIGJlIHJlYWNoYWJsZSB1bmRlciBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGlzIHN1Z2dlc3RzIGZ1enppbmcgaXMgKnBvc3NpYmxlKi4gVGhlIGluc3RydWN0aW9ucyBzYXkgXCJpZiB0aGUgY29kZSBpcyByZWFjaGFibGUgaW4gUUVNVSwgcmV0dXJuIFdvcnRoRnV6emluZz10cnVlXCIuIEl0J3Mgbm90IGV4Y2x1ZGVkIGFuZCBpcyBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmVhdHVyZSBpbiBhbiBhcmNoaXRlY3R1cmUgc3VwcG9ydGVkIGJ5IFFFTVUuXG5cblNvLCBsZXQgbWUgZXh0cmFjdCB0aGUgY29uZmlnIHJlcXVpcmVtZW50cy4gVGhlIGBNYWtlZmlsZWAgc2hvd3MgYENPTkZJR19CUEZfSklUYCBpcyBuZWVkZWQuIGBIQVZFX0VCUEZfSklUYCBpcyBhbHNvIHNlbGVjdGVkIGlmIG5vdCBgQ09MREZJUkVgIG9yIGBNNjgwMDBgLCBiYXNlZCBvbiB0aGUgYEtjb25maWdgLiBUaGVyZWZvcmUsIEkgbXVzdCBlbmFibGUgYEJQRl9KSVRgLlxuXG5JIGNvbmZpcm0gYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIHRoYXQgYGJwZl9qaXRfbmVlZHNfemV4dGAgaXMgdGhlIG9ubHkgZnVuY3Rpb24gbm90IHN0YXRpYywgYXBhcnQgZnJvbSBgYnBmX2ludF9qaXRfY29tcGlsZWAuXG5cblRoZSBjb25jbHVzaW9uIGlzLCBpdCBpcyBmZWFzaWJsZSB0byBmdXp6LCBhbmQgSSB3b3VsZCBub3cgbW92ZSBvbiB0byBjb25maXJtaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHJ1bm5pbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgdGVzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODUwLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA0OjUwOjIyLjYyOTQ1OTY0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODAwODE5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYz0xNTQ5PXN0YXRpYyB2b2lkIGppdF9maWxsX2hvbGUodm9pZCAqYXJlYSwgdW5zaWduZWQgaW50IHNpemUpXFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE1NTYtXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxNTU3OnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNTU4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDQ6NTA6MjIuNzE3NDc1MjU0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyMjQzMDEzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgSklUIENvbXBpbGVyIFN5bWJvbHMqKlxuXG5BbHJpZ2h0LCBzbyBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXNuJ3Qgc3RhdGljLiBUaGF0J3MgZ29vZCB0byBrbm93LCBjb25maXJtaW5nIG15IGluaXRpYWwgaHVuY2guIEJ1dCBub3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3aGF0IGFib3V0IGBicGZfaml0X25lZWRzX3pleHRgPyBJcyB0aGF0IHN0YXRpYyBvciBub3Q/IFRoZSBhbnN3ZXIgdG8gdGhhdCB3aWxsIGhhdmUgaW1wbGljYXRpb25zIGZvciB0aGUgSklUIGNvbXBpbGVyIGltcGxlbWVudGF0aW9uIGFuZCBob3cgbW9kdWxhciB0aGluZ3MgYXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdmlzaWJpbGl0eSBvZiB0aGF0IHN5bWJvbCB0byBlbnN1cmUgcHJvcGVyIGxpbmtpbmcgYW5kIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiB3aXRoIG90aGVyIEJQRiBjb21wb25lbnRzLiBJdCdzIGEga2V5IHBpZWNlIGluIHRoZSBwdXp6bGUsIGFuZCBJIG5lZWQgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwODczLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDQ6NTA6MjUuOTM5OTA5ODg3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTk5ODA3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X25lZWRzX3pleHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jPTE1MTU9c3RhdGljIGludCBidWlsZF9ib2R5KHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE1NDMtXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxNTQ0OmJvb2wgYnBmX2ppdF9uZWVkc196ZXh0KHZvaWQpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNTQ1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDQ6NTA6MjYuMDQxOTE3NDg1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0MTgxOTIyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBGdW5jdGlvbiBTY29wZSBpbiBCUEYgSklUKipcblxuUmlnaHQsIHNvIEknbSByZXZpc2l0aW5nIHRoZSBCUEYgSklUIGNvZGUgYW5kIHRha2luZyBhIGNsb3NlciBsb29rIGF0IGZ1bmN0aW9uIHNjb3BlLiBJIHNlZSB0aGF0IGBicGZfaml0X25lZWRzX3pleHRgIGlzICphbHNvKiBkZWNsYXJlZCBub24tc3RhdGljLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24sIHdvcnRoIG5vdGluZy4gTm93LCB0aGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBwb3BzIGludG8gbXkgaGVhZCBpczogYXJlIHRoZXJlICphbnkqIG90aGVyIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBjb2RlIGJhc2UgdGhhdCBhcmVuJ3QgZGVjbGFyZWQgYXMgc3RhdGljPyBJdOKAmXMgYSBnb29kIHByYWN0aWNlIHRvIGRlY2xhcmUgZnVuY3Rpb25zIHN0YXRpYyB3aGVuIHBvc3NpYmxlLCB0byBhdm9pZCBpbmFkdmVydGVudCBleHRlcm5hbCBsaW5rYWdlIGFuZCByZWR1Y2UgdGhlIGNoYW5jZXMgb2YgbmFtZSBjb2xsaXNpb25zIGluIGxhcmdlciBwcm9qZWN0cy4gSWRlbnRpZnlpbmcgKmFsbCogc3VjaCBub24tc3RhdGljIGZ1bmN0aW9ucyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBvciB0aG9zZSBhcmVhcyB3aGVyZSBleHRlcm5hbCBsaW5rYWdlIG1pZ2h0IGJlIGludGVudGlvbmFsLiBJIG5lZWQgdG8gbWFrZSBhIHRob3JvdWdoIHBhc3MgdGhyb3VnaCB0aGUgc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI0MCwiT3V0cHV0VG9rZW5zIjo4MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA0OjUwOjMwLjM4Mzc0MDEyMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTE5OTU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFxzK1xcXFwqKlthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxccypcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM9MTUxNT1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGppdF9jdHggKmN0eClcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTU0My1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjE1NDQ6Ym9vbCBicGZfaml0X25lZWRzX3pleHQodm9pZClcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE1NDUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNDo1MDozMC40NDg5NDYzOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjgxNTQ3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemluZyB0aGVtIGZyb20gYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUsIGFzc3VtaW5nIEknbSBhbHJlYWR5IGRlZXAgaW4gdGhpcyBjb2RlOlxuXG4qKlJlZ2V4IFNuYWZ1IGFuZCBhIFF1aWNrIEZpeCoqXG5cblJpZ2h0LCBkYW1uIGl0ISBJIGp1c3QgcmVhbGl6ZWQgbXkgaW5pdGlhbCByZWdleCBkaWRuJ3QgZmxhZyBgYnBmX2ludF9qaXRfY29tcGlsZWAuIEl0J3MgZ290IHRoYXQgYHN0cnVjdCBicGZfcHJvZyAqYCByZXR1cm4gdHlwZSwgd2hpY2ggbXkgcHJldmlvdXMgcGF0dGVybiBjb21wbGV0ZWx5IG1pc3NlZC4gSSB3YXMgc28gZm9jdXNlZCBvbiB0aGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYsIEkgb3Zlcmxvb2tlZCB0aGF0IGRldGFpbCBpbiB0aGUgc2lnbmF0dXJlLiBPa2F5LCBubyBwcm9ibGVtLCBJIGNhbiBhZGFwdC4gVGhpbmtpbmcgSSdsbCBqdXN0IGJyb2FkZW4gdGhlIHNlYXJjaC4gSSBjYW4gdXNlIHNvbWV0aGluZyBzaW1wbGUgbGlrZSBgXnN0cnVjdCAuKmAgdG8gbWF0Y2ggYW55IGxpbmUgdGhhdCBzdGFydHMgd2l0aCBgc3RydWN0YCBmb2xsb3dlZCBieSBhbnl0aGluZy4gVGhhdCBzaG91bGQgZ3JhYiB0aGUgb25lcyBJIG5lZWQgd2l0aG91dCBnZXR0aW5nIHRvbyBzcGVjaWZpYy4gTmVlZCB0byBrZWVwIHRoaXMgbW92aW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMTY3NiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA0OjUwOjM0LjE3NzEwNDg4NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMyMTQ5NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXS4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jPTYzPXN0cnVjdCBqaXRfY3R4IHtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNjktXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo3MDpzdGF0aWMgbm9pbmxpbmUgdTMyIGppdF9tdWwzMih1MzIgYSwgdTMyIGIpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy03MS17XFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTc0LVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6NzU6c3RhdGljIG5vaW5saW5lIHUzMiBqaXRfZGl2MzIodTMyIGEsIHUzMiBiKVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNzYte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy03OS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjgwOnN0YXRpYyBub2lubGluZSB1MzIgaml0X21vZDMyKHUzMiBhLCB1MzIgYilcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTgxLXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtODQtXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo4NTpzdGF0aWMgbm9pbmxpbmUgczMyIGppdF9zZGl2MzIoczMyIGEsIHMzMiBiKVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtODYte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy05My1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjk0OnN0YXRpYyBub2lubGluZSBzMzIgaml0X3Ntb2QzMihzMzIgYSwgczMyIGIpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy05NS17XFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTEwMi1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjEwMzpzdGF0aWMgbm9pbmxpbmUgdTY0IGppdF9tdWw2NCh1NjQgYSwgdTY0IGIpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMDQte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMDctXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxMDg6c3RhdGljIG5vaW5saW5lIHU2NCBqaXRfZGl2NjQodTY0IGEsIHU2NCBiKVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTA5LXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTEyLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MTEzOnN0YXRpYyBub2lubGluZSBzNjQgaml0X3NkaXY2NChzNjQgYSwgczY0IGIpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMTQte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMjEtXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxMjI6c3RhdGljIG5vaW5saW5lIHU2NCBqaXRfbW9kNjQodTY0IGEsIHU2NCBiKVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTIzLXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTMxLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MTMyOnN0YXRpYyBub2lubGluZSBzNjQgaml0X3Ntb2Q2NChzNjQgYSwgczY0IGIpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMzMte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNDAtXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxNDE6c3RhdGljIHUzMiBqaXRfYXRvbWljMzIodTMyICpwdHIsIHUzMiB2YWwsIHUzMiBvcCwgdTMyIGNtcClcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE0Mi17XFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE3Ny1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjE3ODpzdGF0aWMgdTY0IGppdF9hdG9taWM2NCh1MzIgKnB0ciwgdTMyIHZhbF9oaSwgdTMyIHZhbF9sbywgdTMyIG9wLCB1MzIgY21wX2hpLCB1MzIgY21wX2xvKVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTc5LXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjE4LVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MjE5OnN0YXRpYyBpbmxpbmUgdm9pZCBlbWl0XzE2KHN0cnVjdCBqaXRfY3R4ICpjdHgsIHUxNiBpbnN0KVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjIwLXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjI1LVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MjI2OnN0YXRpYyBpbmxpbmUgdm9pZCBlbWl0XzMyKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHUzMiB2YWwpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0yMjcte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0yMzEtXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoyMzI6c3RhdGljIGlubGluZSBib29sIGlzX3N0YWNrZWQoczggcmVnKVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjMzLXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjM2LVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MjM3OnN0YXRpYyBzOCBicGZfZ2V0X3JlZzMyKHM4IGJwZl9yZWcsIHM4IHRtcF9yZWcsIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0yMzgte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0yNDYtXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoyNDc6c3RhdGljIHZvaWQgYnBmX3B1dF9yZWczMihzOCBicGZfcmVnLCBzOCBzcmNfcmVnLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjQ4LXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjU2LVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MjU3OnN0YXRpYyB2b2lkIGVtaXRfYWx1MzJfbmVnKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTI1OC17XFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTI2OS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjI3MDpzdGF0aWMgdm9pZCBlbWl0X2FsdTY0X25lZyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0yNzEte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0yODMtXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoyODQ6c3RhdGljIHZvaWQgZW1pdF9hbHUzMl94KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTI4NS17XFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTM0OS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjM1MDpzdGF0aWMgdm9pZCBlbWl0X2FsdTMyX2soY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMzUxLXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNDAzLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6NDA0OnN0YXRpYyB2b2lkIGVtaXRfYWx1NjRfeChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy00MDUte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy00NjMtXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo0NjQ6c3RhdGljIHZvaWQgZW1pdF9hbHU2NF9rKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTQ2NS17XFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTUyMC1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjUyMTpzdGF0aWMgdm9pZCBlbWl0X2FsdTY0X3NoaWZ0KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBpc19pbW0pXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy01MjIte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy01NzUtXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo1NzY6c3RhdGljIHZvaWQgZW1pdF9icGZfZW5kKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTU3Ny17XFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTYzMS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjYzMjpzdGF0aWMgdm9pZCBlbWl0X21hdGhfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgaXNfNjQpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy02MzMte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy03MzktXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo3NDA6c3RhdGljIHZvaWQgZW1pdF9sZHgoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNzQxLXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtODAyLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6ODAzOnN0YXRpYyB2b2lkIGVtaXRfc3R4KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTgwNC17XFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTg0My1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjg0NDpzdGF0aWMgdm9pZCBlbWl0X3N0KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTg0NS17XFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTg4NS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjg4NjpzdGF0aWMgdm9pZCBlbWl0X2F0b21pYyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy04ODcte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy05ODctXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo5ODg6c3RhdGljIHZvaWQgZW1pdF90YWlsX2NhbGwoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtOTg5LXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTA1MS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjEwNTI6c3RhdGljIGludCBlbWl0X2ptcChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBjdXJyX2kpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMDUzLXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTIxNi1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjEyMTc6c3RhdGljIGludCBlbWl0X2NhbGwoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTIxOC17XFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTEyNTItXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxMjUzOnN0YXRpYyB2b2lkIGJ1aWxkX3Byb2xvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMjU0LXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTMwMi1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjEzMDM6c3RhdGljIHZvaWQgYnVpbGRfZXBpbG9ndWUoc3RydWN0IGppdF9jdHggKmN0eClcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTEzMDQte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMzExLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MTMxMjpzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgaSlcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTEzMTMte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNTE0LVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MTUxNTpzdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGppdF9jdHggKmN0eClcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE1MTYte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNTQzLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MTU0NDpib29sIGJwZl9qaXRfbmVlZHNfemV4dCh2b2lkKVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTU0NS17XFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE1NDgtXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxNTQ5OnN0YXRpYyB2b2lkIGppdF9maWxsX2hvbGUodm9pZCAqYXJlYSwgdW5zaWduZWQgaW50IHNpemUpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNTUwLXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTU1Ni1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjE1NTc6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE1NTgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNDo1MDozNC4yNDAzMjcxODRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEyNjU1NTU2NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2ggZm9yIG02OGsgQXJjaGl0ZWN0dXJlKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBgYnBmX2ppdF9uZWVkc196ZXh0YCBhcmUgdGhlIHR3byBrZXkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBwYXRjaC4gIGBicGZfaW50X2ppdF9jb21waWxlYCBsb29rcyBsaWtlIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgSklUIGNvbXBpbGVyIGl0c2VsZiwgd2hpY2ggaXMgY3J1Y2lhbC4gIGBicGZfaml0X25lZWRzX3pleHRgIGlzIGFsc28gYW4gaW1wb3J0YW50IGVudHJ5IHBvaW50IGNhbGxlZCBmcm9tIHRoZSBjb3JlIEJQRiBjb2RlLlxuXG5Ob3csIGNoZWNraW5nIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBgYXJjaC9tNjhrL0tjb25maWdgIHJldmVhbHMgdGhhdCBgQ09ORklHX0JQRl9KSVRgIGlzIHRoZSBjcml0aWNhbCBvcHRpb24gaGVyZS4gIFRoZSBjb2RlIHNlbGVjdHMgYEhBVkVfRUJQRl9KSVRgIGlmIHdlJ3JlICpub3QqIGRlYWxpbmcgd2l0aCBDT0xERklSRSBvciBNNjgwMDAgcHJvY2Vzc29ycy5cblxuVGhlIHByb21wdCBzdGlwdWxhdGVzIHRoYXQgd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgaXMgXCJXb3J0aEZ1enppbmcuXCIgQ29uc2lkZXJpbmcgdGhlIGNyaXRlcmlhLCB0aGUgbTY4ayBhcmNoaXRlY3R1cmUgaXMgYSBmYWN0b3IuICBXaGlsZSBTeXprYWxsZXIgZG9lc24ndCB0eXBpY2FsbHkgZm9jdXMgb24gbTY4aywgUUVNVSBkb2VzIHN1cHBvcnQgaXQsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGl0J3MgZnV6emFibGUuICBUaGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgQlBGIEpJVCBjb21waWxlciBmb3IgYSBuZXcgYXJjaGl0ZWN0dXJlLlxuXG5NeSBzdHJhdGVneSBpcyB0byBkZWZpbmUgdGhlIFwiV29ydGhGdXp6aW5nXCIgcGFyYW1ldGVyLiBTaW5jZSB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUga2VybmVsIChhIEpJVCBjb21waWxlciBmb3IgYSBuZXcgYXJjaGl0ZWN0dXJlKSwgSSdsbCBzZXQgdGhpcyB0byB0cnVlLlxuXG5UbyBzdXBwb3J0IHRoaXMgZGVjaXNpb24sIEkgbmVlZCB0byBwcm92aWRlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuICBUaGUgY29yZSBmdW5jdGlvbmFsaXR5IHJldm9sdmVzIGFyb3VuZCBgYnBmX2ludF9qaXRfY29tcGlsZWAgYW5kIGBicGZfaml0X25lZWRzX3pleHRgLiAgU28gbXkgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgW1wiYnBmX2ludF9qaXRfY29tcGlsZVwiLCBcImJwZl9qaXRfbmVlZHNfemV4dFwiXWAuICBUaGUgcmVsZXZhbnQgY29uZmlnLCBhbmQgdmVyaWZpZWQgYnkgYGFyY2gvbTY4ay9uZXQvTWFrZWZpbGVgLCBpcyBgQlBGX0pJVGAsIHNvIG15IGBFbmFibGVDb25maWdzYCBsaXN0IHdpbGwgYmUgYFtcIkJQRl9KSVRcIl1gLlxuXG5JJ3ZlIGFsc28gY29uZmlybWVkIHRoYXQgYEJQRl9KSVRgIHVzdWFsbHkgZGVwZW5kcyBvbiBgSEFWRV9FQlBGX0pJVGAsIHdoaWNoLCBpbiB0aGlzIGNhc2UsIGlzIGluZGVlZCBzZWxlY3RlZCBiYXNlZCBvbiB0aGUgS2NvbmZpZyBmaWxlLiBJIHdpbGwgYWxzbyBtYWtlIHN1cmUgdG8gc3BlY2lmeSBhIGdvb2QgcmVhc29uIGluIHRoZSBmaW5hbCByZXNwb25zZS5cblxuRmluYWxseSwgbmVpdGhlciBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhpcyBpcyBiZWNhdXNlIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyBjYWxsZWQgd2hlbiBhIEJQRiBwcm9ncmFtIGlzIGxvYWRlZCBhbmQgYGJwZl9qaXRfbmVlZHNfemV4dGAgaXMgY2FsbGVkIGR1cmluZyBwcm9ncmFtIGxvYWRpbmcgb3IgdmVyaWZpY2F0aW9uLiBUaGlzIGltcGxpZXMgdGhhdCB0aGV5IHdpbGwgYmUgY2FsbGVkIGR1cmluZyBjb250cm9sLXBhdGggb3BlcmF0aW9uIGFuZCBhcmUgdGhlcmVmb3JlIHRlc3RhYmxlLlxuXG5TbyB0aGUgZmluYWwgc2V0IHdpbGwgYmU6XG5Xb3J0aEZ1enppbmc6IHRydWVcbkZvY3VzU3ltYm9sczogW1wiYnBmX2ludF9qaXRfY29tcGlsZVwiLCBcImJwZl9qaXRfbmVlZHNfemV4dFwiXVxuRW5hYmxlQ29uZmlnczogW1wiQlBGX0pJVFwiXVxuUmVhc29uaW5nOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBKSVQgY29tcGlsZXIgZm9yIHRoZSBtNjhrIGFyY2hpdGVjdHVyZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGR1cmluZyBCUEYgcHJvZ3JhbSBsb2FkaW5nIHdoZW4gSklUIGlzIGVuYWJsZWQsIGFuZCBjYW4gYmUgdGVzdGVkIGluIFFFTVUuXCJcblxuXG4iLCJJbnB1dFRva2VucyI6MzU4MTUsIk91dHB1dFRva2VucyI6MTAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA0OjUwOjQ1LjUwNTg4NjMyN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODkyNjk5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9qaXRfbmVlZHNfemV4dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIEpJVCBjb21waWxlciBmb3IgdGhlIG02OGsgYXJjaGl0ZWN0dXJlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIEJQRiBwcm9ncmFtIGxvYWRpbmcgd2hlbiBKSVQgaXMgZW5hYmxlZCwgYW5kIGNhbiBiZSB0ZXN0ZWQgaW4gUUVNVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICAgIFwiYnBmX2ppdF9uZWVkc196ZXh0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYgSklUIGNvbXBpbGVyIGZvciB0aGUgbTY4ayBhcmNoaXRlY3R1cmUuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgQlBGIHByb2dyYW0gbG9hZGluZyB3aGVuIEpJVCBpcyBlbmFibGVkLCBhbmQgY2FuIGJlIHRlc3RlZCBpbiBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowh2jjw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 04:17:44 +0000 UTC FinishedAt: 2026-07-30 04:50:47 +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": "8522d806d84e2c3816c275ae6dd79e124c1b3dac", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "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": "8522d806d84e2c3816c275ae6dd79e124c1b3dac", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT" ], "series_id": "b88440f3-0761-4f9b-9753-6b767544e77d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_int_jit_compile", "bpf_jit_needs_zext" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMwIDA0OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfbmVlZHNfemV4dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBKSVQgY29tcGlsZXIgZm9yIHRoZSBtNjhrIGFyY2hpdGVjdHVyZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGR1cmluZyBCUEYgcHJvZ3JhbSBsb2FkaW5nIHdoZW4gSklUIGlzIGVuYWJsZWQsIGFuZCBjYW4gYmUgdGVzdGVkIGluIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDQ6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzYzcwY2I2ZDM4Nzc3ZDVmNTE4ZjUyZjgzNDExZTRlYWJkZjRkN2QwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMDQ6NTA6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggMmZiMWM3NWFmZDE2My4uNTMwNTUxODM0YzE2MyAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTQ3MDEsNiAmIzQzOzQ3MDEsMTIgQEAgTDpcdGJwZkB2Z2VyLmtlcm5lbC5vcmdcbiBTOlx0TWFpbnRhaW5lZFxuIEY6XHRhcmNoL2xvb25nYXJjaC9uZXQvXG4gXG4mIzQzO0JQRiBKSVQgZm9yIE02OEtcbiYjNDM7TTpcdEt1YW4tV2VpIENoaXUgXHUwMDNjdmlzaXRvcmNrd0BnbWFpbC5jb21cdTAwM2VcbiYjNDM7TDpcdGJwZkB2Z2VyLmtlcm5lbC5vcmdcbiYjNDM7UzpcdE1haW50YWluZWRcbiYjNDM7RjpcdGFyY2gvbTY4ay9uZXQvXG4mIzQzO1xuIEJQRiBKSVQgZm9yIE1JUFMgKDMyLUJJVCBBTkQgNjQtQklUKVxuIE06XHRKb2hhbiBBbG1ibGFkaCBcdTAwM2Nqb2hhbi5hbG1ibGFkaEBhbnlmaW5ldHdvcmtzLmNvbVx1MDAzZVxuIE06XHRQYXVsIEJ1cnRvbiBcdTAwM2NwYXVsYnVydG9uQGtlcm5lbC5vcmdcdTAwM2VcbmRpZmYgLS1naXQgYS9hcmNoL202OGsvS2J1aWxkIGIvYXJjaC9tNjhrL0tidWlsZFxuaW5kZXggNzc2MmFmOWY2ZGVmZS4uMDU4YWQ0MWE3MjhjNSAxMDA2NDRcbi0tLSBhL2FyY2gvbTY4ay9LYnVpbGRcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbTY4ay9LYnVpbGRcbkBAIC0xLDUgJiM0MzsxLDUgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbi1vYmoteVx0XHRcdFx0JiM0Mzs9IGtlcm5lbC8gbW0vXG4mIzQzO29iai15XHRcdFx0XHQmIzQzOz0ga2VybmVsLyBtbS8gbmV0L1xuIG9iai0kKENPTkZJR19RNDApXHRcdCYjNDM7PSBxNDAvXG4gb2JqLSQoQ09ORklHX0FNSUdBKVx0XHQmIzQzOz0gYW1pZ2EvXG4gb2JqLSQoQ09ORklHX0FUQVJJKVx0XHQmIzQzOz0gYXRhcmkvXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcgYi9hcmNoL202OGsvS2NvbmZpZ1xuaW5kZXggMTE4MzVlYjU5ZDk0ZC4uZGE0M2Q2NjYwYzVjZSAxMDA2NDRcbi0tLSBhL2FyY2gvbTY4ay9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL202OGsvS2NvbmZpZ1xuQEAgLTgsNiAmIzQzOzgsNyBAQCBjb25maWcgTTY4S1xuIFx0c2VsZWN0IEFSQ0hfSEFTX0NQVV9GSU5BTElaRV9JTklUIGlmIE1NVVxuIFx0c2VsZWN0IEFSQ0hfSEFTX0NVUlJFTlRfU1RBQ0tfUE9JTlRFUlxuIFx0c2VsZWN0IEFSQ0hfSEFTX0RNQV9QUkVQX0NPSEVSRU5UIGlmIE02OEtfTk9OQ09IRVJFTlRfRE1BIFx1MDAyNlx1MDAyNiAhQ09MREZJUkVcbiYjNDM7XHRzZWxlY3QgSEFWRV9FQlBGX0pJVCBpZiAoIUNPTERGSVJFIFx1MDAyNlx1MDAyNiAhTTY4MDAwKVxuIFx0c2VsZWN0IEFSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9ERVZJQ0UgaWYgTTY4S19OT05DT0hFUkVOVF9ETUFcbiBcdHNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIRyBpZiBSTVdfSU5TTlNcbiBcdHNlbGVjdCBBUkNIX01JR0hUX0hBVkVfUENfUEFSUE9SVCBpZiBJU0FcbmRpZmYgLS1naXQgYS9hcmNoL202OGsvbmV0L01ha2VmaWxlIGIvYXJjaC9tNjhrL25ldC9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmVjNWIxNDc2MzMxNjdcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbTY4ay9uZXQvTWFrZWZpbGVcbkBAIC0wLDAgJiM0MzsxLDIgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzO29iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wLm9cbmRpZmYgLS1naXQgYS9hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjZkNjQ3YmJhOTZlYjRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0wLDAgJiM0MzsxLDE2MzAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBCUEYgSklUIGNvbXBpbGVyIGZvciBtNjhrXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBLdWFuLVdlaSBDaGl1IFx1MDAzY3Zpc2l0b3Jja3dAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZmlsdGVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaXJxZmxhZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2NhY2hlZmx1c2guaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tYXRoNjQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9saW1pdHMuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBTVEFDS19PRkZTRVQoaykgKC00IC0gKDQgKiAoaykpKVxuJiM0MztcbiYjNDM7ZW51bSB7XG4mIzQzO1x0QlBGX1IxX0hJLCBCUEZfUjFfTE8sXG4mIzQzO1x0QlBGX1IyX0hJLCBCUEZfUjJfTE8sXG4mIzQzO1x0QlBGX1IzX0hJLCBCUEZfUjNfTE8sXG4mIzQzO1x0QlBGX1I0X0hJLCBCUEZfUjRfTE8sXG4mIzQzO1x0QlBGX1I1X0hJLCBCUEZfUjVfTE8sXG4mIzQzO1x0QlBGX1I2X0hJLCBCUEZfUjZfTE8sXG4mIzQzO1x0QlBGX1I3X0hJLCBCUEZfUjdfTE8sXG4mIzQzO1x0QlBGX1I4X0hJLCBCUEZfUjhfTE8sXG4mIzQzO1x0QlBGX1I5X0hJLCBCUEZfUjlfTE8sXG4mIzQzO1x0QlBGX1IxMF9ISSwgQlBGX1IxMF9MTyxcbiYjNDM7XHRCUEZfQVhfSEksIEJQRl9BWF9MTyxcbiYjNDM7XHRCUEZfVENfSEksIEJQRl9UQ19MTyxcbiYjNDM7XHRCUEZfSklUX1NDUkFUQ0hfUkVHUyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgU0NSQVRDSF9TSVpFIChCUEZfSklUX1NDUkFUQ0hfUkVHUyAqIDQpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFRNUF9SRUdfMSAxNFxuJiM0MzsjZGVmaW5lIFRNUF9SRUdfMiAxNVxuJiM0MztcbiYjNDM7I2RlZmluZSBNNjhLX0QwIDBcbiYjNDM7I2RlZmluZSBNNjhLX0QxIDFcbiYjNDM7I2RlZmluZSBNNjhLX0QyIDJcbiYjNDM7I2RlZmluZSBNNjhLX0QzIDNcbiYjNDM7I2RlZmluZSBNNjhLX0Q0IDRcbiYjNDM7I2RlZmluZSBNNjhLX0Q1IDVcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzOCBicGYybTY4a1sxNl1bMl0gPSB7XG4mIzQzO1x0W0JQRl9SRUdfMF0gID0ge002OEtfRDEsIE02OEtfRDB9LFxuJiM0MztcdFtCUEZfUkVHXzFdICA9IHtTVEFDS19PRkZTRVQoQlBGX1IxX0hJKSwgIFNUQUNLX09GRlNFVChCUEZfUjFfTE8pfSxcbiYjNDM7XHRbQlBGX1JFR18yXSAgPSB7U1RBQ0tfT0ZGU0VUKEJQRl9SMl9ISSksICBTVEFDS19PRkZTRVQoQlBGX1IyX0xPKX0sXG4mIzQzO1x0W0JQRl9SRUdfM10gID0ge1NUQUNLX09GRlNFVChCUEZfUjNfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SM19MTyl9LFxuJiM0MztcdFtCUEZfUkVHXzRdICA9IHtTVEFDS19PRkZTRVQoQlBGX1I0X0hJKSwgIFNUQUNLX09GRlNFVChCUEZfUjRfTE8pfSxcbiYjNDM7XHRbQlBGX1JFR181XSAgPSB7U1RBQ0tfT0ZGU0VUKEJQRl9SNV9ISSksICBTVEFDS19PRkZTRVQoQlBGX1I1X0xPKX0sXG4mIzQzO1x0W0JQRl9SRUdfNl0gID0ge1NUQUNLX09GRlNFVChCUEZfUjZfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SNl9MTyl9LFxuJiM0MztcdFtCUEZfUkVHXzddICA9IHtTVEFDS19PRkZTRVQoQlBGX1I3X0hJKSwgIFNUQUNLX09GRlNFVChCUEZfUjdfTE8pfSxcbiYjNDM7XHRbQlBGX1JFR184XSAgPSB7U1RBQ0tfT0ZGU0VUKEJQRl9SOF9ISSksICBTVEFDS19PRkZTRVQoQlBGX1I4X0xPKX0sXG4mIzQzO1x0W0JQRl9SRUdfOV0gID0ge1NUQUNLX09GRlNFVChCUEZfUjlfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SOV9MTyl9LFxuJiM0MztcdFtCUEZfUkVHXzEwXSA9IHtTVEFDS19PRkZTRVQoQlBGX1IxMF9ISSksIFNUQUNLX09GRlNFVChCUEZfUjEwX0xPKX0sXG4mIzQzO1x0W0JQRl9SRUdfQVhdID0ge1NUQUNLX09GRlNFVChCUEZfQVhfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9BWF9MTyl9LFxuJiM0MztcdFtUTVBfUkVHXzFdICA9IHtNNjhLX0QzLCBNNjhLX0QyfSxcbiYjNDM7XHRbVE1QX1JFR18yXSAgPSB7TTY4S19ENSwgTTY4S19ENH0sXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3Qgaml0X2N0eCB7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nO1xuJiM0MztcdHUxNiAqdGFyZ2V0O1xuJiM0MztcdHVuc2lnbmVkIGludCBpZHg7XG4mIzQzO1x0aW50ICpvZmZzZXRzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIG5vaW5saW5lIHUzMiBqaXRfbXVsMzIodTMyIGEsIHUzMiBiKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGEgKiBiO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgbm9pbmxpbmUgdTMyIGppdF9kaXYzMih1MzIgYSwgdTMyIGIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYiA/IGEgLyBiIDogMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIG5vaW5saW5lIHUzMiBqaXRfbW9kMzIodTMyIGEsIHUzMiBiKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGIgPyBhICUgYiA6IGE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBub2lubGluZSBzMzIgaml0X3NkaXYzMihzMzIgYSwgczMyIGIpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYiA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKGEgPT0gUzMyX01JTiBcdTAwMjZcdTAwMjYgYiA9PSAtMSlcbiYjNDM7XHRcdHJldHVybiBTMzJfTUlOO1xuJiM0MztcdHJldHVybiBhIC8gYjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIG5vaW5saW5lIHMzMiBqaXRfc21vZDMyKHMzMiBhLCBzMzIgYilcbiYjNDM7e1xuJiM0MztcdGlmIChiID09IDApXG4mIzQzO1x0XHRyZXR1cm4gYTtcbiYjNDM7XHRpZiAoYSA9PSBTMzJfTUlOIFx1MDAyNlx1MDAyNiBiID09IC0xKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIGEgJSBiO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgbm9pbmxpbmUgdTY0IGppdF9tdWw2NCh1NjQgYSwgdTY0IGIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYSAqIGI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBub2lubGluZSB1NjQgaml0X2RpdjY0KHU2NCBhLCB1NjQgYilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBiID8gZGl2NjRfdTY0KGEsIGIpIDogMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIG5vaW5saW5lIHM2NCBqaXRfc2RpdjY0KHM2NCBhLCBzNjQgYilcbiYjNDM7e1xuJiM0MztcdGlmIChiID09IDApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoYSA9PSBTNjRfTUlOIFx1MDAyNlx1MDAyNiBiID09IC0xKVxuJiM0MztcdFx0cmV0dXJuIFM2NF9NSU47XG4mIzQzO1x0cmV0dXJuIGRpdjY0X3M2NChhLCBiKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIG5vaW5saW5lIHU2NCBqaXRfbW9kNjQodTY0IGEsIHU2NCBiKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHJlbTtcbiYjNDM7XG4mIzQzO1x0aWYgKGIgPT0gMClcbiYjNDM7XHRcdHJldHVybiBhO1xuJiM0MztcdGRpdjY0X3U2NF9yZW0oYSwgYiwgXHUwMDI2cmVtKTtcbiYjNDM7XHRyZXR1cm4gcmVtO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgbm9pbmxpbmUgczY0IGppdF9zbW9kNjQoczY0IGEsIHM2NCBiKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGIgPT0gMClcbiYjNDM7XHRcdHJldHVybiBhO1xuJiM0MztcdGlmIChhID09IFM2NF9NSU4gXHUwMDI2XHUwMDI2IGIgPT0gLTEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gYSAtIGRpdjY0X3M2NChhLCBiKSAqIGI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1MzIgaml0X2F0b21pYzMyKHUzMiAqcHRyLCB1MzIgdmFsLCB1MzIgb3AsIHUzMiBjbXApXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdHUzMiBvbGQ7XG4mIzQzO1xuJiM0MztcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiYjNDM7XHRvbGQgPSAqcHRyO1xuJiM0MztcdHN3aXRjaCAob3ApIHtcbiYjNDM7XHRjYXNlIEJQRl9BREQ6XG4mIzQzO1x0Y2FzZSBCUEZfQUREIHwgQlBGX0ZFVENIOlxuJiM0MztcdFx0KnB0ciAmIzQzOz0gdmFsO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfQU5EOlxuJiM0MztcdGNhc2UgQlBGX0FORCB8IEJQRl9GRVRDSDpcbiYjNDM7XHRcdCpwdHIgXHUwMDI2PSB2YWw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9PUjpcbiYjNDM7XHRjYXNlIEJQRl9PUiB8IEJQRl9GRVRDSDpcbiYjNDM7XHRcdCpwdHIgfD0gdmFsO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfWE9SOlxuJiM0MztcdGNhc2UgQlBGX1hPUiB8IEJQRl9GRVRDSDpcbiYjNDM7XHRcdCpwdHIgXj0gdmFsO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfWENIRzpcbiYjNDM7XHRcdCpwdHIgPSB2YWw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9DTVBYQ0hHOlxuJiM0MztcdFx0aWYgKG9sZCA9PSBjbXApXG4mIzQzO1x0XHRcdCpwdHIgPSB2YWw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb2xkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTY0IGppdF9hdG9taWM2NCh1MzIgKnB0ciwgdTMyIHZhbF9oaSwgdTMyIHZhbF9sbywgdTMyIG9wLCB1MzIgY21wX2hpLCB1MzIgY21wX2xvKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHR1NjQgb2xkLCB2YWwsIGNtcDtcbiYjNDM7XHR1NjQgKnB0cjY0ID0gKHU2NCAqKXB0cjtcbiYjNDM7XG4mIzQzO1x0dmFsID0gKCh1NjQpdmFsX2hpIFx1MDAzY1x1MDAzYyAzMikgfCB2YWxfbG87XG4mIzQzO1x0Y21wID0gKCh1NjQpY21wX2hpIFx1MDAzY1x1MDAzYyAzMikgfCBjbXBfbG87XG4mIzQzO1xuJiM0MztcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiYjNDM7XHRvbGQgPSAqcHRyNjQ7XG4mIzQzO1x0c3dpdGNoIChvcCkge1xuJiM0MztcdGNhc2UgQlBGX0FERDpcbiYjNDM7XHRjYXNlIEJQRl9BREQgfCBCUEZfRkVUQ0g6XG4mIzQzO1x0XHQqcHRyNjQgJiM0Mzs9IHZhbDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX0FORDpcbiYjNDM7XHRjYXNlIEJQRl9BTkQgfCBCUEZfRkVUQ0g6XG4mIzQzO1x0XHQqcHRyNjQgXHUwMDI2PSB2YWw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9PUjpcbiYjNDM7XHRjYXNlIEJQRl9PUiB8IEJQRl9GRVRDSDpcbiYjNDM7XHRcdCpwdHI2NCB8PSB2YWw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9YT1I6XG4mIzQzO1x0Y2FzZSBCUEZfWE9SIHwgQlBGX0ZFVENIOlxuJiM0MztcdFx0KnB0cjY0IF49IHZhbDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX1hDSEc6XG4mIzQzO1x0XHQqcHRyNjQgPSB2YWw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9DTVBYQ0hHOlxuJiM0MztcdFx0aWYgKG9sZCA9PSBjbXApXG4mIzQzO1x0XHRcdCpwdHI2NCA9IHZhbDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBvbGQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBlbWl0XzE2KHN0cnVjdCBqaXRfY3R4ICpjdHgsIHUxNiBpbnN0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGN0eC1cdTAwM2V0YXJnZXQpXG4mIzQzO1x0XHRjdHgtXHUwMDNldGFyZ2V0W2N0eC1cdTAwM2VpZHhdID0gaW5zdDtcbiYjNDM7XHRjdHgtXHUwMDNlaWR4JiM0MzsmIzQzOztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVtaXRfMzIoc3RydWN0IGppdF9jdHggKmN0eCwgdTMyIHZhbClcbiYjNDM7e1xuJiM0MztcdGVtaXRfMTYoY3R4LCB2YWwgXHUwMDNlXHUwMDNlIDE2KTtcbiYjNDM7XHRlbWl0XzE2KGN0eCwgdmFsIFx1MDAyNiAweGZmZmYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfc3RhY2tlZChzOCByZWcpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVnIFx1MDAzYyAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgczggYnBmX2dldF9yZWczMihzOCBicGZfcmVnLCBzOCB0bXBfcmVnLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGlzX3N0YWNrZWQoYnBmX3JlZykpIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwMmUgfCAodG1wX3JlZyBcdTAwM2NcdTAwM2MgOSkpO1x0XHQvKiBtb3ZlLmwgZDE2KCVmcCksIHJlZyAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsICh1MTYpYnBmX3JlZyk7XG4mIzQzO1x0XHRyZXR1cm4gdG1wX3JlZztcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIGJwZl9yZWc7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJwZl9wdXRfcmVnMzIoczggYnBmX3JlZywgczggc3JjX3JlZywgc3RydWN0IGppdF9jdHggKmN0eClcbiYjNDM7e1xuJiM0MztcdGlmIChpc19zdGFja2VkKGJwZl9yZWcpKSB7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyZDQwIHwgc3JjX3JlZyk7XHRcdFx0LyogbW92ZS5sIHJlZywgZDE2KCVmcCkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAodTE2KWJwZl9yZWcpO1xuJiM0MztcdH0gZWxzZSBpZiAoYnBmX3JlZyAhPSBzcmNfcmVnKSB7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGJwZl9yZWcgXHUwMDNjXHUwMDNjIDkpIHwgc3JjX3JlZyk7IC8qIG1vdmUubCBzcmMsIGRzdCAqL1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hbHUzMl9uZWcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXHUwMDNlZHN0X3JlZ107XG4mIzQzO1x0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xuJiM0MztcdHM4IGRfcmVnID0gYnBmX2dldF9yZWczMihkc3RbMV0sIHRtcDFbMV0sIGN0eCk7XG4mIzQzO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDQ0ODAgfCBkX3JlZyk7XHRcdFx0XHQvKiBuZWcubCBkX3JlZyAqL1xuJiM0MztcbiYjNDM7XHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9yZWcsIGN0eCk7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4NzAwMCB8ICh0bXAxWzBdIFx1MDAzY1x1MDAzYyA5KSk7XHRcdFx0LyogbW92ZXEgIzAsIHRtcDEgKi9cbiYjNDM7XHRicGZfcHV0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hbHU2NF9uZWcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXHUwMDNlZHN0X3JlZ107XG4mIzQzO1x0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xuJiM0MztcdHM4IGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcbiYjNDM7XHRzOCBkX2hpID0gYnBmX2dldF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7XG4mIzQzO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDQ0ODAgfCBkX2xvKTtcdFx0XHRcdC8qIG5lZy5sIGRfbG8gKi9cbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHg0MDgwIHwgZF9oaSk7XHRcdFx0XHQvKiBuZWd4LmwgZF9oaSAqL1xuJiM0MztcbiYjNDM7XHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9sbywgY3R4KTtcbiYjNDM7XHRicGZfcHV0X3JlZzMyKGRzdFswXSwgZF9oaSwgY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hbHUzMl94KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVx1MDAzZWRzdF9yZWddO1xuJiM0MztcdGNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLVx1MDAzZXNyY19yZWddO1xuJiM0MztcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcbiYjNDM7XHRjb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07XG4mIzQzO1x0czggZF9yZWcsIHNfcmVnO1xuJiM0MztcbiYjNDM7XHRkX3JlZyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpO1xuJiM0MztcdHNfcmVnID0gYnBmX2dldF9yZWczMihzcmNbMV0sIHRtcDJbMV0sIGN0eCk7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoQlBGX09QKGluc24tXHUwMDNlY29kZSkpIHtcbiYjNDM7XHRjYXNlIEJQRl9NT1Y6XG4mIzQzO1x0XHRpZiAoaW5zbi1cdTAwM2VvZmYgPT0gOCB8fCBpbnNuLVx1MDAzZW9mZiA9PSAxNikge1xuJiM0MztcdFx0XHRpZiAoZF9yZWcgIT0gc19yZWcpXG4mIzQzO1x0XHRcdFx0ZW1pdF8xNihjdHgsIDB4MjAwMCB8IChkX3JlZyBcdTAwM2NcdTAwM2MgOSkgfCBzX3JlZyk7IC8qIG1vdmUubCBzcmMsIGRzdCAqL1xuJiM0MztcdFx0XHRpZiAoaW5zbi1cdTAwM2VvZmYgPT0gOClcbiYjNDM7XHRcdFx0XHRlbWl0XzE2KGN0eCwgMHg0OWMwIHwgZF9yZWcpO1x0LyogZXh0Yi5sIGRfcmVnICovXG4mIzQzO1x0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHRlbWl0XzE2KGN0eCwgMHg0OGMwIHwgZF9yZWcpO1x0LyogZXh0LmwgZF9yZWcgKi9cbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGlmIChkX3JlZyAhPSBzX3JlZylcbiYjNDM7XHRcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IHNfcmVnKTsgLyogbW92ZS5sIHNyYywgZHN0ICovXG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9BREQ6XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHhkMDgwIHwgKGRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IHNfcmVnKTtcdC8qIGFkZC5sIHNyYywgZHN0ICovXG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9TVUI6XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg5MDgwIHwgKGRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IHNfcmVnKTtcdC8qIHN1Yi5sIHNyYywgZHN0ICovXG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9BTkQ6XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHhjMDgwIHwgKGRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IHNfcmVnKTtcdC8qIGFuZC5sIHNyYywgZHN0ICovXG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9PUjpcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDgwODAgfCAoZF9yZWcgXHUwMDNjXHUwMDNjIDkpIHwgc19yZWcpO1x0Lyogb3IubCBzcmMsIGRzdCAqL1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfWE9SOlxuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4YjE4MCB8IChzX3JlZyBcdTAwM2NcdTAwM2MgOSkgfCBkX3JlZyk7XHQvKiBlb3IubCBzcmMsIGRzdCAqL1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfTFNIOlxuJiM0MztcdGNhc2UgQlBGX1JTSDpcbiYjNDM7XHRjYXNlIEJQRl9BUlNIOiB7XG4mIzQzO1x0XHRzOCBjb3VudF9yZWcgPSB0bXAyWzFdO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzX3JlZyAhPSBjb3VudF9yZWcpXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDIwMDAgfCAoY291bnRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IHNfcmVnKTsgLyogbW92ZS5sIHNyYywgY291bnQgKi9cbiYjNDM7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgwMjgwIHwgY291bnRfcmVnKTtcdFx0LyogYW5kaS5sICNpbW0sIGNvdW50ICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgMHgxZik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9MU0gpXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGUxYTggfCAoY291bnRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IGRfcmVnKTsgLyogbHNsLmwgY291bnQsIGRzdCAqL1xuJiM0MztcdFx0ZWxzZSBpZiAoQlBGX09QKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1JTSClcbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4ZTBhOCB8IChjb3VudF9yZWcgXHUwMDNjXHUwMDNjIDkpIHwgZF9yZWcpOyAvKiBsc3IubCBjb3VudCwgZHN0ICovXG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGUwYTAgfCAoY291bnRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IGRfcmVnKTsgLyogYXNyLmwgY291bnQsIGRzdCAqL1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnBmX3B1dF9yZWczMihkc3RbMV0sIGRfcmVnLCBjdHgpO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDcwMDAgfCAodG1wMVswXSBcdTAwM2NcdTAwM2MgOSkpO1x0XHRcdC8qIG1vdmVxICMwLCB0bXAxICovXG4mIzQzO1x0YnBmX3B1dF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVtaXRfYWx1MzJfayhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbiYjNDM7XHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4mIzQzO1x0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xuJiM0MztcdHM4IGRfcmVnO1xuJiM0MztcbiYjNDM7XHRkX3JlZyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpKSB7XG4mIzQzO1x0Y2FzZSBCUEZfTU9WOlxuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MjAzYyB8IChkX3JlZyBcdTAwM2NcdTAwM2MgOSkpO1x0XHQvKiBtb3ZlLmwgI2ltbSwgZHN0ICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfQUREOlxuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MDY4MCB8IGRfcmVnKTtcdFx0XHQvKiBhZGRpLmwgI2ltbSwgZHN0ICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfU1VCOlxuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MDQ4MCB8IGRfcmVnKTtcdFx0XHQvKiBzdWJpLmwgI2ltbSwgZHN0ICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfQU5EOlxuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MDI4MCB8IGRfcmVnKTtcdFx0XHQvKiBhbmRpLmwgI2ltbSwgZHN0ICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfT1I6XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgwMDgwIHwgZF9yZWcpO1x0XHRcdC8qIG9yaS5sICNpbW0sIGRzdCAqL1xuJiM0MztcdFx0ZW1pdF8zMihjdHgsIGluc24tXHUwMDNlaW1tKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX1hPUjpcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDBhODAgfCBkX3JlZyk7XHRcdFx0LyogZW9yaS5sICNpbW0sIGRzdCAqL1xuJiM0MztcdFx0ZW1pdF8zMihjdHgsIGluc24tXHUwMDNlaW1tKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX0xTSDpcbiYjNDM7XHRjYXNlIEJQRl9SU0g6XG4mIzQzO1x0Y2FzZSBCUEZfQVJTSDpcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAodG1wMlsxXSBcdTAwM2NcdTAwM2MgOSkpO1x0XHQvKiBtb3ZlLmwgI2ltbSwgY291bnQgKi9cbiYjNDM7XHRcdGVtaXRfMzIoY3R4LCBpbnNuLVx1MDAzZWltbSBcdTAwMjYgMHgxZik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9MU0gpXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGUxYTggfCAodG1wMlsxXSBcdTAwM2NcdTAwM2MgOSkgfCBkX3JlZyk7XHQvKiBsc2wubCBjb3VudCwgZHN0ICovXG4mIzQzO1x0XHRlbHNlIGlmIChCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUlNIKVxuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHhlMGE4IHwgKHRtcDJbMV0gXHUwMDNjXHUwMDNjIDkpIHwgZF9yZWcpO1x0LyogbHNyLmwgY291bnQsIGRzdCAqL1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHhlMGEwIHwgKHRtcDJbMV0gXHUwMDNjXHUwMDNjIDkpIHwgZF9yZWcpO1x0LyogYXNyLmwgY291bnQsIGRzdCAqL1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9yZWcsIGN0eCk7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4NzAwMCB8ICh0bXAxWzBdIFx1MDAzY1x1MDAzYyA5KSk7XHRcdFx0LyogbW92ZXEgIzAsIHRtcDEgKi9cbiYjNDM7XHRicGZfcHV0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hbHU2NF94KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVx1MDAzZWRzdF9yZWddO1xuJiM0MztcdGNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLVx1MDAzZXNyY19yZWddO1xuJiM0MztcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcbiYjNDM7XHRjb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07XG4mIzQzO1x0czggZF9sbywgZF9oaSwgc19sbywgc19oaTtcbiYjNDM7XG4mIzQzO1x0ZF9sbyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpO1xuJiM0MztcdGRfaGkgPSBicGZfZ2V0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcbiYjNDM7XHRzX2xvID0gYnBmX2dldF9yZWczMihzcmNbMV0sIHRtcDJbMV0sIGN0eCk7XG4mIzQzO1x0c19oaSA9IGJwZl9nZXRfcmVnMzIoc3JjWzBdLCB0bXAyWzBdLCBjdHgpO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpKSB7XG4mIzQzO1x0Y2FzZSBCUEZfTU9WOlxuJiM0MztcdFx0aWYgKGluc24tXHUwMDNlb2ZmID09IDggfHwgaW5zbi1cdTAwM2VvZmYgPT0gMTYgfHwgaW5zbi1cdTAwM2VvZmYgPT0gMzIpIHtcbiYjNDM7XHRcdFx0aWYgKGRfbG8gIT0gc19sbylcbiYjNDM7XHRcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7IC8qIG1vdmUubCBzcmMsIGRzdCAqL1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKGluc24tXHUwMDNlb2ZmID09IDgpXG4mIzQzO1x0XHRcdFx0ZW1pdF8xNihjdHgsIDB4NDljMCB8IGRfbG8pO1x0XHQvKiBleHRiLmwgZF9sbyAqL1xuJiM0MztcdFx0XHRlbHNlIGlmIChpbnNuLVx1MDAzZW9mZiA9PSAxNilcbiYjNDM7XHRcdFx0XHRlbWl0XzE2KGN0eCwgMHg0OGMwIHwgZF9sbyk7XHRcdC8qIGV4dC5sIGRfbG8gKi9cbiYjNDM7XG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDRhODAgfCBkX2xvKTtcdFx0XHQvKiB0c3QubCBkX2xvICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDViYzAgfCBkX2hpKTtcdFx0XHQvKiBzbWkgZF9oaSAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg0OWMwIHwgZF9oaSk7XHRcdFx0LyogZXh0Yi5sIGRfaGkgKi9cbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGlmIChkX2xvICE9IHNfbG8pXG4mIzQzO1x0XHRcdFx0ZW1pdF8xNihjdHgsIDB4MjAwMCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSB8IHNfbG8pOyAvKiBtb3ZlLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0XHRpZiAoZF9oaSAhPSBzX2hpKVxuJiM0MztcdFx0XHRcdGVtaXRfMTYoY3R4LCAweDIwMDAgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkgfCBzX2hpKTsgLyogbW92ZS5sIHNfaGksIGRfaGkgKi9cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX0FERDpcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGQwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTtcdFx0LyogYWRkLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4ZDE4MCB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSB8IHNfaGkpO1x0XHQvKiBhZGR4Lmwgc19oaSwgZF9oaSAqL1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfU1VCOlxuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4OTA4MCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSB8IHNfbG8pO1x0XHQvKiBzdWIubCBzX2xvLCBkX2xvICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg5MTgwIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpIHwgc19oaSk7XHRcdC8qIHN1YngubCBzX2hpLCBkX2hpICovXG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9BTkQ6XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHhjMDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7XHRcdC8qIGFuZC5sIHNfbG8sIGRfbG8gKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGMwODAgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkgfCBzX2hpKTtcdFx0LyogYW5kLmwgc19oaSwgZF9oaSAqL1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfT1I6XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7XHRcdC8qIG9yLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4ODA4MCB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSB8IHNfaGkpO1x0XHQvKiBvci5sIHNfaGksIGRfaGkgKi9cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX1hPUjpcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGIxODAgfCAoc19sbyBcdTAwM2NcdTAwM2MgOSkgfCBkX2xvKTtcdFx0LyogZW9yLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4YjE4MCB8IChzX2hpIFx1MDAzY1x1MDAzYyA5KSB8IGRfaGkpO1x0XHQvKiBlb3IubCBzX2hpLCBkX2hpICovXG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX2xvLCBjdHgpO1xuJiM0MztcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlbWl0X2FsdTY0X2soY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXHUwMDNlZHN0X3JlZ107XG4mIzQzO1x0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xuJiM0MztcdGNvbnN0IHM4ICp0bXAyID0gYnBmMm02OGtbVE1QX1JFR18yXTtcbiYjNDM7XHRzOCBkX2xvLCBkX2hpLCBzX2xvLCBzX2hpO1xuJiM0MztcdHUzMiBpbW1fbG8gPSBpbnNuLVx1MDAzZWltbTtcbiYjNDM7XHR1MzIgaW1tX2hpID0gaW5zbi1cdTAwM2VpbW0gXHUwMDNjIDAgPyAweGZmZmZmZmZmIDogMDtcbiYjNDM7XG4mIzQzO1x0ZF9sbyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpO1xuJiM0MztcdGRfaGkgPSBicGZfZ2V0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NT1YpIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkpO1x0XHRcdC8qIG1vdmUubCAjaW1tLCBkX2xvICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgaW1tX2xvKTtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkpO1x0XHRcdC8qIG1vdmUubCAjaW1tLCBkX2hpICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgaW1tX2hpKTtcbiYjNDM7XHRcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX2xvLCBjdHgpO1xuJiM0MztcdFx0YnBmX3B1dF9yZWczMihkc3RbMF0sIGRfaGksIGN0eCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzX2xvID0gdG1wMlsxXTtcbiYjNDM7XHRzX2hpID0gdG1wMlswXTtcbiYjNDM7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4MjAzYyB8IChzX2xvIFx1MDAzY1x1MDAzYyA5KSk7XHRcdFx0XHQvKiBtb3ZlLmwgI2ltbSwgc19sbyAqL1xuJiM0MztcdGVtaXRfMzIoY3R4LCBpbW1fbG8pO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAoc19oaSBcdTAwM2NcdTAwM2MgOSkpO1x0XHRcdFx0LyogbW92ZS5sICNpbW0sIHNfaGkgKi9cbiYjNDM7XHRlbWl0XzMyKGN0eCwgaW1tX2hpKTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSkge1xuJiM0MztcdGNhc2UgQlBGX0FERDpcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGQwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTtcdFx0LyogYWRkLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4ZDE4MCB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSB8IHNfaGkpO1x0XHQvKiBhZGR4Lmwgc19oaSwgZF9oaSAqL1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfU1VCOlxuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4OTA4MCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSB8IHNfbG8pO1x0XHQvKiBzdWIubCBzX2xvLCBkX2xvICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg5MTgwIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpIHwgc19oaSk7XHRcdC8qIHN1YngubCBzX2hpLCBkX2hpICovXG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9BTkQ6XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHhjMDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7XHRcdC8qIGFuZC5sIHNfbG8sIGRfbG8gKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGMwODAgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkgfCBzX2hpKTtcdFx0LyogYW5kLmwgc19oaSwgZF9oaSAqL1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfT1I6XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7XHRcdC8qIG9yLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4ODA4MCB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSB8IHNfaGkpO1x0XHQvKiBvci5sIHNfaGksIGRfaGkgKi9cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX1hPUjpcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGIxODAgfCAoc19sbyBcdTAwM2NcdTAwM2MgOSkgfCBkX2xvKTtcdFx0LyogZW9yLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4YjE4MCB8IChzX2hpIFx1MDAzY1x1MDAzYyA5KSB8IGRfaGkpO1x0XHQvKiBlb3IubCBzX2hpLCBkX2hpICovXG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX2xvLCBjdHgpO1xuJiM0MztcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlbWl0X2FsdTY0X3NoaWZ0KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBpc19pbW0pXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbiYjNDM7XHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4mIzQzO1x0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xuJiM0MztcdHM4IGRfbG8sIGRfaGksIGNvdW50X3JlZztcbiYjNDM7XHRpbnQgbG9vcF9zdGFydCwgZG9uZV9pZHg7XG4mIzQzO1xuJiM0MztcdGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcbiYjNDM7XHRkX2hpID0gYnBmX2dldF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7XG4mIzQzO1x0Y291bnRfcmVnID0gdG1wMlsxXTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX2ltbSkge1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MjAzYyB8IChjb3VudF9yZWcgXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZS5sICNpbW0sIGNvdW50X3JlZyAqL1xuJiM0MztcdFx0ZW1pdF8zMihjdHgsIGluc24tXHUwMDNlaW1tKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0Y29uc3QgczggKnNyYyA9IGJwZjJtNjhrW2luc24tXHUwMDNlc3JjX3JlZ107XG4mIzQzO1x0XHRzOCBzX2xvID0gYnBmX2dldF9yZWczMihzcmNbMV0sIHRtcDJbMV0sIGN0eCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGNvdW50X3JlZyAhPSBzX2xvKVxuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGNvdW50X3JlZyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTtcdC8qIG1vdmUubCBzX2xvLCBjb3VudF9yZWcgKi9cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDAyODAgfCBjb3VudF9yZWcpO1x0XHRcdC8qIGFuZGkubCAjMHgzZiwgY291bnRfcmVnICovXG4mIzQzO1x0ZW1pdF8zMihjdHgsIDB4M2YpO1xuJiM0MztcbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHg0YTgwIHwgY291bnRfcmVnKTtcdFx0XHRcdC8qIHRzdC5sIGNvdW50X3JlZyAqL1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDY3MDApO1x0XHRcdFx0XHRcdC8qIGJlcS53IGRvbmVfaWR4ICovXG4mIzQzO1x0ZG9uZV9pZHggPSBjdHgtXHUwMDNlaWR4O1xuJiM0MztcdGVtaXRfMTYoY3R4LCAwKTtcbiYjNDM7XG4mIzQzO1x0bG9vcF9zdGFydCA9IGN0eC1cdTAwM2VpZHg7XG4mIzQzO1xuJiM0MztcdGlmIChCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTFNIKSB7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHhlMzg4IHwgZF9sbyk7XHRcdFx0XHQvKiBsc2xsICMxLCBkX2xvICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHhlMzkwIHwgZF9oaSk7XHRcdFx0XHQvKiByb3hsLmwgIzEsIGRfaGkgKi9cbiYjNDM7XHR9IGVsc2UgaWYgKEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9SU0gpIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGUyODggfCBkX2hpKTtcdFx0XHRcdC8qIGxzcmwgIzEsIGRfaGkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGUyOTAgfCBkX2xvKTtcdFx0XHRcdC8qIHJveHIubCAjMSwgZF9sbyAqL1xuJiM0MztcdH0gZWxzZSBpZiAoQlBGX09QKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FSU0gpIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGUyODAgfCBkX2hpKTtcdFx0XHRcdC8qIGFzcmwgIzEsIGRfaGkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGUyOTAgfCBkX2xvKTtcdFx0XHRcdC8qIHJveHIubCAjMSwgZF9sbyAqL1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4NTM4MCB8IGNvdW50X3JlZyk7XHRcdFx0XHQvKiBzdWJxLmwgIzEsIGNvdW50X3JlZyAqL1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDY2MDApO1x0XHRcdFx0XHRcdC8qIGJuZS53IGxvb3Bfc3RhcnQgKi9cbiYjNDM7XHRlbWl0XzE2KGN0eCwgKGxvb3Bfc3RhcnQgLSAoaW50KWN0eC1cdTAwM2VpZHgpICogMik7XG4mIzQzO1xuJiM0MztcdGlmIChjdHgtXHUwMDNldGFyZ2V0KVxuJiM0MztcdFx0Y3R4LVx1MDAzZXRhcmdldFtkb25lX2lkeF0gPSAoY3R4LVx1MDAzZWlkeCAtIGRvbmVfaWR4KSAqIDI7XG4mIzQzO1xuJiM0MztcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX2xvLCBjdHgpO1xuJiM0MztcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlbWl0X2JwZl9lbmQoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXHUwMDNlZHN0X3JlZ107XG4mIzQzO1x0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xuJiM0MztcdHM4IGRfbG8sIGRfaGk7XG4mIzQzO1x0Ym9vbCB0b19sZSA9IEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfVE9fTEU7XG4mIzQzO1x0aW50IGltbSA9IGluc24tXHUwMDNlaW1tO1xuJiM0MztcbiYjNDM7XHRkX2xvID0gYnBmX2dldF9yZWczMihkc3RbMV0sIHRtcDFbMV0sIGN0eCk7XG4mIzQzO1x0ZF9oaSA9IGJwZl9nZXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpO1xuJiM0MztcbiYjNDM7XHRpZiAodG9fbGUpIHtcbiYjNDM7XHRcdHN3aXRjaCAoaW1tKSB7XG4mIzQzO1x0XHRjYXNlIDE2OlxuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHgwMjgwIHwgZF9sbyk7XHRcdFx0LyogYW5kaS5sICMweGZmZmYsIGRfbG8gKi9cbiYjNDM7XHRcdFx0ZW1pdF8zMihjdHgsIDB4ZmZmZik7XG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGUwNTggfCBkX2xvKTtcdFx0XHQvKiByb3IudyAjOCwgZF9sbyAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg3MDAwIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZXEgIzAsIGRfaGkgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIDMyOlxuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9sbyk7XHRcdFx0Lyogcm9yLncgIzgsIGRfbG8gKi9cbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4NDg0MCB8IGRfbG8pO1x0XHRcdC8qIHN3YXAgZF9sbyAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9sbyk7XHRcdFx0Lyogcm9yLncgIzgsIGRfbG8gKi9cbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSk7XHRcdC8qIG1vdmVxICMwLCBkX2hpICovXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSA2NDpcbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4ZTA1OCB8IGRfbG8pO1x0XHRcdC8qIHJvci53ICM4LCBkX2xvICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDQ4NDAgfCBkX2xvKTtcdFx0XHQvKiBzd2FwIGRfbG8gKi9cbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4ZTA1OCB8IGRfbG8pO1x0XHRcdC8qIHJvci53ICM4LCBkX2xvICovXG4mIzQzO1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9oaSk7XHRcdFx0Lyogcm9yLncgIzgsIGRfaGkgKi9cbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4NDg0MCB8IGRfaGkpO1x0XHRcdC8qIHN3YXAgZF9oaSAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9oaSk7XHRcdFx0Lyogcm9yLncgIzgsIGRfaGkgKi9cbiYjNDM7XG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGMxNDAgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkgfCBkX2xvKTtcdC8qIGV4ZyBkX2xvLCBkX2hpICovXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRzd2l0Y2ggKGltbSkge1xuJiM0MztcdFx0Y2FzZSAxNjpcbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4MDI4MCB8IGRfbG8pO1x0XHRcdC8qIGFuZGkubCAjMHhmZmZmLCBkX2xvICovXG4mIzQzO1x0XHRcdGVtaXRfMzIoY3R4LCAweGZmZmYpO1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg3MDAwIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZXEgIzAsIGRfaGkgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIDMyOlxuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg3MDAwIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZXEgIzAsIGRfaGkgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIDY0OlxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX2xvLCBjdHgpO1xuJiM0MztcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlbWl0X21hdGhfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgaXNfNjQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbiYjNDM7XHRjb25zdCBzOCAqc3JjID0gYnBmMm02OGtbaW5zbi1cdTAwM2VzcmNfcmVnXTtcbiYjNDM7XHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4mIzQzO1x0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xuJiM0MztcdHM4IGRfbG8sIGRfaGksIHNfbG8sIHNfaGkgPSAwO1xuJiM0MztcdHZvaWQgKmZ1bmMgPSBOVUxMO1xuJiM0MztcdHU4IG9wID0gQlBGX09QKGluc24tXHUwMDNlY29kZSk7XG4mIzQzO1xuJiM0MztcdGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcbiYjNDM7XHRkX2hpID0gYnBmX2dldF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7XG4mIzQzO1xuJiM0MztcdGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1gpIHtcbiYjNDM7XHRcdHNfbG8gPSBicGZfZ2V0X3JlZzMyKHNyY1sxXSwgdG1wMlsxXSwgY3R4KTtcbiYjNDM7XHRcdGlmIChpc182NClcbiYjNDM7XHRcdFx0c19oaSA9IGJwZl9nZXRfcmVnMzIoc3JjWzBdLCB0bXAyWzBdLCBjdHgpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRzX2xvID0gdG1wMlsxXTtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAoc19sbyBcdTAwM2NcdTAwM2MgOSkpO1x0XHRcdC8qIG1vdmUubCAjaW1tLCBzX2xvICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuJiM0MztcdFx0aWYgKGlzXzY0KSB7XG4mIzQzO1x0XHRcdHNfaGkgPSB0bXAyWzBdO1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHNfaGkgXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZS5sICNpbW0sIHNfaGkgKi9cbiYjNDM7XHRcdFx0ZW1pdF8zMihjdHgsIGluc24tXHUwMDNlaW1tIFx1MDAzYyAwID8gMHhmZmZmZmZmZiA6IDApO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGlzXzY0KSB7XG4mIzQzO1x0XHRzd2l0Y2ggKG9wKSB7XG4mIzQzO1x0XHRjYXNlIEJQRl9NVUw6XG4mIzQzO1x0XHRcdGZ1bmMgPSAodm9pZCAqKWppdF9tdWw2NDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9ESVY6XG4mIzQzO1x0XHRcdGZ1bmMgPSAodm9pZCAqKWppdF9kaXY2NDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9NT0Q6XG4mIzQzO1x0XHRcdGZ1bmMgPSAodm9pZCAqKWppdF9tb2Q2NDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FMVTY0IFx1MDAyNlx1MDAyNiBvcCA9PSBCUEZfRElWIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZW9mZiA9PSAxKVxuJiM0MztcdFx0XHRmdW5jID0gKHZvaWQgKilqaXRfc2RpdjY0O1xuJiM0MztcdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFU2NCBcdTAwMjZcdTAwMjYgb3AgPT0gQlBGX01PRCBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gMSlcbiYjNDM7XHRcdFx0ZnVuYyA9ICh2b2lkICopaml0X3Ntb2Q2NDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3dpdGNoIChvcCkge1xuJiM0MztcdFx0Y2FzZSBCUEZfTVVMOlxuJiM0MztcdFx0XHRmdW5jID0gKHZvaWQgKilqaXRfbXVsMzI7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBCUEZfRElWOlxuJiM0MztcdFx0XHRmdW5jID0gKHZvaWQgKilqaXRfZGl2MzI7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBCUEZfTU9EOlxuJiM0MztcdFx0XHRmdW5jID0gKHZvaWQgKilqaXRfbW9kMzI7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFUgXHUwMDI2XHUwMDI2IG9wID09IEJQRl9ESVYgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlb2ZmID09IDEpXG4mIzQzO1x0XHRcdGZ1bmMgPSAodm9pZCAqKWppdF9zZGl2MzI7XG4mIzQzO1x0XHRpZiAoQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FMVSBcdTAwMjZcdTAwMjYgb3AgPT0gQlBGX01PRCBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gMSlcbiYjNDM7XHRcdFx0ZnVuYyA9ICh2b2lkICopaml0X3Ntb2QzMjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChpc182NCkge1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4NDhlNyk7XHRcdFx0XHRcdC8qIG1vdmVtLmwgZDAtZDEsIC0oJXNwKSAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4YzAwMCk7XG4mIzQzO1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IHNfbG8pO1x0XHRcdFx0LyogbW92ZS5sIHNfbG8sIC0oJXNwKSAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IHNfaGkpO1x0XHRcdFx0LyogbW92ZS5sIHNfaGksIC0oJXNwKSAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IGRfbG8pO1x0XHRcdFx0LyogbW92ZS5sIGRfbG8sIC0oJXNwKSAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IGRfaGkpO1x0XHRcdFx0LyogbW92ZS5sIGRfaGksIC0oJXNwKSAqL1xuJiM0MztcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwN2MpO1x0XHRcdFx0XHQvKiBtb3ZlYS5sICNmdW5jLCAlYTAgKi9cbiYjNDM7XHRcdGVtaXRfMzIoY3R4LCAodTMyKWZ1bmMpO1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4NGU5MCk7XHRcdFx0XHRcdC8qIGpzciAoJWEwKSAqL1xuJiM0MztcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDRmZWYpO1x0XHRcdFx0XHQvKiBsZWEgMTYoJXNwKSwgJXNwICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMTYpO1xuJiM0MztcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDI2MDEpO1x0XHRcdFx0XHQvKiBtb3ZlLmwgJWQxLCAlZDMgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDI0MDApO1x0XHRcdFx0XHQvKiBtb3ZlLmwgJWQwLCAlZDIgKi9cbiYjNDM7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg0Y2RmKTtcdFx0XHRcdFx0LyogbW92ZW0ubCAoJXNwKSYjNDM7LCBkMC1kMSAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MDAwMyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDQ4ZTcpO1x0XHRcdFx0XHQvKiBtb3ZlbS5sIGQwLWQxLCAtKCVzcCkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGMwMDApO1xuJiM0MztcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBzX2xvKTtcdFx0XHRcdC8qIG1vdmUubCBzX2xvLCAtKCVzcCkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBkX2xvKTtcdFx0XHRcdC8qIG1vdmUubCBkX2xvLCAtKCVzcCkgKi9cbiYjNDM7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyMDdjKTtcdFx0XHRcdFx0LyogbW92ZWEubCAjZnVuYywgJWEwICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgKHUzMilmdW5jKTtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDRlOTApO1x0XHRcdFx0XHQvKiBqc3IgKCVhMCkgKi9cbiYjNDM7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg0ZmVmKTtcdFx0XHRcdFx0LyogbGVhIDgoJXNwKSwgJXNwICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgOCk7XG4mIzQzO1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MjYwMCk7XHRcdFx0XHRcdC8qIG1vdmUubCAlZDAsICVkMyAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4NzQwMCk7XHRcdFx0XHRcdC8qIG1vdmVxICMwLCAlZDIgKi9cbiYjNDM7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg0Y2RmKTtcdFx0XHRcdFx0LyogbW92ZW0ubCAoJXNwKSYjNDM7LCBkMC1kMSAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MDAwMyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgTTY4S19EMywgY3R4KTtcbiYjNDM7XHRicGZfcHV0X3JlZzMyKGRzdFswXSwgTTY4S19EMiwgY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW1pdF9sZHgoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXHUwMDNlZHN0X3JlZ107XG4mIzQzO1x0Y29uc3QgczggKnNyYyA9IGJwZjJtNjhrW2luc24tXHUwMDNlc3JjX3JlZ107XG4mIzQzO1x0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xuJiM0MztcdHM4IGRfbG8sIGRfaGk7XG4mIzQzO1x0Ym9vbCBpc19tZW1fc3ggPSBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU1TWDtcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX3N0YWNrZWQoc3JjWzFdKSkge1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MjA2ZSk7XHRcdFx0XHQvKiBtb3ZlYS5sIGQxNiglZnApLCAlYTAgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAodTE2KXNyY1sxXSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwNDAgfCBzcmNbMV0pO1x0XHRcdC8qIG1vdmVhLmwgc3JjLCAlYTAgKi9cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRfbG8gPSBpc19zdGFja2VkKGRzdFsxXSkgPyB0bXAxWzFdIDogZHN0WzFdO1xuJiM0MztcdGRfaGkgPSBpc19zdGFja2VkKGRzdFswXSkgPyB0bXAxWzBdIDogZHN0WzBdO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkpIHtcbiYjNDM7XHRjYXNlIEJQRl9COlxuJiM0MztcdFx0aWYgKCFpc19tZW1fc3gpXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDcwMDAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkpO1x0LyogbW92ZXEgIzAsIGRfbG8gKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDEwMjggfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkpO1x0XHQvKiBtb3ZlLmIgZDE2KCVhMCksIGRfbG8gKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRpZiAoaXNfbWVtX3N4KVxuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg0OWMwIHwgZF9sbyk7XHQvKiBleHRiLmwgZF9sbyAqL1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfSDpcbiYjNDM7XHRcdGlmICghaXNfbWVtX3N4KVxuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg3MDAwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpKTtcdC8qIG1vdmVxICMwLCBkX2xvICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgzMDI4IHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZS53IGQxNiglYTApLCBkX2xvICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgaW5zbi1cdTAwM2VvZmYpO1xuJiM0MztcdFx0aWYgKGlzX21lbV9zeClcbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4NDhjMCB8IGRfbG8pO1x0LyogZXh0LmwgZF9sbyAqL1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfVzpcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwMjggfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkpO1x0XHQvKiBtb3ZlLmwgZDE2KCVhMCksIGRfbG8gKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9EVzpcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwMjggfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkpO1x0XHQvKiBtb3ZlLmwgZDE2KCVhMCksIGRfaGkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg0MWU4KTtcdFx0XHRcdC8qIGxlYSA0KCVhMCksICVhMCAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDQpO1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MjAyOCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSk7XHRcdC8qIG1vdmUubCBkMTYoJWEwKSwgZF9sbyAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIGluc24tXHUwMDNlb2ZmKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX0RXKSB7XG4mIzQzO1x0XHRpZiAoaXNfbWVtX3N4KSB7XG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDRhODAgfCBkX2xvKTtcdFx0XHQvKiB0c3QubCBkX2xvICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDViYzAgfCBkX2hpKTtcdFx0XHQvKiBzbWkgZF9oaSAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg0OWMwIHwgZF9oaSk7XHRcdFx0LyogZXh0Yi5sIGRfaGkgKi9cbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDcwMDAgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkpO1x0LyogbW92ZXEgIzAsIGRfaGkgKi9cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX2xvLCBjdHgpO1xuJiM0MztcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlbWl0X3N0eChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbiYjNDM7XHRjb25zdCBzOCAqc3JjID0gYnBmMm02OGtbaW5zbi1cdTAwM2VzcmNfcmVnXTtcbiYjNDM7XHRjb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07XG4mIzQzO1x0czggc19sbywgc19oaTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX3N0YWNrZWQoZHN0WzFdKSkge1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MjA2ZSk7XHRcdFx0XHQvKiBtb3ZlYS5sIGQxNiglZnApLCAlYTAgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAodTE2KWRzdFsxXSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwNDAgfCBkc3RbMV0pO1x0XHRcdC8qIG1vdmVhLmwgZHN0LCAlYTAgKi9cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNfbG8gPSBicGZfZ2V0X3JlZzMyKHNyY1sxXSwgdG1wMlsxXSwgY3R4KTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpKSB7XG4mIzQzO1x0Y2FzZSBCUEZfQjpcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDExNDAgfCBzX2xvKTtcdFx0XHQvKiBtb3ZlLmIgc19sbywgZDE2KCVhMCkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9IOlxuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MzE0MCB8IHNfbG8pO1x0XHRcdC8qIG1vdmUudyBzX2xvLCBkMTYoJWEwKSAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIGluc24tXHUwMDNlb2ZmKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX1c6XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyMTQwIHwgc19sbyk7XHRcdFx0LyogbW92ZS5sIHNfbG8sIGQxNiglYTApICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgaW5zbi1cdTAwM2VvZmYpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfRFc6XG4mIzQzO1x0XHRzX2hpID0gYnBmX2dldF9yZWczMihzcmNbMF0sIHRtcDJbMF0sIGN0eCk7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyMTQwIHwgc19oaSk7XHRcdFx0LyogbW92ZS5sIHNfaGksIGQxNiglYTApICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgaW5zbi1cdTAwM2VvZmYpO1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4NDFlOCk7XHRcdFx0XHQvKiBsZWEgNCglYTApLCAlYTAgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCA0KTtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIxNDAgfCBzX2xvKTtcdFx0XHQvKiBtb3ZlLmwgc19sbywgZDE2KCVhMCkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVtaXRfc3QoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXHUwMDNlZHN0X3JlZ107XG4mIzQzO1x0Y29uc3QgczggKnRtcCA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4mIzQzO1xuJiM0MztcdGlmIChpc19zdGFja2VkKGRzdFsxXSkpIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwNmUpO1x0XHRcdFx0LyogbW92ZWEubCBkMTYoJWZwKSwgJWEwICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgKHUxNilkc3RbMV0pO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyMDQwIHwgZHN0WzFdKTtcdFx0XHQvKiBtb3ZlYS5sIGRzdCwgJWEwICovXG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHRtcFsxXSBcdTAwM2NcdTAwM2MgOSkpO1x0XHRcdC8qIG1vdmUubCAjaW1tLCB0bXAgKi9cbiYjNDM7XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkpIHtcbiYjNDM7XHRjYXNlIEJQRl9COlxuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MTE0MCB8IHRtcFsxXSk7XHRcdFx0LyogbW92ZS5iIHRtcCwgZDE2KCVhMCkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9IOlxuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MzE0MCB8IHRtcFsxXSk7XHRcdFx0LyogbW92ZS53IHRtcCwgZDE2KCVhMCkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9XOlxuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MjE0MCB8IHRtcFsxXSk7XHRcdFx0LyogbW92ZS5sIHRtcCwgZDE2KCVhMCkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9EVzpcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAodG1wWzBdIFx1MDAzY1x1MDAzYyA5KSk7XHRcdC8qIG1vdmUubCAjaW1tLCB0bXAgKi9cbiYjNDM7XHRcdGVtaXRfMzIoY3R4LCBpbnNuLVx1MDAzZWltbSBcdTAwM2MgMCA/IDB4ZmZmZmZmZmYgOiAwKTtcbiYjNDM7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyMTQwIHwgdG1wWzBdKTtcdFx0XHQvKiBtb3ZlLmwgdG1wLCBkMTYoJWEwKSAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIGluc24tXHUwMDNlb2ZmKTtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDQxZTgpO1x0XHRcdFx0LyogbGVhIDQoJWEwKSwgJWEwICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgNCk7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyMTQwIHwgdG1wWzFdKTtcdFx0XHQvKiBtb3ZlLmwgdG1wLCBkMTYoJWEwKSAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIGluc24tXHUwMDNlb2ZmKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hdG9taWMoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXHUwMDNlZHN0X3JlZ107XG4mIzQzO1x0Y29uc3QgczggKnNyYyA9IGJwZjJtNjhrW2luc24tXHUwMDNlc3JjX3JlZ107XG4mIzQzO1x0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xuJiM0MztcbiYjNDM7XHRpZiAoaXNfc3RhY2tlZChkc3RbMV0pKSB7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyMDZlKTtcdFx0XHRcdC8qIG1vdmVhLmwgZDE2KCVmcCksICVhMCAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsICh1MTYpZHN0WzFdKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MjA0MCB8IGRzdFsxXSk7XHRcdFx0LyogbW92ZWEubCBkc3QsICVhMCAqL1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGluc24tXHUwMDNlb2ZmKSB7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg0MWU4KTtcdFx0XHRcdC8qIGxlYSBkMTYoJWEwKSwgJWEwICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgaW5zbi1cdTAwM2VvZmYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1cpIHtcbiYjNDM7XHRcdHM4IHNfbG8gPSBicGZfZ2V0X3JlZzMyKHNyY1sxXSwgdG1wMlsxXSwgY3R4KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaW5zbi1cdTAwM2VpbW0gIT0gQlBGX0NNUFhDSEcpIHtcbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4NDhlNyk7XHRcdFx0LyogbW92ZW0ubCBkMC1kMSwgLSglc3ApICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGMwMDApO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBNNjhLX0QwKTtcdFx0XHQvKiBtb3ZlLmwgJWQwLCAtKCVzcCkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDJmM2MpO1x0XHRcdFx0LyogbW92ZS5sICNpbW0sIC0oJXNwKSAqL1xuJiM0MztcdFx0ZW1pdF8zMihjdHgsIGluc24tXHUwMDNlaW1tKTtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBzX2xvKTtcdFx0XHQvKiBtb3ZlLmwgc19sbywgLSglc3ApICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyZjA4KTtcdFx0XHRcdC8qIG1vdmUubCAlYTAsIC0oJXNwKSAqL1xuJiM0MztcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwN2MpO1x0XHRcdFx0LyogbW92ZWEubCAjZnVuYywgJWEwICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgKHUzMilqaXRfYXRvbWljMzIpO1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4NGU5MCk7XHRcdFx0XHQvKiBqc3IgKCVhMCkgKi9cbiYjNDM7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg0ZmVmKTtcdFx0XHRcdC8qIGxlYSAxNiglc3ApLCAlc3AgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAxNik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGluc24tXHUwMDNlaW1tID09IEJQRl9DTVBYQ0hHKSB7XG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDcyMDApO1x0XHRcdC8qIG1vdmVxICMwLCAlZDEgKi9cbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGJvb2wgaXNfZmV0Y2ggPSAoaW5zbi1cdTAwM2VpbW0gXHUwMDI2IEJQRl9GRVRDSCkgfHwgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX1hDSEc7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoaXNfZmV0Y2gpXG4mIzQzO1x0XHRcdFx0ZW1pdF8xNihjdHgsIDB4MjYwMCk7XHRcdC8qIG1vdmUubCAlZDAsICVkMyAqL1xuJiM0MztcbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4NGNkZik7XHRcdFx0LyogbW92ZW0ubCAoJXNwKSYjNDM7LCBkMC1kMSAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHgwMDAzKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChpc19mZXRjaCkge1xuJiM0MztcdFx0XHRcdGJwZl9wdXRfcmVnMzIoc3JjWzFdLCBNNjhLX0QzLCBjdHgpO1xuJiM0MztcdFx0XHRcdGVtaXRfMTYoY3R4LCAweDc0MDApO1x0XHQvKiBtb3ZlcSAjMCwgJWQyICovXG4mIzQzO1x0XHRcdFx0YnBmX3B1dF9yZWczMihzcmNbMF0sIE02OEtfRDIsIGN0eCk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0fSBlbHNlIGlmIChCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9EVykge1xuJiM0MztcdFx0czggc19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpO1xuJiM0MztcdFx0czggc19oaSA9IGJwZl9nZXRfcmVnMzIoc3JjWzBdLCB0bXAyWzBdLCBjdHgpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpbnNuLVx1MDAzZWltbSAhPSBCUEZfQ01QWENIRykge1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg0OGU3KTtcdFx0XHQvKiBtb3ZlbS5sIGQwLWQxLCAtKCVzcCkgKi9cbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4YzAwMCk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IE02OEtfRDApO1x0XHRcdC8qIG1vdmUubCAlZDAsIC0oJXNwKSAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IE02OEtfRDEpO1x0XHRcdC8qIG1vdmUubCAlZDEsIC0oJXNwKSAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MmYzYyk7XHRcdFx0XHQvKiBtb3ZlLmwgI2ltbSwgLSglc3ApICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IHNfbG8pO1x0XHRcdC8qIG1vdmUubCBzX2xvLCAtKCVzcCkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBzX2hpKTtcdFx0XHQvKiBtb3ZlLmwgc19oaSwgLSglc3ApICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyZjA4KTtcdFx0XHRcdC8qIG1vdmUubCAlYTAsIC0oJXNwKSAqL1xuJiM0MztcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwN2MpO1x0XHRcdFx0LyogbW92ZWEubCAjZnVuYywgJWEwICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgKHUzMilqaXRfYXRvbWljNjQpO1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4NGU5MCk7XHRcdFx0XHQvKiBqc3IgKCVhMCkgKi9cbiYjNDM7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHg0ZmVmKTtcdFx0XHRcdC8qIGxlYSAyNCglc3ApLCAlc3AgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAyNCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGluc24tXHUwMDNlaW1tID09IEJQRl9DTVBYQ0hHKSB7XG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGMxNDEpO1x0XHRcdC8qIGV4ZyAlZDAsICVkMSAqL1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0Ym9vbCBpc19mZXRjaCA9IChpbnNuLVx1MDAzZWltbSBcdTAwMjYgQlBGX0ZFVENIKSB8fCBpbnNuLVx1MDAzZWltbSA9PSBCUEZfWENIRztcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChpc19mZXRjaCkge1xuJiM0MztcdFx0XHRcdGVtaXRfMTYoY3R4LCAweDI2MDApO1x0XHQvKiBtb3ZlLmwgJWQwLCAlZDMgKi9cbiYjNDM7XHRcdFx0XHRlbWl0XzE2KGN0eCwgMHgyNDAxKTtcdFx0LyogbW92ZS5sICVkMSwgJWQyICovXG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDRjZGYpO1x0XHRcdC8qIG1vdmVtLmwgKCVzcCkmIzQzOywgZDAtZDEgKi9cbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4MDAwMyk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoaXNfZmV0Y2gpIHtcbiYjNDM7XHRcdFx0XHRicGZfcHV0X3JlZzMyKHNyY1sxXSwgTTY4S19EMiwgY3R4KTtcbiYjNDM7XHRcdFx0XHRicGZfcHV0X3JlZzMyKHNyY1swXSwgTTY4S19EMywgY3R4KTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW1pdF90YWlsX2NhbGwoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgczggKnIyID0gYnBmMm02OGtbQlBGX1JFR18yXTtcbiYjNDM7XHRjb25zdCBzOCAqcjMgPSBicGYybTY4a1tCUEZfUkVHXzNdO1xuJiM0MztcdGludCBqbXBfb3V0XzEsIGptcF9vdXRfMiwgam1wX291dF8zO1xuJiM0MztcbiYjNDM7XHRpZiAoaXNfc3RhY2tlZChyMlsxXSkpIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwNmUpO1x0XHRcdFx0LyogbW92ZWEubCBkMTYoJWZwKSwgJWEwICovXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgKHUxNilyMlsxXSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwNDAgfCByMlsxXSk7XHRcdFx0LyogbW92ZWEubCByMiwgJWEwICovXG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaXNfc3RhY2tlZChyM1sxXSkpIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDI0MmUpO1x0XHRcdFx0LyogbW92ZS5sIGQxNiglZnApLCAlZDIgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAodTE2KXIzWzFdKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MjQwMCB8IHIzWzFdKTtcdFx0XHQvKiBtb3ZlLmwgcjMsICVkMiAqL1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4YjRhOCk7XHRcdFx0XHRcdC8qIGNtcC5sIGQxNiglYTApLCAlZDIgKi9cbiYjNDM7XHRlbWl0XzE2KGN0eCwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9hcnJheSwgbWFwLm1heF9lbnRyaWVzKSk7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4NjQwMCk7XHRcdFx0XHRcdC8qIGJjYy53IGptcF9vdXRfMSAqL1xuJiM0MztcdGptcF9vdXRfMSA9IGN0eC1cdTAwM2VpZHg7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDApO1xuJiM0MztcbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHgyNjJlKTtcdFx0XHRcdFx0LyogbW92ZS5sIGQxNiglZnApLCAlZDMgKi9cbiYjNDM7XHRlbWl0XzE2KGN0eCwgKHUxNilTVEFDS19PRkZTRVQoQlBGX1RDX0xPKSk7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4NGE4Myk7XHRcdFx0XHRcdC8qIHRzdC5sICVkMyAqL1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDY3MDApO1x0XHRcdFx0XHQvKiBiZXEudyBqbXBfb3V0XzIgKi9cbiYjNDM7XHRqbXBfb3V0XzIgPSBjdHgtXHUwMDNlaWR4O1xuJiM0MztcdGVtaXRfMTYoY3R4LCAwKTtcbiYjNDM7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4NTM4Myk7XHRcdFx0XHRcdC8qIHN1YnEubCAjMSwgJWQzICovXG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4MmQ0Myk7XHRcdFx0XHRcdC8qIG1vdmUubCAlZDMsIGQxNiglZnApICovXG4mIzQzO1x0ZW1pdF8xNihjdHgsICh1MTYpU1RBQ0tfT0ZGU0VUKEJQRl9UQ19MTykpO1xuJiM0MztcbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHhkNDgyKTtcdFx0XHRcdFx0LyogYWRkLmwgJWQyLCAlZDIgKi9cbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHhkNDgyKTtcdFx0XHRcdFx0LyogYWRkLmwgJWQyLCAlZDIgKi9cbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHg0M2U4KTtcdFx0XHRcdFx0LyogbGVhIGQxNiglYTApLCAlYTEgKi9cbiYjNDM7XHRlbWl0XzE2KGN0eCwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9hcnJheSwgcHRycykpO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweGQzYzIpO1x0XHRcdFx0XHQvKiBhZGRhLmwgJWQyLCAlYTEgKi9cbiYjNDM7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4MjA1MSk7XHRcdFx0XHRcdC8qIG1vdmVhLmwgKCVhMSksICVhMCAqL1xuJiM0MztcbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHgyNDA4KTtcdFx0XHRcdFx0LyogbW92ZS5sICVhMCwgJWQyICovXG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4NGE4Mik7XHRcdFx0XHRcdC8qIHRzdC5sICVkMiAqL1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDY3MDApO1x0XHRcdFx0XHQvKiBiZXEudyBqbXBfb3V0XzMgKi9cbiYjNDM7XHRqbXBfb3V0XzMgPSBjdHgtXHUwMDNlaWR4O1xuJiM0MztcdGVtaXRfMTYoY3R4LCAwKTtcbiYjNDM7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4MjA2OCk7XHRcdFx0XHRcdC8qIG1vdmVhLmwgZDE2KCVhMCksICVhMCAqL1xuJiM0MztcdGVtaXRfMTYoY3R4LCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3Byb2csIGJwZl9mdW5jKSk7XG4mIzQzO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDRlZTgpO1x0XHRcdFx0XHQvKiBqbXAgZDE2KCVhMCkgKi9cbiYjNDM7XHRlbWl0XzE2KGN0eCwgNDQpO1xuJiM0MztcbiYjNDM7XHRpZiAoY3R4LVx1MDAzZXRhcmdldCkge1xuJiM0MztcdFx0Y3R4LVx1MDAzZXRhcmdldFtqbXBfb3V0XzFdID0gKGN0eC1cdTAwM2VpZHggLSBqbXBfb3V0XzEpICogMjtcbiYjNDM7XHRcdGN0eC1cdTAwM2V0YXJnZXRbam1wX291dF8yXSA9IChjdHgtXHUwMDNlaWR4IC0gam1wX291dF8yKSAqIDI7XG4mIzQzO1x0XHRjdHgtXHUwMDNldGFyZ2V0W2ptcF9vdXRfM10gPSAoY3R4LVx1MDAzZWlkeCAtIGptcF9vdXRfMykgKiAyO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbWl0X2ptcChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBjdXJyX2kpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbiYjNDM7XHRjb25zdCBzOCAqc3JjID0gYnBmMm02OGtbaW5zbi1cdTAwM2VzcmNfcmVnXTtcbiYjNDM7XHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4mIzQzO1x0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xuJiM0MztcdHM4IGRfbG8sIGRfaGkgPSAwLCBzX2xvLCBzX2hpID0gMDtcbiYjNDM7XHRib29sIGlzX2ptcDMyID0gQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0pNUDMyO1xuJiM0MztcdHU4IG9wID0gQlBGX09QKGluc24tXHUwMDNlY29kZSk7XG4mIzQzO1x0aW50IHRhcmdldF9pbnNuO1xuJiM0MztcbiYjNDM7XHRpZiAoaXNfam1wMzIgXHUwMDI2XHUwMDI2IG9wID09IEJQRl9KQSlcbiYjNDM7XHRcdHRhcmdldF9pbnNuID0gY3Vycl9pICYjNDM7IDEgJiM0MzsgaW5zbi1cdTAwM2VpbW07XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dGFyZ2V0X2luc24gPSBjdXJyX2kgJiM0MzsgMSAmIzQzOyBpbnNuLVx1MDAzZW9mZjtcbiYjNDM7XG4mIzQzO1x0aWYgKHRhcmdldF9pbnNuIFx1MDAzYyAwIHx8IHRhcmdldF9pbnNuIFx1MDAzZSBjdHgtXHUwMDNlcHJvZy1cdTAwM2VsZW4pXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdCNkZWZpbmUgRU1JVF9KTVAzMihvcF9iYXNlKSBcXFxuJiM0MztcdFx0ZG8geyBcXFxuJiM0MztcdFx0XHRpbnQgZGlzcCA9IChjdHgtXHUwMDNlb2Zmc2V0c1t0YXJnZXRfaW5zbl0gLSAoY3R4LVx1MDAzZWlkeCAmIzQzOyAxKSkgKiAyOyBcXFxuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgKG9wX2Jhc2UpIHwgMHgwMGZmKTsgXFxcbiYjNDM7XHRcdFx0ZW1pdF8zMihjdHgsIGRpc3ApOyBcXFxuJiM0MztcdFx0fSB3aGlsZSAoMClcbiYjNDM7XG4mIzQzO1x0aWYgKG9wID09IEJQRl9KQSkge1xuJiM0MztcdFx0RU1JVF9KTVAzMigweDYwMDApO1x0XHRcdFx0LyogYnJhLmwgKi9cbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZF9sbyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpO1xuJiM0MztcdGlmICghaXNfam1wMzIpXG4mIzQzO1x0XHRkX2hpID0gYnBmX2dldF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7XG4mIzQzO1xuJiM0MztcdGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1gpIHtcbiYjNDM7XHRcdHNfbG8gPSBicGZfZ2V0X3JlZzMyKHNyY1sxXSwgdG1wMlsxXSwgY3R4KTtcbiYjNDM7XHRcdGlmICghaXNfam1wMzIpXG4mIzQzO1x0XHRcdHNfaGkgPSBicGZfZ2V0X3JlZzMyKHNyY1swXSwgdG1wMlswXSwgY3R4KTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c19sbyA9IHRtcDJbMV07XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHNfbG8gXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZS5sICNpbW0sIHNfbG8gKi9cbiYjNDM7XHRcdGVtaXRfMzIoY3R4LCBpbnNuLVx1MDAzZWltbSk7XG4mIzQzO1x0XHRpZiAoIWlzX2ptcDMyKSB7XG4mIzQzO1x0XHRcdHNfaGkgPSB0bXAyWzBdO1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHNfaGkgXHUwMDNjXHUwMDNjIDkpKTtcdC8qIG1vdmUubCAjaW1tLCBzX2hpICovXG4mIzQzO1x0XHRcdGVtaXRfMzIoY3R4LCBpbnNuLVx1MDAzZWltbSBcdTAwM2MgMCA/IDB4ZmZmZmZmZmYgOiAwKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChvcCA9PSBCUEZfSlNFVCkge1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MjAwMCB8ICh0bXAxWzFdIFx1MDAzY1x1MDAzYyA5KSB8IGRfbG8pO1x0LyogbW92ZS5sIGRfbG8sIHRtcDFfbG8gKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGMwODAgfCAodG1wMVsxXSBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTtcdC8qIGFuZC5sIHNfbG8sIHRtcDFfbG8gKi9cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWlzX2ptcDMyKSB7XG4mIzQzO1x0XHRcdEVNSVRfSk1QMzIoMHg2NjAwKTtcdFx0XHQvKiBibmUubCAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKHRtcDFbMF0gXHUwMDNjXHUwMDNjIDkpIHwgZF9oaSk7IC8qIG1vdmUubCBkX2hpLCB0bXAxX2hpICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGMwODAgfCAodG1wMVswXSBcdTAwM2NcdTAwM2MgOSkgfCBzX2hpKTsgLyogYW5kLmwgc19oaSwgdG1wMV9oaSAqL1xuJiM0MztcdFx0fVxuJiM0MztcdFx0RU1JVF9KTVAzMigweDY2MDApO1x0XHRcdFx0LyogYm5lLmwgKi9cbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGlzX2ptcDMyKSB7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7XHQvKiBjbXAubCBzX2xvLCBkX2xvICovXG4mIzQzO1x0XHRzd2l0Y2ggKG9wKSB7XG4mIzQzO1x0XHRjYXNlIEJQRl9KRVE6XG4mIzQzO1x0XHRcdEVNSVRfSk1QMzIoMHg2NzAwKTtcdFx0XHQvKiBiZXEubCAqL1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgQlBGX0pORTpcbiYjNDM7XHRcdFx0RU1JVF9KTVAzMigweDY2MDApO1x0XHRcdC8qIGJuZS5sICovXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBCUEZfSkdUOlxuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NjIwMCk7XHRcdFx0LyogYmhpLmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9KR0U6XG4mIzQzO1x0XHRcdEVNSVRfSk1QMzIoMHg2NDAwKTtcdFx0XHQvKiBiY2MubCAqL1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgQlBGX0pMVDpcbiYjNDM7XHRcdFx0RU1JVF9KTVAzMigweDY1MDApO1x0XHRcdC8qIGJjcy5sICovXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBCUEZfSkxFOlxuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NjMwMCk7XHRcdFx0LyogYmxzLmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9KU0dUOlxuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NmUwMCk7XHRcdFx0LyogYmd0LmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9KU0dFOlxuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NmMwMCk7XHRcdFx0LyogYmdlLmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9KU0xUOlxuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NmQwMCk7XHRcdFx0LyogYmx0LmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9KU0xFOlxuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NmYwMCk7XHRcdFx0LyogYmxlLmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkgfCBzX2hpKTtcdC8qIGNtcC5sIHNfaGksIGRfaGkgKi9cbiYjNDM7XG4mIzQzO1x0XHRzd2l0Y2ggKG9wKSB7XG4mIzQzO1x0XHRjYXNlIEJQRl9KRVE6XG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDY2MDgpO1x0XHRcdC8qIGJuZS5zIC4mIzQzOzggKi9cbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSB8IHNfbG8pOyAvKiBjbXAubCBzX2xvLCBkX2xvICovXG4mIzQzO1x0XHRcdEVNSVRfSk1QMzIoMHg2NzAwKTtcdFx0XHQvKiBiZXEubCAqL1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgQlBGX0pORTpcbiYjNDM7XHRcdFx0RU1JVF9KTVAzMigweDY2MDApO1x0XHRcdC8qIGJuZS5sICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NjYwMCk7XHRcdFx0LyogYm5lLmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9KR1Q6XG4mIzQzO1x0XHRcdEVNSVRfSk1QMzIoMHg2MjAwKTtcdFx0XHQvKiBiaGkubCAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg2NTA4KTtcdFx0XHQvKiBiY3MucyAuJiM0Mzs4ICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NjIwMCk7XHRcdFx0LyogYmhpLmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9KR0U6XG4mIzQzO1x0XHRcdEVNSVRfSk1QMzIoMHg2MjAwKTtcdFx0XHQvKiBiaGkubCAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg2NTA4KTtcdFx0XHQvKiBiY3MucyAuJiM0Mzs4ICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NjQwMCk7XHRcdFx0LyogYmNjLmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9KTFQ6XG4mIzQzO1x0XHRcdEVNSVRfSk1QMzIoMHg2NTAwKTtcdFx0XHQvKiBiY3MubCAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg2MjA4KTtcdFx0XHQvKiBiaGkucyAuJiM0Mzs4ICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NjUwMCk7XHRcdFx0LyogYmNzLmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9KTEU6XG4mIzQzO1x0XHRcdEVNSVRfSk1QMzIoMHg2NTAwKTtcdFx0XHQvKiBiY3MubCAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg2MjA4KTtcdFx0XHQvKiBiaGkucyAuJiM0Mzs4ICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NjMwMCk7XHRcdFx0LyogYmxzLmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9KU0dUOlxuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NmUwMCk7XHRcdFx0LyogYmd0LmwgKi9cbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4NmQwOCk7XHRcdFx0LyogYmx0LnMgLiYjNDM7OCAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi9cbiYjNDM7XHRcdFx0RU1JVF9KTVAzMigweDYyMDApO1x0XHRcdC8qIGJoaS5sICovXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBCUEZfSlNHRTpcbiYjNDM7XHRcdFx0RU1JVF9KTVAzMigweDZlMDApO1x0XHRcdC8qIGJndC5sICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweDZkMDgpO1x0XHRcdC8qIGJsdC5zIC4mIzQzOzggKi9cbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSB8IHNfbG8pOyAvKiBjbXAubCBzX2xvLCBkX2xvICovXG4mIzQzO1x0XHRcdEVNSVRfSk1QMzIoMHg2NDAwKTtcdFx0XHQvKiBiY2MubCAqL1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgQlBGX0pTTFQ6XG4mIzQzO1x0XHRcdEVNSVRfSk1QMzIoMHg2ZDAwKTtcdFx0XHQvKiBibHQubCAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHg2ZTA4KTtcdFx0XHQvKiBiZ3QucyAuJiM0Mzs4ICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NjUwMCk7XHRcdFx0LyogYmNzLmwgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIEJQRl9KU0xFOlxuJiM0MztcdFx0XHRFTUlUX0pNUDMyKDB4NmQwMCk7XHRcdFx0LyogYmx0LmwgKi9cbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4NmUwOCk7XHRcdFx0LyogYmd0LnMgLiYjNDM7OCAqL1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi9cbiYjNDM7XHRcdFx0RU1JVF9KTVAzMigweDYzMDApO1x0XHRcdC8qIGJscy5sICovXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHQjdW5kZWYgRU1JVF9KTVAzMlxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVtaXRfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzOCBhcmdfcmVnc1tdID0geyBCUEZfUkVHXzUsIEJQRl9SRUdfNCwgQlBGX1JFR18zLCBCUEZfUkVHXzIsIEJQRl9SRUdfMSB9O1xuJiM0MztcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcbiYjNDM7XHRib29sIGV4dHJhX3Bhc3MgPSBjdHgtXHUwMDNlcHJvZy1cdTAwM2VqaXRlZDtcbiYjNDM7XHR1NjQgZnVuY19hZGRyO1xuJiM0MztcdGJvb2wgZml4ZWQ7XG4mIzQzO1x0aW50IGksIGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX2ppdF9nZXRfZnVuY19hZGRyKGN0eC1cdTAwM2Vwcm9nLCBpbnNuLCBleHRyYV9wYXNzLCBcdTAwMjZmdW5jX2FkZHIsIFx1MDAyNmZpeGVkKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgNTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHM4ICpyZWcgPSBicGYybTY4a1thcmdfcmVnc1tpXV07XG4mIzQzO1x0XHRzOCBkX2xvID0gYnBmX2dldF9yZWczMihyZWdbMV0sIHRtcDFbMV0sIGN0eCk7XG4mIzQzO1x0XHRzOCBkX2hpID0gYnBmX2dldF9yZWczMihyZWdbMF0sIHRtcDFbMF0sIGN0eCk7XG4mIzQzO1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IGRfbG8pO1x0XHRcdC8qIG1vdmUubCBkX2xvLCAtKCVzcCkgKi9cbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBkX2hpKTtcdFx0XHQvKiBtb3ZlLmwgZF9oaSwgLSglc3ApICovXG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHgyMDdjKTtcdFx0XHRcdFx0LyogbW92ZWEubCAjZnVuY19hZGRyLCAlYTAgKi9cbiYjNDM7XHRlbWl0XzMyKGN0eCwgKHUzMilmdW5jX2FkZHIpO1xuJiM0MztcbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHg0ZTkwKTtcdFx0XHRcdFx0LyoganNyICglYTApICovXG4mIzQzO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDRmZWYpO1x0XHRcdFx0XHQvKiBsZWEgNDAoJXNwKSwgJXNwICovXG4mIzQzO1x0ZW1pdF8xNihjdHgsIDQwKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGluc24tXHUwMDNlc3JjX3JlZyAhPSBCUEZfUFNFVURPX0NBTEwpXG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHhjMzQwKTtcdFx0XHRcdFx0LyogZXhnICVkMCwgJWQxICovXG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBidWlsZF9wcm9sb2d1ZShzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGJwZl9zdGFjayA9IE1BWF9CUEZfU1RBQ0s7XG4mIzQzO1x0aW50IHRvdGFsX3N0YWNrID0gU0NSQVRDSF9TSVpFICYjNDM7IGJwZl9zdGFjaztcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4NzAyMSk7XHRcdFx0XHRcdC8qIG1vdmVxICMzMywgJWQwICovXG4mIzQzO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDRlNTYpO1x0XHRcdFx0XHQvKiBsaW5rICVhNiwgIy10b3RhbF9zdGFjayAqL1xuJiM0MztcdGVtaXRfMTYoY3R4LCAtdG90YWxfc3RhY2spO1xuJiM0MztcbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHg0OGU3KTtcdFx0XHRcdFx0LyogbW92ZW0ubCBkMi1kNSwgLSglc3ApICovXG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4M2MwMCk7XG4mIzQzO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDJkNDApO1x0XHRcdFx0XHQvKiBtb3ZlLmwgJWQwLCBvZmYoJWZwKSAqL1xuJiM0MztcdGVtaXRfMTYoY3R4LCAodTE2KVNUQUNLX09GRlNFVChCUEZfVENfTE8pKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGN0eC1cdTAwM2Vwcm9nLVx1MDAzZWlzX2Z1bmMpIHtcbiYjNDM7XHRcdGNvbnN0IHM4IGFyZ19yZWdzW10gPSB7IEJQRl9SRUdfMSwgQlBGX1JFR18yLCBCUEZfUkVHXzMsIEJQRl9SRUdfNCwgQlBGX1JFR181IH07XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgNTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aW50IG9mZnNldCA9IDggJiM0MzsgaSAqIDg7XG4mIzQzO1x0XHRcdGNvbnN0IHM4ICpyZWcgPSBicGYybTY4a1thcmdfcmVnc1tpXV07XG4mIzQzO1xuJiM0MztcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDJlKTsgLyogbW92ZS5sIG9mZnNldCglZnApLCAlZDAgKi9cbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIG9mZnNldCk7XG4mIzQzO1x0XHRcdGJwZl9wdXRfcmVnMzIocmVnWzBdLCBNNjhLX0QwLCBjdHgpO1xuJiM0MztcbiYjNDM7XHRcdFx0ZW1pdF8xNihjdHgsIDB4MjAyZSk7IC8qIG1vdmUubCBvZmZzZXQmIzQzOzQoJWZwKSwgJWQwICovXG4mIzQzO1x0XHRcdGVtaXRfMTYoY3R4LCBvZmZzZXQgJiM0MzsgNCk7XG4mIzQzO1x0XHRcdGJwZl9wdXRfcmVnMzIocmVnWzFdLCBNNjhLX0QwLCBjdHgpO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyMDJlKTtcdFx0XHRcdC8qIG1vdmUubCA4KCVmcCksICVkMCAqL1xuJiM0MztcdFx0ZW1pdF8xNihjdHgsIDgpO1xuJiM0MztcdFx0YnBmX3B1dF9yZWczMihicGYybTY4a1tCUEZfUkVHXzFdWzFdLCBNNjhLX0QwLCBjdHgpO1xuJiM0MztcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDcwMDAgfCAoTTY4S19EMCBcdTAwM2NcdTAwM2MgOSkpO1x0XHRcdC8qIG1vdmVxICMwLCAlZDAgKi9cbiYjNDM7XHRcdGJwZl9wdXRfcmVnMzIoYnBmMm02OGtbQlBGX1JFR18xXVswXSwgTTY4S19EMCwgY3R4KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDQxZWUpO1x0XHRcdFx0XHQvKiBsZWEgLVNDUkFUQ0hfU0laRSglZnApLCAlYTAgKi9cbiYjNDM7XHRlbWl0XzE2KGN0eCwgLVNDUkFUQ0hfU0laRSk7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4MjAwOCk7XHRcdFx0XHRcdC8qIG1vdmUubCAlYTAsICVkMCAqL1xuJiM0MztcbiYjNDM7XHRicGZfcHV0X3JlZzMyKGJwZjJtNjhrW0JQRl9SRUdfMTBdWzFdLCBNNjhLX0QwLCBjdHgpO1xuJiM0MztcdGVtaXRfMTYoY3R4LCAweDcwMDAgfCAoTTY4S19EMCBcdTAwM2NcdTAwM2MgOSkpO1x0XHRcdC8qIG1vdmVxICMwLCAlZDAgKi9cbiYjNDM7XHRicGZfcHV0X3JlZzMyKGJwZjJtNjhrW0JQRl9SRUdfMTBdWzBdLCBNNjhLX0QwLCBjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBidWlsZF9lcGlsb2d1ZShzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4NGNkZik7XHRcdFx0XHRcdC8qIG1vdmVtLmwgKCVzcCkmIzQzOywgZDItZDUgKi9cbiYjNDM7XHRlbWl0XzE2KGN0eCwgMHgwMDNjKTtcbiYjNDM7XG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4NGU1ZSk7XHRcdFx0XHRcdC8qIHVubGsgJWZwICovXG4mIzQzO1x0ZW1pdF8xNihjdHgsIDB4NGU3NSk7XHRcdFx0XHRcdC8qIHJ0cyAqL1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgaSlcbiYjNDM7e1xuJiM0MztcdHU4IGNvZGUgPSBpbnNuLVx1MDAzZWNvZGU7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoY29kZSkge1xuJiM0MztcdGNhc2UgQlBGX0FMVSB8IEJQRl9ORUc6XG4mIzQzO1x0XHRlbWl0X2FsdTMyX25lZyhpbnNuLCBjdHgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTkVHOlxuJiM0MztcdFx0ZW1pdF9hbHU2NF9uZWcoaW5zbiwgY3R4KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX1g6XG4mIzQzO1x0Y2FzZSBCUEZfQUxVIHwgQlBGX0FERCB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0FMVSB8IEJQRl9TVUIgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9BTFUgfCBCUEZfQU5EIHwgQlBGX1g6XG4mIzQzO1x0Y2FzZSBCUEZfQUxVIHwgQlBGX09SICB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0FMVSB8IEJQRl9YT1IgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9BTFUgfCBCUEZfTFNIIHwgQlBGX1g6XG4mIzQzO1x0Y2FzZSBCUEZfQUxVIHwgQlBGX1JTSCB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0FMVSB8IEJQRl9BUlNIIHwgQlBGX1g6XG4mIzQzO1x0XHRlbWl0X2FsdTMyX3goaW5zbiwgY3R4KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX0s6XG4mIzQzO1x0Y2FzZSBCUEZfQUxVIHwgQlBGX0FERCB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0FMVSB8IEJQRl9TVUIgfCBCUEZfSzpcbiYjNDM7XHRjYXNlIEJQRl9BTFUgfCBCUEZfQU5EIHwgQlBGX0s6XG4mIzQzO1x0Y2FzZSBCUEZfQUxVIHwgQlBGX09SICB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0FMVSB8IEJQRl9YT1IgfCBCUEZfSzpcbiYjNDM7XHRjYXNlIEJQRl9BTFUgfCBCUEZfTFNIIHwgQlBGX0s6XG4mIzQzO1x0Y2FzZSBCUEZfQUxVIHwgQlBGX1JTSCB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0FMVSB8IEJQRl9BUlNIIHwgQlBGX0s6XG4mIzQzO1x0XHRlbWl0X2FsdTMyX2soaW5zbiwgY3R4KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9BREQgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9TVUIgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9BTkQgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9PUiAgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9YT1IgfCBCUEZfWDpcbiYjNDM7XHRcdGVtaXRfYWx1NjRfeChpbnNuLCBjdHgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0FERCB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX1NVQiB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0FORCB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX09SICB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX1hPUiB8IEJQRl9LOlxuJiM0MztcdFx0ZW1pdF9hbHU2NF9rKGluc24sIGN0eCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTFNIIHwgQlBGX1g6XG4mIzQzO1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfUlNIIHwgQlBGX1g6XG4mIzQzO1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfQVJTSCB8IEJQRl9YOlxuJiM0MztcdFx0ZW1pdF9hbHU2NF9zaGlmdChpbnNuLCBjdHgsIGZhbHNlKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9MU0ggfCBCUEZfSzpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9SU0ggfCBCUEZfSzpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9BUlNIIHwgQlBGX0s6XG4mIzQzO1x0XHRlbWl0X2FsdTY0X3NoaWZ0KGluc24sIGN0eCwgdHJ1ZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0Y2FzZSBCUEZfQUxVIHwgQlBGX01VTCB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0FMVSB8IEJQRl9ESVYgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9EIHwgQlBGX1g6XG4mIzQzO1x0Y2FzZSBCUEZfQUxVIHwgQlBGX01VTCB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0FMVSB8IEJQRl9ESVYgfCBCUEZfSzpcbiYjNDM7XHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9EIHwgQlBGX0s6XG4mIzQzO1x0XHRlbWl0X21hdGhfY2FsbChpbnNuLCBjdHgsIGZhbHNlKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NVUwgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9ESVYgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NT0QgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NVUwgfCBCUEZfSzpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9ESVYgfCBCUEZfSzpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NT0QgfCBCUEZfSzpcbiYjNDM7XHRcdGVtaXRfbWF0aF9jYWxsKGluc24sIGN0eCwgdHJ1ZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0Y2FzZSBCUEZfQUxVIHwgQlBGX0VORCB8IEJQRl9UT19CRTpcbiYjNDM7XHRjYXNlIEJQRl9BTFUgfCBCUEZfRU5EIHwgQlBGX1RPX0xFOlxuJiM0MztcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0VORCB8IEJQRl9UT19CRTpcbiYjNDM7XHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9FTkQgfCBCUEZfVE9fTEU6XG4mIzQzO1x0XHRlbWl0X2JwZl9lbmQoaW5zbiwgY3R4KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIEJQRl9MRCB8IEJQRl9JTU0gfCBCUEZfRFc6IHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbjEgPSBpbnNuICYjNDM7IDE7XG4mIzQzO1x0XHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbiYjNDM7XHRcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcbiYjNDM7XHRcdHM4IGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcbiYjNDM7XHRcdHM4IGRfaGkgPSBicGZfZ2V0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcbiYjNDM7XG4mIzQzO1x0XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpKTtcdFx0XHQvKiBtb3ZlLmwgI2ltbSwgZF9sbyAqL1xuJiM0MztcdFx0ZW1pdF8zMihjdHgsIGluc24tXHUwMDNlaW1tKTtcbiYjNDM7XHRcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkpO1x0XHRcdC8qIG1vdmUubCAjaW1tLCBkX2hpICovXG4mIzQzO1x0XHRlbWl0XzMyKGN0eCwgaW5zbjEtXHUwMDNlaW1tKTtcbiYjNDM7XG4mIzQzO1x0XHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9sbywgY3R4KTtcbiYjNDM7XHRcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0I6XG4mIzQzO1x0Y2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9IOlxuJiM0MztcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfVzpcbiYjNDM7XHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0RXOlxuJiM0MztcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9COlxuJiM0MztcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9IOlxuJiM0MztcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9XOlxuJiM0MztcdFx0ZW1pdF9sZHgoaW5zbiwgY3R4KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX0I6XG4mIzQzO1x0Y2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9IOlxuJiM0MztcdGNhc2UgQlBGX1NUWCB8IEJQRl9NRU0gfCBCUEZfVzpcbiYjNDM7XHRjYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX0RXOlxuJiM0MztcdFx0ZW1pdF9zdHgoaW5zbiwgY3R4KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfQjpcbiYjNDM7XHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfSDpcbiYjNDM7XHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfVzpcbiYjNDM7XHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfRFc6XG4mIzQzO1x0XHRlbWl0X3N0KGluc24sIGN0eCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9XOlxuJiM0MztcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfRFc6XG4mIzQzO1x0XHRlbWl0X2F0b21pYyhpbnNuLCBjdHgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgQlBGX0pNUCB8IEJQRl9UQUlMX0NBTEw6XG4mIzQzO1x0XHRlbWl0X3RhaWxfY2FsbChpbnNuLCBjdHgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgQlBGX0pNUCB8IEJQRl9KQTpcbiYjNDM7XHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KQTpcbiYjNDM7XHRjYXNlIEJQRl9KTVAgfCBCUEZfSkVRIHwgQlBGX1g6XG4mIzQzO1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0pFUSB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0pNUCB8IEJQRl9KTkUgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9KTVAgfCBCUEZfSk5FIHwgQlBGX0s6XG4mIzQzO1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0pHVCB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUCB8IEJQRl9KR1QgfCBCUEZfSzpcbiYjNDM7XHRjYXNlIEJQRl9KTVAgfCBCUEZfSkdFIHwgQlBGX1g6XG4mIzQzO1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0pHRSB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0pNUCB8IEJQRl9KTFQgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9KTVAgfCBCUEZfSkxUIHwgQlBGX0s6XG4mIzQzO1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0pMRSB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUCB8IEJQRl9KTEUgfCBCUEZfSzpcbiYjNDM7XHRjYXNlIEJQRl9KTVAgfCBCUEZfSlNHVCB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0dUIHwgQlBGX0s6XG4mIzQzO1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0pTR0UgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9KTVAgfCBCUEZfSlNHRSB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0xUIHwgQlBGX1g6XG4mIzQzO1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0pTTFQgfCBCUEZfSzpcbiYjNDM7XHRjYXNlIEJQRl9KTVAgfCBCUEZfSlNMRSB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0xFIHwgQlBGX0s6XG4mIzQzO1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0pTRVQgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9KTVAgfCBCUEZfSlNFVCB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pFUSB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pFUSB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pORSB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pORSB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pHVCB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pHVCB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pHRSB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pHRSB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pMVCB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pMVCB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pMRSB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pMRSB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pTR1QgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KU0dUIHwgQlBGX0s6XG4mIzQzO1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNHRSB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pTR0UgfCBCUEZfSzpcbiYjNDM7XHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KU0xUIHwgQlBGX1g6XG4mIzQzO1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNMVCB8IEJQRl9LOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pTTEUgfCBCUEZfWDpcbiYjNDM7XHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KU0xFIHwgQlBGX0s6XG4mIzQzO1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNFVCB8IEJQRl9YOlxuJiM0MztcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pTRVQgfCBCUEZfSzpcbiYjNDM7XHRcdHJldHVybiBlbWl0X2ptcChpbnNuLCBjdHgsIGkpO1xuJiM0MztcbiYjNDM7XHRjYXNlIEJQRl9KTVAgfCBCUEZfQ0FMTDpcbiYjNDM7XHRcdHJldHVybiBlbWl0X2NhbGwoaW5zbiwgY3R4KTtcbiYjNDM7XG4mIzQzO1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0VYSVQ6XG4mIzQzO1x0XHRidWlsZF9lcGlsb2d1ZShjdHgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBidWlsZF9ib2R5KHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBjdHgtXHUwMDNlcHJvZztcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvZy1cdTAwM2VsZW47IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBcdTAwMjZwcm9nLVx1MDAzZWluc25zaVtpXTtcbiYjNDM7XHRcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFjdHgtXHUwMDNldGFyZ2V0KVxuJiM0MztcdFx0XHRjdHgtXHUwMDNlb2Zmc2V0c1tpXSA9IGN0eC1cdTAwM2VpZHg7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gYnVpbGRfaW5zbihpbnNuLCBjdHgsIGkpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfTEQgfCBCUEZfSU1NIHwgQlBGX0RXKSkge1xuJiM0MztcdFx0XHRpJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0aWYgKCFjdHgtXHUwMDNldGFyZ2V0KVxuJiM0MztcdFx0XHRcdGN0eC1cdTAwM2VvZmZzZXRzW2ldID0gY3R4LVx1MDAzZWlkeDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghY3R4LVx1MDAzZXRhcmdldClcbiYjNDM7XHRcdGN0eC1cdTAwM2VvZmZzZXRzW3Byb2ctXHUwMDNlbGVuXSA9IGN0eC1cdTAwM2VpZHg7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztib29sIGJwZl9qaXRfbmVlZHNfemV4dCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGppdF9maWxsX2hvbGUodm9pZCAqYXJlYSwgdW5zaWduZWQgaW50IHNpemUpXG4mIzQzO3tcbiYjNDM7XHR1MTYgKnB0cjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChwdHIgPSBhcmVhOyBzaXplIFx1MDAzZT0gMjsgc2l6ZSAtPSAyKVxuJiM0MztcdFx0KnB0ciYjNDM7JiM0MzsgPSAweDRhZmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKmhlYWRlcjtcbiYjNDM7XHRzdHJ1Y3Qgaml0X2N0eCBjdHg7XG4mIzQzO1x0dW5zaWduZWQgaW50IGltYWdlX3NpemU7XG4mIzQzO1x0dTggKmltYWdlX3B0cjtcbiYjNDM7XHRib29sIGV4dHJhX3Bhc3MgPSBwcm9nLVx1MDAzZWppdGVkO1xuJiM0MztcbiYjNDM7XHRpZiAoIXByb2ctXHUwMDNlaml0X3JlcXVlc3RlZClcbiYjNDM7XHRcdHJldHVybiBwcm9nO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvZy1cdTAwM2VqaXRlZCBcdTAwMjZcdTAwMjYgIXByb2ctXHUwMDNlYXV4LVx1MDAzZWZ1bmMpXG4mIzQzO1x0XHRyZXR1cm4gcHJvZztcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNmN0eCwgMCwgc2l6ZW9mKGN0eCkpO1xuJiM0MztcdGN0eC5wcm9nID0gcHJvZztcbiYjNDM7XG4mIzQzO1x0Y3R4Lm9mZnNldHMgPSBrdmNhbGxvYyhwcm9nLVx1MDAzZWxlbiAmIzQzOyAxLCBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFjdHgub2Zmc2V0cylcbiYjNDM7XHRcdHJldHVybiBwcm9nO1xuJiM0MztcbiYjNDM7XHRidWlsZF9wcm9sb2d1ZShcdTAwMjZjdHgpO1xuJiM0MztcdGlmIChidWlsZF9ib2R5KFx1MDAyNmN0eCkgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dF9vZmY7XG4mIzQzO1x0YnVpbGRfZXBpbG9ndWUoXHUwMDI2Y3R4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGV4dHJhX3Bhc3MpIHtcbiYjNDM7XHRcdGhlYWRlciA9IHByb2ctXHUwMDNlYXV4LVx1MDAzZWppdF9kYXRhO1xuJiM0MztcdFx0aW1hZ2VfcHRyID0gKHU4ICopcHJvZy1cdTAwM2VicGZfZnVuYztcbiYjNDM7XHRcdGltYWdlX3NpemUgPSBwcm9nLVx1MDAzZWppdGVkX2xlbjtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aW1hZ2Vfc2l6ZSA9IGN0eC5pZHggKiAyO1xuJiM0MztcdFx0aGVhZGVyID0gYnBmX2ppdF9iaW5hcnlfYWxsb2MoaW1hZ2Vfc2l6ZSwgXHUwMDI2aW1hZ2VfcHRyLCAyLCBqaXRfZmlsbF9ob2xlKTtcbiYjNDM7XHRcdGlmICghaGVhZGVyKVxuJiM0MztcdFx0XHRnb3RvIG91dF9vZmY7XG4mIzQzO1x0XHRwcm9nLVx1MDAzZWF1eC1cdTAwM2VqaXRfZGF0YSA9IGhlYWRlcjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGN0eC50YXJnZXQgPSAodTE2ICopaW1hZ2VfcHRyO1xuJiM0MztcdGN0eC5pZHggPSAwO1xuJiM0MztcbiYjNDM7XHRidWlsZF9wcm9sb2d1ZShcdTAwMjZjdHgpO1xuJiM0MztcdGlmIChidWlsZF9ib2R5KFx1MDAyNmN0eCkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGJwZl9qaXRfYmluYXJ5X2ZyZWUoaGVhZGVyKTtcbiYjNDM7XHRcdHByb2ctXHUwMDNlYXV4LVx1MDAzZWppdF9kYXRhID0gTlVMTDtcbiYjNDM7XHRcdHByb2ctXHUwMDNlYnBmX2Z1bmMgPSBOVUxMO1xuJiM0MztcdFx0cHJvZy1cdTAwM2VqaXRlZCA9IDA7XG4mIzQzO1x0XHRwcm9nLVx1MDAzZWppdGVkX2xlbiA9IDA7XG4mIzQzO1x0XHRnb3RvIG91dF9vZmY7XG4mIzQzO1x0fVxuJiM0MztcdGJ1aWxkX2VwaWxvZ3VlKFx1MDAyNmN0eCk7XG4mIzQzO1xuJiM0MztcdGZsdXNoX2ljYWNoZV9yYW5nZSgodTMyKWhlYWRlciwgKHUzMikoY3R4LnRhcmdldCAmIzQzOyBjdHguaWR4KSk7XG4mIzQzO1xuJiM0MztcdGlmIChicGZfaml0X2VuYWJsZSBcdTAwM2UgMSlcbiYjNDM7XHRcdGJwZl9qaXRfZHVtcChwcm9nLVx1MDAzZWxlbiwgaW1hZ2Vfc2l6ZSwgMiwgY3R4LnRhcmdldCk7XG4mIzQzO1xuJiM0MztcdGlmICgoIXByb2ctXHUwMDNlYXV4LVx1MDAzZWZ1bmMgfHwgZXh0cmFfcGFzcykgXHUwMDI2XHUwMDI2IGJwZl9qaXRfYmluYXJ5X2xvY2tfcm8oaGVhZGVyKSkge1xuJiM0MztcdFx0YnBmX2ppdF9iaW5hcnlfZnJlZShoZWFkZXIpO1xuJiM0MztcdFx0cHJvZy1cdTAwM2VicGZfZnVuYyA9IE5VTEw7XG4mIzQzO1x0XHRwcm9nLVx1MDAzZWppdGVkID0gMDtcbiYjNDM7XHRcdHByb2ctXHUwMDNlaml0ZWRfbGVuID0gMDtcbiYjNDM7XHRcdHByb2ctXHUwMDNlYXV4LVx1MDAzZWppdF9kYXRhID0gTlVMTDtcbiYjNDM7XHRcdGdvdG8gb3V0X29mZjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByb2ctXHUwMDNlYnBmX2Z1bmMgPSAodm9pZCAqKWN0eC50YXJnZXQ7XG4mIzQzO1x0cHJvZy1cdTAwM2VqaXRlZCA9IDE7XG4mIzQzO1x0cHJvZy1cdTAwM2VqaXRlZF9sZW4gPSBpbWFnZV9zaXplO1xuJiM0MztcbiYjNDM7b3V0X29mZjpcbiYjNDM7XHRrdmZyZWUoY3R4Lm9mZnNldHMpO1xuJiM0MztcdHJldHVybiBwcm9nO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDQ6NTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfbmVlZHNfemV4dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBKSVQgY29tcGlsZXIgZm9yIHRoZSBtNjhrIGFyY2hpdGVjdHVyZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGR1cmluZyBCUEYgcHJvZ3JhbSBsb2FkaW5nIHdoZW4gSklUIGlzIGVuYWJsZWQsIGFuZCBjYW4gYmUgdGVzdGVkIGluIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYzcwY2I2ZDM4Nzc3ZDVmNTE4ZjUyZjgzNDExZTRlYWJkZjRkN2QwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMzAgMDQ6NTA6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDJmYjFjNzVhZmQxNjMuLjUzMDU1MTgzNGMxNjMgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC00NzAxLDYgJiM0Mzs0NzAxLDEyIEBAIEw6CWJwZkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWFyY2gvbG9vbmdhcmNoL25ldC8KIAomIzQzO0JQRiBKSVQgZm9yIE02OEsKJiM0MztNOglLdWFuLVdlaSBDaGl1ICZsdDt2aXNpdG9yY2t3QGdtYWlsLmNvbSZndDsKJiM0MztMOglicGZAdmdlci5rZXJuZWwub3JnCiYjNDM7UzoJTWFpbnRhaW5lZAomIzQzO0Y6CWFyY2gvbTY4ay9uZXQvCiYjNDM7CiBCUEYgSklUIGZvciBNSVBTICgzMi1CSVQgQU5EIDY0LUJJVCkKIE06CUpvaGFuIEFsbWJsYWRoICZsdDtqb2hhbi5hbG1ibGFkaEBhbnlmaW5ldHdvcmtzLmNvbSZndDsKIE06CVBhdWwgQnVydG9uICZsdDtwYXVsYnVydG9uQGtlcm5lbC5vcmcmZ3Q7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvS2J1aWxkIGIvYXJjaC9tNjhrL0tidWlsZAppbmRleCA3NzYyYWY5ZjZkZWZlLi4wNThhZDQxYTcyOGM1IDEwMDY0NAotLS0gYS9hcmNoL202OGsvS2J1aWxkCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbTY4ay9LYnVpbGQKQEAgLTEsNSAmIzQzOzEsNSBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci1vYmoteQkJCQkmIzQzOz0ga2VybmVsLyBtbS8KJiM0MztvYmoteQkJCQkmIzQzOz0ga2VybmVsLyBtbS8gbmV0Lwogb2JqLSQoQ09ORklHX1E0MCkJCSYjNDM7PSBxNDAvCiBvYmotJChDT05GSUdfQU1JR0EpCQkmIzQzOz0gYW1pZ2EvCiBvYmotJChDT05GSUdfQVRBUkkpCQkmIzQzOz0gYXRhcmkvCmRpZmYgLS1naXQgYS9hcmNoL202OGsvS2NvbmZpZyBiL2FyY2gvbTY4ay9LY29uZmlnCmluZGV4IDExODM1ZWI1OWQ5NGQuLmRhNDNkNjY2MGM1Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbTY4ay9LY29uZmlnCkBAIC04LDYgJiM0Mzs4LDcgQEAgY29uZmlnIE02OEsKIAlzZWxlY3QgQVJDSF9IQVNfQ1BVX0ZJTkFMSVpFX0lOSVQgaWYgTU1VCiAJc2VsZWN0IEFSQ0hfSEFTX0NVUlJFTlRfU1RBQ0tfUE9JTlRFUgogCXNlbGVjdCBBUkNIX0hBU19ETUFfUFJFUF9DT0hFUkVOVCBpZiBNNjhLX05PTkNPSEVSRU5UX0RNQSAmYW1wOyZhbXA7ICFDT0xERklSRQomIzQzOwlzZWxlY3QgSEFWRV9FQlBGX0pJVCBpZiAoIUNPTERGSVJFICZhbXA7JmFtcDsgIU02ODAwMCkKIAlzZWxlY3QgQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0RFVklDRSBpZiBNNjhLX05PTkNPSEVSRU5UX0RNQQogCXNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIRyBpZiBSTVdfSU5TTlMKIAlzZWxlY3QgQVJDSF9NSUdIVF9IQVZFX1BDX1BBUlBPUlQgaWYgSVNBCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbmV0L01ha2VmaWxlIGIvYXJjaC9tNjhrL25ldC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5lYzViMTQ3NjMzMTY3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9tNjhrL25ldC9NYWtlZmlsZQpAQCAtMCwwICYjNDM7MSwyIEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBicGZfaml0X2NvbXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNmQ2NDdiYmE5NmViNAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTAsMCAmIzQzOzEsMTYzMCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIEJQRiBKSVQgY29tcGlsZXIgZm9yIG02OGsKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBLdWFuLVdlaSBDaGl1ICZsdDt2aXNpdG9yY2t3QGdtYWlsLmNvbSZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZpbHRlci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pcnFmbGFncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9jYWNoZWZsdXNoLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21hdGg2NC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saW1pdHMuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIFNUQUNLX09GRlNFVChrKSAoLTQgLSAoNCAqIChrKSkpCiYjNDM7CiYjNDM7ZW51bSB7CiYjNDM7CUJQRl9SMV9ISSwgQlBGX1IxX0xPLAomIzQzOwlCUEZfUjJfSEksIEJQRl9SMl9MTywKJiM0MzsJQlBGX1IzX0hJLCBCUEZfUjNfTE8sCiYjNDM7CUJQRl9SNF9ISSwgQlBGX1I0X0xPLAomIzQzOwlCUEZfUjVfSEksIEJQRl9SNV9MTywKJiM0MzsJQlBGX1I2X0hJLCBCUEZfUjZfTE8sCiYjNDM7CUJQRl9SN19ISSwgQlBGX1I3X0xPLAomIzQzOwlCUEZfUjhfSEksIEJQRl9SOF9MTywKJiM0MzsJQlBGX1I5X0hJLCBCUEZfUjlfTE8sCiYjNDM7CUJQRl9SMTBfSEksIEJQRl9SMTBfTE8sCiYjNDM7CUJQRl9BWF9ISSwgQlBGX0FYX0xPLAomIzQzOwlCUEZfVENfSEksIEJQRl9UQ19MTywKJiM0MzsJQlBGX0pJVF9TQ1JBVENIX1JFR1MsCiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIFNDUkFUQ0hfU0laRSAoQlBGX0pJVF9TQ1JBVENIX1JFR1MgKiA0KQomIzQzOwomIzQzOyNkZWZpbmUgVE1QX1JFR18xIDE0CiYjNDM7I2RlZmluZSBUTVBfUkVHXzIgMTUKJiM0MzsKJiM0MzsjZGVmaW5lIE02OEtfRDAgMAomIzQzOyNkZWZpbmUgTTY4S19EMSAxCiYjNDM7I2RlZmluZSBNNjhLX0QyIDIKJiM0MzsjZGVmaW5lIE02OEtfRDMgMwomIzQzOyNkZWZpbmUgTTY4S19ENCA0CiYjNDM7I2RlZmluZSBNNjhLX0Q1IDUKJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgczggYnBmMm02OGtbMTZdWzJdID0gewomIzQzOwlbQlBGX1JFR18wXSAgPSB7TTY4S19EMSwgTTY4S19EMH0sCiYjNDM7CVtCUEZfUkVHXzFdICA9IHtTVEFDS19PRkZTRVQoQlBGX1IxX0hJKSwgIFNUQUNLX09GRlNFVChCUEZfUjFfTE8pfSwKJiM0MzsJW0JQRl9SRUdfMl0gID0ge1NUQUNLX09GRlNFVChCUEZfUjJfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SMl9MTyl9LAomIzQzOwlbQlBGX1JFR18zXSAgPSB7U1RBQ0tfT0ZGU0VUKEJQRl9SM19ISSksICBTVEFDS19PRkZTRVQoQlBGX1IzX0xPKX0sCiYjNDM7CVtCUEZfUkVHXzRdICA9IHtTVEFDS19PRkZTRVQoQlBGX1I0X0hJKSwgIFNUQUNLX09GRlNFVChCUEZfUjRfTE8pfSwKJiM0MzsJW0JQRl9SRUdfNV0gID0ge1NUQUNLX09GRlNFVChCUEZfUjVfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SNV9MTyl9LAomIzQzOwlbQlBGX1JFR182XSAgPSB7U1RBQ0tfT0ZGU0VUKEJQRl9SNl9ISSksICBTVEFDS19PRkZTRVQoQlBGX1I2X0xPKX0sCiYjNDM7CVtCUEZfUkVHXzddICA9IHtTVEFDS19PRkZTRVQoQlBGX1I3X0hJKSwgIFNUQUNLX09GRlNFVChCUEZfUjdfTE8pfSwKJiM0MzsJW0JQRl9SRUdfOF0gID0ge1NUQUNLX09GRlNFVChCUEZfUjhfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SOF9MTyl9LAomIzQzOwlbQlBGX1JFR185XSAgPSB7U1RBQ0tfT0ZGU0VUKEJQRl9SOV9ISSksICBTVEFDS19PRkZTRVQoQlBGX1I5X0xPKX0sCiYjNDM7CVtCUEZfUkVHXzEwXSA9IHtTVEFDS19PRkZTRVQoQlBGX1IxMF9ISSksIFNUQUNLX09GRlNFVChCUEZfUjEwX0xPKX0sCiYjNDM7CVtCUEZfUkVHX0FYXSA9IHtTVEFDS19PRkZTRVQoQlBGX0FYX0hJKSwgIFNUQUNLX09GRlNFVChCUEZfQVhfTE8pfSwKJiM0MzsJW1RNUF9SRUdfMV0gID0ge002OEtfRDMsIE02OEtfRDJ9LAomIzQzOwlbVE1QX1JFR18yXSAgPSB7TTY4S19ENSwgTTY4S19ENH0sCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3Qgaml0X2N0eCB7CiYjNDM7CWNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZzsKJiM0MzsJdTE2ICp0YXJnZXQ7CiYjNDM7CXVuc2lnbmVkIGludCBpZHg7CiYjNDM7CWludCAqb2Zmc2V0czsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBub2lubGluZSB1MzIgaml0X211bDMyKHUzMiBhLCB1MzIgYikKJiM0Mzt7CiYjNDM7CXJldHVybiBhICogYjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIG5vaW5saW5lIHUzMiBqaXRfZGl2MzIodTMyIGEsIHUzMiBiKQomIzQzO3sKJiM0MzsJcmV0dXJuIGIgPyBhIC8gYiA6IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBub2lubGluZSB1MzIgaml0X21vZDMyKHUzMiBhLCB1MzIgYikKJiM0Mzt7CiYjNDM7CXJldHVybiBiID8gYSAlIGIgOiBhOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbm9pbmxpbmUgczMyIGppdF9zZGl2MzIoczMyIGEsIHMzMiBiKQomIzQzO3sKJiM0MzsJaWYgKGIgPT0gMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlpZiAoYSA9PSBTMzJfTUlOICZhbXA7JmFtcDsgYiA9PSAtMSkKJiM0MzsJCXJldHVybiBTMzJfTUlOOwomIzQzOwlyZXR1cm4gYSAvIGI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBub2lubGluZSBzMzIgaml0X3Ntb2QzMihzMzIgYSwgczMyIGIpCiYjNDM7ewomIzQzOwlpZiAoYiA9PSAwKQomIzQzOwkJcmV0dXJuIGE7CiYjNDM7CWlmIChhID09IFMzMl9NSU4gJmFtcDsmYW1wOyBiID09IC0xKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiBhICUgYjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIG5vaW5saW5lIHU2NCBqaXRfbXVsNjQodTY0IGEsIHU2NCBiKQomIzQzO3sKJiM0MzsJcmV0dXJuIGEgKiBiOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbm9pbmxpbmUgdTY0IGppdF9kaXY2NCh1NjQgYSwgdTY0IGIpCiYjNDM7ewomIzQzOwlyZXR1cm4gYiA/IGRpdjY0X3U2NChhLCBiKSA6IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBub2lubGluZSBzNjQgaml0X3NkaXY2NChzNjQgYSwgczY0IGIpCiYjNDM7ewomIzQzOwlpZiAoYiA9PSAwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWlmIChhID09IFM2NF9NSU4gJmFtcDsmYW1wOyBiID09IC0xKQomIzQzOwkJcmV0dXJuIFM2NF9NSU47CiYjNDM7CXJldHVybiBkaXY2NF9zNjQoYSwgYik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBub2lubGluZSB1NjQgaml0X21vZDY0KHU2NCBhLCB1NjQgYikKJiM0Mzt7CiYjNDM7CXU2NCByZW07CiYjNDM7CiYjNDM7CWlmIChiID09IDApCiYjNDM7CQlyZXR1cm4gYTsKJiM0MzsJZGl2NjRfdTY0X3JlbShhLCBiLCAmYW1wO3JlbSk7CiYjNDM7CXJldHVybiByZW07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBub2lubGluZSBzNjQgaml0X3Ntb2Q2NChzNjQgYSwgczY0IGIpCiYjNDM7ewomIzQzOwlpZiAoYiA9PSAwKQomIzQzOwkJcmV0dXJuIGE7CiYjNDM7CWlmIChhID09IFM2NF9NSU4gJmFtcDsmYW1wOyBiID09IC0xKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiBhIC0gZGl2NjRfczY0KGEsIGIpICogYjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHUzMiBqaXRfYXRvbWljMzIodTMyICpwdHIsIHUzMiB2YWwsIHUzMiBvcCwgdTMyIGNtcCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXUzMiBvbGQ7CiYjNDM7CiYjNDM7CWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKJiM0MzsJb2xkID0gKnB0cjsKJiM0MzsJc3dpdGNoIChvcCkgewomIzQzOwljYXNlIEJQRl9BREQ6CiYjNDM7CWNhc2UgQlBGX0FERCB8IEJQRl9GRVRDSDoKJiM0MzsJCSpwdHIgJiM0Mzs9IHZhbDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9BTkQ6CiYjNDM7CWNhc2UgQlBGX0FORCB8IEJQRl9GRVRDSDoKJiM0MzsJCSpwdHIgJmFtcDs9IHZhbDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9PUjoKJiM0MzsJY2FzZSBCUEZfT1IgfCBCUEZfRkVUQ0g6CiYjNDM7CQkqcHRyIHw9IHZhbDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9YT1I6CiYjNDM7CWNhc2UgQlBGX1hPUiB8IEJQRl9GRVRDSDoKJiM0MzsJCSpwdHIgXj0gdmFsOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX1hDSEc6CiYjNDM7CQkqcHRyID0gdmFsOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0NNUFhDSEc6CiYjNDM7CQlpZiAob2xkID09IGNtcCkKJiM0MzsJCQkqcHRyID0gdmFsOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwomIzQzOwomIzQzOwlyZXR1cm4gb2xkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTY0IGppdF9hdG9taWM2NCh1MzIgKnB0ciwgdTMyIHZhbF9oaSwgdTMyIHZhbF9sbywgdTMyIG9wLCB1MzIgY21wX2hpLCB1MzIgY21wX2xvKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJdTY0IG9sZCwgdmFsLCBjbXA7CiYjNDM7CXU2NCAqcHRyNjQgPSAodTY0ICopcHRyOwomIzQzOwomIzQzOwl2YWwgPSAoKHU2NCl2YWxfaGkgJmx0OyZsdDsgMzIpIHwgdmFsX2xvOwomIzQzOwljbXAgPSAoKHU2NCljbXBfaGkgJmx0OyZsdDsgMzIpIHwgY21wX2xvOwomIzQzOwomIzQzOwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiYjNDM7CW9sZCA9ICpwdHI2NDsKJiM0MzsJc3dpdGNoIChvcCkgewomIzQzOwljYXNlIEJQRl9BREQ6CiYjNDM7CWNhc2UgQlBGX0FERCB8IEJQRl9GRVRDSDoKJiM0MzsJCSpwdHI2NCAmIzQzOz0gdmFsOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0FORDoKJiM0MzsJY2FzZSBCUEZfQU5EIHwgQlBGX0ZFVENIOgomIzQzOwkJKnB0cjY0ICZhbXA7PSB2YWw7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfT1I6CiYjNDM7CWNhc2UgQlBGX09SIHwgQlBGX0ZFVENIOgomIzQzOwkJKnB0cjY0IHw9IHZhbDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9YT1I6CiYjNDM7CWNhc2UgQlBGX1hPUiB8IEJQRl9GRVRDSDoKJiM0MzsJCSpwdHI2NCBePSB2YWw7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfWENIRzoKJiM0MzsJCSpwdHI2NCA9IHZhbDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9DTVBYQ0hHOgomIzQzOwkJaWYgKG9sZCA9PSBjbXApCiYjNDM7CQkJKnB0cjY0ID0gdmFsOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwomIzQzOwomIzQzOwlyZXR1cm4gb2xkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZW1pdF8xNihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1MTYgaW5zdCkKJiM0Mzt7CiYjNDM7CWlmIChjdHgtJmd0O3RhcmdldCkKJiM0MzsJCWN0eC0mZ3Q7dGFyZ2V0W2N0eC0mZ3Q7aWR4XSA9IGluc3Q7CiYjNDM7CWN0eC0mZ3Q7aWR4JiM0MzsmIzQzOzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVtaXRfMzIoc3RydWN0IGppdF9jdHggKmN0eCwgdTMyIHZhbCkKJiM0Mzt7CiYjNDM7CWVtaXRfMTYoY3R4LCB2YWwgJmd0OyZndDsgMTYpOwomIzQzOwllbWl0XzE2KGN0eCwgdmFsICZhbXA7IDB4ZmZmZik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBpc19zdGFja2VkKHM4IHJlZykKJiM0Mzt7CiYjNDM7CXJldHVybiByZWcgJmx0OyAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgczggYnBmX2dldF9yZWczMihzOCBicGZfcmVnLCBzOCB0bXBfcmVnLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJaWYgKGlzX3N0YWNrZWQoYnBmX3JlZykpIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIwMmUgfCAodG1wX3JlZyAmbHQ7Jmx0OyA5KSk7CQkvKiBtb3ZlLmwgZDE2KCVmcCksIHJlZyAqLwomIzQzOwkJZW1pdF8xNihjdHgsICh1MTYpYnBmX3JlZyk7CiYjNDM7CQlyZXR1cm4gdG1wX3JlZzsKJiM0MzsJfQomIzQzOwlyZXR1cm4gYnBmX3JlZzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYnBmX3B1dF9yZWczMihzOCBicGZfcmVnLCBzOCBzcmNfcmVnLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJaWYgKGlzX3N0YWNrZWQoYnBmX3JlZykpIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDJkNDAgfCBzcmNfcmVnKTsJCQkvKiBtb3ZlLmwgcmVnLCBkMTYoJWZwKSAqLwomIzQzOwkJZW1pdF8xNihjdHgsICh1MTYpYnBmX3JlZyk7CiYjNDM7CX0gZWxzZSBpZiAoYnBmX3JlZyAhPSBzcmNfcmVnKSB7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGJwZl9yZWcgJmx0OyZsdDsgOSkgfCBzcmNfcmVnKTsgLyogbW92ZS5sIHNyYywgZHN0ICovCiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hbHUzMl9uZWcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJY29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tJmd0O2RzdF9yZWddOwomIzQzOwljb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07CiYjNDM7CXM4IGRfcmVnID0gYnBmX2dldF9yZWczMihkc3RbMV0sIHRtcDFbMV0sIGN0eCk7CiYjNDM7CiYjNDM7CWVtaXRfMTYoY3R4LCAweDQ0ODAgfCBkX3JlZyk7CQkJCS8qIG5lZy5sIGRfcmVnICovCiYjNDM7CiYjNDM7CWJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX3JlZywgY3R4KTsKJiM0MzsJZW1pdF8xNihjdHgsIDB4NzAwMCB8ICh0bXAxWzBdICZsdDsmbHQ7IDkpKTsJCQkvKiBtb3ZlcSAjMCwgdG1wMSAqLwomIzQzOwlicGZfcHV0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hbHU2NF9uZWcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJY29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tJmd0O2RzdF9yZWddOwomIzQzOwljb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07CiYjNDM7CXM4IGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTsKJiM0MzsJczggZF9oaSA9IGJwZl9nZXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpOwomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHg0NDgwIHwgZF9sbyk7CQkJCS8qIG5lZy5sIGRfbG8gKi8KJiM0MzsJZW1pdF8xNihjdHgsIDB4NDA4MCB8IGRfaGkpOwkJCQkvKiBuZWd4LmwgZF9oaSAqLwomIzQzOwomIzQzOwlicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9sbywgY3R4KTsKJiM0MzsJYnBmX3B1dF9yZWczMihkc3RbMF0sIGRfaGksIGN0eCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVtaXRfYWx1MzJfeChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwljb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi0mZ3Q7ZHN0X3JlZ107CiYjNDM7CWNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLSZndDtzcmNfcmVnXTsKJiM0MzsJY29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdOwomIzQzOwljb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07CiYjNDM7CXM4IGRfcmVnLCBzX3JlZzsKJiM0MzsKJiM0MzsJZF9yZWcgPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTsKJiM0MzsJc19yZWcgPSBicGZfZ2V0X3JlZzMyKHNyY1sxXSwgdG1wMlsxXSwgY3R4KTsKJiM0MzsKJiM0MzsJc3dpdGNoIChCUEZfT1AoaW5zbi0mZ3Q7Y29kZSkpIHsKJiM0MzsJY2FzZSBCUEZfTU9WOgomIzQzOwkJaWYgKGluc24tJmd0O29mZiA9PSA4IHx8IGluc24tJmd0O29mZiA9PSAxNikgewomIzQzOwkJCWlmIChkX3JlZyAhPSBzX3JlZykKJiM0MzsJCQkJZW1pdF8xNihjdHgsIDB4MjAwMCB8IChkX3JlZyAmbHQ7Jmx0OyA5KSB8IHNfcmVnKTsgLyogbW92ZS5sIHNyYywgZHN0ICovCiYjNDM7CQkJaWYgKGluc24tJmd0O29mZiA9PSA4KQomIzQzOwkJCQllbWl0XzE2KGN0eCwgMHg0OWMwIHwgZF9yZWcpOwkvKiBleHRiLmwgZF9yZWcgKi8KJiM0MzsJCQllbHNlCiYjNDM7CQkJCWVtaXRfMTYoY3R4LCAweDQ4YzAgfCBkX3JlZyk7CS8qIGV4dC5sIGRfcmVnICovCiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWlmIChkX3JlZyAhPSBzX3JlZykKJiM0MzsJCQkJZW1pdF8xNihjdHgsIDB4MjAwMCB8IChkX3JlZyAmbHQ7Jmx0OyA5KSB8IHNfcmVnKTsgLyogbW92ZS5sIHNyYywgZHN0ICovCiYjNDM7CQl9CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfQUREOgomIzQzOwkJZW1pdF8xNihjdHgsIDB4ZDA4MCB8IChkX3JlZyAmbHQ7Jmx0OyA5KSB8IHNfcmVnKTsJLyogYWRkLmwgc3JjLCBkc3QgKi8KJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9TVUI6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHg5MDgwIHwgKGRfcmVnICZsdDsmbHQ7IDkpIHwgc19yZWcpOwkvKiBzdWIubCBzcmMsIGRzdCAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0FORDoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweGMwODAgfCAoZF9yZWcgJmx0OyZsdDsgOSkgfCBzX3JlZyk7CS8qIGFuZC5sIHNyYywgZHN0ICovCiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfT1I6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfcmVnICZsdDsmbHQ7IDkpIHwgc19yZWcpOwkvKiBvci5sIHNyYywgZHN0ICovCiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfWE9SOgomIzQzOwkJZW1pdF8xNihjdHgsIDB4YjE4MCB8IChzX3JlZyAmbHQ7Jmx0OyA5KSB8IGRfcmVnKTsJLyogZW9yLmwgc3JjLCBkc3QgKi8KJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9MU0g6CiYjNDM7CWNhc2UgQlBGX1JTSDoKJiM0MzsJY2FzZSBCUEZfQVJTSDogewomIzQzOwkJczggY291bnRfcmVnID0gdG1wMlsxXTsKJiM0MzsKJiM0MzsJCWlmIChzX3JlZyAhPSBjb3VudF9yZWcpCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4MjAwMCB8IChjb3VudF9yZWcgJmx0OyZsdDsgOSkgfCBzX3JlZyk7IC8qIG1vdmUubCBzcmMsIGNvdW50ICovCiYjNDM7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgwMjgwIHwgY291bnRfcmVnKTsJCS8qIGFuZGkubCAjaW1tLCBjb3VudCAqLwomIzQzOwkJZW1pdF8zMihjdHgsIDB4MWYpOwomIzQzOwomIzQzOwkJaWYgKEJQRl9PUChpbnNuLSZndDtjb2RlKSA9PSBCUEZfTFNIKQomIzQzOwkJCWVtaXRfMTYoY3R4LCAweGUxYTggfCAoY291bnRfcmVnICZsdDsmbHQ7IDkpIHwgZF9yZWcpOyAvKiBsc2wubCBjb3VudCwgZHN0ICovCiYjNDM7CQllbHNlIGlmIChCUEZfT1AoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1JTSCkKJiM0MzsJCQllbWl0XzE2KGN0eCwgMHhlMGE4IHwgKGNvdW50X3JlZyAmbHQ7Jmx0OyA5KSB8IGRfcmVnKTsgLyogbHNyLmwgY291bnQsIGRzdCAqLwomIzQzOwkJZWxzZQomIzQzOwkJCWVtaXRfMTYoY3R4LCAweGUwYTAgfCAoY291bnRfcmVnICZsdDsmbHQ7IDkpIHwgZF9yZWcpOyAvKiBhc3IubCBjb3VudCwgZHN0ICovCiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX3JlZywgY3R4KTsKJiM0MzsJZW1pdF8xNihjdHgsIDB4NzAwMCB8ICh0bXAxWzBdICZsdDsmbHQ7IDkpKTsJCQkvKiBtb3ZlcSAjMCwgdG1wMSAqLwomIzQzOwlicGZfcHV0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hbHUzMl9rKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLSZndDtkc3RfcmVnXTsKJiM0MzsJY29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdOwomIzQzOwljb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07CiYjNDM7CXM4IGRfcmVnOwomIzQzOwomIzQzOwlkX3JlZyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpOwomIzQzOwomIzQzOwlzd2l0Y2ggKEJQRl9PUChpbnNuLSZndDtjb2RlKSkgewomIzQzOwljYXNlIEJQRl9NT1Y6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyMDNjIHwgKGRfcmVnICZsdDsmbHQ7IDkpKTsJCS8qIG1vdmUubCAjaW1tLCBkc3QgKi8KJiM0MzsJCWVtaXRfMzIoY3R4LCBpbnNuLSZndDtpbW0pOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0FERDoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDA2ODAgfCBkX3JlZyk7CQkJLyogYWRkaS5sICNpbW0sIGRzdCAqLwomIzQzOwkJZW1pdF8zMihjdHgsIGluc24tJmd0O2ltbSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfU1VCOgomIzQzOwkJZW1pdF8xNihjdHgsIDB4MDQ4MCB8IGRfcmVnKTsJCQkvKiBzdWJpLmwgI2ltbSwgZHN0ICovCiYjNDM7CQllbWl0XzMyKGN0eCwgaW5zbi0mZ3Q7aW1tKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9BTkQ6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgwMjgwIHwgZF9yZWcpOwkJCS8qIGFuZGkubCAjaW1tLCBkc3QgKi8KJiM0MzsJCWVtaXRfMzIoY3R4LCBpbnNuLSZndDtpbW0pOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX09SOgomIzQzOwkJZW1pdF8xNihjdHgsIDB4MDA4MCB8IGRfcmVnKTsJCQkvKiBvcmkubCAjaW1tLCBkc3QgKi8KJiM0MzsJCWVtaXRfMzIoY3R4LCBpbnNuLSZndDtpbW0pOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX1hPUjoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDBhODAgfCBkX3JlZyk7CQkJLyogZW9yaS5sICNpbW0sIGRzdCAqLwomIzQzOwkJZW1pdF8zMihjdHgsIGluc24tJmd0O2ltbSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfTFNIOgomIzQzOwljYXNlIEJQRl9SU0g6CiYjNDM7CWNhc2UgQlBGX0FSU0g6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHRtcDJbMV0gJmx0OyZsdDsgOSkpOwkJLyogbW92ZS5sICNpbW0sIGNvdW50ICovCiYjNDM7CQllbWl0XzMyKGN0eCwgaW5zbi0mZ3Q7aW1tICZhbXA7IDB4MWYpOwomIzQzOwomIzQzOwkJaWYgKEJQRl9PUChpbnNuLSZndDtjb2RlKSA9PSBCUEZfTFNIKQomIzQzOwkJCWVtaXRfMTYoY3R4LCAweGUxYTggfCAodG1wMlsxXSAmbHQ7Jmx0OyA5KSB8IGRfcmVnKTsJLyogbHNsLmwgY291bnQsIGRzdCAqLwomIzQzOwkJZWxzZSBpZiAoQlBGX09QKGluc24tJmd0O2NvZGUpID09IEJQRl9SU0gpCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4ZTBhOCB8ICh0bXAyWzFdICZsdDsmbHQ7IDkpIHwgZF9yZWcpOwkvKiBsc3IubCBjb3VudCwgZHN0ICovCiYjNDM7CQllbHNlCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4ZTBhMCB8ICh0bXAyWzFdICZsdDsmbHQ7IDkpIHwgZF9yZWcpOwkvKiBhc3IubCBjb3VudCwgZHN0ICovCiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9yZWcsIGN0eCk7CiYjNDM7CWVtaXRfMTYoY3R4LCAweDcwMDAgfCAodG1wMVswXSAmbHQ7Jmx0OyA5KSk7CQkJLyogbW92ZXEgIzAsIHRtcDEgKi8KJiM0MzsJYnBmX3B1dF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVtaXRfYWx1NjRfeChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwljb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi0mZ3Q7ZHN0X3JlZ107CiYjNDM7CWNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLSZndDtzcmNfcmVnXTsKJiM0MzsJY29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdOwomIzQzOwljb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07CiYjNDM7CXM4IGRfbG8sIGRfaGksIHNfbG8sIHNfaGk7CiYjNDM7CiYjNDM7CWRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTsKJiM0MzsJZF9oaSA9IGJwZl9nZXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpOwomIzQzOwlzX2xvID0gYnBmX2dldF9yZWczMihzcmNbMV0sIHRtcDJbMV0sIGN0eCk7CiYjNDM7CXNfaGkgPSBicGZfZ2V0X3JlZzMyKHNyY1swXSwgdG1wMlswXSwgY3R4KTsKJiM0MzsKJiM0MzsJc3dpdGNoIChCUEZfT1AoaW5zbi0mZ3Q7Y29kZSkpIHsKJiM0MzsJY2FzZSBCUEZfTU9WOgomIzQzOwkJaWYgKGluc24tJmd0O29mZiA9PSA4IHx8IGluc24tJmd0O29mZiA9PSAxNiB8fCBpbnNuLSZndDtvZmYgPT0gMzIpIHsKJiM0MzsJCQlpZiAoZF9sbyAhPSBzX2xvKQomIzQzOwkJCQllbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGRfbG8gJmx0OyZsdDsgOSkgfCBzX2xvKTsgLyogbW92ZS5sIHNyYywgZHN0ICovCiYjNDM7CiYjNDM7CQkJaWYgKGluc24tJmd0O29mZiA9PSA4KQomIzQzOwkJCQllbWl0XzE2KGN0eCwgMHg0OWMwIHwgZF9sbyk7CQkvKiBleHRiLmwgZF9sbyAqLwomIzQzOwkJCWVsc2UgaWYgKGluc24tJmd0O29mZiA9PSAxNikKJiM0MzsJCQkJZW1pdF8xNihjdHgsIDB4NDhjMCB8IGRfbG8pOwkJLyogZXh0LmwgZF9sbyAqLwomIzQzOwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweDRhODAgfCBkX2xvKTsJCQkvKiB0c3QubCBkX2xvICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4NWJjMCB8IGRfaGkpOwkJCS8qIHNtaSBkX2hpICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4NDljMCB8IGRfaGkpOwkJCS8qIGV4dGIubCBkX2hpICovCiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWlmIChkX2xvICE9IHNfbG8pCiYjNDM7CQkJCWVtaXRfMTYoY3R4LCAweDIwMDAgfCAoZF9sbyAmbHQ7Jmx0OyA5KSB8IHNfbG8pOyAvKiBtb3ZlLmwgc19sbywgZF9sbyAqLwomIzQzOwkJCWlmIChkX2hpICE9IHNfaGkpCiYjNDM7CQkJCWVtaXRfMTYoY3R4LCAweDIwMDAgfCAoZF9oaSAmbHQ7Jmx0OyA5KSB8IHNfaGkpOyAvKiBtb3ZlLmwgc19oaSwgZF9oaSAqLwomIzQzOwkJfQomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0FERDoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweGQwODAgfCAoZF9sbyAmbHQ7Jmx0OyA5KSB8IHNfbG8pOwkJLyogYWRkLmwgc19sbywgZF9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4ZDE4MCB8IChkX2hpICZsdDsmbHQ7IDkpIHwgc19oaSk7CQkvKiBhZGR4Lmwgc19oaSwgZF9oaSAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX1NVQjoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDkwODAgfCAoZF9sbyAmbHQ7Jmx0OyA5KSB8IHNfbG8pOwkJLyogc3ViLmwgc19sbywgZF9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4OTE4MCB8IChkX2hpICZsdDsmbHQ7IDkpIHwgc19oaSk7CQkvKiBzdWJ4Lmwgc19oaSwgZF9oaSAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0FORDoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweGMwODAgfCAoZF9sbyAmbHQ7Jmx0OyA5KSB8IHNfbG8pOwkJLyogYW5kLmwgc19sbywgZF9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4YzA4MCB8IChkX2hpICZsdDsmbHQ7IDkpIHwgc19oaSk7CQkvKiBhbmQubCBzX2hpLCBkX2hpICovCiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfT1I6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfbG8gJmx0OyZsdDsgOSkgfCBzX2xvKTsJCS8qIG9yLmwgc19sbywgZF9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4ODA4MCB8IChkX2hpICZsdDsmbHQ7IDkpIHwgc19oaSk7CQkvKiBvci5sIHNfaGksIGRfaGkgKi8KJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9YT1I6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHhiMTgwIHwgKHNfbG8gJmx0OyZsdDsgOSkgfCBkX2xvKTsJCS8qIGVvci5sIHNfbG8sIGRfbG8gKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCAweGIxODAgfCAoc19oaSAmbHQ7Jmx0OyA5KSB8IGRfaGkpOwkJLyogZW9yLmwgc19oaSwgZF9oaSAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnBmX3B1dF9yZWczMihkc3RbMV0sIGRfbG8sIGN0eCk7CiYjNDM7CWJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbWl0X2FsdTY0X2soY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJY29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tJmd0O2RzdF9yZWddOwomIzQzOwljb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07CiYjNDM7CWNvbnN0IHM4ICp0bXAyID0gYnBmMm02OGtbVE1QX1JFR18yXTsKJiM0MzsJczggZF9sbywgZF9oaSwgc19sbywgc19oaTsKJiM0MzsJdTMyIGltbV9sbyA9IGluc24tJmd0O2ltbTsKJiM0MzsJdTMyIGltbV9oaSA9IGluc24tJmd0O2ltbSAmbHQ7IDAgPyAweGZmZmZmZmZmIDogMDsKJiM0MzsKJiM0MzsJZF9sbyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpOwomIzQzOwlkX2hpID0gYnBmX2dldF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7CiYjNDM7CiYjNDM7CWlmIChCUEZfT1AoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX01PVikgewomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjAzYyB8IChkX2xvICZsdDsmbHQ7IDkpKTsJCQkvKiBtb3ZlLmwgI2ltbSwgZF9sbyAqLwomIzQzOwkJZW1pdF8zMihjdHgsIGltbV9sbyk7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyMDNjIHwgKGRfaGkgJmx0OyZsdDsgOSkpOwkJCS8qIG1vdmUubCAjaW1tLCBkX2hpICovCiYjNDM7CQllbWl0XzMyKGN0eCwgaW1tX2hpKTsKJiM0MzsJCWJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX2xvLCBjdHgpOwomIzQzOwkJYnBmX3B1dF9yZWczMihkc3RbMF0sIGRfaGksIGN0eCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc19sbyA9IHRtcDJbMV07CiYjNDM7CXNfaGkgPSB0bXAyWzBdOwomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHNfbG8gJmx0OyZsdDsgOSkpOwkJCQkvKiBtb3ZlLmwgI2ltbSwgc19sbyAqLwomIzQzOwllbWl0XzMyKGN0eCwgaW1tX2xvKTsKJiM0MzsJZW1pdF8xNihjdHgsIDB4MjAzYyB8IChzX2hpICZsdDsmbHQ7IDkpKTsJCQkJLyogbW92ZS5sICNpbW0sIHNfaGkgKi8KJiM0MzsJZW1pdF8zMihjdHgsIGltbV9oaSk7CiYjNDM7CiYjNDM7CXN3aXRjaCAoQlBGX09QKGluc24tJmd0O2NvZGUpKSB7CiYjNDM7CWNhc2UgQlBGX0FERDoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweGQwODAgfCAoZF9sbyAmbHQ7Jmx0OyA5KSB8IHNfbG8pOwkJLyogYWRkLmwgc19sbywgZF9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4ZDE4MCB8IChkX2hpICZsdDsmbHQ7IDkpIHwgc19oaSk7CQkvKiBhZGR4Lmwgc19oaSwgZF9oaSAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX1NVQjoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDkwODAgfCAoZF9sbyAmbHQ7Jmx0OyA5KSB8IHNfbG8pOwkJLyogc3ViLmwgc19sbywgZF9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4OTE4MCB8IChkX2hpICZsdDsmbHQ7IDkpIHwgc19oaSk7CQkvKiBzdWJ4Lmwgc19oaSwgZF9oaSAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0FORDoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweGMwODAgfCAoZF9sbyAmbHQ7Jmx0OyA5KSB8IHNfbG8pOwkJLyogYW5kLmwgc19sbywgZF9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4YzA4MCB8IChkX2hpICZsdDsmbHQ7IDkpIHwgc19oaSk7CQkvKiBhbmQubCBzX2hpLCBkX2hpICovCiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfT1I6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfbG8gJmx0OyZsdDsgOSkgfCBzX2xvKTsJCS8qIG9yLmwgc19sbywgZF9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4ODA4MCB8IChkX2hpICZsdDsmbHQ7IDkpIHwgc19oaSk7CQkvKiBvci5sIHNfaGksIGRfaGkgKi8KJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9YT1I6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHhiMTgwIHwgKHNfbG8gJmx0OyZsdDsgOSkgfCBkX2xvKTsJCS8qIGVvci5sIHNfbG8sIGRfbG8gKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCAweGIxODAgfCAoc19oaSAmbHQ7Jmx0OyA5KSB8IGRfaGkpOwkJLyogZW9yLmwgc19oaSwgZF9oaSAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnBmX3B1dF9yZWczMihkc3RbMV0sIGRfbG8sIGN0eCk7CiYjNDM7CWJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbWl0X2FsdTY0X3NoaWZ0KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBpc19pbW0pCiYjNDM7ewomIzQzOwljb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi0mZ3Q7ZHN0X3JlZ107CiYjNDM7CWNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTsKJiM0MzsJY29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdOwomIzQzOwlzOCBkX2xvLCBkX2hpLCBjb3VudF9yZWc7CiYjNDM7CWludCBsb29wX3N0YXJ0LCBkb25lX2lkeDsKJiM0MzsKJiM0MzsJZF9sbyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpOwomIzQzOwlkX2hpID0gYnBmX2dldF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7CiYjNDM7CWNvdW50X3JlZyA9IHRtcDJbMV07CiYjNDM7CiYjNDM7CWlmIChpc19pbW0pIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIwM2MgfCAoY291bnRfcmVnICZsdDsmbHQ7IDkpKTsJCS8qIG1vdmUubCAjaW1tLCBjb3VudF9yZWcgKi8KJiM0MzsJCWVtaXRfMzIoY3R4LCBpbnNuLSZndDtpbW0pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJY29uc3QgczggKnNyYyA9IGJwZjJtNjhrW2luc24tJmd0O3NyY19yZWddOwomIzQzOwkJczggc19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpOwomIzQzOwomIzQzOwkJaWYgKGNvdW50X3JlZyAhPSBzX2xvKQomIzQzOwkJCWVtaXRfMTYoY3R4LCAweDIwMDAgfCAoY291bnRfcmVnICZsdDsmbHQ7IDkpIHwgc19sbyk7CS8qIG1vdmUubCBzX2xvLCBjb3VudF9yZWcgKi8KJiM0MzsJfQomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHgwMjgwIHwgY291bnRfcmVnKTsJCQkvKiBhbmRpLmwgIzB4M2YsIGNvdW50X3JlZyAqLwomIzQzOwllbWl0XzMyKGN0eCwgMHgzZik7CiYjNDM7CiYjNDM7CWVtaXRfMTYoY3R4LCAweDRhODAgfCBjb3VudF9yZWcpOwkJCQkvKiB0c3QubCBjb3VudF9yZWcgKi8KJiM0MzsJZW1pdF8xNihjdHgsIDB4NjcwMCk7CQkJCQkJLyogYmVxLncgZG9uZV9pZHggKi8KJiM0MzsJZG9uZV9pZHggPSBjdHgtJmd0O2lkeDsKJiM0MzsJZW1pdF8xNihjdHgsIDApOwomIzQzOwomIzQzOwlsb29wX3N0YXJ0ID0gY3R4LSZndDtpZHg7CiYjNDM7CiYjNDM7CWlmIChCUEZfT1AoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0xTSCkgewomIzQzOwkJZW1pdF8xNihjdHgsIDB4ZTM4OCB8IGRfbG8pOwkJCQkvKiBsc2xsICMxLCBkX2xvICovCiYjNDM7CQllbWl0XzE2KGN0eCwgMHhlMzkwIHwgZF9oaSk7CQkJCS8qIHJveGwubCAjMSwgZF9oaSAqLwomIzQzOwl9IGVsc2UgaWYgKEJQRl9PUChpbnNuLSZndDtjb2RlKSA9PSBCUEZfUlNIKSB7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHhlMjg4IHwgZF9oaSk7CQkJCS8qIGxzcmwgIzEsIGRfaGkgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCAweGUyOTAgfCBkX2xvKTsJCQkJLyogcm94ci5sICMxLCBkX2xvICovCiYjNDM7CX0gZWxzZSBpZiAoQlBGX09QKGluc24tJmd0O2NvZGUpID09IEJQRl9BUlNIKSB7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHhlMjgwIHwgZF9oaSk7CQkJCS8qIGFzcmwgIzEsIGRfaGkgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCAweGUyOTAgfCBkX2xvKTsJCQkJLyogcm94ci5sICMxLCBkX2xvICovCiYjNDM7CX0KJiM0MzsKJiM0MzsJZW1pdF8xNihjdHgsIDB4NTM4MCB8IGNvdW50X3JlZyk7CQkJCS8qIHN1YnEubCAjMSwgY291bnRfcmVnICovCiYjNDM7CWVtaXRfMTYoY3R4LCAweDY2MDApOwkJCQkJCS8qIGJuZS53IGxvb3Bfc3RhcnQgKi8KJiM0MzsJZW1pdF8xNihjdHgsIChsb29wX3N0YXJ0IC0gKGludCljdHgtJmd0O2lkeCkgKiAyKTsKJiM0MzsKJiM0MzsJaWYgKGN0eC0mZ3Q7dGFyZ2V0KQomIzQzOwkJY3R4LSZndDt0YXJnZXRbZG9uZV9pZHhdID0gKGN0eC0mZ3Q7aWR4IC0gZG9uZV9pZHgpICogMjsKJiM0MzsKJiM0MzsJYnBmX3B1dF9yZWczMihkc3RbMV0sIGRfbG8sIGN0eCk7CiYjNDM7CWJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbWl0X2JwZl9lbmQoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJY29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tJmd0O2RzdF9yZWddOwomIzQzOwljb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07CiYjNDM7CXM4IGRfbG8sIGRfaGk7CiYjNDM7CWJvb2wgdG9fbGUgPSBCUEZfU1JDKGluc24tJmd0O2NvZGUpID09IEJQRl9UT19MRTsKJiM0MzsJaW50IGltbSA9IGluc24tJmd0O2ltbTsKJiM0MzsKJiM0MzsJZF9sbyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpOwomIzQzOwlkX2hpID0gYnBmX2dldF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7CiYjNDM7CiYjNDM7CWlmICh0b19sZSkgewomIzQzOwkJc3dpdGNoIChpbW0pIHsKJiM0MzsJCWNhc2UgMTY6CiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4MDI4MCB8IGRfbG8pOwkJCS8qIGFuZGkubCAjMHhmZmZmLCBkX2xvICovCiYjNDM7CQkJZW1pdF8zMihjdHgsIDB4ZmZmZik7CiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4ZTA1OCB8IGRfbG8pOwkJCS8qIHJvci53ICM4LCBkX2xvICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2hpICZsdDsmbHQ7IDkpKTsJCS8qIG1vdmVxICMwLCBkX2hpICovCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIDMyOgomIzQzOwkJCWVtaXRfMTYoY3R4LCAweGUwNTggfCBkX2xvKTsJCQkvKiByb3IudyAjOCwgZF9sbyAqLwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweDQ4NDAgfCBkX2xvKTsJCQkvKiBzd2FwIGRfbG8gKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9sbyk7CQkJLyogcm9yLncgIzgsIGRfbG8gKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg3MDAwIHwgKGRfaGkgJmx0OyZsdDsgOSkpOwkJLyogbW92ZXEgIzAsIGRfaGkgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgNjQ6CiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4ZTA1OCB8IGRfbG8pOwkJCS8qIHJvci53ICM4LCBkX2xvICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4NDg0MCB8IGRfbG8pOwkJCS8qIHN3YXAgZF9sbyAqLwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweGUwNTggfCBkX2xvKTsJCQkvKiByb3IudyAjOCwgZF9sbyAqLwomIzQzOwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweGUwNTggfCBkX2hpKTsJCQkvKiByb3IudyAjOCwgZF9oaSAqLwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweDQ4NDAgfCBkX2hpKTsJCQkvKiBzd2FwIGRfaGkgKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9oaSk7CQkJLyogcm9yLncgIzgsIGRfaGkgKi8KJiM0MzsKJiM0MzsJCQllbWl0XzE2KGN0eCwgMHhjMTQwIHwgKGRfaGkgJmx0OyZsdDsgOSkgfCBkX2xvKTsJLyogZXhnIGRfbG8sIGRfaGkgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXN3aXRjaCAoaW1tKSB7CiYjNDM7CQljYXNlIDE2OgomIzQzOwkJCWVtaXRfMTYoY3R4LCAweDAyODAgfCBkX2xvKTsJCQkvKiBhbmRpLmwgIzB4ZmZmZiwgZF9sbyAqLwomIzQzOwkJCWVtaXRfMzIoY3R4LCAweGZmZmYpOwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweDcwMDAgfCAoZF9oaSAmbHQ7Jmx0OyA5KSk7CQkvKiBtb3ZlcSAjMCwgZF9oaSAqLwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSAzMjoKJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg3MDAwIHwgKGRfaGkgJmx0OyZsdDsgOSkpOwkJLyogbW92ZXEgIzAsIGRfaGkgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgNjQ6CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnBmX3B1dF9yZWczMihkc3RbMV0sIGRfbG8sIGN0eCk7CiYjNDM7CWJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbWl0X21hdGhfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgaXNfNjQpCiYjNDM7ewomIzQzOwljb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi0mZ3Q7ZHN0X3JlZ107CiYjNDM7CWNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLSZndDtzcmNfcmVnXTsKJiM0MzsJY29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdOwomIzQzOwljb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07CiYjNDM7CXM4IGRfbG8sIGRfaGksIHNfbG8sIHNfaGkgPSAwOwomIzQzOwl2b2lkICpmdW5jID0gTlVMTDsKJiM0MzsJdTggb3AgPSBCUEZfT1AoaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CiYjNDM7CWRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTsKJiM0MzsJZF9oaSA9IGJwZl9nZXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpOwomIzQzOwomIzQzOwlpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCkgewomIzQzOwkJc19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpOwomIzQzOwkJaWYgKGlzXzY0KQomIzQzOwkJCXNfaGkgPSBicGZfZ2V0X3JlZzMyKHNyY1swXSwgdG1wMlswXSwgY3R4KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXNfbG8gPSB0bXAyWzFdOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjAzYyB8IChzX2xvICZsdDsmbHQ7IDkpKTsJCQkvKiBtb3ZlLmwgI2ltbSwgc19sbyAqLwomIzQzOwkJZW1pdF8zMihjdHgsIGluc24tJmd0O2ltbSk7CiYjNDM7CQlpZiAoaXNfNjQpIHsKJiM0MzsJCQlzX2hpID0gdG1wMlswXTsKJiM0MzsJCQllbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHNfaGkgJmx0OyZsdDsgOSkpOwkJLyogbW92ZS5sICNpbW0sIHNfaGkgKi8KJiM0MzsJCQllbWl0XzMyKGN0eCwgaW5zbi0mZ3Q7aW1tICZsdDsgMCA/IDB4ZmZmZmZmZmYgOiAwKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaXNfNjQpIHsKJiM0MzsJCXN3aXRjaCAob3ApIHsKJiM0MzsJCWNhc2UgQlBGX01VTDoKJiM0MzsJCQlmdW5jID0gKHZvaWQgKilqaXRfbXVsNjQ7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIEJQRl9ESVY6CiYjNDM7CQkJZnVuYyA9ICh2b2lkICopaml0X2RpdjY0OwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBCUEZfTU9EOgomIzQzOwkJCWZ1bmMgPSAodm9pZCAqKWppdF9tb2Q2NDsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCWlmIChCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FMVTY0ICZhbXA7JmFtcDsgb3AgPT0gQlBGX0RJViAmYW1wOyZhbXA7IGluc24tJmd0O29mZiA9PSAxKQomIzQzOwkJCWZ1bmMgPSAodm9pZCAqKWppdF9zZGl2NjQ7CiYjNDM7CQlpZiAoQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpID09IEJQRl9BTFU2NCAmYW1wOyZhbXA7IG9wID09IEJQRl9NT0QgJmFtcDsmYW1wOyBpbnNuLSZndDtvZmYgPT0gMSkKJiM0MzsJCQlmdW5jID0gKHZvaWQgKilqaXRfc21vZDY0OwomIzQzOwl9IGVsc2UgewomIzQzOwkJc3dpdGNoIChvcCkgewomIzQzOwkJY2FzZSBCUEZfTVVMOgomIzQzOwkJCWZ1bmMgPSAodm9pZCAqKWppdF9tdWwzMjsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgQlBGX0RJVjoKJiM0MzsJCQlmdW5jID0gKHZvaWQgKilqaXRfZGl2MzI7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIEJQRl9NT0Q6CiYjNDM7CQkJZnVuYyA9ICh2b2lkICopaml0X21vZDMyOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJaWYgKEJQRl9DTEFTUyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfQUxVICZhbXA7JmFtcDsgb3AgPT0gQlBGX0RJViAmYW1wOyZhbXA7IGluc24tJmd0O29mZiA9PSAxKQomIzQzOwkJCWZ1bmMgPSAodm9pZCAqKWppdF9zZGl2MzI7CiYjNDM7CQlpZiAoQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpID09IEJQRl9BTFUgJmFtcDsmYW1wOyBvcCA9PSBCUEZfTU9EICZhbXA7JmFtcDsgaW5zbi0mZ3Q7b2ZmID09IDEpCiYjNDM7CQkJZnVuYyA9ICh2b2lkICopaml0X3Ntb2QzMjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaXNfNjQpIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDQ4ZTcpOwkJCQkJLyogbW92ZW0ubCBkMC1kMSwgLSglc3ApICovCiYjNDM7CQllbWl0XzE2KGN0eCwgMHhjMDAwKTsKJiM0MzsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDJmMDAgfCBzX2xvKTsJCQkJLyogbW92ZS5sIHNfbG8sIC0oJXNwKSAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MmYwMCB8IHNfaGkpOwkJCQkvKiBtb3ZlLmwgc19oaSwgLSglc3ApICovCiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyZjAwIHwgZF9sbyk7CQkJCS8qIG1vdmUubCBkX2xvLCAtKCVzcCkgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCAweDJmMDAgfCBkX2hpKTsJCQkJLyogbW92ZS5sIGRfaGksIC0oJXNwKSAqLwomIzQzOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjA3Yyk7CQkJCQkvKiBtb3ZlYS5sICNmdW5jLCAlYTAgKi8KJiM0MzsJCWVtaXRfMzIoY3R4LCAodTMyKWZ1bmMpOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4NGU5MCk7CQkJCQkvKiBqc3IgKCVhMCkgKi8KJiM0MzsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDRmZWYpOwkJCQkJLyogbGVhIDE2KCVzcCksICVzcCAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDE2KTsKJiM0MzsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDI2MDEpOwkJCQkJLyogbW92ZS5sICVkMSwgJWQzICovCiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyNDAwKTsJCQkJCS8qIG1vdmUubCAlZDAsICVkMiAqLwomIzQzOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4NGNkZik7CQkJCQkvKiBtb3ZlbS5sICglc3ApJiM0MzssIGQwLWQxICovCiYjNDM7CQllbWl0XzE2KGN0eCwgMHgwMDAzKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDQ4ZTcpOwkJCQkJLyogbW92ZW0ubCBkMC1kMSwgLSglc3ApICovCiYjNDM7CQllbWl0XzE2KGN0eCwgMHhjMDAwKTsKJiM0MzsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDJmMDAgfCBzX2xvKTsJCQkJLyogbW92ZS5sIHNfbG8sIC0oJXNwKSAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MmYwMCB8IGRfbG8pOwkJCQkvKiBtb3ZlLmwgZF9sbywgLSglc3ApICovCiYjNDM7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyMDdjKTsJCQkJCS8qIG1vdmVhLmwgI2Z1bmMsICVhMCAqLwomIzQzOwkJZW1pdF8zMihjdHgsICh1MzIpZnVuYyk7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHg0ZTkwKTsJCQkJCS8qIGpzciAoJWEwKSAqLwomIzQzOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4NGZlZik7CQkJCQkvKiBsZWEgOCglc3ApLCAlc3AgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCA4KTsKJiM0MzsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDI2MDApOwkJCQkJLyogbW92ZS5sICVkMCwgJWQzICovCiYjNDM7CQllbWl0XzE2KGN0eCwgMHg3NDAwKTsJCQkJCS8qIG1vdmVxICMwLCAlZDIgKi8KJiM0MzsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDRjZGYpOwkJCQkJLyogbW92ZW0ubCAoJXNwKSYjNDM7LCBkMC1kMSAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MDAwMyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnBmX3B1dF9yZWczMihkc3RbMV0sIE02OEtfRDMsIGN0eCk7CiYjNDM7CWJwZl9wdXRfcmVnMzIoZHN0WzBdLCBNNjhLX0QyLCBjdHgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbWl0X2xkeChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwljb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi0mZ3Q7ZHN0X3JlZ107CiYjNDM7CWNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLSZndDtzcmNfcmVnXTsKJiM0MzsJY29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdOwomIzQzOwlzOCBkX2xvLCBkX2hpOwomIzQzOwlib29sIGlzX21lbV9zeCA9IEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9NRU1TWDsKJiM0MzsKJiM0MzsJaWYgKGlzX3N0YWNrZWQoc3JjWzFdKSkgewomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjA2ZSk7CQkJCS8qIG1vdmVhLmwgZDE2KCVmcCksICVhMCAqLwomIzQzOwkJZW1pdF8xNihjdHgsICh1MTYpc3JjWzFdKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIwNDAgfCBzcmNbMV0pOwkJCS8qIG1vdmVhLmwgc3JjLCAlYTAgKi8KJiM0MzsJfQomIzQzOwomIzQzOwlkX2xvID0gaXNfc3RhY2tlZChkc3RbMV0pID8gdG1wMVsxXSA6IGRzdFsxXTsKJiM0MzsJZF9oaSA9IGlzX3N0YWNrZWQoZHN0WzBdKSA/IHRtcDFbMF0gOiBkc3RbMF07CiYjNDM7CiYjNDM7CXN3aXRjaCAoQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSkpIHsKJiM0MzsJY2FzZSBCUEZfQjoKJiM0MzsJCWlmICghaXNfbWVtX3N4KQomIzQzOwkJCWVtaXRfMTYoY3R4LCAweDcwMDAgfCAoZF9sbyAmbHQ7Jmx0OyA5KSk7CS8qIG1vdmVxICMwLCBkX2xvICovCiYjNDM7CQllbWl0XzE2KGN0eCwgMHgxMDI4IHwgKGRfbG8gJmx0OyZsdDsgOSkpOwkJLyogbW92ZS5iIGQxNiglYTApLCBkX2xvICovCiYjNDM7CQllbWl0XzE2KGN0eCwgaW5zbi0mZ3Q7b2ZmKTsKJiM0MzsJCWlmIChpc19tZW1fc3gpCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4NDljMCB8IGRfbG8pOwkvKiBleHRiLmwgZF9sbyAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0g6CiYjNDM7CQlpZiAoIWlzX21lbV9zeCkKJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg3MDAwIHwgKGRfbG8gJmx0OyZsdDsgOSkpOwkvKiBtb3ZlcSAjMCwgZF9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MzAyOCB8IChkX2xvICZsdDsmbHQ7IDkpKTsJCS8qIG1vdmUudyBkMTYoJWEwKSwgZF9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIGluc24tJmd0O29mZik7CiYjNDM7CQlpZiAoaXNfbWVtX3N4KQomIzQzOwkJCWVtaXRfMTYoY3R4LCAweDQ4YzAgfCBkX2xvKTsJLyogZXh0LmwgZF9sbyAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX1c6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyMDI4IHwgKGRfbG8gJmx0OyZsdDsgOSkpOwkJLyogbW92ZS5sIGQxNiglYTApLCBkX2xvICovCiYjNDM7CQllbWl0XzE2KGN0eCwgaW5zbi0mZ3Q7b2ZmKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9EVzoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIwMjggfCAoZF9oaSAmbHQ7Jmx0OyA5KSk7CQkvKiBtb3ZlLmwgZDE2KCVhMCksIGRfaGkgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCBpbnNuLSZndDtvZmYpOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4NDFlOCk7CQkJCS8qIGxlYSA0KCVhMCksICVhMCAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDQpOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjAyOCB8IChkX2xvICZsdDsmbHQ7IDkpKTsJCS8qIG1vdmUubCBkMTYoJWEwKSwgZF9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIGluc24tJmd0O29mZik7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX0RXKSB7CiYjNDM7CQlpZiAoaXNfbWVtX3N4KSB7CiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4NGE4MCB8IGRfbG8pOwkJCS8qIHRzdC5sIGRfbG8gKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg1YmMwIHwgZF9oaSk7CQkJLyogc21pIGRfaGkgKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg0OWMwIHwgZF9oaSk7CQkJLyogZXh0Yi5sIGRfaGkgKi8KJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2hpICZsdDsmbHQ7IDkpKTsJLyogbW92ZXEgIzAsIGRfaGkgKi8KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9sbywgY3R4KTsKJiM0MzsJYnBmX3B1dF9yZWczMihkc3RbMF0sIGRfaGksIGN0eCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVtaXRfc3R4KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLSZndDtkc3RfcmVnXTsKJiM0MzsJY29uc3QgczggKnNyYyA9IGJwZjJtNjhrW2luc24tJmd0O3NyY19yZWddOwomIzQzOwljb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07CiYjNDM7CXM4IHNfbG8sIHNfaGk7CiYjNDM7CiYjNDM7CWlmIChpc19zdGFja2VkKGRzdFsxXSkpIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIwNmUpOwkJCQkvKiBtb3ZlYS5sIGQxNiglZnApLCAlYTAgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCAodTE2KWRzdFsxXSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyMDQwIHwgZHN0WzFdKTsJCQkvKiBtb3ZlYS5sIGRzdCwgJWEwICovCiYjNDM7CX0KJiM0MzsKJiM0MzsJc19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpOwomIzQzOwomIzQzOwlzd2l0Y2ggKEJQRl9TSVpFKGluc24tJmd0O2NvZGUpKSB7CiYjNDM7CWNhc2UgQlBGX0I6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgxMTQwIHwgc19sbyk7CQkJLyogbW92ZS5iIHNfbG8sIGQxNiglYTApICovCiYjNDM7CQllbWl0XzE2KGN0eCwgaW5zbi0mZ3Q7b2ZmKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9IOgomIzQzOwkJZW1pdF8xNihjdHgsIDB4MzE0MCB8IHNfbG8pOwkJCS8qIG1vdmUudyBzX2xvLCBkMTYoJWEwKSAqLwomIzQzOwkJZW1pdF8xNihjdHgsIGluc24tJmd0O29mZik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfVzoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIxNDAgfCBzX2xvKTsJCQkvKiBtb3ZlLmwgc19sbywgZDE2KCVhMCkgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCBpbnNuLSZndDtvZmYpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0RXOgomIzQzOwkJc19oaSA9IGJwZl9nZXRfcmVnMzIoc3JjWzBdLCB0bXAyWzBdLCBjdHgpOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjE0MCB8IHNfaGkpOwkJCS8qIG1vdmUubCBzX2hpLCBkMTYoJWEwKSAqLwomIzQzOwkJZW1pdF8xNihjdHgsIGluc24tJmd0O29mZik7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHg0MWU4KTsJCQkJLyogbGVhIDQoJWEwKSwgJWEwICovCiYjNDM7CQllbWl0XzE2KGN0eCwgNCk7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyMTQwIHwgc19sbyk7CQkJLyogbW92ZS5sIHNfbG8sIGQxNiglYTApICovCiYjNDM7CQllbWl0XzE2KGN0eCwgaW5zbi0mZ3Q7b2ZmKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVtaXRfc3QoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJY29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tJmd0O2RzdF9yZWddOwomIzQzOwljb25zdCBzOCAqdG1wID0gYnBmMm02OGtbVE1QX1JFR18xXTsKJiM0MzsKJiM0MzsJaWYgKGlzX3N0YWNrZWQoZHN0WzFdKSkgewomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjA2ZSk7CQkJCS8qIG1vdmVhLmwgZDE2KCVmcCksICVhMCAqLwomIzQzOwkJZW1pdF8xNihjdHgsICh1MTYpZHN0WzFdKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIwNDAgfCBkc3RbMV0pOwkJCS8qIG1vdmVhLmwgZHN0LCAlYTAgKi8KJiM0MzsJfQomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHRtcFsxXSAmbHQ7Jmx0OyA5KSk7CQkJLyogbW92ZS5sICNpbW0sIHRtcCAqLwomIzQzOwllbWl0XzMyKGN0eCwgaW5zbi0mZ3Q7aW1tKTsKJiM0MzsKJiM0MzsJc3dpdGNoIChCUEZfU0laRShpbnNuLSZndDtjb2RlKSkgewomIzQzOwljYXNlIEJQRl9COgomIzQzOwkJZW1pdF8xNihjdHgsIDB4MTE0MCB8IHRtcFsxXSk7CQkJLyogbW92ZS5iIHRtcCwgZDE2KCVhMCkgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCBpbnNuLSZndDtvZmYpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0g6CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgzMTQwIHwgdG1wWzFdKTsJCQkvKiBtb3ZlLncgdG1wLCBkMTYoJWEwKSAqLwomIzQzOwkJZW1pdF8xNihjdHgsIGluc24tJmd0O29mZik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfVzoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIxNDAgfCB0bXBbMV0pOwkJCS8qIG1vdmUubCB0bXAsIGQxNiglYTApICovCiYjNDM7CQllbWl0XzE2KGN0eCwgaW5zbi0mZ3Q7b2ZmKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9EVzoKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIwM2MgfCAodG1wWzBdICZsdDsmbHQ7IDkpKTsJCS8qIG1vdmUubCAjaW1tLCB0bXAgKi8KJiM0MzsJCWVtaXRfMzIoY3R4LCBpbnNuLSZndDtpbW0gJmx0OyAwID8gMHhmZmZmZmZmZiA6IDApOwomIzQzOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjE0MCB8IHRtcFswXSk7CQkJLyogbW92ZS5sIHRtcCwgZDE2KCVhMCkgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCBpbnNuLSZndDtvZmYpOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4NDFlOCk7CQkJCS8qIGxlYSA0KCVhMCksICVhMCAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDQpOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjE0MCB8IHRtcFsxXSk7CQkJLyogbW92ZS5sIHRtcCwgZDE2KCVhMCkgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCBpbnNuLSZndDtvZmYpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hdG9taWMoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJY29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tJmd0O2RzdF9yZWddOwomIzQzOwljb25zdCBzOCAqc3JjID0gYnBmMm02OGtbaW5zbi0mZ3Q7c3JjX3JlZ107CiYjNDM7CWNvbnN0IHM4ICp0bXAyID0gYnBmMm02OGtbVE1QX1JFR18yXTsKJiM0MzsKJiM0MzsJaWYgKGlzX3N0YWNrZWQoZHN0WzFdKSkgewomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjA2ZSk7CQkJCS8qIG1vdmVhLmwgZDE2KCVmcCksICVhMCAqLwomIzQzOwkJZW1pdF8xNihjdHgsICh1MTYpZHN0WzFdKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIwNDAgfCBkc3RbMV0pOwkJCS8qIG1vdmVhLmwgZHN0LCAlYTAgKi8KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaW5zbi0mZ3Q7b2ZmKSB7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHg0MWU4KTsJCQkJLyogbGVhIGQxNiglYTApLCAlYTAgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCBpbnNuLSZndDtvZmYpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChCUEZfU0laRShpbnNuLSZndDtjb2RlKSA9PSBCUEZfVykgewomIzQzOwkJczggc19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpOwomIzQzOwomIzQzOwkJaWYgKGluc24tJmd0O2ltbSAhPSBCUEZfQ01QWENIRykgewomIzQzOwkJCWVtaXRfMTYoY3R4LCAweDQ4ZTcpOwkJCS8qIG1vdmVtLmwgZDAtZDEsIC0oJXNwKSAqLwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweGMwMDApOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MmYwMCB8IE02OEtfRDApOwkJCS8qIG1vdmUubCAlZDAsIC0oJXNwKSAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MmYzYyk7CQkJCS8qIG1vdmUubCAjaW1tLCAtKCVzcCkgKi8KJiM0MzsJCWVtaXRfMzIoY3R4LCBpbnNuLSZndDtpbW0pOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MmYwMCB8IHNfbG8pOwkJCS8qIG1vdmUubCBzX2xvLCAtKCVzcCkgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCAweDJmMDgpOwkJCQkvKiBtb3ZlLmwgJWEwLCAtKCVzcCkgKi8KJiM0MzsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIwN2MpOwkJCQkvKiBtb3ZlYS5sICNmdW5jLCAlYTAgKi8KJiM0MzsJCWVtaXRfMzIoY3R4LCAodTMyKWppdF9hdG9taWMzMik7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHg0ZTkwKTsJCQkJLyoganNyICglYTApICovCiYjNDM7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHg0ZmVmKTsJCQkJLyogbGVhIDE2KCVzcCksICVzcCAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDE2KTsKJiM0MzsKJiM0MzsJCWlmIChpbnNuLSZndDtpbW0gPT0gQlBGX0NNUFhDSEcpIHsKJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg3MjAwKTsJCQkvKiBtb3ZlcSAjMCwgJWQxICovCiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWJvb2wgaXNfZmV0Y2ggPSAoaW5zbi0mZ3Q7aW1tICZhbXA7IEJQRl9GRVRDSCkgfHwgaW5zbi0mZ3Q7aW1tID09IEJQRl9YQ0hHOwomIzQzOwomIzQzOwkJCWlmIChpc19mZXRjaCkKJiM0MzsJCQkJZW1pdF8xNihjdHgsIDB4MjYwMCk7CQkvKiBtb3ZlLmwgJWQwLCAlZDMgKi8KJiM0MzsKJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg0Y2RmKTsJCQkvKiBtb3ZlbS5sICglc3ApJiM0MzssIGQwLWQxICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4MDAwMyk7CiYjNDM7CiYjNDM7CQkJaWYgKGlzX2ZldGNoKSB7CiYjNDM7CQkJCWJwZl9wdXRfcmVnMzIoc3JjWzFdLCBNNjhLX0QzLCBjdHgpOwomIzQzOwkJCQllbWl0XzE2KGN0eCwgMHg3NDAwKTsJCS8qIG1vdmVxICMwLCAlZDIgKi8KJiM0MzsJCQkJYnBmX3B1dF9yZWczMihzcmNbMF0sIE02OEtfRDIsIGN0eCk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwomIzQzOwl9IGVsc2UgaWYgKEJQRl9TSVpFKGluc24tJmd0O2NvZGUpID09IEJQRl9EVykgewomIzQzOwkJczggc19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpOwomIzQzOwkJczggc19oaSA9IGJwZl9nZXRfcmVnMzIoc3JjWzBdLCB0bXAyWzBdLCBjdHgpOwomIzQzOwomIzQzOwkJaWYgKGluc24tJmd0O2ltbSAhPSBCUEZfQ01QWENIRykgewomIzQzOwkJCWVtaXRfMTYoY3R4LCAweDQ4ZTcpOwkJCS8qIG1vdmVtLmwgZDAtZDEsIC0oJXNwKSAqLwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweGMwMDApOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MmYwMCB8IE02OEtfRDApOwkJCS8qIG1vdmUubCAlZDAsIC0oJXNwKSAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MmYwMCB8IE02OEtfRDEpOwkJCS8qIG1vdmUubCAlZDEsIC0oJXNwKSAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MmYzYyk7CQkJCS8qIG1vdmUubCAjaW1tLCAtKCVzcCkgKi8KJiM0MzsJCWVtaXRfMzIoY3R4LCBpbnNuLSZndDtpbW0pOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MmYwMCB8IHNfbG8pOwkJCS8qIG1vdmUubCBzX2xvLCAtKCVzcCkgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCAweDJmMDAgfCBzX2hpKTsJCQkvKiBtb3ZlLmwgc19oaSwgLSglc3ApICovCiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyZjA4KTsJCQkJLyogbW92ZS5sICVhMCwgLSglc3ApICovCiYjNDM7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyMDdjKTsJCQkJLyogbW92ZWEubCAjZnVuYywgJWEwICovCiYjNDM7CQllbWl0XzMyKGN0eCwgKHUzMilqaXRfYXRvbWljNjQpOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4NGU5MCk7CQkJCS8qIGpzciAoJWEwKSAqLwomIzQzOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4NGZlZik7CQkJCS8qIGxlYSAyNCglc3ApLCAlc3AgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCAyNCk7CiYjNDM7CiYjNDM7CQlpZiAoaW5zbi0mZ3Q7aW1tID09IEJQRl9DTVBYQ0hHKSB7CiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4YzE0MSk7CQkJLyogZXhnICVkMCwgJWQxICovCiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWJvb2wgaXNfZmV0Y2ggPSAoaW5zbi0mZ3Q7aW1tICZhbXA7IEJQRl9GRVRDSCkgfHwgaW5zbi0mZ3Q7aW1tID09IEJQRl9YQ0hHOwomIzQzOwomIzQzOwkJCWlmIChpc19mZXRjaCkgewomIzQzOwkJCQllbWl0XzE2KGN0eCwgMHgyNjAwKTsJCS8qIG1vdmUubCAlZDAsICVkMyAqLwomIzQzOwkJCQllbWl0XzE2KGN0eCwgMHgyNDAxKTsJCS8qIG1vdmUubCAlZDEsICVkMiAqLwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg0Y2RmKTsJCQkvKiBtb3ZlbS5sICglc3ApJiM0MzssIGQwLWQxICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4MDAwMyk7CiYjNDM7CiYjNDM7CQkJaWYgKGlzX2ZldGNoKSB7CiYjNDM7CQkJCWJwZl9wdXRfcmVnMzIoc3JjWzFdLCBNNjhLX0QyLCBjdHgpOwomIzQzOwkJCQlicGZfcHV0X3JlZzMyKHNyY1swXSwgTTY4S19EMywgY3R4KTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW1pdF90YWlsX2NhbGwoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJY29uc3QgczggKnIyID0gYnBmMm02OGtbQlBGX1JFR18yXTsKJiM0MzsJY29uc3QgczggKnIzID0gYnBmMm02OGtbQlBGX1JFR18zXTsKJiM0MzsJaW50IGptcF9vdXRfMSwgam1wX291dF8yLCBqbXBfb3V0XzM7CiYjNDM7CiYjNDM7CWlmIChpc19zdGFja2VkKHIyWzFdKSkgewomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjA2ZSk7CQkJCS8qIG1vdmVhLmwgZDE2KCVmcCksICVhMCAqLwomIzQzOwkJZW1pdF8xNihjdHgsICh1MTYpcjJbMV0pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjA0MCB8IHIyWzFdKTsJCQkvKiBtb3ZlYS5sIHIyLCAlYTAgKi8KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaXNfc3RhY2tlZChyM1sxXSkpIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDI0MmUpOwkJCQkvKiBtb3ZlLmwgZDE2KCVmcCksICVkMiAqLwomIzQzOwkJZW1pdF8xNihjdHgsICh1MTYpcjNbMV0pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjQwMCB8IHIzWzFdKTsJCQkvKiBtb3ZlLmwgcjMsICVkMiAqLwomIzQzOwl9CiYjNDM7CiYjNDM7CWVtaXRfMTYoY3R4LCAweGI0YTgpOwkJCQkJLyogY21wLmwgZDE2KCVhMCksICVkMiAqLwomIzQzOwllbWl0XzE2KGN0eCwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9hcnJheSwgbWFwLm1heF9lbnRyaWVzKSk7CiYjNDM7CWVtaXRfMTYoY3R4LCAweDY0MDApOwkJCQkJLyogYmNjLncgam1wX291dF8xICovCiYjNDM7CWptcF9vdXRfMSA9IGN0eC0mZ3Q7aWR4OwomIzQzOwllbWl0XzE2KGN0eCwgMCk7CiYjNDM7CiYjNDM7CWVtaXRfMTYoY3R4LCAweDI2MmUpOwkJCQkJLyogbW92ZS5sIGQxNiglZnApLCAlZDMgKi8KJiM0MzsJZW1pdF8xNihjdHgsICh1MTYpU1RBQ0tfT0ZGU0VUKEJQRl9UQ19MTykpOwomIzQzOwllbWl0XzE2KGN0eCwgMHg0YTgzKTsJCQkJCS8qIHRzdC5sICVkMyAqLwomIzQzOwllbWl0XzE2KGN0eCwgMHg2NzAwKTsJCQkJCS8qIGJlcS53IGptcF9vdXRfMiAqLwomIzQzOwlqbXBfb3V0XzIgPSBjdHgtJmd0O2lkeDsKJiM0MzsJZW1pdF8xNihjdHgsIDApOwomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHg1MzgzKTsJCQkJCS8qIHN1YnEubCAjMSwgJWQzICovCiYjNDM7CWVtaXRfMTYoY3R4LCAweDJkNDMpOwkJCQkJLyogbW92ZS5sICVkMywgZDE2KCVmcCkgKi8KJiM0MzsJZW1pdF8xNihjdHgsICh1MTYpU1RBQ0tfT0ZGU0VUKEJQRl9UQ19MTykpOwomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHhkNDgyKTsJCQkJCS8qIGFkZC5sICVkMiwgJWQyICovCiYjNDM7CWVtaXRfMTYoY3R4LCAweGQ0ODIpOwkJCQkJLyogYWRkLmwgJWQyLCAlZDIgKi8KJiM0MzsJZW1pdF8xNihjdHgsIDB4NDNlOCk7CQkJCQkvKiBsZWEgZDE2KCVhMCksICVhMSAqLwomIzQzOwllbWl0XzE2KGN0eCwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9hcnJheSwgcHRycykpOwomIzQzOwllbWl0XzE2KGN0eCwgMHhkM2MyKTsJCQkJCS8qIGFkZGEubCAlZDIsICVhMSAqLwomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHgyMDUxKTsJCQkJCS8qIG1vdmVhLmwgKCVhMSksICVhMCAqLwomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHgyNDA4KTsJCQkJCS8qIG1vdmUubCAlYTAsICVkMiAqLwomIzQzOwllbWl0XzE2KGN0eCwgMHg0YTgyKTsJCQkJCS8qIHRzdC5sICVkMiAqLwomIzQzOwllbWl0XzE2KGN0eCwgMHg2NzAwKTsJCQkJCS8qIGJlcS53IGptcF9vdXRfMyAqLwomIzQzOwlqbXBfb3V0XzMgPSBjdHgtJmd0O2lkeDsKJiM0MzsJZW1pdF8xNihjdHgsIDApOwomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHgyMDY4KTsJCQkJCS8qIG1vdmVhLmwgZDE2KCVhMCksICVhMCAqLwomIzQzOwllbWl0XzE2KGN0eCwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9wcm9nLCBicGZfZnVuYykpOwomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHg0ZWU4KTsJCQkJCS8qIGptcCBkMTYoJWEwKSAqLwomIzQzOwllbWl0XzE2KGN0eCwgNDQpOwomIzQzOwomIzQzOwlpZiAoY3R4LSZndDt0YXJnZXQpIHsKJiM0MzsJCWN0eC0mZ3Q7dGFyZ2V0W2ptcF9vdXRfMV0gPSAoY3R4LSZndDtpZHggLSBqbXBfb3V0XzEpICogMjsKJiM0MzsJCWN0eC0mZ3Q7dGFyZ2V0W2ptcF9vdXRfMl0gPSAoY3R4LSZndDtpZHggLSBqbXBfb3V0XzIpICogMjsKJiM0MzsJCWN0eC0mZ3Q7dGFyZ2V0W2ptcF9vdXRfM10gPSAoY3R4LSZndDtpZHggLSBqbXBfb3V0XzMpICogMjsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVtaXRfam1wKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eCwgaW50IGN1cnJfaSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLSZndDtkc3RfcmVnXTsKJiM0MzsJY29uc3QgczggKnNyYyA9IGJwZjJtNjhrW2luc24tJmd0O3NyY19yZWddOwomIzQzOwljb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07CiYjNDM7CWNvbnN0IHM4ICp0bXAyID0gYnBmMm02OGtbVE1QX1JFR18yXTsKJiM0MzsJczggZF9sbywgZF9oaSA9IDAsIHNfbG8sIHNfaGkgPSAwOwomIzQzOwlib29sIGlzX2ptcDMyID0gQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpID09IEJQRl9KTVAzMjsKJiM0MzsJdTggb3AgPSBCUEZfT1AoaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CWludCB0YXJnZXRfaW5zbjsKJiM0MzsKJiM0MzsJaWYgKGlzX2ptcDMyICZhbXA7JmFtcDsgb3AgPT0gQlBGX0pBKQomIzQzOwkJdGFyZ2V0X2luc24gPSBjdXJyX2kgJiM0MzsgMSAmIzQzOyBpbnNuLSZndDtpbW07CiYjNDM7CWVsc2UKJiM0MzsJCXRhcmdldF9pbnNuID0gY3Vycl9pICYjNDM7IDEgJiM0MzsgaW5zbi0mZ3Q7b2ZmOwomIzQzOwomIzQzOwlpZiAodGFyZ2V0X2luc24gJmx0OyAwIHx8IHRhcmdldF9pbnNuICZndDsgY3R4LSZndDtwcm9nLSZndDtsZW4pCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CSNkZWZpbmUgRU1JVF9KTVAzMihvcF9iYXNlKSBcCiYjNDM7CQlkbyB7IFwKJiM0MzsJCQlpbnQgZGlzcCA9IChjdHgtJmd0O29mZnNldHNbdGFyZ2V0X2luc25dIC0gKGN0eC0mZ3Q7aWR4ICYjNDM7IDEpKSAqIDI7IFwKJiM0MzsJCQllbWl0XzE2KGN0eCwgKG9wX2Jhc2UpIHwgMHgwMGZmKTsgXAomIzQzOwkJCWVtaXRfMzIoY3R4LCBkaXNwKTsgXAomIzQzOwkJfSB3aGlsZSAoMCkKJiM0MzsKJiM0MzsJaWYgKG9wID09IEJQRl9KQSkgewomIzQzOwkJRU1JVF9KTVAzMigweDYwMDApOwkJCQkvKiBicmEubCAqLwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZF9sbyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpOwomIzQzOwlpZiAoIWlzX2ptcDMyKQomIzQzOwkJZF9oaSA9IGJwZl9nZXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpOwomIzQzOwomIzQzOwlpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCkgewomIzQzOwkJc19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpOwomIzQzOwkJaWYgKCFpc19qbXAzMikKJiM0MzsJCQlzX2hpID0gYnBmX2dldF9yZWczMihzcmNbMF0sIHRtcDJbMF0sIGN0eCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzX2xvID0gdG1wMlsxXTsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIwM2MgfCAoc19sbyAmbHQ7Jmx0OyA5KSk7CQkvKiBtb3ZlLmwgI2ltbSwgc19sbyAqLwomIzQzOwkJZW1pdF8zMihjdHgsIGluc24tJmd0O2ltbSk7CiYjNDM7CQlpZiAoIWlzX2ptcDMyKSB7CiYjNDM7CQkJc19oaSA9IHRtcDJbMF07CiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4MjAzYyB8IChzX2hpICZsdDsmbHQ7IDkpKTsJLyogbW92ZS5sICNpbW0sIHNfaGkgKi8KJiM0MzsJCQllbWl0XzMyKGN0eCwgaW5zbi0mZ3Q7aW1tICZsdDsgMCA/IDB4ZmZmZmZmZmYgOiAwKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAob3AgPT0gQlBGX0pTRVQpIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweDIwMDAgfCAodG1wMVsxXSAmbHQ7Jmx0OyA5KSB8IGRfbG8pOwkvKiBtb3ZlLmwgZF9sbywgdG1wMV9sbyAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDB4YzA4MCB8ICh0bXAxWzFdICZsdDsmbHQ7IDkpIHwgc19sbyk7CS8qIGFuZC5sIHNfbG8sIHRtcDFfbG8gKi8KJiM0MzsKJiM0MzsJCWlmICghaXNfam1wMzIpIHsKJiM0MzsJCQlFTUlUX0pNUDMyKDB4NjYwMCk7CQkJLyogYm5lLmwgKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHgyMDAwIHwgKHRtcDFbMF0gJmx0OyZsdDsgOSkgfCBkX2hpKTsgLyogbW92ZS5sIGRfaGksIHRtcDFfaGkgKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHhjMDgwIHwgKHRtcDFbMF0gJmx0OyZsdDsgOSkgfCBzX2hpKTsgLyogYW5kLmwgc19oaSwgdG1wMV9oaSAqLwomIzQzOwkJfQomIzQzOwkJRU1JVF9KTVAzMigweDY2MDApOwkJCQkvKiBibmUubCAqLwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGlzX2ptcDMyKSB7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gJmx0OyZsdDsgOSkgfCBzX2xvKTsJLyogY21wLmwgc19sbywgZF9sbyAqLwomIzQzOwkJc3dpdGNoIChvcCkgewomIzQzOwkJY2FzZSBCUEZfSkVROgomIzQzOwkJCUVNSVRfSk1QMzIoMHg2NzAwKTsJCQkvKiBiZXEubCAqLwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBCUEZfSk5FOgomIzQzOwkJCUVNSVRfSk1QMzIoMHg2NjAwKTsJCQkvKiBibmUubCAqLwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBCUEZfSkdUOgomIzQzOwkJCUVNSVRfSk1QMzIoMHg2MjAwKTsJCQkvKiBiaGkubCAqLwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBCUEZfSkdFOgomIzQzOwkJCUVNSVRfSk1QMzIoMHg2NDAwKTsJCQkvKiBiY2MubCAqLwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBCUEZfSkxUOgomIzQzOwkJCUVNSVRfSk1QMzIoMHg2NTAwKTsJCQkvKiBiY3MubCAqLwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBCUEZfSkxFOgomIzQzOwkJCUVNSVRfSk1QMzIoMHg2MzAwKTsJCQkvKiBibHMubCAqLwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBCUEZfSlNHVDoKJiM0MzsJCQlFTUlUX0pNUDMyKDB4NmUwMCk7CQkJLyogYmd0LmwgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgQlBGX0pTR0U6CiYjNDM7CQkJRU1JVF9KTVAzMigweDZjMDApOwkJCS8qIGJnZS5sICovCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIEJQRl9KU0xUOgomIzQzOwkJCUVNSVRfSk1QMzIoMHg2ZDAwKTsJCQkvKiBibHQubCAqLwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBCUEZfSlNMRToKJiM0MzsJCQlFTUlUX0pNUDMyKDB4NmYwMCk7CQkJLyogYmxlLmwgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9oaSAmbHQ7Jmx0OyA5KSB8IHNfaGkpOwkvKiBjbXAubCBzX2hpLCBkX2hpICovCiYjNDM7CiYjNDM7CQlzd2l0Y2ggKG9wKSB7CiYjNDM7CQljYXNlIEJQRl9KRVE6CiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4NjYwOCk7CQkJLyogYm5lLnMgLiYjNDM7OCAqLwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyAmbHQ7Jmx0OyA5KSB8IHNfbG8pOyAvKiBjbXAubCBzX2xvLCBkX2xvICovCiYjNDM7CQkJRU1JVF9KTVAzMigweDY3MDApOwkJCS8qIGJlcS5sICovCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIEJQRl9KTkU6CiYjNDM7CQkJRU1JVF9KTVAzMigweDY2MDApOwkJCS8qIGJuZS5sICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvICZsdDsmbHQ7IDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi8KJiM0MzsJCQlFTUlUX0pNUDMyKDB4NjYwMCk7CQkJLyogYm5lLmwgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgQlBGX0pHVDoKJiM0MzsJCQlFTUlUX0pNUDMyKDB4NjIwMCk7CQkJLyogYmhpLmwgKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg2NTA4KTsJCQkvKiBiY3MucyAuJiM0Mzs4ICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvICZsdDsmbHQ7IDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi8KJiM0MzsJCQlFTUlUX0pNUDMyKDB4NjIwMCk7CQkJLyogYmhpLmwgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgQlBGX0pHRToKJiM0MzsJCQlFTUlUX0pNUDMyKDB4NjIwMCk7CQkJLyogYmhpLmwgKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg2NTA4KTsJCQkvKiBiY3MucyAuJiM0Mzs4ICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvICZsdDsmbHQ7IDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi8KJiM0MzsJCQlFTUlUX0pNUDMyKDB4NjQwMCk7CQkJLyogYmNjLmwgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgQlBGX0pMVDoKJiM0MzsJCQlFTUlUX0pNUDMyKDB4NjUwMCk7CQkJLyogYmNzLmwgKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg2MjA4KTsJCQkvKiBiaGkucyAuJiM0Mzs4ICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvICZsdDsmbHQ7IDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi8KJiM0MzsJCQlFTUlUX0pNUDMyKDB4NjUwMCk7CQkJLyogYmNzLmwgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgQlBGX0pMRToKJiM0MzsJCQlFTUlUX0pNUDMyKDB4NjUwMCk7CQkJLyogYmNzLmwgKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg2MjA4KTsJCQkvKiBiaGkucyAuJiM0Mzs4ICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvICZsdDsmbHQ7IDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi8KJiM0MzsJCQlFTUlUX0pNUDMyKDB4NjMwMCk7CQkJLyogYmxzLmwgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgQlBGX0pTR1Q6CiYjNDM7CQkJRU1JVF9KTVAzMigweDZlMDApOwkJCS8qIGJndC5sICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4NmQwOCk7CQkJLyogYmx0LnMgLiYjNDM7OCAqLwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyAmbHQ7Jmx0OyA5KSB8IHNfbG8pOyAvKiBjbXAubCBzX2xvLCBkX2xvICovCiYjNDM7CQkJRU1JVF9KTVAzMigweDYyMDApOwkJCS8qIGJoaS5sICovCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIEJQRl9KU0dFOgomIzQzOwkJCUVNSVRfSk1QMzIoMHg2ZTAwKTsJCQkvKiBiZ3QubCAqLwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweDZkMDgpOwkJCS8qIGJsdC5zIC4mIzQzOzggKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gJmx0OyZsdDsgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqLwomIzQzOwkJCUVNSVRfSk1QMzIoMHg2NDAwKTsJCQkvKiBiY2MubCAqLwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBCUEZfSlNMVDoKJiM0MzsJCQlFTUlUX0pNUDMyKDB4NmQwMCk7CQkJLyogYmx0LmwgKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgMHg2ZTA4KTsJCQkvKiBiZ3QucyAuJiM0Mzs4ICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvICZsdDsmbHQ7IDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi8KJiM0MzsJCQlFTUlUX0pNUDMyKDB4NjUwMCk7CQkJLyogYmNzLmwgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgQlBGX0pTTEU6CiYjNDM7CQkJRU1JVF9KTVAzMigweDZkMDApOwkJCS8qIGJsdC5sICovCiYjNDM7CQkJZW1pdF8xNihjdHgsIDB4NmUwOCk7CQkJLyogYmd0LnMgLiYjNDM7OCAqLwomIzQzOwkJCWVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyAmbHQ7Jmx0OyA5KSB8IHNfbG8pOyAvKiBjbXAubCBzX2xvLCBkX2xvICovCiYjNDM7CQkJRU1JVF9KTVAzMigweDYzMDApOwkJCS8qIGJscy5sICovCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJI3VuZGVmIEVNSVRfSk1QMzIKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW1pdF9jYWxsKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHM4IGFyZ19yZWdzW10gPSB7IEJQRl9SRUdfNSwgQlBGX1JFR180LCBCUEZfUkVHXzMsIEJQRl9SRUdfMiwgQlBGX1JFR18xIH07CiYjNDM7CWNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTsKJiM0MzsJYm9vbCBleHRyYV9wYXNzID0gY3R4LSZndDtwcm9nLSZndDtqaXRlZDsKJiM0MzsJdTY0IGZ1bmNfYWRkcjsKJiM0MzsJYm9vbCBmaXhlZDsKJiM0MzsJaW50IGksIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX2ppdF9nZXRfZnVuY19hZGRyKGN0eC0mZ3Q7cHJvZywgaW5zbiwgZXh0cmFfcGFzcywgJmFtcDtmdW5jX2FkZHIsICZhbXA7Zml4ZWQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IDU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzOCAqcmVnID0gYnBmMm02OGtbYXJnX3JlZ3NbaV1dOwomIzQzOwkJczggZF9sbyA9IGJwZl9nZXRfcmVnMzIocmVnWzFdLCB0bXAxWzFdLCBjdHgpOwomIzQzOwkJczggZF9oaSA9IGJwZl9nZXRfcmVnMzIocmVnWzBdLCB0bXAxWzBdLCBjdHgpOwomIzQzOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MmYwMCB8IGRfbG8pOwkJCS8qIG1vdmUubCBkX2xvLCAtKCVzcCkgKi8KJiM0MzsJCWVtaXRfMTYoY3R4LCAweDJmMDAgfCBkX2hpKTsJCQkvKiBtb3ZlLmwgZF9oaSwgLSglc3ApICovCiYjNDM7CX0KJiM0MzsKJiM0MzsJZW1pdF8xNihjdHgsIDB4MjA3Yyk7CQkJCQkvKiBtb3ZlYS5sICNmdW5jX2FkZHIsICVhMCAqLwomIzQzOwllbWl0XzMyKGN0eCwgKHUzMilmdW5jX2FkZHIpOwomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHg0ZTkwKTsJCQkJCS8qIGpzciAoJWEwKSAqLwomIzQzOwomIzQzOwllbWl0XzE2KGN0eCwgMHg0ZmVmKTsJCQkJCS8qIGxlYSA0MCglc3ApLCAlc3AgKi8KJiM0MzsJZW1pdF8xNihjdHgsIDQwKTsKJiM0MzsKJiM0MzsJaWYgKGluc24tJmd0O3NyY19yZWcgIT0gQlBGX1BTRVVET19DQUxMKQomIzQzOwkJZW1pdF8xNihjdHgsIDB4YzM0MCk7CQkJCQkvKiBleGcgJWQwLCAlZDEgKi8KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJ1aWxkX3Byb2xvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwlpbnQgYnBmX3N0YWNrID0gTUFYX0JQRl9TVEFDSzsKJiM0MzsJaW50IHRvdGFsX3N0YWNrID0gU0NSQVRDSF9TSVpFICYjNDM7IGJwZl9zdGFjazsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWVtaXRfMTYoY3R4LCAweDcwMjEpOwkJCQkJLyogbW92ZXEgIzMzLCAlZDAgKi8KJiM0MzsKJiM0MzsJZW1pdF8xNihjdHgsIDB4NGU1Nik7CQkJCQkvKiBsaW5rICVhNiwgIy10b3RhbF9zdGFjayAqLwomIzQzOwllbWl0XzE2KGN0eCwgLXRvdGFsX3N0YWNrKTsKJiM0MzsKJiM0MzsJZW1pdF8xNihjdHgsIDB4NDhlNyk7CQkJCQkvKiBtb3ZlbS5sIGQyLWQ1LCAtKCVzcCkgKi8KJiM0MzsJZW1pdF8xNihjdHgsIDB4M2MwMCk7CiYjNDM7CiYjNDM7CWVtaXRfMTYoY3R4LCAweDJkNDApOwkJCQkJLyogbW92ZS5sICVkMCwgb2ZmKCVmcCkgKi8KJiM0MzsJZW1pdF8xNihjdHgsICh1MTYpU1RBQ0tfT0ZGU0VUKEJQRl9UQ19MTykpOwomIzQzOwomIzQzOwlpZiAoY3R4LSZndDtwcm9nLSZndDtpc19mdW5jKSB7CiYjNDM7CQljb25zdCBzOCBhcmdfcmVnc1tdID0geyBCUEZfUkVHXzEsIEJQRl9SRUdfMiwgQlBGX1JFR18zLCBCUEZfUkVHXzQsIEJQRl9SRUdfNSB9OwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IDU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJaW50IG9mZnNldCA9IDggJiM0MzsgaSAqIDg7CiYjNDM7CQkJY29uc3QgczggKnJlZyA9IGJwZjJtNjhrW2FyZ19yZWdzW2ldXTsKJiM0MzsKJiM0MzsJCQllbWl0XzE2KGN0eCwgMHgyMDJlKTsgLyogbW92ZS5sIG9mZnNldCglZnApLCAlZDAgKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgb2Zmc2V0KTsKJiM0MzsJCQlicGZfcHV0X3JlZzMyKHJlZ1swXSwgTTY4S19EMCwgY3R4KTsKJiM0MzsKJiM0MzsJCQllbWl0XzE2KGN0eCwgMHgyMDJlKTsgLyogbW92ZS5sIG9mZnNldCYjNDM7NCglZnApLCAlZDAgKi8KJiM0MzsJCQllbWl0XzE2KGN0eCwgb2Zmc2V0ICYjNDM7IDQpOwomIzQzOwkJCWJwZl9wdXRfcmVnMzIocmVnWzFdLCBNNjhLX0QwLCBjdHgpOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjAyZSk7CQkJCS8qIG1vdmUubCA4KCVmcCksICVkMCAqLwomIzQzOwkJZW1pdF8xNihjdHgsIDgpOwomIzQzOwkJYnBmX3B1dF9yZWczMihicGYybTY4a1tCUEZfUkVHXzFdWzFdLCBNNjhLX0QwLCBjdHgpOwomIzQzOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4NzAwMCB8IChNNjhLX0QwICZsdDsmbHQ7IDkpKTsJCQkvKiBtb3ZlcSAjMCwgJWQwICovCiYjNDM7CQlicGZfcHV0X3JlZzMyKGJwZjJtNjhrW0JQRl9SRUdfMV1bMF0sIE02OEtfRDAsIGN0eCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZW1pdF8xNihjdHgsIDB4NDFlZSk7CQkJCQkvKiBsZWEgLVNDUkFUQ0hfU0laRSglZnApLCAlYTAgKi8KJiM0MzsJZW1pdF8xNihjdHgsIC1TQ1JBVENIX1NJWkUpOwomIzQzOwllbWl0XzE2KGN0eCwgMHgyMDA4KTsJCQkJCS8qIG1vdmUubCAlYTAsICVkMCAqLwomIzQzOwomIzQzOwlicGZfcHV0X3JlZzMyKGJwZjJtNjhrW0JQRl9SRUdfMTBdWzFdLCBNNjhLX0QwLCBjdHgpOwomIzQzOwllbWl0XzE2KGN0eCwgMHg3MDAwIHwgKE02OEtfRDAgJmx0OyZsdDsgOSkpOwkJCS8qIG1vdmVxICMwLCAlZDAgKi8KJiM0MzsJYnBmX3B1dF9yZWczMihicGYybTY4a1tCUEZfUkVHXzEwXVswXSwgTTY4S19EMCwgY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYnVpbGRfZXBpbG9ndWUoc3RydWN0IGppdF9jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CWVtaXRfMTYoY3R4LCAweDRjZGYpOwkJCQkJLyogbW92ZW0ubCAoJXNwKSYjNDM7LCBkMi1kNSAqLwomIzQzOwllbWl0XzE2KGN0eCwgMHgwMDNjKTsKJiM0MzsKJiM0MzsJZW1pdF8xNihjdHgsIDB4NGU1ZSk7CQkJCQkvKiB1bmxrICVmcCAqLwomIzQzOwllbWl0XzE2KGN0eCwgMHg0ZTc1KTsJCQkJCS8qIHJ0cyAqLwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgaSkKJiM0Mzt7CiYjNDM7CXU4IGNvZGUgPSBpbnNuLSZndDtjb2RlOwomIzQzOwomIzQzOwlzd2l0Y2ggKGNvZGUpIHsKJiM0MzsJY2FzZSBCUEZfQUxVIHwgQlBGX05FRzoKJiM0MzsJCWVtaXRfYWx1MzJfbmVnKGluc24sIGN0eCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfQUxVNjQgfCBCUEZfTkVHOgomIzQzOwkJZW1pdF9hbHU2NF9uZWcoaW5zbiwgY3R4KTsKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwljYXNlIEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0FMVSB8IEJQRl9BREQgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfQUxVIHwgQlBGX1NVQiB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9BTFUgfCBCUEZfQU5EIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0FMVSB8IEJQRl9PUiAgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfQUxVIHwgQlBGX1hPUiB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9BTFUgfCBCUEZfTFNIIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0FMVSB8IEJQRl9SU0ggfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfQUxVIHwgQlBGX0FSU0ggfCBCUEZfWDoKJiM0MzsJCWVtaXRfYWx1MzJfeChpbnNuLCBjdHgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgQlBGX0FMVSB8IEJQRl9NT1YgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfQUxVIHwgQlBGX0FERCB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9BTFUgfCBCUEZfU1VCIHwgQlBGX0s6CiYjNDM7CWNhc2UgQlBGX0FMVSB8IEJQRl9BTkQgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfQUxVIHwgQlBGX09SICB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9BTFUgfCBCUEZfWE9SIHwgQlBGX0s6CiYjNDM7CWNhc2UgQlBGX0FMVSB8IEJQRl9MU0ggfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfQUxVIHwgQlBGX1JTSCB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9BTFUgfCBCUEZfQVJTSCB8IEJQRl9LOgomIzQzOwkJZW1pdF9hbHUzMl9rKGluc24sIGN0eCk7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0FMVTY0IHwgQlBGX0FERCB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9BTFU2NCB8IEJQRl9TVUIgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfQUxVNjQgfCBCUEZfQU5EIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0FMVTY0IHwgQlBGX09SICB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9BTFU2NCB8IEJQRl9YT1IgfCBCUEZfWDoKJiM0MzsJCWVtaXRfYWx1NjRfeChpbnNuLCBjdHgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9BTFU2NCB8IEJQRl9BREQgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfQUxVNjQgfCBCUEZfU1VCIHwgQlBGX0s6CiYjNDM7CWNhc2UgQlBGX0FMVTY0IHwgQlBGX0FORCB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9BTFU2NCB8IEJQRl9PUiAgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfQUxVNjQgfCBCUEZfWE9SIHwgQlBGX0s6CiYjNDM7CQllbWl0X2FsdTY0X2soaW5zbiwgY3R4KTsKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwljYXNlIEJQRl9BTFU2NCB8IEJQRl9MU0ggfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfQUxVNjQgfCBCUEZfUlNIIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0FMVTY0IHwgQlBGX0FSU0ggfCBCUEZfWDoKJiM0MzsJCWVtaXRfYWx1NjRfc2hpZnQoaW5zbiwgY3R4LCBmYWxzZSk7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBCUEZfQUxVNjQgfCBCUEZfTFNIIHwgQlBGX0s6CiYjNDM7CWNhc2UgQlBGX0FMVTY0IHwgQlBGX1JTSCB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9BTFU2NCB8IEJQRl9BUlNIIHwgQlBGX0s6CiYjNDM7CQllbWl0X2FsdTY0X3NoaWZ0KGluc24sIGN0eCwgdHJ1ZSk7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBCUEZfQUxVIHwgQlBGX01VTCB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9BTFUgfCBCUEZfRElWIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0FMVSB8IEJQRl9NT0QgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfQUxVIHwgQlBGX01VTCB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9BTFUgfCBCUEZfRElWIHwgQlBGX0s6CiYjNDM7CWNhc2UgQlBGX0FMVSB8IEJQRl9NT0QgfCBCUEZfSzoKJiM0MzsJCWVtaXRfbWF0aF9jYWxsKGluc24sIGN0eCwgZmFsc2UpOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgQlBGX0FMVTY0IHwgQlBGX01VTCB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9BTFU2NCB8IEJQRl9ESVYgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9EIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0FMVTY0IHwgQlBGX01VTCB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9BTFU2NCB8IEJQRl9ESVYgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9EIHwgQlBGX0s6CiYjNDM7CQllbWl0X21hdGhfY2FsbChpbnNuLCBjdHgsIHRydWUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgQlBGX0FMVSB8IEJQRl9FTkQgfCBCUEZfVE9fQkU6CiYjNDM7CWNhc2UgQlBGX0FMVSB8IEJQRl9FTkQgfCBCUEZfVE9fTEU6CiYjNDM7CWNhc2UgQlBGX0FMVTY0IHwgQlBGX0VORCB8IEJQRl9UT19CRToKJiM0MzsJY2FzZSBCUEZfQUxVNjQgfCBCUEZfRU5EIHwgQlBGX1RPX0xFOgomIzQzOwkJZW1pdF9icGZfZW5kKGluc24sIGN0eCk7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBCUEZfTEQgfCBCUEZfSU1NIHwgQlBGX0RXOiB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24xID0gaW5zbiAmIzQzOyAxOwomIzQzOwkJY29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tJmd0O2RzdF9yZWddOwomIzQzOwkJY29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdOwomIzQzOwkJczggZF9sbyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpOwomIzQzOwkJczggZF9oaSA9IGJwZl9nZXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpOwomIzQzOwomIzQzOwkJZW1pdF8xNihjdHgsIDB4MjAzYyB8IChkX2xvICZsdDsmbHQ7IDkpKTsJCQkvKiBtb3ZlLmwgI2ltbSwgZF9sbyAqLwomIzQzOwkJZW1pdF8zMihjdHgsIGluc24tJmd0O2ltbSk7CiYjNDM7CQllbWl0XzE2KGN0eCwgMHgyMDNjIHwgKGRfaGkgJmx0OyZsdDsgOSkpOwkJCS8qIG1vdmUubCAjaW1tLCBkX2hpICovCiYjNDM7CQllbWl0XzMyKGN0eCwgaW5zbjEtJmd0O2ltbSk7CiYjNDM7CiYjNDM7CQlicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9sbywgY3R4KTsKJiM0MzsJCWJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9COgomIzQzOwljYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0g6CiYjNDM7CWNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfVzoKJiM0MzsJY2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9EVzoKJiM0MzsJY2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX0I6CiYjNDM7CWNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9IOgomIzQzOwljYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfVzoKJiM0MzsJCWVtaXRfbGR4KGluc24sIGN0eCk7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9COgomIzQzOwljYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX0g6CiYjNDM7CWNhc2UgQlBGX1NUWCB8IEJQRl9NRU0gfCBCUEZfVzoKJiM0MzsJY2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9EVzoKJiM0MzsJCWVtaXRfc3R4KGluc24sIGN0eCk7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBCUEZfU1QgfCBCUEZfTUVNIHwgQlBGX0I6CiYjNDM7CWNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9IOgomIzQzOwljYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfVzoKJiM0MzsJY2FzZSBCUEZfU1QgfCBCUEZfTUVNIHwgQlBGX0RXOgomIzQzOwkJZW1pdF9zdChpbnNuLCBjdHgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVzoKJiM0MzsJY2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9EVzoKJiM0MzsJCWVtaXRfYXRvbWljKGluc24sIGN0eCk7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX1RBSUxfQ0FMTDoKJiM0MzsJCWVtaXRfdGFpbF9jYWxsKGluc24sIGN0eCk7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pBOgomIzQzOwljYXNlIEJQRl9KTVAzMiB8IEJQRl9KQToKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pFUSB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9KTVAgfCBCUEZfSkVRIHwgQlBGX0s6CiYjNDM7CWNhc2UgQlBGX0pNUCB8IEJQRl9KTkUgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pORSB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9KTVAgfCBCUEZfSkdUIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0pNUCB8IEJQRl9KR1QgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pHRSB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9KTVAgfCBCUEZfSkdFIHwgQlBGX0s6CiYjNDM7CWNhc2UgQlBGX0pNUCB8IEJQRl9KTFQgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pMVCB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9KTVAgfCBCUEZfSkxFIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0pNUCB8IEJQRl9KTEUgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pTR1QgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pTR1QgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pTR0UgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pTR0UgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pTTFQgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pTTFQgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pTTEUgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pTTEUgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pTRVQgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfSk1QIHwgQlBGX0pTRVQgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfSk1QMzIgfCBCUEZfSkVRIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0pNUDMyIHwgQlBGX0pFUSB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9KTVAzMiB8IEJQRl9KTkUgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfSk1QMzIgfCBCUEZfSk5FIHwgQlBGX0s6CiYjNDM7CWNhc2UgQlBGX0pNUDMyIHwgQlBGX0pHVCB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9KTVAzMiB8IEJQRl9KR1QgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfSk1QMzIgfCBCUEZfSkdFIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0pNUDMyIHwgQlBGX0pHRSB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9KTVAzMiB8IEJQRl9KTFQgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfSk1QMzIgfCBCUEZfSkxUIHwgQlBGX0s6CiYjNDM7CWNhc2UgQlBGX0pNUDMyIHwgQlBGX0pMRSB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9KTVAzMiB8IEJQRl9KTEUgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNHVCB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9KTVAzMiB8IEJQRl9KU0dUIHwgQlBGX0s6CiYjNDM7CWNhc2UgQlBGX0pNUDMyIHwgQlBGX0pTR0UgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNHRSB8IEJQRl9LOgomIzQzOwljYXNlIEJQRl9KTVAzMiB8IEJQRl9KU0xUIHwgQlBGX1g6CiYjNDM7CWNhc2UgQlBGX0pNUDMyIHwgQlBGX0pTTFQgfCBCUEZfSzoKJiM0MzsJY2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNMRSB8IEJQRl9YOgomIzQzOwljYXNlIEJQRl9KTVAzMiB8IEJQRl9KU0xFIHwgQlBGX0s6CiYjNDM7CWNhc2UgQlBGX0pNUDMyIHwgQlBGX0pTRVQgfCBCUEZfWDoKJiM0MzsJY2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNFVCB8IEJQRl9LOgomIzQzOwkJcmV0dXJuIGVtaXRfam1wKGluc24sIGN0eCwgaSk7CiYjNDM7CiYjNDM7CWNhc2UgQlBGX0pNUCB8IEJQRl9DQUxMOgomIzQzOwkJcmV0dXJuIGVtaXRfY2FsbChpbnNuLCBjdHgpOwomIzQzOwomIzQzOwljYXNlIEJQRl9KTVAgfCBCUEZfRVhJVDoKJiM0MzsJCWJ1aWxkX2VwaWxvZ3VlKGN0eCk7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBidWlsZF9ib2R5KHN0cnVjdCBqaXRfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBjdHgtJmd0O3Byb2c7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcHJvZy0mZ3Q7bGVuOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuID0gJmFtcDtwcm9nLSZndDtpbnNuc2lbaV07CiYjNDM7CQlpbnQgcmV0OwomIzQzOwomIzQzOwkJaWYgKCFjdHgtJmd0O3RhcmdldCkKJiM0MzsJCQljdHgtJmd0O29mZnNldHNbaV0gPSBjdHgtJmd0O2lkeDsKJiM0MzsKJiM0MzsJCXJldCA9IGJ1aWxkX2luc24oaW5zbiwgY3R4LCBpKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlpZiAoaW5zbi0mZ3Q7Y29kZSA9PSAoQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVykpIHsKJiM0MzsJCQlpJiM0MzsmIzQzOzsKJiM0MzsJCQlpZiAoIWN0eC0mZ3Q7dGFyZ2V0KQomIzQzOwkJCQljdHgtJmd0O29mZnNldHNbaV0gPSBjdHgtJmd0O2lkeDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWN0eC0mZ3Q7dGFyZ2V0KQomIzQzOwkJY3R4LSZndDtvZmZzZXRzW3Byb2ctJmd0O2xlbl0gPSBjdHgtJmd0O2lkeDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgYnBmX2ppdF9uZWVkc196ZXh0KHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaml0X2ZpbGxfaG9sZSh2b2lkICphcmVhLCB1bnNpZ25lZCBpbnQgc2l6ZSkKJiM0Mzt7CiYjNDM7CXUxNiAqcHRyOwomIzQzOwomIzQzOwlmb3IgKHB0ciA9IGFyZWE7IHNpemUgJmd0Oz0gMjsgc2l6ZSAtPSAyKQomIzQzOwkJKnB0ciYjNDM7JiM0MzsgPSAweDRhZmM7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKmhlYWRlcjsKJiM0MzsJc3RydWN0IGppdF9jdHggY3R4OwomIzQzOwl1bnNpZ25lZCBpbnQgaW1hZ2Vfc2l6ZTsKJiM0MzsJdTggKmltYWdlX3B0cjsKJiM0MzsJYm9vbCBleHRyYV9wYXNzID0gcHJvZy0mZ3Q7aml0ZWQ7CiYjNDM7CiYjNDM7CWlmICghcHJvZy0mZ3Q7aml0X3JlcXVlc3RlZCkKJiM0MzsJCXJldHVybiBwcm9nOwomIzQzOwomIzQzOwlpZiAocHJvZy0mZ3Q7aml0ZWQgJmFtcDsmYW1wOyAhcHJvZy0mZ3Q7YXV4LSZndDtmdW5jKQomIzQzOwkJcmV0dXJuIHByb2c7CiYjNDM7CiYjNDM7CW1lbXNldCgmYW1wO2N0eCwgMCwgc2l6ZW9mKGN0eCkpOwomIzQzOwljdHgucHJvZyA9IHByb2c7CiYjNDM7CiYjNDM7CWN0eC5vZmZzZXRzID0ga3ZjYWxsb2MocHJvZy0mZ3Q7bGVuICYjNDM7IDEsIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFjdHgub2Zmc2V0cykKJiM0MzsJCXJldHVybiBwcm9nOwomIzQzOwomIzQzOwlidWlsZF9wcm9sb2d1ZSgmYW1wO2N0eCk7CiYjNDM7CWlmIChidWlsZF9ib2R5KCZhbXA7Y3R4KSAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dF9vZmY7CiYjNDM7CWJ1aWxkX2VwaWxvZ3VlKCZhbXA7Y3R4KTsKJiM0MzsKJiM0MzsJaWYgKGV4dHJhX3Bhc3MpIHsKJiM0MzsJCWhlYWRlciA9IHByb2ctJmd0O2F1eC0mZ3Q7aml0X2RhdGE7CiYjNDM7CQlpbWFnZV9wdHIgPSAodTggKilwcm9nLSZndDticGZfZnVuYzsKJiM0MzsJCWltYWdlX3NpemUgPSBwcm9nLSZndDtqaXRlZF9sZW47CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpbWFnZV9zaXplID0gY3R4LmlkeCAqIDI7CiYjNDM7CQloZWFkZXIgPSBicGZfaml0X2JpbmFyeV9hbGxvYyhpbWFnZV9zaXplLCAmYW1wO2ltYWdlX3B0ciwgMiwgaml0X2ZpbGxfaG9sZSk7CiYjNDM7CQlpZiAoIWhlYWRlcikKJiM0MzsJCQlnb3RvIG91dF9vZmY7CiYjNDM7CQlwcm9nLSZndDthdXgtJmd0O2ppdF9kYXRhID0gaGVhZGVyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWN0eC50YXJnZXQgPSAodTE2ICopaW1hZ2VfcHRyOwomIzQzOwljdHguaWR4ID0gMDsKJiM0MzsKJiM0MzsJYnVpbGRfcHJvbG9ndWUoJmFtcDtjdHgpOwomIzQzOwlpZiAoYnVpbGRfYm9keSgmYW1wO2N0eCkgJmx0OyAwKSB7CiYjNDM7CQlicGZfaml0X2JpbmFyeV9mcmVlKGhlYWRlcik7CiYjNDM7CQlwcm9nLSZndDthdXgtJmd0O2ppdF9kYXRhID0gTlVMTDsKJiM0MzsJCXByb2ctJmd0O2JwZl9mdW5jID0gTlVMTDsKJiM0MzsJCXByb2ctJmd0O2ppdGVkID0gMDsKJiM0MzsJCXByb2ctJmd0O2ppdGVkX2xlbiA9IDA7CiYjNDM7CQlnb3RvIG91dF9vZmY7CiYjNDM7CX0KJiM0MzsJYnVpbGRfZXBpbG9ndWUoJmFtcDtjdHgpOwomIzQzOwomIzQzOwlmbHVzaF9pY2FjaGVfcmFuZ2UoKHUzMiloZWFkZXIsICh1MzIpKGN0eC50YXJnZXQgJiM0MzsgY3R4LmlkeCkpOwomIzQzOwomIzQzOwlpZiAoYnBmX2ppdF9lbmFibGUgJmd0OyAxKQomIzQzOwkJYnBmX2ppdF9kdW1wKHByb2ctJmd0O2xlbiwgaW1hZ2Vfc2l6ZSwgMiwgY3R4LnRhcmdldCk7CiYjNDM7CiYjNDM7CWlmICgoIXByb2ctJmd0O2F1eC0mZ3Q7ZnVuYyB8fCBleHRyYV9wYXNzKSAmYW1wOyZhbXA7IGJwZl9qaXRfYmluYXJ5X2xvY2tfcm8oaGVhZGVyKSkgewomIzQzOwkJYnBmX2ppdF9iaW5hcnlfZnJlZShoZWFkZXIpOwomIzQzOwkJcHJvZy0mZ3Q7YnBmX2Z1bmMgPSBOVUxMOwomIzQzOwkJcHJvZy0mZ3Q7aml0ZWQgPSAwOwomIzQzOwkJcHJvZy0mZ3Q7aml0ZWRfbGVuID0gMDsKJiM0MzsJCXByb2ctJmd0O2F1eC0mZ3Q7aml0X2RhdGEgPSBOVUxMOwomIzQzOwkJZ290byBvdXRfb2ZmOwomIzQzOwl9CiYjNDM7CiYjNDM7CXByb2ctJmd0O2JwZl9mdW5jID0gKHZvaWQgKiljdHgudGFyZ2V0OwomIzQzOwlwcm9nLSZndDtqaXRlZCA9IDE7CiYjNDM7CXByb2ctJmd0O2ppdGVkX2xlbiA9IGltYWdlX3NpemU7CiYjNDM7CiYjNDM7b3V0X29mZjoKJiM0MzsJa3ZmcmVlKGN0eC5vZmZzZXRzKTsKJiM0MzsJcmV0dXJuIHByb2c7CiYjNDM7fQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODg1MAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDExOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBvZiBtNjhrIEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2gqKgoKT2theSwgc28gd2UgaGF2ZSBhIHBhdGNoIGludHJvZHVjaW5nIGEgQlBGIEpJVCBjb21waWxlciBzcGVjaWZpY2FsbHkgZm9yIHRoZSBtNjhrIGFyY2hpdGVjdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0NhbiB3ZSBldmVuIGZ1enogdGhpcz8mIzM0OyBNeSBrbm93bGVkZ2UgdGVsbHMgbWUgdGhhdCBtNjhrIGlzbiYjMzk7dCBhICpzdGFuZGFyZCogdGFyZ2V0IGZvciBmdXp6aW5nIHdpdGhpbiB0aGUgdXN1YWwgc3l6a2FsbGVyIHNldHVwcywgd2hpY2ggbGVhbiB0b3dhcmRzIGFyY2hpdGVjdHVyZXMgbGlrZSB4ODZfNjQsIGFybTY0LCBldGMuIEhvd2V2ZXIsIGxldCYjMzk7cyBub3QganVtcCB0byBjb25jbHVzaW9ucy4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgZXhjbHVkZXMgdGhpbmdzIHRoYXQgY2FuJiMzOTt0IGJlIHJlYWNoZWQgaW4gUUVNVSwgYW5kIFFFTVUgKmRvZXMqIHN1cHBvcnQgbTY4ay4gVGhhdCYjMzk7cyBhIGtleSBwb2ludC4KClRoZSBwYXRjaCBtb2RpZmllcyBgTUFJTlRBSU5FUlNgLCBgS2J1aWxkYCwgYEtjb25maWdgLCBgTWFrZWZpbGVgLCBhbmQgaW50cm9kdWNlcyBgYnBmX2ppdF9jb21wLmNgLCB3aGljaCBpcyB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gVGhpcyBuZXcgZmlsZSBpbXBsZW1lbnRzIHRoZSBhY3R1YWwgQlBGIEpJVCBjb21waWxlciBmb3IgbTY4ay4gTm93LCBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlPyBUaGUgaW1wb3J0YW50IHRoaW5nIGlzOiAqSXMgaXQgcG9zc2libGUgdG8gcmVhY2ggdGhlIHBhdGNoZWQgY29kZT8qCgpMb29raW5nIGF0IHRoZSBjb2RlLCBpdCBpbXBsZW1lbnRzIGBicGZfaW50X2ppdF9jb21waWxlYC4gIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50OyB0aGUgcHJvbXB0IHNheXMgdG8gbG9vayBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBzdGF0aWMuIFRoZSBgTWFrZWZpbGVgIGNvbmZpcm1zIHRoYXQgYENPTkZJR19CUEZfSklUYCBpcyBuZWNlc3NhcnkuIE5vdyBJIG5lZWQgdG8gY29uZmlybSBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgYW4gQVBJIGVudHJ5IHBvaW50LCBzbyBJJiMzOTttIHN1cmUgb2Ygd2hhdCB0byBlbmFibGUuIFRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtLiBXaGVuIGEgQlBGIHByb2dyYW0gaXMgbG9hZGVkIGFuZCBKSVQgaXMgZW5hYmxlZCwgaXQmIzM5O3MgY2FsbGVkLiBUaGlzIG1lYW5zIHRoYXQsIGFzc3VtaW5nIHRoZSBjb25maWcgaXMgZW5hYmxlZCwgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHRyaWdnZXIgdGhlIG5ldyBjb2RlLgoKVGhlIHByb21wdCBndWlkZXMgbWUgdG93YXJkIGEgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBkZWNpc2lvbi4gIFNpbmNlIGl0JiMzOTtzIG02OGstc3BlY2lmaWMsIGFuZCBtNjhrICppcyogZW11bGFibGUgaW4gUUVNVSwgdGhlIGNvZGUgKnNob3VsZCogYmUgcmVhY2hhYmxlIHVuZGVyIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoaXMgc3VnZ2VzdHMgZnV6emluZyBpcyAqcG9zc2libGUqLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSAmIzM0O2lmIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpbiBRRU1VLCByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUmIzM0Oy4gSXQmIzM5O3Mgbm90IGV4Y2x1ZGVkIGFuZCBpcyBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmVhdHVyZSBpbiBhbiBhcmNoaXRlY3R1cmUgc3VwcG9ydGVkIGJ5IFFFTVUuCgpTbywgbGV0IG1lIGV4dHJhY3QgdGhlIGNvbmZpZyByZXF1aXJlbWVudHMuIFRoZSBgTWFrZWZpbGVgIHNob3dzIGBDT05GSUdfQlBGX0pJVGAgaXMgbmVlZGVkLiBgSEFWRV9FQlBGX0pJVGAgaXMgYWxzbyBzZWxlY3RlZCBpZiBub3QgYENPTERGSVJFYCBvciBgTTY4MDAwYCwgYmFzZWQgb24gdGhlIGBLY29uZmlnYC4gVGhlcmVmb3JlLCBJIG11c3QgZW5hYmxlIGBCUEZfSklUYC4KCkkgY29uZmlybSBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgdGhlIGVudHJ5IHBvaW50LCBhbmQgdGhhdCBgYnBmX2ppdF9uZWVkc196ZXh0YCBpcyB0aGUgb25seSBmdW5jdGlvbiBub3Qgc3RhdGljLCBhcGFydCBmcm9tIGBicGZfaW50X2ppdF9jb21waWxlYC4KClRoZSBjb25jbHVzaW9uIGlzLCBpdCBpcyBmZWFzaWJsZSB0byBmdXp6LCBhbmQgSSB3b3VsZCBub3cgbW92ZSBvbiB0byBjb25maXJtaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHJ1bm5pbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgdGVzdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYz0xNTQ5PXN0YXRpYyB2b2lkIGppdF9maWxsX2hvbGUodm9pZCAqYXJlYSwgdW5zaWduZWQgaW50IHNpemUpXG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNTU2LVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxNTU3OnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE1NTgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA0OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwODczCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQlBGIEpJVCBDb21waWxlciBTeW1ib2xzKioKCkFscmlnaHQsIHNvIGBicGZfaW50X2ppdF9jb21waWxlYCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgY29uZmlybWluZyBteSBpbml0aWFsIGh1bmNoLiBCdXQgbm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBhYm91dCBgYnBmX2ppdF9uZWVkc196ZXh0YD8gSXMgdGhhdCBzdGF0aWMgb3Igbm90PyBUaGUgYW5zd2VyIHRvIHRoYXQgd2lsbCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgdGhlIEpJVCBjb21waWxlciBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IG1vZHVsYXIgdGhpbmdzIGFyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHZpc2liaWxpdHkgb2YgdGhhdCBzeW1ib2wgdG8gZW5zdXJlIHByb3BlciBsaW5raW5nIGFuZCBwb3RlbnRpYWwgaW50ZWdyYXRpb24gd2l0aCBvdGhlciBCUEYgY29tcG9uZW50cy4gSXQmIzM5O3MgYSBrZXkgcGllY2UgaW4gdGhlIHB1enpsZSwgYW5kIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X25lZWRzX3pleHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM9MTUxNT1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGppdF9jdHggKmN0eClcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE1NDMtXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjE1NDQ6Ym9vbCBicGZfaml0X25lZWRzX3pleHQodm9pZClcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTU0NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEyNDAKCQkJCQkJCW91dHB1dDogODEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEZ1bmN0aW9uIFNjb3BlIGluIEJQRiBKSVQqKgoKUmlnaHQsIHNvIEkmIzM5O20gcmV2aXNpdGluZyB0aGUgQlBGIEpJVCBjb2RlIGFuZCB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCBmdW5jdGlvbiBzY29wZS4gSSBzZWUgdGhhdCBgYnBmX2ppdF9uZWVkc196ZXh0YCBpcyAqYWxzbyogZGVjbGFyZWQgbm9uLXN0YXRpYy4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbiwgd29ydGggbm90aW5nLiBOb3csIHRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IHBvcHMgaW50byBteSBoZWFkIGlzOiBhcmUgdGhlcmUgKmFueSogb3RoZXIgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGNvZGUgYmFzZSB0aGF0IGFyZW4mIzM5O3QgZGVjbGFyZWQgYXMgc3RhdGljPyBJdOKAmXMgYSBnb29kIHByYWN0aWNlIHRvIGRlY2xhcmUgZnVuY3Rpb25zIHN0YXRpYyB3aGVuIHBvc3NpYmxlLCB0byBhdm9pZCBpbmFkdmVydGVudCBleHRlcm5hbCBsaW5rYWdlIGFuZCByZWR1Y2UgdGhlIGNoYW5jZXMgb2YgbmFtZSBjb2xsaXNpb25zIGluIGxhcmdlciBwcm9qZWN0cy4gSWRlbnRpZnlpbmcgKmFsbCogc3VjaCBub24tc3RhdGljIGZ1bmN0aW9ucyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBvciB0aG9zZSBhcmVhcyB3aGVyZSBleHRlcm5hbCBsaW5rYWdlIG1pZ2h0IGJlIGludGVudGlvbmFsLiBJIG5lZWQgdG8gbWFrZSBhIHRob3JvdWdoIHBhc3MgdGhyb3VnaCB0aGUgc291cmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qXFxzJiM0MztcXCoqW2EtekEtWl9dW2EtekEtWjAtOV9dKlxccypcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM9MTUxNT1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGppdF9jdHggKmN0eClcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE1NDMtXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjE1NDQ6Ym9vbCBicGZfaml0X25lZWRzX3pleHQodm9pZClcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTU0NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE2NzYKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemluZyB0aGVtIGZyb20gYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGluIHRoaXMgY29kZToKCioqUmVnZXggU25hZnUgYW5kIGEgUXVpY2sgRml4KioKClJpZ2h0LCBkYW1uIGl0ISBJIGp1c3QgcmVhbGl6ZWQgbXkgaW5pdGlhbCByZWdleCBkaWRuJiMzOTt0IGZsYWcgYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBJdCYjMzk7cyBnb3QgdGhhdCBgc3RydWN0IGJwZl9wcm9nICpgIHJldHVybiB0eXBlLCB3aGljaCBteSBwcmV2aW91cyBwYXR0ZXJuIGNvbXBsZXRlbHkgbWlzc2VkLiBJIHdhcyBzbyBmb2N1c2VkIG9uIHRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiwgSSBvdmVybG9va2VkIHRoYXQgZGV0YWlsIGluIHRoZSBzaWduYXR1cmUuIE9rYXksIG5vIHByb2JsZW0sIEkgY2FuIGFkYXB0LiBUaGlua2luZyBJJiMzOTtsbCBqdXN0IGJyb2FkZW4gdGhlIHNlYXJjaC4gSSBjYW4gdXNlIHNvbWV0aGluZyBzaW1wbGUgbGlrZSBgXnN0cnVjdCAuKmAgdG8gbWF0Y2ggYW55IGxpbmUgdGhhdCBzdGFydHMgd2l0aCBgc3RydWN0YCBmb2xsb3dlZCBieSBhbnl0aGluZy4gVGhhdCBzaG91bGQgZ3JhYiB0aGUgb25lcyBJIG5lZWQgd2l0aG91dCBnZXR0aW5nIHRvbyBzcGVjaWZpYy4gTmVlZCB0byBrZWVwIHRoaXMgbW92aW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dLipcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM9NjM9c3RydWN0IGppdF9jdHgge1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNjktXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjcwOnN0YXRpYyBub2lubGluZSB1MzIgaml0X211bDMyKHUzMiBhLCB1MzIgYilcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNzEte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNzQtXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjc1OnN0YXRpYyBub2lubGluZSB1MzIgaml0X2RpdjMyKHUzMiBhLCB1MzIgYilcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNzYte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNzktXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjgwOnN0YXRpYyBub2lubGluZSB1MzIgaml0X21vZDMyKHUzMiBhLCB1MzIgYilcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtODEte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtODQtXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjg1OnN0YXRpYyBub2lubGluZSBzMzIgaml0X3NkaXYzMihzMzIgYSwgczMyIGIpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTg2LXtcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTkzLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo5NDpzdGF0aWMgbm9pbmxpbmUgczMyIGppdF9zbW9kMzIoczMyIGEsIHMzMiBiKVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy05NS17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMDItXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjEwMzpzdGF0aWMgbm9pbmxpbmUgdTY0IGppdF9tdWw2NCh1NjQgYSwgdTY0IGIpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTEwNC17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMDctXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjEwODpzdGF0aWMgbm9pbmxpbmUgdTY0IGppdF9kaXY2NCh1NjQgYSwgdTY0IGIpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTEwOS17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMTItXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjExMzpzdGF0aWMgbm9pbmxpbmUgczY0IGppdF9zZGl2NjQoczY0IGEsIHM2NCBiKVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMTQte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTIxLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxMjI6c3RhdGljIG5vaW5saW5lIHU2NCBqaXRfbW9kNjQodTY0IGEsIHU2NCBiKVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMjMte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTMxLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxMzI6c3RhdGljIG5vaW5saW5lIHM2NCBqaXRfc21vZDY0KHM2NCBhLCBzNjQgYilcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTMzLXtcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE0MC1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MTQxOnN0YXRpYyB1MzIgaml0X2F0b21pYzMyKHUzMiAqcHRyLCB1MzIgdmFsLCB1MzIgb3AsIHUzMiBjbXApXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE0Mi17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNzctXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjE3ODpzdGF0aWMgdTY0IGppdF9hdG9taWM2NCh1MzIgKnB0ciwgdTMyIHZhbF9oaSwgdTMyIHZhbF9sbywgdTMyIG9wLCB1MzIgY21wX2hpLCB1MzIgY21wX2xvKVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNzkte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjE4LVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoyMTk6c3RhdGljIGlubGluZSB2b2lkIGVtaXRfMTYoc3RydWN0IGppdF9jdHggKmN0eCwgdTE2IGluc3QpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTIyMC17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0yMjUtXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjIyNjpzdGF0aWMgaW5saW5lIHZvaWQgZW1pdF8zMihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1MzIgdmFsKVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0yMjcte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjMxLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoyMzI6c3RhdGljIGlubGluZSBib29sIGlzX3N0YWNrZWQoczggcmVnKVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0yMzMte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjM2LVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoyMzc6c3RhdGljIHM4IGJwZl9nZXRfcmVnMzIoczggYnBmX3JlZywgczggdG1wX3JlZywgc3RydWN0IGppdF9jdHggKmN0eClcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjM4LXtcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTI0Ni1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MjQ3OnN0YXRpYyB2b2lkIGJwZl9wdXRfcmVnMzIoczggYnBmX3JlZywgczggc3JjX3JlZywgc3RydWN0IGppdF9jdHggKmN0eClcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjQ4LXtcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTI1Ni1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MjU3OnN0YXRpYyB2b2lkIGVtaXRfYWx1MzJfbmVnKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjU4LXtcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTI2OS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MjcwOnN0YXRpYyB2b2lkIGVtaXRfYWx1NjRfbmVnKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjcxLXtcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTI4My1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6Mjg0OnN0YXRpYyB2b2lkIGVtaXRfYWx1MzJfeChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTI4NS17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0zNDktXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjM1MDpzdGF0aWMgdm9pZCBlbWl0X2FsdTMyX2soY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0zNTEte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNDAzLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo0MDQ6c3RhdGljIHZvaWQgZW1pdF9hbHU2NF94KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNDA1LXtcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTQ2My1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6NDY0OnN0YXRpYyB2b2lkIGVtaXRfYWx1NjRfayhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTQ2NS17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy01MjAtXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjUyMTpzdGF0aWMgdm9pZCBlbWl0X2FsdTY0X3NoaWZ0KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBpc19pbW0pXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTUyMi17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy01NzUtXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjU3NjpzdGF0aWMgdm9pZCBlbWl0X2JwZl9lbmQoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy01Nzcte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNjMxLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo2MzI6c3RhdGljIHZvaWQgZW1pdF9tYXRoX2NhbGwoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIGlzXzY0KVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy02MzMte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNzM5LVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo3NDA6c3RhdGljIHZvaWQgZW1pdF9sZHgoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy03NDEte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtODAyLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo4MDM6c3RhdGljIHZvaWQgZW1pdF9zdHgoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy04MDQte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtODQzLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo4NDQ6c3RhdGljIHZvaWQgZW1pdF9zdChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTg0NS17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy04ODUtXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjg4NjpzdGF0aWMgdm9pZCBlbWl0X2F0b21pYyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTg4Ny17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy05ODctXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjk4ODpzdGF0aWMgdm9pZCBlbWl0X3RhaWxfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTk4OS17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMDUxLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxMDUyOnN0YXRpYyBpbnQgZW1pdF9qbXAoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgY3Vycl9pKVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMDUzLXtcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTEyMTYtXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjEyMTc6c3RhdGljIGludCBlbWl0X2NhbGwoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMjE4LXtcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTEyNTItXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjEyNTM6c3RhdGljIHZvaWQgYnVpbGRfcHJvbG9ndWUoc3RydWN0IGppdF9jdHggKmN0eClcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTI1NC17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMzAyLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxMzAzOnN0YXRpYyB2b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTEzMDQte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTMxMS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MTMxMjpzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgaSlcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTMxMy17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNTE0LVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxNTE1OnN0YXRpYyBpbnQgYnVpbGRfYm9keShzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNTE2LXtcbi0tXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE1NDMtXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjE1NDQ6Ym9vbCBicGZfaml0X25lZWRzX3pleHQodm9pZClcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTU0NS17XG4tLVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNTQ4LVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxNTQ5OnN0YXRpYyB2b2lkIGppdF9maWxsX2hvbGUodm9pZCAqYXJlYSwgdW5zaWduZWQgaW50IHNpemUpXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE1NTAte1xuLS1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTU1Ni1cbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MTU1NzpzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNTU4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU4MTUKCQkJCQkJCW91dHB1dDogMTAyCgkJCQkJCQl0aG91Z2h0czogODY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBCUEYgSklUIENvbXBpbGVyIFBhdGNoIGZvciBtNjhrIEFyY2hpdGVjdHVyZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBgYnBmX2ppdF9uZWVkc196ZXh0YCBhcmUgdGhlIHR3byBrZXkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBwYXRjaC4gIGBicGZfaW50X2ppdF9jb21waWxlYCBsb29rcyBsaWtlIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgSklUIGNvbXBpbGVyIGl0c2VsZiwgd2hpY2ggaXMgY3J1Y2lhbC4gIGBicGZfaml0X25lZWRzX3pleHRgIGlzIGFsc28gYW4gaW1wb3J0YW50IGVudHJ5IHBvaW50IGNhbGxlZCBmcm9tIHRoZSBjb3JlIEJQRiBjb2RlLgoKTm93LCBjaGVja2luZyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYGFyY2gvbTY4ay9LY29uZmlnYCByZXZlYWxzIHRoYXQgYENPTkZJR19CUEZfSklUYCBpcyB0aGUgY3JpdGljYWwgb3B0aW9uIGhlcmUuICBUaGUgY29kZSBzZWxlY3RzIGBIQVZFX0VCUEZfSklUYCBpZiB3ZSYjMzk7cmUgKm5vdCogZGVhbGluZyB3aXRoIENPTERGSVJFIG9yIE02ODAwMCBwcm9jZXNzb3JzLgoKVGhlIHByb21wdCBzdGlwdWxhdGVzIHRoYXQgd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgaXMgJiMzNDtXb3J0aEZ1enppbmcuJiMzNDsgQ29uc2lkZXJpbmcgdGhlIGNyaXRlcmlhLCB0aGUgbTY4ayBhcmNoaXRlY3R1cmUgaXMgYSBmYWN0b3IuICBXaGlsZSBTeXprYWxsZXIgZG9lc24mIzM5O3QgdHlwaWNhbGx5IGZvY3VzIG9uIG02OGssIFFFTVUgZG9lcyBzdXBwb3J0IGl0LCB3aGljaCBtYWtlcyBtZSB0aGluayBpdCYjMzk7cyBmdXp6YWJsZS4gIFRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBCUEYgSklUIGNvbXBpbGVyIGZvciBhIG5ldyBhcmNoaXRlY3R1cmUuCgpNeSBzdHJhdGVneSBpcyB0byBkZWZpbmUgdGhlICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgcGFyYW1ldGVyLiBTaW5jZSB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUga2VybmVsIChhIEpJVCBjb21waWxlciBmb3IgYSBuZXcgYXJjaGl0ZWN0dXJlKSwgSSYjMzk7bGwgc2V0IHRoaXMgdG8gdHJ1ZS4KClRvIHN1cHBvcnQgdGhpcyBkZWNpc2lvbiwgSSBuZWVkIHRvIHByb3ZpZGUgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYC4gIFRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgcmV2b2x2ZXMgYXJvdW5kIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgYGJwZl9qaXRfbmVlZHNfemV4dGAuICBTbyBteSBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlIGBbJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssICYjMzQ7YnBmX2ppdF9uZWVkc196ZXh0JiMzNDtdYC4gIFRoZSByZWxldmFudCBjb25maWcsIGFuZCB2ZXJpZmllZCBieSBgYXJjaC9tNjhrL25ldC9NYWtlZmlsZWAsIGlzIGBCUEZfSklUYCwgc28gbXkgYEVuYWJsZUNvbmZpZ3NgIGxpc3Qgd2lsbCBiZSBgWyYjMzQ7QlBGX0pJVCYjMzQ7XWAuCgpJJiMzOTt2ZSBhbHNvIGNvbmZpcm1lZCB0aGF0IGBCUEZfSklUYCB1c3VhbGx5IGRlcGVuZHMgb24gYEhBVkVfRUJQRl9KSVRgLCB3aGljaCwgaW4gdGhpcyBjYXNlLCBpcyBpbmRlZWQgc2VsZWN0ZWQgYmFzZWQgb24gdGhlIEtjb25maWcgZmlsZS4gSSB3aWxsIGFsc28gbWFrZSBzdXJlIHRvIHNwZWNpZnkgYSBnb29kIHJlYXNvbiBpbiB0aGUgZmluYWwgcmVzcG9uc2UuCgpGaW5hbGx5LCBuZWl0aGVyIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaG90LXBhdGggZnVuY3Rpb25zLiBUaGlzIGlzIGJlY2F1c2UgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIGNhbGxlZCB3aGVuIGEgQlBGIHByb2dyYW0gaXMgbG9hZGVkIGFuZCBgYnBmX2ppdF9uZWVkc196ZXh0YCBpcyBjYWxsZWQgZHVyaW5nIHByb2dyYW0gbG9hZGluZyBvciB2ZXJpZmljYXRpb24uIFRoaXMgaW1wbGllcyB0aGF0IHRoZXkgd2lsbCBiZSBjYWxsZWQgZHVyaW5nIGNvbnRyb2wtcGF0aCBvcGVyYXRpb24gYW5kIGFyZSB0aGVyZWZvcmUgdGVzdGFibGUuCgpTbyB0aGUgZmluYWwgc2V0IHdpbGwgYmU6CldvcnRoRnV6emluZzogdHJ1ZQpGb2N1c1N5bWJvbHM6IFsmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywgJiMzNDticGZfaml0X25lZWRzX3pleHQmIzM0O10KRW5hYmxlQ29uZmlnczogWyYjMzQ7QlBGX0pJVCYjMzQ7XQpSZWFzb25pbmc6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIEpJVCBjb21waWxlciBmb3IgdGhlIG02OGsgYXJjaGl0ZWN0dXJlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIEJQRiBwcm9ncmFtIGxvYWRpbmcgd2hlbiBKSVQgaXMgZW5hYmxlZCwgYW5kIGNhbiBiZSB0ZXN0ZWQgaW4gUUVNVS4mIzM0OwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9uZWVkc196ZXh0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIEpJVCBjb21waWxlciBmb3IgdGhlIG02OGsgYXJjaGl0ZWN0dXJlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIEJQRiBwcm9ncmFtIGxvYWRpbmcgd2hlbiBKSVQgaXMgZW5hYmxlZCwgYW5kIGNhbiBiZSB0ZXN0ZWQgaW4gUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9uZWVkc196ZXh0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIEpJVCBjb21waWxlciBmb3IgdGhlIG02OGsgYXJjaGl0ZWN0dXJlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIEJQRiBwcm9ncmFtIGxvYWRpbmcgd2hlbiBKSVQgaXMgZW5hYmxlZCwgYW5kIGNhbiBiZSB0ZXN0ZWQgaW4gUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA0OjUwOjA3LjU1NTA2OTUzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MDg5NzU3Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gICAgXCJicGZfaml0X25lZWRzX3pleHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBKSVQgY29tcGlsZXIgZm9yIHRoZSBtNjhrIGFyY2hpdGVjdHVyZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGR1cmluZyBCUEYgcHJvZ3JhbSBsb2FkaW5nIHdoZW4gSklUIGlzIGVuYWJsZWQsIGFuZCBjYW4gYmUgdGVzdGVkIGluIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA0OjUwOjA3LjU1NTA3NzcwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc4NDU3NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2M3MGNiNmQzODc3N2Q1ZjUxOGY1MmY4MzQxMWU0ZWFiZGY0ZDdkMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAzMCAwNDo1MDowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggMmZiMWM3NWFmZDE2My4uNTMwNTUxODM0YzE2MyAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTQ3MDEsNiArNDcwMSwxMiBAQCBMOlxcdGJwZkB2Z2VyLmtlcm5lbC5vcmdcXG4gUzpcXHRNYWludGFpbmVkXFxuIEY6XFx0YXJjaC9sb29uZ2FyY2gvbmV0L1xcbiBcXG4rQlBGIEpJVCBmb3IgTTY4S1xcbitNOlxcdEt1YW4tV2VpIENoaXUgXFx1MDAzY3Zpc2l0b3Jja3dAZ21haWwuY29tXFx1MDAzZVxcbitMOlxcdGJwZkB2Z2VyLmtlcm5lbC5vcmdcXG4rUzpcXHRNYWludGFpbmVkXFxuK0Y6XFx0YXJjaC9tNjhrL25ldC9cXG4rXFxuIEJQRiBKSVQgZm9yIE1JUFMgKDMyLUJJVCBBTkQgNjQtQklUKVxcbiBNOlxcdEpvaGFuIEFsbWJsYWRoIFxcdTAwM2Nqb2hhbi5hbG1ibGFkaEBhbnlmaW5ldHdvcmtzLmNvbVxcdTAwM2VcXG4gTTpcXHRQYXVsIEJ1cnRvbiBcXHUwMDNjcGF1bGJ1cnRvbkBrZXJuZWwub3JnXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9hcmNoL202OGsvS2J1aWxkIGIvYXJjaC9tNjhrL0tidWlsZFxcbmluZGV4IDc3NjJhZjlmNmRlZmUuLjA1OGFkNDFhNzI4YzUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9tNjhrL0tidWlsZFxcbisrKyBiL2FyY2gvbTY4ay9LYnVpbGRcXG5AQCAtMSw1ICsxLDUgQEBcXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuLW9iai15XFx0XFx0XFx0XFx0Kz0ga2VybmVsLyBtbS9cXG4rb2JqLXlcXHRcXHRcXHRcXHQrPSBrZXJuZWwvIG1tLyBuZXQvXFxuIG9iai0kKENPTkZJR19RNDApXFx0XFx0Kz0gcTQwL1xcbiBvYmotJChDT05GSUdfQU1JR0EpXFx0XFx0Kz0gYW1pZ2EvXFxuIG9iai0kKENPTkZJR19BVEFSSSlcXHRcXHQrPSBhdGFyaS9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcgYi9hcmNoL202OGsvS2NvbmZpZ1xcbmluZGV4IDExODM1ZWI1OWQ5NGQuLmRhNDNkNjY2MGM1Y2UgMTAwNjQ0XFxuLS0tIGEvYXJjaC9tNjhrL0tjb25maWdcXG4rKysgYi9hcmNoL202OGsvS2NvbmZpZ1xcbkBAIC04LDYgKzgsNyBAQCBjb25maWcgTTY4S1xcbiBcXHRzZWxlY3QgQVJDSF9IQVNfQ1BVX0ZJTkFMSVpFX0lOSVQgaWYgTU1VXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19DVVJSRU5UX1NUQUNLX1BPSU5URVJcXG4gXFx0c2VsZWN0IEFSQ0hfSEFTX0RNQV9QUkVQX0NPSEVSRU5UIGlmIE02OEtfTk9OQ09IRVJFTlRfRE1BIFxcdTAwMjZcXHUwMDI2ICFDT0xERklSRVxcbitcXHRzZWxlY3QgSEFWRV9FQlBGX0pJVCBpZiAoIUNPTERGSVJFIFxcdTAwMjZcXHUwMDI2ICFNNjgwMDApXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19TWU5DX0RNQV9GT1JfREVWSUNFIGlmIE02OEtfTk9OQ09IRVJFTlRfRE1BXFxuIFxcdHNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIRyBpZiBSTVdfSU5TTlNcXG4gXFx0c2VsZWN0IEFSQ0hfTUlHSFRfSEFWRV9QQ19QQVJQT1JUIGlmIElTQVxcbmRpZmYgLS1naXQgYS9hcmNoL202OGsvbmV0L01ha2VmaWxlIGIvYXJjaC9tNjhrL25ldC9NYWtlZmlsZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWM1YjE0NzYzMzE2N1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9hcmNoL202OGsvbmV0L01ha2VmaWxlXFxuQEAgLTAsMCArMSwyIEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbitvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX2ppdF9jb21wLm9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjZkNjQ3YmJhOTZlYjRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuY1xcbkBAIC0wLDAgKzEsMTYzMCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIEJQRiBKSVQgY29tcGlsZXIgZm9yIG02OGtcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEt1YW4tV2VpIENoaXUgXFx1MDAzY3Zpc2l0b3Jja3dAZ21haWwuY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbHRlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaXJxZmxhZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS9jYWNoZWZsdXNoLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYXRoNjQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpbWl0cy5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBTVEFDS19PRkZTRVQoaykgKC00IC0gKDQgKiAoaykpKVxcbitcXG4rZW51bSB7XFxuK1xcdEJQRl9SMV9ISSwgQlBGX1IxX0xPLFxcbitcXHRCUEZfUjJfSEksIEJQRl9SMl9MTyxcXG4rXFx0QlBGX1IzX0hJLCBCUEZfUjNfTE8sXFxuK1xcdEJQRl9SNF9ISSwgQlBGX1I0X0xPLFxcbitcXHRCUEZfUjVfSEksIEJQRl9SNV9MTyxcXG4rXFx0QlBGX1I2X0hJLCBCUEZfUjZfTE8sXFxuK1xcdEJQRl9SN19ISSwgQlBGX1I3X0xPLFxcbitcXHRCUEZfUjhfSEksIEJQRl9SOF9MTyxcXG4rXFx0QlBGX1I5X0hJLCBCUEZfUjlfTE8sXFxuK1xcdEJQRl9SMTBfSEksIEJQRl9SMTBfTE8sXFxuK1xcdEJQRl9BWF9ISSwgQlBGX0FYX0xPLFxcbitcXHRCUEZfVENfSEksIEJQRl9UQ19MTyxcXG4rXFx0QlBGX0pJVF9TQ1JBVENIX1JFR1MsXFxuK307XFxuK1xcbisjZGVmaW5lIFNDUkFUQ0hfU0laRSAoQlBGX0pJVF9TQ1JBVENIX1JFR1MgKiA0KVxcbitcXG4rI2RlZmluZSBUTVBfUkVHXzEgMTRcXG4rI2RlZmluZSBUTVBfUkVHXzIgMTVcXG4rXFxuKyNkZWZpbmUgTTY4S19EMCAwXFxuKyNkZWZpbmUgTTY4S19EMSAxXFxuKyNkZWZpbmUgTTY4S19EMiAyXFxuKyNkZWZpbmUgTTY4S19EMyAzXFxuKyNkZWZpbmUgTTY4S19ENCA0XFxuKyNkZWZpbmUgTTY4S19ENSA1XFxuK1xcbitzdGF0aWMgY29uc3QgczggYnBmMm02OGtbMTZdWzJdID0ge1xcbitcXHRbQlBGX1JFR18wXSAgPSB7TTY4S19EMSwgTTY4S19EMH0sXFxuK1xcdFtCUEZfUkVHXzFdICA9IHtTVEFDS19PRkZTRVQoQlBGX1IxX0hJKSwgIFNUQUNLX09GRlNFVChCUEZfUjFfTE8pfSxcXG4rXFx0W0JQRl9SRUdfMl0gID0ge1NUQUNLX09GRlNFVChCUEZfUjJfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SMl9MTyl9LFxcbitcXHRbQlBGX1JFR18zXSAgPSB7U1RBQ0tfT0ZGU0VUKEJQRl9SM19ISSksICBTVEFDS19PRkZTRVQoQlBGX1IzX0xPKX0sXFxuK1xcdFtCUEZfUkVHXzRdICA9IHtTVEFDS19PRkZTRVQoQlBGX1I0X0hJKSwgIFNUQUNLX09GRlNFVChCUEZfUjRfTE8pfSxcXG4rXFx0W0JQRl9SRUdfNV0gID0ge1NUQUNLX09GRlNFVChCUEZfUjVfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SNV9MTyl9LFxcbitcXHRbQlBGX1JFR182XSAgPSB7U1RBQ0tfT0ZGU0VUKEJQRl9SNl9ISSksICBTVEFDS19PRkZTRVQoQlBGX1I2X0xPKX0sXFxuK1xcdFtCUEZfUkVHXzddICA9IHtTVEFDS19PRkZTRVQoQlBGX1I3X0hJKSwgIFNUQUNLX09GRlNFVChCUEZfUjdfTE8pfSxcXG4rXFx0W0JQRl9SRUdfOF0gID0ge1NUQUNLX09GRlNFVChCUEZfUjhfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SOF9MTyl9LFxcbitcXHRbQlBGX1JFR185XSAgPSB7U1RBQ0tfT0ZGU0VUKEJQRl9SOV9ISSksICBTVEFDS19PRkZTRVQoQlBGX1I5X0xPKX0sXFxuK1xcdFtCUEZfUkVHXzEwXSA9IHtTVEFDS19PRkZTRVQoQlBGX1IxMF9ISSksIFNUQUNLX09GRlNFVChCUEZfUjEwX0xPKX0sXFxuK1xcdFtCUEZfUkVHX0FYXSA9IHtTVEFDS19PRkZTRVQoQlBGX0FYX0hJKSwgIFNUQUNLX09GRlNFVChCUEZfQVhfTE8pfSxcXG4rXFx0W1RNUF9SRUdfMV0gID0ge002OEtfRDMsIE02OEtfRDJ9LFxcbitcXHRbVE1QX1JFR18yXSAgPSB7TTY4S19ENSwgTTY4S19ENH0sXFxuK307XFxuK1xcbitzdHJ1Y3Qgaml0X2N0eCB7XFxuK1xcdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZztcXG4rXFx0dTE2ICp0YXJnZXQ7XFxuK1xcdHVuc2lnbmVkIGludCBpZHg7XFxuK1xcdGludCAqb2Zmc2V0cztcXG4rfTtcXG4rXFxuK3N0YXRpYyBub2lubGluZSB1MzIgaml0X211bDMyKHUzMiBhLCB1MzIgYilcXG4re1xcbitcXHRyZXR1cm4gYSAqIGI7XFxuK31cXG4rXFxuK3N0YXRpYyBub2lubGluZSB1MzIgaml0X2RpdjMyKHUzMiBhLCB1MzIgYilcXG4re1xcbitcXHRyZXR1cm4gYiA/IGEgLyBiIDogMDtcXG4rfVxcbitcXG4rc3RhdGljIG5vaW5saW5lIHUzMiBqaXRfbW9kMzIodTMyIGEsIHUzMiBiKVxcbit7XFxuK1xcdHJldHVybiBiID8gYSAlIGIgOiBhO1xcbit9XFxuK1xcbitzdGF0aWMgbm9pbmxpbmUgczMyIGppdF9zZGl2MzIoczMyIGEsIHMzMiBiKVxcbit7XFxuK1xcdGlmIChiID09IDApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRpZiAoYSA9PSBTMzJfTUlOIFxcdTAwMjZcXHUwMDI2IGIgPT0gLTEpXFxuK1xcdFxcdHJldHVybiBTMzJfTUlOO1xcbitcXHRyZXR1cm4gYSAvIGI7XFxuK31cXG4rXFxuK3N0YXRpYyBub2lubGluZSBzMzIgaml0X3Ntb2QzMihzMzIgYSwgczMyIGIpXFxuK3tcXG4rXFx0aWYgKGIgPT0gMClcXG4rXFx0XFx0cmV0dXJuIGE7XFxuK1xcdGlmIChhID09IFMzMl9NSU4gXFx1MDAyNlxcdTAwMjYgYiA9PSAtMSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBhICUgYjtcXG4rfVxcbitcXG4rc3RhdGljIG5vaW5saW5lIHU2NCBqaXRfbXVsNjQodTY0IGEsIHU2NCBiKVxcbit7XFxuK1xcdHJldHVybiBhICogYjtcXG4rfVxcbitcXG4rc3RhdGljIG5vaW5saW5lIHU2NCBqaXRfZGl2NjQodTY0IGEsIHU2NCBiKVxcbit7XFxuK1xcdHJldHVybiBiID8gZGl2NjRfdTY0KGEsIGIpIDogMDtcXG4rfVxcbitcXG4rc3RhdGljIG5vaW5saW5lIHM2NCBqaXRfc2RpdjY0KHM2NCBhLCBzNjQgYilcXG4re1xcbitcXHRpZiAoYiA9PSAwKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKGEgPT0gUzY0X01JTiBcXHUwMDI2XFx1MDAyNiBiID09IC0xKVxcbitcXHRcXHRyZXR1cm4gUzY0X01JTjtcXG4rXFx0cmV0dXJuIGRpdjY0X3M2NChhLCBiKTtcXG4rfVxcbitcXG4rc3RhdGljIG5vaW5saW5lIHU2NCBqaXRfbW9kNjQodTY0IGEsIHU2NCBiKVxcbit7XFxuK1xcdHU2NCByZW07XFxuK1xcbitcXHRpZiAoYiA9PSAwKVxcbitcXHRcXHRyZXR1cm4gYTtcXG4rXFx0ZGl2NjRfdTY0X3JlbShhLCBiLCBcXHUwMDI2cmVtKTtcXG4rXFx0cmV0dXJuIHJlbTtcXG4rfVxcbitcXG4rc3RhdGljIG5vaW5saW5lIHM2NCBqaXRfc21vZDY0KHM2NCBhLCBzNjQgYilcXG4re1xcbitcXHRpZiAoYiA9PSAwKVxcbitcXHRcXHRyZXR1cm4gYTtcXG4rXFx0aWYgKGEgPT0gUzY0X01JTiBcXHUwMDI2XFx1MDAyNiBiID09IC0xKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIGEgLSBkaXY2NF9zNjQoYSwgYikgKiBiO1xcbit9XFxuK1xcbitzdGF0aWMgdTMyIGppdF9hdG9taWMzMih1MzIgKnB0ciwgdTMyIHZhbCwgdTMyIG9wLCB1MzIgY21wKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHUzMiBvbGQ7XFxuK1xcbitcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuK1xcdG9sZCA9ICpwdHI7XFxuK1xcdHN3aXRjaCAob3ApIHtcXG4rXFx0Y2FzZSBCUEZfQUREOlxcbitcXHRjYXNlIEJQRl9BREQgfCBCUEZfRkVUQ0g6XFxuK1xcdFxcdCpwdHIgKz0gdmFsO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfQU5EOlxcbitcXHRjYXNlIEJQRl9BTkQgfCBCUEZfRkVUQ0g6XFxuK1xcdFxcdCpwdHIgXFx1MDAyNj0gdmFsO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfT1I6XFxuK1xcdGNhc2UgQlBGX09SIHwgQlBGX0ZFVENIOlxcbitcXHRcXHQqcHRyIHw9IHZhbDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX1hPUjpcXG4rXFx0Y2FzZSBCUEZfWE9SIHwgQlBGX0ZFVENIOlxcbitcXHRcXHQqcHRyIF49IHZhbDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX1hDSEc6XFxuK1xcdFxcdCpwdHIgPSB2YWw7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9DTVBYQ0hHOlxcbitcXHRcXHRpZiAob2xkID09IGNtcClcXG4rXFx0XFx0XFx0KnB0ciA9IHZhbDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbitcXG4rXFx0cmV0dXJuIG9sZDtcXG4rfVxcbitcXG4rc3RhdGljIHU2NCBqaXRfYXRvbWljNjQodTMyICpwdHIsIHUzMiB2YWxfaGksIHUzMiB2YWxfbG8sIHUzMiBvcCwgdTMyIGNtcF9oaSwgdTMyIGNtcF9sbylcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHR1NjQgb2xkLCB2YWwsIGNtcDtcXG4rXFx0dTY0ICpwdHI2NCA9ICh1NjQgKilwdHI7XFxuK1xcbitcXHR2YWwgPSAoKHU2NCl2YWxfaGkgXFx1MDAzY1xcdTAwM2MgMzIpIHwgdmFsX2xvO1xcbitcXHRjbXAgPSAoKHU2NCljbXBfaGkgXFx1MDAzY1xcdTAwM2MgMzIpIHwgY21wX2xvO1xcbitcXG4rXFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbitcXHRvbGQgPSAqcHRyNjQ7XFxuK1xcdHN3aXRjaCAob3ApIHtcXG4rXFx0Y2FzZSBCUEZfQUREOlxcbitcXHRjYXNlIEJQRl9BREQgfCBCUEZfRkVUQ0g6XFxuK1xcdFxcdCpwdHI2NCArPSB2YWw7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9BTkQ6XFxuK1xcdGNhc2UgQlBGX0FORCB8IEJQRl9GRVRDSDpcXG4rXFx0XFx0KnB0cjY0IFxcdTAwMjY9IHZhbDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX09SOlxcbitcXHRjYXNlIEJQRl9PUiB8IEJQRl9GRVRDSDpcXG4rXFx0XFx0KnB0cjY0IHw9IHZhbDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX1hPUjpcXG4rXFx0Y2FzZSBCUEZfWE9SIHwgQlBGX0ZFVENIOlxcbitcXHRcXHQqcHRyNjQgXj0gdmFsO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfWENIRzpcXG4rXFx0XFx0KnB0cjY0ID0gdmFsO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfQ01QWENIRzpcXG4rXFx0XFx0aWYgKG9sZCA9PSBjbXApXFxuK1xcdFxcdFxcdCpwdHI2NCA9IHZhbDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbitcXG4rXFx0cmV0dXJuIG9sZDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGVtaXRfMTYoc3RydWN0IGppdF9jdHggKmN0eCwgdTE2IGluc3QpXFxuK3tcXG4rXFx0aWYgKGN0eC1cXHUwMDNldGFyZ2V0KVxcbitcXHRcXHRjdHgtXFx1MDAzZXRhcmdldFtjdHgtXFx1MDAzZWlkeF0gPSBpbnN0O1xcbitcXHRjdHgtXFx1MDAzZWlkeCsrO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZW1pdF8zMihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1MzIgdmFsKVxcbit7XFxuK1xcdGVtaXRfMTYoY3R4LCB2YWwgXFx1MDAzZVxcdTAwM2UgMTYpO1xcbitcXHRlbWl0XzE2KGN0eCwgdmFsIFxcdTAwMjYgMHhmZmZmKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIGlzX3N0YWNrZWQoczggcmVnKVxcbit7XFxuK1xcdHJldHVybiByZWcgXFx1MDAzYyAwO1xcbit9XFxuK1xcbitzdGF0aWMgczggYnBmX2dldF9yZWczMihzOCBicGZfcmVnLCBzOCB0bXBfcmVnLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbit7XFxuK1xcdGlmIChpc19zdGFja2VkKGJwZl9yZWcpKSB7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDIwMmUgfCAodG1wX3JlZyBcXHUwMDNjXFx1MDAzYyA5KSk7XFx0XFx0LyogbW92ZS5sIGQxNiglZnApLCByZWcgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsICh1MTYpYnBmX3JlZyk7XFxuK1xcdFxcdHJldHVybiB0bXBfcmVnO1xcbitcXHR9XFxuK1xcdHJldHVybiBicGZfcmVnO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBicGZfcHV0X3JlZzMyKHM4IGJwZl9yZWcsIHM4IHNyY19yZWcsIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuK3tcXG4rXFx0aWYgKGlzX3N0YWNrZWQoYnBmX3JlZykpIHtcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MmQ0MCB8IHNyY19yZWcpO1xcdFxcdFxcdC8qIG1vdmUubCByZWcsIGQxNiglZnApICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAodTE2KWJwZl9yZWcpO1xcbitcXHR9IGVsc2UgaWYgKGJwZl9yZWcgIT0gc3JjX3JlZykge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGJwZl9yZWcgXFx1MDAzY1xcdTAwM2MgOSkgfCBzcmNfcmVnKTsgLyogbW92ZS5sIHNyYywgZHN0ICovXFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZW1pdF9hbHUzMl9uZWcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbit7XFxuK1xcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVxcdTAwM2Vkc3RfcmVnXTtcXG4rXFx0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xcbitcXHRzOCBkX3JlZyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpO1xcbitcXG4rXFx0ZW1pdF8xNihjdHgsIDB4NDQ4MCB8IGRfcmVnKTtcXHRcXHRcXHRcXHQvKiBuZWcubCBkX3JlZyAqL1xcbitcXG4rXFx0YnBmX3B1dF9yZWczMihkc3RbMV0sIGRfcmVnLCBjdHgpO1xcbitcXHRlbWl0XzE2KGN0eCwgMHg3MDAwIHwgKHRtcDFbMF0gXFx1MDAzY1xcdTAwM2MgOSkpO1xcdFxcdFxcdC8qIG1vdmVxICMwLCB0bXAxICovXFxuK1xcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlbWl0X2FsdTY0X25lZyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuK3tcXG4rXFx0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXFx1MDAzZWRzdF9yZWddO1xcbitcXHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XFxuK1xcdHM4IGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcXG4rXFx0czggZF9oaSA9IGJwZl9nZXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpO1xcbitcXG4rXFx0ZW1pdF8xNihjdHgsIDB4NDQ4MCB8IGRfbG8pO1xcdFxcdFxcdFxcdC8qIG5lZy5sIGRfbG8gKi9cXG4rXFx0ZW1pdF8xNihjdHgsIDB4NDA4MCB8IGRfaGkpO1xcdFxcdFxcdFxcdC8qIG5lZ3gubCBkX2hpICovXFxuK1xcbitcXHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9sbywgY3R4KTtcXG4rXFx0YnBmX3B1dF9yZWczMihkc3RbMF0sIGRfaGksIGN0eCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVtaXRfYWx1MzJfeChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuK3tcXG4rXFx0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXFx1MDAzZWRzdF9yZWddO1xcbitcXHRjb25zdCBzOCAqc3JjID0gYnBmMm02OGtbaW5zbi1cXHUwMDNlc3JjX3JlZ107XFxuK1xcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcXG4rXFx0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xcbitcXHRzOCBkX3JlZywgc19yZWc7XFxuK1xcbitcXHRkX3JlZyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpO1xcbitcXHRzX3JlZyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpO1xcbitcXG4rXFx0c3dpdGNoIChCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSkpIHtcXG4rXFx0Y2FzZSBCUEZfTU9WOlxcbitcXHRcXHRpZiAoaW5zbi1cXHUwMDNlb2ZmID09IDggfHwgaW5zbi1cXHUwMDNlb2ZmID09IDE2KSB7XFxuK1xcdFxcdFxcdGlmIChkX3JlZyAhPSBzX3JlZylcXG4rXFx0XFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4MjAwMCB8IChkX3JlZyBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfcmVnKTsgLyogbW92ZS5sIHNyYywgZHN0ICovXFxuK1xcdFxcdFxcdGlmIChpbnNuLVxcdTAwM2VvZmYgPT0gOClcXG4rXFx0XFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NDljMCB8IGRfcmVnKTtcXHQvKiBleHRiLmwgZF9yZWcgKi9cXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHg0OGMwIHwgZF9yZWcpO1xcdC8qIGV4dC5sIGRfcmVnICovXFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGlmIChkX3JlZyAhPSBzX3JlZylcXG4rXFx0XFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4MjAwMCB8IChkX3JlZyBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfcmVnKTsgLyogbW92ZS5sIHNyYywgZHN0ICovXFxuK1xcdFxcdH1cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX0FERDpcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4ZDA4MCB8IChkX3JlZyBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfcmVnKTtcXHQvKiBhZGQubCBzcmMsIGRzdCAqL1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfU1VCOlxcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHg5MDgwIHwgKGRfcmVnIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19yZWcpO1xcdC8qIHN1Yi5sIHNyYywgZHN0ICovXFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9BTkQ6XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweGMwODAgfCAoZF9yZWcgXFx1MDAzY1xcdTAwM2MgOSkgfCBzX3JlZyk7XFx0LyogYW5kLmwgc3JjLCBkc3QgKi9cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX09SOlxcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfcmVnIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19yZWcpO1xcdC8qIG9yLmwgc3JjLCBkc3QgKi9cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX1hPUjpcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4YjE4MCB8IChzX3JlZyBcXHUwMDNjXFx1MDAzYyA5KSB8IGRfcmVnKTtcXHQvKiBlb3IubCBzcmMsIGRzdCAqL1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfTFNIOlxcbitcXHRjYXNlIEJQRl9SU0g6XFxuK1xcdGNhc2UgQlBGX0FSU0g6IHtcXG4rXFx0XFx0czggY291bnRfcmVnID0gdG1wMlsxXTtcXG4rXFxuK1xcdFxcdGlmIChzX3JlZyAhPSBjb3VudF9yZWcpXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDIwMDAgfCAoY291bnRfcmVnIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19yZWcpOyAvKiBtb3ZlLmwgc3JjLCBjb3VudCAqL1xcbitcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MDI4MCB8IGNvdW50X3JlZyk7XFx0XFx0LyogYW5kaS5sICNpbW0sIGNvdW50ICovXFxuK1xcdFxcdGVtaXRfMzIoY3R4LCAweDFmKTtcXG4rXFxuK1xcdFxcdGlmIChCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0xTSClcXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4ZTFhOCB8IChjb3VudF9yZWcgXFx1MDAzY1xcdTAwM2MgOSkgfCBkX3JlZyk7IC8qIGxzbC5sIGNvdW50LCBkc3QgKi9cXG4rXFx0XFx0ZWxzZSBpZiAoQlBGX09QKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9SU0gpXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweGUwYTggfCAoY291bnRfcmVnIFxcdTAwM2NcXHUwMDNjIDkpIHwgZF9yZWcpOyAvKiBsc3IubCBjb3VudCwgZHN0ICovXFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4ZTBhMCB8IChjb3VudF9yZWcgXFx1MDAzY1xcdTAwM2MgOSkgfCBkX3JlZyk7IC8qIGFzci5sIGNvdW50LCBkc3QgKi9cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0fVxcbitcXG4rXFx0YnBmX3B1dF9yZWczMihkc3RbMV0sIGRfcmVnLCBjdHgpO1xcbitcXHRlbWl0XzE2KGN0eCwgMHg3MDAwIHwgKHRtcDFbMF0gXFx1MDAzY1xcdTAwM2MgOSkpO1xcdFxcdFxcdC8qIG1vdmVxICMwLCB0bXAxICovXFxuK1xcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlbWl0X2FsdTMyX2soY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbit7XFxuK1xcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVxcdTAwM2Vkc3RfcmVnXTtcXG4rXFx0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xcbitcXHRjb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07XFxuK1xcdHM4IGRfcmVnO1xcbitcXG4rXFx0ZF9yZWcgPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcXG4rXFxuK1xcdHN3aXRjaCAoQlBGX09QKGluc24tXFx1MDAzZWNvZGUpKSB7XFxuK1xcdGNhc2UgQlBGX01PVjpcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjAzYyB8IChkX3JlZyBcXHUwMDNjXFx1MDAzYyA5KSk7XFx0XFx0LyogbW92ZS5sICNpbW0sIGRzdCAqL1xcbitcXHRcXHRlbWl0XzMyKGN0eCwgaW5zbi1cXHUwMDNlaW1tKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX0FERDpcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MDY4MCB8IGRfcmVnKTtcXHRcXHRcXHQvKiBhZGRpLmwgI2ltbSwgZHN0ICovXFxuK1xcdFxcdGVtaXRfMzIoY3R4LCBpbnNuLVxcdTAwM2VpbW0pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfU1VCOlxcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgwNDgwIHwgZF9yZWcpO1xcdFxcdFxcdC8qIHN1YmkubCAjaW1tLCBkc3QgKi9cXG4rXFx0XFx0ZW1pdF8zMihjdHgsIGluc24tXFx1MDAzZWltbSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9BTkQ6XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDAyODAgfCBkX3JlZyk7XFx0XFx0XFx0LyogYW5kaS5sICNpbW0sIGRzdCAqL1xcbitcXHRcXHRlbWl0XzMyKGN0eCwgaW5zbi1cXHUwMDNlaW1tKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX09SOlxcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgwMDgwIHwgZF9yZWcpO1xcdFxcdFxcdC8qIG9yaS5sICNpbW0sIGRzdCAqL1xcbitcXHRcXHRlbWl0XzMyKGN0eCwgaW5zbi1cXHUwMDNlaW1tKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX1hPUjpcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MGE4MCB8IGRfcmVnKTtcXHRcXHRcXHQvKiBlb3JpLmwgI2ltbSwgZHN0ICovXFxuK1xcdFxcdGVtaXRfMzIoY3R4LCBpbnNuLVxcdTAwM2VpbW0pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfTFNIOlxcbitcXHRjYXNlIEJQRl9SU0g6XFxuK1xcdGNhc2UgQlBGX0FSU0g6XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAodG1wMlsxXSBcXHUwMDNjXFx1MDAzYyA5KSk7XFx0XFx0LyogbW92ZS5sICNpbW0sIGNvdW50ICovXFxuK1xcdFxcdGVtaXRfMzIoY3R4LCBpbnNuLVxcdTAwM2VpbW0gXFx1MDAyNiAweDFmKTtcXG4rXFxuK1xcdFxcdGlmIChCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0xTSClcXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4ZTFhOCB8ICh0bXAyWzFdIFxcdTAwM2NcXHUwMDNjIDkpIHwgZF9yZWcpO1xcdC8qIGxzbC5sIGNvdW50LCBkc3QgKi9cXG4rXFx0XFx0ZWxzZSBpZiAoQlBGX09QKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9SU0gpXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweGUwYTggfCAodG1wMlsxXSBcXHUwMDNjXFx1MDAzYyA5KSB8IGRfcmVnKTtcXHQvKiBsc3IubCBjb3VudCwgZHN0ICovXFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4ZTBhMCB8ICh0bXAyWzFdIFxcdTAwM2NcXHUwMDNjIDkpIHwgZF9yZWcpO1xcdC8qIGFzci5sIGNvdW50LCBkc3QgKi9cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX3JlZywgY3R4KTtcXG4rXFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8ICh0bXAxWzBdIFxcdTAwM2NcXHUwMDNjIDkpKTtcXHRcXHRcXHQvKiBtb3ZlcSAjMCwgdG1wMSAqL1xcbitcXHRicGZfcHV0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZW1pdF9hbHU2NF94KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG4re1xcbitcXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cXHUwMDNlZHN0X3JlZ107XFxuK1xcdGNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLVxcdTAwM2VzcmNfcmVnXTtcXG4rXFx0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xcbitcXHRjb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07XFxuK1xcdHM4IGRfbG8sIGRfaGksIHNfbG8sIHNfaGk7XFxuK1xcbitcXHRkX2xvID0gYnBmX2dldF9yZWczMihkc3RbMV0sIHRtcDFbMV0sIGN0eCk7XFxuK1xcdGRfaGkgPSBicGZfZ2V0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcXG4rXFx0c19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpO1xcbitcXHRzX2hpID0gYnBmX2dldF9yZWczMihzcmNbMF0sIHRtcDJbMF0sIGN0eCk7XFxuK1xcbitcXHRzd2l0Y2ggKEJQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKSkge1xcbitcXHRjYXNlIEJQRl9NT1Y6XFxuK1xcdFxcdGlmIChpbnNuLVxcdTAwM2VvZmYgPT0gOCB8fCBpbnNuLVxcdTAwM2VvZmYgPT0gMTYgfHwgaW5zbi1cXHUwMDNlb2ZmID09IDMyKSB7XFxuK1xcdFxcdFxcdGlmIChkX2xvICE9IHNfbG8pXFxuK1xcdFxcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDIwMDAgfCAoZF9sbyBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfbG8pOyAvKiBtb3ZlLmwgc3JjLCBkc3QgKi9cXG4rXFxuK1xcdFxcdFxcdGlmIChpbnNuLVxcdTAwM2VvZmYgPT0gOClcXG4rXFx0XFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NDljMCB8IGRfbG8pO1xcdFxcdC8qIGV4dGIubCBkX2xvICovXFxuK1xcdFxcdFxcdGVsc2UgaWYgKGluc24tXFx1MDAzZW9mZiA9PSAxNilcXG4rXFx0XFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NDhjMCB8IGRfbG8pO1xcdFxcdC8qIGV4dC5sIGRfbG8gKi9cXG4rXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDRhODAgfCBkX2xvKTtcXHRcXHRcXHQvKiB0c3QubCBkX2xvICovXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDViYzAgfCBkX2hpKTtcXHRcXHRcXHQvKiBzbWkgZF9oaSAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHg0OWMwIHwgZF9oaSk7XFx0XFx0XFx0LyogZXh0Yi5sIGRfaGkgKi9cXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0aWYgKGRfbG8gIT0gc19sbylcXG4rXFx0XFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4MjAwMCB8IChkX2xvIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19sbyk7IC8qIG1vdmUubCBzX2xvLCBkX2xvICovXFxuK1xcdFxcdFxcdGlmIChkX2hpICE9IHNfaGkpXFxuK1xcdFxcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDIwMDAgfCAoZF9oaSBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfaGkpOyAvKiBtb3ZlLmwgc19oaSwgZF9oaSAqL1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9BREQ6XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweGQwODAgfCAoZF9sbyBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfbG8pO1xcdFxcdC8qIGFkZC5sIHNfbG8sIGRfbG8gKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4ZDE4MCB8IChkX2hpIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19oaSk7XFx0XFx0LyogYWRkeC5sIHNfaGksIGRfaGkgKi9cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX1NVQjpcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4OTA4MCB8IChkX2xvIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19sbyk7XFx0XFx0Lyogc3ViLmwgc19sbywgZF9sbyAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHg5MTgwIHwgKGRfaGkgXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2hpKTtcXHRcXHQvKiBzdWJ4Lmwgc19oaSwgZF9oaSAqL1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfQU5EOlxcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHhjMDgwIHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2xvKTtcXHRcXHQvKiBhbmQubCBzX2xvLCBkX2xvICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweGMwODAgfCAoZF9oaSBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfaGkpO1xcdFxcdC8qIGFuZC5sIHNfaGksIGRfaGkgKi9cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX09SOlxcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2xvKTtcXHRcXHQvKiBvci5sIHNfbG8sIGRfbG8gKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4ODA4MCB8IChkX2hpIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19oaSk7XFx0XFx0Lyogb3IubCBzX2hpLCBkX2hpICovXFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9YT1I6XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweGIxODAgfCAoc19sbyBcXHUwMDNjXFx1MDAzYyA5KSB8IGRfbG8pO1xcdFxcdC8qIGVvci5sIHNfbG8sIGRfbG8gKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4YjE4MCB8IChzX2hpIFxcdTAwM2NcXHUwMDNjIDkpIHwgZF9oaSk7XFx0XFx0LyogZW9yLmwgc19oaSwgZF9oaSAqL1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0YnBmX3B1dF9yZWczMihkc3RbMV0sIGRfbG8sIGN0eCk7XFxuK1xcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlbWl0X2FsdTY0X2soY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbit7XFxuK1xcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVxcdTAwM2Vkc3RfcmVnXTtcXG4rXFx0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xcbitcXHRjb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07XFxuK1xcdHM4IGRfbG8sIGRfaGksIHNfbG8sIHNfaGk7XFxuK1xcdHUzMiBpbW1fbG8gPSBpbnNuLVxcdTAwM2VpbW07XFxuK1xcdHUzMiBpbW1faGkgPSBpbnNuLVxcdTAwM2VpbW0gXFx1MDAzYyAwID8gMHhmZmZmZmZmZiA6IDA7XFxuK1xcbitcXHRkX2xvID0gYnBmX2dldF9yZWczMihkc3RbMV0sIHRtcDFbMV0sIGN0eCk7XFxuK1xcdGRfaGkgPSBicGZfZ2V0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcXG4rXFxuK1xcdGlmIChCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX01PVikge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkpO1xcdFxcdFxcdC8qIG1vdmUubCAjaW1tLCBkX2xvICovXFxuK1xcdFxcdGVtaXRfMzIoY3R4LCBpbW1fbG8pO1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKGRfaGkgXFx1MDAzY1xcdTAwM2MgOSkpO1xcdFxcdFxcdC8qIG1vdmUubCAjaW1tLCBkX2hpICovXFxuK1xcdFxcdGVtaXRfMzIoY3R4LCBpbW1faGkpO1xcbitcXHRcXHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9sbywgY3R4KTtcXG4rXFx0XFx0YnBmX3B1dF9yZWczMihkc3RbMF0sIGRfaGksIGN0eCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0c19sbyA9IHRtcDJbMV07XFxuK1xcdHNfaGkgPSB0bXAyWzBdO1xcbitcXG4rXFx0ZW1pdF8xNihjdHgsIDB4MjAzYyB8IChzX2xvIFxcdTAwM2NcXHUwMDNjIDkpKTtcXHRcXHRcXHRcXHQvKiBtb3ZlLmwgI2ltbSwgc19sbyAqL1xcbitcXHRlbWl0XzMyKGN0eCwgaW1tX2xvKTtcXG4rXFx0ZW1pdF8xNihjdHgsIDB4MjAzYyB8IChzX2hpIFxcdTAwM2NcXHUwMDNjIDkpKTtcXHRcXHRcXHRcXHQvKiBtb3ZlLmwgI2ltbSwgc19oaSAqL1xcbitcXHRlbWl0XzMyKGN0eCwgaW1tX2hpKTtcXG4rXFxuK1xcdHN3aXRjaCAoQlBGX09QKGluc24tXFx1MDAzZWNvZGUpKSB7XFxuK1xcdGNhc2UgQlBGX0FERDpcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4ZDA4MCB8IChkX2xvIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19sbyk7XFx0XFx0LyogYWRkLmwgc19sbywgZF9sbyAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHhkMTgwIHwgKGRfaGkgXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2hpKTtcXHRcXHQvKiBhZGR4Lmwgc19oaSwgZF9oaSAqL1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfU1VCOlxcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHg5MDgwIHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2xvKTtcXHRcXHQvKiBzdWIubCBzX2xvLCBkX2xvICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDkxODAgfCAoZF9oaSBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfaGkpO1xcdFxcdC8qIHN1YngubCBzX2hpLCBkX2hpICovXFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9BTkQ6XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweGMwODAgfCAoZF9sbyBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfbG8pO1xcdFxcdC8qIGFuZC5sIHNfbG8sIGRfbG8gKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4YzA4MCB8IChkX2hpIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19oaSk7XFx0XFx0LyogYW5kLmwgc19oaSwgZF9oaSAqL1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfT1I6XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDgwODAgfCAoZF9sbyBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfbG8pO1xcdFxcdC8qIG9yLmwgc19sbywgZF9sbyAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfaGkgXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2hpKTtcXHRcXHQvKiBvci5sIHNfaGksIGRfaGkgKi9cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX1hPUjpcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4YjE4MCB8IChzX2xvIFxcdTAwM2NcXHUwMDNjIDkpIHwgZF9sbyk7XFx0XFx0LyogZW9yLmwgc19sbywgZF9sbyAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHhiMTgwIHwgKHNfaGkgXFx1MDAzY1xcdTAwM2MgOSkgfCBkX2hpKTtcXHRcXHQvKiBlb3IubCBzX2hpLCBkX2hpICovXFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9sbywgY3R4KTtcXG4rXFx0YnBmX3B1dF9yZWczMihkc3RbMF0sIGRfaGksIGN0eCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVtaXRfYWx1NjRfc2hpZnQoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIGlzX2ltbSlcXG4re1xcbitcXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cXHUwMDNlZHN0X3JlZ107XFxuK1xcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcXG4rXFx0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xcbitcXHRzOCBkX2xvLCBkX2hpLCBjb3VudF9yZWc7XFxuK1xcdGludCBsb29wX3N0YXJ0LCBkb25lX2lkeDtcXG4rXFxuK1xcdGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcXG4rXFx0ZF9oaSA9IGJwZl9nZXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpO1xcbitcXHRjb3VudF9yZWcgPSB0bXAyWzFdO1xcbitcXG4rXFx0aWYgKGlzX2ltbSkge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKGNvdW50X3JlZyBcXHUwMDNjXFx1MDAzYyA5KSk7XFx0XFx0LyogbW92ZS5sICNpbW0sIGNvdW50X3JlZyAqL1xcbitcXHRcXHRlbWl0XzMyKGN0eCwgaW5zbi1cXHUwMDNlaW1tKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0Y29uc3QgczggKnNyYyA9IGJwZjJtNjhrW2luc24tXFx1MDAzZXNyY19yZWddO1xcbitcXHRcXHRzOCBzX2xvID0gYnBmX2dldF9yZWczMihzcmNbMV0sIHRtcDJbMV0sIGN0eCk7XFxuK1xcbitcXHRcXHRpZiAoY291bnRfcmVnICE9IHNfbG8pXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDIwMDAgfCAoY291bnRfcmVnIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19sbyk7XFx0LyogbW92ZS5sIHNfbG8sIGNvdW50X3JlZyAqL1xcbitcXHR9XFxuK1xcbitcXHRlbWl0XzE2KGN0eCwgMHgwMjgwIHwgY291bnRfcmVnKTtcXHRcXHRcXHQvKiBhbmRpLmwgIzB4M2YsIGNvdW50X3JlZyAqL1xcbitcXHRlbWl0XzMyKGN0eCwgMHgzZik7XFxuK1xcbitcXHRlbWl0XzE2KGN0eCwgMHg0YTgwIHwgY291bnRfcmVnKTtcXHRcXHRcXHRcXHQvKiB0c3QubCBjb3VudF9yZWcgKi9cXG4rXFx0ZW1pdF8xNihjdHgsIDB4NjcwMCk7XFx0XFx0XFx0XFx0XFx0XFx0LyogYmVxLncgZG9uZV9pZHggKi9cXG4rXFx0ZG9uZV9pZHggPSBjdHgtXFx1MDAzZWlkeDtcXG4rXFx0ZW1pdF8xNihjdHgsIDApO1xcbitcXG4rXFx0bG9vcF9zdGFydCA9IGN0eC1cXHUwMDNlaWR4O1xcbitcXG4rXFx0aWYgKEJQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfTFNIKSB7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweGUzODggfCBkX2xvKTtcXHRcXHRcXHRcXHQvKiBsc2xsICMxLCBkX2xvICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweGUzOTAgfCBkX2hpKTtcXHRcXHRcXHRcXHQvKiByb3hsLmwgIzEsIGRfaGkgKi9cXG4rXFx0fSBlbHNlIGlmIChCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1JTSCkge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHhlMjg4IHwgZF9oaSk7XFx0XFx0XFx0XFx0LyogbHNybCAjMSwgZF9oaSAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHhlMjkwIHwgZF9sbyk7XFx0XFx0XFx0XFx0Lyogcm94ci5sICMxLCBkX2xvICovXFxuK1xcdH0gZWxzZSBpZiAoQlBGX09QKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9BUlNIKSB7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweGUyODAgfCBkX2hpKTtcXHRcXHRcXHRcXHQvKiBhc3JsICMxLCBkX2hpICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweGUyOTAgfCBkX2xvKTtcXHRcXHRcXHRcXHQvKiByb3hyLmwgIzEsIGRfbG8gKi9cXG4rXFx0fVxcbitcXG4rXFx0ZW1pdF8xNihjdHgsIDB4NTM4MCB8IGNvdW50X3JlZyk7XFx0XFx0XFx0XFx0Lyogc3VicS5sICMxLCBjb3VudF9yZWcgKi9cXG4rXFx0ZW1pdF8xNihjdHgsIDB4NjYwMCk7XFx0XFx0XFx0XFx0XFx0XFx0LyogYm5lLncgbG9vcF9zdGFydCAqL1xcbitcXHRlbWl0XzE2KGN0eCwgKGxvb3Bfc3RhcnQgLSAoaW50KWN0eC1cXHUwMDNlaWR4KSAqIDIpO1xcbitcXG4rXFx0aWYgKGN0eC1cXHUwMDNldGFyZ2V0KVxcbitcXHRcXHRjdHgtXFx1MDAzZXRhcmdldFtkb25lX2lkeF0gPSAoY3R4LVxcdTAwM2VpZHggLSBkb25lX2lkeCkgKiAyO1xcbitcXG4rXFx0YnBmX3B1dF9yZWczMihkc3RbMV0sIGRfbG8sIGN0eCk7XFxuK1xcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlbWl0X2JwZl9lbmQoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbit7XFxuK1xcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVxcdTAwM2Vkc3RfcmVnXTtcXG4rXFx0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xcbitcXHRzOCBkX2xvLCBkX2hpO1xcbitcXHRib29sIHRvX2xlID0gQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfVE9fTEU7XFxuK1xcdGludCBpbW0gPSBpbnNuLVxcdTAwM2VpbW07XFxuK1xcbitcXHRkX2xvID0gYnBmX2dldF9yZWczMihkc3RbMV0sIHRtcDFbMV0sIGN0eCk7XFxuK1xcdGRfaGkgPSBicGZfZ2V0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcXG4rXFxuK1xcdGlmICh0b19sZSkge1xcbitcXHRcXHRzd2l0Y2ggKGltbSkge1xcbitcXHRcXHRjYXNlIDE2OlxcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHgwMjgwIHwgZF9sbyk7XFx0XFx0XFx0LyogYW5kaS5sICMweGZmZmYsIGRfbG8gKi9cXG4rXFx0XFx0XFx0ZW1pdF8zMihjdHgsIDB4ZmZmZik7XFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweGUwNTggfCBkX2xvKTtcXHRcXHRcXHQvKiByb3IudyAjOCwgZF9sbyAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHg3MDAwIHwgKGRfaGkgXFx1MDAzY1xcdTAwM2MgOSkpO1xcdFxcdC8qIG1vdmVxICMwLCBkX2hpICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIDMyOlxcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9sbyk7XFx0XFx0XFx0Lyogcm9yLncgIzgsIGRfbG8gKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NDg0MCB8IGRfbG8pO1xcdFxcdFxcdC8qIHN3YXAgZF9sbyAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9sbyk7XFx0XFx0XFx0Lyogcm9yLncgIzgsIGRfbG8gKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2hpIFxcdTAwM2NcXHUwMDNjIDkpKTtcXHRcXHQvKiBtb3ZlcSAjMCwgZF9oaSAqL1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSA2NDpcXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4ZTA1OCB8IGRfbG8pO1xcdFxcdFxcdC8qIHJvci53ICM4LCBkX2xvICovXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDQ4NDAgfCBkX2xvKTtcXHRcXHRcXHQvKiBzd2FwIGRfbG8gKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4ZTA1OCB8IGRfbG8pO1xcdFxcdFxcdC8qIHJvci53ICM4LCBkX2xvICovXFxuK1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9oaSk7XFx0XFx0XFx0Lyogcm9yLncgIzgsIGRfaGkgKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NDg0MCB8IGRfaGkpO1xcdFxcdFxcdC8qIHN3YXAgZF9oaSAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9oaSk7XFx0XFx0XFx0Lyogcm9yLncgIzgsIGRfaGkgKi9cXG4rXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweGMxNDAgfCAoZF9oaSBcXHUwMDNjXFx1MDAzYyA5KSB8IGRfbG8pO1xcdC8qIGV4ZyBkX2xvLCBkX2hpICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHN3aXRjaCAoaW1tKSB7XFxuK1xcdFxcdGNhc2UgMTY6XFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDAyODAgfCBkX2xvKTtcXHRcXHRcXHQvKiBhbmRpLmwgIzB4ZmZmZiwgZF9sbyAqL1xcbitcXHRcXHRcXHRlbWl0XzMyKGN0eCwgMHhmZmZmKTtcXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2hpIFxcdTAwM2NcXHUwMDNjIDkpKTtcXHRcXHQvKiBtb3ZlcSAjMCwgZF9oaSAqL1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAzMjpcXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2hpIFxcdTAwM2NcXHUwMDNjIDkpKTtcXHRcXHQvKiBtb3ZlcSAjMCwgZF9oaSAqL1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSA2NDpcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0YnBmX3B1dF9yZWczMihkc3RbMV0sIGRfbG8sIGN0eCk7XFxuK1xcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlbWl0X21hdGhfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgaXNfNjQpXFxuK3tcXG4rXFx0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXFx1MDAzZWRzdF9yZWddO1xcbitcXHRjb25zdCBzOCAqc3JjID0gYnBmMm02OGtbaW5zbi1cXHUwMDNlc3JjX3JlZ107XFxuK1xcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcXG4rXFx0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xcbitcXHRzOCBkX2xvLCBkX2hpLCBzX2xvLCBzX2hpID0gMDtcXG4rXFx0dm9pZCAqZnVuYyA9IE5VTEw7XFxuK1xcdHU4IG9wID0gQlBGX09QKGluc24tXFx1MDAzZWNvZGUpO1xcbitcXG4rXFx0ZF9sbyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpO1xcbitcXHRkX2hpID0gYnBmX2dldF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7XFxuK1xcbitcXHRpZiAoQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xcbitcXHRcXHRzX2xvID0gYnBmX2dldF9yZWczMihzcmNbMV0sIHRtcDJbMV0sIGN0eCk7XFxuK1xcdFxcdGlmIChpc182NClcXG4rXFx0XFx0XFx0c19oaSA9IGJwZl9nZXRfcmVnMzIoc3JjWzBdLCB0bXAyWzBdLCBjdHgpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRzX2xvID0gdG1wMlsxXTtcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjAzYyB8IChzX2xvIFxcdTAwM2NcXHUwMDNjIDkpKTtcXHRcXHRcXHQvKiBtb3ZlLmwgI2ltbSwgc19sbyAqL1xcbitcXHRcXHRlbWl0XzMyKGN0eCwgaW5zbi1cXHUwMDNlaW1tKTtcXG4rXFx0XFx0aWYgKGlzXzY0KSB7XFxuK1xcdFxcdFxcdHNfaGkgPSB0bXAyWzBdO1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHNfaGkgXFx1MDAzY1xcdTAwM2MgOSkpO1xcdFxcdC8qIG1vdmUubCAjaW1tLCBzX2hpICovXFxuK1xcdFxcdFxcdGVtaXRfMzIoY3R4LCBpbnNuLVxcdTAwM2VpbW0gXFx1MDAzYyAwID8gMHhmZmZmZmZmZiA6IDApO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChpc182NCkge1xcbitcXHRcXHRzd2l0Y2ggKG9wKSB7XFxuK1xcdFxcdGNhc2UgQlBGX01VTDpcXG4rXFx0XFx0XFx0ZnVuYyA9ICh2b2lkICopaml0X211bDY0O1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBCUEZfRElWOlxcbitcXHRcXHRcXHRmdW5jID0gKHZvaWQgKilqaXRfZGl2NjQ7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEJQRl9NT0Q6XFxuK1xcdFxcdFxcdGZ1bmMgPSAodm9pZCAqKWppdF9tb2Q2NDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQgXFx1MDAyNlxcdTAwMjYgb3AgPT0gQlBGX0RJViBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VvZmYgPT0gMSlcXG4rXFx0XFx0XFx0ZnVuYyA9ICh2b2lkICopaml0X3NkaXY2NDtcXG4rXFx0XFx0aWYgKEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQgXFx1MDAyNlxcdTAwMjYgb3AgPT0gQlBGX01PRCBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VvZmYgPT0gMSlcXG4rXFx0XFx0XFx0ZnVuYyA9ICh2b2lkICopaml0X3Ntb2Q2NDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c3dpdGNoIChvcCkge1xcbitcXHRcXHRjYXNlIEJQRl9NVUw6XFxuK1xcdFxcdFxcdGZ1bmMgPSAodm9pZCAqKWppdF9tdWwzMjtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgQlBGX0RJVjpcXG4rXFx0XFx0XFx0ZnVuYyA9ICh2b2lkICopaml0X2RpdjMyO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBCUEZfTU9EOlxcbitcXHRcXHRcXHRmdW5jID0gKHZvaWQgKilqaXRfbW9kMzI7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FMVSBcXHUwMDI2XFx1MDAyNiBvcCA9PSBCUEZfRElWIFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZW9mZiA9PSAxKVxcbitcXHRcXHRcXHRmdW5jID0gKHZvaWQgKilqaXRfc2RpdjMyO1xcbitcXHRcXHRpZiAoQlBGX0NMQVNTKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9BTFUgXFx1MDAyNlxcdTAwMjYgb3AgPT0gQlBGX01PRCBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VvZmYgPT0gMSlcXG4rXFx0XFx0XFx0ZnVuYyA9ICh2b2lkICopaml0X3Ntb2QzMjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGlzXzY0KSB7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDQ4ZTcpO1xcdFxcdFxcdFxcdFxcdC8qIG1vdmVtLmwgZDAtZDEsIC0oJXNwKSAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHhjMDAwKTtcXG4rXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBzX2xvKTtcXHRcXHRcXHRcXHQvKiBtb3ZlLmwgc19sbywgLSglc3ApICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBzX2hpKTtcXHRcXHRcXHRcXHQvKiBtb3ZlLmwgc19oaSwgLSglc3ApICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBkX2xvKTtcXHRcXHRcXHRcXHQvKiBtb3ZlLmwgZF9sbywgLSglc3ApICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBkX2hpKTtcXHRcXHRcXHRcXHQvKiBtb3ZlLmwgZF9oaSwgLSglc3ApICovXFxuK1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDdjKTtcXHRcXHRcXHRcXHRcXHQvKiBtb3ZlYS5sICNmdW5jLCAlYTAgKi9cXG4rXFx0XFx0ZW1pdF8zMihjdHgsICh1MzIpZnVuYyk7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDRlOTApO1xcdFxcdFxcdFxcdFxcdC8qIGpzciAoJWEwKSAqL1xcbitcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4NGZlZik7XFx0XFx0XFx0XFx0XFx0LyogbGVhIDE2KCVzcCksICVzcCAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMTYpO1xcbitcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjYwMSk7XFx0XFx0XFx0XFx0XFx0LyogbW92ZS5sICVkMSwgJWQzICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDI0MDApO1xcdFxcdFxcdFxcdFxcdC8qIG1vdmUubCAlZDAsICVkMiAqL1xcbitcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4NGNkZik7XFx0XFx0XFx0XFx0XFx0LyogbW92ZW0ubCAoJXNwKSssIGQwLWQxICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDAwMDMpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHg0OGU3KTtcXHRcXHRcXHRcXHRcXHQvKiBtb3ZlbS5sIGQwLWQxLCAtKCVzcCkgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4YzAwMCk7XFxuK1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyZjAwIHwgc19sbyk7XFx0XFx0XFx0XFx0LyogbW92ZS5sIHNfbG8sIC0oJXNwKSAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyZjAwIHwgZF9sbyk7XFx0XFx0XFx0XFx0LyogbW92ZS5sIGRfbG8sIC0oJXNwKSAqL1xcbitcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjA3Yyk7XFx0XFx0XFx0XFx0XFx0LyogbW92ZWEubCAjZnVuYywgJWEwICovXFxuK1xcdFxcdGVtaXRfMzIoY3R4LCAodTMyKWZ1bmMpO1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHg0ZTkwKTtcXHRcXHRcXHRcXHRcXHQvKiBqc3IgKCVhMCkgKi9cXG4rXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDRmZWYpO1xcdFxcdFxcdFxcdFxcdC8qIGxlYSA4KCVzcCksICVzcCAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgOCk7XFxuK1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyNjAwKTtcXHRcXHRcXHRcXHRcXHQvKiBtb3ZlLmwgJWQwLCAlZDMgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4NzQwMCk7XFx0XFx0XFx0XFx0XFx0LyogbW92ZXEgIzAsICVkMiAqL1xcbitcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4NGNkZik7XFx0XFx0XFx0XFx0XFx0LyogbW92ZW0ubCAoJXNwKSssIGQwLWQxICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDAwMDMpO1xcbitcXHR9XFxuK1xcbitcXHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgTTY4S19EMywgY3R4KTtcXG4rXFx0YnBmX3B1dF9yZWczMihkc3RbMF0sIE02OEtfRDIsIGN0eCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVtaXRfbGR4KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG4re1xcbitcXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cXHUwMDNlZHN0X3JlZ107XFxuK1xcdGNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLVxcdTAwM2VzcmNfcmVnXTtcXG4rXFx0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xcbitcXHRzOCBkX2xvLCBkX2hpO1xcbitcXHRib29sIGlzX21lbV9zeCA9IEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU1TWDtcXG4rXFxuK1xcdGlmIChpc19zdGFja2VkKHNyY1sxXSkpIHtcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjA2ZSk7XFx0XFx0XFx0XFx0LyogbW92ZWEubCBkMTYoJWZwKSwgJWEwICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAodTE2KXNyY1sxXSk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDIwNDAgfCBzcmNbMV0pO1xcdFxcdFxcdC8qIG1vdmVhLmwgc3JjLCAlYTAgKi9cXG4rXFx0fVxcbitcXG4rXFx0ZF9sbyA9IGlzX3N0YWNrZWQoZHN0WzFdKSA/IHRtcDFbMV0gOiBkc3RbMV07XFxuK1xcdGRfaGkgPSBpc19zdGFja2VkKGRzdFswXSkgPyB0bXAxWzBdIDogZHN0WzBdO1xcbitcXG4rXFx0c3dpdGNoIChCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSkge1xcbitcXHRjYXNlIEJQRl9COlxcbitcXHRcXHRpZiAoIWlzX21lbV9zeClcXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2xvIFxcdTAwM2NcXHUwMDNjIDkpKTtcXHQvKiBtb3ZlcSAjMCwgZF9sbyAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgxMDI4IHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkpO1xcdFxcdC8qIG1vdmUuYiBkMTYoJWEwKSwgZF9sbyAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgaW5zbi1cXHUwMDNlb2ZmKTtcXG4rXFx0XFx0aWYgKGlzX21lbV9zeClcXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NDljMCB8IGRfbG8pO1xcdC8qIGV4dGIubCBkX2xvICovXFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9IOlxcbitcXHRcXHRpZiAoIWlzX21lbV9zeClcXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2xvIFxcdTAwM2NcXHUwMDNjIDkpKTtcXHQvKiBtb3ZlcSAjMCwgZF9sbyAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgzMDI4IHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkpO1xcdFxcdC8qIG1vdmUudyBkMTYoJWEwKSwgZF9sbyAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgaW5zbi1cXHUwMDNlb2ZmKTtcXG4rXFx0XFx0aWYgKGlzX21lbV9zeClcXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NDhjMCB8IGRfbG8pO1xcdC8qIGV4dC5sIGRfbG8gKi9cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX1c6XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDIwMjggfCAoZF9sbyBcXHUwMDNjXFx1MDAzYyA5KSk7XFx0XFx0LyogbW92ZS5sIGQxNiglYTApLCBkX2xvICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCBpbnNuLVxcdTAwM2VvZmYpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfRFc6XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDIwMjggfCAoZF9oaSBcXHUwMDNjXFx1MDAzYyA5KSk7XFx0XFx0LyogbW92ZS5sIGQxNiglYTApLCBkX2hpICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCBpbnNuLVxcdTAwM2VvZmYpO1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHg0MWU4KTtcXHRcXHRcXHRcXHQvKiBsZWEgNCglYTApLCAlYTAgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDQpO1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDI4IHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkpO1xcdFxcdC8qIG1vdmUubCBkMTYoJWEwKSwgZF9sbyAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgaW5zbi1cXHUwMDNlb2ZmKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSAhPSBCUEZfRFcpIHtcXG4rXFx0XFx0aWYgKGlzX21lbV9zeCkge1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHg0YTgwIHwgZF9sbyk7XFx0XFx0XFx0LyogdHN0LmwgZF9sbyAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHg1YmMwIHwgZF9oaSk7XFx0XFx0XFx0Lyogc21pIGRfaGkgKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NDljMCB8IGRfaGkpO1xcdFxcdFxcdC8qIGV4dGIubCBkX2hpICovXFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDcwMDAgfCAoZF9oaSBcXHUwMDNjXFx1MDAzYyA5KSk7XFx0LyogbW92ZXEgIzAsIGRfaGkgKi9cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9sbywgY3R4KTtcXG4rXFx0YnBmX3B1dF9yZWczMihkc3RbMF0sIGRfaGksIGN0eCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVtaXRfc3R4KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG4re1xcbitcXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cXHUwMDNlZHN0X3JlZ107XFxuK1xcdGNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLVxcdTAwM2VzcmNfcmVnXTtcXG4rXFx0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xcbitcXHRzOCBzX2xvLCBzX2hpO1xcbitcXG4rXFx0aWYgKGlzX3N0YWNrZWQoZHN0WzFdKSkge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDZlKTtcXHRcXHRcXHRcXHQvKiBtb3ZlYS5sIGQxNiglZnApLCAlYTAgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsICh1MTYpZHN0WzFdKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjA0MCB8IGRzdFsxXSk7XFx0XFx0XFx0LyogbW92ZWEubCBkc3QsICVhMCAqL1xcbitcXHR9XFxuK1xcbitcXHRzX2xvID0gYnBmX2dldF9yZWczMihzcmNbMV0sIHRtcDJbMV0sIGN0eCk7XFxuK1xcbitcXHRzd2l0Y2ggKEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpKSB7XFxuK1xcdGNhc2UgQlBGX0I6XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDExNDAgfCBzX2xvKTtcXHRcXHRcXHQvKiBtb3ZlLmIgc19sbywgZDE2KCVhMCkgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIGluc24tXFx1MDAzZW9mZik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9IOlxcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgzMTQwIHwgc19sbyk7XFx0XFx0XFx0LyogbW92ZS53IHNfbG8sIGQxNiglYTApICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCBpbnNuLVxcdTAwM2VvZmYpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfVzpcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjE0MCB8IHNfbG8pO1xcdFxcdFxcdC8qIG1vdmUubCBzX2xvLCBkMTYoJWEwKSAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgaW5zbi1cXHUwMDNlb2ZmKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX0RXOlxcbitcXHRcXHRzX2hpID0gYnBmX2dldF9yZWczMihzcmNbMF0sIHRtcDJbMF0sIGN0eCk7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDIxNDAgfCBzX2hpKTtcXHRcXHRcXHQvKiBtb3ZlLmwgc19oaSwgZDE2KCVhMCkgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIGluc24tXFx1MDAzZW9mZik7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDQxZTgpO1xcdFxcdFxcdFxcdC8qIGxlYSA0KCVhMCksICVhMCAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgNCk7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDIxNDAgfCBzX2xvKTtcXHRcXHRcXHQvKiBtb3ZlLmwgc19sbywgZDE2KCVhMCkgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIGluc24tXFx1MDAzZW9mZik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVtaXRfc3QoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbit7XFxuK1xcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVxcdTAwM2Vkc3RfcmVnXTtcXG4rXFx0Y29uc3QgczggKnRtcCA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XFxuK1xcbitcXHRpZiAoaXNfc3RhY2tlZChkc3RbMV0pKSB7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDIwNmUpO1xcdFxcdFxcdFxcdC8qIG1vdmVhLmwgZDE2KCVmcCksICVhMCAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgKHUxNilkc3RbMV0pO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDQwIHwgZHN0WzFdKTtcXHRcXHRcXHQvKiBtb3ZlYS5sIGRzdCwgJWEwICovXFxuK1xcdH1cXG4rXFxuK1xcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAodG1wWzFdIFxcdTAwM2NcXHUwMDNjIDkpKTtcXHRcXHRcXHQvKiBtb3ZlLmwgI2ltbSwgdG1wICovXFxuK1xcdGVtaXRfMzIoY3R4LCBpbnNuLVxcdTAwM2VpbW0pO1xcbitcXG4rXFx0c3dpdGNoIChCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSkge1xcbitcXHRjYXNlIEJQRl9COlxcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgxMTQwIHwgdG1wWzFdKTtcXHRcXHRcXHQvKiBtb3ZlLmIgdG1wLCBkMTYoJWEwKSAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgaW5zbi1cXHUwMDNlb2ZmKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX0g6XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDMxNDAgfCB0bXBbMV0pO1xcdFxcdFxcdC8qIG1vdmUudyB0bXAsIGQxNiglYTApICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCBpbnNuLVxcdTAwM2VvZmYpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfVzpcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjE0MCB8IHRtcFsxXSk7XFx0XFx0XFx0LyogbW92ZS5sIHRtcCwgZDE2KCVhMCkgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIGluc24tXFx1MDAzZW9mZik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9EVzpcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjAzYyB8ICh0bXBbMF0gXFx1MDAzY1xcdTAwM2MgOSkpO1xcdFxcdC8qIG1vdmUubCAjaW1tLCB0bXAgKi9cXG4rXFx0XFx0ZW1pdF8zMihjdHgsIGluc24tXFx1MDAzZWltbSBcXHUwMDNjIDAgPyAweGZmZmZmZmZmIDogMCk7XFxuK1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMTQwIHwgdG1wWzBdKTtcXHRcXHRcXHQvKiBtb3ZlLmwgdG1wLCBkMTYoJWEwKSAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgaW5zbi1cXHUwMDNlb2ZmKTtcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4NDFlOCk7XFx0XFx0XFx0XFx0LyogbGVhIDQoJWEwKSwgJWEwICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCA0KTtcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjE0MCB8IHRtcFsxXSk7XFx0XFx0XFx0LyogbW92ZS5sIHRtcCwgZDE2KCVhMCkgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIGluc24tXFx1MDAzZW9mZik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVtaXRfYXRvbWljKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG4re1xcbitcXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cXHUwMDNlZHN0X3JlZ107XFxuK1xcdGNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLVxcdTAwM2VzcmNfcmVnXTtcXG4rXFx0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xcbitcXG4rXFx0aWYgKGlzX3N0YWNrZWQoZHN0WzFdKSkge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDZlKTtcXHRcXHRcXHRcXHQvKiBtb3ZlYS5sIGQxNiglZnApLCAlYTAgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsICh1MTYpZHN0WzFdKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjA0MCB8IGRzdFsxXSk7XFx0XFx0XFx0LyogbW92ZWEubCBkc3QsICVhMCAqL1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaW5zbi1cXHUwMDNlb2ZmKSB7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDQxZTgpO1xcdFxcdFxcdFxcdC8qIGxlYSBkMTYoJWEwKSwgJWEwICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCBpbnNuLVxcdTAwM2VvZmYpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1cpIHtcXG4rXFx0XFx0czggc19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpO1xcbitcXG4rXFx0XFx0aWYgKGluc24tXFx1MDAzZWltbSAhPSBCUEZfQ01QWENIRykge1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHg0OGU3KTtcXHRcXHRcXHQvKiBtb3ZlbS5sIGQwLWQxLCAtKCVzcCkgKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4YzAwMCk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBNNjhLX0QwKTtcXHRcXHRcXHQvKiBtb3ZlLmwgJWQwLCAtKCVzcCkgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MmYzYyk7XFx0XFx0XFx0XFx0LyogbW92ZS5sICNpbW0sIC0oJXNwKSAqL1xcbitcXHRcXHRlbWl0XzMyKGN0eCwgaW5zbi1cXHUwMDNlaW1tKTtcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IHNfbG8pO1xcdFxcdFxcdC8qIG1vdmUubCBzX2xvLCAtKCVzcCkgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MmYwOCk7XFx0XFx0XFx0XFx0LyogbW92ZS5sICVhMCwgLSglc3ApICovXFxuK1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDdjKTtcXHRcXHRcXHRcXHQvKiBtb3ZlYS5sICNmdW5jLCAlYTAgKi9cXG4rXFx0XFx0ZW1pdF8zMihjdHgsICh1MzIpaml0X2F0b21pYzMyKTtcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4NGU5MCk7XFx0XFx0XFx0XFx0LyoganNyICglYTApICovXFxuK1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHg0ZmVmKTtcXHRcXHRcXHRcXHQvKiBsZWEgMTYoJXNwKSwgJXNwICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAxNik7XFxuK1xcbitcXHRcXHRpZiAoaW5zbi1cXHUwMDNlaW1tID09IEJQRl9DTVBYQ0hHKSB7XFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDcyMDApO1xcdFxcdFxcdC8qIG1vdmVxICMwLCAlZDEgKi9cXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0Ym9vbCBpc19mZXRjaCA9IChpbnNuLVxcdTAwM2VpbW0gXFx1MDAyNiBCUEZfRkVUQ0gpIHx8IGluc24tXFx1MDAzZWltbSA9PSBCUEZfWENIRztcXG4rXFxuK1xcdFxcdFxcdGlmIChpc19mZXRjaClcXG4rXFx0XFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4MjYwMCk7XFx0XFx0LyogbW92ZS5sICVkMCwgJWQzICovXFxuK1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHg0Y2RmKTtcXHRcXHRcXHQvKiBtb3ZlbS5sICglc3ApKywgZDAtZDEgKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4MDAwMyk7XFxuK1xcbitcXHRcXHRcXHRpZiAoaXNfZmV0Y2gpIHtcXG4rXFx0XFx0XFx0XFx0YnBmX3B1dF9yZWczMihzcmNbMV0sIE02OEtfRDMsIGN0eCk7XFxuK1xcdFxcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDc0MDApO1xcdFxcdC8qIG1vdmVxICMwLCAlZDIgKi9cXG4rXFx0XFx0XFx0XFx0YnBmX3B1dF9yZWczMihzcmNbMF0sIE02OEtfRDIsIGN0eCk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXG4rXFx0fSBlbHNlIGlmIChCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfRFcpIHtcXG4rXFx0XFx0czggc19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpO1xcbitcXHRcXHRzOCBzX2hpID0gYnBmX2dldF9yZWczMihzcmNbMF0sIHRtcDJbMF0sIGN0eCk7XFxuK1xcbitcXHRcXHRpZiAoaW5zbi1cXHUwMDNlaW1tICE9IEJQRl9DTVBYQ0hHKSB7XFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDQ4ZTcpO1xcdFxcdFxcdC8qIG1vdmVtLmwgZDAtZDEsIC0oJXNwKSAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhjMDAwKTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IE02OEtfRDApO1xcdFxcdFxcdC8qIG1vdmUubCAlZDAsIC0oJXNwKSAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyZjAwIHwgTTY4S19EMSk7XFx0XFx0XFx0LyogbW92ZS5sICVkMSwgLSglc3ApICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDJmM2MpO1xcdFxcdFxcdFxcdC8qIG1vdmUubCAjaW1tLCAtKCVzcCkgKi9cXG4rXFx0XFx0ZW1pdF8zMihjdHgsIGluc24tXFx1MDAzZWltbSk7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBzX2xvKTtcXHRcXHRcXHQvKiBtb3ZlLmwgc19sbywgLSglc3ApICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBzX2hpKTtcXHRcXHRcXHQvKiBtb3ZlLmwgc19oaSwgLSglc3ApICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDJmMDgpO1xcdFxcdFxcdFxcdC8qIG1vdmUubCAlYTAsIC0oJXNwKSAqL1xcbitcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjA3Yyk7XFx0XFx0XFx0XFx0LyogbW92ZWEubCAjZnVuYywgJWEwICovXFxuK1xcdFxcdGVtaXRfMzIoY3R4LCAodTMyKWppdF9hdG9taWM2NCk7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDRlOTApO1xcdFxcdFxcdFxcdC8qIGpzciAoJWEwKSAqL1xcbitcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4NGZlZik7XFx0XFx0XFx0XFx0LyogbGVhIDI0KCVzcCksICVzcCAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMjQpO1xcbitcXG4rXFx0XFx0aWYgKGluc24tXFx1MDAzZWltbSA9PSBCUEZfQ01QWENIRykge1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhjMTQxKTtcXHRcXHRcXHQvKiBleGcgJWQwLCAlZDEgKi9cXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0Ym9vbCBpc19mZXRjaCA9IChpbnNuLVxcdTAwM2VpbW0gXFx1MDAyNiBCUEZfRkVUQ0gpIHx8IGluc24tXFx1MDAzZWltbSA9PSBCUEZfWENIRztcXG4rXFxuK1xcdFxcdFxcdGlmIChpc19mZXRjaCkge1xcbitcXHRcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHgyNjAwKTtcXHRcXHQvKiBtb3ZlLmwgJWQwLCAlZDMgKi9cXG4rXFx0XFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4MjQwMSk7XFx0XFx0LyogbW92ZS5sICVkMSwgJWQyICovXFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDRjZGYpO1xcdFxcdFxcdC8qIG1vdmVtLmwgKCVzcCkrLCBkMC1kMSAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHgwMDAzKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChpc19mZXRjaCkge1xcbitcXHRcXHRcXHRcXHRicGZfcHV0X3JlZzMyKHNyY1sxXSwgTTY4S19EMiwgY3R4KTtcXG4rXFx0XFx0XFx0XFx0YnBmX3B1dF9yZWczMihzcmNbMF0sIE02OEtfRDMsIGN0eCk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVtaXRfdGFpbF9jYWxsKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG4re1xcbitcXHRjb25zdCBzOCAqcjIgPSBicGYybTY4a1tCUEZfUkVHXzJdO1xcbitcXHRjb25zdCBzOCAqcjMgPSBicGYybTY4a1tCUEZfUkVHXzNdO1xcbitcXHRpbnQgam1wX291dF8xLCBqbXBfb3V0XzIsIGptcF9vdXRfMztcXG4rXFxuK1xcdGlmIChpc19zdGFja2VkKHIyWzFdKSkge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDZlKTtcXHRcXHRcXHRcXHQvKiBtb3ZlYS5sIGQxNiglZnApLCAlYTAgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsICh1MTYpcjJbMV0pO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDQwIHwgcjJbMV0pO1xcdFxcdFxcdC8qIG1vdmVhLmwgcjIsICVhMCAqL1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaXNfc3RhY2tlZChyM1sxXSkpIHtcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4MjQyZSk7XFx0XFx0XFx0XFx0LyogbW92ZS5sIGQxNiglZnApLCAlZDIgKi9cXG4rXFx0XFx0ZW1pdF8xNihjdHgsICh1MTYpcjNbMV0pO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyNDAwIHwgcjNbMV0pO1xcdFxcdFxcdC8qIG1vdmUubCByMywgJWQyICovXFxuK1xcdH1cXG4rXFxuK1xcdGVtaXRfMTYoY3R4LCAweGI0YTgpO1xcdFxcdFxcdFxcdFxcdC8qIGNtcC5sIGQxNiglYTApLCAlZDIgKi9cXG4rXFx0ZW1pdF8xNihjdHgsIG9mZnNldG9mKHN0cnVjdCBicGZfYXJyYXksIG1hcC5tYXhfZW50cmllcykpO1xcbitcXHRlbWl0XzE2KGN0eCwgMHg2NDAwKTtcXHRcXHRcXHRcXHRcXHQvKiBiY2MudyBqbXBfb3V0XzEgKi9cXG4rXFx0am1wX291dF8xID0gY3R4LVxcdTAwM2VpZHg7XFxuK1xcdGVtaXRfMTYoY3R4LCAwKTtcXG4rXFxuK1xcdGVtaXRfMTYoY3R4LCAweDI2MmUpO1xcdFxcdFxcdFxcdFxcdC8qIG1vdmUubCBkMTYoJWZwKSwgJWQzICovXFxuK1xcdGVtaXRfMTYoY3R4LCAodTE2KVNUQUNLX09GRlNFVChCUEZfVENfTE8pKTtcXG4rXFx0ZW1pdF8xNihjdHgsIDB4NGE4Myk7XFx0XFx0XFx0XFx0XFx0LyogdHN0LmwgJWQzICovXFxuK1xcdGVtaXRfMTYoY3R4LCAweDY3MDApO1xcdFxcdFxcdFxcdFxcdC8qIGJlcS53IGptcF9vdXRfMiAqL1xcbitcXHRqbXBfb3V0XzIgPSBjdHgtXFx1MDAzZWlkeDtcXG4rXFx0ZW1pdF8xNihjdHgsIDApO1xcbitcXG4rXFx0ZW1pdF8xNihjdHgsIDB4NTM4Myk7XFx0XFx0XFx0XFx0XFx0Lyogc3VicS5sICMxLCAlZDMgKi9cXG4rXFx0ZW1pdF8xNihjdHgsIDB4MmQ0Myk7XFx0XFx0XFx0XFx0XFx0LyogbW92ZS5sICVkMywgZDE2KCVmcCkgKi9cXG4rXFx0ZW1pdF8xNihjdHgsICh1MTYpU1RBQ0tfT0ZGU0VUKEJQRl9UQ19MTykpO1xcbitcXG4rXFx0ZW1pdF8xNihjdHgsIDB4ZDQ4Mik7XFx0XFx0XFx0XFx0XFx0LyogYWRkLmwgJWQyLCAlZDIgKi9cXG4rXFx0ZW1pdF8xNihjdHgsIDB4ZDQ4Mik7XFx0XFx0XFx0XFx0XFx0LyogYWRkLmwgJWQyLCAlZDIgKi9cXG4rXFx0ZW1pdF8xNihjdHgsIDB4NDNlOCk7XFx0XFx0XFx0XFx0XFx0LyogbGVhIGQxNiglYTApLCAlYTEgKi9cXG4rXFx0ZW1pdF8xNihjdHgsIG9mZnNldG9mKHN0cnVjdCBicGZfYXJyYXksIHB0cnMpKTtcXG4rXFx0ZW1pdF8xNihjdHgsIDB4ZDNjMik7XFx0XFx0XFx0XFx0XFx0LyogYWRkYS5sICVkMiwgJWExICovXFxuK1xcbitcXHRlbWl0XzE2KGN0eCwgMHgyMDUxKTtcXHRcXHRcXHRcXHRcXHQvKiBtb3ZlYS5sICglYTEpLCAlYTAgKi9cXG4rXFxuK1xcdGVtaXRfMTYoY3R4LCAweDI0MDgpO1xcdFxcdFxcdFxcdFxcdC8qIG1vdmUubCAlYTAsICVkMiAqL1xcbitcXHRlbWl0XzE2KGN0eCwgMHg0YTgyKTtcXHRcXHRcXHRcXHRcXHQvKiB0c3QubCAlZDIgKi9cXG4rXFx0ZW1pdF8xNihjdHgsIDB4NjcwMCk7XFx0XFx0XFx0XFx0XFx0LyogYmVxLncgam1wX291dF8zICovXFxuK1xcdGptcF9vdXRfMyA9IGN0eC1cXHUwMDNlaWR4O1xcbitcXHRlbWl0XzE2KGN0eCwgMCk7XFxuK1xcbitcXHRlbWl0XzE2KGN0eCwgMHgyMDY4KTtcXHRcXHRcXHRcXHRcXHQvKiBtb3ZlYS5sIGQxNiglYTApLCAlYTAgKi9cXG4rXFx0ZW1pdF8xNihjdHgsIG9mZnNldG9mKHN0cnVjdCBicGZfcHJvZywgYnBmX2Z1bmMpKTtcXG4rXFxuK1xcdGVtaXRfMTYoY3R4LCAweDRlZTgpO1xcdFxcdFxcdFxcdFxcdC8qIGptcCBkMTYoJWEwKSAqL1xcbitcXHRlbWl0XzE2KGN0eCwgNDQpO1xcbitcXG4rXFx0aWYgKGN0eC1cXHUwMDNldGFyZ2V0KSB7XFxuK1xcdFxcdGN0eC1cXHUwMDNldGFyZ2V0W2ptcF9vdXRfMV0gPSAoY3R4LVxcdTAwM2VpZHggLSBqbXBfb3V0XzEpICogMjtcXG4rXFx0XFx0Y3R4LVxcdTAwM2V0YXJnZXRbam1wX291dF8yXSA9IChjdHgtXFx1MDAzZWlkeCAtIGptcF9vdXRfMikgKiAyO1xcbitcXHRcXHRjdHgtXFx1MDAzZXRhcmdldFtqbXBfb3V0XzNdID0gKGN0eC1cXHUwMDNlaWR4IC0gam1wX291dF8zKSAqIDI7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCBlbWl0X2ptcChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBjdXJyX2kpXFxuK3tcXG4rXFx0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXFx1MDAzZWRzdF9yZWddO1xcbitcXHRjb25zdCBzOCAqc3JjID0gYnBmMm02OGtbaW5zbi1cXHUwMDNlc3JjX3JlZ107XFxuK1xcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcXG4rXFx0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xcbitcXHRzOCBkX2xvLCBkX2hpID0gMCwgc19sbywgc19oaSA9IDA7XFxuK1xcdGJvb2wgaXNfam1wMzIgPSBCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0pNUDMyO1xcbitcXHR1OCBvcCA9IEJQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKTtcXG4rXFx0aW50IHRhcmdldF9pbnNuO1xcbitcXG4rXFx0aWYgKGlzX2ptcDMyIFxcdTAwMjZcXHUwMDI2IG9wID09IEJQRl9KQSlcXG4rXFx0XFx0dGFyZ2V0X2luc24gPSBjdXJyX2kgKyAxICsgaW5zbi1cXHUwMDNlaW1tO1xcbitcXHRlbHNlXFxuK1xcdFxcdHRhcmdldF9pbnNuID0gY3Vycl9pICsgMSArIGluc24tXFx1MDAzZW9mZjtcXG4rXFxuK1xcdGlmICh0YXJnZXRfaW5zbiBcXHUwMDNjIDAgfHwgdGFyZ2V0X2luc24gXFx1MDAzZSBjdHgtXFx1MDAzZXByb2ctXFx1MDAzZWxlbilcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0I2RlZmluZSBFTUlUX0pNUDMyKG9wX2Jhc2UpIFxcXFxcXG4rXFx0XFx0ZG8geyBcXFxcXFxuK1xcdFxcdFxcdGludCBkaXNwID0gKGN0eC1cXHUwMDNlb2Zmc2V0c1t0YXJnZXRfaW5zbl0gLSAoY3R4LVxcdTAwM2VpZHggKyAxKSkgKiAyOyBcXFxcXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAob3BfYmFzZSkgfCAweDAwZmYpOyBcXFxcXFxuK1xcdFxcdFxcdGVtaXRfMzIoY3R4LCBkaXNwKTsgXFxcXFxcbitcXHRcXHR9IHdoaWxlICgwKVxcbitcXG4rXFx0aWYgKG9wID09IEJQRl9KQSkge1xcbitcXHRcXHRFTUlUX0pNUDMyKDB4NjAwMCk7XFx0XFx0XFx0XFx0LyogYnJhLmwgKi9cXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcXG4rXFx0aWYgKCFpc19qbXAzMilcXG4rXFx0XFx0ZF9oaSA9IGJwZl9nZXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpO1xcbitcXG4rXFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1gpIHtcXG4rXFx0XFx0c19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpO1xcbitcXHRcXHRpZiAoIWlzX2ptcDMyKVxcbitcXHRcXHRcXHRzX2hpID0gYnBmX2dldF9yZWczMihzcmNbMF0sIHRtcDJbMF0sIGN0eCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHNfbG8gPSB0bXAyWzFdO1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHNfbG8gXFx1MDAzY1xcdTAwM2MgOSkpO1xcdFxcdC8qIG1vdmUubCAjaW1tLCBzX2xvICovXFxuK1xcdFxcdGVtaXRfMzIoY3R4LCBpbnNuLVxcdTAwM2VpbW0pO1xcbitcXHRcXHRpZiAoIWlzX2ptcDMyKSB7XFxuK1xcdFxcdFxcdHNfaGkgPSB0bXAyWzBdO1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHNfaGkgXFx1MDAzY1xcdTAwM2MgOSkpO1xcdC8qIG1vdmUubCAjaW1tLCBzX2hpICovXFxuK1xcdFxcdFxcdGVtaXRfMzIoY3R4LCBpbnNuLVxcdTAwM2VpbW0gXFx1MDAzYyAwID8gMHhmZmZmZmZmZiA6IDApO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChvcCA9PSBCUEZfSlNFVCkge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKHRtcDFbMV0gXFx1MDAzY1xcdTAwM2MgOSkgfCBkX2xvKTtcXHQvKiBtb3ZlLmwgZF9sbywgdG1wMV9sbyAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHhjMDgwIHwgKHRtcDFbMV0gXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2xvKTtcXHQvKiBhbmQubCBzX2xvLCB0bXAxX2xvICovXFxuK1xcbitcXHRcXHRpZiAoIWlzX2ptcDMyKSB7XFxuK1xcdFxcdFxcdEVNSVRfSk1QMzIoMHg2NjAwKTtcXHRcXHRcXHQvKiBibmUubCAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKHRtcDFbMF0gXFx1MDAzY1xcdTAwM2MgOSkgfCBkX2hpKTsgLyogbW92ZS5sIGRfaGksIHRtcDFfaGkgKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4YzA4MCB8ICh0bXAxWzBdIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19oaSk7IC8qIGFuZC5sIHNfaGksIHRtcDFfaGkgKi9cXG4rXFx0XFx0fVxcbitcXHRcXHRFTUlUX0pNUDMyKDB4NjYwMCk7XFx0XFx0XFx0XFx0LyogYm5lLmwgKi9cXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChpc19qbXAzMikge1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2xvKTtcXHQvKiBjbXAubCBzX2xvLCBkX2xvICovXFxuK1xcdFxcdHN3aXRjaCAob3ApIHtcXG4rXFx0XFx0Y2FzZSBCUEZfSkVROlxcbitcXHRcXHRcXHRFTUlUX0pNUDMyKDB4NjcwMCk7XFx0XFx0XFx0LyogYmVxLmwgKi9cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgQlBGX0pORTpcXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDY2MDApO1xcdFxcdFxcdC8qIGJuZS5sICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEJQRl9KR1Q6XFxuK1xcdFxcdFxcdEVNSVRfSk1QMzIoMHg2MjAwKTtcXHRcXHRcXHQvKiBiaGkubCAqL1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBCUEZfSkdFOlxcbitcXHRcXHRcXHRFTUlUX0pNUDMyKDB4NjQwMCk7XFx0XFx0XFx0LyogYmNjLmwgKi9cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgQlBGX0pMVDpcXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDY1MDApO1xcdFxcdFxcdC8qIGJjcy5sICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEJQRl9KTEU6XFxuK1xcdFxcdFxcdEVNSVRfSk1QMzIoMHg2MzAwKTtcXHRcXHRcXHQvKiBibHMubCAqL1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBCUEZfSlNHVDpcXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDZlMDApO1xcdFxcdFxcdC8qIGJndC5sICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEJQRl9KU0dFOlxcbitcXHRcXHRcXHRFTUlUX0pNUDMyKDB4NmMwMCk7XFx0XFx0XFx0LyogYmdlLmwgKi9cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgQlBGX0pTTFQ6XFxuK1xcdFxcdFxcdEVNSVRfSk1QMzIoMHg2ZDAwKTtcXHRcXHRcXHQvKiBibHQubCAqL1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBCUEZfSlNMRTpcXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDZmMDApO1xcdFxcdFxcdC8qIGJsZS5sICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9oaSBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfaGkpO1xcdC8qIGNtcC5sIHNfaGksIGRfaGkgKi9cXG4rXFxuK1xcdFxcdHN3aXRjaCAob3ApIHtcXG4rXFx0XFx0Y2FzZSBCUEZfSkVROlxcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHg2NjA4KTtcXHRcXHRcXHQvKiBibmUucyAuKzggKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi9cXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDY3MDApO1xcdFxcdFxcdC8qIGJlcS5sICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEJQRl9KTkU6XFxuK1xcdFxcdFxcdEVNSVRfSk1QMzIoMHg2NjAwKTtcXHRcXHRcXHQvKiBibmUubCAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xcbitcXHRcXHRcXHRFTUlUX0pNUDMyKDB4NjYwMCk7XFx0XFx0XFx0LyogYm5lLmwgKi9cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgQlBGX0pHVDpcXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDYyMDApO1xcdFxcdFxcdC8qIGJoaS5sICovXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDY1MDgpO1xcdFxcdFxcdC8qIGJjcy5zIC4rOCAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xcbitcXHRcXHRcXHRFTUlUX0pNUDMyKDB4NjIwMCk7XFx0XFx0XFx0LyogYmhpLmwgKi9cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgQlBGX0pHRTpcXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDYyMDApO1xcdFxcdFxcdC8qIGJoaS5sICovXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDY1MDgpO1xcdFxcdFxcdC8qIGJjcy5zIC4rOCAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xcbitcXHRcXHRcXHRFTUlUX0pNUDMyKDB4NjQwMCk7XFx0XFx0XFx0LyogYmNjLmwgKi9cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgQlBGX0pMVDpcXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDY1MDApO1xcdFxcdFxcdC8qIGJjcy5sICovXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDYyMDgpO1xcdFxcdFxcdC8qIGJoaS5zIC4rOCAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xcbitcXHRcXHRcXHRFTUlUX0pNUDMyKDB4NjUwMCk7XFx0XFx0XFx0LyogYmNzLmwgKi9cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgQlBGX0pMRTpcXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDY1MDApO1xcdFxcdFxcdC8qIGJjcy5sICovXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDYyMDgpO1xcdFxcdFxcdC8qIGJoaS5zIC4rOCAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xcbitcXHRcXHRcXHRFTUlUX0pNUDMyKDB4NjMwMCk7XFx0XFx0XFx0LyogYmxzLmwgKi9cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgQlBGX0pTR1Q6XFxuK1xcdFxcdFxcdEVNSVRfSk1QMzIoMHg2ZTAwKTtcXHRcXHRcXHQvKiBiZ3QubCAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHg2ZDA4KTtcXHRcXHRcXHQvKiBibHQucyAuKzggKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi9cXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDYyMDApO1xcdFxcdFxcdC8qIGJoaS5sICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEJQRl9KU0dFOlxcbitcXHRcXHRcXHRFTUlUX0pNUDMyKDB4NmUwMCk7XFx0XFx0XFx0LyogYmd0LmwgKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4NmQwOCk7XFx0XFx0XFx0LyogYmx0LnMgLis4ICovXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcXHUwMDNjXFx1MDAzYyA5KSB8IHNfbG8pOyAvKiBjbXAubCBzX2xvLCBkX2xvICovXFxuK1xcdFxcdFxcdEVNSVRfSk1QMzIoMHg2NDAwKTtcXHRcXHRcXHQvKiBiY2MubCAqL1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBCUEZfSlNMVDpcXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDZkMDApO1xcdFxcdFxcdC8qIGJsdC5sICovXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDZlMDgpO1xcdFxcdFxcdC8qIGJndC5zIC4rOCAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXFx1MDAzY1xcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xcbitcXHRcXHRcXHRFTUlUX0pNUDMyKDB4NjUwMCk7XFx0XFx0XFx0LyogYmNzLmwgKi9cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgQlBGX0pTTEU6XFxuK1xcdFxcdFxcdEVNSVRfSk1QMzIoMHg2ZDAwKTtcXHRcXHRcXHQvKiBibHQubCAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHg2ZTA4KTtcXHRcXHRcXHQvKiBiZ3QucyAuKzggKi9cXG4rXFx0XFx0XFx0ZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvIFxcdTAwM2NcXHUwMDNjIDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi9cXG4rXFx0XFx0XFx0RU1JVF9KTVAzMigweDYzMDApO1xcdFxcdFxcdC8qIGJscy5sICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0I3VuZGVmIEVNSVRfSk1QMzJcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW1pdF9jYWxsKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG4re1xcbitcXHRjb25zdCBzOCBhcmdfcmVnc1tdID0geyBCUEZfUkVHXzUsIEJQRl9SRUdfNCwgQlBGX1JFR18zLCBCUEZfUkVHXzIsIEJQRl9SRUdfMSB9O1xcbitcXHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XFxuK1xcdGJvb2wgZXh0cmFfcGFzcyA9IGN0eC1cXHUwMDNlcHJvZy1cXHUwMDNlaml0ZWQ7XFxuK1xcdHU2NCBmdW5jX2FkZHI7XFxuK1xcdGJvb2wgZml4ZWQ7XFxuK1xcdGludCBpLCBlcnI7XFxuK1xcbitcXHRlcnIgPSBicGZfaml0X2dldF9mdW5jX2FkZHIoY3R4LVxcdTAwM2Vwcm9nLCBpbnNuLCBleHRyYV9wYXNzLCBcXHUwMDI2ZnVuY19hZGRyLCBcXHUwMDI2Zml4ZWQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDU7IGkrKykge1xcbitcXHRcXHRjb25zdCBzOCAqcmVnID0gYnBmMm02OGtbYXJnX3JlZ3NbaV1dO1xcbitcXHRcXHRzOCBkX2xvID0gYnBmX2dldF9yZWczMihyZWdbMV0sIHRtcDFbMV0sIGN0eCk7XFxuK1xcdFxcdHM4IGRfaGkgPSBicGZfZ2V0X3JlZzMyKHJlZ1swXSwgdG1wMVswXSwgY3R4KTtcXG4rXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBkX2xvKTtcXHRcXHRcXHQvKiBtb3ZlLmwgZF9sbywgLSglc3ApICovXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBkX2hpKTtcXHRcXHRcXHQvKiBtb3ZlLmwgZF9oaSwgLSglc3ApICovXFxuK1xcdH1cXG4rXFxuK1xcdGVtaXRfMTYoY3R4LCAweDIwN2MpO1xcdFxcdFxcdFxcdFxcdC8qIG1vdmVhLmwgI2Z1bmNfYWRkciwgJWEwICovXFxuK1xcdGVtaXRfMzIoY3R4LCAodTMyKWZ1bmNfYWRkcik7XFxuK1xcbitcXHRlbWl0XzE2KGN0eCwgMHg0ZTkwKTtcXHRcXHRcXHRcXHRcXHQvKiBqc3IgKCVhMCkgKi9cXG4rXFxuK1xcdGVtaXRfMTYoY3R4LCAweDRmZWYpO1xcdFxcdFxcdFxcdFxcdC8qIGxlYSA0MCglc3ApLCAlc3AgKi9cXG4rXFx0ZW1pdF8xNihjdHgsIDQwKTtcXG4rXFxuK1xcdGlmIChpbnNuLVxcdTAwM2VzcmNfcmVnICE9IEJQRl9QU0VVRE9fQ0FMTClcXG4rXFx0XFx0ZW1pdF8xNihjdHgsIDB4YzM0MCk7XFx0XFx0XFx0XFx0XFx0LyogZXhnICVkMCwgJWQxICovXFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYnVpbGRfcHJvbG9ndWUoc3RydWN0IGppdF9jdHggKmN0eClcXG4re1xcbitcXHRpbnQgYnBmX3N0YWNrID0gTUFYX0JQRl9TVEFDSztcXG4rXFx0aW50IHRvdGFsX3N0YWNrID0gU0NSQVRDSF9TSVpFICsgYnBmX3N0YWNrO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGVtaXRfMTYoY3R4LCAweDcwMjEpO1xcdFxcdFxcdFxcdFxcdC8qIG1vdmVxICMzMywgJWQwICovXFxuK1xcbitcXHRlbWl0XzE2KGN0eCwgMHg0ZTU2KTtcXHRcXHRcXHRcXHRcXHQvKiBsaW5rICVhNiwgIy10b3RhbF9zdGFjayAqL1xcbitcXHRlbWl0XzE2KGN0eCwgLXRvdGFsX3N0YWNrKTtcXG4rXFxuK1xcdGVtaXRfMTYoY3R4LCAweDQ4ZTcpO1xcdFxcdFxcdFxcdFxcdC8qIG1vdmVtLmwgZDItZDUsIC0oJXNwKSAqL1xcbitcXHRlbWl0XzE2KGN0eCwgMHgzYzAwKTtcXG4rXFxuK1xcdGVtaXRfMTYoY3R4LCAweDJkNDApO1xcdFxcdFxcdFxcdFxcdC8qIG1vdmUubCAlZDAsIG9mZiglZnApICovXFxuK1xcdGVtaXRfMTYoY3R4LCAodTE2KVNUQUNLX09GRlNFVChCUEZfVENfTE8pKTtcXG4rXFxuK1xcdGlmIChjdHgtXFx1MDAzZXByb2ctXFx1MDAzZWlzX2Z1bmMpIHtcXG4rXFx0XFx0Y29uc3QgczggYXJnX3JlZ3NbXSA9IHsgQlBGX1JFR18xLCBCUEZfUkVHXzIsIEJQRl9SRUdfMywgQlBGX1JFR180LCBCUEZfUkVHXzUgfTtcXG4rXFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA1OyBpKyspIHtcXG4rXFx0XFx0XFx0aW50IG9mZnNldCA9IDggKyBpICogODtcXG4rXFx0XFx0XFx0Y29uc3QgczggKnJlZyA9IGJwZjJtNjhrW2FyZ19yZWdzW2ldXTtcXG4rXFxuK1xcdFxcdFxcdGVtaXRfMTYoY3R4LCAweDIwMmUpOyAvKiBtb3ZlLmwgb2Zmc2V0KCVmcCksICVkMCAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgb2Zmc2V0KTtcXG4rXFx0XFx0XFx0YnBmX3B1dF9yZWczMihyZWdbMF0sIE02OEtfRDAsIGN0eCk7XFxuK1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgMHgyMDJlKTsgLyogbW92ZS5sIG9mZnNldCs0KCVmcCksICVkMCAqL1xcbitcXHRcXHRcXHRlbWl0XzE2KGN0eCwgb2Zmc2V0ICsgNCk7XFxuK1xcdFxcdFxcdGJwZl9wdXRfcmVnMzIocmVnWzFdLCBNNjhLX0QwLCBjdHgpO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDIwMmUpO1xcdFxcdFxcdFxcdC8qIG1vdmUubCA4KCVmcCksICVkMCAqL1xcbitcXHRcXHRlbWl0XzE2KGN0eCwgOCk7XFxuK1xcdFxcdGJwZl9wdXRfcmVnMzIoYnBmMm02OGtbQlBGX1JFR18xXVsxXSwgTTY4S19EMCwgY3R4KTtcXG4rXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDcwMDAgfCAoTTY4S19EMCBcXHUwMDNjXFx1MDAzYyA5KSk7XFx0XFx0XFx0LyogbW92ZXEgIzAsICVkMCAqL1xcbitcXHRcXHRicGZfcHV0X3JlZzMyKGJwZjJtNjhrW0JQRl9SRUdfMV1bMF0sIE02OEtfRDAsIGN0eCk7XFxuK1xcdH1cXG4rXFxuK1xcdGVtaXRfMTYoY3R4LCAweDQxZWUpO1xcdFxcdFxcdFxcdFxcdC8qIGxlYSAtU0NSQVRDSF9TSVpFKCVmcCksICVhMCAqL1xcbitcXHRlbWl0XzE2KGN0eCwgLVNDUkFUQ0hfU0laRSk7XFxuK1xcdGVtaXRfMTYoY3R4LCAweDIwMDgpO1xcdFxcdFxcdFxcdFxcdC8qIG1vdmUubCAlYTAsICVkMCAqL1xcbitcXG4rXFx0YnBmX3B1dF9yZWczMihicGYybTY4a1tCUEZfUkVHXzEwXVsxXSwgTTY4S19EMCwgY3R4KTtcXG4rXFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChNNjhLX0QwIFxcdTAwM2NcXHUwMDNjIDkpKTtcXHRcXHRcXHQvKiBtb3ZlcSAjMCwgJWQwICovXFxuK1xcdGJwZl9wdXRfcmVnMzIoYnBmMm02OGtbQlBGX1JFR18xMF1bMF0sIE02OEtfRDAsIGN0eCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuK3tcXG4rXFx0ZW1pdF8xNihjdHgsIDB4NGNkZik7XFx0XFx0XFx0XFx0XFx0LyogbW92ZW0ubCAoJXNwKSssIGQyLWQ1ICovXFxuK1xcdGVtaXRfMTYoY3R4LCAweDAwM2MpO1xcbitcXG4rXFx0ZW1pdF8xNihjdHgsIDB4NGU1ZSk7XFx0XFx0XFx0XFx0XFx0LyogdW5sayAlZnAgKi9cXG4rXFx0ZW1pdF8xNihjdHgsIDB4NGU3NSk7XFx0XFx0XFx0XFx0XFx0LyogcnRzICovXFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBpKVxcbit7XFxuK1xcdHU4IGNvZGUgPSBpbnNuLVxcdTAwM2Vjb2RlO1xcbitcXG4rXFx0c3dpdGNoIChjb2RlKSB7XFxuK1xcdGNhc2UgQlBGX0FMVSB8IEJQRl9ORUc6XFxuK1xcdFxcdGVtaXRfYWx1MzJfbmVnKGluc24sIGN0eCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9ORUc6XFxuK1xcdFxcdGVtaXRfYWx1NjRfbmVnKGluc24sIGN0eCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSBCUEZfQUxVIHwgQlBGX01PViB8IEJQRl9YOlxcbitcXHRjYXNlIEJQRl9BTFUgfCBCUEZfQUREIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0FMVSB8IEJQRl9TVUIgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfQUxVIHwgQlBGX0FORCB8IEJQRl9YOlxcbitcXHRjYXNlIEJQRl9BTFUgfCBCUEZfT1IgIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0FMVSB8IEJQRl9YT1IgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfQUxVIHwgQlBGX0xTSCB8IEJQRl9YOlxcbitcXHRjYXNlIEJQRl9BTFUgfCBCUEZfUlNIIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0FMVSB8IEJQRl9BUlNIIHwgQlBGX1g6XFxuK1xcdFxcdGVtaXRfYWx1MzJfeChpbnNuLCBjdHgpO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgQlBGX0FMVSB8IEJQRl9NT1YgfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfQUxVIHwgQlBGX0FERCB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9BTFUgfCBCUEZfU1VCIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0FMVSB8IEJQRl9BTkQgfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfQUxVIHwgQlBGX09SICB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9BTFUgfCBCUEZfWE9SIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0FMVSB8IEJQRl9MU0ggfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfQUxVIHwgQlBGX1JTSCB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9BTFUgfCBCUEZfQVJTSCB8IEJQRl9LOlxcbitcXHRcXHRlbWl0X2FsdTMyX2soaW5zbiwgY3R4KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfQUREIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX1NVQiB8IEJQRl9YOlxcbitcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9BTkQgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfT1IgIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX1hPUiB8IEJQRl9YOlxcbitcXHRcXHRlbWl0X2FsdTY0X3goaW5zbiwgY3R4KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfQUREIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX1NVQiB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9BTkQgfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfT1IgIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX1hPUiB8IEJQRl9LOlxcbitcXHRcXHRlbWl0X2FsdTY0X2soaW5zbiwgY3R4KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9MU0ggfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfUlNIIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0FSU0ggfCBCUEZfWDpcXG4rXFx0XFx0ZW1pdF9hbHU2NF9zaGlmdChpbnNuLCBjdHgsIGZhbHNlKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9MU0ggfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfUlNIIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0FSU0ggfCBCUEZfSzpcXG4rXFx0XFx0ZW1pdF9hbHU2NF9zaGlmdChpbnNuLCBjdHgsIHRydWUpO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgQlBGX0FMVSB8IEJQRl9NVUwgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfQUxVIHwgQlBGX0RJViB8IEJQRl9YOlxcbitcXHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9EIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0FMVSB8IEJQRl9NVUwgfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfQUxVIHwgQlBGX0RJViB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9EIHwgQlBGX0s6XFxuK1xcdFxcdGVtaXRfbWF0aF9jYWxsKGluc24sIGN0eCwgZmFsc2UpO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX01VTCB8IEJQRl9YOlxcbitcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9ESVYgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9EIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX01VTCB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9ESVYgfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9EIHwgQlBGX0s6XFxuK1xcdFxcdGVtaXRfbWF0aF9jYWxsKGluc24sIGN0eCwgdHJ1ZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSBCUEZfQUxVIHwgQlBGX0VORCB8IEJQRl9UT19CRTpcXG4rXFx0Y2FzZSBCUEZfQUxVIHwgQlBGX0VORCB8IEJQRl9UT19MRTpcXG4rXFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfRU5EIHwgQlBGX1RPX0JFOlxcbitcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9FTkQgfCBCUEZfVE9fTEU6XFxuK1xcdFxcdGVtaXRfYnBmX2VuZChpbnNuLCBjdHgpO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVzoge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24xID0gaW5zbiArIDE7XFxuK1xcdFxcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVxcdTAwM2Vkc3RfcmVnXTtcXG4rXFx0XFx0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xcbitcXHRcXHRzOCBkX2xvID0gYnBmX2dldF9yZWczMihkc3RbMV0sIHRtcDFbMV0sIGN0eCk7XFxuK1xcdFxcdHM4IGRfaGkgPSBicGZfZ2V0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcXG4rXFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAoZF9sbyBcXHUwMDNjXFx1MDAzYyA5KSk7XFx0XFx0XFx0LyogbW92ZS5sICNpbW0sIGRfbG8gKi9cXG4rXFx0XFx0ZW1pdF8zMihjdHgsIGluc24tXFx1MDAzZWltbSk7XFxuK1xcdFxcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAoZF9oaSBcXHUwMDNjXFx1MDAzYyA5KSk7XFx0XFx0XFx0LyogbW92ZS5sICNpbW0sIGRfaGkgKi9cXG4rXFx0XFx0ZW1pdF8zMihjdHgsIGluc24xLVxcdTAwM2VpbW0pO1xcbitcXG4rXFx0XFx0YnBmX3B1dF9yZWczMihkc3RbMV0sIGRfbG8sIGN0eCk7XFxuK1xcdFxcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9COlxcbitcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0g6XFxuK1xcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfVzpcXG4rXFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9EVzpcXG4rXFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX0I6XFxuK1xcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9IOlxcbitcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfVzpcXG4rXFx0XFx0ZW1pdF9sZHgoaW5zbiwgY3R4KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX0I6XFxuK1xcdGNhc2UgQlBGX1NUWCB8IEJQRl9NRU0gfCBCUEZfSDpcXG4rXFx0Y2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9XOlxcbitcXHRjYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX0RXOlxcbitcXHRcXHRlbWl0X3N0eChpbnNuLCBjdHgpO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9COlxcbitcXHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfSDpcXG4rXFx0Y2FzZSBCUEZfU1QgfCBCUEZfTUVNIHwgQlBGX1c6XFxuK1xcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9EVzpcXG4rXFx0XFx0ZW1pdF9zdChpbnNuLCBjdHgpO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVzpcXG4rXFx0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9EVzpcXG4rXFx0XFx0ZW1pdF9hdG9taWMoaW5zbiwgY3R4KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIEJQRl9KTVAgfCBCUEZfVEFJTF9DQUxMOlxcbitcXHRcXHRlbWl0X3RhaWxfY2FsbChpbnNuLCBjdHgpO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KQTpcXG4rXFx0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSkE6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KRVEgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfSk1QIHwgQlBGX0pFUSB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9KTVAgfCBCUEZfSk5FIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KTkUgfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfSk1QIHwgQlBGX0pHVCB8IEJQRl9YOlxcbitcXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkdUIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KR0UgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfSk1QIHwgQlBGX0pHRSB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkxUIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KTFQgfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfSk1QIHwgQlBGX0pMRSB8IEJQRl9YOlxcbitcXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkxFIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0dUIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0dUIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0dFIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0dFIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0xUIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0xUIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0xFIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0xFIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0VUIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0VUIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pFUSB8IEJQRl9YOlxcbitcXHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KRVEgfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSk5FIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pORSB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KR1QgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSkdUIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pHRSB8IEJQRl9YOlxcbitcXHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KR0UgfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSkxUIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pMVCB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KTEUgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSkxFIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pTR1QgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNHVCB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KU0dFIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pTR0UgfCBCUEZfSzpcXG4rXFx0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNMVCB8IEJQRl9YOlxcbitcXHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KU0xUIHwgQlBGX0s6XFxuK1xcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pTTEUgfCBCUEZfWDpcXG4rXFx0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNMRSB8IEJQRl9LOlxcbitcXHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KU0VUIHwgQlBGX1g6XFxuK1xcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pTRVQgfCBCUEZfSzpcXG4rXFx0XFx0cmV0dXJuIGVtaXRfam1wKGluc24sIGN0eCwgaSk7XFxuK1xcbitcXHRjYXNlIEJQRl9KTVAgfCBCUEZfQ0FMTDpcXG4rXFx0XFx0cmV0dXJuIGVtaXRfY2FsbChpbnNuLCBjdHgpO1xcbitcXG4rXFx0Y2FzZSBCUEZfSk1QIHwgQlBGX0VYSVQ6XFxuK1xcdFxcdGJ1aWxkX2VwaWxvZ3VlKGN0eCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBidWlsZF9ib2R5KHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nID0gY3R4LVxcdTAwM2Vwcm9nO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwcm9nLVxcdTAwM2VsZW47IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBcXHUwMDI2cHJvZy1cXHUwMDNlaW5zbnNpW2ldO1xcbitcXHRcXHRpbnQgcmV0O1xcbitcXG4rXFx0XFx0aWYgKCFjdHgtXFx1MDAzZXRhcmdldClcXG4rXFx0XFx0XFx0Y3R4LVxcdTAwM2VvZmZzZXRzW2ldID0gY3R4LVxcdTAwM2VpZHg7XFxuK1xcbitcXHRcXHRyZXQgPSBidWlsZF9pbnNuKGluc24sIGN0eCwgaSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0aWYgKGluc24tXFx1MDAzZWNvZGUgPT0gKEJQRl9MRCB8IEJQRl9JTU0gfCBCUEZfRFcpKSB7XFxuK1xcdFxcdFxcdGkrKztcXG4rXFx0XFx0XFx0aWYgKCFjdHgtXFx1MDAzZXRhcmdldClcXG4rXFx0XFx0XFx0XFx0Y3R4LVxcdTAwM2VvZmZzZXRzW2ldID0gY3R4LVxcdTAwM2VpZHg7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFjdHgtXFx1MDAzZXRhcmdldClcXG4rXFx0XFx0Y3R4LVxcdTAwM2VvZmZzZXRzW3Byb2ctXFx1MDAzZWxlbl0gPSBjdHgtXFx1MDAzZWlkeDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitib29sIGJwZl9qaXRfbmVlZHNfemV4dCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBqaXRfZmlsbF9ob2xlKHZvaWQgKmFyZWEsIHVuc2lnbmVkIGludCBzaXplKVxcbit7XFxuK1xcdHUxNiAqcHRyO1xcbitcXG4rXFx0Zm9yIChwdHIgPSBhcmVhOyBzaXplIFxcdTAwM2U9IDI7IHNpemUgLT0gMilcXG4rXFx0XFx0KnB0cisrID0gMHg0YWZjO1xcbit9XFxuK1xcbitzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqaGVhZGVyO1xcbitcXHRzdHJ1Y3Qgaml0X2N0eCBjdHg7XFxuK1xcdHVuc2lnbmVkIGludCBpbWFnZV9zaXplO1xcbitcXHR1OCAqaW1hZ2VfcHRyO1xcbitcXHRib29sIGV4dHJhX3Bhc3MgPSBwcm9nLVxcdTAwM2VqaXRlZDtcXG4rXFxuK1xcdGlmICghcHJvZy1cXHUwMDNlaml0X3JlcXVlc3RlZClcXG4rXFx0XFx0cmV0dXJuIHByb2c7XFxuK1xcbitcXHRpZiAocHJvZy1cXHUwMDNlaml0ZWQgXFx1MDAyNlxcdTAwMjYgIXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlZnVuYylcXG4rXFx0XFx0cmV0dXJuIHByb2c7XFxuK1xcbitcXHRtZW1zZXQoXFx1MDAyNmN0eCwgMCwgc2l6ZW9mKGN0eCkpO1xcbitcXHRjdHgucHJvZyA9IHByb2c7XFxuK1xcbitcXHRjdHgub2Zmc2V0cyA9IGt2Y2FsbG9jKHByb2ctXFx1MDAzZWxlbiArIDEsIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFjdHgub2Zmc2V0cylcXG4rXFx0XFx0cmV0dXJuIHByb2c7XFxuK1xcbitcXHRidWlsZF9wcm9sb2d1ZShcXHUwMDI2Y3R4KTtcXG4rXFx0aWYgKGJ1aWxkX2JvZHkoXFx1MDAyNmN0eCkgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIG91dF9vZmY7XFxuK1xcdGJ1aWxkX2VwaWxvZ3VlKFxcdTAwMjZjdHgpO1xcbitcXG4rXFx0aWYgKGV4dHJhX3Bhc3MpIHtcXG4rXFx0XFx0aGVhZGVyID0gcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VqaXRfZGF0YTtcXG4rXFx0XFx0aW1hZ2VfcHRyID0gKHU4ICopcHJvZy1cXHUwMDNlYnBmX2Z1bmM7XFxuK1xcdFxcdGltYWdlX3NpemUgPSBwcm9nLVxcdTAwM2VqaXRlZF9sZW47XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGltYWdlX3NpemUgPSBjdHguaWR4ICogMjtcXG4rXFx0XFx0aGVhZGVyID0gYnBmX2ppdF9iaW5hcnlfYWxsb2MoaW1hZ2Vfc2l6ZSwgXFx1MDAyNmltYWdlX3B0ciwgMiwgaml0X2ZpbGxfaG9sZSk7XFxuK1xcdFxcdGlmICghaGVhZGVyKVxcbitcXHRcXHRcXHRnb3RvIG91dF9vZmY7XFxuK1xcdFxcdHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlaml0X2RhdGEgPSBoZWFkZXI7XFxuK1xcdH1cXG4rXFxuK1xcdGN0eC50YXJnZXQgPSAodTE2ICopaW1hZ2VfcHRyO1xcbitcXHRjdHguaWR4ID0gMDtcXG4rXFxuK1xcdGJ1aWxkX3Byb2xvZ3VlKFxcdTAwMjZjdHgpO1xcbitcXHRpZiAoYnVpbGRfYm9keShcXHUwMDI2Y3R4KSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0YnBmX2ppdF9iaW5hcnlfZnJlZShoZWFkZXIpO1xcbitcXHRcXHRwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWppdF9kYXRhID0gTlVMTDtcXG4rXFx0XFx0cHJvZy1cXHUwMDNlYnBmX2Z1bmMgPSBOVUxMO1xcbitcXHRcXHRwcm9nLVxcdTAwM2VqaXRlZCA9IDA7XFxuK1xcdFxcdHByb2ctXFx1MDAzZWppdGVkX2xlbiA9IDA7XFxuK1xcdFxcdGdvdG8gb3V0X29mZjtcXG4rXFx0fVxcbitcXHRidWlsZF9lcGlsb2d1ZShcXHUwMDI2Y3R4KTtcXG4rXFxuK1xcdGZsdXNoX2ljYWNoZV9yYW5nZSgodTMyKWhlYWRlciwgKHUzMikoY3R4LnRhcmdldCArIGN0eC5pZHgpKTtcXG4rXFxuK1xcdGlmIChicGZfaml0X2VuYWJsZSBcXHUwMDNlIDEpXFxuK1xcdFxcdGJwZl9qaXRfZHVtcChwcm9nLVxcdTAwM2VsZW4sIGltYWdlX3NpemUsIDIsIGN0eC50YXJnZXQpO1xcbitcXG4rXFx0aWYgKCghcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VmdW5jIHx8IGV4dHJhX3Bhc3MpIFxcdTAwMjZcXHUwMDI2IGJwZl9qaXRfYmluYXJ5X2xvY2tfcm8oaGVhZGVyKSkge1xcbitcXHRcXHRicGZfaml0X2JpbmFyeV9mcmVlKGhlYWRlcik7XFxuK1xcdFxcdHByb2ctXFx1MDAzZWJwZl9mdW5jID0gTlVMTDtcXG4rXFx0XFx0cHJvZy1cXHUwMDNlaml0ZWQgPSAwO1xcbitcXHRcXHRwcm9nLVxcdTAwM2VqaXRlZF9sZW4gPSAwO1xcbitcXHRcXHRwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWppdF9kYXRhID0gTlVMTDtcXG4rXFx0XFx0Z290byBvdXRfb2ZmO1xcbitcXHR9XFxuK1xcbitcXHRwcm9nLVxcdTAwM2VicGZfZnVuYyA9ICh2b2lkICopY3R4LnRhcmdldDtcXG4rXFx0cHJvZy1cXHUwMDNlaml0ZWQgPSAxO1xcbitcXHRwcm9nLVxcdTAwM2VqaXRlZF9sZW4gPSBpbWFnZV9zaXplO1xcbitcXG4rb3V0X29mZjpcXG4rXFx0a3ZmcmVlKGN0eC5vZmZzZXRzKTtcXG4rXFx0cmV0dXJuIHByb2c7XFxuK31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDQ6NTA6MDguMTM0ODE0OTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNzUxMDAwMjA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICAgIFwiYnBmX2ppdF9uZWVkc196ZXh0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYgSklUIGNvbXBpbGVyIGZvciB0aGUgbTY4ayBhcmNoaXRlY3R1cmUuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgQlBGIHByb2dyYW0gbG9hZGluZyB3aGVuIEpJVCBpcyBlbmFibGVkLCBhbmQgY2FuIGJlIHRlc3RlZCBpbiBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYzcwY2I2ZDM4Nzc3ZDVmNTE4ZjUyZjgzNDExZTRlYWJkZjRkN2QwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMDQ6NTA6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCAyZmIxYzc1YWZkMTYzLi41MzA1NTE4MzRjMTYzIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtNDcwMSw2ICs0NzAxLDEyIEBAIEw6XHRicGZAdmdlci5rZXJuZWwub3JnXG4gUzpcdE1haW50YWluZWRcbiBGOlx0YXJjaC9sb29uZ2FyY2gvbmV0L1xuIFxuK0JQRiBKSVQgZm9yIE02OEtcbitNOlx0S3Vhbi1XZWkgQ2hpdSBcdTAwM2N2aXNpdG9yY2t3QGdtYWlsLmNvbVx1MDAzZVxuK0w6XHRicGZAdmdlci5rZXJuZWwub3JnXG4rUzpcdE1haW50YWluZWRcbitGOlx0YXJjaC9tNjhrL25ldC9cbitcbiBCUEYgSklUIGZvciBNSVBTICgzMi1CSVQgQU5EIDY0LUJJVClcbiBNOlx0Sm9oYW4gQWxtYmxhZGggXHUwMDNjam9oYW4uYWxtYmxhZGhAYW55ZmluZXR3b3Jrcy5jb21cdTAwM2VcbiBNOlx0UGF1bCBCdXJ0b24gXHUwMDNjcGF1bGJ1cnRvbkBrZXJuZWwub3JnXHUwMDNlXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tidWlsZCBiL2FyY2gvbTY4ay9LYnVpbGRcbmluZGV4IDc3NjJhZjlmNmRlZmUuLjA1OGFkNDFhNzI4YzUgMTAwNjQ0XG4tLS0gYS9hcmNoL202OGsvS2J1aWxkXG4rKysgYi9hcmNoL202OGsvS2J1aWxkXG5AQCAtMSw1ICsxLDUgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbi1vYmoteVx0XHRcdFx0Kz0ga2VybmVsLyBtbS9cbitvYmoteVx0XHRcdFx0Kz0ga2VybmVsLyBtbS8gbmV0L1xuIG9iai0kKENPTkZJR19RNDApXHRcdCs9IHE0MC9cbiBvYmotJChDT05GSUdfQU1JR0EpXHRcdCs9IGFtaWdhL1xuIG9iai0kKENPTkZJR19BVEFSSSlcdFx0Kz0gYXRhcmkvXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcgYi9hcmNoL202OGsvS2NvbmZpZ1xuaW5kZXggMTE4MzVlYjU5ZDk0ZC4uZGE0M2Q2NjYwYzVjZSAxMDA2NDRcbi0tLSBhL2FyY2gvbTY4ay9LY29uZmlnXG4rKysgYi9hcmNoL202OGsvS2NvbmZpZ1xuQEAgLTgsNiArOCw3IEBAIGNvbmZpZyBNNjhLXG4gXHRzZWxlY3QgQVJDSF9IQVNfQ1BVX0ZJTkFMSVpFX0lOSVQgaWYgTU1VXG4gXHRzZWxlY3QgQVJDSF9IQVNfQ1VSUkVOVF9TVEFDS19QT0lOVEVSXG4gXHRzZWxlY3QgQVJDSF9IQVNfRE1BX1BSRVBfQ09IRVJFTlQgaWYgTTY4S19OT05DT0hFUkVOVF9ETUEgXHUwMDI2XHUwMDI2ICFDT0xERklSRVxuK1x0c2VsZWN0IEhBVkVfRUJQRl9KSVQgaWYgKCFDT0xERklSRSBcdTAwMjZcdTAwMjYgIU02ODAwMClcbiBcdHNlbGVjdCBBUkNIX0hBU19TWU5DX0RNQV9GT1JfREVWSUNFIGlmIE02OEtfTk9OQ09IRVJFTlRfRE1BXG4gXHRzZWxlY3QgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEcgaWYgUk1XX0lOU05TXG4gXHRzZWxlY3QgQVJDSF9NSUdIVF9IQVZFX1BDX1BBUlBPUlQgaWYgSVNBXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL25ldC9NYWtlZmlsZSBiL2FyY2gvbTY4ay9uZXQvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lYzViMTQ3NjMzMTY3XG4tLS0gL2Rldi9udWxsXG4rKysgYi9hcmNoL202OGsvbmV0L01ha2VmaWxlXG5AQCAtMCwwICsxLDIgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbitvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX2ppdF9jb21wLm9cbmRpZmYgLS1naXQgYS9hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjZkNjQ3YmJhOTZlYjRcbi0tLSAvZGV2L251bGxcbisrKyBiL2FyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0wLDAgKzEsMTYzMCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIEJQRiBKSVQgY29tcGlsZXIgZm9yIG02OGtcbisgKlxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBLdWFuLVdlaSBDaGl1IFx1MDAzY3Zpc2l0b3Jja3dAZ21haWwuY29tXHUwMDNlXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9maWx0ZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycWZsYWdzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vY2FjaGVmbHVzaC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWF0aDY0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9saW1pdHMuaFx1MDAzZVxuK1xuKyNkZWZpbmUgU1RBQ0tfT0ZGU0VUKGspICgtNCAtICg0ICogKGspKSlcbitcbitlbnVtIHtcbitcdEJQRl9SMV9ISSwgQlBGX1IxX0xPLFxuK1x0QlBGX1IyX0hJLCBCUEZfUjJfTE8sXG4rXHRCUEZfUjNfSEksIEJQRl9SM19MTyxcbitcdEJQRl9SNF9ISSwgQlBGX1I0X0xPLFxuK1x0QlBGX1I1X0hJLCBCUEZfUjVfTE8sXG4rXHRCUEZfUjZfSEksIEJQRl9SNl9MTyxcbitcdEJQRl9SN19ISSwgQlBGX1I3X0xPLFxuK1x0QlBGX1I4X0hJLCBCUEZfUjhfTE8sXG4rXHRCUEZfUjlfSEksIEJQRl9SOV9MTyxcbitcdEJQRl9SMTBfSEksIEJQRl9SMTBfTE8sXG4rXHRCUEZfQVhfSEksIEJQRl9BWF9MTyxcbitcdEJQRl9UQ19ISSwgQlBGX1RDX0xPLFxuK1x0QlBGX0pJVF9TQ1JBVENIX1JFR1MsXG4rfTtcbitcbisjZGVmaW5lIFNDUkFUQ0hfU0laRSAoQlBGX0pJVF9TQ1JBVENIX1JFR1MgKiA0KVxuK1xuKyNkZWZpbmUgVE1QX1JFR18xIDE0XG4rI2RlZmluZSBUTVBfUkVHXzIgMTVcbitcbisjZGVmaW5lIE02OEtfRDAgMFxuKyNkZWZpbmUgTTY4S19EMSAxXG4rI2RlZmluZSBNNjhLX0QyIDJcbisjZGVmaW5lIE02OEtfRDMgM1xuKyNkZWZpbmUgTTY4S19ENCA0XG4rI2RlZmluZSBNNjhLX0Q1IDVcbitcbitzdGF0aWMgY29uc3QgczggYnBmMm02OGtbMTZdWzJdID0ge1xuK1x0W0JQRl9SRUdfMF0gID0ge002OEtfRDEsIE02OEtfRDB9LFxuK1x0W0JQRl9SRUdfMV0gID0ge1NUQUNLX09GRlNFVChCUEZfUjFfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SMV9MTyl9LFxuK1x0W0JQRl9SRUdfMl0gID0ge1NUQUNLX09GRlNFVChCUEZfUjJfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SMl9MTyl9LFxuK1x0W0JQRl9SRUdfM10gID0ge1NUQUNLX09GRlNFVChCUEZfUjNfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SM19MTyl9LFxuK1x0W0JQRl9SRUdfNF0gID0ge1NUQUNLX09GRlNFVChCUEZfUjRfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SNF9MTyl9LFxuK1x0W0JQRl9SRUdfNV0gID0ge1NUQUNLX09GRlNFVChCUEZfUjVfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SNV9MTyl9LFxuK1x0W0JQRl9SRUdfNl0gID0ge1NUQUNLX09GRlNFVChCUEZfUjZfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SNl9MTyl9LFxuK1x0W0JQRl9SRUdfN10gID0ge1NUQUNLX09GRlNFVChCUEZfUjdfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SN19MTyl9LFxuK1x0W0JQRl9SRUdfOF0gID0ge1NUQUNLX09GRlNFVChCUEZfUjhfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SOF9MTyl9LFxuK1x0W0JQRl9SRUdfOV0gID0ge1NUQUNLX09GRlNFVChCUEZfUjlfSEkpLCAgU1RBQ0tfT0ZGU0VUKEJQRl9SOV9MTyl9LFxuK1x0W0JQRl9SRUdfMTBdID0ge1NUQUNLX09GRlNFVChCUEZfUjEwX0hJKSwgU1RBQ0tfT0ZGU0VUKEJQRl9SMTBfTE8pfSxcbitcdFtCUEZfUkVHX0FYXSA9IHtTVEFDS19PRkZTRVQoQlBGX0FYX0hJKSwgIFNUQUNLX09GRlNFVChCUEZfQVhfTE8pfSxcbitcdFtUTVBfUkVHXzFdICA9IHtNNjhLX0QzLCBNNjhLX0QyfSxcbitcdFtUTVBfUkVHXzJdICA9IHtNNjhLX0Q1LCBNNjhLX0Q0fSxcbit9O1xuK1xuK3N0cnVjdCBqaXRfY3R4IHtcbitcdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbitcdHUxNiAqdGFyZ2V0O1xuK1x0dW5zaWduZWQgaW50IGlkeDtcbitcdGludCAqb2Zmc2V0cztcbit9O1xuK1xuK3N0YXRpYyBub2lubGluZSB1MzIgaml0X211bDMyKHUzMiBhLCB1MzIgYilcbit7XG4rXHRyZXR1cm4gYSAqIGI7XG4rfVxuK1xuK3N0YXRpYyBub2lubGluZSB1MzIgaml0X2RpdjMyKHUzMiBhLCB1MzIgYilcbit7XG4rXHRyZXR1cm4gYiA/IGEgLyBiIDogMDtcbit9XG4rXG4rc3RhdGljIG5vaW5saW5lIHUzMiBqaXRfbW9kMzIodTMyIGEsIHUzMiBiKVxuK3tcbitcdHJldHVybiBiID8gYSAlIGIgOiBhO1xuK31cbitcbitzdGF0aWMgbm9pbmxpbmUgczMyIGppdF9zZGl2MzIoczMyIGEsIHMzMiBiKVxuK3tcbitcdGlmIChiID09IDApXG4rXHRcdHJldHVybiAwO1xuK1x0aWYgKGEgPT0gUzMyX01JTiBcdTAwMjZcdTAwMjYgYiA9PSAtMSlcbitcdFx0cmV0dXJuIFMzMl9NSU47XG4rXHRyZXR1cm4gYSAvIGI7XG4rfVxuK1xuK3N0YXRpYyBub2lubGluZSBzMzIgaml0X3Ntb2QzMihzMzIgYSwgczMyIGIpXG4re1xuK1x0aWYgKGIgPT0gMClcbitcdFx0cmV0dXJuIGE7XG4rXHRpZiAoYSA9PSBTMzJfTUlOIFx1MDAyNlx1MDAyNiBiID09IC0xKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiBhICUgYjtcbit9XG4rXG4rc3RhdGljIG5vaW5saW5lIHU2NCBqaXRfbXVsNjQodTY0IGEsIHU2NCBiKVxuK3tcbitcdHJldHVybiBhICogYjtcbit9XG4rXG4rc3RhdGljIG5vaW5saW5lIHU2NCBqaXRfZGl2NjQodTY0IGEsIHU2NCBiKVxuK3tcbitcdHJldHVybiBiID8gZGl2NjRfdTY0KGEsIGIpIDogMDtcbit9XG4rXG4rc3RhdGljIG5vaW5saW5lIHM2NCBqaXRfc2RpdjY0KHM2NCBhLCBzNjQgYilcbit7XG4rXHRpZiAoYiA9PSAwKVxuK1x0XHRyZXR1cm4gMDtcbitcdGlmIChhID09IFM2NF9NSU4gXHUwMDI2XHUwMDI2IGIgPT0gLTEpXG4rXHRcdHJldHVybiBTNjRfTUlOO1xuK1x0cmV0dXJuIGRpdjY0X3M2NChhLCBiKTtcbit9XG4rXG4rc3RhdGljIG5vaW5saW5lIHU2NCBqaXRfbW9kNjQodTY0IGEsIHU2NCBiKVxuK3tcbitcdHU2NCByZW07XG4rXG4rXHRpZiAoYiA9PSAwKVxuK1x0XHRyZXR1cm4gYTtcbitcdGRpdjY0X3U2NF9yZW0oYSwgYiwgXHUwMDI2cmVtKTtcbitcdHJldHVybiByZW07XG4rfVxuK1xuK3N0YXRpYyBub2lubGluZSBzNjQgaml0X3Ntb2Q2NChzNjQgYSwgczY0IGIpXG4re1xuK1x0aWYgKGIgPT0gMClcbitcdFx0cmV0dXJuIGE7XG4rXHRpZiAoYSA9PSBTNjRfTUlOIFx1MDAyNlx1MDAyNiBiID09IC0xKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiBhIC0gZGl2NjRfczY0KGEsIGIpICogYjtcbit9XG4rXG4rc3RhdGljIHUzMiBqaXRfYXRvbWljMzIodTMyICpwdHIsIHUzMiB2YWwsIHUzMiBvcCwgdTMyIGNtcClcbit7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0dTMyIG9sZDtcbitcbitcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdG9sZCA9ICpwdHI7XG4rXHRzd2l0Y2ggKG9wKSB7XG4rXHRjYXNlIEJQRl9BREQ6XG4rXHRjYXNlIEJQRl9BREQgfCBCUEZfRkVUQ0g6XG4rXHRcdCpwdHIgKz0gdmFsO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0FORDpcbitcdGNhc2UgQlBGX0FORCB8IEJQRl9GRVRDSDpcbitcdFx0KnB0ciBcdTAwMjY9IHZhbDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9PUjpcbitcdGNhc2UgQlBGX09SIHwgQlBGX0ZFVENIOlxuK1x0XHQqcHRyIHw9IHZhbDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9YT1I6XG4rXHRjYXNlIEJQRl9YT1IgfCBCUEZfRkVUQ0g6XG4rXHRcdCpwdHIgXj0gdmFsO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX1hDSEc6XG4rXHRcdCpwdHIgPSB2YWw7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfQ01QWENIRzpcbitcdFx0aWYgKG9sZCA9PSBjbXApXG4rXHRcdFx0KnB0ciA9IHZhbDtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4rXG4rXHRyZXR1cm4gb2xkO1xuK31cbitcbitzdGF0aWMgdTY0IGppdF9hdG9taWM2NCh1MzIgKnB0ciwgdTMyIHZhbF9oaSwgdTMyIHZhbF9sbywgdTMyIG9wLCB1MzIgY21wX2hpLCB1MzIgY21wX2xvKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHR1NjQgb2xkLCB2YWwsIGNtcDtcbitcdHU2NCAqcHRyNjQgPSAodTY0ICopcHRyO1xuK1xuK1x0dmFsID0gKCh1NjQpdmFsX2hpIFx1MDAzY1x1MDAzYyAzMikgfCB2YWxfbG87XG4rXHRjbXAgPSAoKHU2NCljbXBfaGkgXHUwMDNjXHUwMDNjIDMyKSB8IGNtcF9sbztcbitcbitcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdG9sZCA9ICpwdHI2NDtcbitcdHN3aXRjaCAob3ApIHtcbitcdGNhc2UgQlBGX0FERDpcbitcdGNhc2UgQlBGX0FERCB8IEJQRl9GRVRDSDpcbitcdFx0KnB0cjY0ICs9IHZhbDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9BTkQ6XG4rXHRjYXNlIEJQRl9BTkQgfCBCUEZfRkVUQ0g6XG4rXHRcdCpwdHI2NCBcdTAwMjY9IHZhbDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9PUjpcbitcdGNhc2UgQlBGX09SIHwgQlBGX0ZFVENIOlxuK1x0XHQqcHRyNjQgfD0gdmFsO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX1hPUjpcbitcdGNhc2UgQlBGX1hPUiB8IEJQRl9GRVRDSDpcbitcdFx0KnB0cjY0IF49IHZhbDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9YQ0hHOlxuK1x0XHQqcHRyNjQgPSB2YWw7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfQ01QWENIRzpcbitcdFx0aWYgKG9sZCA9PSBjbXApXG4rXHRcdFx0KnB0cjY0ID0gdmFsO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbitcbitcdHJldHVybiBvbGQ7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBlbWl0XzE2KHN0cnVjdCBqaXRfY3R4ICpjdHgsIHUxNiBpbnN0KVxuK3tcbitcdGlmIChjdHgtXHUwMDNldGFyZ2V0KVxuK1x0XHRjdHgtXHUwMDNldGFyZ2V0W2N0eC1cdTAwM2VpZHhdID0gaW5zdDtcbitcdGN0eC1cdTAwM2VpZHgrKztcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGVtaXRfMzIoc3RydWN0IGppdF9jdHggKmN0eCwgdTMyIHZhbClcbit7XG4rXHRlbWl0XzE2KGN0eCwgdmFsIFx1MDAzZVx1MDAzZSAxNik7XG4rXHRlbWl0XzE2KGN0eCwgdmFsIFx1MDAyNiAweGZmZmYpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfc3RhY2tlZChzOCByZWcpXG4re1xuK1x0cmV0dXJuIHJlZyBcdTAwM2MgMDtcbit9XG4rXG4rc3RhdGljIHM4IGJwZl9nZXRfcmVnMzIoczggYnBmX3JlZywgczggdG1wX3JlZywgc3RydWN0IGppdF9jdHggKmN0eClcbit7XG4rXHRpZiAoaXNfc3RhY2tlZChicGZfcmVnKSkge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDJlIHwgKHRtcF9yZWcgXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZS5sIGQxNiglZnApLCByZWcgKi9cbitcdFx0ZW1pdF8xNihjdHgsICh1MTYpYnBmX3JlZyk7XG4rXHRcdHJldHVybiB0bXBfcmVnO1xuK1x0fVxuK1x0cmV0dXJuIGJwZl9yZWc7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGJwZl9wdXRfcmVnMzIoczggYnBmX3JlZywgczggc3JjX3JlZywgc3RydWN0IGppdF9jdHggKmN0eClcbit7XG4rXHRpZiAoaXNfc3RhY2tlZChicGZfcmVnKSkge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyZDQwIHwgc3JjX3JlZyk7XHRcdFx0LyogbW92ZS5sIHJlZywgZDE2KCVmcCkgKi9cbitcdFx0ZW1pdF8xNihjdHgsICh1MTYpYnBmX3JlZyk7XG4rXHR9IGVsc2UgaWYgKGJwZl9yZWcgIT0gc3JjX3JlZykge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGJwZl9yZWcgXHUwMDNjXHUwMDNjIDkpIHwgc3JjX3JlZyk7IC8qIG1vdmUubCBzcmMsIGRzdCAqL1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBlbWl0X2FsdTMyX25lZyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4re1xuK1x0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXHUwMDNlZHN0X3JlZ107XG4rXHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4rXHRzOCBkX3JlZyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpO1xuK1xuK1x0ZW1pdF8xNihjdHgsIDB4NDQ4MCB8IGRfcmVnKTtcdFx0XHRcdC8qIG5lZy5sIGRfcmVnICovXG4rXG4rXHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9yZWcsIGN0eCk7XG4rXHRlbWl0XzE2KGN0eCwgMHg3MDAwIHwgKHRtcDFbMF0gXHUwMDNjXHUwMDNjIDkpKTtcdFx0XHQvKiBtb3ZlcSAjMCwgdG1wMSAqL1xuK1x0YnBmX3B1dF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVtaXRfYWx1NjRfbmVnKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbit7XG4rXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbitcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcbitcdHM4IGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcbitcdHM4IGRfaGkgPSBicGZfZ2V0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcbitcbitcdGVtaXRfMTYoY3R4LCAweDQ0ODAgfCBkX2xvKTtcdFx0XHRcdC8qIG5lZy5sIGRfbG8gKi9cbitcdGVtaXRfMTYoY3R4LCAweDQwODAgfCBkX2hpKTtcdFx0XHRcdC8qIG5lZ3gubCBkX2hpICovXG4rXG4rXHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9sbywgY3R4KTtcbitcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbWl0X2FsdTMyX3goY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuK3tcbitcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVx1MDAzZWRzdF9yZWddO1xuK1x0Y29uc3QgczggKnNyYyA9IGJwZjJtNjhrW2luc24tXHUwMDNlc3JjX3JlZ107XG4rXHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4rXHRjb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07XG4rXHRzOCBkX3JlZywgc19yZWc7XG4rXG4rXHRkX3JlZyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpO1xuK1x0c19yZWcgPSBicGZfZ2V0X3JlZzMyKHNyY1sxXSwgdG1wMlsxXSwgY3R4KTtcbitcbitcdHN3aXRjaCAoQlBGX09QKGluc24tXHUwMDNlY29kZSkpIHtcbitcdGNhc2UgQlBGX01PVjpcbitcdFx0aWYgKGluc24tXHUwMDNlb2ZmID09IDggfHwgaW5zbi1cdTAwM2VvZmYgPT0gMTYpIHtcbitcdFx0XHRpZiAoZF9yZWcgIT0gc19yZWcpXG4rXHRcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IHNfcmVnKTsgLyogbW92ZS5sIHNyYywgZHN0ICovXG4rXHRcdFx0aWYgKGluc24tXHUwMDNlb2ZmID09IDgpXG4rXHRcdFx0XHRlbWl0XzE2KGN0eCwgMHg0OWMwIHwgZF9yZWcpO1x0LyogZXh0Yi5sIGRfcmVnICovXG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0ZW1pdF8xNihjdHgsIDB4NDhjMCB8IGRfcmVnKTtcdC8qIGV4dC5sIGRfcmVnICovXG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0aWYgKGRfcmVnICE9IHNfcmVnKVxuK1x0XHRcdFx0ZW1pdF8xNihjdHgsIDB4MjAwMCB8IChkX3JlZyBcdTAwM2NcdTAwM2MgOSkgfCBzX3JlZyk7IC8qIG1vdmUubCBzcmMsIGRzdCAqL1xuK1x0XHR9XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfQUREOlxuK1x0XHRlbWl0XzE2KGN0eCwgMHhkMDgwIHwgKGRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IHNfcmVnKTtcdC8qIGFkZC5sIHNyYywgZHN0ICovXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfU1VCOlxuK1x0XHRlbWl0XzE2KGN0eCwgMHg5MDgwIHwgKGRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IHNfcmVnKTtcdC8qIHN1Yi5sIHNyYywgZHN0ICovXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfQU5EOlxuK1x0XHRlbWl0XzE2KGN0eCwgMHhjMDgwIHwgKGRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IHNfcmVnKTtcdC8qIGFuZC5sIHNyYywgZHN0ICovXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfT1I6XG4rXHRcdGVtaXRfMTYoY3R4LCAweDgwODAgfCAoZF9yZWcgXHUwMDNjXHUwMDNjIDkpIHwgc19yZWcpO1x0Lyogb3IubCBzcmMsIGRzdCAqL1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX1hPUjpcbitcdFx0ZW1pdF8xNihjdHgsIDB4YjE4MCB8IChzX3JlZyBcdTAwM2NcdTAwM2MgOSkgfCBkX3JlZyk7XHQvKiBlb3IubCBzcmMsIGRzdCAqL1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0xTSDpcbitcdGNhc2UgQlBGX1JTSDpcbitcdGNhc2UgQlBGX0FSU0g6IHtcbitcdFx0czggY291bnRfcmVnID0gdG1wMlsxXTtcbitcbitcdFx0aWYgKHNfcmVnICE9IGNvdW50X3JlZylcbitcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGNvdW50X3JlZyBcdTAwM2NcdTAwM2MgOSkgfCBzX3JlZyk7IC8qIG1vdmUubCBzcmMsIGNvdW50ICovXG4rXG4rXHRcdGVtaXRfMTYoY3R4LCAweDAyODAgfCBjb3VudF9yZWcpO1x0XHQvKiBhbmRpLmwgI2ltbSwgY291bnQgKi9cbitcdFx0ZW1pdF8zMihjdHgsIDB4MWYpO1xuK1xuK1x0XHRpZiAoQlBGX09QKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0xTSClcbitcdFx0XHRlbWl0XzE2KGN0eCwgMHhlMWE4IHwgKGNvdW50X3JlZyBcdTAwM2NcdTAwM2MgOSkgfCBkX3JlZyk7IC8qIGxzbC5sIGNvdW50LCBkc3QgKi9cbitcdFx0ZWxzZSBpZiAoQlBGX09QKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1JTSClcbitcdFx0XHRlbWl0XzE2KGN0eCwgMHhlMGE4IHwgKGNvdW50X3JlZyBcdTAwM2NcdTAwM2MgOSkgfCBkX3JlZyk7IC8qIGxzci5sIGNvdW50LCBkc3QgKi9cbitcdFx0ZWxzZVxuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGUwYTAgfCAoY291bnRfcmVnIFx1MDAzY1x1MDAzYyA5KSB8IGRfcmVnKTsgLyogYXNyLmwgY291bnQsIGRzdCAqL1xuK1x0XHRicmVhaztcbitcdH1cbitcdH1cbitcbitcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX3JlZywgY3R4KTtcbitcdGVtaXRfMTYoY3R4LCAweDcwMDAgfCAodG1wMVswXSBcdTAwM2NcdTAwM2MgOSkpO1x0XHRcdC8qIG1vdmVxICMwLCB0bXAxICovXG4rXHRicGZfcHV0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZW1pdF9hbHUzMl9rKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbit7XG4rXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbitcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcbitcdGNvbnN0IHM4ICp0bXAyID0gYnBmMm02OGtbVE1QX1JFR18yXTtcbitcdHM4IGRfcmVnO1xuK1xuK1x0ZF9yZWcgPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcbitcbitcdHN3aXRjaCAoQlBGX09QKGluc24tXHUwMDNlY29kZSkpIHtcbitcdGNhc2UgQlBGX01PVjpcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjAzYyB8IChkX3JlZyBcdTAwM2NcdTAwM2MgOSkpO1x0XHQvKiBtb3ZlLmwgI2ltbSwgZHN0ICovXG4rXHRcdGVtaXRfMzIoY3R4LCBpbnNuLVx1MDAzZWltbSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfQUREOlxuK1x0XHRlbWl0XzE2KGN0eCwgMHgwNjgwIHwgZF9yZWcpO1x0XHRcdC8qIGFkZGkubCAjaW1tLCBkc3QgKi9cbitcdFx0ZW1pdF8zMihjdHgsIGluc24tXHUwMDNlaW1tKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9TVUI6XG4rXHRcdGVtaXRfMTYoY3R4LCAweDA0ODAgfCBkX3JlZyk7XHRcdFx0Lyogc3ViaS5sICNpbW0sIGRzdCAqL1xuK1x0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0FORDpcbitcdFx0ZW1pdF8xNihjdHgsIDB4MDI4MCB8IGRfcmVnKTtcdFx0XHQvKiBhbmRpLmwgI2ltbSwgZHN0ICovXG4rXHRcdGVtaXRfMzIoY3R4LCBpbnNuLVx1MDAzZWltbSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfT1I6XG4rXHRcdGVtaXRfMTYoY3R4LCAweDAwODAgfCBkX3JlZyk7XHRcdFx0Lyogb3JpLmwgI2ltbSwgZHN0ICovXG4rXHRcdGVtaXRfMzIoY3R4LCBpbnNuLVx1MDAzZWltbSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfWE9SOlxuK1x0XHRlbWl0XzE2KGN0eCwgMHgwYTgwIHwgZF9yZWcpO1x0XHRcdC8qIGVvcmkubCAjaW1tLCBkc3QgKi9cbitcdFx0ZW1pdF8zMihjdHgsIGluc24tXHUwMDNlaW1tKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9MU0g6XG4rXHRjYXNlIEJQRl9SU0g6XG4rXHRjYXNlIEJQRl9BUlNIOlxuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHRtcDJbMV0gXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZS5sICNpbW0sIGNvdW50ICovXG4rXHRcdGVtaXRfMzIoY3R4LCBpbnNuLVx1MDAzZWltbSBcdTAwMjYgMHgxZik7XG4rXG4rXHRcdGlmIChCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTFNIKVxuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGUxYTggfCAodG1wMlsxXSBcdTAwM2NcdTAwM2MgOSkgfCBkX3JlZyk7XHQvKiBsc2wubCBjb3VudCwgZHN0ICovXG4rXHRcdGVsc2UgaWYgKEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9SU0gpXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4ZTBhOCB8ICh0bXAyWzFdIFx1MDAzY1x1MDAzYyA5KSB8IGRfcmVnKTtcdC8qIGxzci5sIGNvdW50LCBkc3QgKi9cbitcdFx0ZWxzZVxuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGUwYTAgfCAodG1wMlsxXSBcdTAwM2NcdTAwM2MgOSkgfCBkX3JlZyk7XHQvKiBhc3IubCBjb3VudCwgZHN0ICovXG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0YnBmX3B1dF9yZWczMihkc3RbMV0sIGRfcmVnLCBjdHgpO1xuK1x0ZW1pdF8xNihjdHgsIDB4NzAwMCB8ICh0bXAxWzBdIFx1MDAzY1x1MDAzYyA5KSk7XHRcdFx0LyogbW92ZXEgIzAsIHRtcDEgKi9cbitcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbWl0X2FsdTY0X3goY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuK3tcbitcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVx1MDAzZWRzdF9yZWddO1xuK1x0Y29uc3QgczggKnNyYyA9IGJwZjJtNjhrW2luc24tXHUwMDNlc3JjX3JlZ107XG4rXHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4rXHRjb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07XG4rXHRzOCBkX2xvLCBkX2hpLCBzX2xvLCBzX2hpO1xuK1xuK1x0ZF9sbyA9IGJwZl9nZXRfcmVnMzIoZHN0WzFdLCB0bXAxWzFdLCBjdHgpO1xuK1x0ZF9oaSA9IGJwZl9nZXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpO1xuK1x0c19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpO1xuK1x0c19oaSA9IGJwZl9nZXRfcmVnMzIoc3JjWzBdLCB0bXAyWzBdLCBjdHgpO1xuK1xuK1x0c3dpdGNoIChCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSkge1xuK1x0Y2FzZSBCUEZfTU9WOlxuK1x0XHRpZiAoaW5zbi1cdTAwM2VvZmYgPT0gOCB8fCBpbnNuLVx1MDAzZW9mZiA9PSAxNiB8fCBpbnNuLVx1MDAzZW9mZiA9PSAzMikge1xuK1x0XHRcdGlmIChkX2xvICE9IHNfbG8pXG4rXHRcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7IC8qIG1vdmUubCBzcmMsIGRzdCAqL1xuK1xuK1x0XHRcdGlmIChpbnNuLVx1MDAzZW9mZiA9PSA4KVxuK1x0XHRcdFx0ZW1pdF8xNihjdHgsIDB4NDljMCB8IGRfbG8pO1x0XHQvKiBleHRiLmwgZF9sbyAqL1xuK1x0XHRcdGVsc2UgaWYgKGluc24tXHUwMDNlb2ZmID09IDE2KVxuK1x0XHRcdFx0ZW1pdF8xNihjdHgsIDB4NDhjMCB8IGRfbG8pO1x0XHQvKiBleHQubCBkX2xvICovXG4rXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NGE4MCB8IGRfbG8pO1x0XHRcdC8qIHRzdC5sIGRfbG8gKi9cbitcdFx0XHRlbWl0XzE2KGN0eCwgMHg1YmMwIHwgZF9oaSk7XHRcdFx0Lyogc21pIGRfaGkgKi9cbitcdFx0XHRlbWl0XzE2KGN0eCwgMHg0OWMwIHwgZF9oaSk7XHRcdFx0LyogZXh0Yi5sIGRfaGkgKi9cbitcdFx0fSBlbHNlIHtcbitcdFx0XHRpZiAoZF9sbyAhPSBzX2xvKVxuK1x0XHRcdFx0ZW1pdF8xNihjdHgsIDB4MjAwMCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSB8IHNfbG8pOyAvKiBtb3ZlLmwgc19sbywgZF9sbyAqL1xuK1x0XHRcdGlmIChkX2hpICE9IHNfaGkpXG4rXHRcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpIHwgc19oaSk7IC8qIG1vdmUubCBzX2hpLCBkX2hpICovXG4rXHRcdH1cbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9BREQ6XG4rXHRcdGVtaXRfMTYoY3R4LCAweGQwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTtcdFx0LyogYWRkLmwgc19sbywgZF9sbyAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHhkMTgwIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpIHwgc19oaSk7XHRcdC8qIGFkZHgubCBzX2hpLCBkX2hpICovXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfU1VCOlxuK1x0XHRlbWl0XzE2KGN0eCwgMHg5MDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7XHRcdC8qIHN1Yi5sIHNfbG8sIGRfbG8gKi9cbitcdFx0ZW1pdF8xNihjdHgsIDB4OTE4MCB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSB8IHNfaGkpO1x0XHQvKiBzdWJ4Lmwgc19oaSwgZF9oaSAqL1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0FORDpcbitcdFx0ZW1pdF8xNihjdHgsIDB4YzA4MCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSB8IHNfbG8pO1x0XHQvKiBhbmQubCBzX2xvLCBkX2xvICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweGMwODAgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkgfCBzX2hpKTtcdFx0LyogYW5kLmwgc19oaSwgZF9oaSAqL1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX09SOlxuK1x0XHRlbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7XHRcdC8qIG9yLmwgc19sbywgZF9sbyAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpIHwgc19oaSk7XHRcdC8qIG9yLmwgc19oaSwgZF9oaSAqL1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX1hPUjpcbitcdFx0ZW1pdF8xNihjdHgsIDB4YjE4MCB8IChzX2xvIFx1MDAzY1x1MDAzYyA5KSB8IGRfbG8pO1x0XHQvKiBlb3IubCBzX2xvLCBkX2xvICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweGIxODAgfCAoc19oaSBcdTAwM2NcdTAwM2MgOSkgfCBkX2hpKTtcdFx0LyogZW9yLmwgc19oaSwgZF9oaSAqL1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX2xvLCBjdHgpO1xuK1x0YnBmX3B1dF9yZWczMihkc3RbMF0sIGRfaGksIGN0eCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVtaXRfYWx1NjRfayhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4re1xuK1x0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXHUwMDNlZHN0X3JlZ107XG4rXHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4rXHRjb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07XG4rXHRzOCBkX2xvLCBkX2hpLCBzX2xvLCBzX2hpO1xuK1x0dTMyIGltbV9sbyA9IGluc24tXHUwMDNlaW1tO1xuK1x0dTMyIGltbV9oaSA9IGluc24tXHUwMDNlaW1tIFx1MDAzYyAwID8gMHhmZmZmZmZmZiA6IDA7XG4rXG4rXHRkX2xvID0gYnBmX2dldF9yZWczMihkc3RbMV0sIHRtcDFbMV0sIGN0eCk7XG4rXHRkX2hpID0gYnBmX2dldF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7XG4rXG4rXHRpZiAoQlBGX09QKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX01PVikge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpKTtcdFx0XHQvKiBtb3ZlLmwgI2ltbSwgZF9sbyAqL1xuK1x0XHRlbWl0XzMyKGN0eCwgaW1tX2xvKTtcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjAzYyB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSk7XHRcdFx0LyogbW92ZS5sICNpbW0sIGRfaGkgKi9cbitcdFx0ZW1pdF8zMihjdHgsIGltbV9oaSk7XG4rXHRcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX2xvLCBjdHgpO1xuK1x0XHRicGZfcHV0X3JlZzMyKGRzdFswXSwgZF9oaSwgY3R4KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0c19sbyA9IHRtcDJbMV07XG4rXHRzX2hpID0gdG1wMlswXTtcbitcbitcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAoc19sbyBcdTAwM2NcdTAwM2MgOSkpO1x0XHRcdFx0LyogbW92ZS5sICNpbW0sIHNfbG8gKi9cbitcdGVtaXRfMzIoY3R4LCBpbW1fbG8pO1xuK1x0ZW1pdF8xNihjdHgsIDB4MjAzYyB8IChzX2hpIFx1MDAzY1x1MDAzYyA5KSk7XHRcdFx0XHQvKiBtb3ZlLmwgI2ltbSwgc19oaSAqL1xuK1x0ZW1pdF8zMihjdHgsIGltbV9oaSk7XG4rXG4rXHRzd2l0Y2ggKEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpKSB7XG4rXHRjYXNlIEJQRl9BREQ6XG4rXHRcdGVtaXRfMTYoY3R4LCAweGQwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTtcdFx0LyogYWRkLmwgc19sbywgZF9sbyAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHhkMTgwIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpIHwgc19oaSk7XHRcdC8qIGFkZHgubCBzX2hpLCBkX2hpICovXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfU1VCOlxuK1x0XHRlbWl0XzE2KGN0eCwgMHg5MDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7XHRcdC8qIHN1Yi5sIHNfbG8sIGRfbG8gKi9cbitcdFx0ZW1pdF8xNihjdHgsIDB4OTE4MCB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSB8IHNfaGkpO1x0XHQvKiBzdWJ4Lmwgc19oaSwgZF9oaSAqL1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0FORDpcbitcdFx0ZW1pdF8xNihjdHgsIDB4YzA4MCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSB8IHNfbG8pO1x0XHQvKiBhbmQubCBzX2xvLCBkX2xvICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweGMwODAgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkgfCBzX2hpKTtcdFx0LyogYW5kLmwgc19oaSwgZF9oaSAqL1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX09SOlxuK1x0XHRlbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7XHRcdC8qIG9yLmwgc19sbywgZF9sbyAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHg4MDgwIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpIHwgc19oaSk7XHRcdC8qIG9yLmwgc19oaSwgZF9oaSAqL1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX1hPUjpcbitcdFx0ZW1pdF8xNihjdHgsIDB4YjE4MCB8IChzX2xvIFx1MDAzY1x1MDAzYyA5KSB8IGRfbG8pO1x0XHQvKiBlb3IubCBzX2xvLCBkX2xvICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweGIxODAgfCAoc19oaSBcdTAwM2NcdTAwM2MgOSkgfCBkX2hpKTtcdFx0LyogZW9yLmwgc19oaSwgZF9oaSAqL1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX2xvLCBjdHgpO1xuK1x0YnBmX3B1dF9yZWczMihkc3RbMF0sIGRfaGksIGN0eCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVtaXRfYWx1NjRfc2hpZnQoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIGlzX2ltbSlcbit7XG4rXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbitcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcbitcdGNvbnN0IHM4ICp0bXAyID0gYnBmMm02OGtbVE1QX1JFR18yXTtcbitcdHM4IGRfbG8sIGRfaGksIGNvdW50X3JlZztcbitcdGludCBsb29wX3N0YXJ0LCBkb25lX2lkeDtcbitcbitcdGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcbitcdGRfaGkgPSBicGZfZ2V0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcbitcdGNvdW50X3JlZyA9IHRtcDJbMV07XG4rXG4rXHRpZiAoaXNfaW1tKSB7XG4rXHRcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAoY291bnRfcmVnIFx1MDAzY1x1MDAzYyA5KSk7XHRcdC8qIG1vdmUubCAjaW1tLCBjb3VudF9yZWcgKi9cbitcdFx0ZW1pdF8zMihjdHgsIGluc24tXHUwMDNlaW1tKTtcbitcdH0gZWxzZSB7XG4rXHRcdGNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLVx1MDAzZXNyY19yZWddO1xuK1x0XHRzOCBzX2xvID0gYnBmX2dldF9yZWczMihzcmNbMV0sIHRtcDJbMV0sIGN0eCk7XG4rXG4rXHRcdGlmIChjb3VudF9yZWcgIT0gc19sbylcbitcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKGNvdW50X3JlZyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTtcdC8qIG1vdmUubCBzX2xvLCBjb3VudF9yZWcgKi9cbitcdH1cbitcbitcdGVtaXRfMTYoY3R4LCAweDAyODAgfCBjb3VudF9yZWcpO1x0XHRcdC8qIGFuZGkubCAjMHgzZiwgY291bnRfcmVnICovXG4rXHRlbWl0XzMyKGN0eCwgMHgzZik7XG4rXG4rXHRlbWl0XzE2KGN0eCwgMHg0YTgwIHwgY291bnRfcmVnKTtcdFx0XHRcdC8qIHRzdC5sIGNvdW50X3JlZyAqL1xuK1x0ZW1pdF8xNihjdHgsIDB4NjcwMCk7XHRcdFx0XHRcdFx0LyogYmVxLncgZG9uZV9pZHggKi9cbitcdGRvbmVfaWR4ID0gY3R4LVx1MDAzZWlkeDtcbitcdGVtaXRfMTYoY3R4LCAwKTtcbitcbitcdGxvb3Bfc3RhcnQgPSBjdHgtXHUwMDNlaWR4O1xuK1xuK1x0aWYgKEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9MU0gpIHtcbitcdFx0ZW1pdF8xNihjdHgsIDB4ZTM4OCB8IGRfbG8pO1x0XHRcdFx0LyogbHNsbCAjMSwgZF9sbyAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHhlMzkwIHwgZF9oaSk7XHRcdFx0XHQvKiByb3hsLmwgIzEsIGRfaGkgKi9cbitcdH0gZWxzZSBpZiAoQlBGX09QKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1JTSCkge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHhlMjg4IHwgZF9oaSk7XHRcdFx0XHQvKiBsc3JsICMxLCBkX2hpICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweGUyOTAgfCBkX2xvKTtcdFx0XHRcdC8qIHJveHIubCAjMSwgZF9sbyAqL1xuK1x0fSBlbHNlIGlmIChCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQVJTSCkge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHhlMjgwIHwgZF9oaSk7XHRcdFx0XHQvKiBhc3JsICMxLCBkX2hpICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweGUyOTAgfCBkX2xvKTtcdFx0XHRcdC8qIHJveHIubCAjMSwgZF9sbyAqL1xuK1x0fVxuK1xuK1x0ZW1pdF8xNihjdHgsIDB4NTM4MCB8IGNvdW50X3JlZyk7XHRcdFx0XHQvKiBzdWJxLmwgIzEsIGNvdW50X3JlZyAqL1xuK1x0ZW1pdF8xNihjdHgsIDB4NjYwMCk7XHRcdFx0XHRcdFx0LyogYm5lLncgbG9vcF9zdGFydCAqL1xuK1x0ZW1pdF8xNihjdHgsIChsb29wX3N0YXJ0IC0gKGludCljdHgtXHUwMDNlaWR4KSAqIDIpO1xuK1xuK1x0aWYgKGN0eC1cdTAwM2V0YXJnZXQpXG4rXHRcdGN0eC1cdTAwM2V0YXJnZXRbZG9uZV9pZHhdID0gKGN0eC1cdTAwM2VpZHggLSBkb25lX2lkeCkgKiAyO1xuK1xuK1x0YnBmX3B1dF9yZWczMihkc3RbMV0sIGRfbG8sIGN0eCk7XG4rXHRicGZfcHV0X3JlZzMyKGRzdFswXSwgZF9oaSwgY3R4KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZW1pdF9icGZfZW5kKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbit7XG4rXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbitcdGNvbnN0IHM4ICp0bXAxID0gYnBmMm02OGtbVE1QX1JFR18xXTtcbitcdHM4IGRfbG8sIGRfaGk7XG4rXHRib29sIHRvX2xlID0gQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9UT19MRTtcbitcdGludCBpbW0gPSBpbnNuLVx1MDAzZWltbTtcbitcbitcdGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcbitcdGRfaGkgPSBicGZfZ2V0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcbitcbitcdGlmICh0b19sZSkge1xuK1x0XHRzd2l0Y2ggKGltbSkge1xuK1x0XHRjYXNlIDE2OlxuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDAyODAgfCBkX2xvKTtcdFx0XHQvKiBhbmRpLmwgIzB4ZmZmZiwgZF9sbyAqL1xuK1x0XHRcdGVtaXRfMzIoY3R4LCAweGZmZmYpO1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGUwNTggfCBkX2xvKTtcdFx0XHQvKiByb3IudyAjOCwgZF9sbyAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDcwMDAgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkpO1x0XHQvKiBtb3ZlcSAjMCwgZF9oaSAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIDMyOlxuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGUwNTggfCBkX2xvKTtcdFx0XHQvKiByb3IudyAjOCwgZF9sbyAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDQ4NDAgfCBkX2xvKTtcdFx0XHQvKiBzd2FwIGRfbG8gKi9cbitcdFx0XHRlbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9sbyk7XHRcdFx0Lyogcm9yLncgIzgsIGRfbG8gKi9cbitcdFx0XHRlbWl0XzE2KGN0eCwgMHg3MDAwIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZXEgIzAsIGRfaGkgKi9cbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSA2NDpcbitcdFx0XHRlbWl0XzE2KGN0eCwgMHhlMDU4IHwgZF9sbyk7XHRcdFx0Lyogcm9yLncgIzgsIGRfbG8gKi9cbitcdFx0XHRlbWl0XzE2KGN0eCwgMHg0ODQwIHwgZF9sbyk7XHRcdFx0Lyogc3dhcCBkX2xvICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4ZTA1OCB8IGRfbG8pO1x0XHRcdC8qIHJvci53ICM4LCBkX2xvICovXG4rXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4ZTA1OCB8IGRfaGkpO1x0XHRcdC8qIHJvci53ICM4LCBkX2hpICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NDg0MCB8IGRfaGkpO1x0XHRcdC8qIHN3YXAgZF9oaSAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGUwNTggfCBkX2hpKTtcdFx0XHQvKiByb3IudyAjOCwgZF9oaSAqL1xuK1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGMxNDAgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkgfCBkX2xvKTtcdC8qIGV4ZyBkX2xvLCBkX2hpICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdHN3aXRjaCAoaW1tKSB7XG4rXHRcdGNhc2UgMTY6XG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4MDI4MCB8IGRfbG8pO1x0XHRcdC8qIGFuZGkubCAjMHhmZmZmLCBkX2xvICovXG4rXHRcdFx0ZW1pdF8zMihjdHgsIDB4ZmZmZik7XG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSk7XHRcdC8qIG1vdmVxICMwLCBkX2hpICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgMzI6XG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSk7XHRcdC8qIG1vdmVxICMwLCBkX2hpICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgNjQ6XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcbitcdGJwZl9wdXRfcmVnMzIoZHN0WzFdLCBkX2xvLCBjdHgpO1xuK1x0YnBmX3B1dF9yZWczMihkc3RbMF0sIGRfaGksIGN0eCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVtaXRfbWF0aF9jYWxsKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBpc182NClcbit7XG4rXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbitcdGNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLVx1MDAzZXNyY19yZWddO1xuK1x0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xuK1x0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xuK1x0czggZF9sbywgZF9oaSwgc19sbywgc19oaSA9IDA7XG4rXHR2b2lkICpmdW5jID0gTlVMTDtcbitcdHU4IG9wID0gQlBGX09QKGluc24tXHUwMDNlY29kZSk7XG4rXG4rXHRkX2xvID0gYnBmX2dldF9yZWczMihkc3RbMV0sIHRtcDFbMV0sIGN0eCk7XG4rXHRkX2hpID0gYnBmX2dldF9yZWczMihkc3RbMF0sIHRtcDFbMF0sIGN0eCk7XG4rXG4rXHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YKSB7XG4rXHRcdHNfbG8gPSBicGZfZ2V0X3JlZzMyKHNyY1sxXSwgdG1wMlsxXSwgY3R4KTtcbitcdFx0aWYgKGlzXzY0KVxuK1x0XHRcdHNfaGkgPSBicGZfZ2V0X3JlZzMyKHNyY1swXSwgdG1wMlswXSwgY3R4KTtcbitcdH0gZWxzZSB7XG4rXHRcdHNfbG8gPSB0bXAyWzFdO1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHNfbG8gXHUwMDNjXHUwMDNjIDkpKTtcdFx0XHQvKiBtb3ZlLmwgI2ltbSwgc19sbyAqL1xuK1x0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuK1x0XHRpZiAoaXNfNjQpIHtcbitcdFx0XHRzX2hpID0gdG1wMlswXTtcbitcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHNfaGkgXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZS5sICNpbW0sIHNfaGkgKi9cbitcdFx0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0gXHUwMDNjIDAgPyAweGZmZmZmZmZmIDogMCk7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChpc182NCkge1xuK1x0XHRzd2l0Y2ggKG9wKSB7XG4rXHRcdGNhc2UgQlBGX01VTDpcbitcdFx0XHRmdW5jID0gKHZvaWQgKilqaXRfbXVsNjQ7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX0RJVjpcbitcdFx0XHRmdW5jID0gKHZvaWQgKilqaXRfZGl2NjQ7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX01PRDpcbitcdFx0XHRmdW5jID0gKHZvaWQgKilqaXRfbW9kNjQ7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFU2NCBcdTAwMjZcdTAwMjYgb3AgPT0gQlBGX0RJViBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gMSlcbitcdFx0XHRmdW5jID0gKHZvaWQgKilqaXRfc2RpdjY0O1xuK1x0XHRpZiAoQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FMVTY0IFx1MDAyNlx1MDAyNiBvcCA9PSBCUEZfTU9EIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZW9mZiA9PSAxKVxuK1x0XHRcdGZ1bmMgPSAodm9pZCAqKWppdF9zbW9kNjQ7XG4rXHR9IGVsc2Uge1xuK1x0XHRzd2l0Y2ggKG9wKSB7XG4rXHRcdGNhc2UgQlBGX01VTDpcbitcdFx0XHRmdW5jID0gKHZvaWQgKilqaXRfbXVsMzI7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX0RJVjpcbitcdFx0XHRmdW5jID0gKHZvaWQgKilqaXRfZGl2MzI7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX01PRDpcbitcdFx0XHRmdW5jID0gKHZvaWQgKilqaXRfbW9kMzI7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFUgXHUwMDI2XHUwMDI2IG9wID09IEJQRl9ESVYgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlb2ZmID09IDEpXG4rXHRcdFx0ZnVuYyA9ICh2b2lkICopaml0X3NkaXYzMjtcbitcdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFUgXHUwMDI2XHUwMDI2IG9wID09IEJQRl9NT0QgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlb2ZmID09IDEpXG4rXHRcdFx0ZnVuYyA9ICh2b2lkICopaml0X3Ntb2QzMjtcbitcdH1cbitcbitcdGlmIChpc182NCkge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHg0OGU3KTtcdFx0XHRcdFx0LyogbW92ZW0ubCBkMC1kMSwgLSglc3ApICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweGMwMDApO1xuK1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyZjAwIHwgc19sbyk7XHRcdFx0XHQvKiBtb3ZlLmwgc19sbywgLSglc3ApICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBzX2hpKTtcdFx0XHRcdC8qIG1vdmUubCBzX2hpLCAtKCVzcCkgKi9cbitcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IGRfbG8pO1x0XHRcdFx0LyogbW92ZS5sIGRfbG8sIC0oJXNwKSAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyZjAwIHwgZF9oaSk7XHRcdFx0XHQvKiBtb3ZlLmwgZF9oaSwgLSglc3ApICovXG4rXG4rXHRcdGVtaXRfMTYoY3R4LCAweDIwN2MpO1x0XHRcdFx0XHQvKiBtb3ZlYS5sICNmdW5jLCAlYTAgKi9cbitcdFx0ZW1pdF8zMihjdHgsICh1MzIpZnVuYyk7XG4rXHRcdGVtaXRfMTYoY3R4LCAweDRlOTApO1x0XHRcdFx0XHQvKiBqc3IgKCVhMCkgKi9cbitcbitcdFx0ZW1pdF8xNihjdHgsIDB4NGZlZik7XHRcdFx0XHRcdC8qIGxlYSAxNiglc3ApLCAlc3AgKi9cbitcdFx0ZW1pdF8xNihjdHgsIDE2KTtcbitcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjYwMSk7XHRcdFx0XHRcdC8qIG1vdmUubCAlZDEsICVkMyAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyNDAwKTtcdFx0XHRcdFx0LyogbW92ZS5sICVkMCwgJWQyICovXG4rXG4rXHRcdGVtaXRfMTYoY3R4LCAweDRjZGYpO1x0XHRcdFx0XHQvKiBtb3ZlbS5sICglc3ApKywgZDAtZDEgKi9cbitcdFx0ZW1pdF8xNihjdHgsIDB4MDAwMyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHg0OGU3KTtcdFx0XHRcdFx0LyogbW92ZW0ubCBkMC1kMSwgLSglc3ApICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweGMwMDApO1xuK1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyZjAwIHwgc19sbyk7XHRcdFx0XHQvKiBtb3ZlLmwgc19sbywgLSglc3ApICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweDJmMDAgfCBkX2xvKTtcdFx0XHRcdC8qIG1vdmUubCBkX2xvLCAtKCVzcCkgKi9cbitcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjA3Yyk7XHRcdFx0XHRcdC8qIG1vdmVhLmwgI2Z1bmMsICVhMCAqL1xuK1x0XHRlbWl0XzMyKGN0eCwgKHUzMilmdW5jKTtcbitcdFx0ZW1pdF8xNihjdHgsIDB4NGU5MCk7XHRcdFx0XHRcdC8qIGpzciAoJWEwKSAqL1xuK1xuK1x0XHRlbWl0XzE2KGN0eCwgMHg0ZmVmKTtcdFx0XHRcdFx0LyogbGVhIDgoJXNwKSwgJXNwICovXG4rXHRcdGVtaXRfMTYoY3R4LCA4KTtcbitcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjYwMCk7XHRcdFx0XHRcdC8qIG1vdmUubCAlZDAsICVkMyAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHg3NDAwKTtcdFx0XHRcdFx0LyogbW92ZXEgIzAsICVkMiAqL1xuK1xuK1x0XHRlbWl0XzE2KGN0eCwgMHg0Y2RmKTtcdFx0XHRcdFx0LyogbW92ZW0ubCAoJXNwKSssIGQwLWQxICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweDAwMDMpO1xuK1x0fVxuK1xuK1x0YnBmX3B1dF9yZWczMihkc3RbMV0sIE02OEtfRDMsIGN0eCk7XG4rXHRicGZfcHV0X3JlZzMyKGRzdFswXSwgTTY4S19EMiwgY3R4KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZW1pdF9sZHgoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuK3tcbitcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVx1MDAzZWRzdF9yZWddO1xuK1x0Y29uc3QgczggKnNyYyA9IGJwZjJtNjhrW2luc24tXHUwMDNlc3JjX3JlZ107XG4rXHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4rXHRzOCBkX2xvLCBkX2hpO1xuK1x0Ym9vbCBpc19tZW1fc3ggPSBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU1TWDtcbitcbitcdGlmIChpc19zdGFja2VkKHNyY1sxXSkpIHtcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjA2ZSk7XHRcdFx0XHQvKiBtb3ZlYS5sIGQxNiglZnApLCAlYTAgKi9cbitcdFx0ZW1pdF8xNihjdHgsICh1MTYpc3JjWzFdKTtcbitcdH0gZWxzZSB7XG4rXHRcdGVtaXRfMTYoY3R4LCAweDIwNDAgfCBzcmNbMV0pO1x0XHRcdC8qIG1vdmVhLmwgc3JjLCAlYTAgKi9cbitcdH1cbitcbitcdGRfbG8gPSBpc19zdGFja2VkKGRzdFsxXSkgPyB0bXAxWzFdIDogZHN0WzFdO1xuK1x0ZF9oaSA9IGlzX3N0YWNrZWQoZHN0WzBdKSA/IHRtcDFbMF0gOiBkc3RbMF07XG4rXG4rXHRzd2l0Y2ggKEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkpIHtcbitcdGNhc2UgQlBGX0I6XG4rXHRcdGlmICghaXNfbWVtX3N4KVxuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDcwMDAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkpO1x0LyogbW92ZXEgIzAsIGRfbG8gKi9cbitcdFx0ZW1pdF8xNihjdHgsIDB4MTAyOCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSk7XHRcdC8qIG1vdmUuYiBkMTYoJWEwKSwgZF9sbyAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgaW5zbi1cdTAwM2VvZmYpO1xuK1x0XHRpZiAoaXNfbWVtX3N4KVxuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDQ5YzAgfCBkX2xvKTtcdC8qIGV4dGIubCBkX2xvICovXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfSDpcbitcdFx0aWYgKCFpc19tZW1fc3gpXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSk7XHQvKiBtb3ZlcSAjMCwgZF9sbyAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgzMDI4IHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZS53IGQxNiglYTApLCBkX2xvICovXG4rXHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4rXHRcdGlmIChpc19tZW1fc3gpXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NDhjMCB8IGRfbG8pO1x0LyogZXh0LmwgZF9sbyAqL1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX1c6XG4rXHRcdGVtaXRfMTYoY3R4LCAweDIwMjggfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkpO1x0XHQvKiBtb3ZlLmwgZDE2KCVhMCksIGRfbG8gKi9cbitcdFx0ZW1pdF8xNihjdHgsIGluc24tXHUwMDNlb2ZmKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9EVzpcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjAyOCB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSk7XHRcdC8qIG1vdmUubCBkMTYoJWEwKSwgZF9oaSAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgaW5zbi1cdTAwM2VvZmYpO1xuK1x0XHRlbWl0XzE2KGN0eCwgMHg0MWU4KTtcdFx0XHRcdC8qIGxlYSA0KCVhMCksICVhMCAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgNCk7XG4rXHRcdGVtaXRfMTYoY3R4LCAweDIwMjggfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkpO1x0XHQvKiBtb3ZlLmwgZDE2KCVhMCksIGRfbG8gKi9cbitcdFx0ZW1pdF8xNihjdHgsIGluc24tXHUwMDNlb2ZmKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRpZiAoQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfRFcpIHtcbitcdFx0aWYgKGlzX21lbV9zeCkge1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDRhODAgfCBkX2xvKTtcdFx0XHQvKiB0c3QubCBkX2xvICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NWJjMCB8IGRfaGkpO1x0XHRcdC8qIHNtaSBkX2hpICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NDljMCB8IGRfaGkpO1x0XHRcdC8qIGV4dGIubCBkX2hpICovXG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChkX2hpIFx1MDAzY1x1MDAzYyA5KSk7XHQvKiBtb3ZlcSAjMCwgZF9oaSAqL1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRicGZfcHV0X3JlZzMyKGRzdFsxXSwgZF9sbywgY3R4KTtcbitcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbWl0X3N0eChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4re1xuK1x0Y29uc3QgczggKmRzdCA9IGJwZjJtNjhrW2luc24tXHUwMDNlZHN0X3JlZ107XG4rXHRjb25zdCBzOCAqc3JjID0gYnBmMm02OGtbaW5zbi1cdTAwM2VzcmNfcmVnXTtcbitcdGNvbnN0IHM4ICp0bXAyID0gYnBmMm02OGtbVE1QX1JFR18yXTtcbitcdHM4IHNfbG8sIHNfaGk7XG4rXG4rXHRpZiAoaXNfc3RhY2tlZChkc3RbMV0pKSB7XG4rXHRcdGVtaXRfMTYoY3R4LCAweDIwNmUpO1x0XHRcdFx0LyogbW92ZWEubCBkMTYoJWZwKSwgJWEwICovXG4rXHRcdGVtaXRfMTYoY3R4LCAodTE2KWRzdFsxXSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDQwIHwgZHN0WzFdKTtcdFx0XHQvKiBtb3ZlYS5sIGRzdCwgJWEwICovXG4rXHR9XG4rXG4rXHRzX2xvID0gYnBmX2dldF9yZWczMihzcmNbMV0sIHRtcDJbMV0sIGN0eCk7XG4rXG4rXHRzd2l0Y2ggKEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkpIHtcbitcdGNhc2UgQlBGX0I6XG4rXHRcdGVtaXRfMTYoY3R4LCAweDExNDAgfCBzX2xvKTtcdFx0XHQvKiBtb3ZlLmIgc19sbywgZDE2KCVhMCkgKi9cbitcdFx0ZW1pdF8xNihjdHgsIGluc24tXHUwMDNlb2ZmKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9IOlxuK1x0XHRlbWl0XzE2KGN0eCwgMHgzMTQwIHwgc19sbyk7XHRcdFx0LyogbW92ZS53IHNfbG8sIGQxNiglYTApICovXG4rXHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfVzpcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjE0MCB8IHNfbG8pO1x0XHRcdC8qIG1vdmUubCBzX2xvLCBkMTYoJWEwKSAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgaW5zbi1cdTAwM2VvZmYpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0RXOlxuK1x0XHRzX2hpID0gYnBmX2dldF9yZWczMihzcmNbMF0sIHRtcDJbMF0sIGN0eCk7XG4rXHRcdGVtaXRfMTYoY3R4LCAweDIxNDAgfCBzX2hpKTtcdFx0XHQvKiBtb3ZlLmwgc19oaSwgZDE2KCVhMCkgKi9cbitcdFx0ZW1pdF8xNihjdHgsIGluc24tXHUwMDNlb2ZmKTtcbitcdFx0ZW1pdF8xNihjdHgsIDB4NDFlOCk7XHRcdFx0XHQvKiBsZWEgNCglYTApLCAlYTAgKi9cbitcdFx0ZW1pdF8xNihjdHgsIDQpO1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMTQwIHwgc19sbyk7XHRcdFx0LyogbW92ZS5sIHNfbG8sIGQxNiglYTApICovXG4rXHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBlbWl0X3N0KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbit7XG4rXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbitcdGNvbnN0IHM4ICp0bXAgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xuK1xuK1x0aWYgKGlzX3N0YWNrZWQoZHN0WzFdKSkge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDZlKTtcdFx0XHRcdC8qIG1vdmVhLmwgZDE2KCVmcCksICVhMCAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgKHUxNilkc3RbMV0pO1xuK1x0fSBlbHNlIHtcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjA0MCB8IGRzdFsxXSk7XHRcdFx0LyogbW92ZWEubCBkc3QsICVhMCAqL1xuK1x0fVxuK1xuK1x0ZW1pdF8xNihjdHgsIDB4MjAzYyB8ICh0bXBbMV0gXHUwMDNjXHUwMDNjIDkpKTtcdFx0XHQvKiBtb3ZlLmwgI2ltbSwgdG1wICovXG4rXHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuK1xuK1x0c3dpdGNoIChCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpKSB7XG4rXHRjYXNlIEJQRl9COlxuK1x0XHRlbWl0XzE2KGN0eCwgMHgxMTQwIHwgdG1wWzFdKTtcdFx0XHQvKiBtb3ZlLmIgdG1wLCBkMTYoJWEwKSAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgaW5zbi1cdTAwM2VvZmYpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0g6XG4rXHRcdGVtaXRfMTYoY3R4LCAweDMxNDAgfCB0bXBbMV0pO1x0XHRcdC8qIG1vdmUudyB0bXAsIGQxNiglYTApICovXG4rXHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfVzpcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjE0MCB8IHRtcFsxXSk7XHRcdFx0LyogbW92ZS5sIHRtcCwgZDE2KCVhMCkgKi9cbitcdFx0ZW1pdF8xNihjdHgsIGluc24tXHUwMDNlb2ZmKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9EVzpcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjAzYyB8ICh0bXBbMF0gXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZS5sICNpbW0sIHRtcCAqL1xuK1x0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0gXHUwMDNjIDAgPyAweGZmZmZmZmZmIDogMCk7XG4rXG4rXHRcdGVtaXRfMTYoY3R4LCAweDIxNDAgfCB0bXBbMF0pO1x0XHRcdC8qIG1vdmUubCB0bXAsIGQxNiglYTApICovXG4rXHRcdGVtaXRfMTYoY3R4LCBpbnNuLVx1MDAzZW9mZik7XG4rXHRcdGVtaXRfMTYoY3R4LCAweDQxZTgpO1x0XHRcdFx0LyogbGVhIDQoJWEwKSwgJWEwICovXG4rXHRcdGVtaXRfMTYoY3R4LCA0KTtcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjE0MCB8IHRtcFsxXSk7XHRcdFx0LyogbW92ZS5sIHRtcCwgZDE2KCVhMCkgKi9cbitcdFx0ZW1pdF8xNihjdHgsIGluc24tXHUwMDNlb2ZmKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVtaXRfYXRvbWljKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbit7XG4rXHRjb25zdCBzOCAqZHN0ID0gYnBmMm02OGtbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbitcdGNvbnN0IHM4ICpzcmMgPSBicGYybTY4a1tpbnNuLVx1MDAzZXNyY19yZWddO1xuK1x0Y29uc3QgczggKnRtcDIgPSBicGYybTY4a1tUTVBfUkVHXzJdO1xuK1xuK1x0aWYgKGlzX3N0YWNrZWQoZHN0WzFdKSkge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDZlKTtcdFx0XHRcdC8qIG1vdmVhLmwgZDE2KCVmcCksICVhMCAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgKHUxNilkc3RbMV0pO1xuK1x0fSBlbHNlIHtcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjA0MCB8IGRzdFsxXSk7XHRcdFx0LyogbW92ZWEubCBkc3QsICVhMCAqL1xuK1x0fVxuK1xuK1x0aWYgKGluc24tXHUwMDNlb2ZmKSB7XG4rXHRcdGVtaXRfMTYoY3R4LCAweDQxZTgpO1x0XHRcdFx0LyogbGVhIGQxNiglYTApLCAlYTAgKi9cbitcdFx0ZW1pdF8xNihjdHgsIGluc24tXHUwMDNlb2ZmKTtcbitcdH1cbitcbitcdGlmIChCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9XKSB7XG4rXHRcdHM4IHNfbG8gPSBicGZfZ2V0X3JlZzMyKHNyY1sxXSwgdG1wMlsxXSwgY3R4KTtcbitcbitcdFx0aWYgKGluc24tXHUwMDNlaW1tICE9IEJQRl9DTVBYQ0hHKSB7XG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NDhlNyk7XHRcdFx0LyogbW92ZW0ubCBkMC1kMSwgLSglc3ApICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4YzAwMCk7XG4rXHRcdH1cbitcbitcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IE02OEtfRDApO1x0XHRcdC8qIG1vdmUubCAlZDAsIC0oJXNwKSAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyZjNjKTtcdFx0XHRcdC8qIG1vdmUubCAjaW1tLCAtKCVzcCkgKi9cbitcdFx0ZW1pdF8zMihjdHgsIGluc24tXHUwMDNlaW1tKTtcbitcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IHNfbG8pO1x0XHRcdC8qIG1vdmUubCBzX2xvLCAtKCVzcCkgKi9cbitcdFx0ZW1pdF8xNihjdHgsIDB4MmYwOCk7XHRcdFx0XHQvKiBtb3ZlLmwgJWEwLCAtKCVzcCkgKi9cbitcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjA3Yyk7XHRcdFx0XHQvKiBtb3ZlYS5sICNmdW5jLCAlYTAgKi9cbitcdFx0ZW1pdF8zMihjdHgsICh1MzIpaml0X2F0b21pYzMyKTtcbitcdFx0ZW1pdF8xNihjdHgsIDB4NGU5MCk7XHRcdFx0XHQvKiBqc3IgKCVhMCkgKi9cbitcbitcdFx0ZW1pdF8xNihjdHgsIDB4NGZlZik7XHRcdFx0XHQvKiBsZWEgMTYoJXNwKSwgJXNwICovXG4rXHRcdGVtaXRfMTYoY3R4LCAxNik7XG4rXG4rXHRcdGlmIChpbnNuLVx1MDAzZWltbSA9PSBCUEZfQ01QWENIRykge1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDcyMDApO1x0XHRcdC8qIG1vdmVxICMwLCAlZDEgKi9cbitcdFx0fSBlbHNlIHtcbitcdFx0XHRib29sIGlzX2ZldGNoID0gKGluc24tXHUwMDNlaW1tIFx1MDAyNiBCUEZfRkVUQ0gpIHx8IGluc24tXHUwMDNlaW1tID09IEJQRl9YQ0hHO1xuK1xuK1x0XHRcdGlmIChpc19mZXRjaClcbitcdFx0XHRcdGVtaXRfMTYoY3R4LCAweDI2MDApO1x0XHQvKiBtb3ZlLmwgJWQwLCAlZDMgKi9cbitcbitcdFx0XHRlbWl0XzE2KGN0eCwgMHg0Y2RmKTtcdFx0XHQvKiBtb3ZlbS5sICglc3ApKywgZDAtZDEgKi9cbitcdFx0XHRlbWl0XzE2KGN0eCwgMHgwMDAzKTtcbitcbitcdFx0XHRpZiAoaXNfZmV0Y2gpIHtcbitcdFx0XHRcdGJwZl9wdXRfcmVnMzIoc3JjWzFdLCBNNjhLX0QzLCBjdHgpO1xuK1x0XHRcdFx0ZW1pdF8xNihjdHgsIDB4NzQwMCk7XHRcdC8qIG1vdmVxICMwLCAlZDIgKi9cbitcdFx0XHRcdGJwZl9wdXRfcmVnMzIoc3JjWzBdLCBNNjhLX0QyLCBjdHgpO1xuK1x0XHRcdH1cbitcdFx0fVxuK1xuK1x0fSBlbHNlIGlmIChCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9EVykge1xuK1x0XHRzOCBzX2xvID0gYnBmX2dldF9yZWczMihzcmNbMV0sIHRtcDJbMV0sIGN0eCk7XG4rXHRcdHM4IHNfaGkgPSBicGZfZ2V0X3JlZzMyKHNyY1swXSwgdG1wMlswXSwgY3R4KTtcbitcbitcdFx0aWYgKGluc24tXHUwMDNlaW1tICE9IEJQRl9DTVBYQ0hHKSB7XG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NDhlNyk7XHRcdFx0LyogbW92ZW0ubCBkMC1kMSwgLSglc3ApICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4YzAwMCk7XG4rXHRcdH1cbitcbitcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IE02OEtfRDApO1x0XHRcdC8qIG1vdmUubCAlZDAsIC0oJXNwKSAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyZjAwIHwgTTY4S19EMSk7XHRcdFx0LyogbW92ZS5sICVkMSwgLSglc3ApICovXG4rXHRcdGVtaXRfMTYoY3R4LCAweDJmM2MpO1x0XHRcdFx0LyogbW92ZS5sICNpbW0sIC0oJXNwKSAqL1xuK1x0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyZjAwIHwgc19sbyk7XHRcdFx0LyogbW92ZS5sIHNfbG8sIC0oJXNwKSAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyZjAwIHwgc19oaSk7XHRcdFx0LyogbW92ZS5sIHNfaGksIC0oJXNwKSAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyZjA4KTtcdFx0XHRcdC8qIG1vdmUubCAlYTAsIC0oJXNwKSAqL1xuK1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDdjKTtcdFx0XHRcdC8qIG1vdmVhLmwgI2Z1bmMsICVhMCAqL1xuK1x0XHRlbWl0XzMyKGN0eCwgKHUzMilqaXRfYXRvbWljNjQpO1xuK1x0XHRlbWl0XzE2KGN0eCwgMHg0ZTkwKTtcdFx0XHRcdC8qIGpzciAoJWEwKSAqL1xuK1xuK1x0XHRlbWl0XzE2KGN0eCwgMHg0ZmVmKTtcdFx0XHRcdC8qIGxlYSAyNCglc3ApLCAlc3AgKi9cbitcdFx0ZW1pdF8xNihjdHgsIDI0KTtcbitcbitcdFx0aWYgKGluc24tXHUwMDNlaW1tID09IEJQRl9DTVBYQ0hHKSB7XG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4YzE0MSk7XHRcdFx0LyogZXhnICVkMCwgJWQxICovXG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0Ym9vbCBpc19mZXRjaCA9IChpbnNuLVx1MDAzZWltbSBcdTAwMjYgQlBGX0ZFVENIKSB8fCBpbnNuLVx1MDAzZWltbSA9PSBCUEZfWENIRztcbitcbitcdFx0XHRpZiAoaXNfZmV0Y2gpIHtcbitcdFx0XHRcdGVtaXRfMTYoY3R4LCAweDI2MDApO1x0XHQvKiBtb3ZlLmwgJWQwLCAlZDMgKi9cbitcdFx0XHRcdGVtaXRfMTYoY3R4LCAweDI0MDEpO1x0XHQvKiBtb3ZlLmwgJWQxLCAlZDIgKi9cbitcdFx0XHR9XG4rXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NGNkZik7XHRcdFx0LyogbW92ZW0ubCAoJXNwKSssIGQwLWQxICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4MDAwMyk7XG4rXG4rXHRcdFx0aWYgKGlzX2ZldGNoKSB7XG4rXHRcdFx0XHRicGZfcHV0X3JlZzMyKHNyY1sxXSwgTTY4S19EMiwgY3R4KTtcbitcdFx0XHRcdGJwZl9wdXRfcmVnMzIoc3JjWzBdLCBNNjhLX0QzLCBjdHgpO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBlbWl0X3RhaWxfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4re1xuK1x0Y29uc3QgczggKnIyID0gYnBmMm02OGtbQlBGX1JFR18yXTtcbitcdGNvbnN0IHM4ICpyMyA9IGJwZjJtNjhrW0JQRl9SRUdfM107XG4rXHRpbnQgam1wX291dF8xLCBqbXBfb3V0XzIsIGptcF9vdXRfMztcbitcbitcdGlmIChpc19zdGFja2VkKHIyWzFdKSkge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDZlKTtcdFx0XHRcdC8qIG1vdmVhLmwgZDE2KCVmcCksICVhMCAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgKHUxNilyMlsxXSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDQwIHwgcjJbMV0pO1x0XHRcdC8qIG1vdmVhLmwgcjIsICVhMCAqL1xuK1x0fVxuK1xuK1x0aWYgKGlzX3N0YWNrZWQocjNbMV0pKSB7XG4rXHRcdGVtaXRfMTYoY3R4LCAweDI0MmUpO1x0XHRcdFx0LyogbW92ZS5sIGQxNiglZnApLCAlZDIgKi9cbitcdFx0ZW1pdF8xNihjdHgsICh1MTYpcjNbMV0pO1xuK1x0fSBlbHNlIHtcbitcdFx0ZW1pdF8xNihjdHgsIDB4MjQwMCB8IHIzWzFdKTtcdFx0XHQvKiBtb3ZlLmwgcjMsICVkMiAqL1xuK1x0fVxuK1xuK1x0ZW1pdF8xNihjdHgsIDB4YjRhOCk7XHRcdFx0XHRcdC8qIGNtcC5sIGQxNiglYTApLCAlZDIgKi9cbitcdGVtaXRfMTYoY3R4LCBvZmZzZXRvZihzdHJ1Y3QgYnBmX2FycmF5LCBtYXAubWF4X2VudHJpZXMpKTtcbitcdGVtaXRfMTYoY3R4LCAweDY0MDApO1x0XHRcdFx0XHQvKiBiY2MudyBqbXBfb3V0XzEgKi9cbitcdGptcF9vdXRfMSA9IGN0eC1cdTAwM2VpZHg7XG4rXHRlbWl0XzE2KGN0eCwgMCk7XG4rXG4rXHRlbWl0XzE2KGN0eCwgMHgyNjJlKTtcdFx0XHRcdFx0LyogbW92ZS5sIGQxNiglZnApLCAlZDMgKi9cbitcdGVtaXRfMTYoY3R4LCAodTE2KVNUQUNLX09GRlNFVChCUEZfVENfTE8pKTtcbitcdGVtaXRfMTYoY3R4LCAweDRhODMpO1x0XHRcdFx0XHQvKiB0c3QubCAlZDMgKi9cbitcdGVtaXRfMTYoY3R4LCAweDY3MDApO1x0XHRcdFx0XHQvKiBiZXEudyBqbXBfb3V0XzIgKi9cbitcdGptcF9vdXRfMiA9IGN0eC1cdTAwM2VpZHg7XG4rXHRlbWl0XzE2KGN0eCwgMCk7XG4rXG4rXHRlbWl0XzE2KGN0eCwgMHg1MzgzKTtcdFx0XHRcdFx0Lyogc3VicS5sICMxLCAlZDMgKi9cbitcdGVtaXRfMTYoY3R4LCAweDJkNDMpO1x0XHRcdFx0XHQvKiBtb3ZlLmwgJWQzLCBkMTYoJWZwKSAqL1xuK1x0ZW1pdF8xNihjdHgsICh1MTYpU1RBQ0tfT0ZGU0VUKEJQRl9UQ19MTykpO1xuK1xuK1x0ZW1pdF8xNihjdHgsIDB4ZDQ4Mik7XHRcdFx0XHRcdC8qIGFkZC5sICVkMiwgJWQyICovXG4rXHRlbWl0XzE2KGN0eCwgMHhkNDgyKTtcdFx0XHRcdFx0LyogYWRkLmwgJWQyLCAlZDIgKi9cbitcdGVtaXRfMTYoY3R4LCAweDQzZTgpO1x0XHRcdFx0XHQvKiBsZWEgZDE2KCVhMCksICVhMSAqL1xuK1x0ZW1pdF8xNihjdHgsIG9mZnNldG9mKHN0cnVjdCBicGZfYXJyYXksIHB0cnMpKTtcbitcdGVtaXRfMTYoY3R4LCAweGQzYzIpO1x0XHRcdFx0XHQvKiBhZGRhLmwgJWQyLCAlYTEgKi9cbitcbitcdGVtaXRfMTYoY3R4LCAweDIwNTEpO1x0XHRcdFx0XHQvKiBtb3ZlYS5sICglYTEpLCAlYTAgKi9cbitcbitcdGVtaXRfMTYoY3R4LCAweDI0MDgpO1x0XHRcdFx0XHQvKiBtb3ZlLmwgJWEwLCAlZDIgKi9cbitcdGVtaXRfMTYoY3R4LCAweDRhODIpO1x0XHRcdFx0XHQvKiB0c3QubCAlZDIgKi9cbitcdGVtaXRfMTYoY3R4LCAweDY3MDApO1x0XHRcdFx0XHQvKiBiZXEudyBqbXBfb3V0XzMgKi9cbitcdGptcF9vdXRfMyA9IGN0eC1cdTAwM2VpZHg7XG4rXHRlbWl0XzE2KGN0eCwgMCk7XG4rXG4rXHRlbWl0XzE2KGN0eCwgMHgyMDY4KTtcdFx0XHRcdFx0LyogbW92ZWEubCBkMTYoJWEwKSwgJWEwICovXG4rXHRlbWl0XzE2KGN0eCwgb2Zmc2V0b2Yoc3RydWN0IGJwZl9wcm9nLCBicGZfZnVuYykpO1xuK1xuK1x0ZW1pdF8xNihjdHgsIDB4NGVlOCk7XHRcdFx0XHRcdC8qIGptcCBkMTYoJWEwKSAqL1xuK1x0ZW1pdF8xNihjdHgsIDQ0KTtcbitcbitcdGlmIChjdHgtXHUwMDNldGFyZ2V0KSB7XG4rXHRcdGN0eC1cdTAwM2V0YXJnZXRbam1wX291dF8xXSA9IChjdHgtXHUwMDNlaWR4IC0gam1wX291dF8xKSAqIDI7XG4rXHRcdGN0eC1cdTAwM2V0YXJnZXRbam1wX291dF8yXSA9IChjdHgtXHUwMDNlaWR4IC0gam1wX291dF8yKSAqIDI7XG4rXHRcdGN0eC1cdTAwM2V0YXJnZXRbam1wX291dF8zXSA9IChjdHgtXHUwMDNlaWR4IC0gam1wX291dF8zKSAqIDI7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgZW1pdF9qbXAoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgY3Vycl9pKVxuK3tcbitcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVx1MDAzZWRzdF9yZWddO1xuK1x0Y29uc3QgczggKnNyYyA9IGJwZjJtNjhrW2luc24tXHUwMDNlc3JjX3JlZ107XG4rXHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4rXHRjb25zdCBzOCAqdG1wMiA9IGJwZjJtNjhrW1RNUF9SRUdfMl07XG4rXHRzOCBkX2xvLCBkX2hpID0gMCwgc19sbywgc19oaSA9IDA7XG4rXHRib29sIGlzX2ptcDMyID0gQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0pNUDMyO1xuK1x0dTggb3AgPSBCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKTtcbitcdGludCB0YXJnZXRfaW5zbjtcbitcbitcdGlmIChpc19qbXAzMiBcdTAwMjZcdTAwMjYgb3AgPT0gQlBGX0pBKVxuK1x0XHR0YXJnZXRfaW5zbiA9IGN1cnJfaSArIDEgKyBpbnNuLVx1MDAzZWltbTtcbitcdGVsc2VcbitcdFx0dGFyZ2V0X2luc24gPSBjdXJyX2kgKyAxICsgaW5zbi1cdTAwM2VvZmY7XG4rXG4rXHRpZiAodGFyZ2V0X2luc24gXHUwMDNjIDAgfHwgdGFyZ2V0X2luc24gXHUwMDNlIGN0eC1cdTAwM2Vwcm9nLVx1MDAzZWxlbilcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0I2RlZmluZSBFTUlUX0pNUDMyKG9wX2Jhc2UpIFxcXG4rXHRcdGRvIHsgXFxcbitcdFx0XHRpbnQgZGlzcCA9IChjdHgtXHUwMDNlb2Zmc2V0c1t0YXJnZXRfaW5zbl0gLSAoY3R4LVx1MDAzZWlkeCArIDEpKSAqIDI7IFxcXG4rXHRcdFx0ZW1pdF8xNihjdHgsIChvcF9iYXNlKSB8IDB4MDBmZik7IFxcXG4rXHRcdFx0ZW1pdF8zMihjdHgsIGRpc3ApOyBcXFxuK1x0XHR9IHdoaWxlICgwKVxuK1xuK1x0aWYgKG9wID09IEJQRl9KQSkge1xuK1x0XHRFTUlUX0pNUDMyKDB4NjAwMCk7XHRcdFx0XHQvKiBicmEubCAqL1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcbitcdGlmICghaXNfam1wMzIpXG4rXHRcdGRfaGkgPSBicGZfZ2V0X3JlZzMyKGRzdFswXSwgdG1wMVswXSwgY3R4KTtcbitcbitcdGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1gpIHtcbitcdFx0c19sbyA9IGJwZl9nZXRfcmVnMzIoc3JjWzFdLCB0bXAyWzFdLCBjdHgpO1xuK1x0XHRpZiAoIWlzX2ptcDMyKVxuK1x0XHRcdHNfaGkgPSBicGZfZ2V0X3JlZzMyKHNyY1swXSwgdG1wMlswXSwgY3R4KTtcbitcdH0gZWxzZSB7XG4rXHRcdHNfbG8gPSB0bXAyWzFdO1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKHNfbG8gXHUwMDNjXHUwMDNjIDkpKTtcdFx0LyogbW92ZS5sICNpbW0sIHNfbG8gKi9cbitcdFx0ZW1pdF8zMihjdHgsIGluc24tXHUwMDNlaW1tKTtcbitcdFx0aWYgKCFpc19qbXAzMikge1xuK1x0XHRcdHNfaGkgPSB0bXAyWzBdO1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDIwM2MgfCAoc19oaSBcdTAwM2NcdTAwM2MgOSkpO1x0LyogbW92ZS5sICNpbW0sIHNfaGkgKi9cbitcdFx0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0gXHUwMDNjIDAgPyAweGZmZmZmZmZmIDogMCk7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChvcCA9PSBCUEZfSlNFVCkge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKHRtcDFbMV0gXHUwMDNjXHUwMDNjIDkpIHwgZF9sbyk7XHQvKiBtb3ZlLmwgZF9sbywgdG1wMV9sbyAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgMHhjMDgwIHwgKHRtcDFbMV0gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7XHQvKiBhbmQubCBzX2xvLCB0bXAxX2xvICovXG4rXG4rXHRcdGlmICghaXNfam1wMzIpIHtcbitcdFx0XHRFTUlUX0pNUDMyKDB4NjYwMCk7XHRcdFx0LyogYm5lLmwgKi9cbitcdFx0XHRlbWl0XzE2KGN0eCwgMHgyMDAwIHwgKHRtcDFbMF0gXHUwMDNjXHUwMDNjIDkpIHwgZF9oaSk7IC8qIG1vdmUubCBkX2hpLCB0bXAxX2hpICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4YzA4MCB8ICh0bXAxWzBdIFx1MDAzY1x1MDAzYyA5KSB8IHNfaGkpOyAvKiBhbmQubCBzX2hpLCB0bXAxX2hpICovXG4rXHRcdH1cbitcdFx0RU1JVF9KTVAzMigweDY2MDApO1x0XHRcdFx0LyogYm5lLmwgKi9cbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZiAoaXNfam1wMzIpIHtcbitcdFx0ZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSB8IHNfbG8pO1x0LyogY21wLmwgc19sbywgZF9sbyAqL1xuK1x0XHRzd2l0Y2ggKG9wKSB7XG4rXHRcdGNhc2UgQlBGX0pFUTpcbitcdFx0XHRFTUlUX0pNUDMyKDB4NjcwMCk7XHRcdFx0LyogYmVxLmwgKi9cbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBCUEZfSk5FOlxuK1x0XHRcdEVNSVRfSk1QMzIoMHg2NjAwKTtcdFx0XHQvKiBibmUubCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEJQRl9KR1Q6XG4rXHRcdFx0RU1JVF9KTVAzMigweDYyMDApO1x0XHRcdC8qIGJoaS5sICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX0pHRTpcbitcdFx0XHRFTUlUX0pNUDMyKDB4NjQwMCk7XHRcdFx0LyogYmNjLmwgKi9cbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBCUEZfSkxUOlxuK1x0XHRcdEVNSVRfSk1QMzIoMHg2NTAwKTtcdFx0XHQvKiBiY3MubCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEJQRl9KTEU6XG4rXHRcdFx0RU1JVF9KTVAzMigweDYzMDApO1x0XHRcdC8qIGJscy5sICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX0pTR1Q6XG4rXHRcdFx0RU1JVF9KTVAzMigweDZlMDApO1x0XHRcdC8qIGJndC5sICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX0pTR0U6XG4rXHRcdFx0RU1JVF9KTVAzMigweDZjMDApO1x0XHRcdC8qIGJnZS5sICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX0pTTFQ6XG4rXHRcdFx0RU1JVF9KTVAzMigweDZkMDApO1x0XHRcdC8qIGJsdC5sICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX0pTTEU6XG4rXHRcdFx0RU1JVF9KTVAzMigweDZmMDApO1x0XHRcdC8qIGJsZS5sICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9oaSBcdTAwM2NcdTAwM2MgOSkgfCBzX2hpKTtcdC8qIGNtcC5sIHNfaGksIGRfaGkgKi9cbitcbitcdFx0c3dpdGNoIChvcCkge1xuK1x0XHRjYXNlIEJQRl9KRVE6XG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NjYwOCk7XHRcdFx0LyogYm5lLnMgLis4ICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSB8IHNfbG8pOyAvKiBjbXAubCBzX2xvLCBkX2xvICovXG4rXHRcdFx0RU1JVF9KTVAzMigweDY3MDApO1x0XHRcdC8qIGJlcS5sICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX0pORTpcbitcdFx0XHRFTUlUX0pNUDMyKDB4NjYwMCk7XHRcdFx0LyogYm5lLmwgKi9cbitcdFx0XHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi9cbitcdFx0XHRFTUlUX0pNUDMyKDB4NjYwMCk7XHRcdFx0LyogYm5lLmwgKi9cbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBCUEZfSkdUOlxuK1x0XHRcdEVNSVRfSk1QMzIoMHg2MjAwKTtcdFx0XHQvKiBiaGkubCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDY1MDgpO1x0XHRcdC8qIGJjcy5zIC4rOCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuK1x0XHRcdEVNSVRfSk1QMzIoMHg2MjAwKTtcdFx0XHQvKiBiaGkubCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEJQRl9KR0U6XG4rXHRcdFx0RU1JVF9KTVAzMigweDYyMDApO1x0XHRcdC8qIGJoaS5sICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4NjUwOCk7XHRcdFx0LyogYmNzLnMgLis4ICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIDB4YjA4MCB8IChkX2xvIFx1MDAzY1x1MDAzYyA5KSB8IHNfbG8pOyAvKiBjbXAubCBzX2xvLCBkX2xvICovXG4rXHRcdFx0RU1JVF9KTVAzMigweDY0MDApO1x0XHRcdC8qIGJjYy5sICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX0pMVDpcbitcdFx0XHRFTUlUX0pNUDMyKDB4NjUwMCk7XHRcdFx0LyogYmNzLmwgKi9cbitcdFx0XHRlbWl0XzE2KGN0eCwgMHg2MjA4KTtcdFx0XHQvKiBiaGkucyAuKzggKi9cbitcdFx0XHRlbWl0XzE2KGN0eCwgMHhiMDgwIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpIHwgc19sbyk7IC8qIGNtcC5sIHNfbG8sIGRfbG8gKi9cbitcdFx0XHRFTUlUX0pNUDMyKDB4NjUwMCk7XHRcdFx0LyogYmNzLmwgKi9cbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBCUEZfSkxFOlxuK1x0XHRcdEVNSVRfSk1QMzIoMHg2NTAwKTtcdFx0XHQvKiBiY3MubCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDYyMDgpO1x0XHRcdC8qIGJoaS5zIC4rOCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuK1x0XHRcdEVNSVRfSk1QMzIoMHg2MzAwKTtcdFx0XHQvKiBibHMubCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEJQRl9KU0dUOlxuK1x0XHRcdEVNSVRfSk1QMzIoMHg2ZTAwKTtcdFx0XHQvKiBiZ3QubCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDZkMDgpO1x0XHRcdC8qIGJsdC5zIC4rOCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuK1x0XHRcdEVNSVRfSk1QMzIoMHg2MjAwKTtcdFx0XHQvKiBiaGkubCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEJQRl9KU0dFOlxuK1x0XHRcdEVNSVRfSk1QMzIoMHg2ZTAwKTtcdFx0XHQvKiBiZ3QubCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDZkMDgpO1x0XHRcdC8qIGJsdC5zIC4rOCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuK1x0XHRcdEVNSVRfSk1QMzIoMHg2NDAwKTtcdFx0XHQvKiBiY2MubCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEJQRl9KU0xUOlxuK1x0XHRcdEVNSVRfSk1QMzIoMHg2ZDAwKTtcdFx0XHQvKiBibHQubCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDZlMDgpO1x0XHRcdC8qIGJndC5zIC4rOCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuK1x0XHRcdEVNSVRfSk1QMzIoMHg2NTAwKTtcdFx0XHQvKiBiY3MubCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEJQRl9KU0xFOlxuK1x0XHRcdEVNSVRfSk1QMzIoMHg2ZDAwKTtcdFx0XHQvKiBibHQubCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDZlMDgpO1x0XHRcdC8qIGJndC5zIC4rOCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweGIwODAgfCAoZF9sbyBcdTAwM2NcdTAwM2MgOSkgfCBzX2xvKTsgLyogY21wLmwgc19sbywgZF9sbyAqL1xuK1x0XHRcdEVNSVRfSk1QMzIoMHg2MzAwKTtcdFx0XHQvKiBibHMubCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXHQjdW5kZWYgRU1JVF9KTVAzMlxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZW1pdF9jYWxsKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbit7XG4rXHRjb25zdCBzOCBhcmdfcmVnc1tdID0geyBCUEZfUkVHXzUsIEJQRl9SRUdfNCwgQlBGX1JFR18zLCBCUEZfUkVHXzIsIEJQRl9SRUdfMSB9O1xuK1x0Y29uc3QgczggKnRtcDEgPSBicGYybTY4a1tUTVBfUkVHXzFdO1xuK1x0Ym9vbCBleHRyYV9wYXNzID0gY3R4LVx1MDAzZXByb2ctXHUwMDNlaml0ZWQ7XG4rXHR1NjQgZnVuY19hZGRyO1xuK1x0Ym9vbCBmaXhlZDtcbitcdGludCBpLCBlcnI7XG4rXG4rXHRlcnIgPSBicGZfaml0X2dldF9mdW5jX2FkZHIoY3R4LVx1MDAzZXByb2csIGluc24sIGV4dHJhX3Bhc3MsIFx1MDAyNmZ1bmNfYWRkciwgXHUwMDI2Zml4ZWQpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDU7IGkrKykge1xuK1x0XHRjb25zdCBzOCAqcmVnID0gYnBmMm02OGtbYXJnX3JlZ3NbaV1dO1xuK1x0XHRzOCBkX2xvID0gYnBmX2dldF9yZWczMihyZWdbMV0sIHRtcDFbMV0sIGN0eCk7XG4rXHRcdHM4IGRfaGkgPSBicGZfZ2V0X3JlZzMyKHJlZ1swXSwgdG1wMVswXSwgY3R4KTtcbitcbitcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IGRfbG8pO1x0XHRcdC8qIG1vdmUubCBkX2xvLCAtKCVzcCkgKi9cbitcdFx0ZW1pdF8xNihjdHgsIDB4MmYwMCB8IGRfaGkpO1x0XHRcdC8qIG1vdmUubCBkX2hpLCAtKCVzcCkgKi9cbitcdH1cbitcbitcdGVtaXRfMTYoY3R4LCAweDIwN2MpO1x0XHRcdFx0XHQvKiBtb3ZlYS5sICNmdW5jX2FkZHIsICVhMCAqL1xuK1x0ZW1pdF8zMihjdHgsICh1MzIpZnVuY19hZGRyKTtcbitcbitcdGVtaXRfMTYoY3R4LCAweDRlOTApO1x0XHRcdFx0XHQvKiBqc3IgKCVhMCkgKi9cbitcbitcdGVtaXRfMTYoY3R4LCAweDRmZWYpO1x0XHRcdFx0XHQvKiBsZWEgNDAoJXNwKSwgJXNwICovXG4rXHRlbWl0XzE2KGN0eCwgNDApO1xuK1xuK1x0aWYgKGluc24tXHUwMDNlc3JjX3JlZyAhPSBCUEZfUFNFVURPX0NBTEwpXG4rXHRcdGVtaXRfMTYoY3R4LCAweGMzNDApO1x0XHRcdFx0XHQvKiBleGcgJWQwLCAlZDEgKi9cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBidWlsZF9wcm9sb2d1ZShzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuK3tcbitcdGludCBicGZfc3RhY2sgPSBNQVhfQlBGX1NUQUNLO1xuK1x0aW50IHRvdGFsX3N0YWNrID0gU0NSQVRDSF9TSVpFICsgYnBmX3N0YWNrO1xuK1x0aW50IGk7XG4rXG4rXHRlbWl0XzE2KGN0eCwgMHg3MDIxKTtcdFx0XHRcdFx0LyogbW92ZXEgIzMzLCAlZDAgKi9cbitcbitcdGVtaXRfMTYoY3R4LCAweDRlNTYpO1x0XHRcdFx0XHQvKiBsaW5rICVhNiwgIy10b3RhbF9zdGFjayAqL1xuK1x0ZW1pdF8xNihjdHgsIC10b3RhbF9zdGFjayk7XG4rXG4rXHRlbWl0XzE2KGN0eCwgMHg0OGU3KTtcdFx0XHRcdFx0LyogbW92ZW0ubCBkMi1kNSwgLSglc3ApICovXG4rXHRlbWl0XzE2KGN0eCwgMHgzYzAwKTtcbitcbitcdGVtaXRfMTYoY3R4LCAweDJkNDApO1x0XHRcdFx0XHQvKiBtb3ZlLmwgJWQwLCBvZmYoJWZwKSAqL1xuK1x0ZW1pdF8xNihjdHgsICh1MTYpU1RBQ0tfT0ZGU0VUKEJQRl9UQ19MTykpO1xuK1xuK1x0aWYgKGN0eC1cdTAwM2Vwcm9nLVx1MDAzZWlzX2Z1bmMpIHtcbitcdFx0Y29uc3QgczggYXJnX3JlZ3NbXSA9IHsgQlBGX1JFR18xLCBCUEZfUkVHXzIsIEJQRl9SRUdfMywgQlBGX1JFR180LCBCUEZfUkVHXzUgfTtcbitcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgNTsgaSsrKSB7XG4rXHRcdFx0aW50IG9mZnNldCA9IDggKyBpICogODtcbitcdFx0XHRjb25zdCBzOCAqcmVnID0gYnBmMm02OGtbYXJnX3JlZ3NbaV1dO1xuK1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDIwMmUpOyAvKiBtb3ZlLmwgb2Zmc2V0KCVmcCksICVkMCAqL1xuK1x0XHRcdGVtaXRfMTYoY3R4LCBvZmZzZXQpO1xuK1x0XHRcdGJwZl9wdXRfcmVnMzIocmVnWzBdLCBNNjhLX0QwLCBjdHgpO1xuK1xuK1x0XHRcdGVtaXRfMTYoY3R4LCAweDIwMmUpOyAvKiBtb3ZlLmwgb2Zmc2V0KzQoJWZwKSwgJWQwICovXG4rXHRcdFx0ZW1pdF8xNihjdHgsIG9mZnNldCArIDQpO1xuK1x0XHRcdGJwZl9wdXRfcmVnMzIocmVnWzFdLCBNNjhLX0QwLCBjdHgpO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDJlKTtcdFx0XHRcdC8qIG1vdmUubCA4KCVmcCksICVkMCAqL1xuK1x0XHRlbWl0XzE2KGN0eCwgOCk7XG4rXHRcdGJwZl9wdXRfcmVnMzIoYnBmMm02OGtbQlBGX1JFR18xXVsxXSwgTTY4S19EMCwgY3R4KTtcbitcbitcdFx0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChNNjhLX0QwIFx1MDAzY1x1MDAzYyA5KSk7XHRcdFx0LyogbW92ZXEgIzAsICVkMCAqL1xuK1x0XHRicGZfcHV0X3JlZzMyKGJwZjJtNjhrW0JQRl9SRUdfMV1bMF0sIE02OEtfRDAsIGN0eCk7XG4rXHR9XG4rXG4rXHRlbWl0XzE2KGN0eCwgMHg0MWVlKTtcdFx0XHRcdFx0LyogbGVhIC1TQ1JBVENIX1NJWkUoJWZwKSwgJWEwICovXG4rXHRlbWl0XzE2KGN0eCwgLVNDUkFUQ0hfU0laRSk7XG4rXHRlbWl0XzE2KGN0eCwgMHgyMDA4KTtcdFx0XHRcdFx0LyogbW92ZS5sICVhMCwgJWQwICovXG4rXG4rXHRicGZfcHV0X3JlZzMyKGJwZjJtNjhrW0JQRl9SRUdfMTBdWzFdLCBNNjhLX0QwLCBjdHgpO1xuK1x0ZW1pdF8xNihjdHgsIDB4NzAwMCB8IChNNjhLX0QwIFx1MDAzY1x1MDAzYyA5KSk7XHRcdFx0LyogbW92ZXEgIzAsICVkMCAqL1xuK1x0YnBmX3B1dF9yZWczMihicGYybTY4a1tCUEZfUkVHXzEwXVswXSwgTTY4S19EMCwgY3R4KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnVpbGRfZXBpbG9ndWUoc3RydWN0IGppdF9jdHggKmN0eClcbit7XG4rXHRlbWl0XzE2KGN0eCwgMHg0Y2RmKTtcdFx0XHRcdFx0LyogbW92ZW0ubCAoJXNwKSssIGQyLWQ1ICovXG4rXHRlbWl0XzE2KGN0eCwgMHgwMDNjKTtcbitcbitcdGVtaXRfMTYoY3R4LCAweDRlNWUpO1x0XHRcdFx0XHQvKiB1bmxrICVmcCAqL1xuK1x0ZW1pdF8xNihjdHgsIDB4NGU3NSk7XHRcdFx0XHRcdC8qIHJ0cyAqL1xuK31cbitcbitzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgaSlcbit7XG4rXHR1OCBjb2RlID0gaW5zbi1cdTAwM2Vjb2RlO1xuK1xuK1x0c3dpdGNoIChjb2RlKSB7XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfTkVHOlxuK1x0XHRlbWl0X2FsdTMyX25lZyhpbnNuLCBjdHgpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX05FRzpcbitcdFx0ZW1pdF9hbHU2NF9uZWcoaW5zbiwgY3R4KTtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfQUREIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfU1VCIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfQU5EIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfT1IgIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfWE9SIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfTFNIIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfUlNIIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfQVJTSCB8IEJQRl9YOlxuK1x0XHRlbWl0X2FsdTMyX3goaW5zbiwgY3R4KTtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfQUREIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfU1VCIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfQU5EIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfT1IgIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfWE9SIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfTFNIIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfUlNIIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9BTFUgfCBCUEZfQVJTSCB8IEJQRl9LOlxuK1x0XHRlbWl0X2FsdTMyX2soaW5zbiwgY3R4KTtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWDpcbitcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0FERCB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfU1VCIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9BTkQgfCBCUEZfWDpcbitcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX09SICB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfWE9SIHwgQlBGX1g6XG4rXHRcdGVtaXRfYWx1NjRfeChpbnNuLCBjdHgpO1xuK1x0XHRicmVhaztcbitcbitcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfQUREIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9TVUIgfCBCUEZfSzpcbitcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0FORCB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfT1IgIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9YT1IgfCBCUEZfSzpcbitcdFx0ZW1pdF9hbHU2NF9rKGluc24sIGN0eCk7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTFNIIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9SU0ggfCBCUEZfWDpcbitcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0FSU0ggfCBCUEZfWDpcbitcdFx0ZW1pdF9hbHU2NF9zaGlmdChpbnNuLCBjdHgsIGZhbHNlKTtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9MU0ggfCBCUEZfSzpcbitcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX1JTSCB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfQVJTSCB8IEJQRl9LOlxuK1x0XHRlbWl0X2FsdTY0X3NoaWZ0KGluc24sIGN0eCwgdHJ1ZSk7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBCUEZfQUxVIHwgQlBGX01VTCB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfQUxVIHwgQlBGX0RJViB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfQUxVIHwgQlBGX01PRCB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfQUxVIHwgQlBGX01VTCB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfQUxVIHwgQlBGX0RJViB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfQUxVIHwgQlBGX01PRCB8IEJQRl9LOlxuK1x0XHRlbWl0X21hdGhfY2FsbChpbnNuLCBjdHgsIGZhbHNlKTtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NVUwgfCBCUEZfWDpcbitcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0RJViB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9EIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9NVUwgfCBCUEZfSzpcbitcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0RJViB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTU9EIHwgQlBGX0s6XG4rXHRcdGVtaXRfbWF0aF9jYWxsKGluc24sIGN0eCwgdHJ1ZSk7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBCUEZfQUxVIHwgQlBGX0VORCB8IEJQRl9UT19CRTpcbitcdGNhc2UgQlBGX0FMVSB8IEJQRl9FTkQgfCBCUEZfVE9fTEU6XG4rXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9FTkQgfCBCUEZfVE9fQkU6XG4rXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9FTkQgfCBCUEZfVE9fTEU6XG4rXHRcdGVtaXRfYnBmX2VuZChpbnNuLCBjdHgpO1xuK1x0XHRicmVhaztcbitcbitcdGNhc2UgQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVzoge1xuK1x0XHRjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24xID0gaW5zbiArIDE7XG4rXHRcdGNvbnN0IHM4ICpkc3QgPSBicGYybTY4a1tpbnNuLVx1MDAzZWRzdF9yZWddO1xuK1x0XHRjb25zdCBzOCAqdG1wMSA9IGJwZjJtNjhrW1RNUF9SRUdfMV07XG4rXHRcdHM4IGRfbG8gPSBicGZfZ2V0X3JlZzMyKGRzdFsxXSwgdG1wMVsxXSwgY3R4KTtcbitcdFx0czggZF9oaSA9IGJwZl9nZXRfcmVnMzIoZHN0WzBdLCB0bXAxWzBdLCBjdHgpO1xuK1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKGRfbG8gXHUwMDNjXHUwMDNjIDkpKTtcdFx0XHQvKiBtb3ZlLmwgI2ltbSwgZF9sbyAqL1xuK1x0XHRlbWl0XzMyKGN0eCwgaW5zbi1cdTAwM2VpbW0pO1xuK1x0XHRlbWl0XzE2KGN0eCwgMHgyMDNjIHwgKGRfaGkgXHUwMDNjXHUwMDNjIDkpKTtcdFx0XHQvKiBtb3ZlLmwgI2ltbSwgZF9oaSAqL1xuK1x0XHRlbWl0XzMyKGN0eCwgaW5zbjEtXHUwMDNlaW1tKTtcbitcbitcdFx0YnBmX3B1dF9yZWczMihkc3RbMV0sIGRfbG8sIGN0eCk7XG4rXHRcdGJwZl9wdXRfcmVnMzIoZHN0WzBdLCBkX2hpLCBjdHgpO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfQjpcbitcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfSDpcbitcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfVzpcbitcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfRFc6XG4rXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfQjpcbitcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9IOlxuK1x0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX1c6XG4rXHRcdGVtaXRfbGR4KGluc24sIGN0eCk7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9COlxuK1x0Y2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9IOlxuK1x0Y2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9XOlxuK1x0Y2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9EVzpcbitcdFx0ZW1pdF9zdHgoaW5zbiwgY3R4KTtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfQjpcbitcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9IOlxuK1x0Y2FzZSBCUEZfU1QgfCBCUEZfTUVNIHwgQlBGX1c6XG4rXHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfRFc6XG4rXHRcdGVtaXRfc3QoaW5zbiwgY3R4KTtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1c6XG4rXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0RXOlxuK1x0XHRlbWl0X2F0b21pYyhpbnNuLCBjdHgpO1xuK1x0XHRicmVhaztcbitcbitcdGNhc2UgQlBGX0pNUCB8IEJQRl9UQUlMX0NBTEw6XG4rXHRcdGVtaXRfdGFpbF9jYWxsKGluc24sIGN0eCk7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0pBOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSkE6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkVRIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkVRIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSk5FIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSk5FIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkdUIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkdUIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkdFIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkdFIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkxUIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkxUIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkxFIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSkxFIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSlNHVCB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0pTR1QgfCBCUEZfSzpcbitcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0dFIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSlNHRSB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0pTTFQgfCBCUEZfWDpcbitcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0xUIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSlNMRSB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfSk1QIHwgQlBGX0pTTEUgfCBCUEZfSzpcbitcdGNhc2UgQlBGX0pNUCB8IEJQRl9KU0VUIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfSlNFVCB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSkVRIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KRVEgfCBCUEZfSzpcbitcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pORSB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSk5FIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KR1QgfCBCUEZfWDpcbitcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pHVCB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSkdFIHwgQlBGX1g6XG4rXHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KR0UgfCBCUEZfSzpcbitcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pMVCB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSkxUIHwgQlBGX0s6XG4rXHRjYXNlIEJQRl9KTVAzMiB8IEJQRl9KTEUgfCBCUEZfWDpcbitcdGNhc2UgQlBGX0pNUDMyIHwgQlBGX0pMRSB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNHVCB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNHVCB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNHRSB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNHRSB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNMVCB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNMVCB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNMRSB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNMRSB8IEJQRl9LOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNFVCB8IEJQRl9YOlxuK1x0Y2FzZSBCUEZfSk1QMzIgfCBCUEZfSlNFVCB8IEJQRl9LOlxuK1x0XHRyZXR1cm4gZW1pdF9qbXAoaW5zbiwgY3R4LCBpKTtcbitcbitcdGNhc2UgQlBGX0pNUCB8IEJQRl9DQUxMOlxuK1x0XHRyZXR1cm4gZW1pdF9jYWxsKGluc24sIGN0eCk7XG4rXG4rXHRjYXNlIEJQRl9KTVAgfCBCUEZfRVhJVDpcbitcdFx0YnVpbGRfZXBpbG9ndWUoY3R4KTtcbitcdFx0YnJlYWs7XG4rXG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBidWlsZF9ib2R5KHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nID0gY3R4LVx1MDAzZXByb2c7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByb2ctXHUwMDNlbGVuOyBpKyspIHtcbitcdFx0Y29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuID0gXHUwMDI2cHJvZy1cdTAwM2VpbnNuc2lbaV07XG4rXHRcdGludCByZXQ7XG4rXG4rXHRcdGlmICghY3R4LVx1MDAzZXRhcmdldClcbitcdFx0XHRjdHgtXHUwMDNlb2Zmc2V0c1tpXSA9IGN0eC1cdTAwM2VpZHg7XG4rXG4rXHRcdHJldCA9IGJ1aWxkX2luc24oaW5zbiwgY3R4LCBpKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRpZiAoaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfTEQgfCBCUEZfSU1NIHwgQlBGX0RXKSkge1xuK1x0XHRcdGkrKztcbitcdFx0XHRpZiAoIWN0eC1cdTAwM2V0YXJnZXQpXG4rXHRcdFx0XHRjdHgtXHUwMDNlb2Zmc2V0c1tpXSA9IGN0eC1cdTAwM2VpZHg7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmICghY3R4LVx1MDAzZXRhcmdldClcbitcdFx0Y3R4LVx1MDAzZW9mZnNldHNbcHJvZy1cdTAwM2VsZW5dID0gY3R4LVx1MDAzZWlkeDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitib29sIGJwZl9qaXRfbmVlZHNfemV4dCh2b2lkKVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgdm9pZCBqaXRfZmlsbF9ob2xlKHZvaWQgKmFyZWEsIHVuc2lnbmVkIGludCBzaXplKVxuK3tcbitcdHUxNiAqcHRyO1xuK1xuK1x0Zm9yIChwdHIgPSBhcmVhOyBzaXplIFx1MDAzZT0gMjsgc2l6ZSAtPSAyKVxuK1x0XHQqcHRyKysgPSAweDRhZmM7XG4rfVxuK1xuK3N0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4re1xuK1x0c3RydWN0IGJwZl9iaW5hcnlfaGVhZGVyICpoZWFkZXI7XG4rXHRzdHJ1Y3Qgaml0X2N0eCBjdHg7XG4rXHR1bnNpZ25lZCBpbnQgaW1hZ2Vfc2l6ZTtcbitcdHU4ICppbWFnZV9wdHI7XG4rXHRib29sIGV4dHJhX3Bhc3MgPSBwcm9nLVx1MDAzZWppdGVkO1xuK1xuK1x0aWYgKCFwcm9nLVx1MDAzZWppdF9yZXF1ZXN0ZWQpXG4rXHRcdHJldHVybiBwcm9nO1xuK1xuK1x0aWYgKHByb2ctXHUwMDNlaml0ZWQgXHUwMDI2XHUwMDI2ICFwcm9nLVx1MDAzZWF1eC1cdTAwM2VmdW5jKVxuK1x0XHRyZXR1cm4gcHJvZztcbitcbitcdG1lbXNldChcdTAwMjZjdHgsIDAsIHNpemVvZihjdHgpKTtcbitcdGN0eC5wcm9nID0gcHJvZztcbitcbitcdGN0eC5vZmZzZXRzID0ga3ZjYWxsb2MocHJvZy1cdTAwM2VsZW4gKyAxLCBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWN0eC5vZmZzZXRzKVxuK1x0XHRyZXR1cm4gcHJvZztcbitcbitcdGJ1aWxkX3Byb2xvZ3VlKFx1MDAyNmN0eCk7XG4rXHRpZiAoYnVpbGRfYm9keShcdTAwMjZjdHgpIFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dF9vZmY7XG4rXHRidWlsZF9lcGlsb2d1ZShcdTAwMjZjdHgpO1xuK1xuK1x0aWYgKGV4dHJhX3Bhc3MpIHtcbitcdFx0aGVhZGVyID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlaml0X2RhdGE7XG4rXHRcdGltYWdlX3B0ciA9ICh1OCAqKXByb2ctXHUwMDNlYnBmX2Z1bmM7XG4rXHRcdGltYWdlX3NpemUgPSBwcm9nLVx1MDAzZWppdGVkX2xlbjtcbitcdH0gZWxzZSB7XG4rXHRcdGltYWdlX3NpemUgPSBjdHguaWR4ICogMjtcbitcdFx0aGVhZGVyID0gYnBmX2ppdF9iaW5hcnlfYWxsb2MoaW1hZ2Vfc2l6ZSwgXHUwMDI2aW1hZ2VfcHRyLCAyLCBqaXRfZmlsbF9ob2xlKTtcbitcdFx0aWYgKCFoZWFkZXIpXG4rXHRcdFx0Z290byBvdXRfb2ZmO1xuK1x0XHRwcm9nLVx1MDAzZWF1eC1cdTAwM2VqaXRfZGF0YSA9IGhlYWRlcjtcbitcdH1cbitcbitcdGN0eC50YXJnZXQgPSAodTE2ICopaW1hZ2VfcHRyO1xuK1x0Y3R4LmlkeCA9IDA7XG4rXG4rXHRidWlsZF9wcm9sb2d1ZShcdTAwMjZjdHgpO1xuK1x0aWYgKGJ1aWxkX2JvZHkoXHUwMDI2Y3R4KSBcdTAwM2MgMCkge1xuK1x0XHRicGZfaml0X2JpbmFyeV9mcmVlKGhlYWRlcik7XG4rXHRcdHByb2ctXHUwMDNlYXV4LVx1MDAzZWppdF9kYXRhID0gTlVMTDtcbitcdFx0cHJvZy1cdTAwM2VicGZfZnVuYyA9IE5VTEw7XG4rXHRcdHByb2ctXHUwMDNlaml0ZWQgPSAwO1xuK1x0XHRwcm9nLVx1MDAzZWppdGVkX2xlbiA9IDA7XG4rXHRcdGdvdG8gb3V0X29mZjtcbitcdH1cbitcdGJ1aWxkX2VwaWxvZ3VlKFx1MDAyNmN0eCk7XG4rXG4rXHRmbHVzaF9pY2FjaGVfcmFuZ2UoKHUzMiloZWFkZXIsICh1MzIpKGN0eC50YXJnZXQgKyBjdHguaWR4KSk7XG4rXG4rXHRpZiAoYnBmX2ppdF9lbmFibGUgXHUwMDNlIDEpXG4rXHRcdGJwZl9qaXRfZHVtcChwcm9nLVx1MDAzZWxlbiwgaW1hZ2Vfc2l6ZSwgMiwgY3R4LnRhcmdldCk7XG4rXG4rXHRpZiAoKCFwcm9nLVx1MDAzZWF1eC1cdTAwM2VmdW5jIHx8IGV4dHJhX3Bhc3MpIFx1MDAyNlx1MDAyNiBicGZfaml0X2JpbmFyeV9sb2NrX3JvKGhlYWRlcikpIHtcbitcdFx0YnBmX2ppdF9iaW5hcnlfZnJlZShoZWFkZXIpO1xuK1x0XHRwcm9nLVx1MDAzZWJwZl9mdW5jID0gTlVMTDtcbitcdFx0cHJvZy1cdTAwM2VqaXRlZCA9IDA7XG4rXHRcdHByb2ctXHUwMDNlaml0ZWRfbGVuID0gMDtcbitcdFx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlaml0X2RhdGEgPSBOVUxMO1xuK1x0XHRnb3RvIG91dF9vZmY7XG4rXHR9XG4rXG4rXHRwcm9nLVx1MDAzZWJwZl9mdW5jID0gKHZvaWQgKiljdHgudGFyZ2V0O1xuK1x0cHJvZy1cdTAwM2VqaXRlZCA9IDE7XG4rXHRwcm9nLVx1MDAzZWppdGVkX2xlbiA9IGltYWdlX3NpemU7XG4rXG4rb3V0X29mZjpcbitcdGt2ZnJlZShjdHgub2Zmc2V0cyk7XG4rXHRyZXR1cm4gcHJvZztcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNDo1MDowOC4xMzQ4MTc5NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NDk0NjM1MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHkgb2YgbTY4ayBCUEYgSklUIENvbXBpbGVyIFBhdGNoKipcblxuT2theSwgc28gd2UgaGF2ZSBhIHBhdGNoIGludHJvZHVjaW5nIGEgQlBGIEpJVCBjb21waWxlciBzcGVjaWZpY2FsbHkgZm9yIHRoZSBtNjhrIGFyY2hpdGVjdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkNhbiB3ZSBldmVuIGZ1enogdGhpcz9cIiBNeSBrbm93bGVkZ2UgdGVsbHMgbWUgdGhhdCBtNjhrIGlzbid0IGEgKnN0YW5kYXJkKiB0YXJnZXQgZm9yIGZ1enppbmcgd2l0aGluIHRoZSB1c3VhbCBzeXprYWxsZXIgc2V0dXBzLCB3aGljaCBsZWFuIHRvd2FyZHMgYXJjaGl0ZWN0dXJlcyBsaWtlIHg4Nl82NCwgYXJtNjQsIGV0Yy4gSG93ZXZlciwgbGV0J3Mgbm90IGp1bXAgdG8gY29uY2x1c2lvbnMuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGV4Y2x1ZGVzIHRoaW5ncyB0aGF0IGNhbid0IGJlIHJlYWNoZWQgaW4gUUVNVSwgYW5kIFFFTVUgKmRvZXMqIHN1cHBvcnQgbTY4ay4gVGhhdCdzIGEga2V5IHBvaW50LlxuXG5UaGUgcGF0Y2ggbW9kaWZpZXMgYE1BSU5UQUlORVJTYCwgYEtidWlsZGAsIGBLY29uZmlnYCwgYE1ha2VmaWxlYCwgYW5kIGludHJvZHVjZXMgYGJwZl9qaXRfY29tcC5jYCwgd2hpY2ggaXMgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24uIFRoaXMgbmV3IGZpbGUgaW1wbGVtZW50cyB0aGUgYWN0dWFsIEJQRiBKSVQgY29tcGlsZXIgZm9yIG02OGsuIE5vdywgaXMgdGhpcyBjb2RlIHJlYWNoYWJsZT8gVGhlIGltcG9ydGFudCB0aGluZyBpczogKklzIGl0IHBvc3NpYmxlIHRvIHJlYWNoIHRoZSBwYXRjaGVkIGNvZGU/KlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpdCBpbXBsZW1lbnRzIGBicGZfaW50X2ppdF9jb21waWxlYC4gIFRoYXQncyB0aGUgZW50cnkgcG9pbnQ7IHRoZSBwcm9tcHQgc2F5cyB0byBsb29rIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgbm90IHN0YXRpYy4gVGhlIGBNYWtlZmlsZWAgY29uZmlybXMgdGhhdCBgQ09ORklHX0JQRl9KSVRgIGlzIG5lY2Vzc2FyeS4gTm93IEkgbmVlZCB0byBjb25maXJtIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyBhbiBBUEkgZW50cnkgcG9pbnQsIHNvIEknbSBzdXJlIG9mIHdoYXQgdG8gZW5hYmxlLiBUaGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIGNvcmUgQlBGIHN1YnN5c3RlbS4gV2hlbiBhIEJQRiBwcm9ncmFtIGlzIGxvYWRlZCBhbmQgSklUIGlzIGVuYWJsZWQsIGl0J3MgY2FsbGVkLiBUaGlzIG1lYW5zIHRoYXQsIGFzc3VtaW5nIHRoZSBjb25maWcgaXMgZW5hYmxlZCwgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHRyaWdnZXIgdGhlIG5ldyBjb2RlLlxuXG5UaGUgcHJvbXB0IGd1aWRlcyBtZSB0b3dhcmQgYSBcIldvcnRoRnV6emluZ1wiIGRlY2lzaW9uLiAgU2luY2UgaXQncyBtNjhrLXNwZWNpZmljLCBhbmQgbTY4ayAqaXMqIGVtdWxhYmxlIGluIFFFTVUsIHRoZSBjb2RlICpzaG91bGQqIGJlIHJlYWNoYWJsZSB1bmRlciBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGlzIHN1Z2dlc3RzIGZ1enppbmcgaXMgKnBvc3NpYmxlKi4gVGhlIGluc3RydWN0aW9ucyBzYXkgXCJpZiB0aGUgY29kZSBpcyByZWFjaGFibGUgaW4gUUVNVSwgcmV0dXJuIFdvcnRoRnV6emluZz10cnVlXCIuIEl0J3Mgbm90IGV4Y2x1ZGVkIGFuZCBpcyBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmVhdHVyZSBpbiBhbiBhcmNoaXRlY3R1cmUgc3VwcG9ydGVkIGJ5IFFFTVUuXG5cblNvLCBsZXQgbWUgZXh0cmFjdCB0aGUgY29uZmlnIHJlcXVpcmVtZW50cy4gVGhlIGBNYWtlZmlsZWAgc2hvd3MgYENPTkZJR19CUEZfSklUYCBpcyBuZWVkZWQuIGBIQVZFX0VCUEZfSklUYCBpcyBhbHNvIHNlbGVjdGVkIGlmIG5vdCBgQ09MREZJUkVgIG9yIGBNNjgwMDBgLCBiYXNlZCBvbiB0aGUgYEtjb25maWdgLiBUaGVyZWZvcmUsIEkgbXVzdCBlbmFibGUgYEJQRl9KSVRgLlxuXG5JIGNvbmZpcm0gYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIHRoYXQgYGJwZl9qaXRfbmVlZHNfemV4dGAgaXMgdGhlIG9ubHkgZnVuY3Rpb24gbm90IHN0YXRpYywgYXBhcnQgZnJvbSBgYnBmX2ludF9qaXRfY29tcGlsZWAuXG5cblRoZSBjb25jbHVzaW9uIGlzLCBpdCBpcyBmZWFzaWJsZSB0byBmdXp6LCBhbmQgSSB3b3VsZCBub3cgbW92ZSBvbiB0byBjb25maXJtaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHJ1bm5pbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgdGVzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODUwLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA0OjUwOjIyLjYyOTQ1OTY0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODAwODE5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYz0xNTQ5PXN0YXRpYyB2b2lkIGppdF9maWxsX2hvbGUodm9pZCAqYXJlYSwgdW5zaWduZWQgaW50IHNpemUpXFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE1NTYtXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxNTU3OnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNTU4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDQ6NTA6MjIuNzE3NDc1MjU0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyMjQzMDEzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgSklUIENvbXBpbGVyIFN5bWJvbHMqKlxuXG5BbHJpZ2h0LCBzbyBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXNuJ3Qgc3RhdGljLiBUaGF0J3MgZ29vZCB0byBrbm93LCBjb25maXJtaW5nIG15IGluaXRpYWwgaHVuY2guIEJ1dCBub3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3aGF0IGFib3V0IGBicGZfaml0X25lZWRzX3pleHRgPyBJcyB0aGF0IHN0YXRpYyBvciBub3Q/IFRoZSBhbnN3ZXIgdG8gdGhhdCB3aWxsIGhhdmUgaW1wbGljYXRpb25zIGZvciB0aGUgSklUIGNvbXBpbGVyIGltcGxlbWVudGF0aW9uIGFuZCBob3cgbW9kdWxhciB0aGluZ3MgYXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdmlzaWJpbGl0eSBvZiB0aGF0IHN5bWJvbCB0byBlbnN1cmUgcHJvcGVyIGxpbmtpbmcgYW5kIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiB3aXRoIG90aGVyIEJQRiBjb21wb25lbnRzLiBJdCdzIGEga2V5IHBpZWNlIGluIHRoZSBwdXp6bGUsIGFuZCBJIG5lZWQgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwODczLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDQ6NTA6MjUuOTM5OTA5ODg3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTk5ODA3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X25lZWRzX3pleHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jPTE1MTU9c3RhdGljIGludCBidWlsZF9ib2R5KHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE1NDMtXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxNTQ0OmJvb2wgYnBmX2ppdF9uZWVkc196ZXh0KHZvaWQpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNTQ1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDQ6NTA6MjYuMDQxOTE3NDg1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0MTgxOTIyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBGdW5jdGlvbiBTY29wZSBpbiBCUEYgSklUKipcblxuUmlnaHQsIHNvIEknbSByZXZpc2l0aW5nIHRoZSBCUEYgSklUIGNvZGUgYW5kIHRha2luZyBhIGNsb3NlciBsb29rIGF0IGZ1bmN0aW9uIHNjb3BlLiBJIHNlZSB0aGF0IGBicGZfaml0X25lZWRzX3pleHRgIGlzICphbHNvKiBkZWNsYXJlZCBub24tc3RhdGljLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24sIHdvcnRoIG5vdGluZy4gTm93LCB0aGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBwb3BzIGludG8gbXkgaGVhZCBpczogYXJlIHRoZXJlICphbnkqIG90aGVyIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBjb2RlIGJhc2UgdGhhdCBhcmVuJ3QgZGVjbGFyZWQgYXMgc3RhdGljPyBJdOKAmXMgYSBnb29kIHByYWN0aWNlIHRvIGRlY2xhcmUgZnVuY3Rpb25zIHN0YXRpYyB3aGVuIHBvc3NpYmxlLCB0byBhdm9pZCBpbmFkdmVydGVudCBleHRlcm5hbCBsaW5rYWdlIGFuZCByZWR1Y2UgdGhlIGNoYW5jZXMgb2YgbmFtZSBjb2xsaXNpb25zIGluIGxhcmdlciBwcm9qZWN0cy4gSWRlbnRpZnlpbmcgKmFsbCogc3VjaCBub24tc3RhdGljIGZ1bmN0aW9ucyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBvciB0aG9zZSBhcmVhcyB3aGVyZSBleHRlcm5hbCBsaW5rYWdlIG1pZ2h0IGJlIGludGVudGlvbmFsLiBJIG5lZWQgdG8gbWFrZSBhIHRob3JvdWdoIHBhc3MgdGhyb3VnaCB0aGUgc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI0MCwiT3V0cHV0VG9rZW5zIjo4MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA0OjUwOjMwLjM4Mzc0MDEyMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTE5OTU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFxzK1xcXFwqKlthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxccypcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM9MTUxNT1zdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGppdF9jdHggKmN0eClcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTU0My1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjE1NDQ6Ym9vbCBicGZfaml0X25lZWRzX3pleHQodm9pZClcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE1NDUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNDo1MDozMC40NDg5NDYzOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjgxNTQ3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemluZyB0aGVtIGZyb20gYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUsIGFzc3VtaW5nIEknbSBhbHJlYWR5IGRlZXAgaW4gdGhpcyBjb2RlOlxuXG4qKlJlZ2V4IFNuYWZ1IGFuZCBhIFF1aWNrIEZpeCoqXG5cblJpZ2h0LCBkYW1uIGl0ISBJIGp1c3QgcmVhbGl6ZWQgbXkgaW5pdGlhbCByZWdleCBkaWRuJ3QgZmxhZyBgYnBmX2ludF9qaXRfY29tcGlsZWAuIEl0J3MgZ290IHRoYXQgYHN0cnVjdCBicGZfcHJvZyAqYCByZXR1cm4gdHlwZSwgd2hpY2ggbXkgcHJldmlvdXMgcGF0dGVybiBjb21wbGV0ZWx5IG1pc3NlZC4gSSB3YXMgc28gZm9jdXNlZCBvbiB0aGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYsIEkgb3Zlcmxvb2tlZCB0aGF0IGRldGFpbCBpbiB0aGUgc2lnbmF0dXJlLiBPa2F5LCBubyBwcm9ibGVtLCBJIGNhbiBhZGFwdC4gVGhpbmtpbmcgSSdsbCBqdXN0IGJyb2FkZW4gdGhlIHNlYXJjaC4gSSBjYW4gdXNlIHNvbWV0aGluZyBzaW1wbGUgbGlrZSBgXnN0cnVjdCAuKmAgdG8gbWF0Y2ggYW55IGxpbmUgdGhhdCBzdGFydHMgd2l0aCBgc3RydWN0YCBmb2xsb3dlZCBieSBhbnl0aGluZy4gVGhhdCBzaG91bGQgZ3JhYiB0aGUgb25lcyBJIG5lZWQgd2l0aG91dCBnZXR0aW5nIHRvbyBzcGVjaWZpYy4gTmVlZCB0byBrZWVwIHRoaXMgbW92aW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMTY3NiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA0OjUwOjM0LjE3NzEwNDg4NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMyMTQ5NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXS4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jPTYzPXN0cnVjdCBqaXRfY3R4IHtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNjktXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo3MDpzdGF0aWMgbm9pbmxpbmUgdTMyIGppdF9tdWwzMih1MzIgYSwgdTMyIGIpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy03MS17XFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTc0LVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6NzU6c3RhdGljIG5vaW5saW5lIHUzMiBqaXRfZGl2MzIodTMyIGEsIHUzMiBiKVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNzYte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy03OS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjgwOnN0YXRpYyBub2lubGluZSB1MzIgaml0X21vZDMyKHUzMiBhLCB1MzIgYilcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTgxLXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtODQtXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo4NTpzdGF0aWMgbm9pbmxpbmUgczMyIGppdF9zZGl2MzIoczMyIGEsIHMzMiBiKVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtODYte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy05My1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjk0OnN0YXRpYyBub2lubGluZSBzMzIgaml0X3Ntb2QzMihzMzIgYSwgczMyIGIpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy05NS17XFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTEwMi1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjEwMzpzdGF0aWMgbm9pbmxpbmUgdTY0IGppdF9tdWw2NCh1NjQgYSwgdTY0IGIpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMDQte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMDctXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxMDg6c3RhdGljIG5vaW5saW5lIHU2NCBqaXRfZGl2NjQodTY0IGEsIHU2NCBiKVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTA5LXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTEyLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MTEzOnN0YXRpYyBub2lubGluZSBzNjQgaml0X3NkaXY2NChzNjQgYSwgczY0IGIpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMTQte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMjEtXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxMjI6c3RhdGljIG5vaW5saW5lIHU2NCBqaXRfbW9kNjQodTY0IGEsIHU2NCBiKVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTIzLXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTMxLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MTMyOnN0YXRpYyBub2lubGluZSBzNjQgaml0X3Ntb2Q2NChzNjQgYSwgczY0IGIpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMzMte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNDAtXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxNDE6c3RhdGljIHUzMiBqaXRfYXRvbWljMzIodTMyICpwdHIsIHUzMiB2YWwsIHUzMiBvcCwgdTMyIGNtcClcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE0Mi17XFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE3Ny1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjE3ODpzdGF0aWMgdTY0IGppdF9hdG9taWM2NCh1MzIgKnB0ciwgdTMyIHZhbF9oaSwgdTMyIHZhbF9sbywgdTMyIG9wLCB1MzIgY21wX2hpLCB1MzIgY21wX2xvKVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTc5LXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjE4LVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MjE5OnN0YXRpYyBpbmxpbmUgdm9pZCBlbWl0XzE2KHN0cnVjdCBqaXRfY3R4ICpjdHgsIHUxNiBpbnN0KVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjIwLXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjI1LVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MjI2OnN0YXRpYyBpbmxpbmUgdm9pZCBlbWl0XzMyKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHUzMiB2YWwpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0yMjcte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0yMzEtXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoyMzI6c3RhdGljIGlubGluZSBib29sIGlzX3N0YWNrZWQoczggcmVnKVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjMzLXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjM2LVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MjM3OnN0YXRpYyBzOCBicGZfZ2V0X3JlZzMyKHM4IGJwZl9yZWcsIHM4IHRtcF9yZWcsIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0yMzgte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0yNDYtXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoyNDc6c3RhdGljIHZvaWQgYnBmX3B1dF9yZWczMihzOCBicGZfcmVnLCBzOCBzcmNfcmVnLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjQ4LXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMjU2LVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MjU3OnN0YXRpYyB2b2lkIGVtaXRfYWx1MzJfbmVnKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTI1OC17XFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTI2OS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjI3MDpzdGF0aWMgdm9pZCBlbWl0X2FsdTY0X25lZyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0yNzEte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0yODMtXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoyODQ6c3RhdGljIHZvaWQgZW1pdF9hbHUzMl94KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTI4NS17XFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTM0OS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjM1MDpzdGF0aWMgdm9pZCBlbWl0X2FsdTMyX2soY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMzUxLXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNDAzLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6NDA0OnN0YXRpYyB2b2lkIGVtaXRfYWx1NjRfeChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy00MDUte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy00NjMtXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo0NjQ6c3RhdGljIHZvaWQgZW1pdF9hbHU2NF9rKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTQ2NS17XFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTUyMC1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjUyMTpzdGF0aWMgdm9pZCBlbWl0X2FsdTY0X3NoaWZ0KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBpc19pbW0pXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy01MjIte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy01NzUtXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo1NzY6c3RhdGljIHZvaWQgZW1pdF9icGZfZW5kKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTU3Ny17XFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTYzMS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjYzMjpzdGF0aWMgdm9pZCBlbWl0X21hdGhfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgaXNfNjQpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy02MzMte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy03MzktXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo3NDA6c3RhdGljIHZvaWQgZW1pdF9sZHgoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtNzQxLXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtODAyLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6ODAzOnN0YXRpYyB2b2lkIGVtaXRfc3R4KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTgwNC17XFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTg0My1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjg0NDpzdGF0aWMgdm9pZCBlbWl0X3N0KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTg0NS17XFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTg4NS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjg4NjpzdGF0aWMgdm9pZCBlbWl0X2F0b21pYyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy04ODcte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy05ODctXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzo5ODg6c3RhdGljIHZvaWQgZW1pdF90YWlsX2NhbGwoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtOTg5LXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTA1MS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjEwNTI6c3RhdGljIGludCBlbWl0X2ptcChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBjdXJyX2kpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMDUzLXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTIxNi1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjEyMTc6c3RhdGljIGludCBlbWl0X2NhbGwoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTIxOC17XFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTEyNTItXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxMjUzOnN0YXRpYyB2b2lkIGJ1aWxkX3Byb2xvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMjU0LXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTMwMi1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjEzMDM6c3RhdGljIHZvaWQgYnVpbGRfZXBpbG9ndWUoc3RydWN0IGppdF9jdHggKmN0eClcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTEzMDQte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xMzExLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MTMxMjpzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgaSlcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTEzMTMte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNTE0LVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MTUxNTpzdGF0aWMgaW50IGJ1aWxkX2JvZHkoc3RydWN0IGppdF9jdHggKmN0eClcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE1MTYte1xcbi0tXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNTQzLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmM6MTU0NDpib29sIGJwZl9qaXRfbmVlZHNfemV4dCh2b2lkKVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTU0NS17XFxuLS1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE1NDgtXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYzoxNTQ5OnN0YXRpYyB2b2lkIGppdF9maWxsX2hvbGUodm9pZCAqYXJlYSwgdW5zaWduZWQgaW50IHNpemUpXFxuYXJjaC9tNjhrL25ldC9icGZfaml0X2NvbXAuYy0xNTUwLXtcXG4tLVxcbmFyY2gvbTY4ay9uZXQvYnBmX2ppdF9jb21wLmMtMTU1Ni1cXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jOjE1NTc6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5hcmNoL202OGsvbmV0L2JwZl9qaXRfY29tcC5jLTE1NTgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNDo1MDozNC4yNDAzMjcxODRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEyNjU1NTU2NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2ggZm9yIG02OGsgQXJjaGl0ZWN0dXJlKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBgYnBmX2ppdF9uZWVkc196ZXh0YCBhcmUgdGhlIHR3byBrZXkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBwYXRjaC4gIGBicGZfaW50X2ppdF9jb21waWxlYCBsb29rcyBsaWtlIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgSklUIGNvbXBpbGVyIGl0c2VsZiwgd2hpY2ggaXMgY3J1Y2lhbC4gIGBicGZfaml0X25lZWRzX3pleHRgIGlzIGFsc28gYW4gaW1wb3J0YW50IGVudHJ5IHBvaW50IGNhbGxlZCBmcm9tIHRoZSBjb3JlIEJQRiBjb2RlLlxuXG5Ob3csIGNoZWNraW5nIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBgYXJjaC9tNjhrL0tjb25maWdgIHJldmVhbHMgdGhhdCBgQ09ORklHX0JQRl9KSVRgIGlzIHRoZSBjcml0aWNhbCBvcHRpb24gaGVyZS4gIFRoZSBjb2RlIHNlbGVjdHMgYEhBVkVfRUJQRl9KSVRgIGlmIHdlJ3JlICpub3QqIGRlYWxpbmcgd2l0aCBDT0xERklSRSBvciBNNjgwMDAgcHJvY2Vzc29ycy5cblxuVGhlIHByb21wdCBzdGlwdWxhdGVzIHRoYXQgd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgaXMgXCJXb3J0aEZ1enppbmcuXCIgQ29uc2lkZXJpbmcgdGhlIGNyaXRlcmlhLCB0aGUgbTY4ayBhcmNoaXRlY3R1cmUgaXMgYSBmYWN0b3IuICBXaGlsZSBTeXprYWxsZXIgZG9lc24ndCB0eXBpY2FsbHkgZm9jdXMgb24gbTY4aywgUUVNVSBkb2VzIHN1cHBvcnQgaXQsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGl0J3MgZnV6emFibGUuICBUaGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgQlBGIEpJVCBjb21waWxlciBmb3IgYSBuZXcgYXJjaGl0ZWN0dXJlLlxuXG5NeSBzdHJhdGVneSBpcyB0byBkZWZpbmUgdGhlIFwiV29ydGhGdXp6aW5nXCIgcGFyYW1ldGVyLiBTaW5jZSB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUga2VybmVsIChhIEpJVCBjb21waWxlciBmb3IgYSBuZXcgYXJjaGl0ZWN0dXJlKSwgSSdsbCBzZXQgdGhpcyB0byB0cnVlLlxuXG5UbyBzdXBwb3J0IHRoaXMgZGVjaXNpb24sIEkgbmVlZCB0byBwcm92aWRlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuICBUaGUgY29yZSBmdW5jdGlvbmFsaXR5IHJldm9sdmVzIGFyb3VuZCBgYnBmX2ludF9qaXRfY29tcGlsZWAgYW5kIGBicGZfaml0X25lZWRzX3pleHRgLiAgU28gbXkgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgW1wiYnBmX2ludF9qaXRfY29tcGlsZVwiLCBcImJwZl9qaXRfbmVlZHNfemV4dFwiXWAuICBUaGUgcmVsZXZhbnQgY29uZmlnLCBhbmQgdmVyaWZpZWQgYnkgYGFyY2gvbTY4ay9uZXQvTWFrZWZpbGVgLCBpcyBgQlBGX0pJVGAsIHNvIG15IGBFbmFibGVDb25maWdzYCBsaXN0IHdpbGwgYmUgYFtcIkJQRl9KSVRcIl1gLlxuXG5JJ3ZlIGFsc28gY29uZmlybWVkIHRoYXQgYEJQRl9KSVRgIHVzdWFsbHkgZGVwZW5kcyBvbiBgSEFWRV9FQlBGX0pJVGAsIHdoaWNoLCBpbiB0aGlzIGNhc2UsIGlzIGluZGVlZCBzZWxlY3RlZCBiYXNlZCBvbiB0aGUgS2NvbmZpZyBmaWxlLiBJIHdpbGwgYWxzbyBtYWtlIHN1cmUgdG8gc3BlY2lmeSBhIGdvb2QgcmVhc29uIGluIHRoZSBmaW5hbCByZXNwb25zZS5cblxuRmluYWxseSwgbmVpdGhlciBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhpcyBpcyBiZWNhdXNlIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyBjYWxsZWQgd2hlbiBhIEJQRiBwcm9ncmFtIGlzIGxvYWRlZCBhbmQgYGJwZl9qaXRfbmVlZHNfemV4dGAgaXMgY2FsbGVkIGR1cmluZyBwcm9ncmFtIGxvYWRpbmcgb3IgdmVyaWZpY2F0aW9uLiBUaGlzIGltcGxpZXMgdGhhdCB0aGV5IHdpbGwgYmUgY2FsbGVkIGR1cmluZyBjb250cm9sLXBhdGggb3BlcmF0aW9uIGFuZCBhcmUgdGhlcmVmb3JlIHRlc3RhYmxlLlxuXG5TbyB0aGUgZmluYWwgc2V0IHdpbGwgYmU6XG5Xb3J0aEZ1enppbmc6IHRydWVcbkZvY3VzU3ltYm9sczogW1wiYnBmX2ludF9qaXRfY29tcGlsZVwiLCBcImJwZl9qaXRfbmVlZHNfemV4dFwiXVxuRW5hYmxlQ29uZmlnczogW1wiQlBGX0pJVFwiXVxuUmVhc29uaW5nOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBKSVQgY29tcGlsZXIgZm9yIHRoZSBtNjhrIGFyY2hpdGVjdHVyZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGR1cmluZyBCUEYgcHJvZ3JhbSBsb2FkaW5nIHdoZW4gSklUIGlzIGVuYWJsZWQsIGFuZCBjYW4gYmUgdGVzdGVkIGluIFFFTVUuXCJcblxuXG4iLCJJbnB1dFRva2VucyI6MzU4MTUsIk91dHB1dFRva2VucyI6MTAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA0OjUwOjQ1LjUwNTg4NjMyN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODkyNjk5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9qaXRfbmVlZHNfemV4dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIEpJVCBjb21waWxlciBmb3IgdGhlIG02OGsgYXJjaGl0ZWN0dXJlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIEJQRiBwcm9ncmFtIGxvYWRpbmcgd2hlbiBKSVQgaXMgZW5hYmxlZCwgYW5kIGNhbiBiZSB0ZXN0ZWQgaW4gUUVNVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICAgIFwiYnBmX2ppdF9uZWVkc196ZXh0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYgSklUIGNvbXBpbGVyIGZvciB0aGUgbTY4ayBhcmNoaXRlY3R1cmUuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgQlBGIHByb2dyYW0gbG9hZGluZyB3aGVuIEpJVCBpcyBlbmFibGVkLCBhbmQgY2FuIGJlIHRlc3RlZCBpbiBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowh2jjw[1] Phase: Succeeded StartedAt: 2026-07-30 04:51:08 +0000 UTC FinishedAt: 2026-07-30 04:51:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 04:51:08 +0000 UTC FinishedAt: 2026-07-30 04:51:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[2] Phase: Succeeded StartedAt: 2026-07-30 04:51:08 +0000 UTC FinishedAt: 2026-07-30 05:38:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 04:51:08 +0000 UTC FinishedAt: 2026-07-30 05:38:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 04:51:08 +0000 UTC FinishedAt: 2026-07-30 04:51:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 04:51:08 +0000 UTC FinishedAt: 2026-07-30 04:51:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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-workflowh2jjw/series-workflowh2jjw-convert-artifact-2477398464/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 04:51:18 +0000 UTC FinishedAt: 2026-07-30 05:12:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 04:51:18 +0000 UTC FinishedAt: 2026-07-30 05:12:59 +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:*6c56c99e-33cb-4e69-8c30-35fdc4bf5681,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-workflowh2jjw/series-workflowh2jjw-convert-artifact-2477398464/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": "903f8d29-b3fe-48f7-bf20-c1eef91e4b8d", "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-workflowh2jjw/series-workflowh2jjw-build-action-941425030/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 04:51:18 +0000 UTC FinishedAt: 2026-07-30 05:12:57 +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:*6c56c99e-33cb-4e69-8c30-35fdc4bf5681,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-workflowh2jjw/series-workflowh2jjw-convert-artifact-2477398464/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": "903f8d29-b3fe-48f7-bf20-c1eef91e4b8d", "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-workflowh2jjw/series-workflowh2jjw-build-action-941425030/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:12:59 +0000 UTC FinishedAt: 2026-07-30 05:12:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:12:59 +0000 UTC FinishedAt: 2026-07-30 05:12:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:12:59 +0000 UTC FinishedAt: 2026-07-30 05:13:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:12:59 +0000 UTC FinishedAt: 2026-07-30 05:13:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-workflowh2jjw/series-workflowh2jjw-convert-artifact-72888423/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:13:09 +0000 UTC FinishedAt: 2026-07-30 05:15:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:13:09 +0000 UTC FinishedAt: 2026-07-30 05:14:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*903f8d29-b3fe-48f7-bf20-c1eef91e4b8d,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-workflowh2jjw/series-workflowh2jjw-build-action-941425030/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-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:15:09 +0000 UTC FinishedAt: 2026-07-30 05:15:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:15:09 +0000 UTC FinishedAt: 2026-07-30 05:15:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:15:09 +0000 UTC FinishedAt: 2026-07-30 05:33:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:15:09 +0000 UTC FinishedAt: 2026-07-30 05:33: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:*6c56c99e-33cb-4e69-8c30-35fdc4bf5681,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-workflowh2jjw/series-workflowh2jjw-convert-artifact-72888423/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": "f6a4721f-2b1b-4d1b-84d3-677b6e45bc4f", "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-workflowh2jjw/series-workflowh2jjw-build-action-3945064427/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:15:09 +0000 UTC FinishedAt: 2026-07-30 05:32:50 +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:*6c56c99e-33cb-4e69-8c30-35fdc4bf5681,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-workflowh2jjw/series-workflowh2jjw-convert-artifact-72888423/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": "f6a4721f-2b1b-4d1b-84d3-677b6e45bc4f", "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-workflowh2jjw/series-workflowh2jjw-build-action-3945064427/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:33:00 +0000 UTC FinishedAt: 2026-07-30 05:33:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:33:00 +0000 UTC FinishedAt: 2026-07-30 05:33:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:33:00 +0000 UTC FinishedAt: 2026-07-30 05:35:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:33:00 +0000 UTC FinishedAt: 2026-07-30 05:35:05 +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:*f6a4721f-2b1b-4d1b-84d3-677b6e45bc4f,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-workflowh2jjw/series-workflowh2jjw-build-action-3945064427/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-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:35:15 +0000 UTC FinishedAt: 2026-07-30 05:38:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:35:15 +0000 UTC FinishedAt: 2026-07-30 05:38:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_jit_needs_zext"],"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:*903f8d29-b3fe-48f7-bf20-c1eef91e4b8d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f6a4721f-2b1b-4d1b-84d3-677b6e45bc4f,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-workflowh2jjw/series-workflowh2jjw-build-action-941425030/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-workflowh2jjw/series-workflowh2jjw-build-action-3945064427/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:35:15 +0000 UTC FinishedAt: 2026-07-30 05:35:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:35:15 +0000 UTC FinishedAt: 2026-07-30 05:35:20 +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_int_jit_compile","bpf_jit_needs_zext"],"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-workflowh2jjw/series-workflowh2jjw-convert-artifact-2635310784/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:35:15 +0000 UTC FinishedAt: 2026-07-30 05:35:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:35:15 +0000 UTC FinishedAt: 2026-07-30 05:35:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:35:16 +0000 UTC FinishedAt: 2026-07-30 05:35:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:35:26 +0000 UTC FinishedAt: 2026-07-30 05:38:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh2jjw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_int_jit_compile","bpf_jit_needs_zext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8522d806d84e2c3816c275ae6dd79e124c1b3dac","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"b88440f3-0761-4f9b-9753-6b767544e77d","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-07-30 05:35:26 +0000 UTC FinishedAt: 2026-07-30 05:37:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*903f8d29-b3fe-48f7-bf20-c1eef91e4b8d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f6a4721f-2b1b-4d1b-84d3-677b6e45bc4f,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-workflowh2jjw/series-workflowh2jjw-build-action-941425030/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-workflowh2jjw/series-workflowh2jjw-build-action-3945064427/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-workflowh2jjw/series-workflowh2jjw-convert-artifact-2635310784/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,}