Name: series-workflowlpzl5 Phase: Succeeded StartedAt: 2026-09-07 20:02:42 +0000 UTC FinishedAt: 2026-09-08 00:13:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[0] Phase: Succeeded StartedAt: 2026-09-07 20:02:42 +0000 UTC FinishedAt: 2026-09-07 20:31:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 20:02:42 +0000 UTC FinishedAt: 2026-09-07 20:31:53 +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": "1b7415bf70be95b9a1e7e87d544867881065613f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL" ], "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": "1b7415bf70be95b9a1e7e87d544867881065613f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL" ], "series_id": "4ec34d01-b45f-4610-86a0-8e3acd7f636c" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "arch_bpf_trampoline_size", "__arch_prepare_bpf_trampoline", "bpf_trampoline_update", "bpf_struct_ops_prepare_trampoline" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcmNoX2JwZl90cmFtcG9saW5lX3NpemUmIzM0OywKICAgICYjMzQ7X19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUmIzM0OywKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfdXBkYXRlJiMzNDssCiAgICAmIzM0O2JwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGR5bmFtaWMgcGVyLWNhbGwgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uICh2aWEgZXhlY21lbV9hbGxvYy9leGVjbWVtX2ZyZWUpIG9mIGEgZHVtbXkgc2NyYXRjaCBidWZmZXIgaW4gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKCkgd2l0aCBhIHN0YXRpY2FsbHkgcHJlLWFsbG9jYXRlZCBwYWdlIGJ1ZmZlciAodHJhbXBvbGluZV9zaXplX2ltYWdlKS4gVGhlIGJ1ZmZlciBpcyB1c2VkIHN0cmljdGx5IGFzIGEgd3JpdGUtb25seSBzaW5rIGZvciBpbnN0cnVjdGlvbiBlbWlzc2lvbiBkdXJpbmcgZHJ5LXJ1biB0cmFtcG9saW5lIGdlbmVyYXRpb24gaW4gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKSB0byBkZXRlcm1pbmUgdGhlIHJlcXVpcmVkIGJ1ZmZlciBzaXplLiBJdHMgY29udGVudHMgYXJlIG5ldmVyIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gU3RhY2sgdmFyaWFibGVzIHN1Y2ggYXMgJiMzOTtpbSYjMzk7IGFyZSBwYXNzZWQgdG8gc2F0aXNmeSBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFuZCBhcmUgbm90IHJlYWQgdW5pbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVhaywgb3IgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCBzdGF0ZSBpcyBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZDsgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBzdWZmaWNlcyBmb3IgYW55IG1lbW9yeSBzYWZldHkgdmVyaWZpY2F0aW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwZXItY2FsbCBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGggYSBzaW5nbGUgc3RhdGljIGdsb2JhbCBidWZmZXIgKHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSkgZm9yIGNhbGN1bGF0aW5nIEJQRiB0cmFtcG9saW5lIHNpemUgaW4gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKCkuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBpbiB0aGUgeDg2IEJQRiBKSVQgc3Vic3lzdGVtIHdoZW4gdXBkYXRpbmcgQlBGIHRyYW1wb2xpbmVzIG9yIHByZXBhcmluZyBCUEYgc3RydWN0X29wcy4gRnV6emluZyBjYW4gdmVyaWZ5IGNvcnJlY3RuZXNzLCBtZW1vcnkgc2FmZXR5LCBhbmQgY29uY3VycmVuY3kgYmVoYXZpb3IgYWNyb3NzIEJQRiB0cmFtcG9saW5lIHVwZGF0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5NzhhZGJjODBlNWNhNjFiM2M3ZjE3MDQ4NzVlMGRmZmE4YzliOTNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAyMDozMDozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IGJiYTM1MTk0NDIwMmMuLjEzZWYwZDUzY2EyOTYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTksNiAmIzQzOzksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbHRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl92ZXJpZmllci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5LmhcdTAwM2VcbkBAIC0zNSw2ICYjNDM7MzYsMTUgQEAgdm9pZCBfX2FzYW5fc3RvcmU4KHZvaWQgKnApO1xuIFxuIHN0YXRpYyBib29sIGFsbF9jYWxsZWVfcmVnc191c2VkWzRdID0ge3RydWUsIHRydWUsIHRydWUsIHRydWV9O1xuIFxuJiM0MztzdGF0aWMgdm9pZCAqdHJhbXBvbGluZV9zaXplX2ltYWdlO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXQgaW5pdF90cmFtcG9saW5lX3NpemVfaW1hZ2Uodm9pZClcbiYjNDM7e1xuJiM0MztcdHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSA9IGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9NT0RVTEVfREFUQSwgUEFHRV9TSVpFKTtcbiYjNDM7XHRyZXR1cm4gdHJhbXBvbGluZV9zaXplX2ltYWdlID8gMCA6IC1FTk9NRU07XG4mIzQzO31cbiYjNDM7bGF0ZV9pbml0Y2FsbChpbml0X3RyYW1wb2xpbmVfc2l6ZV9pbWFnZSk7XG4mIzQzO1xuIHN0YXRpYyB1OCAqZW1pdF9jb2RlKHU4ICpwdHIsIHUzMiBieXRlcywgdW5zaWduZWQgaW50IGxlbilcbiB7XG4gXHRpZiAobGVuID09IDEpXG5AQCAtNDAwMCwyNCAmIzQzOzQwMTAsMTQgQEAgaW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbiBcdFx0XHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxuIHtcbiBcdHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgaW07XG4tXHR2b2lkICppbWFnZTtcbi1cdGludCByZXQ7XG4gXG4tXHQvKiBBbGxvY2F0ZSBhIHRlbXBvcmFyeSBidWZmZXIgZm9yIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkuXG4tXHQgKlxuLVx0ICogV2UgY2Fubm90IHVzZSBrdm1hbGxvYyBoZXJlLCBiZWNhdXNlIHdlIG5lZWQgaW1hZ2UgdG8gYmUgaW5cbi1cdCAqIG1vZHVsZSBtZW1vcnkgcmFuZ2UuXG4tXHQgKiBTaW5jZSBpdCBtdXN0IGJlIHdyaXRhYmxlIHVzZSBleGVjbWVtX2FsbG9jKEVYRUNNRU1fTU9EVUxFX0RBVEEpXG4tXHQgKiB0aGF0IHJldHVybnMgd3JpdGFibGUgbWVtb3J5IGluIHRoZSBtb2R1bGUgYWRkcmVzcyBzcGFjZS5cbi1cdCAqL1xuLVx0aW1hZ2UgPSBleGVjbWVtX2FsbG9jKEVYRUNNRU1fTU9EVUxFX0RBVEEsIFBBR0VfU0laRSk7XG4tXHRpZiAoIWltYWdlKVxuJiM0MztcdGlmICghdHJhbXBvbGluZV9zaXplX2ltYWdlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKFx1MDAyNmltLCBpbWFnZSwgaW1hZ2UgJiM0MzsgUEFHRV9TSVpFLCBpbWFnZSxcbi1cdFx0XHRcdFx0ICAgIG0sIGZsYWdzLCB0bm9kZXMsIGZ1bmNfYWRkcik7XG4tXHRleGVjbWVtX2ZyZWUoaW1hZ2UpO1xuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoXHUwMDI2aW0sIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgdHJhbXBvbGluZV9zaXplX2ltYWdlICYjNDM7IFBBR0VfU0laRSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgdHJhbXBvbGluZV9zaXplX2ltYWdlLCBtLCBmbGFncyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgdG5vZGVzLCBmdW5jX2FkZHIpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGVtaXRfYnBmX2Rpc3BhdGNoZXIodTggKipwcHJvZywgaW50IGEsIGludCBiLCBzNjQgKnByb2dzLCB1OCAqaW1hZ2UsIHU4ICpidWYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZSYjMzQ7LAogICAgJiMzNDtfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV91cGRhdGUmIzM0OywKICAgICYjMzQ7YnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHBlci1jYWxsIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gd2l0aCBhIHNpbmdsZSBzdGF0aWMgZ2xvYmFsIGJ1ZmZlciAodHJhbXBvbGluZV9zaXplX2ltYWdlKSBmb3IgY2FsY3VsYXRpbmcgQlBGIHRyYW1wb2xpbmUgc2l6ZSBpbiBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGluIHRoZSB4ODYgQlBGIEpJVCBzdWJzeXN0ZW0gd2hlbiB1cGRhdGluZyBCUEYgdHJhbXBvbGluZXMgb3IgcHJlcGFyaW5nIEJQRiBzdHJ1Y3Rfb3BzLiBGdXp6aW5nIGNhbiB2ZXJpZnkgY29ycmVjdG5lc3MsIG1lbW9yeSBzYWZldHksIGFuZCBjb25jdXJyZW5jeSBiZWhhdmlvciBhY3Jvc3MgQlBGIHRyYW1wb2xpbmUgdXBkYXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk3OGFkYmM4MGU1Y2E2MWIzYzdmMTcwNDg3NWUwZGZmYThjOWI5M2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDIwOjMwOjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IGJiYTM1MTk0NDIwMmMuLjEzZWYwZDUzY2EyOTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTksNiAmIzQzOzksNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2ZpbHRlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX3ZsYW4uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmX3ZlcmlmaWVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtb3J5LmgmZ3Q7CkBAIC0zNSw2ICYjNDM7MzYsMTUgQEAgdm9pZCBfX2FzYW5fc3RvcmU4KHZvaWQgKnApOwogCiBzdGF0aWMgYm9vbCBhbGxfY2FsbGVlX3JlZ3NfdXNlZFs0XSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfTsKIAomIzQzO3N0YXRpYyB2b2lkICp0cmFtcG9saW5lX3NpemVfaW1hZ2U7CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQgaW5pdF90cmFtcG9saW5lX3NpemVfaW1hZ2Uodm9pZCkKJiM0Mzt7CiYjNDM7CXRyYW1wb2xpbmVfc2l6ZV9pbWFnZSA9IGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9NT0RVTEVfREFUQSwgUEFHRV9TSVpFKTsKJiM0MzsJcmV0dXJuIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSA/IDAgOiAtRU5PTUVNOwomIzQzO30KJiM0MztsYXRlX2luaXRjYWxsKGluaXRfdHJhbXBvbGluZV9zaXplX2ltYWdlKTsKJiM0MzsKIHN0YXRpYyB1OCAqZW1pdF9jb2RlKHU4ICpwdHIsIHUzMiBieXRlcywgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpZiAobGVuID09IDEpCkBAIC00MDAwLDI0ICYjNDM7NDAxMCwxNCBAQCBpbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLAogCQkJICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcikKIHsKIAlzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlIGltOwotCXZvaWQgKmltYWdlOwotCWludCByZXQ7CiAKLQkvKiBBbGxvY2F0ZSBhIHRlbXBvcmFyeSBidWZmZXIgZm9yIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkuCi0JICoKLQkgKiBXZSBjYW5ub3QgdXNlIGt2bWFsbG9jIGhlcmUsIGJlY2F1c2Ugd2UgbmVlZCBpbWFnZSB0byBiZSBpbgotCSAqIG1vZHVsZSBtZW1vcnkgcmFuZ2UuCi0JICogU2luY2UgaXQgbXVzdCBiZSB3cml0YWJsZSB1c2UgZXhlY21lbV9hbGxvYyhFWEVDTUVNX01PRFVMRV9EQVRBKQotCSAqIHRoYXQgcmV0dXJucyB3cml0YWJsZSBtZW1vcnkgaW4gdGhlIG1vZHVsZSBhZGRyZXNzIHNwYWNlLgotCSAqLwotCWltYWdlID0gZXhlY21lbV9hbGxvYyhFWEVDTUVNX01PRFVMRV9EQVRBLCBQQUdFX1NJWkUpOwotCWlmICghaW1hZ2UpCiYjNDM7CWlmICghdHJhbXBvbGluZV9zaXplX2ltYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCZhbXA7aW0sIGltYWdlLCBpbWFnZSAmIzQzOyBQQUdFX1NJWkUsIGltYWdlLAotCQkJCQkgICAgbSwgZmxhZ3MsIHRub2RlcywgZnVuY19hZGRyKTsKLQlleGVjbWVtX2ZyZWUoaW1hZ2UpOwotCXJldHVybiByZXQ7CiYjNDM7CXJldHVybiBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgmYW1wO2ltLCB0cmFtcG9saW5lX3NpemVfaW1hZ2UsCiYjNDM7CQkJCQkgICAgIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSAmIzQzOyBQQUdFX1NJWkUsCiYjNDM7CQkJCQkgICAgIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSwgbSwgZmxhZ3MsCiYjNDM7CQkJCQkgICAgIHRub2RlcywgZnVuY19hZGRyKTsKIH0KIAogc3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLCB1OCAqYnVmKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDUyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEpJVCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRpc3NlY3QgdGhlIGRpZmYgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoaXMgbG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb24gZm9yIHRoZSBCUEYgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3Mgb24gYW1kNjQgYXJjaGl0ZWN0dXJlLiBUaGUgbWFpbiB0aHJ1c3QgaXMgdGhlIG1vZGlmaWNhdGlvbiBvZiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4KClNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIGEgc3RhdGljIGJ1ZmZlciwgYHRyYW1wb2xpbmVfc2l6ZV9pbWFnZWAsIHdoaWNoIGlzIGFsbG9jYXRlZCBkdXJpbmcgYm9vdCB2aWEgYGluaXRfdHJhbXBvbGluZV9zaXplX2ltYWdlYCB1c2luZyBgZXhlY21lbV9hbGxvY2AuIFRoaXMgaXMgaW5pdGlhbGl6ZWQgYXMgYSBgbGF0ZV9pbml0Y2FsbGAuIEl0IGFwcGVhcnMgdGhpcyBzaW5nbGUgYnVmZmVyIHdpbGwgdGhlbiBiZSByZXVzZWQuIFByZXZpb3VzbHksIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgIHdhcyBkeW5hbWljYWxseSBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIG1lbW9yeSB1c2luZyBgZXhlY21lbV9hbGxvY2AgYW5kIGBleGVjbWVtX2ZyZWVgIG9uIGVhY2ggY2FsbCB0byBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKClgLiBTbywgaW5zdGVhZCBvZiBhbGxvY2F0aW5nIGFuZCBkZWFsbG9jYXRpbmcgbWVtb3J5IG9uIHRoZSBmbHksIHdlJiMzOTtyZSBub3cgcmV1c2luZyBhIHByZS1hbGxvY2F0ZWQgYnVmZmVyLiBUaGlzIGNhbiBiZSBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIHdpbiBieSBhdm9pZGluZyB0aG9zZSByZXBlYXRlZCBhbGxvY2F0aW9ucy4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGdldCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250ZXh0IGFyb3VuZCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG9mdGVuIGl0JiMzOTtzIGNhbGxlZCwgd2hhdCBsb2NrcyBhcmUgaW52b2x2ZWQsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGltcGFjdCBvZiB0aGlzIGNoYW5nZSB3aWxsIGJlLiBJJiMzOTtsbCBwcm9iYWJseSB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgIGFuZCBpdHMgY2FsbGVycywgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyBvciByYWNlIGNvbmRpdGlvbnMuIEkgYWxzbyB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgY2hhbmdlcyB0byB0aGUgdHJhbXBvbGluZSBzaXplLCBmb3IgZXhhbXBsZSwgdG8gZW5zdXJlIGl0IGRvZXMgbm90IG92ZXJydW4gdGhlIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGJ1ZmZlci4gVGhpcyBhbGwgbG9va3MgcmVsYXRpdmVseSBzYWZlLCBidXQgYmVzdCBwcmFjdGljZSBpcyB0byBjb25maXJtIHRoYXQgYW55IGFzc3VtcHRpb25zIHJlZ2FyZGluZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgY29uY3VycmVuY3kgc3RpbGwgaG9sZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmNoX2JwZl90cmFtcG9saW5lX3NpemUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9Mjk4OD1ib29sIGJwZl9qaXRfc3VwcG9ydHNfZnNlc3Npb24odm9pZClcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yOTkyLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6Mjk5MzppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjk5NC1cdFx0XHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MjEzOD1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIxNzUtXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIxNzY6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjE3Ny1cdFx0XHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9ODEyPXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltYWdlLFxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTE5MS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6MTE5MjppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMTkzLVx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMDMwPXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzM2LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzM3OmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMzgtXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTI2OTg9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTMwMTUtXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjMwMTY6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMzAxNy1cdFx0XHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqb3JpZ19jYWxsKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zOTgwPWludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmltYWdlLCB2b2lkICppbWFnZV9lbmQsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMDgtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6NDAwOTppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMTAtXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTEzMTc9aW50IF9fbXVzdF9jaGVjayBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MTMxODppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuaW5jbHVkZS9saW51eC9icGYuaC0xMzE5LVx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz02Mzc9aW50IGJwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY1My1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2NTQ6XHRzaXplID0gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKG1vZGVsLCBmbGFncywgdG5vZGVzLCBzdHViX2Z1bmMpO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY1NS1cdGlmIChzaXplIFx1MDAzYz0gMClcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz03MTA9c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NjEtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3NjI6XHRzaXplID0gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKFx1MDAyNnRyLVx1MDAzZWZ1bmMubW9kZWwsIHRyLVx1MDAzZWZsYWdzLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzYzLVx0XHRcdFx0XHR0bm9kZXMsIHRyLVx1MDAzZWZ1bmMuYWRkcik7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTUwOD1pbnQgX193ZWFrIGFyY2hfcHJvdGVjdF9icGZfdHJhbXBvbGluZSh2b2lkICppbWFnZSwgdW5zaWduZWQgaW50IHNpemUpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUxMy1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1MTQ6aW50IF9fd2VhayBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTE1LVx0XHRcdFx0ICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2OTEKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgeDg2IEJQRiBKSVQgVHJhbXBvbGluZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciBzcGVjaWZpY3MsIHBhcnRpY3VsYXJseSB0aGUgdHJhbXBvbGluZSBtZWNoYW5pc20uIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgIGFuZCBmb2N1cyBvbiBob3cgdGhlIHRyYW1wb2xpbmUgaXMgc2l6ZWQgYW5kIHByZXBhcmVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBhbmQgaG93IGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgd29ya3MuIFVuZGVyc3RhbmRpbmcgdGhlc2UgdHdvIHBpZWNlcyBpcyBrZXkgdG8gZ3Jhc3BpbmcgaG93IHRoZSBKSVQgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJiMzOTtzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmZWF0dXJlcyBhbmQgd2hhdCBvcHRpbWl6YXRpb25zIGFyZSBwb3NzaWJsZS4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHJpcGUgZm9yIGltcHJvdmVtZW50IHJlbGF0ZWQgdG8gdGhlIHRyYW1wb2xpbmUmIzM5O3Mgb3ZlcmhlYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5ODA6XHRpbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICppbWFnZSwgdm9pZCAqaW1hZ2VfZW5kLFxuMzk4MTpcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4zOTgyOlx0XHRcdFx0XHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsXG4zOTgzOlx0XHRcdFx0XHR2b2lkICpmdW5jX2FkZHIpXG4zOTg0Olx0e1xuMzk4NTpcdFx0dm9pZCAqcndfaW1hZ2UsICp0bXA7XG4zOTg2Olx0XHRpbnQgcmV0O1xuMzk4NzpcdFx0dTMyIHNpemUgPSBpbWFnZV9lbmQgLSBpbWFnZTtcbjM5ODg6XHRcbjM5ODk6XHRcdC8qIHJ3X2ltYWdlIGRvZXNuJiMzOTt0IG5lZWQgdG8gYmUgaW4gbW9kdWxlIG1lbW9yeSByYW5nZSwgc28gd2UgY2FuXG4zOTkwOlx0XHQgKiB1c2Uga3ZtYWxsb2MuXG4zOTkxOlx0XHQgKi9cbjM5OTI6XHRcdHJ3X2ltYWdlID0ga3ZtYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XG4zOTkzOlx0XHRpZiAoIXJ3X2ltYWdlKVxuMzk5NDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjM5OTU6XHRcbjM5OTY6XHRcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKGltLCByd19pbWFnZSwgcndfaW1hZ2UgJiM0Mzsgc2l6ZSwgaW1hZ2UsIG0sXG4zOTk3Olx0XHRcdFx0XHRcdCAgICBmbGFncywgdG5vZGVzLCBmdW5jX2FkZHIpO1xuMzk5ODpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjM5OTk6XHRcdFx0Z290byBvdXQ7XG40MDAwOlx0XG40MDAxOlx0XHR0bXAgPSBicGZfYXJjaF90ZXh0X2NvcHkoaW1hZ2UsIHJ3X2ltYWdlLCBzaXplKTtcbjQwMDI6XHRcdGlmIChJU19FUlIodG1wKSlcbjQwMDM6XHRcdFx0cmV0ID0gUFRSX0VSUih0bXApO1xuNDAwNDpcdG91dDpcbjQwMDU6XHRcdGt2ZnJlZShyd19pbWFnZSk7XG40MDA2Olx0XHRyZXR1cm4gcmV0O1xuNDAwNzpcdH1cbjQwMDg6XHRcbjQwMDk6XHRpbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuNDAxMDpcdFx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXG40MDExOlx0e1xuNDAxMjpcdFx0c3RydWN0IGJwZl90cmFtcF9pbWFnZSBpbTtcbjQwMTM6XHRcbjQwMTQ6XHRcdGlmICghdHJhbXBvbGluZV9zaXplX2ltYWdlKVxuNDAxNTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjQwMTY6XHRcbjQwMTc6XHRcdHJldHVybiBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcdTAwMjZpbSwgdHJhbXBvbGluZV9zaXplX2ltYWdlLFxuNDAxODpcdFx0XHRcdFx0XHQgICAgIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSAmIzQzOyBQQUdFX1NJWkUsXG40MDE5Olx0XHRcdFx0XHRcdCAgICAgdHJhbXBvbGluZV9zaXplX2ltYWdlLCBtLCBmbGFncyxcbjQwMjA6XHRcdFx0XHRcdFx0ICAgICB0bm9kZXMsIGZ1bmNfYWRkcik7XG40MDIxOlx0fVxuNDAyMjpcdFxuNDAyMzpcdHN0YXRpYyBpbnQgZW1pdF9icGZfZGlzcGF0Y2hlcih1OCAqKnBwcm9nLCBpbnQgYSwgaW50IGIsIHM2NCAqcHJvZ3MsIHU4ICppbWFnZSwgdTggKmJ1ZilcbjQwMjQ6XHR7XG40MDI1Olx0XHR1OCAqamdfcmVsb2MsICpwcm9nID0gKnBwcm9nO1xuNDAyNjpcdFx0aW50IHBpdm90LCBlcnIsIGpnX2J5dGVzID0gMTtcbjQwMjc6XHRcdHM2NCBqZ19vZmZzZXQ7XG40MDI4Olx0XG40MDI5Olx0XHRpZiAoYSA9PSBiKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc4MAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbnMgaW4gQlBGIFRyYW1wb2xpbmUgUHJlcGFyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2NydXRpbml6ZSBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGFuZCwgc3BlY2lmaWNhbGx5LCBob3cgaXQgaW50ZXJhY3RzIHdpdGggYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAuIEkgbmVlZCB0byBhc2NlcnRhaW4gd2hldGhlciBjb25jdXJyZW50IGNhbGxzIHRvIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgIGFyZSBldmVuIHBvc3NpYmxlLCBhbmQgaWYgdGhleSBhcmUsIHdoZXRoZXIgYW55IGFwcHJvcHJpYXRlIGxvY2tpbmcgbWVjaGFuaXNtcyBhcmUgaW4gcGxhY2UgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuCgpXYWl0IGEgbWludXRlLCBzb21ldGhpbmcmIzM5O3MgcGluZ2luZyBteSByYWRhci4gVGhlIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgLi4uIHRoYXQmIzM5O3MgYSAqc2luZ2xlKiwgc3RhdGljIGJ1ZmZlciwgYW5kIGl0cyBzaXplIGlzLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGEgUEFHRV9TSVpFLiBSaWdodC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcHJvYmxlbSBjb3VsZCBiZS4KClNvLCAqd2hlbiogYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgaXMgaW52b2tlZCwgYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpcyAqd3JpdGluZyogaW50byBgdHJhbXBvbGluZV9zaXplX2ltYWdlYC4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHNldHVwIHRoYXQgc2NyZWFtcyByYWNlIGNvbmRpdGlvbiBwb3RlbnRpYWwuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIHZlcmlmeSBob3cgdGhlIGJ1ZmZlciBpcyBoYW5kbGVkIGFuZCBpZiBjb25jdXJyZW50IGFjY2Vzc2VzIGFyZSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNTU1PXN0YXRpYyBpbnQgaW52b2tlX2JwZl9tb2RfcmV0KGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcHJvZyxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY1Ni0gKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNjU3OnN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltYWdlLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2NTgtXHRcdFx0XHRcdCB2b2lkICpyd19pbWFnZV9lbmQsIHZvaWQgKmltYWdlLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zOTgwPWludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmltYWdlLCB2b2lkICppbWFnZV9lbmQsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM5OTUtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mzk5NjpcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKGltLCByd19pbWFnZSwgcndfaW1hZ2UgJiM0Mzsgc2l6ZSwgaW1hZ2UsIG0sXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzk5Ny1cdFx0XHRcdFx0ICAgIGZsYWdzLCB0bm9kZXMsIGZ1bmNfYWRkcik7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTQwMDk9aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDAxNi1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0MDE3Olx0cmV0dXJuIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKFx1MDAyNmltLCB0cmFtcG9saW5lX3NpemVfaW1hZ2UsXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDAxOC1cdFx0XHRcdFx0ICAgICB0cmFtcG9saW5lX3NpemVfaW1hZ2UgJiM0MzsgUEFHRV9TSVpFLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgVXNhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAuIE15IGZvY3VzIGlzIG9uIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKnVzZWQqLiBJIHNlZSB0aGF0IGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGFuZCBgYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lYCBib3RoIGNhbGwgaXQuIFRoYXQgdGVsbHMgbWUgdGhhdCB0aGlzIHNpemUgY2FsY3VsYXRpb24gaXMgY3J1Y2lhbCBmb3IgdGhlc2UgdHJhbXBvbGluZS1yZWxhdGVkIG9wZXJhdGlvbnMuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpjb250ZXh0KiBvZiB0aGVzZSBjYWxscy4gVGltZSB0byBjaGVjayB0aGUgc291cmNlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgYW5kIGBrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNgIHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1dGlsaXppbmcgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBpbnNpZ2h0ZnVsIGRlcGVuZGVuY2llcyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmNoX2JwZl90cmFtcG9saW5lX3NpemUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NjM3PWludCBicGZfc3RydWN0X29wc19wcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLFxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NTMtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjU0Olx0c2l6ZSA9IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShtb2RlbCwgZmxhZ3MsIHRub2Rlcywgc3R1Yl9mdW5jKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NTUtXHRpZiAoc2l6ZSBcdTAwM2M9IDApXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NzEwPXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzYxLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzYyOlx0c2l6ZSA9IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShcdTAwMjZ0ci1cdTAwM2VmdW5jLm1vZGVsLCB0ci1cdTAwM2VmbGFncyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc2My1cdFx0XHRcdFx0dG5vZGVzLCB0ci1cdTAwM2VmdW5jLmFkZHIpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1MDg9aW50IF9fd2VhayBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MTMtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTE0OmludCBfX3dlYWsgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUxNS1cdFx0XHRcdCAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQxMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVHJhbXBvbGluZSBhbmQgSklUIENvbXBpbGF0aW9uIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBjb25maXJtIG15IGluaXRpYWwgaHlwb3RoZXNpczogaXMgdGhpcyBCUEYgdHJhbXBvbGluZSBhbmQgSklUIGNvbXBpbGF0aW9uIGZ1bmN0aW9uYWxpdHkgcmVhY2hhYmxlIHdpdGhpbiBhIFFFTVUvYW1kNjQgZW52aXJvbm1lbnQ/IFllcywgQlBGIGlzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgTGludXgga2VybmVsLCBhbmQgbmF0dXJhbGx5LCBpdCBleGVjdXRlcyBvbiBhbWQ2NCB3aXRoaW4gUUVNVS4gVGhhdCYjMzk7cyBhIGdpdmVuLiBOb3csIGxldCYjMzk7cyBkaWcgaW50byBTZWN0aW9uIDMgb2YgdGhlIHJlbGV2YW50IGd1aWRlbGluZXMuCgpUaGUgZ3VpZGVsaW5lcyBzdGF0ZSB3ZSBzaG91bGQgY29uc2lkZXIgcGF0Y2hlcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGlmIHRoZXkgdG91Y2ggcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgYW5kIHdlIGhhdmUgYSBmZXcga2V5IGFyZWFzIHRvIGZvY3VzIG9uOiBjb3JlIHN1YnN5c3RlbXMgYW5kIHJlZmFjdG9yaW5ncy9jb2RlIGNsZWFudXBzLiBUaGUgY3J1Y2lhbCBwaWVjZSBpcyB0aGF0IHRoaXMgcGF0Y2ggKmRvZXMqIG1vZGlmeSBCUEYgSklUIGNvZGUgZm9yIHg4NiBzcGVjaWZpY2FsbHkgd2l0aGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBUaGlzIGNvZGUgZ2V0cyBleGVjdXRlZCB3aGVuZXZlciBCUEYgdHJhbXBvbGluZXMgYXJlIGNyZWF0ZWQgb3Igc2l6ZWQsIHdoaWNoIGlzIGNvbW1vbiBkdXJpbmcgZmV4aXQsIGZlbnRyeSwgc3RydWN0X29wcywgYW5kIG90aGVyIHNpbWlsYXIgb3BlcmF0aW9ucy4KCkZ1cnRoZXJtb3JlLCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIHRoZXkgYXJlIHNoYXJpbmcgdGhlIHN0YXRpYyBnbG9iYWwgYnVmZmVyIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgIGFjcm9zcyBhbGwgY2FsbGVycyBvZiBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCB3aXRob3V0IHBlci1jYWxsIGFsbG9jYXRpb24sIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaW50ZXJlc3RpbmcgcmFjZSBjb25kaXRpb25zLiBXaGlsZSB0aGV5IG1heSBiZSBzZXJpYWxpemVkLCB0aGlzIGNvdWxkIHN0aWxsIGhhdmUgYW4gaW1wYWN0IG9uIGhvdyB0aGUgQlBGIHRyYW1wb2xpbmVzIGFyZSBjcmVhdGVkLiBTaGFyaW5nIGEgYnVmZmVyIGxpa2UgdGhhdCBhbmQgbWVzc2luZyB3aXRoIGhvdyBtZW1vcnkgaXMgdXNlZCB3aXRoaW4gQlBGIGlzIGFsd2F5cyB3b3J0aCBhIHNlY29uZCBsb29rLgoKRmluYWxseSwganVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBLY29uZmlnIG9wdGlvbnMgcmVxdWlyZWQgZm9yIHRoaXMgZmlsZSBhbmQgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYGFyY2gveDg2L25ldC9NYWtlZmlsZWAgb3Igd2hhdGV2ZXIgYnVpbGQgZmlsZSBgYnBmX2ppdF9jb21wLmNgIGlzIGNvbXBpbGVkIGJ5LCB0byBzZWUgaG93IHRvIGVuYWJsZSB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X2NvbXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9NYWtlZmlsZT02PWlmZXEgKCQoQ09ORklHX1g4Nl8zMikseSlcbmFyY2gveDg2L25ldC9NYWtlZmlsZTo3OiAgICAgICAgb2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBicGZfaml0X2NvbXAzMi5vXG5hcmNoL3g4Ni9uZXQvTWFrZWZpbGUtOC1lbHNlXG5hcmNoL3g4Ni9uZXQvTWFrZWZpbGU6OTogICAgICAgIG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wLm8gYnBmX3RpbWVkX21heV9nb3RvLm9cbmFyY2gveDg2L25ldC9NYWtlZmlsZS0xMC1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mjk2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBCUEYgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcyBCUEYgc2l0dWF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBlbmFibGVkLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgYmFzaWNzIOKAkyBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB2ZXJpZnkgdGhlIHN0YXR1cyBvZiBgQ09ORklHX0JQRl9KSVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gS25vd2luZyB0aGUgc3RhdGUgb2YgdGhvc2UgdHdvIG9wdGlvbnMgaXMgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4gSXQmIzM5O2xsIHRlbGwgbWUgaWYgdGhlIEpJVCBjb21waWxlciBhbmQgdGhlIHN5c3RlbSBjYWxsIGludGVyZmFjZSBhcmUgZXZlbiBhdmFpbGFibGUuIFdpdGhvdXQgdGhvc2UsIEkmIzM5O20gd2FzdGluZyBteSB0aW1lIGxvb2tpbmcgZWxzZXdoZXJlLiBUaGlzIGlzIHRoZSBmb3VuZGF0aW9uOyBmcm9tIGhlcmUsIEkgY2FuIGRldGVybWluZSB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMuIEl0JiMzOTtzIGEgcXVpY2sgY2hlY2sgdGhhdCB3aWxsIHNhdmUgbWUgdGltZSBkb3duIHRoZSByb2FkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0pJVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MzE9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTQ1LVxua2VybmVsL2JwZi9LY29uZmlnOjQ2OmNvbmZpZyBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctNDctXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTYxLVxua2VybmVsL2JwZi9LY29uZmlnOjYyOmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9LY29uZmlnLTYzLVx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy03Mi1cbmtlcm5lbC9icGYvS2NvbmZpZzo3Mzpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXG5rZXJuZWwvYnBmL0tjb25maWctNzQtXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXG4tLVxua2VybmVsL2JwZi9LY29uZmlnPTk2PWNvbmZpZyBCUEZfTFNNXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTEwNy1cbmtlcm5lbC9icGYvS2NvbmZpZzoxMDg6Y29uZmlnIEJQRl9KSVRfS0FTQU5cbmtlcm5lbC9icGYvS2NvbmZpZy0xMDktXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgQlBGIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBMZXQmIzM5O3MgemVybyBpbiBvbiBga2VybmVsL2JwZi9LY29uZmlnYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIGBCUEZfSklUYCBhbmQgYEJQRl9TWVNDQUxMYCwgcGFydGljdWxhcmx5IGhvdyB0aGV5JiMzOTtyZSBleHBvc2VkIGFuZCBjb25kaXRpb25lZC4gTXkgZm9jdXMgaXMgb24gZW5zdXJpbmcgdGhlIHJpZ2h0IGZlYXR1cmUgZmxhZ3MgYXJlIGVuYWJsZWQgdG8gc3VwcG9ydCB0aGUgZGVzaXJlZCBCUEYgdXNlIGNhc2VzLCBhbmQgaG93IHRoZSBzeXNjYWxsIGludGVyZmFjZSBpcyBhZmZlY3RlZCBieSBKSVQgY29tcGlsYXRpb24uIEkgd2FudCB0byBzZWUgaWYgdGhlcmUgaGF2ZSBiZWVuIGFueSByZWNlbnQgY2hhbmdlcyB0aGF0IGNvdWxkIGltcGFjdCBwZXJmb3JtYW5jZSBvciBzZWN1cml0eSBwb3N0dXJlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc3RhdGVzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIHNwZWNpZmljIEJQRiBwcm9ncmFtcyBJJiMzOTttIHdvcmtpbmcgd2l0aC4gVGhpcyB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzIGluIHRoZSBjdXJyZW50IHByb2plY3QsIGFzIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBzeXN0ZW0gSSBhbSBkZXZlbG9waW5nIHdvcmtzIGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcbiAgMzE6XHRjb25maWcgQlBGX1NZU0NBTExcbiAgMzI6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4gIDMzOlx0XHRzZWxlY3QgQlBGXG4gIDM0Olx0XHRzZWxlY3QgSVJRX1dPUktcbiAgMzU6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuICAzNjpcdFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxuICAzNzpcdFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbiAgMzg6XHRcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG4gIDM5Olx0XHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbiAgNDA6XHRcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG4gIDQxOlx0XHRkZWZhdWx0IG5cbiAgNDI6XHRcdGhlbHBcbiAgNDM6XHRcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xuICA0NDpcdFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cbiAgNDU6XHRcbiAgNDY6XHRjb25maWcgQlBGX0pJVFxuICA0NzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuICA0ODpcdFx0ZGVwZW5kcyBvbiBCUEZcbiAgNDk6XHRcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXG4gIDUwOlx0XHRzZWxlY3QgRVhFQ01FTVxuICA1MTpcdFx0aGVscFxuICA1MjpcdFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXG4gIDUzOlx0XHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxuICA1NDpcdFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXG4gIDU1Olx0XHQgIHByb2dyYW1zLlxuICA1NjpcdFxuICA1NzpcdFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcbiAgNTg6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXG4gIDU5Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcbiAgNjA6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxuICA2MTpcdFxuICA2MjpcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxuICA2MzpcdFx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuICA2NDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgSEFWRV9FQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX0pJVFxuICA2NTpcdFx0aGVscFxuICA2NjpcdFx0ICBFbmFibGVzIEJQRiBKSVQgYW5kIHJlbW92ZXMgQlBGIGludGVycHJldGVyIHRvIGF2b2lkIHNwZWN1bGF0aXZlXG4gIDY3Olx0XHQgIGV4ZWN1dGlvbiBvZiBCUEYgaW5zdHJ1Y3Rpb25zIGJ5IHRoZSBpbnRlcnByZXRlci5cbiAgNjg6XHRcbiAgNjk6XHRcdCAgV2hlbiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04gaXMgZW5hYmxlZCwgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjkzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBmb3IgQlBGIEV2ZW50IERlcGVuZGVuY2llcyBpbiBUcmFtcG9saW5lcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRyYW1wb2xpbmVzIGFuZCBob3cgdGhleSYjMzk7cmUgaW1wbGVtZW50ZWQuIFRoZSB0YXNrIGF0IGhhbmQgaW52b2x2ZXMgZmlndXJpbmcgb3V0IHRoZSBkZXBlbmRlbmNpZXMgb2Ygb3VyIHRyYW1wb2xpbmVzLCBpbiB0aGlzIGNhc2UgbG9va2luZyBhdCB3aGV0aGVyIHdlIG5lZWQgYEJQRl9FVkVOVFNgIG9yIGFueSBvdGhlciByZWxldmFudCBtZWNoYW5pc21zIGZvciB0aGVtIHRvIHdvcmsgcHJvcGVybHkuIEdpdmVuIHRoYXQgdHJhbXBvbGluZXMgaW52b2x2ZSByZWRpcmVjdGluZyBleGVjdXRpb24gZmxvdywgYW5kIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQlBGLCBteSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBsb3ctbGV2ZWwgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gVG8gdW5kZXJzdGFuZCB0aGlzIHByb3Blcmx5LCBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgdG8gc2VlIGhvdyB0aGUgY29yZSB0cmFtcG9saW5lIGZ1bmN0aW9uYWxpdHkgaXMgaGFuZGxlZC4gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCBhbnkgaW50ZXJhY3Rpb24gYmV0d2VlbiBvcGVyYXRpb25zIHVzZWQgdG8gZGVmaW5lIHRoZXNlIGluc3RydWN0aW9ucy4gVGhlcmVmb3JlLCBgYnBmX3N0cnVjdF9vcHMuY2AgaXMgdGhlIG5leHQgcGxhY2UgSSBuZWVkIHRvIHJldmlldy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciBldmVudCBob29rcyBvciBzcGVjaWZpYyBzdHJ1Y3Qgb3BlcmF0aW9ucyBhcmUgcGFydCBvZiB0aGlzIHByb2Nlc3MgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG1pc3NpbmcgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgaGluZGVyIG91ciBnb2FsLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBnZXR0aW5nIHRoZSBhcmNoaXRlY3R1cmUgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyYW1wb2xpbmUubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGlzYXNtLm8gbXByb2cub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTU3PXN0YXRpYyB2b2lkIHRyYW1wb2xpbmVfdW5sb2NrKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNjEtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo2MjpzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTYzLVx0aW50ICgqcmVnaXN0ZXJfZmVudHJ5KShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqZGF0YSk7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NzA9c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcxOlx0XHRcdFx0IGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcywgdm9pZCAqZGF0YSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MjpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX29wcztcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTczLVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTk4PXN0YXRpYyBpbnQgYnBmX3RyYW1wX2Z0cmFjZV9vcHNfZnVuYyhzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCB1bnNpZ25lZCBsb25nIGlwLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1Ny1cdFx0XHRyZXQgPSBicGZfdHJhbXBvbGluZV91cGRhdGUodHIsIGZhbHNlIC8qIGxvY2tfZGlyZWN0X211dGV4ICovLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU4Olx0XHRcdFx0XHRcdCAgICBcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTktXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NC1cdFx0XHRyZXQgPSBicGZfdHJhbXBvbGluZV91cGRhdGUodHIsIGZhbHNlIC8qIGxvY2tfZGlyZWN0X211dGV4ICovLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY1Olx0XHRcdFx0XHRcdCAgICBcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjYtXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQ3Mz1zdGF0aWMgaW50IHJlZ2lzdGVyX2ZlbnRyeShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy01MDAtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo1MDE6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9vcHMgPSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy01MDItXHQucmVnaXN0ZXJfZmVudHJ5ICAgPSByZWdpc3Rlcl9mZW50cnksXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NzEwPXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MTE6XHRcdFx0XHQgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyAqb3BzLCB2b2lkICpkYXRhKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzEyLXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05NDI9c3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTQ0LVx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk0NTpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk0Ni1cdFx0XHRcdCAgICAgIHZvaWQgKmRhdGEpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTkwPWludCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk5Ni1cdHRyYW1wb2xpbmVfbG9jayh0cik7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5OTc6XHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhub2RlLCB0ciwgdGd0X3Byb2csIFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk5OC1cdHRyYW1wb2xpbmVfdW5sb2NrKHRyKTtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xMDAyPXN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAwNC1cdFx0XHRcdFx0c3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwMDU6XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMDYtXHRcdFx0XHRcdHZvaWQgKmRhdGEpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTAyNz1pbnQgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMzMtXHR0cmFtcG9saW5lX2xvY2sodHIpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTAzNDpcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2cobm9kZSwgdHIsIHRndF9wcm9nLCBcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDM1LVx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTExMjM9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExNjUtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMTY2Olx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXHUwMDI2c2hpbV9saW5rLVx1MDAzZWxpbmsubm9kZSwgdHIsIE5VTEwsIFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExNjctXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2MDY9c3RhdGljIGludCBtb2RpZnlfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjIwLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTYyMTpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX211bHRpX29wcyA9IHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MjItXHQucmVnaXN0ZXJfZmVudHJ5ICAgPSByZWdpc3Rlcl9mZW50cnlfbXVsdGksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTQyCgkJCQkJCQlvdXRwdXQ6IDE4MgoJCQkJCQkJdGhvdWdodHM6IDg2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogRGF0YSBSYWNlIGluIEJQRiBUcmFtcG9saW5lIFVwZGF0ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIGNvbmNlcm5pbmcuIGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGhhcyBhIGxvY2sgYXQgdGhlIHRyYW1wb2xpbmUgbGV2ZWwuIEJ1dCBlYWNoIHRyYW1wb2xpbmUgaGFzIGl0cyBvd24gbXV0ZXguIFRoaXMgbWVhbnMgdHdvIHNlcGFyYXRlIHRocmVhZHMgY291bGQgYmUgdXBkYXRpbmcgZGlmZmVyZW50IHRyYW1wb2xpbmVzIHNpbXVsdGFuZW91c2x5LiBXaGVuIHRoaXMgaGFwcGVucywgYm90aCB0aHJlYWRzIGNvdWxkIGNhbGwgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgY29uY3VycmVudGx5LCBhbmQgY3J1Y2lhbGx5LCB0aGV5IGNvdWxkIHdyaXRlIHRvIHRoZSBzaGFyZWQgYHRyYW1wb2xpbmVfc2l6ZV9pbWFnZWAgYXQgdGhlIHNhbWUgdGltZS4gVGhhdCYjMzk7cyBhIHRleHRib29rIGRhdGEgcmFjZSByaWdodCB0aGVyZSBvbiBgdHJhbXBvbGluZV9zaXplX2ltYWdlYC4gVGhpcyBpcyBhbiBvYnZpb3VzIGFyZWEgZm9yIGZ1enppbmcuCgpJIGFsc28gbmVlZCB0byBjaGVjayBga2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jYC4gSXQgbG9va3MgbGlrZSBgYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lYCBpcyBjYWxsZWQgd2hlbiBzdHJ1Y3Rfb3BzIG1hcHMgYXJlIGNyZWF0ZWQgb3IgdXBkYXRlZC4gVGhpcyBmdW5jdGlvbiBhbHNvIHNlZW1zIHRvIGNhbGwgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAuIFRoaXMgcGF0aCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgc3RyZW5ndGhlbnMgdGhlIGNhc2UgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hpY2ggc3ltYm9scyBhcmUgcmVsZXZhbnQgZm9yIHRoaXMuIExvb2tpbmcgYXQgRm9jdXNTeW1ib2xzLCBoZXJlJiMzOTtzIHdoYXQgc3RhbmRzIG91dDoKCjEuICBgaW5pdF90cmFtcG9saW5lX3NpemVfaW1hZ2VgOiBUaGlzIGlzIGFuIGluaXRjYWxsLCBidXQgaXQmIzM5O3Mgc3RhdGljIGFuZCBvbmx5IGNhbGxlZCBhdCBib290LCBzbyBsaWtlbHkgbm90IGEgY29uY2VybiBmb3IgYSBydW50aW1lIGRhdGEgcmFjZS4KMi4gIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgOiBUaGlzIGlzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiB0aGF0JiMzOTtzIGV4cG9ydGVkIGluIGEgaGVhZGVyIGFuZCBjYWxsZWQgYnkgQlBGLiBUaGlzIGlzIGF0IHRoZSBoZWFydCBvZiB0aGUgaXNzdWUhCjMuICBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgOiBUaGlzIGlzIGNhbGxlZCBieSBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYC4KNC4gIGBicGZfdHJhbXBvbGluZV91cGRhdGVgOiBUaGlzIGlzIHRoZSBjYWxsZXIgb2YgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYC4KNS4gIGBicGZfc3RydWN0X29wc19wcmVwYXJlX3RyYW1wb2xpbmVgOiBUaGlzIGlzIGFsc28gYSBjYWxsZXIgb2YgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgaW4gYGtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY2AuCgpDaGVja2luZyBzeW1ib2wgdmlzaWJpbGl0eSwgYGluaXRfdHJhbXBvbGluZV9zaXplX2ltYWdlYCBpcyBzdGF0aWMuIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgIGlzIG5vbi1zdGF0aWMgYW5kIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGlzIHN0YXRpYyBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgaXMgbm9uLXN0YXRpYyBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gYGJwZl90cmFtcG9saW5lX3VwZGF0ZWAgaXMgc3RhdGljLCBjYWxsZWQgYnkgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AsIGBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ2AsIGV0Yy4gYGJwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZWAgaXMgbm9uLXN0YXRpYyBpbiBga2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jYC4KCldlJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBjZXJ0YWluIGNvbmZpZ3MgYXJlIGVuYWJsZWQuIFVuZGVyIEVuYWJsZUNvbmZpZ3MsIGBCUEZfSklUYCAoYW5kIGBCUEZfU1lTQ0FMTGAsIGFuZCBgQlBGYCkgbXVzdCBiZSBlbmFibGVkLgoKU3BlY2lmaWNhbGx5OgoKLSAgIGBDT05GSUdfQlBGX0pJVGAKLSAgIGBDT05GSUdfQlBGX1NZU0NBTExgCi0gICBgQ09ORklHX0JQRmAKCkRvdWJsZS1jaGVja2luZyBpbiB0aGUgTWFrZWZpbGVzOiBgYXJjaC94ODYvbmV0L01ha2VmaWxlYCBjb25maXJtcyBgb2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBicGZfaml0X2NvbXAub2AgYW5kIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBzaG93cyBgb2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSB0cmFtcG9saW5lLm9gLCBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnRmLm9gIGV0Yy4gU28geWVzOgoKLSAgIGBCUEZfSklUYAotICAgYEJQRl9TWVNDQUxMYAoKUmVjYXAgb2YgRm9jdXNTeW1ib2xzOgoKLSAgIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgCi0gICBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgCi0gICBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYAotICAgYGJwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZWAKCkdpdmVuIHRoaXMgdGhvcm91Z2ggaW52ZXN0aWdhdGlvbiwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGZ1enppbmcgdmVyZGljdC4gSXQgYWxsIGNoZWNrcyBvdXQuIE5vdyBJIGNhbiBmb3JtdWxhdGUgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcmNoX2JwZl90cmFtcG9saW5lX3NpemUmIzM0OywKICAgICYjMzQ7X19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUmIzM0OywKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfdXBkYXRlJiMzNDssCiAgICAmIzM0O2JwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwZXItY2FsbCBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGggYSBzaW5nbGUgc3RhdGljIGdsb2JhbCBidWZmZXIgKHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSkgZm9yIGNhbGN1bGF0aW5nIEJQRiB0cmFtcG9saW5lIHNpemUgaW4gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKCkuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBpbiB0aGUgeDg2IEJQRiBKSVQgc3Vic3lzdGVtIHdoZW4gdXBkYXRpbmcgQlBGIHRyYW1wb2xpbmVzIG9yIHByZXBhcmluZyBCUEYgc3RydWN0X29wcy4gRnV6emluZyBjYW4gdmVyaWZ5IGNvcnJlY3RuZXNzLCBtZW1vcnkgc2FmZXR5LCBhbmQgY29uY3VycmVuY3kgYmVoYXZpb3IgYWNyb3NzIEJQRiB0cmFtcG9saW5lIHVwZGF0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcmNoX2JwZl90cmFtcG9saW5lX3NpemUmIzM0OywKICAgICYjMzQ7X19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUmIzM0OywKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfdXBkYXRlJiMzNDssCiAgICAmIzM0O2JwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwZXItY2FsbCBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGggYSBzaW5nbGUgc3RhdGljIGdsb2JhbCBidWZmZXIgKHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSkgZm9yIGNhbGN1bGF0aW5nIEJQRiB0cmFtcG9saW5lIHNpemUgaW4gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKCkuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBpbiB0aGUgeDg2IEJQRiBKSVQgc3Vic3lzdGVtIHdoZW4gdXBkYXRpbmcgQlBGIHRyYW1wb2xpbmVzIG9yIHByZXBhcmluZyBCUEYgc3RydWN0X29wcy4gRnV6emluZyBjYW4gdmVyaWZ5IGNvcnJlY3RuZXNzLCBtZW1vcnkgc2FmZXR5LCBhbmQgY29uY3VycmVuY3kgYmVoYXZpb3IgYWNyb3NzIEJQRiB0cmFtcG9saW5lIHVwZGF0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBkeW5hbWljIHBlci1jYWxsIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiAodmlhIGV4ZWNtZW1fYWxsb2MvZXhlY21lbV9mcmVlKSBvZiBhIGR1bW15IHNjcmF0Y2ggYnVmZmVyIGluIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZSgpIHdpdGggYSBzdGF0aWNhbGx5IHByZS1hbGxvY2F0ZWQgcGFnZSBidWZmZXIgKHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSkuIFRoZSBidWZmZXIgaXMgdXNlZCBzdHJpY3RseSBhcyBhIHdyaXRlLW9ubHkgc2luayBmb3IgaW5zdHJ1Y3Rpb24gZW1pc3Npb24gZHVyaW5nIGRyeS1ydW4gdHJhbXBvbGluZSBnZW5lcmF0aW9uIGluIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkgdG8gZGV0ZXJtaW5lIHRoZSByZXF1aXJlZCBidWZmZXIgc2l6ZS4gSXRzIGNvbnRlbnRzIGFyZSBuZXZlciByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YWNrIHZhcmlhYmxlcyBzdWNoIGFzICYjMzk7aW0mIzM5OyBhcmUgcGFzc2VkIHRvIHNhdGlzZnkgZnVuY3Rpb24gcGFyYW1ldGVycyBhbmQgYXJlIG5vdCByZWFkIHVuaW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWssIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUgaXMgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQ7IHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgc3VmZmljZXMgZm9yIGFueSBtZW1vcnkgc2FmZXR5IHZlcmlmaWNhdGlvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk3OGFkYmM4MGU1Y2E2MWIzYzdmMTcwNDg3NWUwZGZmYThjOWI5M2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDIwOjMwOjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IGJiYTM1MTk0NDIwMmMuLjEzZWYwZDUzY2EyOTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTksNiAmIzQzOzksNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2ZpbHRlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX3ZsYW4uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmX3ZlcmlmaWVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtb3J5LmgmZ3Q7CkBAIC0zNSw2ICYjNDM7MzYsMTUgQEAgdm9pZCBfX2FzYW5fc3RvcmU4KHZvaWQgKnApOwogCiBzdGF0aWMgYm9vbCBhbGxfY2FsbGVlX3JlZ3NfdXNlZFs0XSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfTsKIAomIzQzO3N0YXRpYyB2b2lkICp0cmFtcG9saW5lX3NpemVfaW1hZ2U7CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQgaW5pdF90cmFtcG9saW5lX3NpemVfaW1hZ2Uodm9pZCkKJiM0Mzt7CiYjNDM7CXRyYW1wb2xpbmVfc2l6ZV9pbWFnZSA9IGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9NT0RVTEVfREFUQSwgUEFHRV9TSVpFKTsKJiM0MzsJcmV0dXJuIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSA/IDAgOiAtRU5PTUVNOwomIzQzO30KJiM0MztsYXRlX2luaXRjYWxsKGluaXRfdHJhbXBvbGluZV9zaXplX2ltYWdlKTsKJiM0MzsKIHN0YXRpYyB1OCAqZW1pdF9jb2RlKHU4ICpwdHIsIHUzMiBieXRlcywgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpZiAobGVuID09IDEpCkBAIC00MDAwLDI0ICYjNDM7NDAxMCwxNCBAQCBpbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLAogCQkJICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcikKIHsKIAlzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlIGltOwotCXZvaWQgKmltYWdlOwotCWludCByZXQ7CiAKLQkvKiBBbGxvY2F0ZSBhIHRlbXBvcmFyeSBidWZmZXIgZm9yIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkuCi0JICoKLQkgKiBXZSBjYW5ub3QgdXNlIGt2bWFsbG9jIGhlcmUsIGJlY2F1c2Ugd2UgbmVlZCBpbWFnZSB0byBiZSBpbgotCSAqIG1vZHVsZSBtZW1vcnkgcmFuZ2UuCi0JICogU2luY2UgaXQgbXVzdCBiZSB3cml0YWJsZSB1c2UgZXhlY21lbV9hbGxvYyhFWEVDTUVNX01PRFVMRV9EQVRBKQotCSAqIHRoYXQgcmV0dXJucyB3cml0YWJsZSBtZW1vcnkgaW4gdGhlIG1vZHVsZSBhZGRyZXNzIHNwYWNlLgotCSAqLwotCWltYWdlID0gZXhlY21lbV9hbGxvYyhFWEVDTUVNX01PRFVMRV9EQVRBLCBQQUdFX1NJWkUpOwotCWlmICghaW1hZ2UpCiYjNDM7CWlmICghdHJhbXBvbGluZV9zaXplX2ltYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCZhbXA7aW0sIGltYWdlLCBpbWFnZSAmIzQzOyBQQUdFX1NJWkUsIGltYWdlLAotCQkJCQkgICAgbSwgZmxhZ3MsIHRub2RlcywgZnVuY19hZGRyKTsKLQlleGVjbWVtX2ZyZWUoaW1hZ2UpOwotCXJldHVybiByZXQ7CiYjNDM7CXJldHVybiBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgmYW1wO2ltLCB0cmFtcG9saW5lX3NpemVfaW1hZ2UsCiYjNDM7CQkJCQkgICAgIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSAmIzQzOyBQQUdFX1NJWkUsCiYjNDM7CQkJCQkgICAgIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSwgbSwgZmxhZ3MsCiYjNDM7CQkJCQkgICAgIHRub2RlcywgZnVuY19hZGRyKTsKIH0KIAogc3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLCB1OCAqYnVmKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDU1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBKSVQgVHJhbXBvbGluZSBTaXplIE9wdGltaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgdG8gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIG9wdGltaXppbmcgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgZm9yIHRoZSBCUEYgdHJhbXBvbGluZSBzaXplIGltYWdlLiBTcGVjaWZpY2FsbHksIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBzdGF0aWMgZ2xvYmFsIHBvaW50ZXIsIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgLCBpcyBhIGtleSBhbHRlcmF0aW9uLgoKQmVmb3JlLCBpbiBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCwgYSBuZXcgYGltYWdlYCB3YXMgYWxsb2NhdGVkIG9uIHRoZSBoZWFwIGZvciBlYWNoIGNhbGwgdXNpbmcgYGV4ZWNtZW1fYWxsb2NgLiBUaGUgY2hhbmdlIG1lbW9pemVzIHRoaXMgYWxsb2NhdGlvbiB1c2luZyB0aGUgc3RhdGljIHZhcmlhYmxlIGFuZCBpbml0aWFsaXNlcyBpdCBhdCBib290IHVzaW5nIGBsYXRlX2luaXRjYWxsKGluaXRfdHJhbXBvbGluZV9zaXplX2ltYWdlKWAuIE5vdywgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgc2ltcGx5IHJlLXVzZXMgdGhpcyBwcmUtYWxsb2NhdGVkIGJ1ZmZlci4gVGhpcyBkZWZpbml0ZWx5IHN1Z2dlc3RzIGFuIGVmZm9ydCB0byByZWR1Y2Ugb3ZlcmhlYWQsIGxpa2VseSBpbiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHBlcmZvcm1hbmNlIGdhaW5zLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm5zIGFyZSBhcm91bmQgdGhyZWFkIHNhZmV0eSBhbmQgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgaXMgdGhlIGNydWNpYWwgZnVuY3Rpb24gaGVyZSwgYXMgaXQmIzM5O3MgdGhlIG9uZSB1c2luZyB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgaWYgYW55IGNvbmN1cnJlbnQgYWNjZXNzIGlzIHBvc3NpYmxlLiBBbHNvLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpbWFnZSBpcyBpbml0aWFsaXplZCBwcm9wZXJseSBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHNoYXJlZCBidWZmZXIgaXMgYmVpbmcgbW9kaWZpZWQgaW4gYSB0aHJlYWQtdW5zYWZlIHdheS4KCkkmIzM5O2xsIHVzZSBteSB1c3VhbCB0b29scyAtIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCAtIHRvIGV4YW1pbmUgYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpdHNlbGYsIGl0cyBjYWxsZXJzLCBhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggYHRyYW1wb2xpbmVfc2l6ZV9pbWFnZWAgaXMgdXNlZC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgb3B0aW1pemF0aW9uIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgc3VidGxlIGJ1Z3MsIHN1Y2ggYXMgZGF0YSBjb3JydXB0aW9uIG9yIHJhY2UgY29uZGl0aW9ucy4gSSYjMzk7bGwgbG9vayBmb3IgcG90ZW50aWFsIGxvY2tpbmcgbWVjaGFuaXNtcywgb3IgbGFjayB0aGVyZW9mLiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIG1lbW9yeSBmb290cHJpbnQuIFBlcmhhcHMgdGhpcyBpcyBhIHRyYWRlLW9mZiB0aGF0IGlzIHNhdmluZyB1cyB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzU1NT1zdGF0aWMgaW50IGludm9rZV9icGZfbW9kX3JldChjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHByb2csXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2NTYtICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzY1NzpzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbWFnZSxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjU4LVx0XHRcdFx0XHQgdm9pZCAqcndfaW1hZ2VfZW5kLCB2b2lkICppbWFnZSxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzk4MD1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICppbWFnZSwgdm9pZCAqaW1hZ2VfZW5kLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zOTk1LVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM5OTY6XHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShpbSwgcndfaW1hZ2UsIHJ3X2ltYWdlICYjNDM7IHNpemUsIGltYWdlLCBtLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM5OTctXHRcdFx0XHRcdCAgICBmbGFncywgdG5vZGVzLCBmdW5jX2FkZHIpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz00MDA5PWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMTYtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6NDAxNzpcdHJldHVybiBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcdTAwMjZpbSwgdHJhbXBvbGluZV9zaXplX2ltYWdlLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMTgtXHRcdFx0XHRcdCAgICAgdHJhbXBvbGluZV9zaXplX2ltYWdlICYjNDM7IFBBR0VfU0laRSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE5MgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIHRyYW1wb2xpbmUgaXMgcHJlcGFyZWQgb24geDg2LCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGFuZCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCB3aXRoaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoZSB0cmFtcG9saW5lIGlzIGNyaXRpY2FsIGZvciB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MsIHNvIGtub3dpbmcgaG93IGl0JiMzOTtzIHNldCB1cCBhbmQgc2l6ZWQgaXMgZnVuZGFtZW50YWwgdG8gdGhlIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eSBvZiB0aGUgQlBGIGltcGxlbWVudGF0aW9uIG9uIHRoaXMgYXJjaGl0ZWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgaGFuZGxlcyB0aGUgYWN0dWFsIHByZXBhcmF0aW9uIGFuZCB3aGF0IGNvbnN0cmFpbnRzIG9yIGNvbnNpZGVyYXRpb25zIGRldGVybWluZSB0aGUgc2l6ZSBhbGxvY2F0aW9uLiBXaGF0IGtpbmQgb2YgYXNzZW1ibHkgaXMgZ2VuZXJhdGVkPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHg4NiBpbnN0cnVjdGlvbnMgb3IgdGVjaG5pcXVlcyBiZWluZyBsZXZlcmFnZWQgaGVyZSBmb3IgdGhlIHRyYW1wb2xpbmU/IFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzY1NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNjU3Olx0c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1hZ2UsXG4zNjU4Olx0XHRcdFx0XHRcdCB2b2lkICpyd19pbWFnZV9lbmQsIHZvaWQgKmltYWdlLFxuMzY1OTpcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4zNjYwOlx0XHRcdFx0XHRcdCBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsXG4zNjYxOlx0XHRcdFx0XHRcdCB2b2lkICpmdW5jX2FkZHIpXG4zNjYyOlx0e1xuMzY2MzpcdFx0aW50IGksIHJldCwgbnJfcmVncyA9IG0tXHUwMDNlbnJfYXJncywgc3RhY2tfc2l6ZSA9IDA7XG4zNjY0Olx0XHRpbnQgcmVnc19vZmYsIGZ1bmNfbWV0YV9vZmYsIGlwX29mZiwgcnVuX2N0eF9vZmYsIGFyZ19zdGFja19vZmYsIHJieF9vZmY7XG4zNjY1Olx0XHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICpmZW50cnkgPSBcdTAwMjZ0bm9kZXNbQlBGX1RSQU1QX0ZFTlRSWV07XG4zNjY2Olx0XHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICpmZXhpdCA9IFx1MDAyNnRub2Rlc1tCUEZfVFJBTVBfRkVYSVRdO1xuMzY2NzpcdFx0c3RydWN0IGJwZl90cmFtcF9ub2RlcyAqZm1vZF9yZXQgPSBcdTAwMjZ0bm9kZXNbQlBGX1RSQU1QX01PRElGWV9SRVRVUk5dO1xuMzY2ODpcdFx0dm9pZCAqb3JpZ19jYWxsID0gZnVuY19hZGRyO1xuMzY2OTpcdFx0aW50IGNvb2tpZV9vZmYsIGNvb2tpZV9jbnQ7XG4zNjcwOlx0XHR1OCAqKmJyYW5jaGVzID0gTlVMTDtcbjM2NzE6XHRcdHU2NCBhcmVuYV9iYXNlO1xuMzY3MjpcdFx0dTY0IGZ1bmNfbWV0YTtcbjM2NzM6XHRcdHU4ICpwcm9nO1xuMzY3NDpcdFx0Ym9vbCBzYXZlX3JldDtcbjM2NzU6XHRcbjM2NzY6XHRcdC8qXG4zNjc3Olx0XHQgKiBGX0lORElSRUNUIGlzIG9ubHkgY29tcGF0aWJsZSB3aXRoIEZfUkVUX0ZFTlRSWV9SRVQsIGl0IGlzXG4zNjc4Olx0XHQgKiBleHBsaWNpdGx5IGluY29tcGF0aWJsZSB3aXRoIEZfQ0FMTF9PUklHIHwgRl9TS0lQX0ZSQU1FIHwgRl9JUF9BUkdcbjM2Nzk6XHRcdCAqIGJlY2F1c2UgQGZ1bmNfYWRkci5cbjM2ODA6XHRcdCAqL1xuMzY4MTpcdFx0V0FSTl9PTl9PTkNFKChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIFx1MDAyNlx1MDAyNlxuMzY4MjpcdFx0XHQgICAgIChmbGFncyBcdTAwMjYgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpO1xuMzY4MzpcdFxuMzY4NDpcdFx0YXJlbmFfYmFzZSA9IGJwZl90cmFtcF9hcmVuYV9iYXNlKG0sIHRub2RlcywgZmxhZ3MpO1xuMzY4NTpcdFxuMzY4NjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbS1cdTAwM2Vucl9hcmdzOyBpJiM0MzsmIzQzOylcbjM2ODc6XHRcdFx0bnJfcmVncyAmIzQzOz0gKG0tXHUwMDNlYXJnX3NpemVbaV0gJiM0MzsgNykgLyA4IC0gMTtcbjM2ODg6XHRcbjM2ODk6XHRcdC8qIHg4Ni02NCBzdXBwb3J0cyB1cCB0byBNQVhfQlBGX0ZVTkNfQVJHUyBhcmd1bWVudHMuIDEtNlxuMzY5MDpcdFx0ICogYXJlIHBhc3NlZCB0aHJvdWdoIHJlZ3MsIHRoZSByZW1haW5zIGFyZSB0aHJvdWdoIHN0YWNrLlxuMzY5MTpcdFx0ICovXG4zNjkyOlx0XHRpZiAobnJfcmVncyBcdTAwM2UgTUFYX0JQRl9GVU5DX0FSR1MpXG4zNjkzOlx0XHRcdHJldHVybiAtRU5PVFNVUFA7XG4zNjk0Olx0XG4zNjk1Olx0XHQvKiBHZW5lcmF0ZWQgdHJhbXBvbGluZSBzdGFjayBsYXlvdXQ6XG4zNjk2Olx0XHQgKlxuMzY5NzpcdFx0ICogUkJQICYjNDM7IDggICAgICAgICBbIHJldHVybiBhZGRyZXNzICBdXG4zNjk4Olx0XHQgKiBSQlAgJiM0MzsgMCAgICAgICAgIFsgUkJQICAgICAgICAgICAgIF1cbjM2OTk6XHRcdCAqXG4zNzAwOlx0XHQgKiBSQlAgLSA4ICAgICAgICAgWyByZXR1cm4gdmFsdWUgICAgXSAgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHIG9yXG4zNzAxOlx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlBGX1RSQU1QX0ZfUkVUX0ZFTlRSWV9SRVQgZmxhZ3NcbjM3MDI6XHRcdCAqXG4zNzAzOlx0XHQgKiAgICAgICAgICAgICAgICAgWyByZWdfYXJnTiAgICAgICAgXSAgYWx3YXlzXG4zNzA0Olx0XHQgKiAgICAgICAgICAgICAgICAgWyAuLi4gICAgICAgICAgICAgXVxuMzcwNTpcdFx0ICogUkJQIC0gcmVnc19vZmYgIFsgcmVnX2FyZzEgICAgICAgIF0gIHByb2dyYW0mIzM5O3MgY3R4IHBvaW50ZXJcbjM3MDY6XHRcdCAqXG4zNzA3Olx0XHQgKiBSQlAgLSBmdW5jX21ldGFfb2ZmIFsgcmVncyBjb3VudCwgZXRjIF0gIGFsd2F5c1xuMzcwODpcdFx0ICpcbjM3MDk6XHRcdCAqIFJCUCAtIGlwX29mZiAgICBbIHRyYWNlZCBmdW5jdGlvbiBdICBCUEZfVFJBTVBfRl9JUF9BUkcgZmxhZ1xuMzcxMDpcdFx0ICpcbjM3MTE6XHRcdCAqIFJCUCAtIHJieF9vZmYgICBbIHJieCB2YWx1ZSAgICAgICBdICBhbHdheXNcbjM3MTI6XHRcdCAqXG4zNzEzOlx0XHQgKiBSQlAgLSBydW5fY3R4X29mZiBbIGJwZl90cmFtcF9ydW5fY3R4IF1cbjM3MTQ6XHRcdCAqXG4zNzE1Olx0XHQgKiAgICAgICAgICAgICAgICAgICAgIFsgc3RhY2tfYXJnTiBdICBCUEZfVFJBTVBfRl9DQUxMX09SSUdcbjM3MTY6XHRcdCAqICAgICAgICAgICAgICAgICAgICAgWyAuLi4gICAgICAgIF1cbjM3MTc6XHRcdCAqICAgICAgICAgICAgICAgICAgICAgWyBzdGFja19hcmcyIF1cbjM3MTg6XHRcdCAqIFJCUCAtIGFyZ19zdGFja19vZmYgWyBzdGFja19hcmcxIF1cbjM3MTk6XHRcdCAqIFJTUCAgICAgICAgICAgICAgICAgWyB0YWlsX2NhbGxfY250X3B0ciBdIEJQRl9UUkFNUF9GX1RBSUxfQ0FMTF9DVFhcbjM3MjA6XHRcdCAqL1xuMzcyMTpcdFxuMzcyMjpcdFx0Lyogcm9vbSBmb3IgcmV0dXJuIHZhbHVlIG9mIG9yaWdfY2FsbCBvciBmZW50cnkgcHJvZyAqL1xuMzcyMzpcdFx0c2F2ZV9yZXQgPSBmbGFncyBcdTAwMjYgKEJQRl9UUkFNUF9GX0NBTExfT1JJRyB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKTtcbjM3MjQ6XHRcdGlmIChzYXZlX3JldClcbjM3MjU6XHRcdFx0c3RhY2tfc2l6ZSAmIzQzOz0gODtcbjM3MjY6XHRcbjM3Mjc6XHRcdHN0YWNrX3NpemUgJiM0Mzs9IG5yX3JlZ3MgKiA4O1xuMzcyODpcdFx0cmVnc19vZmYgPSBzdGFja19zaXplO1xuMzcyOTpcdFxuMzczMDpcdFx0LyogZnVuY3Rpb24gbWF0ZWRhdGEsIHN1Y2ggYXMgcmVncyBjb3VudCAgKi9cbjM3MzE6XHRcdHN0YWNrX3NpemUgJiM0Mzs9IDg7XG4zNzMyOlx0XHRmdW5jX21ldGFfb2ZmID0gc3RhY2tfc2l6ZTtcbjM3MzM6XHRcbjM3MzQ6XHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSVBfQVJHKVxuMzczNTpcdFx0XHRzdGFja19zaXplICYjNDM7PSA4OyAvKiByb29tIGZvciBJUCBhZGRyZXNzIGFyZ3VtZW50ICovXG4zNzM2Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MjgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGFuZCBgcndfaW1hZ2VgIFVzYWdlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGJhY2sgaW50byB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIHdhcyBvbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgZnVuY3Rpb24gd29ya3MuIE5vdywgSSBuZWVkIHRvIGV4cGFuZCBteSB2aWV3IGFuZCBzZWUgaG93IHRoZSByZXN0IG9mIGl0IHVuZm9sZHMsIHNwZWNpZmljYWxseSB0aGUgcGFydHMgdGhhdCByZWxhdGUgdG8gYHJ3X2ltYWdlYC4gSSBuZWVkIHRvIHRyYWNrIHRoZSBwYXRoIG9mIGByd19pbWFnZWAuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgY2FsbHMgb3IgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYHJ3X2ltYWdlYCwgZXNwZWNpYWxseSB3aXRoaW4gb3IgYXJvdW5kIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBpcyBiZWluZyBsb2FkZWQgaW50byBgcndfaW1hZ2VgLiBJIHdpbGwgZm9sbG93IGByd19pbWFnZWAgYW5kIHVuZGVyc3RhbmQgd2hhdCBjb2RlIGl0IGlzIGFzc29jaWF0ZWQgd2l0aC4gVGhlbiBJIHdpbGwgc2VlIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBhbHNvIHVzaW5nIGByd19pbWFnZWAgYW5kIHdoYXQgdGhleSBkby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzM3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM3Mzc6XHRcdGlwX29mZiA9IHN0YWNrX3NpemU7XG4zNzM4Olx0XG4zNzM5Olx0XHRjb29raWVfY250ID0gYnBmX2ZzZXNzaW9uX2Nvb2tpZV9jbnQodG5vZGVzKTtcbjM3NDA6XHRcdC8qIHJvb20gZm9yIHNlc3Npb24gY29va2llcyAqL1xuMzc0MTpcdFx0c3RhY2tfc2l6ZSAmIzQzOz0gY29va2llX2NudCAqIDg7XG4zNzQyOlx0XHRjb29raWVfb2ZmID0gc3RhY2tfc2l6ZTtcbjM3NDM6XHRcbjM3NDQ6XHRcdHN0YWNrX3NpemUgJiM0Mzs9IDg7XG4zNzQ1Olx0XHRyYnhfb2ZmID0gc3RhY2tfc2l6ZTtcbjM3NDY6XHRcbjM3NDc6XHRcdHN0YWNrX3NpemUgJiM0Mzs9IChzaXplb2Yoc3RydWN0IGJwZl90cmFtcF9ydW5fY3R4KSAmIzQzOyA3KSBcdTAwMjYgfjB4NztcbjM3NDg6XHRcdHJ1bl9jdHhfb2ZmID0gc3RhY2tfc2l6ZTtcbjM3NDk6XHRcbjM3NTA6XHRcdGlmIChucl9yZWdzIFx1MDAzZSA2IFx1MDAyNlx1MDAyNiAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykpIHtcbjM3NTE6XHRcdFx0LyogdGhlIHNwYWNlIHRoYXQgdXNlZCB0byBwYXNzIGFyZ3VtZW50cyBvbi1zdGFjayAqL1xuMzc1MjpcdFx0XHRzdGFja19zaXplICYjNDM7PSAobnJfcmVncyAtIGdldF9ucl91c2VkX3JlZ3MobSkpICogODtcbjM3NTM6XHRcdFx0LyogbWFrZSBzdXJlIHRoZSBzdGFjayBwb2ludGVyIGlzIDE2LWJ5dGUgYWxpZ25lZCBpZiB3ZVxuMzc1NDpcdFx0XHQgKiBuZWVkIHBhc3MgYXJndW1lbnRzIG9uIHN0YWNrLCB3aGljaCBtZWFuc1xuMzc1NTpcdFx0XHQgKiAgW3N0YWNrX3NpemUgJiM0MzsgOChyYnApICYjNDM7IDgocmlwKSAmIzQzOyA4KG9yaWdpbiByaXApXVxuMzc1NjpcdFx0XHQgKiBzaG91bGQgYmUgMTYtYnl0ZSBhbGlnbmVkLiBGb2xsb3dpbmcgY29kZSBkZXBlbmQgb25cbjM3NTc6XHRcdFx0ICogdGhhdCBzdGFja19zaXplIGlzIGFscmVhZHkgOC1ieXRlIGFsaWduZWQuXG4zNzU4Olx0XHRcdCAqL1xuMzc1OTpcdFx0XHRpZiAoYnBmX3RyYW1wb2xpbmVfdXNlX2ptcChmbGFncykpIHtcbjM3NjA6XHRcdFx0XHQvKiBubyByaXAgaW4gdGhlIFwmIzM0O2ptcFwmIzM0OyBjYXNlICovXG4zNzYxOlx0XHRcdFx0c3RhY2tfc2l6ZSAmIzQzOz0gKHN0YWNrX3NpemUgJSAxNikgPyA4IDogMDtcbjM3NjI6XHRcdFx0fSBlbHNlIHtcbjM3NjM6XHRcdFx0XHRzdGFja19zaXplICYjNDM7PSAoc3RhY2tfc2l6ZSAlIDE2KSA/IDAgOiA4O1xuMzc2NDpcdFx0XHR9XG4zNzY1Olx0XHR9XG4zNzY2Olx0XG4zNzY3Olx0XHRhcmdfc3RhY2tfb2ZmID0gc3RhY2tfc2l6ZTtcbjM3Njg6XHRcbjM3Njk6XHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHKSB7XG4zNzcwOlx0XHRcdC8qIHNraXAgcGF0Y2hlZCBjYWxsIGluc3RydWN0aW9uIGFuZCBwb2ludCBvcmlnX2NhbGwgdG8gYWN0dWFsXG4zNzcxOlx0XHRcdCAqIGJvZHkgb2YgdGhlIGtlcm5lbCBmdW5jdGlvbi5cbjM3NzI6XHRcdFx0ICovXG4zNzczOlx0XHRcdGlmIChpc19lbmRicihvcmlnX2NhbGwpKVxuMzc3NDpcdFx0XHRcdG9yaWdfY2FsbCAmIzQzOz0gRU5EQlJfSU5TTl9TSVpFO1xuMzc3NTpcdFx0XHRvcmlnX2NhbGwgJiM0Mzs9IFg4Nl9QQVRDSF9TSVpFO1xuMzc3NjpcdFx0fVxuMzc3NzpcdFxuMzc3ODpcdFx0cHJvZyA9IHJ3X2ltYWdlO1xuMzc3OTpcdFxuMzc4MDpcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVCkge1xuMzc4MTpcdFx0XHQvKlxuMzc4MjpcdFx0XHQgKiBJbmRpcmVjdCBjYWxsIGZvciBicGZfc3RydWN0X29wc1xuMzc4MzpcdFx0XHQgKi9cbjM3ODQ6XHRcdFx0ZW1pdF9jZmkoXHUwMDI2cHJvZywgaW1hZ2UsXG4zNzg1Olx0XHRcdFx0IGNmaV9nZXRfZnVuY19oYXNoKGZ1bmNfYWRkciksXG4zNzg2Olx0XHRcdFx0IGNmaV9nZXRfZnVuY19hcml0eShmdW5jX2FkZHIpKTtcbjM3ODc6XHRcdH0gZWxzZSB7XG4zNzg4Olx0XHRcdC8qXG4zNzg5Olx0XHRcdCAqIERpcmVjdC1jYWxsIGZlbnRyeSBzdHViLCBhcyBzdWNoIGl0IG5lZWRzIGFjY291bnRpbmcgZm9yIHRoZVxuMzc5MDpcdFx0XHQgKiBfX2ZlbnRyeV9fIGNhbGwuXG4zNzkxOlx0XHRcdCAqL1xuMzc5MjpcdFx0XHR4ODZfY2FsbF9kZXB0aF9lbWl0X2FjY291bnRpbmcoXHUwMDI2cHJvZywgTlVMTCwgaW1hZ2UpO1xuMzc5MzpcdFx0fVxuMzc5NDpcdFx0RU1JVDEoMHg1NSk7XHRcdCAvKiBwdXNoIHJicCAqL1xuMzc5NTpcdFx0RU1JVDMoMHg0OCwgMHg4OSwgMHhFNSk7IC8qIG1vdiByYnAsIHJzcCAqL1xuMzc5NjpcdFx0aWYgKGltKVxuMzc5NzpcdFx0XHRpbS1cdTAwM2Vrc3ltLmZwX3N0YXJ0ID0gcHJvZyAtICh1OCAqKXJ3X2ltYWdlO1xuMzc5ODpcdFxuMzc5OTpcdFx0aWYgKCFpc19pbW04KHN0YWNrX3NpemUpKSB7XG4zODAwOlx0XHRcdC8qIHN1YiByc3AsIHN0YWNrX3NpemUgKi9cbjM4MDE6XHRcdFx0RU1JVDNfb2ZmMzIoMHg0OCwgMHg4MSwgMHhFQywgc3RhY2tfc2l6ZSk7XG4zODAyOlx0XHR9IGVsc2Uge1xuMzgwMzpcdFx0XHQvKiBzdWIgcnNwLCBzdGFja19zaXplICovXG4zODA0Olx0XHRcdEVNSVQ0KDB4NDgsIDB4ODMsIDB4RUMsIHN0YWNrX3NpemUpO1xuMzgwNTpcdFx0fVxuMzgwNjpcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9UQUlMX0NBTExfQ1RYKVxuMzgwNzpcdFx0XHRFTUlUMSgweDUwKTtcdFx0LyogcHVzaCByYXggKi9cbjM4MDg6XHRcdC8qIG1vdiBRV09SRCBQVFIgW3JicCAtIHJieF9vZmZdLCByYnggKi9cbjM4MDk6XHRcdGVtaXRfc3R4KFx1MDAyNnByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgQlBGX1JFR182LCAtcmJ4X29mZik7XG4zODEwOlx0XG4zODExOlx0XHRmdW5jX21ldGEgPSBucl9yZWdzO1xuMzgxMjpcdFx0LyogU3RvcmUgbnVtYmVyIG9mIGFyZ3VtZW50IHJlZ2lzdGVycyBvZiB0aGUgdHJhY2VkIGZ1bmN0aW9uICovXG4zODEzOlx0XHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KFx1MDAyNnByb2csIEJQRl9SRUdfMCwgLWZ1bmNfbWV0YV9vZmYsIGZ1bmNfbWV0YSk7XG4zODE0Olx0XG4zODE1Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0lQX0FSRykge1xuMzgxNjpcdFx0XHQvKiBTdG9yZSBJUCBhZGRyZXNzIG9mIHRoZSB0cmFjZWQgZnVuY3Rpb24gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU5NgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgaW50ZXJuYWxzIG9mIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgbm93LiBNeSBtYWluIGNvbmNlcm4gaXMgdG8gdW5kZXJzdGFuZCBpdHMgcmV0dXJuIHZhbHVlIGFuZCB1bHRpbWF0ZWx5LCBob3cgaXQgc2lnbmFscyBjb21wbGV0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGtleSBzdGF0ZSBpcyBzZXQgdXAgaGVyZSwgYW5kIHdoZXJlIGl0IGdvZXMgZnJvbSBoZXJlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoYXQgdG8gbG9vayBmb3IgYWZ0ZXIgdGhlIGNhbGwgdG8gdW5kZXJzdGFuZCB3aGF0IGp1c3QgaGFwcGVuZWQgYW5kIHRoYXQgZXZlcnl0aGluZyB3ZW50IGFjY29yZGluZyB0byBwbGFuLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGl0IGlzIHNldCB1cCBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggdGhlIGFyY2hpdGVjdHVyYWwgcmVxdWlyZW1lbnRzLCBhbmQgdGhhdCB0aGlzIGZpdHMgd2l0aCB0aGUgb3ZlcmFyY2hpbmcgQlBGIGRlc2lnbi4gSSBhbSBsb29raW5nIGZvciBkZXRhaWxzIHRoYXQgbWlnaHQgbGVhZCB0byBhIHZ1bG5lcmFiaWxpdHkgb3IgYW4gdW5leHBlY3RlZCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5NjA6XHRjbGVhbnVwOlxuMzk2MTpcdFx0a2ZyZWUoYnJhbmNoZXMpO1xuMzk2MjpcdFx0cmV0dXJuIHJldDtcbjM5NjM6XHR9XG4zOTY0Olx0XG4zOTY1Olx0dm9pZCAqYXJjaF9hbGxvY19icGZfdHJhbXBvbGluZSh1bnNpZ25lZCBpbnQgc2l6ZSlcbjM5NjY6XHR7XG4zOTY3Olx0XHRyZXR1cm4gYnBmX3Byb2dfcGFja19hbGxvYyhzaXplLCBqaXRfZmlsbF9ob2xlLCBmYWxzZSk7XG4zOTY4Olx0fVxuMzk2OTpcdFxuMzk3MDpcdHZvaWQgYXJjaF9mcmVlX2JwZl90cmFtcG9saW5lKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbjM5NzE6XHR7XG4zOTcyOlx0XHRicGZfcHJvZ19wYWNrX2ZyZWUoaW1hZ2UsIHNpemUpO1xuMzk3MzpcdH1cbjM5NzQ6XHRcbjM5NzU6XHRpbnQgYXJjaF9wcm90ZWN0X2JwZl90cmFtcG9saW5lKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbjM5NzY6XHR7XG4zOTc3Olx0XHRyZXR1cm4gMDtcbjM5Nzg6XHR9XG4zOTc5Olx0XG4zOTgwOlx0aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqaW1hZ2UsIHZvaWQgKmltYWdlX2VuZCxcbjM5ODE6XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuMzk4MjpcdFx0XHRcdFx0c3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLFxuMzk4MzpcdFx0XHRcdFx0dm9pZCAqZnVuY19hZGRyKVxuMzk4NDpcdHtcbjM5ODU6XHRcdHZvaWQgKnJ3X2ltYWdlLCAqdG1wO1xuMzk4NjpcdFx0aW50IHJldDtcbjM5ODc6XHRcdHUzMiBzaXplID0gaW1hZ2VfZW5kIC0gaW1hZ2U7XG4zOTg4Olx0XG4zOTg5Olx0XHQvKiByd19pbWFnZSBkb2VzbiYjMzk7dCBuZWVkIHRvIGJlIGluIG1vZHVsZSBtZW1vcnkgcmFuZ2UsIHNvIHdlIGNhblxuMzk5MDpcdFx0ICogdXNlIGt2bWFsbG9jLlxuMzk5MTpcdFx0ICovXG4zOTkyOlx0XHRyd19pbWFnZSA9IGt2bWFsbG9jKHNpemUsIEdGUF9LRVJORUwpO1xuMzk5MzpcdFx0aWYgKCFyd19pbWFnZSlcbjM5OTQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zOTk1Olx0XG4zOTk2Olx0XHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShpbSwgcndfaW1hZ2UsIHJ3X2ltYWdlICYjNDM7IHNpemUsIGltYWdlLCBtLFxuMzk5NzpcdFx0XHRcdFx0XHQgICAgZmxhZ3MsIHRub2RlcywgZnVuY19hZGRyKTtcbjM5OTg6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4zOTk5Olx0XHRcdGdvdG8gb3V0O1xuNDAwMDpcdFxuNDAwMTpcdFx0dG1wID0gYnBmX2FyY2hfdGV4dF9jb3B5KGltYWdlLCByd19pbWFnZSwgc2l6ZSk7XG40MDAyOlx0XHRpZiAoSVNfRVJSKHRtcCkpXG40MDAzOlx0XHRcdHJldCA9IFBUUl9FUlIodG1wKTtcbjQwMDQ6XHRvdXQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0OTQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBCUEYgVHJhbXBvbGluZSBTaXplIENhbGN1bGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYC4gVGhlIG5hbWUgaXRzZWxmIHNjcmVhbXMgJiMzNDtzaXplIGNhbGN1bGF0aW9uIGZvciBhIHRyYW1wb2xpbmUsJiMzNDsgcHJlc3VtYWJseSB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aG8qIGlzIHVzaW5nIHRoaXMgZnVuY3Rpb24uIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBpbGx1bWluYXRlIHRoZSBwdXJwb3NlIGFuZCBjb25zdHJhaW50cyBkcml2aW5nIHRoaXMgc2l6ZSBjYWxjdWxhdGlvbi4gVGltZSB0byBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VlIHdobyYjMzk7cyBpbnZva2luZyBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dHVhbCBjbHVlcyBJIG5lZWQgdG8gZnVsbHkgZ3JvayB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJjaF9icGZfdHJhbXBvbGluZV9zaXplJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTI5ODg9Ym9vbCBicGZfaml0X3N1cHBvcnRzX2ZzZXNzaW9uKHZvaWQpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjk5Mi1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjI5OTM6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTI5OTQtXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTIxMzg9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMTc1LVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMTc2OmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIxNzctXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jPTgxMj1zdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbWFnZSxcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTExOTEtXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjExOTI6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTE5My1cdFx0XHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTAzMD1zdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTMzNi1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTMzNzppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzM4LVx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz0yNjk4PXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0zMDE1LVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzozMDE2OmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTMwMTctXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKm9yaWdfY2FsbClcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzk4MD1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICppbWFnZSwgdm9pZCAqaW1hZ2VfZW5kLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDA4LVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQwMDk6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDEwLVx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0xMzE3PWludCBfX211c3RfY2hlY2sgYXJjaF9wcm90ZWN0X2JwZl90cmFtcG9saW5lKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjEzMTg6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbmluY2x1ZGUvbGludXgvYnBmLmgtMTMxOS1cdFx0XHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NjM3PWludCBicGZfc3RydWN0X29wc19wcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLFxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NTMtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjU0Olx0c2l6ZSA9IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShtb2RlbCwgZmxhZ3MsIHRub2Rlcywgc3R1Yl9mdW5jKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NTUtXHRpZiAoc2l6ZSBcdTAwM2M9IDApXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NzEwPXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzYxLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzYyOlx0c2l6ZSA9IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShcdTAwMjZ0ci1cdTAwM2VmdW5jLm1vZGVsLCB0ci1cdTAwM2VmbGFncyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc2My1cdFx0XHRcdFx0dG5vZGVzLCB0ci1cdTAwM2VmdW5jLmFkZHIpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1MDg9aW50IF9fd2VhayBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MTMtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTE0OmludCBfX3dlYWsgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUxNS1cdFx0XHRcdCAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMTgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgQlBGIFRyYW1wb2xpbmUgU2l6ZSBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBvcHRpbWl6ZXMgaG93IHRoZSBCUEYgdHJhbXBvbGluZSBzaXplIGlzIGNhbGN1bGF0ZWQuIFByZXZpb3VzbHksIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgIHdhcyBjYWxsaW5nIGBleGVjbWVtX2FsbG9jYCBhbmQgYGV4ZWNtZW1fZnJlZWAgb24gYSA0S0IgcGFnZSBldmVyeSB0aW1lIGl0IG5lZWRlZCB0byBmaWd1cmUgb3V0IHRoZSB0cmFtcG9saW5lIHNpemUuIE5vdywgd2UmIzM5O3ZlIGdvdCBhIGdsb2JhbCBidWZmZXIsIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgLCBwcmUtYWxsb2NhdGVkIGF0IGluaXQgdGltZS4gVGhhdCYjMzk7cyBnb29kLCBhdm9pZGluZyB0aG9zZSByZXBlYXRlZCBhbGxvY2F0aW9ucy4gVGhlIGZ1bmN0aW9uIG5vdyBjYWxscyBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIHdpdGggdGhpcyBwcmUtYWxsb2NhdGVkIGJ1ZmZlciBhcyBhIHRhcmdldCB0byBkZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlIGdlbmVyYXRlZCBpbnN0cnVjdGlvbnMuIEl0IHJldHVybnMgdGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZ2VuZXJhdGVkIGluc3RydWN0aW9ucy4KCk15IG1haW4gY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIExldCYjMzk7cyBicmVhayBpdCBkb3duOgoKMS4gIGBpbml0X3RyYW1wb2xpbmVfc2l6ZV9pbWFnZWAgYWxsb2NhdGVzIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgIHVzaW5nIGBleGVjbWVtX2FsbG9jYC4KMi4gIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgd3JpdGVzIEpJVCBpbnN0cnVjdGlvbnMgaW50byBgdHJhbXBvbGluZV9zaXplX2ltYWdlYC4KMy4gIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB0aGF0IGJ1ZmZlci4KNC4gIE5vdGhpbmcgcmVhZHMgZnJvbSBgdHJhbXBvbGluZV9zaXplX2ltYWdlYCBiZWZvcmUgd3JpdGluZy4gVGhlIGNvbnRlbnRzIGFyZSBub3QgY29waWVkIGFueXdoZXJlLiBJdCYjMzk7cyBqdXN0IGEgZHVtbXkgZGVzdGluYXRpb24gZm9yIEVNSVQgaW5zdHJ1Y3Rpb25zIHRvIGRldGVybWluZSBzaXplLgo1LiAgVGhlcmUmIzM5O3MgYSBsb2NhbCBzdGFjayB2YXJpYWJsZSwgYGltYCwgd2hpY2ggaXMgcGFzc2VkIGFzIGEgcG9pbnRlci4gYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCB3cml0ZXMgdG8gYGltLSZndDtrc3ltLmZwX3N0YXJ0YCBpZiBgaW0gIT0gTlVMTGAgYnV0IGl0JiMzOTtzIG5vdCByZWFkIGFmdGVyLgo2LiAgTm8ga2VybmVsLXRvLXVzZXIgc3BhY2UgZGF0YSBjb3BpZXMgYXJlIGludm9sdmVkLgo3LiAgTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpc3N1ZXMgYXJlIHRvdWNoZWQuCjguICBDb25jZXJuaW5nIGNvbmN1cnJlbmN5LCBldmVuIHdpdGggbXVsdGlwbGUgY2FsbGVycyAobGlrZWx5IHByb3RlY3RlZCBieSBsb2NrcyBhbnl3YXkpLCBpdCYjMzk7cyBvbmx5IHdyaXR0ZW4gdG8sIG5vdCByZWFkLiBPdmVyd3JpdGVzIGhhcHBlbiBlYWNoIHRpbWUsIHNvIGV2ZW4gaWYgdGhlcmUmIzM5O3MgYSBkYXRhIHJhY2UsIGl0JiMzOTtzIGZpbmUuIFRoZSByZXR1cm4gdmFsdWUgaXMganVzdCBjYWxjdWxhdGVkIGxvY2FsbHkuCjkuICBTbywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgpHaXZlbiB0aGVzZSBmaW5kaW5ncywgdGhlIHBhdGNoIGRvZXMgd2hhdCBpdCYjMzk7cyBzdXBwb3NlZCB0byBkby4gVGhlIHJlcXVpcmVtZW50cyBzdGF0ZSBgTmVlZHNLTVNBTmAgaXMgdHJ1ZSBvbmx5IGlmIHRoZXJlIGFyZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU2luY2UgSSBoYXZlbiYjMzk7dCBmb3VuZCBhbnksIHRoZSBsb2dpYyBmb3IgZXZhbHVhdGluZyBLTVNBTiBhcHBsaWNhYmlsaXR5IHNheXM6CgoqICAgVGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBkeW5hbWljIGFsbG9jYXRpb24gb2YgYSBzY3JhdGNoIGJ1ZmZlciB3aXRoIGEgcHJlLWFsbG9jYXRlZCBzdGF0aWMgb25lLgoqICAgVGhlIHNjcmF0Y2ggYnVmZmVyIGlzIHNvbGVseSBhIHdyaXRlLW9ubHkgdGFyZ2V0LiBUaGUgc3RhY2sgdmFyaWFibGUsIGBpbWAsIGlzIHdyaXR0ZW4gdG8sIGJ1dCBub3QgcmVhZC4KKiAgIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBjb3BpZWQgYW55d2hlcmUuCiogICBBbnkgY29uY3VycmVuY3kgaXNzdWVzIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi9LQ1NBTi4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuCgpJJiMzOTtsbCBkb3VibGUgY2hlY2sgYnkgZ3JlcHBpbmcgZm9yIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBidXQgYmFzZWQgb24gdGhlIGFuYWx5c2lzIHNvIGZhciwgdGhpcyBsb29rcyBjbGVhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJhbXBvbGluZV9zaXplX2ltYWdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNz1zdGF0aWMgYm9vbCBhbGxfY2FsbGVlX3JlZ3NfdXNlZFs0XSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zOC1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozOTpzdGF0aWMgdm9pZCAqdHJhbXBvbGluZV9zaXplX2ltYWdlO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQxOnN0YXRpYyBpbnQgX19pbml0IGluaXRfdHJhbXBvbGluZV9zaXplX2ltYWdlKHZvaWQpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDIte1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQzOlx0dHJhbXBvbGluZV9zaXplX2ltYWdlID0gZXhlY21lbV9hbGxvYyhFWEVDTUVNX01PRFVMRV9EQVRBLCBQQUdFX1NJWkUpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQ0Olx0cmV0dXJuIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSA/IDAgOiAtRU5PTUVNO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQ1LX1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0NjpsYXRlX2luaXRjYWxsKGluaXRfdHJhbXBvbGluZV9zaXplX2ltYWdlKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00Ny1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9NDAwOT1pbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDEzLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQwMTQ6XHRpZiAoIXRyYW1wb2xpbmVfc2l6ZV9pbWFnZSlcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDE1LVx0XHRyZXR1cm4gLUVOT01FTTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDE2LVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQwMTc6XHRyZXR1cm4gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoXHUwMDI2aW0sIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0MDE4Olx0XHRcdFx0XHQgICAgIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSAmIzQzOyBQQUdFX1NJWkUsXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6NDAxOTpcdFx0XHRcdFx0ICAgICB0cmFtcG9saW5lX3NpemVfaW1hZ2UsIG0sIGZsYWdzLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMjAtXHRcdFx0XHRcdCAgICAgdG5vZGVzLCBmdW5jX2FkZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ4NgoJCQkJCQkJb3V0cHV0OiAyMDEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIHByZXNlbnRlZCBhcyBpZiB0aGUgdGhvdWdodHMgd2VyZSBteSBvd24sIGFuZCBhc3N1bWluZyBJJiMzOTttIHdlbGwtdmVyc2VkIGluIG15IGZpZWxkOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IFNpbXBsaWNpdHkgYW5kIENsYXJpdHkqKgoKQWxyaWdodCwgdGhpcyBpcyByZWZyZXNoaW5nbHkgc3RyYWlnaHRmb3J3YXJkLiBUaGVyZSYjMzk7cyBubyBoaWRkZW4gY29tcGxleGl0eSBvciBhbWJpZ3VpdHkgaGVyZS4gVGhlIHBhdGggZm9yd2FyZCBpcyBpbW1lZGlhdGVseSBhcHBhcmVudC4gR2l2ZW4gdGhlIGNsYXJpdHkgb2YgdGhlIHNpdHVhdGlvbiwgdGhlIG1vc3QgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gY2FsbCBhIGZ1bmN0aW9uLiBHaXZlbiB0aGUgaW5mb3JtYXRpb24gYW5kIHRoZSBkZXNpcmVkIG91dGNvbWUsIEkgYmVsaWV2ZSB0aGUgZnVuY3Rpb24gc2hvdWxkIGJlIG5hbWVkIGBzZXQtcmVzdWx0c2AuIEl0IGlzIHRoZSBjbGVhcmVzdCB3YXkgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgZHluYW1pYyBwZXItY2FsbCBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gKHZpYSBleGVjbWVtX2FsbG9jL2V4ZWNtZW1fZnJlZSkgb2YgYSBkdW1teSBzY3JhdGNoIGJ1ZmZlciBpbiBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoKSB3aXRoIGEgc3RhdGljYWxseSBwcmUtYWxsb2NhdGVkIHBhZ2UgYnVmZmVyICh0cmFtcG9saW5lX3NpemVfaW1hZ2UpLiBUaGUgYnVmZmVyIGlzIHVzZWQgc3RyaWN0bHkgYXMgYSB3cml0ZS1vbmx5IHNpbmsgZm9yIGluc3RydWN0aW9uIGVtaXNzaW9uIGR1cmluZyBkcnktcnVuIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbiBpbiBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgpIHRvIGRldGVybWluZSB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUuIEl0cyBjb250ZW50cyBhcmUgbmV2ZXIgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFjayB2YXJpYWJsZXMgc3VjaCBhcyAmIzM5O2ltJiMzOTsgYXJlIHBhc3NlZCB0byBzYXRpc2Z5IGZ1bmN0aW9uIHBhcmFtZXRlcnMgYW5kIGFyZSBub3QgcmVhZCB1bmluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrLCBvciBjb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIHN0YXRlIGlzIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkOyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIHN1ZmZpY2VzIGZvciBhbnkgbWVtb3J5IHNhZmV0eSB2ZXJpZmljYXRpb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBkeW5hbWljIHBlci1jYWxsIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiAodmlhIGV4ZWNtZW1fYWxsb2MvZXhlY21lbV9mcmVlKSBvZiBhIGR1bW15IHNjcmF0Y2ggYnVmZmVyIGluIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZSgpIHdpdGggYSBzdGF0aWNhbGx5IHByZS1hbGxvY2F0ZWQgcGFnZSBidWZmZXIgKHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSkuIFRoZSBidWZmZXIgaXMgdXNlZCBzdHJpY3RseSBhcyBhIHdyaXRlLW9ubHkgc2luayBmb3IgaW5zdHJ1Y3Rpb24gZW1pc3Npb24gZHVyaW5nIGRyeS1ydW4gdHJhbXBvbGluZSBnZW5lcmF0aW9uIGluIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkgdG8gZGV0ZXJtaW5lIHRoZSByZXF1aXJlZCBidWZmZXIgc2l6ZS4gSXRzIGNvbnRlbnRzIGFyZSBuZXZlciByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YWNrIHZhcmlhYmxlcyBzdWNoIGFzICYjMzk7aW0mIzM5OyBhcmUgcGFzc2VkIHRvIHNhdGlzZnkgZnVuY3Rpb24gcGFyYW1ldGVycyBhbmQgYXJlIG5vdCByZWFkIHVuaW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWssIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUgaXMgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQ7IHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgc3VmZmljZXMgZm9yIGFueSBtZW1vcnkgc2FmZXR5IHZlcmlmaWNhdGlvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzA6MzguOTc1MDI0MTY1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM1MDAyNTk2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX2JwZl90cmFtcG9saW5lX3NpemVcIixcbiAgICBcIl9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV91cGRhdGVcIixcbiAgICBcImJwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgZHluYW1pYyBwZXItY2FsbCBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gKHZpYSBleGVjbWVtX2FsbG9jL2V4ZWNtZW1fZnJlZSkgb2YgYSBkdW1teSBzY3JhdGNoIGJ1ZmZlciBpbiBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoKSB3aXRoIGEgc3RhdGljYWxseSBwcmUtYWxsb2NhdGVkIHBhZ2UgYnVmZmVyICh0cmFtcG9saW5lX3NpemVfaW1hZ2UpLiBUaGUgYnVmZmVyIGlzIHVzZWQgc3RyaWN0bHkgYXMgYSB3cml0ZS1vbmx5IHNpbmsgZm9yIGluc3RydWN0aW9uIGVtaXNzaW9uIGR1cmluZyBkcnktcnVuIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbiBpbiBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgpIHRvIGRldGVybWluZSB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUuIEl0cyBjb250ZW50cyBhcmUgbmV2ZXIgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFjayB2YXJpYWJsZXMgc3VjaCBhcyAnaW0nIGFyZSBwYXNzZWQgdG8gc2F0aXNmeSBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFuZCBhcmUgbm90IHJlYWQgdW5pbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVhaywgb3IgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCBzdGF0ZSBpcyBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZDsgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBzdWZmaWNlcyBmb3IgYW55IG1lbW9yeSBzYWZldHkgdmVyaWZpY2F0aW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHBlci1jYWxsIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gd2l0aCBhIHNpbmdsZSBzdGF0aWMgZ2xvYmFsIGJ1ZmZlciAodHJhbXBvbGluZV9zaXplX2ltYWdlKSBmb3IgY2FsY3VsYXRpbmcgQlBGIHRyYW1wb2xpbmUgc2l6ZSBpbiBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGluIHRoZSB4ODYgQlBGIEpJVCBzdWJzeXN0ZW0gd2hlbiB1cGRhdGluZyBCUEYgdHJhbXBvbGluZXMgb3IgcHJlcGFyaW5nIEJQRiBzdHJ1Y3Rfb3BzLiBGdXp6aW5nIGNhbiB2ZXJpZnkgY29ycmVjdG5lc3MsIG1lbW9yeSBzYWZldHksIGFuZCBjb25jdXJyZW5jeSBiZWhhdmlvciBhY3Jvc3MgQlBGIHRyYW1wb2xpbmUgdXBkYXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzA6MzguOTc1MDI5NTg1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzYzNjA5MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5NzhhZGJjODBlNWNhNjFiM2M3ZjE3MDQ4NzVlMGRmZmE4YzliOTNjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMjA6MzA6MzggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuaW5kZXggYmJhMzUxOTQ0MjAyYy4uMTNlZjBkNTNjYTI5NiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG4rKysgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG5AQCAtOSw2ICs5LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbHRlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfdmxhbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmX3ZlcmlmaWVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1vcnkuaFxcdTAwM2VcXG5AQCAtMzUsNiArMzYsMTUgQEAgdm9pZCBfX2FzYW5fc3RvcmU4KHZvaWQgKnApO1xcbiBcXG4gc3RhdGljIGJvb2wgYWxsX2NhbGxlZV9yZWdzX3VzZWRbNF0gPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZX07XFxuIFxcbitzdGF0aWMgdm9pZCAqdHJhbXBvbGluZV9zaXplX2ltYWdlO1xcbitcXG4rc3RhdGljIGludCBfX2luaXQgaW5pdF90cmFtcG9saW5lX3NpemVfaW1hZ2Uodm9pZClcXG4re1xcbitcXHR0cmFtcG9saW5lX3NpemVfaW1hZ2UgPSBleGVjbWVtX2FsbG9jKEVYRUNNRU1fTU9EVUxFX0RBVEEsIFBBR0VfU0laRSk7XFxuK1xcdHJldHVybiB0cmFtcG9saW5lX3NpemVfaW1hZ2UgPyAwIDogLUVOT01FTTtcXG4rfVxcbitsYXRlX2luaXRjYWxsKGluaXRfdHJhbXBvbGluZV9zaXplX2ltYWdlKTtcXG4rXFxuIHN0YXRpYyB1OCAqZW1pdF9jb2RlKHU4ICpwdHIsIHUzMiBieXRlcywgdW5zaWduZWQgaW50IGxlbilcXG4ge1xcbiBcXHRpZiAobGVuID09IDEpXFxuQEAgLTQwMDAsMjQgKzQwMTAsMTQgQEAgaW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlIGltO1xcbi1cXHR2b2lkICppbWFnZTtcXG4tXFx0aW50IHJldDtcXG4gXFxuLVxcdC8qIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBmb3IgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKS5cXG4tXFx0ICpcXG4tXFx0ICogV2UgY2Fubm90IHVzZSBrdm1hbGxvYyBoZXJlLCBiZWNhdXNlIHdlIG5lZWQgaW1hZ2UgdG8gYmUgaW5cXG4tXFx0ICogbW9kdWxlIG1lbW9yeSByYW5nZS5cXG4tXFx0ICogU2luY2UgaXQgbXVzdCBiZSB3cml0YWJsZSB1c2UgZXhlY21lbV9hbGxvYyhFWEVDTUVNX01PRFVMRV9EQVRBKVxcbi1cXHQgKiB0aGF0IHJldHVybnMgd3JpdGFibGUgbWVtb3J5IGluIHRoZSBtb2R1bGUgYWRkcmVzcyBzcGFjZS5cXG4tXFx0ICovXFxuLVxcdGltYWdlID0gZXhlY21lbV9hbGxvYyhFWEVDTUVNX01PRFVMRV9EQVRBLCBQQUdFX1NJWkUpO1xcbi1cXHRpZiAoIWltYWdlKVxcbitcXHRpZiAoIXRyYW1wb2xpbmVfc2l6ZV9pbWFnZSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcXHUwMDI2aW0sIGltYWdlLCBpbWFnZSArIFBBR0VfU0laRSwgaW1hZ2UsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBtLCBmbGFncywgdG5vZGVzLCBmdW5jX2FkZHIpO1xcbi1cXHRleGVjbWVtX2ZyZWUoaW1hZ2UpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoXFx1MDAyNmltLCB0cmFtcG9saW5lX3NpemVfaW1hZ2UsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgdHJhbXBvbGluZV9zaXplX2ltYWdlICsgUEFHRV9TSVpFLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSwgbSwgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgdG5vZGVzLCBmdW5jX2FkZHIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGVtaXRfYnBmX2Rpc3BhdGNoZXIodTggKipwcHJvZywgaW50IGEsIGludCBiLCBzNjQgKnByb2dzLCB1OCAqaW1hZ2UsIHU4ICpidWYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMwOjM5LjQxMjI4MDA4OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzI5OTk1NzgxMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX2JwZl90cmFtcG9saW5lX3NpemVcIixcbiAgICBcIl9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV91cGRhdGVcIixcbiAgICBcImJwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHBlci1jYWxsIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gd2l0aCBhIHNpbmdsZSBzdGF0aWMgZ2xvYmFsIGJ1ZmZlciAodHJhbXBvbGluZV9zaXplX2ltYWdlKSBmb3IgY2FsY3VsYXRpbmcgQlBGIHRyYW1wb2xpbmUgc2l6ZSBpbiBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGluIHRoZSB4ODYgQlBGIEpJVCBzdWJzeXN0ZW0gd2hlbiB1cGRhdGluZyBCUEYgdHJhbXBvbGluZXMgb3IgcHJlcGFyaW5nIEJQRiBzdHJ1Y3Rfb3BzLiBGdXp6aW5nIGNhbiB2ZXJpZnkgY29ycmVjdG5lc3MsIG1lbW9yeSBzYWZldHksIGFuZCBjb25jdXJyZW5jeSBiZWhhdmlvciBhY3Jvc3MgQlBGIHRyYW1wb2xpbmUgdXBkYXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NzhhZGJjODBlNWNhNjFiM2M3ZjE3MDQ4NzVlMGRmZmE4YzliOTNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAyMDozMDozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggYmJhMzUxOTQ0MjAyYy4uMTNlZjBkNTNjYTI5NiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtOSw2ICs5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWx0ZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl92ZXJpZmllci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5LmhcdTAwM2VcbkBAIC0zNSw2ICszNiwxNSBAQCB2b2lkIF9fYXNhbl9zdG9yZTgodm9pZCAqcCk7XG4gXG4gc3RhdGljIGJvb2wgYWxsX2NhbGxlZV9yZWdzX3VzZWRbNF0gPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZX07XG4gXG4rc3RhdGljIHZvaWQgKnRyYW1wb2xpbmVfc2l6ZV9pbWFnZTtcbitcbitzdGF0aWMgaW50IF9faW5pdCBpbml0X3RyYW1wb2xpbmVfc2l6ZV9pbWFnZSh2b2lkKVxuK3tcbitcdHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSA9IGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9NT0RVTEVfREFUQSwgUEFHRV9TSVpFKTtcbitcdHJldHVybiB0cmFtcG9saW5lX3NpemVfaW1hZ2UgPyAwIDogLUVOT01FTTtcbit9XG4rbGF0ZV9pbml0Y2FsbChpbml0X3RyYW1wb2xpbmVfc2l6ZV9pbWFnZSk7XG4rXG4gc3RhdGljIHU4ICplbWl0X2NvZGUodTggKnB0ciwgdTMyIGJ5dGVzLCB1bnNpZ25lZCBpbnQgbGVuKVxuIHtcbiBcdGlmIChsZW4gPT0gMSlcbkBAIC00MDAwLDI0ICs0MDEwLDE0IEBAIGludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcbiB7XG4gXHRzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlIGltO1xuLVx0dm9pZCAqaW1hZ2U7XG4tXHRpbnQgcmV0O1xuIFxuLVx0LyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgpLlxuLVx0ICpcbi1cdCAqIFdlIGNhbm5vdCB1c2Uga3ZtYWxsb2MgaGVyZSwgYmVjYXVzZSB3ZSBuZWVkIGltYWdlIHRvIGJlIGluXG4tXHQgKiBtb2R1bGUgbWVtb3J5IHJhbmdlLlxuLVx0ICogU2luY2UgaXQgbXVzdCBiZSB3cml0YWJsZSB1c2UgZXhlY21lbV9hbGxvYyhFWEVDTUVNX01PRFVMRV9EQVRBKVxuLVx0ICogdGhhdCByZXR1cm5zIHdyaXRhYmxlIG1lbW9yeSBpbiB0aGUgbW9kdWxlIGFkZHJlc3Mgc3BhY2UuXG4tXHQgKi9cbi1cdGltYWdlID0gZXhlY21lbV9hbGxvYyhFWEVDTUVNX01PRFVMRV9EQVRBLCBQQUdFX1NJWkUpO1xuLVx0aWYgKCFpbWFnZSlcbitcdGlmICghdHJhbXBvbGluZV9zaXplX2ltYWdlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKFx1MDAyNmltLCBpbWFnZSwgaW1hZ2UgKyBQQUdFX1NJWkUsIGltYWdlLFxuLVx0XHRcdFx0XHQgICAgbSwgZmxhZ3MsIHRub2RlcywgZnVuY19hZGRyKTtcbi1cdGV4ZWNtZW1fZnJlZShpbWFnZSk7XG4tXHRyZXR1cm4gcmV0O1xuK1x0cmV0dXJuIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKFx1MDAyNmltLCB0cmFtcG9saW5lX3NpemVfaW1hZ2UsXG4rXHRcdFx0XHRcdCAgICAgdHJhbXBvbGluZV9zaXplX2ltYWdlICsgUEFHRV9TSVpFLFxuK1x0XHRcdFx0XHQgICAgIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSwgbSwgZmxhZ3MsXG4rXHRcdFx0XHRcdCAgICAgdG5vZGVzLCBmdW5jX2FkZHIpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGVtaXRfYnBmX2Rpc3BhdGNoZXIodTggKipwcHJvZywgaW50IGEsIGludCBiLCBzNjQgKnByb2dzLCB1OCAqaW1hZ2UsIHU4ICpidWYpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDozMDozOS40MTIyODI5MThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzU2NDI0MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEpJVCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkaXNzZWN0IHRoZSBkaWZmIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcy4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoaXMgbG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb24gZm9yIHRoZSBCUEYgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3Mgb24gYW1kNjQgYXJjaGl0ZWN0dXJlLiBUaGUgbWFpbiB0aHJ1c3QgaXMgdGhlIG1vZGlmaWNhdGlvbiBvZiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC5cblxuU3BlY2lmaWNhbGx5LCBpdCdzIGFkZGluZyBhIHN0YXRpYyBidWZmZXIsIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgLCB3aGljaCBpcyBhbGxvY2F0ZWQgZHVyaW5nIGJvb3QgdmlhIGBpbml0X3RyYW1wb2xpbmVfc2l6ZV9pbWFnZWAgdXNpbmcgYGV4ZWNtZW1fYWxsb2NgLiBUaGlzIGlzIGluaXRpYWxpemVkIGFzIGEgYGxhdGVfaW5pdGNhbGxgLiBJdCBhcHBlYXJzIHRoaXMgc2luZ2xlIGJ1ZmZlciB3aWxsIHRoZW4gYmUgcmV1c2VkLiBQcmV2aW91c2x5LCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCB3YXMgZHluYW1pY2FsbHkgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBtZW1vcnkgdXNpbmcgYGV4ZWNtZW1fYWxsb2NgIGFuZCBgZXhlY21lbV9mcmVlYCBvbiBlYWNoIGNhbGwgdG8gYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZSgpYC4gU28sIGluc3RlYWQgb2YgYWxsb2NhdGluZyBhbmQgZGVhbGxvY2F0aW5nIG1lbW9yeSBvbiB0aGUgZmx5LCB3ZSdyZSBub3cgcmV1c2luZyBhIHByZS1hbGxvY2F0ZWQgYnVmZmVyLiBUaGlzIGNhbiBiZSBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIHdpbiBieSBhdm9pZGluZyB0aG9zZSByZXBlYXRlZCBhbGxvY2F0aW9ucy5cblxuTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQgYXJvdW5kIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgb2Z0ZW4gaXQncyBjYWxsZWQsIHdoYXQgbG9ja3MgYXJlIGludm9sdmVkLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2Ugd2lsbCBiZS4gSSdsbCBwcm9iYWJseSB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgIGFuZCBpdHMgY2FsbGVycywgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyBvciByYWNlIGNvbmRpdGlvbnMuIEkgYWxzbyB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgY2hhbmdlcyB0byB0aGUgdHJhbXBvbGluZSBzaXplLCBmb3IgZXhhbXBsZSwgdG8gZW5zdXJlIGl0IGRvZXMgbm90IG92ZXJydW4gdGhlIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGJ1ZmZlci4gVGhpcyBhbGwgbG9va3MgcmVsYXRpdmVseSBzYWZlLCBidXQgYmVzdCBwcmFjdGljZSBpcyB0byBjb25maXJtIHRoYXQgYW55IGFzc3VtcHRpb25zIHJlZ2FyZGluZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgY29uY3VycmVuY3kgc3RpbGwgaG9sZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ1MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMwOjQ0Ljc2ODcxMDI4OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQxMzUwOTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yOTg4PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19mc2Vzc2lvbih2b2lkKVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjk5Mi1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoyOTkzOmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjk5NC1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz0yMTM4PWludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJvX2ltYWdlLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMTc1LVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MjE3NjppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjE3Ny1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYz04MTI9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1hZ2UsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTExOTEtXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzoxMTkyOmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMTkzLVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEwMzA9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTMzNi1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzMzc6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMzgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9MjY5OD1zdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0zMDE1LVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MzAxNjppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMzAxNy1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqb3JpZ19jYWxsKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM5ODA9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqaW1hZ2UsIHZvaWQgKmltYWdlX2VuZCxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDA4LVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0MDA5OmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMTAtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MTMxNz1pbnQgX19tdXN0X2NoZWNrIGFyY2hfcHJvdGVjdF9icGZfdHJhbXBvbGluZSh2b2lkICppbWFnZSwgdW5zaWduZWQgaW50IHNpemUpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6MTMxODppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbmluY2x1ZGUvbGludXgvYnBmLmgtMTMxOS1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz02Mzc9aW50IGJwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjUzLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2NTQ6XFx0c2l6ZSA9IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShtb2RlbCwgZmxhZ3MsIHRub2Rlcywgc3R1Yl9mdW5jKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjU1LVxcdGlmIChzaXplIFxcdTAwM2M9IDApXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz03MTA9c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc2MS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3NjI6XFx0c2l6ZSA9IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShcXHUwMDI2dHItXFx1MDAzZWZ1bmMubW9kZWwsIHRyLVxcdTAwM2VmbGFncyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NjMtXFx0XFx0XFx0XFx0XFx0dG5vZGVzLCB0ci1cXHUwMDNlZnVuYy5hZGRyKTtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1MDg9aW50IF9fd2VhayBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUxMy1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTE0OmludCBfX3dlYWsgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MTUtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDozMDo0Ni41MTAwNjY0MDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDk0NTE2ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgeDg2IEJQRiBKSVQgVHJhbXBvbGluZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHNwZWNpZmljcywgcGFydGljdWxhcmx5IHRoZSB0cmFtcG9saW5lIG1lY2hhbmlzbS4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCBhbmQgZm9jdXMgb24gaG93IHRoZSB0cmFtcG9saW5lIGlzIHNpemVkIGFuZCBwcmVwYXJlZC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBhbmQgaG93IGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgd29ya3MuIFVuZGVyc3RhbmRpbmcgdGhlc2UgdHdvIHBpZWNlcyBpcyBrZXkgdG8gZ3Jhc3BpbmcgaG93IHRoZSBKSVQgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJ3MgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZlYXR1cmVzIGFuZCB3aGF0IG9wdGltaXphdGlvbnMgYXJlIHBvc3NpYmxlLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyByaXBlIGZvciBpbXByb3ZlbWVudCByZWxhdGVkIHRvIHRoZSB0cmFtcG9saW5lJ3Mgb3ZlcmhlYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2OTEsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDozMDo0OC42MDQ1ODU2NTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTkyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM5ODA6XFx0aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqaW1hZ2UsIHZvaWQgKmltYWdlX2VuZCxcXG4zOTgxOlxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbjM5ODI6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLFxcbjM5ODM6XFx0XFx0XFx0XFx0XFx0dm9pZCAqZnVuY19hZGRyKVxcbjM5ODQ6XFx0e1xcbjM5ODU6XFx0XFx0dm9pZCAqcndfaW1hZ2UsICp0bXA7XFxuMzk4NjpcXHRcXHRpbnQgcmV0O1xcbjM5ODc6XFx0XFx0dTMyIHNpemUgPSBpbWFnZV9lbmQgLSBpbWFnZTtcXG4zOTg4OlxcdFxcbjM5ODk6XFx0XFx0LyogcndfaW1hZ2UgZG9lc24ndCBuZWVkIHRvIGJlIGluIG1vZHVsZSBtZW1vcnkgcmFuZ2UsIHNvIHdlIGNhblxcbjM5OTA6XFx0XFx0ICogdXNlIGt2bWFsbG9jLlxcbjM5OTE6XFx0XFx0ICovXFxuMzk5MjpcXHRcXHRyd19pbWFnZSA9IGt2bWFsbG9jKHNpemUsIEdGUF9LRVJORUwpO1xcbjM5OTM6XFx0XFx0aWYgKCFyd19pbWFnZSlcXG4zOTk0OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjM5OTU6XFx0XFxuMzk5NjpcXHRcXHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShpbSwgcndfaW1hZ2UsIHJ3X2ltYWdlICsgc2l6ZSwgaW1hZ2UsIG0sXFxuMzk5NzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgZmxhZ3MsIHRub2RlcywgZnVuY19hZGRyKTtcXG4zOTk4OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjM5OTk6XFx0XFx0XFx0Z290byBvdXQ7XFxuNDAwMDpcXHRcXG40MDAxOlxcdFxcdHRtcCA9IGJwZl9hcmNoX3RleHRfY29weShpbWFnZSwgcndfaW1hZ2UsIHNpemUpO1xcbjQwMDI6XFx0XFx0aWYgKElTX0VSUih0bXApKVxcbjQwMDM6XFx0XFx0XFx0cmV0ID0gUFRSX0VSUih0bXApO1xcbjQwMDQ6XFx0b3V0OlxcbjQwMDU6XFx0XFx0a3ZmcmVlKHJ3X2ltYWdlKTtcXG40MDA2OlxcdFxcdHJldHVybiByZXQ7XFxuNDAwNzpcXHR9XFxuNDAwODpcXHRcXG40MDA5OlxcdGludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuNDAxMDpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxcbjQwMTE6XFx0e1xcbjQwMTI6XFx0XFx0c3RydWN0IGJwZl90cmFtcF9pbWFnZSBpbTtcXG40MDEzOlxcdFxcbjQwMTQ6XFx0XFx0aWYgKCF0cmFtcG9saW5lX3NpemVfaW1hZ2UpXFxuNDAxNTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG40MDE2OlxcdFxcbjQwMTc6XFx0XFx0cmV0dXJuIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKFxcdTAwMjZpbSwgdHJhbXBvbGluZV9zaXplX2ltYWdlLFxcbjQwMTg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0cmFtcG9saW5lX3NpemVfaW1hZ2UgKyBQQUdFX1NJWkUsXFxuNDAxOTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSwgbSwgZmxhZ3MsXFxuNDAyMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHRub2RlcywgZnVuY19hZGRyKTtcXG40MDIxOlxcdH1cXG40MDIyOlxcdFxcbjQwMjM6XFx0c3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLCB1OCAqYnVmKVxcbjQwMjQ6XFx0e1xcbjQwMjU6XFx0XFx0dTggKmpnX3JlbG9jLCAqcHJvZyA9ICpwcHJvZztcXG40MDI2OlxcdFxcdGludCBwaXZvdCwgZXJyLCBqZ19ieXRlcyA9IDE7XFxuNDAyNzpcXHRcXHRzNjQgamdfb2Zmc2V0O1xcbjQwMjg6XFx0XFxuNDAyOTpcXHRcXHRpZiAoYSA9PSBiKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMwOjQ4LjYwNDgwNjYxMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MDM0OTg1OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb25zIGluIEJQRiBUcmFtcG9saW5lIFByZXBhcmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzY3J1dGluaXplIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgYW5kLCBzcGVjaWZpY2FsbHksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYC4gSSBuZWVkIHRvIGFzY2VydGFpbiB3aGV0aGVyIGNvbmN1cnJlbnQgY2FsbHMgdG8gYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgYXJlIGV2ZW4gcG9zc2libGUsIGFuZCBpZiB0aGV5IGFyZSwgd2hldGhlciBhbnkgYXBwcm9wcmlhdGUgbG9ja2luZyBtZWNoYW5pc21zIGFyZSBpbiBwbGFjZSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucy5cblxuV2FpdCBhIG1pbnV0ZSwgc29tZXRoaW5nJ3MgcGluZ2luZyBteSByYWRhci4gVGhlIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgLi4uIHRoYXQncyBhICpzaW5nbGUqLCBzdGF0aWMgYnVmZmVyLCBhbmQgaXRzIHNpemUgaXMsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgYSBQQUdFX1NJWkUuIFJpZ2h0LiBUaGF0J3Mgd2hlcmUgdGhlIHByb2JsZW0gY291bGQgYmUuXG5cblNvLCAqd2hlbiogYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgaXMgaW52b2tlZCwgYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpcyAqd3JpdGluZyogaW50byBgdHJhbXBvbGluZV9zaXplX2ltYWdlYC4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHNldHVwIHRoYXQgc2NyZWFtcyByYWNlIGNvbmRpdGlvbiBwb3RlbnRpYWwuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIHZlcmlmeSBob3cgdGhlIGJ1ZmZlciBpcyBoYW5kbGVkIGFuZCBpZiBjb25jdXJyZW50IGFjY2Vzc2VzIGFyZSBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzgwLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzA6NTEuMjA4MzA2Njk0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDg3MjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzU1NT1zdGF0aWMgaW50IGludm9rZV9icGZfbW9kX3JldChjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHByb2csXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY1Ni0gKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzY1NzpzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbWFnZSxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY1OC1cXHRcXHRcXHRcXHRcXHQgdm9pZCAqcndfaW1hZ2VfZW5kLCB2b2lkICppbWFnZSxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zOTgwPWludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmltYWdlLCB2b2lkICppbWFnZV9lbmQsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzk5NS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mzk5NjpcXHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShpbSwgcndfaW1hZ2UsIHJ3X2ltYWdlICsgc2l6ZSwgaW1hZ2UsIG0sXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM5OTctXFx0XFx0XFx0XFx0XFx0ICAgIGZsYWdzLCB0bm9kZXMsIGZ1bmNfYWRkcik7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9NDAwOT1pbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMTYtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQwMTc6XFx0cmV0dXJuIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKFxcdTAwMjZpbSwgdHJhbXBvbGluZV9zaXplX2ltYWdlLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDE4LVxcdFxcdFxcdFxcdFxcdCAgICAgdHJhbXBvbGluZV9zaXplX2ltYWdlICsgUEFHRV9TSVpFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDozMDo1MS4yNTYzOTgxMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MTg2MTU4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBVc2FnZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAuIE15IGZvY3VzIGlzIG9uIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKnVzZWQqLiBJIHNlZSB0aGF0IGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGFuZCBgYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lYCBib3RoIGNhbGwgaXQuIFRoYXQgdGVsbHMgbWUgdGhhdCB0aGlzIHNpemUgY2FsY3VsYXRpb24gaXMgY3J1Y2lhbCBmb3IgdGhlc2UgdHJhbXBvbGluZS1yZWxhdGVkIG9wZXJhdGlvbnMuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpjb250ZXh0KiBvZiB0aGVzZSBjYWxscy4gVGltZSB0byBjaGVjayB0aGUgc291cmNlLiBJJ20gZ29pbmcgdG8gbG9vayBzcGVjaWZpY2FsbHkgaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCBhbmQgYGtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY2AgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHV0aWxpemluZyBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGluc2lnaHRmdWwgZGVwZW5kZW5jaWVzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDozMDo1My4wNzUwMTYyNjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDM0MTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NjM3PWludCBicGZfc3RydWN0X29wc19wcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLFxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY1My1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjU0OlxcdHNpemUgPSBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUobW9kZWwsIGZsYWdzLCB0bm9kZXMsIHN0dWJfZnVuYyk7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY1NS1cXHRpZiAoc2l6ZSBcXHUwMDNjPSAwKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NzEwPXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NjEtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzYyOlxcdHNpemUgPSBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoXFx1MDAyNnRyLVxcdTAwM2VmdW5jLm1vZGVsLCB0ci1cXHUwMDNlZmxhZ3MsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzYzLVxcdFxcdFxcdFxcdFxcdHRub2RlcywgdHItXFx1MDAzZWZ1bmMuYWRkcik7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTA4PWludCBfX3dlYWsgYXJjaF9wcm90ZWN0X2JwZl90cmFtcG9saW5lKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MTMtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTUxNDppbnQgX193ZWFrIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTE1LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzA6NTMuMTIzMDU3NjYyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NzAzMzA4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFRyYW1wb2xpbmUgYW5kIEpJVCBDb21waWxhdGlvbiBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzOiBpcyB0aGlzIEJQRiB0cmFtcG9saW5lIGFuZCBKSVQgY29tcGlsYXRpb24gZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgd2l0aGluIGEgUUVNVS9hbWQ2NCBlbnZpcm9ubWVudD8gWWVzLCBCUEYgaXMgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwsIGFuZCBuYXR1cmFsbHksIGl0IGV4ZWN1dGVzIG9uIGFtZDY0IHdpdGhpbiBRRU1VLiBUaGF0J3MgYSBnaXZlbi4gTm93LCBsZXQncyBkaWcgaW50byBTZWN0aW9uIDMgb2YgdGhlIHJlbGV2YW50IGd1aWRlbGluZXMuXG5cblRoZSBndWlkZWxpbmVzIHN0YXRlIHdlIHNob3VsZCBjb25zaWRlciBwYXRjaGVzIFwiV29ydGhGdXp6aW5nXCIgaWYgdGhleSB0b3VjaCByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBhbmQgd2UgaGF2ZSBhIGZldyBrZXkgYXJlYXMgdG8gZm9jdXMgb246IGNvcmUgc3Vic3lzdGVtcyBhbmQgcmVmYWN0b3JpbmdzL2NvZGUgY2xlYW51cHMuIFRoZSBjcnVjaWFsIHBpZWNlIGlzIHRoYXQgdGhpcyBwYXRjaCAqZG9lcyogbW9kaWZ5IEJQRiBKSVQgY29kZSBmb3IgeDg2IHNwZWNpZmljYWxseSB3aXRoaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoaXMgY29kZSBnZXRzIGV4ZWN1dGVkIHdoZW5ldmVyIEJQRiB0cmFtcG9saW5lcyBhcmUgY3JlYXRlZCBvciBzaXplZCwgd2hpY2ggaXMgY29tbW9uIGR1cmluZyBmZXhpdCwgZmVudHJ5LCBzdHJ1Y3Rfb3BzLCBhbmQgb3RoZXIgc2ltaWxhciBvcGVyYXRpb25zLlxuXG5GdXJ0aGVybW9yZSwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCB0aGV5IGFyZSBzaGFyaW5nIHRoZSBzdGF0aWMgZ2xvYmFsIGJ1ZmZlciBgdHJhbXBvbGluZV9zaXplX2ltYWdlYCBhY3Jvc3MgYWxsIGNhbGxlcnMgb2YgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgd2l0aG91dCBwZXItY2FsbCBhbGxvY2F0aW9uLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGludGVyZXN0aW5nIHJhY2UgY29uZGl0aW9ucy4gV2hpbGUgdGhleSBtYXkgYmUgc2VyaWFsaXplZCwgdGhpcyBjb3VsZCBzdGlsbCBoYXZlIGFuIGltcGFjdCBvbiBob3cgdGhlIEJQRiB0cmFtcG9saW5lcyBhcmUgY3JlYXRlZC4gU2hhcmluZyBhIGJ1ZmZlciBsaWtlIHRoYXQgYW5kIG1lc3Npbmcgd2l0aCBob3cgbWVtb3J5IGlzIHVzZWQgd2l0aGluIEJQRiBpcyBhbHdheXMgd29ydGggYSBzZWNvbmQgbG9vay5cblxuRmluYWxseSwganVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIEtjb25maWcgb3B0aW9ucyByZXF1aXJlZCBmb3IgdGhpcyBmaWxlIGFuZCBjb2RlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBhcmNoL3g4Ni9uZXQvTWFrZWZpbGVgIG9yIHdoYXRldmVyIGJ1aWxkIGZpbGUgYGJwZl9qaXRfY29tcC5jYCBpcyBjb21waWxlZCBieSwgdG8gc2VlIGhvdyB0byBlbmFibGUgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQxMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDozMDo1Ni43OTMzOTA4NzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Njk5MjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9qaXRfY29tcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9NYWtlZmlsZT02PWlmZXEgKCQoQ09ORklHX1g4Nl8zMikseSlcXG5hcmNoL3g4Ni9uZXQvTWFrZWZpbGU6NzogICAgICAgIG9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvbXAzMi5vXFxuYXJjaC94ODYvbmV0L01ha2VmaWxlLTgtZWxzZVxcbmFyY2gveDg2L25ldC9NYWtlZmlsZTo5OiAgICAgICAgb2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29tcC5vIGJwZl90aW1lZF9tYXlfZ290by5vXFxuYXJjaC94ODYvbmV0L01ha2VmaWxlLTEwLWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMwOjU2LjgzODA5NDk2OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTU4MTYwNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgQlBGIHNpdHVhdGlvbi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBlbmFibGVkLiBMZXQncyBzdGFydCB3aXRoIHRoZSBiYXNpY3Mg4oCTIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGBLY29uZmlnYCBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBzdGF0dXMgb2YgYENPTkZJR19CUEZfSklUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAuIEtub3dpbmcgdGhlIHN0YXRlIG9mIHRob3NlIHR3byBvcHRpb25zIGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuIEl0J2xsIHRlbGwgbWUgaWYgdGhlIEpJVCBjb21waWxlciBhbmQgdGhlIHN5c3RlbSBjYWxsIGludGVyZmFjZSBhcmUgZXZlbiBhdmFpbGFibGUuIFdpdGhvdXQgdGhvc2UsIEknbSB3YXN0aW5nIG15IHRpbWUgbG9va2luZyBlbHNld2hlcmUuIFRoaXMgaXMgdGhlIGZvdW5kYXRpb247IGZyb20gaGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucy4gSXQncyBhIHF1aWNrIGNoZWNrIHRoYXQgd2lsbCBzYXZlIG1lIHRpbWUgZG93biB0aGUgcm9hZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI5NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMwOjU4Ljc5NjI1ODUxOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyNjMxMzQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0pJVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MzE9Y29uZmlnIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNDUtXFxua2VybmVsL2JwZi9LY29uZmlnOjQ2OmNvbmZpZyBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTYxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo2Mjpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNjMtXFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNzItXFxua2VybmVsL2JwZi9LY29uZmlnOjczOmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNzQtXFx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnPTk2PWNvbmZpZyBCUEZfTFNNXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctMTA3LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoxMDg6Y29uZmlnIEJQRl9KSVRfS0FTQU5cXG5rZXJuZWwvYnBmL0tjb25maWctMTA5LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzE6MDAuNTIyNTc3MzM0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMDY2MDEwMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIEJQRiBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gTGV0J3MgemVybyBpbiBvbiBga2VybmVsL2JwZi9LY29uZmlnYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIGBCUEZfSklUYCBhbmQgYEJQRl9TWVNDQUxMYCwgcGFydGljdWxhcmx5IGhvdyB0aGV5J3JlIGV4cG9zZWQgYW5kIGNvbmRpdGlvbmVkLiBNeSBmb2N1cyBpcyBvbiBlbnN1cmluZyB0aGUgcmlnaHQgZmVhdHVyZSBmbGFncyBhcmUgZW5hYmxlZCB0byBzdXBwb3J0IHRoZSBkZXNpcmVkIEJQRiB1c2UgY2FzZXMsIGFuZCBob3cgdGhlIHN5c2NhbGwgaW50ZXJmYWNlIGlzIGFmZmVjdGVkIGJ5IEpJVCBjb21waWxhdGlvbi4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBoYXZlIGJlZW4gYW55IHJlY2VudCBjaGFuZ2VzIHRoYXQgY291bGQgaW1wYWN0IHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5IHBvc3R1cmUuIEknbGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHN0YXRlcywgYW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBzcGVjaWZpYyBCUEYgcHJvZ3JhbXMgSSdtIHdvcmtpbmcgd2l0aC4gVGhpcyB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzIGluIHRoZSBjdXJyZW50IHByb2plY3QsIGFzIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBzeXN0ZW0gSSBhbSBkZXZlbG9waW5nIHdvcmtzIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODIyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzE6MDIuODI5MTgwMjcxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRcXG4gIDMxOlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMzI6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMzM6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzQ6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDM2OlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDM3OlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzODpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzk6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICA0MDpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgNDE6XFx0XFx0ZGVmYXVsdCBuXFxuICA0MjpcXHRcXHRoZWxwXFxuICA0MzpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQ0OlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdGNvbmZpZyBCUEZfSklUXFxuICA0NzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbiAgNTA6XFx0XFx0c2VsZWN0IEVYRUNNRU1cXG4gIDUxOlxcdFxcdGhlbHBcXG4gIDUyOlxcdFxcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxcbiAgNTM6XFx0XFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcXG4gIDU0OlxcdFxcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxcbiAgNTU6XFx0XFx0ICBwcm9ncmFtcy5cXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcXG4gIDU4OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXFxuICA1OTpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcXG4gIDYwOlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxcbiAgNjE6XFx0XFxuICA2MjpcXHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG4gIDYzOlxcdFxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbiAgNjQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBIQVZFX0VCUEZfSklUIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVRcXG4gIDY1OlxcdFxcdGhlbHBcXG4gIDY2OlxcdFxcdCAgRW5hYmxlcyBCUEYgSklUIGFuZCByZW1vdmVzIEJQRiBpbnRlcnByZXRlciB0byBhdm9pZCBzcGVjdWxhdGl2ZVxcbiAgNjc6XFx0XFx0ICBleGVjdXRpb24gb2YgQlBGIGluc3RydWN0aW9ucyBieSB0aGUgaW50ZXJwcmV0ZXIuXFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdCAgV2hlbiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04gaXMgZW5hYmxlZCwgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMxOjAyLjgyOTI0NDI1MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjUzMjgwOTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIGZvciBCUEYgRXZlbnQgRGVwZW5kZW5jaWVzIGluIFRyYW1wb2xpbmVzKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRyYW1wb2xpbmVzIGFuZCBob3cgdGhleSdyZSBpbXBsZW1lbnRlZC4gVGhlIHRhc2sgYXQgaGFuZCBpbnZvbHZlcyBmaWd1cmluZyBvdXQgdGhlIGRlcGVuZGVuY2llcyBvZiBvdXIgdHJhbXBvbGluZXMsIGluIHRoaXMgY2FzZSBsb29raW5nIGF0IHdoZXRoZXIgd2UgbmVlZCBgQlBGX0VWRU5UU2Agb3IgYW55IG90aGVyIHJlbGV2YW50IG1lY2hhbmlzbXMgZm9yIHRoZW0gdG8gd29yayBwcm9wZXJseS4gR2l2ZW4gdGhhdCB0cmFtcG9saW5lcyBpbnZvbHZlIHJlZGlyZWN0aW5nIGV4ZWN1dGlvbiBmbG93LCBhbmQgd2UncmUgZGVhbGluZyB3aXRoIEJQRiwgbXkgaW5pdGlhbCBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgbG93LWxldmVsIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIFRvIHVuZGVyc3RhbmQgdGhpcyBwcm9wZXJseSwgSSdtIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCB0byBzZWUgaG93IHRoZSBjb3JlIHRyYW1wb2xpbmUgZnVuY3Rpb25hbGl0eSBpcyBoYW5kbGVkLiBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIGFueSBpbnRlcmFjdGlvbiBiZXR3ZWVuIG9wZXJhdGlvbnMgdXNlZCB0byBkZWZpbmUgdGhlc2UgaW5zdHJ1Y3Rpb25zLiBUaGVyZWZvcmUsIGBicGZfc3RydWN0X29wcy5jYCBpcyB0aGUgbmV4dCBwbGFjZSBJIG5lZWQgdG8gcmV2aWV3LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIGV2ZW50IGhvb2tzIG9yIHNwZWNpZmljIHN0cnVjdCBvcGVyYXRpb25zIGFyZSBwYXJ0IG9mIHRoaXMgcHJvY2VzcyB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgbWlzc2luZyBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBoaW5kZXIgb3VyIGdvYWwuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGdldHRpbmcgdGhlIGFyY2hpdGVjdHVyZSByaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2OTMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMxOjA1LjQ4MjUyNzY1MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI3MTAzODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJhbXBvbGluZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkaXNhc20ubyBtcHJvZy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gdHJhbXBvbGluZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz01Nz1zdGF0aWMgdm9pZCB0cmFtcG9saW5lX3VubG9jayhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNjEtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NjI6c3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNjMtXFx0aW50ICgqcmVnaXN0ZXJfZmVudHJ5KShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqZGF0YSk7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz03MD1zdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4LFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcxOlxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzICpvcHMsIHZvaWQgKmRhdGEpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHRyYW1wb2xpbmVfb3BzO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTczLVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTg9c3RhdGljIGludCBicGZfdHJhbXBfZnRyYWNlX29wc19mdW5jKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGxvbmcgaXAsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTctXFx0XFx0XFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHRyLCBmYWxzZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU5LVxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY0LVxcdFxcdFxcdHJldCA9IGJwZl90cmFtcG9saW5lX3VwZGF0ZSh0ciwgZmFsc2UgLyogbG9ja19kaXJlY3RfbXV0ZXggKi8sXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2Ni1cXHRcXHRicmVhaztcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQ3Mz1zdGF0aWMgaW50IHJlZ2lzdGVyX2ZlbnRyeShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTUwMC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo1MDE6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9vcHMgPSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNTAyLVxcdC5yZWdpc3Rlcl9mZW50cnkgICA9IHJlZ2lzdGVyX2ZlbnRyeSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTcxMD1zdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4LFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcxMTpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyAqb3BzLCB2b2lkICpkYXRhKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcxMi17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05NDI9c3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NDQtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5NDU6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyAqb3BzLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk0Ni1cXHRcXHRcXHRcXHQgICAgICB2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTkwPWludCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTk2LVxcdHRyYW1wb2xpbmVfbG9jayh0cik7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTk3OlxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKG5vZGUsIHRyLCB0Z3RfcHJvZywgXFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05OTgtXFx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTAwMj1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAwNC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKnRndF9wcm9nLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwMDU6XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyAqb3BzLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMDYtXFx0XFx0XFx0XFx0XFx0dm9pZCAqZGF0YSlcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTEwMjc9aW50IGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMzMtXFx0dHJhbXBvbGluZV9sb2NrKHRyKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDM0OlxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2cobm9kZSwgdHIsIHRndF9wcm9nLCBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMzUtXFx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTEyMz1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTY1LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjExNjY6XFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXFx1MDAyNnNoaW1fbGluay1cXHUwMDNlbGluay5ub2RlLCB0ciwgTlVMTCwgXFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTY3LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNjA2PXN0YXRpYyBpbnQgbW9kaWZ5X2ZlbnRyeV9tdWx0aShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgb3JpZ19mbGFncywgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjIwLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2MjE6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9tdWx0aV9vcHMgPSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYyMi1cXHQucmVnaXN0ZXJfZmVudHJ5ICAgPSByZWdpc3Rlcl9mZW50cnlfbXVsdGksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMxOjA1LjUzNTI0NTc4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODAwMDE0MTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBEYXRhIFJhY2UgaW4gQlBGIFRyYW1wb2xpbmUgVXBkYXRlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIGNvbmNlcm5pbmcuIGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGhhcyBhIGxvY2sgYXQgdGhlIHRyYW1wb2xpbmUgbGV2ZWwuIEJ1dCBlYWNoIHRyYW1wb2xpbmUgaGFzIGl0cyBvd24gbXV0ZXguIFRoaXMgbWVhbnMgdHdvIHNlcGFyYXRlIHRocmVhZHMgY291bGQgYmUgdXBkYXRpbmcgZGlmZmVyZW50IHRyYW1wb2xpbmVzIHNpbXVsdGFuZW91c2x5LiBXaGVuIHRoaXMgaGFwcGVucywgYm90aCB0aHJlYWRzIGNvdWxkIGNhbGwgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgY29uY3VycmVudGx5LCBhbmQgY3J1Y2lhbGx5LCB0aGV5IGNvdWxkIHdyaXRlIHRvIHRoZSBzaGFyZWQgYHRyYW1wb2xpbmVfc2l6ZV9pbWFnZWAgYXQgdGhlIHNhbWUgdGltZS4gVGhhdCdzIGEgdGV4dGJvb2sgZGF0YSByYWNlIHJpZ2h0IHRoZXJlIG9uIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgLiBUaGlzIGlzIGFuIG9idmlvdXMgYXJlYSBmb3IgZnV6emluZy5cblxuSSBhbHNvIG5lZWQgdG8gY2hlY2sgYGtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY2AuIEl0IGxvb2tzIGxpa2UgYGJwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZWAgaXMgY2FsbGVkIHdoZW4gc3RydWN0X29wcyBtYXBzIGFyZSBjcmVhdGVkIG9yIHVwZGF0ZWQuIFRoaXMgZnVuY3Rpb24gYWxzbyBzZWVtcyB0byBjYWxsIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgLiBUaGlzIHBhdGggaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHN0cmVuZ3RoZW5zIHRoZSBjYXNlIGZvciBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIHNlZSB3aGljaCBzeW1ib2xzIGFyZSByZWxldmFudCBmb3IgdGhpcy4gTG9va2luZyBhdCBGb2N1c1N5bWJvbHMsIGhlcmUncyB3aGF0IHN0YW5kcyBvdXQ6XG5cbjEuICBgaW5pdF90cmFtcG9saW5lX3NpemVfaW1hZ2VgOiBUaGlzIGlzIGFuIGluaXRjYWxsLCBidXQgaXQncyBzdGF0aWMgYW5kIG9ubHkgY2FsbGVkIGF0IGJvb3QsIHNvIGxpa2VseSBub3QgYSBjb25jZXJuIGZvciBhIHJ1bnRpbWUgZGF0YSByYWNlLlxuMi4gIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgOiBUaGlzIGlzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiB0aGF0J3MgZXhwb3J0ZWQgaW4gYSBoZWFkZXIgYW5kIGNhbGxlZCBieSBCUEYuIFRoaXMgaXMgYXQgdGhlIGhlYXJ0IG9mIHRoZSBpc3N1ZSFcbjMuICBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgOiBUaGlzIGlzIGNhbGxlZCBieSBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYC5cbjQuICBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYDogVGhpcyBpcyB0aGUgY2FsbGVyIG9mIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AuXG41LiAgYGJwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZWA6IFRoaXMgaXMgYWxzbyBhIGNhbGxlciBvZiBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBpbiBga2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jYC5cblxuQ2hlY2tpbmcgc3ltYm9sIHZpc2liaWxpdHksIGBpbml0X3RyYW1wb2xpbmVfc2l6ZV9pbWFnZWAgaXMgc3RhdGljLiBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBpcyBub24tc3RhdGljIGFuZCBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpcyBzdGF0aWMgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGlzIG5vbi1zdGF0aWMgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGlzIHN0YXRpYywgY2FsbGVkIGJ5IGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLCBgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2dgLCBldGMuIGBicGZfc3RydWN0X29wc19wcmVwYXJlX3RyYW1wb2xpbmVgIGlzIG5vbi1zdGF0aWMgaW4gYGtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY2AuXG5cbldlJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGNlcnRhaW4gY29uZmlncyBhcmUgZW5hYmxlZC4gVW5kZXIgRW5hYmxlQ29uZmlncywgYEJQRl9KSVRgIChhbmQgYEJQRl9TWVNDQUxMYCwgYW5kIGBCUEZgKSBtdXN0IGJlIGVuYWJsZWQuXG5cblNwZWNpZmljYWxseTpcblxuLSAgIGBDT05GSUdfQlBGX0pJVGBcbi0gICBgQ09ORklHX0JQRl9TWVNDQUxMYFxuLSAgIGBDT05GSUdfQlBGYFxuXG5Eb3VibGUtY2hlY2tpbmcgaW4gdGhlIE1ha2VmaWxlczogYGFyY2gveDg2L25ldC9NYWtlZmlsZWAgY29uZmlybXMgYG9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvbXAub2AgYW5kIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBzaG93cyBgb2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub2AsIGBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zi5vYCBldGMuIFNvIHllczpcblxuLSAgIGBCUEZfSklUYFxuLSAgIGBCUEZfU1lTQ0FMTGBcblxuUmVjYXAgb2YgRm9jdXNTeW1ib2xzOlxuXG4tICAgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWBcbi0gICBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgXG4tICAgYGJwZl90cmFtcG9saW5lX3VwZGF0ZWBcbi0gICBgYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lYFxuXG5HaXZlbiB0aGlzIHRob3JvdWdoIGludmVzdGlnYXRpb24sIEknbSBjb25maWRlbnQgaW4gdGhlIGZ1enppbmcgdmVyZGljdC4gSXQgYWxsIGNoZWNrcyBvdXQuIE5vdyBJIGNhbiBmb3JtdWxhdGUgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NDIsIk91dHB1dFRva2VucyI6MTgyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMxOjEyLjMzNTI2MjI0NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NTkyNjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZVwiLFxuICAgIFwiX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVcIixcbiAgICBcImJwZl90cmFtcG9saW5lX3VwZGF0ZVwiLFxuICAgIFwiYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgcGVyLWNhbGwgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoIGEgc2luZ2xlIHN0YXRpYyBnbG9iYWwgYnVmZmVyICh0cmFtcG9saW5lX3NpemVfaW1hZ2UpIGZvciBjYWxjdWxhdGluZyBCUEYgdHJhbXBvbGluZSBzaXplIGluIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZSgpLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgaW4gdGhlIHg4NiBCUEYgSklUIHN1YnN5c3RlbSB3aGVuIHVwZGF0aW5nIEJQRiB0cmFtcG9saW5lcyBvciBwcmVwYXJpbmcgQlBGIHN0cnVjdF9vcHMuIEZ1enppbmcgY2FuIHZlcmlmeSBjb3JyZWN0bmVzcywgbWVtb3J5IHNhZmV0eSwgYW5kIGNvbmN1cnJlbmN5IGJlaGF2aW9yIGFjcm9zcyBCUEYgdHJhbXBvbGluZSB1cGRhdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXJjaF9icGZfdHJhbXBvbGluZV9zaXplXCIsXG4gICAgXCJfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiLFxuICAgIFwiYnBmX3RyYW1wb2xpbmVfdXBkYXRlXCIsXG4gICAgXCJicGZfc3RydWN0X29wc19wcmVwYXJlX3RyYW1wb2xpbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBwZXItY2FsbCBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGggYSBzaW5nbGUgc3RhdGljIGdsb2JhbCBidWZmZXIgKHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSkgZm9yIGNhbGN1bGF0aW5nIEJQRiB0cmFtcG9saW5lIHNpemUgaW4gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKCkuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBpbiB0aGUgeDg2IEJQRiBKSVQgc3Vic3lzdGVtIHdoZW4gdXBkYXRpbmcgQlBGIHRyYW1wb2xpbmVzIG9yIHByZXBhcmluZyBCUEYgc3RydWN0X29wcy4gRnV6emluZyBjYW4gdmVyaWZ5IGNvcnJlY3RuZXNzLCBtZW1vcnkgc2FmZXR5LCBhbmQgY29uY3VycmVuY3kgYmVoYXZpb3IgYWNyb3NzIEJQRiB0cmFtcG9saW5lIHVwZGF0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMxOjEyLjQxMTg2MjQ2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDA2MzQxMTEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMxOjEyLjQxMjM2MzU4MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMwMDYyOTA1NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBkeW5hbWljIHBlci1jYWxsIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiAodmlhIGV4ZWNtZW1fYWxsb2MvZXhlY21lbV9mcmVlKSBvZiBhIGR1bW15IHNjcmF0Y2ggYnVmZmVyIGluIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZSgpIHdpdGggYSBzdGF0aWNhbGx5IHByZS1hbGxvY2F0ZWQgcGFnZSBidWZmZXIgKHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSkuIFRoZSBidWZmZXIgaXMgdXNlZCBzdHJpY3RseSBhcyBhIHdyaXRlLW9ubHkgc2luayBmb3IgaW5zdHJ1Y3Rpb24gZW1pc3Npb24gZHVyaW5nIGRyeS1ydW4gdHJhbXBvbGluZSBnZW5lcmF0aW9uIGluIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkgdG8gZGV0ZXJtaW5lIHRoZSByZXF1aXJlZCBidWZmZXIgc2l6ZS4gSXRzIGNvbnRlbnRzIGFyZSBuZXZlciByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YWNrIHZhcmlhYmxlcyBzdWNoIGFzICdpbScgYXJlIHBhc3NlZCB0byBzYXRpc2Z5IGZ1bmN0aW9uIHBhcmFtZXRlcnMgYW5kIGFyZSBub3QgcmVhZCB1bmluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrLCBvciBjb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIHN0YXRlIGlzIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkOyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIHN1ZmZpY2VzIGZvciBhbnkgbWVtb3J5IHNhZmV0eSB2ZXJpZmljYXRpb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTc4YWRiYzgwZTVjYTYxYjNjN2YxNzA0ODc1ZTBkZmZhOGM5YjkzY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMjA6MzA6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IGJiYTM1MTk0NDIwMmMuLjEzZWYwZDUzY2EyOTYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTksNiArOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsdGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfdmVyaWZpZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbW9yeS5oXHUwMDNlXG5AQCAtMzUsNiArMzYsMTUgQEAgdm9pZCBfX2FzYW5fc3RvcmU4KHZvaWQgKnApO1xuIFxuIHN0YXRpYyBib29sIGFsbF9jYWxsZWVfcmVnc191c2VkWzRdID0ge3RydWUsIHRydWUsIHRydWUsIHRydWV9O1xuIFxuK3N0YXRpYyB2b2lkICp0cmFtcG9saW5lX3NpemVfaW1hZ2U7XG4rXG4rc3RhdGljIGludCBfX2luaXQgaW5pdF90cmFtcG9saW5lX3NpemVfaW1hZ2Uodm9pZClcbit7XG4rXHR0cmFtcG9saW5lX3NpemVfaW1hZ2UgPSBleGVjbWVtX2FsbG9jKEVYRUNNRU1fTU9EVUxFX0RBVEEsIFBBR0VfU0laRSk7XG4rXHRyZXR1cm4gdHJhbXBvbGluZV9zaXplX2ltYWdlID8gMCA6IC1FTk9NRU07XG4rfVxuK2xhdGVfaW5pdGNhbGwoaW5pdF90cmFtcG9saW5lX3NpemVfaW1hZ2UpO1xuK1xuIHN0YXRpYyB1OCAqZW1pdF9jb2RlKHU4ICpwdHIsIHUzMiBieXRlcywgdW5zaWduZWQgaW50IGxlbilcbiB7XG4gXHRpZiAobGVuID09IDEpXG5AQCAtNDAwMCwyNCArNDAxMCwxNCBAQCBpbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuIFx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXG4ge1xuIFx0c3RydWN0IGJwZl90cmFtcF9pbWFnZSBpbTtcbi1cdHZvaWQgKmltYWdlO1xuLVx0aW50IHJldDtcbiBcbi1cdC8qIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBmb3IgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKS5cbi1cdCAqXG4tXHQgKiBXZSBjYW5ub3QgdXNlIGt2bWFsbG9jIGhlcmUsIGJlY2F1c2Ugd2UgbmVlZCBpbWFnZSB0byBiZSBpblxuLVx0ICogbW9kdWxlIG1lbW9yeSByYW5nZS5cbi1cdCAqIFNpbmNlIGl0IG11c3QgYmUgd3JpdGFibGUgdXNlIGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9NT0RVTEVfREFUQSlcbi1cdCAqIHRoYXQgcmV0dXJucyB3cml0YWJsZSBtZW1vcnkgaW4gdGhlIG1vZHVsZSBhZGRyZXNzIHNwYWNlLlxuLVx0ICovXG4tXHRpbWFnZSA9IGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9NT0RVTEVfREFUQSwgUEFHRV9TSVpFKTtcbi1cdGlmICghaW1hZ2UpXG4rXHRpZiAoIXRyYW1wb2xpbmVfc2l6ZV9pbWFnZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcdTAwMjZpbSwgaW1hZ2UsIGltYWdlICsgUEFHRV9TSVpFLCBpbWFnZSxcbi1cdFx0XHRcdFx0ICAgIG0sIGZsYWdzLCB0bm9kZXMsIGZ1bmNfYWRkcik7XG4tXHRleGVjbWVtX2ZyZWUoaW1hZ2UpO1xuLVx0cmV0dXJuIHJldDtcbitcdHJldHVybiBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcdTAwMjZpbSwgdHJhbXBvbGluZV9zaXplX2ltYWdlLFxuK1x0XHRcdFx0XHQgICAgIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSArIFBBR0VfU0laRSxcbitcdFx0XHRcdFx0ICAgICB0cmFtcG9saW5lX3NpemVfaW1hZ2UsIG0sIGZsYWdzLFxuK1x0XHRcdFx0XHQgICAgIHRub2RlcywgZnVuY19hZGRyKTtcbiB9XG4gXG4gc3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLCB1OCAqYnVmKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzE6MTIuNDEyMzY1MjgxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkwNzA5NzYwMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgSklUIFRyYW1wb2xpbmUgU2l6ZSBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSB0byBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBvcHRpbWl6aW5nIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGZvciB0aGUgQlBGIHRyYW1wb2xpbmUgc2l6ZSBpbWFnZS4gU3BlY2lmaWNhbGx5LCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgc3RhdGljIGdsb2JhbCBwb2ludGVyLCBgdHJhbXBvbGluZV9zaXplX2ltYWdlYCwgaXMgYSBrZXkgYWx0ZXJhdGlvbi5cblxuQmVmb3JlLCBpbiBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCwgYSBuZXcgYGltYWdlYCB3YXMgYWxsb2NhdGVkIG9uIHRoZSBoZWFwIGZvciBlYWNoIGNhbGwgdXNpbmcgYGV4ZWNtZW1fYWxsb2NgLiBUaGUgY2hhbmdlIG1lbW9pemVzIHRoaXMgYWxsb2NhdGlvbiB1c2luZyB0aGUgc3RhdGljIHZhcmlhYmxlIGFuZCBpbml0aWFsaXNlcyBpdCBhdCBib290IHVzaW5nIGBsYXRlX2luaXRjYWxsKGluaXRfdHJhbXBvbGluZV9zaXplX2ltYWdlKWAuIE5vdywgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgc2ltcGx5IHJlLXVzZXMgdGhpcyBwcmUtYWxsb2NhdGVkIGJ1ZmZlci4gVGhpcyBkZWZpbml0ZWx5IHN1Z2dlc3RzIGFuIGVmZm9ydCB0byByZWR1Y2Ugb3ZlcmhlYWQsIGxpa2VseSBpbiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHBlcmZvcm1hbmNlIGdhaW5zLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybnMgYXJlIGFyb3VuZCB0aHJlYWQgc2FmZXR5IGFuZCB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBoZXJlLCBhcyBpdCdzIHRoZSBvbmUgdXNpbmcgdGhlIGFsbG9jYXRlZCBtZW1vcnkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYW5kIGlmIGFueSBjb25jdXJyZW50IGFjY2VzcyBpcyBwb3NzaWJsZS4gQWxzbywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW1hZ2UgaXMgaW5pdGlhbGl6ZWQgcHJvcGVybHkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHNoYXJlZCBidWZmZXIgaXMgYmVpbmcgbW9kaWZpZWQgaW4gYSB0aHJlYWQtdW5zYWZlIHdheS5cblxuSSdsbCB1c2UgbXkgdXN1YWwgdG9vbHMgLSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgLSB0byBleGFtaW5lIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgaXRzZWxmLCBpdHMgY2FsbGVycywgYW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgIGlzIHVzZWQuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIG9wdGltaXphdGlvbiBkb2Vzbid0IGludHJvZHVjZSBhbnkgc3VidGxlIGJ1Z3MsIHN1Y2ggYXMgZGF0YSBjb3JydXB0aW9uIG9yIHJhY2UgY29uZGl0aW9ucy4gSSdsbCBsb29rIGZvciBwb3RlbnRpYWwgbG9ja2luZyBtZWNoYW5pc21zLCBvciBsYWNrIHRoZXJlb2YuIEknbGwgYWxzbyB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiBtZW1vcnkgZm9vdHByaW50LiBQZXJoYXBzIHRoaXMgaXMgYSB0cmFkZS1vZmYgdGhhdCBpcyBzYXZpbmcgdXMgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2NCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMxOjIxLjQ4MzM0MzUzNloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIyMjAwOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNTU1PXN0YXRpYyBpbnQgaW52b2tlX2JwZl9tb2RfcmV0KGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcHJvZyxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjU2LSAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNjU3OnN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltYWdlLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjU4LVxcdFxcdFxcdFxcdFxcdCB2b2lkICpyd19pbWFnZV9lbmQsIHZvaWQgKmltYWdlLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM5ODA9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqaW1hZ2UsIHZvaWQgKmltYWdlX2VuZCxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zOTk1LVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozOTk2OlxcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKGltLCByd19pbWFnZSwgcndfaW1hZ2UgKyBzaXplLCBpbWFnZSwgbSxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzk5Ny1cXHRcXHRcXHRcXHRcXHQgICAgZmxhZ3MsIHRub2RlcywgZnVuY19hZGRyKTtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz00MDA5PWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDAxNi1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6NDAxNzpcXHRyZXR1cm4gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoXFx1MDAyNmltLCB0cmFtcG9saW5lX3NpemVfaW1hZ2UsXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMTgtXFx0XFx0XFx0XFx0XFx0ICAgICB0cmFtcG9saW5lX3NpemVfaW1hZ2UgKyBQQUdFX1NJWkUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMxOjIxLjUzNTU2ODU5N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODU5MzA4NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgdHJhbXBvbGluZSBpcyBwcmVwYXJlZCBvbiB4ODYsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgYW5kIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgIHdpdGhpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gVGhlIHRyYW1wb2xpbmUgaXMgY3JpdGljYWwgZm9yIHRoZSBKSVQgY29tcGlsYXRpb24gcHJvY2Vzcywgc28ga25vd2luZyBob3cgaXQncyBzZXQgdXAgYW5kIHNpemVkIGlzIGZ1bmRhbWVudGFsIHRvIHRoZSBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkgb2YgdGhlIEJQRiBpbXBsZW1lbnRhdGlvbiBvbiB0aGlzIGFyY2hpdGVjdHVyZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgaGFuZGxlcyB0aGUgYWN0dWFsIHByZXBhcmF0aW9uIGFuZCB3aGF0IGNvbnN0cmFpbnRzIG9yIGNvbnNpZGVyYXRpb25zIGRldGVybWluZSB0aGUgc2l6ZSBhbGxvY2F0aW9uLiBXaGF0IGtpbmQgb2YgYXNzZW1ibHkgaXMgZ2VuZXJhdGVkPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHg4NiBpbnN0cnVjdGlvbnMgb3IgdGVjaG5pcXVlcyBiZWluZyBsZXZlcmFnZWQgaGVyZSBmb3IgdGhlIHRyYW1wb2xpbmU/IFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxOTIsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDozMToyMy4zOTQ4Nzk4MzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMxMjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjU3LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNjU3OlxcdHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltYWdlLFxcbjM2NTg6XFx0XFx0XFx0XFx0XFx0XFx0IHZvaWQgKnJ3X2ltYWdlX2VuZCwgdm9pZCAqaW1hZ2UsXFxuMzY1OTpcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuMzY2MDpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLFxcbjM2NjE6XFx0XFx0XFx0XFx0XFx0XFx0IHZvaWQgKmZ1bmNfYWRkcilcXG4zNjYyOlxcdHtcXG4zNjYzOlxcdFxcdGludCBpLCByZXQsIG5yX3JlZ3MgPSBtLVxcdTAwM2Vucl9hcmdzLCBzdGFja19zaXplID0gMDtcXG4zNjY0OlxcdFxcdGludCByZWdzX29mZiwgZnVuY19tZXRhX29mZiwgaXBfb2ZmLCBydW5fY3R4X29mZiwgYXJnX3N0YWNrX29mZiwgcmJ4X29mZjtcXG4zNjY1OlxcdFxcdHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKmZlbnRyeSA9IFxcdTAwMjZ0bm9kZXNbQlBGX1RSQU1QX0ZFTlRSWV07XFxuMzY2NjpcXHRcXHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICpmZXhpdCA9IFxcdTAwMjZ0bm9kZXNbQlBGX1RSQU1QX0ZFWElUXTtcXG4zNjY3OlxcdFxcdHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKmZtb2RfcmV0ID0gXFx1MDAyNnRub2Rlc1tCUEZfVFJBTVBfTU9ESUZZX1JFVFVSTl07XFxuMzY2ODpcXHRcXHR2b2lkICpvcmlnX2NhbGwgPSBmdW5jX2FkZHI7XFxuMzY2OTpcXHRcXHRpbnQgY29va2llX29mZiwgY29va2llX2NudDtcXG4zNjcwOlxcdFxcdHU4ICoqYnJhbmNoZXMgPSBOVUxMO1xcbjM2NzE6XFx0XFx0dTY0IGFyZW5hX2Jhc2U7XFxuMzY3MjpcXHRcXHR1NjQgZnVuY19tZXRhO1xcbjM2NzM6XFx0XFx0dTggKnByb2c7XFxuMzY3NDpcXHRcXHRib29sIHNhdmVfcmV0O1xcbjM2NzU6XFx0XFxuMzY3NjpcXHRcXHQvKlxcbjM2Nzc6XFx0XFx0ICogRl9JTkRJUkVDVCBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBGX1JFVF9GRU5UUllfUkVULCBpdCBpc1xcbjM2Nzg6XFx0XFx0ICogZXhwbGljaXRseSBpbmNvbXBhdGlibGUgd2l0aCBGX0NBTExfT1JJRyB8IEZfU0tJUF9GUkFNRSB8IEZfSVBfQVJHXFxuMzY3OTpcXHRcXHQgKiBiZWNhdXNlIEBmdW5jX2FkZHIuXFxuMzY4MDpcXHRcXHQgKi9cXG4zNjgxOlxcdFxcdFdBUk5fT05fT05DRSgoZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVCkgXFx1MDAyNlxcdTAwMjZcXG4zNjgyOlxcdFxcdFxcdCAgICAgKGZsYWdzIFxcdTAwMjYgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpO1xcbjM2ODM6XFx0XFxuMzY4NDpcXHRcXHRhcmVuYV9iYXNlID0gYnBmX3RyYW1wX2FyZW5hX2Jhc2UobSwgdG5vZGVzLCBmbGFncyk7XFxuMzY4NTpcXHRcXG4zNjg2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtLVxcdTAwM2Vucl9hcmdzOyBpKyspXFxuMzY4NzpcXHRcXHRcXHRucl9yZWdzICs9IChtLVxcdTAwM2Vhcmdfc2l6ZVtpXSArIDcpIC8gOCAtIDE7XFxuMzY4ODpcXHRcXG4zNjg5OlxcdFxcdC8qIHg4Ni02NCBzdXBwb3J0cyB1cCB0byBNQVhfQlBGX0ZVTkNfQVJHUyBhcmd1bWVudHMuIDEtNlxcbjM2OTA6XFx0XFx0ICogYXJlIHBhc3NlZCB0aHJvdWdoIHJlZ3MsIHRoZSByZW1haW5zIGFyZSB0aHJvdWdoIHN0YWNrLlxcbjM2OTE6XFx0XFx0ICovXFxuMzY5MjpcXHRcXHRpZiAobnJfcmVncyBcXHUwMDNlIE1BWF9CUEZfRlVOQ19BUkdTKVxcbjM2OTM6XFx0XFx0XFx0cmV0dXJuIC1FTk9UU1VQUDtcXG4zNjk0OlxcdFxcbjM2OTU6XFx0XFx0LyogR2VuZXJhdGVkIHRyYW1wb2xpbmUgc3RhY2sgbGF5b3V0OlxcbjM2OTY6XFx0XFx0ICpcXG4zNjk3OlxcdFxcdCAqIFJCUCArIDggICAgICAgICBbIHJldHVybiBhZGRyZXNzICBdXFxuMzY5ODpcXHRcXHQgKiBSQlAgKyAwICAgICAgICAgWyBSQlAgICAgICAgICAgICAgXVxcbjM2OTk6XFx0XFx0ICpcXG4zNzAwOlxcdFxcdCAqIFJCUCAtIDggICAgICAgICBbIHJldHVybiB2YWx1ZSAgICBdICBCUEZfVFJBTVBfRl9DQUxMX09SSUcgb3JcXG4zNzAxOlxcdFxcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVCBmbGFnc1xcbjM3MDI6XFx0XFx0ICpcXG4zNzAzOlxcdFxcdCAqICAgICAgICAgICAgICAgICBbIHJlZ19hcmdOICAgICAgICBdICBhbHdheXNcXG4zNzA0OlxcdFxcdCAqICAgICAgICAgICAgICAgICBbIC4uLiAgICAgICAgICAgICBdXFxuMzcwNTpcXHRcXHQgKiBSQlAgLSByZWdzX29mZiAgWyByZWdfYXJnMSAgICAgICAgXSAgcHJvZ3JhbSdzIGN0eCBwb2ludGVyXFxuMzcwNjpcXHRcXHQgKlxcbjM3MDc6XFx0XFx0ICogUkJQIC0gZnVuY19tZXRhX29mZiBbIHJlZ3MgY291bnQsIGV0YyBdICBhbHdheXNcXG4zNzA4OlxcdFxcdCAqXFxuMzcwOTpcXHRcXHQgKiBSQlAgLSBpcF9vZmYgICAgWyB0cmFjZWQgZnVuY3Rpb24gXSAgQlBGX1RSQU1QX0ZfSVBfQVJHIGZsYWdcXG4zNzEwOlxcdFxcdCAqXFxuMzcxMTpcXHRcXHQgKiBSQlAgLSByYnhfb2ZmICAgWyByYnggdmFsdWUgICAgICAgXSAgYWx3YXlzXFxuMzcxMjpcXHRcXHQgKlxcbjM3MTM6XFx0XFx0ICogUkJQIC0gcnVuX2N0eF9vZmYgWyBicGZfdHJhbXBfcnVuX2N0eCBdXFxuMzcxNDpcXHRcXHQgKlxcbjM3MTU6XFx0XFx0ICogICAgICAgICAgICAgICAgICAgICBbIHN0YWNrX2FyZ04gXSAgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHXFxuMzcxNjpcXHRcXHQgKiAgICAgICAgICAgICAgICAgICAgIFsgLi4uICAgICAgICBdXFxuMzcxNzpcXHRcXHQgKiAgICAgICAgICAgICAgICAgICAgIFsgc3RhY2tfYXJnMiBdXFxuMzcxODpcXHRcXHQgKiBSQlAgLSBhcmdfc3RhY2tfb2ZmIFsgc3RhY2tfYXJnMSBdXFxuMzcxOTpcXHRcXHQgKiBSU1AgICAgICAgICAgICAgICAgIFsgdGFpbF9jYWxsX2NudF9wdHIgXSBCUEZfVFJBTVBfRl9UQUlMX0NBTExfQ1RYXFxuMzcyMDpcXHRcXHQgKi9cXG4zNzIxOlxcdFxcbjM3MjI6XFx0XFx0Lyogcm9vbSBmb3IgcmV0dXJuIHZhbHVlIG9mIG9yaWdfY2FsbCBvciBmZW50cnkgcHJvZyAqL1xcbjM3MjM6XFx0XFx0c2F2ZV9yZXQgPSBmbGFncyBcXHUwMDI2IChCUEZfVFJBTVBfRl9DQUxMX09SSUcgfCBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVCk7XFxuMzcyNDpcXHRcXHRpZiAoc2F2ZV9yZXQpXFxuMzcyNTpcXHRcXHRcXHRzdGFja19zaXplICs9IDg7XFxuMzcyNjpcXHRcXG4zNzI3OlxcdFxcdHN0YWNrX3NpemUgKz0gbnJfcmVncyAqIDg7XFxuMzcyODpcXHRcXHRyZWdzX29mZiA9IHN0YWNrX3NpemU7XFxuMzcyOTpcXHRcXG4zNzMwOlxcdFxcdC8qIGZ1bmN0aW9uIG1hdGVkYXRhLCBzdWNoIGFzIHJlZ3MgY291bnQgICovXFxuMzczMTpcXHRcXHRzdGFja19zaXplICs9IDg7XFxuMzczMjpcXHRcXHRmdW5jX21ldGFfb2ZmID0gc3RhY2tfc2l6ZTtcXG4zNzMzOlxcdFxcbjM3MzQ6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfSVBfQVJHKVxcbjM3MzU6XFx0XFx0XFx0c3RhY2tfc2l6ZSArPSA4OyAvKiByb29tIGZvciBJUCBhZGRyZXNzIGFyZ3VtZW50ICovXFxuMzczNjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzE6MjMuMzk1MjEzNTAyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MTk3MjIyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgYW5kIGByd19pbWFnZWAgVXNhZ2UqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGJhY2sgaW50byB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIHdhcyBvbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgZnVuY3Rpb24gd29ya3MuIE5vdywgSSBuZWVkIHRvIGV4cGFuZCBteSB2aWV3IGFuZCBzZWUgaG93IHRoZSByZXN0IG9mIGl0IHVuZm9sZHMsIHNwZWNpZmljYWxseSB0aGUgcGFydHMgdGhhdCByZWxhdGUgdG8gYHJ3X2ltYWdlYC4gSSBuZWVkIHRvIHRyYWNrIHRoZSBwYXRoIG9mIGByd19pbWFnZWAuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgY2FsbHMgb3IgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYHJ3X2ltYWdlYCwgZXNwZWNpYWxseSB3aXRoaW4gb3IgYXJvdW5kIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBpcyBiZWluZyBsb2FkZWQgaW50byBgcndfaW1hZ2VgLiBJIHdpbGwgZm9sbG93IGByd19pbWFnZWAgYW5kIHVuZGVyc3RhbmQgd2hhdCBjb2RlIGl0IGlzIGFzc29jaWF0ZWQgd2l0aC4gVGhlbiBJIHdpbGwgc2VlIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBhbHNvIHVzaW5nIGByd19pbWFnZWAgYW5kIHdoYXQgdGhleSBkby5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkyOCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzE6MjUuMzE0OTM4MTQ1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NjAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzczNyxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzczNzpcXHRcXHRpcF9vZmYgPSBzdGFja19zaXplO1xcbjM3Mzg6XFx0XFxuMzczOTpcXHRcXHRjb29raWVfY250ID0gYnBmX2ZzZXNzaW9uX2Nvb2tpZV9jbnQodG5vZGVzKTtcXG4zNzQwOlxcdFxcdC8qIHJvb20gZm9yIHNlc3Npb24gY29va2llcyAqL1xcbjM3NDE6XFx0XFx0c3RhY2tfc2l6ZSArPSBjb29raWVfY250ICogODtcXG4zNzQyOlxcdFxcdGNvb2tpZV9vZmYgPSBzdGFja19zaXplO1xcbjM3NDM6XFx0XFxuMzc0NDpcXHRcXHRzdGFja19zaXplICs9IDg7XFxuMzc0NTpcXHRcXHRyYnhfb2ZmID0gc3RhY2tfc2l6ZTtcXG4zNzQ2OlxcdFxcbjM3NDc6XFx0XFx0c3RhY2tfc2l6ZSArPSAoc2l6ZW9mKHN0cnVjdCBicGZfdHJhbXBfcnVuX2N0eCkgKyA3KSBcXHUwMDI2IH4weDc7XFxuMzc0ODpcXHRcXHRydW5fY3R4X29mZiA9IHN0YWNrX3NpemU7XFxuMzc0OTpcXHRcXG4zNzUwOlxcdFxcdGlmIChucl9yZWdzIFxcdTAwM2UgNiBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9DQUxMX09SSUcpKSB7XFxuMzc1MTpcXHRcXHRcXHQvKiB0aGUgc3BhY2UgdGhhdCB1c2VkIHRvIHBhc3MgYXJndW1lbnRzIG9uLXN0YWNrICovXFxuMzc1MjpcXHRcXHRcXHRzdGFja19zaXplICs9IChucl9yZWdzIC0gZ2V0X25yX3VzZWRfcmVncyhtKSkgKiA4O1xcbjM3NTM6XFx0XFx0XFx0LyogbWFrZSBzdXJlIHRoZSBzdGFjayBwb2ludGVyIGlzIDE2LWJ5dGUgYWxpZ25lZCBpZiB3ZVxcbjM3NTQ6XFx0XFx0XFx0ICogbmVlZCBwYXNzIGFyZ3VtZW50cyBvbiBzdGFjaywgd2hpY2ggbWVhbnNcXG4zNzU1OlxcdFxcdFxcdCAqICBbc3RhY2tfc2l6ZSArIDgocmJwKSArIDgocmlwKSArIDgob3JpZ2luIHJpcCldXFxuMzc1NjpcXHRcXHRcXHQgKiBzaG91bGQgYmUgMTYtYnl0ZSBhbGlnbmVkLiBGb2xsb3dpbmcgY29kZSBkZXBlbmQgb25cXG4zNzU3OlxcdFxcdFxcdCAqIHRoYXQgc3RhY2tfc2l6ZSBpcyBhbHJlYWR5IDgtYnl0ZSBhbGlnbmVkLlxcbjM3NTg6XFx0XFx0XFx0ICovXFxuMzc1OTpcXHRcXHRcXHRpZiAoYnBmX3RyYW1wb2xpbmVfdXNlX2ptcChmbGFncykpIHtcXG4zNzYwOlxcdFxcdFxcdFxcdC8qIG5vIHJpcCBpbiB0aGUgXFxcImptcFxcXCIgY2FzZSAqL1xcbjM3NjE6XFx0XFx0XFx0XFx0c3RhY2tfc2l6ZSArPSAoc3RhY2tfc2l6ZSAlIDE2KSA/IDggOiAwO1xcbjM3NjI6XFx0XFx0XFx0fSBlbHNlIHtcXG4zNzYzOlxcdFxcdFxcdFxcdHN0YWNrX3NpemUgKz0gKHN0YWNrX3NpemUgJSAxNikgPyAwIDogODtcXG4zNzY0OlxcdFxcdFxcdH1cXG4zNzY1OlxcdFxcdH1cXG4zNzY2OlxcdFxcbjM3Njc6XFx0XFx0YXJnX3N0YWNrX29mZiA9IHN0YWNrX3NpemU7XFxuMzc2ODpcXHRcXG4zNzY5OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykge1xcbjM3NzA6XFx0XFx0XFx0Lyogc2tpcCBwYXRjaGVkIGNhbGwgaW5zdHJ1Y3Rpb24gYW5kIHBvaW50IG9yaWdfY2FsbCB0byBhY3R1YWxcXG4zNzcxOlxcdFxcdFxcdCAqIGJvZHkgb2YgdGhlIGtlcm5lbCBmdW5jdGlvbi5cXG4zNzcyOlxcdFxcdFxcdCAqL1xcbjM3NzM6XFx0XFx0XFx0aWYgKGlzX2VuZGJyKG9yaWdfY2FsbCkpXFxuMzc3NDpcXHRcXHRcXHRcXHRvcmlnX2NhbGwgKz0gRU5EQlJfSU5TTl9TSVpFO1xcbjM3NzU6XFx0XFx0XFx0b3JpZ19jYWxsICs9IFg4Nl9QQVRDSF9TSVpFO1xcbjM3NzY6XFx0XFx0fVxcbjM3Nzc6XFx0XFxuMzc3ODpcXHRcXHRwcm9nID0gcndfaW1hZ2U7XFxuMzc3OTpcXHRcXG4zNzgwOlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX0lORElSRUNUKSB7XFxuMzc4MTpcXHRcXHRcXHQvKlxcbjM3ODI6XFx0XFx0XFx0ICogSW5kaXJlY3QgY2FsbCBmb3IgYnBmX3N0cnVjdF9vcHNcXG4zNzgzOlxcdFxcdFxcdCAqL1xcbjM3ODQ6XFx0XFx0XFx0ZW1pdF9jZmkoXFx1MDAyNnByb2csIGltYWdlLFxcbjM3ODU6XFx0XFx0XFx0XFx0IGNmaV9nZXRfZnVuY19oYXNoKGZ1bmNfYWRkciksXFxuMzc4NjpcXHRcXHRcXHRcXHQgY2ZpX2dldF9mdW5jX2FyaXR5KGZ1bmNfYWRkcikpO1xcbjM3ODc6XFx0XFx0fSBlbHNlIHtcXG4zNzg4OlxcdFxcdFxcdC8qXFxuMzc4OTpcXHRcXHRcXHQgKiBEaXJlY3QtY2FsbCBmZW50cnkgc3R1YiwgYXMgc3VjaCBpdCBuZWVkcyBhY2NvdW50aW5nIGZvciB0aGVcXG4zNzkwOlxcdFxcdFxcdCAqIF9fZmVudHJ5X18gY2FsbC5cXG4zNzkxOlxcdFxcdFxcdCAqL1xcbjM3OTI6XFx0XFx0XFx0eDg2X2NhbGxfZGVwdGhfZW1pdF9hY2NvdW50aW5nKFxcdTAwMjZwcm9nLCBOVUxMLCBpbWFnZSk7XFxuMzc5MzpcXHRcXHR9XFxuMzc5NDpcXHRcXHRFTUlUMSgweDU1KTtcXHRcXHQgLyogcHVzaCByYnAgKi9cXG4zNzk1OlxcdFxcdEVNSVQzKDB4NDgsIDB4ODksIDB4RTUpOyAvKiBtb3YgcmJwLCByc3AgKi9cXG4zNzk2OlxcdFxcdGlmIChpbSlcXG4zNzk3OlxcdFxcdFxcdGltLVxcdTAwM2Vrc3ltLmZwX3N0YXJ0ID0gcHJvZyAtICh1OCAqKXJ3X2ltYWdlO1xcbjM3OTg6XFx0XFxuMzc5OTpcXHRcXHRpZiAoIWlzX2ltbTgoc3RhY2tfc2l6ZSkpIHtcXG4zODAwOlxcdFxcdFxcdC8qIHN1YiByc3AsIHN0YWNrX3NpemUgKi9cXG4zODAxOlxcdFxcdFxcdEVNSVQzX29mZjMyKDB4NDgsIDB4ODEsIDB4RUMsIHN0YWNrX3NpemUpO1xcbjM4MDI6XFx0XFx0fSBlbHNlIHtcXG4zODAzOlxcdFxcdFxcdC8qIHN1YiByc3AsIHN0YWNrX3NpemUgKi9cXG4zODA0OlxcdFxcdFxcdEVNSVQ0KDB4NDgsIDB4ODMsIDB4RUMsIHN0YWNrX3NpemUpO1xcbjM4MDU6XFx0XFx0fVxcbjM4MDY6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfVEFJTF9DQUxMX0NUWClcXG4zODA3OlxcdFxcdFxcdEVNSVQxKDB4NTApO1xcdFxcdC8qIHB1c2ggcmF4ICovXFxuMzgwODpcXHRcXHQvKiBtb3YgUVdPUkQgUFRSIFtyYnAgLSByYnhfb2ZmXSwgcmJ4ICovXFxuMzgwOTpcXHRcXHRlbWl0X3N0eChcXHUwMDI2cHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCBCUEZfUkVHXzYsIC1yYnhfb2ZmKTtcXG4zODEwOlxcdFxcbjM4MTE6XFx0XFx0ZnVuY19tZXRhID0gbnJfcmVncztcXG4zODEyOlxcdFxcdC8qIFN0b3JlIG51bWJlciBvZiBhcmd1bWVudCByZWdpc3RlcnMgb2YgdGhlIHRyYWNlZCBmdW5jdGlvbiAqL1xcbjM4MTM6XFx0XFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChcXHUwMDI2cHJvZywgQlBGX1JFR18wLCAtZnVuY19tZXRhX29mZiwgZnVuY19tZXRhKTtcXG4zODE0OlxcdFxcbjM4MTU6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfSVBfQVJHKSB7XFxuMzgxNjpcXHRcXHRcXHQvKiBTdG9yZSBJUCBhZGRyZXNzIG9mIHRoZSB0cmFjZWQgZnVuY3Rpb24gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzE6MjUuMzE1MjM1Njk1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMjYxMTIxMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGludGVybmFscyBvZiBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIG5vdy4gTXkgbWFpbiBjb25jZXJuIGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJldHVybiB2YWx1ZSBhbmQgdWx0aW1hdGVseSwgaG93IGl0IHNpZ25hbHMgY29tcGxldGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBrZXkgc3RhdGUgaXMgc2V0IHVwIGhlcmUsIGFuZCB3aGVyZSBpdCBnb2VzIGZyb20gaGVyZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB3aGF0IHRvIGxvb2sgZm9yIGFmdGVyIHRoZSBjYWxsIHRvIHVuZGVyc3RhbmQgd2hhdCBqdXN0IGhhcHBlbmVkIGFuZCB0aGF0IGV2ZXJ5dGhpbmcgd2VudCBhY2NvcmRpbmcgdG8gcGxhbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBpdCBpcyBzZXQgdXAgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSBhcmNoaXRlY3R1cmFsIHJlcXVpcmVtZW50cywgYW5kIHRoYXQgdGhpcyBmaXRzIHdpdGggdGhlIG92ZXJhcmNoaW5nIEJQRiBkZXNpZ24uIEkgYW0gbG9va2luZyBmb3IgZGV0YWlscyB0aGF0IG1pZ2h0IGxlYWQgdG8gYSB2dWxuZXJhYmlsaXR5IG9yIGFuIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1OTYsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMxOjI3LjM0MTM1MDM4MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjU3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5NjAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM5NjA6XFx0Y2xlYW51cDpcXG4zOTYxOlxcdFxcdGtmcmVlKGJyYW5jaGVzKTtcXG4zOTYyOlxcdFxcdHJldHVybiByZXQ7XFxuMzk2MzpcXHR9XFxuMzk2NDpcXHRcXG4zOTY1OlxcdHZvaWQgKmFyY2hfYWxsb2NfYnBmX3RyYW1wb2xpbmUodW5zaWduZWQgaW50IHNpemUpXFxuMzk2NjpcXHR7XFxuMzk2NzpcXHRcXHRyZXR1cm4gYnBmX3Byb2dfcGFja19hbGxvYyhzaXplLCBqaXRfZmlsbF9ob2xlLCBmYWxzZSk7XFxuMzk2ODpcXHR9XFxuMzk2OTpcXHRcXG4zOTcwOlxcdHZvaWQgYXJjaF9mcmVlX2JwZl90cmFtcG9saW5lKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4zOTcxOlxcdHtcXG4zOTcyOlxcdFxcdGJwZl9wcm9nX3BhY2tfZnJlZShpbWFnZSwgc2l6ZSk7XFxuMzk3MzpcXHR9XFxuMzk3NDpcXHRcXG4zOTc1OlxcdGludCBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKVxcbjM5NzY6XFx0e1xcbjM5Nzc6XFx0XFx0cmV0dXJuIDA7XFxuMzk3ODpcXHR9XFxuMzk3OTpcXHRcXG4zOTgwOlxcdGludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmltYWdlLCB2b2lkICppbWFnZV9lbmQsXFxuMzk4MTpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG4zOTgyOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcyxcXG4zOTgzOlxcdFxcdFxcdFxcdFxcdHZvaWQgKmZ1bmNfYWRkcilcXG4zOTg0OlxcdHtcXG4zOTg1OlxcdFxcdHZvaWQgKnJ3X2ltYWdlLCAqdG1wO1xcbjM5ODY6XFx0XFx0aW50IHJldDtcXG4zOTg3OlxcdFxcdHUzMiBzaXplID0gaW1hZ2VfZW5kIC0gaW1hZ2U7XFxuMzk4ODpcXHRcXG4zOTg5OlxcdFxcdC8qIHJ3X2ltYWdlIGRvZXNuJ3QgbmVlZCB0byBiZSBpbiBtb2R1bGUgbWVtb3J5IHJhbmdlLCBzbyB3ZSBjYW5cXG4zOTkwOlxcdFxcdCAqIHVzZSBrdm1hbGxvYy5cXG4zOTkxOlxcdFxcdCAqL1xcbjM5OTI6XFx0XFx0cndfaW1hZ2UgPSBrdm1hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcXG4zOTkzOlxcdFxcdGlmICghcndfaW1hZ2UpXFxuMzk5NDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zOTk1OlxcdFxcbjM5OTY6XFx0XFx0cmV0ID0gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoaW0sIHJ3X2ltYWdlLCByd19pbWFnZSArIHNpemUsIGltYWdlLCBtLFxcbjM5OTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGZsYWdzLCB0bm9kZXMsIGZ1bmNfYWRkcik7XFxuMzk5ODpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4zOTk5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjQwMDA6XFx0XFxuNDAwMTpcXHRcXHR0bXAgPSBicGZfYXJjaF90ZXh0X2NvcHkoaW1hZ2UsIHJ3X2ltYWdlLCBzaXplKTtcXG40MDAyOlxcdFxcdGlmIChJU19FUlIodG1wKSlcXG40MDAzOlxcdFxcdFxcdHJldCA9IFBUUl9FUlIodG1wKTtcXG40MDA0OlxcdG91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzE6MjcuMzQxNjI4MjMxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NDY3MjE1ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQlBGIFRyYW1wb2xpbmUgU2l6ZSBDYWxjdWxhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgLiBUaGUgbmFtZSBpdHNlbGYgc2NyZWFtcyBcInNpemUgY2FsY3VsYXRpb24gZm9yIGEgdHJhbXBvbGluZSxcIiBwcmVzdW1hYmx5IHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndobyogaXMgdXNpbmcgdGhpcyBmdW5jdGlvbi4gS25vd2luZyB0aGUgY2FsbGVycyB3aWxsIGlsbHVtaW5hdGUgdGhlIHB1cnBvc2UgYW5kIGNvbnN0cmFpbnRzIGRyaXZpbmcgdGhpcyBzaXplIGNhbGN1bGF0aW9uLiBUaW1lIHRvIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBzZWUgd2hvJ3MgaW52b2tpbmcgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHR1YWwgY2x1ZXMgSSBuZWVkIHRvIGZ1bGx5IGdyb2sgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ5NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzE6MjkuMjg4MzUzNTZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDg0MjQ4MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJjaF9icGZfdHJhbXBvbGluZV9zaXplXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTI5ODg9Ym9vbCBicGZfaml0X3N1cHBvcnRzX2ZzZXNzaW9uKHZvaWQpXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yOTkyLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjI5OTM6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yOTk0LVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTIxMzg9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIxNzUtXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMTc2OmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMTc3LVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jPTgxMj1zdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbWFnZSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTE5MS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjExOTI6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTExOTMtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTAzMD1zdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzM2LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTMzNzppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTMzOC1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz0yNjk4PXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTMwMTUtXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzozMDE2OmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0zMDE3LVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpvcmlnX2NhbGwpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzk4MD1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICppbWFnZSwgdm9pZCAqaW1hZ2VfZW5kLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMDgtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQwMDk6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDAxMC1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0xMzE3PWludCBfX211c3RfY2hlY2sgYXJjaF9wcm90ZWN0X2JwZl90cmFtcG9saW5lKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9icGYuaDoxMzE4OmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuaW5jbHVkZS9saW51eC9icGYuaC0xMzE5LVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpO1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTYzNz1pbnQgYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcyxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NTMtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjY1NDpcXHRzaXplID0gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKG1vZGVsLCBmbGFncywgdG5vZGVzLCBzdHViX2Z1bmMpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NTUtXFx0aWYgKHNpemUgXFx1MDAzYz0gMClcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTcxMD1zdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4LFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzYxLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjc2MjpcXHRzaXplID0gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKFxcdTAwMjZ0ci1cXHUwMDNlZnVuYy5tb2RlbCwgdHItXFx1MDAzZWZsYWdzLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc2My1cXHRcXHRcXHRcXHRcXHR0bm9kZXMsIHRyLVxcdTAwM2VmdW5jLmFkZHIpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTUwOD1pbnQgX193ZWFrIGFyY2hfcHJvdGVjdF9icGZfdHJhbXBvbGluZSh2b2lkICppbWFnZSwgdW5zaWduZWQgaW50IHNpemUpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTEzLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1MTQ6aW50IF9fd2VhayBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUxNS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMxOjMwLjg5Njc4Mjc3M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MTU4MzExNTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEJQRiBUcmFtcG9saW5lIFNpemUgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IG9wdGltaXplcyBob3cgdGhlIEJQRiB0cmFtcG9saW5lIHNpemUgaXMgY2FsY3VsYXRlZC4gUHJldmlvdXNseSwgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgd2FzIGNhbGxpbmcgYGV4ZWNtZW1fYWxsb2NgIGFuZCBgZXhlY21lbV9mcmVlYCBvbiBhIDRLQiBwYWdlIGV2ZXJ5IHRpbWUgaXQgbmVlZGVkIHRvIGZpZ3VyZSBvdXQgdGhlIHRyYW1wb2xpbmUgc2l6ZS4gTm93LCB3ZSd2ZSBnb3QgYSBnbG9iYWwgYnVmZmVyLCBgdHJhbXBvbGluZV9zaXplX2ltYWdlYCwgcHJlLWFsbG9jYXRlZCBhdCBpbml0IHRpbWUuIFRoYXQncyBnb29kLCBhdm9pZGluZyB0aG9zZSByZXBlYXRlZCBhbGxvY2F0aW9ucy4gVGhlIGZ1bmN0aW9uIG5vdyBjYWxscyBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIHdpdGggdGhpcyBwcmUtYWxsb2NhdGVkIGJ1ZmZlciBhcyBhIHRhcmdldCB0byBkZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlIGdlbmVyYXRlZCBpbnN0cnVjdGlvbnMuIEl0IHJldHVybnMgdGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZ2VuZXJhdGVkIGluc3RydWN0aW9ucy5cblxuTXkgbWFpbiBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gTGV0J3MgYnJlYWsgaXQgZG93bjpcblxuMS4gIGBpbml0X3RyYW1wb2xpbmVfc2l6ZV9pbWFnZWAgYWxsb2NhdGVzIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgIHVzaW5nIGBleGVjbWVtX2FsbG9jYC5cbjIuICBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIHdyaXRlcyBKSVQgaW5zdHJ1Y3Rpb25zIGludG8gYHRyYW1wb2xpbmVfc2l6ZV9pbWFnZWAuXG4zLiAgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIHRoYXQgYnVmZmVyLlxuNC4gIE5vdGhpbmcgcmVhZHMgZnJvbSBgdHJhbXBvbGluZV9zaXplX2ltYWdlYCBiZWZvcmUgd3JpdGluZy4gVGhlIGNvbnRlbnRzIGFyZSBub3QgY29waWVkIGFueXdoZXJlLiBJdCdzIGp1c3QgYSBkdW1teSBkZXN0aW5hdGlvbiBmb3IgRU1JVCBpbnN0cnVjdGlvbnMgdG8gZGV0ZXJtaW5lIHNpemUuXG41LiAgVGhlcmUncyBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlLCBgaW1gLCB3aGljaCBpcyBwYXNzZWQgYXMgYSBwb2ludGVyLiBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIHdyaXRlcyB0byBgaW0tXHUwMDNla3N5bS5mcF9zdGFydGAgaWYgYGltICE9IE5VTExgIGJ1dCBpdCdzIG5vdCByZWFkIGFmdGVyLlxuNi4gIE5vIGtlcm5lbC10by11c2VyIHNwYWNlIGRhdGEgY29waWVzIGFyZSBpbnZvbHZlZC5cbjcuICBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMsIG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzc3VlcyBhcmUgdG91Y2hlZC5cbjguICBDb25jZXJuaW5nIGNvbmN1cnJlbmN5LCBldmVuIHdpdGggbXVsdGlwbGUgY2FsbGVycyAobGlrZWx5IHByb3RlY3RlZCBieSBsb2NrcyBhbnl3YXkpLCBpdCdzIG9ubHkgd3JpdHRlbiB0bywgbm90IHJlYWQuIE92ZXJ3cml0ZXMgaGFwcGVuIGVhY2ggdGltZSwgc28gZXZlbiBpZiB0aGVyZSdzIGEgZGF0YSByYWNlLCBpdCdzIGZpbmUuIFRoZSByZXR1cm4gdmFsdWUgaXMganVzdCBjYWxjdWxhdGVkIGxvY2FsbHkuXG45LiAgU28sIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG5HaXZlbiB0aGVzZSBmaW5kaW5ncywgdGhlIHBhdGNoIGRvZXMgd2hhdCBpdCdzIHN1cHBvc2VkIHRvIGRvLiBUaGUgcmVxdWlyZW1lbnRzIHN0YXRlIGBOZWVkc0tNU0FOYCBpcyB0cnVlIG9ubHkgaWYgdGhlcmUgYXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBTaW5jZSBJIGhhdmVuJ3QgZm91bmQgYW55LCB0aGUgbG9naWMgZm9yIGV2YWx1YXRpbmcgS01TQU4gYXBwbGljYWJpbGl0eSBzYXlzOlxuXG4qICAgVGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBkeW5hbWljIGFsbG9jYXRpb24gb2YgYSBzY3JhdGNoIGJ1ZmZlciB3aXRoIGEgcHJlLWFsbG9jYXRlZCBzdGF0aWMgb25lLlxuKiAgIFRoZSBzY3JhdGNoIGJ1ZmZlciBpcyBzb2xlbHkgYSB3cml0ZS1vbmx5IHRhcmdldC4gVGhlIHN0YWNrIHZhcmlhYmxlLCBgaW1gLCBpcyB3cml0dGVuIHRvLCBidXQgbm90IHJlYWQuXG4qICAgTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGNvcGllZCBhbnl3aGVyZS5cbiogICBBbnkgY29uY3VycmVuY3kgaXNzdWVzIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi9LQ1NBTi5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC5cblxuSSdsbCBkb3VibGUgY2hlY2sgYnkgZ3JlcHBpbmcgZm9yIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcsIGJ1dCBiYXNlZCBvbiB0aGUgYW5hbHlzaXMgc28gZmFyLCB0aGlzIGxvb2tzIGNsZWFuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIxOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDozMTozOC4wNTUwOTYzNzJaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDE1NTQwNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJhbXBvbGluZV9zaXplX2ltYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNz1zdGF0aWMgYm9vbCBhbGxfY2FsbGVlX3JlZ3NfdXNlZFs0XSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzgtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM5OnN0YXRpYyB2b2lkICp0cmFtcG9saW5lX3NpemVfaW1hZ2U7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0MTpzdGF0aWMgaW50IF9faW5pdCBpbml0X3RyYW1wb2xpbmVfc2l6ZV9pbWFnZSh2b2lkKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00Mi17XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQzOlxcdHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSA9IGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9NT0RVTEVfREFUQSwgUEFHRV9TSVpFKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6NDQ6XFx0cmV0dXJuIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSA/IDAgOiAtRU5PTUVNO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00NS19XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQ2OmxhdGVfaW5pdGNhbGwoaW5pdF90cmFtcG9saW5lX3NpemVfaW1hZ2UpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00Ny1cXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz00MDA5PWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDAxMy1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6NDAxNDpcXHRpZiAoIXRyYW1wb2xpbmVfc2l6ZV9pbWFnZSlcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDAxNS1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDAxNi1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6NDAxNzpcXHRyZXR1cm4gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoXFx1MDAyNmltLCB0cmFtcG9saW5lX3NpemVfaW1hZ2UsXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQwMTg6XFx0XFx0XFx0XFx0XFx0ICAgICB0cmFtcG9saW5lX3NpemVfaW1hZ2UgKyBQQUdFX1NJWkUsXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQwMTk6XFx0XFx0XFx0XFx0XFx0ICAgICB0cmFtcG9saW5lX3NpemVfaW1hZ2UsIG0sIGZsYWdzLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDIwLVxcdFxcdFxcdFxcdFxcdCAgICAgdG5vZGVzLCBmdW5jX2FkZHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDozMTozOS45OTY2NTUzNjZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ3ODU5NTA5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgcHJlc2VudGVkIGFzIGlmIHRoZSB0aG91Z2h0cyB3ZXJlIG15IG93biwgYW5kIGFzc3VtaW5nIEknbSB3ZWxsLXZlcnNlZCBpbiBteSBmaWVsZDpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IFNpbXBsaWNpdHkgYW5kIENsYXJpdHkqKlxuXG5BbHJpZ2h0LCB0aGlzIGlzIHJlZnJlc2hpbmdseSBzdHJhaWdodGZvcndhcmQuIFRoZXJlJ3Mgbm8gaGlkZGVuIGNvbXBsZXhpdHkgb3IgYW1iaWd1aXR5IGhlcmUuIFRoZSBwYXRoIGZvcndhcmQgaXMgaW1tZWRpYXRlbHkgYXBwYXJlbnQuIEdpdmVuIHRoZSBjbGFyaXR5IG9mIHRoZSBzaXR1YXRpb24sIHRoZSBtb3N0IGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGNhbGwgYSBmdW5jdGlvbi4gR2l2ZW4gdGhlIGluZm9ybWF0aW9uIGFuZCB0aGUgZGVzaXJlZCBvdXRjb21lLCBJIGJlbGlldmUgdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBuYW1lZCBgc2V0LXJlc3VsdHNgLiBJdCBpcyB0aGUgY2xlYXJlc3Qgd2F5IGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDg2LCJPdXRwdXRUb2tlbnMiOjIwMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMxOjQyLjQ3NTI1Mjk3OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgZHluYW1pYyBwZXItY2FsbCBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gKHZpYSBleGVjbWVtX2FsbG9jL2V4ZWNtZW1fZnJlZSkgb2YgYSBkdW1teSBzY3JhdGNoIGJ1ZmZlciBpbiBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoKSB3aXRoIGEgc3RhdGljYWxseSBwcmUtYWxsb2NhdGVkIHBhZ2UgYnVmZmVyICh0cmFtcG9saW5lX3NpemVfaW1hZ2UpLiBUaGUgYnVmZmVyIGlzIHVzZWQgc3RyaWN0bHkgYXMgYSB3cml0ZS1vbmx5IHNpbmsgZm9yIGluc3RydWN0aW9uIGVtaXNzaW9uIGR1cmluZyBkcnktcnVuIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbiBpbiBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgpIHRvIGRldGVybWluZSB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUuIEl0cyBjb250ZW50cyBhcmUgbmV2ZXIgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFjayB2YXJpYWJsZXMgc3VjaCBhcyAnaW0nIGFyZSBwYXNzZWQgdG8gc2F0aXNmeSBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFuZCBhcmUgbm90IHJlYWQgdW5pbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVhaywgb3IgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCBzdGF0ZSBpcyBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZDsgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBzdWZmaWNlcyBmb3IgYW55IG1lbW9yeSBzYWZldHkgdmVyaWZpY2F0aW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGR5bmFtaWMgcGVyLWNhbGwgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uICh2aWEgZXhlY21lbV9hbGxvYy9leGVjbWVtX2ZyZWUpIG9mIGEgZHVtbXkgc2NyYXRjaCBidWZmZXIgaW4gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKCkgd2l0aCBhIHN0YXRpY2FsbHkgcHJlLWFsbG9jYXRlZCBwYWdlIGJ1ZmZlciAodHJhbXBvbGluZV9zaXplX2ltYWdlKS4gVGhlIGJ1ZmZlciBpcyB1c2VkIHN0cmljdGx5IGFzIGEgd3JpdGUtb25seSBzaW5rIGZvciBpbnN0cnVjdGlvbiBlbWlzc2lvbiBkdXJpbmcgZHJ5LXJ1biB0cmFtcG9saW5lIGdlbmVyYXRpb24gaW4gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKSB0byBkZXRlcm1pbmUgdGhlIHJlcXVpcmVkIGJ1ZmZlciBzaXplLiBJdHMgY29udGVudHMgYXJlIG5ldmVyIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gU3RhY2sgdmFyaWFibGVzIHN1Y2ggYXMgJ2ltJyBhcmUgcGFzc2VkIHRvIHNhdGlzZnkgZnVuY3Rpb24gcGFyYW1ldGVycyBhbmQgYXJlIG5vdCByZWFkIHVuaW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWssIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUgaXMgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQ7IHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgc3VmZmljZXMgZm9yIGFueSBtZW1vcnkgc2FmZXR5IHZlcmlmaWNhdGlvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowlpzl5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 20:02:42 +0000 UTC FinishedAt: 2026-09-07 20:31:43 +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": "1b7415bf70be95b9a1e7e87d544867881065613f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL" ], "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": "1b7415bf70be95b9a1e7e87d544867881065613f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL" ], "series_id": "4ec34d01-b45f-4610-86a0-8e3acd7f636c" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "arch_bpf_trampoline_size", "__arch_prepare_bpf_trampoline", "bpf_trampoline_update", "bpf_struct_ops_prepare_trampoline" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcmNoX2JwZl90cmFtcG9saW5lX3NpemUmIzM0OywKICAgICYjMzQ7X19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUmIzM0OywKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfdXBkYXRlJiMzNDssCiAgICAmIzM0O2JwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGR5bmFtaWMgcGVyLWNhbGwgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uICh2aWEgZXhlY21lbV9hbGxvYy9leGVjbWVtX2ZyZWUpIG9mIGEgZHVtbXkgc2NyYXRjaCBidWZmZXIgaW4gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKCkgd2l0aCBhIHN0YXRpY2FsbHkgcHJlLWFsbG9jYXRlZCBwYWdlIGJ1ZmZlciAodHJhbXBvbGluZV9zaXplX2ltYWdlKS4gVGhlIGJ1ZmZlciBpcyB1c2VkIHN0cmljdGx5IGFzIGEgd3JpdGUtb25seSBzaW5rIGZvciBpbnN0cnVjdGlvbiBlbWlzc2lvbiBkdXJpbmcgZHJ5LXJ1biB0cmFtcG9saW5lIGdlbmVyYXRpb24gaW4gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKSB0byBkZXRlcm1pbmUgdGhlIHJlcXVpcmVkIGJ1ZmZlciBzaXplLiBJdHMgY29udGVudHMgYXJlIG5ldmVyIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gU3RhY2sgdmFyaWFibGVzIHN1Y2ggYXMgJiMzOTtpbSYjMzk7IGFyZSBwYXNzZWQgdG8gc2F0aXNmeSBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFuZCBhcmUgbm90IHJlYWQgdW5pbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVhaywgb3IgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCBzdGF0ZSBpcyBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZDsgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBzdWZmaWNlcyBmb3IgYW55IG1lbW9yeSBzYWZldHkgdmVyaWZpY2F0aW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwZXItY2FsbCBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGggYSBzaW5nbGUgc3RhdGljIGdsb2JhbCBidWZmZXIgKHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSkgZm9yIGNhbGN1bGF0aW5nIEJQRiB0cmFtcG9saW5lIHNpemUgaW4gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKCkuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBpbiB0aGUgeDg2IEJQRiBKSVQgc3Vic3lzdGVtIHdoZW4gdXBkYXRpbmcgQlBGIHRyYW1wb2xpbmVzIG9yIHByZXBhcmluZyBCUEYgc3RydWN0X29wcy4gRnV6emluZyBjYW4gdmVyaWZ5IGNvcnJlY3RuZXNzLCBtZW1vcnkgc2FmZXR5LCBhbmQgY29uY3VycmVuY3kgYmVoYXZpb3IgYWNyb3NzIEJQRiB0cmFtcG9saW5lIHVwZGF0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5NzhhZGJjODBlNWNhNjFiM2M3ZjE3MDQ4NzVlMGRmZmE4YzliOTNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAyMDozMDozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IGJiYTM1MTk0NDIwMmMuLjEzZWYwZDUzY2EyOTYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTksNiAmIzQzOzksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbHRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl92ZXJpZmllci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5LmhcdTAwM2VcbkBAIC0zNSw2ICYjNDM7MzYsMTUgQEAgdm9pZCBfX2FzYW5fc3RvcmU4KHZvaWQgKnApO1xuIFxuIHN0YXRpYyBib29sIGFsbF9jYWxsZWVfcmVnc191c2VkWzRdID0ge3RydWUsIHRydWUsIHRydWUsIHRydWV9O1xuIFxuJiM0MztzdGF0aWMgdm9pZCAqdHJhbXBvbGluZV9zaXplX2ltYWdlO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXQgaW5pdF90cmFtcG9saW5lX3NpemVfaW1hZ2Uodm9pZClcbiYjNDM7e1xuJiM0MztcdHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSA9IGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9NT0RVTEVfREFUQSwgUEFHRV9TSVpFKTtcbiYjNDM7XHRyZXR1cm4gdHJhbXBvbGluZV9zaXplX2ltYWdlID8gMCA6IC1FTk9NRU07XG4mIzQzO31cbiYjNDM7bGF0ZV9pbml0Y2FsbChpbml0X3RyYW1wb2xpbmVfc2l6ZV9pbWFnZSk7XG4mIzQzO1xuIHN0YXRpYyB1OCAqZW1pdF9jb2RlKHU4ICpwdHIsIHUzMiBieXRlcywgdW5zaWduZWQgaW50IGxlbilcbiB7XG4gXHRpZiAobGVuID09IDEpXG5AQCAtNDAwMCwyNCAmIzQzOzQwMTAsMTQgQEAgaW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbiBcdFx0XHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxuIHtcbiBcdHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgaW07XG4tXHR2b2lkICppbWFnZTtcbi1cdGludCByZXQ7XG4gXG4tXHQvKiBBbGxvY2F0ZSBhIHRlbXBvcmFyeSBidWZmZXIgZm9yIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkuXG4tXHQgKlxuLVx0ICogV2UgY2Fubm90IHVzZSBrdm1hbGxvYyBoZXJlLCBiZWNhdXNlIHdlIG5lZWQgaW1hZ2UgdG8gYmUgaW5cbi1cdCAqIG1vZHVsZSBtZW1vcnkgcmFuZ2UuXG4tXHQgKiBTaW5jZSBpdCBtdXN0IGJlIHdyaXRhYmxlIHVzZSBleGVjbWVtX2FsbG9jKEVYRUNNRU1fTU9EVUxFX0RBVEEpXG4tXHQgKiB0aGF0IHJldHVybnMgd3JpdGFibGUgbWVtb3J5IGluIHRoZSBtb2R1bGUgYWRkcmVzcyBzcGFjZS5cbi1cdCAqL1xuLVx0aW1hZ2UgPSBleGVjbWVtX2FsbG9jKEVYRUNNRU1fTU9EVUxFX0RBVEEsIFBBR0VfU0laRSk7XG4tXHRpZiAoIWltYWdlKVxuJiM0MztcdGlmICghdHJhbXBvbGluZV9zaXplX2ltYWdlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKFx1MDAyNmltLCBpbWFnZSwgaW1hZ2UgJiM0MzsgUEFHRV9TSVpFLCBpbWFnZSxcbi1cdFx0XHRcdFx0ICAgIG0sIGZsYWdzLCB0bm9kZXMsIGZ1bmNfYWRkcik7XG4tXHRleGVjbWVtX2ZyZWUoaW1hZ2UpO1xuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoXHUwMDI2aW0sIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgdHJhbXBvbGluZV9zaXplX2ltYWdlICYjNDM7IFBBR0VfU0laRSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgdHJhbXBvbGluZV9zaXplX2ltYWdlLCBtLCBmbGFncyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgdG5vZGVzLCBmdW5jX2FkZHIpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGVtaXRfYnBmX2Rpc3BhdGNoZXIodTggKipwcHJvZywgaW50IGEsIGludCBiLCBzNjQgKnByb2dzLCB1OCAqaW1hZ2UsIHU4ICpidWYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZSYjMzQ7LAogICAgJiMzNDtfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV91cGRhdGUmIzM0OywKICAgICYjMzQ7YnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIHBlci1jYWxsIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gd2l0aCBhIHNpbmdsZSBzdGF0aWMgZ2xvYmFsIGJ1ZmZlciAodHJhbXBvbGluZV9zaXplX2ltYWdlKSBmb3IgY2FsY3VsYXRpbmcgQlBGIHRyYW1wb2xpbmUgc2l6ZSBpbiBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGluIHRoZSB4ODYgQlBGIEpJVCBzdWJzeXN0ZW0gd2hlbiB1cGRhdGluZyBCUEYgdHJhbXBvbGluZXMgb3IgcHJlcGFyaW5nIEJQRiBzdHJ1Y3Rfb3BzLiBGdXp6aW5nIGNhbiB2ZXJpZnkgY29ycmVjdG5lc3MsIG1lbW9yeSBzYWZldHksIGFuZCBjb25jdXJyZW5jeSBiZWhhdmlvciBhY3Jvc3MgQlBGIHRyYW1wb2xpbmUgdXBkYXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk3OGFkYmM4MGU1Y2E2MWIzYzdmMTcwNDg3NWUwZGZmYThjOWI5M2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDIwOjMwOjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IGJiYTM1MTk0NDIwMmMuLjEzZWYwZDUzY2EyOTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTksNiAmIzQzOzksNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2ZpbHRlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX3ZsYW4uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmX3ZlcmlmaWVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtb3J5LmgmZ3Q7CkBAIC0zNSw2ICYjNDM7MzYsMTUgQEAgdm9pZCBfX2FzYW5fc3RvcmU4KHZvaWQgKnApOwogCiBzdGF0aWMgYm9vbCBhbGxfY2FsbGVlX3JlZ3NfdXNlZFs0XSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfTsKIAomIzQzO3N0YXRpYyB2b2lkICp0cmFtcG9saW5lX3NpemVfaW1hZ2U7CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQgaW5pdF90cmFtcG9saW5lX3NpemVfaW1hZ2Uodm9pZCkKJiM0Mzt7CiYjNDM7CXRyYW1wb2xpbmVfc2l6ZV9pbWFnZSA9IGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9NT0RVTEVfREFUQSwgUEFHRV9TSVpFKTsKJiM0MzsJcmV0dXJuIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSA/IDAgOiAtRU5PTUVNOwomIzQzO30KJiM0MztsYXRlX2luaXRjYWxsKGluaXRfdHJhbXBvbGluZV9zaXplX2ltYWdlKTsKJiM0MzsKIHN0YXRpYyB1OCAqZW1pdF9jb2RlKHU4ICpwdHIsIHUzMiBieXRlcywgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpZiAobGVuID09IDEpCkBAIC00MDAwLDI0ICYjNDM7NDAxMCwxNCBAQCBpbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLAogCQkJICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcikKIHsKIAlzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlIGltOwotCXZvaWQgKmltYWdlOwotCWludCByZXQ7CiAKLQkvKiBBbGxvY2F0ZSBhIHRlbXBvcmFyeSBidWZmZXIgZm9yIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkuCi0JICoKLQkgKiBXZSBjYW5ub3QgdXNlIGt2bWFsbG9jIGhlcmUsIGJlY2F1c2Ugd2UgbmVlZCBpbWFnZSB0byBiZSBpbgotCSAqIG1vZHVsZSBtZW1vcnkgcmFuZ2UuCi0JICogU2luY2UgaXQgbXVzdCBiZSB3cml0YWJsZSB1c2UgZXhlY21lbV9hbGxvYyhFWEVDTUVNX01PRFVMRV9EQVRBKQotCSAqIHRoYXQgcmV0dXJucyB3cml0YWJsZSBtZW1vcnkgaW4gdGhlIG1vZHVsZSBhZGRyZXNzIHNwYWNlLgotCSAqLwotCWltYWdlID0gZXhlY21lbV9hbGxvYyhFWEVDTUVNX01PRFVMRV9EQVRBLCBQQUdFX1NJWkUpOwotCWlmICghaW1hZ2UpCiYjNDM7CWlmICghdHJhbXBvbGluZV9zaXplX2ltYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCZhbXA7aW0sIGltYWdlLCBpbWFnZSAmIzQzOyBQQUdFX1NJWkUsIGltYWdlLAotCQkJCQkgICAgbSwgZmxhZ3MsIHRub2RlcywgZnVuY19hZGRyKTsKLQlleGVjbWVtX2ZyZWUoaW1hZ2UpOwotCXJldHVybiByZXQ7CiYjNDM7CXJldHVybiBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgmYW1wO2ltLCB0cmFtcG9saW5lX3NpemVfaW1hZ2UsCiYjNDM7CQkJCQkgICAgIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSAmIzQzOyBQQUdFX1NJWkUsCiYjNDM7CQkJCQkgICAgIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSwgbSwgZmxhZ3MsCiYjNDM7CQkJCQkgICAgIHRub2RlcywgZnVuY19hZGRyKTsKIH0KIAogc3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLCB1OCAqYnVmKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDUyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEpJVCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRpc3NlY3QgdGhlIGRpZmYgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoaXMgbG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb24gZm9yIHRoZSBCUEYgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3Mgb24gYW1kNjQgYXJjaGl0ZWN0dXJlLiBUaGUgbWFpbiB0aHJ1c3QgaXMgdGhlIG1vZGlmaWNhdGlvbiBvZiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4KClNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIGEgc3RhdGljIGJ1ZmZlciwgYHRyYW1wb2xpbmVfc2l6ZV9pbWFnZWAsIHdoaWNoIGlzIGFsbG9jYXRlZCBkdXJpbmcgYm9vdCB2aWEgYGluaXRfdHJhbXBvbGluZV9zaXplX2ltYWdlYCB1c2luZyBgZXhlY21lbV9hbGxvY2AuIFRoaXMgaXMgaW5pdGlhbGl6ZWQgYXMgYSBgbGF0ZV9pbml0Y2FsbGAuIEl0IGFwcGVhcnMgdGhpcyBzaW5nbGUgYnVmZmVyIHdpbGwgdGhlbiBiZSByZXVzZWQuIFByZXZpb3VzbHksIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgIHdhcyBkeW5hbWljYWxseSBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIG1lbW9yeSB1c2luZyBgZXhlY21lbV9hbGxvY2AgYW5kIGBleGVjbWVtX2ZyZWVgIG9uIGVhY2ggY2FsbCB0byBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKClgLiBTbywgaW5zdGVhZCBvZiBhbGxvY2F0aW5nIGFuZCBkZWFsbG9jYXRpbmcgbWVtb3J5IG9uIHRoZSBmbHksIHdlJiMzOTtyZSBub3cgcmV1c2luZyBhIHByZS1hbGxvY2F0ZWQgYnVmZmVyLiBUaGlzIGNhbiBiZSBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIHdpbiBieSBhdm9pZGluZyB0aG9zZSByZXBlYXRlZCBhbGxvY2F0aW9ucy4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGdldCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250ZXh0IGFyb3VuZCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG9mdGVuIGl0JiMzOTtzIGNhbGxlZCwgd2hhdCBsb2NrcyBhcmUgaW52b2x2ZWQsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGltcGFjdCBvZiB0aGlzIGNoYW5nZSB3aWxsIGJlLiBJJiMzOTtsbCBwcm9iYWJseSB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgIGFuZCBpdHMgY2FsbGVycywgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyBvciByYWNlIGNvbmRpdGlvbnMuIEkgYWxzbyB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgY2hhbmdlcyB0byB0aGUgdHJhbXBvbGluZSBzaXplLCBmb3IgZXhhbXBsZSwgdG8gZW5zdXJlIGl0IGRvZXMgbm90IG92ZXJydW4gdGhlIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGJ1ZmZlci4gVGhpcyBhbGwgbG9va3MgcmVsYXRpdmVseSBzYWZlLCBidXQgYmVzdCBwcmFjdGljZSBpcyB0byBjb25maXJtIHRoYXQgYW55IGFzc3VtcHRpb25zIHJlZ2FyZGluZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgY29uY3VycmVuY3kgc3RpbGwgaG9sZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmNoX2JwZl90cmFtcG9saW5lX3NpemUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9Mjk4OD1ib29sIGJwZl9qaXRfc3VwcG9ydHNfZnNlc3Npb24odm9pZClcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yOTkyLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6Mjk5MzppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjk5NC1cdFx0XHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MjEzOD1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIxNzUtXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIxNzY6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjE3Ny1cdFx0XHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9ODEyPXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltYWdlLFxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTE5MS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6MTE5MjppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMTkzLVx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMDMwPXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzM2LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzM3OmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMzgtXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTI2OTg9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTMwMTUtXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjMwMTY6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMzAxNy1cdFx0XHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqb3JpZ19jYWxsKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zOTgwPWludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmltYWdlLCB2b2lkICppbWFnZV9lbmQsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMDgtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6NDAwOTppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMTAtXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTEzMTc9aW50IF9fbXVzdF9jaGVjayBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MTMxODppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuaW5jbHVkZS9saW51eC9icGYuaC0xMzE5LVx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz02Mzc9aW50IGJwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY1My1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2NTQ6XHRzaXplID0gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKG1vZGVsLCBmbGFncywgdG5vZGVzLCBzdHViX2Z1bmMpO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY1NS1cdGlmIChzaXplIFx1MDAzYz0gMClcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz03MTA9c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NjEtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3NjI6XHRzaXplID0gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKFx1MDAyNnRyLVx1MDAzZWZ1bmMubW9kZWwsIHRyLVx1MDAzZWZsYWdzLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzYzLVx0XHRcdFx0XHR0bm9kZXMsIHRyLVx1MDAzZWZ1bmMuYWRkcik7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTUwOD1pbnQgX193ZWFrIGFyY2hfcHJvdGVjdF9icGZfdHJhbXBvbGluZSh2b2lkICppbWFnZSwgdW5zaWduZWQgaW50IHNpemUpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUxMy1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1MTQ6aW50IF9fd2VhayBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTE1LVx0XHRcdFx0ICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2OTEKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgeDg2IEJQRiBKSVQgVHJhbXBvbGluZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciBzcGVjaWZpY3MsIHBhcnRpY3VsYXJseSB0aGUgdHJhbXBvbGluZSBtZWNoYW5pc20uIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgIGFuZCBmb2N1cyBvbiBob3cgdGhlIHRyYW1wb2xpbmUgaXMgc2l6ZWQgYW5kIHByZXBhcmVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBhbmQgaG93IGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgd29ya3MuIFVuZGVyc3RhbmRpbmcgdGhlc2UgdHdvIHBpZWNlcyBpcyBrZXkgdG8gZ3Jhc3BpbmcgaG93IHRoZSBKSVQgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJiMzOTtzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmZWF0dXJlcyBhbmQgd2hhdCBvcHRpbWl6YXRpb25zIGFyZSBwb3NzaWJsZS4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHJpcGUgZm9yIGltcHJvdmVtZW50IHJlbGF0ZWQgdG8gdGhlIHRyYW1wb2xpbmUmIzM5O3Mgb3ZlcmhlYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5ODA6XHRpbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICppbWFnZSwgdm9pZCAqaW1hZ2VfZW5kLFxuMzk4MTpcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4zOTgyOlx0XHRcdFx0XHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsXG4zOTgzOlx0XHRcdFx0XHR2b2lkICpmdW5jX2FkZHIpXG4zOTg0Olx0e1xuMzk4NTpcdFx0dm9pZCAqcndfaW1hZ2UsICp0bXA7XG4zOTg2Olx0XHRpbnQgcmV0O1xuMzk4NzpcdFx0dTMyIHNpemUgPSBpbWFnZV9lbmQgLSBpbWFnZTtcbjM5ODg6XHRcbjM5ODk6XHRcdC8qIHJ3X2ltYWdlIGRvZXNuJiMzOTt0IG5lZWQgdG8gYmUgaW4gbW9kdWxlIG1lbW9yeSByYW5nZSwgc28gd2UgY2FuXG4zOTkwOlx0XHQgKiB1c2Uga3ZtYWxsb2MuXG4zOTkxOlx0XHQgKi9cbjM5OTI6XHRcdHJ3X2ltYWdlID0ga3ZtYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XG4zOTkzOlx0XHRpZiAoIXJ3X2ltYWdlKVxuMzk5NDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjM5OTU6XHRcbjM5OTY6XHRcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKGltLCByd19pbWFnZSwgcndfaW1hZ2UgJiM0Mzsgc2l6ZSwgaW1hZ2UsIG0sXG4zOTk3Olx0XHRcdFx0XHRcdCAgICBmbGFncywgdG5vZGVzLCBmdW5jX2FkZHIpO1xuMzk5ODpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjM5OTk6XHRcdFx0Z290byBvdXQ7XG40MDAwOlx0XG40MDAxOlx0XHR0bXAgPSBicGZfYXJjaF90ZXh0X2NvcHkoaW1hZ2UsIHJ3X2ltYWdlLCBzaXplKTtcbjQwMDI6XHRcdGlmIChJU19FUlIodG1wKSlcbjQwMDM6XHRcdFx0cmV0ID0gUFRSX0VSUih0bXApO1xuNDAwNDpcdG91dDpcbjQwMDU6XHRcdGt2ZnJlZShyd19pbWFnZSk7XG40MDA2Olx0XHRyZXR1cm4gcmV0O1xuNDAwNzpcdH1cbjQwMDg6XHRcbjQwMDk6XHRpbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuNDAxMDpcdFx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXG40MDExOlx0e1xuNDAxMjpcdFx0c3RydWN0IGJwZl90cmFtcF9pbWFnZSBpbTtcbjQwMTM6XHRcbjQwMTQ6XHRcdGlmICghdHJhbXBvbGluZV9zaXplX2ltYWdlKVxuNDAxNTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjQwMTY6XHRcbjQwMTc6XHRcdHJldHVybiBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcdTAwMjZpbSwgdHJhbXBvbGluZV9zaXplX2ltYWdlLFxuNDAxODpcdFx0XHRcdFx0XHQgICAgIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSAmIzQzOyBQQUdFX1NJWkUsXG40MDE5Olx0XHRcdFx0XHRcdCAgICAgdHJhbXBvbGluZV9zaXplX2ltYWdlLCBtLCBmbGFncyxcbjQwMjA6XHRcdFx0XHRcdFx0ICAgICB0bm9kZXMsIGZ1bmNfYWRkcik7XG40MDIxOlx0fVxuNDAyMjpcdFxuNDAyMzpcdHN0YXRpYyBpbnQgZW1pdF9icGZfZGlzcGF0Y2hlcih1OCAqKnBwcm9nLCBpbnQgYSwgaW50IGIsIHM2NCAqcHJvZ3MsIHU4ICppbWFnZSwgdTggKmJ1ZilcbjQwMjQ6XHR7XG40MDI1Olx0XHR1OCAqamdfcmVsb2MsICpwcm9nID0gKnBwcm9nO1xuNDAyNjpcdFx0aW50IHBpdm90LCBlcnIsIGpnX2J5dGVzID0gMTtcbjQwMjc6XHRcdHM2NCBqZ19vZmZzZXQ7XG40MDI4Olx0XG40MDI5Olx0XHRpZiAoYSA9PSBiKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc4MAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbnMgaW4gQlBGIFRyYW1wb2xpbmUgUHJlcGFyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2NydXRpbml6ZSBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGFuZCwgc3BlY2lmaWNhbGx5LCBob3cgaXQgaW50ZXJhY3RzIHdpdGggYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAuIEkgbmVlZCB0byBhc2NlcnRhaW4gd2hldGhlciBjb25jdXJyZW50IGNhbGxzIHRvIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgIGFyZSBldmVuIHBvc3NpYmxlLCBhbmQgaWYgdGhleSBhcmUsIHdoZXRoZXIgYW55IGFwcHJvcHJpYXRlIGxvY2tpbmcgbWVjaGFuaXNtcyBhcmUgaW4gcGxhY2UgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuCgpXYWl0IGEgbWludXRlLCBzb21ldGhpbmcmIzM5O3MgcGluZ2luZyBteSByYWRhci4gVGhlIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgLi4uIHRoYXQmIzM5O3MgYSAqc2luZ2xlKiwgc3RhdGljIGJ1ZmZlciwgYW5kIGl0cyBzaXplIGlzLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGEgUEFHRV9TSVpFLiBSaWdodC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcHJvYmxlbSBjb3VsZCBiZS4KClNvLCAqd2hlbiogYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgaXMgaW52b2tlZCwgYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpcyAqd3JpdGluZyogaW50byBgdHJhbXBvbGluZV9zaXplX2ltYWdlYC4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHNldHVwIHRoYXQgc2NyZWFtcyByYWNlIGNvbmRpdGlvbiBwb3RlbnRpYWwuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIHZlcmlmeSBob3cgdGhlIGJ1ZmZlciBpcyBoYW5kbGVkIGFuZCBpZiBjb25jdXJyZW50IGFjY2Vzc2VzIGFyZSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNTU1PXN0YXRpYyBpbnQgaW52b2tlX2JwZl9tb2RfcmV0KGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcHJvZyxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY1Ni0gKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNjU3OnN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltYWdlLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2NTgtXHRcdFx0XHRcdCB2b2lkICpyd19pbWFnZV9lbmQsIHZvaWQgKmltYWdlLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zOTgwPWludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmltYWdlLCB2b2lkICppbWFnZV9lbmQsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM5OTUtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mzk5NjpcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKGltLCByd19pbWFnZSwgcndfaW1hZ2UgJiM0Mzsgc2l6ZSwgaW1hZ2UsIG0sXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzk5Ny1cdFx0XHRcdFx0ICAgIGZsYWdzLCB0bm9kZXMsIGZ1bmNfYWRkcik7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTQwMDk9aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDAxNi1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0MDE3Olx0cmV0dXJuIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKFx1MDAyNmltLCB0cmFtcG9saW5lX3NpemVfaW1hZ2UsXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDAxOC1cdFx0XHRcdFx0ICAgICB0cmFtcG9saW5lX3NpemVfaW1hZ2UgJiM0MzsgUEFHRV9TSVpFLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgVXNhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAuIE15IGZvY3VzIGlzIG9uIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKnVzZWQqLiBJIHNlZSB0aGF0IGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGFuZCBgYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lYCBib3RoIGNhbGwgaXQuIFRoYXQgdGVsbHMgbWUgdGhhdCB0aGlzIHNpemUgY2FsY3VsYXRpb24gaXMgY3J1Y2lhbCBmb3IgdGhlc2UgdHJhbXBvbGluZS1yZWxhdGVkIG9wZXJhdGlvbnMuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpjb250ZXh0KiBvZiB0aGVzZSBjYWxscy4gVGltZSB0byBjaGVjayB0aGUgc291cmNlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgYW5kIGBrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNgIHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1dGlsaXppbmcgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBpbnNpZ2h0ZnVsIGRlcGVuZGVuY2llcyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmNoX2JwZl90cmFtcG9saW5lX3NpemUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NjM3PWludCBicGZfc3RydWN0X29wc19wcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLFxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NTMtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjU0Olx0c2l6ZSA9IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShtb2RlbCwgZmxhZ3MsIHRub2Rlcywgc3R1Yl9mdW5jKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NTUtXHRpZiAoc2l6ZSBcdTAwM2M9IDApXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NzEwPXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzYxLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzYyOlx0c2l6ZSA9IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShcdTAwMjZ0ci1cdTAwM2VmdW5jLm1vZGVsLCB0ci1cdTAwM2VmbGFncyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc2My1cdFx0XHRcdFx0dG5vZGVzLCB0ci1cdTAwM2VmdW5jLmFkZHIpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1MDg9aW50IF9fd2VhayBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MTMtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTE0OmludCBfX3dlYWsgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUxNS1cdFx0XHRcdCAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQxMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVHJhbXBvbGluZSBhbmQgSklUIENvbXBpbGF0aW9uIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBjb25maXJtIG15IGluaXRpYWwgaHlwb3RoZXNpczogaXMgdGhpcyBCUEYgdHJhbXBvbGluZSBhbmQgSklUIGNvbXBpbGF0aW9uIGZ1bmN0aW9uYWxpdHkgcmVhY2hhYmxlIHdpdGhpbiBhIFFFTVUvYW1kNjQgZW52aXJvbm1lbnQ/IFllcywgQlBGIGlzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgTGludXgga2VybmVsLCBhbmQgbmF0dXJhbGx5LCBpdCBleGVjdXRlcyBvbiBhbWQ2NCB3aXRoaW4gUUVNVS4gVGhhdCYjMzk7cyBhIGdpdmVuLiBOb3csIGxldCYjMzk7cyBkaWcgaW50byBTZWN0aW9uIDMgb2YgdGhlIHJlbGV2YW50IGd1aWRlbGluZXMuCgpUaGUgZ3VpZGVsaW5lcyBzdGF0ZSB3ZSBzaG91bGQgY29uc2lkZXIgcGF0Y2hlcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGlmIHRoZXkgdG91Y2ggcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgYW5kIHdlIGhhdmUgYSBmZXcga2V5IGFyZWFzIHRvIGZvY3VzIG9uOiBjb3JlIHN1YnN5c3RlbXMgYW5kIHJlZmFjdG9yaW5ncy9jb2RlIGNsZWFudXBzLiBUaGUgY3J1Y2lhbCBwaWVjZSBpcyB0aGF0IHRoaXMgcGF0Y2ggKmRvZXMqIG1vZGlmeSBCUEYgSklUIGNvZGUgZm9yIHg4NiBzcGVjaWZpY2FsbHkgd2l0aGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBUaGlzIGNvZGUgZ2V0cyBleGVjdXRlZCB3aGVuZXZlciBCUEYgdHJhbXBvbGluZXMgYXJlIGNyZWF0ZWQgb3Igc2l6ZWQsIHdoaWNoIGlzIGNvbW1vbiBkdXJpbmcgZmV4aXQsIGZlbnRyeSwgc3RydWN0X29wcywgYW5kIG90aGVyIHNpbWlsYXIgb3BlcmF0aW9ucy4KCkZ1cnRoZXJtb3JlLCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIHRoZXkgYXJlIHNoYXJpbmcgdGhlIHN0YXRpYyBnbG9iYWwgYnVmZmVyIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgIGFjcm9zcyBhbGwgY2FsbGVycyBvZiBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCB3aXRob3V0IHBlci1jYWxsIGFsbG9jYXRpb24sIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaW50ZXJlc3RpbmcgcmFjZSBjb25kaXRpb25zLiBXaGlsZSB0aGV5IG1heSBiZSBzZXJpYWxpemVkLCB0aGlzIGNvdWxkIHN0aWxsIGhhdmUgYW4gaW1wYWN0IG9uIGhvdyB0aGUgQlBGIHRyYW1wb2xpbmVzIGFyZSBjcmVhdGVkLiBTaGFyaW5nIGEgYnVmZmVyIGxpa2UgdGhhdCBhbmQgbWVzc2luZyB3aXRoIGhvdyBtZW1vcnkgaXMgdXNlZCB3aXRoaW4gQlBGIGlzIGFsd2F5cyB3b3J0aCBhIHNlY29uZCBsb29rLgoKRmluYWxseSwganVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBLY29uZmlnIG9wdGlvbnMgcmVxdWlyZWQgZm9yIHRoaXMgZmlsZSBhbmQgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYGFyY2gveDg2L25ldC9NYWtlZmlsZWAgb3Igd2hhdGV2ZXIgYnVpbGQgZmlsZSBgYnBmX2ppdF9jb21wLmNgIGlzIGNvbXBpbGVkIGJ5LCB0byBzZWUgaG93IHRvIGVuYWJsZSB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X2NvbXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9NYWtlZmlsZT02PWlmZXEgKCQoQ09ORklHX1g4Nl8zMikseSlcbmFyY2gveDg2L25ldC9NYWtlZmlsZTo3OiAgICAgICAgb2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBicGZfaml0X2NvbXAzMi5vXG5hcmNoL3g4Ni9uZXQvTWFrZWZpbGUtOC1lbHNlXG5hcmNoL3g4Ni9uZXQvTWFrZWZpbGU6OTogICAgICAgIG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wLm8gYnBmX3RpbWVkX21heV9nb3RvLm9cbmFyY2gveDg2L25ldC9NYWtlZmlsZS0xMC1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mjk2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBCUEYgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcyBCUEYgc2l0dWF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBlbmFibGVkLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgYmFzaWNzIOKAkyBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB2ZXJpZnkgdGhlIHN0YXR1cyBvZiBgQ09ORklHX0JQRl9KSVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gS25vd2luZyB0aGUgc3RhdGUgb2YgdGhvc2UgdHdvIG9wdGlvbnMgaXMgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4gSXQmIzM5O2xsIHRlbGwgbWUgaWYgdGhlIEpJVCBjb21waWxlciBhbmQgdGhlIHN5c3RlbSBjYWxsIGludGVyZmFjZSBhcmUgZXZlbiBhdmFpbGFibGUuIFdpdGhvdXQgdGhvc2UsIEkmIzM5O20gd2FzdGluZyBteSB0aW1lIGxvb2tpbmcgZWxzZXdoZXJlLiBUaGlzIGlzIHRoZSBmb3VuZGF0aW9uOyBmcm9tIGhlcmUsIEkgY2FuIGRldGVybWluZSB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMuIEl0JiMzOTtzIGEgcXVpY2sgY2hlY2sgdGhhdCB3aWxsIHNhdmUgbWUgdGltZSBkb3duIHRoZSByb2FkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0pJVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MzE9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTQ1LVxua2VybmVsL2JwZi9LY29uZmlnOjQ2OmNvbmZpZyBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctNDctXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTYxLVxua2VybmVsL2JwZi9LY29uZmlnOjYyOmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9LY29uZmlnLTYzLVx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy03Mi1cbmtlcm5lbC9icGYvS2NvbmZpZzo3Mzpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXG5rZXJuZWwvYnBmL0tjb25maWctNzQtXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXG4tLVxua2VybmVsL2JwZi9LY29uZmlnPTk2PWNvbmZpZyBCUEZfTFNNXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTEwNy1cbmtlcm5lbC9icGYvS2NvbmZpZzoxMDg6Y29uZmlnIEJQRl9KSVRfS0FTQU5cbmtlcm5lbC9icGYvS2NvbmZpZy0xMDktXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgQlBGIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBMZXQmIzM5O3MgemVybyBpbiBvbiBga2VybmVsL2JwZi9LY29uZmlnYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIGBCUEZfSklUYCBhbmQgYEJQRl9TWVNDQUxMYCwgcGFydGljdWxhcmx5IGhvdyB0aGV5JiMzOTtyZSBleHBvc2VkIGFuZCBjb25kaXRpb25lZC4gTXkgZm9jdXMgaXMgb24gZW5zdXJpbmcgdGhlIHJpZ2h0IGZlYXR1cmUgZmxhZ3MgYXJlIGVuYWJsZWQgdG8gc3VwcG9ydCB0aGUgZGVzaXJlZCBCUEYgdXNlIGNhc2VzLCBhbmQgaG93IHRoZSBzeXNjYWxsIGludGVyZmFjZSBpcyBhZmZlY3RlZCBieSBKSVQgY29tcGlsYXRpb24uIEkgd2FudCB0byBzZWUgaWYgdGhlcmUgaGF2ZSBiZWVuIGFueSByZWNlbnQgY2hhbmdlcyB0aGF0IGNvdWxkIGltcGFjdCBwZXJmb3JtYW5jZSBvciBzZWN1cml0eSBwb3N0dXJlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc3RhdGVzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIHNwZWNpZmljIEJQRiBwcm9ncmFtcyBJJiMzOTttIHdvcmtpbmcgd2l0aC4gVGhpcyB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzIGluIHRoZSBjdXJyZW50IHByb2plY3QsIGFzIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBzeXN0ZW0gSSBhbSBkZXZlbG9waW5nIHdvcmtzIGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcbiAgMzE6XHRjb25maWcgQlBGX1NZU0NBTExcbiAgMzI6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4gIDMzOlx0XHRzZWxlY3QgQlBGXG4gIDM0Olx0XHRzZWxlY3QgSVJRX1dPUktcbiAgMzU6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuICAzNjpcdFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxuICAzNzpcdFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbiAgMzg6XHRcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG4gIDM5Olx0XHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbiAgNDA6XHRcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG4gIDQxOlx0XHRkZWZhdWx0IG5cbiAgNDI6XHRcdGhlbHBcbiAgNDM6XHRcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xuICA0NDpcdFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cbiAgNDU6XHRcbiAgNDY6XHRjb25maWcgQlBGX0pJVFxuICA0NzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuICA0ODpcdFx0ZGVwZW5kcyBvbiBCUEZcbiAgNDk6XHRcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXG4gIDUwOlx0XHRzZWxlY3QgRVhFQ01FTVxuICA1MTpcdFx0aGVscFxuICA1MjpcdFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXG4gIDUzOlx0XHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxuICA1NDpcdFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXG4gIDU1Olx0XHQgIHByb2dyYW1zLlxuICA1NjpcdFxuICA1NzpcdFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcbiAgNTg6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXG4gIDU5Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcbiAgNjA6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxuICA2MTpcdFxuICA2MjpcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxuICA2MzpcdFx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuICA2NDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgSEFWRV9FQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX0pJVFxuICA2NTpcdFx0aGVscFxuICA2NjpcdFx0ICBFbmFibGVzIEJQRiBKSVQgYW5kIHJlbW92ZXMgQlBGIGludGVycHJldGVyIHRvIGF2b2lkIHNwZWN1bGF0aXZlXG4gIDY3Olx0XHQgIGV4ZWN1dGlvbiBvZiBCUEYgaW5zdHJ1Y3Rpb25zIGJ5IHRoZSBpbnRlcnByZXRlci5cbiAgNjg6XHRcbiAgNjk6XHRcdCAgV2hlbiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04gaXMgZW5hYmxlZCwgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjkzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBmb3IgQlBGIEV2ZW50IERlcGVuZGVuY2llcyBpbiBUcmFtcG9saW5lcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRyYW1wb2xpbmVzIGFuZCBob3cgdGhleSYjMzk7cmUgaW1wbGVtZW50ZWQuIFRoZSB0YXNrIGF0IGhhbmQgaW52b2x2ZXMgZmlndXJpbmcgb3V0IHRoZSBkZXBlbmRlbmNpZXMgb2Ygb3VyIHRyYW1wb2xpbmVzLCBpbiB0aGlzIGNhc2UgbG9va2luZyBhdCB3aGV0aGVyIHdlIG5lZWQgYEJQRl9FVkVOVFNgIG9yIGFueSBvdGhlciByZWxldmFudCBtZWNoYW5pc21zIGZvciB0aGVtIHRvIHdvcmsgcHJvcGVybHkuIEdpdmVuIHRoYXQgdHJhbXBvbGluZXMgaW52b2x2ZSByZWRpcmVjdGluZyBleGVjdXRpb24gZmxvdywgYW5kIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQlBGLCBteSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBsb3ctbGV2ZWwgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gVG8gdW5kZXJzdGFuZCB0aGlzIHByb3Blcmx5LCBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgdG8gc2VlIGhvdyB0aGUgY29yZSB0cmFtcG9saW5lIGZ1bmN0aW9uYWxpdHkgaXMgaGFuZGxlZC4gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCBhbnkgaW50ZXJhY3Rpb24gYmV0d2VlbiBvcGVyYXRpb25zIHVzZWQgdG8gZGVmaW5lIHRoZXNlIGluc3RydWN0aW9ucy4gVGhlcmVmb3JlLCBgYnBmX3N0cnVjdF9vcHMuY2AgaXMgdGhlIG5leHQgcGxhY2UgSSBuZWVkIHRvIHJldmlldy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciBldmVudCBob29rcyBvciBzcGVjaWZpYyBzdHJ1Y3Qgb3BlcmF0aW9ucyBhcmUgcGFydCBvZiB0aGlzIHByb2Nlc3MgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG1pc3NpbmcgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgaGluZGVyIG91ciBnb2FsLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBnZXR0aW5nIHRoZSBhcmNoaXRlY3R1cmUgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyYW1wb2xpbmUubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGlzYXNtLm8gbXByb2cub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTU3PXN0YXRpYyB2b2lkIHRyYW1wb2xpbmVfdW5sb2NrKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNjEtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo2MjpzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTYzLVx0aW50ICgqcmVnaXN0ZXJfZmVudHJ5KShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqZGF0YSk7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NzA9c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcxOlx0XHRcdFx0IGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcywgdm9pZCAqZGF0YSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MjpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX29wcztcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTczLVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTk4PXN0YXRpYyBpbnQgYnBmX3RyYW1wX2Z0cmFjZV9vcHNfZnVuYyhzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCB1bnNpZ25lZCBsb25nIGlwLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1Ny1cdFx0XHRyZXQgPSBicGZfdHJhbXBvbGluZV91cGRhdGUodHIsIGZhbHNlIC8qIGxvY2tfZGlyZWN0X211dGV4ICovLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU4Olx0XHRcdFx0XHRcdCAgICBcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTktXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NC1cdFx0XHRyZXQgPSBicGZfdHJhbXBvbGluZV91cGRhdGUodHIsIGZhbHNlIC8qIGxvY2tfZGlyZWN0X211dGV4ICovLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY1Olx0XHRcdFx0XHRcdCAgICBcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjYtXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQ3Mz1zdGF0aWMgaW50IHJlZ2lzdGVyX2ZlbnRyeShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy01MDAtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo1MDE6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9vcHMgPSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy01MDItXHQucmVnaXN0ZXJfZmVudHJ5ICAgPSByZWdpc3Rlcl9mZW50cnksXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NzEwPXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MTE6XHRcdFx0XHQgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyAqb3BzLCB2b2lkICpkYXRhKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzEyLXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05NDI9c3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTQ0LVx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk0NTpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk0Ni1cdFx0XHRcdCAgICAgIHZvaWQgKmRhdGEpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTkwPWludCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk5Ni1cdHRyYW1wb2xpbmVfbG9jayh0cik7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5OTc6XHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhub2RlLCB0ciwgdGd0X3Byb2csIFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk5OC1cdHRyYW1wb2xpbmVfdW5sb2NrKHRyKTtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xMDAyPXN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAwNC1cdFx0XHRcdFx0c3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwMDU6XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMDYtXHRcdFx0XHRcdHZvaWQgKmRhdGEpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTAyNz1pbnQgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMzMtXHR0cmFtcG9saW5lX2xvY2sodHIpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTAzNDpcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2cobm9kZSwgdHIsIHRndF9wcm9nLCBcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDM1LVx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTExMjM9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExNjUtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMTY2Olx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXHUwMDI2c2hpbV9saW5rLVx1MDAzZWxpbmsubm9kZSwgdHIsIE5VTEwsIFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExNjctXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2MDY9c3RhdGljIGludCBtb2RpZnlfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjIwLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTYyMTpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX211bHRpX29wcyA9IHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MjItXHQucmVnaXN0ZXJfZmVudHJ5ICAgPSByZWdpc3Rlcl9mZW50cnlfbXVsdGksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTQyCgkJCQkJCQlvdXRwdXQ6IDE4MgoJCQkJCQkJdGhvdWdodHM6IDg2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogRGF0YSBSYWNlIGluIEJQRiBUcmFtcG9saW5lIFVwZGF0ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIGNvbmNlcm5pbmcuIGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGhhcyBhIGxvY2sgYXQgdGhlIHRyYW1wb2xpbmUgbGV2ZWwuIEJ1dCBlYWNoIHRyYW1wb2xpbmUgaGFzIGl0cyBvd24gbXV0ZXguIFRoaXMgbWVhbnMgdHdvIHNlcGFyYXRlIHRocmVhZHMgY291bGQgYmUgdXBkYXRpbmcgZGlmZmVyZW50IHRyYW1wb2xpbmVzIHNpbXVsdGFuZW91c2x5LiBXaGVuIHRoaXMgaGFwcGVucywgYm90aCB0aHJlYWRzIGNvdWxkIGNhbGwgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgY29uY3VycmVudGx5LCBhbmQgY3J1Y2lhbGx5LCB0aGV5IGNvdWxkIHdyaXRlIHRvIHRoZSBzaGFyZWQgYHRyYW1wb2xpbmVfc2l6ZV9pbWFnZWAgYXQgdGhlIHNhbWUgdGltZS4gVGhhdCYjMzk7cyBhIHRleHRib29rIGRhdGEgcmFjZSByaWdodCB0aGVyZSBvbiBgdHJhbXBvbGluZV9zaXplX2ltYWdlYC4gVGhpcyBpcyBhbiBvYnZpb3VzIGFyZWEgZm9yIGZ1enppbmcuCgpJIGFsc28gbmVlZCB0byBjaGVjayBga2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jYC4gSXQgbG9va3MgbGlrZSBgYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lYCBpcyBjYWxsZWQgd2hlbiBzdHJ1Y3Rfb3BzIG1hcHMgYXJlIGNyZWF0ZWQgb3IgdXBkYXRlZC4gVGhpcyBmdW5jdGlvbiBhbHNvIHNlZW1zIHRvIGNhbGwgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAuIFRoaXMgcGF0aCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgc3RyZW5ndGhlbnMgdGhlIGNhc2UgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hpY2ggc3ltYm9scyBhcmUgcmVsZXZhbnQgZm9yIHRoaXMuIExvb2tpbmcgYXQgRm9jdXNTeW1ib2xzLCBoZXJlJiMzOTtzIHdoYXQgc3RhbmRzIG91dDoKCjEuICBgaW5pdF90cmFtcG9saW5lX3NpemVfaW1hZ2VgOiBUaGlzIGlzIGFuIGluaXRjYWxsLCBidXQgaXQmIzM5O3Mgc3RhdGljIGFuZCBvbmx5IGNhbGxlZCBhdCBib290LCBzbyBsaWtlbHkgbm90IGEgY29uY2VybiBmb3IgYSBydW50aW1lIGRhdGEgcmFjZS4KMi4gIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgOiBUaGlzIGlzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiB0aGF0JiMzOTtzIGV4cG9ydGVkIGluIGEgaGVhZGVyIGFuZCBjYWxsZWQgYnkgQlBGLiBUaGlzIGlzIGF0IHRoZSBoZWFydCBvZiB0aGUgaXNzdWUhCjMuICBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgOiBUaGlzIGlzIGNhbGxlZCBieSBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYC4KNC4gIGBicGZfdHJhbXBvbGluZV91cGRhdGVgOiBUaGlzIGlzIHRoZSBjYWxsZXIgb2YgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYC4KNS4gIGBicGZfc3RydWN0X29wc19wcmVwYXJlX3RyYW1wb2xpbmVgOiBUaGlzIGlzIGFsc28gYSBjYWxsZXIgb2YgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgaW4gYGtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY2AuCgpDaGVja2luZyBzeW1ib2wgdmlzaWJpbGl0eSwgYGluaXRfdHJhbXBvbGluZV9zaXplX2ltYWdlYCBpcyBzdGF0aWMuIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgIGlzIG5vbi1zdGF0aWMgYW5kIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGlzIHN0YXRpYyBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgaXMgbm9uLXN0YXRpYyBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gYGJwZl90cmFtcG9saW5lX3VwZGF0ZWAgaXMgc3RhdGljLCBjYWxsZWQgYnkgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AsIGBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ2AsIGV0Yy4gYGJwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZWAgaXMgbm9uLXN0YXRpYyBpbiBga2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jYC4KCldlJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBjZXJ0YWluIGNvbmZpZ3MgYXJlIGVuYWJsZWQuIFVuZGVyIEVuYWJsZUNvbmZpZ3MsIGBCUEZfSklUYCAoYW5kIGBCUEZfU1lTQ0FMTGAsIGFuZCBgQlBGYCkgbXVzdCBiZSBlbmFibGVkLgoKU3BlY2lmaWNhbGx5OgoKLSAgIGBDT05GSUdfQlBGX0pJVGAKLSAgIGBDT05GSUdfQlBGX1NZU0NBTExgCi0gICBgQ09ORklHX0JQRmAKCkRvdWJsZS1jaGVja2luZyBpbiB0aGUgTWFrZWZpbGVzOiBgYXJjaC94ODYvbmV0L01ha2VmaWxlYCBjb25maXJtcyBgb2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBicGZfaml0X2NvbXAub2AgYW5kIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBzaG93cyBgb2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSB0cmFtcG9saW5lLm9gLCBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnRmLm9gIGV0Yy4gU28geWVzOgoKLSAgIGBCUEZfSklUYAotICAgYEJQRl9TWVNDQUxMYAoKUmVjYXAgb2YgRm9jdXNTeW1ib2xzOgoKLSAgIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgCi0gICBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgCi0gICBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYAotICAgYGJwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZWAKCkdpdmVuIHRoaXMgdGhvcm91Z2ggaW52ZXN0aWdhdGlvbiwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGZ1enppbmcgdmVyZGljdC4gSXQgYWxsIGNoZWNrcyBvdXQuIE5vdyBJIGNhbiBmb3JtdWxhdGUgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcmNoX2JwZl90cmFtcG9saW5lX3NpemUmIzM0OywKICAgICYjMzQ7X19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUmIzM0OywKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfdXBkYXRlJiMzNDssCiAgICAmIzM0O2JwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwZXItY2FsbCBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGggYSBzaW5nbGUgc3RhdGljIGdsb2JhbCBidWZmZXIgKHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSkgZm9yIGNhbGN1bGF0aW5nIEJQRiB0cmFtcG9saW5lIHNpemUgaW4gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKCkuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBpbiB0aGUgeDg2IEJQRiBKSVQgc3Vic3lzdGVtIHdoZW4gdXBkYXRpbmcgQlBGIHRyYW1wb2xpbmVzIG9yIHByZXBhcmluZyBCUEYgc3RydWN0X29wcy4gRnV6emluZyBjYW4gdmVyaWZ5IGNvcnJlY3RuZXNzLCBtZW1vcnkgc2FmZXR5LCBhbmQgY29uY3VycmVuY3kgYmVoYXZpb3IgYWNyb3NzIEJQRiB0cmFtcG9saW5lIHVwZGF0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcmNoX2JwZl90cmFtcG9saW5lX3NpemUmIzM0OywKICAgICYjMzQ7X19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUmIzM0OywKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfdXBkYXRlJiMzNDssCiAgICAmIzM0O2JwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBwZXItY2FsbCBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGggYSBzaW5nbGUgc3RhdGljIGdsb2JhbCBidWZmZXIgKHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSkgZm9yIGNhbGN1bGF0aW5nIEJQRiB0cmFtcG9saW5lIHNpemUgaW4gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKCkuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBpbiB0aGUgeDg2IEJQRiBKSVQgc3Vic3lzdGVtIHdoZW4gdXBkYXRpbmcgQlBGIHRyYW1wb2xpbmVzIG9yIHByZXBhcmluZyBCUEYgc3RydWN0X29wcy4gRnV6emluZyBjYW4gdmVyaWZ5IGNvcnJlY3RuZXNzLCBtZW1vcnkgc2FmZXR5LCBhbmQgY29uY3VycmVuY3kgYmVoYXZpb3IgYWNyb3NzIEJQRiB0cmFtcG9saW5lIHVwZGF0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBkeW5hbWljIHBlci1jYWxsIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiAodmlhIGV4ZWNtZW1fYWxsb2MvZXhlY21lbV9mcmVlKSBvZiBhIGR1bW15IHNjcmF0Y2ggYnVmZmVyIGluIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZSgpIHdpdGggYSBzdGF0aWNhbGx5IHByZS1hbGxvY2F0ZWQgcGFnZSBidWZmZXIgKHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSkuIFRoZSBidWZmZXIgaXMgdXNlZCBzdHJpY3RseSBhcyBhIHdyaXRlLW9ubHkgc2luayBmb3IgaW5zdHJ1Y3Rpb24gZW1pc3Npb24gZHVyaW5nIGRyeS1ydW4gdHJhbXBvbGluZSBnZW5lcmF0aW9uIGluIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkgdG8gZGV0ZXJtaW5lIHRoZSByZXF1aXJlZCBidWZmZXIgc2l6ZS4gSXRzIGNvbnRlbnRzIGFyZSBuZXZlciByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YWNrIHZhcmlhYmxlcyBzdWNoIGFzICYjMzk7aW0mIzM5OyBhcmUgcGFzc2VkIHRvIHNhdGlzZnkgZnVuY3Rpb24gcGFyYW1ldGVycyBhbmQgYXJlIG5vdCByZWFkIHVuaW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWssIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUgaXMgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQ7IHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgc3VmZmljZXMgZm9yIGFueSBtZW1vcnkgc2FmZXR5IHZlcmlmaWNhdGlvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk3OGFkYmM4MGU1Y2E2MWIzYzdmMTcwNDg3NWUwZGZmYThjOWI5M2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDIwOjMwOjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IGJiYTM1MTk0NDIwMmMuLjEzZWYwZDUzY2EyOTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTksNiAmIzQzOzksNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2ZpbHRlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX3ZsYW4uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmX3ZlcmlmaWVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtb3J5LmgmZ3Q7CkBAIC0zNSw2ICYjNDM7MzYsMTUgQEAgdm9pZCBfX2FzYW5fc3RvcmU4KHZvaWQgKnApOwogCiBzdGF0aWMgYm9vbCBhbGxfY2FsbGVlX3JlZ3NfdXNlZFs0XSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfTsKIAomIzQzO3N0YXRpYyB2b2lkICp0cmFtcG9saW5lX3NpemVfaW1hZ2U7CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQgaW5pdF90cmFtcG9saW5lX3NpemVfaW1hZ2Uodm9pZCkKJiM0Mzt7CiYjNDM7CXRyYW1wb2xpbmVfc2l6ZV9pbWFnZSA9IGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9NT0RVTEVfREFUQSwgUEFHRV9TSVpFKTsKJiM0MzsJcmV0dXJuIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSA/IDAgOiAtRU5PTUVNOwomIzQzO30KJiM0MztsYXRlX2luaXRjYWxsKGluaXRfdHJhbXBvbGluZV9zaXplX2ltYWdlKTsKJiM0MzsKIHN0YXRpYyB1OCAqZW1pdF9jb2RlKHU4ICpwdHIsIHUzMiBieXRlcywgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpZiAobGVuID09IDEpCkBAIC00MDAwLDI0ICYjNDM7NDAxMCwxNCBAQCBpbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLAogCQkJICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcikKIHsKIAlzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlIGltOwotCXZvaWQgKmltYWdlOwotCWludCByZXQ7CiAKLQkvKiBBbGxvY2F0ZSBhIHRlbXBvcmFyeSBidWZmZXIgZm9yIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkuCi0JICoKLQkgKiBXZSBjYW5ub3QgdXNlIGt2bWFsbG9jIGhlcmUsIGJlY2F1c2Ugd2UgbmVlZCBpbWFnZSB0byBiZSBpbgotCSAqIG1vZHVsZSBtZW1vcnkgcmFuZ2UuCi0JICogU2luY2UgaXQgbXVzdCBiZSB3cml0YWJsZSB1c2UgZXhlY21lbV9hbGxvYyhFWEVDTUVNX01PRFVMRV9EQVRBKQotCSAqIHRoYXQgcmV0dXJucyB3cml0YWJsZSBtZW1vcnkgaW4gdGhlIG1vZHVsZSBhZGRyZXNzIHNwYWNlLgotCSAqLwotCWltYWdlID0gZXhlY21lbV9hbGxvYyhFWEVDTUVNX01PRFVMRV9EQVRBLCBQQUdFX1NJWkUpOwotCWlmICghaW1hZ2UpCiYjNDM7CWlmICghdHJhbXBvbGluZV9zaXplX2ltYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCZhbXA7aW0sIGltYWdlLCBpbWFnZSAmIzQzOyBQQUdFX1NJWkUsIGltYWdlLAotCQkJCQkgICAgbSwgZmxhZ3MsIHRub2RlcywgZnVuY19hZGRyKTsKLQlleGVjbWVtX2ZyZWUoaW1hZ2UpOwotCXJldHVybiByZXQ7CiYjNDM7CXJldHVybiBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgmYW1wO2ltLCB0cmFtcG9saW5lX3NpemVfaW1hZ2UsCiYjNDM7CQkJCQkgICAgIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSAmIzQzOyBQQUdFX1NJWkUsCiYjNDM7CQkJCQkgICAgIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSwgbSwgZmxhZ3MsCiYjNDM7CQkJCQkgICAgIHRub2RlcywgZnVuY19hZGRyKTsKIH0KIAogc3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLCB1OCAqYnVmKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDU1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBKSVQgVHJhbXBvbGluZSBTaXplIE9wdGltaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgdG8gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIG9wdGltaXppbmcgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgZm9yIHRoZSBCUEYgdHJhbXBvbGluZSBzaXplIGltYWdlLiBTcGVjaWZpY2FsbHksIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBzdGF0aWMgZ2xvYmFsIHBvaW50ZXIsIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgLCBpcyBhIGtleSBhbHRlcmF0aW9uLgoKQmVmb3JlLCBpbiBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCwgYSBuZXcgYGltYWdlYCB3YXMgYWxsb2NhdGVkIG9uIHRoZSBoZWFwIGZvciBlYWNoIGNhbGwgdXNpbmcgYGV4ZWNtZW1fYWxsb2NgLiBUaGUgY2hhbmdlIG1lbW9pemVzIHRoaXMgYWxsb2NhdGlvbiB1c2luZyB0aGUgc3RhdGljIHZhcmlhYmxlIGFuZCBpbml0aWFsaXNlcyBpdCBhdCBib290IHVzaW5nIGBsYXRlX2luaXRjYWxsKGluaXRfdHJhbXBvbGluZV9zaXplX2ltYWdlKWAuIE5vdywgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgc2ltcGx5IHJlLXVzZXMgdGhpcyBwcmUtYWxsb2NhdGVkIGJ1ZmZlci4gVGhpcyBkZWZpbml0ZWx5IHN1Z2dlc3RzIGFuIGVmZm9ydCB0byByZWR1Y2Ugb3ZlcmhlYWQsIGxpa2VseSBpbiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHBlcmZvcm1hbmNlIGdhaW5zLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm5zIGFyZSBhcm91bmQgdGhyZWFkIHNhZmV0eSBhbmQgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgaXMgdGhlIGNydWNpYWwgZnVuY3Rpb24gaGVyZSwgYXMgaXQmIzM5O3MgdGhlIG9uZSB1c2luZyB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgaWYgYW55IGNvbmN1cnJlbnQgYWNjZXNzIGlzIHBvc3NpYmxlLiBBbHNvLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpbWFnZSBpcyBpbml0aWFsaXplZCBwcm9wZXJseSBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHNoYXJlZCBidWZmZXIgaXMgYmVpbmcgbW9kaWZpZWQgaW4gYSB0aHJlYWQtdW5zYWZlIHdheS4KCkkmIzM5O2xsIHVzZSBteSB1c3VhbCB0b29scyAtIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCAtIHRvIGV4YW1pbmUgYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpdHNlbGYsIGl0cyBjYWxsZXJzLCBhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggYHRyYW1wb2xpbmVfc2l6ZV9pbWFnZWAgaXMgdXNlZC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgb3B0aW1pemF0aW9uIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgc3VidGxlIGJ1Z3MsIHN1Y2ggYXMgZGF0YSBjb3JydXB0aW9uIG9yIHJhY2UgY29uZGl0aW9ucy4gSSYjMzk7bGwgbG9vayBmb3IgcG90ZW50aWFsIGxvY2tpbmcgbWVjaGFuaXNtcywgb3IgbGFjayB0aGVyZW9mLiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIG1lbW9yeSBmb290cHJpbnQuIFBlcmhhcHMgdGhpcyBpcyBhIHRyYWRlLW9mZiB0aGF0IGlzIHNhdmluZyB1cyB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzU1NT1zdGF0aWMgaW50IGludm9rZV9icGZfbW9kX3JldChjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHByb2csXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2NTYtICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzY1NzpzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbWFnZSxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjU4LVx0XHRcdFx0XHQgdm9pZCAqcndfaW1hZ2VfZW5kLCB2b2lkICppbWFnZSxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzk4MD1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICppbWFnZSwgdm9pZCAqaW1hZ2VfZW5kLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zOTk1LVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM5OTY6XHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShpbSwgcndfaW1hZ2UsIHJ3X2ltYWdlICYjNDM7IHNpemUsIGltYWdlLCBtLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM5OTctXHRcdFx0XHRcdCAgICBmbGFncywgdG5vZGVzLCBmdW5jX2FkZHIpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz00MDA5PWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMTYtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6NDAxNzpcdHJldHVybiBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcdTAwMjZpbSwgdHJhbXBvbGluZV9zaXplX2ltYWdlLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMTgtXHRcdFx0XHRcdCAgICAgdHJhbXBvbGluZV9zaXplX2ltYWdlICYjNDM7IFBBR0VfU0laRSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE5MgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIHRyYW1wb2xpbmUgaXMgcHJlcGFyZWQgb24geDg2LCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGFuZCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCB3aXRoaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoZSB0cmFtcG9saW5lIGlzIGNyaXRpY2FsIGZvciB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MsIHNvIGtub3dpbmcgaG93IGl0JiMzOTtzIHNldCB1cCBhbmQgc2l6ZWQgaXMgZnVuZGFtZW50YWwgdG8gdGhlIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eSBvZiB0aGUgQlBGIGltcGxlbWVudGF0aW9uIG9uIHRoaXMgYXJjaGl0ZWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgaGFuZGxlcyB0aGUgYWN0dWFsIHByZXBhcmF0aW9uIGFuZCB3aGF0IGNvbnN0cmFpbnRzIG9yIGNvbnNpZGVyYXRpb25zIGRldGVybWluZSB0aGUgc2l6ZSBhbGxvY2F0aW9uLiBXaGF0IGtpbmQgb2YgYXNzZW1ibHkgaXMgZ2VuZXJhdGVkPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHg4NiBpbnN0cnVjdGlvbnMgb3IgdGVjaG5pcXVlcyBiZWluZyBsZXZlcmFnZWQgaGVyZSBmb3IgdGhlIHRyYW1wb2xpbmU/IFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzY1NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNjU3Olx0c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1hZ2UsXG4zNjU4Olx0XHRcdFx0XHRcdCB2b2lkICpyd19pbWFnZV9lbmQsIHZvaWQgKmltYWdlLFxuMzY1OTpcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4zNjYwOlx0XHRcdFx0XHRcdCBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsXG4zNjYxOlx0XHRcdFx0XHRcdCB2b2lkICpmdW5jX2FkZHIpXG4zNjYyOlx0e1xuMzY2MzpcdFx0aW50IGksIHJldCwgbnJfcmVncyA9IG0tXHUwMDNlbnJfYXJncywgc3RhY2tfc2l6ZSA9IDA7XG4zNjY0Olx0XHRpbnQgcmVnc19vZmYsIGZ1bmNfbWV0YV9vZmYsIGlwX29mZiwgcnVuX2N0eF9vZmYsIGFyZ19zdGFja19vZmYsIHJieF9vZmY7XG4zNjY1Olx0XHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICpmZW50cnkgPSBcdTAwMjZ0bm9kZXNbQlBGX1RSQU1QX0ZFTlRSWV07XG4zNjY2Olx0XHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICpmZXhpdCA9IFx1MDAyNnRub2Rlc1tCUEZfVFJBTVBfRkVYSVRdO1xuMzY2NzpcdFx0c3RydWN0IGJwZl90cmFtcF9ub2RlcyAqZm1vZF9yZXQgPSBcdTAwMjZ0bm9kZXNbQlBGX1RSQU1QX01PRElGWV9SRVRVUk5dO1xuMzY2ODpcdFx0dm9pZCAqb3JpZ19jYWxsID0gZnVuY19hZGRyO1xuMzY2OTpcdFx0aW50IGNvb2tpZV9vZmYsIGNvb2tpZV9jbnQ7XG4zNjcwOlx0XHR1OCAqKmJyYW5jaGVzID0gTlVMTDtcbjM2NzE6XHRcdHU2NCBhcmVuYV9iYXNlO1xuMzY3MjpcdFx0dTY0IGZ1bmNfbWV0YTtcbjM2NzM6XHRcdHU4ICpwcm9nO1xuMzY3NDpcdFx0Ym9vbCBzYXZlX3JldDtcbjM2NzU6XHRcbjM2NzY6XHRcdC8qXG4zNjc3Olx0XHQgKiBGX0lORElSRUNUIGlzIG9ubHkgY29tcGF0aWJsZSB3aXRoIEZfUkVUX0ZFTlRSWV9SRVQsIGl0IGlzXG4zNjc4Olx0XHQgKiBleHBsaWNpdGx5IGluY29tcGF0aWJsZSB3aXRoIEZfQ0FMTF9PUklHIHwgRl9TS0lQX0ZSQU1FIHwgRl9JUF9BUkdcbjM2Nzk6XHRcdCAqIGJlY2F1c2UgQGZ1bmNfYWRkci5cbjM2ODA6XHRcdCAqL1xuMzY4MTpcdFx0V0FSTl9PTl9PTkNFKChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIFx1MDAyNlx1MDAyNlxuMzY4MjpcdFx0XHQgICAgIChmbGFncyBcdTAwMjYgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpO1xuMzY4MzpcdFxuMzY4NDpcdFx0YXJlbmFfYmFzZSA9IGJwZl90cmFtcF9hcmVuYV9iYXNlKG0sIHRub2RlcywgZmxhZ3MpO1xuMzY4NTpcdFxuMzY4NjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbS1cdTAwM2Vucl9hcmdzOyBpJiM0MzsmIzQzOylcbjM2ODc6XHRcdFx0bnJfcmVncyAmIzQzOz0gKG0tXHUwMDNlYXJnX3NpemVbaV0gJiM0MzsgNykgLyA4IC0gMTtcbjM2ODg6XHRcbjM2ODk6XHRcdC8qIHg4Ni02NCBzdXBwb3J0cyB1cCB0byBNQVhfQlBGX0ZVTkNfQVJHUyBhcmd1bWVudHMuIDEtNlxuMzY5MDpcdFx0ICogYXJlIHBhc3NlZCB0aHJvdWdoIHJlZ3MsIHRoZSByZW1haW5zIGFyZSB0aHJvdWdoIHN0YWNrLlxuMzY5MTpcdFx0ICovXG4zNjkyOlx0XHRpZiAobnJfcmVncyBcdTAwM2UgTUFYX0JQRl9GVU5DX0FSR1MpXG4zNjkzOlx0XHRcdHJldHVybiAtRU5PVFNVUFA7XG4zNjk0Olx0XG4zNjk1Olx0XHQvKiBHZW5lcmF0ZWQgdHJhbXBvbGluZSBzdGFjayBsYXlvdXQ6XG4zNjk2Olx0XHQgKlxuMzY5NzpcdFx0ICogUkJQICYjNDM7IDggICAgICAgICBbIHJldHVybiBhZGRyZXNzICBdXG4zNjk4Olx0XHQgKiBSQlAgJiM0MzsgMCAgICAgICAgIFsgUkJQICAgICAgICAgICAgIF1cbjM2OTk6XHRcdCAqXG4zNzAwOlx0XHQgKiBSQlAgLSA4ICAgICAgICAgWyByZXR1cm4gdmFsdWUgICAgXSAgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHIG9yXG4zNzAxOlx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlBGX1RSQU1QX0ZfUkVUX0ZFTlRSWV9SRVQgZmxhZ3NcbjM3MDI6XHRcdCAqXG4zNzAzOlx0XHQgKiAgICAgICAgICAgICAgICAgWyByZWdfYXJnTiAgICAgICAgXSAgYWx3YXlzXG4zNzA0Olx0XHQgKiAgICAgICAgICAgICAgICAgWyAuLi4gICAgICAgICAgICAgXVxuMzcwNTpcdFx0ICogUkJQIC0gcmVnc19vZmYgIFsgcmVnX2FyZzEgICAgICAgIF0gIHByb2dyYW0mIzM5O3MgY3R4IHBvaW50ZXJcbjM3MDY6XHRcdCAqXG4zNzA3Olx0XHQgKiBSQlAgLSBmdW5jX21ldGFfb2ZmIFsgcmVncyBjb3VudCwgZXRjIF0gIGFsd2F5c1xuMzcwODpcdFx0ICpcbjM3MDk6XHRcdCAqIFJCUCAtIGlwX29mZiAgICBbIHRyYWNlZCBmdW5jdGlvbiBdICBCUEZfVFJBTVBfRl9JUF9BUkcgZmxhZ1xuMzcxMDpcdFx0ICpcbjM3MTE6XHRcdCAqIFJCUCAtIHJieF9vZmYgICBbIHJieCB2YWx1ZSAgICAgICBdICBhbHdheXNcbjM3MTI6XHRcdCAqXG4zNzEzOlx0XHQgKiBSQlAgLSBydW5fY3R4X29mZiBbIGJwZl90cmFtcF9ydW5fY3R4IF1cbjM3MTQ6XHRcdCAqXG4zNzE1Olx0XHQgKiAgICAgICAgICAgICAgICAgICAgIFsgc3RhY2tfYXJnTiBdICBCUEZfVFJBTVBfRl9DQUxMX09SSUdcbjM3MTY6XHRcdCAqICAgICAgICAgICAgICAgICAgICAgWyAuLi4gICAgICAgIF1cbjM3MTc6XHRcdCAqICAgICAgICAgICAgICAgICAgICAgWyBzdGFja19hcmcyIF1cbjM3MTg6XHRcdCAqIFJCUCAtIGFyZ19zdGFja19vZmYgWyBzdGFja19hcmcxIF1cbjM3MTk6XHRcdCAqIFJTUCAgICAgICAgICAgICAgICAgWyB0YWlsX2NhbGxfY250X3B0ciBdIEJQRl9UUkFNUF9GX1RBSUxfQ0FMTF9DVFhcbjM3MjA6XHRcdCAqL1xuMzcyMTpcdFxuMzcyMjpcdFx0Lyogcm9vbSBmb3IgcmV0dXJuIHZhbHVlIG9mIG9yaWdfY2FsbCBvciBmZW50cnkgcHJvZyAqL1xuMzcyMzpcdFx0c2F2ZV9yZXQgPSBmbGFncyBcdTAwMjYgKEJQRl9UUkFNUF9GX0NBTExfT1JJRyB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKTtcbjM3MjQ6XHRcdGlmIChzYXZlX3JldClcbjM3MjU6XHRcdFx0c3RhY2tfc2l6ZSAmIzQzOz0gODtcbjM3MjY6XHRcbjM3Mjc6XHRcdHN0YWNrX3NpemUgJiM0Mzs9IG5yX3JlZ3MgKiA4O1xuMzcyODpcdFx0cmVnc19vZmYgPSBzdGFja19zaXplO1xuMzcyOTpcdFxuMzczMDpcdFx0LyogZnVuY3Rpb24gbWF0ZWRhdGEsIHN1Y2ggYXMgcmVncyBjb3VudCAgKi9cbjM3MzE6XHRcdHN0YWNrX3NpemUgJiM0Mzs9IDg7XG4zNzMyOlx0XHRmdW5jX21ldGFfb2ZmID0gc3RhY2tfc2l6ZTtcbjM3MzM6XHRcbjM3MzQ6XHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSVBfQVJHKVxuMzczNTpcdFx0XHRzdGFja19zaXplICYjNDM7PSA4OyAvKiByb29tIGZvciBJUCBhZGRyZXNzIGFyZ3VtZW50ICovXG4zNzM2Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MjgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGFuZCBgcndfaW1hZ2VgIFVzYWdlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGJhY2sgaW50byB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIHdhcyBvbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgZnVuY3Rpb24gd29ya3MuIE5vdywgSSBuZWVkIHRvIGV4cGFuZCBteSB2aWV3IGFuZCBzZWUgaG93IHRoZSByZXN0IG9mIGl0IHVuZm9sZHMsIHNwZWNpZmljYWxseSB0aGUgcGFydHMgdGhhdCByZWxhdGUgdG8gYHJ3X2ltYWdlYC4gSSBuZWVkIHRvIHRyYWNrIHRoZSBwYXRoIG9mIGByd19pbWFnZWAuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgY2FsbHMgb3IgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYHJ3X2ltYWdlYCwgZXNwZWNpYWxseSB3aXRoaW4gb3IgYXJvdW5kIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBpcyBiZWluZyBsb2FkZWQgaW50byBgcndfaW1hZ2VgLiBJIHdpbGwgZm9sbG93IGByd19pbWFnZWAgYW5kIHVuZGVyc3RhbmQgd2hhdCBjb2RlIGl0IGlzIGFzc29jaWF0ZWQgd2l0aC4gVGhlbiBJIHdpbGwgc2VlIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBhbHNvIHVzaW5nIGByd19pbWFnZWAgYW5kIHdoYXQgdGhleSBkby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzM3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM3Mzc6XHRcdGlwX29mZiA9IHN0YWNrX3NpemU7XG4zNzM4Olx0XG4zNzM5Olx0XHRjb29raWVfY250ID0gYnBmX2ZzZXNzaW9uX2Nvb2tpZV9jbnQodG5vZGVzKTtcbjM3NDA6XHRcdC8qIHJvb20gZm9yIHNlc3Npb24gY29va2llcyAqL1xuMzc0MTpcdFx0c3RhY2tfc2l6ZSAmIzQzOz0gY29va2llX2NudCAqIDg7XG4zNzQyOlx0XHRjb29raWVfb2ZmID0gc3RhY2tfc2l6ZTtcbjM3NDM6XHRcbjM3NDQ6XHRcdHN0YWNrX3NpemUgJiM0Mzs9IDg7XG4zNzQ1Olx0XHRyYnhfb2ZmID0gc3RhY2tfc2l6ZTtcbjM3NDY6XHRcbjM3NDc6XHRcdHN0YWNrX3NpemUgJiM0Mzs9IChzaXplb2Yoc3RydWN0IGJwZl90cmFtcF9ydW5fY3R4KSAmIzQzOyA3KSBcdTAwMjYgfjB4NztcbjM3NDg6XHRcdHJ1bl9jdHhfb2ZmID0gc3RhY2tfc2l6ZTtcbjM3NDk6XHRcbjM3NTA6XHRcdGlmIChucl9yZWdzIFx1MDAzZSA2IFx1MDAyNlx1MDAyNiAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykpIHtcbjM3NTE6XHRcdFx0LyogdGhlIHNwYWNlIHRoYXQgdXNlZCB0byBwYXNzIGFyZ3VtZW50cyBvbi1zdGFjayAqL1xuMzc1MjpcdFx0XHRzdGFja19zaXplICYjNDM7PSAobnJfcmVncyAtIGdldF9ucl91c2VkX3JlZ3MobSkpICogODtcbjM3NTM6XHRcdFx0LyogbWFrZSBzdXJlIHRoZSBzdGFjayBwb2ludGVyIGlzIDE2LWJ5dGUgYWxpZ25lZCBpZiB3ZVxuMzc1NDpcdFx0XHQgKiBuZWVkIHBhc3MgYXJndW1lbnRzIG9uIHN0YWNrLCB3aGljaCBtZWFuc1xuMzc1NTpcdFx0XHQgKiAgW3N0YWNrX3NpemUgJiM0MzsgOChyYnApICYjNDM7IDgocmlwKSAmIzQzOyA4KG9yaWdpbiByaXApXVxuMzc1NjpcdFx0XHQgKiBzaG91bGQgYmUgMTYtYnl0ZSBhbGlnbmVkLiBGb2xsb3dpbmcgY29kZSBkZXBlbmQgb25cbjM3NTc6XHRcdFx0ICogdGhhdCBzdGFja19zaXplIGlzIGFscmVhZHkgOC1ieXRlIGFsaWduZWQuXG4zNzU4Olx0XHRcdCAqL1xuMzc1OTpcdFx0XHRpZiAoYnBmX3RyYW1wb2xpbmVfdXNlX2ptcChmbGFncykpIHtcbjM3NjA6XHRcdFx0XHQvKiBubyByaXAgaW4gdGhlIFwmIzM0O2ptcFwmIzM0OyBjYXNlICovXG4zNzYxOlx0XHRcdFx0c3RhY2tfc2l6ZSAmIzQzOz0gKHN0YWNrX3NpemUgJSAxNikgPyA4IDogMDtcbjM3NjI6XHRcdFx0fSBlbHNlIHtcbjM3NjM6XHRcdFx0XHRzdGFja19zaXplICYjNDM7PSAoc3RhY2tfc2l6ZSAlIDE2KSA/IDAgOiA4O1xuMzc2NDpcdFx0XHR9XG4zNzY1Olx0XHR9XG4zNzY2Olx0XG4zNzY3Olx0XHRhcmdfc3RhY2tfb2ZmID0gc3RhY2tfc2l6ZTtcbjM3Njg6XHRcbjM3Njk6XHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHKSB7XG4zNzcwOlx0XHRcdC8qIHNraXAgcGF0Y2hlZCBjYWxsIGluc3RydWN0aW9uIGFuZCBwb2ludCBvcmlnX2NhbGwgdG8gYWN0dWFsXG4zNzcxOlx0XHRcdCAqIGJvZHkgb2YgdGhlIGtlcm5lbCBmdW5jdGlvbi5cbjM3NzI6XHRcdFx0ICovXG4zNzczOlx0XHRcdGlmIChpc19lbmRicihvcmlnX2NhbGwpKVxuMzc3NDpcdFx0XHRcdG9yaWdfY2FsbCAmIzQzOz0gRU5EQlJfSU5TTl9TSVpFO1xuMzc3NTpcdFx0XHRvcmlnX2NhbGwgJiM0Mzs9IFg4Nl9QQVRDSF9TSVpFO1xuMzc3NjpcdFx0fVxuMzc3NzpcdFxuMzc3ODpcdFx0cHJvZyA9IHJ3X2ltYWdlO1xuMzc3OTpcdFxuMzc4MDpcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVCkge1xuMzc4MTpcdFx0XHQvKlxuMzc4MjpcdFx0XHQgKiBJbmRpcmVjdCBjYWxsIGZvciBicGZfc3RydWN0X29wc1xuMzc4MzpcdFx0XHQgKi9cbjM3ODQ6XHRcdFx0ZW1pdF9jZmkoXHUwMDI2cHJvZywgaW1hZ2UsXG4zNzg1Olx0XHRcdFx0IGNmaV9nZXRfZnVuY19oYXNoKGZ1bmNfYWRkciksXG4zNzg2Olx0XHRcdFx0IGNmaV9nZXRfZnVuY19hcml0eShmdW5jX2FkZHIpKTtcbjM3ODc6XHRcdH0gZWxzZSB7XG4zNzg4Olx0XHRcdC8qXG4zNzg5Olx0XHRcdCAqIERpcmVjdC1jYWxsIGZlbnRyeSBzdHViLCBhcyBzdWNoIGl0IG5lZWRzIGFjY291bnRpbmcgZm9yIHRoZVxuMzc5MDpcdFx0XHQgKiBfX2ZlbnRyeV9fIGNhbGwuXG4zNzkxOlx0XHRcdCAqL1xuMzc5MjpcdFx0XHR4ODZfY2FsbF9kZXB0aF9lbWl0X2FjY291bnRpbmcoXHUwMDI2cHJvZywgTlVMTCwgaW1hZ2UpO1xuMzc5MzpcdFx0fVxuMzc5NDpcdFx0RU1JVDEoMHg1NSk7XHRcdCAvKiBwdXNoIHJicCAqL1xuMzc5NTpcdFx0RU1JVDMoMHg0OCwgMHg4OSwgMHhFNSk7IC8qIG1vdiByYnAsIHJzcCAqL1xuMzc5NjpcdFx0aWYgKGltKVxuMzc5NzpcdFx0XHRpbS1cdTAwM2Vrc3ltLmZwX3N0YXJ0ID0gcHJvZyAtICh1OCAqKXJ3X2ltYWdlO1xuMzc5ODpcdFxuMzc5OTpcdFx0aWYgKCFpc19pbW04KHN0YWNrX3NpemUpKSB7XG4zODAwOlx0XHRcdC8qIHN1YiByc3AsIHN0YWNrX3NpemUgKi9cbjM4MDE6XHRcdFx0RU1JVDNfb2ZmMzIoMHg0OCwgMHg4MSwgMHhFQywgc3RhY2tfc2l6ZSk7XG4zODAyOlx0XHR9IGVsc2Uge1xuMzgwMzpcdFx0XHQvKiBzdWIgcnNwLCBzdGFja19zaXplICovXG4zODA0Olx0XHRcdEVNSVQ0KDB4NDgsIDB4ODMsIDB4RUMsIHN0YWNrX3NpemUpO1xuMzgwNTpcdFx0fVxuMzgwNjpcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9UQUlMX0NBTExfQ1RYKVxuMzgwNzpcdFx0XHRFTUlUMSgweDUwKTtcdFx0LyogcHVzaCByYXggKi9cbjM4MDg6XHRcdC8qIG1vdiBRV09SRCBQVFIgW3JicCAtIHJieF9vZmZdLCByYnggKi9cbjM4MDk6XHRcdGVtaXRfc3R4KFx1MDAyNnByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgQlBGX1JFR182LCAtcmJ4X29mZik7XG4zODEwOlx0XG4zODExOlx0XHRmdW5jX21ldGEgPSBucl9yZWdzO1xuMzgxMjpcdFx0LyogU3RvcmUgbnVtYmVyIG9mIGFyZ3VtZW50IHJlZ2lzdGVycyBvZiB0aGUgdHJhY2VkIGZ1bmN0aW9uICovXG4zODEzOlx0XHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KFx1MDAyNnByb2csIEJQRl9SRUdfMCwgLWZ1bmNfbWV0YV9vZmYsIGZ1bmNfbWV0YSk7XG4zODE0Olx0XG4zODE1Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0lQX0FSRykge1xuMzgxNjpcdFx0XHQvKiBTdG9yZSBJUCBhZGRyZXNzIG9mIHRoZSB0cmFjZWQgZnVuY3Rpb24gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU5NgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgaW50ZXJuYWxzIG9mIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgbm93LiBNeSBtYWluIGNvbmNlcm4gaXMgdG8gdW5kZXJzdGFuZCBpdHMgcmV0dXJuIHZhbHVlIGFuZCB1bHRpbWF0ZWx5LCBob3cgaXQgc2lnbmFscyBjb21wbGV0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGtleSBzdGF0ZSBpcyBzZXQgdXAgaGVyZSwgYW5kIHdoZXJlIGl0IGdvZXMgZnJvbSBoZXJlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoYXQgdG8gbG9vayBmb3IgYWZ0ZXIgdGhlIGNhbGwgdG8gdW5kZXJzdGFuZCB3aGF0IGp1c3QgaGFwcGVuZWQgYW5kIHRoYXQgZXZlcnl0aGluZyB3ZW50IGFjY29yZGluZyB0byBwbGFuLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGl0IGlzIHNldCB1cCBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggdGhlIGFyY2hpdGVjdHVyYWwgcmVxdWlyZW1lbnRzLCBhbmQgdGhhdCB0aGlzIGZpdHMgd2l0aCB0aGUgb3ZlcmFyY2hpbmcgQlBGIGRlc2lnbi4gSSBhbSBsb29raW5nIGZvciBkZXRhaWxzIHRoYXQgbWlnaHQgbGVhZCB0byBhIHZ1bG5lcmFiaWxpdHkgb3IgYW4gdW5leHBlY3RlZCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5NjA6XHRjbGVhbnVwOlxuMzk2MTpcdFx0a2ZyZWUoYnJhbmNoZXMpO1xuMzk2MjpcdFx0cmV0dXJuIHJldDtcbjM5NjM6XHR9XG4zOTY0Olx0XG4zOTY1Olx0dm9pZCAqYXJjaF9hbGxvY19icGZfdHJhbXBvbGluZSh1bnNpZ25lZCBpbnQgc2l6ZSlcbjM5NjY6XHR7XG4zOTY3Olx0XHRyZXR1cm4gYnBmX3Byb2dfcGFja19hbGxvYyhzaXplLCBqaXRfZmlsbF9ob2xlLCBmYWxzZSk7XG4zOTY4Olx0fVxuMzk2OTpcdFxuMzk3MDpcdHZvaWQgYXJjaF9mcmVlX2JwZl90cmFtcG9saW5lKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbjM5NzE6XHR7XG4zOTcyOlx0XHRicGZfcHJvZ19wYWNrX2ZyZWUoaW1hZ2UsIHNpemUpO1xuMzk3MzpcdH1cbjM5NzQ6XHRcbjM5NzU6XHRpbnQgYXJjaF9wcm90ZWN0X2JwZl90cmFtcG9saW5lKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbjM5NzY6XHR7XG4zOTc3Olx0XHRyZXR1cm4gMDtcbjM5Nzg6XHR9XG4zOTc5Olx0XG4zOTgwOlx0aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqaW1hZ2UsIHZvaWQgKmltYWdlX2VuZCxcbjM5ODE6XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuMzk4MjpcdFx0XHRcdFx0c3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLFxuMzk4MzpcdFx0XHRcdFx0dm9pZCAqZnVuY19hZGRyKVxuMzk4NDpcdHtcbjM5ODU6XHRcdHZvaWQgKnJ3X2ltYWdlLCAqdG1wO1xuMzk4NjpcdFx0aW50IHJldDtcbjM5ODc6XHRcdHUzMiBzaXplID0gaW1hZ2VfZW5kIC0gaW1hZ2U7XG4zOTg4Olx0XG4zOTg5Olx0XHQvKiByd19pbWFnZSBkb2VzbiYjMzk7dCBuZWVkIHRvIGJlIGluIG1vZHVsZSBtZW1vcnkgcmFuZ2UsIHNvIHdlIGNhblxuMzk5MDpcdFx0ICogdXNlIGt2bWFsbG9jLlxuMzk5MTpcdFx0ICovXG4zOTkyOlx0XHRyd19pbWFnZSA9IGt2bWFsbG9jKHNpemUsIEdGUF9LRVJORUwpO1xuMzk5MzpcdFx0aWYgKCFyd19pbWFnZSlcbjM5OTQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zOTk1Olx0XG4zOTk2Olx0XHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShpbSwgcndfaW1hZ2UsIHJ3X2ltYWdlICYjNDM7IHNpemUsIGltYWdlLCBtLFxuMzk5NzpcdFx0XHRcdFx0XHQgICAgZmxhZ3MsIHRub2RlcywgZnVuY19hZGRyKTtcbjM5OTg6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4zOTk5Olx0XHRcdGdvdG8gb3V0O1xuNDAwMDpcdFxuNDAwMTpcdFx0dG1wID0gYnBmX2FyY2hfdGV4dF9jb3B5KGltYWdlLCByd19pbWFnZSwgc2l6ZSk7XG40MDAyOlx0XHRpZiAoSVNfRVJSKHRtcCkpXG40MDAzOlx0XHRcdHJldCA9IFBUUl9FUlIodG1wKTtcbjQwMDQ6XHRvdXQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0OTQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBCUEYgVHJhbXBvbGluZSBTaXplIENhbGN1bGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYC4gVGhlIG5hbWUgaXRzZWxmIHNjcmVhbXMgJiMzNDtzaXplIGNhbGN1bGF0aW9uIGZvciBhIHRyYW1wb2xpbmUsJiMzNDsgcHJlc3VtYWJseSB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aG8qIGlzIHVzaW5nIHRoaXMgZnVuY3Rpb24uIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBpbGx1bWluYXRlIHRoZSBwdXJwb3NlIGFuZCBjb25zdHJhaW50cyBkcml2aW5nIHRoaXMgc2l6ZSBjYWxjdWxhdGlvbi4gVGltZSB0byBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VlIHdobyYjMzk7cyBpbnZva2luZyBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dHVhbCBjbHVlcyBJIG5lZWQgdG8gZnVsbHkgZ3JvayB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJjaF9icGZfdHJhbXBvbGluZV9zaXplJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTI5ODg9Ym9vbCBicGZfaml0X3N1cHBvcnRzX2ZzZXNzaW9uKHZvaWQpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjk5Mi1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjI5OTM6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTI5OTQtXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTIxMzg9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMTc1LVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMTc2OmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIxNzctXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jPTgxMj1zdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbWFnZSxcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTExOTEtXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjExOTI6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTE5My1cdFx0XHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTAzMD1zdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTMzNi1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTMzNzppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzM4LVx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz0yNjk4PXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0zMDE1LVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzozMDE2OmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTMwMTctXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKm9yaWdfY2FsbClcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzk4MD1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICppbWFnZSwgdm9pZCAqaW1hZ2VfZW5kLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDA4LVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQwMDk6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDEwLVx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0xMzE3PWludCBfX211c3RfY2hlY2sgYXJjaF9wcm90ZWN0X2JwZl90cmFtcG9saW5lKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjEzMTg6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbmluY2x1ZGUvbGludXgvYnBmLmgtMTMxOS1cdFx0XHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NjM3PWludCBicGZfc3RydWN0X29wc19wcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLFxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NTMtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjU0Olx0c2l6ZSA9IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShtb2RlbCwgZmxhZ3MsIHRub2Rlcywgc3R1Yl9mdW5jKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NTUtXHRpZiAoc2l6ZSBcdTAwM2M9IDApXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NzEwPXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzYxLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzYyOlx0c2l6ZSA9IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShcdTAwMjZ0ci1cdTAwM2VmdW5jLm1vZGVsLCB0ci1cdTAwM2VmbGFncyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc2My1cdFx0XHRcdFx0dG5vZGVzLCB0ci1cdTAwM2VmdW5jLmFkZHIpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1MDg9aW50IF9fd2VhayBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MTMtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTE0OmludCBfX3dlYWsgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUxNS1cdFx0XHRcdCAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMTgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgQlBGIFRyYW1wb2xpbmUgU2l6ZSBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBvcHRpbWl6ZXMgaG93IHRoZSBCUEYgdHJhbXBvbGluZSBzaXplIGlzIGNhbGN1bGF0ZWQuIFByZXZpb3VzbHksIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgIHdhcyBjYWxsaW5nIGBleGVjbWVtX2FsbG9jYCBhbmQgYGV4ZWNtZW1fZnJlZWAgb24gYSA0S0IgcGFnZSBldmVyeSB0aW1lIGl0IG5lZWRlZCB0byBmaWd1cmUgb3V0IHRoZSB0cmFtcG9saW5lIHNpemUuIE5vdywgd2UmIzM5O3ZlIGdvdCBhIGdsb2JhbCBidWZmZXIsIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgLCBwcmUtYWxsb2NhdGVkIGF0IGluaXQgdGltZS4gVGhhdCYjMzk7cyBnb29kLCBhdm9pZGluZyB0aG9zZSByZXBlYXRlZCBhbGxvY2F0aW9ucy4gVGhlIGZ1bmN0aW9uIG5vdyBjYWxscyBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIHdpdGggdGhpcyBwcmUtYWxsb2NhdGVkIGJ1ZmZlciBhcyBhIHRhcmdldCB0byBkZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlIGdlbmVyYXRlZCBpbnN0cnVjdGlvbnMuIEl0IHJldHVybnMgdGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZ2VuZXJhdGVkIGluc3RydWN0aW9ucy4KCk15IG1haW4gY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIExldCYjMzk7cyBicmVhayBpdCBkb3duOgoKMS4gIGBpbml0X3RyYW1wb2xpbmVfc2l6ZV9pbWFnZWAgYWxsb2NhdGVzIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgIHVzaW5nIGBleGVjbWVtX2FsbG9jYC4KMi4gIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgd3JpdGVzIEpJVCBpbnN0cnVjdGlvbnMgaW50byBgdHJhbXBvbGluZV9zaXplX2ltYWdlYC4KMy4gIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB0aGF0IGJ1ZmZlci4KNC4gIE5vdGhpbmcgcmVhZHMgZnJvbSBgdHJhbXBvbGluZV9zaXplX2ltYWdlYCBiZWZvcmUgd3JpdGluZy4gVGhlIGNvbnRlbnRzIGFyZSBub3QgY29waWVkIGFueXdoZXJlLiBJdCYjMzk7cyBqdXN0IGEgZHVtbXkgZGVzdGluYXRpb24gZm9yIEVNSVQgaW5zdHJ1Y3Rpb25zIHRvIGRldGVybWluZSBzaXplLgo1LiAgVGhlcmUmIzM5O3MgYSBsb2NhbCBzdGFjayB2YXJpYWJsZSwgYGltYCwgd2hpY2ggaXMgcGFzc2VkIGFzIGEgcG9pbnRlci4gYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCB3cml0ZXMgdG8gYGltLSZndDtrc3ltLmZwX3N0YXJ0YCBpZiBgaW0gIT0gTlVMTGAgYnV0IGl0JiMzOTtzIG5vdCByZWFkIGFmdGVyLgo2LiAgTm8ga2VybmVsLXRvLXVzZXIgc3BhY2UgZGF0YSBjb3BpZXMgYXJlIGludm9sdmVkLgo3LiAgTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpc3N1ZXMgYXJlIHRvdWNoZWQuCjguICBDb25jZXJuaW5nIGNvbmN1cnJlbmN5LCBldmVuIHdpdGggbXVsdGlwbGUgY2FsbGVycyAobGlrZWx5IHByb3RlY3RlZCBieSBsb2NrcyBhbnl3YXkpLCBpdCYjMzk7cyBvbmx5IHdyaXR0ZW4gdG8sIG5vdCByZWFkLiBPdmVyd3JpdGVzIGhhcHBlbiBlYWNoIHRpbWUsIHNvIGV2ZW4gaWYgdGhlcmUmIzM5O3MgYSBkYXRhIHJhY2UsIGl0JiMzOTtzIGZpbmUuIFRoZSByZXR1cm4gdmFsdWUgaXMganVzdCBjYWxjdWxhdGVkIGxvY2FsbHkuCjkuICBTbywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgpHaXZlbiB0aGVzZSBmaW5kaW5ncywgdGhlIHBhdGNoIGRvZXMgd2hhdCBpdCYjMzk7cyBzdXBwb3NlZCB0byBkby4gVGhlIHJlcXVpcmVtZW50cyBzdGF0ZSBgTmVlZHNLTVNBTmAgaXMgdHJ1ZSBvbmx5IGlmIHRoZXJlIGFyZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU2luY2UgSSBoYXZlbiYjMzk7dCBmb3VuZCBhbnksIHRoZSBsb2dpYyBmb3IgZXZhbHVhdGluZyBLTVNBTiBhcHBsaWNhYmlsaXR5IHNheXM6CgoqICAgVGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBkeW5hbWljIGFsbG9jYXRpb24gb2YgYSBzY3JhdGNoIGJ1ZmZlciB3aXRoIGEgcHJlLWFsbG9jYXRlZCBzdGF0aWMgb25lLgoqICAgVGhlIHNjcmF0Y2ggYnVmZmVyIGlzIHNvbGVseSBhIHdyaXRlLW9ubHkgdGFyZ2V0LiBUaGUgc3RhY2sgdmFyaWFibGUsIGBpbWAsIGlzIHdyaXR0ZW4gdG8sIGJ1dCBub3QgcmVhZC4KKiAgIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBjb3BpZWQgYW55d2hlcmUuCiogICBBbnkgY29uY3VycmVuY3kgaXNzdWVzIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi9LQ1NBTi4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuCgpJJiMzOTtsbCBkb3VibGUgY2hlY2sgYnkgZ3JlcHBpbmcgZm9yIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBidXQgYmFzZWQgb24gdGhlIGFuYWx5c2lzIHNvIGZhciwgdGhpcyBsb29rcyBjbGVhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJhbXBvbGluZV9zaXplX2ltYWdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNz1zdGF0aWMgYm9vbCBhbGxfY2FsbGVlX3JlZ3NfdXNlZFs0XSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zOC1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozOTpzdGF0aWMgdm9pZCAqdHJhbXBvbGluZV9zaXplX2ltYWdlO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQxOnN0YXRpYyBpbnQgX19pbml0IGluaXRfdHJhbXBvbGluZV9zaXplX2ltYWdlKHZvaWQpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDIte1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQzOlx0dHJhbXBvbGluZV9zaXplX2ltYWdlID0gZXhlY21lbV9hbGxvYyhFWEVDTUVNX01PRFVMRV9EQVRBLCBQQUdFX1NJWkUpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQ0Olx0cmV0dXJuIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSA/IDAgOiAtRU5PTUVNO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQ1LX1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0NjpsYXRlX2luaXRjYWxsKGluaXRfdHJhbXBvbGluZV9zaXplX2ltYWdlKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00Ny1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9NDAwOT1pbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDEzLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQwMTQ6XHRpZiAoIXRyYW1wb2xpbmVfc2l6ZV9pbWFnZSlcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDE1LVx0XHRyZXR1cm4gLUVOT01FTTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDE2LVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQwMTc6XHRyZXR1cm4gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoXHUwMDI2aW0sIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0MDE4Olx0XHRcdFx0XHQgICAgIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSAmIzQzOyBQQUdFX1NJWkUsXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6NDAxOTpcdFx0XHRcdFx0ICAgICB0cmFtcG9saW5lX3NpemVfaW1hZ2UsIG0sIGZsYWdzLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMjAtXHRcdFx0XHRcdCAgICAgdG5vZGVzLCBmdW5jX2FkZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ4NgoJCQkJCQkJb3V0cHV0OiAyMDEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIHByZXNlbnRlZCBhcyBpZiB0aGUgdGhvdWdodHMgd2VyZSBteSBvd24sIGFuZCBhc3N1bWluZyBJJiMzOTttIHdlbGwtdmVyc2VkIGluIG15IGZpZWxkOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IFNpbXBsaWNpdHkgYW5kIENsYXJpdHkqKgoKQWxyaWdodCwgdGhpcyBpcyByZWZyZXNoaW5nbHkgc3RyYWlnaHRmb3J3YXJkLiBUaGVyZSYjMzk7cyBubyBoaWRkZW4gY29tcGxleGl0eSBvciBhbWJpZ3VpdHkgaGVyZS4gVGhlIHBhdGggZm9yd2FyZCBpcyBpbW1lZGlhdGVseSBhcHBhcmVudC4gR2l2ZW4gdGhlIGNsYXJpdHkgb2YgdGhlIHNpdHVhdGlvbiwgdGhlIG1vc3QgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gY2FsbCBhIGZ1bmN0aW9uLiBHaXZlbiB0aGUgaW5mb3JtYXRpb24gYW5kIHRoZSBkZXNpcmVkIG91dGNvbWUsIEkgYmVsaWV2ZSB0aGUgZnVuY3Rpb24gc2hvdWxkIGJlIG5hbWVkIGBzZXQtcmVzdWx0c2AuIEl0IGlzIHRoZSBjbGVhcmVzdCB3YXkgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgZHluYW1pYyBwZXItY2FsbCBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gKHZpYSBleGVjbWVtX2FsbG9jL2V4ZWNtZW1fZnJlZSkgb2YgYSBkdW1teSBzY3JhdGNoIGJ1ZmZlciBpbiBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoKSB3aXRoIGEgc3RhdGljYWxseSBwcmUtYWxsb2NhdGVkIHBhZ2UgYnVmZmVyICh0cmFtcG9saW5lX3NpemVfaW1hZ2UpLiBUaGUgYnVmZmVyIGlzIHVzZWQgc3RyaWN0bHkgYXMgYSB3cml0ZS1vbmx5IHNpbmsgZm9yIGluc3RydWN0aW9uIGVtaXNzaW9uIGR1cmluZyBkcnktcnVuIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbiBpbiBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgpIHRvIGRldGVybWluZSB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUuIEl0cyBjb250ZW50cyBhcmUgbmV2ZXIgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFjayB2YXJpYWJsZXMgc3VjaCBhcyAmIzM5O2ltJiMzOTsgYXJlIHBhc3NlZCB0byBzYXRpc2Z5IGZ1bmN0aW9uIHBhcmFtZXRlcnMgYW5kIGFyZSBub3QgcmVhZCB1bmluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrLCBvciBjb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIHN0YXRlIGlzIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkOyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIHN1ZmZpY2VzIGZvciBhbnkgbWVtb3J5IHNhZmV0eSB2ZXJpZmljYXRpb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBkeW5hbWljIHBlci1jYWxsIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiAodmlhIGV4ZWNtZW1fYWxsb2MvZXhlY21lbV9mcmVlKSBvZiBhIGR1bW15IHNjcmF0Y2ggYnVmZmVyIGluIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZSgpIHdpdGggYSBzdGF0aWNhbGx5IHByZS1hbGxvY2F0ZWQgcGFnZSBidWZmZXIgKHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSkuIFRoZSBidWZmZXIgaXMgdXNlZCBzdHJpY3RseSBhcyBhIHdyaXRlLW9ubHkgc2luayBmb3IgaW5zdHJ1Y3Rpb24gZW1pc3Npb24gZHVyaW5nIGRyeS1ydW4gdHJhbXBvbGluZSBnZW5lcmF0aW9uIGluIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkgdG8gZGV0ZXJtaW5lIHRoZSByZXF1aXJlZCBidWZmZXIgc2l6ZS4gSXRzIGNvbnRlbnRzIGFyZSBuZXZlciByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YWNrIHZhcmlhYmxlcyBzdWNoIGFzICYjMzk7aW0mIzM5OyBhcmUgcGFzc2VkIHRvIHNhdGlzZnkgZnVuY3Rpb24gcGFyYW1ldGVycyBhbmQgYXJlIG5vdCByZWFkIHVuaW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWssIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUgaXMgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQ7IHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgc3VmZmljZXMgZm9yIGFueSBtZW1vcnkgc2FmZXR5IHZlcmlmaWNhdGlvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzA6MzguOTc1MDI0MTY1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM1MDAyNTk2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX2JwZl90cmFtcG9saW5lX3NpemVcIixcbiAgICBcIl9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV91cGRhdGVcIixcbiAgICBcImJwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgZHluYW1pYyBwZXItY2FsbCBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gKHZpYSBleGVjbWVtX2FsbG9jL2V4ZWNtZW1fZnJlZSkgb2YgYSBkdW1teSBzY3JhdGNoIGJ1ZmZlciBpbiBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoKSB3aXRoIGEgc3RhdGljYWxseSBwcmUtYWxsb2NhdGVkIHBhZ2UgYnVmZmVyICh0cmFtcG9saW5lX3NpemVfaW1hZ2UpLiBUaGUgYnVmZmVyIGlzIHVzZWQgc3RyaWN0bHkgYXMgYSB3cml0ZS1vbmx5IHNpbmsgZm9yIGluc3RydWN0aW9uIGVtaXNzaW9uIGR1cmluZyBkcnktcnVuIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbiBpbiBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgpIHRvIGRldGVybWluZSB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUuIEl0cyBjb250ZW50cyBhcmUgbmV2ZXIgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFjayB2YXJpYWJsZXMgc3VjaCBhcyAnaW0nIGFyZSBwYXNzZWQgdG8gc2F0aXNmeSBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFuZCBhcmUgbm90IHJlYWQgdW5pbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVhaywgb3IgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCBzdGF0ZSBpcyBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZDsgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBzdWZmaWNlcyBmb3IgYW55IG1lbW9yeSBzYWZldHkgdmVyaWZpY2F0aW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHBlci1jYWxsIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gd2l0aCBhIHNpbmdsZSBzdGF0aWMgZ2xvYmFsIGJ1ZmZlciAodHJhbXBvbGluZV9zaXplX2ltYWdlKSBmb3IgY2FsY3VsYXRpbmcgQlBGIHRyYW1wb2xpbmUgc2l6ZSBpbiBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGluIHRoZSB4ODYgQlBGIEpJVCBzdWJzeXN0ZW0gd2hlbiB1cGRhdGluZyBCUEYgdHJhbXBvbGluZXMgb3IgcHJlcGFyaW5nIEJQRiBzdHJ1Y3Rfb3BzLiBGdXp6aW5nIGNhbiB2ZXJpZnkgY29ycmVjdG5lc3MsIG1lbW9yeSBzYWZldHksIGFuZCBjb25jdXJyZW5jeSBiZWhhdmlvciBhY3Jvc3MgQlBGIHRyYW1wb2xpbmUgdXBkYXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzA6MzguOTc1MDI5NTg1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzYzNjA5MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5NzhhZGJjODBlNWNhNjFiM2M3ZjE3MDQ4NzVlMGRmZmE4YzliOTNjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMjA6MzA6MzggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuaW5kZXggYmJhMzUxOTQ0MjAyYy4uMTNlZjBkNTNjYTI5NiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG4rKysgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG5AQCAtOSw2ICs5LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbHRlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfdmxhbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmX3ZlcmlmaWVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1vcnkuaFxcdTAwM2VcXG5AQCAtMzUsNiArMzYsMTUgQEAgdm9pZCBfX2FzYW5fc3RvcmU4KHZvaWQgKnApO1xcbiBcXG4gc3RhdGljIGJvb2wgYWxsX2NhbGxlZV9yZWdzX3VzZWRbNF0gPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZX07XFxuIFxcbitzdGF0aWMgdm9pZCAqdHJhbXBvbGluZV9zaXplX2ltYWdlO1xcbitcXG4rc3RhdGljIGludCBfX2luaXQgaW5pdF90cmFtcG9saW5lX3NpemVfaW1hZ2Uodm9pZClcXG4re1xcbitcXHR0cmFtcG9saW5lX3NpemVfaW1hZ2UgPSBleGVjbWVtX2FsbG9jKEVYRUNNRU1fTU9EVUxFX0RBVEEsIFBBR0VfU0laRSk7XFxuK1xcdHJldHVybiB0cmFtcG9saW5lX3NpemVfaW1hZ2UgPyAwIDogLUVOT01FTTtcXG4rfVxcbitsYXRlX2luaXRjYWxsKGluaXRfdHJhbXBvbGluZV9zaXplX2ltYWdlKTtcXG4rXFxuIHN0YXRpYyB1OCAqZW1pdF9jb2RlKHU4ICpwdHIsIHUzMiBieXRlcywgdW5zaWduZWQgaW50IGxlbilcXG4ge1xcbiBcXHRpZiAobGVuID09IDEpXFxuQEAgLTQwMDAsMjQgKzQwMTAsMTQgQEAgaW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlIGltO1xcbi1cXHR2b2lkICppbWFnZTtcXG4tXFx0aW50IHJldDtcXG4gXFxuLVxcdC8qIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBmb3IgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKS5cXG4tXFx0ICpcXG4tXFx0ICogV2UgY2Fubm90IHVzZSBrdm1hbGxvYyBoZXJlLCBiZWNhdXNlIHdlIG5lZWQgaW1hZ2UgdG8gYmUgaW5cXG4tXFx0ICogbW9kdWxlIG1lbW9yeSByYW5nZS5cXG4tXFx0ICogU2luY2UgaXQgbXVzdCBiZSB3cml0YWJsZSB1c2UgZXhlY21lbV9hbGxvYyhFWEVDTUVNX01PRFVMRV9EQVRBKVxcbi1cXHQgKiB0aGF0IHJldHVybnMgd3JpdGFibGUgbWVtb3J5IGluIHRoZSBtb2R1bGUgYWRkcmVzcyBzcGFjZS5cXG4tXFx0ICovXFxuLVxcdGltYWdlID0gZXhlY21lbV9hbGxvYyhFWEVDTUVNX01PRFVMRV9EQVRBLCBQQUdFX1NJWkUpO1xcbi1cXHRpZiAoIWltYWdlKVxcbitcXHRpZiAoIXRyYW1wb2xpbmVfc2l6ZV9pbWFnZSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcXHUwMDI2aW0sIGltYWdlLCBpbWFnZSArIFBBR0VfU0laRSwgaW1hZ2UsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBtLCBmbGFncywgdG5vZGVzLCBmdW5jX2FkZHIpO1xcbi1cXHRleGVjbWVtX2ZyZWUoaW1hZ2UpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoXFx1MDAyNmltLCB0cmFtcG9saW5lX3NpemVfaW1hZ2UsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgdHJhbXBvbGluZV9zaXplX2ltYWdlICsgUEFHRV9TSVpFLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSwgbSwgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgdG5vZGVzLCBmdW5jX2FkZHIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGVtaXRfYnBmX2Rpc3BhdGNoZXIodTggKipwcHJvZywgaW50IGEsIGludCBiLCBzNjQgKnByb2dzLCB1OCAqaW1hZ2UsIHU4ICpidWYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMwOjM5LjQxMjI4MDA4OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzI5OTk1NzgxMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX2JwZl90cmFtcG9saW5lX3NpemVcIixcbiAgICBcIl9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV91cGRhdGVcIixcbiAgICBcImJwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIHBlci1jYWxsIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gd2l0aCBhIHNpbmdsZSBzdGF0aWMgZ2xvYmFsIGJ1ZmZlciAodHJhbXBvbGluZV9zaXplX2ltYWdlKSBmb3IgY2FsY3VsYXRpbmcgQlBGIHRyYW1wb2xpbmUgc2l6ZSBpbiBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGluIHRoZSB4ODYgQlBGIEpJVCBzdWJzeXN0ZW0gd2hlbiB1cGRhdGluZyBCUEYgdHJhbXBvbGluZXMgb3IgcHJlcGFyaW5nIEJQRiBzdHJ1Y3Rfb3BzLiBGdXp6aW5nIGNhbiB2ZXJpZnkgY29ycmVjdG5lc3MsIG1lbW9yeSBzYWZldHksIGFuZCBjb25jdXJyZW5jeSBiZWhhdmlvciBhY3Jvc3MgQlBGIHRyYW1wb2xpbmUgdXBkYXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NzhhZGJjODBlNWNhNjFiM2M3ZjE3MDQ4NzVlMGRmZmE4YzliOTNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAyMDozMDozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggYmJhMzUxOTQ0MjAyYy4uMTNlZjBkNTNjYTI5NiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtOSw2ICs5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWx0ZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl92ZXJpZmllci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5LmhcdTAwM2VcbkBAIC0zNSw2ICszNiwxNSBAQCB2b2lkIF9fYXNhbl9zdG9yZTgodm9pZCAqcCk7XG4gXG4gc3RhdGljIGJvb2wgYWxsX2NhbGxlZV9yZWdzX3VzZWRbNF0gPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZX07XG4gXG4rc3RhdGljIHZvaWQgKnRyYW1wb2xpbmVfc2l6ZV9pbWFnZTtcbitcbitzdGF0aWMgaW50IF9faW5pdCBpbml0X3RyYW1wb2xpbmVfc2l6ZV9pbWFnZSh2b2lkKVxuK3tcbitcdHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSA9IGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9NT0RVTEVfREFUQSwgUEFHRV9TSVpFKTtcbitcdHJldHVybiB0cmFtcG9saW5lX3NpemVfaW1hZ2UgPyAwIDogLUVOT01FTTtcbit9XG4rbGF0ZV9pbml0Y2FsbChpbml0X3RyYW1wb2xpbmVfc2l6ZV9pbWFnZSk7XG4rXG4gc3RhdGljIHU4ICplbWl0X2NvZGUodTggKnB0ciwgdTMyIGJ5dGVzLCB1bnNpZ25lZCBpbnQgbGVuKVxuIHtcbiBcdGlmIChsZW4gPT0gMSlcbkBAIC00MDAwLDI0ICs0MDEwLDE0IEBAIGludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcbiB7XG4gXHRzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlIGltO1xuLVx0dm9pZCAqaW1hZ2U7XG4tXHRpbnQgcmV0O1xuIFxuLVx0LyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgpLlxuLVx0ICpcbi1cdCAqIFdlIGNhbm5vdCB1c2Uga3ZtYWxsb2MgaGVyZSwgYmVjYXVzZSB3ZSBuZWVkIGltYWdlIHRvIGJlIGluXG4tXHQgKiBtb2R1bGUgbWVtb3J5IHJhbmdlLlxuLVx0ICogU2luY2UgaXQgbXVzdCBiZSB3cml0YWJsZSB1c2UgZXhlY21lbV9hbGxvYyhFWEVDTUVNX01PRFVMRV9EQVRBKVxuLVx0ICogdGhhdCByZXR1cm5zIHdyaXRhYmxlIG1lbW9yeSBpbiB0aGUgbW9kdWxlIGFkZHJlc3Mgc3BhY2UuXG4tXHQgKi9cbi1cdGltYWdlID0gZXhlY21lbV9hbGxvYyhFWEVDTUVNX01PRFVMRV9EQVRBLCBQQUdFX1NJWkUpO1xuLVx0aWYgKCFpbWFnZSlcbitcdGlmICghdHJhbXBvbGluZV9zaXplX2ltYWdlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKFx1MDAyNmltLCBpbWFnZSwgaW1hZ2UgKyBQQUdFX1NJWkUsIGltYWdlLFxuLVx0XHRcdFx0XHQgICAgbSwgZmxhZ3MsIHRub2RlcywgZnVuY19hZGRyKTtcbi1cdGV4ZWNtZW1fZnJlZShpbWFnZSk7XG4tXHRyZXR1cm4gcmV0O1xuK1x0cmV0dXJuIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKFx1MDAyNmltLCB0cmFtcG9saW5lX3NpemVfaW1hZ2UsXG4rXHRcdFx0XHRcdCAgICAgdHJhbXBvbGluZV9zaXplX2ltYWdlICsgUEFHRV9TSVpFLFxuK1x0XHRcdFx0XHQgICAgIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSwgbSwgZmxhZ3MsXG4rXHRcdFx0XHRcdCAgICAgdG5vZGVzLCBmdW5jX2FkZHIpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGVtaXRfYnBmX2Rpc3BhdGNoZXIodTggKipwcHJvZywgaW50IGEsIGludCBiLCBzNjQgKnByb2dzLCB1OCAqaW1hZ2UsIHU4ICpidWYpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDozMDozOS40MTIyODI5MThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzU2NDI0MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEpJVCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkaXNzZWN0IHRoZSBkaWZmIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcy4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoaXMgbG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb24gZm9yIHRoZSBCUEYgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3Mgb24gYW1kNjQgYXJjaGl0ZWN0dXJlLiBUaGUgbWFpbiB0aHJ1c3QgaXMgdGhlIG1vZGlmaWNhdGlvbiBvZiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC5cblxuU3BlY2lmaWNhbGx5LCBpdCdzIGFkZGluZyBhIHN0YXRpYyBidWZmZXIsIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgLCB3aGljaCBpcyBhbGxvY2F0ZWQgZHVyaW5nIGJvb3QgdmlhIGBpbml0X3RyYW1wb2xpbmVfc2l6ZV9pbWFnZWAgdXNpbmcgYGV4ZWNtZW1fYWxsb2NgLiBUaGlzIGlzIGluaXRpYWxpemVkIGFzIGEgYGxhdGVfaW5pdGNhbGxgLiBJdCBhcHBlYXJzIHRoaXMgc2luZ2xlIGJ1ZmZlciB3aWxsIHRoZW4gYmUgcmV1c2VkLiBQcmV2aW91c2x5LCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCB3YXMgZHluYW1pY2FsbHkgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBtZW1vcnkgdXNpbmcgYGV4ZWNtZW1fYWxsb2NgIGFuZCBgZXhlY21lbV9mcmVlYCBvbiBlYWNoIGNhbGwgdG8gYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZSgpYC4gU28sIGluc3RlYWQgb2YgYWxsb2NhdGluZyBhbmQgZGVhbGxvY2F0aW5nIG1lbW9yeSBvbiB0aGUgZmx5LCB3ZSdyZSBub3cgcmV1c2luZyBhIHByZS1hbGxvY2F0ZWQgYnVmZmVyLiBUaGlzIGNhbiBiZSBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIHdpbiBieSBhdm9pZGluZyB0aG9zZSByZXBlYXRlZCBhbGxvY2F0aW9ucy5cblxuTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQgYXJvdW5kIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgb2Z0ZW4gaXQncyBjYWxsZWQsIHdoYXQgbG9ja3MgYXJlIGludm9sdmVkLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2Ugd2lsbCBiZS4gSSdsbCBwcm9iYWJseSB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgIGFuZCBpdHMgY2FsbGVycywgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyBvciByYWNlIGNvbmRpdGlvbnMuIEkgYWxzbyB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgY2hhbmdlcyB0byB0aGUgdHJhbXBvbGluZSBzaXplLCBmb3IgZXhhbXBsZSwgdG8gZW5zdXJlIGl0IGRvZXMgbm90IG92ZXJydW4gdGhlIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGJ1ZmZlci4gVGhpcyBhbGwgbG9va3MgcmVsYXRpdmVseSBzYWZlLCBidXQgYmVzdCBwcmFjdGljZSBpcyB0byBjb25maXJtIHRoYXQgYW55IGFzc3VtcHRpb25zIHJlZ2FyZGluZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgY29uY3VycmVuY3kgc3RpbGwgaG9sZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ1MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMwOjQ0Ljc2ODcxMDI4OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQxMzUwOTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yOTg4PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19mc2Vzc2lvbih2b2lkKVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjk5Mi1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoyOTkzOmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjk5NC1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz0yMTM4PWludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJvX2ltYWdlLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMTc1LVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MjE3NjppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjE3Ny1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYz04MTI9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1hZ2UsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTExOTEtXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzoxMTkyOmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMTkzLVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEwMzA9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTMzNi1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzMzc6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMzgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9MjY5OD1zdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0zMDE1LVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MzAxNjppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMzAxNy1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqb3JpZ19jYWxsKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM5ODA9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqaW1hZ2UsIHZvaWQgKmltYWdlX2VuZCxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDA4LVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0MDA5OmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMTAtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MTMxNz1pbnQgX19tdXN0X2NoZWNrIGFyY2hfcHJvdGVjdF9icGZfdHJhbXBvbGluZSh2b2lkICppbWFnZSwgdW5zaWduZWQgaW50IHNpemUpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6MTMxODppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbmluY2x1ZGUvbGludXgvYnBmLmgtMTMxOS1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz02Mzc9aW50IGJwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjUzLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2NTQ6XFx0c2l6ZSA9IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShtb2RlbCwgZmxhZ3MsIHRub2Rlcywgc3R1Yl9mdW5jKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjU1LVxcdGlmIChzaXplIFxcdTAwM2M9IDApXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz03MTA9c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc2MS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3NjI6XFx0c2l6ZSA9IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShcXHUwMDI2dHItXFx1MDAzZWZ1bmMubW9kZWwsIHRyLVxcdTAwM2VmbGFncyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NjMtXFx0XFx0XFx0XFx0XFx0dG5vZGVzLCB0ci1cXHUwMDNlZnVuYy5hZGRyKTtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1MDg9aW50IF9fd2VhayBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUxMy1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTE0OmludCBfX3dlYWsgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MTUtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDozMDo0Ni41MTAwNjY0MDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDk0NTE2ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgeDg2IEJQRiBKSVQgVHJhbXBvbGluZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHNwZWNpZmljcywgcGFydGljdWxhcmx5IHRoZSB0cmFtcG9saW5lIG1lY2hhbmlzbS4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCBhbmQgZm9jdXMgb24gaG93IHRoZSB0cmFtcG9saW5lIGlzIHNpemVkIGFuZCBwcmVwYXJlZC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBhbmQgaG93IGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgd29ya3MuIFVuZGVyc3RhbmRpbmcgdGhlc2UgdHdvIHBpZWNlcyBpcyBrZXkgdG8gZ3Jhc3BpbmcgaG93IHRoZSBKSVQgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJ3MgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZlYXR1cmVzIGFuZCB3aGF0IG9wdGltaXphdGlvbnMgYXJlIHBvc3NpYmxlLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyByaXBlIGZvciBpbXByb3ZlbWVudCByZWxhdGVkIHRvIHRoZSB0cmFtcG9saW5lJ3Mgb3ZlcmhlYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2OTEsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDozMDo0OC42MDQ1ODU2NTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTkyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM5ODA6XFx0aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqaW1hZ2UsIHZvaWQgKmltYWdlX2VuZCxcXG4zOTgxOlxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbjM5ODI6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLFxcbjM5ODM6XFx0XFx0XFx0XFx0XFx0dm9pZCAqZnVuY19hZGRyKVxcbjM5ODQ6XFx0e1xcbjM5ODU6XFx0XFx0dm9pZCAqcndfaW1hZ2UsICp0bXA7XFxuMzk4NjpcXHRcXHRpbnQgcmV0O1xcbjM5ODc6XFx0XFx0dTMyIHNpemUgPSBpbWFnZV9lbmQgLSBpbWFnZTtcXG4zOTg4OlxcdFxcbjM5ODk6XFx0XFx0LyogcndfaW1hZ2UgZG9lc24ndCBuZWVkIHRvIGJlIGluIG1vZHVsZSBtZW1vcnkgcmFuZ2UsIHNvIHdlIGNhblxcbjM5OTA6XFx0XFx0ICogdXNlIGt2bWFsbG9jLlxcbjM5OTE6XFx0XFx0ICovXFxuMzk5MjpcXHRcXHRyd19pbWFnZSA9IGt2bWFsbG9jKHNpemUsIEdGUF9LRVJORUwpO1xcbjM5OTM6XFx0XFx0aWYgKCFyd19pbWFnZSlcXG4zOTk0OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjM5OTU6XFx0XFxuMzk5NjpcXHRcXHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShpbSwgcndfaW1hZ2UsIHJ3X2ltYWdlICsgc2l6ZSwgaW1hZ2UsIG0sXFxuMzk5NzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgZmxhZ3MsIHRub2RlcywgZnVuY19hZGRyKTtcXG4zOTk4OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjM5OTk6XFx0XFx0XFx0Z290byBvdXQ7XFxuNDAwMDpcXHRcXG40MDAxOlxcdFxcdHRtcCA9IGJwZl9hcmNoX3RleHRfY29weShpbWFnZSwgcndfaW1hZ2UsIHNpemUpO1xcbjQwMDI6XFx0XFx0aWYgKElTX0VSUih0bXApKVxcbjQwMDM6XFx0XFx0XFx0cmV0ID0gUFRSX0VSUih0bXApO1xcbjQwMDQ6XFx0b3V0OlxcbjQwMDU6XFx0XFx0a3ZmcmVlKHJ3X2ltYWdlKTtcXG40MDA2OlxcdFxcdHJldHVybiByZXQ7XFxuNDAwNzpcXHR9XFxuNDAwODpcXHRcXG40MDA5OlxcdGludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuNDAxMDpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxcbjQwMTE6XFx0e1xcbjQwMTI6XFx0XFx0c3RydWN0IGJwZl90cmFtcF9pbWFnZSBpbTtcXG40MDEzOlxcdFxcbjQwMTQ6XFx0XFx0aWYgKCF0cmFtcG9saW5lX3NpemVfaW1hZ2UpXFxuNDAxNTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG40MDE2OlxcdFxcbjQwMTc6XFx0XFx0cmV0dXJuIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKFxcdTAwMjZpbSwgdHJhbXBvbGluZV9zaXplX2ltYWdlLFxcbjQwMTg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0cmFtcG9saW5lX3NpemVfaW1hZ2UgKyBQQUdFX1NJWkUsXFxuNDAxOTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSwgbSwgZmxhZ3MsXFxuNDAyMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHRub2RlcywgZnVuY19hZGRyKTtcXG40MDIxOlxcdH1cXG40MDIyOlxcdFxcbjQwMjM6XFx0c3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLCB1OCAqYnVmKVxcbjQwMjQ6XFx0e1xcbjQwMjU6XFx0XFx0dTggKmpnX3JlbG9jLCAqcHJvZyA9ICpwcHJvZztcXG40MDI2OlxcdFxcdGludCBwaXZvdCwgZXJyLCBqZ19ieXRlcyA9IDE7XFxuNDAyNzpcXHRcXHRzNjQgamdfb2Zmc2V0O1xcbjQwMjg6XFx0XFxuNDAyOTpcXHRcXHRpZiAoYSA9PSBiKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMwOjQ4LjYwNDgwNjYxMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MDM0OTg1OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb25zIGluIEJQRiBUcmFtcG9saW5lIFByZXBhcmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzY3J1dGluaXplIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgYW5kLCBzcGVjaWZpY2FsbHksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYC4gSSBuZWVkIHRvIGFzY2VydGFpbiB3aGV0aGVyIGNvbmN1cnJlbnQgY2FsbHMgdG8gYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgYXJlIGV2ZW4gcG9zc2libGUsIGFuZCBpZiB0aGV5IGFyZSwgd2hldGhlciBhbnkgYXBwcm9wcmlhdGUgbG9ja2luZyBtZWNoYW5pc21zIGFyZSBpbiBwbGFjZSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucy5cblxuV2FpdCBhIG1pbnV0ZSwgc29tZXRoaW5nJ3MgcGluZ2luZyBteSByYWRhci4gVGhlIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgLi4uIHRoYXQncyBhICpzaW5nbGUqLCBzdGF0aWMgYnVmZmVyLCBhbmQgaXRzIHNpemUgaXMsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgYSBQQUdFX1NJWkUuIFJpZ2h0LiBUaGF0J3Mgd2hlcmUgdGhlIHByb2JsZW0gY291bGQgYmUuXG5cblNvLCAqd2hlbiogYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgaXMgaW52b2tlZCwgYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpcyAqd3JpdGluZyogaW50byBgdHJhbXBvbGluZV9zaXplX2ltYWdlYC4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHNldHVwIHRoYXQgc2NyZWFtcyByYWNlIGNvbmRpdGlvbiBwb3RlbnRpYWwuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIHZlcmlmeSBob3cgdGhlIGJ1ZmZlciBpcyBoYW5kbGVkIGFuZCBpZiBjb25jdXJyZW50IGFjY2Vzc2VzIGFyZSBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzgwLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzA6NTEuMjA4MzA2Njk0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDg3MjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzU1NT1zdGF0aWMgaW50IGludm9rZV9icGZfbW9kX3JldChjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHByb2csXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY1Ni0gKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzY1NzpzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbWFnZSxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY1OC1cXHRcXHRcXHRcXHRcXHQgdm9pZCAqcndfaW1hZ2VfZW5kLCB2b2lkICppbWFnZSxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zOTgwPWludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmltYWdlLCB2b2lkICppbWFnZV9lbmQsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzk5NS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mzk5NjpcXHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShpbSwgcndfaW1hZ2UsIHJ3X2ltYWdlICsgc2l6ZSwgaW1hZ2UsIG0sXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM5OTctXFx0XFx0XFx0XFx0XFx0ICAgIGZsYWdzLCB0bm9kZXMsIGZ1bmNfYWRkcik7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9NDAwOT1pbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMTYtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQwMTc6XFx0cmV0dXJuIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKFxcdTAwMjZpbSwgdHJhbXBvbGluZV9zaXplX2ltYWdlLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDE4LVxcdFxcdFxcdFxcdFxcdCAgICAgdHJhbXBvbGluZV9zaXplX2ltYWdlICsgUEFHRV9TSVpFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDozMDo1MS4yNTYzOTgxMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MTg2MTU4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBVc2FnZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAuIE15IGZvY3VzIGlzIG9uIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKnVzZWQqLiBJIHNlZSB0aGF0IGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGFuZCBgYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lYCBib3RoIGNhbGwgaXQuIFRoYXQgdGVsbHMgbWUgdGhhdCB0aGlzIHNpemUgY2FsY3VsYXRpb24gaXMgY3J1Y2lhbCBmb3IgdGhlc2UgdHJhbXBvbGluZS1yZWxhdGVkIG9wZXJhdGlvbnMuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpjb250ZXh0KiBvZiB0aGVzZSBjYWxscy4gVGltZSB0byBjaGVjayB0aGUgc291cmNlLiBJJ20gZ29pbmcgdG8gbG9vayBzcGVjaWZpY2FsbHkgaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCBhbmQgYGtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY2AgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHV0aWxpemluZyBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGluc2lnaHRmdWwgZGVwZW5kZW5jaWVzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDozMDo1My4wNzUwMTYyNjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDM0MTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NjM3PWludCBicGZfc3RydWN0X29wc19wcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLFxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY1My1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NjU0OlxcdHNpemUgPSBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUobW9kZWwsIGZsYWdzLCB0bm9kZXMsIHN0dWJfZnVuYyk7XFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTY1NS1cXHRpZiAoc2l6ZSBcXHUwMDNjPSAwKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NzEwPXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NjEtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzYyOlxcdHNpemUgPSBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoXFx1MDAyNnRyLVxcdTAwM2VmdW5jLm1vZGVsLCB0ci1cXHUwMDNlZmxhZ3MsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzYzLVxcdFxcdFxcdFxcdFxcdHRub2RlcywgdHItXFx1MDAzZWZ1bmMuYWRkcik7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTA4PWludCBfX3dlYWsgYXJjaF9wcm90ZWN0X2JwZl90cmFtcG9saW5lKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1MTMtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTUxNDppbnQgX193ZWFrIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTE1LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzA6NTMuMTIzMDU3NjYyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NzAzMzA4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFRyYW1wb2xpbmUgYW5kIEpJVCBDb21waWxhdGlvbiBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzOiBpcyB0aGlzIEJQRiB0cmFtcG9saW5lIGFuZCBKSVQgY29tcGlsYXRpb24gZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgd2l0aGluIGEgUUVNVS9hbWQ2NCBlbnZpcm9ubWVudD8gWWVzLCBCUEYgaXMgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwsIGFuZCBuYXR1cmFsbHksIGl0IGV4ZWN1dGVzIG9uIGFtZDY0IHdpdGhpbiBRRU1VLiBUaGF0J3MgYSBnaXZlbi4gTm93LCBsZXQncyBkaWcgaW50byBTZWN0aW9uIDMgb2YgdGhlIHJlbGV2YW50IGd1aWRlbGluZXMuXG5cblRoZSBndWlkZWxpbmVzIHN0YXRlIHdlIHNob3VsZCBjb25zaWRlciBwYXRjaGVzIFwiV29ydGhGdXp6aW5nXCIgaWYgdGhleSB0b3VjaCByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBhbmQgd2UgaGF2ZSBhIGZldyBrZXkgYXJlYXMgdG8gZm9jdXMgb246IGNvcmUgc3Vic3lzdGVtcyBhbmQgcmVmYWN0b3JpbmdzL2NvZGUgY2xlYW51cHMuIFRoZSBjcnVjaWFsIHBpZWNlIGlzIHRoYXQgdGhpcyBwYXRjaCAqZG9lcyogbW9kaWZ5IEJQRiBKSVQgY29kZSBmb3IgeDg2IHNwZWNpZmljYWxseSB3aXRoaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoaXMgY29kZSBnZXRzIGV4ZWN1dGVkIHdoZW5ldmVyIEJQRiB0cmFtcG9saW5lcyBhcmUgY3JlYXRlZCBvciBzaXplZCwgd2hpY2ggaXMgY29tbW9uIGR1cmluZyBmZXhpdCwgZmVudHJ5LCBzdHJ1Y3Rfb3BzLCBhbmQgb3RoZXIgc2ltaWxhciBvcGVyYXRpb25zLlxuXG5GdXJ0aGVybW9yZSwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCB0aGV5IGFyZSBzaGFyaW5nIHRoZSBzdGF0aWMgZ2xvYmFsIGJ1ZmZlciBgdHJhbXBvbGluZV9zaXplX2ltYWdlYCBhY3Jvc3MgYWxsIGNhbGxlcnMgb2YgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgd2l0aG91dCBwZXItY2FsbCBhbGxvY2F0aW9uLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGludGVyZXN0aW5nIHJhY2UgY29uZGl0aW9ucy4gV2hpbGUgdGhleSBtYXkgYmUgc2VyaWFsaXplZCwgdGhpcyBjb3VsZCBzdGlsbCBoYXZlIGFuIGltcGFjdCBvbiBob3cgdGhlIEJQRiB0cmFtcG9saW5lcyBhcmUgY3JlYXRlZC4gU2hhcmluZyBhIGJ1ZmZlciBsaWtlIHRoYXQgYW5kIG1lc3Npbmcgd2l0aCBob3cgbWVtb3J5IGlzIHVzZWQgd2l0aGluIEJQRiBpcyBhbHdheXMgd29ydGggYSBzZWNvbmQgbG9vay5cblxuRmluYWxseSwganVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIEtjb25maWcgb3B0aW9ucyByZXF1aXJlZCBmb3IgdGhpcyBmaWxlIGFuZCBjb2RlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBhcmNoL3g4Ni9uZXQvTWFrZWZpbGVgIG9yIHdoYXRldmVyIGJ1aWxkIGZpbGUgYGJwZl9qaXRfY29tcC5jYCBpcyBjb21waWxlZCBieSwgdG8gc2VlIGhvdyB0byBlbmFibGUgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQxMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDozMDo1Ni43OTMzOTA4NzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Njk5MjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9qaXRfY29tcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9NYWtlZmlsZT02PWlmZXEgKCQoQ09ORklHX1g4Nl8zMikseSlcXG5hcmNoL3g4Ni9uZXQvTWFrZWZpbGU6NzogICAgICAgIG9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvbXAzMi5vXFxuYXJjaC94ODYvbmV0L01ha2VmaWxlLTgtZWxzZVxcbmFyY2gveDg2L25ldC9NYWtlZmlsZTo5OiAgICAgICAgb2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29tcC5vIGJwZl90aW1lZF9tYXlfZ290by5vXFxuYXJjaC94ODYvbmV0L01ha2VmaWxlLTEwLWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMwOjU2LjgzODA5NDk2OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTU4MTYwNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgQlBGIHNpdHVhdGlvbi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBlbmFibGVkLiBMZXQncyBzdGFydCB3aXRoIHRoZSBiYXNpY3Mg4oCTIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGBLY29uZmlnYCBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBzdGF0dXMgb2YgYENPTkZJR19CUEZfSklUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAuIEtub3dpbmcgdGhlIHN0YXRlIG9mIHRob3NlIHR3byBvcHRpb25zIGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuIEl0J2xsIHRlbGwgbWUgaWYgdGhlIEpJVCBjb21waWxlciBhbmQgdGhlIHN5c3RlbSBjYWxsIGludGVyZmFjZSBhcmUgZXZlbiBhdmFpbGFibGUuIFdpdGhvdXQgdGhvc2UsIEknbSB3YXN0aW5nIG15IHRpbWUgbG9va2luZyBlbHNld2hlcmUuIFRoaXMgaXMgdGhlIGZvdW5kYXRpb247IGZyb20gaGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucy4gSXQncyBhIHF1aWNrIGNoZWNrIHRoYXQgd2lsbCBzYXZlIG1lIHRpbWUgZG93biB0aGUgcm9hZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI5NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMwOjU4Ljc5NjI1ODUxOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyNjMxMzQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0pJVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MzE9Y29uZmlnIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNDUtXFxua2VybmVsL2JwZi9LY29uZmlnOjQ2OmNvbmZpZyBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTYxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo2Mjpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNjMtXFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNzItXFxua2VybmVsL2JwZi9LY29uZmlnOjczOmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNzQtXFx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnPTk2PWNvbmZpZyBCUEZfTFNNXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctMTA3LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoxMDg6Y29uZmlnIEJQRl9KSVRfS0FTQU5cXG5rZXJuZWwvYnBmL0tjb25maWctMTA5LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzE6MDAuNTIyNTc3MzM0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMDY2MDEwMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIEJQRiBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gTGV0J3MgemVybyBpbiBvbiBga2VybmVsL2JwZi9LY29uZmlnYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIGBCUEZfSklUYCBhbmQgYEJQRl9TWVNDQUxMYCwgcGFydGljdWxhcmx5IGhvdyB0aGV5J3JlIGV4cG9zZWQgYW5kIGNvbmRpdGlvbmVkLiBNeSBmb2N1cyBpcyBvbiBlbnN1cmluZyB0aGUgcmlnaHQgZmVhdHVyZSBmbGFncyBhcmUgZW5hYmxlZCB0byBzdXBwb3J0IHRoZSBkZXNpcmVkIEJQRiB1c2UgY2FzZXMsIGFuZCBob3cgdGhlIHN5c2NhbGwgaW50ZXJmYWNlIGlzIGFmZmVjdGVkIGJ5IEpJVCBjb21waWxhdGlvbi4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBoYXZlIGJlZW4gYW55IHJlY2VudCBjaGFuZ2VzIHRoYXQgY291bGQgaW1wYWN0IHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5IHBvc3R1cmUuIEknbGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHN0YXRlcywgYW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBzcGVjaWZpYyBCUEYgcHJvZ3JhbXMgSSdtIHdvcmtpbmcgd2l0aC4gVGhpcyB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzIGluIHRoZSBjdXJyZW50IHByb2plY3QsIGFzIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBzeXN0ZW0gSSBhbSBkZXZlbG9waW5nIHdvcmtzIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODIyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzE6MDIuODI5MTgwMjcxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRcXG4gIDMxOlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMzI6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMzM6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzQ6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDM2OlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDM3OlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzODpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzk6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICA0MDpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgNDE6XFx0XFx0ZGVmYXVsdCBuXFxuICA0MjpcXHRcXHRoZWxwXFxuICA0MzpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQ0OlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdGNvbmZpZyBCUEZfSklUXFxuICA0NzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbiAgNTA6XFx0XFx0c2VsZWN0IEVYRUNNRU1cXG4gIDUxOlxcdFxcdGhlbHBcXG4gIDUyOlxcdFxcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxcbiAgNTM6XFx0XFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcXG4gIDU0OlxcdFxcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxcbiAgNTU6XFx0XFx0ICBwcm9ncmFtcy5cXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcXG4gIDU4OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXFxuICA1OTpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcXG4gIDYwOlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxcbiAgNjE6XFx0XFxuICA2MjpcXHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG4gIDYzOlxcdFxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbiAgNjQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBIQVZFX0VCUEZfSklUIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVRcXG4gIDY1OlxcdFxcdGhlbHBcXG4gIDY2OlxcdFxcdCAgRW5hYmxlcyBCUEYgSklUIGFuZCByZW1vdmVzIEJQRiBpbnRlcnByZXRlciB0byBhdm9pZCBzcGVjdWxhdGl2ZVxcbiAgNjc6XFx0XFx0ICBleGVjdXRpb24gb2YgQlBGIGluc3RydWN0aW9ucyBieSB0aGUgaW50ZXJwcmV0ZXIuXFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdCAgV2hlbiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04gaXMgZW5hYmxlZCwgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMxOjAyLjgyOTI0NDI1MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjUzMjgwOTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIGZvciBCUEYgRXZlbnQgRGVwZW5kZW5jaWVzIGluIFRyYW1wb2xpbmVzKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRyYW1wb2xpbmVzIGFuZCBob3cgdGhleSdyZSBpbXBsZW1lbnRlZC4gVGhlIHRhc2sgYXQgaGFuZCBpbnZvbHZlcyBmaWd1cmluZyBvdXQgdGhlIGRlcGVuZGVuY2llcyBvZiBvdXIgdHJhbXBvbGluZXMsIGluIHRoaXMgY2FzZSBsb29raW5nIGF0IHdoZXRoZXIgd2UgbmVlZCBgQlBGX0VWRU5UU2Agb3IgYW55IG90aGVyIHJlbGV2YW50IG1lY2hhbmlzbXMgZm9yIHRoZW0gdG8gd29yayBwcm9wZXJseS4gR2l2ZW4gdGhhdCB0cmFtcG9saW5lcyBpbnZvbHZlIHJlZGlyZWN0aW5nIGV4ZWN1dGlvbiBmbG93LCBhbmQgd2UncmUgZGVhbGluZyB3aXRoIEJQRiwgbXkgaW5pdGlhbCBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgbG93LWxldmVsIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIFRvIHVuZGVyc3RhbmQgdGhpcyBwcm9wZXJseSwgSSdtIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCB0byBzZWUgaG93IHRoZSBjb3JlIHRyYW1wb2xpbmUgZnVuY3Rpb25hbGl0eSBpcyBoYW5kbGVkLiBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIGFueSBpbnRlcmFjdGlvbiBiZXR3ZWVuIG9wZXJhdGlvbnMgdXNlZCB0byBkZWZpbmUgdGhlc2UgaW5zdHJ1Y3Rpb25zLiBUaGVyZWZvcmUsIGBicGZfc3RydWN0X29wcy5jYCBpcyB0aGUgbmV4dCBwbGFjZSBJIG5lZWQgdG8gcmV2aWV3LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIGV2ZW50IGhvb2tzIG9yIHNwZWNpZmljIHN0cnVjdCBvcGVyYXRpb25zIGFyZSBwYXJ0IG9mIHRoaXMgcHJvY2VzcyB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgbWlzc2luZyBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBoaW5kZXIgb3VyIGdvYWwuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGdldHRpbmcgdGhlIGFyY2hpdGVjdHVyZSByaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2OTMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMxOjA1LjQ4MjUyNzY1MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI3MTAzODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJhbXBvbGluZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkaXNhc20ubyBtcHJvZy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gdHJhbXBvbGluZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz01Nz1zdGF0aWMgdm9pZCB0cmFtcG9saW5lX3VubG9jayhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNjEtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NjI6c3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNjMtXFx0aW50ICgqcmVnaXN0ZXJfZmVudHJ5KShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqZGF0YSk7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz03MD1zdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4LFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcxOlxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzICpvcHMsIHZvaWQgKmRhdGEpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHRyYW1wb2xpbmVfb3BzO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTczLVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTg9c3RhdGljIGludCBicGZfdHJhbXBfZnRyYWNlX29wc19mdW5jKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGxvbmcgaXAsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTctXFx0XFx0XFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHRyLCBmYWxzZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU5LVxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY0LVxcdFxcdFxcdHJldCA9IGJwZl90cmFtcG9saW5lX3VwZGF0ZSh0ciwgZmFsc2UgLyogbG9ja19kaXJlY3RfbXV0ZXggKi8sXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2Ni1cXHRcXHRicmVhaztcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQ3Mz1zdGF0aWMgaW50IHJlZ2lzdGVyX2ZlbnRyeShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTUwMC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo1MDE6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9vcHMgPSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNTAyLVxcdC5yZWdpc3Rlcl9mZW50cnkgICA9IHJlZ2lzdGVyX2ZlbnRyeSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTcxMD1zdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4LFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjcxMTpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyAqb3BzLCB2b2lkICpkYXRhKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcxMi17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05NDI9c3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NDQtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5NDU6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyAqb3BzLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk0Ni1cXHRcXHRcXHRcXHQgICAgICB2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTkwPWludCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTk2LVxcdHRyYW1wb2xpbmVfbG9jayh0cik7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTk3OlxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKG5vZGUsIHRyLCB0Z3RfcHJvZywgXFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05OTgtXFx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTAwMj1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAwNC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKnRndF9wcm9nLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwMDU6XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyAqb3BzLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMDYtXFx0XFx0XFx0XFx0XFx0dm9pZCAqZGF0YSlcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTEwMjc9aW50IGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMzMtXFx0dHJhbXBvbGluZV9sb2NrKHRyKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDM0OlxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2cobm9kZSwgdHIsIHRndF9wcm9nLCBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMzUtXFx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTEyMz1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTY1LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjExNjY6XFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXFx1MDAyNnNoaW1fbGluay1cXHUwMDNlbGluay5ub2RlLCB0ciwgTlVMTCwgXFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTY3LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNjA2PXN0YXRpYyBpbnQgbW9kaWZ5X2ZlbnRyeV9tdWx0aShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgb3JpZ19mbGFncywgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjIwLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2MjE6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9tdWx0aV9vcHMgPSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYyMi1cXHQucmVnaXN0ZXJfZmVudHJ5ICAgPSByZWdpc3Rlcl9mZW50cnlfbXVsdGksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMxOjA1LjUzNTI0NTc4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODAwMDE0MTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBEYXRhIFJhY2UgaW4gQlBGIFRyYW1wb2xpbmUgVXBkYXRlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIGNvbmNlcm5pbmcuIGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGhhcyBhIGxvY2sgYXQgdGhlIHRyYW1wb2xpbmUgbGV2ZWwuIEJ1dCBlYWNoIHRyYW1wb2xpbmUgaGFzIGl0cyBvd24gbXV0ZXguIFRoaXMgbWVhbnMgdHdvIHNlcGFyYXRlIHRocmVhZHMgY291bGQgYmUgdXBkYXRpbmcgZGlmZmVyZW50IHRyYW1wb2xpbmVzIHNpbXVsdGFuZW91c2x5LiBXaGVuIHRoaXMgaGFwcGVucywgYm90aCB0aHJlYWRzIGNvdWxkIGNhbGwgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgY29uY3VycmVudGx5LCBhbmQgY3J1Y2lhbGx5LCB0aGV5IGNvdWxkIHdyaXRlIHRvIHRoZSBzaGFyZWQgYHRyYW1wb2xpbmVfc2l6ZV9pbWFnZWAgYXQgdGhlIHNhbWUgdGltZS4gVGhhdCdzIGEgdGV4dGJvb2sgZGF0YSByYWNlIHJpZ2h0IHRoZXJlIG9uIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgLiBUaGlzIGlzIGFuIG9idmlvdXMgYXJlYSBmb3IgZnV6emluZy5cblxuSSBhbHNvIG5lZWQgdG8gY2hlY2sgYGtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY2AuIEl0IGxvb2tzIGxpa2UgYGJwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZWAgaXMgY2FsbGVkIHdoZW4gc3RydWN0X29wcyBtYXBzIGFyZSBjcmVhdGVkIG9yIHVwZGF0ZWQuIFRoaXMgZnVuY3Rpb24gYWxzbyBzZWVtcyB0byBjYWxsIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgLiBUaGlzIHBhdGggaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHN0cmVuZ3RoZW5zIHRoZSBjYXNlIGZvciBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIHNlZSB3aGljaCBzeW1ib2xzIGFyZSByZWxldmFudCBmb3IgdGhpcy4gTG9va2luZyBhdCBGb2N1c1N5bWJvbHMsIGhlcmUncyB3aGF0IHN0YW5kcyBvdXQ6XG5cbjEuICBgaW5pdF90cmFtcG9saW5lX3NpemVfaW1hZ2VgOiBUaGlzIGlzIGFuIGluaXRjYWxsLCBidXQgaXQncyBzdGF0aWMgYW5kIG9ubHkgY2FsbGVkIGF0IGJvb3QsIHNvIGxpa2VseSBub3QgYSBjb25jZXJuIGZvciBhIHJ1bnRpbWUgZGF0YSByYWNlLlxuMi4gIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgOiBUaGlzIGlzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiB0aGF0J3MgZXhwb3J0ZWQgaW4gYSBoZWFkZXIgYW5kIGNhbGxlZCBieSBCUEYuIFRoaXMgaXMgYXQgdGhlIGhlYXJ0IG9mIHRoZSBpc3N1ZSFcbjMuICBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgOiBUaGlzIGlzIGNhbGxlZCBieSBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYC5cbjQuICBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYDogVGhpcyBpcyB0aGUgY2FsbGVyIG9mIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AuXG41LiAgYGJwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZWA6IFRoaXMgaXMgYWxzbyBhIGNhbGxlciBvZiBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBpbiBga2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jYC5cblxuQ2hlY2tpbmcgc3ltYm9sIHZpc2liaWxpdHksIGBpbml0X3RyYW1wb2xpbmVfc2l6ZV9pbWFnZWAgaXMgc3RhdGljLiBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBpcyBub24tc3RhdGljIGFuZCBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpcyBzdGF0aWMgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGlzIG5vbi1zdGF0aWMgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGlzIHN0YXRpYywgY2FsbGVkIGJ5IGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLCBgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2dgLCBldGMuIGBicGZfc3RydWN0X29wc19wcmVwYXJlX3RyYW1wb2xpbmVgIGlzIG5vbi1zdGF0aWMgaW4gYGtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY2AuXG5cbldlJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGNlcnRhaW4gY29uZmlncyBhcmUgZW5hYmxlZC4gVW5kZXIgRW5hYmxlQ29uZmlncywgYEJQRl9KSVRgIChhbmQgYEJQRl9TWVNDQUxMYCwgYW5kIGBCUEZgKSBtdXN0IGJlIGVuYWJsZWQuXG5cblNwZWNpZmljYWxseTpcblxuLSAgIGBDT05GSUdfQlBGX0pJVGBcbi0gICBgQ09ORklHX0JQRl9TWVNDQUxMYFxuLSAgIGBDT05GSUdfQlBGYFxuXG5Eb3VibGUtY2hlY2tpbmcgaW4gdGhlIE1ha2VmaWxlczogYGFyY2gveDg2L25ldC9NYWtlZmlsZWAgY29uZmlybXMgYG9iai0kKENPTkZJR19CUEZfSklUKSArPSBicGZfaml0X2NvbXAub2AgYW5kIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBzaG93cyBgb2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub2AsIGBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zi5vYCBldGMuIFNvIHllczpcblxuLSAgIGBCUEZfSklUYFxuLSAgIGBCUEZfU1lTQ0FMTGBcblxuUmVjYXAgb2YgRm9jdXNTeW1ib2xzOlxuXG4tICAgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWBcbi0gICBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgXG4tICAgYGJwZl90cmFtcG9saW5lX3VwZGF0ZWBcbi0gICBgYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lYFxuXG5HaXZlbiB0aGlzIHRob3JvdWdoIGludmVzdGlnYXRpb24sIEknbSBjb25maWRlbnQgaW4gdGhlIGZ1enppbmcgdmVyZGljdC4gSXQgYWxsIGNoZWNrcyBvdXQuIE5vdyBJIGNhbiBmb3JtdWxhdGUgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NDIsIk91dHB1dFRva2VucyI6MTgyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMxOjEyLjMzNTI2MjI0NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NTkyNjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZVwiLFxuICAgIFwiX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVcIixcbiAgICBcImJwZl90cmFtcG9saW5lX3VwZGF0ZVwiLFxuICAgIFwiYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgcGVyLWNhbGwgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoIGEgc2luZ2xlIHN0YXRpYyBnbG9iYWwgYnVmZmVyICh0cmFtcG9saW5lX3NpemVfaW1hZ2UpIGZvciBjYWxjdWxhdGluZyBCUEYgdHJhbXBvbGluZSBzaXplIGluIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZSgpLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgaW4gdGhlIHg4NiBCUEYgSklUIHN1YnN5c3RlbSB3aGVuIHVwZGF0aW5nIEJQRiB0cmFtcG9saW5lcyBvciBwcmVwYXJpbmcgQlBGIHN0cnVjdF9vcHMuIEZ1enppbmcgY2FuIHZlcmlmeSBjb3JyZWN0bmVzcywgbWVtb3J5IHNhZmV0eSwgYW5kIGNvbmN1cnJlbmN5IGJlaGF2aW9yIGFjcm9zcyBCUEYgdHJhbXBvbGluZSB1cGRhdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXJjaF9icGZfdHJhbXBvbGluZV9zaXplXCIsXG4gICAgXCJfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiLFxuICAgIFwiYnBmX3RyYW1wb2xpbmVfdXBkYXRlXCIsXG4gICAgXCJicGZfc3RydWN0X29wc19wcmVwYXJlX3RyYW1wb2xpbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBwZXItY2FsbCBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGggYSBzaW5nbGUgc3RhdGljIGdsb2JhbCBidWZmZXIgKHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSkgZm9yIGNhbGN1bGF0aW5nIEJQRiB0cmFtcG9saW5lIHNpemUgaW4gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKCkuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBpbiB0aGUgeDg2IEJQRiBKSVQgc3Vic3lzdGVtIHdoZW4gdXBkYXRpbmcgQlBGIHRyYW1wb2xpbmVzIG9yIHByZXBhcmluZyBCUEYgc3RydWN0X29wcy4gRnV6emluZyBjYW4gdmVyaWZ5IGNvcnJlY3RuZXNzLCBtZW1vcnkgc2FmZXR5LCBhbmQgY29uY3VycmVuY3kgYmVoYXZpb3IgYWNyb3NzIEJQRiB0cmFtcG9saW5lIHVwZGF0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMxOjEyLjQxMTg2MjQ2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDA2MzQxMTEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMxOjEyLjQxMjM2MzU4MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMwMDYyOTA1NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBkeW5hbWljIHBlci1jYWxsIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiAodmlhIGV4ZWNtZW1fYWxsb2MvZXhlY21lbV9mcmVlKSBvZiBhIGR1bW15IHNjcmF0Y2ggYnVmZmVyIGluIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZSgpIHdpdGggYSBzdGF0aWNhbGx5IHByZS1hbGxvY2F0ZWQgcGFnZSBidWZmZXIgKHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSkuIFRoZSBidWZmZXIgaXMgdXNlZCBzdHJpY3RseSBhcyBhIHdyaXRlLW9ubHkgc2luayBmb3IgaW5zdHJ1Y3Rpb24gZW1pc3Npb24gZHVyaW5nIGRyeS1ydW4gdHJhbXBvbGluZSBnZW5lcmF0aW9uIGluIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkgdG8gZGV0ZXJtaW5lIHRoZSByZXF1aXJlZCBidWZmZXIgc2l6ZS4gSXRzIGNvbnRlbnRzIGFyZSBuZXZlciByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YWNrIHZhcmlhYmxlcyBzdWNoIGFzICdpbScgYXJlIHBhc3NlZCB0byBzYXRpc2Z5IGZ1bmN0aW9uIHBhcmFtZXRlcnMgYW5kIGFyZSBub3QgcmVhZCB1bmluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrLCBvciBjb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIHN0YXRlIGlzIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkOyBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIHN1ZmZpY2VzIGZvciBhbnkgbWVtb3J5IHNhZmV0eSB2ZXJpZmljYXRpb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTc4YWRiYzgwZTVjYTYxYjNjN2YxNzA0ODc1ZTBkZmZhOGM5YjkzY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMjA6MzA6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IGJiYTM1MTk0NDIwMmMuLjEzZWYwZDUzY2EyOTYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTksNiArOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsdGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfdmVyaWZpZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbW9yeS5oXHUwMDNlXG5AQCAtMzUsNiArMzYsMTUgQEAgdm9pZCBfX2FzYW5fc3RvcmU4KHZvaWQgKnApO1xuIFxuIHN0YXRpYyBib29sIGFsbF9jYWxsZWVfcmVnc191c2VkWzRdID0ge3RydWUsIHRydWUsIHRydWUsIHRydWV9O1xuIFxuK3N0YXRpYyB2b2lkICp0cmFtcG9saW5lX3NpemVfaW1hZ2U7XG4rXG4rc3RhdGljIGludCBfX2luaXQgaW5pdF90cmFtcG9saW5lX3NpemVfaW1hZ2Uodm9pZClcbit7XG4rXHR0cmFtcG9saW5lX3NpemVfaW1hZ2UgPSBleGVjbWVtX2FsbG9jKEVYRUNNRU1fTU9EVUxFX0RBVEEsIFBBR0VfU0laRSk7XG4rXHRyZXR1cm4gdHJhbXBvbGluZV9zaXplX2ltYWdlID8gMCA6IC1FTk9NRU07XG4rfVxuK2xhdGVfaW5pdGNhbGwoaW5pdF90cmFtcG9saW5lX3NpemVfaW1hZ2UpO1xuK1xuIHN0YXRpYyB1OCAqZW1pdF9jb2RlKHU4ICpwdHIsIHUzMiBieXRlcywgdW5zaWduZWQgaW50IGxlbilcbiB7XG4gXHRpZiAobGVuID09IDEpXG5AQCAtNDAwMCwyNCArNDAxMCwxNCBAQCBpbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuIFx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXG4ge1xuIFx0c3RydWN0IGJwZl90cmFtcF9pbWFnZSBpbTtcbi1cdHZvaWQgKmltYWdlO1xuLVx0aW50IHJldDtcbiBcbi1cdC8qIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBmb3IgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKS5cbi1cdCAqXG4tXHQgKiBXZSBjYW5ub3QgdXNlIGt2bWFsbG9jIGhlcmUsIGJlY2F1c2Ugd2UgbmVlZCBpbWFnZSB0byBiZSBpblxuLVx0ICogbW9kdWxlIG1lbW9yeSByYW5nZS5cbi1cdCAqIFNpbmNlIGl0IG11c3QgYmUgd3JpdGFibGUgdXNlIGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9NT0RVTEVfREFUQSlcbi1cdCAqIHRoYXQgcmV0dXJucyB3cml0YWJsZSBtZW1vcnkgaW4gdGhlIG1vZHVsZSBhZGRyZXNzIHNwYWNlLlxuLVx0ICovXG4tXHRpbWFnZSA9IGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9NT0RVTEVfREFUQSwgUEFHRV9TSVpFKTtcbi1cdGlmICghaW1hZ2UpXG4rXHRpZiAoIXRyYW1wb2xpbmVfc2l6ZV9pbWFnZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcdTAwMjZpbSwgaW1hZ2UsIGltYWdlICsgUEFHRV9TSVpFLCBpbWFnZSxcbi1cdFx0XHRcdFx0ICAgIG0sIGZsYWdzLCB0bm9kZXMsIGZ1bmNfYWRkcik7XG4tXHRleGVjbWVtX2ZyZWUoaW1hZ2UpO1xuLVx0cmV0dXJuIHJldDtcbitcdHJldHVybiBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcdTAwMjZpbSwgdHJhbXBvbGluZV9zaXplX2ltYWdlLFxuK1x0XHRcdFx0XHQgICAgIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSArIFBBR0VfU0laRSxcbitcdFx0XHRcdFx0ICAgICB0cmFtcG9saW5lX3NpemVfaW1hZ2UsIG0sIGZsYWdzLFxuK1x0XHRcdFx0XHQgICAgIHRub2RlcywgZnVuY19hZGRyKTtcbiB9XG4gXG4gc3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLCB1OCAqYnVmKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzE6MTIuNDEyMzY1MjgxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkwNzA5NzYwMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgSklUIFRyYW1wb2xpbmUgU2l6ZSBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSB0byBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBvcHRpbWl6aW5nIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGZvciB0aGUgQlBGIHRyYW1wb2xpbmUgc2l6ZSBpbWFnZS4gU3BlY2lmaWNhbGx5LCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgc3RhdGljIGdsb2JhbCBwb2ludGVyLCBgdHJhbXBvbGluZV9zaXplX2ltYWdlYCwgaXMgYSBrZXkgYWx0ZXJhdGlvbi5cblxuQmVmb3JlLCBpbiBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCwgYSBuZXcgYGltYWdlYCB3YXMgYWxsb2NhdGVkIG9uIHRoZSBoZWFwIGZvciBlYWNoIGNhbGwgdXNpbmcgYGV4ZWNtZW1fYWxsb2NgLiBUaGUgY2hhbmdlIG1lbW9pemVzIHRoaXMgYWxsb2NhdGlvbiB1c2luZyB0aGUgc3RhdGljIHZhcmlhYmxlIGFuZCBpbml0aWFsaXNlcyBpdCBhdCBib290IHVzaW5nIGBsYXRlX2luaXRjYWxsKGluaXRfdHJhbXBvbGluZV9zaXplX2ltYWdlKWAuIE5vdywgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgc2ltcGx5IHJlLXVzZXMgdGhpcyBwcmUtYWxsb2NhdGVkIGJ1ZmZlci4gVGhpcyBkZWZpbml0ZWx5IHN1Z2dlc3RzIGFuIGVmZm9ydCB0byByZWR1Y2Ugb3ZlcmhlYWQsIGxpa2VseSBpbiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHBlcmZvcm1hbmNlIGdhaW5zLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybnMgYXJlIGFyb3VuZCB0aHJlYWQgc2FmZXR5IGFuZCB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBoZXJlLCBhcyBpdCdzIHRoZSBvbmUgdXNpbmcgdGhlIGFsbG9jYXRlZCBtZW1vcnkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYW5kIGlmIGFueSBjb25jdXJyZW50IGFjY2VzcyBpcyBwb3NzaWJsZS4gQWxzbywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW1hZ2UgaXMgaW5pdGlhbGl6ZWQgcHJvcGVybHkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHNoYXJlZCBidWZmZXIgaXMgYmVpbmcgbW9kaWZpZWQgaW4gYSB0aHJlYWQtdW5zYWZlIHdheS5cblxuSSdsbCB1c2UgbXkgdXN1YWwgdG9vbHMgLSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgLSB0byBleGFtaW5lIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgaXRzZWxmLCBpdHMgY2FsbGVycywgYW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgIGlzIHVzZWQuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIG9wdGltaXphdGlvbiBkb2Vzbid0IGludHJvZHVjZSBhbnkgc3VidGxlIGJ1Z3MsIHN1Y2ggYXMgZGF0YSBjb3JydXB0aW9uIG9yIHJhY2UgY29uZGl0aW9ucy4gSSdsbCBsb29rIGZvciBwb3RlbnRpYWwgbG9ja2luZyBtZWNoYW5pc21zLCBvciBsYWNrIHRoZXJlb2YuIEknbGwgYWxzbyB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiBtZW1vcnkgZm9vdHByaW50LiBQZXJoYXBzIHRoaXMgaXMgYSB0cmFkZS1vZmYgdGhhdCBpcyBzYXZpbmcgdXMgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2NCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMxOjIxLjQ4MzM0MzUzNloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIyMjAwOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNTU1PXN0YXRpYyBpbnQgaW52b2tlX2JwZl9tb2RfcmV0KGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcHJvZyxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjU2LSAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNjU3OnN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltYWdlLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjU4LVxcdFxcdFxcdFxcdFxcdCB2b2lkICpyd19pbWFnZV9lbmQsIHZvaWQgKmltYWdlLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM5ODA9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqaW1hZ2UsIHZvaWQgKmltYWdlX2VuZCxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zOTk1LVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozOTk2OlxcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKGltLCByd19pbWFnZSwgcndfaW1hZ2UgKyBzaXplLCBpbWFnZSwgbSxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzk5Ny1cXHRcXHRcXHRcXHRcXHQgICAgZmxhZ3MsIHRub2RlcywgZnVuY19hZGRyKTtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz00MDA5PWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDAxNi1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6NDAxNzpcXHRyZXR1cm4gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoXFx1MDAyNmltLCB0cmFtcG9saW5lX3NpemVfaW1hZ2UsXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMTgtXFx0XFx0XFx0XFx0XFx0ICAgICB0cmFtcG9saW5lX3NpemVfaW1hZ2UgKyBQQUdFX1NJWkUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMxOjIxLjUzNTU2ODU5N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODU5MzA4NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgdHJhbXBvbGluZSBpcyBwcmVwYXJlZCBvbiB4ODYsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgYW5kIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgIHdpdGhpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gVGhlIHRyYW1wb2xpbmUgaXMgY3JpdGljYWwgZm9yIHRoZSBKSVQgY29tcGlsYXRpb24gcHJvY2Vzcywgc28ga25vd2luZyBob3cgaXQncyBzZXQgdXAgYW5kIHNpemVkIGlzIGZ1bmRhbWVudGFsIHRvIHRoZSBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkgb2YgdGhlIEJQRiBpbXBsZW1lbnRhdGlvbiBvbiB0aGlzIGFyY2hpdGVjdHVyZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgaGFuZGxlcyB0aGUgYWN0dWFsIHByZXBhcmF0aW9uIGFuZCB3aGF0IGNvbnN0cmFpbnRzIG9yIGNvbnNpZGVyYXRpb25zIGRldGVybWluZSB0aGUgc2l6ZSBhbGxvY2F0aW9uLiBXaGF0IGtpbmQgb2YgYXNzZW1ibHkgaXMgZ2VuZXJhdGVkPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHg4NiBpbnN0cnVjdGlvbnMgb3IgdGVjaG5pcXVlcyBiZWluZyBsZXZlcmFnZWQgaGVyZSBmb3IgdGhlIHRyYW1wb2xpbmU/IFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxOTIsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDozMToyMy4zOTQ4Nzk4MzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMxMjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjU3LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNjU3OlxcdHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJ3X2ltYWdlLFxcbjM2NTg6XFx0XFx0XFx0XFx0XFx0XFx0IHZvaWQgKnJ3X2ltYWdlX2VuZCwgdm9pZCAqaW1hZ2UsXFxuMzY1OTpcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuMzY2MDpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLFxcbjM2NjE6XFx0XFx0XFx0XFx0XFx0XFx0IHZvaWQgKmZ1bmNfYWRkcilcXG4zNjYyOlxcdHtcXG4zNjYzOlxcdFxcdGludCBpLCByZXQsIG5yX3JlZ3MgPSBtLVxcdTAwM2Vucl9hcmdzLCBzdGFja19zaXplID0gMDtcXG4zNjY0OlxcdFxcdGludCByZWdzX29mZiwgZnVuY19tZXRhX29mZiwgaXBfb2ZmLCBydW5fY3R4X29mZiwgYXJnX3N0YWNrX29mZiwgcmJ4X29mZjtcXG4zNjY1OlxcdFxcdHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKmZlbnRyeSA9IFxcdTAwMjZ0bm9kZXNbQlBGX1RSQU1QX0ZFTlRSWV07XFxuMzY2NjpcXHRcXHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICpmZXhpdCA9IFxcdTAwMjZ0bm9kZXNbQlBGX1RSQU1QX0ZFWElUXTtcXG4zNjY3OlxcdFxcdHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKmZtb2RfcmV0ID0gXFx1MDAyNnRub2Rlc1tCUEZfVFJBTVBfTU9ESUZZX1JFVFVSTl07XFxuMzY2ODpcXHRcXHR2b2lkICpvcmlnX2NhbGwgPSBmdW5jX2FkZHI7XFxuMzY2OTpcXHRcXHRpbnQgY29va2llX29mZiwgY29va2llX2NudDtcXG4zNjcwOlxcdFxcdHU4ICoqYnJhbmNoZXMgPSBOVUxMO1xcbjM2NzE6XFx0XFx0dTY0IGFyZW5hX2Jhc2U7XFxuMzY3MjpcXHRcXHR1NjQgZnVuY19tZXRhO1xcbjM2NzM6XFx0XFx0dTggKnByb2c7XFxuMzY3NDpcXHRcXHRib29sIHNhdmVfcmV0O1xcbjM2NzU6XFx0XFxuMzY3NjpcXHRcXHQvKlxcbjM2Nzc6XFx0XFx0ICogRl9JTkRJUkVDVCBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBGX1JFVF9GRU5UUllfUkVULCBpdCBpc1xcbjM2Nzg6XFx0XFx0ICogZXhwbGljaXRseSBpbmNvbXBhdGlibGUgd2l0aCBGX0NBTExfT1JJRyB8IEZfU0tJUF9GUkFNRSB8IEZfSVBfQVJHXFxuMzY3OTpcXHRcXHQgKiBiZWNhdXNlIEBmdW5jX2FkZHIuXFxuMzY4MDpcXHRcXHQgKi9cXG4zNjgxOlxcdFxcdFdBUk5fT05fT05DRSgoZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVCkgXFx1MDAyNlxcdTAwMjZcXG4zNjgyOlxcdFxcdFxcdCAgICAgKGZsYWdzIFxcdTAwMjYgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpO1xcbjM2ODM6XFx0XFxuMzY4NDpcXHRcXHRhcmVuYV9iYXNlID0gYnBmX3RyYW1wX2FyZW5hX2Jhc2UobSwgdG5vZGVzLCBmbGFncyk7XFxuMzY4NTpcXHRcXG4zNjg2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtLVxcdTAwM2Vucl9hcmdzOyBpKyspXFxuMzY4NzpcXHRcXHRcXHRucl9yZWdzICs9IChtLVxcdTAwM2Vhcmdfc2l6ZVtpXSArIDcpIC8gOCAtIDE7XFxuMzY4ODpcXHRcXG4zNjg5OlxcdFxcdC8qIHg4Ni02NCBzdXBwb3J0cyB1cCB0byBNQVhfQlBGX0ZVTkNfQVJHUyBhcmd1bWVudHMuIDEtNlxcbjM2OTA6XFx0XFx0ICogYXJlIHBhc3NlZCB0aHJvdWdoIHJlZ3MsIHRoZSByZW1haW5zIGFyZSB0aHJvdWdoIHN0YWNrLlxcbjM2OTE6XFx0XFx0ICovXFxuMzY5MjpcXHRcXHRpZiAobnJfcmVncyBcXHUwMDNlIE1BWF9CUEZfRlVOQ19BUkdTKVxcbjM2OTM6XFx0XFx0XFx0cmV0dXJuIC1FTk9UU1VQUDtcXG4zNjk0OlxcdFxcbjM2OTU6XFx0XFx0LyogR2VuZXJhdGVkIHRyYW1wb2xpbmUgc3RhY2sgbGF5b3V0OlxcbjM2OTY6XFx0XFx0ICpcXG4zNjk3OlxcdFxcdCAqIFJCUCArIDggICAgICAgICBbIHJldHVybiBhZGRyZXNzICBdXFxuMzY5ODpcXHRcXHQgKiBSQlAgKyAwICAgICAgICAgWyBSQlAgICAgICAgICAgICAgXVxcbjM2OTk6XFx0XFx0ICpcXG4zNzAwOlxcdFxcdCAqIFJCUCAtIDggICAgICAgICBbIHJldHVybiB2YWx1ZSAgICBdICBCUEZfVFJBTVBfRl9DQUxMX09SSUcgb3JcXG4zNzAxOlxcdFxcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVCBmbGFnc1xcbjM3MDI6XFx0XFx0ICpcXG4zNzAzOlxcdFxcdCAqICAgICAgICAgICAgICAgICBbIHJlZ19hcmdOICAgICAgICBdICBhbHdheXNcXG4zNzA0OlxcdFxcdCAqICAgICAgICAgICAgICAgICBbIC4uLiAgICAgICAgICAgICBdXFxuMzcwNTpcXHRcXHQgKiBSQlAgLSByZWdzX29mZiAgWyByZWdfYXJnMSAgICAgICAgXSAgcHJvZ3JhbSdzIGN0eCBwb2ludGVyXFxuMzcwNjpcXHRcXHQgKlxcbjM3MDc6XFx0XFx0ICogUkJQIC0gZnVuY19tZXRhX29mZiBbIHJlZ3MgY291bnQsIGV0YyBdICBhbHdheXNcXG4zNzA4OlxcdFxcdCAqXFxuMzcwOTpcXHRcXHQgKiBSQlAgLSBpcF9vZmYgICAgWyB0cmFjZWQgZnVuY3Rpb24gXSAgQlBGX1RSQU1QX0ZfSVBfQVJHIGZsYWdcXG4zNzEwOlxcdFxcdCAqXFxuMzcxMTpcXHRcXHQgKiBSQlAgLSByYnhfb2ZmICAgWyByYnggdmFsdWUgICAgICAgXSAgYWx3YXlzXFxuMzcxMjpcXHRcXHQgKlxcbjM3MTM6XFx0XFx0ICogUkJQIC0gcnVuX2N0eF9vZmYgWyBicGZfdHJhbXBfcnVuX2N0eCBdXFxuMzcxNDpcXHRcXHQgKlxcbjM3MTU6XFx0XFx0ICogICAgICAgICAgICAgICAgICAgICBbIHN0YWNrX2FyZ04gXSAgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHXFxuMzcxNjpcXHRcXHQgKiAgICAgICAgICAgICAgICAgICAgIFsgLi4uICAgICAgICBdXFxuMzcxNzpcXHRcXHQgKiAgICAgICAgICAgICAgICAgICAgIFsgc3RhY2tfYXJnMiBdXFxuMzcxODpcXHRcXHQgKiBSQlAgLSBhcmdfc3RhY2tfb2ZmIFsgc3RhY2tfYXJnMSBdXFxuMzcxOTpcXHRcXHQgKiBSU1AgICAgICAgICAgICAgICAgIFsgdGFpbF9jYWxsX2NudF9wdHIgXSBCUEZfVFJBTVBfRl9UQUlMX0NBTExfQ1RYXFxuMzcyMDpcXHRcXHQgKi9cXG4zNzIxOlxcdFxcbjM3MjI6XFx0XFx0Lyogcm9vbSBmb3IgcmV0dXJuIHZhbHVlIG9mIG9yaWdfY2FsbCBvciBmZW50cnkgcHJvZyAqL1xcbjM3MjM6XFx0XFx0c2F2ZV9yZXQgPSBmbGFncyBcXHUwMDI2IChCUEZfVFJBTVBfRl9DQUxMX09SSUcgfCBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVCk7XFxuMzcyNDpcXHRcXHRpZiAoc2F2ZV9yZXQpXFxuMzcyNTpcXHRcXHRcXHRzdGFja19zaXplICs9IDg7XFxuMzcyNjpcXHRcXG4zNzI3OlxcdFxcdHN0YWNrX3NpemUgKz0gbnJfcmVncyAqIDg7XFxuMzcyODpcXHRcXHRyZWdzX29mZiA9IHN0YWNrX3NpemU7XFxuMzcyOTpcXHRcXG4zNzMwOlxcdFxcdC8qIGZ1bmN0aW9uIG1hdGVkYXRhLCBzdWNoIGFzIHJlZ3MgY291bnQgICovXFxuMzczMTpcXHRcXHRzdGFja19zaXplICs9IDg7XFxuMzczMjpcXHRcXHRmdW5jX21ldGFfb2ZmID0gc3RhY2tfc2l6ZTtcXG4zNzMzOlxcdFxcbjM3MzQ6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfSVBfQVJHKVxcbjM3MzU6XFx0XFx0XFx0c3RhY2tfc2l6ZSArPSA4OyAvKiByb29tIGZvciBJUCBhZGRyZXNzIGFyZ3VtZW50ICovXFxuMzczNjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzE6MjMuMzk1MjEzNTAyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MTk3MjIyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgYW5kIGByd19pbWFnZWAgVXNhZ2UqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGJhY2sgaW50byB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIHdhcyBvbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgZnVuY3Rpb24gd29ya3MuIE5vdywgSSBuZWVkIHRvIGV4cGFuZCBteSB2aWV3IGFuZCBzZWUgaG93IHRoZSByZXN0IG9mIGl0IHVuZm9sZHMsIHNwZWNpZmljYWxseSB0aGUgcGFydHMgdGhhdCByZWxhdGUgdG8gYHJ3X2ltYWdlYC4gSSBuZWVkIHRvIHRyYWNrIHRoZSBwYXRoIG9mIGByd19pbWFnZWAuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgY2FsbHMgb3IgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYHJ3X2ltYWdlYCwgZXNwZWNpYWxseSB3aXRoaW4gb3IgYXJvdW5kIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBpcyBiZWluZyBsb2FkZWQgaW50byBgcndfaW1hZ2VgLiBJIHdpbGwgZm9sbG93IGByd19pbWFnZWAgYW5kIHVuZGVyc3RhbmQgd2hhdCBjb2RlIGl0IGlzIGFzc29jaWF0ZWQgd2l0aC4gVGhlbiBJIHdpbGwgc2VlIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBhbHNvIHVzaW5nIGByd19pbWFnZWAgYW5kIHdoYXQgdGhleSBkby5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkyOCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzE6MjUuMzE0OTM4MTQ1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NjAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzczNyxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzczNzpcXHRcXHRpcF9vZmYgPSBzdGFja19zaXplO1xcbjM3Mzg6XFx0XFxuMzczOTpcXHRcXHRjb29raWVfY250ID0gYnBmX2ZzZXNzaW9uX2Nvb2tpZV9jbnQodG5vZGVzKTtcXG4zNzQwOlxcdFxcdC8qIHJvb20gZm9yIHNlc3Npb24gY29va2llcyAqL1xcbjM3NDE6XFx0XFx0c3RhY2tfc2l6ZSArPSBjb29raWVfY250ICogODtcXG4zNzQyOlxcdFxcdGNvb2tpZV9vZmYgPSBzdGFja19zaXplO1xcbjM3NDM6XFx0XFxuMzc0NDpcXHRcXHRzdGFja19zaXplICs9IDg7XFxuMzc0NTpcXHRcXHRyYnhfb2ZmID0gc3RhY2tfc2l6ZTtcXG4zNzQ2OlxcdFxcbjM3NDc6XFx0XFx0c3RhY2tfc2l6ZSArPSAoc2l6ZW9mKHN0cnVjdCBicGZfdHJhbXBfcnVuX2N0eCkgKyA3KSBcXHUwMDI2IH4weDc7XFxuMzc0ODpcXHRcXHRydW5fY3R4X29mZiA9IHN0YWNrX3NpemU7XFxuMzc0OTpcXHRcXG4zNzUwOlxcdFxcdGlmIChucl9yZWdzIFxcdTAwM2UgNiBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9DQUxMX09SSUcpKSB7XFxuMzc1MTpcXHRcXHRcXHQvKiB0aGUgc3BhY2UgdGhhdCB1c2VkIHRvIHBhc3MgYXJndW1lbnRzIG9uLXN0YWNrICovXFxuMzc1MjpcXHRcXHRcXHRzdGFja19zaXplICs9IChucl9yZWdzIC0gZ2V0X25yX3VzZWRfcmVncyhtKSkgKiA4O1xcbjM3NTM6XFx0XFx0XFx0LyogbWFrZSBzdXJlIHRoZSBzdGFjayBwb2ludGVyIGlzIDE2LWJ5dGUgYWxpZ25lZCBpZiB3ZVxcbjM3NTQ6XFx0XFx0XFx0ICogbmVlZCBwYXNzIGFyZ3VtZW50cyBvbiBzdGFjaywgd2hpY2ggbWVhbnNcXG4zNzU1OlxcdFxcdFxcdCAqICBbc3RhY2tfc2l6ZSArIDgocmJwKSArIDgocmlwKSArIDgob3JpZ2luIHJpcCldXFxuMzc1NjpcXHRcXHRcXHQgKiBzaG91bGQgYmUgMTYtYnl0ZSBhbGlnbmVkLiBGb2xsb3dpbmcgY29kZSBkZXBlbmQgb25cXG4zNzU3OlxcdFxcdFxcdCAqIHRoYXQgc3RhY2tfc2l6ZSBpcyBhbHJlYWR5IDgtYnl0ZSBhbGlnbmVkLlxcbjM3NTg6XFx0XFx0XFx0ICovXFxuMzc1OTpcXHRcXHRcXHRpZiAoYnBmX3RyYW1wb2xpbmVfdXNlX2ptcChmbGFncykpIHtcXG4zNzYwOlxcdFxcdFxcdFxcdC8qIG5vIHJpcCBpbiB0aGUgXFxcImptcFxcXCIgY2FzZSAqL1xcbjM3NjE6XFx0XFx0XFx0XFx0c3RhY2tfc2l6ZSArPSAoc3RhY2tfc2l6ZSAlIDE2KSA/IDggOiAwO1xcbjM3NjI6XFx0XFx0XFx0fSBlbHNlIHtcXG4zNzYzOlxcdFxcdFxcdFxcdHN0YWNrX3NpemUgKz0gKHN0YWNrX3NpemUgJSAxNikgPyAwIDogODtcXG4zNzY0OlxcdFxcdFxcdH1cXG4zNzY1OlxcdFxcdH1cXG4zNzY2OlxcdFxcbjM3Njc6XFx0XFx0YXJnX3N0YWNrX29mZiA9IHN0YWNrX3NpemU7XFxuMzc2ODpcXHRcXG4zNzY5OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykge1xcbjM3NzA6XFx0XFx0XFx0Lyogc2tpcCBwYXRjaGVkIGNhbGwgaW5zdHJ1Y3Rpb24gYW5kIHBvaW50IG9yaWdfY2FsbCB0byBhY3R1YWxcXG4zNzcxOlxcdFxcdFxcdCAqIGJvZHkgb2YgdGhlIGtlcm5lbCBmdW5jdGlvbi5cXG4zNzcyOlxcdFxcdFxcdCAqL1xcbjM3NzM6XFx0XFx0XFx0aWYgKGlzX2VuZGJyKG9yaWdfY2FsbCkpXFxuMzc3NDpcXHRcXHRcXHRcXHRvcmlnX2NhbGwgKz0gRU5EQlJfSU5TTl9TSVpFO1xcbjM3NzU6XFx0XFx0XFx0b3JpZ19jYWxsICs9IFg4Nl9QQVRDSF9TSVpFO1xcbjM3NzY6XFx0XFx0fVxcbjM3Nzc6XFx0XFxuMzc3ODpcXHRcXHRwcm9nID0gcndfaW1hZ2U7XFxuMzc3OTpcXHRcXG4zNzgwOlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX0lORElSRUNUKSB7XFxuMzc4MTpcXHRcXHRcXHQvKlxcbjM3ODI6XFx0XFx0XFx0ICogSW5kaXJlY3QgY2FsbCBmb3IgYnBmX3N0cnVjdF9vcHNcXG4zNzgzOlxcdFxcdFxcdCAqL1xcbjM3ODQ6XFx0XFx0XFx0ZW1pdF9jZmkoXFx1MDAyNnByb2csIGltYWdlLFxcbjM3ODU6XFx0XFx0XFx0XFx0IGNmaV9nZXRfZnVuY19oYXNoKGZ1bmNfYWRkciksXFxuMzc4NjpcXHRcXHRcXHRcXHQgY2ZpX2dldF9mdW5jX2FyaXR5KGZ1bmNfYWRkcikpO1xcbjM3ODc6XFx0XFx0fSBlbHNlIHtcXG4zNzg4OlxcdFxcdFxcdC8qXFxuMzc4OTpcXHRcXHRcXHQgKiBEaXJlY3QtY2FsbCBmZW50cnkgc3R1YiwgYXMgc3VjaCBpdCBuZWVkcyBhY2NvdW50aW5nIGZvciB0aGVcXG4zNzkwOlxcdFxcdFxcdCAqIF9fZmVudHJ5X18gY2FsbC5cXG4zNzkxOlxcdFxcdFxcdCAqL1xcbjM3OTI6XFx0XFx0XFx0eDg2X2NhbGxfZGVwdGhfZW1pdF9hY2NvdW50aW5nKFxcdTAwMjZwcm9nLCBOVUxMLCBpbWFnZSk7XFxuMzc5MzpcXHRcXHR9XFxuMzc5NDpcXHRcXHRFTUlUMSgweDU1KTtcXHRcXHQgLyogcHVzaCByYnAgKi9cXG4zNzk1OlxcdFxcdEVNSVQzKDB4NDgsIDB4ODksIDB4RTUpOyAvKiBtb3YgcmJwLCByc3AgKi9cXG4zNzk2OlxcdFxcdGlmIChpbSlcXG4zNzk3OlxcdFxcdFxcdGltLVxcdTAwM2Vrc3ltLmZwX3N0YXJ0ID0gcHJvZyAtICh1OCAqKXJ3X2ltYWdlO1xcbjM3OTg6XFx0XFxuMzc5OTpcXHRcXHRpZiAoIWlzX2ltbTgoc3RhY2tfc2l6ZSkpIHtcXG4zODAwOlxcdFxcdFxcdC8qIHN1YiByc3AsIHN0YWNrX3NpemUgKi9cXG4zODAxOlxcdFxcdFxcdEVNSVQzX29mZjMyKDB4NDgsIDB4ODEsIDB4RUMsIHN0YWNrX3NpemUpO1xcbjM4MDI6XFx0XFx0fSBlbHNlIHtcXG4zODAzOlxcdFxcdFxcdC8qIHN1YiByc3AsIHN0YWNrX3NpemUgKi9cXG4zODA0OlxcdFxcdFxcdEVNSVQ0KDB4NDgsIDB4ODMsIDB4RUMsIHN0YWNrX3NpemUpO1xcbjM4MDU6XFx0XFx0fVxcbjM4MDY6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfVEFJTF9DQUxMX0NUWClcXG4zODA3OlxcdFxcdFxcdEVNSVQxKDB4NTApO1xcdFxcdC8qIHB1c2ggcmF4ICovXFxuMzgwODpcXHRcXHQvKiBtb3YgUVdPUkQgUFRSIFtyYnAgLSByYnhfb2ZmXSwgcmJ4ICovXFxuMzgwOTpcXHRcXHRlbWl0X3N0eChcXHUwMDI2cHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCBCUEZfUkVHXzYsIC1yYnhfb2ZmKTtcXG4zODEwOlxcdFxcbjM4MTE6XFx0XFx0ZnVuY19tZXRhID0gbnJfcmVncztcXG4zODEyOlxcdFxcdC8qIFN0b3JlIG51bWJlciBvZiBhcmd1bWVudCByZWdpc3RlcnMgb2YgdGhlIHRyYWNlZCBmdW5jdGlvbiAqL1xcbjM4MTM6XFx0XFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChcXHUwMDI2cHJvZywgQlBGX1JFR18wLCAtZnVuY19tZXRhX29mZiwgZnVuY19tZXRhKTtcXG4zODE0OlxcdFxcbjM4MTU6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfSVBfQVJHKSB7XFxuMzgxNjpcXHRcXHRcXHQvKiBTdG9yZSBJUCBhZGRyZXNzIG9mIHRoZSB0cmFjZWQgZnVuY3Rpb24gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzE6MjUuMzE1MjM1Njk1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMjYxMTIxMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGludGVybmFscyBvZiBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIG5vdy4gTXkgbWFpbiBjb25jZXJuIGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJldHVybiB2YWx1ZSBhbmQgdWx0aW1hdGVseSwgaG93IGl0IHNpZ25hbHMgY29tcGxldGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBrZXkgc3RhdGUgaXMgc2V0IHVwIGhlcmUsIGFuZCB3aGVyZSBpdCBnb2VzIGZyb20gaGVyZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB3aGF0IHRvIGxvb2sgZm9yIGFmdGVyIHRoZSBjYWxsIHRvIHVuZGVyc3RhbmQgd2hhdCBqdXN0IGhhcHBlbmVkIGFuZCB0aGF0IGV2ZXJ5dGhpbmcgd2VudCBhY2NvcmRpbmcgdG8gcGxhbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBpdCBpcyBzZXQgdXAgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSBhcmNoaXRlY3R1cmFsIHJlcXVpcmVtZW50cywgYW5kIHRoYXQgdGhpcyBmaXRzIHdpdGggdGhlIG92ZXJhcmNoaW5nIEJQRiBkZXNpZ24uIEkgYW0gbG9va2luZyBmb3IgZGV0YWlscyB0aGF0IG1pZ2h0IGxlYWQgdG8gYSB2dWxuZXJhYmlsaXR5IG9yIGFuIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1OTYsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMxOjI3LjM0MTM1MDM4MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjU3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5NjAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM5NjA6XFx0Y2xlYW51cDpcXG4zOTYxOlxcdFxcdGtmcmVlKGJyYW5jaGVzKTtcXG4zOTYyOlxcdFxcdHJldHVybiByZXQ7XFxuMzk2MzpcXHR9XFxuMzk2NDpcXHRcXG4zOTY1OlxcdHZvaWQgKmFyY2hfYWxsb2NfYnBmX3RyYW1wb2xpbmUodW5zaWduZWQgaW50IHNpemUpXFxuMzk2NjpcXHR7XFxuMzk2NzpcXHRcXHRyZXR1cm4gYnBmX3Byb2dfcGFja19hbGxvYyhzaXplLCBqaXRfZmlsbF9ob2xlLCBmYWxzZSk7XFxuMzk2ODpcXHR9XFxuMzk2OTpcXHRcXG4zOTcwOlxcdHZvaWQgYXJjaF9mcmVlX2JwZl90cmFtcG9saW5lKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4zOTcxOlxcdHtcXG4zOTcyOlxcdFxcdGJwZl9wcm9nX3BhY2tfZnJlZShpbWFnZSwgc2l6ZSk7XFxuMzk3MzpcXHR9XFxuMzk3NDpcXHRcXG4zOTc1OlxcdGludCBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKVxcbjM5NzY6XFx0e1xcbjM5Nzc6XFx0XFx0cmV0dXJuIDA7XFxuMzk3ODpcXHR9XFxuMzk3OTpcXHRcXG4zOTgwOlxcdGludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmltYWdlLCB2b2lkICppbWFnZV9lbmQsXFxuMzk4MTpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG4zOTgyOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcyxcXG4zOTgzOlxcdFxcdFxcdFxcdFxcdHZvaWQgKmZ1bmNfYWRkcilcXG4zOTg0OlxcdHtcXG4zOTg1OlxcdFxcdHZvaWQgKnJ3X2ltYWdlLCAqdG1wO1xcbjM5ODY6XFx0XFx0aW50IHJldDtcXG4zOTg3OlxcdFxcdHUzMiBzaXplID0gaW1hZ2VfZW5kIC0gaW1hZ2U7XFxuMzk4ODpcXHRcXG4zOTg5OlxcdFxcdC8qIHJ3X2ltYWdlIGRvZXNuJ3QgbmVlZCB0byBiZSBpbiBtb2R1bGUgbWVtb3J5IHJhbmdlLCBzbyB3ZSBjYW5cXG4zOTkwOlxcdFxcdCAqIHVzZSBrdm1hbGxvYy5cXG4zOTkxOlxcdFxcdCAqL1xcbjM5OTI6XFx0XFx0cndfaW1hZ2UgPSBrdm1hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcXG4zOTkzOlxcdFxcdGlmICghcndfaW1hZ2UpXFxuMzk5NDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zOTk1OlxcdFxcbjM5OTY6XFx0XFx0cmV0ID0gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoaW0sIHJ3X2ltYWdlLCByd19pbWFnZSArIHNpemUsIGltYWdlLCBtLFxcbjM5OTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGZsYWdzLCB0bm9kZXMsIGZ1bmNfYWRkcik7XFxuMzk5ODpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4zOTk5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjQwMDA6XFx0XFxuNDAwMTpcXHRcXHR0bXAgPSBicGZfYXJjaF90ZXh0X2NvcHkoaW1hZ2UsIHJ3X2ltYWdlLCBzaXplKTtcXG40MDAyOlxcdFxcdGlmIChJU19FUlIodG1wKSlcXG40MDAzOlxcdFxcdFxcdHJldCA9IFBUUl9FUlIodG1wKTtcXG40MDA0OlxcdG91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzE6MjcuMzQxNjI4MjMxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NDY3MjE1ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQlBGIFRyYW1wb2xpbmUgU2l6ZSBDYWxjdWxhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgLiBUaGUgbmFtZSBpdHNlbGYgc2NyZWFtcyBcInNpemUgY2FsY3VsYXRpb24gZm9yIGEgdHJhbXBvbGluZSxcIiBwcmVzdW1hYmx5IHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndobyogaXMgdXNpbmcgdGhpcyBmdW5jdGlvbi4gS25vd2luZyB0aGUgY2FsbGVycyB3aWxsIGlsbHVtaW5hdGUgdGhlIHB1cnBvc2UgYW5kIGNvbnN0cmFpbnRzIGRyaXZpbmcgdGhpcyBzaXplIGNhbGN1bGF0aW9uLiBUaW1lIHRvIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBzZWUgd2hvJ3MgaW52b2tpbmcgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHR1YWwgY2x1ZXMgSSBuZWVkIHRvIGZ1bGx5IGdyb2sgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ5NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MzE6MjkuMjg4MzUzNTZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDg0MjQ4MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJjaF9icGZfdHJhbXBvbGluZV9zaXplXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTI5ODg9Ym9vbCBicGZfaml0X3N1cHBvcnRzX2ZzZXNzaW9uKHZvaWQpXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yOTkyLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjI5OTM6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yOTk0LVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTIxMzg9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIxNzUtXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMTc2OmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMTc3LVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jPTgxMj1zdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbWFnZSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTE5MS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjExOTI6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTExOTMtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTAzMD1zdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzM2LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTMzNzppbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTMzOC1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz0yNjk4PXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTMwMTUtXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzozMDE2OmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0zMDE3LVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpvcmlnX2NhbGwpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzk4MD1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICppbWFnZSwgdm9pZCAqaW1hZ2VfZW5kLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMDgtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQwMDk6aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDAxMC1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0xMzE3PWludCBfX211c3RfY2hlY2sgYXJjaF9wcm90ZWN0X2JwZl90cmFtcG9saW5lKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9icGYuaDoxMzE4OmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuaW5jbHVkZS9saW51eC9icGYuaC0xMzE5LVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpO1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTYzNz1pbnQgYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcyxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NTMtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjY1NDpcXHRzaXplID0gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKG1vZGVsLCBmbGFncywgdG5vZGVzLCBzdHViX2Z1bmMpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02NTUtXFx0aWYgKHNpemUgXFx1MDAzYz0gMClcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTcxMD1zdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4LFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzYxLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjc2MjpcXHRzaXplID0gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKFxcdTAwMjZ0ci1cXHUwMDNlZnVuYy5tb2RlbCwgdHItXFx1MDAzZWZsYWdzLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc2My1cXHRcXHRcXHRcXHRcXHR0bm9kZXMsIHRyLVxcdTAwM2VmdW5jLmFkZHIpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTUwOD1pbnQgX193ZWFrIGFyY2hfcHJvdGVjdF9icGZfdHJhbXBvbGluZSh2b2lkICppbWFnZSwgdW5zaWduZWQgaW50IHNpemUpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTEzLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1MTQ6aW50IF9fd2VhayBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTUxNS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMxOjMwLjg5Njc4Mjc3M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MTU4MzExNTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEJQRiBUcmFtcG9saW5lIFNpemUgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IG9wdGltaXplcyBob3cgdGhlIEJQRiB0cmFtcG9saW5lIHNpemUgaXMgY2FsY3VsYXRlZC4gUHJldmlvdXNseSwgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgd2FzIGNhbGxpbmcgYGV4ZWNtZW1fYWxsb2NgIGFuZCBgZXhlY21lbV9mcmVlYCBvbiBhIDRLQiBwYWdlIGV2ZXJ5IHRpbWUgaXQgbmVlZGVkIHRvIGZpZ3VyZSBvdXQgdGhlIHRyYW1wb2xpbmUgc2l6ZS4gTm93LCB3ZSd2ZSBnb3QgYSBnbG9iYWwgYnVmZmVyLCBgdHJhbXBvbGluZV9zaXplX2ltYWdlYCwgcHJlLWFsbG9jYXRlZCBhdCBpbml0IHRpbWUuIFRoYXQncyBnb29kLCBhdm9pZGluZyB0aG9zZSByZXBlYXRlZCBhbGxvY2F0aW9ucy4gVGhlIGZ1bmN0aW9uIG5vdyBjYWxscyBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIHdpdGggdGhpcyBwcmUtYWxsb2NhdGVkIGJ1ZmZlciBhcyBhIHRhcmdldCB0byBkZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlIGdlbmVyYXRlZCBpbnN0cnVjdGlvbnMuIEl0IHJldHVybnMgdGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZ2VuZXJhdGVkIGluc3RydWN0aW9ucy5cblxuTXkgbWFpbiBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gTGV0J3MgYnJlYWsgaXQgZG93bjpcblxuMS4gIGBpbml0X3RyYW1wb2xpbmVfc2l6ZV9pbWFnZWAgYWxsb2NhdGVzIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgIHVzaW5nIGBleGVjbWVtX2FsbG9jYC5cbjIuICBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIHdyaXRlcyBKSVQgaW5zdHJ1Y3Rpb25zIGludG8gYHRyYW1wb2xpbmVfc2l6ZV9pbWFnZWAuXG4zLiAgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIHRoYXQgYnVmZmVyLlxuNC4gIE5vdGhpbmcgcmVhZHMgZnJvbSBgdHJhbXBvbGluZV9zaXplX2ltYWdlYCBiZWZvcmUgd3JpdGluZy4gVGhlIGNvbnRlbnRzIGFyZSBub3QgY29waWVkIGFueXdoZXJlLiBJdCdzIGp1c3QgYSBkdW1teSBkZXN0aW5hdGlvbiBmb3IgRU1JVCBpbnN0cnVjdGlvbnMgdG8gZGV0ZXJtaW5lIHNpemUuXG41LiAgVGhlcmUncyBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlLCBgaW1gLCB3aGljaCBpcyBwYXNzZWQgYXMgYSBwb2ludGVyLiBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIHdyaXRlcyB0byBgaW0tXHUwMDNla3N5bS5mcF9zdGFydGAgaWYgYGltICE9IE5VTExgIGJ1dCBpdCdzIG5vdCByZWFkIGFmdGVyLlxuNi4gIE5vIGtlcm5lbC10by11c2VyIHNwYWNlIGRhdGEgY29waWVzIGFyZSBpbnZvbHZlZC5cbjcuICBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMsIG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzc3VlcyBhcmUgdG91Y2hlZC5cbjguICBDb25jZXJuaW5nIGNvbmN1cnJlbmN5LCBldmVuIHdpdGggbXVsdGlwbGUgY2FsbGVycyAobGlrZWx5IHByb3RlY3RlZCBieSBsb2NrcyBhbnl3YXkpLCBpdCdzIG9ubHkgd3JpdHRlbiB0bywgbm90IHJlYWQuIE92ZXJ3cml0ZXMgaGFwcGVuIGVhY2ggdGltZSwgc28gZXZlbiBpZiB0aGVyZSdzIGEgZGF0YSByYWNlLCBpdCdzIGZpbmUuIFRoZSByZXR1cm4gdmFsdWUgaXMganVzdCBjYWxjdWxhdGVkIGxvY2FsbHkuXG45LiAgU28sIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG5HaXZlbiB0aGVzZSBmaW5kaW5ncywgdGhlIHBhdGNoIGRvZXMgd2hhdCBpdCdzIHN1cHBvc2VkIHRvIGRvLiBUaGUgcmVxdWlyZW1lbnRzIHN0YXRlIGBOZWVkc0tNU0FOYCBpcyB0cnVlIG9ubHkgaWYgdGhlcmUgYXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBTaW5jZSBJIGhhdmVuJ3QgZm91bmQgYW55LCB0aGUgbG9naWMgZm9yIGV2YWx1YXRpbmcgS01TQU4gYXBwbGljYWJpbGl0eSBzYXlzOlxuXG4qICAgVGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBkeW5hbWljIGFsbG9jYXRpb24gb2YgYSBzY3JhdGNoIGJ1ZmZlciB3aXRoIGEgcHJlLWFsbG9jYXRlZCBzdGF0aWMgb25lLlxuKiAgIFRoZSBzY3JhdGNoIGJ1ZmZlciBpcyBzb2xlbHkgYSB3cml0ZS1vbmx5IHRhcmdldC4gVGhlIHN0YWNrIHZhcmlhYmxlLCBgaW1gLCBpcyB3cml0dGVuIHRvLCBidXQgbm90IHJlYWQuXG4qICAgTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGNvcGllZCBhbnl3aGVyZS5cbiogICBBbnkgY29uY3VycmVuY3kgaXNzdWVzIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi9LQ1NBTi5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC5cblxuSSdsbCBkb3VibGUgY2hlY2sgYnkgZ3JlcHBpbmcgZm9yIGB0cmFtcG9saW5lX3NpemVfaW1hZ2VgIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcsIGJ1dCBiYXNlZCBvbiB0aGUgYW5hbHlzaXMgc28gZmFyLCB0aGlzIGxvb2tzIGNsZWFuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIxOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDozMTozOC4wNTUwOTYzNzJaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDE1NTQwNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJhbXBvbGluZV9zaXplX2ltYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNz1zdGF0aWMgYm9vbCBhbGxfY2FsbGVlX3JlZ3NfdXNlZFs0XSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzgtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM5OnN0YXRpYyB2b2lkICp0cmFtcG9saW5lX3NpemVfaW1hZ2U7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0MTpzdGF0aWMgaW50IF9faW5pdCBpbml0X3RyYW1wb2xpbmVfc2l6ZV9pbWFnZSh2b2lkKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00Mi17XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQzOlxcdHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSA9IGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9NT0RVTEVfREFUQSwgUEFHRV9TSVpFKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6NDQ6XFx0cmV0dXJuIHRyYW1wb2xpbmVfc2l6ZV9pbWFnZSA/IDAgOiAtRU5PTUVNO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00NS19XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQ2OmxhdGVfaW5pdGNhbGwoaW5pdF90cmFtcG9saW5lX3NpemVfaW1hZ2UpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00Ny1cXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz00MDA5PWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDAxMy1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6NDAxNDpcXHRpZiAoIXRyYW1wb2xpbmVfc2l6ZV9pbWFnZSlcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDAxNS1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDAxNi1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6NDAxNzpcXHRyZXR1cm4gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoXFx1MDAyNmltLCB0cmFtcG9saW5lX3NpemVfaW1hZ2UsXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQwMTg6XFx0XFx0XFx0XFx0XFx0ICAgICB0cmFtcG9saW5lX3NpemVfaW1hZ2UgKyBQQUdFX1NJWkUsXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQwMTk6XFx0XFx0XFx0XFx0XFx0ICAgICB0cmFtcG9saW5lX3NpemVfaW1hZ2UsIG0sIGZsYWdzLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDIwLVxcdFxcdFxcdFxcdFxcdCAgICAgdG5vZGVzLCBmdW5jX2FkZHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDozMTozOS45OTY2NTUzNjZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ3ODU5NTA5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgcHJlc2VudGVkIGFzIGlmIHRoZSB0aG91Z2h0cyB3ZXJlIG15IG93biwgYW5kIGFzc3VtaW5nIEknbSB3ZWxsLXZlcnNlZCBpbiBteSBmaWVsZDpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IFNpbXBsaWNpdHkgYW5kIENsYXJpdHkqKlxuXG5BbHJpZ2h0LCB0aGlzIGlzIHJlZnJlc2hpbmdseSBzdHJhaWdodGZvcndhcmQuIFRoZXJlJ3Mgbm8gaGlkZGVuIGNvbXBsZXhpdHkgb3IgYW1iaWd1aXR5IGhlcmUuIFRoZSBwYXRoIGZvcndhcmQgaXMgaW1tZWRpYXRlbHkgYXBwYXJlbnQuIEdpdmVuIHRoZSBjbGFyaXR5IG9mIHRoZSBzaXR1YXRpb24sIHRoZSBtb3N0IGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGNhbGwgYSBmdW5jdGlvbi4gR2l2ZW4gdGhlIGluZm9ybWF0aW9uIGFuZCB0aGUgZGVzaXJlZCBvdXRjb21lLCBJIGJlbGlldmUgdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBuYW1lZCBgc2V0LXJlc3VsdHNgLiBJdCBpcyB0aGUgY2xlYXJlc3Qgd2F5IGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDg2LCJPdXRwdXRUb2tlbnMiOjIwMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjMxOjQyLjQ3NTI1Mjk3OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgZHluYW1pYyBwZXItY2FsbCBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gKHZpYSBleGVjbWVtX2FsbG9jL2V4ZWNtZW1fZnJlZSkgb2YgYSBkdW1teSBzY3JhdGNoIGJ1ZmZlciBpbiBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoKSB3aXRoIGEgc3RhdGljYWxseSBwcmUtYWxsb2NhdGVkIHBhZ2UgYnVmZmVyICh0cmFtcG9saW5lX3NpemVfaW1hZ2UpLiBUaGUgYnVmZmVyIGlzIHVzZWQgc3RyaWN0bHkgYXMgYSB3cml0ZS1vbmx5IHNpbmsgZm9yIGluc3RydWN0aW9uIGVtaXNzaW9uIGR1cmluZyBkcnktcnVuIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbiBpbiBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgpIHRvIGRldGVybWluZSB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUuIEl0cyBjb250ZW50cyBhcmUgbmV2ZXIgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFjayB2YXJpYWJsZXMgc3VjaCBhcyAnaW0nIGFyZSBwYXNzZWQgdG8gc2F0aXNmeSBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFuZCBhcmUgbm90IHJlYWQgdW5pbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVhaywgb3IgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCBzdGF0ZSBpcyBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZDsgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBzdWZmaWNlcyBmb3IgYW55IG1lbW9yeSBzYWZldHkgdmVyaWZpY2F0aW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGR5bmFtaWMgcGVyLWNhbGwgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uICh2aWEgZXhlY21lbV9hbGxvYy9leGVjbWVtX2ZyZWUpIG9mIGEgZHVtbXkgc2NyYXRjaCBidWZmZXIgaW4gYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKCkgd2l0aCBhIHN0YXRpY2FsbHkgcHJlLWFsbG9jYXRlZCBwYWdlIGJ1ZmZlciAodHJhbXBvbGluZV9zaXplX2ltYWdlKS4gVGhlIGJ1ZmZlciBpcyB1c2VkIHN0cmljdGx5IGFzIGEgd3JpdGUtb25seSBzaW5rIGZvciBpbnN0cnVjdGlvbiBlbWlzc2lvbiBkdXJpbmcgZHJ5LXJ1biB0cmFtcG9saW5lIGdlbmVyYXRpb24gaW4gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKSB0byBkZXRlcm1pbmUgdGhlIHJlcXVpcmVkIGJ1ZmZlciBzaXplLiBJdHMgY29udGVudHMgYXJlIG5ldmVyIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gU3RhY2sgdmFyaWFibGVzIHN1Y2ggYXMgJ2ltJyBhcmUgcGFzc2VkIHRvIHNhdGlzZnkgZnVuY3Rpb24gcGFyYW1ldGVycyBhbmQgYXJlIG5vdCByZWFkIHVuaW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWssIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUgaXMgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQ7IHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgc3VmZmljZXMgZm9yIGFueSBtZW1vcnkgc2FmZXR5IHZlcmlmaWNhdGlvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowlpzl5[1] Phase: Succeeded StartedAt: 2026-09-07 20:31:53 +0000 UTC FinishedAt: 2026-09-07 20:31:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 20:31:53 +0000 UTC FinishedAt: 2026-09-07 20:31:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[2] Phase: Succeeded StartedAt: 2026-09-07 20:31:53 +0000 UTC FinishedAt: 2026-09-08 00:13:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 20:31:53 +0000 UTC FinishedAt: 2026-09-08 00:13:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 20:31:53 +0000 UTC FinishedAt: 2026-09-07 20:32:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 20:31:53 +0000 UTC FinishedAt: 2026-09-07 20:31:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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-workflowlpzl5/series-workflowlpzl5-convert-artifact-3040269943/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 20:32:03 +0000 UTC FinishedAt: 2026-09-07 20:48:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 20:32:03 +0000 UTC FinishedAt: 2026-09-07 20:48:04 +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:*711f8ccd-c921-4f13-bf48-79557ea907bd,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-workflowlpzl5/series-workflowlpzl5-convert-artifact-3040269943/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": "e87dec9c-4993-4659-a9d8-683092a500bd", "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-workflowlpzl5/series-workflowlpzl5-build-action-4040976589/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 20:32:03 +0000 UTC FinishedAt: 2026-09-07 20:47:54 +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:*711f8ccd-c921-4f13-bf48-79557ea907bd,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-workflowlpzl5/series-workflowlpzl5-convert-artifact-3040269943/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": "e87dec9c-4993-4659-a9d8-683092a500bd", "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-workflowlpzl5/series-workflowlpzl5-build-action-4040976589/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 20:48:04 +0000 UTC FinishedAt: 2026-09-07 20:48:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 20:48:04 +0000 UTC FinishedAt: 2026-09-07 20:48:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 20:48:04 +0000 UTC FinishedAt: 2026-09-07 20:48:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 20:48:04 +0000 UTC FinishedAt: 2026-09-07 20:48:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-workflowlpzl5/series-workflowlpzl5-convert-artifact-717256358/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 20:48:15 +0000 UTC FinishedAt: 2026-09-07 20:50:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 20:48:15 +0000 UTC FinishedAt: 2026-09-07 20:50:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e87dec9c-4993-4659-a9d8-683092a500bd,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-workflowlpzl5/series-workflowlpzl5-build-action-4040976589/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-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 20:50:13 +0000 UTC FinishedAt: 2026-09-07 20:50:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 20:50:13 +0000 UTC FinishedAt: 2026-09-07 20:50:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 20:50:13 +0000 UTC FinishedAt: 2026-09-07 21:10:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 20:50:13 +0000 UTC FinishedAt: 2026-09-07 21:10:22 +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:*711f8ccd-c921-4f13-bf48-79557ea907bd,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-workflowlpzl5/series-workflowlpzl5-convert-artifact-717256358/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": "5db6c5e6-03ab-426c-b324-5fbdf3277610", "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-workflowlpzl5/series-workflowlpzl5-build-action-1536136298/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 20:50:13 +0000 UTC FinishedAt: 2026-09-07 21:10:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*711f8ccd-c921-4f13-bf48-79557ea907bd,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-workflowlpzl5/series-workflowlpzl5-convert-artifact-717256358/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": "5db6c5e6-03ab-426c-b324-5fbdf3277610", "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-workflowlpzl5/series-workflowlpzl5-build-action-1536136298/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 21:10:22 +0000 UTC FinishedAt: 2026-09-07 21:10:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 21:10:22 +0000 UTC FinishedAt: 2026-09-07 21:10:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 21:10:22 +0000 UTC FinishedAt: 2026-09-07 21:12:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 21:10:22 +0000 UTC FinishedAt: 2026-09-07 21:12: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:*5db6c5e6-03ab-426c-b324-5fbdf3277610,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-workflowlpzl5/series-workflowlpzl5-build-action-1536136298/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-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 21:12:15 +0000 UTC FinishedAt: 2026-09-08 00:13:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 21:12:15 +0000 UTC FinishedAt: 2026-09-08 00:13:37 +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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"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:*e87dec9c-4993-4659-a9d8-683092a500bd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5db6c5e6-03ab-426c-b324-5fbdf3277610,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-workflowlpzl5/series-workflowlpzl5-build-action-4040976589/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-workflowlpzl5/series-workflowlpzl5-build-action-1536136298/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 21:12:15 +0000 UTC FinishedAt: 2026-09-07 21:12:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 21:12:15 +0000 UTC FinishedAt: 2026-09-07 21:12:22 +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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"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-workflowlpzl5/series-workflowlpzl5-convert-artifact-1425215723/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 21:12:15 +0000 UTC FinishedAt: 2026-09-07 21:12:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 21:12:15 +0000 UTC FinishedAt: 2026-09-07 21:12:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 21:12:15 +0000 UTC FinishedAt: 2026-09-07 21:12:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 21:12:25 +0000 UTC FinishedAt: 2026-09-08 00:13:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpzl5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"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":["arch_bpf_trampoline_size","__arch_prepare_bpf_trampoline","bpf_trampoline_update","bpf_struct_ops_prepare_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"4ec34d01-b45f-4610-86a0-8e3acd7f636c","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-09-07 21:12:25 +0000 UTC FinishedAt: 2026-09-08 00:13:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e87dec9c-4993-4659-a9d8-683092a500bd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5db6c5e6-03ab-426c-b324-5fbdf3277610,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-workflowlpzl5/series-workflowlpzl5-build-action-4040976589/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-workflowlpzl5/series-workflowlpzl5-build-action-1536136298/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-workflowlpzl5/series-workflowlpzl5-convert-artifact-1425215723/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,}