Name: series-workflow78mdm Phase: Succeeded StartedAt: 2026-08-27 06:12:38 +0000 UTC FinishedAt: 2026-08-27 10:23:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[0] Phase: Succeeded StartedAt: 2026-08-27 06:12:38 +0000 UTC FinishedAt: 2026-08-27 06:33:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[0].run-triage Phase: Succeeded StartedAt: 2026-08-27 06:12:38 +0000 UTC FinishedAt: 2026-08-27 06:33:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VSOCK", "VSOCKETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VSOCK", "VSOCKETS" ], "series_id": "997588ba-75a5-4dbf-a0de-d4c1dad86b60" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "vhost_transport_do_send_pkt", "vhost_transport_send_pkt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZTT0NLJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0JiMzNDssCiAgICAmIzM0O3Zob3N0X3RyYW5zcG9ydF9zZW5kX3BrdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyB0aGUgdmlydGlvIHZzb2NrIHRyYW5zbWlzc2lvbiBwYXRoIGJ5IGJhdGNoaW5nIHVzZWQgZWxlbWVudCB1cGRhdGVzLiBJdCBpbnRyb2R1Y2VzIGB2aG9zdF92c29ja19hZGRfdXNlZGAgdG8gcG9wdWxhdGUgYW4gYXJyYXkgb2YgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIChgdnEtXHUwMDNlaGVhZHNgKSBhbmQgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgIHRvIGZsdXNoIHRoZW0gdG8gdGhlIGd1ZXN0IG1lbW9yeSB2aWEgYHZob3N0X2FkZF91c2VkX25gLlxuVGhlIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCBjb25zaXN0cyBvZiB0d28gMzItYml0IGludGVnZXJzIChgaWRgIGFuZCBgbGVuYCkgYW5kIGNvbnRhaW5zIG5vIHBhZGRpbmcgYnl0ZXMuIEJvdGggZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGB2aG9zdF92c29ja19hZGRfdXNlZGAgYmVmb3JlIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIChndWVzdCBtZW1vcnkpIHZpYSBgdmhvc3RfcHV0X3VzZWRgIGFuZCBgdmhvc3RfY29weV90b191c2VyYC5cblNpbmNlIHRoZSBtZW1vcnkgYmVpbmcgY29waWVkIGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCB0aGVyZSBhcmUgbm8gcGFkZGluZyBieXRlcywgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgYm91bmRzIG9mIHRoZSBhcnJheSBhcmUgYWxzbyBwcm9wZXJseSBjaGVja2VkIGFnYWluc3QgYGRldi1cdTAwM2Vpb3ZfbGltaXRgLCBwcmV2ZW50aW5nIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW55d2F5KS5cblRodXMsIHRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2aG9zdCB2c29jayBkcml2ZXIgdG8gYmF0Y2ggdXNlZCBlbGVtZW50cyB3aGVuIHNlbmRpbmcgcGFja2V0cyB0byB0aGUgZ3Vlc3QuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2aG9zdCB2c29jayBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDk4NzlhYmY0NDNjNGFmOTY4YmZmZGI1MTA1ODUzMDUyNGIxYjM0MDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAwNjoyOToyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmMgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbmluZGV4IDlhYWFiNmJiODA2MWMuLmQ4MDUwY2NhMjc1ZGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suY1xuQEAgLTEwMywxMiAmIzQzOzEwMywzNyBAQCBzdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfaGFzX3JlbW90ZV9jaWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgdTMyIGNpZClcbiBcdHJldHVybiBmb3VuZDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4mIzQzO1x0XHRcdFx0ICAgdW5zaWduZWQgaW50ICp1c2VkX2NvdW50KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCEqdXNlZF9jb3VudClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0dmhvc3RfYWRkX3VzZWRfbih2cSwgdnEtXHUwMDNlaGVhZHMsIHZxLVx1MDAzZW5oZWFkcywgKnVzZWRfY291bnQpO1xuJiM0MztcdCp1c2VkX2NvdW50ID0gMDtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4mIzQzO1x0XHRcdFx0IHVuc2lnbmVkIGludCAqdXNlZF9jb3VudCxcbiYjNDM7XHRcdFx0XHQgdW5zaWduZWQgaW50IGhlYWQsIHVuc2lnbmVkIGludCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICp1c2VkID0gXHUwMDI2dnEtXHUwMDNlaGVhZHNbKnVzZWRfY291bnRdO1xuJiM0MztcbiYjNDM7XHR1c2VkLVx1MDAzZWlkID0gY3B1X3RvX3Zob3N0MzIodnEsIGhlYWQpO1xuJiM0MztcdHVzZWQtXHUwMDNlbGVuID0gY3B1X3RvX3Zob3N0MzIodnEsIGxlbik7XG4mIzQzO1x0dnEtXHUwMDNlbmhlYWRzWyp1c2VkX2NvdW50XSA9IDE7XG4mIzQzO1x0KCp1c2VkX2NvdW50KSYjNDM7JiM0Mzs7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWRcbiB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcbiBcdFx0XHQgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXG4ge1xuIFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdHhfdnEgPSBcdTAwMjZ2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfVFhdO1xuIFx0aW50IHBrdHMgPSAwLCB0b3RhbF9sZW4gPSAwO1xuJiM0MztcdHVuc2lnbmVkIGludCB1c2VkX2NvdW50ID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgdXNlZF9saW1pdDtcbiBcdGJvb2wgYWRkZWQgPSBmYWxzZTtcbiBcdGJvb2wgcmVzdGFydF90eCA9IGZhbHNlO1xuIFxuQEAgLTEyMCw2ICYjNDM7MTQ1LDEyIEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuIFx0aWYgKCF2cV9tZXRhX3ByZWZldGNoKHZxKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4mIzQzO1x0dXNlZF9saW1pdCA9IG1pbl90KHVuc2lnbmVkIGludCwgdnEtXHUwMDNlbnVtLFxuJiM0MztcdFx0XHQgICBtaW5fdCh1bnNpZ25lZCBpbnQsIHZxLVx1MDAzZWRldi1cdTAwM2Vpb3ZfbGltaXQsXG4mIzQzO1x0XHRcdFx0IHZxLVx1MDAzZWRldi1cdTAwM2V3ZWlnaHQpKTtcbiYjNDM7XHRpZiAodW5saWtlbHkoIXVzZWRfbGltaXQpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0LyogQXZvaWQgZnVydGhlciB2bWV4aXRzLCB3ZSYjMzk7cmUgYWxyZWFkeSBwcm9jZXNzaW5nIHRoZSB2aXJ0cXVldWUgKi9cbiBcdHZob3N0X2Rpc2FibGVfbm90aWZ5KFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIFxuQEAgLTEzNCw5ICYjNDM7MTY1LDEzIEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuIFx0XHR1MzIgb2Zmc2V0O1xuIFx0XHRpbnQgaGVhZDtcbiBcbiYjNDM7XHRcdGlmICh1c2VkX2NvdW50ID09IHVzZWRfbGltaXQpXG4mIzQzO1x0XHRcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIFx1MDAyNnVzZWRfY291bnQpO1xuJiM0MztcbiBcdFx0c2tiID0gdmlydGlvX3Zzb2NrX3NrYl9kZXF1ZXVlKFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3F1ZXVlKTtcbiBcbiBcdFx0aWYgKCFza2IpIHtcbiYjNDM7XHRcdFx0YWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgXHUwMDI2dXNlZF9jb3VudCk7XG4gXHRcdFx0dmhvc3RfZW5hYmxlX25vdGlmeShcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTE1Myw2ICYjNDM7MTg4LDcgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRcdFx0LyogV2UgY2Fubm90IGZpbmlzaCB5ZXQgaWYgbW9yZSBidWZmZXJzIHNudWNrIGluIHdoaWxlXG4gXHRcdFx0ICogcmUtZW5hYmxpbmcgbm90aWZ5LlxuIFx0XHRcdCAqL1xuJiM0MztcdFx0XHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCBcdTAwMjZ1c2VkX2NvdW50KTtcbiBcdFx0XHRpZiAodW5saWtlbHkodmhvc3RfZW5hYmxlX25vdGlmeShcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKSkpIHtcbiBcdFx0XHRcdHZob3N0X2Rpc2FibGVfbm90aWZ5KFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtMjMwLDggJiM0MzsyNjYsOCBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcbiBcdFx0ICovXG4gXHRcdHZpcnRpb190cmFuc3BvcnRfZGVsaXZlcl90YXBfcGt0KHNrYik7XG4gXG4tXHRcdHZob3N0X2FkZF91c2VkKHZxLCBoZWFkLCBzaXplb2YoKmhkcikgJiM0MzsgcGF5bG9hZF9sZW4pO1xuLVx0XHRhZGRlZCA9IHRydWU7XG4mIzQzO1x0XHR2aG9zdF92c29ja19hZGRfdXNlZCh2cSwgXHUwMDI2dXNlZF9jb3VudCwgaGVhZCxcbiYjNDM7XHRcdFx0XHQgICAgIHNpemVvZigqaGRyKSAmIzQzOyBwYXlsb2FkX2xlbik7XG4gXG4gXHRcdFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQgJiM0Mzs9IHBheWxvYWRfbGVuO1xuIFx0XHR0b3RhbF9sZW4gJiM0Mzs9IHBheWxvYWRfbGVuO1xuQEAgLTI2NCw2ICYjNDM7MzAwLDcgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRcdFx0dmlydGlvX3RyYW5zcG9ydF9jb25zdW1lX3NrYl9zZW50KHNrYiwgdHJ1ZSk7XG4gXHRcdH1cbiBcdH0gd2hpbGUobGlrZWx5KCF2aG9zdF9leGNlZWRzX3dlaWdodCh2cSwgJiM0MzsmIzQzO3BrdHMsIHRvdGFsX2xlbikpKTtcbiYjNDM7XHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCBcdTAwMjZ1c2VkX2NvdW50KTtcbiBcdGlmIChhZGRlZClcbiBcdFx0dmhvc3Rfc2lnbmFsKFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7LAogICAgJiMzNDtWU09DS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCYjMzQ7LAogICAgJiMzNDt2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZob3N0IHZzb2NrIGRyaXZlciB0byBiYXRjaCB1c2VkIGVsZW1lbnRzIHdoZW4gc2VuZGluZyBwYWNrZXRzIHRvIHRoZSBndWVzdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZob3N0IHZzb2NrIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTg3OWFiZjQ0M2M0YWY5NjhiZmZkYjUxMDU4NTMwNTI0YjFiMzQwMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDA2OjI5OjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92c29jay5jIGIvZHJpdmVycy92aG9zdC92c29jay5jCmluZGV4IDlhYWFiNmJiODA2MWMuLmQ4MDUwY2NhMjc1ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3QvdnNvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmMKQEAgLTEwMywxMiAmIzQzOzEwMywzNyBAQCBzdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfaGFzX3JlbW90ZV9jaWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgdTMyIGNpZCkKIAlyZXR1cm4gZm91bmQ7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCB2aG9zdF92c29ja19mbHVzaF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLAomIzQzOwkJCQkgICB1bnNpZ25lZCBpbnQgKnVzZWRfY291bnQpCiYjNDM7ewomIzQzOwlpZiAoISp1c2VkX2NvdW50KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwl2aG9zdF9hZGRfdXNlZF9uKHZxLCB2cS0mZ3Q7aGVhZHMsIHZxLSZndDtuaGVhZHMsICp1c2VkX2NvdW50KTsKJiM0MzsJKnVzZWRfY291bnQgPSAwOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCiYjNDM7CQkJCSB1bnNpZ25lZCBpbnQgKnVzZWRfY291bnQsCiYjNDM7CQkJCSB1bnNpZ25lZCBpbnQgaGVhZCwgdW5zaWduZWQgaW50IGxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2cmluZ191c2VkX2VsZW0gKnVzZWQgPSAmYW1wO3ZxLSZndDtoZWFkc1sqdXNlZF9jb3VudF07CiYjNDM7CiYjNDM7CXVzZWQtJmd0O2lkID0gY3B1X3RvX3Zob3N0MzIodnEsIGhlYWQpOwomIzQzOwl1c2VkLSZndDtsZW4gPSBjcHVfdG9fdmhvc3QzMih2cSwgbGVuKTsKJiM0MzsJdnEtJmd0O25oZWFkc1sqdXNlZF9jb3VudF0gPSAxOwomIzQzOwkoKnVzZWRfY291bnQpJiM0MzsmIzQzOzsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZAogdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssCiAJCQkgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpCiB7CiAJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdHhfdnEgPSAmYW1wO3Zzb2NrLSZndDt2cXNbVlNPQ0tfVlFfVFhdOwogCWludCBwa3RzID0gMCwgdG90YWxfbGVuID0gMDsKJiM0MzsJdW5zaWduZWQgaW50IHVzZWRfY291bnQgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgdXNlZF9saW1pdDsKIAlib29sIGFkZGVkID0gZmFsc2U7CiAJYm9vbCByZXN0YXJ0X3R4ID0gZmFsc2U7CiAKQEAgLTEyMCw2ICYjNDM7MTQ1LDEyIEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLAogCWlmICghdnFfbWV0YV9wcmVmZXRjaCh2cSkpCiAJCWdvdG8gb3V0OwogCiYjNDM7CXVzZWRfbGltaXQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHZxLSZndDtudW0sCiYjNDM7CQkJICAgbWluX3QodW5zaWduZWQgaW50LCB2cS0mZ3Q7ZGV2LSZndDtpb3ZfbGltaXQsCiYjNDM7CQkJCSB2cS0mZ3Q7ZGV2LSZndDt3ZWlnaHQpKTsKJiM0MzsJaWYgKHVubGlrZWx5KCF1c2VkX2xpbWl0KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwogCS8qIEF2b2lkIGZ1cnRoZXIgdm1leGl0cywgd2UmIzM5O3JlIGFscmVhZHkgcHJvY2Vzc2luZyB0aGUgdmlydHF1ZXVlICovCiAJdmhvc3RfZGlzYWJsZV9ub3RpZnkoJmFtcDt2c29jay0mZ3Q7ZGV2LCB2cSk7CiAKQEAgLTEzNCw5ICYjNDM7MTY1LDEzIEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLAogCQl1MzIgb2Zmc2V0OwogCQlpbnQgaGVhZDsKIAomIzQzOwkJaWYgKHVzZWRfY291bnQgPT0gdXNlZF9saW1pdCkKJiM0MzsJCQlhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCAmYW1wO3VzZWRfY291bnQpOwomIzQzOwogCQlza2IgPSB2aXJ0aW9fdnNvY2tfc2tiX2RlcXVldWUoJmFtcDt2c29jay0mZ3Q7c2VuZF9wa3RfcXVldWUpOwogCiAJCWlmICghc2tiKSB7CiYjNDM7CQkJYWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgJmFtcDt1c2VkX2NvdW50KTsKIAkJCXZob3N0X2VuYWJsZV9ub3RpZnkoJmFtcDt2c29jay0mZ3Q7ZGV2LCB2cSk7CiAJCQlicmVhazsKIAkJfQpAQCAtMTUzLDYgJiM0MzsxODgsNyBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywKIAkJCS8qIFdlIGNhbm5vdCBmaW5pc2ggeWV0IGlmIG1vcmUgYnVmZmVycyBzbnVjayBpbiB3aGlsZQogCQkJICogcmUtZW5hYmxpbmcgbm90aWZ5LgogCQkJICovCiYjNDM7CQkJYWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgJmFtcDt1c2VkX2NvdW50KTsKIAkJCWlmICh1bmxpa2VseSh2aG9zdF9lbmFibGVfbm90aWZ5KCZhbXA7dnNvY2stJmd0O2RldiwgdnEpKSkgewogCQkJCXZob3N0X2Rpc2FibGVfbm90aWZ5KCZhbXA7dnNvY2stJmd0O2RldiwgdnEpOwogCQkJCWNvbnRpbnVlOwpAQCAtMjMwLDggJiM0MzsyNjYsOCBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywKIAkJICovCiAJCXZpcnRpb190cmFuc3BvcnRfZGVsaXZlcl90YXBfcGt0KHNrYik7CiAKLQkJdmhvc3RfYWRkX3VzZWQodnEsIGhlYWQsIHNpemVvZigqaGRyKSAmIzQzOyBwYXlsb2FkX2xlbik7Ci0JCWFkZGVkID0gdHJ1ZTsKJiM0MzsJCXZob3N0X3Zzb2NrX2FkZF91c2VkKHZxLCAmYW1wO3VzZWRfY291bnQsIGhlYWQsCiYjNDM7CQkJCSAgICAgc2l6ZW9mKCpoZHIpICYjNDM7IHBheWxvYWRfbGVuKTsKIAogCQlWSVJUSU9fVlNPQ0tfU0tCX0NCKHNrYiktJmd0O29mZnNldCAmIzQzOz0gcGF5bG9hZF9sZW47CiAJCXRvdGFsX2xlbiAmIzQzOz0gcGF5bG9hZF9sZW47CkBAIC0yNjQsNiAmIzQzOzMwMCw3IEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLAogCQkJdmlydGlvX3RyYW5zcG9ydF9jb25zdW1lX3NrYl9zZW50KHNrYiwgdHJ1ZSk7CiAJCX0KIAl9IHdoaWxlKGxpa2VseSghdmhvc3RfZXhjZWVkc193ZWlnaHQodnEsICYjNDM7JiM0Mztwa3RzLCB0b3RhbF9sZW4pKSk7CiYjNDM7CWFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsICZhbXA7dXNlZF9jb3VudCk7CiAJaWYgKGFkZGVkKQogCQl2aG9zdF9zaWduYWwoJmFtcDt2c29jay0mZ3Q7ZGV2LCB2cSk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0IHZzb2NrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgZHJpdmVycy92aG9zdC92c29jay5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YC4gSW5zdGVhZCBvZiB0aGUgb2xkLCBwZXItcGFja2V0IGB2aG9zdF9hZGRfdXNlZGAgYXBwcm9hY2gsIHRoZXkmIzM5O3JlIG5vdyBiYXRjaGluZyB3aXRoIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCBhbmQgYHZob3N0X3Zzb2NrX2FkZF91c2VkYC4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uLCBmb3Igc3VyZSDigJMgcG90ZW50aWFsbHkgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGFuZCBpdCYjMzk7bGwgYmUgd29ydGggZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9uIHRoZSB1c2VkIHJpbmcgYnVmZmVyLiBXZSBtaWdodCBoYXZlIHNvbWUgb3JkZXJpbmcgcmVxdWlyZW1lbnRzIG9yIHNvbWUgbG9ja2luZyBjb25jZXJucyBhcyBhIHJlc3VsdC4KClRoZSBuZXh0IGltbWVkaWF0ZSBzdGVwIGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBiYXRjaGluZyBjaGFuZ2UgaXMgY29uZGl0aW9uYWwgb24gYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLCBvciBpZiBpdCYjMzk7cyBhcHBsaWVkIHVuaXZlcnNhbGx5LiBJIHdpbGwgY3Jvc3MtcmVmZXJlbmNlIHRoZSBLY29uZmlnIGZvciBgZHJpdmVycy92aG9zdC92c29jay5jYCB0byBjbGFyaWZ5IGFueSBkZXBlbmRlbmNpZXMgb3IgYnVpbGQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGlzIGNvZGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zzb2NrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92c29jay5jPTEyOT1zdGF0aWMgdm9pZFxuZHJpdmVycy92aG9zdC92c29jay5jOjEzMDp2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMzEtXHRcdFx0ICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0zMTQ9c3RhdGljIHZvaWQgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTMyMS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozMjI6XHR2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QodnNvY2ssIHZxKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMjMtfVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0zMjY9dmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzQ5LVx0ICogYWxsIHRoZSBvdXRjb21lcyBjb3ZlcmVkOiBpZiB0aGUgYmFja2VuZCBiZWNvbWVzIE5VTEwgcmlnaHQgYWZ0ZXIgdGhlIGNoZWNrLFxuZHJpdmVycy92aG9zdC92c29jay5jOjM1MDpcdCAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS5cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zNTEtXHQgKi9cbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9NjM4PXN0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2hhbmRsZV9yeF9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02NDQtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NjQ1Olx0dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHZzb2NrLCB2cSk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjQ2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODU1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgTW9kdWxlIEludmVzdGlnYXRpb246IHZob3N0X3Zzb2NrKioKCk9rYXksIHNvIHRoZSBpbnZlc3RpZ2F0aW9uIGJlZ2lucy4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBkcml2ZXI/JiMzNDsgVGhlIHRleHQgaWRlbnRpZmllcyBpdCBhcyBgdmhvc3RfdnNvY2tgLiBNYWtlcyBzZW5zZSwgSSYjMzk7dmUgd29ya2VkIHdpdGggdmlydGlvIGFuZCB2aG9zdCBiZWZvcmUuIEJ1dCBJIG5lZWQgbW9yZSBjb25jcmV0ZSBpbmZvcm1hdGlvbi4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBgS2NvbmZpZ2AgZmlsZSBhc3NvY2lhdGVkIHdpdGggYHZob3N0X3Zzb2NrYC4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGVzc2VudGlhbCBtZXRhZGF0YTogZGVwZW5kZW5jaWVzLCBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiByZWZlcmVuY2VzLCBhbmQgZ2VuZXJhbGx5LCB0aGUgY29udGV4dCBvZiBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBlY29zeXN0ZW0uIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBmZWF0dXJlcywgYnVpbGQgb3B0aW9ucywgYW5kIHBvdGVudGlhbCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2c29jay5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L01ha2VmaWxlPTY9dmhvc3Rfc2NzaS15IDo9IHNjc2kub1xuZHJpdmVycy92aG9zdC9NYWtlZmlsZS03LVxuZHJpdmVycy92aG9zdC9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19WSE9TVF9WU09DSykgJiM0Mzs9IHZob3N0X3Zzb2NrLm9cbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGU6OTp2aG9zdF92c29jay15IDo9IHZzb2NrLm9cbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE3NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJJiMzOTttIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgdmhvc3RfdnNvY2sgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gYENPTkZJR19WSE9TVF9WU09DS2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIEkgbmVlZCB0byBmb2N1cyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgaXRzIHB1cnBvc2UsIGFuZCBwb3RlbnRpYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgZmVhdHVyZXMuIE15IHVzdWFsIGFwcHJvYWNoIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLCBzbyBJJiMzOTtsbCBnbyBjaGVjayBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBmb3IgdGhlIGBWSE9TVF9WU09DS2Agb3B0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGFuZCBjb250ZXh0IGZvciB0aGlzIHNldHRpbmcgc2hvdWxkIHJlc2lkZS4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIHdheSB0byB0cmFjZSB0aGUgY29uZmlnIG9wdGlvbnMgaW4gdGhlIGtlcm5lbCwgc28gdGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBiZWdpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkhPU1RfVlNPQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnPTQ2PWNvbmZpZyBWSE9TVF9TQ1NJXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU1LVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjU2OmNvbmZpZyBWSE9TVF9WU09DS1xuZHJpdmVycy92aG9zdC9LY29uZmlnLTU3LVx0dHJpc3RhdGUgXCYjMzQ7dmhvc3QgdmlydGlvLXZzb2NrIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0ODkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIGRpdmUgaW50byB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgYnJlYWtpbmcgdGhpcyBkb3duLgoKKipVbnBhY2tpbmcgdGhlIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBteSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNyaXRpY2FsIGRlcGVuZGVuY2llcyBhdCBwbGF5IGhlcmUuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgYSBzdXJmYWNlLWxldmVsIHVuZGVyc3RhbmRpbmc7IEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY29yZSBlbGVtZW50cyB0aGF0IHVuZGVycGluIHRoZSBzaXR1YXRpb24uIFdoYXQgYXJlIHRoZSB2YXJpYWJsZXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBkcml2ZSB0aGlzPyBBcmUgdGhlcmUgYW55IGhpZGRlbiBhc3N1bXB0aW9ucyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkPyBNeSBmb2N1cyBpcyB0byBjcmVhdGUgYSBzdHJ1Y3R1cmUgdG8gYnVpbGQgYSByb2J1c3QgbW9kZWwgdG8gZXhwbGFpbiB0aGlzIHByb2JsZW0uIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLCBhbmQgdGhhdCYjMzk7cyB0aGUgb25seSBwbGFjZSB0byBzdGFydCB0byBnbyBkZWVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTY6XHRjb25maWcgVkhPU1RfVlNPQ0tcbiAgNTc6XHRcdHRyaXN0YXRlIFwmIzM0O3Zob3N0IHZpcnRpby12c29jayBkcml2ZXJcJiMzNDtcbiAgNTg6XHRcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXHUwMDI2XHUwMDI2IEVWRU5URkRcbiAgNTk6XHRcdHNlbGVjdCBWSE9TVFxuICA2MDpcdFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cbiAgNjE6XHRcdGRlZmF1bHQgblxuICA2MjpcdFx0aGVscFxuICA2MzpcdFx0VGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gdGhlIGhvc3Qga2VybmVsIHRvIHByb3ZpZGUgQUZfVlNPQ0tcbiAgNjQ6XHRcdHNvY2tldHMgZm9yIGNvbW11bmljYXRpbmcgd2l0aCBndWVzdHMuICBUaGUgZ3Vlc3RzIG11c3QgaGF2ZSB0aGVcbiAgNjU6XHRcdHZpcnRpb190cmFuc3BvcnQua28gZHJpdmVyIGxvYWRlZCB0byB1c2UgdGhlIHZpcnRpby12c29jayBkZXZpY2UuXG4gIDY2Olx0XG4gIDY3Olx0XHRUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXG4gIDY4Olx0XHR2aG9zdF92c29jay5cbiAgNjk6XHRcbiAgNzA6XHRjb25maWcgVkhPU1RfVkRQQVxuICA3MTpcdFx0dHJpc3RhdGUgXCYjMzQ7Vmhvc3QgZHJpdmVyIGZvciB2RFBBLWJhc2VkIGJhY2tlbmRcJiMzNDtcbiAgNzI6XHRcdGRlcGVuZHMgb24gRVZFTlRGRFxuICA3MzpcdFx0c2VsZWN0IFZIT1NUXG4gIDc0Olx0XHRzZWxlY3QgSVJRX0JZUEFTU19NQU5BR0VSXG4gIDc1Olx0XHRkZXBlbmRzIG9uIFZEUEFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk0NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgdmhvc3RfdnNvY2tgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgcHJlcmVxdWlzaXRlczogaXQgaGluZ2VzIG9uIGBWU09DS0VUU2AgYW5kIGBFVkVOVEZEYCwgYW5kIHNwZWNpZmljYWxseSwgaXQgdGFyZ2V0cyB0aGUgYFZIT1NUX1ZTT0NLYCBjb25maWd1cmF0aW9uLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdyDigJMgbmFycm93cyBkb3duIHRoZSBzY29wZSByaWdodCBhd2F5LgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YC4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBmdW5kYW1lbnRhbCB0byBwYWNrZXQgc2VuZGluZyB3aXRoaW4gYHZob3N0X3Zzb2NrYC4gQW5kIHRoZSBwYXRjaCBpcyBiYXRjaGluZyB0aGUgdXNlZCBlbGVtZW50cyB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gTWFrZXMgc2Vuc2U7IG9wdGltaXphdGlvbiBpcyBhbHdheXMgYSBnb29kIHRoaW5nLiBHaXZlbiB0aGF0IGl0JiMzOTtzIGluIHRoZSBjb3JlIGtlcm5lbCBsb2dpYyBmb3IgYHZob3N0X3Zzb2NrYCwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJJiMzOTtkIGZsYWcgYXMgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OyBJdCYjMzk7cyByZWFjaGFibGUsIGFuZCB0aGF0IGJhdGNoaW5nIGNvdWxkIGludHJvZHVjZSB1bmV4cGVjdGVkIGVkZ2UgY2FzZXMuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbjogYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAsIG9idmlvdXNseSwgYnV0IGFsc28gYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgIGFuZCBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLgoKV2FpdCwgaG9sZCBvbi4uLiB0aG9zZSBsYXN0IHR3byBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCByaWdodC4gVGhhdCBtZWFucyB0aGV5JiMzOTtyZSBsaWtlbHkgbm90IGludGVuZGVkIGZvciBkaXJlY3QgZXh0ZXJuYWwgdXNlLiBJIHdvbmRlciBpZiB0aGV5JiMzOTtyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlcj8gTGV0IG1lIGp1c3QgY2hlY2sgdGhlIGRlZmluaXRpb25zLi4uIE5vcGUsIHRoZXkmIzM5O3JlIGBzdGF0aWMgYm9vbGAgYW5kIGBzdGF0aWMgdm9pZGAsIHNvIHRoZXkgKmNvdWxkKiBiZSBpbmxpbmVkLiBDb21waWxlciBvcHRpbWl6YXRpb24gaXMgYWx3YXlzIGEgZmFjdG9yIHRvIGNvbnNpZGVyLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkaXNhc3NlbWJseSB0byBiZSBzdXJlLiBBbHNvLCBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCBpcyBhbHNvIHN0YXRpYywgYnV0IGl0JiMzOTtzIGEgbGFyZ2VyIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBsZXNzIGxpa2VseSB0byBiZSBmdWxseSBpbmxpbmVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaWRlbnRpZnkgKmFueSogbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgdGhhdCBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uYWxpdHksIHNvIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zzb2NrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92c29jay5jPTEyOT1zdGF0aWMgdm9pZFxuZHJpdmVycy92aG9zdC92c29jay5jOjEzMDp2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMzEtXHRcdFx0ICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0zMTQ9c3RhdGljIHZvaWQgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTMyMS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozMjI6XHR2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QodnNvY2ssIHZxKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMjMtfVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0zMjY9dmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzQ5LVx0ICogYWxsIHRoZSBvdXRjb21lcyBjb3ZlcmVkOiBpZiB0aGUgYmFja2VuZCBiZWNvbWVzIE5VTEwgcmlnaHQgYWZ0ZXIgdGhlIGNoZWNrLFxuZHJpdmVycy92aG9zdC92c29jay5jOjM1MDpcdCAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS5cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zNTEtXHQgKi9cbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9NjM4PXN0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2hhbmRsZV9yeF9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02NDQtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NjQ1Olx0dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHZzb2NrLCB2cSk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjQ2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY2NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92c29jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYz0xMzA9dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTMxMy1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozMTQ6c3RhdGljIHZvaWQgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzE1LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9NzM1PXN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTc3My1cdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2dnNvY2stXHUwMDNlc2VuZF9wa3RfcXVldWUpO1xuZHJpdmVycy92aG9zdC92c29jay5jOjc3NDpcdHZob3N0X3dvcmtfaW5pdChcdTAwMjZ2c29jay1cdTAwM2VzZW5kX3BrdF93b3JrLCB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Rfd29yayk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzc1LVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNjIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqRXhhbWluaW5nIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YC4gSSBub3RpY2UgaXQmIzM5O3Mgbm90IGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgdXNhZ2UgaW1wbGljYXRpb25zLiBJcyBpdCBpbnRlbmRlZCB0byBiZSBleHRlcm5hbGx5IHZpc2libGU/IElzIGl0IHBhcnQgb2YgYSBsYXJnZXIsIHNoYXJlZCBpbnRlcmZhY2U/IFdoZXJlIGlzIGl0IGJlaW5nIGNhbGxlZCBmcm9tPyBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciB2aG9zdCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3RyYW5zcG9ydF9zZW5kX3BrdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTMwPXZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMTMtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzE0OnN0YXRpYyB2b2lkIHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuZHJpdmVycy92aG9zdC92c29jay5jLTMxNS17XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTMyNT1zdGF0aWMgaW50XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzI2OnZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzI3LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9NDg3PXN0YXRpYyBzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCB2aG9zdF90cmFuc3BvcnQgPSB7XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTUzOC1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo1Mzk6XHQuc2VuZF9wa3QgPSB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3QsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTQwLX07XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTczNT1zdGF0aWMgaW50IHZob3N0X3Zzb2NrX2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03NzMtXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3F1ZXVlKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3NzQ6XHR2aG9zdF93b3JrX2luaXQoXHUwMDI2dnNvY2stXHUwMDNlc2VuZF9wa3Rfd29yaywgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmspO1xuZHJpdmVycy92aG9zdC92c29jay5jLTc3NS1cdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTU3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAgQ29kZSBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgYSBiaXQgb2YgYSBtYXplLiBJbml0aWFsbHksIEkgdGhvdWdodCBpdCB3YXMgc3RhdGljLCB3aGljaCB3b3VsZCBtYWtlIGl0IGEgYml0IHRyaWNraWVyIHRvIHRyYWNlLiBCdXQgd2FpdCwgbm8sIGl0JiMzOTtzIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgIHRoYXQmIzM5O3Mgc3RhdGljLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gQW5kIHdoaWxlIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgICppcyogc3RhdGljLCBpdCYjMzk7cyBhbHNvIGEgcHJldHR5IGhlZnR5IGZ1bmN0aW9uLiBMaWtlbHksIHRoZSBjb21waWxlciBpc24mIzM5O3QgZ29pbmcgdG8gaW5saW5lIGl0LCB3aGljaCBhY3R1YWxseSBoZWxwcyBtZS4KClNvLCBJJiMzOTttIGdvaW5nIHRvIGNlbnRlciBteSBhbmFseXNpcyBvbiBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCBhcyB0aGUga2V5IHN5bWJvbCB0byBsb29rIGF0LCBhbG9uZyB3aXRoIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgIOKAkyBJIHNob3VsZCBrZWVwIHRoYXQgQVBJIGVudHJ5IHBvaW50IGluIG1pbmQuIEFoLCB5ZXMsIHRoZXJlIGl0IGlzIGluIHRoZSBgdmlydGlvX3RyYW5zcG9ydGAgc3RydWN0OyBgLnNlbmRfcGt0YCBpcyBhc3NpZ25lZCB0byBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YCwgc28gdGhhdCBjb25maXJtcyBpdCBhcyB0aGUgQVBJLgoKQW5kLCBpZiBJJiMzOTttIG5vdCBtaXN0YWtlbiwgYHZob3N0X3Zzb2NrX2hhbmRsZV9yeF9raWNrYCBsb29rcyBsaWtlIHRoZSB3b3JrZXIgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHJ4IGtpY2tzLCBhbmQgaXQmIzM5O3MgY2FsbGluZyBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YC4gVGhhdCYjMzk7cyBhIHZhbHVhYmxlIHBpZWNlIG9mIGluZm9ybWF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGZsb3cuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIHNpemUgb2YgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAuIFVuZGVyc3RhbmRpbmcgaXRzIHNjYWxlIHdpbGwgZ2l2ZSBtZSBhIHNlbnNlIG9mIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBwcm9jZXNzaW5nIGluc2lkZSwgYW5kIG1heSBpbmRpY2F0ZSBhcmVhcyByaXBlIGZvciBvcHRpbWl6YXRpb24gb3IgY2xvc2VyIGluc3BlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92c29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTI5Olx0c3RhdGljIHZvaWRcbiAxMzA6XHR2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcbiAxMzE6XHRcdFx0XHQgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXG4gMTMyOlx0e1xuIDEzMzpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdHhfdnEgPSBcdTAwMjZ2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfVFhdO1xuIDEzNDpcdFx0aW50IHBrdHMgPSAwLCB0b3RhbF9sZW4gPSAwO1xuIDEzNTpcdFx0dW5zaWduZWQgaW50IHVzZWRfY291bnQgPSAwO1xuIDEzNjpcdFx0dW5zaWduZWQgaW50IHVzZWRfbGltaXQ7XG4gMTM3Olx0XHRib29sIGFkZGVkID0gZmFsc2U7XG4gMTM4Olx0XHRib29sIHJlc3RhcnRfdHggPSBmYWxzZTtcbiAxMzk6XHRcbiAxNDA6XHRcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuIDE0MTpcdFxuIDE0MjpcdFx0aWYgKCF2aG9zdF92cV9nZXRfYmFja2VuZCh2cSkpXG4gMTQzOlx0XHRcdGdvdG8gb3V0O1xuIDE0NDpcdFxuIDE0NTpcdFx0aWYgKCF2cV9tZXRhX3ByZWZldGNoKHZxKSlcbiAxNDY6XHRcdFx0Z290byBvdXQ7XG4gMTQ3Olx0XG4gMTQ4Olx0XHR1c2VkX2xpbWl0ID0gbWluX3QodW5zaWduZWQgaW50LCB2cS1cdTAwM2VudW0sXG4gMTQ5Olx0XHRcdFx0ICAgbWluX3QodW5zaWduZWQgaW50LCB2cS1cdTAwM2VkZXYtXHUwMDNlaW92X2xpbWl0LFxuIDE1MDpcdFx0XHRcdFx0IHZxLVx1MDAzZWRldi1cdTAwM2V3ZWlnaHQpKTtcbiAxNTE6XHRcdGlmICh1bmxpa2VseSghdXNlZF9saW1pdCkpXG4gMTUyOlx0XHRcdGdvdG8gb3V0O1xuIDE1MzpcdFxuIDE1NDpcdFx0LyogQXZvaWQgZnVydGhlciB2bWV4aXRzLCB3ZSYjMzk7cmUgYWxyZWFkeSBwcm9jZXNzaW5nIHRoZSB2aXJ0cXVldWUgKi9cbiAxNTU6XHRcdHZob3N0X2Rpc2FibGVfbm90aWZ5KFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIDE1NjpcdFxuIDE1NzpcdFx0ZG8ge1xuIDE1ODpcdFx0XHRzdHJ1Y3QgdmlydGlvX3Zzb2NrX2hkciAqaGRyO1xuIDE1OTpcdFx0XHRzaXplX3QgaW92X2xlbiwgcGF5bG9hZF9sZW47XG4gMTYwOlx0XHRcdHN0cnVjdCBpb3ZfaXRlciBpb3ZfaXRlcjtcbiAxNjE6XHRcdFx0dTMyIGZsYWdzX3RvX3Jlc3RvcmUgPSAwO1xuIDE2MjpcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDE2MzpcdFx0XHR1bnNpZ25lZCBvdXQsIGluO1xuIDE2NDpcdFx0XHRzaXplX3QgbmJ5dGVzO1xuIDE2NTpcdFx0XHR1MzIgb2Zmc2V0O1xuIDE2NjpcdFx0XHRpbnQgaGVhZDtcbiAxNjc6XHRcbiAxNjg6XHRcdFx0aWYgKHVzZWRfY291bnQgPT0gdXNlZF9saW1pdClcbiAxNjk6XHRcdFx0XHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCBcdTAwMjZ1c2VkX2NvdW50KTtcbiAxNzA6XHRcbiAxNzE6XHRcdFx0c2tiID0gdmlydGlvX3Zzb2NrX3NrYl9kZXF1ZXVlKFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3F1ZXVlKTtcbiAxNzI6XHRcbiAxNzM6XHRcdFx0aWYgKCFza2IpIHtcbiAxNzQ6XHRcdFx0XHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCBcdTAwMjZ1c2VkX2NvdW50KTtcbiAxNzU6XHRcdFx0XHR2aG9zdF9lbmFibGVfbm90aWZ5KFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIDE3NjpcdFx0XHRcdGJyZWFrO1xuIDE3NzpcdFx0XHR9XG4gMTc4Olx0XG4gMTc5Olx0XHRcdGhlYWQgPSB2aG9zdF9nZXRfdnFfZGVzYyh2cSwgdnEtXHUwMDNlaW92LCBBUlJBWV9TSVpFKHZxLVx1MDAzZWlvdiksXG4gMTgwOlx0XHRcdFx0XHRcdCBcdTAwMjZvdXQsIFx1MDAyNmluLCBOVUxMLCBOVUxMKTtcbiAxODE6XHRcdFx0aWYgKGhlYWQgXHUwMDNjIDApIHtcbiAxODI6XHRcdFx0XHR2aXJ0aW9fdnNvY2tfc2tiX3F1ZXVlX2hlYWQoXHUwMDI2dnNvY2stXHUwMDNlc2VuZF9wa3RfcXVldWUsIHNrYik7XG4gMTgzOlx0XHRcdFx0YnJlYWs7XG4gMTg0Olx0XHRcdH1cbiAxODU6XHRcbiAxODY6XHRcdFx0aWYgKGhlYWQgPT0gdnEtXHUwMDNlbnVtKSB7XG4gMTg3Olx0XHRcdFx0dmlydGlvX3Zzb2NrX3NrYl9xdWV1ZV9oZWFkKFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3F1ZXVlLCBza2IpO1xuIDE4ODpcdFx0XHRcdC8qIFdlIGNhbm5vdCBmaW5pc2ggeWV0IGlmIG1vcmUgYnVmZmVycyBzbnVjayBpbiB3aGlsZVxuIDE4OTpcdFx0XHRcdCAqIHJlLWVuYWJsaW5nIG5vdGlmeS5cbiAxOTA6XHRcdFx0XHQgKi9cbiAxOTE6XHRcdFx0XHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCBcdTAwMjZ1c2VkX2NvdW50KTtcbiAxOTI6XHRcdFx0XHRpZiAodW5saWtlbHkodmhvc3RfZW5hYmxlX25vdGlmeShcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKSkpIHtcbiAxOTM6XHRcdFx0XHRcdHZob3N0X2Rpc2FibGVfbm90aWZ5KFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIDE5NDpcdFx0XHRcdFx0Y29udGludWU7XG4gMTk1Olx0XHRcdFx0fVxuIDE5NjpcdFx0XHRcdGJyZWFrO1xuIDE5NzpcdFx0XHR9XG4gMTk4Olx0XG4gMTk5Olx0XHRcdGlmIChvdXQpIHtcbiAyMDA6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAyMDE6XHRcdFx0XHR2cV9lcnIodnEsIFwmIzM0O0V4cGVjdGVkIDAgb3V0cHV0IGJ1ZmZlcnMsIGdvdCAldVxcblwmIzM0Oywgb3V0KTtcbiAyMDI6XHRcdFx0XHRicmVhaztcbiAyMDM6XHRcdFx0fVxuIDIwNDpcdFxuIDIwNTpcdFx0XHRpb3ZfbGVuID0gaW92X2xlbmd0aChcdTAwMjZ2cS1cdTAwM2Vpb3Zbb3V0XSwgaW4pO1xuIDIwNjpcdFx0XHRpZiAoaW92X2xlbiBcdTAwM2Mgc2l6ZW9mKCpoZHIpKSB7XG4gMjA3Olx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gMjA4Olx0XHRcdFx0dnFfZXJyKHZxLCBcJiMzNDtCdWZmZXIgbGVuIFslenVdIHRvbyBzbWFsbFxcblwmIzM0OywgaW92X2xlbik7XG4gMjA5Olx0XHRcdFx0YnJlYWs7XG4gMjEwOlx0XHRcdH1cbiAyMTE6XHRcbiAyMTI6XHRcdFx0aW92X2l0ZXJfaW5pdChcdTAwMjZpb3ZfaXRlciwgSVRFUl9ERVNULCBcdTAwMjZ2cS1cdTAwM2Vpb3Zbb3V0XSwgaW4sIGlvdl9sZW4pO1xuIDIxMzpcdFx0XHRvZmZzZXQgPSBWSVJUSU9fVlNPQ0tfU0tCX0NCKHNrYiktXHUwMDNlb2Zmc2V0O1xuIDIxNDpcdFx0XHRwYXlsb2FkX2xlbiA9IHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQ7XG4gMjE1Olx0XHRcdGhkciA9IHZpcnRpb192c29ja19oZHIoc2tiKTtcbiAyMTY6XHRcbiAyMTc6XHRcdFx0LyogSWYgdGhlIHBhY2tldCBpcyBncmVhdGVyIHRoYW4gdGhlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGVcbiAyMTg6XHRcdFx0ICogYnVmZmVyLCB3ZSBzcGxpdCBpdCB1c2luZyBtdWx0aXBsZSBidWZmZXJzLlxuIDIxOTpcdFx0XHQgKi9cbiAyMjA6XHRcdFx0aWYgKHBheWxvYWRfbGVuIFx1MDAzZSBpb3ZfbGVuIC0gc2l6ZW9mKCpoZHIpKSB7XG4gMjIxOlx0XHRcdFx0cGF5bG9hZF9sZW4gPSBpb3ZfbGVuIC0gc2l6ZW9mKCpoZHIpO1xuIDIyMjpcdFxuIDIyMzpcdFx0XHRcdC8qIEFzIHdlIGFyZSBjb3B5aW5nIHBpZWNlcyBvZiBsYXJnZSBwYWNrZXQmIzM5O3MgYnVmZmVyIHRvXG4gMjI0Olx0XHRcdFx0ICogc21hbGwgcnggYnVmZmVycywgaGVhZGVycyBvZiBwYWNrZXRzIGluIHJ4IHF1ZXVlIGFyZVxuIDIyNTpcdFx0XHRcdCAqIGNyZWF0ZWQgZHluYW1pY2FsbHkgYW5kIGFyZSBpbml0aWFsaXplZCB3aXRoIGhlYWRlclxuIDIyNjpcdFx0XHRcdCAqIG9mIGN1cnJlbnQgcGFja2V0KGV4Y2VwdCBsZW5ndGgpLiBCdXQgaW4gY2FzZSBvZlxuIDIyNzpcdFx0XHRcdCAqIFNPQ0tfU0VRUEFDS0VULCB3ZSBhbHNvIG11c3QgY2xlYXIgbWVzc2FnZSBkZWxpbWV0ZXJcbiAyMjg6XHRcdFx0XHQgKiBiaXQgKFZJUlRJT19WU09DS19TRVFfRU9NKSBhbmQgTVNHX0VPUiBiaXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEzMwoJCQkJCQkJb3V0cHV0OiAxMTIKCQkJCQkJCXRob3VnaHRzOiAyNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWaG9zdCBWc29jayBQYWNrZXQgU2VuZGluZyBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSB2aG9zdCB2c29jayBkcml2ZXIsIHdoaWNoIGZvY3VzZXMgb24gYmF0Y2hpbmcgdXNlZCBlbGVtZW50cyB3aGVuIHNlbmRpbmcgcGFja2V0cyB0byB0aGUgZ3Vlc3QuIFRoaXMgc2VlbXMgbGlrZSBhIGNvcmUgbG9naWMgY2hhbmdlLCBzbyBpdCYjMzk7cyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QgYW5kIGhvdyB3ZSBjYW4gYmVzdCB0ZXN0IGl0LiBUaGUgcHJpbWFyeSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QgYXBwZWFyIHRvIGJlIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgIGFuZCBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YC4gQ29uc2lkZXJpbmcgdGhlaXIgc2l6ZSwgSSBjYW4gc2FmZWx5IGFzc3VtZSBuZWl0aGVyIGlzIGlubGluZWQ7IHRoZXkgc2hvdWxkIGJlIGRpc3RpbmN0IHN5bWJvbHMuIEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGB2aG9zdF92c29ja19mbHVzaF91c2VkYDsgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBqdXN0IGEgYHN0YXRpYyBib29sYCBtYWtlcyBpdCBhIHN0cm9uZyBjYW5kaWRhdGUgdG8gYmUgaW5saW5lZCwgYWx0aG91Z2ggSSYjMzk7bGwga2VlcCBhbiBleWUgb24gaXQgZHVyaW5nIGFuYWx5c2lzLgoKVGhlIG1haW4gY29uZmlndXJhdGlvbiBpcyBgVkhPU1RfVlNPQ0tgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlIGdpdmVuIHRoZSBjaGFuZ2UmIzM5O3MgZm9jdXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBpZGVudGlmeSBhbGwgZGVwZW5kZW5jaWVzLiBMZXQgbWUgdmVyaWZ5OyBpdCBsb29rcyBsaWtlIGBWSE9TVF9WU09DS2AgYWxzbyByZXF1aXJlcyBgVlNPQ0tFVFNgIGFuZCBgRVZFTlRGRGAuIGBWU09DS0VUU2AgaXMgb2J2aW91c2x5IGZ1bmRhbWVudGFsIHRvIHZzb2NrIGZ1bmN0aW9uYWxpdHksIHNvIGl0JiMzOTtzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgaW52b2x2ZWQgaW4gdGVzdGluZy4gSSYjMzk7bGwgaW5jbHVkZSBgVkhPU1RfVlNPQ0tgIGFuZCBgVlNPQ0tFVFNgIGluIG15IGNvbmZpZ3VyYXRpb24gY29uc2lkZXJhdGlvbnMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBhbmQgbmVjZXNzYXJ5IHNldHVwIGZvciB0aG9yb3VnaCB0ZXN0aW5nIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7LAogICAgJiMzNDtWU09DS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCYjMzQ7LAogICAgJiMzNDt2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZob3N0IHZzb2NrIGRyaXZlciB0byBiYXRjaCB1c2VkIGVsZW1lbnRzIHdoZW4gc2VuZGluZyBwYWNrZXRzIHRvIHRoZSBndWVzdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZob3N0IHZzb2NrIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7LAogICAgJiMzNDtWU09DS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCYjMzQ7LAogICAgJiMzNDt2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZob3N0IHZzb2NrIGRyaXZlciB0byBiYXRjaCB1c2VkIGVsZW1lbnRzIHdoZW4gc2VuZGluZyBwYWNrZXRzIHRvIHRoZSBndWVzdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZob3N0IHZzb2NrIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyB0aGUgdmlydGlvIHZzb2NrIHRyYW5zbWlzc2lvbiBwYXRoIGJ5IGJhdGNoaW5nIHVzZWQgZWxlbWVudCB1cGRhdGVzLiBJdCBpbnRyb2R1Y2VzIGB2aG9zdF92c29ja19hZGRfdXNlZGAgdG8gcG9wdWxhdGUgYW4gYXJyYXkgb2YgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIChgdnEtXHUwMDNlaGVhZHNgKSBhbmQgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgIHRvIGZsdXNoIHRoZW0gdG8gdGhlIGd1ZXN0IG1lbW9yeSB2aWEgYHZob3N0X2FkZF91c2VkX25gLlxuVGhlIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCBjb25zaXN0cyBvZiB0d28gMzItYml0IGludGVnZXJzIChgaWRgIGFuZCBgbGVuYCkgYW5kIGNvbnRhaW5zIG5vIHBhZGRpbmcgYnl0ZXMuIEJvdGggZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGB2aG9zdF92c29ja19hZGRfdXNlZGAgYmVmb3JlIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIChndWVzdCBtZW1vcnkpIHZpYSBgdmhvc3RfcHV0X3VzZWRgIGFuZCBgdmhvc3RfY29weV90b191c2VyYC5cblNpbmNlIHRoZSBtZW1vcnkgYmVpbmcgY29waWVkIGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCB0aGVyZSBhcmUgbm8gcGFkZGluZyBieXRlcywgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgYm91bmRzIG9mIHRoZSBhcnJheSBhcmUgYWxzbyBwcm9wZXJseSBjaGVja2VkIGFnYWluc3QgYGRldi1cdTAwM2Vpb3ZfbGltaXRgLCBwcmV2ZW50aW5nIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW55d2F5KS5cblRodXMsIHRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk4NzlhYmY0NDNjNGFmOTY4YmZmZGI1MTA1ODUzMDUyNGIxYjM0MDEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAwNjoyOToyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdnNvY2suYyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suYwppbmRleCA5YWFhYjZiYjgwNjFjLi5kODA1MGNjYTI3NWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC92c29jay5jCkBAIC0xMDMsMTIgJiM0MzsxMDMsMzcgQEAgc3RhdGljIGJvb2wgdmhvc3RfdHJhbnNwb3J0X2hhc19yZW1vdGVfY2lkKHN0cnVjdCB2c29ja19zb2NrICp2c2ssIHUzMiBjaWQpCiAJcmV0dXJuIGZvdW5kOwogfQogCiYjNDM7c3RhdGljIGJvb2wgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwKJiM0MzsJCQkJICAgdW5zaWduZWQgaW50ICp1c2VkX2NvdW50KQomIzQzO3sKJiM0MzsJaWYgKCEqdXNlZF9jb3VudCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJdmhvc3RfYWRkX3VzZWRfbih2cSwgdnEtJmd0O2hlYWRzLCB2cS0mZ3Q7bmhlYWRzLCAqdXNlZF9jb3VudCk7CiYjNDM7CSp1c2VkX2NvdW50ID0gMDsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2FkZF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLAomIzQzOwkJCQkgdW5zaWduZWQgaW50ICp1c2VkX2NvdW50LAomIzQzOwkJCQkgdW5zaWduZWQgaW50IGhlYWQsIHVuc2lnbmVkIGludCBsZW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICp1c2VkID0gJmFtcDt2cS0mZ3Q7aGVhZHNbKnVzZWRfY291bnRdOwomIzQzOwomIzQzOwl1c2VkLSZndDtpZCA9IGNwdV90b192aG9zdDMyKHZxLCBoZWFkKTsKJiM0MzsJdXNlZC0mZ3Q7bGVuID0gY3B1X3RvX3Zob3N0MzIodnEsIGxlbik7CiYjNDM7CXZxLSZndDtuaGVhZHNbKnVzZWRfY291bnRdID0gMTsKJiM0MzsJKCp1c2VkX2NvdW50KSYjNDM7JiM0Mzs7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQKIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLAogCQkJICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQogewogCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnR4X3ZxID0gJmFtcDt2c29jay0mZ3Q7dnFzW1ZTT0NLX1ZRX1RYXTsKIAlpbnQgcGt0cyA9IDAsIHRvdGFsX2xlbiA9IDA7CiYjNDM7CXVuc2lnbmVkIGludCB1c2VkX2NvdW50ID0gMDsKJiM0MzsJdW5zaWduZWQgaW50IHVzZWRfbGltaXQ7CiAJYm9vbCBhZGRlZCA9IGZhbHNlOwogCWJvb2wgcmVzdGFydF90eCA9IGZhbHNlOwogCkBAIC0xMjAsNiAmIzQzOzE0NSwxMiBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywKIAlpZiAoIXZxX21ldGFfcHJlZmV0Y2godnEpKQogCQlnb3RvIG91dDsKIAomIzQzOwl1c2VkX2xpbWl0ID0gbWluX3QodW5zaWduZWQgaW50LCB2cS0mZ3Q7bnVtLAomIzQzOwkJCSAgIG1pbl90KHVuc2lnbmVkIGludCwgdnEtJmd0O2Rldi0mZ3Q7aW92X2xpbWl0LAomIzQzOwkJCQkgdnEtJmd0O2Rldi0mZ3Q7d2VpZ2h0KSk7CiYjNDM7CWlmICh1bmxpa2VseSghdXNlZF9saW1pdCkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKIAkvKiBBdm9pZCBmdXJ0aGVyIHZtZXhpdHMsIHdlJiMzOTtyZSBhbHJlYWR5IHByb2Nlc3NpbmcgdGhlIHZpcnRxdWV1ZSAqLwogCXZob3N0X2Rpc2FibGVfbm90aWZ5KCZhbXA7dnNvY2stJmd0O2RldiwgdnEpOwogCkBAIC0xMzQsOSAmIzQzOzE2NSwxMyBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywKIAkJdTMyIG9mZnNldDsKIAkJaW50IGhlYWQ7CiAKJiM0MzsJCWlmICh1c2VkX2NvdW50ID09IHVzZWRfbGltaXQpCiYjNDM7CQkJYWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgJmFtcDt1c2VkX2NvdW50KTsKJiM0MzsKIAkJc2tiID0gdmlydGlvX3Zzb2NrX3NrYl9kZXF1ZXVlKCZhbXA7dnNvY2stJmd0O3NlbmRfcGt0X3F1ZXVlKTsKIAogCQlpZiAoIXNrYikgewomIzQzOwkJCWFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsICZhbXA7dXNlZF9jb3VudCk7CiAJCQl2aG9zdF9lbmFibGVfbm90aWZ5KCZhbXA7dnNvY2stJmd0O2RldiwgdnEpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTE1Myw2ICYjNDM7MTg4LDcgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssCiAJCQkvKiBXZSBjYW5ub3QgZmluaXNoIHlldCBpZiBtb3JlIGJ1ZmZlcnMgc251Y2sgaW4gd2hpbGUKIAkJCSAqIHJlLWVuYWJsaW5nIG5vdGlmeS4KIAkJCSAqLwomIzQzOwkJCWFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsICZhbXA7dXNlZF9jb3VudCk7CiAJCQlpZiAodW5saWtlbHkodmhvc3RfZW5hYmxlX25vdGlmeSgmYW1wO3Zzb2NrLSZndDtkZXYsIHZxKSkpIHsKIAkJCQl2aG9zdF9kaXNhYmxlX25vdGlmeSgmYW1wO3Zzb2NrLSZndDtkZXYsIHZxKTsKIAkJCQljb250aW51ZTsKQEAgLTIzMCw4ICYjNDM7MjY2LDggQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssCiAJCSAqLwogCQl2aXJ0aW9fdHJhbnNwb3J0X2RlbGl2ZXJfdGFwX3BrdChza2IpOwogCi0JCXZob3N0X2FkZF91c2VkKHZxLCBoZWFkLCBzaXplb2YoKmhkcikgJiM0MzsgcGF5bG9hZF9sZW4pOwotCQlhZGRlZCA9IHRydWU7CiYjNDM7CQl2aG9zdF92c29ja19hZGRfdXNlZCh2cSwgJmFtcDt1c2VkX2NvdW50LCBoZWFkLAomIzQzOwkJCQkgICAgIHNpemVvZigqaGRyKSAmIzQzOyBwYXlsb2FkX2xlbik7CiAKIAkJVklSVElPX1ZTT0NLX1NLQl9DQihza2IpLSZndDtvZmZzZXQgJiM0Mzs9IHBheWxvYWRfbGVuOwogCQl0b3RhbF9sZW4gJiM0Mzs9IHBheWxvYWRfbGVuOwpAQCAtMjY0LDYgJiM0MzszMDAsNyBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywKIAkJCXZpcnRpb190cmFuc3BvcnRfY29uc3VtZV9za2Jfc2VudChza2IsIHRydWUpOwogCQl9CiAJfSB3aGlsZShsaWtlbHkoIXZob3N0X2V4Y2VlZHNfd2VpZ2h0KHZxLCAmIzQzOyYjNDM7cGt0cywgdG90YWxfbGVuKSkpOwomIzQzOwlhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCAmYW1wO3VzZWRfY291bnQpOwogCWlmIChhZGRlZCkKIAkJdmhvc3Rfc2lnbmFsKCZhbXA7dnNvY2stJmd0O2RldiwgdnEpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDUzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNjI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAgd2l0aGluIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBiYXRjaGluZyB3aGVuIGFkZGluZyB1c2VkIGVsZW1lbnRzIHRvIHRoZSB2aXJ0cXVldWUsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZldyBxdWVzdGlvbnMuIEluc3RlYWQgb2YgdGhlIHVzdWFsIGB2aG9zdF9hZGRfdXNlZGAgY2FsbCBwZXIgcGFja2V0LCBpdCYjMzk7cyBub3cgdXNpbmcgYHZob3N0X3Zzb2NrX2FkZF91c2VkYCwgcG9wdWxhdGluZyBgdnEtJmd0O2hlYWRzYCwgYHZxLSZndDtuaGVhZHNgIGFuZCBpbmNyZW1lbnRpbmcgYHVzZWRfY291bnRgIGJlZm9yZSBhIGJ1bGsgZmx1c2ggdmlhIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCwgZXZlbnR1YWxseSBjYWxsaW5nIGB2aG9zdF9hZGRfdXNlZF9uYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMsIGVzcGVjaWFsbHkgc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBiYXRjaGluZy4KCk15IHByaW1hcnkgY29uY2VybiBpcyBhcm91bmQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIHdpdGhpbiB0aGUgYmF0Y2hpbmcgbG9naWMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBob3cgYHZxLSZndDtoZWFkc2AgYW5kIGB2cS0mZ3Q7bmhlYWRzYCBhcmUgdXNlZCBhbmQgaW5pdGlhbGl6ZWQuCgpEaXZpbmcgaW50byB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBgdnEtJmd0O2hlYWRzYCBhbmQgYHZxLSZndDtuaGVhZHNgIGFyZSBwYXJ0IG9mIHRoZSBgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZWAgaXRzZWxmLCB3aGljaCBpcyBnb29kLiBUaGUgYHZob3N0X3Zzb2NrX2FkZF91c2VkYCBmdW5jdGlvbiBpcyB3aGF0IHBvcHVsYXRlcyB0aGVzZSBhcnJheXMsIHNldHRpbmcgYHVzZWQtJmd0O2lkYCBhbmQgYHVzZWQtJmd0O2xlbmAuIEl0IGFwcGVhcnMgdGhlIGNvZGUgaW5pdGlhbGl6ZXMgdGhlIG1lbWJlcnMgb2YgdGhlIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCB0byBgdnEtJmd0O2hlYWRzWyp1c2VkX2NvdW50XWAsIHdoaWNoIGlzIGVuY291cmFnaW5nLiBUaGUgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIGRlZmluaXRpb24sIHdpdGggaXRzIDMyLWJpdCBgaWRgIGFuZCBgbGVuYCBtZW1iZXJzIGxvb2tzIGxpa2UgdGhlcmUmIzM5O3Mgbm8gcGFkZGluZy4gU28sIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIHRoZSBzdHJ1Y3QgaXRzZWxmLCBpdCBpcyA4IGJ5dGVzIGluIHRvdGFsLgoKRXNzZW50aWFsbHksIGB2aG9zdF92c29ja19hZGRfdXNlZGAgaXMgdGFraW5nIGNhcmUgb2YgaW5pdGlhbGl6aW5nIHRoZSBgaWRgIGFuZCBgbGVuYCBmaWVsZHMsIGFuZCB0aGUgYHZob3N0X2FkZF91c2VkX25gIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB3cml0aW5nIHRoZXNlIGVsZW1lbnRzIHRvIHRoZSBndWVzdCBtZW1vcnkuIFNvLCBJIHNlZSB0aGUgd3JpdGVzIGZyb20gdGhlIGRldmljZSB0byB0aGUgZ3Vlc3QsIGFuZCB0aGUgZWxlbWVudHMgYXJlIGJlaW5nIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB3cml0dGVuLCBhbmQgd2l0aCBubyBwYWRkaW5nLCBpdCBkb2VzIG5vdCBsb29rIGxpa2UgdGhlcmUgd2lsbCBiZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MuCgpIb3dldmVyLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gSXMgYHZxLSZndDtuaGVhZHNgIGFjdHVhbGx5IGFuIGFycmF5IG9mIGludGVnZXJzPyBJIG5lZWQgdG8ga25vdyB0aGUgdHlwZSBmb3IgdGhhdCBtZW1iZXIgdG8gZW5zdXJlIG5vIGx1cmtpbmcgaXNzdWVzLiBJIHdpbGwgdXNlIGEgZ3JlcHBlciAoSSBrbm93LCBJIGtub3cpIHRvIHF1aWNrbHkgZmluZCB0aGUgYHN0cnVjdCB2aG9zdF92aXJ0cXVldWVgIGFuZCBjb25maXJtIHRoZSB0eXBlIG9mIHRoZSBgbmhlYWRzYCBhcnJheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5oPTg4PXN0cnVjdCB2aG9zdF92cmluZ19jYWxsIHtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtOTMtLyogVGhlIHZpcnRxdWV1ZSBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGEgcXVldWUgYXR0YWNoZWQgdG8gYSBkZXZpY2UuICovXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg6OTQ6c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSB7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtOTUtXHRzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHZob3N0LmgqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdmhvc3QgaW1wbGVtZW50YXRpb24gYmV0dGVyLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgZHJpdmVycy92aG9zdC92aG9zdC5oYC4gSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgOTQuIE15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyB0aGF0IHNvbWV0aGluZyBzaWduaWZpY2FudCBpcyBoYXBwZW5pbmcgdGhlcmUsIHBvc3NpYmx5IHJlbGF0ZWQgdG8gZGF0YSBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9uIGRlZmluaXRpb25zIGNydWNpYWwgZm9yIHRoZSB2aG9zdCBvcGVyYXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSB0byB1bmxvY2sgdGhpcyBhcmNoaXRlY3R1cmFsIHVuZGVyc3RhbmRpbmcgSSYjMzk7bSBhZnRlci4gTGV0JiMzOTtzIHNlZSB3aGF0IHRyZWFzdXJlcyB0aGF0IGZpbGUgaG9sZHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTQ6XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlIHtcbiAgOTU6XHRcdHN0cnVjdCB2aG9zdF9kZXYgKmRldjtcbiAgOTY6XHRcdHN0cnVjdCB2aG9zdF93b3JrZXIgX19yY3UgKndvcmtlcjtcbiAgOTc6XHRcbiAgOTg6XHRcdC8qIFRoZSBhY3R1YWwgcmluZyBvZiBidWZmZXJzLiAqL1xuICA5OTpcdFx0c3RydWN0IG11dGV4IG11dGV4O1xuIDEwMDpcdFx0dW5zaWduZWQgaW50IG51bTtcbiAxMDE6XHRcdHZyaW5nX2Rlc2NfdCBfX3VzZXIgKmRlc2M7XG4gMTAyOlx0XHR2cmluZ19hdmFpbF90IF9fdXNlciAqYXZhaWw7XG4gMTAzOlx0XHR2cmluZ191c2VkX3QgX191c2VyICp1c2VkO1xuIDEwNDpcdFx0Y29uc3Qgc3RydWN0IHZob3N0X2lvdGxiX21hcCAqbWV0YV9pb3RsYltWSE9TVF9OVU1fQUREUlNdO1xuIDEwNTpcdFx0c3RydWN0IGZpbGUgKmtpY2s7XG4gMTA2Olx0XHRzdHJ1Y3Qgdmhvc3RfdnJpbmdfY2FsbCBjYWxsX2N0eDtcbiAxMDc6XHRcdHN0cnVjdCBldmVudGZkX2N0eCAqZXJyb3JfY3R4O1xuIDEwODpcdFx0c3RydWN0IGV2ZW50ZmRfY3R4ICpsb2dfY3R4O1xuIDEwOTpcdFxuIDExMDpcdFx0c3RydWN0IHZob3N0X3BvbGwgcG9sbDtcbiAxMTE6XHRcbiAxMTI6XHRcdC8qIFRoZSByb3V0aW5lIHRvIGNhbGwgd2hlbiB0aGUgR3Vlc3QgcGluZ3MgdXMsIG9yIHRpbWVvdXQuICovXG4gMTEzOlx0XHR2aG9zdF93b3JrX2ZuX3QgaGFuZGxlX2tpY2s7XG4gMTE0Olx0XG4gMTE1Olx0XHQvKiBMYXN0IGF2YWlsYWJsZSBpbmRleCB3ZSBzYXcuXG4gMTE2Olx0XHQgKiBWYWx1ZXMgYXJlIGxpbWl0ZWQgdG8gMHg3ZmZmLCBhbmQgdGhlIGhpZ2ggYml0IGlzIHVzZWQgYXNcbiAxMTc6XHRcdCAqIGEgd3JhcCBjb3VudGVyIHdoZW4gdXNpbmcgVklSVElPX0ZfUklOR19QQUNLRUQuICovXG4gMTE4Olx0XHR1MTYgbGFzdF9hdmFpbF9pZHg7XG4gMTE5Olx0XHQvKiBOZXh0IGF2YWlsIHJpbmcgaGVhZCB3aGVuIFZJUlRJT19GX0lOX09SREVSIGlzIG5lZ29pdGF0ZWQgKi9cbiAxMjA6XHRcdHUxNiBuZXh0X2F2YWlsX2hlYWQ7XG4gMTIxOlx0XG4gMTIyOlx0XHQvKiBDYWNoZXMgYXZhaWxhYmxlIGluZGV4IHZhbHVlIGZyb20gdXNlci4gKi9cbiAxMjM6XHRcdHUxNiBhdmFpbF9pZHg7XG4gMTI0Olx0XG4gMTI1Olx0XHQvKiBMYXN0IGluZGV4IHdlIHVzZWQuXG4gMTI2Olx0XHQgKiBWYWx1ZXMgYXJlIGxpbWl0ZWQgdG8gMHg3ZmZmLCBhbmQgdGhlIGhpZ2ggYml0IGlzIHVzZWQgYXNcbiAxMjc6XHRcdCAqIGEgd3JhcCBjb3VudGVyIHdoZW4gdXNpbmcgVklSVElPX0ZfUklOR19QQUNLRUQuICovXG4gMTI4Olx0XHR1MTYgbGFzdF91c2VkX2lkeDtcbiAxMjk6XHRcbiAxMzA6XHRcdC8qIFVzZWQgZmxhZ3MgKi9cbiAxMzE6XHRcdHUxNiB1c2VkX2ZsYWdzO1xuIDEzMjpcdFxuIDEzMzpcdFx0LyogTGFzdCB1c2VkIGluZGV4IHZhbHVlIHdlIGhhdmUgc2lnbmFsbGVkIG9uICovXG4gMTM0Olx0XHR1MTYgc2lnbmFsbGVkX3VzZWQ7XG4gMTM1Olx0XG4gMTM2Olx0XHQvKiBMYXN0IHVzZWQgaW5kZXggdmFsdWUgd2UgaGF2ZSBzaWduYWxsZWQgb24gKi9cbiAxMzc6XHRcdGJvb2wgc2lnbmFsbGVkX3VzZWRfdmFsaWQ7XG4gMTM4Olx0XG4gMTM5Olx0XHQvKiBMb2cgd3JpdGVzIHRvIHVzZWQgc3RydWN0dXJlLiAqL1xuIDE0MDpcdFx0Ym9vbCBsb2dfdXNlZDtcbiAxNDE6XHRcdHU2NCBsb2dfYWRkcjtcbiAxNDI6XHRcbiAxNDM6XHRcdHN0cnVjdCBpb3ZlYyBpb3ZbVUlPX01BWElPVl07XG4gMTQ0Olx0XHRzdHJ1Y3QgaW92ZWMgaW90bGJfaW92WzY0XTtcbiAxNDU6XHRcdHN0cnVjdCBpb3ZlYyAqaW5kaXJlY3Q7XG4gMTQ2Olx0XHRzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcztcbiAxNDc6XHRcdHUxNiAqbmhlYWRzO1xuIDE0ODpcdFx0LyogUHJvdGVjdGVkIGJ5IHZpcnRxdWV1ZSBtdXRleC4gKi9cbiAxNDk6XHRcdHN0cnVjdCB2aG9zdF9pb3RsYiAqdW1lbTtcbiAxNTA6XHRcdHN0cnVjdCB2aG9zdF9pb3RsYiAqaW90bGI7XG4gMTUxOlx0XHR2b2lkICpwcml2YXRlX2RhdGE7XG4gMTUyOlx0XHRWSVJUSU9fREVDTEFSRV9GRUFUVVJFUyhhY2tlZF9mZWF0dXJlcyk7XG4gMTUzOlx0XHR1NjQgYWNrZWRfYmFja2VuZF9mZWF0dXJlcztcbiAxNTQ6XHRcdC8qIExvZyB3cml0ZSBkZXNjcmlwdG9ycyAqL1xuIDE1NTpcdFx0dm9pZCBfX3VzZXIgKmxvZ19iYXNlO1xuIDE1NjpcdFx0c3RydWN0IHZob3N0X2xvZyAqbG9nO1xuIDE1NzpcdFx0c3RydWN0IGlvdmVjIGxvZ19pb3ZbNjRdO1xuIDE1ODpcdFxuIDE1OTpcdFx0LyogUmluZyBlbmRpYW5uZXNzLiBEZWZhdWx0cyB0byBsZWdhY3kgbmF0aXZlIGVuZGlhbm5lc3MuXG4gMTYwOlx0XHQgKiBTZXQgdG8gdHJ1ZSB3aGVuIHN0YXJ0aW5nIGEgbW9kZXJuIHZpcnRpbyBkZXZpY2UuICovXG4gMTYxOlx0XHRib29sIGlzX2xlO1xuIDE2MjpcdCNpZmRlZiBDT05GSUdfVkhPU1RfQ1JPU1NfRU5ESUFOX0xFR0FDWVxuIDE2MzpcdFx0LyogUmluZyBlbmRpYW5uZXNzIHJlcXVlc3RlZCBieSB1c2Vyc3BhY2UgZm9yIGNyb3NzLWVuZGlhbiBzdXBwb3J0LiAqL1xuIDE2NDpcdFx0Ym9vbCB1c2VyX2JlO1xuIDE2NTpcdCNlbmRpZlxuIDE2NjpcdFx0dTMyIGJ1c3lsb29wX3RpbWVvdXQ7XG4gMTY3Olx0fTtcbiAxNjg6XHRcbiAxNjk6XHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUge1xuIDE3MDpcdCAgdW5pb24ge1xuIDE3MTpcdFx0ICBzdHJ1Y3Qgdmhvc3RfbXNnIG1zZztcbiAxNzI6XHRcdCAgc3RydWN0IHZob3N0X21zZ192MiBtc2dfdjI7XG4gMTczOlx0ICB9O1xuIDE3NDpcdCAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7XG4gMTc1Olx0ICBzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7XG4gMTc2Olx0fTtcbiAxNzc6XHRcbiAxNzg6XHRzdHJ1Y3Qgdmhvc3RfZGV2IHtcbiAxNzk6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIDE4MDpcdFx0c3RydWN0IG11dGV4IG11dGV4O1xuIDE4MTpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKnZxcztcbiAxODI6XHRcdGludCBudnFzO1xuIDE4MzpcdFx0c3RydWN0IGV2ZW50ZmRfY3R4ICpsb2dfY3R4O1xuIDE4NDpcdFx0c3RydWN0IHZob3N0X2lvdGxiICp1bWVtO1xuIDE4NTpcdFx0c3RydWN0IHZob3N0X2lvdGxiICppb3RsYjtcbiAxODY6XHRcdHNwaW5sb2NrX3QgaW90bGJfbG9jaztcbiAxODc6XHRcdHN0cnVjdCBsaXN0X2hlYWQgcmVhZF9saXN0O1xuIDE4ODpcdFx0c3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2xpc3Q7XG4gMTg5Olx0XHR3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0O1xuIDE5MDpcdFx0aW50IGlvdl9saW1pdDtcbiAxOTE6XHRcdGludCB3ZWlnaHQ7XG4gMTkyOlx0XHRpbnQgYnl0ZV93ZWlnaHQ7XG4gMTkzOlx0XHRzdHJ1Y3QgeGFycmF5IHdvcmtlcl94YTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAxOAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0X3Zzb2NrX2FkZF91c2VkIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgYHZob3N0X3Zzb2NrX2FkZF91c2VkYCBmdW5jdGlvbiBhbmQgaXRzIGludGVyYWN0aW9ucy4gSSBzZWUgdGhhdCBgaGVhZHNgIGlzIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBgdnJpbmdfdXNlZF9lbGVtYCBzdHJ1Y3RzLCBhbmQgYG5oZWFkc2AgaXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGB1MTZgIHZhbHVlcy4gVGhleSYjMzk7cmUgY2xlYXJseSByZWxhdGVkIHRvIHRyYWNraW5nIHVzZWQgdmlydHVhbCByaW5nIGVsZW1lbnRzLCB3aGljaCBpcyBzdGFuZGFyZCB2aG9zdCBiZWhhdmlvci4KCkluc2lkZSBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgLCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBjYXRjaGVzIG15IGV5ZSBpcyB0aGlzOiBgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqdXNlZCA9ICZhbXA7dnEtJmd0O2hlYWRzWyp1c2VkX2NvdW50XTtgLiAgVGhpcyBsaW5lIGlzIHRha2luZyBhbiBhZGRyZXNzIG9mIGEgbWVtYmVyIGluIHRoZSBhcnJheSwgdXNpbmcgdGhlIGAqdXNlZF9jb3VudGAgYXMgYW4gaW5kZXguIFRoaXMgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLCBhbmQgaW5kaWNhdGVzIHRoYXQgd2UmIzM5O3JlIGFkZGluZyBhIG5ldyB1c2VkIGVsZW1lbnQgdG8gdGhlIHJpbmcuICBUaGVuIGB1c2VkLSZndDtpZGAgYW5kIGB1c2VkLSZndDtsZW5gIGFyZSBwb3B1bGF0ZWQgdXNpbmcgYGNwdV90b192aG9zdDMyYCwgd2hpY2ggaGFuZGxlcyBwb3RlbnRpYWwgZW5kaWFubmVzcyBpc3N1ZXMsIHdoaWNoIG1ha2VzIHNlbnNlLiAgQW5kIGB2cS0mZ3Q7bmhlYWRzWyp1c2VkX2NvdW50XSA9IDE7YCBpbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgdXNpbmcgb25lICYjMzQ7aGVhZCYjMzQ7ICh3aGF0ZXZlciB0aGF0IGlzKSB0byBkZWFsIHdpdGggdGhpcyBlbGVtZW50LiBgKCp1c2VkX2NvdW50KSYjNDM7JiM0Mzs7YCBpbmNyZW1lbnRzIHRoZSB0b3RhbC4gSSYjMzk7bSBhc3N1bWluZyBgKnVzZWRfY291bnRgIGlzIGJlaW5nIHVwZGF0ZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgbmV4dCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgdXNlZCByaW5nLgoKTm93IHRoZSBpbnRlcmVzdGluZyBwYXJ0OiBgdmhvc3RfYWRkX3VzZWRfbmAgaXMgY2FsbGVkIHdpdGggdGhlIGB2cS0mZ3Q7aGVhZHNgLCBgdnEtJmd0O25oZWFkc2AsIGFuZCBgKnVzZWRfY291bnRgLiBTaW5jZSBJIGtub3cgdGhlc2UgcGFyYW1ldGVycyYjMzk7IHB1cnBvc2UsIHRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZ2V0IG1vcmUgaW5mb3JtYXRpb246IHdoYXQgdGhlIGV4YWN0IG1lY2hhbmljcyBvZiBhZGRpbmcgYSBuZXcgdXNlZCBlbGVtZW50IGFyZS4gSSBuZWVkIHRvIGRpdmUgaW50byBgdmhvc3RfYWRkX3VzZWRfbmAgZnVuY3Rpb24gaXRzZWxmIHRvIHNlZSB3aGF0IGl0IGlzIHJlYWxseSBkb2luZy4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byBgZHJpdmVycy92aG9zdC92aG9zdC5jYCBhbmQgZGlnIGludG8gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IHZob3N0X2FkZF91c2VkX25cXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5jPTMwNjY9c3RhdGljIGludCB2aG9zdF9hZGRfdXNlZF9uX2luX29yZGVyKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMTE1LSAqIHdhbnQgdG8gbm90aWZ5IHRoZSBndWVzdCwgdXNpbmcgZXZlbnRmZC4gKi9cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMTE2OmludCB2aG9zdF9hZGRfdXNlZF9uKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMTE3LVx0XHQgICAgIHUxNiAqbmhlYWRzLCB1bnNpZ25lZCBjb3VudClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg9MjQ4PWludCB2aG9zdF9hZGRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICosIHVuc2lnbmVkIGludCBoZWFkLCBpbnQgbGVuKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaDoyNDk6aW50IHZob3N0X2FkZF91c2VkX24oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqLCBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yNTAtXHRcdCAgICAgdTE2ICpuaGVhZHMsIHVuc2lnbmVkIGNvdW50KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkzNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGNvZGU6CgoqKkRpdmluZyBpbnRvIGB2aG9zdF9hZGRfdXNlZF9uYCoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYHZob3N0X2FkZF91c2VkX25gIHdpdGhpbiB0aGUgYGRyaXZlcnMvdmhvc3Qvdmhvc3QuY2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgaGFuZGxlIG9uIGl0cyBmdW5jdGlvbiBhbmQgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgdmhvc3QgYXJjaGl0ZWN0dXJlLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcgdGhlICYjMzQ7dXNlZCYjMzQ7IHJpbmcg4oCTIHRoYXQgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgdXNlZCBmb3Igc2lnbmFsaW5nIGNvbXBsZXRpb24gb2YgZ3Vlc3QgcmVxdWVzdHMgZnJvbSB0aGUgaG9zdCBzaWRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCB0byBhZGQgYSBiYXRjaCBvZiBjb21wbGV0ZWQgZGVzY3JpcHRvcnMuIEkgd2lsbCBmb2N1cyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdXNlZCByaW5nJiMzOTtzIGhlYWQgcG9pbnRlciwgdGhlIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24sIGFuZCBhbnkgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdGhhdCBhcmUgaW4gcGxheS4gQW55IGtpbmQgb2YgY2FjaGUgaW52YWxpZGF0aW9uIG9yIG1lbW9yeSBiYXJyaWVyIGNhbGxzIHdpbGwgYmUgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaGVyZS4gSSBhbnRpY2lwYXRlIHRoaXMgd2lsbCBiZSBhIGZhaXJseSBjcml0aWNhbCBzZWN0aW9uIGZvciBwZXJmb3JtYW5jZSwgc28gSSYjMzk7bGwga2VlcCBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuIEFuZCBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSByaW5nIGJ5IHRoZSBndWVzdCBhbmQgaG9zdC4gVGhlIHVzZSBvZiBtZW1vcnkgYmFycmllcnMgb3IgbG9ja3Mgd2lsbCBjZXJ0YWlubHkgY2F0Y2ggbXkgZXllLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzExNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzExNjpcdGludCB2aG9zdF9hZGRfdXNlZF9uKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcbjMxMTc6XHRcdFx0ICAgICB1MTYgKm5oZWFkcywgdW5zaWduZWQgY291bnQpXG4zMTE4Olx0e1xuMzExOTpcdFx0Ym9vbCBpbl9vcmRlciA9IHZob3N0X2hhc19mZWF0dXJlKHZxLCBWSVJUSU9fRl9JTl9PUkRFUik7XG4zMTIwOlx0XHRpbnQgcjtcbjMxMjE6XHRcbjMxMjI6XHRcdGlmICghaW5fb3JkZXIgfHwgIW5oZWFkcylcbjMxMjM6XHRcdFx0ciA9IHZob3N0X2FkZF91c2VkX25fb29vKHZxLCBoZWFkcywgY291bnQpO1xuMzEyNDpcdFx0ZWxzZVxuMzEyNTpcdFx0XHRyID0gdmhvc3RfYWRkX3VzZWRfbl9pbl9vcmRlcih2cSwgaGVhZHMsIG5oZWFkcywgY291bnQpO1xuMzEyNjpcdFxuMzEyNzpcdFx0aWYgKHIgXHUwMDNjIDApXG4zMTI4Olx0XHRcdHJldHVybiByO1xuMzEyOTpcdFxuMzEzMDpcdFx0LyogTWFrZSBzdXJlIGJ1ZmZlciBpcyB3cml0dGVuIGJlZm9yZSB3ZSB1cGRhdGUgaW5kZXguICovXG4zMTMxOlx0XHRzbXBfd21iKCk7XG4zMTMyOlx0XHRpZiAodmhvc3RfcHV0X3VzZWRfaWR4KHZxKSkge1xuMzEzMzpcdFx0XHR2cV9lcnIodnEsIFwmIzM0O0ZhaWxlZCB0byBpbmNyZW1lbnQgdXNlZCBpZHhcJiMzNDspO1xuMzEzNDpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjMxMzU6XHRcdH1cbjMxMzY6XHRcdGlmICh1bmxpa2VseSh2cS1cdTAwM2Vsb2dfdXNlZCkpIHtcbjMxMzc6XHRcdFx0LyogTWFrZSBzdXJlIHVzZWQgaWR4IGlzIHNlZW4gYmVmb3JlIGxvZy4gKi9cbjMxMzg6XHRcdFx0c21wX3dtYigpO1xuMzEzOTpcdFx0XHQvKiBMb2cgdXNlZCBpbmRleCB1cGRhdGUuICovXG4zMTQwOlx0XHRcdGxvZ191c2VkKHZxLCBvZmZzZXRvZihzdHJ1Y3QgdnJpbmdfdXNlZCwgaWR4KSxcbjMxNDE6XHRcdFx0XHQgc2l6ZW9mIHZxLVx1MDAzZXVzZWQtXHUwMDNlaWR4KTtcbjMxNDI6XHRcdFx0aWYgKHZxLVx1MDAzZWxvZ19jdHgpXG4zMTQzOlx0XHRcdFx0ZXZlbnRmZF9zaWduYWwodnEtXHUwMDNlbG9nX2N0eCk7XG4zMTQ0Olx0XHR9XG4zMTQ1Olx0XHRyZXR1cm4gcjtcbjMxNDY6XHR9XG4zMTQ3Olx0RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfYWRkX3VzZWRfbik7XG4zMTQ4Olx0XG4zMTQ5Olx0c3RhdGljIGJvb2wgdmhvc3Rfbm90aWZ5KHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXG4zMTUwOlx0e1xuMzE1MTpcdFx0X191MTYgb2xkLCBuZXc7XG4zMTUyOlx0XHRfX3ZpcnRpbzE2IGV2ZW50O1xuMzE1MzpcdFx0Ym9vbCB2O1xuMzE1NDpcdFx0LyogRmx1c2ggb3V0IHVzZWQgaW5kZXggdXBkYXRlcy4gVGhpcyBpcyBwYWlyZWRcbjMxNTU6XHRcdCAqIHdpdGggdGhlIGJhcnJpZXIgdGhhdCB0aGUgR3Vlc3QgZXhlY3V0ZXMgd2hlbiBlbmFibGluZ1xuMzE1NjpcdFx0ICogaW50ZXJydXB0cy4gKi9cbjMxNTc6XHRcdHNtcF9tYigpO1xuMzE1ODpcdFxuMzE1OTpcdFx0aWYgKHZob3N0X2hhc19mZWF0dXJlKHZxLCBWSVJUSU9fRl9OT1RJRllfT05fRU1QVFkpIFx1MDAyNlx1MDAyNlxuMzE2MDpcdFx0ICAgIHVubGlrZWx5KHZxLVx1MDAzZWF2YWlsX2lkeCA9PSB2cS1cdTAwM2VsYXN0X2F2YWlsX2lkeCkpXG4zMTYxOlx0XHRcdHJldHVybiB0cnVlO1xuMzE2MjpcdFxuMzE2MzpcdFx0aWYgKCF2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1JJTkdfRl9FVkVOVF9JRFgpKSB7XG4zMTY0Olx0XHRcdF9fdmlydGlvMTYgZmxhZ3M7XG4zMTY1Olx0XHRcdGlmICh2aG9zdF9nZXRfYXZhaWxfZmxhZ3ModnEsIFx1MDAyNmZsYWdzKSkge1xuMzE2NjpcdFx0XHRcdHZxX2Vycih2cSwgXCYjMzQ7RmFpbGVkIHRvIGdldCBmbGFnc1wmIzM0Oyk7XG4zMTY3Olx0XHRcdFx0cmV0dXJuIHRydWU7XG4zMTY4Olx0XHRcdH1cbjMxNjk6XHRcdFx0cmV0dXJuICEoZmxhZ3MgXHUwMDI2IGNwdV90b192aG9zdDE2KHZxLCBWUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVCkpO1xuMzE3MDpcdFx0fVxuMzE3MTpcdFx0b2xkID0gdnEtXHUwMDNlc2lnbmFsbGVkX3VzZWQ7XG4zMTcyOlx0XHR2ID0gdnEtXHUwMDNlc2lnbmFsbGVkX3VzZWRfdmFsaWQ7XG4zMTczOlx0XHRuZXcgPSB2cS1cdTAwM2VzaWduYWxsZWRfdXNlZCA9IHZxLVx1MDAzZWxhc3RfdXNlZF9pZHg7XG4zMTc0Olx0XHR2cS1cdTAwM2VzaWduYWxsZWRfdXNlZF92YWxpZCA9IHRydWU7XG4zMTc1Olx0XG4zMTc2Olx0XHRpZiAodW5saWtlbHkoIXYpKVxuMzE3NzpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjMxNzg6XHRcbjMxNzk6XHRcdGlmICh2aG9zdF9nZXRfdXNlZF9ldmVudCh2cSwgXHUwMDI2ZXZlbnQpKSB7XG4zMTgwOlx0XHRcdHZxX2Vycih2cSwgXCYjMzQ7RmFpbGVkIHRvIGdldCB1c2VkIGV2ZW50IGlkeFwmIzM0Oyk7XG4zMTgxOlx0XHRcdHJldHVybiB0cnVlO1xuMzE4MjpcdFx0fVxuMzE4MzpcdFx0cmV0dXJuIHZyaW5nX25lZWRfZXZlbnQodmhvc3QxNl90b19jcHUodnEsIGV2ZW50KSwgbmV3LCBvbGQpO1xuMzE4NDpcdH1cbjMxODU6XHRcbjMxODY6XHQvKiBUaGlzIGFjdHVhbGx5IHNpZ25hbHMgdGhlIGd1ZXN0LCB1c2luZyBldmVudGZkLiAqL1xuMzE4NzpcdHZvaWQgdmhvc3Rfc2lnbmFsKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXG4zMTg4Olx0e1xuMzE4OTpcdFx0LyogU2lnbmFsIHRoZSBHdWVzdCB0ZWxsIHRoZW0gd2UgdXNlZCBzb21ldGhpbmcgdXAuICovXG4zMTkwOlx0XHRpZiAodnEtXHUwMDNlY2FsbF9jdHguY3R4IFx1MDAyNlx1MDAyNiB2aG9zdF9ub3RpZnkoZGV2LCB2cSkpXG4zMTkxOlx0XHRcdGV2ZW50ZmRfc2lnbmFsKHZxLVx1MDAzZWNhbGxfY3R4LmN0eCk7XG4zMTkyOlx0fVxuMzE5MzpcdEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X3NpZ25hbCk7XG4zMTk0Olx0XG4zMTk1Olx0LyogQW5kIGhlcmUmIzM5O3MgdGhlIGNvbWJvIG1lYWwgZGVhbC4gIFN1cGVyc2l6ZSBtZSEgKi9cbjMxOTY6XHR2b2lkIHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWwoc3RydWN0IHZob3N0X2RldiAqZGV2LFxuMzE5NzpcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbjMxOTg6XHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGhlYWQsIGludCBsZW4pXG4zMTk5Olx0e1xuMzIwMDpcdFx0dmhvc3RfYWRkX3VzZWQodnEsIGhlYWQsIGxlbik7XG4zMjAxOlx0XHR2aG9zdF9zaWduYWwoZGV2LCB2cSk7XG4zMjAyOlx0fVxuMzIwMzpcdEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWwpO1xuMzIwNDpcdFxuMzIwNTpcdC8qIG11bHRpLWJ1ZmZlciB2ZXJzaW9uIG9mIHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWwgKi9cbjMyMDY6XHR2b2lkIHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWxfbihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG4zMjA3Olx0XHRcdFx0XHQgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4zMjA4Olx0XHRcdFx0XHQgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXG4zMjA5Olx0XHRcdFx0XHQgdTE2ICpuaGVhZHMsXG4zMjEwOlx0XHRcdFx0XHQgdW5zaWduZWQgY291bnQpXG4zMjExOlx0e1xuMzIxMjpcdFx0dmhvc3RfYWRkX3VzZWRfbih2cSwgaGVhZHMsIG5oZWFkcywgY291bnQpO1xuMzIxMzpcdFx0dmhvc3Rfc2lnbmFsKGRldiwgdnEpO1xuMzIxNDpcdH1cbjMyMTU6XHRFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9hZGRfdXNlZF9hbmRfc2lnbmFsX24pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTA4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgR3Vlc3QgTWVtb3J5IFdyaXRlcyBpbiB2aG9zdCoqCgpBbHJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHNvbWV0aGluZy4gTXkgaW50ZXJuYWwgYWxhcm1zIGFyZSBnb2luZyBvZmYg4oCTIGJvdGggYHZob3N0X2FkZF91c2VkX25fb29vYCBhbmQgYHZob3N0X2FkZF91c2VkX25faW5fb3JkZXJgIGFyZSAqd3JpdGluZyogdG8gZ3Vlc3QgbWVtb3J5LiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgZm9yIHNlY3VyaXR5IGFuZCBjb3JyZWN0bmVzcy4gQW55IHRpbWUgeW91JiMzOTtyZSB0b3VjaGluZyBndWVzdCBtZW1vcnkgZGlyZWN0bHkgZnJvbSB0aGUgaG9zdCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCB5b3UgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogY2VydGFpbiB5b3Uga25vdyB3aGF0IHlvdSYjMzk7cmUgZG9pbmcuIFRoZXJlIGFyZSBzbyBtYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgdGhlcmUuCgpTbywgbGV0JiMzOTtzIGRyaWxsIGRvd24uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBgdmhvc3RfYWRkX3VzZWRfbl9vb29gLiBUaGF0ICYjMzQ7b29vJiMzNDsgc3VmZml4IGlzIHBhcnRpY3VsYXJseSBpbnRyaWd1aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0JiMzOTtzIHRyeWluZyB0byBhY2NvbXBsaXNoIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmhvdyogaXQmIzM5O3MgZG9pbmcgaXQsIGF0IGEgbG93IGxldmVsLiBBcmUgd2UgZGVhbGluZyB3aXRoIHBvdGVudGlhbCBvdXQtb2Ytb3JkZXIgY29tcGxldGlvbiBpc3N1ZXM/IEhvdyBkb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGggb3RoZXIgb3BlcmF0aW9ucz8gV2hhdCB2YWxpZGF0aW9uIHN0ZXBzIGFyZSBpbiBwbGFjZSB0byBlbnN1cmUgd2UmIzM5O3JlIG5vdCBjb3JydXB0aW5nIHRoZSBndWVzdCYjMzk7cyBtZW1vcnkgc3BhY2U/IEkgbmVlZCB0byBhbmFseXplIHRoZSBjb2RlIHBhdGggKnZlcnkqIGNhcmVmdWxseSBoZXJlLCBtYWtpbmcgc3VyZSBhbGwgbWVtb3J5IGFjY2VzcyBzaXplcywgb2Zmc2V0cywgYW5kIGJvdW5kYXJ5IGNoZWNrcyBhcmUgc29saWQuIEkmIzM5O20gZ29pbmcgdG8gcGF5IGV4dHJhIGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGF0b21pY2l0eSBvciB0aGUgdXNlIG9mIGxvY2tzIG9yIGJhcnJpZXJzLCB0byB2ZXJpZnkgZXZlcnl0aGluZyBpcyBwcm90ZWN0ZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgaXQmIzM5O3MgZG9pbmcgcHJlY2lzZWx5IHdoYXQgaXQgKmNsYWltcyogdG8gYmUgZG9pbmcsIGFuZCB0aGF0IGl0JiMzOTtzIGRvaW5nIGl0IHNhZmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zob3N0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDM2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwMzY6XHRcdH1cbjMwMzc6XHRcdG9sZCA9IHZxLVx1MDAzZWxhc3RfdXNlZF9pZHg7XG4zMDM4Olx0XHRuZXcgPSAodnEtXHUwMDNlbGFzdF91c2VkX2lkeCAmIzQzOz0gY291bnQpO1xuMzAzOTpcdFx0LyogSWYgdGhlIGRyaXZlciBuZXZlciBib3RoZXJzIHRvIHNpZ25hbCBpbiBhIHZlcnkgbG9uZyB3aGlsZSxcbjMwNDA6XHRcdCAqIHVzZWQgaW5kZXggbWlnaHQgd3JhcCBhcm91bmQuIElmIHRoYXQgaGFwcGVucywgaW52YWxpZGF0ZVxuMzA0MTpcdFx0ICogc2lnbmFsbGVkX3VzZWQgaW5kZXggd2Ugc3RvcmVkLiBUT0RPOiBtYWtlIHN1cmUgZHJpdmVyXG4zMDQyOlx0XHQgKiBzaWduYWxzIGF0IGxlYXN0IG9uY2UgaW4gMl4xNiBhbmQgcmVtb3ZlIHRoaXMuICovXG4zMDQzOlx0XHRpZiAodW5saWtlbHkoKHUxNikobmV3IC0gdnEtXHUwMDNlc2lnbmFsbGVkX3VzZWQpIFx1MDAzYyAodTE2KShuZXcgLSBvbGQpKSlcbjMwNDQ6XHRcdFx0dnEtXHUwMDNlc2lnbmFsbGVkX3VzZWRfdmFsaWQgPSBmYWxzZTtcbjMwNDU6XHRcdHJldHVybiAwO1xuMzA0NjpcdH1cbjMwNDc6XHRcbjMwNDg6XHRzdGF0aWMgaW50IHZob3N0X2FkZF91c2VkX25fb29vKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuMzA0OTpcdFx0XHRcdFx0c3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXG4zMDUwOlx0XHRcdFx0XHR1bnNpZ25lZCBjb3VudClcbjMwNTE6XHR7XG4zMDUyOlx0XHRpbnQgc3RhcnQsIG4sIHI7XG4zMDUzOlx0XG4zMDU0Olx0XHRzdGFydCA9IHZxLVx1MDAzZWxhc3RfdXNlZF9pZHggXHUwMDI2ICh2cS1cdTAwM2VudW0gLSAxKTtcbjMwNTU6XHRcdG4gPSB2cS1cdTAwM2VudW0gLSBzdGFydDtcbjMwNTY6XHRcdGlmIChuIFx1MDAzYyBjb3VudCkge1xuMzA1NzpcdFx0XHRyID0gX192aG9zdF9hZGRfdXNlZF9uKHZxLCBoZWFkcywgbik7XG4zMDU4Olx0XHRcdGlmIChyIFx1MDAzYyAwKVxuMzA1OTpcdFx0XHRcdHJldHVybiByO1xuMzA2MDpcdFx0XHRoZWFkcyAmIzQzOz0gbjtcbjMwNjE6XHRcdFx0Y291bnQgLT0gbjtcbjMwNjI6XHRcdH1cbjMwNjM6XHRcdHJldHVybiBfX3Zob3N0X2FkZF91c2VkX24odnEsIGhlYWRzLCBjb3VudCk7XG4zMDY0Olx0fVxuMzA2NTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODIyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6CgoqKkludGVybmFsIENvbnNpZGVyYXRpb25zIG9uIGBfX3Zob3N0X2FkZF91c2VkX25gKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBfX3Zob3N0X2FkZF91c2VkX25gLiBUaGlzIGlzIGNydWNpYWwsIGFzIEkgdW5kZXJzdGFuZCBpdCwgZm9yIGVmZmljaWVudGx5IGhhbmRsaW5nIHRoZSBhY2N1bXVsYXRpb24gb2YgdXNlZCBidWZmZXJzIHdpdGhpbiBhIHZpcnR1YWwgaG9zdCBjb250ZXh0LiBJdCYjMzk7cyB0aGUgY3JpdGljYWwgYnVpbGRpbmcgYmxvY2suIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gY2FsbDogSSBuZWVkIHRvIHF1aWNrbHkgYW5kIHJlbGlhYmx5IGFkZCBuZXcgZW50cmllcyB0byB0aGUgdmhvc3QmIzM5O3MgJiMzOTt1c2VkJiMzOTsgcmluZywgd2hpY2gsIGJ5IGRlZmluaXRpb24sIGltcGxpZXMgbWFuYWdpbmcgYSBwb3RlbnRpYWxseSBjb25jdXJyZW50IGRhdGEgc3RydWN0dXJlLiBTbywgSSBoYXZlIHRvIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCB0aGUgbG9ja2luZyBzZW1hbnRpY3MuIEFyZSB3ZSBkZWFsaW5nIHdpdGggc3BpbmxvY2tzLCBtdXRleGVzLCBvciBzb21lIGtpbmQgb2YgUkNVPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIHRoZXJlJiMzOTtzIGNvbnRlbnRpb24/IEhvdyBhcmUgd2UgZW5zdXJpbmcgYXRvbWljaXR5IG9mIHRoZSBidWZmZXIgdXBkYXRlcywgYW5kIHdoYXQmIzM5O3MgdGhlIHR5cGljYWwgQ1BVIGNvc3QgdG8gZG8gdGhhdD8gSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVjayB0aGlzIHdpbGwgY3JlYXRlLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IEkvTyBsb2FkLiBJZiB0aGVyZSYjMzk7cyBoaWdoIGxvY2sgY29udGVudGlvbiwgaXQgd2lsbCBsaWtlbHkgYmUgcmVmbGVjdGVkIGluIHBlcmZvcm1hbmNlIHRlc3RzLCBhbmQgSeKAmWxsIGhhdmUgdG8gZXhhbWluZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEkgYW0gdHJ5aW5nIHRvIGRldGVybWluZSB0aGUgd29yc3QtY2FzZSBzY2VuYXJpby4KCk1vcmVvdmVyLCBJIGhhdmUgdG8gZW5zdXJlIGNvcnJlY3QgaGFuZGxpbmcgb2YgdGhlIHdyYXAtYXJvdW5kIGNvbmRpdGlvbnMuIFdlIGhhdmUgdG8gY29uc2lkZXIgaG93IHRvIGhhbmRsZSB0aGUgcmluZyBidWZmZXIsIHdoYXQgaXMgdGhpcyByaW5nIGJ1ZmZlciBzdHJ1Y3R1cmUsIGlzIGl0IGFsaWduZWQsIGRvZXMgaXQgY29udGFpbiBhbnkga2luZCBvZiBwYWRkaW5nLCBldGMuIEFyZSB0aGUgYnVmZmVyIGluZGV4ZXMgY29ycmVjdGx5IG1hbmFnZWQ/IFdoYXQga2luZCBvZiBjaGVja3MgYXJlIGluIHBsYWNlIHRvIHByZXZlbnQgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgdW5kZXJmbG93cz8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHJvYnVzdC4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UgYXJlIGNvcnJlY3RseSBoYW5kbGluZyB0aGUgKm4qIHBhcmFtZXRlciBpbiB0aGlzIGZ1bmN0aW9uOyB0aGF0IG51bWJlciB0ZWxscyB1cyBob3cgbWFueSBlbGVtZW50cyBuZWVkIHRvIGJlIGFkZGVkIHRvIHRoZSB1c2VkIHJpbmcuIFdlIG11c3QgbWFrZSBzdXJlIHRoYXQgaXQmIzM5O3MgdmFsaWRhdGVkLCB0aGF0IHdlIGRvbiYjMzk7dCBhY2NpZGVudGFsbHkgYWRkIGludmFsaWQgZGF0YSB0aGF0IGNhbiBjb21wcm9taXNlIHRoZSBob3N0JiMzOTtzIGludGVncml0eS4gQWxzbywgaG93IGFyZSB3ZSBoYW5kbGluZyB0aGUgYXNzb2NpYXRlZCBkZXNjcmlwdG9ycyB0aGF0IGFyZSBiZWluZyBhZGRlZD8gQXJlIHRoZXkgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgb3IgYXJlIHRoZXJlIGRhbmdsaW5nIHBvaW50ZXJzPyBBbHNvLCBob3cgYXJlIHdlIG1hbmFnaW5nIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGVzZSBkZXNjcmlwdG9ycz8gVGhpcyBpcyBhbHNvIGEgY3JpdGljYWwgY29uc2lkZXJhdGlvbi4gRmluYWxseSwgaG93IGFib3V0IGVycm9yIGhhbmRsaW5nPyBJcyB0aGVyZSBwcm9wZXIgZXJyb3IgY2hlY2tpbmcgaWYgdGhlcmUgYXJlIGluc3VmZmljaWVudCByZXNvdXJjZXMgb3IgdW5leHBlY3RlZCBjb25kaXRpb25zPyBUaGVzZSBhcmUgYWxsIHRoZSBraW5kcyBvZiBxdWVzdGlvbnMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgZXZlbiBhdCBhIGhpZ2ggbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNgp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMDAwOlx0RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGlzY2FyZF92cV9kZXNjKTtcbjMwMDE6XHRcbjMwMDI6XHQvKiBBZnRlciB3ZSYjMzk7dmUgdXNlZCBvbmUgb2YgdGhlaXIgYnVmZmVycywgd2UgdGVsbCB0aGVtIGFib3V0IGl0LiAgV2UmIzM5O2xsIHRoZW5cbjMwMDM6XHQgKiB3YW50IHRvIG5vdGlmeSB0aGUgZ3Vlc3QsIHVzaW5nIGV2ZW50ZmQuICovXG4zMDA0Olx0aW50IHZob3N0X2FkZF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgaGVhZCwgaW50IGxlbilcbjMwMDU6XHR7XG4zMDA2Olx0XHRzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtIGhlYWRzID0ge1xuMzAwNzpcdFx0XHRjcHVfdG9fdmhvc3QzMih2cSwgaGVhZCksXG4zMDA4Olx0XHRcdGNwdV90b192aG9zdDMyKHZxLCBsZW4pXG4zMDA5Olx0XHR9O1xuMzAxMDpcdFx0dTE2IG5oZWFkcyA9IDE7XG4zMDExOlx0XG4zMDEyOlx0XHRyZXR1cm4gdmhvc3RfYWRkX3VzZWRfbih2cSwgXHUwMDI2aGVhZHMsIFx1MDAyNm5oZWFkcywgMSk7XG4zMDEzOlx0fVxuMzAxNDpcdEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2FkZF91c2VkKTtcbjMwMTU6XHRcbjMwMTY6XHRzdGF0aWMgaW50IF9fdmhvc3RfYWRkX3VzZWRfbihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbjMwMTc6XHRcdFx0XHQgICAgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXG4zMDE4Olx0XHRcdFx0ICAgIHVuc2lnbmVkIGNvdW50KVxuMzAxOTpcdHtcbjMwMjA6XHRcdHZyaW5nX3VzZWRfZWxlbV90IF9fdXNlciAqdXNlZDtcbjMwMjE6XHRcdHUxNiBvbGQsIG5ldztcbjMwMjI6XHRcdGludCBzdGFydDtcbjMwMjM6XHRcbjMwMjQ6XHRcdHN0YXJ0ID0gdnEtXHUwMDNlbGFzdF91c2VkX2lkeCBcdTAwMjYgKHZxLVx1MDAzZW51bSAtIDEpO1xuMzAyNTpcdFx0dXNlZCA9IHZxLVx1MDAzZXVzZWQtXHUwMDNlcmluZyAmIzQzOyBzdGFydDtcbjMwMjY6XHRcdGlmICh2aG9zdF9wdXRfdXNlZCh2cSwgaGVhZHMsIHN0YXJ0LCBjb3VudCkpIHtcbjMwMjc6XHRcdFx0dnFfZXJyKHZxLCBcJiMzNDtGYWlsZWQgdG8gd3JpdGUgdXNlZFwmIzM0Oyk7XG4zMDI4Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuMzAyOTpcdFx0fVxuMzAzMDpcdFx0aWYgKHVubGlrZWx5KHZxLVx1MDAzZWxvZ191c2VkKSkge1xuMzAzMTpcdFx0XHQvKiBNYWtlIHN1cmUgZGF0YSBpcyBzZWVuIGJlZm9yZSBsb2cuICovXG4zMDMyOlx0XHRcdHNtcF93bWIoKTtcbjMwMzM6XHRcdFx0LyogTG9nIHVzZWQgcmluZyBlbnRyeSB3cml0ZS4gKi9cbjMwMzQ6XHRcdFx0bG9nX3VzZWQodnEsICgodm9pZCBfX3VzZXIgKil1c2VkIC0gKHZvaWQgX191c2VyICopdnEtXHUwMDNldXNlZCksXG4zMDM1Olx0XHRcdFx0IGNvdW50ICogc2l6ZW9mICp1c2VkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NzcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2aG9zdF9wdXRfdXNlZCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHZob3N0X3B1dF91c2VkYCBhbmQgaG93IGl0IGhhbmRsZXMgY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2Ug4oCTIHNwZWNpZmljYWxseSwgdG8gdGhlIGd1ZXN0JiMzOTtzIG1lbW9yeS4gVGhlIGNvcmUgdGhpbmcgaGVyZSBpcyBob3cgYGhlYWRzYCBnZXRzIHBvcHVsYXRlZC4gSXQgc2VlbXMgbGlrZSBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIHBvcHVsYXRlcyBgaGVhZHNgIHdpdGggdGhlIGB1c2VkLSZndDtpZGAgYW5kIGB1c2VkLSZndDtsZW5gIHZhbHVlcywgd2hpY2ggYXJlIGtleSBwaWVjZXMgb2YgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzZWQgYnVmZmVyLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCB0aGUgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIGRvZXNuJiMzOTt0IGhhdmUgYW55IHBhZGRpbmcsIHdoaWNoIGlzIGEgZ3JlYXQgc2FmZWd1YXJkLiBUaGlzIHRlbGxzIG1lIHdlICpzaG91bGRuJiMzOTt0KiBoYXZlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgaXNzdWUgaGVyZSwgYmVjYXVzZSB3ZSBhcmUgb25seSB0cmFuc21pdHRpbmcgZXhwbGljaXRseSBpbml0aWFsaXplZCBkYXRhIHRvIHRoZSB1c2VyIHNwYWNlLiBUaGF0JiMzOTtzIGEgcmVsaWVmLgoKVGhlIG90aGVyIGJpdCBvZiBjb2RlIHBvcHVsYXRlcyB0aGUgYHZxLSZndDtuaGVhZHNgIGFycmF5IHdpdGggYDFgIGZvciBlYWNoIGVsZW1lbnQuIEhvd2V2ZXIsIHRoaXMgaXMganVzdCB0byBjb21wdXRlIGB2cS0mZ3Q7bGFzdF91c2VkX2lkeGAgaW4gYHZob3N0X2FkZF91c2VkX25faW5fb3JkZXJgIGFuZCBpcyBub3QgaW52b2x2ZWQgaW4gYW55IGRhdGEgYmVpbmcgY29waWVkIHRvIHRoZSB1c2VyIHNwYWNlLiBTbywgdGhlIG9ubHkgZGF0YSBpcyB0aGUgdXNlZCBpbmZvcm1hdGlvbiwgd2hpY2ggaXMgcG9wdWxhdGVkLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBieSBnb2luZyB0aHJvdWdoIGB2aG9zdF9wdXRfdXNlZGAgaW4gZGV0YWlsIHRvIGVuc3VyZSB0aGF0IG5vdGhpbmcgaXMgc2xpcHBpbmcgdGhyb3VnaCB0aGUgY3JhY2tzLCBidXQsIGF0IGxlYXN0IGF0IGZpcnN0IGdsYW5jZSwgdGhpbmdzIGxvb2sgc2FmZSBhbmQgc291bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB2aG9zdF9wdXRfdXNlZFxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MTQ1OT1zdGF0aWMgaW5saW5lIGludCB2aG9zdF9wdXRfYXZhaWxfZXZlbnQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTE0NjQtXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MTQ2NTpzdGF0aWMgaW5saW5lIGludCB2aG9zdF9wdXRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xNDY2LVx0XHRcdFx0IHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWQsIGludCBpZHgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTczCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgdmhvc3RfcHV0X3VzZWRgKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBjb2RlIGZvciBgdmhvc3RfcHV0X3VzZWRgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHZob3N0LW5ldCBhcmNoaXRlY3R1cmUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdmlydHF1ZXVlLCB0aGUgc2hhcmVkIG1lbW9yeSByaW5nIGJ1ZmZlciwgYW5kIHRoZSBndWVzdCYjMzk7cyB2aWV3IG9mIGRlc2NyaXB0b3JzLiBJJiMzOTttIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIGRldGFpbHMgcmVnYXJkaW5nOgoKKiAgICoqU3luY2hyb25pemF0aW9uOioqIFdoYXQgbG9ja2luZyBtZWNoYW5pc21zIGFyZSBlbXBsb3llZCB0byBlbnN1cmUgc2FmZSBhY2Nlc3MgdG8gdGhlIHVzZWQgcmluZz8gSXMgdGhlcmUgYW55IGNvbnRlbnRpb24gdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIHRoZSBob3N0IGFuZCBndWVzdCwgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkIGluIHRoaXMgZnVuY3Rpb24/IEkmIzM5O2xsIGJlIGZvY3VzZWQgb24gbWVtb3J5IGJhcnJpZXJzLgoqICAgKipEZXNjcmlwdG9yIFByb2Nlc3Npbmc6KiogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBtYXAgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBgdmhvc3RfdXNlZGAgZW50cnkgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmlydHF1ZXVlIGRlc2NyaXB0b3JzPyBJcyBpdCB0cmF2ZXJzaW5nIGEgbGlua2VkIGxpc3Qgb3IgcmVseWluZyBvbiBkaXJlY3QgaW5kZXhpbmc/IFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UsIGVzcGVjaWFsbHkgd2l0aCBsYXJnZSBudW1iZXJzIG9mIGRlc2NyaXB0b3JzLiBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbnMgZG9uZSBoZXJlPwoqICAgKipOb3RpZmljYXRpb246KiogRG9lcyB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IHRyaWdnZXIgYSBndWVzdCBub3RpZmljYXRpb24sIG9yIGRvZXMgaXQgZGVmZXIgdGhhdCBkZWNpc2lvbiB0byBhbm90aGVyIHBhcnQgb2YgdGhlIHN5c3RlbT8gSWYgaXQgZG9lcyB0cmlnZ2VyIHRoZSBub3RpZmljYXRpb24sIGhvdyBkb2VzIGl0IGRvIHNvPyBXaGF0JiMzOTtzIHRoZSBpbXBhY3Qgb24gbGF0ZW5jeT8KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogQXJlIHRoZXJlIGFueSBjaGVja3MgZm9yIG1hbGZvcm1lZCB1c2VkIGVudHJpZXMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3M/IFdoYXQgaGFwcGVucyBpZiBhbiBlcnJvciBpcyBkZXRlY3RlZD8gSG93IGFyZSBlcnJvcnMgaGFuZGxlZD8gRG9lcyBpdCByZXR1cm4gYW4gZXJyb3IgY29kZSBvciB0cmlnZ2VyIGEgbW9yZSBzZXZlcmUgc3lzdGVtIGZhaWx1cmU/CiogICAqKkNvbnRleHQ6KiogV2hhdCYjMzk7cyB0aGUgdHlwaWNhbCBjYWxsaW5nIGNvbnRleHQ/IElzIGl0IGNhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgdGhlIGtlcm5lbCB0aHJlYWQsIG9yIGJvdGg/IFRoaXMgd2lsbCBpbmZsdWVuY2UgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuY3Rpb24mIzM5O3MgdGltaW5nIGFuZCByZXNvdXJjZSBjb25zdHJhaW50cy4KKiAgICoqSW50ZWdyYXRpb246KiogSG93IGlzIHRoaXMgZnVuY3Rpb24gcmVsYXRlZCB0byBvdGhlciB2aG9zdC1uZXQgZnVuY3Rpb25zLCBlLmcuIGB2aG9zdF9nZXRfZGVzY2AsIGB2aG9zdF9hZGRfdXNlZGAsIGFuZCBgdmhvc3RfcG9sbGAuIEl0IHdpbGwgYmUgaGVscGZ1bCB0byB1bmRlcnN0YW5kIHRoZSBjaGFpbiBvZiBldmVudHMgdGhhdCBsZWFkcyB0byB0aGlzIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZC4KClVsdGltYXRlbHksIEkgd2FudCB0byBjb25maXJtIG15IG1lbnRhbCBtb2RlbCBvZiB0aGUgZGF0YSBmbG93IGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBpbXByb3ZlbWVudCBpbiB0aGUgdmhvc3QtbmV0IGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGdldCB0byB3b3JrIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ2NTpcdHN0YXRpYyBpbmxpbmUgaW50IHZob3N0X3B1dF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuMTQ2NjpcdFx0XHRcdFx0IHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWQsIGludCBpZHgsXG4xNDY3Olx0XHRcdFx0XHQgaW50IGNvdW50KVxuMTQ2ODpcdHtcbjE0Njk6XHRcdHJldHVybiB2aG9zdF9jb3B5X3RvX3VzZXIodnEsIHZxLVx1MDAzZXVzZWQtXHUwMDNlcmluZyAmIzQzOyBpZHgsIGhlYWQsXG4xNDcwOlx0XHRcdFx0XHQgIGNvdW50ICogc2l6ZW9mKCpoZWFkKSk7XG4xNDcxOlx0fVxuMTQ3MjpcdFxuMTQ3MzpcdHN0YXRpYyBpbmxpbmUgaW50IHZob3N0X3B1dF91c2VkX2ZsYWdzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxuMTQ3NDpcdFxuMTQ3NTpcdHtcbjE0NzY6XHRcdHJldHVybiB2aG9zdF9wdXRfdXNlcih2cSwgY3B1X3RvX3Zob3N0MTYodnEsIHZxLVx1MDAzZXVzZWRfZmxhZ3MpLFxuMTQ3NzpcdFx0XHRcdCAgICAgIFx1MDAyNnZxLVx1MDAzZXVzZWQtXHUwMDNlZmxhZ3MpO1xuMTQ3ODpcdH1cbjE0Nzk6XHRcbjE0ODA6XHRzdGF0aWMgaW5saW5lIGludCB2aG9zdF9wdXRfdXNlZF9pZHgoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXG4xNDgxOlx0XG4xNDgyOlx0e1xuMTQ4MzpcdFx0cmV0dXJuIHZob3N0X3B1dF91c2VyKHZxLCBjcHVfdG9fdmhvc3QxNih2cSwgdnEtXHUwMDNlbGFzdF91c2VkX2lkeCksXG4xNDg0Olx0XHRcdFx0ICAgICAgXHUwMDI2dnEtXHUwMDNldXNlZC1cdTAwM2VpZHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ0MwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDUzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2sgaW4gVGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLiBJIHNlZSBgdmhvc3RfY29weV90b191c2VyYCBjb3B5aW5nIGBjb3VudCAqIHNpemVvZigqaGVhZClgIGJ5dGVzIGZyb20gYGhlYWRgIHRvIHRoZSB1c2VkIHJpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBsZWFkIHRvIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrYWdlLiBTaW5jZSBgaGVhZGAgcG9pbnRzIHRvIGB2cS0mZ3Q7aGVhZHNgLCBhbmQgYHZxLSZndDtoZWFkc2AgaXMgYW4gYXJyYXkgb2YgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gLCBJIG5lZWQgdG8gY29uZmlybSBlYWNoIGVsZW1lbnQgb2YgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB0aGUgY29weS4gRnJvbSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlIGluIGB2aG9zdF92c29ja19hZGRfdXNlZGAsIGJvdGggYGlkYCBhbmQgYGxlbmAgd2l0aGluIGVhY2ggZWxlbWVudCAqYXJlKiBpbml0aWFsaXplZC4gR29vZCwgbm8gb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHRoZXJlLgoKSSByZW1lbWJlciB0aGlzIHN0cnVjdDoKCmBgYGMKc3RydWN0IHZyaW5nX3VzZWRfZWxlbSB7CgkvKiBJbmRleCBvZiBzdGFydCBvZiB1c2VkIGRlc2NyaXB0b3IgY2hhaW4uICovCglfX3ZpcnRpbzMyIGlkOwoJLyogVG90YWwgbGVuZ3RoIG9mIHRoZSBkZXNjcmlwdG9yIGNoYWluIHdoaWNoIHdhcyB1c2VkICh3cml0dGVuIHRvKSAqLwoJX192aXJ0aW8zMiBsZW47Cn07CmBgYAoKWWVhaCwgMzItYml0IGludGVnZXJzLCA0IGJ5dGVzIGVhY2gsIG5vIHBhZGRpbmcuIFRoZSBzaXplIGlzIGRlZmluaXRlbHkgOCBieXRlcy4gTm8gaXNzdWUgdGhlcmUuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgbmV3IGNoYW5nZXMuIFRoZSBwYXRjaCBhZGRzIGB1c2VkX2NvdW50YCBhbmQgYHVzZWRfbGltaXRgLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgY2FyZWZ1bGx5IGF0IGhvdyB0aGVzZSB2YXJpYWJsZXMgYXJlIHVzZWQuIGB1c2VkX2xpbWl0YCBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIGB2cS0mZ3Q7bnVtYCwgYHZxLSZndDtkZXYtJmd0O2lvdl9saW1pdGAsIGFuZCBgdnEtJmd0O2Rldi0mZ3Q7d2VpZ2h0YC4gSWYgYHVzZWRfbGltaXRgIGlzIHplcm8sIHdlIGJhaWwgb3V0IGVhcmx5LCB3aGljaCBzZWVtcyByZWFzb25hYmxlLiBUaGUgY29kZSB0aGVuIGxvb3BzLCBhZGRpbmcgdXNlZCBlbGVtZW50cy4gVGhlIGtleSBpcyBpbiBgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgJmFtcDt1c2VkX2NvdW50KWAgY2FsbGVkIHdoZW4gYHVzZWRfY291bnQgPT0gdXNlZF9saW1pdGAsIHRoaXMgZmx1c2hlcyB1c2VkIGVsZW1lbnRzIGFuZCByZXNldHMgYHVzZWRfY291bnRgLiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBiYXRjaGluZyBvcHRpbWl6YXRpb24uIEl0IGZsdXNoZXMgYW55IHJlbWFpbmluZyB1c2VkIGVsZW1lbnRzIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AgYXMgd2VsbC4gSSBkb24mIzM5O3Qgc2VlIGFueSBpbW1lZGlhdGUgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGlzIGJhdGNoaW5nIGxvZ2ljLgoKTGV0IG1lIHJldmlldyB0aGUgcGF0Y2ggc2NvcGUuIFRoZSBjb2RlIG9ubHkgbW9kaWZpZXMgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAgYW5kIGludHJvZHVjZXMgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgIGFuZCBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZW4mIzM5O3QgY2FsbGluZyBhbnl0aGluZyBlbHNlLiBPa2F5LCBub3RoaW5nIGVsc2UgaXMgdG91Y2hlZC4gU28sIHRoaXMgaXMgKnB1cmVseSogYW4gb3B0aW1pemF0aW9uIHRvIGJhdGNoIHRoZSB1cGRhdGVzLCB3aGljaCBzZWVtcyByZWFzb25hYmxlLiBObyBuZXcgZnVuY3Rpb25zIGFyZSBtb2RpZmllZCwgc28gdGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgd291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZC4KCkkgc2hvdWxkIHZlcmlmeSBob3cgYHZxLSZndDtoZWFkc2AgaXMgYWxsb2NhdGVkIHRvIGJlIDEwMCUgc3VyZS4gVGhhdCYjMzk7cyBhbGxvY2F0ZWQgaW4gYHZob3N0X2Rldl9hbGxvY19pb3ZlY3NgIG9yIGEgc2ltaWxhciBmdW5jdGlvbiwgc28gaXQgc2hvdWxkIGJlIHByb3Blcmx5IGluaXRpYWxpemVkLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgY29kZSwgYW5kIHRoZSBjb250ZXh0IG9mIHRoZSBwYXRjaCwgSSBkb24mIzM5O3Qgc2VlIGFueSByZWFzb24gZm9yIEtNU0FOIGhlcmUuIEl0IHNob3VsZCBiZSBzYWZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoZWFkcyA9IGttYWxsb2NfYXJyYXkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5jPTUxMD1zdGF0aWMgbG9uZyB2aG9zdF9kZXZfYWxsb2NfaW92ZWNzKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtNTE5LVx0XHR2cS1cdTAwM2VoZWFkcyA9IGttYWxsb2Nfb2JqcygqdnEtXHUwMDNlaGVhZHMsIGRldi1cdTAwM2Vpb3ZfbGltaXQpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jOjUyMDpcdFx0dnEtXHUwMDNlbmhlYWRzID0ga21hbGxvY19hcnJheShkZXYtXHUwMDNlaW92X2xpbWl0LCBzaXplb2YoKnZxLVx1MDAzZW5oZWFkcyksXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtNTIxLVx0XHRcdFx0XHQgICBHRlBfS0VSTkVMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3OTAKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBNZW1vcnkgU2FmZXR5IElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGZpcnN0IGxpbmUsIGB2cS0mZ3Q7aGVhZHMgPSBrbWFsbG9jX29ianMoKnZxLSZndDtoZWFkcywgZGV2LSZndDtpb3ZfbGltaXQpO2AgaXMgd2hhdCYjMzk7cyBjYXRjaGluZyBteSBleWUuIEkgaW1tZWRpYXRlbHkgc3VzcGVjdCBga21hbGxvY19vYmpzYCBpcyBhIG1hY3JvLCB3aGljaCBpcyBzdGFuZGFyZCBwcmFjdGljZSBpbiB0aGVzZSB0eXBlcyBvZiBsb3ctbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQmIzM5O3MgZG9pbmcsIHNwZWNpZmljYWxseSB3aXRoIHJlc3BlY3QgdG8gbWVtb3J5IGFsbG9jYXRpb24uCgpUaGVuLCB0aGVyZSYjMzk7cyBhIHF1aWNrIHRob3VnaHQuLi4gaXMgYGttYWxsb2NfYXJyYXlgIHBvdGVudGlhbGx5IHVzZWQgYnkgYGttYWxsb2Nfb2Jqc2AgZm9yIGBuaGVhZHNgPyBUaGF0IHdvdWxkIG1ha2Ugc2Vuc2UsIGdpdmVuIHRoZSBjb250ZXh0LgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgdGhlIGJvdW5kcy4gVGhlIGB1c2VkX2NvdW50YCB2YXJpYWJsZSBzZWVtcyBrZXkgaGVyZS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgc2FmZXR5LiBJdCYjMzk7cyBib3VuZGVkIGJ5IGB1c2VkX2xpbWl0YCwgd2hpY2ggaW4gdHVybiwgaXMgYm91bmRlZCBieSBgdnEtJmd0O2Rldi0mZ3Q7aW92X2xpbWl0YC4gVGhpcyBzdWdnZXN0cyBhIGNhcmVmdWwgY29udHJvbCBvZiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGFsbG9jYXRlZC4gSWYgdGhpcyByZWFzb25pbmcgaXMgcmlnaHQsIGl0IGltcGxpZXMgdGhhdCB3ZSAqc2hvdWxkbiYjMzk7dCogb3ZlcmZsb3cgYHZxLSZndDtoZWFkc2AuCgpBbmQganVzdCB0byBjbGFyaWZ5LCB3ZSBhcmUgb25seSBjb3B5aW5nIGB1c2VkX2NvdW50YCBlbGVtZW50cyB0byB1c2Vyc3BhY2UsIGFuZCBpdCBzaG91bGQgYmUgdGhvc2UgZWxlbWVudHMgdGhhdCB3ZXJlIGluaXRpYWxpemVkLiBUaGF0IG1lYW5zIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2Ugd2UgYXJlbiYjMzk7dCBwZXJmb3JtaW5nIGFueSBvdXQtb2YtYm91bmRzIHJlYWRzIGZyb20gYHZxLSZndDtoZWFkc2AuIFRoYXQmIzM5O3MgYSBodWdlIHJlbGllZi4KCkJ1dCBJJiMzOTttIG5vdCBnb2luZyB0byB0YWtlIHRoYXQgYXMgZ29zcGVsLiBXZSBzdGlsbCBuZWVkIHRvIHZlcmlmeSB3aGF0IGBrbWFsbG9jX29ianNgIGlzIGFjdHVhbGx5IGRvaW5nLiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGF0IGRlZmluaXRpb24gYW5kIGVuc3VyZSBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIFRpbWUgdG8gdmVyaWZ5IHRob3NlIGFzc3VtcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWFsbG9jX29ianMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDM2NzIgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTM5OmttYWxsb2MoKSwga3phbGxvYygpLCBrbWFsbG9jX29ianMoKSwga3phbGxvY19vYmpzKCksIHZtYWxsb2MoKSwgYW5kXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDAtdnphbGxvYygpLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvblxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk1OD1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIGFsbG9jYXRpbmcgYW4gYXJyYXkgaXMgdGhlIGZvbGxvd2luZzpcbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjEtXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NjI6XHRwID0ga21hbGxvY19vYmpzKCpwLCBuLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTYzLVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zOTg9YmVjb21lLCByZXNwZWN0aXZlbHk6OlxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDEtXHRwdHIgPSBremFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDI6XHRwdHIgPSBrbWFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMy1cdHB0ciA9IGt6YWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XG4tLVxuYXJjaC9hcm0vbW0vcGdkLmMtMTktI2lmZGVmIENPTkZJR19BUk1fTFBBRVxuYXJjaC9hcm0vbW0vcGdkLmM6MjA6I2RlZmluZSBfcGdkX2FsbG9jKG1tKVx0XHRrbWFsbG9jX29ianMocGdkX3QsIFBUUlNfUEVSX1BHRCwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pXG5hcmNoL2FybS9tbS9wZ2QuYy0yMS0jZGVmaW5lIF9wZ2RfZnJlZShtbSwgcGdkKVx0a2ZyZWUocGdkKVxuLS1cbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jPTc2ND1zdGF0aWMgaW50IGNvdmVyYWdlX3N0YXJ0KGNvbnN0IHVuaW9uIGRlY29kZV9pdGVtICp0YWJsZSlcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jLTc2NS17XG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYzo3NjY6XHRjb3ZlcmFnZS5iYXNlID0ga21hbGxvY19vYmpzKHN0cnVjdCBjb3ZlcmFnZV9lbnRyeSxcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jLTc2Ny1cdFx0XHRcdCAgICAgTUFYX0NPVkVSQUdFX0VOVFJJRVMpO1xuLS1cbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jPTM5MT11MzIgYXUxeHh4X2RiZG1hX3JpbmdfYWxsb2ModTMyIGNoYW5pZCwgaW50IGVudHJpZXMpXG4tLVxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtNDE0LVx0ICovXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYzo0MTU6XHRkZXNjX2Jhc2UgPSAodTMyKSBrbWFsbG9jX29ianMoYXUxeF9kZG1hX2Rlc2NfdCwgZW50cmllcyxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTQxNi1cdFx0XHRcdCAgICAgICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jPTUzMj1hZGRfc3lzdGVtX21hcF9hZGRyZXNzZXMoc3RydWN0IHBhcmlzY19kZXZpY2UgKmRldiwgaW50IG51bV9hZGRycywgXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTUzOC1cbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYzo1Mzk6XHRkZXYtXHUwMDNlYWRkciA9IGttYWxsb2Nfb2JqcygqZGV2LVx1MDAzZWFkZHIsIG51bV9hZGRycyk7XG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtNTQwLVx0aWYoIWRldi1cdTAwM2VhZGRyKSB7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jPTczMT1pbnQga3ZtX3ZjcHVfaW9jdGxfY29uZmlnX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTc3NC1cdFx0ICAgIGNmZy1cdTAwM2VhcnJheSAvIFBBR0VfU0laRTtcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYzo3NzU6XHRwYWdlcyA9IGttYWxsb2Nfb2JqcygqcGFnZXMsIG51bV9wYWdlcyk7XG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtNzc2LVx0aWYgKCFwYWdlcylcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM9ODk4PWludCBrdm1wcGNfZTUwMF90bGJfaW5pdChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTQtXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM6OTE1Olx0dmNwdV9lNTAwLVx1MDAzZWd0bGJfYXJjaCA9IGttYWxsb2Nfb2JqcygqdmNwdV9lNTAwLVx1MDAzZWd0bGJfYXJjaCxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTYtXHRcdFx0XHRcdCAgICBLVk1fRTUwMF9UTEIwX1NJWkUgJiM0MzsgS1ZNX0U1MDBfVExCMV9TSVpFKTtcbi0tXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM9NDU9c3RhdGljIGludCBncm93KHJoX2luZm9fdCAqIGluZm8sIGludCBtYXhfYmxvY2tzKVxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy01Ni1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYzo1NzpcdGJsb2NrID0ga21hbGxvY19vYmpzKHJoX2Jsb2NrX3QsIG1heF9ibG9ja3MsIEdGUF9BVE9NSUMpO1xuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTU4LVx0aWYgKGJsb2NrID09IE5VTEwpXG4tLVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jPTc1NT1zdGF0aWMgaW50IGNyZWF0ZV9ldmVudHNfZnJvbV9jYXRhbG9nKHN0cnVjdCBhdHRyaWJ1dGUgKioqZXZlbnRzXyxcbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTA4LVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkwOTpcdGV2ZW50cyA9IGttYWxsb2Nfb2JqcygqZXZlbnRzLCBhdHRyX21heCAmIzQzOyAxKTtcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTAtXHRpZiAoIWV2ZW50cykge1xuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTQtXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTE1Olx0ZXZlbnRfZGVzY3MgPSBrbWFsbG9jX29ianMoKmV2ZW50X2Rlc2NzLCBldmVudF9pZHggJiM0MzsgMSk7XG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTE2LVx0aWYgKCFldmVudF9kZXNjcykge1xuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MjAtXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTIxOlx0ZXZlbnRfbG9uZ19kZXNjcyA9IGttYWxsb2Nfb2JqcygqZXZlbnRfbG9uZ19kZXNjcywgZXZlbnRfaWR4ICYjNDM7IDEpO1xuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkyMi1cdGlmICghZXZlbnRfbG9uZ19kZXNjcykge1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM9MTIyPXN0YXRpYyBpbnQgaHN0YV9tc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jLTE1My1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM6MTU0Olx0cHBjNHh4X2hzdGFfbXNpLmlycV9tYXAgPSBrbWFsbG9jX29ianMoaW50LCBpcnFfY291bnQpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYy0xNTUtXHRpZiAoIXBwYzR4eF9oc3RhX21zaS5pcnFfbWFwKSB7XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jPTEyMD1zdGF0aWMgaW50IHBzZXJpZXNfcGNpX3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2IG51bV92ZnMpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jLTE0My1cdHBkbiA9IHBjaV9nZXRfcGRuKHBkZXYpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jOjE0NDpcdHBkbi1cdTAwM2VwZV9udW1fbWFwID0ga21hbGxvY19vYmpzKCpwZG4tXHUwMDNlcGVfbnVtX21hcCwgbnVtX3Zmcyk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMtMTQ1LVx0aWYgKCFwZG4tXHUwMDNlcGVfbnVtX21hcClcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYz0xNTQ5PXZvaWQgX19pbml0IG1waWNfaW5pdChzdHJ1Y3QgbXBpYyAqbXBpYylcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYy0xNjQxLVx0LyogYWxsb2NhdGUgbWVtb3J5IHRvIHNhdmUgbXBpYyBzdGF0ZSAqL1xuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmM6MTY0MjpcdG1waWMtXHUwMDNlc2F2ZV9kYXRhID0ga21hbGxvY19vYmpzKCptcGljLVx1MDAzZXNhdmVfZGF0YSwgbXBpYy1cdTAwM2VudW1fc291cmNlcyk7XG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYy0xNjQzLVx0QlVHX09OKG1waWMtXHUwMDNlc2F2ZV9kYXRhID09IE5VTEwpO1xuLS1cbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYz0zMD1zdGF0aWMgdm9pZCAqZGlhZzBjX3N0b3JlKHVuc2lnbmVkIGludCAqY291bnQpXG4tLVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jLTM3LVx0Y3B1X2NvdW50ID0gbnVtX29ubGluZV9jcHVzKCk7XG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM6Mzg6XHRjcHVfdmVjID0ga21hbGxvY19vYmpzKCpjcHVfdmVjLCBudW1fcG9zc2libGVfY3B1cygpKTtcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0zOS1cdGlmICghY3B1X3ZlYylcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaD0xOTA9c3RhdGljIGlubGluZSBzdHJ1Y3QgaWRhbF9idWZmZXIgKippZGFsX2J1ZmZlcl9hcnJheV9hbGxvYyhzaXplX3Qgc2l6ZSwgaW50IHBhZ2Vfb3JkZXIpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmgtMTk3LVx0Y291bnQgPSAoc2l6ZSAmIzQzOyBDQ1dfTUFYX0JZVEVfQ09VTlQgLSAxKSAvIENDV19NQVhfQllURV9DT1VOVDtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oOjE5ODpcdGlicyA9IGttYWxsb2Nfb2JqcygqaWJzLCBjb3VudCAmIzQzOyAxKTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oLTE5OS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOykge1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYz0yNjY9c3RhdGljIGRlYnVnX2VudHJ5X3QgKioqZGVidWdfYXJlYXNfYWxsb2MoaW50IHBhZ2VzX3Blcl9hcmVhLCBpbnQgbnJfYXJlYXMpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jLTI3MC1cbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYzoyNzE6XHRhcmVhcyA9IGttYWxsb2Nfb2JqcyhkZWJ1Z19lbnRyeV90ICoqLCBucl9hcmVhcyk7XG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMtMjcyLVx0aWYgKCFhcmVhcylcbi0tXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMtMjc1LVx0XHQvKiBHRlBfTk9XQVJOIHRvIGF2b2lkIHVzZXIgdHJpZ2dlcmFibGUgV0FSTiwgd2UgaGFuZGxlIGZhaWxzICovXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmM6Mjc2Olx0XHRhcmVhc1tpXSA9IGttYWxsb2Nfb2JqcyhkZWJ1Z19lbnRyeV90ICosIHBhZ2VzX3Blcl9hcmVhLFxuYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jLTI3Ny1cdFx0XHRcdFx0R0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX2NwdW1fY2ZfZXZlbnRzLmM9OTY0PXN0YXRpYyBfX2luaXQgc3RydWN0IGF0dHJpYnV0ZSAqKm1lcmdlX2F0dHIoc3RydWN0IGF0dHJpYnV0ZSAqKmEsXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX2NwdW1fY2ZfZXZlbnRzLmMtOTc4LVxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX2NwdW1fY2ZfZXZlbnRzLmM6OTc5Olx0bmV3ID0ga21hbGxvY19vYmpzKHN0cnVjdCBhdHRyaWJ1dGUgKiwgaik7XG5hcmNoL3MzOTAva2VybmVsL3BlcmZfY3B1bV9jZl9ldmVudHMuYy05ODAtXHRpZiAoIW5ldylcbi0tXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfcGFpLmM9MTA5Nj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqKiBfX2luaXQgYXR0cl9ldmVudF9pbml0KHN0cnVjdCBwYWlfcG11ICpwKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvcGVyZl9wYWkuYy0xMTAxLVxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX3BhaS5jOjExMDI6XHRhdHRycyA9IGttYWxsb2Nfb2JqcygqYXR0cnMsIG1pbl9hdHRyICYjNDM7IDEsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbmFyY2gvczM5MC9rZXJuZWwvcGVyZl9wYWkuYy0xMTAzLVx0aWYgKCFhdHRycylcbi0tXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM9MjAzPWludCBrdm1fczM5MF9pbXBvcnRfYnBfZGF0YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jLTIzNC1cdGlmIChucl93cCBcdTAwM2UgMCkge1xuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjIzNTpcdFx0d3BfaW5mbyA9IGttYWxsb2Nfb2Jqcygqd3BfaW5mbywgbnJfd3AsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMjM2LVx0XHRpZiAoIXdwX2luZm8pIHtcbi0tXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMjQxLVx0aWYgKG5yX2JwIFx1MDAzZSAwKSB7XG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM6MjQyOlx0XHRicF9pbmZvID0ga21hbGxvY19vYmpzKCpicF9pbmZvLCBucl9icCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0yNDMtXHRcdGlmICghYnBfaW5mbykge1xuLS1cbmFyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jPTYyNT1TWVNDQUxMX0RFRklORTUodXRyYXBfaW5zdGFsbCwgdXRyYXBfZW50cnlfdCwgdHlwZSxcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfNjQuYy02NTktXHRcdFx0Y3VycmVudF90aHJlYWRfaW5mbygpLVx1MDAzZXV0cmFwcyA9XG5hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfNjQuYzo2NjA6XHRcdFx0XHRrbWFsbG9jX29ianMobG9uZywgVVRfVFJBUF9JTlNUUlVDVElPTl8zMSAmIzQzOyAxKTtcbmFyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jLTY2MS1cdFx0XHRpZiAoIWN1cnJlbnRfdGhyZWFkX2luZm8oKS1cdTAwM2V1dHJhcHMpIHtcbi0tXG5hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYz0xMDY0PXN0YXRpYyBpbnQgX19pbml0IHViZF9pbml0KHZvaWQpXG4tLVxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTA3MS1cbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jOjEwNzI6XHRpcnFfcmVxX2J1ZmZlciA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaW9fdGhyZWFkX3JlcSAqLFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTA3My1cdFx0XHRcdCAgICAgIFVCRF9SRVFfQlVGRkVSX1NJWkUpO1xuLS1cbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jLTEwNzktXHR9XG5hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYzoxMDgwOlx0aW9fcmVxX2J1ZmZlciA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaW9fdGhyZWFkX3JlcSAqLFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTA4MS1cdFx0XHRcdCAgICAgVUJEX1JFUV9CVUZGRVJfU0laRSk7XG4tLVxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmM9NTA3PXN0YXRpYyBzdHJ1Y3QgdmVjdG9yX3F1ZXVlICpjcmVhdGVfcXVldWUoXG4tLVxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmMtNTQ2LVx0XHRpZiAodnAtXHUwMDNlaGVhZGVyX3NpemUgXHUwMDNlIDApXG5hcmNoL3VtL2RyaXZlcnMvdmVjdG9yX2tlcm4uYzo1NDc6XHRcdFx0aW92ID0ga21hbGxvY19vYmpzKHN0cnVjdCBpb3ZlYywgMyAmIzQzOyBudW1fZXh0cmFfZnJhZ3MpO1xuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmMtNTQ4LVx0XHRlbHNlXG5hcmNoL3VtL2RyaXZlcnMvdmVjdG9yX2tlcm4uYzo1NDk6XHRcdFx0aW92ID0ga21hbGxvY19vYmpzKHN0cnVjdCBpb3ZlYywgMiAmIzQzOyBudW1fZXh0cmFfZnJhZ3MpO1xuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmMtNTUwLVx0XHRpZiAoaW92ID09IE5VTEwpXG4tLVxuYXJjaC91bS9kcml2ZXJzL3ZmaW9fa2Vybi5jPTQ4ND1zdGF0aWMgdm9pZCB1bWxfdmZpb19vcGVuX2RldmljZShzdHJ1Y3QgdW1sX3ZmaW9fZGV2aWNlICpkZXYpXG4tLVxuYXJjaC91bS9kcml2ZXJzL3ZmaW9fa2Vybi5jLTUxNi1cbmFyY2gvdW0vZHJpdmVycy92ZmlvX2tlcm4uYzo1MTc6XHRkZXYtXHUwMDNlaW50cl9jdHggPSBrbWFsbG9jX29ianMoc3RydWN0IHVtbF92ZmlvX2ludHJfY3R4LFxuYXJjaC91bS9kcml2ZXJzL3ZmaW9fa2Vybi5jLTUxOC1cdFx0XHRcdCAgICAgZGV2LVx1MDAzZXVkZXYuaXJxX2NvdW50KTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM9Nzk3PXN0YXRpYyBib29sIF9faW5pdCBzZ3hfcGFnZV9jYWNoZV9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTgwMy1cbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzo4MDQ6XHRzZ3hfbnVtYV9ub2RlcyA9IGttYWxsb2Nfb2Jqcygqc2d4X251bWFfbm9kZXMsIG51bV9wb3NzaWJsZV9ub2RlcygpKTtcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy04MDUtXHRpZiAoIXNneF9udW1hX25vZGVzKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9rc3lzZnMuYz0zMjc9c3RhdGljIGludCBfX2luaXQgY3JlYXRlX3NldHVwX2RhdGFfbm9kZXMoc3RydWN0IGtvYmplY3QgKnBhcmVudClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwva3N5c2ZzLmMtMzQ2LVxuYXJjaC94ODYva2VybmVsL2tzeXNmcy5jOjM0NzpcdGtvYmpwID0ga21hbGxvY19vYmpzKCprb2JqcCwgbnIpO1xuYXJjaC94ODYva2VybmVsL2tzeXNmcy5jLTM0OC1cdGlmICgha29ianApIHtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTQ3MT1zdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTE1MTYtXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTUxNzpcdFx0cG9ydHMgPSBrbWFsbG9jX29ianMoKnBvcnRzLCBzY2hlZF9wb2xsLm5yX3BvcnRzKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0xNTE4LVx0XHRpZiAoIXBvcnRzKSB7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTIyMDM9c3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0yMjE4LVxuYXJjaC94ODYva3ZtL3hlbi5jOjIyMTk6XHRhbGxfZXZ0Y2huZmRzID0ga21hbGxvY19vYmpzKHN0cnVjdCBldnRjaG5mZCAqLCBuKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0yMjIwLVx0aWYgKCFhbGxfZXZ0Y2huZmRzKSB7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM9MjUyMT1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jLTI1MzMtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYzoyNTM0Olx0YWRkcnMgPSBrbWFsbG9jX29ianMoKmFkZHJzLCBwcm9nLVx1MDAzZWxlbik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0yNTM1LVx0aWYgKCFhZGRycylcbi0tXG5hcmNoL3g4Ni9wb3dlci9jcHUuYz0zODg9c3RhdGljIGludCBtc3JfYnVpbGRfY29udGV4dChjb25zdCB1MzIgKm1zcl9pZCwgY29uc3QgaW50IG51bSlcbi0tXG5hcmNoL3g4Ni9wb3dlci9jcHUuYy0zOTYtXG5hcmNoL3g4Ni9wb3dlci9jcHUuYzozOTc6XHRtc3JfYXJyYXkgPSBrbWFsbG9jX29ianMoc3RydWN0IHNhdmVkX21zciwgdG90YWxfbnVtKTtcbmFyY2gveDg2L3Bvd2VyL2NwdS5jLTM5OC1cdGlmICghbXNyX2FycmF5KSB7XG4tLVxuYXJjaC94ODYveGVuL2dyYW50LXRhYmxlLmM9MTAyPXN0YXRpYyBpbnQgYXJjaF9nbnR0YWJfdmFsbG9jKHN0cnVjdCBnbnR0YWJfdm1fYXJlYSAqYXJlYSwgdW5zaWduZWQgbnJfZnJhbWVzKVxuYXJjaC94ODYveGVuL2dyYW50LXRhYmxlLmMtMTAzLXtcbmFyY2gveDg2L3hlbi9ncmFudC10YWJsZS5jOjEwNDpcdGFyZWEtXHUwMDNlcHRlcyA9IGttYWxsb2Nfb2JqcygqYXJlYS1cdTAwM2VwdGVzLCBucl9mcmFtZXMpO1xuYXJjaC94ODYveGVuL2dyYW50LXRhYmxlLmMtMTA1LVx0aWYgKGFyZWEtXHUwMDNlcHRlcyA9PSBOVUxMKVxuLS1cbmFyY2gveHRlbnNhL3BsYXRmb3Jtcy9pc3Mvc2ltZGlzay5jPTMwOD1zdGF0aWMgaW50IF9faW5pdCBzaW1kaXNrX2luaXQodm9pZClcbi0tXG5hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL3NpbWRpc2suYy0zMjItXG5hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL3NpbWRpc2suYzozMjM6XHRzZGRldiA9IGttYWxsb2Nfb2Jqcygqc2RkZXYsIHNpbWRpc2tfY291bnQpO1xuYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9zaW1kaXNrLmMtMzI0LVx0aWYgKHNkZGV2ID09IE5VTEwpXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz01Nzg9c3RhdGljIGJvb2wgYmZxcV9yZXF1ZXN0X292ZXJfbGltaXQoc3RydWN0IGJmcV9kYXRhICpiZnFkLFxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjA4LVx0XHRcdGtmcmVlKGVudGl0aWVzKTtcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjA5Olx0XHRlbnRpdGllcyA9IGttYWxsb2Nfb2JqcygqZW50aXRpZXMsIGRlcHRoLCBHRlBfTk9JTyk7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTYxMC1cdFx0aWYgKCFlbnRpdGllcylcbi0tXG5ibG9jay9ibGstc3RhdC5jPTEwMD1ibGtfc3RhdF9hbGxvY19jYWxsYmFjayh2b2lkICgqdGltZXJfZm4pKHN0cnVjdCBibGtfc3RhdF9jYWxsYmFjayAqKSxcbi0tXG5ibG9jay9ibGstc3RhdC5jLTEwOS1cbmJsb2NrL2Jsay1zdGF0LmM6MTEwOlx0Y2ItXHUwMDNlc3RhdCA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgYmxrX3JxX3N0YXQsIGJ1Y2tldHMpO1xuYmxvY2svYmxrLXN0YXQuYy0xMTEtXHRpZiAoIWNiLVx1MDAzZXN0YXQpIHtcbi0tXG5ibG9jay9mb3BzLmM9NTU9c3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuYmxvY2svZm9wcy5jLTY3LVx0ZWxzZSB7XG5ibG9jay9mb3BzLmM6Njg6XHRcdHZlY3MgPSBrbWFsbG9jX29ianMoc3RydWN0IGJpb192ZWMsIG5yX3BhZ2VzKTtcbmJsb2NrL2ZvcHMuYy02OS1cdFx0aWYgKCF2ZWNzKVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM9MzUxPXN0YXRpYyBib29sIGxkbV92YWxpZGF0ZV90b2NibG9ja3Moc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSxcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM2NC1cdHRiWzBdID0gXHUwMDI2bGRiLVx1MDAzZXRvYztcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzY1Olx0dGJbMV0gPSBrbWFsbG9jX29ianMoKnRiWzFdLCAzKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzY2LVx0aWYgKCF0YlsxXSkge1xuLS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmM9MTQwNz1zdGF0aWMgaW50IGhsX2NzX2NvcHlfY2h1bmtfYXJyYXkoc3RydWN0IGhsX2RldmljZSAqaGRldixcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jLTE0MjItXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jOjE0MjM6XHQqY3NfY2h1bmtfYXJyYXkgPSBrbWFsbG9jX29ianMoKipjc19jaHVua19hcnJheSwgbnVtX2NodW5rcywgR0ZQX0FUT01JQyk7XG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jLTE0MjQtXHRpZiAoISpjc19jaHVua19hcnJheSlcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmM6MTQyNTpcdFx0KmNzX2NodW5rX2FycmF5ID0ga21hbGxvY19vYmpzKCoqY3NfY2h1bmtfYXJyYXksIG51bV9jaHVua3MpO1xuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX3N1Ym1pc3Npb24uYy0xNDI2LVx0aWYgKCEqY3NfY2h1bmtfYXJyYXkpIHtcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jPTMwMDU9c3RhdGljIGludCBobF9tdWx0aV9jc193YWl0X2lvY3RsKHN0cnVjdCBobF9mcHJpdiAqaHByaXYsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX3N1Ym1pc3Npb24uYy0zMDUzLVx0LyogYWxsb2NhdGUgYXJyYXkgZm9yIHRoZSBmZW5jZXMgKi9cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmM6MzA1NDpcdGZlbmNlX2FyciA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaGxfZmVuY2UgKiwgc2VxX2Fycl9sZW4pO1xuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX3N1Ym1pc3Npb24uYy0zMDU1LVx0aWYgKCFmZW5jZV9hcnIpIHtcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2RlYnVnZnMuYz0yMDQ5PWludCBobF9kZWJ1Z2ZzX2RldmljZV9pbml0KHN0cnVjdCBobF9kZXZpY2UgKmhkZXYpXG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9kZWJ1Z2ZzLmMtMjA1NC1cdGRldl9lbnRyeS1cdTAwM2VoZGV2ID0gaGRldjtcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vZGVidWdmcy5jOjIwNTU6XHRkZXZfZW50cnktXHUwMDNlZW50cnlfYXJyID0ga21hbGxvY19vYmpzKHN0cnVjdCBobF9kZWJ1Z2ZzX2VudHJ5LCBjb3VudCk7XG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2RlYnVnZnMuYy0yMDU2LVx0aWYgKCFkZXZfZW50cnktXHUwMDNlZW50cnlfYXJyKVxuLS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vaHdfcXVldWUuYz04MjQ9c3RhdGljIGludCBleHRfYW5kX2NwdV9xdWV1ZV9pbml0KHN0cnVjdCBobF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBobF9od19xdWV1ZSAqcSxcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2h3X3F1ZXVlLmMtODM5LVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9od19xdWV1ZS5jOjg0MDpcdHEtXHUwMDNlc2hhZG93X3F1ZXVlID0ga21hbGxvY19vYmpzKHN0cnVjdCBobF9jc19qb2IgKiwgSExfUVVFVUVfTEVOR1RIKTtcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vaHdfcXVldWUuYy04NDEtXHRpZiAoIXEtXHUwMDNlc2hhZG93X3F1ZXVlKSB7XG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYz0zOTM4PXN0YXRpYyBpbnQgZ2F1ZGkyX3NwZWNpYWxfYmxvY2tzX2NvbmZpZyhzdHJ1Y3QgaGxfZGV2aWNlICpoZGV2KVxuLS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmMtMzk0NS1cdHByb3AtXHUwMDNlbnVtX29mX3NwZWNpYWxfYmxvY2tzID0gQVJSQVlfU0laRShnYXVkaTJfc3BlY2lhbF9ibG9ja3MpO1xuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYzozOTQ2Olx0cHJvcC1cdTAwM2VzcGVjaWFsX2Jsb2NrcyA9IGttYWxsb2Nfb2JqcygqcHJvcC1cdTAwM2VzcGVjaWFsX2Jsb2NrcyxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmMtMzk0Ny1cdFx0XHRcdFx0ICAgIHByb3AtXHUwMDNlbnVtX29mX3NwZWNpYWxfYmxvY2tzKTtcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jLTM5NjAtXHRcdHByb3AtXHUwMDNlc2tpcF9zcGVjaWFsX2Jsb2Nrc19jZmcuYmxvY2tfdHlwZXMgPVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYzozOTYxOlx0XHRcdFx0a21hbGxvY19vYmpzKGdhdWRpMl9pdGVyYXRvcl9za2lwX2Jsb2NrX3R5cGVzWzBdLFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYy0zOTYyLVx0XHRcdFx0XHQgICAgIEFSUkFZX1NJWkUoZ2F1ZGkyX2l0ZXJhdG9yX3NraXBfYmxvY2tfdHlwZXMpKTtcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jLTM5NzYtXHRcdHByb3AtXHUwMDNlc2tpcF9zcGVjaWFsX2Jsb2Nrc19jZmcuYmxvY2tfcmFuZ2VzID1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmM6Mzk3NzpcdFx0XHRcdGttYWxsb2Nfb2JqcyhnYXVkaTJfaXRlcmF0b3Jfc2tpcF9ibG9ja19yYW5nZXNbMF0sXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jLTM5NzgtXHRcdFx0XHRcdCAgICAgQVJSQVlfU0laRShnYXVkaTJfaXRlcmF0b3Jfc2tpcF9ibG9ja19yYW5nZXMpKTtcbi0tXG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19jb250cm9sLmM9MzkzPXN0YXRpYyBpbnQgZmluZF9hbmRfbWFwX3VzZXJfcGFnZXMoc3RydWN0IHFhaWNfZGV2aWNlICpxZGV2LFxuLS1cbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2NvbnRyb2wuYy00MjUtXHR3aGlsZSAoMSkge1xuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfY29udHJvbC5jOjQyNjpcdFx0cGFnZV9saXN0ID0ga21hbGxvY19vYmpzKCpwYWdlX2xpc3QsIG5yX3BhZ2VzLFxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfY29udHJvbC5jLTQyNy1cdFx0XHRcdFx0IEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuLS1cbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYz00OTY9aW50IHJvY2tldF9qb2Jfb3BlbihzdHJ1Y3Qgcm9ja2V0X2ZpbGVfcHJpdiAqcm9ja2V0X3ByaXYpXG4tLVxuZHJpdmVycy9hY2NlbC9yb2NrZXQvcm9ja2V0X2pvYi5jLTQ5OC1cdHN0cnVjdCByb2NrZXRfZGV2aWNlICpyZGV2ID0gcm9ja2V0X3ByaXYtXHUwMDNlcmRldjtcbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYzo0OTk6XHRzdHJ1Y3QgZHJtX2dwdV9zY2hlZHVsZXIgKipzY2hlZHMgPSBrbWFsbG9jX29ianMoKnNjaGVkcyxcbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYy01MDAtXHRcdFx0XHRcdFx0XHQgcmRldi1cdTAwM2VudW1fY29yZXMpO1xuLS1cbmRyaXZlcnMvYWNwaS9hY3BpX21ycm0uYz01NT1zdGF0aWMgX19pbml0IGludCBhY3BpX3BhcnNlX21ycm0oc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSlcbi0tXG5kcml2ZXJzL2FjcGkvYWNwaV9tcnJtLmMtODMtXG5kcml2ZXJzL2FjcGkvYWNwaV9tcnJtLmM6ODQ6XHRtcnJtX21lbV9yYW5nZV9lbnRyeSA9IGttYWxsb2Nfb2JqcygqbXJybV9tZW1fcmFuZ2VfZW50cnksIG1yZV9jb3VudCxcbmRyaXZlcnMvYWNwaS9hY3BpX21ycm0uYy04NS1cdFx0XHRcdFx0ICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbi0tXG5kcml2ZXJzL2FjcGkvYWNwaV92aWRlby5jPTc5OD1pbnQgYWNwaV92aWRlb19nZXRfbGV2ZWxzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvYWNwaS9hY3BpX3ZpZGVvLmMtODMxLVx0ICovXG5kcml2ZXJzL2FjcGkvYWNwaV92aWRlby5jOjgzMjpcdGJyLVx1MDAzZWxldmVscyA9IGttYWxsb2Nfb2JqcygqYnItXHUwMDNlbGV2ZWxzLFxuZHJpdmVycy9hY3BpL2FjcGlfdmlkZW8uYy04MzMtXHRcdFx0XHQgIG9iai1cdTAwM2VwYWNrYWdlLmNvdW50ICYjNDM7IEFDUElfVklERU9fRklSU1RfTEVWRUwpO1xuLS1cbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jPTMxNj1zdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2dldF9wZXJmb3JtYW5jZV9zdGF0ZXMoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcilcbi0tXG5kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYy0zNDQtXHRwci1cdTAwM2VwZXJmb3JtYW5jZS1cdTAwM2VzdGF0ZXMgPVxuZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmM6MzQ1Olx0ICAgIGttYWxsb2Nfb2JqcyhzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcHgsIHBzcy1cdTAwM2VwYWNrYWdlLmNvdW50KTtcbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jLTM0Ni1cdGlmICghcHItXHUwMDNlcGVyZm9ybWFuY2UtXHUwMDNlc3RhdGVzKSB7XG4tLVxuZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmM9NDg1PXN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfZ2V0X3Rocm90dGxpbmdfc3RhdGVzKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpXG4tLVxuZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMtNTE0LVx0cHItXHUwMDNldGhyb3R0bGluZy5zdGF0ZXNfdHNzID1cbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jOjUxNTpcdCAgICBrbWFsbG9jX29ianMoc3RydWN0IGFjcGlfcHJvY2Vzc29yX3R4X3RzcywgdHNzLVx1MDAzZXBhY2thZ2UuY291bnQpO1xuZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMtNTE2LVx0aWYgKCFwci1cdTAwM2V0aHJvdHRsaW5nLnN0YXRlc190c3MpIHtcbi0tXG5kcml2ZXJzL2Jhc2UvY29tcG9uZW50LmM9MzU5PXN0YXRpYyBpbnQgY29tcG9uZW50X21hdGNoX3JlYWxsb2Moc3RydWN0IGNvbXBvbmVudF9tYXRjaCAqbWF0Y2gsIHNpemVfdCBudW0pXG4tLVxuZHJpdmVycy9iYXNlL2NvbXBvbmVudC5jLTM2NS1cbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYzozNjY6XHRuZXcgPSBrbWFsbG9jX29ianMoKm5ldywgbnVtKTtcbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYy0zNjctXHRpZiAoIW5ldylcbi0tXG5kcml2ZXJzL2Jhc2UvbWFwLmM9MzI9aW50IGtvYmpfbWFwKHN0cnVjdCBrb2JqX21hcCAqZG9tYWluLCBkZXZfdCBkZXYsIHVuc2lnbmVkIGxvbmcgcmFuZ2UsXG4tLVxuZHJpdmVycy9iYXNlL21hcC5jLTQzLVxuZHJpdmVycy9iYXNlL21hcC5jOjQ0Olx0cCA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgcHJvYmUsIG4pO1xuZHJpdmVycy9iYXNlL21hcC5jLTQ1LVx0aWYgKHAgPT0gTlVMTClcbi0tXG5kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLmM9MTI0PWludCByZWdjYWNoZV9pbml0KHN0cnVjdCByZWdtYXAgKm1hcCwgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLmMtMjE0LVx0XHRtYXAtXHUwMDNlbnVtX3JlZ19kZWZhdWx0cyA9IGNvdW50O1xuZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS5jOjIxNTpcdFx0bWFwLVx1MDAzZXJlZ19kZWZhdWx0cyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgcmVnX2RlZmF1bHQsIGNvdW50KTtcbmRyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUuYy0yMTYtXHRcdGlmICghbWFwLVx1MDAzZXJlZ19kZWZhdWx0cylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0zNDA9c3RhdGljIGludCBsb19yd19haW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGxvb3BfY21kICpjbWQsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMzU0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MzU1Olx0XHRjbWQtXHUwMDNlYnZlYyA9IGttYWxsb2Nfb2JqcygqY21kLVx1MDAzZWJ2ZWMsIG5yX2J2ZWMsIEdGUF9OT0lPKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTM1Ni1cdFx0aWYgKCFjbWQtXHUwMDNlYnZlYylcbi0tXG5kcml2ZXJzL2Jsb2NrL3JiZC5jPTI1MzY9c3RhdGljIGludCByYmRfaW1nX2ZpbGxfcmVxdWVzdChzdHJ1Y3QgcmJkX2ltZ19yZXF1ZXN0ICppbWdfcmVxLFxuLS1cbmRyaXZlcnMvYmxvY2svcmJkLmMtMjU3Mi1cdGZvcl9lYWNoX29ial9yZXF1ZXN0KGltZ19yZXEsIG9ial9yZXEpIHtcbmRyaXZlcnMvYmxvY2svcmJkLmM6MjU3MzpcdFx0b2JqX3JlcS1cdTAwM2VidmVjX3Bvcy5idmVjcyA9IGttYWxsb2Nfb2Jqcygqb2JqX3JlcS1cdTAwM2VidmVjX3Bvcy5idmVjcyxcbmRyaXZlcnMvYmxvY2svcmJkLmMtMjU3NC1cdFx0XHRcdFx0XHQgICAgICAgb2JqX3JlcS1cdTAwM2VidmVjX2NvdW50LFxuLS1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTE2MD1zdGF0aWMgaW50IHZpcnRibGtfc2V0dXBfZGlzY2FyZF93cml0ZV96ZXJvZXNfZXJhc2Uoc3RydWN0IHJlcXVlc3QgKnJlcSwgYm9vbCB1bm1hcClcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNzAtXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzoxNzE6XHRyYW5nZSA9IGttYWxsb2Nfb2JqcygqcmFuZ2UsIHNlZ21lbnRzLCBHRlBfQVRPTUlDKTtcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE3Mi1cdGlmICghcmFuZ2UpXG4tLVxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9OTYwPXN0YXRpYyBpbnQgaW5pdF92cShzdHJ1Y3QgdmlydGlvX2JsayAqdmJsaylcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy05OTUtXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzo5OTY6XHR2YmxrLVx1MDAzZXZxcyA9IGttYWxsb2Nfb2JqcygqdmJsay1cdTAwM2V2cXMsIG51bV92cXMpO1xuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtOTk3LVx0aWYgKCF2YmxrLVx1MDAzZXZxcylcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xMDAwLVx0dnFzX2luZm8gPSBremFsbG9jX29ianMoKnZxc19pbmZvLCBudW1fdnFzKTtcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjEwMDE6XHR2cXMgPSBrbWFsbG9jX29ianMoKnZxcywgbnVtX3Zxcyk7XG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xMDAyLVx0aWYgKCF2cXNfaW5mbyB8fCAhdnFzKSB7XG4tLVxuZHJpdmVycy9ibG9jay96MnJhbS5jPTE0Mz1zdGF0aWMgaW50IHoyX29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3oycmFtLmMtMTg5LVx0XHRcdHoycmFtX21hcCA9XG5kcml2ZXJzL2Jsb2NrL3oycmFtLmM6MTkwOlx0XHRcdCAgICBrbWFsbG9jX29ianMoejJyYW1fbWFwWzBdLCBzaXplIC8gWjJSQU1fQ0hVTktTSVpFKTtcbmRyaXZlcnMvYmxvY2svejJyYW0uYy0xOTEtXHRcdFx0aWYgKHoycmFtX21hcCA9PSBOVUxMKSB7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTUxOD1zdGF0aWMgaW50IHpsb29wX2RvX3J3KHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTMwLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjUzMTpcdFx0Y21kLVx1MDAzZWJ2ZWMgPSBrbWFsbG9jX29ianMoKmNtZC1cdTAwM2VidmVjLCBucl9idmVjLCBHRlBfTk9JTyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTMyLVx0XHRpZiAoIWNtZC1cdTAwM2VidmVjKVxuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jPTE5MDQ9c3RhdGljIGludCBidGludGVsX3BjaWVfc2V0dXBfdHhxX2J1ZnMoc3RydWN0IGJ0aW50ZWxfcGNpZV9kYXRhICpkYXRhLFxuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jLTE5MTAtXHQvKiBBbGxvY2F0ZSB0aGUgc2FtZSBudW1iZXIgb2YgYnVmZmVycyBhcyB0aGUgZGVzY3JpcHRvciAqL1xuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmM6MTkxMTpcdHR4cS1cdTAwM2VidWZzID0ga21hbGxvY19vYmpzKCpidWYsIHR4cS1cdTAwM2Vjb3VudCk7XG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYy0xOTEyLVx0aWYgKCF0eHEtXHUwMDNlYnVmcylcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYz0xOTQ4PXN0YXRpYyBpbnQgYnRpbnRlbF9wY2llX3NldHVwX3J4cV9idWZzKHN0cnVjdCBidGludGVsX3BjaWVfZGF0YSAqZGF0YSxcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYy0xOTU0LVx0LyogQWxsb2NhdGUgdGhlIHNhbWUgbnVtYmVyIG9mIGJ1ZmZlcnMgYXMgdGhlIGRlc2NyaXB0b3IgKi9cbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jOjE5NTU6XHRyeHEtXHUwMDNlYnVmcyA9IGttYWxsb2Nfb2JqcygqYnVmLCByeHEtXHUwMDNlY291bnQpO1xuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmMtMTk1Ni1cdGlmICghcnhxLVx1MDAzZWJ1ZnMpXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz02MzI9c3RhdGljIGludCBmc2xfbWNfZGV2aWNlX2dldF9tbWlvX3JlZ2lvbnMoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2Rldixcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTY1NS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6NjU2Olx0cmVnaW9ucyA9IGttYWxsb2Nfb2JqcyhyZWdpb25zWzBdLCBvYmpfZGVzYy1cdTAwM2VyZWdpb25fY291bnQpO1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy02NTctXHRpZiAoIXJlZ2lvbnMpXG4tLVxuZHJpdmVycy9jaGFyL2FncC9pc29jaC5jPTY0PXN0YXRpYyBpbnQgYWdwXzNfNV9pc29jaHJvbm91c19ub2RlX2VuYWJsZShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UsXG4tLVxuZHJpdmVycy9jaGFyL2FncC9pc29jaC5jLTk0LVx0ICovXG5kcml2ZXJzL2NoYXIvYWdwL2lzb2NoLmM6OTU6XHRtYXN0ZXIgPSBrbWFsbG9jX29ianMoKm1hc3RlciwgbmRldnMpO1xuZHJpdmVycy9jaGFyL2FncC9pc29jaC5jLTk2LVx0aWYgKG1hc3RlciA9PSBOVUxMKSB7XG4tLVxuZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYz0zNjk9c3RhdGljIGludCB1bmlub3J0aF9jcmVhdGVfZ2F0dF90YWJsZShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UpXG4tLVxuZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYy00MDYtXG5kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jOjQwNzpcdHVuaW5vcnRoX3ByaXYucGFnZXNfYXJyID0ga21hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIDEgXHUwMDNjXHUwMDNjIHBhZ2Vfb3JkZXIpO1xuZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYy00MDgtXHRpZiAodW5pbm9ydGhfcHJpdi5wYWdlc19hcnIgPT0gTlVMTClcbi0tXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYz03NTA9aW50IGlwbWlfc21pX3dhdGNoZXJfcmVnaXN0ZXIoc3RydWN0IGlwbWlfc21pX3dhdGNoZXIgKndhdGNoZXIpXG4tLVxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMtNzc5LVx0aWYgKGNvdW50IFx1MDAzZSAwKSB7XG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYzo3ODA6XHRcdGludGVyZmFjZXMgPSBrbWFsbG9jX29ianMoKmludGVyZmFjZXMsIGNvdW50KTtcbmRyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jLTc4MS1cdFx0aWYgKCFpbnRlcmZhY2VzKSB7XG4tLVxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMtNzgzLVx0XHR9IGVsc2Uge1xuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmM6Nzg0Olx0XHRcdGRldmljZXMgPSBrbWFsbG9jX29ianMoKmRldmljZXMsIGNvdW50KTtcbmRyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jLTc4NS1cdFx0XHRpZiAoIWRldmljZXMpIHtcbi0tXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYz0xODEwPXN0YXRpYyBpbnQgaW5pdF92cXMoc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldilcbi0tXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYy0xODE5LVxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MTgyMDpcdHZxcyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgdmlydHF1ZXVlICosIG5yX3F1ZXVlcyk7XG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYy0xODIxLVx0dnFzX2luZm8gPSBremFsbG9jX29ianMoKnZxc19pbmZvLCBucl9xdWV1ZXMpO1xuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MTgyMjpcdHBvcnRkZXYtXHUwMDNlaW5fdnFzID0ga21hbGxvY19vYmpzKHN0cnVjdCB2aXJ0cXVldWUgKiwgbnJfcG9ydHMpO1xuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MTgyMzpcdHBvcnRkZXYtXHUwMDNlb3V0X3ZxcyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgdmlydHF1ZXVlICosIG5yX3BvcnRzKTtcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jLTE4MjQtXHRpZiAoIXZxcyB8fCAhdnFzX2luZm8gfHwgIXBvcnRkZXYtXHUwMDNlaW5fdnFzIHx8ICFwb3J0ZGV2LVx1MDAzZW91dF92cXMpIHtcbi0tXG5kcml2ZXJzL2Nsay9jbGstYnVsay5jPTQ3PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIG9mX2Nsa19idWxrX2dldF9hbGwoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvY2xrL2Nsay1idWxrLmMtNTgtXG5kcml2ZXJzL2Nsay9jbGstYnVsay5jOjU5Olx0Y2xrX2J1bGsgPSBrbWFsbG9jX29ianMoKmNsa19idWxrLCBudW1fY2xrcyk7XG5kcml2ZXJzL2Nsay9jbGstYnVsay5jLTYwLVx0aWYgKCFjbGtfYnVsaylcbi0tXG5kcml2ZXJzL2Nsay9jbGstc3RtMzJmNC5jPTE4Mjg9c3RhdGljIHZvaWQgX19pbml0IHN0bTMyZjRfcmNjX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5kcml2ZXJzL2Nsay9jbGstc3RtMzJmNC5jLTE4NTctXG5kcml2ZXJzL2Nsay9jbGstc3RtMzJmNC5jOjE4NTg6XHRjbGtzID0ga21hbGxvY19vYmpzKCpjbGtzLCBkYXRhLVx1MDAzZWdhdGVzX251bSAmIzQzOyBzdG0zMmZ4X2VuZF9wcmltYXJ5X2Nsayk7XG5kcml2ZXJzL2Nsay9jbGstc3RtMzJmNC5jLTE4NTktXHRpZiAoIWNsa3MpXG4tLVxuZHJpdmVycy9jbGsvZGF2aW5jaS9wbGwuYz03NDM9aW50IG9mX2RhdmluY2lfcGxsX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG4tLVxuZHJpdmVycy9jbGsvZGF2aW5jaS9wbGwuYy03ODQtXG5kcml2ZXJzL2Nsay9kYXZpbmNpL3BsbC5jOjc4NTpcdFx0Y2xrcyA9IGttYWxsb2Nfb2JqcygqY2xrcywgbl9jbGtzKTtcbmRyaXZlcnMvY2xrL2RhdmluY2kvcGxsLmMtNzg2LVx0XHRpZiAoIWNsa3MpIHtcbi0tXG5kcml2ZXJzL2Nsay9kYXZpbmNpL3BzYy5jPTM2ND1fX2RhdmluY2lfcHNjX3JlZ2lzdGVyX2Nsb2NrcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9jbGsvZGF2aW5jaS9wc2MuYy0zNzgtXG5kcml2ZXJzL2Nsay9kYXZpbmNpL3BzYy5jOjM3OTpcdGNsa3MgPSBrbWFsbG9jX29ianMoKmNsa3MsIG51bV9jbGtzKTtcbmRyaXZlcnMvY2xrL2RhdmluY2kvcHNjLmMtMzgwLVx0aWYgKCFjbGtzKSB7XG4tLVxuZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMjEwLmM9MzY5Nz1zdGF0aWMgdm9pZCB0ZWdyYTIxMF9tYmlzdF9jbGtfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTIxMC5jLTM3MDctXG5kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEyMTAuYzozNzA4Olx0XHRjbGtfZGF0YSA9IGttYWxsb2Nfb2JqcygqY2xrX2RhdGEsIG51bV9jbGtzKTtcbmRyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTIxMC5jLTM3MDktXHRcdGlmIChXQVJOX09OKCFjbGtfZGF0YSkpXG4tLVxuZHJpdmVycy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmM9MTU1PXN0YXRpYyBpbnQgbmlfNjcweF9hdXRvX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jLTIwMC1cbmRyaXZlcnMvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jOjIwMTpcdFx0cmFuZ2VfdGFibGVfbGlzdCA9IGttYWxsb2Nfb2JqcygqcmFuZ2VfdGFibGVfbGlzdCwgMzIpO1xuZHJpdmVycy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmMtMjAyLVx0XHRpZiAoIXJhbmdlX3RhYmxlX2xpc3QpXG4tLVxuZHJpdmVycy9jcHVmcmVxL2JtaXBzLWNwdWZyZXEuYz02Nj1ibWlwc19jcHVmcmVxX2dldF9mcmVxX3RhYmxlKGNvbnN0IHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KVxuLS1cbmRyaXZlcnMvY3B1ZnJlcS9ibWlwcy1jcHVmcmVxLmMtNzMtXG5kcml2ZXJzL2NwdWZyZXEvYm1pcHMtY3B1ZnJlcS5jOjc0Olx0dGFibGUgPSBrbWFsbG9jX29ianMoKnRhYmxlLCBwcml2LVx1MDAzZW1heF9mcmVxcyAmIzQzOyAxKTtcbmRyaXZlcnMvY3B1ZnJlcS9ibWlwcy1jcHVmcmVxLmMtNzUtXHRpZiAoIXRhYmxlKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYz0xMzQ9c3B1X3NrY2lwaGVyX3J4X3NnX2NyZWF0ZShzdHJ1Y3QgYnJjbV9tZXNzYWdlICptc3NnLFxuLS1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xNDMtXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM6MTQ0Olx0bXNzZy1cdTAwM2VzcHUuZHN0ID0ga21hbGxvY19vYmpzKHN0cnVjdCBzY2F0dGVybGlzdCwgcnhfZnJhZ19udW0sIHJjdHgtXHUwMDNlZ2ZwKTtcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xNDUtXHRpZiAoIW1zc2ctXHUwMDNlc3B1LmRzdClcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM9MTk3PXNwdV9za2NpcGhlcl90eF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMjA2LVxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jOjIwNzpcdG1zc2ctXHUwMDNlc3B1LnNyYyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsIHR4X2ZyYWdfbnVtLCByY3R4LVx1MDAzZWdmcCk7XG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMjA4LVx0aWYgKHVubGlrZWx5KCFtc3NnLVx1MDAzZXNwdS5zcmMpKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYz01MjQ9c3B1X2FoYXNoX3J4X3NnX2NyZWF0ZShzdHJ1Y3QgYnJjbV9tZXNzYWdlICptc3NnLFxuLS1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy01MzItXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM6NTMzOlx0bXNzZy1cdTAwM2VzcHUuZHN0ID0ga21hbGxvY19vYmpzKHN0cnVjdCBzY2F0dGVybGlzdCwgcnhfZnJhZ19udW0sIHJjdHgtXHUwMDNlZ2ZwKTtcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy01MzQtXHRpZiAoIW1zc2ctXHUwMDNlc3B1LmRzdClcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM9NTc1PXNwdV9haGFzaF90eF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtNTg2LVxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jOjU4NzpcdG1zc2ctXHUwMDNlc3B1LnNyYyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsIHR4X2ZyYWdfbnVtLCByY3R4LVx1MDAzZWdmcCk7XG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtNTg4LVx0aWYgKCFtc3NnLVx1MDAzZXNwdS5zcmMpXG4tLVxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jPTEwMzg9c3RhdGljIGludCBzcHVfYWVhZF9yeF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMTA3NS1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYzoxMDc2Olx0bXNzZy1cdTAwM2VzcHUuZHN0ID0ga21hbGxvY19vYmpzKHN0cnVjdCBzY2F0dGVybGlzdCwgcnhfZnJhZ19udW0sIHJjdHgtXHUwMDNlZ2ZwKTtcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xMDc3LVx0aWYgKCFtc3NnLVx1MDAzZXNwdS5kc3QpXG4tLVxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jPTExNTc9c3RhdGljIGludCBzcHVfYWVhZF90eF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMTE3Ni1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYzoxMTc3Olx0bXNzZy1cdTAwM2VzcHUuc3JjID0ga21hbGxvY19vYmpzKHN0cnVjdCBzY2F0dGVybGlzdCwgdHhfZnJhZ19udW0sIHJjdHgtXHUwMDNlZ2ZwKTtcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xMTc4LVx0aWYgKCFtc3NnLVx1MDAzZXNwdS5zcmMpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmM9MzA2PXN0YXRpYyBzdHJ1Y3Qgc2xhX2J1ZmZlcl9oZHIgKnNsYV9idWZmZXJfbWFwKHN0cnVjdCBzbGFfYWRkcl90IHNsYSlcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy0zMzItXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYzozMzM6XHRcdHN0cnVjdCBwYWdlICoqcHAgPSBrbWFsbG9jX29ianMocHBbMF0sIG5wYWdlcyk7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy0zMzQtXG4tLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3RlbGVtZXRyeS5jPTU4PXN0YXRpYyBpbnQgYWRmX3RsX2FsbG9jX21lbShzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2KVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NzkwCgkJCQkJCQlvdXRwdXQ6IDI3NQoJCQkJCQkJdGhvdWdodHM6IDY2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtNU0FOIEltcGFjdCBvZiBhIHZob3N0LXZzb2NrIE9wdGltaXphdGlvbiBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgYGttYWxsb2Nfb2Jqc2AuIEhtbSwgdGhhdCYjMzk7cyBub3QgdGhlIHN0YW5kYXJkIGBrbWFsbG9jX2FycmF5YCwgc28gaXQmIzM5O3MgcHJvYmFibHkgYSBjdXN0b20gbWFjcm8uIEkgbmVlZCB0byBjaGVjayB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBPaCwgaXQmIzM5O3MgZGVwcmVjYXRlZCEgSW50ZXJlc3RpbmcuIExpbmUgNTE5IG9mIGBkcml2ZXJzL3Zob3N0L3Zob3N0LmNgIGxvb2tzIHJlbGV2YW50OiBgdnEtJmd0O2hlYWRzID0ga21hbGxvY19hcnJheShkZXYtJmd0O2lvdl9saW1pdCwgc2l6ZW9mKCp2cS0mZ3Q7aGVhZHMpLCBHRlBfS0VSTkVMKTtgIFRoZSBncmVwIG91dHB1dCBzaG93cyB0aGUgb3JpZ2luYWwgY29kZSB1c2VkIGBrbWFsbG9jX29ianNgLCB3aGljaCBpcyBsaWtlbHkgYSBtYWNybyBzaW1pbGFyIHRvIGBrbWFsbG9jX2FycmF5YCwgYWxsb2NhdGluZyBhbiBhcnJheSBvZiBgZGV2LSZndDtpb3ZfbGltaXRgIGVsZW1lbnRzLiBBbmQgeWVzLCB0aGUgYHVzZWRfbGltaXRgIGlzIGluZGVlZCBib3VuZGVkIGJ5IGBkZXYtJmd0O2lvdl9saW1pdGAsIHNvIHRoZSBhbGxvY2F0aW9uIGlzIHN1ZmZpY2llbnQuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciBLTVNBTiB2ZXJzdXMgS0FTQU4uIEtNU0FOIGlzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgd2hpbGUgS0FTQU4gaXMgZm9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGJhdGNoaW5nIHVzZWQgZWxlbWVudCB1cGRhdGVzLCBzcGVjaWZpY2FsbHkgcG9wdWxhdGluZyB0aGUgYHZxLSZndDtoZWFkc2AgYXJyYXkgd2l0aCBgdXNlZC0mZ3Q7aWRgIGFuZCBgdXNlZC0mZ3Q7bGVuYC4gQm90aCBmaWVsZHMgYXJlIGluaXRpYWxpemVkLiBBbmQgZ29vZCwgdGhlcmUmIzM5O3Mgbm8gcGFkZGluZyBpbiB0aGUgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gLiBUaGVuLCBgdmhvc3RfcHV0X3VzZWRgIGNvcGllcyB0aGlzIGFycmF5IHRvIHVzZXIgc3BhY2UsIGNhbGxpbmcgYHZob3N0X2NvcHlfdG9fdXNlcmAuIFNpbmNlIHRoZSBtZW1vcnkgYmVpbmcgY29waWVkICppcyogZnVsbHkgaW5pdGlhbGl6ZWQsIHRoZXJlJiMzOTtzIG5vIHdheSB0byBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4KClNvLCBoZXJlJiMzOTtzIHRoZSByZWFzb25pbmcgdG8gcHV0IGRvd24uIFRoZSBwYXRjaCBpcyBvcHRpbWl6aW5nIHRoZSB2aXJ0aW8gdnNvY2sgdHJhbnNtaXNzaW9uIHBhdGggYnkgYmF0Y2hpbmcgdXBkYXRlcy4gSXQgaW50cm9kdWNlcyBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIHRvIHBvcHVsYXRlIGFuIGFycmF5IChgdnEtJmd0O2hlYWRzYCkgd2l0aCBgc3RydWN0IHZyaW5nX3VzZWRfZWxlbWAgYW5kIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCB0byBmbHVzaCB0byBndWVzdCBtZW1vcnkuIFRoZSBgc3RydWN0IHZyaW5nX3VzZWRfZWxlbWAgY29uc2lzdHMgb2YgdHdvIDMyLWJpdCBpbnRlZ2VycywgYGlkYCBhbmQgYGxlbmAsIHdpdGggbm8gcGFkZGluZy4gVGhlc2UgZmllbGRzIGFyZSAqZXhwbGljaXRseSogaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBjb3B5LiBUaGUgYXJyYXkgYm91bmRzIGFyZSBhbHNvIGNoZWNrZWQgYWdhaW5zdCBgZGV2LSZndDtpb3ZfbGltaXRgLiBUaGlzIGNvbXBsZXRlbHkgZWxpbWluYXRlcyBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFraW5nIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IG5lZWQgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuIEl0JiMzOTtzIHNhZmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyB0aGUgdmlydGlvIHZzb2NrIHRyYW5zbWlzc2lvbiBwYXRoIGJ5IGJhdGNoaW5nIHVzZWQgZWxlbWVudCB1cGRhdGVzLiBJdCBpbnRyb2R1Y2VzIGB2aG9zdF92c29ja19hZGRfdXNlZGAgdG8gcG9wdWxhdGUgYW4gYXJyYXkgb2YgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIChgdnEtXHUwMDNlaGVhZHNgKSBhbmQgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgIHRvIGZsdXNoIHRoZW0gdG8gdGhlIGd1ZXN0IG1lbW9yeSB2aWEgYHZob3N0X2FkZF91c2VkX25gLlxuVGhlIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCBjb25zaXN0cyBvZiB0d28gMzItYml0IGludGVnZXJzIChgaWRgIGFuZCBgbGVuYCkgYW5kIGNvbnRhaW5zIG5vIHBhZGRpbmcgYnl0ZXMuIEJvdGggZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGB2aG9zdF92c29ja19hZGRfdXNlZGAgYmVmb3JlIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIChndWVzdCBtZW1vcnkpIHZpYSBgdmhvc3RfcHV0X3VzZWRgIGFuZCBgdmhvc3RfY29weV90b191c2VyYC5cblNpbmNlIHRoZSBtZW1vcnkgYmVpbmcgY29waWVkIGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCB0aGVyZSBhcmUgbm8gcGFkZGluZyBieXRlcywgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgYm91bmRzIG9mIHRoZSBhcnJheSBhcmUgYWxzbyBwcm9wZXJseSBjaGVja2VkIGFnYWluc3QgYGRldi1cdTAwM2Vpb3ZfbGltaXRgLCBwcmV2ZW50aW5nIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW55d2F5KS5cblRodXMsIHRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgdGhlIHZpcnRpbyB2c29jayB0cmFuc21pc3Npb24gcGF0aCBieSBiYXRjaGluZyB1c2VkIGVsZW1lbnQgdXBkYXRlcy4gSXQgaW50cm9kdWNlcyBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIHRvIHBvcHVsYXRlIGFuIGFycmF5IG9mIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCAoYHZxLVx1MDAzZWhlYWRzYCkgYW5kIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCB0byBmbHVzaCB0aGVtIHRvIHRoZSBndWVzdCBtZW1vcnkgdmlhIGB2aG9zdF9hZGRfdXNlZF9uYC5cblRoZSBgc3RydWN0IHZyaW5nX3VzZWRfZWxlbWAgY29uc2lzdHMgb2YgdHdvIDMyLWJpdCBpbnRlZ2VycyAoYGlkYCBhbmQgYGxlbmApIGFuZCBjb250YWlucyBubyBwYWRkaW5nIGJ5dGVzLiBCb3RoIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIGJlZm9yZSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSAoZ3Vlc3QgbWVtb3J5KSB2aWEgYHZob3N0X3B1dF91c2VkYCBhbmQgYHZob3N0X2NvcHlfdG9fdXNlcmAuXG5TaW5jZSB0aGUgbWVtb3J5IGJlaW5nIGNvcGllZCBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgdGhlcmUgYXJlIG5vIHBhZGRpbmcgYnl0ZXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlIGJvdW5kcyBvZiB0aGUgYXJyYXkgYXJlIGFsc28gcHJvcGVybHkgY2hlY2tlZCBhZ2FpbnN0IGBkZXYtXHUwMDNlaW92X2xpbWl0YCwgcHJldmVudGluZyBhbnkgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyAod2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFueXdheSkuXG5UaHVzLCB0aGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjoyOToyMS4wMjAxNTU1NTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDgxNjMzNjcyNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfVlNPQ0tcIixcbiAgICBcIlZTT0NLRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0XCIsXG4gICAgXCJ2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyB0aGUgdmlydGlvIHZzb2NrIHRyYW5zbWlzc2lvbiBwYXRoIGJ5IGJhdGNoaW5nIHVzZWQgZWxlbWVudCB1cGRhdGVzLiBJdCBpbnRyb2R1Y2VzIGB2aG9zdF92c29ja19hZGRfdXNlZGAgdG8gcG9wdWxhdGUgYW4gYXJyYXkgb2YgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIChgdnEtXFx1MDAzZWhlYWRzYCkgYW5kIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCB0byBmbHVzaCB0aGVtIHRvIHRoZSBndWVzdCBtZW1vcnkgdmlhIGB2aG9zdF9hZGRfdXNlZF9uYC5cXG5UaGUgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIGNvbnNpc3RzIG9mIHR3byAzMi1iaXQgaW50ZWdlcnMgKGBpZGAgYW5kIGBsZW5gKSBhbmQgY29udGFpbnMgbm8gcGFkZGluZyBieXRlcy4gQm90aCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYHZob3N0X3Zzb2NrX2FkZF91c2VkYCBiZWZvcmUgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UgKGd1ZXN0IG1lbW9yeSkgdmlhIGB2aG9zdF9wdXRfdXNlZGAgYW5kIGB2aG9zdF9jb3B5X3RvX3VzZXJgLlxcblNpbmNlIHRoZSBtZW1vcnkgYmVpbmcgY29waWVkIGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCB0aGVyZSBhcmUgbm8gcGFkZGluZyBieXRlcywgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgYm91bmRzIG9mIHRoZSBhcnJheSBhcmUgYWxzbyBwcm9wZXJseSBjaGVja2VkIGFnYWluc3QgYGRldi1cXHUwMDNlaW92X2xpbWl0YCwgcHJldmVudGluZyBhbnkgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyAod2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFueXdheSkuXFxuVGh1cywgdGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmhvc3QgdnNvY2sgZHJpdmVyIHRvIGJhdGNoIHVzZWQgZWxlbWVudHMgd2hlbiBzZW5kaW5nIHBhY2tldHMgdG8gdGhlIGd1ZXN0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgdmhvc3QgdnNvY2sgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjI5OjIxLjAyMDE2NDM0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxNDA4ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTg3OWFiZjQ0M2M0YWY5NjhiZmZkYjUxMDU4NTMwNTI0YjFiMzQwMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyNyAwNjoyOToyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmMgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcXG5pbmRleCA5YWFhYjZiYjgwNjFjLi5kODA1MGNjYTI3NWRhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmhvc3QvdnNvY2suY1xcbisrKyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suY1xcbkBAIC0xMDMsMTIgKzEwMywzNyBAQCBzdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfaGFzX3JlbW90ZV9jaWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgdTMyIGNpZClcXG4gXFx0cmV0dXJuIGZvdW5kO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCB2aG9zdF92c29ja19mbHVzaF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgKnVzZWRfY291bnQpXFxuK3tcXG4rXFx0aWYgKCEqdXNlZF9jb3VudClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0dmhvc3RfYWRkX3VzZWRfbih2cSwgdnEtXFx1MDAzZWhlYWRzLCB2cS1cXHUwMDNlbmhlYWRzLCAqdXNlZF9jb3VudCk7XFxuK1xcdCp1c2VkX2NvdW50ID0gMDtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2FkZF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbitcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50ICp1c2VkX2NvdW50LFxcbitcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IGhlYWQsIHVuc2lnbmVkIGludCBsZW4pXFxuK3tcXG4rXFx0c3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqdXNlZCA9IFxcdTAwMjZ2cS1cXHUwMDNlaGVhZHNbKnVzZWRfY291bnRdO1xcbitcXG4rXFx0dXNlZC1cXHUwMDNlaWQgPSBjcHVfdG9fdmhvc3QzMih2cSwgaGVhZCk7XFxuK1xcdHVzZWQtXFx1MDAzZWxlbiA9IGNwdV90b192aG9zdDMyKHZxLCBsZW4pO1xcbitcXHR2cS1cXHUwMDNlbmhlYWRzWyp1c2VkX2NvdW50XSA9IDE7XFxuK1xcdCgqdXNlZF9jb3VudCkrKztcXG4rfVxcbitcXG4gc3RhdGljIHZvaWRcXG4gdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp0eF92cSA9IFxcdTAwMjZ2c29jay1cXHUwMDNldnFzW1ZTT0NLX1ZRX1RYXTtcXG4gXFx0aW50IHBrdHMgPSAwLCB0b3RhbF9sZW4gPSAwO1xcbitcXHR1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCA9IDA7XFxuK1xcdHVuc2lnbmVkIGludCB1c2VkX2xpbWl0O1xcbiBcXHRib29sIGFkZGVkID0gZmFsc2U7XFxuIFxcdGJvb2wgcmVzdGFydF90eCA9IGZhbHNlO1xcbiBcXG5AQCAtMTIwLDYgKzE0NSwxMiBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcXG4gXFx0aWYgKCF2cV9tZXRhX3ByZWZldGNoKHZxKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbitcXHR1c2VkX2xpbWl0ID0gbWluX3QodW5zaWduZWQgaW50LCB2cS1cXHUwMDNlbnVtLFxcbitcXHRcXHRcXHQgICBtaW5fdCh1bnNpZ25lZCBpbnQsIHZxLVxcdTAwM2VkZXYtXFx1MDAzZWlvdl9saW1pdCxcXG4rXFx0XFx0XFx0XFx0IHZxLVxcdTAwM2VkZXYtXFx1MDAzZXdlaWdodCkpO1xcbitcXHRpZiAodW5saWtlbHkoIXVzZWRfbGltaXQpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuIFxcdC8qIEF2b2lkIGZ1cnRoZXIgdm1leGl0cywgd2UncmUgYWxyZWFkeSBwcm9jZXNzaW5nIHRoZSB2aXJ0cXVldWUgKi9cXG4gXFx0dmhvc3RfZGlzYWJsZV9ub3RpZnkoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHZxKTtcXG4gXFxuQEAgLTEzNCw5ICsxNjUsMTMgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXFxuIFxcdFxcdHUzMiBvZmZzZXQ7XFxuIFxcdFxcdGludCBoZWFkO1xcbiBcXG4rXFx0XFx0aWYgKHVzZWRfY291bnQgPT0gdXNlZF9saW1pdClcXG4rXFx0XFx0XFx0YWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgXFx1MDAyNnVzZWRfY291bnQpO1xcbitcXG4gXFx0XFx0c2tiID0gdmlydGlvX3Zzb2NrX3NrYl9kZXF1ZXVlKFxcdTAwMjZ2c29jay1cXHUwMDNlc2VuZF9wa3RfcXVldWUpO1xcbiBcXG4gXFx0XFx0aWYgKCFza2IpIHtcXG4rXFx0XFx0XFx0YWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgXFx1MDAyNnVzZWRfY291bnQpO1xcbiBcXHRcXHRcXHR2aG9zdF9lbmFibGVfbm90aWZ5KFxcdTAwMjZ2c29jay1cXHUwMDNlZGV2LCB2cSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuQEAgLTE1Myw2ICsxODgsNyBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcXG4gXFx0XFx0XFx0LyogV2UgY2Fubm90IGZpbmlzaCB5ZXQgaWYgbW9yZSBidWZmZXJzIHNudWNrIGluIHdoaWxlXFxuIFxcdFxcdFxcdCAqIHJlLWVuYWJsaW5nIG5vdGlmeS5cXG4gXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIFxcdTAwMjZ1c2VkX2NvdW50KTtcXG4gXFx0XFx0XFx0aWYgKHVubGlrZWx5KHZob3N0X2VuYWJsZV9ub3RpZnkoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHZxKSkpIHtcXG4gXFx0XFx0XFx0XFx0dmhvc3RfZGlzYWJsZV9ub3RpZnkoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHZxKTtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTIzMCw4ICsyNjYsOCBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcXG4gXFx0XFx0ICovXFxuIFxcdFxcdHZpcnRpb190cmFuc3BvcnRfZGVsaXZlcl90YXBfcGt0KHNrYik7XFxuIFxcbi1cXHRcXHR2aG9zdF9hZGRfdXNlZCh2cSwgaGVhZCwgc2l6ZW9mKCpoZHIpICsgcGF5bG9hZF9sZW4pO1xcbi1cXHRcXHRhZGRlZCA9IHRydWU7XFxuK1xcdFxcdHZob3N0X3Zzb2NrX2FkZF91c2VkKHZxLCBcXHUwMDI2dXNlZF9jb3VudCwgaGVhZCxcXG4rXFx0XFx0XFx0XFx0ICAgICBzaXplb2YoKmhkcikgKyBwYXlsb2FkX2xlbik7XFxuIFxcbiBcXHRcXHRWSVJUSU9fVlNPQ0tfU0tCX0NCKHNrYiktXFx1MDAzZW9mZnNldCArPSBwYXlsb2FkX2xlbjtcXG4gXFx0XFx0dG90YWxfbGVuICs9IHBheWxvYWRfbGVuO1xcbkBAIC0yNjQsNiArMzAwLDcgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXFxuIFxcdFxcdFxcdHZpcnRpb190cmFuc3BvcnRfY29uc3VtZV9za2Jfc2VudChza2IsIHRydWUpO1xcbiBcXHRcXHR9XFxuIFxcdH0gd2hpbGUobGlrZWx5KCF2aG9zdF9leGNlZWRzX3dlaWdodCh2cSwgKytwa3RzLCB0b3RhbF9sZW4pKSk7XFxuK1xcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIFxcdTAwMjZ1c2VkX2NvdW50KTtcXG4gXFx0aWYgKGFkZGVkKVxcbiBcXHRcXHR2aG9zdF9zaWduYWwoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHZxKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjI5OjIxLjUwMjIzNTQ5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUyNTYxODczNjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1ZTT0NLXCIsXG4gICAgXCJWU09DS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdFwiLFxuICAgIFwidmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZob3N0IHZzb2NrIGRyaXZlciB0byBiYXRjaCB1c2VkIGVsZW1lbnRzIHdoZW4gc2VuZGluZyBwYWNrZXRzIHRvIHRoZSBndWVzdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZob3N0IHZzb2NrIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ODc5YWJmNDQzYzRhZjk2OGJmZmRiNTEwNTg1MzA1MjRiMWIzNDAxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMDY6Mjk6MjAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmMgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbmluZGV4IDlhYWFiNmJiODA2MWMuLmQ4MDUwY2NhMjc1ZGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbisrKyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suY1xuQEAgLTEwMywxMiArMTAzLDM3IEBAIHN0YXRpYyBib29sIHZob3N0X3RyYW5zcG9ydF9oYXNfcmVtb3RlX2NpZChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLCB1MzIgY2lkKVxuIFx0cmV0dXJuIGZvdW5kO1xuIH1cbiBcbitzdGF0aWMgYm9vbCB2aG9zdF92c29ja19mbHVzaF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgaW50ICp1c2VkX2NvdW50KVxuK3tcbitcdGlmICghKnVzZWRfY291bnQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHZob3N0X2FkZF91c2VkX24odnEsIHZxLVx1MDAzZWhlYWRzLCB2cS1cdTAwM2VuaGVhZHMsICp1c2VkX2NvdW50KTtcbitcdCp1c2VkX2NvdW50ID0gMDtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgdm9pZCB2aG9zdF92c29ja19hZGRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbitcdFx0XHRcdCB1bnNpZ25lZCBpbnQgKnVzZWRfY291bnQsXG4rXHRcdFx0XHQgdW5zaWduZWQgaW50IGhlYWQsIHVuc2lnbmVkIGludCBsZW4pXG4re1xuK1x0c3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqdXNlZCA9IFx1MDAyNnZxLVx1MDAzZWhlYWRzWyp1c2VkX2NvdW50XTtcbitcbitcdHVzZWQtXHUwMDNlaWQgPSBjcHVfdG9fdmhvc3QzMih2cSwgaGVhZCk7XG4rXHR1c2VkLVx1MDAzZWxlbiA9IGNwdV90b192aG9zdDMyKHZxLCBsZW4pO1xuK1x0dnEtXHUwMDNlbmhlYWRzWyp1c2VkX2NvdW50XSA9IDE7XG4rXHQoKnVzZWRfY291bnQpKys7XG4rfVxuK1xuIHN0YXRpYyB2b2lkXG4gdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRcdFx0ICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxuIHtcbiBcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnR4X3ZxID0gXHUwMDI2dnNvY2stXHUwMDNldnFzW1ZTT0NLX1ZRX1RYXTtcbiBcdGludCBwa3RzID0gMCwgdG90YWxfbGVuID0gMDtcbitcdHVuc2lnbmVkIGludCB1c2VkX2NvdW50ID0gMDtcbitcdHVuc2lnbmVkIGludCB1c2VkX2xpbWl0O1xuIFx0Ym9vbCBhZGRlZCA9IGZhbHNlO1xuIFx0Ym9vbCByZXN0YXJ0X3R4ID0gZmFsc2U7XG4gXG5AQCAtMTIwLDYgKzE0NSwxMiBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcbiBcdGlmICghdnFfbWV0YV9wcmVmZXRjaCh2cSkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0dXNlZF9saW1pdCA9IG1pbl90KHVuc2lnbmVkIGludCwgdnEtXHUwMDNlbnVtLFxuK1x0XHRcdCAgIG1pbl90KHVuc2lnbmVkIGludCwgdnEtXHUwMDNlZGV2LVx1MDAzZWlvdl9saW1pdCxcbitcdFx0XHRcdCB2cS1cdTAwM2VkZXYtXHUwMDNld2VpZ2h0KSk7XG4rXHRpZiAodW5saWtlbHkoIXVzZWRfbGltaXQpKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdC8qIEF2b2lkIGZ1cnRoZXIgdm1leGl0cywgd2UncmUgYWxyZWFkeSBwcm9jZXNzaW5nIHRoZSB2aXJ0cXVldWUgKi9cbiBcdHZob3N0X2Rpc2FibGVfbm90aWZ5KFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIFxuQEAgLTEzNCw5ICsxNjUsMTMgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRcdHUzMiBvZmZzZXQ7XG4gXHRcdGludCBoZWFkO1xuIFxuK1x0XHRpZiAodXNlZF9jb3VudCA9PSB1c2VkX2xpbWl0KVxuK1x0XHRcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIFx1MDAyNnVzZWRfY291bnQpO1xuK1xuIFx0XHRza2IgPSB2aXJ0aW9fdnNvY2tfc2tiX2RlcXVldWUoXHUwMDI2dnNvY2stXHUwMDNlc2VuZF9wa3RfcXVldWUpO1xuIFxuIFx0XHRpZiAoIXNrYikge1xuK1x0XHRcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIFx1MDAyNnVzZWRfY291bnQpO1xuIFx0XHRcdHZob3N0X2VuYWJsZV9ub3RpZnkoXHUwMDI2dnNvY2stXHUwMDNlZGV2LCB2cSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC0xNTMsNiArMTg4LDcgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRcdFx0LyogV2UgY2Fubm90IGZpbmlzaCB5ZXQgaWYgbW9yZSBidWZmZXJzIHNudWNrIGluIHdoaWxlXG4gXHRcdFx0ICogcmUtZW5hYmxpbmcgbm90aWZ5LlxuIFx0XHRcdCAqL1xuK1x0XHRcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIFx1MDAyNnVzZWRfY291bnQpO1xuIFx0XHRcdGlmICh1bmxpa2VseSh2aG9zdF9lbmFibGVfbm90aWZ5KFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpKSkge1xuIFx0XHRcdFx0dmhvc3RfZGlzYWJsZV9ub3RpZnkoXHUwMDI2dnNvY2stXHUwMDNlZGV2LCB2cSk7XG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC0yMzAsOCArMjY2LDggQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRcdCAqL1xuIFx0XHR2aXJ0aW9fdHJhbnNwb3J0X2RlbGl2ZXJfdGFwX3BrdChza2IpO1xuIFxuLVx0XHR2aG9zdF9hZGRfdXNlZCh2cSwgaGVhZCwgc2l6ZW9mKCpoZHIpICsgcGF5bG9hZF9sZW4pO1xuLVx0XHRhZGRlZCA9IHRydWU7XG4rXHRcdHZob3N0X3Zzb2NrX2FkZF91c2VkKHZxLCBcdTAwMjZ1c2VkX2NvdW50LCBoZWFkLFxuK1x0XHRcdFx0ICAgICBzaXplb2YoKmhkcikgKyBwYXlsb2FkX2xlbik7XG4gXG4gXHRcdFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQgKz0gcGF5bG9hZF9sZW47XG4gXHRcdHRvdGFsX2xlbiArPSBwYXlsb2FkX2xlbjtcbkBAIC0yNjQsNiArMzAwLDcgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRcdFx0dmlydGlvX3RyYW5zcG9ydF9jb25zdW1lX3NrYl9zZW50KHNrYiwgdHJ1ZSk7XG4gXHRcdH1cbiBcdH0gd2hpbGUobGlrZWx5KCF2aG9zdF9leGNlZWRzX3dlaWdodCh2cSwgKytwa3RzLCB0b3RhbF9sZW4pKSk7XG4rXHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCBcdTAwMjZ1c2VkX2NvdW50KTtcbiBcdGlmIChhZGRlZClcbiBcdFx0dmhvc3Rfc2lnbmFsKFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6Mjk6MjEuNTAyMjM2NTQxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM0OTM2MDA0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZob3N0IHZzb2NrIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGRyaXZlcnMvdmhvc3QvdnNvY2suY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAuIEluc3RlYWQgb2YgdGhlIG9sZCwgcGVyLXBhY2tldCBgdmhvc3RfYWRkX3VzZWRgIGFwcHJvYWNoLCB0aGV5J3JlIG5vdyBiYXRjaGluZyB3aXRoIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCBhbmQgYHZob3N0X3Zzb2NrX2FkZF91c2VkYC4gVGhhdCdzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24sIGZvciBzdXJlIOKAkyBwb3RlbnRpYWxseSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYW5kIGl0J2xsIGJlIHdvcnRoIGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvbiB0aGUgdXNlZCByaW5nIGJ1ZmZlci4gV2UgbWlnaHQgaGF2ZSBzb21lIG9yZGVyaW5nIHJlcXVpcmVtZW50cyBvciBzb21lIGxvY2tpbmcgY29uY2VybnMgYXMgYSByZXN1bHQuXG5cblRoZSBuZXh0IGltbWVkaWF0ZSBzdGVwIGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBiYXRjaGluZyBjaGFuZ2UgaXMgY29uZGl0aW9uYWwgb24gYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLCBvciBpZiBpdCdzIGFwcGxpZWQgdW5pdmVyc2FsbHkuIEkgd2lsbCBjcm9zcy1yZWZlcmVuY2UgdGhlIEtjb25maWcgZm9yIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgIHRvIGNsYXJpZnkgYW55IGRlcGVuZGVuY2llcyBvciBidWlsZCBvcHRpb25zIHRoYXQgYWZmZWN0IHRoaXMgY29kZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDU2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6Mjk6MjkuODUxNTk5MDg2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTQzNDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92c29jay5jPTEyOT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMzA6dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXFxuZHJpdmVycy92aG9zdC92c29jay5jLTEzMS1cXHRcXHRcXHQgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MzE0PXN0YXRpYyB2b2lkIHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTMyMS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzIyOlxcdHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCh2c29jaywgdnEpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMjMtfVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTMyNj12aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTM0OS1cXHQgKiBhbGwgdGhlIG91dGNvbWVzIGNvdmVyZWQ6IGlmIHRoZSBiYWNrZW5kIGJlY29tZXMgTlVMTCByaWdodCBhZnRlciB0aGUgY2hlY2ssXFxuZHJpdmVycy92aG9zdC92c29jay5jOjM1MDpcXHQgKiB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QoKSB3aWxsIGNoZWNrIGl0IHVuZGVyIHRoZSBtdXRleCBhbnl3YXkuXFxuZHJpdmVycy92aG9zdC92c29jay5jLTM1MS1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz02Mzg9c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfaGFuZGxlX3J4X2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjQ0LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo2NDU6XFx0dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHZzb2NrLCB2cSk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTY0Ni19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjI5OjI5Ljg5NDc0NTQ5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMzYzMjQ4NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIE1vZHVsZSBJbnZlc3RpZ2F0aW9uOiB2aG9zdF92c29jayoqXG5cbk9rYXksIHNvIHRoZSBpbnZlc3RpZ2F0aW9uIGJlZ2lucy4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgXCJXaGF0J3MgdGhlIGRyaXZlcj9cIiBUaGUgdGV4dCBpZGVudGlmaWVzIGl0IGFzIGB2aG9zdF92c29ja2AuIE1ha2VzIHNlbnNlLCBJJ3ZlIHdvcmtlZCB3aXRoIHZpcnRpbyBhbmQgdmhvc3QgYmVmb3JlLiBCdXQgSSBuZWVkIG1vcmUgY29uY3JldGUgaW5mb3JtYXRpb24uIFRpbWUgdG8gZGVsdmUgaW50byB0aGUga2VybmVsJ3MgYnVpbGQgY29uZmlndXJhdGlvbi4gSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGBLY29uZmlnYCBmaWxlIGFzc29jaWF0ZWQgd2l0aCBgdmhvc3RfdnNvY2tgLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgZXNzZW50aWFsIG1ldGFkYXRhOiBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgY29uZmlndXJhdGlvbnMsIGFueSByZWxldmFudCBkb2N1bWVudGF0aW9uIHJlZmVyZW5jZXMsIGFuZCBnZW5lcmFsbHksIHRoZSBjb250ZXh0IG9mIGhvdyB0aGlzIG1vZHVsZSBmaXRzIGludG8gdGhlIGJyb2FkZXIga2VybmVsIGVjb3N5c3RlbS4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGZlYXR1cmVzLCBidWlsZCBvcHRpb25zLCBhbmQgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODU1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6Mjk6MzUuOTMxMDcyNDg2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTU3NjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZzb2NrLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L01ha2VmaWxlPTY9dmhvc3Rfc2NzaS15IDo9IHNjc2kub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtNy1cXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1ZIT1NUX1ZTT0NLKSArPSB2aG9zdF92c29jay5vXFxuZHJpdmVycy92aG9zdC9NYWtlZmlsZTo5OnZob3N0X3Zzb2NrLXkgOj0gdnNvY2sub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjI5OjM1Ljk3NjIzNDkyNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTM2ODA3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSdtIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSB2aG9zdF92c29jayBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBDT05GSUdfVkhPU1RfVlNPQ0tgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBJIG5lZWQgdG8gZm9jdXMgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGl0cyBwdXJwb3NlLCBhbmQgcG90ZW50aWFsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGZlYXR1cmVzLiBNeSB1c3VhbCBhcHByb2FjaCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSwgc28gSSdsbCBnbyBjaGVjayBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBmb3IgdGhlIGBWSE9TVF9WU09DS2Agb3B0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGFuZCBjb250ZXh0IGZvciB0aGlzIHNldHRpbmcgc2hvdWxkIHJlc2lkZS4gSXQncyB0aGUgc3RhbmRhcmQgd2F5IHRvIHRyYWNlIHRoZSBjb25maWcgb3B0aW9ucyBpbiB0aGUga2VybmVsLCBzbyB0aGlzIGlzIHdoZXJlIEknbGwgYmVnaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNzUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjoyOTozOS41Mjk5MTc0MDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwNTY2MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZIT1NUX1ZTT0NLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWc9NDY9Y29uZmlnIFZIT1NUX1NDU0lcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01NS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTY6Y29uZmlnIFZIT1NUX1ZTT0NLXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU3LVxcdHRyaXN0YXRlIFxcXCJ2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjoyOTozOS41NzI5Nzc3NzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDAzOTA3NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoaXMuIExldCdzIHN0YXJ0IGJyZWFraW5nIHRoaXMgZG93bi5cblxuKipVbnBhY2tpbmcgdGhlIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIG15IGluaXRpYWwgcmVhY3Rpb24gaXMgdG8gZmlndXJlIG91dCB0aGUgY3JpdGljYWwgZGVwZW5kZW5jaWVzIGF0IHBsYXkgaGVyZS4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGEgc3VyZmFjZS1sZXZlbCB1bmRlcnN0YW5kaW5nOyBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNvcmUgZWxlbWVudHMgdGhhdCB1bmRlcnBpbiB0aGUgc2l0dWF0aW9uLiBXaGF0IGFyZSB0aGUgdmFyaWFibGVzIGFuZCBjb25kaXRpb25zIHRoYXQgZHJpdmUgdGhpcz8gQXJlIHRoZXJlIGFueSBoaWRkZW4gYXNzdW1wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGFkZHJlc3NlZD8gTXkgZm9jdXMgaXMgdG8gY3JlYXRlIGEgc3RydWN0dXJlIHRvIGJ1aWxkIGEgcm9idXN0IG1vZGVsIHRvIGV4cGxhaW4gdGhpcyBwcm9ibGVtLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQgdG8gc2VlIHRoZSBiaWdnZXIgcGljdHVyZSwgYW5kIHRoYXQncyB0aGUgb25seSBwbGFjZSB0byBzdGFydCB0byBnbyBkZWVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDg5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjoyOTo0My45NzY4ODc3MzRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcxMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU2LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDU2OlxcdGNvbmZpZyBWSE9TVF9WU09DS1xcbiAgNTc6XFx0XFx0dHJpc3RhdGUgXFxcInZob3N0IHZpcnRpby12c29jayBkcml2ZXJcXFwiXFxuICA1ODpcXHRcXHRkZXBlbmRzIG9uIFZTT0NLRVRTIFxcdTAwMjZcXHUwMDI2IEVWRU5URkRcXG4gIDU5OlxcdFxcdHNlbGVjdCBWSE9TVFxcbiAgNjA6XFx0XFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cXG4gIDYxOlxcdFxcdGRlZmF1bHQgblxcbiAgNjI6XFx0XFx0aGVscFxcbiAgNjM6XFx0XFx0VGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gdGhlIGhvc3Qga2VybmVsIHRvIHByb3ZpZGUgQUZfVlNPQ0tcXG4gIDY0OlxcdFxcdHNvY2tldHMgZm9yIGNvbW11bmljYXRpbmcgd2l0aCBndWVzdHMuICBUaGUgZ3Vlc3RzIG11c3QgaGF2ZSB0aGVcXG4gIDY1OlxcdFxcdHZpcnRpb190cmFuc3BvcnQua28gZHJpdmVyIGxvYWRlZCB0byB1c2UgdGhlIHZpcnRpby12c29jayBkZXZpY2UuXFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcXG4gIDY4OlxcdFxcdHZob3N0X3Zzb2NrLlxcbiAgNjk6XFx0XFxuICA3MDpcXHRjb25maWcgVkhPU1RfVkRQQVxcbiAgNzE6XFx0XFx0dHJpc3RhdGUgXFxcIlZob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXFxcIlxcbiAgNzI6XFx0XFx0ZGVwZW5kcyBvbiBFVkVOVEZEXFxuICA3MzpcXHRcXHRzZWxlY3QgVkhPU1RcXG4gIDc0OlxcdFxcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcXG4gIDc1OlxcdFxcdGRlcGVuZHMgb24gVkRQQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjoyOTo0My45NzY5NTcxODNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM2ODQ1ODE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgdmhvc3RfdnNvY2tgIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gdGhlIHByZXJlcXVpc2l0ZXM6IGl0IGhpbmdlcyBvbiBgVlNPQ0tFVFNgIGFuZCBgRVZFTlRGRGAsIGFuZCBzcGVjaWZpY2FsbHksIGl0IHRhcmdldHMgdGhlIGBWSE9TVF9WU09DS2AgY29uZmlndXJhdGlvbi4gVGhhdCdzIGdvb2QgdG8ga25vdyDigJMgbmFycm93cyBkb3duIHRoZSBzY29wZSByaWdodCBhd2F5LlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgLiBUaGF0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgZnVuZGFtZW50YWwgdG8gcGFja2V0IHNlbmRpbmcgd2l0aGluIGB2aG9zdF92c29ja2AuIEFuZCB0aGUgcGF0Y2ggaXMgYmF0Y2hpbmcgdGhlIHVzZWQgZWxlbWVudHMgd2l0aGluIHRoaXMgZnVuY3Rpb24uIE1ha2VzIHNlbnNlOyBvcHRpbWl6YXRpb24gaXMgYWx3YXlzIGEgZ29vZCB0aGluZy4gR2l2ZW4gdGhhdCBpdCdzIGluIHRoZSBjb3JlIGtlcm5lbCBsb2dpYyBmb3IgYHZob3N0X3Zzb2NrYCwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJJ2QgZmxhZyBhcyBcIldvcnRoRnV6emluZz10cnVlLlwiIEl0J3MgcmVhY2hhYmxlLCBhbmQgdGhhdCBiYXRjaGluZyBjb3VsZCBpbnRyb2R1Y2UgdW5leHBlY3RlZCBlZGdlIGNhc2VzLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uOiBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCwgb2J2aW91c2x5LCBidXQgYWxzbyBgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZGAgYW5kIGB2aG9zdF92c29ja19hZGRfdXNlZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQuXG5cbldhaXQsIGhvbGQgb24uLi4gdGhvc2UgbGFzdCB0d28gYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBSaWdodCwgcmlnaHQuIFRoYXQgbWVhbnMgdGhleSdyZSBsaWtlbHkgbm90IGludGVuZGVkIGZvciBkaXJlY3QgZXh0ZXJuYWwgdXNlLiBJIHdvbmRlciBpZiB0aGV5J3JlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyPyBMZXQgbWUganVzdCBjaGVjayB0aGUgZGVmaW5pdGlvbnMuLi4gTm9wZSwgdGhleSdyZSBgc3RhdGljIGJvb2xgIGFuZCBgc3RhdGljIHZvaWRgLCBzbyB0aGV5ICpjb3VsZCogYmUgaW5saW5lZC4gQ29tcGlsZXIgb3B0aW1pemF0aW9uIGlzIGFsd2F5cyBhIGZhY3RvciB0byBjb25zaWRlci4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkaXNhc3NlbWJseSB0byBiZSBzdXJlLiBBbHNvLCBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCBpcyBhbHNvIHN0YXRpYywgYnV0IGl0J3MgYSBsYXJnZXIgZnVuY3Rpb24sIHNvIGl0J3MgbGVzcyBsaWtlbHkgdG8gYmUgZnVsbHkgaW5saW5lZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGlkZW50aWZ5ICphbnkqIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHRoYXQgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbmFsaXR5LCBzbyBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBhdHRhY2sgc3VyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk0NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjI5OjUwLjM0NTQxNzE5MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3ODE2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvdnNvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTI5PXN0YXRpYyB2b2lkXFxuZHJpdmVycy92aG9zdC92c29jay5jOjEzMDp2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTMxLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0zMTQ9c3RhdGljIHZvaWQgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzIxLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozMjI6XFx0dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHZzb2NrLCB2cSk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTMyMy19XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MzI2PXZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzQ5LVxcdCAqIGFsbCB0aGUgb3V0Y29tZXMgY292ZXJlZDogaWYgdGhlIGJhY2tlbmQgYmVjb21lcyBOVUxMIHJpZ2h0IGFmdGVyIHRoZSBjaGVjayxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzUwOlxcdCAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS5cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzUxLVxcdCAqL1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTYzOD1zdGF0aWMgdm9pZCB2aG9zdF92c29ja19oYW5kbGVfcnhfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02NDQtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjY0NTpcXHR2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QodnNvY2ssIHZxKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjQ2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6Mjk6NTAuMzkwMjAxNTU5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1NjAwNTg4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjo1NjY1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjoyOTo1OC45NTAyNjIzNjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjgzMzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvdnNvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTMwPXZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTMxMy1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzE0OnN0YXRpYyB2b2lkIHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMTUte1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTczNT1zdGF0aWMgaW50IHZob3N0X3Zzb2NrX2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTc3My1cXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZ2c29jay1cXHUwMDNlc2VuZF9wa3RfcXVldWUpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3NzQ6XFx0dmhvc3Rfd29ya19pbml0KFxcdTAwMjZ2c29jay1cXHUwMDNlc2VuZF9wa3Rfd29yaywgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmspO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03NzUtXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjI5OjU4Ljk5Mzk0ODQ5NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDUyNDg3MTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmc6XG5cbioqRXhhbWluaW5nIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAuIEkgbm90aWNlIGl0J3Mgbm90IGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgdXNhZ2UgaW1wbGljYXRpb25zLiBJcyBpdCBpbnRlbmRlZCB0byBiZSBleHRlcm5hbGx5IHZpc2libGU/IElzIGl0IHBhcnQgb2YgYSBsYXJnZXIsIHNoYXJlZCBpbnRlcmZhY2U/IFdoZXJlIGlzIGl0IGJlaW5nIGNhbGxlZCBmcm9tPyBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHZob3N0IGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM2MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjMwOjAyLjA0NjQzNzgxOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxMDkxNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvdnNvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTMwPXZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTMxMy1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzE0OnN0YXRpYyB2b2lkIHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMTUte1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTMyNT1zdGF0aWMgaW50XFxuZHJpdmVycy92aG9zdC92c29jay5jOjMyNjp2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMjcte1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTQ4Nz1zdGF0aWMgc3RydWN0IHZpcnRpb190cmFuc3BvcnQgdmhvc3RfdHJhbnNwb3J0ID0ge1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTUzOC1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTM5OlxcdC5zZW5kX3BrdCA9IHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdCxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTQwLX07XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9NzM1PXN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzczLVxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNnZzb2NrLVxcdTAwM2VzZW5kX3BrdF9xdWV1ZSk7XFxuZHJpdmVycy92aG9zdC92c29jay5jOjc3NDpcXHR2aG9zdF93b3JrX2luaXQoXFx1MDAyNnZzb2NrLVxcdTAwM2VzZW5kX3BrdF93b3JrLCB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Rfd29yayk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTc3NS1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzA6MDIuMDkyNTUwMTc2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxODcwMjI5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YCBDb2RlIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgIGZ1bmN0aW9uLCBhbmQgaXQncyBhIGJpdCBvZiBhIG1hemUuIEluaXRpYWxseSwgSSB0aG91Z2h0IGl0IHdhcyBzdGF0aWMsIHdoaWNoIHdvdWxkIG1ha2UgaXQgYSBiaXQgdHJpY2tpZXIgdG8gdHJhY2UuIEJ1dCB3YWl0LCBubywgaXQncyBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCB0aGF0J3Mgc3RhdGljLiBUaGF0J3MgZ29vZCB0byBrbm93LiBBbmQgd2hpbGUgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAgKmlzKiBzdGF0aWMsIGl0J3MgYWxzbyBhIHByZXR0eSBoZWZ0eSBmdW5jdGlvbi4gTGlrZWx5LCB0aGUgY29tcGlsZXIgaXNuJ3QgZ29pbmcgdG8gaW5saW5lIGl0LCB3aGljaCBhY3R1YWxseSBoZWxwcyBtZS5cblxuU28sIEknbSBnb2luZyB0byBjZW50ZXIgbXkgYW5hbHlzaXMgb24gYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAgYXMgdGhlIGtleSBzeW1ib2wgdG8gbG9vayBhdCwgYWxvbmcgd2l0aCBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YCDigJMgSSBzaG91bGQga2VlcCB0aGF0IEFQSSBlbnRyeSBwb2ludCBpbiBtaW5kLiBBaCwgeWVzLCB0aGVyZSBpdCBpcyBpbiB0aGUgYHZpcnRpb190cmFuc3BvcnRgIHN0cnVjdDsgYC5zZW5kX3BrdGAgaXMgYXNzaWduZWQgdG8gYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAsIHNvIHRoYXQgY29uZmlybXMgaXQgYXMgdGhlIEFQSS5cblxuQW5kLCBpZiBJJ20gbm90IG1pc3Rha2VuLCBgdmhvc3RfdnNvY2tfaGFuZGxlX3J4X2tpY2tgIGxvb2tzIGxpa2UgdGhlIHdvcmtlciByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgcngga2lja3MsIGFuZCBpdCdzIGNhbGxpbmcgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAuIFRoYXQncyBhIHZhbHVhYmxlIHBpZWNlIG9mIGluZm9ybWF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGZsb3cuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBzaXplIG9mIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgLiBVbmRlcnN0YW5kaW5nIGl0cyBzY2FsZSB3aWxsIGdpdmUgbWUgYSBzZW5zZSBvZiB0aGUgY29tcGxleGl0eSBvZiB0aGUgcHJvY2Vzc2luZyBpbnNpZGUsIGFuZCBtYXkgaW5kaWNhdGUgYXJlYXMgcmlwZSBmb3Igb3B0aW1pemF0aW9uIG9yIGNsb3NlciBpbnNwZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTU3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjMwOjA3LjI3OTU3NTE3MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC92c29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjk6XFx0c3RhdGljIHZvaWRcXG4gMTMwOlxcdHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxcbiAxMzE6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxcbiAxMzI6XFx0e1xcbiAxMzM6XFx0XFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdHhfdnEgPSBcXHUwMDI2dnNvY2stXFx1MDAzZXZxc1tWU09DS19WUV9UWF07XFxuIDEzNDpcXHRcXHRpbnQgcGt0cyA9IDAsIHRvdGFsX2xlbiA9IDA7XFxuIDEzNTpcXHRcXHR1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCA9IDA7XFxuIDEzNjpcXHRcXHR1bnNpZ25lZCBpbnQgdXNlZF9saW1pdDtcXG4gMTM3OlxcdFxcdGJvb2wgYWRkZWQgPSBmYWxzZTtcXG4gMTM4OlxcdFxcdGJvb2wgcmVzdGFydF90eCA9IGZhbHNlO1xcbiAxMzk6XFx0XFxuIDE0MDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbiAxNDE6XFx0XFxuIDE0MjpcXHRcXHRpZiAoIXZob3N0X3ZxX2dldF9iYWNrZW5kKHZxKSlcXG4gMTQzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxNDQ6XFx0XFxuIDE0NTpcXHRcXHRpZiAoIXZxX21ldGFfcHJlZmV0Y2godnEpKVxcbiAxNDY6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDE0NzpcXHRcXG4gMTQ4OlxcdFxcdHVzZWRfbGltaXQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHZxLVxcdTAwM2VudW0sXFxuIDE0OTpcXHRcXHRcXHRcXHQgICBtaW5fdCh1bnNpZ25lZCBpbnQsIHZxLVxcdTAwM2VkZXYtXFx1MDAzZWlvdl9saW1pdCxcXG4gMTUwOlxcdFxcdFxcdFxcdFxcdCB2cS1cXHUwMDNlZGV2LVxcdTAwM2V3ZWlnaHQpKTtcXG4gMTUxOlxcdFxcdGlmICh1bmxpa2VseSghdXNlZF9saW1pdCkpXFxuIDE1MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0LyogQXZvaWQgZnVydGhlciB2bWV4aXRzLCB3ZSdyZSBhbHJlYWR5IHByb2Nlc3NpbmcgdGhlIHZpcnRxdWV1ZSAqL1xcbiAxNTU6XFx0XFx0dmhvc3RfZGlzYWJsZV9ub3RpZnkoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHZxKTtcXG4gMTU2OlxcdFxcbiAxNTc6XFx0XFx0ZG8ge1xcbiAxNTg6XFx0XFx0XFx0c3RydWN0IHZpcnRpb192c29ja19oZHIgKmhkcjtcXG4gMTU5OlxcdFxcdFxcdHNpemVfdCBpb3ZfbGVuLCBwYXlsb2FkX2xlbjtcXG4gMTYwOlxcdFxcdFxcdHN0cnVjdCBpb3ZfaXRlciBpb3ZfaXRlcjtcXG4gMTYxOlxcdFxcdFxcdHUzMiBmbGFnc190b19yZXN0b3JlID0gMDtcXG4gMTYyOlxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDE2MzpcXHRcXHRcXHR1bnNpZ25lZCBvdXQsIGluO1xcbiAxNjQ6XFx0XFx0XFx0c2l6ZV90IG5ieXRlcztcXG4gMTY1OlxcdFxcdFxcdHUzMiBvZmZzZXQ7XFxuIDE2NjpcXHRcXHRcXHRpbnQgaGVhZDtcXG4gMTY3OlxcdFxcbiAxNjg6XFx0XFx0XFx0aWYgKHVzZWRfY291bnQgPT0gdXNlZF9saW1pdClcXG4gMTY5OlxcdFxcdFxcdFxcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIFxcdTAwMjZ1c2VkX2NvdW50KTtcXG4gMTcwOlxcdFxcbiAxNzE6XFx0XFx0XFx0c2tiID0gdmlydGlvX3Zzb2NrX3NrYl9kZXF1ZXVlKFxcdTAwMjZ2c29jay1cXHUwMDNlc2VuZF9wa3RfcXVldWUpO1xcbiAxNzI6XFx0XFxuIDE3MzpcXHRcXHRcXHRpZiAoIXNrYikge1xcbiAxNzQ6XFx0XFx0XFx0XFx0YWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgXFx1MDAyNnVzZWRfY291bnQpO1xcbiAxNzU6XFx0XFx0XFx0XFx0dmhvc3RfZW5hYmxlX25vdGlmeShcXHUwMDI2dnNvY2stXFx1MDAzZWRldiwgdnEpO1xcbiAxNzY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDE3NzpcXHRcXHRcXHR9XFxuIDE3ODpcXHRcXG4gMTc5OlxcdFxcdFxcdGhlYWQgPSB2aG9zdF9nZXRfdnFfZGVzYyh2cSwgdnEtXFx1MDAzZWlvdiwgQVJSQVlfU0laRSh2cS1cXHUwMDNlaW92KSxcXG4gMTgwOlxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2b3V0LCBcXHUwMDI2aW4sIE5VTEwsIE5VTEwpO1xcbiAxODE6XFx0XFx0XFx0aWYgKGhlYWQgXFx1MDAzYyAwKSB7XFxuIDE4MjpcXHRcXHRcXHRcXHR2aXJ0aW9fdnNvY2tfc2tiX3F1ZXVlX2hlYWQoXFx1MDAyNnZzb2NrLVxcdTAwM2VzZW5kX3BrdF9xdWV1ZSwgc2tiKTtcXG4gMTgzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxODQ6XFx0XFx0XFx0fVxcbiAxODU6XFx0XFxuIDE4NjpcXHRcXHRcXHRpZiAoaGVhZCA9PSB2cS1cXHUwMDNlbnVtKSB7XFxuIDE4NzpcXHRcXHRcXHRcXHR2aXJ0aW9fdnNvY2tfc2tiX3F1ZXVlX2hlYWQoXFx1MDAyNnZzb2NrLVxcdTAwM2VzZW5kX3BrdF9xdWV1ZSwgc2tiKTtcXG4gMTg4OlxcdFxcdFxcdFxcdC8qIFdlIGNhbm5vdCBmaW5pc2ggeWV0IGlmIG1vcmUgYnVmZmVycyBzbnVjayBpbiB3aGlsZVxcbiAxODk6XFx0XFx0XFx0XFx0ICogcmUtZW5hYmxpbmcgbm90aWZ5LlxcbiAxOTA6XFx0XFx0XFx0XFx0ICovXFxuIDE5MTpcXHRcXHRcXHRcXHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCBcXHUwMDI2dXNlZF9jb3VudCk7XFxuIDE5MjpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkodmhvc3RfZW5hYmxlX25vdGlmeShcXHUwMDI2dnNvY2stXFx1MDAzZWRldiwgdnEpKSkge1xcbiAxOTM6XFx0XFx0XFx0XFx0XFx0dmhvc3RfZGlzYWJsZV9ub3RpZnkoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHZxKTtcXG4gMTk0OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAxOTU6XFx0XFx0XFx0XFx0fVxcbiAxOTY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDE5NzpcXHRcXHRcXHR9XFxuIDE5ODpcXHRcXG4gMTk5OlxcdFxcdFxcdGlmIChvdXQpIHtcXG4gMjAwOlxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAyMDE6XFx0XFx0XFx0XFx0dnFfZXJyKHZxLCBcXFwiRXhwZWN0ZWQgMCBvdXRwdXQgYnVmZmVycywgZ290ICV1XFxcXG5cXFwiLCBvdXQpO1xcbiAyMDI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDIwMzpcXHRcXHRcXHR9XFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdFxcdGlvdl9sZW4gPSBpb3ZfbGVuZ3RoKFxcdTAwMjZ2cS1cXHUwMDNlaW92W291dF0sIGluKTtcXG4gMjA2OlxcdFxcdFxcdGlmIChpb3ZfbGVuIFxcdTAwM2Mgc2l6ZW9mKCpoZHIpKSB7XFxuIDIwNzpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMjA4OlxcdFxcdFxcdFxcdHZxX2Vycih2cSwgXFxcIkJ1ZmZlciBsZW4gWyV6dV0gdG9vIHNtYWxsXFxcXG5cXFwiLCBpb3ZfbGVuKTtcXG4gMjA5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyMTA6XFx0XFx0XFx0fVxcbiAyMTE6XFx0XFxuIDIxMjpcXHRcXHRcXHRpb3ZfaXRlcl9pbml0KFxcdTAwMjZpb3ZfaXRlciwgSVRFUl9ERVNULCBcXHUwMDI2dnEtXFx1MDAzZWlvdltvdXRdLCBpbiwgaW92X2xlbik7XFxuIDIxMzpcXHRcXHRcXHRvZmZzZXQgPSBWSVJUSU9fVlNPQ0tfU0tCX0NCKHNrYiktXFx1MDAzZW9mZnNldDtcXG4gMjE0OlxcdFxcdFxcdHBheWxvYWRfbGVuID0gc2tiLVxcdTAwM2VsZW4gLSBvZmZzZXQ7XFxuIDIxNTpcXHRcXHRcXHRoZHIgPSB2aXJ0aW9fdnNvY2tfaGRyKHNrYik7XFxuIDIxNjpcXHRcXG4gMjE3OlxcdFxcdFxcdC8qIElmIHRoZSBwYWNrZXQgaXMgZ3JlYXRlciB0aGFuIHRoZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlXFxuIDIxODpcXHRcXHRcXHQgKiBidWZmZXIsIHdlIHNwbGl0IGl0IHVzaW5nIG11bHRpcGxlIGJ1ZmZlcnMuXFxuIDIxOTpcXHRcXHRcXHQgKi9cXG4gMjIwOlxcdFxcdFxcdGlmIChwYXlsb2FkX2xlbiBcXHUwMDNlIGlvdl9sZW4gLSBzaXplb2YoKmhkcikpIHtcXG4gMjIxOlxcdFxcdFxcdFxcdHBheWxvYWRfbGVuID0gaW92X2xlbiAtIHNpemVvZigqaGRyKTtcXG4gMjIyOlxcdFxcbiAyMjM6XFx0XFx0XFx0XFx0LyogQXMgd2UgYXJlIGNvcHlpbmcgcGllY2VzIG9mIGxhcmdlIHBhY2tldCdzIGJ1ZmZlciB0b1xcbiAyMjQ6XFx0XFx0XFx0XFx0ICogc21hbGwgcnggYnVmZmVycywgaGVhZGVycyBvZiBwYWNrZXRzIGluIHJ4IHF1ZXVlIGFyZVxcbiAyMjU6XFx0XFx0XFx0XFx0ICogY3JlYXRlZCBkeW5hbWljYWxseSBhbmQgYXJlIGluaXRpYWxpemVkIHdpdGggaGVhZGVyXFxuIDIyNjpcXHRcXHRcXHRcXHQgKiBvZiBjdXJyZW50IHBhY2tldChleGNlcHQgbGVuZ3RoKS4gQnV0IGluIGNhc2Ugb2ZcXG4gMjI3OlxcdFxcdFxcdFxcdCAqIFNPQ0tfU0VRUEFDS0VULCB3ZSBhbHNvIG11c3QgY2xlYXIgbWVzc2FnZSBkZWxpbWV0ZXJcXG4gMjI4OlxcdFxcdFxcdFxcdCAqIGJpdCAoVklSVElPX1ZTT0NLX1NFUV9FT00pIGFuZCBNU0dfRU9SIGJpdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjozMDowNy4yNzk3MjMzNzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcwMjAzMzg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZob3N0IFZzb2NrIFBhY2tldCBTZW5kaW5nIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSB2aG9zdCB2c29jayBkcml2ZXIsIHdoaWNoIGZvY3VzZXMgb24gYmF0Y2hpbmcgdXNlZCBlbGVtZW50cyB3aGVuIHNlbmRpbmcgcGFja2V0cyB0byB0aGUgZ3Vlc3QuIFRoaXMgc2VlbXMgbGlrZSBhIGNvcmUgbG9naWMgY2hhbmdlLCBzbyBpdCdzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdCBhbmQgaG93IHdlIGNhbiBiZXN0IHRlc3QgaXQuIFRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBhcHBlYXIgdG8gYmUgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAgYW5kIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgLiBDb25zaWRlcmluZyB0aGVpciBzaXplLCBJIGNhbiBzYWZlbHkgYXNzdW1lIG5laXRoZXIgaXMgaW5saW5lZDsgdGhleSBzaG91bGQgYmUgZGlzdGluY3Qgc3ltYm9scy4gSSdtIGFsc28gY3VyaW91cyBhYm91dCBgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZGA7IHRoZSBmYWN0IHRoYXQgaXQncyBqdXN0IGEgYHN0YXRpYyBib29sYCBtYWtlcyBpdCBhIHN0cm9uZyBjYW5kaWRhdGUgdG8gYmUgaW5saW5lZCwgYWx0aG91Z2ggSSdsbCBrZWVwIGFuIGV5ZSBvbiBpdCBkdXJpbmcgYW5hbHlzaXMuXG5cblRoZSBtYWluIGNvbmZpZ3VyYXRpb24gaXMgYFZIT1NUX1ZTT0NLYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBnaXZlbiB0aGUgY2hhbmdlJ3MgZm9jdXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBpZGVudGlmeSBhbGwgZGVwZW5kZW5jaWVzLiBMZXQgbWUgdmVyaWZ5OyBpdCBsb29rcyBsaWtlIGBWSE9TVF9WU09DS2AgYWxzbyByZXF1aXJlcyBgVlNPQ0tFVFNgIGFuZCBgRVZFTlRGRGAuIGBWU09DS0VUU2AgaXMgb2J2aW91c2x5IGZ1bmRhbWVudGFsIHRvIHZzb2NrIGZ1bmN0aW9uYWxpdHksIHNvIGl0J3MgZGVmaW5pdGVseSBnb2luZyB0byBiZSBpbnZvbHZlZCBpbiB0ZXN0aW5nLiBJJ2xsIGluY2x1ZGUgYFZIT1NUX1ZTT0NLYCBhbmQgYFZTT0NLRVRTYCBpbiBteSBjb25maWd1cmF0aW9uIGNvbnNpZGVyYXRpb25zLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYW5kIG5lY2Vzc2FyeSBzZXR1cCBmb3IgdGhvcm91Z2ggdGVzdGluZyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTMzLCJPdXRwdXRUb2tlbnMiOjExMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjMwOjEzLjk4MTc1OTUzNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMzQ2OTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9WU09DS1wiLFxuICAgIFwiVlNPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RcIixcbiAgICBcInZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2aG9zdCB2c29jayBkcml2ZXIgdG8gYmF0Y2ggdXNlZCBlbGVtZW50cyB3aGVuIHNlbmRpbmcgcGFja2V0cyB0byB0aGUgZ3Vlc3QuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2aG9zdCB2c29jayBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9WU09DS1wiLFxuICAgIFwiVlNPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RcIixcbiAgICBcInZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2aG9zdCB2c29jayBkcml2ZXIgdG8gYmF0Y2ggdXNlZCBlbGVtZW50cyB3aGVuIHNlbmRpbmcgcGFja2V0cyB0byB0aGUgZ3Vlc3QuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2aG9zdCB2c29jayBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzA6MTQuMDY0MTEyODkyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUxMTk0MDE5MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjozMDoxNC4wNjQ1MzgwMTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTU1MTE4OTczNjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgdGhlIHZpcnRpbyB2c29jayB0cmFuc21pc3Npb24gcGF0aCBieSBiYXRjaGluZyB1c2VkIGVsZW1lbnQgdXBkYXRlcy4gSXQgaW50cm9kdWNlcyBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIHRvIHBvcHVsYXRlIGFuIGFycmF5IG9mIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCAoYHZxLVxcdTAwM2VoZWFkc2ApIGFuZCBgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZGAgdG8gZmx1c2ggdGhlbSB0byB0aGUgZ3Vlc3QgbWVtb3J5IHZpYSBgdmhvc3RfYWRkX3VzZWRfbmAuXFxuVGhlIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCBjb25zaXN0cyBvZiB0d28gMzItYml0IGludGVnZXJzIChgaWRgIGFuZCBgbGVuYCkgYW5kIGNvbnRhaW5zIG5vIHBhZGRpbmcgYnl0ZXMuIEJvdGggZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGB2aG9zdF92c29ja19hZGRfdXNlZGAgYmVmb3JlIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIChndWVzdCBtZW1vcnkpIHZpYSBgdmhvc3RfcHV0X3VzZWRgIGFuZCBgdmhvc3RfY29weV90b191c2VyYC5cXG5TaW5jZSB0aGUgbWVtb3J5IGJlaW5nIGNvcGllZCBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgdGhlcmUgYXJlIG5vIHBhZGRpbmcgYnl0ZXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlIGJvdW5kcyBvZiB0aGUgYXJyYXkgYXJlIGFsc28gcHJvcGVybHkgY2hlY2tlZCBhZ2FpbnN0IGBkZXYtXFx1MDAzZWlvdl9saW1pdGAsIHByZXZlbnRpbmcgYW55IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbnl3YXkpLlxcblRodXMsIHRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTg3OWFiZjQ0M2M0YWY5NjhiZmZkYjUxMDU4NTMwNTI0YjFiMzQwMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDA2OjI5OjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92c29jay5jIGIvZHJpdmVycy92aG9zdC92c29jay5jXG5pbmRleCA5YWFhYjZiYjgwNjFjLi5kODA1MGNjYTI3NWRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92c29jay5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbkBAIC0xMDMsMTIgKzEwMywzNyBAQCBzdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfaGFzX3JlbW90ZV9jaWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgdTMyIGNpZClcbiBcdHJldHVybiBmb3VuZDtcbiB9XG4gXG4rc3RhdGljIGJvb2wgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGludCAqdXNlZF9jb3VudClcbit7XG4rXHRpZiAoISp1c2VkX2NvdW50KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHR2aG9zdF9hZGRfdXNlZF9uKHZxLCB2cS1cdTAwM2VoZWFkcywgdnEtXHUwMDNlbmhlYWRzLCAqdXNlZF9jb3VudCk7XG4rXHQqdXNlZF9jb3VudCA9IDA7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4rXHRcdFx0XHQgdW5zaWduZWQgaW50ICp1c2VkX2NvdW50LFxuK1x0XHRcdFx0IHVuc2lnbmVkIGludCBoZWFkLCB1bnNpZ25lZCBpbnQgbGVuKVxuK3tcbitcdHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKnVzZWQgPSBcdTAwMjZ2cS1cdTAwM2VoZWFkc1sqdXNlZF9jb3VudF07XG4rXG4rXHR1c2VkLVx1MDAzZWlkID0gY3B1X3RvX3Zob3N0MzIodnEsIGhlYWQpO1xuK1x0dXNlZC1cdTAwM2VsZW4gPSBjcHVfdG9fdmhvc3QzMih2cSwgbGVuKTtcbitcdHZxLVx1MDAzZW5oZWFkc1sqdXNlZF9jb3VudF0gPSAxO1xuK1x0KCp1c2VkX2NvdW50KSsrO1xuK31cbitcbiBzdGF0aWMgdm9pZFxuIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuIFx0XHRcdCAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcbiB7XG4gXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp0eF92cSA9IFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9UWF07XG4gXHRpbnQgcGt0cyA9IDAsIHRvdGFsX2xlbiA9IDA7XG4rXHR1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCA9IDA7XG4rXHR1bnNpZ25lZCBpbnQgdXNlZF9saW1pdDtcbiBcdGJvb2wgYWRkZWQgPSBmYWxzZTtcbiBcdGJvb2wgcmVzdGFydF90eCA9IGZhbHNlO1xuIFxuQEAgLTEyMCw2ICsxNDUsMTIgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRpZiAoIXZxX21ldGFfcHJlZmV0Y2godnEpKVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdHVzZWRfbGltaXQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHZxLVx1MDAzZW51bSxcbitcdFx0XHQgICBtaW5fdCh1bnNpZ25lZCBpbnQsIHZxLVx1MDAzZWRldi1cdTAwM2Vpb3ZfbGltaXQsXG4rXHRcdFx0XHQgdnEtXHUwMDNlZGV2LVx1MDAzZXdlaWdodCkpO1xuK1x0aWYgKHVubGlrZWx5KCF1c2VkX2xpbWl0KSlcbitcdFx0Z290byBvdXQ7XG4rXG4gXHQvKiBBdm9pZCBmdXJ0aGVyIHZtZXhpdHMsIHdlJ3JlIGFscmVhZHkgcHJvY2Vzc2luZyB0aGUgdmlydHF1ZXVlICovXG4gXHR2aG9zdF9kaXNhYmxlX25vdGlmeShcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKTtcbiBcbkBAIC0xMzQsOSArMTY1LDEzIEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuIFx0XHR1MzIgb2Zmc2V0O1xuIFx0XHRpbnQgaGVhZDtcbiBcbitcdFx0aWYgKHVzZWRfY291bnQgPT0gdXNlZF9saW1pdClcbitcdFx0XHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCBcdTAwMjZ1c2VkX2NvdW50KTtcbitcbiBcdFx0c2tiID0gdmlydGlvX3Zzb2NrX3NrYl9kZXF1ZXVlKFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3F1ZXVlKTtcbiBcbiBcdFx0aWYgKCFza2IpIHtcbitcdFx0XHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCBcdTAwMjZ1c2VkX2NvdW50KTtcbiBcdFx0XHR2aG9zdF9lbmFibGVfbm90aWZ5KFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtMTUzLDYgKzE4OCw3IEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuIFx0XHRcdC8qIFdlIGNhbm5vdCBmaW5pc2ggeWV0IGlmIG1vcmUgYnVmZmVycyBzbnVjayBpbiB3aGlsZVxuIFx0XHRcdCAqIHJlLWVuYWJsaW5nIG5vdGlmeS5cbiBcdFx0XHQgKi9cbitcdFx0XHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCBcdTAwMjZ1c2VkX2NvdW50KTtcbiBcdFx0XHRpZiAodW5saWtlbHkodmhvc3RfZW5hYmxlX25vdGlmeShcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKSkpIHtcbiBcdFx0XHRcdHZob3N0X2Rpc2FibGVfbm90aWZ5KFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtMjMwLDggKzI2Niw4IEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuIFx0XHQgKi9cbiBcdFx0dmlydGlvX3RyYW5zcG9ydF9kZWxpdmVyX3RhcF9wa3Qoc2tiKTtcbiBcbi1cdFx0dmhvc3RfYWRkX3VzZWQodnEsIGhlYWQsIHNpemVvZigqaGRyKSArIHBheWxvYWRfbGVuKTtcbi1cdFx0YWRkZWQgPSB0cnVlO1xuK1x0XHR2aG9zdF92c29ja19hZGRfdXNlZCh2cSwgXHUwMDI2dXNlZF9jb3VudCwgaGVhZCxcbitcdFx0XHRcdCAgICAgc2l6ZW9mKCpoZHIpICsgcGF5bG9hZF9sZW4pO1xuIFxuIFx0XHRWSVJUSU9fVlNPQ0tfU0tCX0NCKHNrYiktXHUwMDNlb2Zmc2V0ICs9IHBheWxvYWRfbGVuO1xuIFx0XHR0b3RhbF9sZW4gKz0gcGF5bG9hZF9sZW47XG5AQCAtMjY0LDYgKzMwMCw3IEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuIFx0XHRcdHZpcnRpb190cmFuc3BvcnRfY29uc3VtZV9za2Jfc2VudChza2IsIHRydWUpO1xuIFx0XHR9XG4gXHR9IHdoaWxlKGxpa2VseSghdmhvc3RfZXhjZWVkc193ZWlnaHQodnEsICsrcGt0cywgdG90YWxfbGVuKSkpO1xuK1x0YWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgXHUwMDI2dXNlZF9jb3VudCk7XG4gXHRpZiAoYWRkZWQpXG4gXHRcdHZob3N0X3NpZ25hbChcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjMwOjE0LjA2NDUzODkyMloiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODA5NTg3MTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAgd2l0aGluIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBiYXRjaGluZyB3aGVuIGFkZGluZyB1c2VkIGVsZW1lbnRzIHRvIHRoZSB2aXJ0cXVldWUsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZldyBxdWVzdGlvbnMuIEluc3RlYWQgb2YgdGhlIHVzdWFsIGB2aG9zdF9hZGRfdXNlZGAgY2FsbCBwZXIgcGFja2V0LCBpdCdzIG5vdyB1c2luZyBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgLCBwb3B1bGF0aW5nIGB2cS1cdTAwM2VoZWFkc2AsIGB2cS1cdTAwM2VuaGVhZHNgIGFuZCBpbmNyZW1lbnRpbmcgYHVzZWRfY291bnRgIGJlZm9yZSBhIGJ1bGsgZmx1c2ggdmlhIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCwgZXZlbnR1YWxseSBjYWxsaW5nIGB2aG9zdF9hZGRfdXNlZF9uYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMsIGVzcGVjaWFsbHkgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIGJhdGNoaW5nLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gaXMgYXJvdW5kIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyB3aXRoaW4gdGhlIGJhdGNoaW5nIGxvZ2ljLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2N1cyBvbiBob3cgYHZxLVx1MDAzZWhlYWRzYCBhbmQgYHZxLVx1MDAzZW5oZWFkc2AgYXJlIHVzZWQgYW5kIGluaXRpYWxpemVkLlxuXG5EaXZpbmcgaW50byB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBgdnEtXHUwMDNlaGVhZHNgIGFuZCBgdnEtXHUwMDNlbmhlYWRzYCBhcmUgcGFydCBvZiB0aGUgYHN0cnVjdCB2aG9zdF92aXJ0cXVldWVgIGl0c2VsZiwgd2hpY2ggaXMgZ29vZC4gVGhlIGB2aG9zdF92c29ja19hZGRfdXNlZGAgZnVuY3Rpb24gaXMgd2hhdCBwb3B1bGF0ZXMgdGhlc2UgYXJyYXlzLCBzZXR0aW5nIGB1c2VkLVx1MDAzZWlkYCBhbmQgYHVzZWQtXHUwMDNlbGVuYC4gSXQgYXBwZWFycyB0aGUgY29kZSBpbml0aWFsaXplcyB0aGUgbWVtYmVycyBvZiB0aGUgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIHRvIGB2cS1cdTAwM2VoZWFkc1sqdXNlZF9jb3VudF1gLCB3aGljaCBpcyBlbmNvdXJhZ2luZy4gVGhlIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCBkZWZpbml0aW9uLCB3aXRoIGl0cyAzMi1iaXQgYGlkYCBhbmQgYGxlbmAgbWVtYmVycyBsb29rcyBsaWtlIHRoZXJlJ3Mgbm8gcGFkZGluZy4gU28sIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIHRoZSBzdHJ1Y3QgaXRzZWxmLCBpdCBpcyA4IGJ5dGVzIGluIHRvdGFsLlxuXG5Fc3NlbnRpYWxseSwgYHZob3N0X3Zzb2NrX2FkZF91c2VkYCBpcyB0YWtpbmcgY2FyZSBvZiBpbml0aWFsaXppbmcgdGhlIGBpZGAgYW5kIGBsZW5gIGZpZWxkcywgYW5kIHRoZSBgdmhvc3RfYWRkX3VzZWRfbmAgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHdyaXRpbmcgdGhlc2UgZWxlbWVudHMgdG8gdGhlIGd1ZXN0IG1lbW9yeS4gU28sIEkgc2VlIHRoZSB3cml0ZXMgZnJvbSB0aGUgZGV2aWNlIHRvIHRoZSBndWVzdCwgYW5kIHRoZSBlbGVtZW50cyBhcmUgYmVpbmcgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHdyaXR0ZW4sIGFuZCB3aXRoIG5vIHBhZGRpbmcsIGl0IGRvZXMgbm90IGxvb2sgbGlrZSB0aGVyZSB3aWxsIGJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcy5cblxuSG93ZXZlciwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIElzIGB2cS1cdTAwM2VuaGVhZHNgIGFjdHVhbGx5IGFuIGFycmF5IG9mIGludGVnZXJzPyBJIG5lZWQgdG8ga25vdyB0aGUgdHlwZSBmb3IgdGhhdCBtZW1iZXIgdG8gZW5zdXJlIG5vIGx1cmtpbmcgaXNzdWVzLiBJIHdpbGwgdXNlIGEgZ3JlcHBlciAoSSBrbm93LCBJIGtub3cpIHRvIHF1aWNrbHkgZmluZCB0aGUgYHN0cnVjdCB2aG9zdF92aXJ0cXVldWVgIGFuZCBjb25maXJtIHRoZSB0eXBlIG9mIHRoZSBgbmhlYWRzYCBhcnJheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjMwOjQyLjE2MDQxMzE0MloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4Mjc1MjM0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuaD04OD1zdHJ1Y3Qgdmhvc3RfdnJpbmdfY2FsbCB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtOTMtLyogVGhlIHZpcnRxdWV1ZSBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGEgcXVldWUgYXR0YWNoZWQgdG8gYSBkZXZpY2UuICovXFxuZHJpdmVycy92aG9zdC92aG9zdC5oOjk0OnN0cnVjdCB2aG9zdF92aXJ0cXVldWUge1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC05NS1cXHRzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjMwOjQ0LjQ0MzE3MDAyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTUyNzIwMzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHZob3N0LmgqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB2aG9zdCBpbXBsZW1lbnRhdGlvbiBiZXR0ZXIuIExldCdzIHN0YXJ0IHdpdGggYGRyaXZlcnMvdmhvc3Qvdmhvc3QuaGAuIEknbSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgOTQuIE15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyB0aGF0IHNvbWV0aGluZyBzaWduaWZpY2FudCBpcyBoYXBwZW5pbmcgdGhlcmUsIHBvc3NpYmx5IHJlbGF0ZWQgdG8gZGF0YSBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9uIGRlZmluaXRpb25zIGNydWNpYWwgZm9yIHRoZSB2aG9zdCBvcGVyYXRpb24uIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlIHRvIHVubG9jayB0aGlzIGFyY2hpdGVjdHVyYWwgdW5kZXJzdGFuZGluZyBJJ20gYWZ0ZXIuIExldCdzIHNlZSB3aGF0IHRyZWFzdXJlcyB0aGF0IGZpbGUgaG9sZHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjozMDo0Ny45OTU4OTMzOTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC92aG9zdC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5NDpcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlIHtcXG4gIDk1OlxcdFxcdHN0cnVjdCB2aG9zdF9kZXYgKmRldjtcXG4gIDk2OlxcdFxcdHN0cnVjdCB2aG9zdF93b3JrZXIgX19yY3UgKndvcmtlcjtcXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0LyogVGhlIGFjdHVhbCByaW5nIG9mIGJ1ZmZlcnMuICovXFxuICA5OTpcXHRcXHRzdHJ1Y3QgbXV0ZXggbXV0ZXg7XFxuIDEwMDpcXHRcXHR1bnNpZ25lZCBpbnQgbnVtO1xcbiAxMDE6XFx0XFx0dnJpbmdfZGVzY190IF9fdXNlciAqZGVzYztcXG4gMTAyOlxcdFxcdHZyaW5nX2F2YWlsX3QgX191c2VyICphdmFpbDtcXG4gMTAzOlxcdFxcdHZyaW5nX3VzZWRfdCBfX3VzZXIgKnVzZWQ7XFxuIDEwNDpcXHRcXHRjb25zdCBzdHJ1Y3Qgdmhvc3RfaW90bGJfbWFwICptZXRhX2lvdGxiW1ZIT1NUX05VTV9BRERSU107XFxuIDEwNTpcXHRcXHRzdHJ1Y3QgZmlsZSAqa2ljaztcXG4gMTA2OlxcdFxcdHN0cnVjdCB2aG9zdF92cmluZ19jYWxsIGNhbGxfY3R4O1xcbiAxMDc6XFx0XFx0c3RydWN0IGV2ZW50ZmRfY3R4ICplcnJvcl9jdHg7XFxuIDEwODpcXHRcXHRzdHJ1Y3QgZXZlbnRmZF9jdHggKmxvZ19jdHg7XFxuIDEwOTpcXHRcXG4gMTEwOlxcdFxcdHN0cnVjdCB2aG9zdF9wb2xsIHBvbGw7XFxuIDExMTpcXHRcXG4gMTEyOlxcdFxcdC8qIFRoZSByb3V0aW5lIHRvIGNhbGwgd2hlbiB0aGUgR3Vlc3QgcGluZ3MgdXMsIG9yIHRpbWVvdXQuICovXFxuIDExMzpcXHRcXHR2aG9zdF93b3JrX2ZuX3QgaGFuZGxlX2tpY2s7XFxuIDExNDpcXHRcXG4gMTE1OlxcdFxcdC8qIExhc3QgYXZhaWxhYmxlIGluZGV4IHdlIHNhdy5cXG4gMTE2OlxcdFxcdCAqIFZhbHVlcyBhcmUgbGltaXRlZCB0byAweDdmZmYsIGFuZCB0aGUgaGlnaCBiaXQgaXMgdXNlZCBhc1xcbiAxMTc6XFx0XFx0ICogYSB3cmFwIGNvdW50ZXIgd2hlbiB1c2luZyBWSVJUSU9fRl9SSU5HX1BBQ0tFRC4gKi9cXG4gMTE4OlxcdFxcdHUxNiBsYXN0X2F2YWlsX2lkeDtcXG4gMTE5OlxcdFxcdC8qIE5leHQgYXZhaWwgcmluZyBoZWFkIHdoZW4gVklSVElPX0ZfSU5fT1JERVIgaXMgbmVnb2l0YXRlZCAqL1xcbiAxMjA6XFx0XFx0dTE2IG5leHRfYXZhaWxfaGVhZDtcXG4gMTIxOlxcdFxcbiAxMjI6XFx0XFx0LyogQ2FjaGVzIGF2YWlsYWJsZSBpbmRleCB2YWx1ZSBmcm9tIHVzZXIuICovXFxuIDEyMzpcXHRcXHR1MTYgYXZhaWxfaWR4O1xcbiAxMjQ6XFx0XFxuIDEyNTpcXHRcXHQvKiBMYXN0IGluZGV4IHdlIHVzZWQuXFxuIDEyNjpcXHRcXHQgKiBWYWx1ZXMgYXJlIGxpbWl0ZWQgdG8gMHg3ZmZmLCBhbmQgdGhlIGhpZ2ggYml0IGlzIHVzZWQgYXNcXG4gMTI3OlxcdFxcdCAqIGEgd3JhcCBjb3VudGVyIHdoZW4gdXNpbmcgVklSVElPX0ZfUklOR19QQUNLRUQuICovXFxuIDEyODpcXHRcXHR1MTYgbGFzdF91c2VkX2lkeDtcXG4gMTI5OlxcdFxcbiAxMzA6XFx0XFx0LyogVXNlZCBmbGFncyAqL1xcbiAxMzE6XFx0XFx0dTE2IHVzZWRfZmxhZ3M7XFxuIDEzMjpcXHRcXG4gMTMzOlxcdFxcdC8qIExhc3QgdXNlZCBpbmRleCB2YWx1ZSB3ZSBoYXZlIHNpZ25hbGxlZCBvbiAqL1xcbiAxMzQ6XFx0XFx0dTE2IHNpZ25hbGxlZF91c2VkO1xcbiAxMzU6XFx0XFxuIDEzNjpcXHRcXHQvKiBMYXN0IHVzZWQgaW5kZXggdmFsdWUgd2UgaGF2ZSBzaWduYWxsZWQgb24gKi9cXG4gMTM3OlxcdFxcdGJvb2wgc2lnbmFsbGVkX3VzZWRfdmFsaWQ7XFxuIDEzODpcXHRcXG4gMTM5OlxcdFxcdC8qIExvZyB3cml0ZXMgdG8gdXNlZCBzdHJ1Y3R1cmUuICovXFxuIDE0MDpcXHRcXHRib29sIGxvZ191c2VkO1xcbiAxNDE6XFx0XFx0dTY0IGxvZ19hZGRyO1xcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHRzdHJ1Y3QgaW92ZWMgaW92W1VJT19NQVhJT1ZdO1xcbiAxNDQ6XFx0XFx0c3RydWN0IGlvdmVjIGlvdGxiX2lvdls2NF07XFxuIDE0NTpcXHRcXHRzdHJ1Y3QgaW92ZWMgKmluZGlyZWN0O1xcbiAxNDY6XFx0XFx0c3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHM7XFxuIDE0NzpcXHRcXHR1MTYgKm5oZWFkcztcXG4gMTQ4OlxcdFxcdC8qIFByb3RlY3RlZCBieSB2aXJ0cXVldWUgbXV0ZXguICovXFxuIDE0OTpcXHRcXHRzdHJ1Y3Qgdmhvc3RfaW90bGIgKnVtZW07XFxuIDE1MDpcXHRcXHRzdHJ1Y3Qgdmhvc3RfaW90bGIgKmlvdGxiO1xcbiAxNTE6XFx0XFx0dm9pZCAqcHJpdmF0ZV9kYXRhO1xcbiAxNTI6XFx0XFx0VklSVElPX0RFQ0xBUkVfRkVBVFVSRVMoYWNrZWRfZmVhdHVyZXMpO1xcbiAxNTM6XFx0XFx0dTY0IGFja2VkX2JhY2tlbmRfZmVhdHVyZXM7XFxuIDE1NDpcXHRcXHQvKiBMb2cgd3JpdGUgZGVzY3JpcHRvcnMgKi9cXG4gMTU1OlxcdFxcdHZvaWQgX191c2VyICpsb2dfYmFzZTtcXG4gMTU2OlxcdFxcdHN0cnVjdCB2aG9zdF9sb2cgKmxvZztcXG4gMTU3OlxcdFxcdHN0cnVjdCBpb3ZlYyBsb2dfaW92WzY0XTtcXG4gMTU4OlxcdFxcbiAxNTk6XFx0XFx0LyogUmluZyBlbmRpYW5uZXNzLiBEZWZhdWx0cyB0byBsZWdhY3kgbmF0aXZlIGVuZGlhbm5lc3MuXFxuIDE2MDpcXHRcXHQgKiBTZXQgdG8gdHJ1ZSB3aGVuIHN0YXJ0aW5nIGEgbW9kZXJuIHZpcnRpbyBkZXZpY2UuICovXFxuIDE2MTpcXHRcXHRib29sIGlzX2xlO1xcbiAxNjI6XFx0I2lmZGVmIENPTkZJR19WSE9TVF9DUk9TU19FTkRJQU5fTEVHQUNZXFxuIDE2MzpcXHRcXHQvKiBSaW5nIGVuZGlhbm5lc3MgcmVxdWVzdGVkIGJ5IHVzZXJzcGFjZSBmb3IgY3Jvc3MtZW5kaWFuIHN1cHBvcnQuICovXFxuIDE2NDpcXHRcXHRib29sIHVzZXJfYmU7XFxuIDE2NTpcXHQjZW5kaWZcXG4gMTY2OlxcdFxcdHUzMiBidXN5bG9vcF90aW1lb3V0O1xcbiAxNjc6XFx0fTtcXG4gMTY4OlxcdFxcbiAxNjk6XFx0c3RydWN0IHZob3N0X21zZ19ub2RlIHtcXG4gMTcwOlxcdCAgdW5pb24ge1xcbiAxNzE6XFx0XFx0ICBzdHJ1Y3Qgdmhvc3RfbXNnIG1zZztcXG4gMTcyOlxcdFxcdCAgc3RydWN0IHZob3N0X21zZ192MiBtc2dfdjI7XFxuIDE3MzpcXHQgIH07XFxuIDE3NDpcXHQgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxO1xcbiAxNzU6XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7XFxuIDE3NjpcXHR9O1xcbiAxNzc6XFx0XFxuIDE3ODpcXHRzdHJ1Y3Qgdmhvc3RfZGV2IHtcXG4gMTc5OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbiAxODA6XFx0XFx0c3RydWN0IG11dGV4IG11dGV4O1xcbiAxODE6XFx0XFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKnZxcztcXG4gMTgyOlxcdFxcdGludCBudnFzO1xcbiAxODM6XFx0XFx0c3RydWN0IGV2ZW50ZmRfY3R4ICpsb2dfY3R4O1xcbiAxODQ6XFx0XFx0c3RydWN0IHZob3N0X2lvdGxiICp1bWVtO1xcbiAxODU6XFx0XFx0c3RydWN0IHZob3N0X2lvdGxiICppb3RsYjtcXG4gMTg2OlxcdFxcdHNwaW5sb2NrX3QgaW90bGJfbG9jaztcXG4gMTg3OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgcmVhZF9saXN0O1xcbiAxODg6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2xpc3Q7XFxuIDE4OTpcXHRcXHR3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0O1xcbiAxOTA6XFx0XFx0aW50IGlvdl9saW1pdDtcXG4gMTkxOlxcdFxcdGludCB3ZWlnaHQ7XFxuIDE5MjpcXHRcXHRpbnQgYnl0ZV93ZWlnaHQ7XFxuIDE5MzpcXHRcXHRzdHJ1Y3QgeGFycmF5IHdvcmtlcl94YTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzA6NDcuOTk1OTg3MjYxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNTMwMTA4MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2aG9zdF92c29ja19hZGRfdXNlZCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIGZ1bmN0aW9uIGFuZCBpdHMgaW50ZXJhY3Rpb25zLiBJIHNlZSB0aGF0IGBoZWFkc2AgaXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGB2cmluZ191c2VkX2VsZW1gIHN0cnVjdHMsIGFuZCBgbmhlYWRzYCBpcyBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgYHUxNmAgdmFsdWVzLiBUaGV5J3JlIGNsZWFybHkgcmVsYXRlZCB0byB0cmFja2luZyB1c2VkIHZpcnR1YWwgcmluZyBlbGVtZW50cywgd2hpY2ggaXMgc3RhbmRhcmQgdmhvc3QgYmVoYXZpb3IuXG5cbkluc2lkZSBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgLCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBjYXRjaGVzIG15IGV5ZSBpcyB0aGlzOiBgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqdXNlZCA9IFx1MDAyNnZxLVx1MDAzZWhlYWRzWyp1c2VkX2NvdW50XTtgLiAgVGhpcyBsaW5lIGlzIHRha2luZyBhbiBhZGRyZXNzIG9mIGEgbWVtYmVyIGluIHRoZSBhcnJheSwgdXNpbmcgdGhlIGAqdXNlZF9jb3VudGAgYXMgYW4gaW5kZXguIFRoaXMgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLCBhbmQgaW5kaWNhdGVzIHRoYXQgd2UncmUgYWRkaW5nIGEgbmV3IHVzZWQgZWxlbWVudCB0byB0aGUgcmluZy4gIFRoZW4gYHVzZWQtXHUwMDNlaWRgIGFuZCBgdXNlZC1cdTAwM2VsZW5gIGFyZSBwb3B1bGF0ZWQgdXNpbmcgYGNwdV90b192aG9zdDMyYCwgd2hpY2ggaGFuZGxlcyBwb3RlbnRpYWwgZW5kaWFubmVzcyBpc3N1ZXMsIHdoaWNoIG1ha2VzIHNlbnNlLiAgQW5kIGB2cS1cdTAwM2VuaGVhZHNbKnVzZWRfY291bnRdID0gMTtgIGluZGljYXRlcyB0aGF0IHdlIGFyZSB1c2luZyBvbmUgXCJoZWFkXCIgKHdoYXRldmVyIHRoYXQgaXMpIHRvIGRlYWwgd2l0aCB0aGlzIGVsZW1lbnQuIGAoKnVzZWRfY291bnQpKys7YCBpbmNyZW1lbnRzIHRoZSB0b3RhbC4gSSdtIGFzc3VtaW5nIGAqdXNlZF9jb3VudGAgaXMgYmVpbmcgdXBkYXRlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBuZXh0IGF2YWlsYWJsZSBzbG90IGluIHRoZSB1c2VkIHJpbmcuXG5cbk5vdyB0aGUgaW50ZXJlc3RpbmcgcGFydDogYHZob3N0X2FkZF91c2VkX25gIGlzIGNhbGxlZCB3aXRoIHRoZSBgdnEtXHUwMDNlaGVhZHNgLCBgdnEtXHUwMDNlbmhlYWRzYCwgYW5kIGAqdXNlZF9jb3VudGAuIFNpbmNlIEkga25vdyB0aGVzZSBwYXJhbWV0ZXJzJyBwdXJwb3NlLCB0aGlzIGlzIHdoZXJlIEknbGwgZ2V0IG1vcmUgaW5mb3JtYXRpb246IHdoYXQgdGhlIGV4YWN0IG1lY2hhbmljcyBvZiBhZGRpbmcgYSBuZXcgdXNlZCBlbGVtZW50IGFyZS4gSSBuZWVkIHRvIGRpdmUgaW50byBgdmhvc3RfYWRkX3VzZWRfbmAgZnVuY3Rpb24gaXRzZWxmIHRvIHNlZSB3aGF0IGl0IGlzIHJlYWxseSBkb2luZy4gTGV0J3MgaGVhZCBvdmVyIHRvIGBkcml2ZXJzL3Zob3N0L3Zob3N0LmNgIGFuZCBkaWcgaW50byB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDE4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzA6NTMuMzQ5MDAxMDJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODkxMjc4NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHZob3N0X2FkZF91c2VkX25cXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MzA2Nj1zdGF0aWMgaW50IHZob3N0X2FkZF91c2VkX25faW5fb3JkZXIoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzExNS0gKiB3YW50IHRvIG5vdGlmeSB0aGUgZ3Vlc3QsIHVzaW5nIGV2ZW50ZmQuICovXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMxMTY6aW50IHZob3N0X2FkZF91c2VkX24oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMTE3LVxcdFxcdCAgICAgdTE2ICpuaGVhZHMsIHVuc2lnbmVkIGNvdW50KVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5oPTI0OD1pbnQgdmhvc3RfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqLCB1bnNpZ25lZCBpbnQgaGVhZCwgaW50IGxlbik7XFxuZHJpdmVycy92aG9zdC92aG9zdC5oOjI0OTppbnQgdmhvc3RfYWRkX3VzZWRfbihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICosIHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yNTAtXFx0XFx0ICAgICB1MTYgKm5oZWFkcywgdW5zaWduZWQgY291bnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjozMDo1NS43MzgxMzI5NDJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg4MTA5MjY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgY29kZTpcblxuKipEaXZpbmcgaW50byBgdmhvc3RfYWRkX3VzZWRfbmAqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgdmhvc3RfYWRkX3VzZWRfbmAgd2l0aGluIHRoZSBgZHJpdmVycy92aG9zdC92aG9zdC5jYCBmaWxlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiBpdHMgZnVuY3Rpb24gYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIHZob3N0IGFyY2hpdGVjdHVyZS4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHVwZGF0aW5nIHRoZSBcInVzZWRcIiByaW5nIOKAkyB0aGF0IHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlIHVzZWQgZm9yIHNpZ25hbGluZyBjb21wbGV0aW9uIG9mIGd1ZXN0IHJlcXVlc3RzIGZyb20gdGhlIGhvc3Qgc2lkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCB0byBhZGQgYSBiYXRjaCBvZiBjb21wbGV0ZWQgZGVzY3JpcHRvcnMuIEkgd2lsbCBmb2N1cyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdXNlZCByaW5nJ3MgaGVhZCBwb2ludGVyLCB0aGUgZGVzY3JpcHRvciBpbmZvcm1hdGlvbiwgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB0aGF0IGFyZSBpbiBwbGF5LiBBbnkga2luZCBvZiBjYWNoZSBpbnZhbGlkYXRpb24gb3IgbWVtb3J5IGJhcnJpZXIgY2FsbHMgd2lsbCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBoZXJlLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGJlIGEgZmFpcmx5IGNyaXRpY2FsIHNlY3Rpb24gZm9yIHBlcmZvcm1hbmNlLCBzbyBJJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLiBBbmQgSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSByaW5nIGJ5IHRoZSBndWVzdCBhbmQgaG9zdC4gVGhlIHVzZSBvZiBtZW1vcnkgYmFycmllcnMgb3IgbG9ja3Mgd2lsbCBjZXJ0YWlubHkgY2F0Y2ggbXkgZXllLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTM3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzE6MDAuNjE5MjI3NjZaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTE2LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzExNjpcXHRpbnQgdmhvc3RfYWRkX3VzZWRfbihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXFxuMzExNzpcXHRcXHRcXHQgICAgIHUxNiAqbmhlYWRzLCB1bnNpZ25lZCBjb3VudClcXG4zMTE4OlxcdHtcXG4zMTE5OlxcdFxcdGJvb2wgaW5fb3JkZXIgPSB2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX0ZfSU5fT1JERVIpO1xcbjMxMjA6XFx0XFx0aW50IHI7XFxuMzEyMTpcXHRcXG4zMTIyOlxcdFxcdGlmICghaW5fb3JkZXIgfHwgIW5oZWFkcylcXG4zMTIzOlxcdFxcdFxcdHIgPSB2aG9zdF9hZGRfdXNlZF9uX29vbyh2cSwgaGVhZHMsIGNvdW50KTtcXG4zMTI0OlxcdFxcdGVsc2VcXG4zMTI1OlxcdFxcdFxcdHIgPSB2aG9zdF9hZGRfdXNlZF9uX2luX29yZGVyKHZxLCBoZWFkcywgbmhlYWRzLCBjb3VudCk7XFxuMzEyNjpcXHRcXG4zMTI3OlxcdFxcdGlmIChyIFxcdTAwM2MgMClcXG4zMTI4OlxcdFxcdFxcdHJldHVybiByO1xcbjMxMjk6XFx0XFxuMzEzMDpcXHRcXHQvKiBNYWtlIHN1cmUgYnVmZmVyIGlzIHdyaXR0ZW4gYmVmb3JlIHdlIHVwZGF0ZSBpbmRleC4gKi9cXG4zMTMxOlxcdFxcdHNtcF93bWIoKTtcXG4zMTMyOlxcdFxcdGlmICh2aG9zdF9wdXRfdXNlZF9pZHgodnEpKSB7XFxuMzEzMzpcXHRcXHRcXHR2cV9lcnIodnEsIFxcXCJGYWlsZWQgdG8gaW5jcmVtZW50IHVzZWQgaWR4XFxcIik7XFxuMzEzNDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4zMTM1OlxcdFxcdH1cXG4zMTM2OlxcdFxcdGlmICh1bmxpa2VseSh2cS1cXHUwMDNlbG9nX3VzZWQpKSB7XFxuMzEzNzpcXHRcXHRcXHQvKiBNYWtlIHN1cmUgdXNlZCBpZHggaXMgc2VlbiBiZWZvcmUgbG9nLiAqL1xcbjMxMzg6XFx0XFx0XFx0c21wX3dtYigpO1xcbjMxMzk6XFx0XFx0XFx0LyogTG9nIHVzZWQgaW5kZXggdXBkYXRlLiAqL1xcbjMxNDA6XFx0XFx0XFx0bG9nX3VzZWQodnEsIG9mZnNldG9mKHN0cnVjdCB2cmluZ191c2VkLCBpZHgpLFxcbjMxNDE6XFx0XFx0XFx0XFx0IHNpemVvZiB2cS1cXHUwMDNldXNlZC1cXHUwMDNlaWR4KTtcXG4zMTQyOlxcdFxcdFxcdGlmICh2cS1cXHUwMDNlbG9nX2N0eClcXG4zMTQzOlxcdFxcdFxcdFxcdGV2ZW50ZmRfc2lnbmFsKHZxLVxcdTAwM2Vsb2dfY3R4KTtcXG4zMTQ0OlxcdFxcdH1cXG4zMTQ1OlxcdFxcdHJldHVybiByO1xcbjMxNDY6XFx0fVxcbjMxNDc6XFx0RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfYWRkX3VzZWRfbik7XFxuMzE0ODpcXHRcXG4zMTQ5OlxcdHN0YXRpYyBib29sIHZob3N0X25vdGlmeShzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxcbjMxNTA6XFx0e1xcbjMxNTE6XFx0XFx0X191MTYgb2xkLCBuZXc7XFxuMzE1MjpcXHRcXHRfX3ZpcnRpbzE2IGV2ZW50O1xcbjMxNTM6XFx0XFx0Ym9vbCB2O1xcbjMxNTQ6XFx0XFx0LyogRmx1c2ggb3V0IHVzZWQgaW5kZXggdXBkYXRlcy4gVGhpcyBpcyBwYWlyZWRcXG4zMTU1OlxcdFxcdCAqIHdpdGggdGhlIGJhcnJpZXIgdGhhdCB0aGUgR3Vlc3QgZXhlY3V0ZXMgd2hlbiBlbmFibGluZ1xcbjMxNTY6XFx0XFx0ICogaW50ZXJydXB0cy4gKi9cXG4zMTU3OlxcdFxcdHNtcF9tYigpO1xcbjMxNTg6XFx0XFxuMzE1OTpcXHRcXHRpZiAodmhvc3RfaGFzX2ZlYXR1cmUodnEsIFZJUlRJT19GX05PVElGWV9PTl9FTVBUWSkgXFx1MDAyNlxcdTAwMjZcXG4zMTYwOlxcdFxcdCAgICB1bmxpa2VseSh2cS1cXHUwMDNlYXZhaWxfaWR4ID09IHZxLVxcdTAwM2VsYXN0X2F2YWlsX2lkeCkpXFxuMzE2MTpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4zMTYyOlxcdFxcbjMxNjM6XFx0XFx0aWYgKCF2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1JJTkdfRl9FVkVOVF9JRFgpKSB7XFxuMzE2NDpcXHRcXHRcXHRfX3ZpcnRpbzE2IGZsYWdzO1xcbjMxNjU6XFx0XFx0XFx0aWYgKHZob3N0X2dldF9hdmFpbF9mbGFncyh2cSwgXFx1MDAyNmZsYWdzKSkge1xcbjMxNjY6XFx0XFx0XFx0XFx0dnFfZXJyKHZxLCBcXFwiRmFpbGVkIHRvIGdldCBmbGFnc1xcXCIpO1xcbjMxNjc6XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMzE2ODpcXHRcXHRcXHR9XFxuMzE2OTpcXHRcXHRcXHRyZXR1cm4gIShmbGFncyBcXHUwMDI2IGNwdV90b192aG9zdDE2KHZxLCBWUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVCkpO1xcbjMxNzA6XFx0XFx0fVxcbjMxNzE6XFx0XFx0b2xkID0gdnEtXFx1MDAzZXNpZ25hbGxlZF91c2VkO1xcbjMxNzI6XFx0XFx0diA9IHZxLVxcdTAwM2VzaWduYWxsZWRfdXNlZF92YWxpZDtcXG4zMTczOlxcdFxcdG5ldyA9IHZxLVxcdTAwM2VzaWduYWxsZWRfdXNlZCA9IHZxLVxcdTAwM2VsYXN0X3VzZWRfaWR4O1xcbjMxNzQ6XFx0XFx0dnEtXFx1MDAzZXNpZ25hbGxlZF91c2VkX3ZhbGlkID0gdHJ1ZTtcXG4zMTc1OlxcdFxcbjMxNzY6XFx0XFx0aWYgKHVubGlrZWx5KCF2KSlcXG4zMTc3OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjMxNzg6XFx0XFxuMzE3OTpcXHRcXHRpZiAodmhvc3RfZ2V0X3VzZWRfZXZlbnQodnEsIFxcdTAwMjZldmVudCkpIHtcXG4zMTgwOlxcdFxcdFxcdHZxX2Vycih2cSwgXFxcIkZhaWxlZCB0byBnZXQgdXNlZCBldmVudCBpZHhcXFwiKTtcXG4zMTgxOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjMxODI6XFx0XFx0fVxcbjMxODM6XFx0XFx0cmV0dXJuIHZyaW5nX25lZWRfZXZlbnQodmhvc3QxNl90b19jcHUodnEsIGV2ZW50KSwgbmV3LCBvbGQpO1xcbjMxODQ6XFx0fVxcbjMxODU6XFx0XFxuMzE4NjpcXHQvKiBUaGlzIGFjdHVhbGx5IHNpZ25hbHMgdGhlIGd1ZXN0LCB1c2luZyBldmVudGZkLiAqL1xcbjMxODc6XFx0dm9pZCB2aG9zdF9zaWduYWwoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcXG4zMTg4OlxcdHtcXG4zMTg5OlxcdFxcdC8qIFNpZ25hbCB0aGUgR3Vlc3QgdGVsbCB0aGVtIHdlIHVzZWQgc29tZXRoaW5nIHVwLiAqL1xcbjMxOTA6XFx0XFx0aWYgKHZxLVxcdTAwM2VjYWxsX2N0eC5jdHggXFx1MDAyNlxcdTAwMjYgdmhvc3Rfbm90aWZ5KGRldiwgdnEpKVxcbjMxOTE6XFx0XFx0XFx0ZXZlbnRmZF9zaWduYWwodnEtXFx1MDAzZWNhbGxfY3R4LmN0eCk7XFxuMzE5MjpcXHR9XFxuMzE5MzpcXHRFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9zaWduYWwpO1xcbjMxOTQ6XFx0XFxuMzE5NTpcXHQvKiBBbmQgaGVyZSdzIHRoZSBjb21ibyBtZWFsIGRlYWwuICBTdXBlcnNpemUgbWUhICovXFxuMzE5NjpcXHR2b2lkIHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWwoc3RydWN0IHZob3N0X2RldiAqZGV2LFxcbjMxOTc6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbjMxOTg6XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBoZWFkLCBpbnQgbGVuKVxcbjMxOTk6XFx0e1xcbjMyMDA6XFx0XFx0dmhvc3RfYWRkX3VzZWQodnEsIGhlYWQsIGxlbik7XFxuMzIwMTpcXHRcXHR2aG9zdF9zaWduYWwoZGV2LCB2cSk7XFxuMzIwMjpcXHR9XFxuMzIwMzpcXHRFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9hZGRfdXNlZF9hbmRfc2lnbmFsKTtcXG4zMjA0OlxcdFxcbjMyMDU6XFx0LyogbXVsdGktYnVmZmVyIHZlcnNpb24gb2Ygdmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbCAqL1xcbjMyMDY6XFx0dm9pZCB2aG9zdF9hZGRfdXNlZF9hbmRfc2lnbmFsX24oc3RydWN0IHZob3N0X2RldiAqZGV2LFxcbjMyMDc6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbjMyMDg6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxcbjMyMDk6XFx0XFx0XFx0XFx0XFx0IHUxNiAqbmhlYWRzLFxcbjMyMTA6XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGNvdW50KVxcbjMyMTE6XFx0e1xcbjMyMTI6XFx0XFx0dmhvc3RfYWRkX3VzZWRfbih2cSwgaGVhZHMsIG5oZWFkcywgY291bnQpO1xcbjMyMTM6XFx0XFx0dmhvc3Rfc2lnbmFsKGRldiwgdnEpO1xcbjMyMTQ6XFx0fVxcbjMyMTU6XFx0RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbF9uKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzE6MDAuNjE5NDQxMzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ2MjA5MjM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgR3Vlc3QgTWVtb3J5IFdyaXRlcyBpbiB2aG9zdCoqXG5cbkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgc29tZXRoaW5nLiBNeSBpbnRlcm5hbCBhbGFybXMgYXJlIGdvaW5nIG9mZiDigJMgYm90aCBgdmhvc3RfYWRkX3VzZWRfbl9vb29gIGFuZCBgdmhvc3RfYWRkX3VzZWRfbl9pbl9vcmRlcmAgYXJlICp3cml0aW5nKiB0byBndWVzdCBtZW1vcnkuIFRoYXQncyBhIGNyaXRpY2FsIHBvaW50IGZvciBzZWN1cml0eSBhbmQgY29ycmVjdG5lc3MuIEFueSB0aW1lIHlvdSdyZSB0b3VjaGluZyBndWVzdCBtZW1vcnkgZGlyZWN0bHkgZnJvbSB0aGUgaG9zdCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCB5b3UgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogY2VydGFpbiB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy4gVGhlcmUgYXJlIHNvIG1hbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB0aGVyZS5cblxuU28sIGxldCdzIGRyaWxsIGRvd24uIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGB2aG9zdF9hZGRfdXNlZF9uX29vb2AuIFRoYXQgXCJvb29cIiBzdWZmaXggaXMgcGFydGljdWxhcmx5IGludHJpZ3VpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQncyB0cnlpbmcgdG8gYWNjb21wbGlzaCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICpob3cqIGl0J3MgZG9pbmcgaXQsIGF0IGEgbG93IGxldmVsLiBBcmUgd2UgZGVhbGluZyB3aXRoIHBvdGVudGlhbCBvdXQtb2Ytb3JkZXIgY29tcGxldGlvbiBpc3N1ZXM/IEhvdyBkb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGggb3RoZXIgb3BlcmF0aW9ucz8gV2hhdCB2YWxpZGF0aW9uIHN0ZXBzIGFyZSBpbiBwbGFjZSB0byBlbnN1cmUgd2UncmUgbm90IGNvcnJ1cHRpbmcgdGhlIGd1ZXN0J3MgbWVtb3J5IHNwYWNlPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgY29kZSBwYXRoICp2ZXJ5KiBjYXJlZnVsbHkgaGVyZSwgbWFraW5nIHN1cmUgYWxsIG1lbW9yeSBhY2Nlc3Mgc2l6ZXMsIG9mZnNldHMsIGFuZCBib3VuZGFyeSBjaGVja3MgYXJlIHNvbGlkLiBJJ20gZ29pbmcgdG8gcGF5IGV4dHJhIGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGF0b21pY2l0eSBvciB0aGUgdXNlIG9mIGxvY2tzIG9yIGJhcnJpZXJzLCB0byB2ZXJpZnkgZXZlcnl0aGluZyBpcyBwcm90ZWN0ZWQuIExldCdzIG1ha2Ugc3VyZSBpdCdzIGRvaW5nIHByZWNpc2VseSB3aGF0IGl0ICpjbGFpbXMqIHRvIGJlIGRvaW5nLCBhbmQgdGhhdCBpdCdzIGRvaW5nIGl0IHNhZmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkwOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzE6MDYuMDgxNTM1ODY1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAzNixcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzAzNjpcXHRcXHR9XFxuMzAzNzpcXHRcXHRvbGQgPSB2cS1cXHUwMDNlbGFzdF91c2VkX2lkeDtcXG4zMDM4OlxcdFxcdG5ldyA9ICh2cS1cXHUwMDNlbGFzdF91c2VkX2lkeCArPSBjb3VudCk7XFxuMzAzOTpcXHRcXHQvKiBJZiB0aGUgZHJpdmVyIG5ldmVyIGJvdGhlcnMgdG8gc2lnbmFsIGluIGEgdmVyeSBsb25nIHdoaWxlLFxcbjMwNDA6XFx0XFx0ICogdXNlZCBpbmRleCBtaWdodCB3cmFwIGFyb3VuZC4gSWYgdGhhdCBoYXBwZW5zLCBpbnZhbGlkYXRlXFxuMzA0MTpcXHRcXHQgKiBzaWduYWxsZWRfdXNlZCBpbmRleCB3ZSBzdG9yZWQuIFRPRE86IG1ha2Ugc3VyZSBkcml2ZXJcXG4zMDQyOlxcdFxcdCAqIHNpZ25hbHMgYXQgbGVhc3Qgb25jZSBpbiAyXjE2IGFuZCByZW1vdmUgdGhpcy4gKi9cXG4zMDQzOlxcdFxcdGlmICh1bmxpa2VseSgodTE2KShuZXcgLSB2cS1cXHUwMDNlc2lnbmFsbGVkX3VzZWQpIFxcdTAwM2MgKHUxNikobmV3IC0gb2xkKSkpXFxuMzA0NDpcXHRcXHRcXHR2cS1cXHUwMDNlc2lnbmFsbGVkX3VzZWRfdmFsaWQgPSBmYWxzZTtcXG4zMDQ1OlxcdFxcdHJldHVybiAwO1xcbjMwNDY6XFx0fVxcbjMwNDc6XFx0XFxuMzA0ODpcXHRzdGF0aWMgaW50IHZob3N0X2FkZF91c2VkX25fb29vKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbjMwNDk6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXFxuMzA1MDpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBjb3VudClcXG4zMDUxOlxcdHtcXG4zMDUyOlxcdFxcdGludCBzdGFydCwgbiwgcjtcXG4zMDUzOlxcdFxcbjMwNTQ6XFx0XFx0c3RhcnQgPSB2cS1cXHUwMDNlbGFzdF91c2VkX2lkeCBcXHUwMDI2ICh2cS1cXHUwMDNlbnVtIC0gMSk7XFxuMzA1NTpcXHRcXHRuID0gdnEtXFx1MDAzZW51bSAtIHN0YXJ0O1xcbjMwNTY6XFx0XFx0aWYgKG4gXFx1MDAzYyBjb3VudCkge1xcbjMwNTc6XFx0XFx0XFx0ciA9IF9fdmhvc3RfYWRkX3VzZWRfbih2cSwgaGVhZHMsIG4pO1xcbjMwNTg6XFx0XFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbjMwNTk6XFx0XFx0XFx0XFx0cmV0dXJuIHI7XFxuMzA2MDpcXHRcXHRcXHRoZWFkcyArPSBuO1xcbjMwNjE6XFx0XFx0XFx0Y291bnQgLT0gbjtcXG4zMDYyOlxcdFxcdH1cXG4zMDYzOlxcdFxcdHJldHVybiBfX3Zob3N0X2FkZF91c2VkX24odnEsIGhlYWRzLCBjb3VudCk7XFxuMzA2NDpcXHR9XFxuMzA2NTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzE6MDYuMDgxNzU1MDE1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTUwOTA4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOlxuXG4qKkludGVybmFsIENvbnNpZGVyYXRpb25zIG9uIGBfX3Zob3N0X2FkZF91c2VkX25gKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBgX192aG9zdF9hZGRfdXNlZF9uYC4gVGhpcyBpcyBjcnVjaWFsLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGZvciBlZmZpY2llbnRseSBoYW5kbGluZyB0aGUgYWNjdW11bGF0aW9uIG9mIHVzZWQgYnVmZmVycyB3aXRoaW4gYSB2aXJ0dWFsIGhvc3QgY29udGV4dC4gSXQncyB0aGUgY3JpdGljYWwgYnVpbGRpbmcgYmxvY2suIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gY2FsbDogSSBuZWVkIHRvIHF1aWNrbHkgYW5kIHJlbGlhYmx5IGFkZCBuZXcgZW50cmllcyB0byB0aGUgdmhvc3QncyAndXNlZCcgcmluZywgd2hpY2gsIGJ5IGRlZmluaXRpb24sIGltcGxpZXMgbWFuYWdpbmcgYSBwb3RlbnRpYWxseSBjb25jdXJyZW50IGRhdGEgc3RydWN0dXJlLiBTbywgSSBoYXZlIHRvIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCB0aGUgbG9ja2luZyBzZW1hbnRpY3MuIEFyZSB3ZSBkZWFsaW5nIHdpdGggc3BpbmxvY2tzLCBtdXRleGVzLCBvciBzb21lIGtpbmQgb2YgUkNVPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIHRoZXJlJ3MgY29udGVudGlvbj8gSG93IGFyZSB3ZSBlbnN1cmluZyBhdG9taWNpdHkgb2YgdGhlIGJ1ZmZlciB1cGRhdGVzLCBhbmQgd2hhdCdzIHRoZSB0eXBpY2FsIENQVSBjb3N0IHRvIGRvIHRoYXQ/IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2sgdGhpcyB3aWxsIGNyZWF0ZSwgZXNwZWNpYWxseSB1bmRlciBoZWF2eSBJL08gbG9hZC4gSWYgdGhlcmUncyBoaWdoIGxvY2sgY29udGVudGlvbiwgaXQgd2lsbCBsaWtlbHkgYmUgcmVmbGVjdGVkIGluIHBlcmZvcm1hbmNlIHRlc3RzLCBhbmQgSeKAmWxsIGhhdmUgdG8gZXhhbWluZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEkgYW0gdHJ5aW5nIHRvIGRldGVybWluZSB0aGUgd29yc3QtY2FzZSBzY2VuYXJpby5cblxuTW9yZW92ZXIsIEkgaGF2ZSB0byBlbnN1cmUgY29ycmVjdCBoYW5kbGluZyBvZiB0aGUgd3JhcC1hcm91bmQgY29uZGl0aW9ucy4gV2UgaGF2ZSB0byBjb25zaWRlciBob3cgdG8gaGFuZGxlIHRoZSByaW5nIGJ1ZmZlciwgd2hhdCBpcyB0aGlzIHJpbmcgYnVmZmVyIHN0cnVjdHVyZSwgaXMgaXQgYWxpZ25lZCwgZG9lcyBpdCBjb250YWluIGFueSBraW5kIG9mIHBhZGRpbmcsIGV0Yy4gQXJlIHRoZSBidWZmZXIgaW5kZXhlcyBjb3JyZWN0bHkgbWFuYWdlZD8gV2hhdCBraW5kIG9mIGNoZWNrcyBhcmUgaW4gcGxhY2UgdG8gcHJldmVudCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzPyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgcm9idXN0LiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSBhcmUgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSAqbiogcGFyYW1ldGVyIGluIHRoaXMgZnVuY3Rpb247IHRoYXQgbnVtYmVyIHRlbGxzIHVzIGhvdyBtYW55IGVsZW1lbnRzIG5lZWQgdG8gYmUgYWRkZWQgdG8gdGhlIHVzZWQgcmluZy4gV2UgbXVzdCBtYWtlIHN1cmUgdGhhdCBpdCdzIHZhbGlkYXRlZCwgdGhhdCB3ZSBkb24ndCBhY2NpZGVudGFsbHkgYWRkIGludmFsaWQgZGF0YSB0aGF0IGNhbiBjb21wcm9taXNlIHRoZSBob3N0J3MgaW50ZWdyaXR5LiBBbHNvLCBob3cgYXJlIHdlIGhhbmRsaW5nIHRoZSBhc3NvY2lhdGVkIGRlc2NyaXB0b3JzIHRoYXQgYXJlIGJlaW5nIGFkZGVkPyBBcmUgdGhleSBiZWluZyBwcm9wZXJseSBpbml0aWFsaXplZCwgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLCBvciBhcmUgdGhlcmUgZGFuZ2xpbmcgcG9pbnRlcnM/IEFsc28sIGhvdyBhcmUgd2UgbWFuYWdpbmcgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZXNlIGRlc2NyaXB0b3JzPyBUaGlzIGlzIGFsc28gYSBjcml0aWNhbCBjb25zaWRlcmF0aW9uLiBGaW5hbGx5LCBob3cgYWJvdXQgZXJyb3IgaGFuZGxpbmc/IElzIHRoZXJlIHByb3BlciBlcnJvciBjaGVja2luZyBpZiB0aGVyZSBhcmUgaW5zdWZmaWNpZW50IHJlc291cmNlcyBvciB1bmV4cGVjdGVkIGNvbmRpdGlvbnM/IFRoZXNlIGFyZSBhbGwgdGhlIGtpbmRzIG9mIHF1ZXN0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBldmVuIGF0IGEgaGlnaCBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgyMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzE6MTEuNDk2ODQ4NzIxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Nzk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAwMCxcbiAgXCJMaW5lQ291bnRcIjogMzZcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzAwMDpcXHRFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kaXNjYXJkX3ZxX2Rlc2MpO1xcbjMwMDE6XFx0XFxuMzAwMjpcXHQvKiBBZnRlciB3ZSd2ZSB1c2VkIG9uZSBvZiB0aGVpciBidWZmZXJzLCB3ZSB0ZWxsIHRoZW0gYWJvdXQgaXQuICBXZSdsbCB0aGVuXFxuMzAwMzpcXHQgKiB3YW50IHRvIG5vdGlmeSB0aGUgZ3Vlc3QsIHVzaW5nIGV2ZW50ZmQuICovXFxuMzAwNDpcXHRpbnQgdmhvc3RfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHVuc2lnbmVkIGludCBoZWFkLCBpbnQgbGVuKVxcbjMwMDU6XFx0e1xcbjMwMDY6XFx0XFx0c3RydWN0IHZyaW5nX3VzZWRfZWxlbSBoZWFkcyA9IHtcXG4zMDA3OlxcdFxcdFxcdGNwdV90b192aG9zdDMyKHZxLCBoZWFkKSxcXG4zMDA4OlxcdFxcdFxcdGNwdV90b192aG9zdDMyKHZxLCBsZW4pXFxuMzAwOTpcXHRcXHR9O1xcbjMwMTA6XFx0XFx0dTE2IG5oZWFkcyA9IDE7XFxuMzAxMTpcXHRcXG4zMDEyOlxcdFxcdHJldHVybiB2aG9zdF9hZGRfdXNlZF9uKHZxLCBcXHUwMDI2aGVhZHMsIFxcdTAwMjZuaGVhZHMsIDEpO1xcbjMwMTM6XFx0fVxcbjMwMTQ6XFx0RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfYWRkX3VzZWQpO1xcbjMwMTU6XFx0XFxuMzAxNjpcXHRzdGF0aWMgaW50IF9fdmhvc3RfYWRkX3VzZWRfbihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG4zMDE3OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcXG4zMDE4OlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBjb3VudClcXG4zMDE5OlxcdHtcXG4zMDIwOlxcdFxcdHZyaW5nX3VzZWRfZWxlbV90IF9fdXNlciAqdXNlZDtcXG4zMDIxOlxcdFxcdHUxNiBvbGQsIG5ldztcXG4zMDIyOlxcdFxcdGludCBzdGFydDtcXG4zMDIzOlxcdFxcbjMwMjQ6XFx0XFx0c3RhcnQgPSB2cS1cXHUwMDNlbGFzdF91c2VkX2lkeCBcXHUwMDI2ICh2cS1cXHUwMDNlbnVtIC0gMSk7XFxuMzAyNTpcXHRcXHR1c2VkID0gdnEtXFx1MDAzZXVzZWQtXFx1MDAzZXJpbmcgKyBzdGFydDtcXG4zMDI2OlxcdFxcdGlmICh2aG9zdF9wdXRfdXNlZCh2cSwgaGVhZHMsIHN0YXJ0LCBjb3VudCkpIHtcXG4zMDI3OlxcdFxcdFxcdHZxX2Vycih2cSwgXFxcIkZhaWxlZCB0byB3cml0ZSB1c2VkXFxcIik7XFxuMzAyODpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4zMDI5OlxcdFxcdH1cXG4zMDMwOlxcdFxcdGlmICh1bmxpa2VseSh2cS1cXHUwMDNlbG9nX3VzZWQpKSB7XFxuMzAzMTpcXHRcXHRcXHQvKiBNYWtlIHN1cmUgZGF0YSBpcyBzZWVuIGJlZm9yZSBsb2cuICovXFxuMzAzMjpcXHRcXHRcXHRzbXBfd21iKCk7XFxuMzAzMzpcXHRcXHRcXHQvKiBMb2cgdXNlZCByaW5nIGVudHJ5IHdyaXRlLiAqL1xcbjMwMzQ6XFx0XFx0XFx0bG9nX3VzZWQodnEsICgodm9pZCBfX3VzZXIgKil1c2VkIC0gKHZvaWQgX191c2VyICopdnEtXFx1MDAzZXVzZWQpLFxcbjMwMzU6XFx0XFx0XFx0XFx0IGNvdW50ICogc2l6ZW9mICp1c2VkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzE6MTEuNDk3MDM3NzMxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NzM0MzA2MTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdmhvc3RfcHV0X3VzZWQgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgdmhvc3RfcHV0X3VzZWRgIGFuZCBob3cgaXQgaGFuZGxlcyBjb3B5aW5nIGRhdGEgdG8gdXNlciBzcGFjZSDigJMgc3BlY2lmaWNhbGx5LCB0byB0aGUgZ3Vlc3QncyBtZW1vcnkuIFRoZSBjb3JlIHRoaW5nIGhlcmUgaXMgaG93IGBoZWFkc2AgZ2V0cyBwb3B1bGF0ZWQuIEl0IHNlZW1zIGxpa2UgYHZob3N0X3Zzb2NrX2FkZF91c2VkYCBwb3B1bGF0ZXMgYGhlYWRzYCB3aXRoIHRoZSBgdXNlZC1cdTAwM2VpZGAgYW5kIGB1c2VkLVx1MDAzZWxlbmAgdmFsdWVzLCB3aGljaCBhcmUga2V5IHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlZCBidWZmZXIuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHRoZSBgc3RydWN0IHZyaW5nX3VzZWRfZWxlbWAgZG9lc24ndCBoYXZlIGFueSBwYWRkaW5nLCB3aGljaCBpcyBhIGdyZWF0IHNhZmVndWFyZC4gVGhpcyB0ZWxscyBtZSB3ZSAqc2hvdWxkbid0KiBoYXZlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgaXNzdWUgaGVyZSwgYmVjYXVzZSB3ZSBhcmUgb25seSB0cmFuc21pdHRpbmcgZXhwbGljaXRseSBpbml0aWFsaXplZCBkYXRhIHRvIHRoZSB1c2VyIHNwYWNlLiBUaGF0J3MgYSByZWxpZWYuXG5cblRoZSBvdGhlciBiaXQgb2YgY29kZSBwb3B1bGF0ZXMgdGhlIGB2cS1cdTAwM2VuaGVhZHNgIGFycmF5IHdpdGggYDFgIGZvciBlYWNoIGVsZW1lbnQuIEhvd2V2ZXIsIHRoaXMgaXMganVzdCB0byBjb21wdXRlIGB2cS1cdTAwM2VsYXN0X3VzZWRfaWR4YCBpbiBgdmhvc3RfYWRkX3VzZWRfbl9pbl9vcmRlcmAgYW5kIGlzIG5vdCBpbnZvbHZlZCBpbiBhbnkgZGF0YSBiZWluZyBjb3BpZWQgdG8gdGhlIHVzZXIgc3BhY2UuIFNvLCB0aGUgb25seSBkYXRhIGlzIHRoZSB1c2VkIGluZm9ybWF0aW9uLCB3aGljaCBpcyBwb3B1bGF0ZWQuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXMgYnkgZ29pbmcgdGhyb3VnaCBgdmhvc3RfcHV0X3VzZWRgIGluIGRldGFpbCB0byBlbnN1cmUgdGhhdCBub3RoaW5nIGlzIHNsaXBwaW5nIHRocm91Z2ggdGhlIGNyYWNrcywgYnV0LCBhdCBsZWFzdCBhdCBmaXJzdCBnbGFuY2UsIHRoaW5ncyBsb29rIHNhZmUgYW5kIHNvdW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk3NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjMxOjI3LjIzMTM0NjMxMloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxNTAwMDUzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgdmhvc3RfcHV0X3VzZWRcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MTQ1OT1zdGF0aWMgaW5saW5lIGludCB2aG9zdF9wdXRfYXZhaWxfZXZlbnQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTQ2NC1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MTQ2NTpzdGF0aWMgaW5saW5lIGludCB2aG9zdF9wdXRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTQ2Ni1cXHRcXHRcXHRcXHQgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZCwgaW50IGlkeCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzE6MjkuNDQ2MzUxMDdaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjEwOTc4OTAyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHZob3N0X3B1dF91c2VkYCoqXG5cbk9rYXksIGxldCdzIHB1bGwgdXAgdGhlIGNvZGUgZm9yIGB2aG9zdF9wdXRfdXNlZGAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgdmhvc3QtbmV0IGFyY2hpdGVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHZpcnRxdWV1ZSwgdGhlIHNoYXJlZCBtZW1vcnkgcmluZyBidWZmZXIsIGFuZCB0aGUgZ3Vlc3QncyB2aWV3IG9mIGRlc2NyaXB0b3JzLiBJJ20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgZGV0YWlscyByZWdhcmRpbmc6XG5cbiogICAqKlN5bmNocm9uaXphdGlvbjoqKiBXaGF0IGxvY2tpbmcgbWVjaGFuaXNtcyBhcmUgZW1wbG95ZWQgdG8gZW5zdXJlIHNhZmUgYWNjZXNzIHRvIHRoZSB1c2VkIHJpbmc/IElzIHRoZXJlIGFueSBjb250ZW50aW9uIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB0aGUgaG9zdCBhbmQgZ3Vlc3QsIGFuZCBob3cgYXJlIHRoZXkgaGFuZGxlZCBpbiB0aGlzIGZ1bmN0aW9uPyBJJ2xsIGJlIGZvY3VzZWQgb24gbWVtb3J5IGJhcnJpZXJzLlxuKiAgICoqRGVzY3JpcHRvciBQcm9jZXNzaW5nOioqIEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gbWFwIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgYHZob3N0X3VzZWRgIGVudHJ5IHRvIHRoZSBjb3JyZXNwb25kaW5nIHZpcnRxdWV1ZSBkZXNjcmlwdG9ycz8gSXMgaXQgdHJhdmVyc2luZyBhIGxpbmtlZCBsaXN0IG9yIHJlbHlpbmcgb24gZGlyZWN0IGluZGV4aW5nPyBUaGlzIGhhcyBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IHdpdGggbGFyZ2UgbnVtYmVycyBvZiBkZXNjcmlwdG9ycy4gQXJlIHRoZXJlIGFueSBvcHRpbWl6YXRpb25zIGRvbmUgaGVyZT9cbiogICAqKk5vdGlmaWNhdGlvbjoqKiBEb2VzIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgdHJpZ2dlciBhIGd1ZXN0IG5vdGlmaWNhdGlvbiwgb3IgZG9lcyBpdCBkZWZlciB0aGF0IGRlY2lzaW9uIHRvIGFub3RoZXIgcGFydCBvZiB0aGUgc3lzdGVtPyBJZiBpdCBkb2VzIHRyaWdnZXIgdGhlIG5vdGlmaWNhdGlvbiwgaG93IGRvZXMgaXQgZG8gc28/IFdoYXQncyB0aGUgaW1wYWN0IG9uIGxhdGVuY3k/XG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBBcmUgdGhlcmUgYW55IGNoZWNrcyBmb3IgbWFsZm9ybWVkIHVzZWQgZW50cmllcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcz8gV2hhdCBoYXBwZW5zIGlmIGFuIGVycm9yIGlzIGRldGVjdGVkPyBIb3cgYXJlIGVycm9ycyBoYW5kbGVkPyBEb2VzIGl0IHJldHVybiBhbiBlcnJvciBjb2RlIG9yIHRyaWdnZXIgYSBtb3JlIHNldmVyZSBzeXN0ZW0gZmFpbHVyZT9cbiogICAqKkNvbnRleHQ6KiogV2hhdCdzIHRoZSB0eXBpY2FsIGNhbGxpbmcgY29udGV4dD8gSXMgaXQgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCBoYW5kbGVyLCB0aGUga2VybmVsIHRocmVhZCwgb3IgYm90aD8gVGhpcyB3aWxsIGluZmx1ZW5jZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdW5jdGlvbidzIHRpbWluZyBhbmQgcmVzb3VyY2UgY29uc3RyYWludHMuXG4qICAgKipJbnRlZ3JhdGlvbjoqKiBIb3cgaXMgdGhpcyBmdW5jdGlvbiByZWxhdGVkIHRvIG90aGVyIHZob3N0LW5ldCBmdW5jdGlvbnMsIGUuZy4gYHZob3N0X2dldF9kZXNjYCwgYHZob3N0X2FkZF91c2VkYCwgYW5kIGB2aG9zdF9wb2xsYC4gSXQgd2lsbCBiZSBoZWxwZnVsIHRvIHVuZGVyc3RhbmQgdGhlIGNoYWluIG9mIGV2ZW50cyB0aGF0IGxlYWRzIHRvIHRoaXMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkLlxuXG5VbHRpbWF0ZWx5LCBJIHdhbnQgdG8gY29uZmlybSBteSBtZW50YWwgbW9kZWwgb2YgdGhlIGRhdGEgZmxvdyBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3IgaW1wcm92ZW1lbnQgaW4gdGhlIHZob3N0LW5ldCBpbXBsZW1lbnRhdGlvbi4gVGltZSB0byBnZXQgdG8gd29yayFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NzMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjozMTo1MC41NDQyNDQzN1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC92aG9zdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NjU6XFx0c3RhdGljIGlubGluZSBpbnQgdmhvc3RfcHV0X3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuMTQ2NjpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZCwgaW50IGlkeCxcXG4xNDY3OlxcdFxcdFxcdFxcdFxcdCBpbnQgY291bnQpXFxuMTQ2ODpcXHR7XFxuMTQ2OTpcXHRcXHRyZXR1cm4gdmhvc3RfY29weV90b191c2VyKHZxLCB2cS1cXHUwMDNldXNlZC1cXHUwMDNlcmluZyArIGlkeCwgaGVhZCxcXG4xNDcwOlxcdFxcdFxcdFxcdFxcdCAgY291bnQgKiBzaXplb2YoKmhlYWQpKTtcXG4xNDcxOlxcdH1cXG4xNDcyOlxcdFxcbjE0NzM6XFx0c3RhdGljIGlubGluZSBpbnQgdmhvc3RfcHV0X3VzZWRfZmxhZ3Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXFxuMTQ3NDpcXHRcXG4xNDc1OlxcdHtcXG4xNDc2OlxcdFxcdHJldHVybiB2aG9zdF9wdXRfdXNlcih2cSwgY3B1X3RvX3Zob3N0MTYodnEsIHZxLVxcdTAwM2V1c2VkX2ZsYWdzKSxcXG4xNDc3OlxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZ2cS1cXHUwMDNldXNlZC1cXHUwMDNlZmxhZ3MpO1xcbjE0Nzg6XFx0fVxcbjE0Nzk6XFx0XFxuMTQ4MDpcXHRzdGF0aWMgaW5saW5lIGludCB2aG9zdF9wdXRfdXNlZF9pZHgoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXFxuMTQ4MTpcXHRcXG4xNDgyOlxcdHtcXG4xNDgzOlxcdFxcdHJldHVybiB2aG9zdF9wdXRfdXNlcih2cSwgY3B1X3RvX3Zob3N0MTYodnEsIHZxLVxcdTAwM2VsYXN0X3VzZWRfaWR4KSxcXG4xNDg0OlxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZ2cS1cXHUwMDNldXNlZC1cXHUwMDNlaWR4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzE6NTAuNTQ0MzkyMTVaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI5MzA4MTMyMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrIGluIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUuIEkgc2VlIGB2aG9zdF9jb3B5X3RvX3VzZXJgIGNvcHlpbmcgYGNvdW50ICogc2l6ZW9mKCpoZWFkKWAgYnl0ZXMgZnJvbSBgaGVhZGAgdG8gdGhlIHVzZWQgcmluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgbGVhZCB0byBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha2FnZS4gU2luY2UgYGhlYWRgIHBvaW50cyB0byBgdnEtXHUwMDNlaGVhZHNgLCBhbmQgYHZxLVx1MDAzZWhlYWRzYCBpcyBhbiBhcnJheSBvZiBgc3RydWN0IHZyaW5nX3VzZWRfZWxlbWAsIEkgbmVlZCB0byBjb25maXJtIGVhY2ggZWxlbWVudCBvZiBgc3RydWN0IHZyaW5nX3VzZWRfZWxlbWAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBjb3B5LiBGcm9tIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUgaW4gYHZob3N0X3Zzb2NrX2FkZF91c2VkYCwgYm90aCBgaWRgIGFuZCBgbGVuYCB3aXRoaW4gZWFjaCBlbGVtZW50ICphcmUqIGluaXRpYWxpemVkLiBHb29kLCBubyBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgdGhlcmUuXG5cbkkgcmVtZW1iZXIgdGhpcyBzdHJ1Y3Q6XG5cbmBgYGNcbnN0cnVjdCB2cmluZ191c2VkX2VsZW0ge1xuXHQvKiBJbmRleCBvZiBzdGFydCBvZiB1c2VkIGRlc2NyaXB0b3IgY2hhaW4uICovXG5cdF9fdmlydGlvMzIgaWQ7XG5cdC8qIFRvdGFsIGxlbmd0aCBvZiB0aGUgZGVzY3JpcHRvciBjaGFpbiB3aGljaCB3YXMgdXNlZCAod3JpdHRlbiB0bykgKi9cblx0X192aXJ0aW8zMiBsZW47XG59O1xuYGBgXG5cblllYWgsIDMyLWJpdCBpbnRlZ2VycywgNCBieXRlcyBlYWNoLCBubyBwYWRkaW5nLiBUaGUgc2l6ZSBpcyBkZWZpbml0ZWx5IDggYnl0ZXMuIE5vIGlzc3VlIHRoZXJlLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBuZXcgY2hhbmdlcy4gVGhlIHBhdGNoIGFkZHMgYHVzZWRfY291bnRgIGFuZCBgdXNlZF9saW1pdGAuIEknbSBnb2luZyB0byBsb29rIGNhcmVmdWxseSBhdCBob3cgdGhlc2UgdmFyaWFibGVzIGFyZSB1c2VkLiBgdXNlZF9saW1pdGAgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiBgdnEtXHUwMDNlbnVtYCwgYHZxLVx1MDAzZWRldi1cdTAwM2Vpb3ZfbGltaXRgLCBhbmQgYHZxLVx1MDAzZWRldi1cdTAwM2V3ZWlnaHRgLiBJZiBgdXNlZF9saW1pdGAgaXMgemVybywgd2UgYmFpbCBvdXQgZWFybHksIHdoaWNoIHNlZW1zIHJlYXNvbmFibGUuIFRoZSBjb2RlIHRoZW4gbG9vcHMsIGFkZGluZyB1c2VkIGVsZW1lbnRzLiBUaGUga2V5IGlzIGluIGB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCBcdTAwMjZ1c2VkX2NvdW50KWAgY2FsbGVkIHdoZW4gYHVzZWRfY291bnQgPT0gdXNlZF9saW1pdGAsIHRoaXMgZmx1c2hlcyB1c2VkIGVsZW1lbnRzIGFuZCByZXNldHMgYHVzZWRfY291bnRgLiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBiYXRjaGluZyBvcHRpbWl6YXRpb24uIEl0IGZsdXNoZXMgYW55IHJlbWFpbmluZyB1c2VkIGVsZW1lbnRzIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AgYXMgd2VsbC4gSSBkb24ndCBzZWUgYW55IGltbWVkaWF0ZSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoaXMgYmF0Y2hpbmcgbG9naWMuXG5cbkxldCBtZSByZXZpZXcgdGhlIHBhdGNoIHNjb3BlLiBUaGUgY29kZSBvbmx5IG1vZGlmaWVzIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgIGFuZCBpbnRyb2R1Y2VzIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCBhbmQgYHZob3N0X3Zzb2NrX2FkZF91c2VkYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmVuJ3QgY2FsbGluZyBhbnl0aGluZyBlbHNlLiBPa2F5LCBub3RoaW5nIGVsc2UgaXMgdG91Y2hlZC4gU28sIHRoaXMgaXMgKnB1cmVseSogYW4gb3B0aW1pemF0aW9uIHRvIGJhdGNoIHRoZSB1cGRhdGVzLCB3aGljaCBzZWVtcyByZWFzb25hYmxlLiBObyBuZXcgZnVuY3Rpb25zIGFyZSBtb2RpZmllZCwgc28gdGhlcmUncyBubyB3YXkgdGhpcyB3b3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLlxuXG5JIHNob3VsZCB2ZXJpZnkgaG93IGB2cS1cdTAwM2VoZWFkc2AgaXMgYWxsb2NhdGVkIHRvIGJlIDEwMCUgc3VyZS4gVGhhdCdzIGFsbG9jYXRlZCBpbiBgdmhvc3RfZGV2X2FsbG9jX2lvdmVjc2Agb3IgYSBzaW1pbGFyIGZ1bmN0aW9uLCBzbyBpdCBzaG91bGQgYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gdGhlIGNvZGUsIGFuZCB0aGUgY29udGV4dCBvZiB0aGUgcGF0Y2gsIEkgZG9uJ3Qgc2VlIGFueSByZWFzb24gZm9yIEtNU0FOIGhlcmUuIEl0IHNob3VsZCBiZSBzYWZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ0MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjMyOjAzLjQ3NTIwNzUxNloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMzIyNzQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoZWFkcyA9IGttYWxsb2NfYXJyYXlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92aG9zdC5jPTUxMD1zdGF0aWMgbG9uZyB2aG9zdF9kZXZfYWxsb2NfaW92ZWNzKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy01MTktXFx0XFx0dnEtXFx1MDAzZWhlYWRzID0ga21hbGxvY19vYmpzKCp2cS1cXHUwMDNlaGVhZHMsIGRldi1cXHUwMDNlaW92X2xpbWl0KTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6NTIwOlxcdFxcdHZxLVxcdTAwM2VuaGVhZHMgPSBrbWFsbG9jX2FycmF5KGRldi1cXHUwMDNlaW92X2xpbWl0LCBzaXplb2YoKnZxLVxcdTAwM2VuaGVhZHMpLFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy01MjEtXFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjMyOjA0Ljk3ODQ0MDYzNFoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTA4ODA0NTk4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIE1lbW9yeSBTYWZldHkgSXNzdWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGZpcnN0IGxpbmUsIGB2cS1cdTAwM2VoZWFkcyA9IGttYWxsb2Nfb2JqcygqdnEtXHUwMDNlaGVhZHMsIGRldi1cdTAwM2Vpb3ZfbGltaXQpO2AgaXMgd2hhdCdzIGNhdGNoaW5nIG15IGV5ZS4gSSBpbW1lZGlhdGVseSBzdXNwZWN0IGBrbWFsbG9jX29ianNgIGlzIGEgbWFjcm8sIHdoaWNoIGlzIHN0YW5kYXJkIHByYWN0aWNlIGluIHRoZXNlIHR5cGVzIG9mIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBjb250ZXh0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCdzIGRvaW5nLCBzcGVjaWZpY2FsbHkgd2l0aCByZXNwZWN0IHRvIG1lbW9yeSBhbGxvY2F0aW9uLlxuXG5UaGVuLCB0aGVyZSdzIGEgcXVpY2sgdGhvdWdodC4uLiBpcyBga21hbGxvY19hcnJheWAgcG90ZW50aWFsbHkgdXNlZCBieSBga21hbGxvY19vYmpzYCBmb3IgYG5oZWFkc2A/IFRoYXQgd291bGQgbWFrZSBzZW5zZSwgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgdGhlIGJvdW5kcy4gVGhlIGB1c2VkX2NvdW50YCB2YXJpYWJsZSBzZWVtcyBrZXkgaGVyZS4gSSdtIHRoaW5raW5nIGFib3V0IG1lbW9yeSBzYWZldHkuIEl0J3MgYm91bmRlZCBieSBgdXNlZF9saW1pdGAsIHdoaWNoIGluIHR1cm4sIGlzIGJvdW5kZWQgYnkgYHZxLVx1MDAzZWRldi1cdTAwM2Vpb3ZfbGltaXRgLiBUaGlzIHN1Z2dlc3RzIGEgY2FyZWZ1bCBjb250cm9sIG9mIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgYWxsb2NhdGVkLiBJZiB0aGlzIHJlYXNvbmluZyBpcyByaWdodCwgaXQgaW1wbGllcyB0aGF0IHdlICpzaG91bGRuJ3QqIG92ZXJmbG93IGB2cS1cdTAwM2VoZWFkc2AuXG5cbkFuZCBqdXN0IHRvIGNsYXJpZnksIHdlIGFyZSBvbmx5IGNvcHlpbmcgYHVzZWRfY291bnRgIGVsZW1lbnRzIHRvIHVzZXJzcGFjZSwgYW5kIGl0IHNob3VsZCBiZSB0aG9zZSBlbGVtZW50cyB0aGF0IHdlcmUgaW5pdGlhbGl6ZWQuIFRoYXQgbWVhbnMgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHdlIGFyZW4ndCBwZXJmb3JtaW5nIGFueSBvdXQtb2YtYm91bmRzIHJlYWRzIGZyb20gYHZxLVx1MDAzZWhlYWRzYC4gVGhhdCdzIGEgaHVnZSByZWxpZWYuXG5cbkJ1dCBJJ20gbm90IGdvaW5nIHRvIHRha2UgdGhhdCBhcyBnb3NwZWwuIFdlIHN0aWxsIG5lZWQgdG8gdmVyaWZ5IHdoYXQgYGttYWxsb2Nfb2Jqc2AgaXMgYWN0dWFsbHkgZG9pbmcuIExldCdzIGRlbHZlIGludG8gdGhhdCBkZWZpbml0aW9uIGFuZCBlbnN1cmUgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaW1lIHRvIHZlcmlmeSB0aG9zZSBhc3N1bXB0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3OTAsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzI6MjQuMDY2NDg4ODE2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTExMTY1MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttYWxsb2Nfb2Jqc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDM2NzIgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjkzOTprbWFsbG9jKCksIGt6YWxsb2MoKSwga21hbGxvY19vYmpzKCksIGt6YWxsb2Nfb2JqcygpLCB2bWFsbG9jKCksIGFuZFxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0MC12emFsbG9jKCkuICBQbGVhc2UgcmVmZXIgdG8gdGhlIEFQSSBkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NTg9VGhlIHByZWZlcnJlZCBmb3JtIGZvciBhbGxvY2F0aW5nIGFuIGFycmF5IGlzIHRoZSBmb2xsb3dpbmc6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjEtXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTYyOlxcdHAgPSBrbWFsbG9jX29ianMoKnAsIG4sIC4uLik7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTYzLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0PTM5OD1iZWNvbWUsIHJlc3BlY3RpdmVseTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAxLVxcdHB0ciA9IGt6YWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDI6XFx0cHRyID0ga21hbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAzLVxcdHB0ciA9IGt6YWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XFxuLS1cXG5hcmNoL2FybS9tbS9wZ2QuYy0xOS0jaWZkZWYgQ09ORklHX0FSTV9MUEFFXFxuYXJjaC9hcm0vbW0vcGdkLmM6MjA6I2RlZmluZSBfcGdkX2FsbG9jKG1tKVxcdFxcdGttYWxsb2Nfb2JqcyhwZ2RfdCwgUFRSU19QRVJfUEdELCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTylcXG5hcmNoL2FybS9tbS9wZ2QuYy0yMS0jZGVmaW5lIF9wZ2RfZnJlZShtbSwgcGdkKVxcdGtmcmVlKHBnZClcXG4tLVxcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jPTc2ND1zdGF0aWMgaW50IGNvdmVyYWdlX3N0YXJ0KGNvbnN0IHVuaW9uIGRlY29kZV9pdGVtICp0YWJsZSlcXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYy03NjUte1xcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jOjc2NjpcXHRjb3ZlcmFnZS5iYXNlID0ga21hbGxvY19vYmpzKHN0cnVjdCBjb3ZlcmFnZV9lbnRyeSxcXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYy03NjctXFx0XFx0XFx0XFx0ICAgICBNQVhfQ09WRVJBR0VfRU5UUklFUyk7XFxuLS1cXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYz0zOTE9dTMyIGF1MXh4eF9kYmRtYV9yaW5nX2FsbG9jKHUzMiBjaGFuaWQsIGludCBlbnRyaWVzKVxcbi0tXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtNDE0LVxcdCAqL1xcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jOjQxNTpcXHRkZXNjX2Jhc2UgPSAodTMyKSBrbWFsbG9jX29ianMoYXUxeF9kZG1hX2Rlc2NfdCwgZW50cmllcyxcXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy00MTYtXFx0XFx0XFx0XFx0ICAgICAgIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYz01MzI9YWRkX3N5c3RlbV9tYXBfYWRkcmVzc2VzKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpkZXYsIGludCBudW1fYWRkcnMsIFxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTUzOC1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM6NTM5OlxcdGRldi1cXHUwMDNlYWRkciA9IGttYWxsb2Nfb2JqcygqZGV2LVxcdTAwM2VhZGRyLCBudW1fYWRkcnMpO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYy01NDAtXFx0aWYoIWRldi1cXHUwMDNlYWRkcikge1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jPTczMT1pbnQga3ZtX3ZjcHVfaW9jdGxfY29uZmlnX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtNzc0LVxcdFxcdCAgICBjZmctXFx1MDAzZWFycmF5IC8gUEFHRV9TSVpFO1xcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYzo3NzU6XFx0cGFnZXMgPSBrbWFsbG9jX29ianMoKnBhZ2VzLCBudW1fcGFnZXMpO1xcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy03NzYtXFx0aWYgKCFwYWdlcylcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYz04OTg9aW50IGt2bXBwY19lNTAwX3RsYl9pbml0KHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtOTE0LVxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYzo5MTU6XFx0dmNwdV9lNTAwLVxcdTAwM2VndGxiX2FyY2ggPSBrbWFsbG9jX29ianMoKnZjcHVfZTUwMC1cXHUwMDNlZ3RsYl9hcmNoLFxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTYtXFx0XFx0XFx0XFx0XFx0ICAgIEtWTV9FNTAwX1RMQjBfU0laRSArIEtWTV9FNTAwX1RMQjFfU0laRSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM9NDU9c3RhdGljIGludCBncm93KHJoX2luZm9fdCAqIGluZm8sIGludCBtYXhfYmxvY2tzKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTU2LVxcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYzo1NzpcXHRibG9jayA9IGttYWxsb2Nfb2JqcyhyaF9ibG9ja190LCBtYXhfYmxvY2tzLCBHRlBfQVRPTUlDKTtcXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMtNTgtXFx0aWYgKGJsb2NrID09IE5VTEwpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM9NzU1PXN0YXRpYyBpbnQgY3JlYXRlX2V2ZW50c19mcm9tX2NhdGFsb2coc3RydWN0IGF0dHJpYnV0ZSAqKipldmVudHNfLFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkwOC1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTA5OlxcdGV2ZW50cyA9IGttYWxsb2Nfb2JqcygqZXZlbnRzLCBhdHRyX21heCArIDEpO1xcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTAtXFx0aWYgKCFldmVudHMpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTQtXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkxNTpcXHRldmVudF9kZXNjcyA9IGttYWxsb2Nfb2JqcygqZXZlbnRfZGVzY3MsIGV2ZW50X2lkeCArIDEpO1xcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTYtXFx0aWYgKCFldmVudF9kZXNjcykge1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkyMC1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTIxOlxcdGV2ZW50X2xvbmdfZGVzY3MgPSBrbWFsbG9jX29ianMoKmV2ZW50X2xvbmdfZGVzY3MsIGV2ZW50X2lkeCArIDEpO1xcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MjItXFx0aWYgKCFldmVudF9sb25nX2Rlc2NzKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jPTEyMj1zdGF0aWMgaW50IGhzdGFfbXNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jLTE1My1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jOjE1NDpcXHRwcGM0eHhfaHN0YV9tc2kuaXJxX21hcCA9IGttYWxsb2Nfb2JqcyhpbnQsIGlycV9jb3VudCk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYy0xNTUtXFx0aWYgKCFwcGM0eHhfaHN0YV9tc2kuaXJxX21hcCkge1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jPTEyMD1zdGF0aWMgaW50IHBzZXJpZXNfcGNpX3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2IG51bV92ZnMpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMtMTQzLVxcdHBkbiA9IHBjaV9nZXRfcGRuKHBkZXYpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYzoxNDQ6XFx0cGRuLVxcdTAwM2VwZV9udW1fbWFwID0ga21hbGxvY19vYmpzKCpwZG4tXFx1MDAzZXBlX251bV9tYXAsIG51bV92ZnMpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYy0xNDUtXFx0aWYgKCFwZG4tXFx1MDAzZXBlX251bV9tYXApXFxuLS1cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYz0xNTQ5PXZvaWQgX19pbml0IG1waWNfaW5pdChzdHJ1Y3QgbXBpYyAqbXBpYylcXG4tLVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jLTE2NDEtXFx0LyogYWxsb2NhdGUgbWVtb3J5IHRvIHNhdmUgbXBpYyBzdGF0ZSAqL1xcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jOjE2NDI6XFx0bXBpYy1cXHUwMDNlc2F2ZV9kYXRhID0ga21hbGxvY19vYmpzKCptcGljLVxcdTAwM2VzYXZlX2RhdGEsIG1waWMtXFx1MDAzZW51bV9zb3VyY2VzKTtcXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYy0xNjQzLVxcdEJVR19PTihtcGljLVxcdTAwM2VzYXZlX2RhdGEgPT0gTlVMTCk7XFxuLS1cXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM9MzA9c3RhdGljIHZvaWQgKmRpYWcwY19zdG9yZSh1bnNpZ25lZCBpbnQgKmNvdW50KVxcbi0tXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jLTM3LVxcdGNwdV9jb3VudCA9IG51bV9vbmxpbmVfY3B1cygpO1xcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYzozODpcXHRjcHVfdmVjID0ga21hbGxvY19vYmpzKCpjcHVfdmVjLCBudW1fcG9zc2libGVfY3B1cygpKTtcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmMtMzktXFx0aWYgKCFjcHVfdmVjKVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmg9MTkwPXN0YXRpYyBpbmxpbmUgc3RydWN0IGlkYWxfYnVmZmVyICoqaWRhbF9idWZmZXJfYXJyYXlfYWxsb2Moc2l6ZV90IHNpemUsIGludCBwYWdlX29yZGVyKVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmgtMTk3LVxcdGNvdW50ID0gKHNpemUgKyBDQ1dfTUFYX0JZVEVfQ09VTlQgLSAxKSAvIENDV19NQVhfQllURV9DT1VOVDtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaDoxOTg6XFx0aWJzID0ga21hbGxvY19vYmpzKCppYnMsIGNvdW50ICsgMSk7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmgtMTk5LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb3VudDsgaSsrKSB7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmM9MjY2PXN0YXRpYyBkZWJ1Z19lbnRyeV90ICoqKmRlYnVnX2FyZWFzX2FsbG9jKGludCBwYWdlc19wZXJfYXJlYSwgaW50IG5yX2FyZWFzKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jLTI3MC1cXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmM6MjcxOlxcdGFyZWFzID0ga21hbGxvY19vYmpzKGRlYnVnX2VudHJ5X3QgKiosIG5yX2FyZWFzKTtcXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMtMjcyLVxcdGlmICghYXJlYXMpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMtMjc1LVxcdFxcdC8qIEdGUF9OT1dBUk4gdG8gYXZvaWQgdXNlciB0cmlnZ2VyYWJsZSBXQVJOLCB3ZSBoYW5kbGUgZmFpbHMgKi9cXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmM6Mjc2OlxcdFxcdGFyZWFzW2ldID0ga21hbGxvY19vYmpzKGRlYnVnX2VudHJ5X3QgKiwgcGFnZXNfcGVyX2FyZWEsXFxuYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jLTI3Ny1cXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvcGVyZl9jcHVtX2NmX2V2ZW50cy5jPTk2ND1zdGF0aWMgX19pbml0IHN0cnVjdCBhdHRyaWJ1dGUgKiptZXJnZV9hdHRyKHN0cnVjdCBhdHRyaWJ1dGUgKiphLFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX2NwdW1fY2ZfZXZlbnRzLmMtOTc4LVxcbmFyY2gvczM5MC9rZXJuZWwvcGVyZl9jcHVtX2NmX2V2ZW50cy5jOjk3OTpcXHRuZXcgPSBrbWFsbG9jX29ianMoc3RydWN0IGF0dHJpYnV0ZSAqLCBqKTtcXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfY3B1bV9jZl9ldmVudHMuYy05ODAtXFx0aWYgKCFuZXcpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfcGFpLmM9MTA5Nj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqKiBfX2luaXQgYXR0cl9ldmVudF9pbml0KHN0cnVjdCBwYWlfcG11ICpwKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX3BhaS5jLTExMDEtXFxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX3BhaS5jOjExMDI6XFx0YXR0cnMgPSBrbWFsbG9jX29ianMoKmF0dHJzLCBtaW5fYXR0ciArIDEsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfcGFpLmMtMTEwMy1cXHRpZiAoIWF0dHJzKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jPTIwMz1pbnQga3ZtX3MzOTBfaW1wb3J0X2JwX2RhdGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jLTIzNC1cXHRpZiAobnJfd3AgXFx1MDAzZSAwKSB7XFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjIzNTpcXHRcXHR3cF9pbmZvID0ga21hbGxvY19vYmpzKCp3cF9pbmZvLCBucl93cCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMjM2LVxcdFxcdGlmICghd3BfaW5mbykge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jLTI0MS1cXHRpZiAobnJfYnAgXFx1MDAzZSAwKSB7XFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjI0MjpcXHRcXHRicF9pbmZvID0ga21hbGxvY19vYmpzKCpicF9pbmZvLCBucl9icCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMjQzLVxcdFxcdGlmICghYnBfaW5mbykge1xcbi0tXFxuYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjXzY0LmM9NjI1PVNZU0NBTExfREVGSU5FNSh1dHJhcF9pbnN0YWxsLCB1dHJhcF9lbnRyeV90LCB0eXBlLFxcbi0tXFxuYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjXzY0LmMtNjU5LVxcdFxcdFxcdGN1cnJlbnRfdGhyZWFkX2luZm8oKS1cXHUwMDNldXRyYXBzID1cXG5hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfNjQuYzo2NjA6XFx0XFx0XFx0XFx0a21hbGxvY19vYmpzKGxvbmcsIFVUX1RSQVBfSU5TVFJVQ1RJT05fMzEgKyAxKTtcXG5hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfNjQuYy02NjEtXFx0XFx0XFx0aWYgKCFjdXJyZW50X3RocmVhZF9pbmZvKCktXFx1MDAzZXV0cmFwcykge1xcbi0tXFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmM9MTA2ND1zdGF0aWMgaW50IF9faW5pdCB1YmRfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTA3MS1cXG5hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYzoxMDcyOlxcdGlycV9yZXFfYnVmZmVyID0ga21hbGxvY19vYmpzKHN0cnVjdCBpb190aHJlYWRfcmVxICosXFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTA3My1cXHRcXHRcXHRcXHQgICAgICBVQkRfUkVRX0JVRkZFUl9TSVpFKTtcXG4tLVxcbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jLTEwNzktXFx0fVxcbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jOjEwODA6XFx0aW9fcmVxX2J1ZmZlciA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaW9fdGhyZWFkX3JlcSAqLFxcbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jLTEwODEtXFx0XFx0XFx0XFx0ICAgICBVQkRfUkVRX0JVRkZFUl9TSVpFKTtcXG4tLVxcbmFyY2gvdW0vZHJpdmVycy92ZWN0b3Jfa2Vybi5jPTUwNz1zdGF0aWMgc3RydWN0IHZlY3Rvcl9xdWV1ZSAqY3JlYXRlX3F1ZXVlKFxcbi0tXFxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmMtNTQ2LVxcdFxcdGlmICh2cC1cXHUwMDNlaGVhZGVyX3NpemUgXFx1MDAzZSAwKVxcbmFyY2gvdW0vZHJpdmVycy92ZWN0b3Jfa2Vybi5jOjU0NzpcXHRcXHRcXHRpb3YgPSBrbWFsbG9jX29ianMoc3RydWN0IGlvdmVjLCAzICsgbnVtX2V4dHJhX2ZyYWdzKTtcXG5hcmNoL3VtL2RyaXZlcnMvdmVjdG9yX2tlcm4uYy01NDgtXFx0XFx0ZWxzZVxcbmFyY2gvdW0vZHJpdmVycy92ZWN0b3Jfa2Vybi5jOjU0OTpcXHRcXHRcXHRpb3YgPSBrbWFsbG9jX29ianMoc3RydWN0IGlvdmVjLCAyICsgbnVtX2V4dHJhX2ZyYWdzKTtcXG5hcmNoL3VtL2RyaXZlcnMvdmVjdG9yX2tlcm4uYy01NTAtXFx0XFx0aWYgKGlvdiA9PSBOVUxMKVxcbi0tXFxuYXJjaC91bS9kcml2ZXJzL3ZmaW9fa2Vybi5jPTQ4ND1zdGF0aWMgdm9pZCB1bWxfdmZpb19vcGVuX2RldmljZShzdHJ1Y3QgdW1sX3ZmaW9fZGV2aWNlICpkZXYpXFxuLS1cXG5hcmNoL3VtL2RyaXZlcnMvdmZpb19rZXJuLmMtNTE2LVxcbmFyY2gvdW0vZHJpdmVycy92ZmlvX2tlcm4uYzo1MTc6XFx0ZGV2LVxcdTAwM2VpbnRyX2N0eCA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgdW1sX3ZmaW9faW50cl9jdHgsXFxuYXJjaC91bS9kcml2ZXJzL3ZmaW9fa2Vybi5jLTUxOC1cXHRcXHRcXHRcXHQgICAgIGRldi1cXHUwMDNldWRldi5pcnFfY291bnQpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jPTc5Nz1zdGF0aWMgYm9vbCBfX2luaXQgc2d4X3BhZ2VfY2FjaGVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTgwMy1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM6ODA0OlxcdHNneF9udW1hX25vZGVzID0ga21hbGxvY19vYmpzKCpzZ3hfbnVtYV9ub2RlcywgbnVtX3Bvc3NpYmxlX25vZGVzKCkpO1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy04MDUtXFx0aWYgKCFzZ3hfbnVtYV9ub2RlcylcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rc3lzZnMuYz0zMjc9c3RhdGljIGludCBfX2luaXQgY3JlYXRlX3NldHVwX2RhdGFfbm9kZXMoc3RydWN0IGtvYmplY3QgKnBhcmVudClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rc3lzZnMuYy0zNDYtXFxuYXJjaC94ODYva2VybmVsL2tzeXNmcy5jOjM0NzpcXHRrb2JqcCA9IGttYWxsb2Nfb2Jqcygqa29ianAsIG5yKTtcXG5hcmNoL3g4Ni9rZXJuZWwva3N5c2ZzLmMtMzQ4LVxcdGlmICgha29ianApIHtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0xNDcxPXN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0xNTE2LVxcbmFyY2gveDg2L2t2bS94ZW4uYzoxNTE3OlxcdFxcdHBvcnRzID0ga21hbGxvY19vYmpzKCpwb3J0cywgc2NoZWRfcG9sbC5ucl9wb3J0cyk7XFxuYXJjaC94ODYva3ZtL3hlbi5jLTE1MTgtXFx0XFx0aWYgKCFwb3J0cykge1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTIyMDM9c3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTIyMTgtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjIyMTk6XFx0YWxsX2V2dGNobmZkcyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgZXZ0Y2huZmQgKiwgbik7XFxuYXJjaC94ODYva3ZtL3hlbi5jLTIyMjAtXFx0aWYgKCFhbGxfZXZ0Y2huZmRzKSB7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYz0yNTIxPXN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0yNTMzLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jOjI1MzQ6XFx0YWRkcnMgPSBrbWFsbG9jX29ianMoKmFkZHJzLCBwcm9nLVxcdTAwM2VsZW4pO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jLTI1MzUtXFx0aWYgKCFhZGRycylcXG4tLVxcbmFyY2gveDg2L3Bvd2VyL2NwdS5jPTM4OD1zdGF0aWMgaW50IG1zcl9idWlsZF9jb250ZXh0KGNvbnN0IHUzMiAqbXNyX2lkLCBjb25zdCBpbnQgbnVtKVxcbi0tXFxuYXJjaC94ODYvcG93ZXIvY3B1LmMtMzk2LVxcbmFyY2gveDg2L3Bvd2VyL2NwdS5jOjM5NzpcXHRtc3JfYXJyYXkgPSBrbWFsbG9jX29ianMoc3RydWN0IHNhdmVkX21zciwgdG90YWxfbnVtKTtcXG5hcmNoL3g4Ni9wb3dlci9jcHUuYy0zOTgtXFx0aWYgKCFtc3JfYXJyYXkpIHtcXG4tLVxcbmFyY2gveDg2L3hlbi9ncmFudC10YWJsZS5jPTEwMj1zdGF0aWMgaW50IGFyY2hfZ250dGFiX3ZhbGxvYyhzdHJ1Y3QgZ250dGFiX3ZtX2FyZWEgKmFyZWEsIHVuc2lnbmVkIG5yX2ZyYW1lcylcXG5hcmNoL3g4Ni94ZW4vZ3JhbnQtdGFibGUuYy0xMDMte1xcbmFyY2gveDg2L3hlbi9ncmFudC10YWJsZS5jOjEwNDpcXHRhcmVhLVxcdTAwM2VwdGVzID0ga21hbGxvY19vYmpzKCphcmVhLVxcdTAwM2VwdGVzLCBucl9mcmFtZXMpO1xcbmFyY2gveDg2L3hlbi9ncmFudC10YWJsZS5jLTEwNS1cXHRpZiAoYXJlYS1cXHUwMDNlcHRlcyA9PSBOVUxMKVxcbi0tXFxuYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9zaW1kaXNrLmM9MzA4PXN0YXRpYyBpbnQgX19pbml0IHNpbWRpc2tfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9zaW1kaXNrLmMtMzIyLVxcbmFyY2gveHRlbnNhL3BsYXRmb3Jtcy9pc3Mvc2ltZGlzay5jOjMyMzpcXHRzZGRldiA9IGttYWxsb2Nfb2Jqcygqc2RkZXYsIHNpbWRpc2tfY291bnQpO1xcbmFyY2gveHRlbnNhL3BsYXRmb3Jtcy9pc3Mvc2ltZGlzay5jLTMyNC1cXHRpZiAoc2RkZXYgPT0gTlVMTClcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmM9NTc4PXN0YXRpYyBib29sIGJmcXFfcmVxdWVzdF9vdmVyX2xpbWl0KHN0cnVjdCBiZnFfZGF0YSAqYmZxZCxcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjA4LVxcdFxcdFxcdGtmcmVlKGVudGl0aWVzKTtcXG5ibG9jay9iZnEtaW9zY2hlZC5jOjYwOTpcXHRcXHRlbnRpdGllcyA9IGttYWxsb2Nfb2JqcygqZW50aXRpZXMsIGRlcHRoLCBHRlBfTk9JTyk7XFxuYmxvY2svYmZxLWlvc2NoZWQuYy02MTAtXFx0XFx0aWYgKCFlbnRpdGllcylcXG4tLVxcbmJsb2NrL2Jsay1zdGF0LmM9MTAwPWJsa19zdGF0X2FsbG9jX2NhbGxiYWNrKHZvaWQgKCp0aW1lcl9mbikoc3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICopLFxcbi0tXFxuYmxvY2svYmxrLXN0YXQuYy0xMDktXFxuYmxvY2svYmxrLXN0YXQuYzoxMTA6XFx0Y2ItXFx1MDAzZXN0YXQgPSBrbWFsbG9jX29ianMoc3RydWN0IGJsa19ycV9zdGF0LCBidWNrZXRzKTtcXG5ibG9jay9ibGstc3RhdC5jLTExMS1cXHRpZiAoIWNiLVxcdTAwM2VzdGF0KSB7XFxuLS1cXG5ibG9jay9mb3BzLmM9NTU9c3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuLS1cXG5ibG9jay9mb3BzLmMtNjctXFx0ZWxzZSB7XFxuYmxvY2svZm9wcy5jOjY4OlxcdFxcdHZlY3MgPSBrbWFsbG9jX29ianMoc3RydWN0IGJpb192ZWMsIG5yX3BhZ2VzKTtcXG5ibG9jay9mb3BzLmMtNjktXFx0XFx0aWYgKCF2ZWNzKVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz0zNTE9c3RhdGljIGJvb2wgbGRtX3ZhbGlkYXRlX3RvY2Jsb2NrcyhzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLFxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zNjQtXFx0dGJbMF0gPSBcXHUwMDI2bGRiLVxcdTAwM2V0b2M7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozNjU6XFx0dGJbMV0gPSBrbWFsbG9jX29ianMoKnRiWzFdLCAzKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM2Ni1cXHRpZiAoIXRiWzFdKSB7XFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jPTE0MDc9c3RhdGljIGludCBobF9jc19jb3B5X2NodW5rX2FycmF5KHN0cnVjdCBobF9kZXZpY2UgKmhkZXYsXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jLTE0MjItXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX3N1Ym1pc3Npb24uYzoxNDIzOlxcdCpjc19jaHVua19hcnJheSA9IGttYWxsb2Nfb2JqcygqKmNzX2NodW5rX2FycmF5LCBudW1fY2h1bmtzLCBHRlBfQVRPTUlDKTtcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jLTE0MjQtXFx0aWYgKCEqY3NfY2h1bmtfYXJyYXkpXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX3N1Ym1pc3Npb24uYzoxNDI1OlxcdFxcdCpjc19jaHVua19hcnJheSA9IGttYWxsb2Nfb2JqcygqKmNzX2NodW5rX2FycmF5LCBudW1fY2h1bmtzKTtcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jLTE0MjYtXFx0aWYgKCEqY3NfY2h1bmtfYXJyYXkpIHtcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmM9MzAwNT1zdGF0aWMgaW50IGhsX211bHRpX2NzX3dhaXRfaW9jdGwoc3RydWN0IGhsX2Zwcml2ICpocHJpdiwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmMtMzA1My1cXHQvKiBhbGxvY2F0ZSBhcnJheSBmb3IgdGhlIGZlbmNlcyAqL1xcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmM6MzA1NDpcXHRmZW5jZV9hcnIgPSBrbWFsbG9jX29ianMoc3RydWN0IGhsX2ZlbmNlICosIHNlcV9hcnJfbGVuKTtcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jLTMwNTUtXFx0aWYgKCFmZW5jZV9hcnIpIHtcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vZGVidWdmcy5jPTIwNDk9aW50IGhsX2RlYnVnZnNfZGV2aWNlX2luaXQoc3RydWN0IGhsX2RldmljZSAqaGRldilcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vZGVidWdmcy5jLTIwNTQtXFx0ZGV2X2VudHJ5LVxcdTAwM2VoZGV2ID0gaGRldjtcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2RlYnVnZnMuYzoyMDU1OlxcdGRldl9lbnRyeS1cXHUwMDNlZW50cnlfYXJyID0ga21hbGxvY19vYmpzKHN0cnVjdCBobF9kZWJ1Z2ZzX2VudHJ5LCBjb3VudCk7XFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9kZWJ1Z2ZzLmMtMjA1Ni1cXHRpZiAoIWRldl9lbnRyeS1cXHUwMDNlZW50cnlfYXJyKVxcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9od19xdWV1ZS5jPTgyND1zdGF0aWMgaW50IGV4dF9hbmRfY3B1X3F1ZXVlX2luaXQoc3RydWN0IGhsX2RldmljZSAqaGRldiwgc3RydWN0IGhsX2h3X3F1ZXVlICpxLFxcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9od19xdWV1ZS5jLTgzOS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2h3X3F1ZXVlLmM6ODQwOlxcdHEtXFx1MDAzZXNoYWRvd19xdWV1ZSA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaGxfY3Nfam9iICosIEhMX1FVRVVFX0xFTkdUSCk7XFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9od19xdWV1ZS5jLTg0MS1cXHRpZiAoIXEtXFx1MDAzZXNoYWRvd19xdWV1ZSkge1xcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYz0zOTM4PXN0YXRpYyBpbnQgZ2F1ZGkyX3NwZWNpYWxfYmxvY2tzX2NvbmZpZyhzdHJ1Y3QgaGxfZGV2aWNlICpoZGV2KVxcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYy0zOTQ1LVxcdHByb3AtXFx1MDAzZW51bV9vZl9zcGVjaWFsX2Jsb2NrcyA9IEFSUkFZX1NJWkUoZ2F1ZGkyX3NwZWNpYWxfYmxvY2tzKTtcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jOjM5NDY6XFx0cHJvcC1cXHUwMDNlc3BlY2lhbF9ibG9ja3MgPSBrbWFsbG9jX29ianMoKnByb3AtXFx1MDAzZXNwZWNpYWxfYmxvY2tzLFxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmMtMzk0Ny1cXHRcXHRcXHRcXHRcXHQgICAgcHJvcC1cXHUwMDNlbnVtX29mX3NwZWNpYWxfYmxvY2tzKTtcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmMtMzk2MC1cXHRcXHRwcm9wLVxcdTAwM2Vza2lwX3NwZWNpYWxfYmxvY2tzX2NmZy5ibG9ja190eXBlcyA9XFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYzozOTYxOlxcdFxcdFxcdFxcdGttYWxsb2Nfb2JqcyhnYXVkaTJfaXRlcmF0b3Jfc2tpcF9ibG9ja190eXBlc1swXSxcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jLTM5NjItXFx0XFx0XFx0XFx0XFx0ICAgICBBUlJBWV9TSVpFKGdhdWRpMl9pdGVyYXRvcl9za2lwX2Jsb2NrX3R5cGVzKSk7XFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jLTM5NzYtXFx0XFx0cHJvcC1cXHUwMDNlc2tpcF9zcGVjaWFsX2Jsb2Nrc19jZmcuYmxvY2tfcmFuZ2VzID1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jOjM5Nzc6XFx0XFx0XFx0XFx0a21hbGxvY19vYmpzKGdhdWRpMl9pdGVyYXRvcl9za2lwX2Jsb2NrX3Jhbmdlc1swXSxcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jLTM5NzgtXFx0XFx0XFx0XFx0XFx0ICAgICBBUlJBWV9TSVpFKGdhdWRpMl9pdGVyYXRvcl9za2lwX2Jsb2NrX3JhbmdlcykpO1xcbi0tXFxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfY29udHJvbC5jPTM5Mz1zdGF0aWMgaW50IGZpbmRfYW5kX21hcF91c2VyX3BhZ2VzKHN0cnVjdCBxYWljX2RldmljZSAqcWRldixcXG4tLVxcbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2NvbnRyb2wuYy00MjUtXFx0d2hpbGUgKDEpIHtcXG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19jb250cm9sLmM6NDI2OlxcdFxcdHBhZ2VfbGlzdCA9IGttYWxsb2Nfb2JqcygqcGFnZV9saXN0LCBucl9wYWdlcyxcXG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19jb250cm9sLmMtNDI3LVxcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4tLVxcbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYz00OTY9aW50IHJvY2tldF9qb2Jfb3BlbihzdHJ1Y3Qgcm9ja2V0X2ZpbGVfcHJpdiAqcm9ja2V0X3ByaXYpXFxuLS1cXG5kcml2ZXJzL2FjY2VsL3JvY2tldC9yb2NrZXRfam9iLmMtNDk4LVxcdHN0cnVjdCByb2NrZXRfZGV2aWNlICpyZGV2ID0gcm9ja2V0X3ByaXYtXFx1MDAzZXJkZXY7XFxuZHJpdmVycy9hY2NlbC9yb2NrZXQvcm9ja2V0X2pvYi5jOjQ5OTpcXHRzdHJ1Y3QgZHJtX2dwdV9zY2hlZHVsZXIgKipzY2hlZHMgPSBrbWFsbG9jX29ianMoKnNjaGVkcyxcXG5kcml2ZXJzL2FjY2VsL3JvY2tldC9yb2NrZXRfam9iLmMtNTAwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCByZGV2LVxcdTAwM2VudW1fY29yZXMpO1xcbi0tXFxuZHJpdmVycy9hY3BpL2FjcGlfbXJybS5jPTU1PXN0YXRpYyBfX2luaXQgaW50IGFjcGlfcGFyc2VfbXJybShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlKVxcbi0tXFxuZHJpdmVycy9hY3BpL2FjcGlfbXJybS5jLTgzLVxcbmRyaXZlcnMvYWNwaS9hY3BpX21ycm0uYzo4NDpcXHRtcnJtX21lbV9yYW5nZV9lbnRyeSA9IGttYWxsb2Nfb2JqcygqbXJybV9tZW1fcmFuZ2VfZW50cnksIG1yZV9jb3VudCxcXG5kcml2ZXJzL2FjcGkvYWNwaV9tcnJtLmMtODUtXFx0XFx0XFx0XFx0XFx0ICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcXG4tLVxcbmRyaXZlcnMvYWNwaS9hY3BpX3ZpZGVvLmM9Nzk4PWludCBhY3BpX3ZpZGVvX2dldF9sZXZlbHMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL2FjcGkvYWNwaV92aWRlby5jLTgzMS1cXHQgKi9cXG5kcml2ZXJzL2FjcGkvYWNwaV92aWRlby5jOjgzMjpcXHRici1cXHUwMDNlbGV2ZWxzID0ga21hbGxvY19vYmpzKCpici1cXHUwMDNlbGV2ZWxzLFxcbmRyaXZlcnMvYWNwaS9hY3BpX3ZpZGVvLmMtODMzLVxcdFxcdFxcdFxcdCAgb2JqLVxcdTAwM2VwYWNrYWdlLmNvdW50ICsgQUNQSV9WSURFT19GSVJTVF9MRVZFTCk7XFxuLS1cXG5kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYz0zMTY9c3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9nZXRfcGVyZm9ybWFuY2Vfc3RhdGVzKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpXFxuLS1cXG5kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYy0zNDQtXFx0cHItXFx1MDAzZXBlcmZvcm1hbmNlLVxcdTAwM2VzdGF0ZXMgPVxcbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jOjM0NTpcXHQgICAga21hbGxvY19vYmpzKHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9weCwgcHNzLVxcdTAwM2VwYWNrYWdlLmNvdW50KTtcXG5kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYy0zNDYtXFx0aWYgKCFwci1cXHUwMDNlcGVyZm9ybWFuY2UtXFx1MDAzZXN0YXRlcykge1xcbi0tXFxuZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmM9NDg1PXN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfZ2V0X3Rocm90dGxpbmdfc3RhdGVzKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpXFxuLS1cXG5kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYy01MTQtXFx0cHItXFx1MDAzZXRocm90dGxpbmcuc3RhdGVzX3RzcyA9XFxuZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmM6NTE1OlxcdCAgICBrbWFsbG9jX29ianMoc3RydWN0IGFjcGlfcHJvY2Vzc29yX3R4X3RzcywgdHNzLVxcdTAwM2VwYWNrYWdlLmNvdW50KTtcXG5kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYy01MTYtXFx0aWYgKCFwci1cXHUwMDNldGhyb3R0bGluZy5zdGF0ZXNfdHNzKSB7XFxuLS1cXG5kcml2ZXJzL2Jhc2UvY29tcG9uZW50LmM9MzU5PXN0YXRpYyBpbnQgY29tcG9uZW50X21hdGNoX3JlYWxsb2Moc3RydWN0IGNvbXBvbmVudF9tYXRjaCAqbWF0Y2gsIHNpemVfdCBudW0pXFxuLS1cXG5kcml2ZXJzL2Jhc2UvY29tcG9uZW50LmMtMzY1LVxcbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYzozNjY6XFx0bmV3ID0ga21hbGxvY19vYmpzKCpuZXcsIG51bSk7XFxuZHJpdmVycy9iYXNlL2NvbXBvbmVudC5jLTM2Ny1cXHRpZiAoIW5ldylcXG4tLVxcbmRyaXZlcnMvYmFzZS9tYXAuYz0zMj1pbnQga29ial9tYXAoc3RydWN0IGtvYmpfbWFwICpkb21haW4sIGRldl90IGRldiwgdW5zaWduZWQgbG9uZyByYW5nZSxcXG4tLVxcbmRyaXZlcnMvYmFzZS9tYXAuYy00My1cXG5kcml2ZXJzL2Jhc2UvbWFwLmM6NDQ6XFx0cCA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgcHJvYmUsIG4pO1xcbmRyaXZlcnMvYmFzZS9tYXAuYy00NS1cXHRpZiAocCA9PSBOVUxMKVxcbi0tXFxuZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS5jPTEyND1pbnQgcmVnY2FjaGVfaW5pdChzdHJ1Y3QgcmVnbWFwICptYXAsIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnICpjb25maWcpXFxuLS1cXG5kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLmMtMjE0LVxcdFxcdG1hcC1cXHUwMDNlbnVtX3JlZ19kZWZhdWx0cyA9IGNvdW50O1xcbmRyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUuYzoyMTU6XFx0XFx0bWFwLVxcdTAwM2VyZWdfZGVmYXVsdHMgPSBrbWFsbG9jX29ianMoc3RydWN0IHJlZ19kZWZhdWx0LCBjb3VudCk7XFxuZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS5jLTIxNi1cXHRcXHRpZiAoIW1hcC1cXHUwMDNlcmVnX2RlZmF1bHRzKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MzQwPXN0YXRpYyBpbnQgbG9fcndfYWlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBsb29wX2NtZCAqY21kLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMzU0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjM1NTpcXHRcXHRjbWQtXFx1MDAzZWJ2ZWMgPSBrbWFsbG9jX29ianMoKmNtZC1cXHUwMDNlYnZlYywgbnJfYnZlYywgR0ZQX05PSU8pO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTM1Ni1cXHRcXHRpZiAoIWNtZC1cXHUwMDNlYnZlYylcXG4tLVxcbmRyaXZlcnMvYmxvY2svcmJkLmM9MjUzNj1zdGF0aWMgaW50IHJiZF9pbWdfZmlsbF9yZXF1ZXN0KHN0cnVjdCByYmRfaW1nX3JlcXVlc3QgKmltZ19yZXEsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JiZC5jLTI1NzItXFx0Zm9yX2VhY2hfb2JqX3JlcXVlc3QoaW1nX3JlcSwgb2JqX3JlcSkge1xcbmRyaXZlcnMvYmxvY2svcmJkLmM6MjU3MzpcXHRcXHRvYmpfcmVxLVxcdTAwM2VidmVjX3Bvcy5idmVjcyA9IGttYWxsb2Nfb2Jqcygqb2JqX3JlcS1cXHUwMDNlYnZlY19wb3MuYnZlY3MsXFxuZHJpdmVycy9ibG9jay9yYmQuYy0yNTc0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBvYmpfcmVxLVxcdTAwM2VidmVjX2NvdW50LFxcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9MTYwPXN0YXRpYyBpbnQgdmlydGJsa19zZXR1cF9kaXNjYXJkX3dyaXRlX3plcm9lc19lcmFzZShzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBib29sIHVubWFwKVxcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTcwLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjE3MTpcXHRyYW5nZSA9IGttYWxsb2Nfb2JqcygqcmFuZ2UsIHNlZ21lbnRzLCBHRlBfQVRPTUlDKTtcXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNzItXFx0aWYgKCFyYW5nZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTk2MD1zdGF0aWMgaW50IGluaXRfdnEoc3RydWN0IHZpcnRpb19ibGsgKnZibGspXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy05OTUtXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM6OTk2OlxcdHZibGstXFx1MDAzZXZxcyA9IGttYWxsb2Nfb2JqcygqdmJsay1cXHUwMDNldnFzLCBudW1fdnFzKTtcXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy05OTctXFx0aWYgKCF2YmxrLVxcdTAwM2V2cXMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xMDAwLVxcdHZxc19pbmZvID0ga3phbGxvY19vYmpzKCp2cXNfaW5mbywgbnVtX3Zxcyk7XFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM6MTAwMTpcXHR2cXMgPSBrbWFsbG9jX29ianMoKnZxcywgbnVtX3Zxcyk7XFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTAwMi1cXHRpZiAoIXZxc19pbmZvIHx8ICF2cXMpIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svejJyYW0uYz0xNDM9c3RhdGljIGludCB6Ml9vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3oycmFtLmMtMTg5LVxcdFxcdFxcdHoycmFtX21hcCA9XFxuZHJpdmVycy9ibG9jay96MnJhbS5jOjE5MDpcXHRcXHRcXHQgICAga21hbGxvY19vYmpzKHoycmFtX21hcFswXSwgc2l6ZSAvIFoyUkFNX0NIVU5LU0laRSk7XFxuZHJpdmVycy9ibG9jay96MnJhbS5jLTE5MS1cXHRcXHRcXHRpZiAoejJyYW1fbWFwID09IE5VTEwpIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz01MTg9c3RhdGljIGludCB6bG9vcF9kb19ydyhzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTMwLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1MzE6XFx0XFx0Y21kLVxcdTAwM2VidmVjID0ga21hbGxvY19vYmpzKCpjbWQtXFx1MDAzZWJ2ZWMsIG5yX2J2ZWMsIEdGUF9OT0lPKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTMyLVxcdFxcdGlmICghY21kLVxcdTAwM2VidmVjKVxcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmM9MTkwND1zdGF0aWMgaW50IGJ0aW50ZWxfcGNpZV9zZXR1cF90eHFfYnVmcyhzdHJ1Y3QgYnRpbnRlbF9wY2llX2RhdGEgKmRhdGEsXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYy0xOTEwLVxcdC8qIEFsbG9jYXRlIHRoZSBzYW1lIG51bWJlciBvZiBidWZmZXJzIGFzIHRoZSBkZXNjcmlwdG9yICovXFxuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmM6MTkxMTpcXHR0eHEtXFx1MDAzZWJ1ZnMgPSBrbWFsbG9jX29ianMoKmJ1ZiwgdHhxLVxcdTAwM2Vjb3VudCk7XFxuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmMtMTkxMi1cXHRpZiAoIXR4cS1cXHUwMDNlYnVmcylcXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jPTE5NDg9c3RhdGljIGludCBidGludGVsX3BjaWVfc2V0dXBfcnhxX2J1ZnMoc3RydWN0IGJ0aW50ZWxfcGNpZV9kYXRhICpkYXRhLFxcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmMtMTk1NC1cXHQvKiBBbGxvY2F0ZSB0aGUgc2FtZSBudW1iZXIgb2YgYnVmZmVycyBhcyB0aGUgZGVzY3JpcHRvciAqL1xcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jOjE5NTU6XFx0cnhxLVxcdTAwM2VidWZzID0ga21hbGxvY19vYmpzKCpidWYsIHJ4cS1cXHUwMDNlY291bnQpO1xcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jLTE5NTYtXFx0aWYgKCFyeHEtXFx1MDAzZWJ1ZnMpXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTYzMj1zdGF0aWMgaW50IGZzbF9tY19kZXZpY2VfZ2V0X21taW9fcmVnaW9ucyhzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2LFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy02NTUtXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo2NTY6XFx0cmVnaW9ucyA9IGttYWxsb2Nfb2JqcyhyZWdpb25zWzBdLCBvYmpfZGVzYy1cXHUwMDNlcmVnaW9uX2NvdW50KTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTY1Ny1cXHRpZiAoIXJlZ2lvbnMpXFxuLS1cXG5kcml2ZXJzL2NoYXIvYWdwL2lzb2NoLmM9NjQ9c3RhdGljIGludCBhZ3BfM181X2lzb2Nocm9ub3VzX25vZGVfZW5hYmxlKHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZSxcXG4tLVxcbmRyaXZlcnMvY2hhci9hZ3AvaXNvY2guYy05NC1cXHQgKi9cXG5kcml2ZXJzL2NoYXIvYWdwL2lzb2NoLmM6OTU6XFx0bWFzdGVyID0ga21hbGxvY19vYmpzKCptYXN0ZXIsIG5kZXZzKTtcXG5kcml2ZXJzL2NoYXIvYWdwL2lzb2NoLmMtOTYtXFx0aWYgKG1hc3RlciA9PSBOVUxMKSB7XFxuLS1cXG5kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jPTM2OT1zdGF0aWMgaW50IHVuaW5vcnRoX2NyZWF0ZV9nYXR0X3RhYmxlKHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZSlcXG4tLVxcbmRyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmMtNDA2LVxcbmRyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmM6NDA3OlxcdHVuaW5vcnRoX3ByaXYucGFnZXNfYXJyID0ga21hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIDEgXFx1MDAzY1xcdTAwM2MgcGFnZV9vcmRlcik7XFxuZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYy00MDgtXFx0aWYgKHVuaW5vcnRoX3ByaXYucGFnZXNfYXJyID09IE5VTEwpXFxuLS1cXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYz03NTA9aW50IGlwbWlfc21pX3dhdGNoZXJfcmVnaXN0ZXIoc3RydWN0IGlwbWlfc21pX3dhdGNoZXIgKndhdGNoZXIpXFxuLS1cXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYy03NzktXFx0aWYgKGNvdW50IFxcdTAwM2UgMCkge1xcbmRyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jOjc4MDpcXHRcXHRpbnRlcmZhY2VzID0ga21hbGxvY19vYmpzKCppbnRlcmZhY2VzLCBjb3VudCk7XFxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMtNzgxLVxcdFxcdGlmICghaW50ZXJmYWNlcykge1xcbi0tXFxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMtNzgzLVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmM6Nzg0OlxcdFxcdFxcdGRldmljZXMgPSBrbWFsbG9jX29ianMoKmRldmljZXMsIGNvdW50KTtcXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYy03ODUtXFx0XFx0XFx0aWYgKCFkZXZpY2VzKSB7XFxuLS1cXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYz0xODEwPXN0YXRpYyBpbnQgaW5pdF92cXMoc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldilcXG4tLVxcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jLTE4MTktXFxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MTgyMDpcXHR2cXMgPSBrbWFsbG9jX29ianMoc3RydWN0IHZpcnRxdWV1ZSAqLCBucl9xdWV1ZXMpO1xcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jLTE4MjEtXFx0dnFzX2luZm8gPSBremFsbG9jX29ianMoKnZxc19pbmZvLCBucl9xdWV1ZXMpO1xcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jOjE4MjI6XFx0cG9ydGRldi1cXHUwMDNlaW5fdnFzID0ga21hbGxvY19vYmpzKHN0cnVjdCB2aXJ0cXVldWUgKiwgbnJfcG9ydHMpO1xcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jOjE4MjM6XFx0cG9ydGRldi1cXHUwMDNlb3V0X3ZxcyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgdmlydHF1ZXVlICosIG5yX3BvcnRzKTtcXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYy0xODI0LVxcdGlmICghdnFzIHx8ICF2cXNfaW5mbyB8fCAhcG9ydGRldi1cXHUwMDNlaW5fdnFzIHx8ICFwb3J0ZGV2LVxcdTAwM2VvdXRfdnFzKSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstYnVsay5jPTQ3PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIG9mX2Nsa19idWxrX2dldF9hbGwoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9jbGsvY2xrLWJ1bGsuYy01OC1cXG5kcml2ZXJzL2Nsay9jbGstYnVsay5jOjU5OlxcdGNsa19idWxrID0ga21hbGxvY19vYmpzKCpjbGtfYnVsaywgbnVtX2Nsa3MpO1xcbmRyaXZlcnMvY2xrL2Nsay1idWxrLmMtNjAtXFx0aWYgKCFjbGtfYnVsaylcXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay1zdG0zMmY0LmM9MTgyOD1zdGF0aWMgdm9pZCBfX2luaXQgc3RtMzJmNF9yY2NfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbi0tXFxuZHJpdmVycy9jbGsvY2xrLXN0bTMyZjQuYy0xODU3LVxcbmRyaXZlcnMvY2xrL2Nsay1zdG0zMmY0LmM6MTg1ODpcXHRjbGtzID0ga21hbGxvY19vYmpzKCpjbGtzLCBkYXRhLVxcdTAwM2VnYXRlc19udW0gKyBzdG0zMmZ4X2VuZF9wcmltYXJ5X2Nsayk7XFxuZHJpdmVycy9jbGsvY2xrLXN0bTMyZjQuYy0xODU5LVxcdGlmICghY2xrcylcXG4tLVxcbmRyaXZlcnMvY2xrL2RhdmluY2kvcGxsLmM9NzQzPWludCBvZl9kYXZpbmNpX3BsbF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxcbi0tXFxuZHJpdmVycy9jbGsvZGF2aW5jaS9wbGwuYy03ODQtXFxuZHJpdmVycy9jbGsvZGF2aW5jaS9wbGwuYzo3ODU6XFx0XFx0Y2xrcyA9IGttYWxsb2Nfb2JqcygqY2xrcywgbl9jbGtzKTtcXG5kcml2ZXJzL2Nsay9kYXZpbmNpL3BsbC5jLTc4Ni1cXHRcXHRpZiAoIWNsa3MpIHtcXG4tLVxcbmRyaXZlcnMvY2xrL2RhdmluY2kvcHNjLmM9MzY0PV9fZGF2aW5jaV9wc2NfcmVnaXN0ZXJfY2xvY2tzKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvY2xrL2RhdmluY2kvcHNjLmMtMzc4LVxcbmRyaXZlcnMvY2xrL2RhdmluY2kvcHNjLmM6Mzc5OlxcdGNsa3MgPSBrbWFsbG9jX29ianMoKmNsa3MsIG51bV9jbGtzKTtcXG5kcml2ZXJzL2Nsay9kYXZpbmNpL3BzYy5jLTM4MC1cXHRpZiAoIWNsa3MpIHtcXG4tLVxcbmRyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTIxMC5jPTM2OTc9c3RhdGljIHZvaWQgdGVncmEyMTBfbWJpc3RfY2xrX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTIxMC5jLTM3MDctXFxuZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMjEwLmM6MzcwODpcXHRcXHRjbGtfZGF0YSA9IGttYWxsb2Nfb2JqcygqY2xrX2RhdGEsIG51bV9jbGtzKTtcXG5kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEyMTAuYy0zNzA5LVxcdFxcdGlmIChXQVJOX09OKCFjbGtfZGF0YSkpXFxuLS1cXG5kcml2ZXJzL2NvbWVkaS9kcml2ZXJzL25pXzY3MHguYz0xNTU9c3RhdGljIGludCBuaV82NzB4X2F1dG9fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2NvbWVkaS9kcml2ZXJzL25pXzY3MHguYy0yMDAtXFxuZHJpdmVycy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmM6MjAxOlxcdFxcdHJhbmdlX3RhYmxlX2xpc3QgPSBrbWFsbG9jX29ianMoKnJhbmdlX3RhYmxlX2xpc3QsIDMyKTtcXG5kcml2ZXJzL2NvbWVkaS9kcml2ZXJzL25pXzY3MHguYy0yMDItXFx0XFx0aWYgKCFyYW5nZV90YWJsZV9saXN0KVxcbi0tXFxuZHJpdmVycy9jcHVmcmVxL2JtaXBzLWNwdWZyZXEuYz02Nj1ibWlwc19jcHVmcmVxX2dldF9mcmVxX3RhYmxlKGNvbnN0IHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KVxcbi0tXFxuZHJpdmVycy9jcHVmcmVxL2JtaXBzLWNwdWZyZXEuYy03My1cXG5kcml2ZXJzL2NwdWZyZXEvYm1pcHMtY3B1ZnJlcS5jOjc0OlxcdHRhYmxlID0ga21hbGxvY19vYmpzKCp0YWJsZSwgcHJpdi1cXHUwMDNlbWF4X2ZyZXFzICsgMSk7XFxuZHJpdmVycy9jcHVmcmVxL2JtaXBzLWNwdWZyZXEuYy03NS1cXHRpZiAoIXRhYmxlKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jPTEzND1zcHVfc2tjaXBoZXJfcnhfc2dfY3JlYXRlKHN0cnVjdCBicmNtX21lc3NhZ2UgKm1zc2csXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMTQzLVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYzoxNDQ6XFx0bXNzZy1cXHUwMDNlc3B1LmRzdCA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsIHJ4X2ZyYWdfbnVtLCByY3R4LVxcdTAwM2VnZnApO1xcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xNDUtXFx0aWYgKCFtc3NnLVxcdTAwM2VzcHUuZHN0KVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jPTE5Nz1zcHVfc2tjaXBoZXJfdHhfc2dfY3JlYXRlKHN0cnVjdCBicmNtX21lc3NhZ2UgKm1zc2csXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMjA2LVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYzoyMDc6XFx0bXNzZy1cXHUwMDNlc3B1LnNyYyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsIHR4X2ZyYWdfbnVtLCByY3R4LVxcdTAwM2VnZnApO1xcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0yMDgtXFx0aWYgKHVubGlrZWx5KCFtc3NnLVxcdTAwM2VzcHUuc3JjKSlcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYz01MjQ9c3B1X2FoYXNoX3J4X3NnX2NyZWF0ZShzdHJ1Y3QgYnJjbV9tZXNzYWdlICptc3NnLFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jLTUzMi1cXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM6NTMzOlxcdG1zc2ctXFx1MDAzZXNwdS5kc3QgPSBrbWFsbG9jX29ianMoc3RydWN0IHNjYXR0ZXJsaXN0LCByeF9mcmFnX251bSwgcmN0eC1cXHUwMDNlZ2ZwKTtcXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtNTM0LVxcdGlmICghbXNzZy1cXHUwMDNlc3B1LmRzdClcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYz01NzU9c3B1X2FoYXNoX3R4X3NnX2NyZWF0ZShzdHJ1Y3QgYnJjbV9tZXNzYWdlICptc3NnLFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jLTU4Ni1cXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM6NTg3OlxcdG1zc2ctXFx1MDAzZXNwdS5zcmMgPSBrbWFsbG9jX29ianMoc3RydWN0IHNjYXR0ZXJsaXN0LCB0eF9mcmFnX251bSwgcmN0eC1cXHUwMDNlZ2ZwKTtcXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtNTg4LVxcdGlmICghbXNzZy1cXHUwMDNlc3B1LnNyYylcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYz0xMDM4PXN0YXRpYyBpbnQgc3B1X2FlYWRfcnhfc2dfY3JlYXRlKHN0cnVjdCBicmNtX21lc3NhZ2UgKm1zc2csXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMTA3NS1cXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM6MTA3NjpcXHRtc3NnLVxcdTAwM2VzcHUuZHN0ID0ga21hbGxvY19vYmpzKHN0cnVjdCBzY2F0dGVybGlzdCwgcnhfZnJhZ19udW0sIHJjdHgtXFx1MDAzZWdmcCk7XFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jLTEwNzctXFx0aWYgKCFtc3NnLVxcdTAwM2VzcHUuZHN0KVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jPTExNTc9c3RhdGljIGludCBzcHVfYWVhZF90eF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xMTc2LVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYzoxMTc3OlxcdG1zc2ctXFx1MDAzZXNwdS5zcmMgPSBrbWFsbG9jX29ianMoc3RydWN0IHNjYXR0ZXJsaXN0LCB0eF9mcmFnX251bSwgcmN0eC1cXHUwMDNlZ2ZwKTtcXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMTE3OC1cXHRpZiAoIW1zc2ctXFx1MDAzZXNwdS5zcmMpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYz0zMDY9c3RhdGljIHN0cnVjdCBzbGFfYnVmZmVyX2hkciAqc2xhX2J1ZmZlcl9tYXAoc3RydWN0IHNsYV9hZGRyX3Qgc2xhKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmMtMzMyLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jOjMzMzpcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBwID0ga21hbGxvY19vYmpzKHBwWzBdLCBucGFnZXMpO1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jLTMzNC1cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl90ZWxlbWV0cnkuYz01OD1zdGF0aWMgaW50IGFkZl90bF9hbGxvY19tZW0oc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2RldilcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzI6MjUuNTc3NjgyNDA0WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzNjA1ODEwNjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS01TQU4gSW1wYWN0IG9mIGEgdmhvc3QtdnNvY2sgT3B0aW1pemF0aW9uIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgYGttYWxsb2Nfb2Jqc2AuIEhtbSwgdGhhdCdzIG5vdCB0aGUgc3RhbmRhcmQgYGttYWxsb2NfYXJyYXlgLCBzbyBpdCdzIHByb2JhYmx5IGEgY3VzdG9tIG1hY3JvLiBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgaXQncyBkZWZpbmVkLiBPaCwgaXQncyBkZXByZWNhdGVkISBJbnRlcmVzdGluZy4gTGluZSA1MTkgb2YgYGRyaXZlcnMvdmhvc3Qvdmhvc3QuY2AgbG9va3MgcmVsZXZhbnQ6IGB2cS1cdTAwM2VoZWFkcyA9IGttYWxsb2NfYXJyYXkoZGV2LVx1MDAzZWlvdl9saW1pdCwgc2l6ZW9mKCp2cS1cdTAwM2VoZWFkcyksIEdGUF9LRVJORUwpO2AgVGhlIGdyZXAgb3V0cHV0IHNob3dzIHRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYGttYWxsb2Nfb2Jqc2AsIHdoaWNoIGlzIGxpa2VseSBhIG1hY3JvIHNpbWlsYXIgdG8gYGttYWxsb2NfYXJyYXlgLCBhbGxvY2F0aW5nIGFuIGFycmF5IG9mIGBkZXYtXHUwMDNlaW92X2xpbWl0YCBlbGVtZW50cy4gQW5kIHllcywgdGhlIGB1c2VkX2xpbWl0YCBpcyBpbmRlZWQgYm91bmRlZCBieSBgZGV2LVx1MDAzZWlvdl9saW1pdGAsIHNvIHRoZSBhbGxvY2F0aW9uIGlzIHN1ZmZpY2llbnQuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgS01TQU4gdmVyc3VzIEtBU0FOLiBLTVNBTiBpcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHdoaWxlIEtBU0FOIGlzIGZvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBiYXRjaGluZyB1c2VkIGVsZW1lbnQgdXBkYXRlcywgc3BlY2lmaWNhbGx5IHBvcHVsYXRpbmcgdGhlIGB2cS1cdTAwM2VoZWFkc2AgYXJyYXkgd2l0aCBgdXNlZC1cdTAwM2VpZGAgYW5kIGB1c2VkLVx1MDAzZWxlbmAuIEJvdGggZmllbGRzIGFyZSBpbml0aWFsaXplZC4gQW5kIGdvb2QsIHRoZXJlJ3Mgbm8gcGFkZGluZyBpbiB0aGUgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gLiBUaGVuLCBgdmhvc3RfcHV0X3VzZWRgIGNvcGllcyB0aGlzIGFycmF5IHRvIHVzZXIgc3BhY2UsIGNhbGxpbmcgYHZob3N0X2NvcHlfdG9fdXNlcmAuIFNpbmNlIHRoZSBtZW1vcnkgYmVpbmcgY29waWVkICppcyogZnVsbHkgaW5pdGlhbGl6ZWQsIHRoZXJlJ3Mgbm8gd2F5IHRvIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuXG5cblNvLCBoZXJlJ3MgdGhlIHJlYXNvbmluZyB0byBwdXQgZG93bi4gVGhlIHBhdGNoIGlzIG9wdGltaXppbmcgdGhlIHZpcnRpbyB2c29jayB0cmFuc21pc3Npb24gcGF0aCBieSBiYXRjaGluZyB1cGRhdGVzLiBJdCBpbnRyb2R1Y2VzIGB2aG9zdF92c29ja19hZGRfdXNlZGAgdG8gcG9wdWxhdGUgYW4gYXJyYXkgKGB2cS1cdTAwM2VoZWFkc2ApIHdpdGggYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIGFuZCBgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZGAgdG8gZmx1c2ggdG8gZ3Vlc3QgbWVtb3J5LiBUaGUgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIGNvbnNpc3RzIG9mIHR3byAzMi1iaXQgaW50ZWdlcnMsIGBpZGAgYW5kIGBsZW5gLCB3aXRoIG5vIHBhZGRpbmcuIFRoZXNlIGZpZWxkcyBhcmUgKmV4cGxpY2l0bHkqIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgY29weS4gVGhlIGFycmF5IGJvdW5kcyBhcmUgYWxzbyBjaGVja2VkIGFnYWluc3QgYGRldi1cdTAwM2Vpb3ZfbGltaXRgLiBUaGlzIGNvbXBsZXRlbHkgZWxpbWluYXRlcyBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFraW5nIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXNuJ3QgbmVlZCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4gSXQncyBzYWZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTc5MCwiT3V0cHV0VG9rZW5zIjoyNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzI6NDkuMTgzNDk2MDE5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgdGhlIHZpcnRpbyB2c29jayB0cmFuc21pc3Npb24gcGF0aCBieSBiYXRjaGluZyB1c2VkIGVsZW1lbnQgdXBkYXRlcy4gSXQgaW50cm9kdWNlcyBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIHRvIHBvcHVsYXRlIGFuIGFycmF5IG9mIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCAoYHZxLVxcdTAwM2VoZWFkc2ApIGFuZCBgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZGAgdG8gZmx1c2ggdGhlbSB0byB0aGUgZ3Vlc3QgbWVtb3J5IHZpYSBgdmhvc3RfYWRkX3VzZWRfbmAuXFxuVGhlIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCBjb25zaXN0cyBvZiB0d28gMzItYml0IGludGVnZXJzIChgaWRgIGFuZCBgbGVuYCkgYW5kIGNvbnRhaW5zIG5vIHBhZGRpbmcgYnl0ZXMuIEJvdGggZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGB2aG9zdF92c29ja19hZGRfdXNlZGAgYmVmb3JlIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIChndWVzdCBtZW1vcnkpIHZpYSBgdmhvc3RfcHV0X3VzZWRgIGFuZCBgdmhvc3RfY29weV90b191c2VyYC5cXG5TaW5jZSB0aGUgbWVtb3J5IGJlaW5nIGNvcGllZCBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgdGhlcmUgYXJlIG5vIHBhZGRpbmcgYnl0ZXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlIGJvdW5kcyBvZiB0aGUgYXJyYXkgYXJlIGFsc28gcHJvcGVybHkgY2hlY2tlZCBhZ2FpbnN0IGBkZXYtXFx1MDAzZWlvdl9saW1pdGAsIHByZXZlbnRpbmcgYW55IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbnl3YXkpLlxcblRodXMsIHRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb3B0aW1pemVzIHRoZSB2aXJ0aW8gdnNvY2sgdHJhbnNtaXNzaW9uIHBhdGggYnkgYmF0Y2hpbmcgdXNlZCBlbGVtZW50IHVwZGF0ZXMuIEl0IGludHJvZHVjZXMgYHZob3N0X3Zzb2NrX2FkZF91c2VkYCB0byBwb3B1bGF0ZSBhbiBhcnJheSBvZiBgc3RydWN0IHZyaW5nX3VzZWRfZWxlbWAgKGB2cS1cXHUwMDNlaGVhZHNgKSBhbmQgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgIHRvIGZsdXNoIHRoZW0gdG8gdGhlIGd1ZXN0IG1lbW9yeSB2aWEgYHZob3N0X2FkZF91c2VkX25gLlxcblRoZSBgc3RydWN0IHZyaW5nX3VzZWRfZWxlbWAgY29uc2lzdHMgb2YgdHdvIDMyLWJpdCBpbnRlZ2VycyAoYGlkYCBhbmQgYGxlbmApIGFuZCBjb250YWlucyBubyBwYWRkaW5nIGJ5dGVzLiBCb3RoIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIGJlZm9yZSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSAoZ3Vlc3QgbWVtb3J5KSB2aWEgYHZob3N0X3B1dF91c2VkYCBhbmQgYHZob3N0X2NvcHlfdG9fdXNlcmAuXFxuU2luY2UgdGhlIG1lbW9yeSBiZWluZyBjb3BpZWQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIHRoZXJlIGFyZSBubyBwYWRkaW5nIGJ5dGVzLCB0aGVyZSBpcyBubyByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZSBib3VuZHMgb2YgdGhlIGFycmF5IGFyZSBhbHNvIHByb3Blcmx5IGNoZWNrZWQgYWdhaW5zdCBgZGV2LVxcdTAwM2Vpb3ZfbGltaXRgLCBwcmV2ZW50aW5nIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW55d2F5KS5cXG5UaHVzLCB0aGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow78mdm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-27 06:12:38 +0000 UTC FinishedAt: 2026-08-27 06:32:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VSOCK", "VSOCKETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VSOCK", "VSOCKETS" ], "series_id": "997588ba-75a5-4dbf-a0de-d4c1dad86b60" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "vhost_transport_do_send_pkt", "vhost_transport_send_pkt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZTT0NLJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0JiMzNDssCiAgICAmIzM0O3Zob3N0X3RyYW5zcG9ydF9zZW5kX3BrdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyB0aGUgdmlydGlvIHZzb2NrIHRyYW5zbWlzc2lvbiBwYXRoIGJ5IGJhdGNoaW5nIHVzZWQgZWxlbWVudCB1cGRhdGVzLiBJdCBpbnRyb2R1Y2VzIGB2aG9zdF92c29ja19hZGRfdXNlZGAgdG8gcG9wdWxhdGUgYW4gYXJyYXkgb2YgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIChgdnEtXHUwMDNlaGVhZHNgKSBhbmQgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgIHRvIGZsdXNoIHRoZW0gdG8gdGhlIGd1ZXN0IG1lbW9yeSB2aWEgYHZob3N0X2FkZF91c2VkX25gLlxuVGhlIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCBjb25zaXN0cyBvZiB0d28gMzItYml0IGludGVnZXJzIChgaWRgIGFuZCBgbGVuYCkgYW5kIGNvbnRhaW5zIG5vIHBhZGRpbmcgYnl0ZXMuIEJvdGggZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGB2aG9zdF92c29ja19hZGRfdXNlZGAgYmVmb3JlIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIChndWVzdCBtZW1vcnkpIHZpYSBgdmhvc3RfcHV0X3VzZWRgIGFuZCBgdmhvc3RfY29weV90b191c2VyYC5cblNpbmNlIHRoZSBtZW1vcnkgYmVpbmcgY29waWVkIGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCB0aGVyZSBhcmUgbm8gcGFkZGluZyBieXRlcywgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgYm91bmRzIG9mIHRoZSBhcnJheSBhcmUgYWxzbyBwcm9wZXJseSBjaGVja2VkIGFnYWluc3QgYGRldi1cdTAwM2Vpb3ZfbGltaXRgLCBwcmV2ZW50aW5nIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW55d2F5KS5cblRodXMsIHRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2aG9zdCB2c29jayBkcml2ZXIgdG8gYmF0Y2ggdXNlZCBlbGVtZW50cyB3aGVuIHNlbmRpbmcgcGFja2V0cyB0byB0aGUgZ3Vlc3QuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2aG9zdCB2c29jayBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDk4NzlhYmY0NDNjNGFmOTY4YmZmZGI1MTA1ODUzMDUyNGIxYjM0MDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAwNjoyOToyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmMgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbmluZGV4IDlhYWFiNmJiODA2MWMuLmQ4MDUwY2NhMjc1ZGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suY1xuQEAgLTEwMywxMiAmIzQzOzEwMywzNyBAQCBzdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfaGFzX3JlbW90ZV9jaWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgdTMyIGNpZClcbiBcdHJldHVybiBmb3VuZDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4mIzQzO1x0XHRcdFx0ICAgdW5zaWduZWQgaW50ICp1c2VkX2NvdW50KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCEqdXNlZF9jb3VudClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0dmhvc3RfYWRkX3VzZWRfbih2cSwgdnEtXHUwMDNlaGVhZHMsIHZxLVx1MDAzZW5oZWFkcywgKnVzZWRfY291bnQpO1xuJiM0MztcdCp1c2VkX2NvdW50ID0gMDtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4mIzQzO1x0XHRcdFx0IHVuc2lnbmVkIGludCAqdXNlZF9jb3VudCxcbiYjNDM7XHRcdFx0XHQgdW5zaWduZWQgaW50IGhlYWQsIHVuc2lnbmVkIGludCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICp1c2VkID0gXHUwMDI2dnEtXHUwMDNlaGVhZHNbKnVzZWRfY291bnRdO1xuJiM0MztcbiYjNDM7XHR1c2VkLVx1MDAzZWlkID0gY3B1X3RvX3Zob3N0MzIodnEsIGhlYWQpO1xuJiM0MztcdHVzZWQtXHUwMDNlbGVuID0gY3B1X3RvX3Zob3N0MzIodnEsIGxlbik7XG4mIzQzO1x0dnEtXHUwMDNlbmhlYWRzWyp1c2VkX2NvdW50XSA9IDE7XG4mIzQzO1x0KCp1c2VkX2NvdW50KSYjNDM7JiM0Mzs7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWRcbiB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcbiBcdFx0XHQgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXG4ge1xuIFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdHhfdnEgPSBcdTAwMjZ2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfVFhdO1xuIFx0aW50IHBrdHMgPSAwLCB0b3RhbF9sZW4gPSAwO1xuJiM0MztcdHVuc2lnbmVkIGludCB1c2VkX2NvdW50ID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgdXNlZF9saW1pdDtcbiBcdGJvb2wgYWRkZWQgPSBmYWxzZTtcbiBcdGJvb2wgcmVzdGFydF90eCA9IGZhbHNlO1xuIFxuQEAgLTEyMCw2ICYjNDM7MTQ1LDEyIEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuIFx0aWYgKCF2cV9tZXRhX3ByZWZldGNoKHZxKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4mIzQzO1x0dXNlZF9saW1pdCA9IG1pbl90KHVuc2lnbmVkIGludCwgdnEtXHUwMDNlbnVtLFxuJiM0MztcdFx0XHQgICBtaW5fdCh1bnNpZ25lZCBpbnQsIHZxLVx1MDAzZWRldi1cdTAwM2Vpb3ZfbGltaXQsXG4mIzQzO1x0XHRcdFx0IHZxLVx1MDAzZWRldi1cdTAwM2V3ZWlnaHQpKTtcbiYjNDM7XHRpZiAodW5saWtlbHkoIXVzZWRfbGltaXQpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0LyogQXZvaWQgZnVydGhlciB2bWV4aXRzLCB3ZSYjMzk7cmUgYWxyZWFkeSBwcm9jZXNzaW5nIHRoZSB2aXJ0cXVldWUgKi9cbiBcdHZob3N0X2Rpc2FibGVfbm90aWZ5KFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIFxuQEAgLTEzNCw5ICYjNDM7MTY1LDEzIEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuIFx0XHR1MzIgb2Zmc2V0O1xuIFx0XHRpbnQgaGVhZDtcbiBcbiYjNDM7XHRcdGlmICh1c2VkX2NvdW50ID09IHVzZWRfbGltaXQpXG4mIzQzO1x0XHRcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIFx1MDAyNnVzZWRfY291bnQpO1xuJiM0MztcbiBcdFx0c2tiID0gdmlydGlvX3Zzb2NrX3NrYl9kZXF1ZXVlKFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3F1ZXVlKTtcbiBcbiBcdFx0aWYgKCFza2IpIHtcbiYjNDM7XHRcdFx0YWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgXHUwMDI2dXNlZF9jb3VudCk7XG4gXHRcdFx0dmhvc3RfZW5hYmxlX25vdGlmeShcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTE1Myw2ICYjNDM7MTg4LDcgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRcdFx0LyogV2UgY2Fubm90IGZpbmlzaCB5ZXQgaWYgbW9yZSBidWZmZXJzIHNudWNrIGluIHdoaWxlXG4gXHRcdFx0ICogcmUtZW5hYmxpbmcgbm90aWZ5LlxuIFx0XHRcdCAqL1xuJiM0MztcdFx0XHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCBcdTAwMjZ1c2VkX2NvdW50KTtcbiBcdFx0XHRpZiAodW5saWtlbHkodmhvc3RfZW5hYmxlX25vdGlmeShcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKSkpIHtcbiBcdFx0XHRcdHZob3N0X2Rpc2FibGVfbm90aWZ5KFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtMjMwLDggJiM0MzsyNjYsOCBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcbiBcdFx0ICovXG4gXHRcdHZpcnRpb190cmFuc3BvcnRfZGVsaXZlcl90YXBfcGt0KHNrYik7XG4gXG4tXHRcdHZob3N0X2FkZF91c2VkKHZxLCBoZWFkLCBzaXplb2YoKmhkcikgJiM0MzsgcGF5bG9hZF9sZW4pO1xuLVx0XHRhZGRlZCA9IHRydWU7XG4mIzQzO1x0XHR2aG9zdF92c29ja19hZGRfdXNlZCh2cSwgXHUwMDI2dXNlZF9jb3VudCwgaGVhZCxcbiYjNDM7XHRcdFx0XHQgICAgIHNpemVvZigqaGRyKSAmIzQzOyBwYXlsb2FkX2xlbik7XG4gXG4gXHRcdFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQgJiM0Mzs9IHBheWxvYWRfbGVuO1xuIFx0XHR0b3RhbF9sZW4gJiM0Mzs9IHBheWxvYWRfbGVuO1xuQEAgLTI2NCw2ICYjNDM7MzAwLDcgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRcdFx0dmlydGlvX3RyYW5zcG9ydF9jb25zdW1lX3NrYl9zZW50KHNrYiwgdHJ1ZSk7XG4gXHRcdH1cbiBcdH0gd2hpbGUobGlrZWx5KCF2aG9zdF9leGNlZWRzX3dlaWdodCh2cSwgJiM0MzsmIzQzO3BrdHMsIHRvdGFsX2xlbikpKTtcbiYjNDM7XHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCBcdTAwMjZ1c2VkX2NvdW50KTtcbiBcdGlmIChhZGRlZClcbiBcdFx0dmhvc3Rfc2lnbmFsKFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7LAogICAgJiMzNDtWU09DS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCYjMzQ7LAogICAgJiMzNDt2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZob3N0IHZzb2NrIGRyaXZlciB0byBiYXRjaCB1c2VkIGVsZW1lbnRzIHdoZW4gc2VuZGluZyBwYWNrZXRzIHRvIHRoZSBndWVzdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZob3N0IHZzb2NrIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTg3OWFiZjQ0M2M0YWY5NjhiZmZkYjUxMDU4NTMwNTI0YjFiMzQwMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDA2OjI5OjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92c29jay5jIGIvZHJpdmVycy92aG9zdC92c29jay5jCmluZGV4IDlhYWFiNmJiODA2MWMuLmQ4MDUwY2NhMjc1ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3QvdnNvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmMKQEAgLTEwMywxMiAmIzQzOzEwMywzNyBAQCBzdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfaGFzX3JlbW90ZV9jaWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgdTMyIGNpZCkKIAlyZXR1cm4gZm91bmQ7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCB2aG9zdF92c29ja19mbHVzaF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLAomIzQzOwkJCQkgICB1bnNpZ25lZCBpbnQgKnVzZWRfY291bnQpCiYjNDM7ewomIzQzOwlpZiAoISp1c2VkX2NvdW50KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwl2aG9zdF9hZGRfdXNlZF9uKHZxLCB2cS0mZ3Q7aGVhZHMsIHZxLSZndDtuaGVhZHMsICp1c2VkX2NvdW50KTsKJiM0MzsJKnVzZWRfY291bnQgPSAwOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCiYjNDM7CQkJCSB1bnNpZ25lZCBpbnQgKnVzZWRfY291bnQsCiYjNDM7CQkJCSB1bnNpZ25lZCBpbnQgaGVhZCwgdW5zaWduZWQgaW50IGxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2cmluZ191c2VkX2VsZW0gKnVzZWQgPSAmYW1wO3ZxLSZndDtoZWFkc1sqdXNlZF9jb3VudF07CiYjNDM7CiYjNDM7CXVzZWQtJmd0O2lkID0gY3B1X3RvX3Zob3N0MzIodnEsIGhlYWQpOwomIzQzOwl1c2VkLSZndDtsZW4gPSBjcHVfdG9fdmhvc3QzMih2cSwgbGVuKTsKJiM0MzsJdnEtJmd0O25oZWFkc1sqdXNlZF9jb3VudF0gPSAxOwomIzQzOwkoKnVzZWRfY291bnQpJiM0MzsmIzQzOzsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZAogdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssCiAJCQkgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpCiB7CiAJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdHhfdnEgPSAmYW1wO3Zzb2NrLSZndDt2cXNbVlNPQ0tfVlFfVFhdOwogCWludCBwa3RzID0gMCwgdG90YWxfbGVuID0gMDsKJiM0MzsJdW5zaWduZWQgaW50IHVzZWRfY291bnQgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgdXNlZF9saW1pdDsKIAlib29sIGFkZGVkID0gZmFsc2U7CiAJYm9vbCByZXN0YXJ0X3R4ID0gZmFsc2U7CiAKQEAgLTEyMCw2ICYjNDM7MTQ1LDEyIEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLAogCWlmICghdnFfbWV0YV9wcmVmZXRjaCh2cSkpCiAJCWdvdG8gb3V0OwogCiYjNDM7CXVzZWRfbGltaXQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHZxLSZndDtudW0sCiYjNDM7CQkJICAgbWluX3QodW5zaWduZWQgaW50LCB2cS0mZ3Q7ZGV2LSZndDtpb3ZfbGltaXQsCiYjNDM7CQkJCSB2cS0mZ3Q7ZGV2LSZndDt3ZWlnaHQpKTsKJiM0MzsJaWYgKHVubGlrZWx5KCF1c2VkX2xpbWl0KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwogCS8qIEF2b2lkIGZ1cnRoZXIgdm1leGl0cywgd2UmIzM5O3JlIGFscmVhZHkgcHJvY2Vzc2luZyB0aGUgdmlydHF1ZXVlICovCiAJdmhvc3RfZGlzYWJsZV9ub3RpZnkoJmFtcDt2c29jay0mZ3Q7ZGV2LCB2cSk7CiAKQEAgLTEzNCw5ICYjNDM7MTY1LDEzIEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLAogCQl1MzIgb2Zmc2V0OwogCQlpbnQgaGVhZDsKIAomIzQzOwkJaWYgKHVzZWRfY291bnQgPT0gdXNlZF9saW1pdCkKJiM0MzsJCQlhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCAmYW1wO3VzZWRfY291bnQpOwomIzQzOwogCQlza2IgPSB2aXJ0aW9fdnNvY2tfc2tiX2RlcXVldWUoJmFtcDt2c29jay0mZ3Q7c2VuZF9wa3RfcXVldWUpOwogCiAJCWlmICghc2tiKSB7CiYjNDM7CQkJYWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgJmFtcDt1c2VkX2NvdW50KTsKIAkJCXZob3N0X2VuYWJsZV9ub3RpZnkoJmFtcDt2c29jay0mZ3Q7ZGV2LCB2cSk7CiAJCQlicmVhazsKIAkJfQpAQCAtMTUzLDYgJiM0MzsxODgsNyBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywKIAkJCS8qIFdlIGNhbm5vdCBmaW5pc2ggeWV0IGlmIG1vcmUgYnVmZmVycyBzbnVjayBpbiB3aGlsZQogCQkJICogcmUtZW5hYmxpbmcgbm90aWZ5LgogCQkJICovCiYjNDM7CQkJYWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgJmFtcDt1c2VkX2NvdW50KTsKIAkJCWlmICh1bmxpa2VseSh2aG9zdF9lbmFibGVfbm90aWZ5KCZhbXA7dnNvY2stJmd0O2RldiwgdnEpKSkgewogCQkJCXZob3N0X2Rpc2FibGVfbm90aWZ5KCZhbXA7dnNvY2stJmd0O2RldiwgdnEpOwogCQkJCWNvbnRpbnVlOwpAQCAtMjMwLDggJiM0MzsyNjYsOCBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywKIAkJICovCiAJCXZpcnRpb190cmFuc3BvcnRfZGVsaXZlcl90YXBfcGt0KHNrYik7CiAKLQkJdmhvc3RfYWRkX3VzZWQodnEsIGhlYWQsIHNpemVvZigqaGRyKSAmIzQzOyBwYXlsb2FkX2xlbik7Ci0JCWFkZGVkID0gdHJ1ZTsKJiM0MzsJCXZob3N0X3Zzb2NrX2FkZF91c2VkKHZxLCAmYW1wO3VzZWRfY291bnQsIGhlYWQsCiYjNDM7CQkJCSAgICAgc2l6ZW9mKCpoZHIpICYjNDM7IHBheWxvYWRfbGVuKTsKIAogCQlWSVJUSU9fVlNPQ0tfU0tCX0NCKHNrYiktJmd0O29mZnNldCAmIzQzOz0gcGF5bG9hZF9sZW47CiAJCXRvdGFsX2xlbiAmIzQzOz0gcGF5bG9hZF9sZW47CkBAIC0yNjQsNiAmIzQzOzMwMCw3IEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLAogCQkJdmlydGlvX3RyYW5zcG9ydF9jb25zdW1lX3NrYl9zZW50KHNrYiwgdHJ1ZSk7CiAJCX0KIAl9IHdoaWxlKGxpa2VseSghdmhvc3RfZXhjZWVkc193ZWlnaHQodnEsICYjNDM7JiM0Mztwa3RzLCB0b3RhbF9sZW4pKSk7CiYjNDM7CWFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsICZhbXA7dXNlZF9jb3VudCk7CiAJaWYgKGFkZGVkKQogCQl2aG9zdF9zaWduYWwoJmFtcDt2c29jay0mZ3Q7ZGV2LCB2cSk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0IHZzb2NrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgZHJpdmVycy92aG9zdC92c29jay5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YC4gSW5zdGVhZCBvZiB0aGUgb2xkLCBwZXItcGFja2V0IGB2aG9zdF9hZGRfdXNlZGAgYXBwcm9hY2gsIHRoZXkmIzM5O3JlIG5vdyBiYXRjaGluZyB3aXRoIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCBhbmQgYHZob3N0X3Zzb2NrX2FkZF91c2VkYC4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uLCBmb3Igc3VyZSDigJMgcG90ZW50aWFsbHkgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGFuZCBpdCYjMzk7bGwgYmUgd29ydGggZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9uIHRoZSB1c2VkIHJpbmcgYnVmZmVyLiBXZSBtaWdodCBoYXZlIHNvbWUgb3JkZXJpbmcgcmVxdWlyZW1lbnRzIG9yIHNvbWUgbG9ja2luZyBjb25jZXJucyBhcyBhIHJlc3VsdC4KClRoZSBuZXh0IGltbWVkaWF0ZSBzdGVwIGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBiYXRjaGluZyBjaGFuZ2UgaXMgY29uZGl0aW9uYWwgb24gYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLCBvciBpZiBpdCYjMzk7cyBhcHBsaWVkIHVuaXZlcnNhbGx5LiBJIHdpbGwgY3Jvc3MtcmVmZXJlbmNlIHRoZSBLY29uZmlnIGZvciBgZHJpdmVycy92aG9zdC92c29jay5jYCB0byBjbGFyaWZ5IGFueSBkZXBlbmRlbmNpZXMgb3IgYnVpbGQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGlzIGNvZGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zzb2NrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92c29jay5jPTEyOT1zdGF0aWMgdm9pZFxuZHJpdmVycy92aG9zdC92c29jay5jOjEzMDp2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMzEtXHRcdFx0ICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0zMTQ9c3RhdGljIHZvaWQgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTMyMS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozMjI6XHR2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QodnNvY2ssIHZxKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMjMtfVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0zMjY9dmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzQ5LVx0ICogYWxsIHRoZSBvdXRjb21lcyBjb3ZlcmVkOiBpZiB0aGUgYmFja2VuZCBiZWNvbWVzIE5VTEwgcmlnaHQgYWZ0ZXIgdGhlIGNoZWNrLFxuZHJpdmVycy92aG9zdC92c29jay5jOjM1MDpcdCAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS5cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zNTEtXHQgKi9cbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9NjM4PXN0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2hhbmRsZV9yeF9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02NDQtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NjQ1Olx0dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHZzb2NrLCB2cSk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjQ2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODU1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgTW9kdWxlIEludmVzdGlnYXRpb246IHZob3N0X3Zzb2NrKioKCk9rYXksIHNvIHRoZSBpbnZlc3RpZ2F0aW9uIGJlZ2lucy4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBkcml2ZXI/JiMzNDsgVGhlIHRleHQgaWRlbnRpZmllcyBpdCBhcyBgdmhvc3RfdnNvY2tgLiBNYWtlcyBzZW5zZSwgSSYjMzk7dmUgd29ya2VkIHdpdGggdmlydGlvIGFuZCB2aG9zdCBiZWZvcmUuIEJ1dCBJIG5lZWQgbW9yZSBjb25jcmV0ZSBpbmZvcm1hdGlvbi4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBgS2NvbmZpZ2AgZmlsZSBhc3NvY2lhdGVkIHdpdGggYHZob3N0X3Zzb2NrYC4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGVzc2VudGlhbCBtZXRhZGF0YTogZGVwZW5kZW5jaWVzLCBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiByZWZlcmVuY2VzLCBhbmQgZ2VuZXJhbGx5LCB0aGUgY29udGV4dCBvZiBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBlY29zeXN0ZW0uIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBmZWF0dXJlcywgYnVpbGQgb3B0aW9ucywgYW5kIHBvdGVudGlhbCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2c29jay5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L01ha2VmaWxlPTY9dmhvc3Rfc2NzaS15IDo9IHNjc2kub1xuZHJpdmVycy92aG9zdC9NYWtlZmlsZS03LVxuZHJpdmVycy92aG9zdC9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19WSE9TVF9WU09DSykgJiM0Mzs9IHZob3N0X3Zzb2NrLm9cbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGU6OTp2aG9zdF92c29jay15IDo9IHZzb2NrLm9cbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE3NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJJiMzOTttIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgdmhvc3RfdnNvY2sgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gYENPTkZJR19WSE9TVF9WU09DS2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIEkgbmVlZCB0byBmb2N1cyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgaXRzIHB1cnBvc2UsIGFuZCBwb3RlbnRpYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgZmVhdHVyZXMuIE15IHVzdWFsIGFwcHJvYWNoIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLCBzbyBJJiMzOTtsbCBnbyBjaGVjayBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBmb3IgdGhlIGBWSE9TVF9WU09DS2Agb3B0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGFuZCBjb250ZXh0IGZvciB0aGlzIHNldHRpbmcgc2hvdWxkIHJlc2lkZS4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIHdheSB0byB0cmFjZSB0aGUgY29uZmlnIG9wdGlvbnMgaW4gdGhlIGtlcm5lbCwgc28gdGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBiZWdpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkhPU1RfVlNPQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnPTQ2PWNvbmZpZyBWSE9TVF9TQ1NJXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU1LVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjU2OmNvbmZpZyBWSE9TVF9WU09DS1xuZHJpdmVycy92aG9zdC9LY29uZmlnLTU3LVx0dHJpc3RhdGUgXCYjMzQ7dmhvc3QgdmlydGlvLXZzb2NrIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0ODkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIGRpdmUgaW50byB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgYnJlYWtpbmcgdGhpcyBkb3duLgoKKipVbnBhY2tpbmcgdGhlIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBteSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNyaXRpY2FsIGRlcGVuZGVuY2llcyBhdCBwbGF5IGhlcmUuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgYSBzdXJmYWNlLWxldmVsIHVuZGVyc3RhbmRpbmc7IEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY29yZSBlbGVtZW50cyB0aGF0IHVuZGVycGluIHRoZSBzaXR1YXRpb24uIFdoYXQgYXJlIHRoZSB2YXJpYWJsZXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBkcml2ZSB0aGlzPyBBcmUgdGhlcmUgYW55IGhpZGRlbiBhc3N1bXB0aW9ucyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkPyBNeSBmb2N1cyBpcyB0byBjcmVhdGUgYSBzdHJ1Y3R1cmUgdG8gYnVpbGQgYSByb2J1c3QgbW9kZWwgdG8gZXhwbGFpbiB0aGlzIHByb2JsZW0uIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLCBhbmQgdGhhdCYjMzk7cyB0aGUgb25seSBwbGFjZSB0byBzdGFydCB0byBnbyBkZWVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTY6XHRjb25maWcgVkhPU1RfVlNPQ0tcbiAgNTc6XHRcdHRyaXN0YXRlIFwmIzM0O3Zob3N0IHZpcnRpby12c29jayBkcml2ZXJcJiMzNDtcbiAgNTg6XHRcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXHUwMDI2XHUwMDI2IEVWRU5URkRcbiAgNTk6XHRcdHNlbGVjdCBWSE9TVFxuICA2MDpcdFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cbiAgNjE6XHRcdGRlZmF1bHQgblxuICA2MjpcdFx0aGVscFxuICA2MzpcdFx0VGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gdGhlIGhvc3Qga2VybmVsIHRvIHByb3ZpZGUgQUZfVlNPQ0tcbiAgNjQ6XHRcdHNvY2tldHMgZm9yIGNvbW11bmljYXRpbmcgd2l0aCBndWVzdHMuICBUaGUgZ3Vlc3RzIG11c3QgaGF2ZSB0aGVcbiAgNjU6XHRcdHZpcnRpb190cmFuc3BvcnQua28gZHJpdmVyIGxvYWRlZCB0byB1c2UgdGhlIHZpcnRpby12c29jayBkZXZpY2UuXG4gIDY2Olx0XG4gIDY3Olx0XHRUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXG4gIDY4Olx0XHR2aG9zdF92c29jay5cbiAgNjk6XHRcbiAgNzA6XHRjb25maWcgVkhPU1RfVkRQQVxuICA3MTpcdFx0dHJpc3RhdGUgXCYjMzQ7Vmhvc3QgZHJpdmVyIGZvciB2RFBBLWJhc2VkIGJhY2tlbmRcJiMzNDtcbiAgNzI6XHRcdGRlcGVuZHMgb24gRVZFTlRGRFxuICA3MzpcdFx0c2VsZWN0IFZIT1NUXG4gIDc0Olx0XHRzZWxlY3QgSVJRX0JZUEFTU19NQU5BR0VSXG4gIDc1Olx0XHRkZXBlbmRzIG9uIFZEUEFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk0NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgdmhvc3RfdnNvY2tgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgcHJlcmVxdWlzaXRlczogaXQgaGluZ2VzIG9uIGBWU09DS0VUU2AgYW5kIGBFVkVOVEZEYCwgYW5kIHNwZWNpZmljYWxseSwgaXQgdGFyZ2V0cyB0aGUgYFZIT1NUX1ZTT0NLYCBjb25maWd1cmF0aW9uLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdyDigJMgbmFycm93cyBkb3duIHRoZSBzY29wZSByaWdodCBhd2F5LgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YC4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBmdW5kYW1lbnRhbCB0byBwYWNrZXQgc2VuZGluZyB3aXRoaW4gYHZob3N0X3Zzb2NrYC4gQW5kIHRoZSBwYXRjaCBpcyBiYXRjaGluZyB0aGUgdXNlZCBlbGVtZW50cyB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gTWFrZXMgc2Vuc2U7IG9wdGltaXphdGlvbiBpcyBhbHdheXMgYSBnb29kIHRoaW5nLiBHaXZlbiB0aGF0IGl0JiMzOTtzIGluIHRoZSBjb3JlIGtlcm5lbCBsb2dpYyBmb3IgYHZob3N0X3Zzb2NrYCwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJJiMzOTtkIGZsYWcgYXMgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OyBJdCYjMzk7cyByZWFjaGFibGUsIGFuZCB0aGF0IGJhdGNoaW5nIGNvdWxkIGludHJvZHVjZSB1bmV4cGVjdGVkIGVkZ2UgY2FzZXMuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbjogYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAsIG9idmlvdXNseSwgYnV0IGFsc28gYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgIGFuZCBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLgoKV2FpdCwgaG9sZCBvbi4uLiB0aG9zZSBsYXN0IHR3byBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCByaWdodC4gVGhhdCBtZWFucyB0aGV5JiMzOTtyZSBsaWtlbHkgbm90IGludGVuZGVkIGZvciBkaXJlY3QgZXh0ZXJuYWwgdXNlLiBJIHdvbmRlciBpZiB0aGV5JiMzOTtyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlcj8gTGV0IG1lIGp1c3QgY2hlY2sgdGhlIGRlZmluaXRpb25zLi4uIE5vcGUsIHRoZXkmIzM5O3JlIGBzdGF0aWMgYm9vbGAgYW5kIGBzdGF0aWMgdm9pZGAsIHNvIHRoZXkgKmNvdWxkKiBiZSBpbmxpbmVkLiBDb21waWxlciBvcHRpbWl6YXRpb24gaXMgYWx3YXlzIGEgZmFjdG9yIHRvIGNvbnNpZGVyLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkaXNhc3NlbWJseSB0byBiZSBzdXJlLiBBbHNvLCBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCBpcyBhbHNvIHN0YXRpYywgYnV0IGl0JiMzOTtzIGEgbGFyZ2VyIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBsZXNzIGxpa2VseSB0byBiZSBmdWxseSBpbmxpbmVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaWRlbnRpZnkgKmFueSogbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgdGhhdCBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uYWxpdHksIHNvIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zzb2NrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92c29jay5jPTEyOT1zdGF0aWMgdm9pZFxuZHJpdmVycy92aG9zdC92c29jay5jOjEzMDp2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMzEtXHRcdFx0ICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0zMTQ9c3RhdGljIHZvaWQgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTMyMS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozMjI6XHR2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QodnNvY2ssIHZxKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMjMtfVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0zMjY9dmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzQ5LVx0ICogYWxsIHRoZSBvdXRjb21lcyBjb3ZlcmVkOiBpZiB0aGUgYmFja2VuZCBiZWNvbWVzIE5VTEwgcmlnaHQgYWZ0ZXIgdGhlIGNoZWNrLFxuZHJpdmVycy92aG9zdC92c29jay5jOjM1MDpcdCAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS5cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zNTEtXHQgKi9cbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9NjM4PXN0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2hhbmRsZV9yeF9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02NDQtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NjQ1Olx0dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHZzb2NrLCB2cSk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjQ2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY2NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92c29jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYz0xMzA9dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTMxMy1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozMTQ6c3RhdGljIHZvaWQgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzE1LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9NzM1PXN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTc3My1cdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2dnNvY2stXHUwMDNlc2VuZF9wa3RfcXVldWUpO1xuZHJpdmVycy92aG9zdC92c29jay5jOjc3NDpcdHZob3N0X3dvcmtfaW5pdChcdTAwMjZ2c29jay1cdTAwM2VzZW5kX3BrdF93b3JrLCB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Rfd29yayk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzc1LVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNjIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqRXhhbWluaW5nIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YC4gSSBub3RpY2UgaXQmIzM5O3Mgbm90IGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgdXNhZ2UgaW1wbGljYXRpb25zLiBJcyBpdCBpbnRlbmRlZCB0byBiZSBleHRlcm5hbGx5IHZpc2libGU/IElzIGl0IHBhcnQgb2YgYSBsYXJnZXIsIHNoYXJlZCBpbnRlcmZhY2U/IFdoZXJlIGlzIGl0IGJlaW5nIGNhbGxlZCBmcm9tPyBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciB2aG9zdCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3RyYW5zcG9ydF9zZW5kX3BrdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTMwPXZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMTMtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzE0OnN0YXRpYyB2b2lkIHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuZHJpdmVycy92aG9zdC92c29jay5jLTMxNS17XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTMyNT1zdGF0aWMgaW50XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzI2OnZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzI3LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9NDg3PXN0YXRpYyBzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCB2aG9zdF90cmFuc3BvcnQgPSB7XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTUzOC1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo1Mzk6XHQuc2VuZF9wa3QgPSB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3QsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTQwLX07XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTczNT1zdGF0aWMgaW50IHZob3N0X3Zzb2NrX2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03NzMtXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3F1ZXVlKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3NzQ6XHR2aG9zdF93b3JrX2luaXQoXHUwMDI2dnNvY2stXHUwMDNlc2VuZF9wa3Rfd29yaywgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmspO1xuZHJpdmVycy92aG9zdC92c29jay5jLTc3NS1cdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTU3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAgQ29kZSBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgYSBiaXQgb2YgYSBtYXplLiBJbml0aWFsbHksIEkgdGhvdWdodCBpdCB3YXMgc3RhdGljLCB3aGljaCB3b3VsZCBtYWtlIGl0IGEgYml0IHRyaWNraWVyIHRvIHRyYWNlLiBCdXQgd2FpdCwgbm8sIGl0JiMzOTtzIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgIHRoYXQmIzM5O3Mgc3RhdGljLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gQW5kIHdoaWxlIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgICppcyogc3RhdGljLCBpdCYjMzk7cyBhbHNvIGEgcHJldHR5IGhlZnR5IGZ1bmN0aW9uLiBMaWtlbHksIHRoZSBjb21waWxlciBpc24mIzM5O3QgZ29pbmcgdG8gaW5saW5lIGl0LCB3aGljaCBhY3R1YWxseSBoZWxwcyBtZS4KClNvLCBJJiMzOTttIGdvaW5nIHRvIGNlbnRlciBteSBhbmFseXNpcyBvbiBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCBhcyB0aGUga2V5IHN5bWJvbCB0byBsb29rIGF0LCBhbG9uZyB3aXRoIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgIOKAkyBJIHNob3VsZCBrZWVwIHRoYXQgQVBJIGVudHJ5IHBvaW50IGluIG1pbmQuIEFoLCB5ZXMsIHRoZXJlIGl0IGlzIGluIHRoZSBgdmlydGlvX3RyYW5zcG9ydGAgc3RydWN0OyBgLnNlbmRfcGt0YCBpcyBhc3NpZ25lZCB0byBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YCwgc28gdGhhdCBjb25maXJtcyBpdCBhcyB0aGUgQVBJLgoKQW5kLCBpZiBJJiMzOTttIG5vdCBtaXN0YWtlbiwgYHZob3N0X3Zzb2NrX2hhbmRsZV9yeF9raWNrYCBsb29rcyBsaWtlIHRoZSB3b3JrZXIgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHJ4IGtpY2tzLCBhbmQgaXQmIzM5O3MgY2FsbGluZyBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YC4gVGhhdCYjMzk7cyBhIHZhbHVhYmxlIHBpZWNlIG9mIGluZm9ybWF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGZsb3cuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIHNpemUgb2YgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAuIFVuZGVyc3RhbmRpbmcgaXRzIHNjYWxlIHdpbGwgZ2l2ZSBtZSBhIHNlbnNlIG9mIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBwcm9jZXNzaW5nIGluc2lkZSwgYW5kIG1heSBpbmRpY2F0ZSBhcmVhcyByaXBlIGZvciBvcHRpbWl6YXRpb24gb3IgY2xvc2VyIGluc3BlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92c29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTI5Olx0c3RhdGljIHZvaWRcbiAxMzA6XHR2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcbiAxMzE6XHRcdFx0XHQgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXG4gMTMyOlx0e1xuIDEzMzpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdHhfdnEgPSBcdTAwMjZ2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfVFhdO1xuIDEzNDpcdFx0aW50IHBrdHMgPSAwLCB0b3RhbF9sZW4gPSAwO1xuIDEzNTpcdFx0dW5zaWduZWQgaW50IHVzZWRfY291bnQgPSAwO1xuIDEzNjpcdFx0dW5zaWduZWQgaW50IHVzZWRfbGltaXQ7XG4gMTM3Olx0XHRib29sIGFkZGVkID0gZmFsc2U7XG4gMTM4Olx0XHRib29sIHJlc3RhcnRfdHggPSBmYWxzZTtcbiAxMzk6XHRcbiAxNDA6XHRcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuIDE0MTpcdFxuIDE0MjpcdFx0aWYgKCF2aG9zdF92cV9nZXRfYmFja2VuZCh2cSkpXG4gMTQzOlx0XHRcdGdvdG8gb3V0O1xuIDE0NDpcdFxuIDE0NTpcdFx0aWYgKCF2cV9tZXRhX3ByZWZldGNoKHZxKSlcbiAxNDY6XHRcdFx0Z290byBvdXQ7XG4gMTQ3Olx0XG4gMTQ4Olx0XHR1c2VkX2xpbWl0ID0gbWluX3QodW5zaWduZWQgaW50LCB2cS1cdTAwM2VudW0sXG4gMTQ5Olx0XHRcdFx0ICAgbWluX3QodW5zaWduZWQgaW50LCB2cS1cdTAwM2VkZXYtXHUwMDNlaW92X2xpbWl0LFxuIDE1MDpcdFx0XHRcdFx0IHZxLVx1MDAzZWRldi1cdTAwM2V3ZWlnaHQpKTtcbiAxNTE6XHRcdGlmICh1bmxpa2VseSghdXNlZF9saW1pdCkpXG4gMTUyOlx0XHRcdGdvdG8gb3V0O1xuIDE1MzpcdFxuIDE1NDpcdFx0LyogQXZvaWQgZnVydGhlciB2bWV4aXRzLCB3ZSYjMzk7cmUgYWxyZWFkeSBwcm9jZXNzaW5nIHRoZSB2aXJ0cXVldWUgKi9cbiAxNTU6XHRcdHZob3N0X2Rpc2FibGVfbm90aWZ5KFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIDE1NjpcdFxuIDE1NzpcdFx0ZG8ge1xuIDE1ODpcdFx0XHRzdHJ1Y3QgdmlydGlvX3Zzb2NrX2hkciAqaGRyO1xuIDE1OTpcdFx0XHRzaXplX3QgaW92X2xlbiwgcGF5bG9hZF9sZW47XG4gMTYwOlx0XHRcdHN0cnVjdCBpb3ZfaXRlciBpb3ZfaXRlcjtcbiAxNjE6XHRcdFx0dTMyIGZsYWdzX3RvX3Jlc3RvcmUgPSAwO1xuIDE2MjpcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDE2MzpcdFx0XHR1bnNpZ25lZCBvdXQsIGluO1xuIDE2NDpcdFx0XHRzaXplX3QgbmJ5dGVzO1xuIDE2NTpcdFx0XHR1MzIgb2Zmc2V0O1xuIDE2NjpcdFx0XHRpbnQgaGVhZDtcbiAxNjc6XHRcbiAxNjg6XHRcdFx0aWYgKHVzZWRfY291bnQgPT0gdXNlZF9saW1pdClcbiAxNjk6XHRcdFx0XHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCBcdTAwMjZ1c2VkX2NvdW50KTtcbiAxNzA6XHRcbiAxNzE6XHRcdFx0c2tiID0gdmlydGlvX3Zzb2NrX3NrYl9kZXF1ZXVlKFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3F1ZXVlKTtcbiAxNzI6XHRcbiAxNzM6XHRcdFx0aWYgKCFza2IpIHtcbiAxNzQ6XHRcdFx0XHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCBcdTAwMjZ1c2VkX2NvdW50KTtcbiAxNzU6XHRcdFx0XHR2aG9zdF9lbmFibGVfbm90aWZ5KFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIDE3NjpcdFx0XHRcdGJyZWFrO1xuIDE3NzpcdFx0XHR9XG4gMTc4Olx0XG4gMTc5Olx0XHRcdGhlYWQgPSB2aG9zdF9nZXRfdnFfZGVzYyh2cSwgdnEtXHUwMDNlaW92LCBBUlJBWV9TSVpFKHZxLVx1MDAzZWlvdiksXG4gMTgwOlx0XHRcdFx0XHRcdCBcdTAwMjZvdXQsIFx1MDAyNmluLCBOVUxMLCBOVUxMKTtcbiAxODE6XHRcdFx0aWYgKGhlYWQgXHUwMDNjIDApIHtcbiAxODI6XHRcdFx0XHR2aXJ0aW9fdnNvY2tfc2tiX3F1ZXVlX2hlYWQoXHUwMDI2dnNvY2stXHUwMDNlc2VuZF9wa3RfcXVldWUsIHNrYik7XG4gMTgzOlx0XHRcdFx0YnJlYWs7XG4gMTg0Olx0XHRcdH1cbiAxODU6XHRcbiAxODY6XHRcdFx0aWYgKGhlYWQgPT0gdnEtXHUwMDNlbnVtKSB7XG4gMTg3Olx0XHRcdFx0dmlydGlvX3Zzb2NrX3NrYl9xdWV1ZV9oZWFkKFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3F1ZXVlLCBza2IpO1xuIDE4ODpcdFx0XHRcdC8qIFdlIGNhbm5vdCBmaW5pc2ggeWV0IGlmIG1vcmUgYnVmZmVycyBzbnVjayBpbiB3aGlsZVxuIDE4OTpcdFx0XHRcdCAqIHJlLWVuYWJsaW5nIG5vdGlmeS5cbiAxOTA6XHRcdFx0XHQgKi9cbiAxOTE6XHRcdFx0XHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCBcdTAwMjZ1c2VkX2NvdW50KTtcbiAxOTI6XHRcdFx0XHRpZiAodW5saWtlbHkodmhvc3RfZW5hYmxlX25vdGlmeShcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKSkpIHtcbiAxOTM6XHRcdFx0XHRcdHZob3N0X2Rpc2FibGVfbm90aWZ5KFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIDE5NDpcdFx0XHRcdFx0Y29udGludWU7XG4gMTk1Olx0XHRcdFx0fVxuIDE5NjpcdFx0XHRcdGJyZWFrO1xuIDE5NzpcdFx0XHR9XG4gMTk4Olx0XG4gMTk5Olx0XHRcdGlmIChvdXQpIHtcbiAyMDA6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAyMDE6XHRcdFx0XHR2cV9lcnIodnEsIFwmIzM0O0V4cGVjdGVkIDAgb3V0cHV0IGJ1ZmZlcnMsIGdvdCAldVxcblwmIzM0Oywgb3V0KTtcbiAyMDI6XHRcdFx0XHRicmVhaztcbiAyMDM6XHRcdFx0fVxuIDIwNDpcdFxuIDIwNTpcdFx0XHRpb3ZfbGVuID0gaW92X2xlbmd0aChcdTAwMjZ2cS1cdTAwM2Vpb3Zbb3V0XSwgaW4pO1xuIDIwNjpcdFx0XHRpZiAoaW92X2xlbiBcdTAwM2Mgc2l6ZW9mKCpoZHIpKSB7XG4gMjA3Olx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gMjA4Olx0XHRcdFx0dnFfZXJyKHZxLCBcJiMzNDtCdWZmZXIgbGVuIFslenVdIHRvbyBzbWFsbFxcblwmIzM0OywgaW92X2xlbik7XG4gMjA5Olx0XHRcdFx0YnJlYWs7XG4gMjEwOlx0XHRcdH1cbiAyMTE6XHRcbiAyMTI6XHRcdFx0aW92X2l0ZXJfaW5pdChcdTAwMjZpb3ZfaXRlciwgSVRFUl9ERVNULCBcdTAwMjZ2cS1cdTAwM2Vpb3Zbb3V0XSwgaW4sIGlvdl9sZW4pO1xuIDIxMzpcdFx0XHRvZmZzZXQgPSBWSVJUSU9fVlNPQ0tfU0tCX0NCKHNrYiktXHUwMDNlb2Zmc2V0O1xuIDIxNDpcdFx0XHRwYXlsb2FkX2xlbiA9IHNrYi1cdTAwM2VsZW4gLSBvZmZzZXQ7XG4gMjE1Olx0XHRcdGhkciA9IHZpcnRpb192c29ja19oZHIoc2tiKTtcbiAyMTY6XHRcbiAyMTc6XHRcdFx0LyogSWYgdGhlIHBhY2tldCBpcyBncmVhdGVyIHRoYW4gdGhlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGVcbiAyMTg6XHRcdFx0ICogYnVmZmVyLCB3ZSBzcGxpdCBpdCB1c2luZyBtdWx0aXBsZSBidWZmZXJzLlxuIDIxOTpcdFx0XHQgKi9cbiAyMjA6XHRcdFx0aWYgKHBheWxvYWRfbGVuIFx1MDAzZSBpb3ZfbGVuIC0gc2l6ZW9mKCpoZHIpKSB7XG4gMjIxOlx0XHRcdFx0cGF5bG9hZF9sZW4gPSBpb3ZfbGVuIC0gc2l6ZW9mKCpoZHIpO1xuIDIyMjpcdFxuIDIyMzpcdFx0XHRcdC8qIEFzIHdlIGFyZSBjb3B5aW5nIHBpZWNlcyBvZiBsYXJnZSBwYWNrZXQmIzM5O3MgYnVmZmVyIHRvXG4gMjI0Olx0XHRcdFx0ICogc21hbGwgcnggYnVmZmVycywgaGVhZGVycyBvZiBwYWNrZXRzIGluIHJ4IHF1ZXVlIGFyZVxuIDIyNTpcdFx0XHRcdCAqIGNyZWF0ZWQgZHluYW1pY2FsbHkgYW5kIGFyZSBpbml0aWFsaXplZCB3aXRoIGhlYWRlclxuIDIyNjpcdFx0XHRcdCAqIG9mIGN1cnJlbnQgcGFja2V0KGV4Y2VwdCBsZW5ndGgpLiBCdXQgaW4gY2FzZSBvZlxuIDIyNzpcdFx0XHRcdCAqIFNPQ0tfU0VRUEFDS0VULCB3ZSBhbHNvIG11c3QgY2xlYXIgbWVzc2FnZSBkZWxpbWV0ZXJcbiAyMjg6XHRcdFx0XHQgKiBiaXQgKFZJUlRJT19WU09DS19TRVFfRU9NKSBhbmQgTVNHX0VPUiBiaXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEzMwoJCQkJCQkJb3V0cHV0OiAxMTIKCQkJCQkJCXRob3VnaHRzOiAyNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWaG9zdCBWc29jayBQYWNrZXQgU2VuZGluZyBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSB2aG9zdCB2c29jayBkcml2ZXIsIHdoaWNoIGZvY3VzZXMgb24gYmF0Y2hpbmcgdXNlZCBlbGVtZW50cyB3aGVuIHNlbmRpbmcgcGFja2V0cyB0byB0aGUgZ3Vlc3QuIFRoaXMgc2VlbXMgbGlrZSBhIGNvcmUgbG9naWMgY2hhbmdlLCBzbyBpdCYjMzk7cyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QgYW5kIGhvdyB3ZSBjYW4gYmVzdCB0ZXN0IGl0LiBUaGUgcHJpbWFyeSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QgYXBwZWFyIHRvIGJlIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgIGFuZCBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YC4gQ29uc2lkZXJpbmcgdGhlaXIgc2l6ZSwgSSBjYW4gc2FmZWx5IGFzc3VtZSBuZWl0aGVyIGlzIGlubGluZWQ7IHRoZXkgc2hvdWxkIGJlIGRpc3RpbmN0IHN5bWJvbHMuIEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGB2aG9zdF92c29ja19mbHVzaF91c2VkYDsgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBqdXN0IGEgYHN0YXRpYyBib29sYCBtYWtlcyBpdCBhIHN0cm9uZyBjYW5kaWRhdGUgdG8gYmUgaW5saW5lZCwgYWx0aG91Z2ggSSYjMzk7bGwga2VlcCBhbiBleWUgb24gaXQgZHVyaW5nIGFuYWx5c2lzLgoKVGhlIG1haW4gY29uZmlndXJhdGlvbiBpcyBgVkhPU1RfVlNPQ0tgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlIGdpdmVuIHRoZSBjaGFuZ2UmIzM5O3MgZm9jdXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBpZGVudGlmeSBhbGwgZGVwZW5kZW5jaWVzLiBMZXQgbWUgdmVyaWZ5OyBpdCBsb29rcyBsaWtlIGBWSE9TVF9WU09DS2AgYWxzbyByZXF1aXJlcyBgVlNPQ0tFVFNgIGFuZCBgRVZFTlRGRGAuIGBWU09DS0VUU2AgaXMgb2J2aW91c2x5IGZ1bmRhbWVudGFsIHRvIHZzb2NrIGZ1bmN0aW9uYWxpdHksIHNvIGl0JiMzOTtzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgaW52b2x2ZWQgaW4gdGVzdGluZy4gSSYjMzk7bGwgaW5jbHVkZSBgVkhPU1RfVlNPQ0tgIGFuZCBgVlNPQ0tFVFNgIGluIG15IGNvbmZpZ3VyYXRpb24gY29uc2lkZXJhdGlvbnMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBhbmQgbmVjZXNzYXJ5IHNldHVwIGZvciB0aG9yb3VnaCB0ZXN0aW5nIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7LAogICAgJiMzNDtWU09DS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCYjMzQ7LAogICAgJiMzNDt2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZob3N0IHZzb2NrIGRyaXZlciB0byBiYXRjaCB1c2VkIGVsZW1lbnRzIHdoZW4gc2VuZGluZyBwYWNrZXRzIHRvIHRoZSBndWVzdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZob3N0IHZzb2NrIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7LAogICAgJiMzNDtWU09DS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCYjMzQ7LAogICAgJiMzNDt2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZob3N0IHZzb2NrIGRyaXZlciB0byBiYXRjaCB1c2VkIGVsZW1lbnRzIHdoZW4gc2VuZGluZyBwYWNrZXRzIHRvIHRoZSBndWVzdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZob3N0IHZzb2NrIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyB0aGUgdmlydGlvIHZzb2NrIHRyYW5zbWlzc2lvbiBwYXRoIGJ5IGJhdGNoaW5nIHVzZWQgZWxlbWVudCB1cGRhdGVzLiBJdCBpbnRyb2R1Y2VzIGB2aG9zdF92c29ja19hZGRfdXNlZGAgdG8gcG9wdWxhdGUgYW4gYXJyYXkgb2YgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIChgdnEtXHUwMDNlaGVhZHNgKSBhbmQgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgIHRvIGZsdXNoIHRoZW0gdG8gdGhlIGd1ZXN0IG1lbW9yeSB2aWEgYHZob3N0X2FkZF91c2VkX25gLlxuVGhlIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCBjb25zaXN0cyBvZiB0d28gMzItYml0IGludGVnZXJzIChgaWRgIGFuZCBgbGVuYCkgYW5kIGNvbnRhaW5zIG5vIHBhZGRpbmcgYnl0ZXMuIEJvdGggZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGB2aG9zdF92c29ja19hZGRfdXNlZGAgYmVmb3JlIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIChndWVzdCBtZW1vcnkpIHZpYSBgdmhvc3RfcHV0X3VzZWRgIGFuZCBgdmhvc3RfY29weV90b191c2VyYC5cblNpbmNlIHRoZSBtZW1vcnkgYmVpbmcgY29waWVkIGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCB0aGVyZSBhcmUgbm8gcGFkZGluZyBieXRlcywgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgYm91bmRzIG9mIHRoZSBhcnJheSBhcmUgYWxzbyBwcm9wZXJseSBjaGVja2VkIGFnYWluc3QgYGRldi1cdTAwM2Vpb3ZfbGltaXRgLCBwcmV2ZW50aW5nIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW55d2F5KS5cblRodXMsIHRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk4NzlhYmY0NDNjNGFmOTY4YmZmZGI1MTA1ODUzMDUyNGIxYjM0MDEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAwNjoyOToyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdnNvY2suYyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suYwppbmRleCA5YWFhYjZiYjgwNjFjLi5kODA1MGNjYTI3NWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC92c29jay5jCkBAIC0xMDMsMTIgJiM0MzsxMDMsMzcgQEAgc3RhdGljIGJvb2wgdmhvc3RfdHJhbnNwb3J0X2hhc19yZW1vdGVfY2lkKHN0cnVjdCB2c29ja19zb2NrICp2c2ssIHUzMiBjaWQpCiAJcmV0dXJuIGZvdW5kOwogfQogCiYjNDM7c3RhdGljIGJvb2wgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwKJiM0MzsJCQkJICAgdW5zaWduZWQgaW50ICp1c2VkX2NvdW50KQomIzQzO3sKJiM0MzsJaWYgKCEqdXNlZF9jb3VudCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJdmhvc3RfYWRkX3VzZWRfbih2cSwgdnEtJmd0O2hlYWRzLCB2cS0mZ3Q7bmhlYWRzLCAqdXNlZF9jb3VudCk7CiYjNDM7CSp1c2VkX2NvdW50ID0gMDsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2FkZF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLAomIzQzOwkJCQkgdW5zaWduZWQgaW50ICp1c2VkX2NvdW50LAomIzQzOwkJCQkgdW5zaWduZWQgaW50IGhlYWQsIHVuc2lnbmVkIGludCBsZW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICp1c2VkID0gJmFtcDt2cS0mZ3Q7aGVhZHNbKnVzZWRfY291bnRdOwomIzQzOwomIzQzOwl1c2VkLSZndDtpZCA9IGNwdV90b192aG9zdDMyKHZxLCBoZWFkKTsKJiM0MzsJdXNlZC0mZ3Q7bGVuID0gY3B1X3RvX3Zob3N0MzIodnEsIGxlbik7CiYjNDM7CXZxLSZndDtuaGVhZHNbKnVzZWRfY291bnRdID0gMTsKJiM0MzsJKCp1c2VkX2NvdW50KSYjNDM7JiM0Mzs7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQKIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLAogCQkJICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQogewogCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnR4X3ZxID0gJmFtcDt2c29jay0mZ3Q7dnFzW1ZTT0NLX1ZRX1RYXTsKIAlpbnQgcGt0cyA9IDAsIHRvdGFsX2xlbiA9IDA7CiYjNDM7CXVuc2lnbmVkIGludCB1c2VkX2NvdW50ID0gMDsKJiM0MzsJdW5zaWduZWQgaW50IHVzZWRfbGltaXQ7CiAJYm9vbCBhZGRlZCA9IGZhbHNlOwogCWJvb2wgcmVzdGFydF90eCA9IGZhbHNlOwogCkBAIC0xMjAsNiAmIzQzOzE0NSwxMiBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywKIAlpZiAoIXZxX21ldGFfcHJlZmV0Y2godnEpKQogCQlnb3RvIG91dDsKIAomIzQzOwl1c2VkX2xpbWl0ID0gbWluX3QodW5zaWduZWQgaW50LCB2cS0mZ3Q7bnVtLAomIzQzOwkJCSAgIG1pbl90KHVuc2lnbmVkIGludCwgdnEtJmd0O2Rldi0mZ3Q7aW92X2xpbWl0LAomIzQzOwkJCQkgdnEtJmd0O2Rldi0mZ3Q7d2VpZ2h0KSk7CiYjNDM7CWlmICh1bmxpa2VseSghdXNlZF9saW1pdCkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKIAkvKiBBdm9pZCBmdXJ0aGVyIHZtZXhpdHMsIHdlJiMzOTtyZSBhbHJlYWR5IHByb2Nlc3NpbmcgdGhlIHZpcnRxdWV1ZSAqLwogCXZob3N0X2Rpc2FibGVfbm90aWZ5KCZhbXA7dnNvY2stJmd0O2RldiwgdnEpOwogCkBAIC0xMzQsOSAmIzQzOzE2NSwxMyBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywKIAkJdTMyIG9mZnNldDsKIAkJaW50IGhlYWQ7CiAKJiM0MzsJCWlmICh1c2VkX2NvdW50ID09IHVzZWRfbGltaXQpCiYjNDM7CQkJYWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgJmFtcDt1c2VkX2NvdW50KTsKJiM0MzsKIAkJc2tiID0gdmlydGlvX3Zzb2NrX3NrYl9kZXF1ZXVlKCZhbXA7dnNvY2stJmd0O3NlbmRfcGt0X3F1ZXVlKTsKIAogCQlpZiAoIXNrYikgewomIzQzOwkJCWFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsICZhbXA7dXNlZF9jb3VudCk7CiAJCQl2aG9zdF9lbmFibGVfbm90aWZ5KCZhbXA7dnNvY2stJmd0O2RldiwgdnEpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTE1Myw2ICYjNDM7MTg4LDcgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssCiAJCQkvKiBXZSBjYW5ub3QgZmluaXNoIHlldCBpZiBtb3JlIGJ1ZmZlcnMgc251Y2sgaW4gd2hpbGUKIAkJCSAqIHJlLWVuYWJsaW5nIG5vdGlmeS4KIAkJCSAqLwomIzQzOwkJCWFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsICZhbXA7dXNlZF9jb3VudCk7CiAJCQlpZiAodW5saWtlbHkodmhvc3RfZW5hYmxlX25vdGlmeSgmYW1wO3Zzb2NrLSZndDtkZXYsIHZxKSkpIHsKIAkJCQl2aG9zdF9kaXNhYmxlX25vdGlmeSgmYW1wO3Zzb2NrLSZndDtkZXYsIHZxKTsKIAkJCQljb250aW51ZTsKQEAgLTIzMCw4ICYjNDM7MjY2LDggQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssCiAJCSAqLwogCQl2aXJ0aW9fdHJhbnNwb3J0X2RlbGl2ZXJfdGFwX3BrdChza2IpOwogCi0JCXZob3N0X2FkZF91c2VkKHZxLCBoZWFkLCBzaXplb2YoKmhkcikgJiM0MzsgcGF5bG9hZF9sZW4pOwotCQlhZGRlZCA9IHRydWU7CiYjNDM7CQl2aG9zdF92c29ja19hZGRfdXNlZCh2cSwgJmFtcDt1c2VkX2NvdW50LCBoZWFkLAomIzQzOwkJCQkgICAgIHNpemVvZigqaGRyKSAmIzQzOyBwYXlsb2FkX2xlbik7CiAKIAkJVklSVElPX1ZTT0NLX1NLQl9DQihza2IpLSZndDtvZmZzZXQgJiM0Mzs9IHBheWxvYWRfbGVuOwogCQl0b3RhbF9sZW4gJiM0Mzs9IHBheWxvYWRfbGVuOwpAQCAtMjY0LDYgJiM0MzszMDAsNyBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywKIAkJCXZpcnRpb190cmFuc3BvcnRfY29uc3VtZV9za2Jfc2VudChza2IsIHRydWUpOwogCQl9CiAJfSB3aGlsZShsaWtlbHkoIXZob3N0X2V4Y2VlZHNfd2VpZ2h0KHZxLCAmIzQzOyYjNDM7cGt0cywgdG90YWxfbGVuKSkpOwomIzQzOwlhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCAmYW1wO3VzZWRfY291bnQpOwogCWlmIChhZGRlZCkKIAkJdmhvc3Rfc2lnbmFsKCZhbXA7dnNvY2stJmd0O2RldiwgdnEpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDUzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNjI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAgd2l0aGluIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBiYXRjaGluZyB3aGVuIGFkZGluZyB1c2VkIGVsZW1lbnRzIHRvIHRoZSB2aXJ0cXVldWUsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZldyBxdWVzdGlvbnMuIEluc3RlYWQgb2YgdGhlIHVzdWFsIGB2aG9zdF9hZGRfdXNlZGAgY2FsbCBwZXIgcGFja2V0LCBpdCYjMzk7cyBub3cgdXNpbmcgYHZob3N0X3Zzb2NrX2FkZF91c2VkYCwgcG9wdWxhdGluZyBgdnEtJmd0O2hlYWRzYCwgYHZxLSZndDtuaGVhZHNgIGFuZCBpbmNyZW1lbnRpbmcgYHVzZWRfY291bnRgIGJlZm9yZSBhIGJ1bGsgZmx1c2ggdmlhIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCwgZXZlbnR1YWxseSBjYWxsaW5nIGB2aG9zdF9hZGRfdXNlZF9uYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMsIGVzcGVjaWFsbHkgc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBiYXRjaGluZy4KCk15IHByaW1hcnkgY29uY2VybiBpcyBhcm91bmQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIHdpdGhpbiB0aGUgYmF0Y2hpbmcgbG9naWMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBob3cgYHZxLSZndDtoZWFkc2AgYW5kIGB2cS0mZ3Q7bmhlYWRzYCBhcmUgdXNlZCBhbmQgaW5pdGlhbGl6ZWQuCgpEaXZpbmcgaW50byB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBgdnEtJmd0O2hlYWRzYCBhbmQgYHZxLSZndDtuaGVhZHNgIGFyZSBwYXJ0IG9mIHRoZSBgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZWAgaXRzZWxmLCB3aGljaCBpcyBnb29kLiBUaGUgYHZob3N0X3Zzb2NrX2FkZF91c2VkYCBmdW5jdGlvbiBpcyB3aGF0IHBvcHVsYXRlcyB0aGVzZSBhcnJheXMsIHNldHRpbmcgYHVzZWQtJmd0O2lkYCBhbmQgYHVzZWQtJmd0O2xlbmAuIEl0IGFwcGVhcnMgdGhlIGNvZGUgaW5pdGlhbGl6ZXMgdGhlIG1lbWJlcnMgb2YgdGhlIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCB0byBgdnEtJmd0O2hlYWRzWyp1c2VkX2NvdW50XWAsIHdoaWNoIGlzIGVuY291cmFnaW5nLiBUaGUgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIGRlZmluaXRpb24sIHdpdGggaXRzIDMyLWJpdCBgaWRgIGFuZCBgbGVuYCBtZW1iZXJzIGxvb2tzIGxpa2UgdGhlcmUmIzM5O3Mgbm8gcGFkZGluZy4gU28sIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIHRoZSBzdHJ1Y3QgaXRzZWxmLCBpdCBpcyA4IGJ5dGVzIGluIHRvdGFsLgoKRXNzZW50aWFsbHksIGB2aG9zdF92c29ja19hZGRfdXNlZGAgaXMgdGFraW5nIGNhcmUgb2YgaW5pdGlhbGl6aW5nIHRoZSBgaWRgIGFuZCBgbGVuYCBmaWVsZHMsIGFuZCB0aGUgYHZob3N0X2FkZF91c2VkX25gIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB3cml0aW5nIHRoZXNlIGVsZW1lbnRzIHRvIHRoZSBndWVzdCBtZW1vcnkuIFNvLCBJIHNlZSB0aGUgd3JpdGVzIGZyb20gdGhlIGRldmljZSB0byB0aGUgZ3Vlc3QsIGFuZCB0aGUgZWxlbWVudHMgYXJlIGJlaW5nIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB3cml0dGVuLCBhbmQgd2l0aCBubyBwYWRkaW5nLCBpdCBkb2VzIG5vdCBsb29rIGxpa2UgdGhlcmUgd2lsbCBiZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MuCgpIb3dldmVyLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gSXMgYHZxLSZndDtuaGVhZHNgIGFjdHVhbGx5IGFuIGFycmF5IG9mIGludGVnZXJzPyBJIG5lZWQgdG8ga25vdyB0aGUgdHlwZSBmb3IgdGhhdCBtZW1iZXIgdG8gZW5zdXJlIG5vIGx1cmtpbmcgaXNzdWVzLiBJIHdpbGwgdXNlIGEgZ3JlcHBlciAoSSBrbm93LCBJIGtub3cpIHRvIHF1aWNrbHkgZmluZCB0aGUgYHN0cnVjdCB2aG9zdF92aXJ0cXVldWVgIGFuZCBjb25maXJtIHRoZSB0eXBlIG9mIHRoZSBgbmhlYWRzYCBhcnJheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5oPTg4PXN0cnVjdCB2aG9zdF92cmluZ19jYWxsIHtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtOTMtLyogVGhlIHZpcnRxdWV1ZSBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGEgcXVldWUgYXR0YWNoZWQgdG8gYSBkZXZpY2UuICovXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg6OTQ6c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSB7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtOTUtXHRzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHZob3N0LmgqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdmhvc3QgaW1wbGVtZW50YXRpb24gYmV0dGVyLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgZHJpdmVycy92aG9zdC92aG9zdC5oYC4gSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgOTQuIE15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyB0aGF0IHNvbWV0aGluZyBzaWduaWZpY2FudCBpcyBoYXBwZW5pbmcgdGhlcmUsIHBvc3NpYmx5IHJlbGF0ZWQgdG8gZGF0YSBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9uIGRlZmluaXRpb25zIGNydWNpYWwgZm9yIHRoZSB2aG9zdCBvcGVyYXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSB0byB1bmxvY2sgdGhpcyBhcmNoaXRlY3R1cmFsIHVuZGVyc3RhbmRpbmcgSSYjMzk7bSBhZnRlci4gTGV0JiMzOTtzIHNlZSB3aGF0IHRyZWFzdXJlcyB0aGF0IGZpbGUgaG9sZHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTQ6XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlIHtcbiAgOTU6XHRcdHN0cnVjdCB2aG9zdF9kZXYgKmRldjtcbiAgOTY6XHRcdHN0cnVjdCB2aG9zdF93b3JrZXIgX19yY3UgKndvcmtlcjtcbiAgOTc6XHRcbiAgOTg6XHRcdC8qIFRoZSBhY3R1YWwgcmluZyBvZiBidWZmZXJzLiAqL1xuICA5OTpcdFx0c3RydWN0IG11dGV4IG11dGV4O1xuIDEwMDpcdFx0dW5zaWduZWQgaW50IG51bTtcbiAxMDE6XHRcdHZyaW5nX2Rlc2NfdCBfX3VzZXIgKmRlc2M7XG4gMTAyOlx0XHR2cmluZ19hdmFpbF90IF9fdXNlciAqYXZhaWw7XG4gMTAzOlx0XHR2cmluZ191c2VkX3QgX191c2VyICp1c2VkO1xuIDEwNDpcdFx0Y29uc3Qgc3RydWN0IHZob3N0X2lvdGxiX21hcCAqbWV0YV9pb3RsYltWSE9TVF9OVU1fQUREUlNdO1xuIDEwNTpcdFx0c3RydWN0IGZpbGUgKmtpY2s7XG4gMTA2Olx0XHRzdHJ1Y3Qgdmhvc3RfdnJpbmdfY2FsbCBjYWxsX2N0eDtcbiAxMDc6XHRcdHN0cnVjdCBldmVudGZkX2N0eCAqZXJyb3JfY3R4O1xuIDEwODpcdFx0c3RydWN0IGV2ZW50ZmRfY3R4ICpsb2dfY3R4O1xuIDEwOTpcdFxuIDExMDpcdFx0c3RydWN0IHZob3N0X3BvbGwgcG9sbDtcbiAxMTE6XHRcbiAxMTI6XHRcdC8qIFRoZSByb3V0aW5lIHRvIGNhbGwgd2hlbiB0aGUgR3Vlc3QgcGluZ3MgdXMsIG9yIHRpbWVvdXQuICovXG4gMTEzOlx0XHR2aG9zdF93b3JrX2ZuX3QgaGFuZGxlX2tpY2s7XG4gMTE0Olx0XG4gMTE1Olx0XHQvKiBMYXN0IGF2YWlsYWJsZSBpbmRleCB3ZSBzYXcuXG4gMTE2Olx0XHQgKiBWYWx1ZXMgYXJlIGxpbWl0ZWQgdG8gMHg3ZmZmLCBhbmQgdGhlIGhpZ2ggYml0IGlzIHVzZWQgYXNcbiAxMTc6XHRcdCAqIGEgd3JhcCBjb3VudGVyIHdoZW4gdXNpbmcgVklSVElPX0ZfUklOR19QQUNLRUQuICovXG4gMTE4Olx0XHR1MTYgbGFzdF9hdmFpbF9pZHg7XG4gMTE5Olx0XHQvKiBOZXh0IGF2YWlsIHJpbmcgaGVhZCB3aGVuIFZJUlRJT19GX0lOX09SREVSIGlzIG5lZ29pdGF0ZWQgKi9cbiAxMjA6XHRcdHUxNiBuZXh0X2F2YWlsX2hlYWQ7XG4gMTIxOlx0XG4gMTIyOlx0XHQvKiBDYWNoZXMgYXZhaWxhYmxlIGluZGV4IHZhbHVlIGZyb20gdXNlci4gKi9cbiAxMjM6XHRcdHUxNiBhdmFpbF9pZHg7XG4gMTI0Olx0XG4gMTI1Olx0XHQvKiBMYXN0IGluZGV4IHdlIHVzZWQuXG4gMTI2Olx0XHQgKiBWYWx1ZXMgYXJlIGxpbWl0ZWQgdG8gMHg3ZmZmLCBhbmQgdGhlIGhpZ2ggYml0IGlzIHVzZWQgYXNcbiAxMjc6XHRcdCAqIGEgd3JhcCBjb3VudGVyIHdoZW4gdXNpbmcgVklSVElPX0ZfUklOR19QQUNLRUQuICovXG4gMTI4Olx0XHR1MTYgbGFzdF91c2VkX2lkeDtcbiAxMjk6XHRcbiAxMzA6XHRcdC8qIFVzZWQgZmxhZ3MgKi9cbiAxMzE6XHRcdHUxNiB1c2VkX2ZsYWdzO1xuIDEzMjpcdFxuIDEzMzpcdFx0LyogTGFzdCB1c2VkIGluZGV4IHZhbHVlIHdlIGhhdmUgc2lnbmFsbGVkIG9uICovXG4gMTM0Olx0XHR1MTYgc2lnbmFsbGVkX3VzZWQ7XG4gMTM1Olx0XG4gMTM2Olx0XHQvKiBMYXN0IHVzZWQgaW5kZXggdmFsdWUgd2UgaGF2ZSBzaWduYWxsZWQgb24gKi9cbiAxMzc6XHRcdGJvb2wgc2lnbmFsbGVkX3VzZWRfdmFsaWQ7XG4gMTM4Olx0XG4gMTM5Olx0XHQvKiBMb2cgd3JpdGVzIHRvIHVzZWQgc3RydWN0dXJlLiAqL1xuIDE0MDpcdFx0Ym9vbCBsb2dfdXNlZDtcbiAxNDE6XHRcdHU2NCBsb2dfYWRkcjtcbiAxNDI6XHRcbiAxNDM6XHRcdHN0cnVjdCBpb3ZlYyBpb3ZbVUlPX01BWElPVl07XG4gMTQ0Olx0XHRzdHJ1Y3QgaW92ZWMgaW90bGJfaW92WzY0XTtcbiAxNDU6XHRcdHN0cnVjdCBpb3ZlYyAqaW5kaXJlY3Q7XG4gMTQ2Olx0XHRzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcztcbiAxNDc6XHRcdHUxNiAqbmhlYWRzO1xuIDE0ODpcdFx0LyogUHJvdGVjdGVkIGJ5IHZpcnRxdWV1ZSBtdXRleC4gKi9cbiAxNDk6XHRcdHN0cnVjdCB2aG9zdF9pb3RsYiAqdW1lbTtcbiAxNTA6XHRcdHN0cnVjdCB2aG9zdF9pb3RsYiAqaW90bGI7XG4gMTUxOlx0XHR2b2lkICpwcml2YXRlX2RhdGE7XG4gMTUyOlx0XHRWSVJUSU9fREVDTEFSRV9GRUFUVVJFUyhhY2tlZF9mZWF0dXJlcyk7XG4gMTUzOlx0XHR1NjQgYWNrZWRfYmFja2VuZF9mZWF0dXJlcztcbiAxNTQ6XHRcdC8qIExvZyB3cml0ZSBkZXNjcmlwdG9ycyAqL1xuIDE1NTpcdFx0dm9pZCBfX3VzZXIgKmxvZ19iYXNlO1xuIDE1NjpcdFx0c3RydWN0IHZob3N0X2xvZyAqbG9nO1xuIDE1NzpcdFx0c3RydWN0IGlvdmVjIGxvZ19pb3ZbNjRdO1xuIDE1ODpcdFxuIDE1OTpcdFx0LyogUmluZyBlbmRpYW5uZXNzLiBEZWZhdWx0cyB0byBsZWdhY3kgbmF0aXZlIGVuZGlhbm5lc3MuXG4gMTYwOlx0XHQgKiBTZXQgdG8gdHJ1ZSB3aGVuIHN0YXJ0aW5nIGEgbW9kZXJuIHZpcnRpbyBkZXZpY2UuICovXG4gMTYxOlx0XHRib29sIGlzX2xlO1xuIDE2MjpcdCNpZmRlZiBDT05GSUdfVkhPU1RfQ1JPU1NfRU5ESUFOX0xFR0FDWVxuIDE2MzpcdFx0LyogUmluZyBlbmRpYW5uZXNzIHJlcXVlc3RlZCBieSB1c2Vyc3BhY2UgZm9yIGNyb3NzLWVuZGlhbiBzdXBwb3J0LiAqL1xuIDE2NDpcdFx0Ym9vbCB1c2VyX2JlO1xuIDE2NTpcdCNlbmRpZlxuIDE2NjpcdFx0dTMyIGJ1c3lsb29wX3RpbWVvdXQ7XG4gMTY3Olx0fTtcbiAxNjg6XHRcbiAxNjk6XHRzdHJ1Y3Qgdmhvc3RfbXNnX25vZGUge1xuIDE3MDpcdCAgdW5pb24ge1xuIDE3MTpcdFx0ICBzdHJ1Y3Qgdmhvc3RfbXNnIG1zZztcbiAxNzI6XHRcdCAgc3RydWN0IHZob3N0X21zZ192MiBtc2dfdjI7XG4gMTczOlx0ICB9O1xuIDE3NDpcdCAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7XG4gMTc1Olx0ICBzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7XG4gMTc2Olx0fTtcbiAxNzc6XHRcbiAxNzg6XHRzdHJ1Y3Qgdmhvc3RfZGV2IHtcbiAxNzk6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIDE4MDpcdFx0c3RydWN0IG11dGV4IG11dGV4O1xuIDE4MTpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKnZxcztcbiAxODI6XHRcdGludCBudnFzO1xuIDE4MzpcdFx0c3RydWN0IGV2ZW50ZmRfY3R4ICpsb2dfY3R4O1xuIDE4NDpcdFx0c3RydWN0IHZob3N0X2lvdGxiICp1bWVtO1xuIDE4NTpcdFx0c3RydWN0IHZob3N0X2lvdGxiICppb3RsYjtcbiAxODY6XHRcdHNwaW5sb2NrX3QgaW90bGJfbG9jaztcbiAxODc6XHRcdHN0cnVjdCBsaXN0X2hlYWQgcmVhZF9saXN0O1xuIDE4ODpcdFx0c3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2xpc3Q7XG4gMTg5Olx0XHR3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0O1xuIDE5MDpcdFx0aW50IGlvdl9saW1pdDtcbiAxOTE6XHRcdGludCB3ZWlnaHQ7XG4gMTkyOlx0XHRpbnQgYnl0ZV93ZWlnaHQ7XG4gMTkzOlx0XHRzdHJ1Y3QgeGFycmF5IHdvcmtlcl94YTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAxOAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0X3Zzb2NrX2FkZF91c2VkIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgYHZob3N0X3Zzb2NrX2FkZF91c2VkYCBmdW5jdGlvbiBhbmQgaXRzIGludGVyYWN0aW9ucy4gSSBzZWUgdGhhdCBgaGVhZHNgIGlzIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBgdnJpbmdfdXNlZF9lbGVtYCBzdHJ1Y3RzLCBhbmQgYG5oZWFkc2AgaXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGB1MTZgIHZhbHVlcy4gVGhleSYjMzk7cmUgY2xlYXJseSByZWxhdGVkIHRvIHRyYWNraW5nIHVzZWQgdmlydHVhbCByaW5nIGVsZW1lbnRzLCB3aGljaCBpcyBzdGFuZGFyZCB2aG9zdCBiZWhhdmlvci4KCkluc2lkZSBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgLCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBjYXRjaGVzIG15IGV5ZSBpcyB0aGlzOiBgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqdXNlZCA9ICZhbXA7dnEtJmd0O2hlYWRzWyp1c2VkX2NvdW50XTtgLiAgVGhpcyBsaW5lIGlzIHRha2luZyBhbiBhZGRyZXNzIG9mIGEgbWVtYmVyIGluIHRoZSBhcnJheSwgdXNpbmcgdGhlIGAqdXNlZF9jb3VudGAgYXMgYW4gaW5kZXguIFRoaXMgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLCBhbmQgaW5kaWNhdGVzIHRoYXQgd2UmIzM5O3JlIGFkZGluZyBhIG5ldyB1c2VkIGVsZW1lbnQgdG8gdGhlIHJpbmcuICBUaGVuIGB1c2VkLSZndDtpZGAgYW5kIGB1c2VkLSZndDtsZW5gIGFyZSBwb3B1bGF0ZWQgdXNpbmcgYGNwdV90b192aG9zdDMyYCwgd2hpY2ggaGFuZGxlcyBwb3RlbnRpYWwgZW5kaWFubmVzcyBpc3N1ZXMsIHdoaWNoIG1ha2VzIHNlbnNlLiAgQW5kIGB2cS0mZ3Q7bmhlYWRzWyp1c2VkX2NvdW50XSA9IDE7YCBpbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgdXNpbmcgb25lICYjMzQ7aGVhZCYjMzQ7ICh3aGF0ZXZlciB0aGF0IGlzKSB0byBkZWFsIHdpdGggdGhpcyBlbGVtZW50LiBgKCp1c2VkX2NvdW50KSYjNDM7JiM0Mzs7YCBpbmNyZW1lbnRzIHRoZSB0b3RhbC4gSSYjMzk7bSBhc3N1bWluZyBgKnVzZWRfY291bnRgIGlzIGJlaW5nIHVwZGF0ZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgbmV4dCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgdXNlZCByaW5nLgoKTm93IHRoZSBpbnRlcmVzdGluZyBwYXJ0OiBgdmhvc3RfYWRkX3VzZWRfbmAgaXMgY2FsbGVkIHdpdGggdGhlIGB2cS0mZ3Q7aGVhZHNgLCBgdnEtJmd0O25oZWFkc2AsIGFuZCBgKnVzZWRfY291bnRgLiBTaW5jZSBJIGtub3cgdGhlc2UgcGFyYW1ldGVycyYjMzk7IHB1cnBvc2UsIHRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZ2V0IG1vcmUgaW5mb3JtYXRpb246IHdoYXQgdGhlIGV4YWN0IG1lY2hhbmljcyBvZiBhZGRpbmcgYSBuZXcgdXNlZCBlbGVtZW50IGFyZS4gSSBuZWVkIHRvIGRpdmUgaW50byBgdmhvc3RfYWRkX3VzZWRfbmAgZnVuY3Rpb24gaXRzZWxmIHRvIHNlZSB3aGF0IGl0IGlzIHJlYWxseSBkb2luZy4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byBgZHJpdmVycy92aG9zdC92aG9zdC5jYCBhbmQgZGlnIGludG8gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IHZob3N0X2FkZF91c2VkX25cXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5jPTMwNjY9c3RhdGljIGludCB2aG9zdF9hZGRfdXNlZF9uX2luX29yZGVyKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMTE1LSAqIHdhbnQgdG8gbm90aWZ5IHRoZSBndWVzdCwgdXNpbmcgZXZlbnRmZC4gKi9cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMTE2OmludCB2aG9zdF9hZGRfdXNlZF9uKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMTE3LVx0XHQgICAgIHUxNiAqbmhlYWRzLCB1bnNpZ25lZCBjb3VudClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg9MjQ4PWludCB2aG9zdF9hZGRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICosIHVuc2lnbmVkIGludCBoZWFkLCBpbnQgbGVuKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaDoyNDk6aW50IHZob3N0X2FkZF91c2VkX24oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqLCBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yNTAtXHRcdCAgICAgdTE2ICpuaGVhZHMsIHVuc2lnbmVkIGNvdW50KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkzNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGNvZGU6CgoqKkRpdmluZyBpbnRvIGB2aG9zdF9hZGRfdXNlZF9uYCoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYHZob3N0X2FkZF91c2VkX25gIHdpdGhpbiB0aGUgYGRyaXZlcnMvdmhvc3Qvdmhvc3QuY2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgaGFuZGxlIG9uIGl0cyBmdW5jdGlvbiBhbmQgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgdmhvc3QgYXJjaGl0ZWN0dXJlLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcgdGhlICYjMzQ7dXNlZCYjMzQ7IHJpbmcg4oCTIHRoYXQgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgdXNlZCBmb3Igc2lnbmFsaW5nIGNvbXBsZXRpb24gb2YgZ3Vlc3QgcmVxdWVzdHMgZnJvbSB0aGUgaG9zdCBzaWRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCB0byBhZGQgYSBiYXRjaCBvZiBjb21wbGV0ZWQgZGVzY3JpcHRvcnMuIEkgd2lsbCBmb2N1cyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdXNlZCByaW5nJiMzOTtzIGhlYWQgcG9pbnRlciwgdGhlIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24sIGFuZCBhbnkgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdGhhdCBhcmUgaW4gcGxheS4gQW55IGtpbmQgb2YgY2FjaGUgaW52YWxpZGF0aW9uIG9yIG1lbW9yeSBiYXJyaWVyIGNhbGxzIHdpbGwgYmUgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaGVyZS4gSSBhbnRpY2lwYXRlIHRoaXMgd2lsbCBiZSBhIGZhaXJseSBjcml0aWNhbCBzZWN0aW9uIGZvciBwZXJmb3JtYW5jZSwgc28gSSYjMzk7bGwga2VlcCBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuIEFuZCBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSByaW5nIGJ5IHRoZSBndWVzdCBhbmQgaG9zdC4gVGhlIHVzZSBvZiBtZW1vcnkgYmFycmllcnMgb3IgbG9ja3Mgd2lsbCBjZXJ0YWlubHkgY2F0Y2ggbXkgZXllLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzExNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzExNjpcdGludCB2aG9zdF9hZGRfdXNlZF9uKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcbjMxMTc6XHRcdFx0ICAgICB1MTYgKm5oZWFkcywgdW5zaWduZWQgY291bnQpXG4zMTE4Olx0e1xuMzExOTpcdFx0Ym9vbCBpbl9vcmRlciA9IHZob3N0X2hhc19mZWF0dXJlKHZxLCBWSVJUSU9fRl9JTl9PUkRFUik7XG4zMTIwOlx0XHRpbnQgcjtcbjMxMjE6XHRcbjMxMjI6XHRcdGlmICghaW5fb3JkZXIgfHwgIW5oZWFkcylcbjMxMjM6XHRcdFx0ciA9IHZob3N0X2FkZF91c2VkX25fb29vKHZxLCBoZWFkcywgY291bnQpO1xuMzEyNDpcdFx0ZWxzZVxuMzEyNTpcdFx0XHRyID0gdmhvc3RfYWRkX3VzZWRfbl9pbl9vcmRlcih2cSwgaGVhZHMsIG5oZWFkcywgY291bnQpO1xuMzEyNjpcdFxuMzEyNzpcdFx0aWYgKHIgXHUwMDNjIDApXG4zMTI4Olx0XHRcdHJldHVybiByO1xuMzEyOTpcdFxuMzEzMDpcdFx0LyogTWFrZSBzdXJlIGJ1ZmZlciBpcyB3cml0dGVuIGJlZm9yZSB3ZSB1cGRhdGUgaW5kZXguICovXG4zMTMxOlx0XHRzbXBfd21iKCk7XG4zMTMyOlx0XHRpZiAodmhvc3RfcHV0X3VzZWRfaWR4KHZxKSkge1xuMzEzMzpcdFx0XHR2cV9lcnIodnEsIFwmIzM0O0ZhaWxlZCB0byBpbmNyZW1lbnQgdXNlZCBpZHhcJiMzNDspO1xuMzEzNDpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjMxMzU6XHRcdH1cbjMxMzY6XHRcdGlmICh1bmxpa2VseSh2cS1cdTAwM2Vsb2dfdXNlZCkpIHtcbjMxMzc6XHRcdFx0LyogTWFrZSBzdXJlIHVzZWQgaWR4IGlzIHNlZW4gYmVmb3JlIGxvZy4gKi9cbjMxMzg6XHRcdFx0c21wX3dtYigpO1xuMzEzOTpcdFx0XHQvKiBMb2cgdXNlZCBpbmRleCB1cGRhdGUuICovXG4zMTQwOlx0XHRcdGxvZ191c2VkKHZxLCBvZmZzZXRvZihzdHJ1Y3QgdnJpbmdfdXNlZCwgaWR4KSxcbjMxNDE6XHRcdFx0XHQgc2l6ZW9mIHZxLVx1MDAzZXVzZWQtXHUwMDNlaWR4KTtcbjMxNDI6XHRcdFx0aWYgKHZxLVx1MDAzZWxvZ19jdHgpXG4zMTQzOlx0XHRcdFx0ZXZlbnRmZF9zaWduYWwodnEtXHUwMDNlbG9nX2N0eCk7XG4zMTQ0Olx0XHR9XG4zMTQ1Olx0XHRyZXR1cm4gcjtcbjMxNDY6XHR9XG4zMTQ3Olx0RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfYWRkX3VzZWRfbik7XG4zMTQ4Olx0XG4zMTQ5Olx0c3RhdGljIGJvb2wgdmhvc3Rfbm90aWZ5KHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXG4zMTUwOlx0e1xuMzE1MTpcdFx0X191MTYgb2xkLCBuZXc7XG4zMTUyOlx0XHRfX3ZpcnRpbzE2IGV2ZW50O1xuMzE1MzpcdFx0Ym9vbCB2O1xuMzE1NDpcdFx0LyogRmx1c2ggb3V0IHVzZWQgaW5kZXggdXBkYXRlcy4gVGhpcyBpcyBwYWlyZWRcbjMxNTU6XHRcdCAqIHdpdGggdGhlIGJhcnJpZXIgdGhhdCB0aGUgR3Vlc3QgZXhlY3V0ZXMgd2hlbiBlbmFibGluZ1xuMzE1NjpcdFx0ICogaW50ZXJydXB0cy4gKi9cbjMxNTc6XHRcdHNtcF9tYigpO1xuMzE1ODpcdFxuMzE1OTpcdFx0aWYgKHZob3N0X2hhc19mZWF0dXJlKHZxLCBWSVJUSU9fRl9OT1RJRllfT05fRU1QVFkpIFx1MDAyNlx1MDAyNlxuMzE2MDpcdFx0ICAgIHVubGlrZWx5KHZxLVx1MDAzZWF2YWlsX2lkeCA9PSB2cS1cdTAwM2VsYXN0X2F2YWlsX2lkeCkpXG4zMTYxOlx0XHRcdHJldHVybiB0cnVlO1xuMzE2MjpcdFxuMzE2MzpcdFx0aWYgKCF2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1JJTkdfRl9FVkVOVF9JRFgpKSB7XG4zMTY0Olx0XHRcdF9fdmlydGlvMTYgZmxhZ3M7XG4zMTY1Olx0XHRcdGlmICh2aG9zdF9nZXRfYXZhaWxfZmxhZ3ModnEsIFx1MDAyNmZsYWdzKSkge1xuMzE2NjpcdFx0XHRcdHZxX2Vycih2cSwgXCYjMzQ7RmFpbGVkIHRvIGdldCBmbGFnc1wmIzM0Oyk7XG4zMTY3Olx0XHRcdFx0cmV0dXJuIHRydWU7XG4zMTY4Olx0XHRcdH1cbjMxNjk6XHRcdFx0cmV0dXJuICEoZmxhZ3MgXHUwMDI2IGNwdV90b192aG9zdDE2KHZxLCBWUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVCkpO1xuMzE3MDpcdFx0fVxuMzE3MTpcdFx0b2xkID0gdnEtXHUwMDNlc2lnbmFsbGVkX3VzZWQ7XG4zMTcyOlx0XHR2ID0gdnEtXHUwMDNlc2lnbmFsbGVkX3VzZWRfdmFsaWQ7XG4zMTczOlx0XHRuZXcgPSB2cS1cdTAwM2VzaWduYWxsZWRfdXNlZCA9IHZxLVx1MDAzZWxhc3RfdXNlZF9pZHg7XG4zMTc0Olx0XHR2cS1cdTAwM2VzaWduYWxsZWRfdXNlZF92YWxpZCA9IHRydWU7XG4zMTc1Olx0XG4zMTc2Olx0XHRpZiAodW5saWtlbHkoIXYpKVxuMzE3NzpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjMxNzg6XHRcbjMxNzk6XHRcdGlmICh2aG9zdF9nZXRfdXNlZF9ldmVudCh2cSwgXHUwMDI2ZXZlbnQpKSB7XG4zMTgwOlx0XHRcdHZxX2Vycih2cSwgXCYjMzQ7RmFpbGVkIHRvIGdldCB1c2VkIGV2ZW50IGlkeFwmIzM0Oyk7XG4zMTgxOlx0XHRcdHJldHVybiB0cnVlO1xuMzE4MjpcdFx0fVxuMzE4MzpcdFx0cmV0dXJuIHZyaW5nX25lZWRfZXZlbnQodmhvc3QxNl90b19jcHUodnEsIGV2ZW50KSwgbmV3LCBvbGQpO1xuMzE4NDpcdH1cbjMxODU6XHRcbjMxODY6XHQvKiBUaGlzIGFjdHVhbGx5IHNpZ25hbHMgdGhlIGd1ZXN0LCB1c2luZyBldmVudGZkLiAqL1xuMzE4NzpcdHZvaWQgdmhvc3Rfc2lnbmFsKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXG4zMTg4Olx0e1xuMzE4OTpcdFx0LyogU2lnbmFsIHRoZSBHdWVzdCB0ZWxsIHRoZW0gd2UgdXNlZCBzb21ldGhpbmcgdXAuICovXG4zMTkwOlx0XHRpZiAodnEtXHUwMDNlY2FsbF9jdHguY3R4IFx1MDAyNlx1MDAyNiB2aG9zdF9ub3RpZnkoZGV2LCB2cSkpXG4zMTkxOlx0XHRcdGV2ZW50ZmRfc2lnbmFsKHZxLVx1MDAzZWNhbGxfY3R4LmN0eCk7XG4zMTkyOlx0fVxuMzE5MzpcdEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X3NpZ25hbCk7XG4zMTk0Olx0XG4zMTk1Olx0LyogQW5kIGhlcmUmIzM5O3MgdGhlIGNvbWJvIG1lYWwgZGVhbC4gIFN1cGVyc2l6ZSBtZSEgKi9cbjMxOTY6XHR2b2lkIHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWwoc3RydWN0IHZob3N0X2RldiAqZGV2LFxuMzE5NzpcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbjMxOTg6XHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGhlYWQsIGludCBsZW4pXG4zMTk5Olx0e1xuMzIwMDpcdFx0dmhvc3RfYWRkX3VzZWQodnEsIGhlYWQsIGxlbik7XG4zMjAxOlx0XHR2aG9zdF9zaWduYWwoZGV2LCB2cSk7XG4zMjAyOlx0fVxuMzIwMzpcdEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWwpO1xuMzIwNDpcdFxuMzIwNTpcdC8qIG11bHRpLWJ1ZmZlciB2ZXJzaW9uIG9mIHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWwgKi9cbjMyMDY6XHR2b2lkIHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWxfbihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG4zMjA3Olx0XHRcdFx0XHQgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4zMjA4Olx0XHRcdFx0XHQgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXG4zMjA5Olx0XHRcdFx0XHQgdTE2ICpuaGVhZHMsXG4zMjEwOlx0XHRcdFx0XHQgdW5zaWduZWQgY291bnQpXG4zMjExOlx0e1xuMzIxMjpcdFx0dmhvc3RfYWRkX3VzZWRfbih2cSwgaGVhZHMsIG5oZWFkcywgY291bnQpO1xuMzIxMzpcdFx0dmhvc3Rfc2lnbmFsKGRldiwgdnEpO1xuMzIxNDpcdH1cbjMyMTU6XHRFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9hZGRfdXNlZF9hbmRfc2lnbmFsX24pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTA4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgR3Vlc3QgTWVtb3J5IFdyaXRlcyBpbiB2aG9zdCoqCgpBbHJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHNvbWV0aGluZy4gTXkgaW50ZXJuYWwgYWxhcm1zIGFyZSBnb2luZyBvZmYg4oCTIGJvdGggYHZob3N0X2FkZF91c2VkX25fb29vYCBhbmQgYHZob3N0X2FkZF91c2VkX25faW5fb3JkZXJgIGFyZSAqd3JpdGluZyogdG8gZ3Vlc3QgbWVtb3J5LiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgZm9yIHNlY3VyaXR5IGFuZCBjb3JyZWN0bmVzcy4gQW55IHRpbWUgeW91JiMzOTtyZSB0b3VjaGluZyBndWVzdCBtZW1vcnkgZGlyZWN0bHkgZnJvbSB0aGUgaG9zdCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCB5b3UgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogY2VydGFpbiB5b3Uga25vdyB3aGF0IHlvdSYjMzk7cmUgZG9pbmcuIFRoZXJlIGFyZSBzbyBtYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgdGhlcmUuCgpTbywgbGV0JiMzOTtzIGRyaWxsIGRvd24uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBgdmhvc3RfYWRkX3VzZWRfbl9vb29gLiBUaGF0ICYjMzQ7b29vJiMzNDsgc3VmZml4IGlzIHBhcnRpY3VsYXJseSBpbnRyaWd1aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0JiMzOTtzIHRyeWluZyB0byBhY2NvbXBsaXNoIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmhvdyogaXQmIzM5O3MgZG9pbmcgaXQsIGF0IGEgbG93IGxldmVsLiBBcmUgd2UgZGVhbGluZyB3aXRoIHBvdGVudGlhbCBvdXQtb2Ytb3JkZXIgY29tcGxldGlvbiBpc3N1ZXM/IEhvdyBkb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGggb3RoZXIgb3BlcmF0aW9ucz8gV2hhdCB2YWxpZGF0aW9uIHN0ZXBzIGFyZSBpbiBwbGFjZSB0byBlbnN1cmUgd2UmIzM5O3JlIG5vdCBjb3JydXB0aW5nIHRoZSBndWVzdCYjMzk7cyBtZW1vcnkgc3BhY2U/IEkgbmVlZCB0byBhbmFseXplIHRoZSBjb2RlIHBhdGggKnZlcnkqIGNhcmVmdWxseSBoZXJlLCBtYWtpbmcgc3VyZSBhbGwgbWVtb3J5IGFjY2VzcyBzaXplcywgb2Zmc2V0cywgYW5kIGJvdW5kYXJ5IGNoZWNrcyBhcmUgc29saWQuIEkmIzM5O20gZ29pbmcgdG8gcGF5IGV4dHJhIGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGF0b21pY2l0eSBvciB0aGUgdXNlIG9mIGxvY2tzIG9yIGJhcnJpZXJzLCB0byB2ZXJpZnkgZXZlcnl0aGluZyBpcyBwcm90ZWN0ZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgaXQmIzM5O3MgZG9pbmcgcHJlY2lzZWx5IHdoYXQgaXQgKmNsYWltcyogdG8gYmUgZG9pbmcsIGFuZCB0aGF0IGl0JiMzOTtzIGRvaW5nIGl0IHNhZmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zob3N0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDM2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwMzY6XHRcdH1cbjMwMzc6XHRcdG9sZCA9IHZxLVx1MDAzZWxhc3RfdXNlZF9pZHg7XG4zMDM4Olx0XHRuZXcgPSAodnEtXHUwMDNlbGFzdF91c2VkX2lkeCAmIzQzOz0gY291bnQpO1xuMzAzOTpcdFx0LyogSWYgdGhlIGRyaXZlciBuZXZlciBib3RoZXJzIHRvIHNpZ25hbCBpbiBhIHZlcnkgbG9uZyB3aGlsZSxcbjMwNDA6XHRcdCAqIHVzZWQgaW5kZXggbWlnaHQgd3JhcCBhcm91bmQuIElmIHRoYXQgaGFwcGVucywgaW52YWxpZGF0ZVxuMzA0MTpcdFx0ICogc2lnbmFsbGVkX3VzZWQgaW5kZXggd2Ugc3RvcmVkLiBUT0RPOiBtYWtlIHN1cmUgZHJpdmVyXG4zMDQyOlx0XHQgKiBzaWduYWxzIGF0IGxlYXN0IG9uY2UgaW4gMl4xNiBhbmQgcmVtb3ZlIHRoaXMuICovXG4zMDQzOlx0XHRpZiAodW5saWtlbHkoKHUxNikobmV3IC0gdnEtXHUwMDNlc2lnbmFsbGVkX3VzZWQpIFx1MDAzYyAodTE2KShuZXcgLSBvbGQpKSlcbjMwNDQ6XHRcdFx0dnEtXHUwMDNlc2lnbmFsbGVkX3VzZWRfdmFsaWQgPSBmYWxzZTtcbjMwNDU6XHRcdHJldHVybiAwO1xuMzA0NjpcdH1cbjMwNDc6XHRcbjMwNDg6XHRzdGF0aWMgaW50IHZob3N0X2FkZF91c2VkX25fb29vKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuMzA0OTpcdFx0XHRcdFx0c3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXG4zMDUwOlx0XHRcdFx0XHR1bnNpZ25lZCBjb3VudClcbjMwNTE6XHR7XG4zMDUyOlx0XHRpbnQgc3RhcnQsIG4sIHI7XG4zMDUzOlx0XG4zMDU0Olx0XHRzdGFydCA9IHZxLVx1MDAzZWxhc3RfdXNlZF9pZHggXHUwMDI2ICh2cS1cdTAwM2VudW0gLSAxKTtcbjMwNTU6XHRcdG4gPSB2cS1cdTAwM2VudW0gLSBzdGFydDtcbjMwNTY6XHRcdGlmIChuIFx1MDAzYyBjb3VudCkge1xuMzA1NzpcdFx0XHRyID0gX192aG9zdF9hZGRfdXNlZF9uKHZxLCBoZWFkcywgbik7XG4zMDU4Olx0XHRcdGlmIChyIFx1MDAzYyAwKVxuMzA1OTpcdFx0XHRcdHJldHVybiByO1xuMzA2MDpcdFx0XHRoZWFkcyAmIzQzOz0gbjtcbjMwNjE6XHRcdFx0Y291bnQgLT0gbjtcbjMwNjI6XHRcdH1cbjMwNjM6XHRcdHJldHVybiBfX3Zob3N0X2FkZF91c2VkX24odnEsIGhlYWRzLCBjb3VudCk7XG4zMDY0Olx0fVxuMzA2NTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODIyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6CgoqKkludGVybmFsIENvbnNpZGVyYXRpb25zIG9uIGBfX3Zob3N0X2FkZF91c2VkX25gKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBfX3Zob3N0X2FkZF91c2VkX25gLiBUaGlzIGlzIGNydWNpYWwsIGFzIEkgdW5kZXJzdGFuZCBpdCwgZm9yIGVmZmljaWVudGx5IGhhbmRsaW5nIHRoZSBhY2N1bXVsYXRpb24gb2YgdXNlZCBidWZmZXJzIHdpdGhpbiBhIHZpcnR1YWwgaG9zdCBjb250ZXh0LiBJdCYjMzk7cyB0aGUgY3JpdGljYWwgYnVpbGRpbmcgYmxvY2suIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gY2FsbDogSSBuZWVkIHRvIHF1aWNrbHkgYW5kIHJlbGlhYmx5IGFkZCBuZXcgZW50cmllcyB0byB0aGUgdmhvc3QmIzM5O3MgJiMzOTt1c2VkJiMzOTsgcmluZywgd2hpY2gsIGJ5IGRlZmluaXRpb24sIGltcGxpZXMgbWFuYWdpbmcgYSBwb3RlbnRpYWxseSBjb25jdXJyZW50IGRhdGEgc3RydWN0dXJlLiBTbywgSSBoYXZlIHRvIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCB0aGUgbG9ja2luZyBzZW1hbnRpY3MuIEFyZSB3ZSBkZWFsaW5nIHdpdGggc3BpbmxvY2tzLCBtdXRleGVzLCBvciBzb21lIGtpbmQgb2YgUkNVPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIHRoZXJlJiMzOTtzIGNvbnRlbnRpb24/IEhvdyBhcmUgd2UgZW5zdXJpbmcgYXRvbWljaXR5IG9mIHRoZSBidWZmZXIgdXBkYXRlcywgYW5kIHdoYXQmIzM5O3MgdGhlIHR5cGljYWwgQ1BVIGNvc3QgdG8gZG8gdGhhdD8gSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVjayB0aGlzIHdpbGwgY3JlYXRlLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IEkvTyBsb2FkLiBJZiB0aGVyZSYjMzk7cyBoaWdoIGxvY2sgY29udGVudGlvbiwgaXQgd2lsbCBsaWtlbHkgYmUgcmVmbGVjdGVkIGluIHBlcmZvcm1hbmNlIHRlc3RzLCBhbmQgSeKAmWxsIGhhdmUgdG8gZXhhbWluZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEkgYW0gdHJ5aW5nIHRvIGRldGVybWluZSB0aGUgd29yc3QtY2FzZSBzY2VuYXJpby4KCk1vcmVvdmVyLCBJIGhhdmUgdG8gZW5zdXJlIGNvcnJlY3QgaGFuZGxpbmcgb2YgdGhlIHdyYXAtYXJvdW5kIGNvbmRpdGlvbnMuIFdlIGhhdmUgdG8gY29uc2lkZXIgaG93IHRvIGhhbmRsZSB0aGUgcmluZyBidWZmZXIsIHdoYXQgaXMgdGhpcyByaW5nIGJ1ZmZlciBzdHJ1Y3R1cmUsIGlzIGl0IGFsaWduZWQsIGRvZXMgaXQgY29udGFpbiBhbnkga2luZCBvZiBwYWRkaW5nLCBldGMuIEFyZSB0aGUgYnVmZmVyIGluZGV4ZXMgY29ycmVjdGx5IG1hbmFnZWQ/IFdoYXQga2luZCBvZiBjaGVja3MgYXJlIGluIHBsYWNlIHRvIHByZXZlbnQgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgdW5kZXJmbG93cz8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHJvYnVzdC4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UgYXJlIGNvcnJlY3RseSBoYW5kbGluZyB0aGUgKm4qIHBhcmFtZXRlciBpbiB0aGlzIGZ1bmN0aW9uOyB0aGF0IG51bWJlciB0ZWxscyB1cyBob3cgbWFueSBlbGVtZW50cyBuZWVkIHRvIGJlIGFkZGVkIHRvIHRoZSB1c2VkIHJpbmcuIFdlIG11c3QgbWFrZSBzdXJlIHRoYXQgaXQmIzM5O3MgdmFsaWRhdGVkLCB0aGF0IHdlIGRvbiYjMzk7dCBhY2NpZGVudGFsbHkgYWRkIGludmFsaWQgZGF0YSB0aGF0IGNhbiBjb21wcm9taXNlIHRoZSBob3N0JiMzOTtzIGludGVncml0eS4gQWxzbywgaG93IGFyZSB3ZSBoYW5kbGluZyB0aGUgYXNzb2NpYXRlZCBkZXNjcmlwdG9ycyB0aGF0IGFyZSBiZWluZyBhZGRlZD8gQXJlIHRoZXkgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgb3IgYXJlIHRoZXJlIGRhbmdsaW5nIHBvaW50ZXJzPyBBbHNvLCBob3cgYXJlIHdlIG1hbmFnaW5nIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGVzZSBkZXNjcmlwdG9ycz8gVGhpcyBpcyBhbHNvIGEgY3JpdGljYWwgY29uc2lkZXJhdGlvbi4gRmluYWxseSwgaG93IGFib3V0IGVycm9yIGhhbmRsaW5nPyBJcyB0aGVyZSBwcm9wZXIgZXJyb3IgY2hlY2tpbmcgaWYgdGhlcmUgYXJlIGluc3VmZmljaWVudCByZXNvdXJjZXMgb3IgdW5leHBlY3RlZCBjb25kaXRpb25zPyBUaGVzZSBhcmUgYWxsIHRoZSBraW5kcyBvZiBxdWVzdGlvbnMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgZXZlbiBhdCBhIGhpZ2ggbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNgp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMDAwOlx0RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGlzY2FyZF92cV9kZXNjKTtcbjMwMDE6XHRcbjMwMDI6XHQvKiBBZnRlciB3ZSYjMzk7dmUgdXNlZCBvbmUgb2YgdGhlaXIgYnVmZmVycywgd2UgdGVsbCB0aGVtIGFib3V0IGl0LiAgV2UmIzM5O2xsIHRoZW5cbjMwMDM6XHQgKiB3YW50IHRvIG5vdGlmeSB0aGUgZ3Vlc3QsIHVzaW5nIGV2ZW50ZmQuICovXG4zMDA0Olx0aW50IHZob3N0X2FkZF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgaGVhZCwgaW50IGxlbilcbjMwMDU6XHR7XG4zMDA2Olx0XHRzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtIGhlYWRzID0ge1xuMzAwNzpcdFx0XHRjcHVfdG9fdmhvc3QzMih2cSwgaGVhZCksXG4zMDA4Olx0XHRcdGNwdV90b192aG9zdDMyKHZxLCBsZW4pXG4zMDA5Olx0XHR9O1xuMzAxMDpcdFx0dTE2IG5oZWFkcyA9IDE7XG4zMDExOlx0XG4zMDEyOlx0XHRyZXR1cm4gdmhvc3RfYWRkX3VzZWRfbih2cSwgXHUwMDI2aGVhZHMsIFx1MDAyNm5oZWFkcywgMSk7XG4zMDEzOlx0fVxuMzAxNDpcdEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2FkZF91c2VkKTtcbjMwMTU6XHRcbjMwMTY6XHRzdGF0aWMgaW50IF9fdmhvc3RfYWRkX3VzZWRfbihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbjMwMTc6XHRcdFx0XHQgICAgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXG4zMDE4Olx0XHRcdFx0ICAgIHVuc2lnbmVkIGNvdW50KVxuMzAxOTpcdHtcbjMwMjA6XHRcdHZyaW5nX3VzZWRfZWxlbV90IF9fdXNlciAqdXNlZDtcbjMwMjE6XHRcdHUxNiBvbGQsIG5ldztcbjMwMjI6XHRcdGludCBzdGFydDtcbjMwMjM6XHRcbjMwMjQ6XHRcdHN0YXJ0ID0gdnEtXHUwMDNlbGFzdF91c2VkX2lkeCBcdTAwMjYgKHZxLVx1MDAzZW51bSAtIDEpO1xuMzAyNTpcdFx0dXNlZCA9IHZxLVx1MDAzZXVzZWQtXHUwMDNlcmluZyAmIzQzOyBzdGFydDtcbjMwMjY6XHRcdGlmICh2aG9zdF9wdXRfdXNlZCh2cSwgaGVhZHMsIHN0YXJ0LCBjb3VudCkpIHtcbjMwMjc6XHRcdFx0dnFfZXJyKHZxLCBcJiMzNDtGYWlsZWQgdG8gd3JpdGUgdXNlZFwmIzM0Oyk7XG4zMDI4Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuMzAyOTpcdFx0fVxuMzAzMDpcdFx0aWYgKHVubGlrZWx5KHZxLVx1MDAzZWxvZ191c2VkKSkge1xuMzAzMTpcdFx0XHQvKiBNYWtlIHN1cmUgZGF0YSBpcyBzZWVuIGJlZm9yZSBsb2cuICovXG4zMDMyOlx0XHRcdHNtcF93bWIoKTtcbjMwMzM6XHRcdFx0LyogTG9nIHVzZWQgcmluZyBlbnRyeSB3cml0ZS4gKi9cbjMwMzQ6XHRcdFx0bG9nX3VzZWQodnEsICgodm9pZCBfX3VzZXIgKil1c2VkIC0gKHZvaWQgX191c2VyICopdnEtXHUwMDNldXNlZCksXG4zMDM1Olx0XHRcdFx0IGNvdW50ICogc2l6ZW9mICp1c2VkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NzcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2aG9zdF9wdXRfdXNlZCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHZob3N0X3B1dF91c2VkYCBhbmQgaG93IGl0IGhhbmRsZXMgY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2Ug4oCTIHNwZWNpZmljYWxseSwgdG8gdGhlIGd1ZXN0JiMzOTtzIG1lbW9yeS4gVGhlIGNvcmUgdGhpbmcgaGVyZSBpcyBob3cgYGhlYWRzYCBnZXRzIHBvcHVsYXRlZC4gSXQgc2VlbXMgbGlrZSBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIHBvcHVsYXRlcyBgaGVhZHNgIHdpdGggdGhlIGB1c2VkLSZndDtpZGAgYW5kIGB1c2VkLSZndDtsZW5gIHZhbHVlcywgd2hpY2ggYXJlIGtleSBwaWVjZXMgb2YgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzZWQgYnVmZmVyLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCB0aGUgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIGRvZXNuJiMzOTt0IGhhdmUgYW55IHBhZGRpbmcsIHdoaWNoIGlzIGEgZ3JlYXQgc2FmZWd1YXJkLiBUaGlzIHRlbGxzIG1lIHdlICpzaG91bGRuJiMzOTt0KiBoYXZlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgaXNzdWUgaGVyZSwgYmVjYXVzZSB3ZSBhcmUgb25seSB0cmFuc21pdHRpbmcgZXhwbGljaXRseSBpbml0aWFsaXplZCBkYXRhIHRvIHRoZSB1c2VyIHNwYWNlLiBUaGF0JiMzOTtzIGEgcmVsaWVmLgoKVGhlIG90aGVyIGJpdCBvZiBjb2RlIHBvcHVsYXRlcyB0aGUgYHZxLSZndDtuaGVhZHNgIGFycmF5IHdpdGggYDFgIGZvciBlYWNoIGVsZW1lbnQuIEhvd2V2ZXIsIHRoaXMgaXMganVzdCB0byBjb21wdXRlIGB2cS0mZ3Q7bGFzdF91c2VkX2lkeGAgaW4gYHZob3N0X2FkZF91c2VkX25faW5fb3JkZXJgIGFuZCBpcyBub3QgaW52b2x2ZWQgaW4gYW55IGRhdGEgYmVpbmcgY29waWVkIHRvIHRoZSB1c2VyIHNwYWNlLiBTbywgdGhlIG9ubHkgZGF0YSBpcyB0aGUgdXNlZCBpbmZvcm1hdGlvbiwgd2hpY2ggaXMgcG9wdWxhdGVkLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBieSBnb2luZyB0aHJvdWdoIGB2aG9zdF9wdXRfdXNlZGAgaW4gZGV0YWlsIHRvIGVuc3VyZSB0aGF0IG5vdGhpbmcgaXMgc2xpcHBpbmcgdGhyb3VnaCB0aGUgY3JhY2tzLCBidXQsIGF0IGxlYXN0IGF0IGZpcnN0IGdsYW5jZSwgdGhpbmdzIGxvb2sgc2FmZSBhbmQgc291bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB2aG9zdF9wdXRfdXNlZFxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MTQ1OT1zdGF0aWMgaW5saW5lIGludCB2aG9zdF9wdXRfYXZhaWxfZXZlbnQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTE0NjQtXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MTQ2NTpzdGF0aWMgaW5saW5lIGludCB2aG9zdF9wdXRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xNDY2LVx0XHRcdFx0IHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWQsIGludCBpZHgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTczCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgdmhvc3RfcHV0X3VzZWRgKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBjb2RlIGZvciBgdmhvc3RfcHV0X3VzZWRgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHZob3N0LW5ldCBhcmNoaXRlY3R1cmUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdmlydHF1ZXVlLCB0aGUgc2hhcmVkIG1lbW9yeSByaW5nIGJ1ZmZlciwgYW5kIHRoZSBndWVzdCYjMzk7cyB2aWV3IG9mIGRlc2NyaXB0b3JzLiBJJiMzOTttIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIGRldGFpbHMgcmVnYXJkaW5nOgoKKiAgICoqU3luY2hyb25pemF0aW9uOioqIFdoYXQgbG9ja2luZyBtZWNoYW5pc21zIGFyZSBlbXBsb3llZCB0byBlbnN1cmUgc2FmZSBhY2Nlc3MgdG8gdGhlIHVzZWQgcmluZz8gSXMgdGhlcmUgYW55IGNvbnRlbnRpb24gdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIHRoZSBob3N0IGFuZCBndWVzdCwgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkIGluIHRoaXMgZnVuY3Rpb24/IEkmIzM5O2xsIGJlIGZvY3VzZWQgb24gbWVtb3J5IGJhcnJpZXJzLgoqICAgKipEZXNjcmlwdG9yIFByb2Nlc3Npbmc6KiogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBtYXAgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBgdmhvc3RfdXNlZGAgZW50cnkgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmlydHF1ZXVlIGRlc2NyaXB0b3JzPyBJcyBpdCB0cmF2ZXJzaW5nIGEgbGlua2VkIGxpc3Qgb3IgcmVseWluZyBvbiBkaXJlY3QgaW5kZXhpbmc/IFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UsIGVzcGVjaWFsbHkgd2l0aCBsYXJnZSBudW1iZXJzIG9mIGRlc2NyaXB0b3JzLiBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbnMgZG9uZSBoZXJlPwoqICAgKipOb3RpZmljYXRpb246KiogRG9lcyB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IHRyaWdnZXIgYSBndWVzdCBub3RpZmljYXRpb24sIG9yIGRvZXMgaXQgZGVmZXIgdGhhdCBkZWNpc2lvbiB0byBhbm90aGVyIHBhcnQgb2YgdGhlIHN5c3RlbT8gSWYgaXQgZG9lcyB0cmlnZ2VyIHRoZSBub3RpZmljYXRpb24sIGhvdyBkb2VzIGl0IGRvIHNvPyBXaGF0JiMzOTtzIHRoZSBpbXBhY3Qgb24gbGF0ZW5jeT8KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogQXJlIHRoZXJlIGFueSBjaGVja3MgZm9yIG1hbGZvcm1lZCB1c2VkIGVudHJpZXMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3M/IFdoYXQgaGFwcGVucyBpZiBhbiBlcnJvciBpcyBkZXRlY3RlZD8gSG93IGFyZSBlcnJvcnMgaGFuZGxlZD8gRG9lcyBpdCByZXR1cm4gYW4gZXJyb3IgY29kZSBvciB0cmlnZ2VyIGEgbW9yZSBzZXZlcmUgc3lzdGVtIGZhaWx1cmU/CiogICAqKkNvbnRleHQ6KiogV2hhdCYjMzk7cyB0aGUgdHlwaWNhbCBjYWxsaW5nIGNvbnRleHQ/IElzIGl0IGNhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgdGhlIGtlcm5lbCB0aHJlYWQsIG9yIGJvdGg/IFRoaXMgd2lsbCBpbmZsdWVuY2UgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuY3Rpb24mIzM5O3MgdGltaW5nIGFuZCByZXNvdXJjZSBjb25zdHJhaW50cy4KKiAgICoqSW50ZWdyYXRpb246KiogSG93IGlzIHRoaXMgZnVuY3Rpb24gcmVsYXRlZCB0byBvdGhlciB2aG9zdC1uZXQgZnVuY3Rpb25zLCBlLmcuIGB2aG9zdF9nZXRfZGVzY2AsIGB2aG9zdF9hZGRfdXNlZGAsIGFuZCBgdmhvc3RfcG9sbGAuIEl0IHdpbGwgYmUgaGVscGZ1bCB0byB1bmRlcnN0YW5kIHRoZSBjaGFpbiBvZiBldmVudHMgdGhhdCBsZWFkcyB0byB0aGlzIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZC4KClVsdGltYXRlbHksIEkgd2FudCB0byBjb25maXJtIG15IG1lbnRhbCBtb2RlbCBvZiB0aGUgZGF0YSBmbG93IGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBpbXByb3ZlbWVudCBpbiB0aGUgdmhvc3QtbmV0IGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGdldCB0byB3b3JrIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ2NTpcdHN0YXRpYyBpbmxpbmUgaW50IHZob3N0X3B1dF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuMTQ2NjpcdFx0XHRcdFx0IHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWQsIGludCBpZHgsXG4xNDY3Olx0XHRcdFx0XHQgaW50IGNvdW50KVxuMTQ2ODpcdHtcbjE0Njk6XHRcdHJldHVybiB2aG9zdF9jb3B5X3RvX3VzZXIodnEsIHZxLVx1MDAzZXVzZWQtXHUwMDNlcmluZyAmIzQzOyBpZHgsIGhlYWQsXG4xNDcwOlx0XHRcdFx0XHQgIGNvdW50ICogc2l6ZW9mKCpoZWFkKSk7XG4xNDcxOlx0fVxuMTQ3MjpcdFxuMTQ3MzpcdHN0YXRpYyBpbmxpbmUgaW50IHZob3N0X3B1dF91c2VkX2ZsYWdzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxuMTQ3NDpcdFxuMTQ3NTpcdHtcbjE0NzY6XHRcdHJldHVybiB2aG9zdF9wdXRfdXNlcih2cSwgY3B1X3RvX3Zob3N0MTYodnEsIHZxLVx1MDAzZXVzZWRfZmxhZ3MpLFxuMTQ3NzpcdFx0XHRcdCAgICAgIFx1MDAyNnZxLVx1MDAzZXVzZWQtXHUwMDNlZmxhZ3MpO1xuMTQ3ODpcdH1cbjE0Nzk6XHRcbjE0ODA6XHRzdGF0aWMgaW5saW5lIGludCB2aG9zdF9wdXRfdXNlZF9pZHgoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXG4xNDgxOlx0XG4xNDgyOlx0e1xuMTQ4MzpcdFx0cmV0dXJuIHZob3N0X3B1dF91c2VyKHZxLCBjcHVfdG9fdmhvc3QxNih2cSwgdnEtXHUwMDNlbGFzdF91c2VkX2lkeCksXG4xNDg0Olx0XHRcdFx0ICAgICAgXHUwMDI2dnEtXHUwMDNldXNlZC1cdTAwM2VpZHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ0MwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDUzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2sgaW4gVGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLiBJIHNlZSBgdmhvc3RfY29weV90b191c2VyYCBjb3B5aW5nIGBjb3VudCAqIHNpemVvZigqaGVhZClgIGJ5dGVzIGZyb20gYGhlYWRgIHRvIHRoZSB1c2VkIHJpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBsZWFkIHRvIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrYWdlLiBTaW5jZSBgaGVhZGAgcG9pbnRzIHRvIGB2cS0mZ3Q7aGVhZHNgLCBhbmQgYHZxLSZndDtoZWFkc2AgaXMgYW4gYXJyYXkgb2YgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gLCBJIG5lZWQgdG8gY29uZmlybSBlYWNoIGVsZW1lbnQgb2YgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB0aGUgY29weS4gRnJvbSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlIGluIGB2aG9zdF92c29ja19hZGRfdXNlZGAsIGJvdGggYGlkYCBhbmQgYGxlbmAgd2l0aGluIGVhY2ggZWxlbWVudCAqYXJlKiBpbml0aWFsaXplZC4gR29vZCwgbm8gb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHRoZXJlLgoKSSByZW1lbWJlciB0aGlzIHN0cnVjdDoKCmBgYGMKc3RydWN0IHZyaW5nX3VzZWRfZWxlbSB7CgkvKiBJbmRleCBvZiBzdGFydCBvZiB1c2VkIGRlc2NyaXB0b3IgY2hhaW4uICovCglfX3ZpcnRpbzMyIGlkOwoJLyogVG90YWwgbGVuZ3RoIG9mIHRoZSBkZXNjcmlwdG9yIGNoYWluIHdoaWNoIHdhcyB1c2VkICh3cml0dGVuIHRvKSAqLwoJX192aXJ0aW8zMiBsZW47Cn07CmBgYAoKWWVhaCwgMzItYml0IGludGVnZXJzLCA0IGJ5dGVzIGVhY2gsIG5vIHBhZGRpbmcuIFRoZSBzaXplIGlzIGRlZmluaXRlbHkgOCBieXRlcy4gTm8gaXNzdWUgdGhlcmUuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgbmV3IGNoYW5nZXMuIFRoZSBwYXRjaCBhZGRzIGB1c2VkX2NvdW50YCBhbmQgYHVzZWRfbGltaXRgLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgY2FyZWZ1bGx5IGF0IGhvdyB0aGVzZSB2YXJpYWJsZXMgYXJlIHVzZWQuIGB1c2VkX2xpbWl0YCBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIGB2cS0mZ3Q7bnVtYCwgYHZxLSZndDtkZXYtJmd0O2lvdl9saW1pdGAsIGFuZCBgdnEtJmd0O2Rldi0mZ3Q7d2VpZ2h0YC4gSWYgYHVzZWRfbGltaXRgIGlzIHplcm8sIHdlIGJhaWwgb3V0IGVhcmx5LCB3aGljaCBzZWVtcyByZWFzb25hYmxlLiBUaGUgY29kZSB0aGVuIGxvb3BzLCBhZGRpbmcgdXNlZCBlbGVtZW50cy4gVGhlIGtleSBpcyBpbiBgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgJmFtcDt1c2VkX2NvdW50KWAgY2FsbGVkIHdoZW4gYHVzZWRfY291bnQgPT0gdXNlZF9saW1pdGAsIHRoaXMgZmx1c2hlcyB1c2VkIGVsZW1lbnRzIGFuZCByZXNldHMgYHVzZWRfY291bnRgLiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBiYXRjaGluZyBvcHRpbWl6YXRpb24uIEl0IGZsdXNoZXMgYW55IHJlbWFpbmluZyB1c2VkIGVsZW1lbnRzIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AgYXMgd2VsbC4gSSBkb24mIzM5O3Qgc2VlIGFueSBpbW1lZGlhdGUgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGlzIGJhdGNoaW5nIGxvZ2ljLgoKTGV0IG1lIHJldmlldyB0aGUgcGF0Y2ggc2NvcGUuIFRoZSBjb2RlIG9ubHkgbW9kaWZpZXMgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAgYW5kIGludHJvZHVjZXMgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgIGFuZCBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZW4mIzM5O3QgY2FsbGluZyBhbnl0aGluZyBlbHNlLiBPa2F5LCBub3RoaW5nIGVsc2UgaXMgdG91Y2hlZC4gU28sIHRoaXMgaXMgKnB1cmVseSogYW4gb3B0aW1pemF0aW9uIHRvIGJhdGNoIHRoZSB1cGRhdGVzLCB3aGljaCBzZWVtcyByZWFzb25hYmxlLiBObyBuZXcgZnVuY3Rpb25zIGFyZSBtb2RpZmllZCwgc28gdGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgd291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZC4KCkkgc2hvdWxkIHZlcmlmeSBob3cgYHZxLSZndDtoZWFkc2AgaXMgYWxsb2NhdGVkIHRvIGJlIDEwMCUgc3VyZS4gVGhhdCYjMzk7cyBhbGxvY2F0ZWQgaW4gYHZob3N0X2Rldl9hbGxvY19pb3ZlY3NgIG9yIGEgc2ltaWxhciBmdW5jdGlvbiwgc28gaXQgc2hvdWxkIGJlIHByb3Blcmx5IGluaXRpYWxpemVkLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgY29kZSwgYW5kIHRoZSBjb250ZXh0IG9mIHRoZSBwYXRjaCwgSSBkb24mIzM5O3Qgc2VlIGFueSByZWFzb24gZm9yIEtNU0FOIGhlcmUuIEl0IHNob3VsZCBiZSBzYWZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoZWFkcyA9IGttYWxsb2NfYXJyYXkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5jPTUxMD1zdGF0aWMgbG9uZyB2aG9zdF9kZXZfYWxsb2NfaW92ZWNzKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtNTE5LVx0XHR2cS1cdTAwM2VoZWFkcyA9IGttYWxsb2Nfb2JqcygqdnEtXHUwMDNlaGVhZHMsIGRldi1cdTAwM2Vpb3ZfbGltaXQpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jOjUyMDpcdFx0dnEtXHUwMDNlbmhlYWRzID0ga21hbGxvY19hcnJheShkZXYtXHUwMDNlaW92X2xpbWl0LCBzaXplb2YoKnZxLVx1MDAzZW5oZWFkcyksXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtNTIxLVx0XHRcdFx0XHQgICBHRlBfS0VSTkVMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3OTAKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBNZW1vcnkgU2FmZXR5IElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGZpcnN0IGxpbmUsIGB2cS0mZ3Q7aGVhZHMgPSBrbWFsbG9jX29ianMoKnZxLSZndDtoZWFkcywgZGV2LSZndDtpb3ZfbGltaXQpO2AgaXMgd2hhdCYjMzk7cyBjYXRjaGluZyBteSBleWUuIEkgaW1tZWRpYXRlbHkgc3VzcGVjdCBga21hbGxvY19vYmpzYCBpcyBhIG1hY3JvLCB3aGljaCBpcyBzdGFuZGFyZCBwcmFjdGljZSBpbiB0aGVzZSB0eXBlcyBvZiBsb3ctbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQmIzM5O3MgZG9pbmcsIHNwZWNpZmljYWxseSB3aXRoIHJlc3BlY3QgdG8gbWVtb3J5IGFsbG9jYXRpb24uCgpUaGVuLCB0aGVyZSYjMzk7cyBhIHF1aWNrIHRob3VnaHQuLi4gaXMgYGttYWxsb2NfYXJyYXlgIHBvdGVudGlhbGx5IHVzZWQgYnkgYGttYWxsb2Nfb2Jqc2AgZm9yIGBuaGVhZHNgPyBUaGF0IHdvdWxkIG1ha2Ugc2Vuc2UsIGdpdmVuIHRoZSBjb250ZXh0LgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgdGhlIGJvdW5kcy4gVGhlIGB1c2VkX2NvdW50YCB2YXJpYWJsZSBzZWVtcyBrZXkgaGVyZS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgc2FmZXR5LiBJdCYjMzk7cyBib3VuZGVkIGJ5IGB1c2VkX2xpbWl0YCwgd2hpY2ggaW4gdHVybiwgaXMgYm91bmRlZCBieSBgdnEtJmd0O2Rldi0mZ3Q7aW92X2xpbWl0YC4gVGhpcyBzdWdnZXN0cyBhIGNhcmVmdWwgY29udHJvbCBvZiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGFsbG9jYXRlZC4gSWYgdGhpcyByZWFzb25pbmcgaXMgcmlnaHQsIGl0IGltcGxpZXMgdGhhdCB3ZSAqc2hvdWxkbiYjMzk7dCogb3ZlcmZsb3cgYHZxLSZndDtoZWFkc2AuCgpBbmQganVzdCB0byBjbGFyaWZ5LCB3ZSBhcmUgb25seSBjb3B5aW5nIGB1c2VkX2NvdW50YCBlbGVtZW50cyB0byB1c2Vyc3BhY2UsIGFuZCBpdCBzaG91bGQgYmUgdGhvc2UgZWxlbWVudHMgdGhhdCB3ZXJlIGluaXRpYWxpemVkLiBUaGF0IG1lYW5zIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2Ugd2UgYXJlbiYjMzk7dCBwZXJmb3JtaW5nIGFueSBvdXQtb2YtYm91bmRzIHJlYWRzIGZyb20gYHZxLSZndDtoZWFkc2AuIFRoYXQmIzM5O3MgYSBodWdlIHJlbGllZi4KCkJ1dCBJJiMzOTttIG5vdCBnb2luZyB0byB0YWtlIHRoYXQgYXMgZ29zcGVsLiBXZSBzdGlsbCBuZWVkIHRvIHZlcmlmeSB3aGF0IGBrbWFsbG9jX29ianNgIGlzIGFjdHVhbGx5IGRvaW5nLiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGF0IGRlZmluaXRpb24gYW5kIGVuc3VyZSBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIFRpbWUgdG8gdmVyaWZ5IHRob3NlIGFzc3VtcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWFsbG9jX29ianMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDM2NzIgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTM5OmttYWxsb2MoKSwga3phbGxvYygpLCBrbWFsbG9jX29ianMoKSwga3phbGxvY19vYmpzKCksIHZtYWxsb2MoKSwgYW5kXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDAtdnphbGxvYygpLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvblxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk1OD1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIGFsbG9jYXRpbmcgYW4gYXJyYXkgaXMgdGhlIGZvbGxvd2luZzpcbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjEtXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NjI6XHRwID0ga21hbGxvY19vYmpzKCpwLCBuLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTYzLVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zOTg9YmVjb21lLCByZXNwZWN0aXZlbHk6OlxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDEtXHRwdHIgPSBremFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDI6XHRwdHIgPSBrbWFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMy1cdHB0ciA9IGt6YWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XG4tLVxuYXJjaC9hcm0vbW0vcGdkLmMtMTktI2lmZGVmIENPTkZJR19BUk1fTFBBRVxuYXJjaC9hcm0vbW0vcGdkLmM6MjA6I2RlZmluZSBfcGdkX2FsbG9jKG1tKVx0XHRrbWFsbG9jX29ianMocGdkX3QsIFBUUlNfUEVSX1BHRCwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pXG5hcmNoL2FybS9tbS9wZ2QuYy0yMS0jZGVmaW5lIF9wZ2RfZnJlZShtbSwgcGdkKVx0a2ZyZWUocGdkKVxuLS1cbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jPTc2ND1zdGF0aWMgaW50IGNvdmVyYWdlX3N0YXJ0KGNvbnN0IHVuaW9uIGRlY29kZV9pdGVtICp0YWJsZSlcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jLTc2NS17XG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYzo3NjY6XHRjb3ZlcmFnZS5iYXNlID0ga21hbGxvY19vYmpzKHN0cnVjdCBjb3ZlcmFnZV9lbnRyeSxcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jLTc2Ny1cdFx0XHRcdCAgICAgTUFYX0NPVkVSQUdFX0VOVFJJRVMpO1xuLS1cbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jPTM5MT11MzIgYXUxeHh4X2RiZG1hX3JpbmdfYWxsb2ModTMyIGNoYW5pZCwgaW50IGVudHJpZXMpXG4tLVxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtNDE0LVx0ICovXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYzo0MTU6XHRkZXNjX2Jhc2UgPSAodTMyKSBrbWFsbG9jX29ianMoYXUxeF9kZG1hX2Rlc2NfdCwgZW50cmllcyxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTQxNi1cdFx0XHRcdCAgICAgICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jPTUzMj1hZGRfc3lzdGVtX21hcF9hZGRyZXNzZXMoc3RydWN0IHBhcmlzY19kZXZpY2UgKmRldiwgaW50IG51bV9hZGRycywgXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTUzOC1cbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYzo1Mzk6XHRkZXYtXHUwMDNlYWRkciA9IGttYWxsb2Nfb2JqcygqZGV2LVx1MDAzZWFkZHIsIG51bV9hZGRycyk7XG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtNTQwLVx0aWYoIWRldi1cdTAwM2VhZGRyKSB7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jPTczMT1pbnQga3ZtX3ZjcHVfaW9jdGxfY29uZmlnX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTc3NC1cdFx0ICAgIGNmZy1cdTAwM2VhcnJheSAvIFBBR0VfU0laRTtcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYzo3NzU6XHRwYWdlcyA9IGttYWxsb2Nfb2JqcygqcGFnZXMsIG51bV9wYWdlcyk7XG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtNzc2LVx0aWYgKCFwYWdlcylcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM9ODk4PWludCBrdm1wcGNfZTUwMF90bGJfaW5pdChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTQtXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM6OTE1Olx0dmNwdV9lNTAwLVx1MDAzZWd0bGJfYXJjaCA9IGttYWxsb2Nfb2JqcygqdmNwdV9lNTAwLVx1MDAzZWd0bGJfYXJjaCxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTYtXHRcdFx0XHRcdCAgICBLVk1fRTUwMF9UTEIwX1NJWkUgJiM0MzsgS1ZNX0U1MDBfVExCMV9TSVpFKTtcbi0tXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM9NDU9c3RhdGljIGludCBncm93KHJoX2luZm9fdCAqIGluZm8sIGludCBtYXhfYmxvY2tzKVxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy01Ni1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYzo1NzpcdGJsb2NrID0ga21hbGxvY19vYmpzKHJoX2Jsb2NrX3QsIG1heF9ibG9ja3MsIEdGUF9BVE9NSUMpO1xuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTU4LVx0aWYgKGJsb2NrID09IE5VTEwpXG4tLVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jPTc1NT1zdGF0aWMgaW50IGNyZWF0ZV9ldmVudHNfZnJvbV9jYXRhbG9nKHN0cnVjdCBhdHRyaWJ1dGUgKioqZXZlbnRzXyxcbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTA4LVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkwOTpcdGV2ZW50cyA9IGttYWxsb2Nfb2JqcygqZXZlbnRzLCBhdHRyX21heCAmIzQzOyAxKTtcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTAtXHRpZiAoIWV2ZW50cykge1xuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTQtXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTE1Olx0ZXZlbnRfZGVzY3MgPSBrbWFsbG9jX29ianMoKmV2ZW50X2Rlc2NzLCBldmVudF9pZHggJiM0MzsgMSk7XG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTE2LVx0aWYgKCFldmVudF9kZXNjcykge1xuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MjAtXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTIxOlx0ZXZlbnRfbG9uZ19kZXNjcyA9IGttYWxsb2Nfb2JqcygqZXZlbnRfbG9uZ19kZXNjcywgZXZlbnRfaWR4ICYjNDM7IDEpO1xuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkyMi1cdGlmICghZXZlbnRfbG9uZ19kZXNjcykge1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM9MTIyPXN0YXRpYyBpbnQgaHN0YV9tc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jLTE1My1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM6MTU0Olx0cHBjNHh4X2hzdGFfbXNpLmlycV9tYXAgPSBrbWFsbG9jX29ianMoaW50LCBpcnFfY291bnQpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYy0xNTUtXHRpZiAoIXBwYzR4eF9oc3RhX21zaS5pcnFfbWFwKSB7XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jPTEyMD1zdGF0aWMgaW50IHBzZXJpZXNfcGNpX3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2IG51bV92ZnMpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jLTE0My1cdHBkbiA9IHBjaV9nZXRfcGRuKHBkZXYpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jOjE0NDpcdHBkbi1cdTAwM2VwZV9udW1fbWFwID0ga21hbGxvY19vYmpzKCpwZG4tXHUwMDNlcGVfbnVtX21hcCwgbnVtX3Zmcyk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMtMTQ1LVx0aWYgKCFwZG4tXHUwMDNlcGVfbnVtX21hcClcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYz0xNTQ5PXZvaWQgX19pbml0IG1waWNfaW5pdChzdHJ1Y3QgbXBpYyAqbXBpYylcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYy0xNjQxLVx0LyogYWxsb2NhdGUgbWVtb3J5IHRvIHNhdmUgbXBpYyBzdGF0ZSAqL1xuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmM6MTY0MjpcdG1waWMtXHUwMDNlc2F2ZV9kYXRhID0ga21hbGxvY19vYmpzKCptcGljLVx1MDAzZXNhdmVfZGF0YSwgbXBpYy1cdTAwM2VudW1fc291cmNlcyk7XG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYy0xNjQzLVx0QlVHX09OKG1waWMtXHUwMDNlc2F2ZV9kYXRhID09IE5VTEwpO1xuLS1cbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYz0zMD1zdGF0aWMgdm9pZCAqZGlhZzBjX3N0b3JlKHVuc2lnbmVkIGludCAqY291bnQpXG4tLVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jLTM3LVx0Y3B1X2NvdW50ID0gbnVtX29ubGluZV9jcHVzKCk7XG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM6Mzg6XHRjcHVfdmVjID0ga21hbGxvY19vYmpzKCpjcHVfdmVjLCBudW1fcG9zc2libGVfY3B1cygpKTtcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0zOS1cdGlmICghY3B1X3ZlYylcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaD0xOTA9c3RhdGljIGlubGluZSBzdHJ1Y3QgaWRhbF9idWZmZXIgKippZGFsX2J1ZmZlcl9hcnJheV9hbGxvYyhzaXplX3Qgc2l6ZSwgaW50IHBhZ2Vfb3JkZXIpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmgtMTk3LVx0Y291bnQgPSAoc2l6ZSAmIzQzOyBDQ1dfTUFYX0JZVEVfQ09VTlQgLSAxKSAvIENDV19NQVhfQllURV9DT1VOVDtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oOjE5ODpcdGlicyA9IGttYWxsb2Nfb2JqcygqaWJzLCBjb3VudCAmIzQzOyAxKTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oLTE5OS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOykge1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYz0yNjY9c3RhdGljIGRlYnVnX2VudHJ5X3QgKioqZGVidWdfYXJlYXNfYWxsb2MoaW50IHBhZ2VzX3Blcl9hcmVhLCBpbnQgbnJfYXJlYXMpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jLTI3MC1cbmFyY2gvczM5MC9rZXJuZWwvZGVidWcuYzoyNzE6XHRhcmVhcyA9IGttYWxsb2Nfb2JqcyhkZWJ1Z19lbnRyeV90ICoqLCBucl9hcmVhcyk7XG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMtMjcyLVx0aWYgKCFhcmVhcylcbi0tXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMtMjc1LVx0XHQvKiBHRlBfTk9XQVJOIHRvIGF2b2lkIHVzZXIgdHJpZ2dlcmFibGUgV0FSTiwgd2UgaGFuZGxlIGZhaWxzICovXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmM6Mjc2Olx0XHRhcmVhc1tpXSA9IGttYWxsb2Nfb2JqcyhkZWJ1Z19lbnRyeV90ICosIHBhZ2VzX3Blcl9hcmVhLFxuYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jLTI3Ny1cdFx0XHRcdFx0R0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX2NwdW1fY2ZfZXZlbnRzLmM9OTY0PXN0YXRpYyBfX2luaXQgc3RydWN0IGF0dHJpYnV0ZSAqKm1lcmdlX2F0dHIoc3RydWN0IGF0dHJpYnV0ZSAqKmEsXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX2NwdW1fY2ZfZXZlbnRzLmMtOTc4LVxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX2NwdW1fY2ZfZXZlbnRzLmM6OTc5Olx0bmV3ID0ga21hbGxvY19vYmpzKHN0cnVjdCBhdHRyaWJ1dGUgKiwgaik7XG5hcmNoL3MzOTAva2VybmVsL3BlcmZfY3B1bV9jZl9ldmVudHMuYy05ODAtXHRpZiAoIW5ldylcbi0tXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfcGFpLmM9MTA5Nj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqKiBfX2luaXQgYXR0cl9ldmVudF9pbml0KHN0cnVjdCBwYWlfcG11ICpwKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvcGVyZl9wYWkuYy0xMTAxLVxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX3BhaS5jOjExMDI6XHRhdHRycyA9IGttYWxsb2Nfb2JqcygqYXR0cnMsIG1pbl9hdHRyICYjNDM7IDEsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbmFyY2gvczM5MC9rZXJuZWwvcGVyZl9wYWkuYy0xMTAzLVx0aWYgKCFhdHRycylcbi0tXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM9MjAzPWludCBrdm1fczM5MF9pbXBvcnRfYnBfZGF0YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jLTIzNC1cdGlmIChucl93cCBcdTAwM2UgMCkge1xuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjIzNTpcdFx0d3BfaW5mbyA9IGttYWxsb2Nfb2Jqcygqd3BfaW5mbywgbnJfd3AsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMjM2LVx0XHRpZiAoIXdwX2luZm8pIHtcbi0tXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMjQxLVx0aWYgKG5yX2JwIFx1MDAzZSAwKSB7XG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmM6MjQyOlx0XHRicF9pbmZvID0ga21hbGxvY19vYmpzKCpicF9pbmZvLCBucl9icCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvczM5MC9rdm0vZ3Vlc3RkYmcuYy0yNDMtXHRcdGlmICghYnBfaW5mbykge1xuLS1cbmFyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jPTYyNT1TWVNDQUxMX0RFRklORTUodXRyYXBfaW5zdGFsbCwgdXRyYXBfZW50cnlfdCwgdHlwZSxcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfNjQuYy02NTktXHRcdFx0Y3VycmVudF90aHJlYWRfaW5mbygpLVx1MDAzZXV0cmFwcyA9XG5hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfNjQuYzo2NjA6XHRcdFx0XHRrbWFsbG9jX29ianMobG9uZywgVVRfVFJBUF9JTlNUUlVDVElPTl8zMSAmIzQzOyAxKTtcbmFyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jLTY2MS1cdFx0XHRpZiAoIWN1cnJlbnRfdGhyZWFkX2luZm8oKS1cdTAwM2V1dHJhcHMpIHtcbi0tXG5hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYz0xMDY0PXN0YXRpYyBpbnQgX19pbml0IHViZF9pbml0KHZvaWQpXG4tLVxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTA3MS1cbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jOjEwNzI6XHRpcnFfcmVxX2J1ZmZlciA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaW9fdGhyZWFkX3JlcSAqLFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTA3My1cdFx0XHRcdCAgICAgIFVCRF9SRVFfQlVGRkVSX1NJWkUpO1xuLS1cbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jLTEwNzktXHR9XG5hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYzoxMDgwOlx0aW9fcmVxX2J1ZmZlciA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaW9fdGhyZWFkX3JlcSAqLFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTA4MS1cdFx0XHRcdCAgICAgVUJEX1JFUV9CVUZGRVJfU0laRSk7XG4tLVxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmM9NTA3PXN0YXRpYyBzdHJ1Y3QgdmVjdG9yX3F1ZXVlICpjcmVhdGVfcXVldWUoXG4tLVxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmMtNTQ2LVx0XHRpZiAodnAtXHUwMDNlaGVhZGVyX3NpemUgXHUwMDNlIDApXG5hcmNoL3VtL2RyaXZlcnMvdmVjdG9yX2tlcm4uYzo1NDc6XHRcdFx0aW92ID0ga21hbGxvY19vYmpzKHN0cnVjdCBpb3ZlYywgMyAmIzQzOyBudW1fZXh0cmFfZnJhZ3MpO1xuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmMtNTQ4LVx0XHRlbHNlXG5hcmNoL3VtL2RyaXZlcnMvdmVjdG9yX2tlcm4uYzo1NDk6XHRcdFx0aW92ID0ga21hbGxvY19vYmpzKHN0cnVjdCBpb3ZlYywgMiAmIzQzOyBudW1fZXh0cmFfZnJhZ3MpO1xuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmMtNTUwLVx0XHRpZiAoaW92ID09IE5VTEwpXG4tLVxuYXJjaC91bS9kcml2ZXJzL3ZmaW9fa2Vybi5jPTQ4ND1zdGF0aWMgdm9pZCB1bWxfdmZpb19vcGVuX2RldmljZShzdHJ1Y3QgdW1sX3ZmaW9fZGV2aWNlICpkZXYpXG4tLVxuYXJjaC91bS9kcml2ZXJzL3ZmaW9fa2Vybi5jLTUxNi1cbmFyY2gvdW0vZHJpdmVycy92ZmlvX2tlcm4uYzo1MTc6XHRkZXYtXHUwMDNlaW50cl9jdHggPSBrbWFsbG9jX29ianMoc3RydWN0IHVtbF92ZmlvX2ludHJfY3R4LFxuYXJjaC91bS9kcml2ZXJzL3ZmaW9fa2Vybi5jLTUxOC1cdFx0XHRcdCAgICAgZGV2LVx1MDAzZXVkZXYuaXJxX2NvdW50KTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM9Nzk3PXN0YXRpYyBib29sIF9faW5pdCBzZ3hfcGFnZV9jYWNoZV9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTgwMy1cbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzo4MDQ6XHRzZ3hfbnVtYV9ub2RlcyA9IGttYWxsb2Nfb2Jqcygqc2d4X251bWFfbm9kZXMsIG51bV9wb3NzaWJsZV9ub2RlcygpKTtcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy04MDUtXHRpZiAoIXNneF9udW1hX25vZGVzKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9rc3lzZnMuYz0zMjc9c3RhdGljIGludCBfX2luaXQgY3JlYXRlX3NldHVwX2RhdGFfbm9kZXMoc3RydWN0IGtvYmplY3QgKnBhcmVudClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwva3N5c2ZzLmMtMzQ2LVxuYXJjaC94ODYva2VybmVsL2tzeXNmcy5jOjM0NzpcdGtvYmpwID0ga21hbGxvY19vYmpzKCprb2JqcCwgbnIpO1xuYXJjaC94ODYva2VybmVsL2tzeXNmcy5jLTM0OC1cdGlmICgha29ianApIHtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTQ3MT1zdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTE1MTYtXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTUxNzpcdFx0cG9ydHMgPSBrbWFsbG9jX29ianMoKnBvcnRzLCBzY2hlZF9wb2xsLm5yX3BvcnRzKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0xNTE4LVx0XHRpZiAoIXBvcnRzKSB7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTIyMDM9c3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0yMjE4LVxuYXJjaC94ODYva3ZtL3hlbi5jOjIyMTk6XHRhbGxfZXZ0Y2huZmRzID0ga21hbGxvY19vYmpzKHN0cnVjdCBldnRjaG5mZCAqLCBuKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0yMjIwLVx0aWYgKCFhbGxfZXZ0Y2huZmRzKSB7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcDMyLmM9MjUyMT1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jLTI1MzMtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYzoyNTM0Olx0YWRkcnMgPSBrbWFsbG9jX29ianMoKmFkZHJzLCBwcm9nLVx1MDAzZWxlbik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0yNTM1LVx0aWYgKCFhZGRycylcbi0tXG5hcmNoL3g4Ni9wb3dlci9jcHUuYz0zODg9c3RhdGljIGludCBtc3JfYnVpbGRfY29udGV4dChjb25zdCB1MzIgKm1zcl9pZCwgY29uc3QgaW50IG51bSlcbi0tXG5hcmNoL3g4Ni9wb3dlci9jcHUuYy0zOTYtXG5hcmNoL3g4Ni9wb3dlci9jcHUuYzozOTc6XHRtc3JfYXJyYXkgPSBrbWFsbG9jX29ianMoc3RydWN0IHNhdmVkX21zciwgdG90YWxfbnVtKTtcbmFyY2gveDg2L3Bvd2VyL2NwdS5jLTM5OC1cdGlmICghbXNyX2FycmF5KSB7XG4tLVxuYXJjaC94ODYveGVuL2dyYW50LXRhYmxlLmM9MTAyPXN0YXRpYyBpbnQgYXJjaF9nbnR0YWJfdmFsbG9jKHN0cnVjdCBnbnR0YWJfdm1fYXJlYSAqYXJlYSwgdW5zaWduZWQgbnJfZnJhbWVzKVxuYXJjaC94ODYveGVuL2dyYW50LXRhYmxlLmMtMTAzLXtcbmFyY2gveDg2L3hlbi9ncmFudC10YWJsZS5jOjEwNDpcdGFyZWEtXHUwMDNlcHRlcyA9IGttYWxsb2Nfb2JqcygqYXJlYS1cdTAwM2VwdGVzLCBucl9mcmFtZXMpO1xuYXJjaC94ODYveGVuL2dyYW50LXRhYmxlLmMtMTA1LVx0aWYgKGFyZWEtXHUwMDNlcHRlcyA9PSBOVUxMKVxuLS1cbmFyY2gveHRlbnNhL3BsYXRmb3Jtcy9pc3Mvc2ltZGlzay5jPTMwOD1zdGF0aWMgaW50IF9faW5pdCBzaW1kaXNrX2luaXQodm9pZClcbi0tXG5hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL3NpbWRpc2suYy0zMjItXG5hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL3NpbWRpc2suYzozMjM6XHRzZGRldiA9IGttYWxsb2Nfb2Jqcygqc2RkZXYsIHNpbWRpc2tfY291bnQpO1xuYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9zaW1kaXNrLmMtMzI0LVx0aWYgKHNkZGV2ID09IE5VTEwpXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz01Nzg9c3RhdGljIGJvb2wgYmZxcV9yZXF1ZXN0X292ZXJfbGltaXQoc3RydWN0IGJmcV9kYXRhICpiZnFkLFxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjA4LVx0XHRcdGtmcmVlKGVudGl0aWVzKTtcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjA5Olx0XHRlbnRpdGllcyA9IGttYWxsb2Nfb2JqcygqZW50aXRpZXMsIGRlcHRoLCBHRlBfTk9JTyk7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTYxMC1cdFx0aWYgKCFlbnRpdGllcylcbi0tXG5ibG9jay9ibGstc3RhdC5jPTEwMD1ibGtfc3RhdF9hbGxvY19jYWxsYmFjayh2b2lkICgqdGltZXJfZm4pKHN0cnVjdCBibGtfc3RhdF9jYWxsYmFjayAqKSxcbi0tXG5ibG9jay9ibGstc3RhdC5jLTEwOS1cbmJsb2NrL2Jsay1zdGF0LmM6MTEwOlx0Y2ItXHUwMDNlc3RhdCA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgYmxrX3JxX3N0YXQsIGJ1Y2tldHMpO1xuYmxvY2svYmxrLXN0YXQuYy0xMTEtXHRpZiAoIWNiLVx1MDAzZXN0YXQpIHtcbi0tXG5ibG9jay9mb3BzLmM9NTU9c3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuYmxvY2svZm9wcy5jLTY3LVx0ZWxzZSB7XG5ibG9jay9mb3BzLmM6Njg6XHRcdHZlY3MgPSBrbWFsbG9jX29ianMoc3RydWN0IGJpb192ZWMsIG5yX3BhZ2VzKTtcbmJsb2NrL2ZvcHMuYy02OS1cdFx0aWYgKCF2ZWNzKVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM9MzUxPXN0YXRpYyBib29sIGxkbV92YWxpZGF0ZV90b2NibG9ja3Moc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSxcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM2NC1cdHRiWzBdID0gXHUwMDI2bGRiLVx1MDAzZXRvYztcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzY1Olx0dGJbMV0gPSBrbWFsbG9jX29ianMoKnRiWzFdLCAzKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzY2LVx0aWYgKCF0YlsxXSkge1xuLS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmM9MTQwNz1zdGF0aWMgaW50IGhsX2NzX2NvcHlfY2h1bmtfYXJyYXkoc3RydWN0IGhsX2RldmljZSAqaGRldixcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jLTE0MjItXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jOjE0MjM6XHQqY3NfY2h1bmtfYXJyYXkgPSBrbWFsbG9jX29ianMoKipjc19jaHVua19hcnJheSwgbnVtX2NodW5rcywgR0ZQX0FUT01JQyk7XG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jLTE0MjQtXHRpZiAoISpjc19jaHVua19hcnJheSlcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmM6MTQyNTpcdFx0KmNzX2NodW5rX2FycmF5ID0ga21hbGxvY19vYmpzKCoqY3NfY2h1bmtfYXJyYXksIG51bV9jaHVua3MpO1xuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX3N1Ym1pc3Npb24uYy0xNDI2LVx0aWYgKCEqY3NfY2h1bmtfYXJyYXkpIHtcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jPTMwMDU9c3RhdGljIGludCBobF9tdWx0aV9jc193YWl0X2lvY3RsKHN0cnVjdCBobF9mcHJpdiAqaHByaXYsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX3N1Ym1pc3Npb24uYy0zMDUzLVx0LyogYWxsb2NhdGUgYXJyYXkgZm9yIHRoZSBmZW5jZXMgKi9cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmM6MzA1NDpcdGZlbmNlX2FyciA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaGxfZmVuY2UgKiwgc2VxX2Fycl9sZW4pO1xuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX3N1Ym1pc3Npb24uYy0zMDU1LVx0aWYgKCFmZW5jZV9hcnIpIHtcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2RlYnVnZnMuYz0yMDQ5PWludCBobF9kZWJ1Z2ZzX2RldmljZV9pbml0KHN0cnVjdCBobF9kZXZpY2UgKmhkZXYpXG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9kZWJ1Z2ZzLmMtMjA1NC1cdGRldl9lbnRyeS1cdTAwM2VoZGV2ID0gaGRldjtcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vZGVidWdmcy5jOjIwNTU6XHRkZXZfZW50cnktXHUwMDNlZW50cnlfYXJyID0ga21hbGxvY19vYmpzKHN0cnVjdCBobF9kZWJ1Z2ZzX2VudHJ5LCBjb3VudCk7XG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2RlYnVnZnMuYy0yMDU2LVx0aWYgKCFkZXZfZW50cnktXHUwMDNlZW50cnlfYXJyKVxuLS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vaHdfcXVldWUuYz04MjQ9c3RhdGljIGludCBleHRfYW5kX2NwdV9xdWV1ZV9pbml0KHN0cnVjdCBobF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBobF9od19xdWV1ZSAqcSxcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2h3X3F1ZXVlLmMtODM5LVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9od19xdWV1ZS5jOjg0MDpcdHEtXHUwMDNlc2hhZG93X3F1ZXVlID0ga21hbGxvY19vYmpzKHN0cnVjdCBobF9jc19qb2IgKiwgSExfUVVFVUVfTEVOR1RIKTtcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vaHdfcXVldWUuYy04NDEtXHRpZiAoIXEtXHUwMDNlc2hhZG93X3F1ZXVlKSB7XG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYz0zOTM4PXN0YXRpYyBpbnQgZ2F1ZGkyX3NwZWNpYWxfYmxvY2tzX2NvbmZpZyhzdHJ1Y3QgaGxfZGV2aWNlICpoZGV2KVxuLS1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmMtMzk0NS1cdHByb3AtXHUwMDNlbnVtX29mX3NwZWNpYWxfYmxvY2tzID0gQVJSQVlfU0laRShnYXVkaTJfc3BlY2lhbF9ibG9ja3MpO1xuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYzozOTQ2Olx0cHJvcC1cdTAwM2VzcGVjaWFsX2Jsb2NrcyA9IGttYWxsb2Nfb2JqcygqcHJvcC1cdTAwM2VzcGVjaWFsX2Jsb2NrcyxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmMtMzk0Ny1cdFx0XHRcdFx0ICAgIHByb3AtXHUwMDNlbnVtX29mX3NwZWNpYWxfYmxvY2tzKTtcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jLTM5NjAtXHRcdHByb3AtXHUwMDNlc2tpcF9zcGVjaWFsX2Jsb2Nrc19jZmcuYmxvY2tfdHlwZXMgPVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYzozOTYxOlx0XHRcdFx0a21hbGxvY19vYmpzKGdhdWRpMl9pdGVyYXRvcl9za2lwX2Jsb2NrX3R5cGVzWzBdLFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYy0zOTYyLVx0XHRcdFx0XHQgICAgIEFSUkFZX1NJWkUoZ2F1ZGkyX2l0ZXJhdG9yX3NraXBfYmxvY2tfdHlwZXMpKTtcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jLTM5NzYtXHRcdHByb3AtXHUwMDNlc2tpcF9zcGVjaWFsX2Jsb2Nrc19jZmcuYmxvY2tfcmFuZ2VzID1cbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmM6Mzk3NzpcdFx0XHRcdGttYWxsb2Nfb2JqcyhnYXVkaTJfaXRlcmF0b3Jfc2tpcF9ibG9ja19yYW5nZXNbMF0sXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jLTM5NzgtXHRcdFx0XHRcdCAgICAgQVJSQVlfU0laRShnYXVkaTJfaXRlcmF0b3Jfc2tpcF9ibG9ja19yYW5nZXMpKTtcbi0tXG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19jb250cm9sLmM9MzkzPXN0YXRpYyBpbnQgZmluZF9hbmRfbWFwX3VzZXJfcGFnZXMoc3RydWN0IHFhaWNfZGV2aWNlICpxZGV2LFxuLS1cbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2NvbnRyb2wuYy00MjUtXHR3aGlsZSAoMSkge1xuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfY29udHJvbC5jOjQyNjpcdFx0cGFnZV9saXN0ID0ga21hbGxvY19vYmpzKCpwYWdlX2xpc3QsIG5yX3BhZ2VzLFxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfY29udHJvbC5jLTQyNy1cdFx0XHRcdFx0IEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuLS1cbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYz00OTY9aW50IHJvY2tldF9qb2Jfb3BlbihzdHJ1Y3Qgcm9ja2V0X2ZpbGVfcHJpdiAqcm9ja2V0X3ByaXYpXG4tLVxuZHJpdmVycy9hY2NlbC9yb2NrZXQvcm9ja2V0X2pvYi5jLTQ5OC1cdHN0cnVjdCByb2NrZXRfZGV2aWNlICpyZGV2ID0gcm9ja2V0X3ByaXYtXHUwMDNlcmRldjtcbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYzo0OTk6XHRzdHJ1Y3QgZHJtX2dwdV9zY2hlZHVsZXIgKipzY2hlZHMgPSBrbWFsbG9jX29ianMoKnNjaGVkcyxcbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYy01MDAtXHRcdFx0XHRcdFx0XHQgcmRldi1cdTAwM2VudW1fY29yZXMpO1xuLS1cbmRyaXZlcnMvYWNwaS9hY3BpX21ycm0uYz01NT1zdGF0aWMgX19pbml0IGludCBhY3BpX3BhcnNlX21ycm0oc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSlcbi0tXG5kcml2ZXJzL2FjcGkvYWNwaV9tcnJtLmMtODMtXG5kcml2ZXJzL2FjcGkvYWNwaV9tcnJtLmM6ODQ6XHRtcnJtX21lbV9yYW5nZV9lbnRyeSA9IGttYWxsb2Nfb2JqcygqbXJybV9tZW1fcmFuZ2VfZW50cnksIG1yZV9jb3VudCxcbmRyaXZlcnMvYWNwaS9hY3BpX21ycm0uYy04NS1cdFx0XHRcdFx0ICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbi0tXG5kcml2ZXJzL2FjcGkvYWNwaV92aWRlby5jPTc5OD1pbnQgYWNwaV92aWRlb19nZXRfbGV2ZWxzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvYWNwaS9hY3BpX3ZpZGVvLmMtODMxLVx0ICovXG5kcml2ZXJzL2FjcGkvYWNwaV92aWRlby5jOjgzMjpcdGJyLVx1MDAzZWxldmVscyA9IGttYWxsb2Nfb2JqcygqYnItXHUwMDNlbGV2ZWxzLFxuZHJpdmVycy9hY3BpL2FjcGlfdmlkZW8uYy04MzMtXHRcdFx0XHQgIG9iai1cdTAwM2VwYWNrYWdlLmNvdW50ICYjNDM7IEFDUElfVklERU9fRklSU1RfTEVWRUwpO1xuLS1cbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jPTMxNj1zdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2dldF9wZXJmb3JtYW5jZV9zdGF0ZXMoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcilcbi0tXG5kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYy0zNDQtXHRwci1cdTAwM2VwZXJmb3JtYW5jZS1cdTAwM2VzdGF0ZXMgPVxuZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmM6MzQ1Olx0ICAgIGttYWxsb2Nfb2JqcyhzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcHgsIHBzcy1cdTAwM2VwYWNrYWdlLmNvdW50KTtcbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jLTM0Ni1cdGlmICghcHItXHUwMDNlcGVyZm9ybWFuY2UtXHUwMDNlc3RhdGVzKSB7XG4tLVxuZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmM9NDg1PXN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfZ2V0X3Rocm90dGxpbmdfc3RhdGVzKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpXG4tLVxuZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMtNTE0LVx0cHItXHUwMDNldGhyb3R0bGluZy5zdGF0ZXNfdHNzID1cbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jOjUxNTpcdCAgICBrbWFsbG9jX29ianMoc3RydWN0IGFjcGlfcHJvY2Vzc29yX3R4X3RzcywgdHNzLVx1MDAzZXBhY2thZ2UuY291bnQpO1xuZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMtNTE2LVx0aWYgKCFwci1cdTAwM2V0aHJvdHRsaW5nLnN0YXRlc190c3MpIHtcbi0tXG5kcml2ZXJzL2Jhc2UvY29tcG9uZW50LmM9MzU5PXN0YXRpYyBpbnQgY29tcG9uZW50X21hdGNoX3JlYWxsb2Moc3RydWN0IGNvbXBvbmVudF9tYXRjaCAqbWF0Y2gsIHNpemVfdCBudW0pXG4tLVxuZHJpdmVycy9iYXNlL2NvbXBvbmVudC5jLTM2NS1cbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYzozNjY6XHRuZXcgPSBrbWFsbG9jX29ianMoKm5ldywgbnVtKTtcbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYy0zNjctXHRpZiAoIW5ldylcbi0tXG5kcml2ZXJzL2Jhc2UvbWFwLmM9MzI9aW50IGtvYmpfbWFwKHN0cnVjdCBrb2JqX21hcCAqZG9tYWluLCBkZXZfdCBkZXYsIHVuc2lnbmVkIGxvbmcgcmFuZ2UsXG4tLVxuZHJpdmVycy9iYXNlL21hcC5jLTQzLVxuZHJpdmVycy9iYXNlL21hcC5jOjQ0Olx0cCA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgcHJvYmUsIG4pO1xuZHJpdmVycy9iYXNlL21hcC5jLTQ1LVx0aWYgKHAgPT0gTlVMTClcbi0tXG5kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLmM9MTI0PWludCByZWdjYWNoZV9pbml0KHN0cnVjdCByZWdtYXAgKm1hcCwgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLmMtMjE0LVx0XHRtYXAtXHUwMDNlbnVtX3JlZ19kZWZhdWx0cyA9IGNvdW50O1xuZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS5jOjIxNTpcdFx0bWFwLVx1MDAzZXJlZ19kZWZhdWx0cyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgcmVnX2RlZmF1bHQsIGNvdW50KTtcbmRyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUuYy0yMTYtXHRcdGlmICghbWFwLVx1MDAzZXJlZ19kZWZhdWx0cylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0zNDA9c3RhdGljIGludCBsb19yd19haW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGxvb3BfY21kICpjbWQsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMzU0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MzU1Olx0XHRjbWQtXHUwMDNlYnZlYyA9IGttYWxsb2Nfb2JqcygqY21kLVx1MDAzZWJ2ZWMsIG5yX2J2ZWMsIEdGUF9OT0lPKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTM1Ni1cdFx0aWYgKCFjbWQtXHUwMDNlYnZlYylcbi0tXG5kcml2ZXJzL2Jsb2NrL3JiZC5jPTI1MzY9c3RhdGljIGludCByYmRfaW1nX2ZpbGxfcmVxdWVzdChzdHJ1Y3QgcmJkX2ltZ19yZXF1ZXN0ICppbWdfcmVxLFxuLS1cbmRyaXZlcnMvYmxvY2svcmJkLmMtMjU3Mi1cdGZvcl9lYWNoX29ial9yZXF1ZXN0KGltZ19yZXEsIG9ial9yZXEpIHtcbmRyaXZlcnMvYmxvY2svcmJkLmM6MjU3MzpcdFx0b2JqX3JlcS1cdTAwM2VidmVjX3Bvcy5idmVjcyA9IGttYWxsb2Nfb2Jqcygqb2JqX3JlcS1cdTAwM2VidmVjX3Bvcy5idmVjcyxcbmRyaXZlcnMvYmxvY2svcmJkLmMtMjU3NC1cdFx0XHRcdFx0XHQgICAgICAgb2JqX3JlcS1cdTAwM2VidmVjX2NvdW50LFxuLS1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTE2MD1zdGF0aWMgaW50IHZpcnRibGtfc2V0dXBfZGlzY2FyZF93cml0ZV96ZXJvZXNfZXJhc2Uoc3RydWN0IHJlcXVlc3QgKnJlcSwgYm9vbCB1bm1hcClcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNzAtXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzoxNzE6XHRyYW5nZSA9IGttYWxsb2Nfb2JqcygqcmFuZ2UsIHNlZ21lbnRzLCBHRlBfQVRPTUlDKTtcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE3Mi1cdGlmICghcmFuZ2UpXG4tLVxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9OTYwPXN0YXRpYyBpbnQgaW5pdF92cShzdHJ1Y3QgdmlydGlvX2JsayAqdmJsaylcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy05OTUtXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzo5OTY6XHR2YmxrLVx1MDAzZXZxcyA9IGttYWxsb2Nfb2JqcygqdmJsay1cdTAwM2V2cXMsIG51bV92cXMpO1xuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtOTk3LVx0aWYgKCF2YmxrLVx1MDAzZXZxcylcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xMDAwLVx0dnFzX2luZm8gPSBremFsbG9jX29ianMoKnZxc19pbmZvLCBudW1fdnFzKTtcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjEwMDE6XHR2cXMgPSBrbWFsbG9jX29ianMoKnZxcywgbnVtX3Zxcyk7XG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xMDAyLVx0aWYgKCF2cXNfaW5mbyB8fCAhdnFzKSB7XG4tLVxuZHJpdmVycy9ibG9jay96MnJhbS5jPTE0Mz1zdGF0aWMgaW50IHoyX29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3oycmFtLmMtMTg5LVx0XHRcdHoycmFtX21hcCA9XG5kcml2ZXJzL2Jsb2NrL3oycmFtLmM6MTkwOlx0XHRcdCAgICBrbWFsbG9jX29ianMoejJyYW1fbWFwWzBdLCBzaXplIC8gWjJSQU1fQ0hVTktTSVpFKTtcbmRyaXZlcnMvYmxvY2svejJyYW0uYy0xOTEtXHRcdFx0aWYgKHoycmFtX21hcCA9PSBOVUxMKSB7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTUxOD1zdGF0aWMgaW50IHpsb29wX2RvX3J3KHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTMwLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjUzMTpcdFx0Y21kLVx1MDAzZWJ2ZWMgPSBrbWFsbG9jX29ianMoKmNtZC1cdTAwM2VidmVjLCBucl9idmVjLCBHRlBfTk9JTyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTMyLVx0XHRpZiAoIWNtZC1cdTAwM2VidmVjKVxuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jPTE5MDQ9c3RhdGljIGludCBidGludGVsX3BjaWVfc2V0dXBfdHhxX2J1ZnMoc3RydWN0IGJ0aW50ZWxfcGNpZV9kYXRhICpkYXRhLFxuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jLTE5MTAtXHQvKiBBbGxvY2F0ZSB0aGUgc2FtZSBudW1iZXIgb2YgYnVmZmVycyBhcyB0aGUgZGVzY3JpcHRvciAqL1xuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmM6MTkxMTpcdHR4cS1cdTAwM2VidWZzID0ga21hbGxvY19vYmpzKCpidWYsIHR4cS1cdTAwM2Vjb3VudCk7XG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYy0xOTEyLVx0aWYgKCF0eHEtXHUwMDNlYnVmcylcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYz0xOTQ4PXN0YXRpYyBpbnQgYnRpbnRlbF9wY2llX3NldHVwX3J4cV9idWZzKHN0cnVjdCBidGludGVsX3BjaWVfZGF0YSAqZGF0YSxcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYy0xOTU0LVx0LyogQWxsb2NhdGUgdGhlIHNhbWUgbnVtYmVyIG9mIGJ1ZmZlcnMgYXMgdGhlIGRlc2NyaXB0b3IgKi9cbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jOjE5NTU6XHRyeHEtXHUwMDNlYnVmcyA9IGttYWxsb2Nfb2JqcygqYnVmLCByeHEtXHUwMDNlY291bnQpO1xuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmMtMTk1Ni1cdGlmICghcnhxLVx1MDAzZWJ1ZnMpXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz02MzI9c3RhdGljIGludCBmc2xfbWNfZGV2aWNlX2dldF9tbWlvX3JlZ2lvbnMoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2Rldixcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTY1NS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6NjU2Olx0cmVnaW9ucyA9IGttYWxsb2Nfb2JqcyhyZWdpb25zWzBdLCBvYmpfZGVzYy1cdTAwM2VyZWdpb25fY291bnQpO1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy02NTctXHRpZiAoIXJlZ2lvbnMpXG4tLVxuZHJpdmVycy9jaGFyL2FncC9pc29jaC5jPTY0PXN0YXRpYyBpbnQgYWdwXzNfNV9pc29jaHJvbm91c19ub2RlX2VuYWJsZShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UsXG4tLVxuZHJpdmVycy9jaGFyL2FncC9pc29jaC5jLTk0LVx0ICovXG5kcml2ZXJzL2NoYXIvYWdwL2lzb2NoLmM6OTU6XHRtYXN0ZXIgPSBrbWFsbG9jX29ianMoKm1hc3RlciwgbmRldnMpO1xuZHJpdmVycy9jaGFyL2FncC9pc29jaC5jLTk2LVx0aWYgKG1hc3RlciA9PSBOVUxMKSB7XG4tLVxuZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYz0zNjk9c3RhdGljIGludCB1bmlub3J0aF9jcmVhdGVfZ2F0dF90YWJsZShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UpXG4tLVxuZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYy00MDYtXG5kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jOjQwNzpcdHVuaW5vcnRoX3ByaXYucGFnZXNfYXJyID0ga21hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIDEgXHUwMDNjXHUwMDNjIHBhZ2Vfb3JkZXIpO1xuZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYy00MDgtXHRpZiAodW5pbm9ydGhfcHJpdi5wYWdlc19hcnIgPT0gTlVMTClcbi0tXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYz03NTA9aW50IGlwbWlfc21pX3dhdGNoZXJfcmVnaXN0ZXIoc3RydWN0IGlwbWlfc21pX3dhdGNoZXIgKndhdGNoZXIpXG4tLVxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMtNzc5LVx0aWYgKGNvdW50IFx1MDAzZSAwKSB7XG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYzo3ODA6XHRcdGludGVyZmFjZXMgPSBrbWFsbG9jX29ianMoKmludGVyZmFjZXMsIGNvdW50KTtcbmRyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jLTc4MS1cdFx0aWYgKCFpbnRlcmZhY2VzKSB7XG4tLVxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMtNzgzLVx0XHR9IGVsc2Uge1xuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmM6Nzg0Olx0XHRcdGRldmljZXMgPSBrbWFsbG9jX29ianMoKmRldmljZXMsIGNvdW50KTtcbmRyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jLTc4NS1cdFx0XHRpZiAoIWRldmljZXMpIHtcbi0tXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYz0xODEwPXN0YXRpYyBpbnQgaW5pdF92cXMoc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldilcbi0tXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYy0xODE5LVxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MTgyMDpcdHZxcyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgdmlydHF1ZXVlICosIG5yX3F1ZXVlcyk7XG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYy0xODIxLVx0dnFzX2luZm8gPSBremFsbG9jX29ianMoKnZxc19pbmZvLCBucl9xdWV1ZXMpO1xuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MTgyMjpcdHBvcnRkZXYtXHUwMDNlaW5fdnFzID0ga21hbGxvY19vYmpzKHN0cnVjdCB2aXJ0cXVldWUgKiwgbnJfcG9ydHMpO1xuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MTgyMzpcdHBvcnRkZXYtXHUwMDNlb3V0X3ZxcyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgdmlydHF1ZXVlICosIG5yX3BvcnRzKTtcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jLTE4MjQtXHRpZiAoIXZxcyB8fCAhdnFzX2luZm8gfHwgIXBvcnRkZXYtXHUwMDNlaW5fdnFzIHx8ICFwb3J0ZGV2LVx1MDAzZW91dF92cXMpIHtcbi0tXG5kcml2ZXJzL2Nsay9jbGstYnVsay5jPTQ3PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIG9mX2Nsa19idWxrX2dldF9hbGwoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvY2xrL2Nsay1idWxrLmMtNTgtXG5kcml2ZXJzL2Nsay9jbGstYnVsay5jOjU5Olx0Y2xrX2J1bGsgPSBrbWFsbG9jX29ianMoKmNsa19idWxrLCBudW1fY2xrcyk7XG5kcml2ZXJzL2Nsay9jbGstYnVsay5jLTYwLVx0aWYgKCFjbGtfYnVsaylcbi0tXG5kcml2ZXJzL2Nsay9jbGstc3RtMzJmNC5jPTE4Mjg9c3RhdGljIHZvaWQgX19pbml0IHN0bTMyZjRfcmNjX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5kcml2ZXJzL2Nsay9jbGstc3RtMzJmNC5jLTE4NTctXG5kcml2ZXJzL2Nsay9jbGstc3RtMzJmNC5jOjE4NTg6XHRjbGtzID0ga21hbGxvY19vYmpzKCpjbGtzLCBkYXRhLVx1MDAzZWdhdGVzX251bSAmIzQzOyBzdG0zMmZ4X2VuZF9wcmltYXJ5X2Nsayk7XG5kcml2ZXJzL2Nsay9jbGstc3RtMzJmNC5jLTE4NTktXHRpZiAoIWNsa3MpXG4tLVxuZHJpdmVycy9jbGsvZGF2aW5jaS9wbGwuYz03NDM9aW50IG9mX2RhdmluY2lfcGxsX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG4tLVxuZHJpdmVycy9jbGsvZGF2aW5jaS9wbGwuYy03ODQtXG5kcml2ZXJzL2Nsay9kYXZpbmNpL3BsbC5jOjc4NTpcdFx0Y2xrcyA9IGttYWxsb2Nfb2JqcygqY2xrcywgbl9jbGtzKTtcbmRyaXZlcnMvY2xrL2RhdmluY2kvcGxsLmMtNzg2LVx0XHRpZiAoIWNsa3MpIHtcbi0tXG5kcml2ZXJzL2Nsay9kYXZpbmNpL3BzYy5jPTM2ND1fX2RhdmluY2lfcHNjX3JlZ2lzdGVyX2Nsb2NrcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9jbGsvZGF2aW5jaS9wc2MuYy0zNzgtXG5kcml2ZXJzL2Nsay9kYXZpbmNpL3BzYy5jOjM3OTpcdGNsa3MgPSBrbWFsbG9jX29ianMoKmNsa3MsIG51bV9jbGtzKTtcbmRyaXZlcnMvY2xrL2RhdmluY2kvcHNjLmMtMzgwLVx0aWYgKCFjbGtzKSB7XG4tLVxuZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMjEwLmM9MzY5Nz1zdGF0aWMgdm9pZCB0ZWdyYTIxMF9tYmlzdF9jbGtfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTIxMC5jLTM3MDctXG5kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEyMTAuYzozNzA4Olx0XHRjbGtfZGF0YSA9IGttYWxsb2Nfb2JqcygqY2xrX2RhdGEsIG51bV9jbGtzKTtcbmRyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTIxMC5jLTM3MDktXHRcdGlmIChXQVJOX09OKCFjbGtfZGF0YSkpXG4tLVxuZHJpdmVycy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmM9MTU1PXN0YXRpYyBpbnQgbmlfNjcweF9hdXRvX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jLTIwMC1cbmRyaXZlcnMvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jOjIwMTpcdFx0cmFuZ2VfdGFibGVfbGlzdCA9IGttYWxsb2Nfb2JqcygqcmFuZ2VfdGFibGVfbGlzdCwgMzIpO1xuZHJpdmVycy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmMtMjAyLVx0XHRpZiAoIXJhbmdlX3RhYmxlX2xpc3QpXG4tLVxuZHJpdmVycy9jcHVmcmVxL2JtaXBzLWNwdWZyZXEuYz02Nj1ibWlwc19jcHVmcmVxX2dldF9mcmVxX3RhYmxlKGNvbnN0IHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KVxuLS1cbmRyaXZlcnMvY3B1ZnJlcS9ibWlwcy1jcHVmcmVxLmMtNzMtXG5kcml2ZXJzL2NwdWZyZXEvYm1pcHMtY3B1ZnJlcS5jOjc0Olx0dGFibGUgPSBrbWFsbG9jX29ianMoKnRhYmxlLCBwcml2LVx1MDAzZW1heF9mcmVxcyAmIzQzOyAxKTtcbmRyaXZlcnMvY3B1ZnJlcS9ibWlwcy1jcHVmcmVxLmMtNzUtXHRpZiAoIXRhYmxlKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYz0xMzQ9c3B1X3NrY2lwaGVyX3J4X3NnX2NyZWF0ZShzdHJ1Y3QgYnJjbV9tZXNzYWdlICptc3NnLFxuLS1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xNDMtXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM6MTQ0Olx0bXNzZy1cdTAwM2VzcHUuZHN0ID0ga21hbGxvY19vYmpzKHN0cnVjdCBzY2F0dGVybGlzdCwgcnhfZnJhZ19udW0sIHJjdHgtXHUwMDNlZ2ZwKTtcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xNDUtXHRpZiAoIW1zc2ctXHUwMDNlc3B1LmRzdClcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM9MTk3PXNwdV9za2NpcGhlcl90eF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMjA2LVxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jOjIwNzpcdG1zc2ctXHUwMDNlc3B1LnNyYyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsIHR4X2ZyYWdfbnVtLCByY3R4LVx1MDAzZWdmcCk7XG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMjA4LVx0aWYgKHVubGlrZWx5KCFtc3NnLVx1MDAzZXNwdS5zcmMpKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYz01MjQ9c3B1X2FoYXNoX3J4X3NnX2NyZWF0ZShzdHJ1Y3QgYnJjbV9tZXNzYWdlICptc3NnLFxuLS1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy01MzItXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM6NTMzOlx0bXNzZy1cdTAwM2VzcHUuZHN0ID0ga21hbGxvY19vYmpzKHN0cnVjdCBzY2F0dGVybGlzdCwgcnhfZnJhZ19udW0sIHJjdHgtXHUwMDNlZ2ZwKTtcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy01MzQtXHRpZiAoIW1zc2ctXHUwMDNlc3B1LmRzdClcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM9NTc1PXNwdV9haGFzaF90eF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtNTg2LVxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jOjU4NzpcdG1zc2ctXHUwMDNlc3B1LnNyYyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsIHR4X2ZyYWdfbnVtLCByY3R4LVx1MDAzZWdmcCk7XG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtNTg4LVx0aWYgKCFtc3NnLVx1MDAzZXNwdS5zcmMpXG4tLVxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jPTEwMzg9c3RhdGljIGludCBzcHVfYWVhZF9yeF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMTA3NS1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYzoxMDc2Olx0bXNzZy1cdTAwM2VzcHUuZHN0ID0ga21hbGxvY19vYmpzKHN0cnVjdCBzY2F0dGVybGlzdCwgcnhfZnJhZ19udW0sIHJjdHgtXHUwMDNlZ2ZwKTtcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xMDc3LVx0aWYgKCFtc3NnLVx1MDAzZXNwdS5kc3QpXG4tLVxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jPTExNTc9c3RhdGljIGludCBzcHVfYWVhZF90eF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcbi0tXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMTE3Ni1cbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYzoxMTc3Olx0bXNzZy1cdTAwM2VzcHUuc3JjID0ga21hbGxvY19vYmpzKHN0cnVjdCBzY2F0dGVybGlzdCwgdHhfZnJhZ19udW0sIHJjdHgtXHUwMDNlZ2ZwKTtcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xMTc4LVx0aWYgKCFtc3NnLVx1MDAzZXNwdS5zcmMpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmM9MzA2PXN0YXRpYyBzdHJ1Y3Qgc2xhX2J1ZmZlcl9oZHIgKnNsYV9idWZmZXJfbWFwKHN0cnVjdCBzbGFfYWRkcl90IHNsYSlcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy0zMzItXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYzozMzM6XHRcdHN0cnVjdCBwYWdlICoqcHAgPSBrbWFsbG9jX29ianMocHBbMF0sIG5wYWdlcyk7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy0zMzQtXG4tLVxuZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3RlbGVtZXRyeS5jPTU4PXN0YXRpYyBpbnQgYWRmX3RsX2FsbG9jX21lbShzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2KVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NzkwCgkJCQkJCQlvdXRwdXQ6IDI3NQoJCQkJCQkJdGhvdWdodHM6IDY2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtNU0FOIEltcGFjdCBvZiBhIHZob3N0LXZzb2NrIE9wdGltaXphdGlvbiBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgYGttYWxsb2Nfb2Jqc2AuIEhtbSwgdGhhdCYjMzk7cyBub3QgdGhlIHN0YW5kYXJkIGBrbWFsbG9jX2FycmF5YCwgc28gaXQmIzM5O3MgcHJvYmFibHkgYSBjdXN0b20gbWFjcm8uIEkgbmVlZCB0byBjaGVjayB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBPaCwgaXQmIzM5O3MgZGVwcmVjYXRlZCEgSW50ZXJlc3RpbmcuIExpbmUgNTE5IG9mIGBkcml2ZXJzL3Zob3N0L3Zob3N0LmNgIGxvb2tzIHJlbGV2YW50OiBgdnEtJmd0O2hlYWRzID0ga21hbGxvY19hcnJheShkZXYtJmd0O2lvdl9saW1pdCwgc2l6ZW9mKCp2cS0mZ3Q7aGVhZHMpLCBHRlBfS0VSTkVMKTtgIFRoZSBncmVwIG91dHB1dCBzaG93cyB0aGUgb3JpZ2luYWwgY29kZSB1c2VkIGBrbWFsbG9jX29ianNgLCB3aGljaCBpcyBsaWtlbHkgYSBtYWNybyBzaW1pbGFyIHRvIGBrbWFsbG9jX2FycmF5YCwgYWxsb2NhdGluZyBhbiBhcnJheSBvZiBgZGV2LSZndDtpb3ZfbGltaXRgIGVsZW1lbnRzLiBBbmQgeWVzLCB0aGUgYHVzZWRfbGltaXRgIGlzIGluZGVlZCBib3VuZGVkIGJ5IGBkZXYtJmd0O2lvdl9saW1pdGAsIHNvIHRoZSBhbGxvY2F0aW9uIGlzIHN1ZmZpY2llbnQuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciBLTVNBTiB2ZXJzdXMgS0FTQU4uIEtNU0FOIGlzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgd2hpbGUgS0FTQU4gaXMgZm9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGJhdGNoaW5nIHVzZWQgZWxlbWVudCB1cGRhdGVzLCBzcGVjaWZpY2FsbHkgcG9wdWxhdGluZyB0aGUgYHZxLSZndDtoZWFkc2AgYXJyYXkgd2l0aCBgdXNlZC0mZ3Q7aWRgIGFuZCBgdXNlZC0mZ3Q7bGVuYC4gQm90aCBmaWVsZHMgYXJlIGluaXRpYWxpemVkLiBBbmQgZ29vZCwgdGhlcmUmIzM5O3Mgbm8gcGFkZGluZyBpbiB0aGUgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gLiBUaGVuLCBgdmhvc3RfcHV0X3VzZWRgIGNvcGllcyB0aGlzIGFycmF5IHRvIHVzZXIgc3BhY2UsIGNhbGxpbmcgYHZob3N0X2NvcHlfdG9fdXNlcmAuIFNpbmNlIHRoZSBtZW1vcnkgYmVpbmcgY29waWVkICppcyogZnVsbHkgaW5pdGlhbGl6ZWQsIHRoZXJlJiMzOTtzIG5vIHdheSB0byBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4KClNvLCBoZXJlJiMzOTtzIHRoZSByZWFzb25pbmcgdG8gcHV0IGRvd24uIFRoZSBwYXRjaCBpcyBvcHRpbWl6aW5nIHRoZSB2aXJ0aW8gdnNvY2sgdHJhbnNtaXNzaW9uIHBhdGggYnkgYmF0Y2hpbmcgdXBkYXRlcy4gSXQgaW50cm9kdWNlcyBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIHRvIHBvcHVsYXRlIGFuIGFycmF5IChgdnEtJmd0O2hlYWRzYCkgd2l0aCBgc3RydWN0IHZyaW5nX3VzZWRfZWxlbWAgYW5kIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCB0byBmbHVzaCB0byBndWVzdCBtZW1vcnkuIFRoZSBgc3RydWN0IHZyaW5nX3VzZWRfZWxlbWAgY29uc2lzdHMgb2YgdHdvIDMyLWJpdCBpbnRlZ2VycywgYGlkYCBhbmQgYGxlbmAsIHdpdGggbm8gcGFkZGluZy4gVGhlc2UgZmllbGRzIGFyZSAqZXhwbGljaXRseSogaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBjb3B5LiBUaGUgYXJyYXkgYm91bmRzIGFyZSBhbHNvIGNoZWNrZWQgYWdhaW5zdCBgZGV2LSZndDtpb3ZfbGltaXRgLiBUaGlzIGNvbXBsZXRlbHkgZWxpbWluYXRlcyBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFraW5nIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IG5lZWQgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuIEl0JiMzOTtzIHNhZmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyB0aGUgdmlydGlvIHZzb2NrIHRyYW5zbWlzc2lvbiBwYXRoIGJ5IGJhdGNoaW5nIHVzZWQgZWxlbWVudCB1cGRhdGVzLiBJdCBpbnRyb2R1Y2VzIGB2aG9zdF92c29ja19hZGRfdXNlZGAgdG8gcG9wdWxhdGUgYW4gYXJyYXkgb2YgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIChgdnEtXHUwMDNlaGVhZHNgKSBhbmQgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgIHRvIGZsdXNoIHRoZW0gdG8gdGhlIGd1ZXN0IG1lbW9yeSB2aWEgYHZob3N0X2FkZF91c2VkX25gLlxuVGhlIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCBjb25zaXN0cyBvZiB0d28gMzItYml0IGludGVnZXJzIChgaWRgIGFuZCBgbGVuYCkgYW5kIGNvbnRhaW5zIG5vIHBhZGRpbmcgYnl0ZXMuIEJvdGggZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGB2aG9zdF92c29ja19hZGRfdXNlZGAgYmVmb3JlIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIChndWVzdCBtZW1vcnkpIHZpYSBgdmhvc3RfcHV0X3VzZWRgIGFuZCBgdmhvc3RfY29weV90b191c2VyYC5cblNpbmNlIHRoZSBtZW1vcnkgYmVpbmcgY29waWVkIGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCB0aGVyZSBhcmUgbm8gcGFkZGluZyBieXRlcywgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgYm91bmRzIG9mIHRoZSBhcnJheSBhcmUgYWxzbyBwcm9wZXJseSBjaGVja2VkIGFnYWluc3QgYGRldi1cdTAwM2Vpb3ZfbGltaXRgLCBwcmV2ZW50aW5nIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW55d2F5KS5cblRodXMsIHRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgdGhlIHZpcnRpbyB2c29jayB0cmFuc21pc3Npb24gcGF0aCBieSBiYXRjaGluZyB1c2VkIGVsZW1lbnQgdXBkYXRlcy4gSXQgaW50cm9kdWNlcyBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIHRvIHBvcHVsYXRlIGFuIGFycmF5IG9mIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCAoYHZxLVx1MDAzZWhlYWRzYCkgYW5kIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCB0byBmbHVzaCB0aGVtIHRvIHRoZSBndWVzdCBtZW1vcnkgdmlhIGB2aG9zdF9hZGRfdXNlZF9uYC5cblRoZSBgc3RydWN0IHZyaW5nX3VzZWRfZWxlbWAgY29uc2lzdHMgb2YgdHdvIDMyLWJpdCBpbnRlZ2VycyAoYGlkYCBhbmQgYGxlbmApIGFuZCBjb250YWlucyBubyBwYWRkaW5nIGJ5dGVzLiBCb3RoIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIGJlZm9yZSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSAoZ3Vlc3QgbWVtb3J5KSB2aWEgYHZob3N0X3B1dF91c2VkYCBhbmQgYHZob3N0X2NvcHlfdG9fdXNlcmAuXG5TaW5jZSB0aGUgbWVtb3J5IGJlaW5nIGNvcGllZCBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgdGhlcmUgYXJlIG5vIHBhZGRpbmcgYnl0ZXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlIGJvdW5kcyBvZiB0aGUgYXJyYXkgYXJlIGFsc28gcHJvcGVybHkgY2hlY2tlZCBhZ2FpbnN0IGBkZXYtXHUwMDNlaW92X2xpbWl0YCwgcHJldmVudGluZyBhbnkgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyAod2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFueXdheSkuXG5UaHVzLCB0aGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjoyOToyMS4wMjAxNTU1NTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDgxNjMzNjcyNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfVlNPQ0tcIixcbiAgICBcIlZTT0NLRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0XCIsXG4gICAgXCJ2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyB0aGUgdmlydGlvIHZzb2NrIHRyYW5zbWlzc2lvbiBwYXRoIGJ5IGJhdGNoaW5nIHVzZWQgZWxlbWVudCB1cGRhdGVzLiBJdCBpbnRyb2R1Y2VzIGB2aG9zdF92c29ja19hZGRfdXNlZGAgdG8gcG9wdWxhdGUgYW4gYXJyYXkgb2YgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIChgdnEtXFx1MDAzZWhlYWRzYCkgYW5kIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCB0byBmbHVzaCB0aGVtIHRvIHRoZSBndWVzdCBtZW1vcnkgdmlhIGB2aG9zdF9hZGRfdXNlZF9uYC5cXG5UaGUgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIGNvbnNpc3RzIG9mIHR3byAzMi1iaXQgaW50ZWdlcnMgKGBpZGAgYW5kIGBsZW5gKSBhbmQgY29udGFpbnMgbm8gcGFkZGluZyBieXRlcy4gQm90aCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYHZob3N0X3Zzb2NrX2FkZF91c2VkYCBiZWZvcmUgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UgKGd1ZXN0IG1lbW9yeSkgdmlhIGB2aG9zdF9wdXRfdXNlZGAgYW5kIGB2aG9zdF9jb3B5X3RvX3VzZXJgLlxcblNpbmNlIHRoZSBtZW1vcnkgYmVpbmcgY29waWVkIGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCB0aGVyZSBhcmUgbm8gcGFkZGluZyBieXRlcywgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgYm91bmRzIG9mIHRoZSBhcnJheSBhcmUgYWxzbyBwcm9wZXJseSBjaGVja2VkIGFnYWluc3QgYGRldi1cXHUwMDNlaW92X2xpbWl0YCwgcHJldmVudGluZyBhbnkgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyAod2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFueXdheSkuXFxuVGh1cywgdGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmhvc3QgdnNvY2sgZHJpdmVyIHRvIGJhdGNoIHVzZWQgZWxlbWVudHMgd2hlbiBzZW5kaW5nIHBhY2tldHMgdG8gdGhlIGd1ZXN0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgdmhvc3QgdnNvY2sgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjI5OjIxLjAyMDE2NDM0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxNDA4ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTg3OWFiZjQ0M2M0YWY5NjhiZmZkYjUxMDU4NTMwNTI0YjFiMzQwMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyNyAwNjoyOToyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmMgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcXG5pbmRleCA5YWFhYjZiYjgwNjFjLi5kODA1MGNjYTI3NWRhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmhvc3QvdnNvY2suY1xcbisrKyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suY1xcbkBAIC0xMDMsMTIgKzEwMywzNyBAQCBzdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfaGFzX3JlbW90ZV9jaWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgdTMyIGNpZClcXG4gXFx0cmV0dXJuIGZvdW5kO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCB2aG9zdF92c29ja19mbHVzaF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgKnVzZWRfY291bnQpXFxuK3tcXG4rXFx0aWYgKCEqdXNlZF9jb3VudClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0dmhvc3RfYWRkX3VzZWRfbih2cSwgdnEtXFx1MDAzZWhlYWRzLCB2cS1cXHUwMDNlbmhlYWRzLCAqdXNlZF9jb3VudCk7XFxuK1xcdCp1c2VkX2NvdW50ID0gMDtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2FkZF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbitcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50ICp1c2VkX2NvdW50LFxcbitcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IGhlYWQsIHVuc2lnbmVkIGludCBsZW4pXFxuK3tcXG4rXFx0c3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqdXNlZCA9IFxcdTAwMjZ2cS1cXHUwMDNlaGVhZHNbKnVzZWRfY291bnRdO1xcbitcXG4rXFx0dXNlZC1cXHUwMDNlaWQgPSBjcHVfdG9fdmhvc3QzMih2cSwgaGVhZCk7XFxuK1xcdHVzZWQtXFx1MDAzZWxlbiA9IGNwdV90b192aG9zdDMyKHZxLCBsZW4pO1xcbitcXHR2cS1cXHUwMDNlbmhlYWRzWyp1c2VkX2NvdW50XSA9IDE7XFxuK1xcdCgqdXNlZF9jb3VudCkrKztcXG4rfVxcbitcXG4gc3RhdGljIHZvaWRcXG4gdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp0eF92cSA9IFxcdTAwMjZ2c29jay1cXHUwMDNldnFzW1ZTT0NLX1ZRX1RYXTtcXG4gXFx0aW50IHBrdHMgPSAwLCB0b3RhbF9sZW4gPSAwO1xcbitcXHR1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCA9IDA7XFxuK1xcdHVuc2lnbmVkIGludCB1c2VkX2xpbWl0O1xcbiBcXHRib29sIGFkZGVkID0gZmFsc2U7XFxuIFxcdGJvb2wgcmVzdGFydF90eCA9IGZhbHNlO1xcbiBcXG5AQCAtMTIwLDYgKzE0NSwxMiBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcXG4gXFx0aWYgKCF2cV9tZXRhX3ByZWZldGNoKHZxKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbitcXHR1c2VkX2xpbWl0ID0gbWluX3QodW5zaWduZWQgaW50LCB2cS1cXHUwMDNlbnVtLFxcbitcXHRcXHRcXHQgICBtaW5fdCh1bnNpZ25lZCBpbnQsIHZxLVxcdTAwM2VkZXYtXFx1MDAzZWlvdl9saW1pdCxcXG4rXFx0XFx0XFx0XFx0IHZxLVxcdTAwM2VkZXYtXFx1MDAzZXdlaWdodCkpO1xcbitcXHRpZiAodW5saWtlbHkoIXVzZWRfbGltaXQpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuIFxcdC8qIEF2b2lkIGZ1cnRoZXIgdm1leGl0cywgd2UncmUgYWxyZWFkeSBwcm9jZXNzaW5nIHRoZSB2aXJ0cXVldWUgKi9cXG4gXFx0dmhvc3RfZGlzYWJsZV9ub3RpZnkoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHZxKTtcXG4gXFxuQEAgLTEzNCw5ICsxNjUsMTMgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXFxuIFxcdFxcdHUzMiBvZmZzZXQ7XFxuIFxcdFxcdGludCBoZWFkO1xcbiBcXG4rXFx0XFx0aWYgKHVzZWRfY291bnQgPT0gdXNlZF9saW1pdClcXG4rXFx0XFx0XFx0YWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgXFx1MDAyNnVzZWRfY291bnQpO1xcbitcXG4gXFx0XFx0c2tiID0gdmlydGlvX3Zzb2NrX3NrYl9kZXF1ZXVlKFxcdTAwMjZ2c29jay1cXHUwMDNlc2VuZF9wa3RfcXVldWUpO1xcbiBcXG4gXFx0XFx0aWYgKCFza2IpIHtcXG4rXFx0XFx0XFx0YWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgXFx1MDAyNnVzZWRfY291bnQpO1xcbiBcXHRcXHRcXHR2aG9zdF9lbmFibGVfbm90aWZ5KFxcdTAwMjZ2c29jay1cXHUwMDNlZGV2LCB2cSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuQEAgLTE1Myw2ICsxODgsNyBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcXG4gXFx0XFx0XFx0LyogV2UgY2Fubm90IGZpbmlzaCB5ZXQgaWYgbW9yZSBidWZmZXJzIHNudWNrIGluIHdoaWxlXFxuIFxcdFxcdFxcdCAqIHJlLWVuYWJsaW5nIG5vdGlmeS5cXG4gXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIFxcdTAwMjZ1c2VkX2NvdW50KTtcXG4gXFx0XFx0XFx0aWYgKHVubGlrZWx5KHZob3N0X2VuYWJsZV9ub3RpZnkoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHZxKSkpIHtcXG4gXFx0XFx0XFx0XFx0dmhvc3RfZGlzYWJsZV9ub3RpZnkoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHZxKTtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTIzMCw4ICsyNjYsOCBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcXG4gXFx0XFx0ICovXFxuIFxcdFxcdHZpcnRpb190cmFuc3BvcnRfZGVsaXZlcl90YXBfcGt0KHNrYik7XFxuIFxcbi1cXHRcXHR2aG9zdF9hZGRfdXNlZCh2cSwgaGVhZCwgc2l6ZW9mKCpoZHIpICsgcGF5bG9hZF9sZW4pO1xcbi1cXHRcXHRhZGRlZCA9IHRydWU7XFxuK1xcdFxcdHZob3N0X3Zzb2NrX2FkZF91c2VkKHZxLCBcXHUwMDI2dXNlZF9jb3VudCwgaGVhZCxcXG4rXFx0XFx0XFx0XFx0ICAgICBzaXplb2YoKmhkcikgKyBwYXlsb2FkX2xlbik7XFxuIFxcbiBcXHRcXHRWSVJUSU9fVlNPQ0tfU0tCX0NCKHNrYiktXFx1MDAzZW9mZnNldCArPSBwYXlsb2FkX2xlbjtcXG4gXFx0XFx0dG90YWxfbGVuICs9IHBheWxvYWRfbGVuO1xcbkBAIC0yNjQsNiArMzAwLDcgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXFxuIFxcdFxcdFxcdHZpcnRpb190cmFuc3BvcnRfY29uc3VtZV9za2Jfc2VudChza2IsIHRydWUpO1xcbiBcXHRcXHR9XFxuIFxcdH0gd2hpbGUobGlrZWx5KCF2aG9zdF9leGNlZWRzX3dlaWdodCh2cSwgKytwa3RzLCB0b3RhbF9sZW4pKSk7XFxuK1xcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIFxcdTAwMjZ1c2VkX2NvdW50KTtcXG4gXFx0aWYgKGFkZGVkKVxcbiBcXHRcXHR2aG9zdF9zaWduYWwoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHZxKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjI5OjIxLjUwMjIzNTQ5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUyNTYxODczNjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1ZTT0NLXCIsXG4gICAgXCJWU09DS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdFwiLFxuICAgIFwidmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZob3N0IHZzb2NrIGRyaXZlciB0byBiYXRjaCB1c2VkIGVsZW1lbnRzIHdoZW4gc2VuZGluZyBwYWNrZXRzIHRvIHRoZSBndWVzdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZob3N0IHZzb2NrIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ODc5YWJmNDQzYzRhZjk2OGJmZmRiNTEwNTg1MzA1MjRiMWIzNDAxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMDY6Mjk6MjAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmMgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbmluZGV4IDlhYWFiNmJiODA2MWMuLmQ4MDUwY2NhMjc1ZGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbisrKyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suY1xuQEAgLTEwMywxMiArMTAzLDM3IEBAIHN0YXRpYyBib29sIHZob3N0X3RyYW5zcG9ydF9oYXNfcmVtb3RlX2NpZChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLCB1MzIgY2lkKVxuIFx0cmV0dXJuIGZvdW5kO1xuIH1cbiBcbitzdGF0aWMgYm9vbCB2aG9zdF92c29ja19mbHVzaF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgaW50ICp1c2VkX2NvdW50KVxuK3tcbitcdGlmICghKnVzZWRfY291bnQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHZob3N0X2FkZF91c2VkX24odnEsIHZxLVx1MDAzZWhlYWRzLCB2cS1cdTAwM2VuaGVhZHMsICp1c2VkX2NvdW50KTtcbitcdCp1c2VkX2NvdW50ID0gMDtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgdm9pZCB2aG9zdF92c29ja19hZGRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbitcdFx0XHRcdCB1bnNpZ25lZCBpbnQgKnVzZWRfY291bnQsXG4rXHRcdFx0XHQgdW5zaWduZWQgaW50IGhlYWQsIHVuc2lnbmVkIGludCBsZW4pXG4re1xuK1x0c3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqdXNlZCA9IFx1MDAyNnZxLVx1MDAzZWhlYWRzWyp1c2VkX2NvdW50XTtcbitcbitcdHVzZWQtXHUwMDNlaWQgPSBjcHVfdG9fdmhvc3QzMih2cSwgaGVhZCk7XG4rXHR1c2VkLVx1MDAzZWxlbiA9IGNwdV90b192aG9zdDMyKHZxLCBsZW4pO1xuK1x0dnEtXHUwMDNlbmhlYWRzWyp1c2VkX2NvdW50XSA9IDE7XG4rXHQoKnVzZWRfY291bnQpKys7XG4rfVxuK1xuIHN0YXRpYyB2b2lkXG4gdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRcdFx0ICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxuIHtcbiBcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnR4X3ZxID0gXHUwMDI2dnNvY2stXHUwMDNldnFzW1ZTT0NLX1ZRX1RYXTtcbiBcdGludCBwa3RzID0gMCwgdG90YWxfbGVuID0gMDtcbitcdHVuc2lnbmVkIGludCB1c2VkX2NvdW50ID0gMDtcbitcdHVuc2lnbmVkIGludCB1c2VkX2xpbWl0O1xuIFx0Ym9vbCBhZGRlZCA9IGZhbHNlO1xuIFx0Ym9vbCByZXN0YXJ0X3R4ID0gZmFsc2U7XG4gXG5AQCAtMTIwLDYgKzE0NSwxMiBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcbiBcdGlmICghdnFfbWV0YV9wcmVmZXRjaCh2cSkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0dXNlZF9saW1pdCA9IG1pbl90KHVuc2lnbmVkIGludCwgdnEtXHUwMDNlbnVtLFxuK1x0XHRcdCAgIG1pbl90KHVuc2lnbmVkIGludCwgdnEtXHUwMDNlZGV2LVx1MDAzZWlvdl9saW1pdCxcbitcdFx0XHRcdCB2cS1cdTAwM2VkZXYtXHUwMDNld2VpZ2h0KSk7XG4rXHRpZiAodW5saWtlbHkoIXVzZWRfbGltaXQpKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdC8qIEF2b2lkIGZ1cnRoZXIgdm1leGl0cywgd2UncmUgYWxyZWFkeSBwcm9jZXNzaW5nIHRoZSB2aXJ0cXVldWUgKi9cbiBcdHZob3N0X2Rpc2FibGVfbm90aWZ5KFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIFxuQEAgLTEzNCw5ICsxNjUsMTMgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRcdHUzMiBvZmZzZXQ7XG4gXHRcdGludCBoZWFkO1xuIFxuK1x0XHRpZiAodXNlZF9jb3VudCA9PSB1c2VkX2xpbWl0KVxuK1x0XHRcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIFx1MDAyNnVzZWRfY291bnQpO1xuK1xuIFx0XHRza2IgPSB2aXJ0aW9fdnNvY2tfc2tiX2RlcXVldWUoXHUwMDI2dnNvY2stXHUwMDNlc2VuZF9wa3RfcXVldWUpO1xuIFxuIFx0XHRpZiAoIXNrYikge1xuK1x0XHRcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIFx1MDAyNnVzZWRfY291bnQpO1xuIFx0XHRcdHZob3N0X2VuYWJsZV9ub3RpZnkoXHUwMDI2dnNvY2stXHUwMDNlZGV2LCB2cSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC0xNTMsNiArMTg4LDcgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRcdFx0LyogV2UgY2Fubm90IGZpbmlzaCB5ZXQgaWYgbW9yZSBidWZmZXJzIHNudWNrIGluIHdoaWxlXG4gXHRcdFx0ICogcmUtZW5hYmxpbmcgbm90aWZ5LlxuIFx0XHRcdCAqL1xuK1x0XHRcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIFx1MDAyNnVzZWRfY291bnQpO1xuIFx0XHRcdGlmICh1bmxpa2VseSh2aG9zdF9lbmFibGVfbm90aWZ5KFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpKSkge1xuIFx0XHRcdFx0dmhvc3RfZGlzYWJsZV9ub3RpZnkoXHUwMDI2dnNvY2stXHUwMDNlZGV2LCB2cSk7XG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC0yMzAsOCArMjY2LDggQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRcdCAqL1xuIFx0XHR2aXJ0aW9fdHJhbnNwb3J0X2RlbGl2ZXJfdGFwX3BrdChza2IpO1xuIFxuLVx0XHR2aG9zdF9hZGRfdXNlZCh2cSwgaGVhZCwgc2l6ZW9mKCpoZHIpICsgcGF5bG9hZF9sZW4pO1xuLVx0XHRhZGRlZCA9IHRydWU7XG4rXHRcdHZob3N0X3Zzb2NrX2FkZF91c2VkKHZxLCBcdTAwMjZ1c2VkX2NvdW50LCBoZWFkLFxuK1x0XHRcdFx0ICAgICBzaXplb2YoKmhkcikgKyBwYXlsb2FkX2xlbik7XG4gXG4gXHRcdFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQgKz0gcGF5bG9hZF9sZW47XG4gXHRcdHRvdGFsX2xlbiArPSBwYXlsb2FkX2xlbjtcbkBAIC0yNjQsNiArMzAwLDcgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRcdFx0dmlydGlvX3RyYW5zcG9ydF9jb25zdW1lX3NrYl9zZW50KHNrYiwgdHJ1ZSk7XG4gXHRcdH1cbiBcdH0gd2hpbGUobGlrZWx5KCF2aG9zdF9leGNlZWRzX3dlaWdodCh2cSwgKytwa3RzLCB0b3RhbF9sZW4pKSk7XG4rXHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCBcdTAwMjZ1c2VkX2NvdW50KTtcbiBcdGlmIChhZGRlZClcbiBcdFx0dmhvc3Rfc2lnbmFsKFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6Mjk6MjEuNTAyMjM2NTQxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM0OTM2MDA0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZob3N0IHZzb2NrIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGRyaXZlcnMvdmhvc3QvdnNvY2suY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAuIEluc3RlYWQgb2YgdGhlIG9sZCwgcGVyLXBhY2tldCBgdmhvc3RfYWRkX3VzZWRgIGFwcHJvYWNoLCB0aGV5J3JlIG5vdyBiYXRjaGluZyB3aXRoIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCBhbmQgYHZob3N0X3Zzb2NrX2FkZF91c2VkYC4gVGhhdCdzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24sIGZvciBzdXJlIOKAkyBwb3RlbnRpYWxseSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYW5kIGl0J2xsIGJlIHdvcnRoIGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvbiB0aGUgdXNlZCByaW5nIGJ1ZmZlci4gV2UgbWlnaHQgaGF2ZSBzb21lIG9yZGVyaW5nIHJlcXVpcmVtZW50cyBvciBzb21lIGxvY2tpbmcgY29uY2VybnMgYXMgYSByZXN1bHQuXG5cblRoZSBuZXh0IGltbWVkaWF0ZSBzdGVwIGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBiYXRjaGluZyBjaGFuZ2UgaXMgY29uZGl0aW9uYWwgb24gYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLCBvciBpZiBpdCdzIGFwcGxpZWQgdW5pdmVyc2FsbHkuIEkgd2lsbCBjcm9zcy1yZWZlcmVuY2UgdGhlIEtjb25maWcgZm9yIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgIHRvIGNsYXJpZnkgYW55IGRlcGVuZGVuY2llcyBvciBidWlsZCBvcHRpb25zIHRoYXQgYWZmZWN0IHRoaXMgY29kZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDU2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6Mjk6MjkuODUxNTk5MDg2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTQzNDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92c29jay5jPTEyOT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMzA6dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXFxuZHJpdmVycy92aG9zdC92c29jay5jLTEzMS1cXHRcXHRcXHQgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MzE0PXN0YXRpYyB2b2lkIHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTMyMS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzIyOlxcdHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCh2c29jaywgdnEpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMjMtfVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTMyNj12aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTM0OS1cXHQgKiBhbGwgdGhlIG91dGNvbWVzIGNvdmVyZWQ6IGlmIHRoZSBiYWNrZW5kIGJlY29tZXMgTlVMTCByaWdodCBhZnRlciB0aGUgY2hlY2ssXFxuZHJpdmVycy92aG9zdC92c29jay5jOjM1MDpcXHQgKiB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QoKSB3aWxsIGNoZWNrIGl0IHVuZGVyIHRoZSBtdXRleCBhbnl3YXkuXFxuZHJpdmVycy92aG9zdC92c29jay5jLTM1MS1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz02Mzg9c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfaGFuZGxlX3J4X2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjQ0LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo2NDU6XFx0dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHZzb2NrLCB2cSk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTY0Ni19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjI5OjI5Ljg5NDc0NTQ5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMzYzMjQ4NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIE1vZHVsZSBJbnZlc3RpZ2F0aW9uOiB2aG9zdF92c29jayoqXG5cbk9rYXksIHNvIHRoZSBpbnZlc3RpZ2F0aW9uIGJlZ2lucy4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgXCJXaGF0J3MgdGhlIGRyaXZlcj9cIiBUaGUgdGV4dCBpZGVudGlmaWVzIGl0IGFzIGB2aG9zdF92c29ja2AuIE1ha2VzIHNlbnNlLCBJJ3ZlIHdvcmtlZCB3aXRoIHZpcnRpbyBhbmQgdmhvc3QgYmVmb3JlLiBCdXQgSSBuZWVkIG1vcmUgY29uY3JldGUgaW5mb3JtYXRpb24uIFRpbWUgdG8gZGVsdmUgaW50byB0aGUga2VybmVsJ3MgYnVpbGQgY29uZmlndXJhdGlvbi4gSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGBLY29uZmlnYCBmaWxlIGFzc29jaWF0ZWQgd2l0aCBgdmhvc3RfdnNvY2tgLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgZXNzZW50aWFsIG1ldGFkYXRhOiBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgY29uZmlndXJhdGlvbnMsIGFueSByZWxldmFudCBkb2N1bWVudGF0aW9uIHJlZmVyZW5jZXMsIGFuZCBnZW5lcmFsbHksIHRoZSBjb250ZXh0IG9mIGhvdyB0aGlzIG1vZHVsZSBmaXRzIGludG8gdGhlIGJyb2FkZXIga2VybmVsIGVjb3N5c3RlbS4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGZlYXR1cmVzLCBidWlsZCBvcHRpb25zLCBhbmQgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODU1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6Mjk6MzUuOTMxMDcyNDg2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTU3NjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZzb2NrLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L01ha2VmaWxlPTY9dmhvc3Rfc2NzaS15IDo9IHNjc2kub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtNy1cXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1ZIT1NUX1ZTT0NLKSArPSB2aG9zdF92c29jay5vXFxuZHJpdmVycy92aG9zdC9NYWtlZmlsZTo5OnZob3N0X3Zzb2NrLXkgOj0gdnNvY2sub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjI5OjM1Ljk3NjIzNDkyNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTM2ODA3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSdtIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSB2aG9zdF92c29jayBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBDT05GSUdfVkhPU1RfVlNPQ0tgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBJIG5lZWQgdG8gZm9jdXMgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGl0cyBwdXJwb3NlLCBhbmQgcG90ZW50aWFsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGZlYXR1cmVzLiBNeSB1c3VhbCBhcHByb2FjaCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSwgc28gSSdsbCBnbyBjaGVjayBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBmb3IgdGhlIGBWSE9TVF9WU09DS2Agb3B0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGFuZCBjb250ZXh0IGZvciB0aGlzIHNldHRpbmcgc2hvdWxkIHJlc2lkZS4gSXQncyB0aGUgc3RhbmRhcmQgd2F5IHRvIHRyYWNlIHRoZSBjb25maWcgb3B0aW9ucyBpbiB0aGUga2VybmVsLCBzbyB0aGlzIGlzIHdoZXJlIEknbGwgYmVnaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNzUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjoyOTozOS41Mjk5MTc0MDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwNTY2MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZIT1NUX1ZTT0NLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWc9NDY9Y29uZmlnIFZIT1NUX1NDU0lcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01NS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTY6Y29uZmlnIFZIT1NUX1ZTT0NLXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU3LVxcdHRyaXN0YXRlIFxcXCJ2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjoyOTozOS41NzI5Nzc3NzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDAzOTA3NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoaXMuIExldCdzIHN0YXJ0IGJyZWFraW5nIHRoaXMgZG93bi5cblxuKipVbnBhY2tpbmcgdGhlIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIG15IGluaXRpYWwgcmVhY3Rpb24gaXMgdG8gZmlndXJlIG91dCB0aGUgY3JpdGljYWwgZGVwZW5kZW5jaWVzIGF0IHBsYXkgaGVyZS4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGEgc3VyZmFjZS1sZXZlbCB1bmRlcnN0YW5kaW5nOyBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNvcmUgZWxlbWVudHMgdGhhdCB1bmRlcnBpbiB0aGUgc2l0dWF0aW9uLiBXaGF0IGFyZSB0aGUgdmFyaWFibGVzIGFuZCBjb25kaXRpb25zIHRoYXQgZHJpdmUgdGhpcz8gQXJlIHRoZXJlIGFueSBoaWRkZW4gYXNzdW1wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGFkZHJlc3NlZD8gTXkgZm9jdXMgaXMgdG8gY3JlYXRlIGEgc3RydWN0dXJlIHRvIGJ1aWxkIGEgcm9idXN0IG1vZGVsIHRvIGV4cGxhaW4gdGhpcyBwcm9ibGVtLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQgdG8gc2VlIHRoZSBiaWdnZXIgcGljdHVyZSwgYW5kIHRoYXQncyB0aGUgb25seSBwbGFjZSB0byBzdGFydCB0byBnbyBkZWVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDg5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjoyOTo0My45NzY4ODc3MzRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcxMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU2LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDU2OlxcdGNvbmZpZyBWSE9TVF9WU09DS1xcbiAgNTc6XFx0XFx0dHJpc3RhdGUgXFxcInZob3N0IHZpcnRpby12c29jayBkcml2ZXJcXFwiXFxuICA1ODpcXHRcXHRkZXBlbmRzIG9uIFZTT0NLRVRTIFxcdTAwMjZcXHUwMDI2IEVWRU5URkRcXG4gIDU5OlxcdFxcdHNlbGVjdCBWSE9TVFxcbiAgNjA6XFx0XFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cXG4gIDYxOlxcdFxcdGRlZmF1bHQgblxcbiAgNjI6XFx0XFx0aGVscFxcbiAgNjM6XFx0XFx0VGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gdGhlIGhvc3Qga2VybmVsIHRvIHByb3ZpZGUgQUZfVlNPQ0tcXG4gIDY0OlxcdFxcdHNvY2tldHMgZm9yIGNvbW11bmljYXRpbmcgd2l0aCBndWVzdHMuICBUaGUgZ3Vlc3RzIG11c3QgaGF2ZSB0aGVcXG4gIDY1OlxcdFxcdHZpcnRpb190cmFuc3BvcnQua28gZHJpdmVyIGxvYWRlZCB0byB1c2UgdGhlIHZpcnRpby12c29jayBkZXZpY2UuXFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcXG4gIDY4OlxcdFxcdHZob3N0X3Zzb2NrLlxcbiAgNjk6XFx0XFxuICA3MDpcXHRjb25maWcgVkhPU1RfVkRQQVxcbiAgNzE6XFx0XFx0dHJpc3RhdGUgXFxcIlZob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXFxcIlxcbiAgNzI6XFx0XFx0ZGVwZW5kcyBvbiBFVkVOVEZEXFxuICA3MzpcXHRcXHRzZWxlY3QgVkhPU1RcXG4gIDc0OlxcdFxcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcXG4gIDc1OlxcdFxcdGRlcGVuZHMgb24gVkRQQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjoyOTo0My45NzY5NTcxODNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM2ODQ1ODE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgdmhvc3RfdnNvY2tgIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gdGhlIHByZXJlcXVpc2l0ZXM6IGl0IGhpbmdlcyBvbiBgVlNPQ0tFVFNgIGFuZCBgRVZFTlRGRGAsIGFuZCBzcGVjaWZpY2FsbHksIGl0IHRhcmdldHMgdGhlIGBWSE9TVF9WU09DS2AgY29uZmlndXJhdGlvbi4gVGhhdCdzIGdvb2QgdG8ga25vdyDigJMgbmFycm93cyBkb3duIHRoZSBzY29wZSByaWdodCBhd2F5LlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgLiBUaGF0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgZnVuZGFtZW50YWwgdG8gcGFja2V0IHNlbmRpbmcgd2l0aGluIGB2aG9zdF92c29ja2AuIEFuZCB0aGUgcGF0Y2ggaXMgYmF0Y2hpbmcgdGhlIHVzZWQgZWxlbWVudHMgd2l0aGluIHRoaXMgZnVuY3Rpb24uIE1ha2VzIHNlbnNlOyBvcHRpbWl6YXRpb24gaXMgYWx3YXlzIGEgZ29vZCB0aGluZy4gR2l2ZW4gdGhhdCBpdCdzIGluIHRoZSBjb3JlIGtlcm5lbCBsb2dpYyBmb3IgYHZob3N0X3Zzb2NrYCwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJJ2QgZmxhZyBhcyBcIldvcnRoRnV6emluZz10cnVlLlwiIEl0J3MgcmVhY2hhYmxlLCBhbmQgdGhhdCBiYXRjaGluZyBjb3VsZCBpbnRyb2R1Y2UgdW5leHBlY3RlZCBlZGdlIGNhc2VzLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uOiBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCwgb2J2aW91c2x5LCBidXQgYWxzbyBgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZGAgYW5kIGB2aG9zdF92c29ja19hZGRfdXNlZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQuXG5cbldhaXQsIGhvbGQgb24uLi4gdGhvc2UgbGFzdCB0d28gYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBSaWdodCwgcmlnaHQuIFRoYXQgbWVhbnMgdGhleSdyZSBsaWtlbHkgbm90IGludGVuZGVkIGZvciBkaXJlY3QgZXh0ZXJuYWwgdXNlLiBJIHdvbmRlciBpZiB0aGV5J3JlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyPyBMZXQgbWUganVzdCBjaGVjayB0aGUgZGVmaW5pdGlvbnMuLi4gTm9wZSwgdGhleSdyZSBgc3RhdGljIGJvb2xgIGFuZCBgc3RhdGljIHZvaWRgLCBzbyB0aGV5ICpjb3VsZCogYmUgaW5saW5lZC4gQ29tcGlsZXIgb3B0aW1pemF0aW9uIGlzIGFsd2F5cyBhIGZhY3RvciB0byBjb25zaWRlci4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkaXNhc3NlbWJseSB0byBiZSBzdXJlLiBBbHNvLCBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCBpcyBhbHNvIHN0YXRpYywgYnV0IGl0J3MgYSBsYXJnZXIgZnVuY3Rpb24sIHNvIGl0J3MgbGVzcyBsaWtlbHkgdG8gYmUgZnVsbHkgaW5saW5lZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGlkZW50aWZ5ICphbnkqIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHRoYXQgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbmFsaXR5LCBzbyBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBhdHRhY2sgc3VyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk0NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjI5OjUwLjM0NTQxNzE5MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3ODE2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvdnNvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTI5PXN0YXRpYyB2b2lkXFxuZHJpdmVycy92aG9zdC92c29jay5jOjEzMDp2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTMxLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0zMTQ9c3RhdGljIHZvaWQgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzIxLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozMjI6XFx0dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHZzb2NrLCB2cSk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTMyMy19XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MzI2PXZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzQ5LVxcdCAqIGFsbCB0aGUgb3V0Y29tZXMgY292ZXJlZDogaWYgdGhlIGJhY2tlbmQgYmVjb21lcyBOVUxMIHJpZ2h0IGFmdGVyIHRoZSBjaGVjayxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzUwOlxcdCAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS5cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzUxLVxcdCAqL1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTYzOD1zdGF0aWMgdm9pZCB2aG9zdF92c29ja19oYW5kbGVfcnhfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02NDQtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjY0NTpcXHR2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QodnNvY2ssIHZxKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjQ2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6Mjk6NTAuMzkwMjAxNTU5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1NjAwNTg4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjo1NjY1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjoyOTo1OC45NTAyNjIzNjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjgzMzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvdnNvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTMwPXZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTMxMy1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzE0OnN0YXRpYyB2b2lkIHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMTUte1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTczNT1zdGF0aWMgaW50IHZob3N0X3Zzb2NrX2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTc3My1cXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZ2c29jay1cXHUwMDNlc2VuZF9wa3RfcXVldWUpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3NzQ6XFx0dmhvc3Rfd29ya19pbml0KFxcdTAwMjZ2c29jay1cXHUwMDNlc2VuZF9wa3Rfd29yaywgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmspO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03NzUtXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjI5OjU4Ljk5Mzk0ODQ5NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDUyNDg3MTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmc6XG5cbioqRXhhbWluaW5nIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAuIEkgbm90aWNlIGl0J3Mgbm90IGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgdXNhZ2UgaW1wbGljYXRpb25zLiBJcyBpdCBpbnRlbmRlZCB0byBiZSBleHRlcm5hbGx5IHZpc2libGU/IElzIGl0IHBhcnQgb2YgYSBsYXJnZXIsIHNoYXJlZCBpbnRlcmZhY2U/IFdoZXJlIGlzIGl0IGJlaW5nIGNhbGxlZCBmcm9tPyBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHZob3N0IGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM2MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjMwOjAyLjA0NjQzNzgxOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxMDkxNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvdnNvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTMwPXZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTMxMy1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzE0OnN0YXRpYyB2b2lkIHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMTUte1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTMyNT1zdGF0aWMgaW50XFxuZHJpdmVycy92aG9zdC92c29jay5jOjMyNjp2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMjcte1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTQ4Nz1zdGF0aWMgc3RydWN0IHZpcnRpb190cmFuc3BvcnQgdmhvc3RfdHJhbnNwb3J0ID0ge1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTUzOC1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTM5OlxcdC5zZW5kX3BrdCA9IHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdCxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTQwLX07XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9NzM1PXN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzczLVxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNnZzb2NrLVxcdTAwM2VzZW5kX3BrdF9xdWV1ZSk7XFxuZHJpdmVycy92aG9zdC92c29jay5jOjc3NDpcXHR2aG9zdF93b3JrX2luaXQoXFx1MDAyNnZzb2NrLVxcdTAwM2VzZW5kX3BrdF93b3JrLCB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Rfd29yayk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTc3NS1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzA6MDIuMDkyNTUwMTc2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxODcwMjI5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YCBDb2RlIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgIGZ1bmN0aW9uLCBhbmQgaXQncyBhIGJpdCBvZiBhIG1hemUuIEluaXRpYWxseSwgSSB0aG91Z2h0IGl0IHdhcyBzdGF0aWMsIHdoaWNoIHdvdWxkIG1ha2UgaXQgYSBiaXQgdHJpY2tpZXIgdG8gdHJhY2UuIEJ1dCB3YWl0LCBubywgaXQncyBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCB0aGF0J3Mgc3RhdGljLiBUaGF0J3MgZ29vZCB0byBrbm93LiBBbmQgd2hpbGUgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAgKmlzKiBzdGF0aWMsIGl0J3MgYWxzbyBhIHByZXR0eSBoZWZ0eSBmdW5jdGlvbi4gTGlrZWx5LCB0aGUgY29tcGlsZXIgaXNuJ3QgZ29pbmcgdG8gaW5saW5lIGl0LCB3aGljaCBhY3R1YWxseSBoZWxwcyBtZS5cblxuU28sIEknbSBnb2luZyB0byBjZW50ZXIgbXkgYW5hbHlzaXMgb24gYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAgYXMgdGhlIGtleSBzeW1ib2wgdG8gbG9vayBhdCwgYWxvbmcgd2l0aCBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YCDigJMgSSBzaG91bGQga2VlcCB0aGF0IEFQSSBlbnRyeSBwb2ludCBpbiBtaW5kLiBBaCwgeWVzLCB0aGVyZSBpdCBpcyBpbiB0aGUgYHZpcnRpb190cmFuc3BvcnRgIHN0cnVjdDsgYC5zZW5kX3BrdGAgaXMgYXNzaWduZWQgdG8gYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAsIHNvIHRoYXQgY29uZmlybXMgaXQgYXMgdGhlIEFQSS5cblxuQW5kLCBpZiBJJ20gbm90IG1pc3Rha2VuLCBgdmhvc3RfdnNvY2tfaGFuZGxlX3J4X2tpY2tgIGxvb2tzIGxpa2UgdGhlIHdvcmtlciByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgcngga2lja3MsIGFuZCBpdCdzIGNhbGxpbmcgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAuIFRoYXQncyBhIHZhbHVhYmxlIHBpZWNlIG9mIGluZm9ybWF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGZsb3cuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBzaXplIG9mIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgLiBVbmRlcnN0YW5kaW5nIGl0cyBzY2FsZSB3aWxsIGdpdmUgbWUgYSBzZW5zZSBvZiB0aGUgY29tcGxleGl0eSBvZiB0aGUgcHJvY2Vzc2luZyBpbnNpZGUsIGFuZCBtYXkgaW5kaWNhdGUgYXJlYXMgcmlwZSBmb3Igb3B0aW1pemF0aW9uIG9yIGNsb3NlciBpbnNwZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTU3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjMwOjA3LjI3OTU3NTE3MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC92c29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjk6XFx0c3RhdGljIHZvaWRcXG4gMTMwOlxcdHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxcbiAxMzE6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxcbiAxMzI6XFx0e1xcbiAxMzM6XFx0XFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdHhfdnEgPSBcXHUwMDI2dnNvY2stXFx1MDAzZXZxc1tWU09DS19WUV9UWF07XFxuIDEzNDpcXHRcXHRpbnQgcGt0cyA9IDAsIHRvdGFsX2xlbiA9IDA7XFxuIDEzNTpcXHRcXHR1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCA9IDA7XFxuIDEzNjpcXHRcXHR1bnNpZ25lZCBpbnQgdXNlZF9saW1pdDtcXG4gMTM3OlxcdFxcdGJvb2wgYWRkZWQgPSBmYWxzZTtcXG4gMTM4OlxcdFxcdGJvb2wgcmVzdGFydF90eCA9IGZhbHNlO1xcbiAxMzk6XFx0XFxuIDE0MDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbiAxNDE6XFx0XFxuIDE0MjpcXHRcXHRpZiAoIXZob3N0X3ZxX2dldF9iYWNrZW5kKHZxKSlcXG4gMTQzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxNDQ6XFx0XFxuIDE0NTpcXHRcXHRpZiAoIXZxX21ldGFfcHJlZmV0Y2godnEpKVxcbiAxNDY6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDE0NzpcXHRcXG4gMTQ4OlxcdFxcdHVzZWRfbGltaXQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHZxLVxcdTAwM2VudW0sXFxuIDE0OTpcXHRcXHRcXHRcXHQgICBtaW5fdCh1bnNpZ25lZCBpbnQsIHZxLVxcdTAwM2VkZXYtXFx1MDAzZWlvdl9saW1pdCxcXG4gMTUwOlxcdFxcdFxcdFxcdFxcdCB2cS1cXHUwMDNlZGV2LVxcdTAwM2V3ZWlnaHQpKTtcXG4gMTUxOlxcdFxcdGlmICh1bmxpa2VseSghdXNlZF9saW1pdCkpXFxuIDE1MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0LyogQXZvaWQgZnVydGhlciB2bWV4aXRzLCB3ZSdyZSBhbHJlYWR5IHByb2Nlc3NpbmcgdGhlIHZpcnRxdWV1ZSAqL1xcbiAxNTU6XFx0XFx0dmhvc3RfZGlzYWJsZV9ub3RpZnkoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHZxKTtcXG4gMTU2OlxcdFxcbiAxNTc6XFx0XFx0ZG8ge1xcbiAxNTg6XFx0XFx0XFx0c3RydWN0IHZpcnRpb192c29ja19oZHIgKmhkcjtcXG4gMTU5OlxcdFxcdFxcdHNpemVfdCBpb3ZfbGVuLCBwYXlsb2FkX2xlbjtcXG4gMTYwOlxcdFxcdFxcdHN0cnVjdCBpb3ZfaXRlciBpb3ZfaXRlcjtcXG4gMTYxOlxcdFxcdFxcdHUzMiBmbGFnc190b19yZXN0b3JlID0gMDtcXG4gMTYyOlxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDE2MzpcXHRcXHRcXHR1bnNpZ25lZCBvdXQsIGluO1xcbiAxNjQ6XFx0XFx0XFx0c2l6ZV90IG5ieXRlcztcXG4gMTY1OlxcdFxcdFxcdHUzMiBvZmZzZXQ7XFxuIDE2NjpcXHRcXHRcXHRpbnQgaGVhZDtcXG4gMTY3OlxcdFxcbiAxNjg6XFx0XFx0XFx0aWYgKHVzZWRfY291bnQgPT0gdXNlZF9saW1pdClcXG4gMTY5OlxcdFxcdFxcdFxcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIFxcdTAwMjZ1c2VkX2NvdW50KTtcXG4gMTcwOlxcdFxcbiAxNzE6XFx0XFx0XFx0c2tiID0gdmlydGlvX3Zzb2NrX3NrYl9kZXF1ZXVlKFxcdTAwMjZ2c29jay1cXHUwMDNlc2VuZF9wa3RfcXVldWUpO1xcbiAxNzI6XFx0XFxuIDE3MzpcXHRcXHRcXHRpZiAoIXNrYikge1xcbiAxNzQ6XFx0XFx0XFx0XFx0YWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgXFx1MDAyNnVzZWRfY291bnQpO1xcbiAxNzU6XFx0XFx0XFx0XFx0dmhvc3RfZW5hYmxlX25vdGlmeShcXHUwMDI2dnNvY2stXFx1MDAzZWRldiwgdnEpO1xcbiAxNzY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDE3NzpcXHRcXHRcXHR9XFxuIDE3ODpcXHRcXG4gMTc5OlxcdFxcdFxcdGhlYWQgPSB2aG9zdF9nZXRfdnFfZGVzYyh2cSwgdnEtXFx1MDAzZWlvdiwgQVJSQVlfU0laRSh2cS1cXHUwMDNlaW92KSxcXG4gMTgwOlxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2b3V0LCBcXHUwMDI2aW4sIE5VTEwsIE5VTEwpO1xcbiAxODE6XFx0XFx0XFx0aWYgKGhlYWQgXFx1MDAzYyAwKSB7XFxuIDE4MjpcXHRcXHRcXHRcXHR2aXJ0aW9fdnNvY2tfc2tiX3F1ZXVlX2hlYWQoXFx1MDAyNnZzb2NrLVxcdTAwM2VzZW5kX3BrdF9xdWV1ZSwgc2tiKTtcXG4gMTgzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxODQ6XFx0XFx0XFx0fVxcbiAxODU6XFx0XFxuIDE4NjpcXHRcXHRcXHRpZiAoaGVhZCA9PSB2cS1cXHUwMDNlbnVtKSB7XFxuIDE4NzpcXHRcXHRcXHRcXHR2aXJ0aW9fdnNvY2tfc2tiX3F1ZXVlX2hlYWQoXFx1MDAyNnZzb2NrLVxcdTAwM2VzZW5kX3BrdF9xdWV1ZSwgc2tiKTtcXG4gMTg4OlxcdFxcdFxcdFxcdC8qIFdlIGNhbm5vdCBmaW5pc2ggeWV0IGlmIG1vcmUgYnVmZmVycyBzbnVjayBpbiB3aGlsZVxcbiAxODk6XFx0XFx0XFx0XFx0ICogcmUtZW5hYmxpbmcgbm90aWZ5LlxcbiAxOTA6XFx0XFx0XFx0XFx0ICovXFxuIDE5MTpcXHRcXHRcXHRcXHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCBcXHUwMDI2dXNlZF9jb3VudCk7XFxuIDE5MjpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkodmhvc3RfZW5hYmxlX25vdGlmeShcXHUwMDI2dnNvY2stXFx1MDAzZWRldiwgdnEpKSkge1xcbiAxOTM6XFx0XFx0XFx0XFx0XFx0dmhvc3RfZGlzYWJsZV9ub3RpZnkoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHZxKTtcXG4gMTk0OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAxOTU6XFx0XFx0XFx0XFx0fVxcbiAxOTY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDE5NzpcXHRcXHRcXHR9XFxuIDE5ODpcXHRcXG4gMTk5OlxcdFxcdFxcdGlmIChvdXQpIHtcXG4gMjAwOlxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAyMDE6XFx0XFx0XFx0XFx0dnFfZXJyKHZxLCBcXFwiRXhwZWN0ZWQgMCBvdXRwdXQgYnVmZmVycywgZ290ICV1XFxcXG5cXFwiLCBvdXQpO1xcbiAyMDI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDIwMzpcXHRcXHRcXHR9XFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdFxcdGlvdl9sZW4gPSBpb3ZfbGVuZ3RoKFxcdTAwMjZ2cS1cXHUwMDNlaW92W291dF0sIGluKTtcXG4gMjA2OlxcdFxcdFxcdGlmIChpb3ZfbGVuIFxcdTAwM2Mgc2l6ZW9mKCpoZHIpKSB7XFxuIDIwNzpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMjA4OlxcdFxcdFxcdFxcdHZxX2Vycih2cSwgXFxcIkJ1ZmZlciBsZW4gWyV6dV0gdG9vIHNtYWxsXFxcXG5cXFwiLCBpb3ZfbGVuKTtcXG4gMjA5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyMTA6XFx0XFx0XFx0fVxcbiAyMTE6XFx0XFxuIDIxMjpcXHRcXHRcXHRpb3ZfaXRlcl9pbml0KFxcdTAwMjZpb3ZfaXRlciwgSVRFUl9ERVNULCBcXHUwMDI2dnEtXFx1MDAzZWlvdltvdXRdLCBpbiwgaW92X2xlbik7XFxuIDIxMzpcXHRcXHRcXHRvZmZzZXQgPSBWSVJUSU9fVlNPQ0tfU0tCX0NCKHNrYiktXFx1MDAzZW9mZnNldDtcXG4gMjE0OlxcdFxcdFxcdHBheWxvYWRfbGVuID0gc2tiLVxcdTAwM2VsZW4gLSBvZmZzZXQ7XFxuIDIxNTpcXHRcXHRcXHRoZHIgPSB2aXJ0aW9fdnNvY2tfaGRyKHNrYik7XFxuIDIxNjpcXHRcXG4gMjE3OlxcdFxcdFxcdC8qIElmIHRoZSBwYWNrZXQgaXMgZ3JlYXRlciB0aGFuIHRoZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlXFxuIDIxODpcXHRcXHRcXHQgKiBidWZmZXIsIHdlIHNwbGl0IGl0IHVzaW5nIG11bHRpcGxlIGJ1ZmZlcnMuXFxuIDIxOTpcXHRcXHRcXHQgKi9cXG4gMjIwOlxcdFxcdFxcdGlmIChwYXlsb2FkX2xlbiBcXHUwMDNlIGlvdl9sZW4gLSBzaXplb2YoKmhkcikpIHtcXG4gMjIxOlxcdFxcdFxcdFxcdHBheWxvYWRfbGVuID0gaW92X2xlbiAtIHNpemVvZigqaGRyKTtcXG4gMjIyOlxcdFxcbiAyMjM6XFx0XFx0XFx0XFx0LyogQXMgd2UgYXJlIGNvcHlpbmcgcGllY2VzIG9mIGxhcmdlIHBhY2tldCdzIGJ1ZmZlciB0b1xcbiAyMjQ6XFx0XFx0XFx0XFx0ICogc21hbGwgcnggYnVmZmVycywgaGVhZGVycyBvZiBwYWNrZXRzIGluIHJ4IHF1ZXVlIGFyZVxcbiAyMjU6XFx0XFx0XFx0XFx0ICogY3JlYXRlZCBkeW5hbWljYWxseSBhbmQgYXJlIGluaXRpYWxpemVkIHdpdGggaGVhZGVyXFxuIDIyNjpcXHRcXHRcXHRcXHQgKiBvZiBjdXJyZW50IHBhY2tldChleGNlcHQgbGVuZ3RoKS4gQnV0IGluIGNhc2Ugb2ZcXG4gMjI3OlxcdFxcdFxcdFxcdCAqIFNPQ0tfU0VRUEFDS0VULCB3ZSBhbHNvIG11c3QgY2xlYXIgbWVzc2FnZSBkZWxpbWV0ZXJcXG4gMjI4OlxcdFxcdFxcdFxcdCAqIGJpdCAoVklSVElPX1ZTT0NLX1NFUV9FT00pIGFuZCBNU0dfRU9SIGJpdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjozMDowNy4yNzk3MjMzNzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcwMjAzMzg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZob3N0IFZzb2NrIFBhY2tldCBTZW5kaW5nIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSB2aG9zdCB2c29jayBkcml2ZXIsIHdoaWNoIGZvY3VzZXMgb24gYmF0Y2hpbmcgdXNlZCBlbGVtZW50cyB3aGVuIHNlbmRpbmcgcGFja2V0cyB0byB0aGUgZ3Vlc3QuIFRoaXMgc2VlbXMgbGlrZSBhIGNvcmUgbG9naWMgY2hhbmdlLCBzbyBpdCdzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdCBhbmQgaG93IHdlIGNhbiBiZXN0IHRlc3QgaXQuIFRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBhcHBlYXIgdG8gYmUgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAgYW5kIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgLiBDb25zaWRlcmluZyB0aGVpciBzaXplLCBJIGNhbiBzYWZlbHkgYXNzdW1lIG5laXRoZXIgaXMgaW5saW5lZDsgdGhleSBzaG91bGQgYmUgZGlzdGluY3Qgc3ltYm9scy4gSSdtIGFsc28gY3VyaW91cyBhYm91dCBgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZGA7IHRoZSBmYWN0IHRoYXQgaXQncyBqdXN0IGEgYHN0YXRpYyBib29sYCBtYWtlcyBpdCBhIHN0cm9uZyBjYW5kaWRhdGUgdG8gYmUgaW5saW5lZCwgYWx0aG91Z2ggSSdsbCBrZWVwIGFuIGV5ZSBvbiBpdCBkdXJpbmcgYW5hbHlzaXMuXG5cblRoZSBtYWluIGNvbmZpZ3VyYXRpb24gaXMgYFZIT1NUX1ZTT0NLYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBnaXZlbiB0aGUgY2hhbmdlJ3MgZm9jdXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBpZGVudGlmeSBhbGwgZGVwZW5kZW5jaWVzLiBMZXQgbWUgdmVyaWZ5OyBpdCBsb29rcyBsaWtlIGBWSE9TVF9WU09DS2AgYWxzbyByZXF1aXJlcyBgVlNPQ0tFVFNgIGFuZCBgRVZFTlRGRGAuIGBWU09DS0VUU2AgaXMgb2J2aW91c2x5IGZ1bmRhbWVudGFsIHRvIHZzb2NrIGZ1bmN0aW9uYWxpdHksIHNvIGl0J3MgZGVmaW5pdGVseSBnb2luZyB0byBiZSBpbnZvbHZlZCBpbiB0ZXN0aW5nLiBJJ2xsIGluY2x1ZGUgYFZIT1NUX1ZTT0NLYCBhbmQgYFZTT0NLRVRTYCBpbiBteSBjb25maWd1cmF0aW9uIGNvbnNpZGVyYXRpb25zLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYW5kIG5lY2Vzc2FyeSBzZXR1cCBmb3IgdGhvcm91Z2ggdGVzdGluZyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTMzLCJPdXRwdXRUb2tlbnMiOjExMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjMwOjEzLjk4MTc1OTUzNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMzQ2OTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9WU09DS1wiLFxuICAgIFwiVlNPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RcIixcbiAgICBcInZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2aG9zdCB2c29jayBkcml2ZXIgdG8gYmF0Y2ggdXNlZCBlbGVtZW50cyB3aGVuIHNlbmRpbmcgcGFja2V0cyB0byB0aGUgZ3Vlc3QuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2aG9zdCB2c29jayBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9WU09DS1wiLFxuICAgIFwiVlNPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RcIixcbiAgICBcInZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2aG9zdCB2c29jayBkcml2ZXIgdG8gYmF0Y2ggdXNlZCBlbGVtZW50cyB3aGVuIHNlbmRpbmcgcGFja2V0cyB0byB0aGUgZ3Vlc3QuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2aG9zdCB2c29jayBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzA6MTQuMDY0MTEyODkyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUxMTk0MDE5MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjozMDoxNC4wNjQ1MzgwMTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTU1MTE4OTczNjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgdGhlIHZpcnRpbyB2c29jayB0cmFuc21pc3Npb24gcGF0aCBieSBiYXRjaGluZyB1c2VkIGVsZW1lbnQgdXBkYXRlcy4gSXQgaW50cm9kdWNlcyBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIHRvIHBvcHVsYXRlIGFuIGFycmF5IG9mIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCAoYHZxLVxcdTAwM2VoZWFkc2ApIGFuZCBgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZGAgdG8gZmx1c2ggdGhlbSB0byB0aGUgZ3Vlc3QgbWVtb3J5IHZpYSBgdmhvc3RfYWRkX3VzZWRfbmAuXFxuVGhlIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCBjb25zaXN0cyBvZiB0d28gMzItYml0IGludGVnZXJzIChgaWRgIGFuZCBgbGVuYCkgYW5kIGNvbnRhaW5zIG5vIHBhZGRpbmcgYnl0ZXMuIEJvdGggZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGB2aG9zdF92c29ja19hZGRfdXNlZGAgYmVmb3JlIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIChndWVzdCBtZW1vcnkpIHZpYSBgdmhvc3RfcHV0X3VzZWRgIGFuZCBgdmhvc3RfY29weV90b191c2VyYC5cXG5TaW5jZSB0aGUgbWVtb3J5IGJlaW5nIGNvcGllZCBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgdGhlcmUgYXJlIG5vIHBhZGRpbmcgYnl0ZXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlIGJvdW5kcyBvZiB0aGUgYXJyYXkgYXJlIGFsc28gcHJvcGVybHkgY2hlY2tlZCBhZ2FpbnN0IGBkZXYtXFx1MDAzZWlvdl9saW1pdGAsIHByZXZlbnRpbmcgYW55IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbnl3YXkpLlxcblRodXMsIHRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTg3OWFiZjQ0M2M0YWY5NjhiZmZkYjUxMDU4NTMwNTI0YjFiMzQwMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDA2OjI5OjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92c29jay5jIGIvZHJpdmVycy92aG9zdC92c29jay5jXG5pbmRleCA5YWFhYjZiYjgwNjFjLi5kODA1MGNjYTI3NWRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92c29jay5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbkBAIC0xMDMsMTIgKzEwMywzNyBAQCBzdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfaGFzX3JlbW90ZV9jaWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgdTMyIGNpZClcbiBcdHJldHVybiBmb3VuZDtcbiB9XG4gXG4rc3RhdGljIGJvb2wgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGludCAqdXNlZF9jb3VudClcbit7XG4rXHRpZiAoISp1c2VkX2NvdW50KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHR2aG9zdF9hZGRfdXNlZF9uKHZxLCB2cS1cdTAwM2VoZWFkcywgdnEtXHUwMDNlbmhlYWRzLCAqdXNlZF9jb3VudCk7XG4rXHQqdXNlZF9jb3VudCA9IDA7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4rXHRcdFx0XHQgdW5zaWduZWQgaW50ICp1c2VkX2NvdW50LFxuK1x0XHRcdFx0IHVuc2lnbmVkIGludCBoZWFkLCB1bnNpZ25lZCBpbnQgbGVuKVxuK3tcbitcdHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKnVzZWQgPSBcdTAwMjZ2cS1cdTAwM2VoZWFkc1sqdXNlZF9jb3VudF07XG4rXG4rXHR1c2VkLVx1MDAzZWlkID0gY3B1X3RvX3Zob3N0MzIodnEsIGhlYWQpO1xuK1x0dXNlZC1cdTAwM2VsZW4gPSBjcHVfdG9fdmhvc3QzMih2cSwgbGVuKTtcbitcdHZxLVx1MDAzZW5oZWFkc1sqdXNlZF9jb3VudF0gPSAxO1xuK1x0KCp1c2VkX2NvdW50KSsrO1xuK31cbitcbiBzdGF0aWMgdm9pZFxuIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuIFx0XHRcdCAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcbiB7XG4gXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp0eF92cSA9IFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9UWF07XG4gXHRpbnQgcGt0cyA9IDAsIHRvdGFsX2xlbiA9IDA7XG4rXHR1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCA9IDA7XG4rXHR1bnNpZ25lZCBpbnQgdXNlZF9saW1pdDtcbiBcdGJvb2wgYWRkZWQgPSBmYWxzZTtcbiBcdGJvb2wgcmVzdGFydF90eCA9IGZhbHNlO1xuIFxuQEAgLTEyMCw2ICsxNDUsMTIgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRpZiAoIXZxX21ldGFfcHJlZmV0Y2godnEpKVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdHVzZWRfbGltaXQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHZxLVx1MDAzZW51bSxcbitcdFx0XHQgICBtaW5fdCh1bnNpZ25lZCBpbnQsIHZxLVx1MDAzZWRldi1cdTAwM2Vpb3ZfbGltaXQsXG4rXHRcdFx0XHQgdnEtXHUwMDNlZGV2LVx1MDAzZXdlaWdodCkpO1xuK1x0aWYgKHVubGlrZWx5KCF1c2VkX2xpbWl0KSlcbitcdFx0Z290byBvdXQ7XG4rXG4gXHQvKiBBdm9pZCBmdXJ0aGVyIHZtZXhpdHMsIHdlJ3JlIGFscmVhZHkgcHJvY2Vzc2luZyB0aGUgdmlydHF1ZXVlICovXG4gXHR2aG9zdF9kaXNhYmxlX25vdGlmeShcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKTtcbiBcbkBAIC0xMzQsOSArMTY1LDEzIEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuIFx0XHR1MzIgb2Zmc2V0O1xuIFx0XHRpbnQgaGVhZDtcbiBcbitcdFx0aWYgKHVzZWRfY291bnQgPT0gdXNlZF9saW1pdClcbitcdFx0XHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCBcdTAwMjZ1c2VkX2NvdW50KTtcbitcbiBcdFx0c2tiID0gdmlydGlvX3Zzb2NrX3NrYl9kZXF1ZXVlKFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3F1ZXVlKTtcbiBcbiBcdFx0aWYgKCFza2IpIHtcbitcdFx0XHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCBcdTAwMjZ1c2VkX2NvdW50KTtcbiBcdFx0XHR2aG9zdF9lbmFibGVfbm90aWZ5KFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtMTUzLDYgKzE4OCw3IEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuIFx0XHRcdC8qIFdlIGNhbm5vdCBmaW5pc2ggeWV0IGlmIG1vcmUgYnVmZmVycyBzbnVjayBpbiB3aGlsZVxuIFx0XHRcdCAqIHJlLWVuYWJsaW5nIG5vdGlmeS5cbiBcdFx0XHQgKi9cbitcdFx0XHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCBcdTAwMjZ1c2VkX2NvdW50KTtcbiBcdFx0XHRpZiAodW5saWtlbHkodmhvc3RfZW5hYmxlX25vdGlmeShcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKSkpIHtcbiBcdFx0XHRcdHZob3N0X2Rpc2FibGVfbm90aWZ5KFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtMjMwLDggKzI2Niw4IEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuIFx0XHQgKi9cbiBcdFx0dmlydGlvX3RyYW5zcG9ydF9kZWxpdmVyX3RhcF9wa3Qoc2tiKTtcbiBcbi1cdFx0dmhvc3RfYWRkX3VzZWQodnEsIGhlYWQsIHNpemVvZigqaGRyKSArIHBheWxvYWRfbGVuKTtcbi1cdFx0YWRkZWQgPSB0cnVlO1xuK1x0XHR2aG9zdF92c29ja19hZGRfdXNlZCh2cSwgXHUwMDI2dXNlZF9jb3VudCwgaGVhZCxcbitcdFx0XHRcdCAgICAgc2l6ZW9mKCpoZHIpICsgcGF5bG9hZF9sZW4pO1xuIFxuIFx0XHRWSVJUSU9fVlNPQ0tfU0tCX0NCKHNrYiktXHUwMDNlb2Zmc2V0ICs9IHBheWxvYWRfbGVuO1xuIFx0XHR0b3RhbF9sZW4gKz0gcGF5bG9hZF9sZW47XG5AQCAtMjY0LDYgKzMwMCw3IEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuIFx0XHRcdHZpcnRpb190cmFuc3BvcnRfY29uc3VtZV9za2Jfc2VudChza2IsIHRydWUpO1xuIFx0XHR9XG4gXHR9IHdoaWxlKGxpa2VseSghdmhvc3RfZXhjZWVkc193ZWlnaHQodnEsICsrcGt0cywgdG90YWxfbGVuKSkpO1xuK1x0YWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgXHUwMDI2dXNlZF9jb3VudCk7XG4gXHRpZiAoYWRkZWQpXG4gXHRcdHZob3N0X3NpZ25hbChcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjMwOjE0LjA2NDUzODkyMloiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODA5NTg3MTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAgd2l0aGluIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBiYXRjaGluZyB3aGVuIGFkZGluZyB1c2VkIGVsZW1lbnRzIHRvIHRoZSB2aXJ0cXVldWUsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZldyBxdWVzdGlvbnMuIEluc3RlYWQgb2YgdGhlIHVzdWFsIGB2aG9zdF9hZGRfdXNlZGAgY2FsbCBwZXIgcGFja2V0LCBpdCdzIG5vdyB1c2luZyBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgLCBwb3B1bGF0aW5nIGB2cS1cdTAwM2VoZWFkc2AsIGB2cS1cdTAwM2VuaGVhZHNgIGFuZCBpbmNyZW1lbnRpbmcgYHVzZWRfY291bnRgIGJlZm9yZSBhIGJ1bGsgZmx1c2ggdmlhIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCwgZXZlbnR1YWxseSBjYWxsaW5nIGB2aG9zdF9hZGRfdXNlZF9uYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMsIGVzcGVjaWFsbHkgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIGJhdGNoaW5nLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gaXMgYXJvdW5kIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyB3aXRoaW4gdGhlIGJhdGNoaW5nIGxvZ2ljLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2N1cyBvbiBob3cgYHZxLVx1MDAzZWhlYWRzYCBhbmQgYHZxLVx1MDAzZW5oZWFkc2AgYXJlIHVzZWQgYW5kIGluaXRpYWxpemVkLlxuXG5EaXZpbmcgaW50byB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBgdnEtXHUwMDNlaGVhZHNgIGFuZCBgdnEtXHUwMDNlbmhlYWRzYCBhcmUgcGFydCBvZiB0aGUgYHN0cnVjdCB2aG9zdF92aXJ0cXVldWVgIGl0c2VsZiwgd2hpY2ggaXMgZ29vZC4gVGhlIGB2aG9zdF92c29ja19hZGRfdXNlZGAgZnVuY3Rpb24gaXMgd2hhdCBwb3B1bGF0ZXMgdGhlc2UgYXJyYXlzLCBzZXR0aW5nIGB1c2VkLVx1MDAzZWlkYCBhbmQgYHVzZWQtXHUwMDNlbGVuYC4gSXQgYXBwZWFycyB0aGUgY29kZSBpbml0aWFsaXplcyB0aGUgbWVtYmVycyBvZiB0aGUgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIHRvIGB2cS1cdTAwM2VoZWFkc1sqdXNlZF9jb3VudF1gLCB3aGljaCBpcyBlbmNvdXJhZ2luZy4gVGhlIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCBkZWZpbml0aW9uLCB3aXRoIGl0cyAzMi1iaXQgYGlkYCBhbmQgYGxlbmAgbWVtYmVycyBsb29rcyBsaWtlIHRoZXJlJ3Mgbm8gcGFkZGluZy4gU28sIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIHRoZSBzdHJ1Y3QgaXRzZWxmLCBpdCBpcyA4IGJ5dGVzIGluIHRvdGFsLlxuXG5Fc3NlbnRpYWxseSwgYHZob3N0X3Zzb2NrX2FkZF91c2VkYCBpcyB0YWtpbmcgY2FyZSBvZiBpbml0aWFsaXppbmcgdGhlIGBpZGAgYW5kIGBsZW5gIGZpZWxkcywgYW5kIHRoZSBgdmhvc3RfYWRkX3VzZWRfbmAgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHdyaXRpbmcgdGhlc2UgZWxlbWVudHMgdG8gdGhlIGd1ZXN0IG1lbW9yeS4gU28sIEkgc2VlIHRoZSB3cml0ZXMgZnJvbSB0aGUgZGV2aWNlIHRvIHRoZSBndWVzdCwgYW5kIHRoZSBlbGVtZW50cyBhcmUgYmVpbmcgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHdyaXR0ZW4sIGFuZCB3aXRoIG5vIHBhZGRpbmcsIGl0IGRvZXMgbm90IGxvb2sgbGlrZSB0aGVyZSB3aWxsIGJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcy5cblxuSG93ZXZlciwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIElzIGB2cS1cdTAwM2VuaGVhZHNgIGFjdHVhbGx5IGFuIGFycmF5IG9mIGludGVnZXJzPyBJIG5lZWQgdG8ga25vdyB0aGUgdHlwZSBmb3IgdGhhdCBtZW1iZXIgdG8gZW5zdXJlIG5vIGx1cmtpbmcgaXNzdWVzLiBJIHdpbGwgdXNlIGEgZ3JlcHBlciAoSSBrbm93LCBJIGtub3cpIHRvIHF1aWNrbHkgZmluZCB0aGUgYHN0cnVjdCB2aG9zdF92aXJ0cXVldWVgIGFuZCBjb25maXJtIHRoZSB0eXBlIG9mIHRoZSBgbmhlYWRzYCBhcnJheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjMwOjQyLjE2MDQxMzE0MloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4Mjc1MjM0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuaD04OD1zdHJ1Y3Qgdmhvc3RfdnJpbmdfY2FsbCB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtOTMtLyogVGhlIHZpcnRxdWV1ZSBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGEgcXVldWUgYXR0YWNoZWQgdG8gYSBkZXZpY2UuICovXFxuZHJpdmVycy92aG9zdC92aG9zdC5oOjk0OnN0cnVjdCB2aG9zdF92aXJ0cXVldWUge1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC05NS1cXHRzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjMwOjQ0LjQ0MzE3MDAyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTUyNzIwMzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHZob3N0LmgqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB2aG9zdCBpbXBsZW1lbnRhdGlvbiBiZXR0ZXIuIExldCdzIHN0YXJ0IHdpdGggYGRyaXZlcnMvdmhvc3Qvdmhvc3QuaGAuIEknbSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgOTQuIE15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyB0aGF0IHNvbWV0aGluZyBzaWduaWZpY2FudCBpcyBoYXBwZW5pbmcgdGhlcmUsIHBvc3NpYmx5IHJlbGF0ZWQgdG8gZGF0YSBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9uIGRlZmluaXRpb25zIGNydWNpYWwgZm9yIHRoZSB2aG9zdCBvcGVyYXRpb24uIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlIHRvIHVubG9jayB0aGlzIGFyY2hpdGVjdHVyYWwgdW5kZXJzdGFuZGluZyBJJ20gYWZ0ZXIuIExldCdzIHNlZSB3aGF0IHRyZWFzdXJlcyB0aGF0IGZpbGUgaG9sZHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjozMDo0Ny45OTU4OTMzOTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC92aG9zdC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5NDpcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlIHtcXG4gIDk1OlxcdFxcdHN0cnVjdCB2aG9zdF9kZXYgKmRldjtcXG4gIDk2OlxcdFxcdHN0cnVjdCB2aG9zdF93b3JrZXIgX19yY3UgKndvcmtlcjtcXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0LyogVGhlIGFjdHVhbCByaW5nIG9mIGJ1ZmZlcnMuICovXFxuICA5OTpcXHRcXHRzdHJ1Y3QgbXV0ZXggbXV0ZXg7XFxuIDEwMDpcXHRcXHR1bnNpZ25lZCBpbnQgbnVtO1xcbiAxMDE6XFx0XFx0dnJpbmdfZGVzY190IF9fdXNlciAqZGVzYztcXG4gMTAyOlxcdFxcdHZyaW5nX2F2YWlsX3QgX191c2VyICphdmFpbDtcXG4gMTAzOlxcdFxcdHZyaW5nX3VzZWRfdCBfX3VzZXIgKnVzZWQ7XFxuIDEwNDpcXHRcXHRjb25zdCBzdHJ1Y3Qgdmhvc3RfaW90bGJfbWFwICptZXRhX2lvdGxiW1ZIT1NUX05VTV9BRERSU107XFxuIDEwNTpcXHRcXHRzdHJ1Y3QgZmlsZSAqa2ljaztcXG4gMTA2OlxcdFxcdHN0cnVjdCB2aG9zdF92cmluZ19jYWxsIGNhbGxfY3R4O1xcbiAxMDc6XFx0XFx0c3RydWN0IGV2ZW50ZmRfY3R4ICplcnJvcl9jdHg7XFxuIDEwODpcXHRcXHRzdHJ1Y3QgZXZlbnRmZF9jdHggKmxvZ19jdHg7XFxuIDEwOTpcXHRcXG4gMTEwOlxcdFxcdHN0cnVjdCB2aG9zdF9wb2xsIHBvbGw7XFxuIDExMTpcXHRcXG4gMTEyOlxcdFxcdC8qIFRoZSByb3V0aW5lIHRvIGNhbGwgd2hlbiB0aGUgR3Vlc3QgcGluZ3MgdXMsIG9yIHRpbWVvdXQuICovXFxuIDExMzpcXHRcXHR2aG9zdF93b3JrX2ZuX3QgaGFuZGxlX2tpY2s7XFxuIDExNDpcXHRcXG4gMTE1OlxcdFxcdC8qIExhc3QgYXZhaWxhYmxlIGluZGV4IHdlIHNhdy5cXG4gMTE2OlxcdFxcdCAqIFZhbHVlcyBhcmUgbGltaXRlZCB0byAweDdmZmYsIGFuZCB0aGUgaGlnaCBiaXQgaXMgdXNlZCBhc1xcbiAxMTc6XFx0XFx0ICogYSB3cmFwIGNvdW50ZXIgd2hlbiB1c2luZyBWSVJUSU9fRl9SSU5HX1BBQ0tFRC4gKi9cXG4gMTE4OlxcdFxcdHUxNiBsYXN0X2F2YWlsX2lkeDtcXG4gMTE5OlxcdFxcdC8qIE5leHQgYXZhaWwgcmluZyBoZWFkIHdoZW4gVklSVElPX0ZfSU5fT1JERVIgaXMgbmVnb2l0YXRlZCAqL1xcbiAxMjA6XFx0XFx0dTE2IG5leHRfYXZhaWxfaGVhZDtcXG4gMTIxOlxcdFxcbiAxMjI6XFx0XFx0LyogQ2FjaGVzIGF2YWlsYWJsZSBpbmRleCB2YWx1ZSBmcm9tIHVzZXIuICovXFxuIDEyMzpcXHRcXHR1MTYgYXZhaWxfaWR4O1xcbiAxMjQ6XFx0XFxuIDEyNTpcXHRcXHQvKiBMYXN0IGluZGV4IHdlIHVzZWQuXFxuIDEyNjpcXHRcXHQgKiBWYWx1ZXMgYXJlIGxpbWl0ZWQgdG8gMHg3ZmZmLCBhbmQgdGhlIGhpZ2ggYml0IGlzIHVzZWQgYXNcXG4gMTI3OlxcdFxcdCAqIGEgd3JhcCBjb3VudGVyIHdoZW4gdXNpbmcgVklSVElPX0ZfUklOR19QQUNLRUQuICovXFxuIDEyODpcXHRcXHR1MTYgbGFzdF91c2VkX2lkeDtcXG4gMTI5OlxcdFxcbiAxMzA6XFx0XFx0LyogVXNlZCBmbGFncyAqL1xcbiAxMzE6XFx0XFx0dTE2IHVzZWRfZmxhZ3M7XFxuIDEzMjpcXHRcXG4gMTMzOlxcdFxcdC8qIExhc3QgdXNlZCBpbmRleCB2YWx1ZSB3ZSBoYXZlIHNpZ25hbGxlZCBvbiAqL1xcbiAxMzQ6XFx0XFx0dTE2IHNpZ25hbGxlZF91c2VkO1xcbiAxMzU6XFx0XFxuIDEzNjpcXHRcXHQvKiBMYXN0IHVzZWQgaW5kZXggdmFsdWUgd2UgaGF2ZSBzaWduYWxsZWQgb24gKi9cXG4gMTM3OlxcdFxcdGJvb2wgc2lnbmFsbGVkX3VzZWRfdmFsaWQ7XFxuIDEzODpcXHRcXG4gMTM5OlxcdFxcdC8qIExvZyB3cml0ZXMgdG8gdXNlZCBzdHJ1Y3R1cmUuICovXFxuIDE0MDpcXHRcXHRib29sIGxvZ191c2VkO1xcbiAxNDE6XFx0XFx0dTY0IGxvZ19hZGRyO1xcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHRzdHJ1Y3QgaW92ZWMgaW92W1VJT19NQVhJT1ZdO1xcbiAxNDQ6XFx0XFx0c3RydWN0IGlvdmVjIGlvdGxiX2lvdls2NF07XFxuIDE0NTpcXHRcXHRzdHJ1Y3QgaW92ZWMgKmluZGlyZWN0O1xcbiAxNDY6XFx0XFx0c3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHM7XFxuIDE0NzpcXHRcXHR1MTYgKm5oZWFkcztcXG4gMTQ4OlxcdFxcdC8qIFByb3RlY3RlZCBieSB2aXJ0cXVldWUgbXV0ZXguICovXFxuIDE0OTpcXHRcXHRzdHJ1Y3Qgdmhvc3RfaW90bGIgKnVtZW07XFxuIDE1MDpcXHRcXHRzdHJ1Y3Qgdmhvc3RfaW90bGIgKmlvdGxiO1xcbiAxNTE6XFx0XFx0dm9pZCAqcHJpdmF0ZV9kYXRhO1xcbiAxNTI6XFx0XFx0VklSVElPX0RFQ0xBUkVfRkVBVFVSRVMoYWNrZWRfZmVhdHVyZXMpO1xcbiAxNTM6XFx0XFx0dTY0IGFja2VkX2JhY2tlbmRfZmVhdHVyZXM7XFxuIDE1NDpcXHRcXHQvKiBMb2cgd3JpdGUgZGVzY3JpcHRvcnMgKi9cXG4gMTU1OlxcdFxcdHZvaWQgX191c2VyICpsb2dfYmFzZTtcXG4gMTU2OlxcdFxcdHN0cnVjdCB2aG9zdF9sb2cgKmxvZztcXG4gMTU3OlxcdFxcdHN0cnVjdCBpb3ZlYyBsb2dfaW92WzY0XTtcXG4gMTU4OlxcdFxcbiAxNTk6XFx0XFx0LyogUmluZyBlbmRpYW5uZXNzLiBEZWZhdWx0cyB0byBsZWdhY3kgbmF0aXZlIGVuZGlhbm5lc3MuXFxuIDE2MDpcXHRcXHQgKiBTZXQgdG8gdHJ1ZSB3aGVuIHN0YXJ0aW5nIGEgbW9kZXJuIHZpcnRpbyBkZXZpY2UuICovXFxuIDE2MTpcXHRcXHRib29sIGlzX2xlO1xcbiAxNjI6XFx0I2lmZGVmIENPTkZJR19WSE9TVF9DUk9TU19FTkRJQU5fTEVHQUNZXFxuIDE2MzpcXHRcXHQvKiBSaW5nIGVuZGlhbm5lc3MgcmVxdWVzdGVkIGJ5IHVzZXJzcGFjZSBmb3IgY3Jvc3MtZW5kaWFuIHN1cHBvcnQuICovXFxuIDE2NDpcXHRcXHRib29sIHVzZXJfYmU7XFxuIDE2NTpcXHQjZW5kaWZcXG4gMTY2OlxcdFxcdHUzMiBidXN5bG9vcF90aW1lb3V0O1xcbiAxNjc6XFx0fTtcXG4gMTY4OlxcdFxcbiAxNjk6XFx0c3RydWN0IHZob3N0X21zZ19ub2RlIHtcXG4gMTcwOlxcdCAgdW5pb24ge1xcbiAxNzE6XFx0XFx0ICBzdHJ1Y3Qgdmhvc3RfbXNnIG1zZztcXG4gMTcyOlxcdFxcdCAgc3RydWN0IHZob3N0X21zZ192MiBtc2dfdjI7XFxuIDE3MzpcXHQgIH07XFxuIDE3NDpcXHQgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxO1xcbiAxNzU6XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7XFxuIDE3NjpcXHR9O1xcbiAxNzc6XFx0XFxuIDE3ODpcXHRzdHJ1Y3Qgdmhvc3RfZGV2IHtcXG4gMTc5OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbiAxODA6XFx0XFx0c3RydWN0IG11dGV4IG11dGV4O1xcbiAxODE6XFx0XFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKnZxcztcXG4gMTgyOlxcdFxcdGludCBudnFzO1xcbiAxODM6XFx0XFx0c3RydWN0IGV2ZW50ZmRfY3R4ICpsb2dfY3R4O1xcbiAxODQ6XFx0XFx0c3RydWN0IHZob3N0X2lvdGxiICp1bWVtO1xcbiAxODU6XFx0XFx0c3RydWN0IHZob3N0X2lvdGxiICppb3RsYjtcXG4gMTg2OlxcdFxcdHNwaW5sb2NrX3QgaW90bGJfbG9jaztcXG4gMTg3OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgcmVhZF9saXN0O1xcbiAxODg6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2xpc3Q7XFxuIDE4OTpcXHRcXHR3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0O1xcbiAxOTA6XFx0XFx0aW50IGlvdl9saW1pdDtcXG4gMTkxOlxcdFxcdGludCB3ZWlnaHQ7XFxuIDE5MjpcXHRcXHRpbnQgYnl0ZV93ZWlnaHQ7XFxuIDE5MzpcXHRcXHRzdHJ1Y3QgeGFycmF5IHdvcmtlcl94YTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzA6NDcuOTk1OTg3MjYxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNTMwMTA4MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2aG9zdF92c29ja19hZGRfdXNlZCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIGZ1bmN0aW9uIGFuZCBpdHMgaW50ZXJhY3Rpb25zLiBJIHNlZSB0aGF0IGBoZWFkc2AgaXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGB2cmluZ191c2VkX2VsZW1gIHN0cnVjdHMsIGFuZCBgbmhlYWRzYCBpcyBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgYHUxNmAgdmFsdWVzLiBUaGV5J3JlIGNsZWFybHkgcmVsYXRlZCB0byB0cmFja2luZyB1c2VkIHZpcnR1YWwgcmluZyBlbGVtZW50cywgd2hpY2ggaXMgc3RhbmRhcmQgdmhvc3QgYmVoYXZpb3IuXG5cbkluc2lkZSBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgLCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBjYXRjaGVzIG15IGV5ZSBpcyB0aGlzOiBgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqdXNlZCA9IFx1MDAyNnZxLVx1MDAzZWhlYWRzWyp1c2VkX2NvdW50XTtgLiAgVGhpcyBsaW5lIGlzIHRha2luZyBhbiBhZGRyZXNzIG9mIGEgbWVtYmVyIGluIHRoZSBhcnJheSwgdXNpbmcgdGhlIGAqdXNlZF9jb3VudGAgYXMgYW4gaW5kZXguIFRoaXMgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLCBhbmQgaW5kaWNhdGVzIHRoYXQgd2UncmUgYWRkaW5nIGEgbmV3IHVzZWQgZWxlbWVudCB0byB0aGUgcmluZy4gIFRoZW4gYHVzZWQtXHUwMDNlaWRgIGFuZCBgdXNlZC1cdTAwM2VsZW5gIGFyZSBwb3B1bGF0ZWQgdXNpbmcgYGNwdV90b192aG9zdDMyYCwgd2hpY2ggaGFuZGxlcyBwb3RlbnRpYWwgZW5kaWFubmVzcyBpc3N1ZXMsIHdoaWNoIG1ha2VzIHNlbnNlLiAgQW5kIGB2cS1cdTAwM2VuaGVhZHNbKnVzZWRfY291bnRdID0gMTtgIGluZGljYXRlcyB0aGF0IHdlIGFyZSB1c2luZyBvbmUgXCJoZWFkXCIgKHdoYXRldmVyIHRoYXQgaXMpIHRvIGRlYWwgd2l0aCB0aGlzIGVsZW1lbnQuIGAoKnVzZWRfY291bnQpKys7YCBpbmNyZW1lbnRzIHRoZSB0b3RhbC4gSSdtIGFzc3VtaW5nIGAqdXNlZF9jb3VudGAgaXMgYmVpbmcgdXBkYXRlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBuZXh0IGF2YWlsYWJsZSBzbG90IGluIHRoZSB1c2VkIHJpbmcuXG5cbk5vdyB0aGUgaW50ZXJlc3RpbmcgcGFydDogYHZob3N0X2FkZF91c2VkX25gIGlzIGNhbGxlZCB3aXRoIHRoZSBgdnEtXHUwMDNlaGVhZHNgLCBgdnEtXHUwMDNlbmhlYWRzYCwgYW5kIGAqdXNlZF9jb3VudGAuIFNpbmNlIEkga25vdyB0aGVzZSBwYXJhbWV0ZXJzJyBwdXJwb3NlLCB0aGlzIGlzIHdoZXJlIEknbGwgZ2V0IG1vcmUgaW5mb3JtYXRpb246IHdoYXQgdGhlIGV4YWN0IG1lY2hhbmljcyBvZiBhZGRpbmcgYSBuZXcgdXNlZCBlbGVtZW50IGFyZS4gSSBuZWVkIHRvIGRpdmUgaW50byBgdmhvc3RfYWRkX3VzZWRfbmAgZnVuY3Rpb24gaXRzZWxmIHRvIHNlZSB3aGF0IGl0IGlzIHJlYWxseSBkb2luZy4gTGV0J3MgaGVhZCBvdmVyIHRvIGBkcml2ZXJzL3Zob3N0L3Zob3N0LmNgIGFuZCBkaWcgaW50byB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDE4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzA6NTMuMzQ5MDAxMDJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODkxMjc4NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHZob3N0X2FkZF91c2VkX25cXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MzA2Nj1zdGF0aWMgaW50IHZob3N0X2FkZF91c2VkX25faW5fb3JkZXIoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzExNS0gKiB3YW50IHRvIG5vdGlmeSB0aGUgZ3Vlc3QsIHVzaW5nIGV2ZW50ZmQuICovXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMxMTY6aW50IHZob3N0X2FkZF91c2VkX24oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMTE3LVxcdFxcdCAgICAgdTE2ICpuaGVhZHMsIHVuc2lnbmVkIGNvdW50KVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5oPTI0OD1pbnQgdmhvc3RfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqLCB1bnNpZ25lZCBpbnQgaGVhZCwgaW50IGxlbik7XFxuZHJpdmVycy92aG9zdC92aG9zdC5oOjI0OTppbnQgdmhvc3RfYWRkX3VzZWRfbihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICosIHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yNTAtXFx0XFx0ICAgICB1MTYgKm5oZWFkcywgdW5zaWduZWQgY291bnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjozMDo1NS43MzgxMzI5NDJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg4MTA5MjY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgY29kZTpcblxuKipEaXZpbmcgaW50byBgdmhvc3RfYWRkX3VzZWRfbmAqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgdmhvc3RfYWRkX3VzZWRfbmAgd2l0aGluIHRoZSBgZHJpdmVycy92aG9zdC92aG9zdC5jYCBmaWxlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiBpdHMgZnVuY3Rpb24gYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIHZob3N0IGFyY2hpdGVjdHVyZS4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHVwZGF0aW5nIHRoZSBcInVzZWRcIiByaW5nIOKAkyB0aGF0IHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlIHVzZWQgZm9yIHNpZ25hbGluZyBjb21wbGV0aW9uIG9mIGd1ZXN0IHJlcXVlc3RzIGZyb20gdGhlIGhvc3Qgc2lkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCB0byBhZGQgYSBiYXRjaCBvZiBjb21wbGV0ZWQgZGVzY3JpcHRvcnMuIEkgd2lsbCBmb2N1cyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdXNlZCByaW5nJ3MgaGVhZCBwb2ludGVyLCB0aGUgZGVzY3JpcHRvciBpbmZvcm1hdGlvbiwgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB0aGF0IGFyZSBpbiBwbGF5LiBBbnkga2luZCBvZiBjYWNoZSBpbnZhbGlkYXRpb24gb3IgbWVtb3J5IGJhcnJpZXIgY2FsbHMgd2lsbCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBoZXJlLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGJlIGEgZmFpcmx5IGNyaXRpY2FsIHNlY3Rpb24gZm9yIHBlcmZvcm1hbmNlLCBzbyBJJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLiBBbmQgSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSByaW5nIGJ5IHRoZSBndWVzdCBhbmQgaG9zdC4gVGhlIHVzZSBvZiBtZW1vcnkgYmFycmllcnMgb3IgbG9ja3Mgd2lsbCBjZXJ0YWlubHkgY2F0Y2ggbXkgZXllLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTM3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzE6MDAuNjE5MjI3NjZaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTE2LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzExNjpcXHRpbnQgdmhvc3RfYWRkX3VzZWRfbihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXFxuMzExNzpcXHRcXHRcXHQgICAgIHUxNiAqbmhlYWRzLCB1bnNpZ25lZCBjb3VudClcXG4zMTE4OlxcdHtcXG4zMTE5OlxcdFxcdGJvb2wgaW5fb3JkZXIgPSB2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX0ZfSU5fT1JERVIpO1xcbjMxMjA6XFx0XFx0aW50IHI7XFxuMzEyMTpcXHRcXG4zMTIyOlxcdFxcdGlmICghaW5fb3JkZXIgfHwgIW5oZWFkcylcXG4zMTIzOlxcdFxcdFxcdHIgPSB2aG9zdF9hZGRfdXNlZF9uX29vbyh2cSwgaGVhZHMsIGNvdW50KTtcXG4zMTI0OlxcdFxcdGVsc2VcXG4zMTI1OlxcdFxcdFxcdHIgPSB2aG9zdF9hZGRfdXNlZF9uX2luX29yZGVyKHZxLCBoZWFkcywgbmhlYWRzLCBjb3VudCk7XFxuMzEyNjpcXHRcXG4zMTI3OlxcdFxcdGlmIChyIFxcdTAwM2MgMClcXG4zMTI4OlxcdFxcdFxcdHJldHVybiByO1xcbjMxMjk6XFx0XFxuMzEzMDpcXHRcXHQvKiBNYWtlIHN1cmUgYnVmZmVyIGlzIHdyaXR0ZW4gYmVmb3JlIHdlIHVwZGF0ZSBpbmRleC4gKi9cXG4zMTMxOlxcdFxcdHNtcF93bWIoKTtcXG4zMTMyOlxcdFxcdGlmICh2aG9zdF9wdXRfdXNlZF9pZHgodnEpKSB7XFxuMzEzMzpcXHRcXHRcXHR2cV9lcnIodnEsIFxcXCJGYWlsZWQgdG8gaW5jcmVtZW50IHVzZWQgaWR4XFxcIik7XFxuMzEzNDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4zMTM1OlxcdFxcdH1cXG4zMTM2OlxcdFxcdGlmICh1bmxpa2VseSh2cS1cXHUwMDNlbG9nX3VzZWQpKSB7XFxuMzEzNzpcXHRcXHRcXHQvKiBNYWtlIHN1cmUgdXNlZCBpZHggaXMgc2VlbiBiZWZvcmUgbG9nLiAqL1xcbjMxMzg6XFx0XFx0XFx0c21wX3dtYigpO1xcbjMxMzk6XFx0XFx0XFx0LyogTG9nIHVzZWQgaW5kZXggdXBkYXRlLiAqL1xcbjMxNDA6XFx0XFx0XFx0bG9nX3VzZWQodnEsIG9mZnNldG9mKHN0cnVjdCB2cmluZ191c2VkLCBpZHgpLFxcbjMxNDE6XFx0XFx0XFx0XFx0IHNpemVvZiB2cS1cXHUwMDNldXNlZC1cXHUwMDNlaWR4KTtcXG4zMTQyOlxcdFxcdFxcdGlmICh2cS1cXHUwMDNlbG9nX2N0eClcXG4zMTQzOlxcdFxcdFxcdFxcdGV2ZW50ZmRfc2lnbmFsKHZxLVxcdTAwM2Vsb2dfY3R4KTtcXG4zMTQ0OlxcdFxcdH1cXG4zMTQ1OlxcdFxcdHJldHVybiByO1xcbjMxNDY6XFx0fVxcbjMxNDc6XFx0RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfYWRkX3VzZWRfbik7XFxuMzE0ODpcXHRcXG4zMTQ5OlxcdHN0YXRpYyBib29sIHZob3N0X25vdGlmeShzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxcbjMxNTA6XFx0e1xcbjMxNTE6XFx0XFx0X191MTYgb2xkLCBuZXc7XFxuMzE1MjpcXHRcXHRfX3ZpcnRpbzE2IGV2ZW50O1xcbjMxNTM6XFx0XFx0Ym9vbCB2O1xcbjMxNTQ6XFx0XFx0LyogRmx1c2ggb3V0IHVzZWQgaW5kZXggdXBkYXRlcy4gVGhpcyBpcyBwYWlyZWRcXG4zMTU1OlxcdFxcdCAqIHdpdGggdGhlIGJhcnJpZXIgdGhhdCB0aGUgR3Vlc3QgZXhlY3V0ZXMgd2hlbiBlbmFibGluZ1xcbjMxNTY6XFx0XFx0ICogaW50ZXJydXB0cy4gKi9cXG4zMTU3OlxcdFxcdHNtcF9tYigpO1xcbjMxNTg6XFx0XFxuMzE1OTpcXHRcXHRpZiAodmhvc3RfaGFzX2ZlYXR1cmUodnEsIFZJUlRJT19GX05PVElGWV9PTl9FTVBUWSkgXFx1MDAyNlxcdTAwMjZcXG4zMTYwOlxcdFxcdCAgICB1bmxpa2VseSh2cS1cXHUwMDNlYXZhaWxfaWR4ID09IHZxLVxcdTAwM2VsYXN0X2F2YWlsX2lkeCkpXFxuMzE2MTpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4zMTYyOlxcdFxcbjMxNjM6XFx0XFx0aWYgKCF2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX1JJTkdfRl9FVkVOVF9JRFgpKSB7XFxuMzE2NDpcXHRcXHRcXHRfX3ZpcnRpbzE2IGZsYWdzO1xcbjMxNjU6XFx0XFx0XFx0aWYgKHZob3N0X2dldF9hdmFpbF9mbGFncyh2cSwgXFx1MDAyNmZsYWdzKSkge1xcbjMxNjY6XFx0XFx0XFx0XFx0dnFfZXJyKHZxLCBcXFwiRmFpbGVkIHRvIGdldCBmbGFnc1xcXCIpO1xcbjMxNjc6XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMzE2ODpcXHRcXHRcXHR9XFxuMzE2OTpcXHRcXHRcXHRyZXR1cm4gIShmbGFncyBcXHUwMDI2IGNwdV90b192aG9zdDE2KHZxLCBWUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVCkpO1xcbjMxNzA6XFx0XFx0fVxcbjMxNzE6XFx0XFx0b2xkID0gdnEtXFx1MDAzZXNpZ25hbGxlZF91c2VkO1xcbjMxNzI6XFx0XFx0diA9IHZxLVxcdTAwM2VzaWduYWxsZWRfdXNlZF92YWxpZDtcXG4zMTczOlxcdFxcdG5ldyA9IHZxLVxcdTAwM2VzaWduYWxsZWRfdXNlZCA9IHZxLVxcdTAwM2VsYXN0X3VzZWRfaWR4O1xcbjMxNzQ6XFx0XFx0dnEtXFx1MDAzZXNpZ25hbGxlZF91c2VkX3ZhbGlkID0gdHJ1ZTtcXG4zMTc1OlxcdFxcbjMxNzY6XFx0XFx0aWYgKHVubGlrZWx5KCF2KSlcXG4zMTc3OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjMxNzg6XFx0XFxuMzE3OTpcXHRcXHRpZiAodmhvc3RfZ2V0X3VzZWRfZXZlbnQodnEsIFxcdTAwMjZldmVudCkpIHtcXG4zMTgwOlxcdFxcdFxcdHZxX2Vycih2cSwgXFxcIkZhaWxlZCB0byBnZXQgdXNlZCBldmVudCBpZHhcXFwiKTtcXG4zMTgxOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjMxODI6XFx0XFx0fVxcbjMxODM6XFx0XFx0cmV0dXJuIHZyaW5nX25lZWRfZXZlbnQodmhvc3QxNl90b19jcHUodnEsIGV2ZW50KSwgbmV3LCBvbGQpO1xcbjMxODQ6XFx0fVxcbjMxODU6XFx0XFxuMzE4NjpcXHQvKiBUaGlzIGFjdHVhbGx5IHNpZ25hbHMgdGhlIGd1ZXN0LCB1c2luZyBldmVudGZkLiAqL1xcbjMxODc6XFx0dm9pZCB2aG9zdF9zaWduYWwoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcXG4zMTg4OlxcdHtcXG4zMTg5OlxcdFxcdC8qIFNpZ25hbCB0aGUgR3Vlc3QgdGVsbCB0aGVtIHdlIHVzZWQgc29tZXRoaW5nIHVwLiAqL1xcbjMxOTA6XFx0XFx0aWYgKHZxLVxcdTAwM2VjYWxsX2N0eC5jdHggXFx1MDAyNlxcdTAwMjYgdmhvc3Rfbm90aWZ5KGRldiwgdnEpKVxcbjMxOTE6XFx0XFx0XFx0ZXZlbnRmZF9zaWduYWwodnEtXFx1MDAzZWNhbGxfY3R4LmN0eCk7XFxuMzE5MjpcXHR9XFxuMzE5MzpcXHRFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9zaWduYWwpO1xcbjMxOTQ6XFx0XFxuMzE5NTpcXHQvKiBBbmQgaGVyZSdzIHRoZSBjb21ibyBtZWFsIGRlYWwuICBTdXBlcnNpemUgbWUhICovXFxuMzE5NjpcXHR2b2lkIHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWwoc3RydWN0IHZob3N0X2RldiAqZGV2LFxcbjMxOTc6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbjMxOTg6XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBoZWFkLCBpbnQgbGVuKVxcbjMxOTk6XFx0e1xcbjMyMDA6XFx0XFx0dmhvc3RfYWRkX3VzZWQodnEsIGhlYWQsIGxlbik7XFxuMzIwMTpcXHRcXHR2aG9zdF9zaWduYWwoZGV2LCB2cSk7XFxuMzIwMjpcXHR9XFxuMzIwMzpcXHRFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9hZGRfdXNlZF9hbmRfc2lnbmFsKTtcXG4zMjA0OlxcdFxcbjMyMDU6XFx0LyogbXVsdGktYnVmZmVyIHZlcnNpb24gb2Ygdmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbCAqL1xcbjMyMDY6XFx0dm9pZCB2aG9zdF9hZGRfdXNlZF9hbmRfc2lnbmFsX24oc3RydWN0IHZob3N0X2RldiAqZGV2LFxcbjMyMDc6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbjMyMDg6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxcbjMyMDk6XFx0XFx0XFx0XFx0XFx0IHUxNiAqbmhlYWRzLFxcbjMyMTA6XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGNvdW50KVxcbjMyMTE6XFx0e1xcbjMyMTI6XFx0XFx0dmhvc3RfYWRkX3VzZWRfbih2cSwgaGVhZHMsIG5oZWFkcywgY291bnQpO1xcbjMyMTM6XFx0XFx0dmhvc3Rfc2lnbmFsKGRldiwgdnEpO1xcbjMyMTQ6XFx0fVxcbjMyMTU6XFx0RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbF9uKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzE6MDAuNjE5NDQxMzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ2MjA5MjM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgR3Vlc3QgTWVtb3J5IFdyaXRlcyBpbiB2aG9zdCoqXG5cbkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgc29tZXRoaW5nLiBNeSBpbnRlcm5hbCBhbGFybXMgYXJlIGdvaW5nIG9mZiDigJMgYm90aCBgdmhvc3RfYWRkX3VzZWRfbl9vb29gIGFuZCBgdmhvc3RfYWRkX3VzZWRfbl9pbl9vcmRlcmAgYXJlICp3cml0aW5nKiB0byBndWVzdCBtZW1vcnkuIFRoYXQncyBhIGNyaXRpY2FsIHBvaW50IGZvciBzZWN1cml0eSBhbmQgY29ycmVjdG5lc3MuIEFueSB0aW1lIHlvdSdyZSB0b3VjaGluZyBndWVzdCBtZW1vcnkgZGlyZWN0bHkgZnJvbSB0aGUgaG9zdCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCB5b3UgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogY2VydGFpbiB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy4gVGhlcmUgYXJlIHNvIG1hbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB0aGVyZS5cblxuU28sIGxldCdzIGRyaWxsIGRvd24uIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGB2aG9zdF9hZGRfdXNlZF9uX29vb2AuIFRoYXQgXCJvb29cIiBzdWZmaXggaXMgcGFydGljdWxhcmx5IGludHJpZ3VpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQncyB0cnlpbmcgdG8gYWNjb21wbGlzaCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICpob3cqIGl0J3MgZG9pbmcgaXQsIGF0IGEgbG93IGxldmVsLiBBcmUgd2UgZGVhbGluZyB3aXRoIHBvdGVudGlhbCBvdXQtb2Ytb3JkZXIgY29tcGxldGlvbiBpc3N1ZXM/IEhvdyBkb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGggb3RoZXIgb3BlcmF0aW9ucz8gV2hhdCB2YWxpZGF0aW9uIHN0ZXBzIGFyZSBpbiBwbGFjZSB0byBlbnN1cmUgd2UncmUgbm90IGNvcnJ1cHRpbmcgdGhlIGd1ZXN0J3MgbWVtb3J5IHNwYWNlPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgY29kZSBwYXRoICp2ZXJ5KiBjYXJlZnVsbHkgaGVyZSwgbWFraW5nIHN1cmUgYWxsIG1lbW9yeSBhY2Nlc3Mgc2l6ZXMsIG9mZnNldHMsIGFuZCBib3VuZGFyeSBjaGVja3MgYXJlIHNvbGlkLiBJJ20gZ29pbmcgdG8gcGF5IGV4dHJhIGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGF0b21pY2l0eSBvciB0aGUgdXNlIG9mIGxvY2tzIG9yIGJhcnJpZXJzLCB0byB2ZXJpZnkgZXZlcnl0aGluZyBpcyBwcm90ZWN0ZWQuIExldCdzIG1ha2Ugc3VyZSBpdCdzIGRvaW5nIHByZWNpc2VseSB3aGF0IGl0ICpjbGFpbXMqIHRvIGJlIGRvaW5nLCBhbmQgdGhhdCBpdCdzIGRvaW5nIGl0IHNhZmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkwOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzE6MDYuMDgxNTM1ODY1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAzNixcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzAzNjpcXHRcXHR9XFxuMzAzNzpcXHRcXHRvbGQgPSB2cS1cXHUwMDNlbGFzdF91c2VkX2lkeDtcXG4zMDM4OlxcdFxcdG5ldyA9ICh2cS1cXHUwMDNlbGFzdF91c2VkX2lkeCArPSBjb3VudCk7XFxuMzAzOTpcXHRcXHQvKiBJZiB0aGUgZHJpdmVyIG5ldmVyIGJvdGhlcnMgdG8gc2lnbmFsIGluIGEgdmVyeSBsb25nIHdoaWxlLFxcbjMwNDA6XFx0XFx0ICogdXNlZCBpbmRleCBtaWdodCB3cmFwIGFyb3VuZC4gSWYgdGhhdCBoYXBwZW5zLCBpbnZhbGlkYXRlXFxuMzA0MTpcXHRcXHQgKiBzaWduYWxsZWRfdXNlZCBpbmRleCB3ZSBzdG9yZWQuIFRPRE86IG1ha2Ugc3VyZSBkcml2ZXJcXG4zMDQyOlxcdFxcdCAqIHNpZ25hbHMgYXQgbGVhc3Qgb25jZSBpbiAyXjE2IGFuZCByZW1vdmUgdGhpcy4gKi9cXG4zMDQzOlxcdFxcdGlmICh1bmxpa2VseSgodTE2KShuZXcgLSB2cS1cXHUwMDNlc2lnbmFsbGVkX3VzZWQpIFxcdTAwM2MgKHUxNikobmV3IC0gb2xkKSkpXFxuMzA0NDpcXHRcXHRcXHR2cS1cXHUwMDNlc2lnbmFsbGVkX3VzZWRfdmFsaWQgPSBmYWxzZTtcXG4zMDQ1OlxcdFxcdHJldHVybiAwO1xcbjMwNDY6XFx0fVxcbjMwNDc6XFx0XFxuMzA0ODpcXHRzdGF0aWMgaW50IHZob3N0X2FkZF91c2VkX25fb29vKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbjMwNDk6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXFxuMzA1MDpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBjb3VudClcXG4zMDUxOlxcdHtcXG4zMDUyOlxcdFxcdGludCBzdGFydCwgbiwgcjtcXG4zMDUzOlxcdFxcbjMwNTQ6XFx0XFx0c3RhcnQgPSB2cS1cXHUwMDNlbGFzdF91c2VkX2lkeCBcXHUwMDI2ICh2cS1cXHUwMDNlbnVtIC0gMSk7XFxuMzA1NTpcXHRcXHRuID0gdnEtXFx1MDAzZW51bSAtIHN0YXJ0O1xcbjMwNTY6XFx0XFx0aWYgKG4gXFx1MDAzYyBjb3VudCkge1xcbjMwNTc6XFx0XFx0XFx0ciA9IF9fdmhvc3RfYWRkX3VzZWRfbih2cSwgaGVhZHMsIG4pO1xcbjMwNTg6XFx0XFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbjMwNTk6XFx0XFx0XFx0XFx0cmV0dXJuIHI7XFxuMzA2MDpcXHRcXHRcXHRoZWFkcyArPSBuO1xcbjMwNjE6XFx0XFx0XFx0Y291bnQgLT0gbjtcXG4zMDYyOlxcdFxcdH1cXG4zMDYzOlxcdFxcdHJldHVybiBfX3Zob3N0X2FkZF91c2VkX24odnEsIGhlYWRzLCBjb3VudCk7XFxuMzA2NDpcXHR9XFxuMzA2NTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzE6MDYuMDgxNzU1MDE1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTUwOTA4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOlxuXG4qKkludGVybmFsIENvbnNpZGVyYXRpb25zIG9uIGBfX3Zob3N0X2FkZF91c2VkX25gKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBgX192aG9zdF9hZGRfdXNlZF9uYC4gVGhpcyBpcyBjcnVjaWFsLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGZvciBlZmZpY2llbnRseSBoYW5kbGluZyB0aGUgYWNjdW11bGF0aW9uIG9mIHVzZWQgYnVmZmVycyB3aXRoaW4gYSB2aXJ0dWFsIGhvc3QgY29udGV4dC4gSXQncyB0aGUgY3JpdGljYWwgYnVpbGRpbmcgYmxvY2suIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gY2FsbDogSSBuZWVkIHRvIHF1aWNrbHkgYW5kIHJlbGlhYmx5IGFkZCBuZXcgZW50cmllcyB0byB0aGUgdmhvc3QncyAndXNlZCcgcmluZywgd2hpY2gsIGJ5IGRlZmluaXRpb24sIGltcGxpZXMgbWFuYWdpbmcgYSBwb3RlbnRpYWxseSBjb25jdXJyZW50IGRhdGEgc3RydWN0dXJlLiBTbywgSSBoYXZlIHRvIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCB0aGUgbG9ja2luZyBzZW1hbnRpY3MuIEFyZSB3ZSBkZWFsaW5nIHdpdGggc3BpbmxvY2tzLCBtdXRleGVzLCBvciBzb21lIGtpbmQgb2YgUkNVPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIHRoZXJlJ3MgY29udGVudGlvbj8gSG93IGFyZSB3ZSBlbnN1cmluZyBhdG9taWNpdHkgb2YgdGhlIGJ1ZmZlciB1cGRhdGVzLCBhbmQgd2hhdCdzIHRoZSB0eXBpY2FsIENQVSBjb3N0IHRvIGRvIHRoYXQ/IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2sgdGhpcyB3aWxsIGNyZWF0ZSwgZXNwZWNpYWxseSB1bmRlciBoZWF2eSBJL08gbG9hZC4gSWYgdGhlcmUncyBoaWdoIGxvY2sgY29udGVudGlvbiwgaXQgd2lsbCBsaWtlbHkgYmUgcmVmbGVjdGVkIGluIHBlcmZvcm1hbmNlIHRlc3RzLCBhbmQgSeKAmWxsIGhhdmUgdG8gZXhhbWluZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEkgYW0gdHJ5aW5nIHRvIGRldGVybWluZSB0aGUgd29yc3QtY2FzZSBzY2VuYXJpby5cblxuTW9yZW92ZXIsIEkgaGF2ZSB0byBlbnN1cmUgY29ycmVjdCBoYW5kbGluZyBvZiB0aGUgd3JhcC1hcm91bmQgY29uZGl0aW9ucy4gV2UgaGF2ZSB0byBjb25zaWRlciBob3cgdG8gaGFuZGxlIHRoZSByaW5nIGJ1ZmZlciwgd2hhdCBpcyB0aGlzIHJpbmcgYnVmZmVyIHN0cnVjdHVyZSwgaXMgaXQgYWxpZ25lZCwgZG9lcyBpdCBjb250YWluIGFueSBraW5kIG9mIHBhZGRpbmcsIGV0Yy4gQXJlIHRoZSBidWZmZXIgaW5kZXhlcyBjb3JyZWN0bHkgbWFuYWdlZD8gV2hhdCBraW5kIG9mIGNoZWNrcyBhcmUgaW4gcGxhY2UgdG8gcHJldmVudCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzPyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgcm9idXN0LiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSBhcmUgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSAqbiogcGFyYW1ldGVyIGluIHRoaXMgZnVuY3Rpb247IHRoYXQgbnVtYmVyIHRlbGxzIHVzIGhvdyBtYW55IGVsZW1lbnRzIG5lZWQgdG8gYmUgYWRkZWQgdG8gdGhlIHVzZWQgcmluZy4gV2UgbXVzdCBtYWtlIHN1cmUgdGhhdCBpdCdzIHZhbGlkYXRlZCwgdGhhdCB3ZSBkb24ndCBhY2NpZGVudGFsbHkgYWRkIGludmFsaWQgZGF0YSB0aGF0IGNhbiBjb21wcm9taXNlIHRoZSBob3N0J3MgaW50ZWdyaXR5LiBBbHNvLCBob3cgYXJlIHdlIGhhbmRsaW5nIHRoZSBhc3NvY2lhdGVkIGRlc2NyaXB0b3JzIHRoYXQgYXJlIGJlaW5nIGFkZGVkPyBBcmUgdGhleSBiZWluZyBwcm9wZXJseSBpbml0aWFsaXplZCwgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLCBvciBhcmUgdGhlcmUgZGFuZ2xpbmcgcG9pbnRlcnM/IEFsc28sIGhvdyBhcmUgd2UgbWFuYWdpbmcgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZXNlIGRlc2NyaXB0b3JzPyBUaGlzIGlzIGFsc28gYSBjcml0aWNhbCBjb25zaWRlcmF0aW9uLiBGaW5hbGx5LCBob3cgYWJvdXQgZXJyb3IgaGFuZGxpbmc/IElzIHRoZXJlIHByb3BlciBlcnJvciBjaGVja2luZyBpZiB0aGVyZSBhcmUgaW5zdWZmaWNpZW50IHJlc291cmNlcyBvciB1bmV4cGVjdGVkIGNvbmRpdGlvbnM/IFRoZXNlIGFyZSBhbGwgdGhlIGtpbmRzIG9mIHF1ZXN0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBldmVuIGF0IGEgaGlnaCBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgyMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzE6MTEuNDk2ODQ4NzIxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Nzk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAwMCxcbiAgXCJMaW5lQ291bnRcIjogMzZcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzAwMDpcXHRFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kaXNjYXJkX3ZxX2Rlc2MpO1xcbjMwMDE6XFx0XFxuMzAwMjpcXHQvKiBBZnRlciB3ZSd2ZSB1c2VkIG9uZSBvZiB0aGVpciBidWZmZXJzLCB3ZSB0ZWxsIHRoZW0gYWJvdXQgaXQuICBXZSdsbCB0aGVuXFxuMzAwMzpcXHQgKiB3YW50IHRvIG5vdGlmeSB0aGUgZ3Vlc3QsIHVzaW5nIGV2ZW50ZmQuICovXFxuMzAwNDpcXHRpbnQgdmhvc3RfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHVuc2lnbmVkIGludCBoZWFkLCBpbnQgbGVuKVxcbjMwMDU6XFx0e1xcbjMwMDY6XFx0XFx0c3RydWN0IHZyaW5nX3VzZWRfZWxlbSBoZWFkcyA9IHtcXG4zMDA3OlxcdFxcdFxcdGNwdV90b192aG9zdDMyKHZxLCBoZWFkKSxcXG4zMDA4OlxcdFxcdFxcdGNwdV90b192aG9zdDMyKHZxLCBsZW4pXFxuMzAwOTpcXHRcXHR9O1xcbjMwMTA6XFx0XFx0dTE2IG5oZWFkcyA9IDE7XFxuMzAxMTpcXHRcXG4zMDEyOlxcdFxcdHJldHVybiB2aG9zdF9hZGRfdXNlZF9uKHZxLCBcXHUwMDI2aGVhZHMsIFxcdTAwMjZuaGVhZHMsIDEpO1xcbjMwMTM6XFx0fVxcbjMwMTQ6XFx0RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfYWRkX3VzZWQpO1xcbjMwMTU6XFx0XFxuMzAxNjpcXHRzdGF0aWMgaW50IF9fdmhvc3RfYWRkX3VzZWRfbihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG4zMDE3OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcXG4zMDE4OlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBjb3VudClcXG4zMDE5OlxcdHtcXG4zMDIwOlxcdFxcdHZyaW5nX3VzZWRfZWxlbV90IF9fdXNlciAqdXNlZDtcXG4zMDIxOlxcdFxcdHUxNiBvbGQsIG5ldztcXG4zMDIyOlxcdFxcdGludCBzdGFydDtcXG4zMDIzOlxcdFxcbjMwMjQ6XFx0XFx0c3RhcnQgPSB2cS1cXHUwMDNlbGFzdF91c2VkX2lkeCBcXHUwMDI2ICh2cS1cXHUwMDNlbnVtIC0gMSk7XFxuMzAyNTpcXHRcXHR1c2VkID0gdnEtXFx1MDAzZXVzZWQtXFx1MDAzZXJpbmcgKyBzdGFydDtcXG4zMDI2OlxcdFxcdGlmICh2aG9zdF9wdXRfdXNlZCh2cSwgaGVhZHMsIHN0YXJ0LCBjb3VudCkpIHtcXG4zMDI3OlxcdFxcdFxcdHZxX2Vycih2cSwgXFxcIkZhaWxlZCB0byB3cml0ZSB1c2VkXFxcIik7XFxuMzAyODpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4zMDI5OlxcdFxcdH1cXG4zMDMwOlxcdFxcdGlmICh1bmxpa2VseSh2cS1cXHUwMDNlbG9nX3VzZWQpKSB7XFxuMzAzMTpcXHRcXHRcXHQvKiBNYWtlIHN1cmUgZGF0YSBpcyBzZWVuIGJlZm9yZSBsb2cuICovXFxuMzAzMjpcXHRcXHRcXHRzbXBfd21iKCk7XFxuMzAzMzpcXHRcXHRcXHQvKiBMb2cgdXNlZCByaW5nIGVudHJ5IHdyaXRlLiAqL1xcbjMwMzQ6XFx0XFx0XFx0bG9nX3VzZWQodnEsICgodm9pZCBfX3VzZXIgKil1c2VkIC0gKHZvaWQgX191c2VyICopdnEtXFx1MDAzZXVzZWQpLFxcbjMwMzU6XFx0XFx0XFx0XFx0IGNvdW50ICogc2l6ZW9mICp1c2VkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzE6MTEuNDk3MDM3NzMxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NzM0MzA2MTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdmhvc3RfcHV0X3VzZWQgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgdmhvc3RfcHV0X3VzZWRgIGFuZCBob3cgaXQgaGFuZGxlcyBjb3B5aW5nIGRhdGEgdG8gdXNlciBzcGFjZSDigJMgc3BlY2lmaWNhbGx5LCB0byB0aGUgZ3Vlc3QncyBtZW1vcnkuIFRoZSBjb3JlIHRoaW5nIGhlcmUgaXMgaG93IGBoZWFkc2AgZ2V0cyBwb3B1bGF0ZWQuIEl0IHNlZW1zIGxpa2UgYHZob3N0X3Zzb2NrX2FkZF91c2VkYCBwb3B1bGF0ZXMgYGhlYWRzYCB3aXRoIHRoZSBgdXNlZC1cdTAwM2VpZGAgYW5kIGB1c2VkLVx1MDAzZWxlbmAgdmFsdWVzLCB3aGljaCBhcmUga2V5IHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlZCBidWZmZXIuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHRoZSBgc3RydWN0IHZyaW5nX3VzZWRfZWxlbWAgZG9lc24ndCBoYXZlIGFueSBwYWRkaW5nLCB3aGljaCBpcyBhIGdyZWF0IHNhZmVndWFyZC4gVGhpcyB0ZWxscyBtZSB3ZSAqc2hvdWxkbid0KiBoYXZlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgaXNzdWUgaGVyZSwgYmVjYXVzZSB3ZSBhcmUgb25seSB0cmFuc21pdHRpbmcgZXhwbGljaXRseSBpbml0aWFsaXplZCBkYXRhIHRvIHRoZSB1c2VyIHNwYWNlLiBUaGF0J3MgYSByZWxpZWYuXG5cblRoZSBvdGhlciBiaXQgb2YgY29kZSBwb3B1bGF0ZXMgdGhlIGB2cS1cdTAwM2VuaGVhZHNgIGFycmF5IHdpdGggYDFgIGZvciBlYWNoIGVsZW1lbnQuIEhvd2V2ZXIsIHRoaXMgaXMganVzdCB0byBjb21wdXRlIGB2cS1cdTAwM2VsYXN0X3VzZWRfaWR4YCBpbiBgdmhvc3RfYWRkX3VzZWRfbl9pbl9vcmRlcmAgYW5kIGlzIG5vdCBpbnZvbHZlZCBpbiBhbnkgZGF0YSBiZWluZyBjb3BpZWQgdG8gdGhlIHVzZXIgc3BhY2UuIFNvLCB0aGUgb25seSBkYXRhIGlzIHRoZSB1c2VkIGluZm9ybWF0aW9uLCB3aGljaCBpcyBwb3B1bGF0ZWQuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXMgYnkgZ29pbmcgdGhyb3VnaCBgdmhvc3RfcHV0X3VzZWRgIGluIGRldGFpbCB0byBlbnN1cmUgdGhhdCBub3RoaW5nIGlzIHNsaXBwaW5nIHRocm91Z2ggdGhlIGNyYWNrcywgYnV0LCBhdCBsZWFzdCBhdCBmaXJzdCBnbGFuY2UsIHRoaW5ncyBsb29rIHNhZmUgYW5kIHNvdW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk3NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjMxOjI3LjIzMTM0NjMxMloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxNTAwMDUzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgdmhvc3RfcHV0X3VzZWRcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MTQ1OT1zdGF0aWMgaW5saW5lIGludCB2aG9zdF9wdXRfYXZhaWxfZXZlbnQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTQ2NC1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MTQ2NTpzdGF0aWMgaW5saW5lIGludCB2aG9zdF9wdXRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTQ2Ni1cXHRcXHRcXHRcXHQgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZCwgaW50IGlkeCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzE6MjkuNDQ2MzUxMDdaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjEwOTc4OTAyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHZob3N0X3B1dF91c2VkYCoqXG5cbk9rYXksIGxldCdzIHB1bGwgdXAgdGhlIGNvZGUgZm9yIGB2aG9zdF9wdXRfdXNlZGAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgdmhvc3QtbmV0IGFyY2hpdGVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHZpcnRxdWV1ZSwgdGhlIHNoYXJlZCBtZW1vcnkgcmluZyBidWZmZXIsIGFuZCB0aGUgZ3Vlc3QncyB2aWV3IG9mIGRlc2NyaXB0b3JzLiBJJ20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgZGV0YWlscyByZWdhcmRpbmc6XG5cbiogICAqKlN5bmNocm9uaXphdGlvbjoqKiBXaGF0IGxvY2tpbmcgbWVjaGFuaXNtcyBhcmUgZW1wbG95ZWQgdG8gZW5zdXJlIHNhZmUgYWNjZXNzIHRvIHRoZSB1c2VkIHJpbmc/IElzIHRoZXJlIGFueSBjb250ZW50aW9uIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB0aGUgaG9zdCBhbmQgZ3Vlc3QsIGFuZCBob3cgYXJlIHRoZXkgaGFuZGxlZCBpbiB0aGlzIGZ1bmN0aW9uPyBJJ2xsIGJlIGZvY3VzZWQgb24gbWVtb3J5IGJhcnJpZXJzLlxuKiAgICoqRGVzY3JpcHRvciBQcm9jZXNzaW5nOioqIEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gbWFwIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgYHZob3N0X3VzZWRgIGVudHJ5IHRvIHRoZSBjb3JyZXNwb25kaW5nIHZpcnRxdWV1ZSBkZXNjcmlwdG9ycz8gSXMgaXQgdHJhdmVyc2luZyBhIGxpbmtlZCBsaXN0IG9yIHJlbHlpbmcgb24gZGlyZWN0IGluZGV4aW5nPyBUaGlzIGhhcyBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IHdpdGggbGFyZ2UgbnVtYmVycyBvZiBkZXNjcmlwdG9ycy4gQXJlIHRoZXJlIGFueSBvcHRpbWl6YXRpb25zIGRvbmUgaGVyZT9cbiogICAqKk5vdGlmaWNhdGlvbjoqKiBEb2VzIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgdHJpZ2dlciBhIGd1ZXN0IG5vdGlmaWNhdGlvbiwgb3IgZG9lcyBpdCBkZWZlciB0aGF0IGRlY2lzaW9uIHRvIGFub3RoZXIgcGFydCBvZiB0aGUgc3lzdGVtPyBJZiBpdCBkb2VzIHRyaWdnZXIgdGhlIG5vdGlmaWNhdGlvbiwgaG93IGRvZXMgaXQgZG8gc28/IFdoYXQncyB0aGUgaW1wYWN0IG9uIGxhdGVuY3k/XG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBBcmUgdGhlcmUgYW55IGNoZWNrcyBmb3IgbWFsZm9ybWVkIHVzZWQgZW50cmllcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcz8gV2hhdCBoYXBwZW5zIGlmIGFuIGVycm9yIGlzIGRldGVjdGVkPyBIb3cgYXJlIGVycm9ycyBoYW5kbGVkPyBEb2VzIGl0IHJldHVybiBhbiBlcnJvciBjb2RlIG9yIHRyaWdnZXIgYSBtb3JlIHNldmVyZSBzeXN0ZW0gZmFpbHVyZT9cbiogICAqKkNvbnRleHQ6KiogV2hhdCdzIHRoZSB0eXBpY2FsIGNhbGxpbmcgY29udGV4dD8gSXMgaXQgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCBoYW5kbGVyLCB0aGUga2VybmVsIHRocmVhZCwgb3IgYm90aD8gVGhpcyB3aWxsIGluZmx1ZW5jZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdW5jdGlvbidzIHRpbWluZyBhbmQgcmVzb3VyY2UgY29uc3RyYWludHMuXG4qICAgKipJbnRlZ3JhdGlvbjoqKiBIb3cgaXMgdGhpcyBmdW5jdGlvbiByZWxhdGVkIHRvIG90aGVyIHZob3N0LW5ldCBmdW5jdGlvbnMsIGUuZy4gYHZob3N0X2dldF9kZXNjYCwgYHZob3N0X2FkZF91c2VkYCwgYW5kIGB2aG9zdF9wb2xsYC4gSXQgd2lsbCBiZSBoZWxwZnVsIHRvIHVuZGVyc3RhbmQgdGhlIGNoYWluIG9mIGV2ZW50cyB0aGF0IGxlYWRzIHRvIHRoaXMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkLlxuXG5VbHRpbWF0ZWx5LCBJIHdhbnQgdG8gY29uZmlybSBteSBtZW50YWwgbW9kZWwgb2YgdGhlIGRhdGEgZmxvdyBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3IgaW1wcm92ZW1lbnQgaW4gdGhlIHZob3N0LW5ldCBpbXBsZW1lbnRhdGlvbi4gVGltZSB0byBnZXQgdG8gd29yayFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NzMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjozMTo1MC41NDQyNDQzN1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC92aG9zdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NjU6XFx0c3RhdGljIGlubGluZSBpbnQgdmhvc3RfcHV0X3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuMTQ2NjpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZCwgaW50IGlkeCxcXG4xNDY3OlxcdFxcdFxcdFxcdFxcdCBpbnQgY291bnQpXFxuMTQ2ODpcXHR7XFxuMTQ2OTpcXHRcXHRyZXR1cm4gdmhvc3RfY29weV90b191c2VyKHZxLCB2cS1cXHUwMDNldXNlZC1cXHUwMDNlcmluZyArIGlkeCwgaGVhZCxcXG4xNDcwOlxcdFxcdFxcdFxcdFxcdCAgY291bnQgKiBzaXplb2YoKmhlYWQpKTtcXG4xNDcxOlxcdH1cXG4xNDcyOlxcdFxcbjE0NzM6XFx0c3RhdGljIGlubGluZSBpbnQgdmhvc3RfcHV0X3VzZWRfZmxhZ3Moc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXFxuMTQ3NDpcXHRcXG4xNDc1OlxcdHtcXG4xNDc2OlxcdFxcdHJldHVybiB2aG9zdF9wdXRfdXNlcih2cSwgY3B1X3RvX3Zob3N0MTYodnEsIHZxLVxcdTAwM2V1c2VkX2ZsYWdzKSxcXG4xNDc3OlxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZ2cS1cXHUwMDNldXNlZC1cXHUwMDNlZmxhZ3MpO1xcbjE0Nzg6XFx0fVxcbjE0Nzk6XFx0XFxuMTQ4MDpcXHRzdGF0aWMgaW5saW5lIGludCB2aG9zdF9wdXRfdXNlZF9pZHgoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXFxuMTQ4MTpcXHRcXG4xNDgyOlxcdHtcXG4xNDgzOlxcdFxcdHJldHVybiB2aG9zdF9wdXRfdXNlcih2cSwgY3B1X3RvX3Zob3N0MTYodnEsIHZxLVxcdTAwM2VsYXN0X3VzZWRfaWR4KSxcXG4xNDg0OlxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZ2cS1cXHUwMDNldXNlZC1cXHUwMDNlaWR4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzE6NTAuNTQ0MzkyMTVaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI5MzA4MTMyMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrIGluIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUuIEkgc2VlIGB2aG9zdF9jb3B5X3RvX3VzZXJgIGNvcHlpbmcgYGNvdW50ICogc2l6ZW9mKCpoZWFkKWAgYnl0ZXMgZnJvbSBgaGVhZGAgdG8gdGhlIHVzZWQgcmluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgbGVhZCB0byBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha2FnZS4gU2luY2UgYGhlYWRgIHBvaW50cyB0byBgdnEtXHUwMDNlaGVhZHNgLCBhbmQgYHZxLVx1MDAzZWhlYWRzYCBpcyBhbiBhcnJheSBvZiBgc3RydWN0IHZyaW5nX3VzZWRfZWxlbWAsIEkgbmVlZCB0byBjb25maXJtIGVhY2ggZWxlbWVudCBvZiBgc3RydWN0IHZyaW5nX3VzZWRfZWxlbWAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBjb3B5LiBGcm9tIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUgaW4gYHZob3N0X3Zzb2NrX2FkZF91c2VkYCwgYm90aCBgaWRgIGFuZCBgbGVuYCB3aXRoaW4gZWFjaCBlbGVtZW50ICphcmUqIGluaXRpYWxpemVkLiBHb29kLCBubyBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgdGhlcmUuXG5cbkkgcmVtZW1iZXIgdGhpcyBzdHJ1Y3Q6XG5cbmBgYGNcbnN0cnVjdCB2cmluZ191c2VkX2VsZW0ge1xuXHQvKiBJbmRleCBvZiBzdGFydCBvZiB1c2VkIGRlc2NyaXB0b3IgY2hhaW4uICovXG5cdF9fdmlydGlvMzIgaWQ7XG5cdC8qIFRvdGFsIGxlbmd0aCBvZiB0aGUgZGVzY3JpcHRvciBjaGFpbiB3aGljaCB3YXMgdXNlZCAod3JpdHRlbiB0bykgKi9cblx0X192aXJ0aW8zMiBsZW47XG59O1xuYGBgXG5cblllYWgsIDMyLWJpdCBpbnRlZ2VycywgNCBieXRlcyBlYWNoLCBubyBwYWRkaW5nLiBUaGUgc2l6ZSBpcyBkZWZpbml0ZWx5IDggYnl0ZXMuIE5vIGlzc3VlIHRoZXJlLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBuZXcgY2hhbmdlcy4gVGhlIHBhdGNoIGFkZHMgYHVzZWRfY291bnRgIGFuZCBgdXNlZF9saW1pdGAuIEknbSBnb2luZyB0byBsb29rIGNhcmVmdWxseSBhdCBob3cgdGhlc2UgdmFyaWFibGVzIGFyZSB1c2VkLiBgdXNlZF9saW1pdGAgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiBgdnEtXHUwMDNlbnVtYCwgYHZxLVx1MDAzZWRldi1cdTAwM2Vpb3ZfbGltaXRgLCBhbmQgYHZxLVx1MDAzZWRldi1cdTAwM2V3ZWlnaHRgLiBJZiBgdXNlZF9saW1pdGAgaXMgemVybywgd2UgYmFpbCBvdXQgZWFybHksIHdoaWNoIHNlZW1zIHJlYXNvbmFibGUuIFRoZSBjb2RlIHRoZW4gbG9vcHMsIGFkZGluZyB1c2VkIGVsZW1lbnRzLiBUaGUga2V5IGlzIGluIGB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCBcdTAwMjZ1c2VkX2NvdW50KWAgY2FsbGVkIHdoZW4gYHVzZWRfY291bnQgPT0gdXNlZF9saW1pdGAsIHRoaXMgZmx1c2hlcyB1c2VkIGVsZW1lbnRzIGFuZCByZXNldHMgYHVzZWRfY291bnRgLiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBiYXRjaGluZyBvcHRpbWl6YXRpb24uIEl0IGZsdXNoZXMgYW55IHJlbWFpbmluZyB1c2VkIGVsZW1lbnRzIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AgYXMgd2VsbC4gSSBkb24ndCBzZWUgYW55IGltbWVkaWF0ZSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoaXMgYmF0Y2hpbmcgbG9naWMuXG5cbkxldCBtZSByZXZpZXcgdGhlIHBhdGNoIHNjb3BlLiBUaGUgY29kZSBvbmx5IG1vZGlmaWVzIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgIGFuZCBpbnRyb2R1Y2VzIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCBhbmQgYHZob3N0X3Zzb2NrX2FkZF91c2VkYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmVuJ3QgY2FsbGluZyBhbnl0aGluZyBlbHNlLiBPa2F5LCBub3RoaW5nIGVsc2UgaXMgdG91Y2hlZC4gU28sIHRoaXMgaXMgKnB1cmVseSogYW4gb3B0aW1pemF0aW9uIHRvIGJhdGNoIHRoZSB1cGRhdGVzLCB3aGljaCBzZWVtcyByZWFzb25hYmxlLiBObyBuZXcgZnVuY3Rpb25zIGFyZSBtb2RpZmllZCwgc28gdGhlcmUncyBubyB3YXkgdGhpcyB3b3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLlxuXG5JIHNob3VsZCB2ZXJpZnkgaG93IGB2cS1cdTAwM2VoZWFkc2AgaXMgYWxsb2NhdGVkIHRvIGJlIDEwMCUgc3VyZS4gVGhhdCdzIGFsbG9jYXRlZCBpbiBgdmhvc3RfZGV2X2FsbG9jX2lvdmVjc2Agb3IgYSBzaW1pbGFyIGZ1bmN0aW9uLCBzbyBpdCBzaG91bGQgYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gdGhlIGNvZGUsIGFuZCB0aGUgY29udGV4dCBvZiB0aGUgcGF0Y2gsIEkgZG9uJ3Qgc2VlIGFueSByZWFzb24gZm9yIEtNU0FOIGhlcmUuIEl0IHNob3VsZCBiZSBzYWZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ0MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjMyOjAzLjQ3NTIwNzUxNloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMzIyNzQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoZWFkcyA9IGttYWxsb2NfYXJyYXlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92aG9zdC5jPTUxMD1zdGF0aWMgbG9uZyB2aG9zdF9kZXZfYWxsb2NfaW92ZWNzKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy01MTktXFx0XFx0dnEtXFx1MDAzZWhlYWRzID0ga21hbGxvY19vYmpzKCp2cS1cXHUwMDNlaGVhZHMsIGRldi1cXHUwMDNlaW92X2xpbWl0KTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6NTIwOlxcdFxcdHZxLVxcdTAwM2VuaGVhZHMgPSBrbWFsbG9jX2FycmF5KGRldi1cXHUwMDNlaW92X2xpbWl0LCBzaXplb2YoKnZxLVxcdTAwM2VuaGVhZHMpLFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy01MjEtXFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjMyOjA0Ljk3ODQ0MDYzNFoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTA4ODA0NTk4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIE1lbW9yeSBTYWZldHkgSXNzdWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGZpcnN0IGxpbmUsIGB2cS1cdTAwM2VoZWFkcyA9IGttYWxsb2Nfb2JqcygqdnEtXHUwMDNlaGVhZHMsIGRldi1cdTAwM2Vpb3ZfbGltaXQpO2AgaXMgd2hhdCdzIGNhdGNoaW5nIG15IGV5ZS4gSSBpbW1lZGlhdGVseSBzdXNwZWN0IGBrbWFsbG9jX29ianNgIGlzIGEgbWFjcm8sIHdoaWNoIGlzIHN0YW5kYXJkIHByYWN0aWNlIGluIHRoZXNlIHR5cGVzIG9mIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBjb250ZXh0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCdzIGRvaW5nLCBzcGVjaWZpY2FsbHkgd2l0aCByZXNwZWN0IHRvIG1lbW9yeSBhbGxvY2F0aW9uLlxuXG5UaGVuLCB0aGVyZSdzIGEgcXVpY2sgdGhvdWdodC4uLiBpcyBga21hbGxvY19hcnJheWAgcG90ZW50aWFsbHkgdXNlZCBieSBga21hbGxvY19vYmpzYCBmb3IgYG5oZWFkc2A/IFRoYXQgd291bGQgbWFrZSBzZW5zZSwgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgdGhlIGJvdW5kcy4gVGhlIGB1c2VkX2NvdW50YCB2YXJpYWJsZSBzZWVtcyBrZXkgaGVyZS4gSSdtIHRoaW5raW5nIGFib3V0IG1lbW9yeSBzYWZldHkuIEl0J3MgYm91bmRlZCBieSBgdXNlZF9saW1pdGAsIHdoaWNoIGluIHR1cm4sIGlzIGJvdW5kZWQgYnkgYHZxLVx1MDAzZWRldi1cdTAwM2Vpb3ZfbGltaXRgLiBUaGlzIHN1Z2dlc3RzIGEgY2FyZWZ1bCBjb250cm9sIG9mIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgYWxsb2NhdGVkLiBJZiB0aGlzIHJlYXNvbmluZyBpcyByaWdodCwgaXQgaW1wbGllcyB0aGF0IHdlICpzaG91bGRuJ3QqIG92ZXJmbG93IGB2cS1cdTAwM2VoZWFkc2AuXG5cbkFuZCBqdXN0IHRvIGNsYXJpZnksIHdlIGFyZSBvbmx5IGNvcHlpbmcgYHVzZWRfY291bnRgIGVsZW1lbnRzIHRvIHVzZXJzcGFjZSwgYW5kIGl0IHNob3VsZCBiZSB0aG9zZSBlbGVtZW50cyB0aGF0IHdlcmUgaW5pdGlhbGl6ZWQuIFRoYXQgbWVhbnMgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHdlIGFyZW4ndCBwZXJmb3JtaW5nIGFueSBvdXQtb2YtYm91bmRzIHJlYWRzIGZyb20gYHZxLVx1MDAzZWhlYWRzYC4gVGhhdCdzIGEgaHVnZSByZWxpZWYuXG5cbkJ1dCBJJ20gbm90IGdvaW5nIHRvIHRha2UgdGhhdCBhcyBnb3NwZWwuIFdlIHN0aWxsIG5lZWQgdG8gdmVyaWZ5IHdoYXQgYGttYWxsb2Nfb2Jqc2AgaXMgYWN0dWFsbHkgZG9pbmcuIExldCdzIGRlbHZlIGludG8gdGhhdCBkZWZpbml0aW9uIGFuZCBlbnN1cmUgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaW1lIHRvIHZlcmlmeSB0aG9zZSBhc3N1bXB0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3OTAsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzI6MjQuMDY2NDg4ODE2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTExMTY1MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttYWxsb2Nfb2Jqc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDM2NzIgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjkzOTprbWFsbG9jKCksIGt6YWxsb2MoKSwga21hbGxvY19vYmpzKCksIGt6YWxsb2Nfb2JqcygpLCB2bWFsbG9jKCksIGFuZFxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0MC12emFsbG9jKCkuICBQbGVhc2UgcmVmZXIgdG8gdGhlIEFQSSBkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NTg9VGhlIHByZWZlcnJlZCBmb3JtIGZvciBhbGxvY2F0aW5nIGFuIGFycmF5IGlzIHRoZSBmb2xsb3dpbmc6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjEtXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTYyOlxcdHAgPSBrbWFsbG9jX29ianMoKnAsIG4sIC4uLik7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTYzLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0PTM5OD1iZWNvbWUsIHJlc3BlY3RpdmVseTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAxLVxcdHB0ciA9IGt6YWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDI6XFx0cHRyID0ga21hbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAzLVxcdHB0ciA9IGt6YWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XFxuLS1cXG5hcmNoL2FybS9tbS9wZ2QuYy0xOS0jaWZkZWYgQ09ORklHX0FSTV9MUEFFXFxuYXJjaC9hcm0vbW0vcGdkLmM6MjA6I2RlZmluZSBfcGdkX2FsbG9jKG1tKVxcdFxcdGttYWxsb2Nfb2JqcyhwZ2RfdCwgUFRSU19QRVJfUEdELCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTylcXG5hcmNoL2FybS9tbS9wZ2QuYy0yMS0jZGVmaW5lIF9wZ2RfZnJlZShtbSwgcGdkKVxcdGtmcmVlKHBnZClcXG4tLVxcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jPTc2ND1zdGF0aWMgaW50IGNvdmVyYWdlX3N0YXJ0KGNvbnN0IHVuaW9uIGRlY29kZV9pdGVtICp0YWJsZSlcXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYy03NjUte1xcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jOjc2NjpcXHRjb3ZlcmFnZS5iYXNlID0ga21hbGxvY19vYmpzKHN0cnVjdCBjb3ZlcmFnZV9lbnRyeSxcXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYy03NjctXFx0XFx0XFx0XFx0ICAgICBNQVhfQ09WRVJBR0VfRU5UUklFUyk7XFxuLS1cXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYz0zOTE9dTMyIGF1MXh4eF9kYmRtYV9yaW5nX2FsbG9jKHUzMiBjaGFuaWQsIGludCBlbnRyaWVzKVxcbi0tXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtNDE0LVxcdCAqL1xcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jOjQxNTpcXHRkZXNjX2Jhc2UgPSAodTMyKSBrbWFsbG9jX29ianMoYXUxeF9kZG1hX2Rlc2NfdCwgZW50cmllcyxcXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy00MTYtXFx0XFx0XFx0XFx0ICAgICAgIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYz01MzI9YWRkX3N5c3RlbV9tYXBfYWRkcmVzc2VzKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpkZXYsIGludCBudW1fYWRkcnMsIFxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTUzOC1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM6NTM5OlxcdGRldi1cXHUwMDNlYWRkciA9IGttYWxsb2Nfb2JqcygqZGV2LVxcdTAwM2VhZGRyLCBudW1fYWRkcnMpO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYy01NDAtXFx0aWYoIWRldi1cXHUwMDNlYWRkcikge1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jPTczMT1pbnQga3ZtX3ZjcHVfaW9jdGxfY29uZmlnX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtNzc0LVxcdFxcdCAgICBjZmctXFx1MDAzZWFycmF5IC8gUEFHRV9TSVpFO1xcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYzo3NzU6XFx0cGFnZXMgPSBrbWFsbG9jX29ianMoKnBhZ2VzLCBudW1fcGFnZXMpO1xcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy03NzYtXFx0aWYgKCFwYWdlcylcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYz04OTg9aW50IGt2bXBwY19lNTAwX3RsYl9pbml0KHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtOTE0LVxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYzo5MTU6XFx0dmNwdV9lNTAwLVxcdTAwM2VndGxiX2FyY2ggPSBrbWFsbG9jX29ianMoKnZjcHVfZTUwMC1cXHUwMDNlZ3RsYl9hcmNoLFxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTYtXFx0XFx0XFx0XFx0XFx0ICAgIEtWTV9FNTAwX1RMQjBfU0laRSArIEtWTV9FNTAwX1RMQjFfU0laRSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM9NDU9c3RhdGljIGludCBncm93KHJoX2luZm9fdCAqIGluZm8sIGludCBtYXhfYmxvY2tzKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTU2LVxcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYzo1NzpcXHRibG9jayA9IGttYWxsb2Nfb2JqcyhyaF9ibG9ja190LCBtYXhfYmxvY2tzLCBHRlBfQVRPTUlDKTtcXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMtNTgtXFx0aWYgKGJsb2NrID09IE5VTEwpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM9NzU1PXN0YXRpYyBpbnQgY3JlYXRlX2V2ZW50c19mcm9tX2NhdGFsb2coc3RydWN0IGF0dHJpYnV0ZSAqKipldmVudHNfLFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkwOC1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTA5OlxcdGV2ZW50cyA9IGttYWxsb2Nfb2JqcygqZXZlbnRzLCBhdHRyX21heCArIDEpO1xcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTAtXFx0aWYgKCFldmVudHMpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTQtXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkxNTpcXHRldmVudF9kZXNjcyA9IGttYWxsb2Nfb2JqcygqZXZlbnRfZGVzY3MsIGV2ZW50X2lkeCArIDEpO1xcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTYtXFx0aWYgKCFldmVudF9kZXNjcykge1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkyMC1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTIxOlxcdGV2ZW50X2xvbmdfZGVzY3MgPSBrbWFsbG9jX29ianMoKmV2ZW50X2xvbmdfZGVzY3MsIGV2ZW50X2lkeCArIDEpO1xcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MjItXFx0aWYgKCFldmVudF9sb25nX2Rlc2NzKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jPTEyMj1zdGF0aWMgaW50IGhzdGFfbXNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jLTE1My1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jOjE1NDpcXHRwcGM0eHhfaHN0YV9tc2kuaXJxX21hcCA9IGttYWxsb2Nfb2JqcyhpbnQsIGlycV9jb3VudCk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYy0xNTUtXFx0aWYgKCFwcGM0eHhfaHN0YV9tc2kuaXJxX21hcCkge1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jPTEyMD1zdGF0aWMgaW50IHBzZXJpZXNfcGNpX3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2IG51bV92ZnMpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMtMTQzLVxcdHBkbiA9IHBjaV9nZXRfcGRuKHBkZXYpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYzoxNDQ6XFx0cGRuLVxcdTAwM2VwZV9udW1fbWFwID0ga21hbGxvY19vYmpzKCpwZG4tXFx1MDAzZXBlX251bV9tYXAsIG51bV92ZnMpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYy0xNDUtXFx0aWYgKCFwZG4tXFx1MDAzZXBlX251bV9tYXApXFxuLS1cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYz0xNTQ5PXZvaWQgX19pbml0IG1waWNfaW5pdChzdHJ1Y3QgbXBpYyAqbXBpYylcXG4tLVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jLTE2NDEtXFx0LyogYWxsb2NhdGUgbWVtb3J5IHRvIHNhdmUgbXBpYyBzdGF0ZSAqL1xcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jOjE2NDI6XFx0bXBpYy1cXHUwMDNlc2F2ZV9kYXRhID0ga21hbGxvY19vYmpzKCptcGljLVxcdTAwM2VzYXZlX2RhdGEsIG1waWMtXFx1MDAzZW51bV9zb3VyY2VzKTtcXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYy0xNjQzLVxcdEJVR19PTihtcGljLVxcdTAwM2VzYXZlX2RhdGEgPT0gTlVMTCk7XFxuLS1cXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM9MzA9c3RhdGljIHZvaWQgKmRpYWcwY19zdG9yZSh1bnNpZ25lZCBpbnQgKmNvdW50KVxcbi0tXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jLTM3LVxcdGNwdV9jb3VudCA9IG51bV9vbmxpbmVfY3B1cygpO1xcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYzozODpcXHRjcHVfdmVjID0ga21hbGxvY19vYmpzKCpjcHVfdmVjLCBudW1fcG9zc2libGVfY3B1cygpKTtcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmMtMzktXFx0aWYgKCFjcHVfdmVjKVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmg9MTkwPXN0YXRpYyBpbmxpbmUgc3RydWN0IGlkYWxfYnVmZmVyICoqaWRhbF9idWZmZXJfYXJyYXlfYWxsb2Moc2l6ZV90IHNpemUsIGludCBwYWdlX29yZGVyKVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmgtMTk3LVxcdGNvdW50ID0gKHNpemUgKyBDQ1dfTUFYX0JZVEVfQ09VTlQgLSAxKSAvIENDV19NQVhfQllURV9DT1VOVDtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaDoxOTg6XFx0aWJzID0ga21hbGxvY19vYmpzKCppYnMsIGNvdW50ICsgMSk7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmgtMTk5LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb3VudDsgaSsrKSB7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmM9MjY2PXN0YXRpYyBkZWJ1Z19lbnRyeV90ICoqKmRlYnVnX2FyZWFzX2FsbG9jKGludCBwYWdlc19wZXJfYXJlYSwgaW50IG5yX2FyZWFzKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jLTI3MC1cXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmM6MjcxOlxcdGFyZWFzID0ga21hbGxvY19vYmpzKGRlYnVnX2VudHJ5X3QgKiosIG5yX2FyZWFzKTtcXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMtMjcyLVxcdGlmICghYXJlYXMpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMtMjc1LVxcdFxcdC8qIEdGUF9OT1dBUk4gdG8gYXZvaWQgdXNlciB0cmlnZ2VyYWJsZSBXQVJOLCB3ZSBoYW5kbGUgZmFpbHMgKi9cXG5hcmNoL3MzOTAva2VybmVsL2RlYnVnLmM6Mjc2OlxcdFxcdGFyZWFzW2ldID0ga21hbGxvY19vYmpzKGRlYnVnX2VudHJ5X3QgKiwgcGFnZXNfcGVyX2FyZWEsXFxuYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jLTI3Ny1cXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvcGVyZl9jcHVtX2NmX2V2ZW50cy5jPTk2ND1zdGF0aWMgX19pbml0IHN0cnVjdCBhdHRyaWJ1dGUgKiptZXJnZV9hdHRyKHN0cnVjdCBhdHRyaWJ1dGUgKiphLFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX2NwdW1fY2ZfZXZlbnRzLmMtOTc4LVxcbmFyY2gvczM5MC9rZXJuZWwvcGVyZl9jcHVtX2NmX2V2ZW50cy5jOjk3OTpcXHRuZXcgPSBrbWFsbG9jX29ianMoc3RydWN0IGF0dHJpYnV0ZSAqLCBqKTtcXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfY3B1bV9jZl9ldmVudHMuYy05ODAtXFx0aWYgKCFuZXcpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfcGFpLmM9MTA5Nj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqKiBfX2luaXQgYXR0cl9ldmVudF9pbml0KHN0cnVjdCBwYWlfcG11ICpwKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX3BhaS5jLTExMDEtXFxuYXJjaC9zMzkwL2tlcm5lbC9wZXJmX3BhaS5jOjExMDI6XFx0YXR0cnMgPSBrbWFsbG9jX29ianMoKmF0dHJzLCBtaW5fYXR0ciArIDEsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcXG5hcmNoL3MzOTAva2VybmVsL3BlcmZfcGFpLmMtMTEwMy1cXHRpZiAoIWF0dHJzKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jPTIwMz1pbnQga3ZtX3MzOTBfaW1wb3J0X2JwX2RhdGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jLTIzNC1cXHRpZiAobnJfd3AgXFx1MDAzZSAwKSB7XFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjIzNTpcXHRcXHR3cF9pbmZvID0ga21hbGxvY19vYmpzKCp3cF9pbmZvLCBucl93cCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMjM2LVxcdFxcdGlmICghd3BfaW5mbykge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jLTI0MS1cXHRpZiAobnJfYnAgXFx1MDAzZSAwKSB7XFxuYXJjaC9zMzkwL2t2bS9ndWVzdGRiZy5jOjI0MjpcXHRcXHRicF9pbmZvID0ga21hbGxvY19vYmpzKCpicF9pbmZvLCBucl9icCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL3MzOTAva3ZtL2d1ZXN0ZGJnLmMtMjQzLVxcdFxcdGlmICghYnBfaW5mbykge1xcbi0tXFxuYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjXzY0LmM9NjI1PVNZU0NBTExfREVGSU5FNSh1dHJhcF9pbnN0YWxsLCB1dHJhcF9lbnRyeV90LCB0eXBlLFxcbi0tXFxuYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjXzY0LmMtNjU5LVxcdFxcdFxcdGN1cnJlbnRfdGhyZWFkX2luZm8oKS1cXHUwMDNldXRyYXBzID1cXG5hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfNjQuYzo2NjA6XFx0XFx0XFx0XFx0a21hbGxvY19vYmpzKGxvbmcsIFVUX1RSQVBfSU5TVFJVQ1RJT05fMzEgKyAxKTtcXG5hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfNjQuYy02NjEtXFx0XFx0XFx0aWYgKCFjdXJyZW50X3RocmVhZF9pbmZvKCktXFx1MDAzZXV0cmFwcykge1xcbi0tXFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmM9MTA2ND1zdGF0aWMgaW50IF9faW5pdCB1YmRfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTA3MS1cXG5hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYzoxMDcyOlxcdGlycV9yZXFfYnVmZmVyID0ga21hbGxvY19vYmpzKHN0cnVjdCBpb190aHJlYWRfcmVxICosXFxuYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMtMTA3My1cXHRcXHRcXHRcXHQgICAgICBVQkRfUkVRX0JVRkZFUl9TSVpFKTtcXG4tLVxcbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jLTEwNzktXFx0fVxcbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jOjEwODA6XFx0aW9fcmVxX2J1ZmZlciA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaW9fdGhyZWFkX3JlcSAqLFxcbmFyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jLTEwODEtXFx0XFx0XFx0XFx0ICAgICBVQkRfUkVRX0JVRkZFUl9TSVpFKTtcXG4tLVxcbmFyY2gvdW0vZHJpdmVycy92ZWN0b3Jfa2Vybi5jPTUwNz1zdGF0aWMgc3RydWN0IHZlY3Rvcl9xdWV1ZSAqY3JlYXRlX3F1ZXVlKFxcbi0tXFxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl9rZXJuLmMtNTQ2LVxcdFxcdGlmICh2cC1cXHUwMDNlaGVhZGVyX3NpemUgXFx1MDAzZSAwKVxcbmFyY2gvdW0vZHJpdmVycy92ZWN0b3Jfa2Vybi5jOjU0NzpcXHRcXHRcXHRpb3YgPSBrbWFsbG9jX29ianMoc3RydWN0IGlvdmVjLCAzICsgbnVtX2V4dHJhX2ZyYWdzKTtcXG5hcmNoL3VtL2RyaXZlcnMvdmVjdG9yX2tlcm4uYy01NDgtXFx0XFx0ZWxzZVxcbmFyY2gvdW0vZHJpdmVycy92ZWN0b3Jfa2Vybi5jOjU0OTpcXHRcXHRcXHRpb3YgPSBrbWFsbG9jX29ianMoc3RydWN0IGlvdmVjLCAyICsgbnVtX2V4dHJhX2ZyYWdzKTtcXG5hcmNoL3VtL2RyaXZlcnMvdmVjdG9yX2tlcm4uYy01NTAtXFx0XFx0aWYgKGlvdiA9PSBOVUxMKVxcbi0tXFxuYXJjaC91bS9kcml2ZXJzL3ZmaW9fa2Vybi5jPTQ4ND1zdGF0aWMgdm9pZCB1bWxfdmZpb19vcGVuX2RldmljZShzdHJ1Y3QgdW1sX3ZmaW9fZGV2aWNlICpkZXYpXFxuLS1cXG5hcmNoL3VtL2RyaXZlcnMvdmZpb19rZXJuLmMtNTE2LVxcbmFyY2gvdW0vZHJpdmVycy92ZmlvX2tlcm4uYzo1MTc6XFx0ZGV2LVxcdTAwM2VpbnRyX2N0eCA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgdW1sX3ZmaW9faW50cl9jdHgsXFxuYXJjaC91bS9kcml2ZXJzL3ZmaW9fa2Vybi5jLTUxOC1cXHRcXHRcXHRcXHQgICAgIGRldi1cXHUwMDNldWRldi5pcnFfY291bnQpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jPTc5Nz1zdGF0aWMgYm9vbCBfX2luaXQgc2d4X3BhZ2VfY2FjaGVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTgwMy1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM6ODA0OlxcdHNneF9udW1hX25vZGVzID0ga21hbGxvY19vYmpzKCpzZ3hfbnVtYV9ub2RlcywgbnVtX3Bvc3NpYmxlX25vZGVzKCkpO1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy04MDUtXFx0aWYgKCFzZ3hfbnVtYV9ub2RlcylcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rc3lzZnMuYz0zMjc9c3RhdGljIGludCBfX2luaXQgY3JlYXRlX3NldHVwX2RhdGFfbm9kZXMoc3RydWN0IGtvYmplY3QgKnBhcmVudClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rc3lzZnMuYy0zNDYtXFxuYXJjaC94ODYva2VybmVsL2tzeXNmcy5jOjM0NzpcXHRrb2JqcCA9IGttYWxsb2Nfb2Jqcygqa29ianAsIG5yKTtcXG5hcmNoL3g4Ni9rZXJuZWwva3N5c2ZzLmMtMzQ4LVxcdGlmICgha29ianApIHtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0xNDcxPXN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0xNTE2LVxcbmFyY2gveDg2L2t2bS94ZW4uYzoxNTE3OlxcdFxcdHBvcnRzID0ga21hbGxvY19vYmpzKCpwb3J0cywgc2NoZWRfcG9sbC5ucl9wb3J0cyk7XFxuYXJjaC94ODYva3ZtL3hlbi5jLTE1MTgtXFx0XFx0aWYgKCFwb3J0cykge1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTIyMDM9c3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfcmVzZXQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTIyMTgtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjIyMTk6XFx0YWxsX2V2dGNobmZkcyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgZXZ0Y2huZmQgKiwgbik7XFxuYXJjaC94ODYva3ZtL3hlbi5jLTIyMjAtXFx0aWYgKCFhbGxfZXZ0Y2huZmRzKSB7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYz0yNTIxPXN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wMzIuYy0yNTMzLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jOjI1MzQ6XFx0YWRkcnMgPSBrbWFsbG9jX29ianMoKmFkZHJzLCBwcm9nLVxcdTAwM2VsZW4pO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAzMi5jLTI1MzUtXFx0aWYgKCFhZGRycylcXG4tLVxcbmFyY2gveDg2L3Bvd2VyL2NwdS5jPTM4OD1zdGF0aWMgaW50IG1zcl9idWlsZF9jb250ZXh0KGNvbnN0IHUzMiAqbXNyX2lkLCBjb25zdCBpbnQgbnVtKVxcbi0tXFxuYXJjaC94ODYvcG93ZXIvY3B1LmMtMzk2LVxcbmFyY2gveDg2L3Bvd2VyL2NwdS5jOjM5NzpcXHRtc3JfYXJyYXkgPSBrbWFsbG9jX29ianMoc3RydWN0IHNhdmVkX21zciwgdG90YWxfbnVtKTtcXG5hcmNoL3g4Ni9wb3dlci9jcHUuYy0zOTgtXFx0aWYgKCFtc3JfYXJyYXkpIHtcXG4tLVxcbmFyY2gveDg2L3hlbi9ncmFudC10YWJsZS5jPTEwMj1zdGF0aWMgaW50IGFyY2hfZ250dGFiX3ZhbGxvYyhzdHJ1Y3QgZ250dGFiX3ZtX2FyZWEgKmFyZWEsIHVuc2lnbmVkIG5yX2ZyYW1lcylcXG5hcmNoL3g4Ni94ZW4vZ3JhbnQtdGFibGUuYy0xMDMte1xcbmFyY2gveDg2L3hlbi9ncmFudC10YWJsZS5jOjEwNDpcXHRhcmVhLVxcdTAwM2VwdGVzID0ga21hbGxvY19vYmpzKCphcmVhLVxcdTAwM2VwdGVzLCBucl9mcmFtZXMpO1xcbmFyY2gveDg2L3hlbi9ncmFudC10YWJsZS5jLTEwNS1cXHRpZiAoYXJlYS1cXHUwMDNlcHRlcyA9PSBOVUxMKVxcbi0tXFxuYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9zaW1kaXNrLmM9MzA4PXN0YXRpYyBpbnQgX19pbml0IHNpbWRpc2tfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9zaW1kaXNrLmMtMzIyLVxcbmFyY2gveHRlbnNhL3BsYXRmb3Jtcy9pc3Mvc2ltZGlzay5jOjMyMzpcXHRzZGRldiA9IGttYWxsb2Nfb2Jqcygqc2RkZXYsIHNpbWRpc2tfY291bnQpO1xcbmFyY2gveHRlbnNhL3BsYXRmb3Jtcy9pc3Mvc2ltZGlzay5jLTMyNC1cXHRpZiAoc2RkZXYgPT0gTlVMTClcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmM9NTc4PXN0YXRpYyBib29sIGJmcXFfcmVxdWVzdF9vdmVyX2xpbWl0KHN0cnVjdCBiZnFfZGF0YSAqYmZxZCxcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjA4LVxcdFxcdFxcdGtmcmVlKGVudGl0aWVzKTtcXG5ibG9jay9iZnEtaW9zY2hlZC5jOjYwOTpcXHRcXHRlbnRpdGllcyA9IGttYWxsb2Nfb2JqcygqZW50aXRpZXMsIGRlcHRoLCBHRlBfTk9JTyk7XFxuYmxvY2svYmZxLWlvc2NoZWQuYy02MTAtXFx0XFx0aWYgKCFlbnRpdGllcylcXG4tLVxcbmJsb2NrL2Jsay1zdGF0LmM9MTAwPWJsa19zdGF0X2FsbG9jX2NhbGxiYWNrKHZvaWQgKCp0aW1lcl9mbikoc3RydWN0IGJsa19zdGF0X2NhbGxiYWNrICopLFxcbi0tXFxuYmxvY2svYmxrLXN0YXQuYy0xMDktXFxuYmxvY2svYmxrLXN0YXQuYzoxMTA6XFx0Y2ItXFx1MDAzZXN0YXQgPSBrbWFsbG9jX29ianMoc3RydWN0IGJsa19ycV9zdGF0LCBidWNrZXRzKTtcXG5ibG9jay9ibGstc3RhdC5jLTExMS1cXHRpZiAoIWNiLVxcdTAwM2VzdGF0KSB7XFxuLS1cXG5ibG9jay9mb3BzLmM9NTU9c3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuLS1cXG5ibG9jay9mb3BzLmMtNjctXFx0ZWxzZSB7XFxuYmxvY2svZm9wcy5jOjY4OlxcdFxcdHZlY3MgPSBrbWFsbG9jX29ianMoc3RydWN0IGJpb192ZWMsIG5yX3BhZ2VzKTtcXG5ibG9jay9mb3BzLmMtNjktXFx0XFx0aWYgKCF2ZWNzKVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz0zNTE9c3RhdGljIGJvb2wgbGRtX3ZhbGlkYXRlX3RvY2Jsb2NrcyhzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLFxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zNjQtXFx0dGJbMF0gPSBcXHUwMDI2bGRiLVxcdTAwM2V0b2M7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozNjU6XFx0dGJbMV0gPSBrbWFsbG9jX29ianMoKnRiWzFdLCAzKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM2Ni1cXHRpZiAoIXRiWzFdKSB7XFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jPTE0MDc9c3RhdGljIGludCBobF9jc19jb3B5X2NodW5rX2FycmF5KHN0cnVjdCBobF9kZXZpY2UgKmhkZXYsXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jLTE0MjItXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX3N1Ym1pc3Npb24uYzoxNDIzOlxcdCpjc19jaHVua19hcnJheSA9IGttYWxsb2Nfb2JqcygqKmNzX2NodW5rX2FycmF5LCBudW1fY2h1bmtzLCBHRlBfQVRPTUlDKTtcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jLTE0MjQtXFx0aWYgKCEqY3NfY2h1bmtfYXJyYXkpXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9jb21tYW5kX3N1Ym1pc3Npb24uYzoxNDI1OlxcdFxcdCpjc19jaHVua19hcnJheSA9IGttYWxsb2Nfb2JqcygqKmNzX2NodW5rX2FycmF5LCBudW1fY2h1bmtzKTtcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jLTE0MjYtXFx0aWYgKCEqY3NfY2h1bmtfYXJyYXkpIHtcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmM9MzAwNT1zdGF0aWMgaW50IGhsX211bHRpX2NzX3dhaXRfaW9jdGwoc3RydWN0IGhsX2Zwcml2ICpocHJpdiwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmMtMzA1My1cXHQvKiBhbGxvY2F0ZSBhcnJheSBmb3IgdGhlIGZlbmNlcyAqL1xcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vY29tbWFuZF9zdWJtaXNzaW9uLmM6MzA1NDpcXHRmZW5jZV9hcnIgPSBrbWFsbG9jX29ianMoc3RydWN0IGhsX2ZlbmNlICosIHNlcV9hcnJfbGVuKTtcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2NvbW1hbmRfc3VibWlzc2lvbi5jLTMwNTUtXFx0aWYgKCFmZW5jZV9hcnIpIHtcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vZGVidWdmcy5jPTIwNDk9aW50IGhsX2RlYnVnZnNfZGV2aWNlX2luaXQoc3RydWN0IGhsX2RldmljZSAqaGRldilcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9jb21tb24vZGVidWdmcy5jLTIwNTQtXFx0ZGV2X2VudHJ5LVxcdTAwM2VoZGV2ID0gaGRldjtcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2RlYnVnZnMuYzoyMDU1OlxcdGRldl9lbnRyeS1cXHUwMDNlZW50cnlfYXJyID0ga21hbGxvY19vYmpzKHN0cnVjdCBobF9kZWJ1Z2ZzX2VudHJ5LCBjb3VudCk7XFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9kZWJ1Z2ZzLmMtMjA1Ni1cXHRpZiAoIWRldl9lbnRyeS1cXHUwMDNlZW50cnlfYXJyKVxcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9od19xdWV1ZS5jPTgyND1zdGF0aWMgaW50IGV4dF9hbmRfY3B1X3F1ZXVlX2luaXQoc3RydWN0IGhsX2RldmljZSAqaGRldiwgc3RydWN0IGhsX2h3X3F1ZXVlICpxLFxcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9od19xdWV1ZS5jLTgzOS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvY29tbW9uL2h3X3F1ZXVlLmM6ODQwOlxcdHEtXFx1MDAzZXNoYWRvd19xdWV1ZSA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgaGxfY3Nfam9iICosIEhMX1FVRVVFX0xFTkdUSCk7XFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2NvbW1vbi9od19xdWV1ZS5jLTg0MS1cXHRpZiAoIXEtXFx1MDAzZXNoYWRvd19xdWV1ZSkge1xcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYz0zOTM4PXN0YXRpYyBpbnQgZ2F1ZGkyX3NwZWNpYWxfYmxvY2tzX2NvbmZpZyhzdHJ1Y3QgaGxfZGV2aWNlICpoZGV2KVxcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYy0zOTQ1LVxcdHByb3AtXFx1MDAzZW51bV9vZl9zcGVjaWFsX2Jsb2NrcyA9IEFSUkFZX1NJWkUoZ2F1ZGkyX3NwZWNpYWxfYmxvY2tzKTtcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jOjM5NDY6XFx0cHJvcC1cXHUwMDNlc3BlY2lhbF9ibG9ja3MgPSBrbWFsbG9jX29ianMoKnByb3AtXFx1MDAzZXNwZWNpYWxfYmxvY2tzLFxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmMtMzk0Ny1cXHRcXHRcXHRcXHRcXHQgICAgcHJvcC1cXHUwMDNlbnVtX29mX3NwZWNpYWxfYmxvY2tzKTtcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9nYXVkaTIvZ2F1ZGkyLmMtMzk2MC1cXHRcXHRwcm9wLVxcdTAwM2Vza2lwX3NwZWNpYWxfYmxvY2tzX2NmZy5ibG9ja190eXBlcyA9XFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL2dhdWRpMi9nYXVkaTIuYzozOTYxOlxcdFxcdFxcdFxcdGttYWxsb2Nfb2JqcyhnYXVkaTJfaXRlcmF0b3Jfc2tpcF9ibG9ja190eXBlc1swXSxcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jLTM5NjItXFx0XFx0XFx0XFx0XFx0ICAgICBBUlJBWV9TSVpFKGdhdWRpMl9pdGVyYXRvcl9za2lwX2Jsb2NrX3R5cGVzKSk7XFxuLS1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jLTM5NzYtXFx0XFx0cHJvcC1cXHUwMDNlc2tpcF9zcGVjaWFsX2Jsb2Nrc19jZmcuYmxvY2tfcmFuZ2VzID1cXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jOjM5Nzc6XFx0XFx0XFx0XFx0a21hbGxvY19vYmpzKGdhdWRpMl9pdGVyYXRvcl9za2lwX2Jsb2NrX3Jhbmdlc1swXSxcXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvZ2F1ZGkyL2dhdWRpMi5jLTM5NzgtXFx0XFx0XFx0XFx0XFx0ICAgICBBUlJBWV9TSVpFKGdhdWRpMl9pdGVyYXRvcl9za2lwX2Jsb2NrX3JhbmdlcykpO1xcbi0tXFxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfY29udHJvbC5jPTM5Mz1zdGF0aWMgaW50IGZpbmRfYW5kX21hcF91c2VyX3BhZ2VzKHN0cnVjdCBxYWljX2RldmljZSAqcWRldixcXG4tLVxcbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2NvbnRyb2wuYy00MjUtXFx0d2hpbGUgKDEpIHtcXG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19jb250cm9sLmM6NDI2OlxcdFxcdHBhZ2VfbGlzdCA9IGttYWxsb2Nfb2JqcygqcGFnZV9saXN0LCBucl9wYWdlcyxcXG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19jb250cm9sLmMtNDI3LVxcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4tLVxcbmRyaXZlcnMvYWNjZWwvcm9ja2V0L3JvY2tldF9qb2IuYz00OTY9aW50IHJvY2tldF9qb2Jfb3BlbihzdHJ1Y3Qgcm9ja2V0X2ZpbGVfcHJpdiAqcm9ja2V0X3ByaXYpXFxuLS1cXG5kcml2ZXJzL2FjY2VsL3JvY2tldC9yb2NrZXRfam9iLmMtNDk4LVxcdHN0cnVjdCByb2NrZXRfZGV2aWNlICpyZGV2ID0gcm9ja2V0X3ByaXYtXFx1MDAzZXJkZXY7XFxuZHJpdmVycy9hY2NlbC9yb2NrZXQvcm9ja2V0X2pvYi5jOjQ5OTpcXHRzdHJ1Y3QgZHJtX2dwdV9zY2hlZHVsZXIgKipzY2hlZHMgPSBrbWFsbG9jX29ianMoKnNjaGVkcyxcXG5kcml2ZXJzL2FjY2VsL3JvY2tldC9yb2NrZXRfam9iLmMtNTAwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCByZGV2LVxcdTAwM2VudW1fY29yZXMpO1xcbi0tXFxuZHJpdmVycy9hY3BpL2FjcGlfbXJybS5jPTU1PXN0YXRpYyBfX2luaXQgaW50IGFjcGlfcGFyc2VfbXJybShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlKVxcbi0tXFxuZHJpdmVycy9hY3BpL2FjcGlfbXJybS5jLTgzLVxcbmRyaXZlcnMvYWNwaS9hY3BpX21ycm0uYzo4NDpcXHRtcnJtX21lbV9yYW5nZV9lbnRyeSA9IGttYWxsb2Nfb2JqcygqbXJybV9tZW1fcmFuZ2VfZW50cnksIG1yZV9jb3VudCxcXG5kcml2ZXJzL2FjcGkvYWNwaV9tcnJtLmMtODUtXFx0XFx0XFx0XFx0XFx0ICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcXG4tLVxcbmRyaXZlcnMvYWNwaS9hY3BpX3ZpZGVvLmM9Nzk4PWludCBhY3BpX3ZpZGVvX2dldF9sZXZlbHMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL2FjcGkvYWNwaV92aWRlby5jLTgzMS1cXHQgKi9cXG5kcml2ZXJzL2FjcGkvYWNwaV92aWRlby5jOjgzMjpcXHRici1cXHUwMDNlbGV2ZWxzID0ga21hbGxvY19vYmpzKCpici1cXHUwMDNlbGV2ZWxzLFxcbmRyaXZlcnMvYWNwaS9hY3BpX3ZpZGVvLmMtODMzLVxcdFxcdFxcdFxcdCAgb2JqLVxcdTAwM2VwYWNrYWdlLmNvdW50ICsgQUNQSV9WSURFT19GSVJTVF9MRVZFTCk7XFxuLS1cXG5kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYz0zMTY9c3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9nZXRfcGVyZm9ybWFuY2Vfc3RhdGVzKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpXFxuLS1cXG5kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYy0zNDQtXFx0cHItXFx1MDAzZXBlcmZvcm1hbmNlLVxcdTAwM2VzdGF0ZXMgPVxcbmRyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jOjM0NTpcXHQgICAga21hbGxvY19vYmpzKHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9weCwgcHNzLVxcdTAwM2VwYWNrYWdlLmNvdW50KTtcXG5kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYy0zNDYtXFx0aWYgKCFwci1cXHUwMDNlcGVyZm9ybWFuY2UtXFx1MDAzZXN0YXRlcykge1xcbi0tXFxuZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmM9NDg1PXN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfZ2V0X3Rocm90dGxpbmdfc3RhdGVzKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpXFxuLS1cXG5kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYy01MTQtXFx0cHItXFx1MDAzZXRocm90dGxpbmcuc3RhdGVzX3RzcyA9XFxuZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmM6NTE1OlxcdCAgICBrbWFsbG9jX29ianMoc3RydWN0IGFjcGlfcHJvY2Vzc29yX3R4X3RzcywgdHNzLVxcdTAwM2VwYWNrYWdlLmNvdW50KTtcXG5kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYy01MTYtXFx0aWYgKCFwci1cXHUwMDNldGhyb3R0bGluZy5zdGF0ZXNfdHNzKSB7XFxuLS1cXG5kcml2ZXJzL2Jhc2UvY29tcG9uZW50LmM9MzU5PXN0YXRpYyBpbnQgY29tcG9uZW50X21hdGNoX3JlYWxsb2Moc3RydWN0IGNvbXBvbmVudF9tYXRjaCAqbWF0Y2gsIHNpemVfdCBudW0pXFxuLS1cXG5kcml2ZXJzL2Jhc2UvY29tcG9uZW50LmMtMzY1LVxcbmRyaXZlcnMvYmFzZS9jb21wb25lbnQuYzozNjY6XFx0bmV3ID0ga21hbGxvY19vYmpzKCpuZXcsIG51bSk7XFxuZHJpdmVycy9iYXNlL2NvbXBvbmVudC5jLTM2Ny1cXHRpZiAoIW5ldylcXG4tLVxcbmRyaXZlcnMvYmFzZS9tYXAuYz0zMj1pbnQga29ial9tYXAoc3RydWN0IGtvYmpfbWFwICpkb21haW4sIGRldl90IGRldiwgdW5zaWduZWQgbG9uZyByYW5nZSxcXG4tLVxcbmRyaXZlcnMvYmFzZS9tYXAuYy00My1cXG5kcml2ZXJzL2Jhc2UvbWFwLmM6NDQ6XFx0cCA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgcHJvYmUsIG4pO1xcbmRyaXZlcnMvYmFzZS9tYXAuYy00NS1cXHRpZiAocCA9PSBOVUxMKVxcbi0tXFxuZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS5jPTEyND1pbnQgcmVnY2FjaGVfaW5pdChzdHJ1Y3QgcmVnbWFwICptYXAsIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnICpjb25maWcpXFxuLS1cXG5kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLmMtMjE0LVxcdFxcdG1hcC1cXHUwMDNlbnVtX3JlZ19kZWZhdWx0cyA9IGNvdW50O1xcbmRyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUuYzoyMTU6XFx0XFx0bWFwLVxcdTAwM2VyZWdfZGVmYXVsdHMgPSBrbWFsbG9jX29ianMoc3RydWN0IHJlZ19kZWZhdWx0LCBjb3VudCk7XFxuZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS5jLTIxNi1cXHRcXHRpZiAoIW1hcC1cXHUwMDNlcmVnX2RlZmF1bHRzKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MzQwPXN0YXRpYyBpbnQgbG9fcndfYWlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBsb29wX2NtZCAqY21kLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMzU0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjM1NTpcXHRcXHRjbWQtXFx1MDAzZWJ2ZWMgPSBrbWFsbG9jX29ianMoKmNtZC1cXHUwMDNlYnZlYywgbnJfYnZlYywgR0ZQX05PSU8pO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTM1Ni1cXHRcXHRpZiAoIWNtZC1cXHUwMDNlYnZlYylcXG4tLVxcbmRyaXZlcnMvYmxvY2svcmJkLmM9MjUzNj1zdGF0aWMgaW50IHJiZF9pbWdfZmlsbF9yZXF1ZXN0KHN0cnVjdCByYmRfaW1nX3JlcXVlc3QgKmltZ19yZXEsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JiZC5jLTI1NzItXFx0Zm9yX2VhY2hfb2JqX3JlcXVlc3QoaW1nX3JlcSwgb2JqX3JlcSkge1xcbmRyaXZlcnMvYmxvY2svcmJkLmM6MjU3MzpcXHRcXHRvYmpfcmVxLVxcdTAwM2VidmVjX3Bvcy5idmVjcyA9IGttYWxsb2Nfb2Jqcygqb2JqX3JlcS1cXHUwMDNlYnZlY19wb3MuYnZlY3MsXFxuZHJpdmVycy9ibG9jay9yYmQuYy0yNTc0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBvYmpfcmVxLVxcdTAwM2VidmVjX2NvdW50LFxcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9MTYwPXN0YXRpYyBpbnQgdmlydGJsa19zZXR1cF9kaXNjYXJkX3dyaXRlX3plcm9lc19lcmFzZShzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBib29sIHVubWFwKVxcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTcwLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjE3MTpcXHRyYW5nZSA9IGttYWxsb2Nfb2JqcygqcmFuZ2UsIHNlZ21lbnRzLCBHRlBfQVRPTUlDKTtcXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNzItXFx0aWYgKCFyYW5nZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTk2MD1zdGF0aWMgaW50IGluaXRfdnEoc3RydWN0IHZpcnRpb19ibGsgKnZibGspXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy05OTUtXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM6OTk2OlxcdHZibGstXFx1MDAzZXZxcyA9IGttYWxsb2Nfb2JqcygqdmJsay1cXHUwMDNldnFzLCBudW1fdnFzKTtcXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy05OTctXFx0aWYgKCF2YmxrLVxcdTAwM2V2cXMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xMDAwLVxcdHZxc19pbmZvID0ga3phbGxvY19vYmpzKCp2cXNfaW5mbywgbnVtX3Zxcyk7XFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM6MTAwMTpcXHR2cXMgPSBrbWFsbG9jX29ianMoKnZxcywgbnVtX3Zxcyk7XFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTAwMi1cXHRpZiAoIXZxc19pbmZvIHx8ICF2cXMpIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svejJyYW0uYz0xNDM9c3RhdGljIGludCB6Ml9vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3oycmFtLmMtMTg5LVxcdFxcdFxcdHoycmFtX21hcCA9XFxuZHJpdmVycy9ibG9jay96MnJhbS5jOjE5MDpcXHRcXHRcXHQgICAga21hbGxvY19vYmpzKHoycmFtX21hcFswXSwgc2l6ZSAvIFoyUkFNX0NIVU5LU0laRSk7XFxuZHJpdmVycy9ibG9jay96MnJhbS5jLTE5MS1cXHRcXHRcXHRpZiAoejJyYW1fbWFwID09IE5VTEwpIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz01MTg9c3RhdGljIGludCB6bG9vcF9kb19ydyhzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTMwLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1MzE6XFx0XFx0Y21kLVxcdTAwM2VidmVjID0ga21hbGxvY19vYmpzKCpjbWQtXFx1MDAzZWJ2ZWMsIG5yX2J2ZWMsIEdGUF9OT0lPKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTMyLVxcdFxcdGlmICghY21kLVxcdTAwM2VidmVjKVxcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmM9MTkwND1zdGF0aWMgaW50IGJ0aW50ZWxfcGNpZV9zZXR1cF90eHFfYnVmcyhzdHJ1Y3QgYnRpbnRlbF9wY2llX2RhdGEgKmRhdGEsXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYy0xOTEwLVxcdC8qIEFsbG9jYXRlIHRoZSBzYW1lIG51bWJlciBvZiBidWZmZXJzIGFzIHRoZSBkZXNjcmlwdG9yICovXFxuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmM6MTkxMTpcXHR0eHEtXFx1MDAzZWJ1ZnMgPSBrbWFsbG9jX29ianMoKmJ1ZiwgdHhxLVxcdTAwM2Vjb3VudCk7XFxuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmMtMTkxMi1cXHRpZiAoIXR4cS1cXHUwMDNlYnVmcylcXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jPTE5NDg9c3RhdGljIGludCBidGludGVsX3BjaWVfc2V0dXBfcnhxX2J1ZnMoc3RydWN0IGJ0aW50ZWxfcGNpZV9kYXRhICpkYXRhLFxcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmMtMTk1NC1cXHQvKiBBbGxvY2F0ZSB0aGUgc2FtZSBudW1iZXIgb2YgYnVmZmVycyBhcyB0aGUgZGVzY3JpcHRvciAqL1xcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jOjE5NTU6XFx0cnhxLVxcdTAwM2VidWZzID0ga21hbGxvY19vYmpzKCpidWYsIHJ4cS1cXHUwMDNlY291bnQpO1xcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jLTE5NTYtXFx0aWYgKCFyeHEtXFx1MDAzZWJ1ZnMpXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTYzMj1zdGF0aWMgaW50IGZzbF9tY19kZXZpY2VfZ2V0X21taW9fcmVnaW9ucyhzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2LFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy02NTUtXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo2NTY6XFx0cmVnaW9ucyA9IGttYWxsb2Nfb2JqcyhyZWdpb25zWzBdLCBvYmpfZGVzYy1cXHUwMDNlcmVnaW9uX2NvdW50KTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTY1Ny1cXHRpZiAoIXJlZ2lvbnMpXFxuLS1cXG5kcml2ZXJzL2NoYXIvYWdwL2lzb2NoLmM9NjQ9c3RhdGljIGludCBhZ3BfM181X2lzb2Nocm9ub3VzX25vZGVfZW5hYmxlKHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZSxcXG4tLVxcbmRyaXZlcnMvY2hhci9hZ3AvaXNvY2guYy05NC1cXHQgKi9cXG5kcml2ZXJzL2NoYXIvYWdwL2lzb2NoLmM6OTU6XFx0bWFzdGVyID0ga21hbGxvY19vYmpzKCptYXN0ZXIsIG5kZXZzKTtcXG5kcml2ZXJzL2NoYXIvYWdwL2lzb2NoLmMtOTYtXFx0aWYgKG1hc3RlciA9PSBOVUxMKSB7XFxuLS1cXG5kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jPTM2OT1zdGF0aWMgaW50IHVuaW5vcnRoX2NyZWF0ZV9nYXR0X3RhYmxlKHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZSlcXG4tLVxcbmRyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmMtNDA2LVxcbmRyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmM6NDA3OlxcdHVuaW5vcnRoX3ByaXYucGFnZXNfYXJyID0ga21hbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIDEgXFx1MDAzY1xcdTAwM2MgcGFnZV9vcmRlcik7XFxuZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYy00MDgtXFx0aWYgKHVuaW5vcnRoX3ByaXYucGFnZXNfYXJyID09IE5VTEwpXFxuLS1cXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYz03NTA9aW50IGlwbWlfc21pX3dhdGNoZXJfcmVnaXN0ZXIoc3RydWN0IGlwbWlfc21pX3dhdGNoZXIgKndhdGNoZXIpXFxuLS1cXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYy03NzktXFx0aWYgKGNvdW50IFxcdTAwM2UgMCkge1xcbmRyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jOjc4MDpcXHRcXHRpbnRlcmZhY2VzID0ga21hbGxvY19vYmpzKCppbnRlcmZhY2VzLCBjb3VudCk7XFxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMtNzgxLVxcdFxcdGlmICghaW50ZXJmYWNlcykge1xcbi0tXFxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMtNzgzLVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmM6Nzg0OlxcdFxcdFxcdGRldmljZXMgPSBrbWFsbG9jX29ianMoKmRldmljZXMsIGNvdW50KTtcXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYy03ODUtXFx0XFx0XFx0aWYgKCFkZXZpY2VzKSB7XFxuLS1cXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYz0xODEwPXN0YXRpYyBpbnQgaW5pdF92cXMoc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldilcXG4tLVxcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jLTE4MTktXFxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmM6MTgyMDpcXHR2cXMgPSBrbWFsbG9jX29ianMoc3RydWN0IHZpcnRxdWV1ZSAqLCBucl9xdWV1ZXMpO1xcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jLTE4MjEtXFx0dnFzX2luZm8gPSBremFsbG9jX29ianMoKnZxc19pbmZvLCBucl9xdWV1ZXMpO1xcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jOjE4MjI6XFx0cG9ydGRldi1cXHUwMDNlaW5fdnFzID0ga21hbGxvY19vYmpzKHN0cnVjdCB2aXJ0cXVldWUgKiwgbnJfcG9ydHMpO1xcbmRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jOjE4MjM6XFx0cG9ydGRldi1cXHUwMDNlb3V0X3ZxcyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgdmlydHF1ZXVlICosIG5yX3BvcnRzKTtcXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYy0xODI0LVxcdGlmICghdnFzIHx8ICF2cXNfaW5mbyB8fCAhcG9ydGRldi1cXHUwMDNlaW5fdnFzIHx8ICFwb3J0ZGV2LVxcdTAwM2VvdXRfdnFzKSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstYnVsay5jPTQ3PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIG9mX2Nsa19idWxrX2dldF9hbGwoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9jbGsvY2xrLWJ1bGsuYy01OC1cXG5kcml2ZXJzL2Nsay9jbGstYnVsay5jOjU5OlxcdGNsa19idWxrID0ga21hbGxvY19vYmpzKCpjbGtfYnVsaywgbnVtX2Nsa3MpO1xcbmRyaXZlcnMvY2xrL2Nsay1idWxrLmMtNjAtXFx0aWYgKCFjbGtfYnVsaylcXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay1zdG0zMmY0LmM9MTgyOD1zdGF0aWMgdm9pZCBfX2luaXQgc3RtMzJmNF9yY2NfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbi0tXFxuZHJpdmVycy9jbGsvY2xrLXN0bTMyZjQuYy0xODU3LVxcbmRyaXZlcnMvY2xrL2Nsay1zdG0zMmY0LmM6MTg1ODpcXHRjbGtzID0ga21hbGxvY19vYmpzKCpjbGtzLCBkYXRhLVxcdTAwM2VnYXRlc19udW0gKyBzdG0zMmZ4X2VuZF9wcmltYXJ5X2Nsayk7XFxuZHJpdmVycy9jbGsvY2xrLXN0bTMyZjQuYy0xODU5LVxcdGlmICghY2xrcylcXG4tLVxcbmRyaXZlcnMvY2xrL2RhdmluY2kvcGxsLmM9NzQzPWludCBvZl9kYXZpbmNpX3BsbF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxcbi0tXFxuZHJpdmVycy9jbGsvZGF2aW5jaS9wbGwuYy03ODQtXFxuZHJpdmVycy9jbGsvZGF2aW5jaS9wbGwuYzo3ODU6XFx0XFx0Y2xrcyA9IGttYWxsb2Nfb2JqcygqY2xrcywgbl9jbGtzKTtcXG5kcml2ZXJzL2Nsay9kYXZpbmNpL3BsbC5jLTc4Ni1cXHRcXHRpZiAoIWNsa3MpIHtcXG4tLVxcbmRyaXZlcnMvY2xrL2RhdmluY2kvcHNjLmM9MzY0PV9fZGF2aW5jaV9wc2NfcmVnaXN0ZXJfY2xvY2tzKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvY2xrL2RhdmluY2kvcHNjLmMtMzc4LVxcbmRyaXZlcnMvY2xrL2RhdmluY2kvcHNjLmM6Mzc5OlxcdGNsa3MgPSBrbWFsbG9jX29ianMoKmNsa3MsIG51bV9jbGtzKTtcXG5kcml2ZXJzL2Nsay9kYXZpbmNpL3BzYy5jLTM4MC1cXHRpZiAoIWNsa3MpIHtcXG4tLVxcbmRyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTIxMC5jPTM2OTc9c3RhdGljIHZvaWQgdGVncmEyMTBfbWJpc3RfY2xrX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvY2xrL3RlZ3JhL2Nsay10ZWdyYTIxMC5jLTM3MDctXFxuZHJpdmVycy9jbGsvdGVncmEvY2xrLXRlZ3JhMjEwLmM6MzcwODpcXHRcXHRjbGtfZGF0YSA9IGttYWxsb2Nfb2JqcygqY2xrX2RhdGEsIG51bV9jbGtzKTtcXG5kcml2ZXJzL2Nsay90ZWdyYS9jbGstdGVncmEyMTAuYy0zNzA5LVxcdFxcdGlmIChXQVJOX09OKCFjbGtfZGF0YSkpXFxuLS1cXG5kcml2ZXJzL2NvbWVkaS9kcml2ZXJzL25pXzY3MHguYz0xNTU9c3RhdGljIGludCBuaV82NzB4X2F1dG9fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2NvbWVkaS9kcml2ZXJzL25pXzY3MHguYy0yMDAtXFxuZHJpdmVycy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmM6MjAxOlxcdFxcdHJhbmdlX3RhYmxlX2xpc3QgPSBrbWFsbG9jX29ianMoKnJhbmdlX3RhYmxlX2xpc3QsIDMyKTtcXG5kcml2ZXJzL2NvbWVkaS9kcml2ZXJzL25pXzY3MHguYy0yMDItXFx0XFx0aWYgKCFyYW5nZV90YWJsZV9saXN0KVxcbi0tXFxuZHJpdmVycy9jcHVmcmVxL2JtaXBzLWNwdWZyZXEuYz02Nj1ibWlwc19jcHVmcmVxX2dldF9mcmVxX3RhYmxlKGNvbnN0IHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KVxcbi0tXFxuZHJpdmVycy9jcHVmcmVxL2JtaXBzLWNwdWZyZXEuYy03My1cXG5kcml2ZXJzL2NwdWZyZXEvYm1pcHMtY3B1ZnJlcS5jOjc0OlxcdHRhYmxlID0ga21hbGxvY19vYmpzKCp0YWJsZSwgcHJpdi1cXHUwMDNlbWF4X2ZyZXFzICsgMSk7XFxuZHJpdmVycy9jcHVmcmVxL2JtaXBzLWNwdWZyZXEuYy03NS1cXHRpZiAoIXRhYmxlKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jPTEzND1zcHVfc2tjaXBoZXJfcnhfc2dfY3JlYXRlKHN0cnVjdCBicmNtX21lc3NhZ2UgKm1zc2csXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMTQzLVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYzoxNDQ6XFx0bXNzZy1cXHUwMDNlc3B1LmRzdCA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsIHJ4X2ZyYWdfbnVtLCByY3R4LVxcdTAwM2VnZnApO1xcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xNDUtXFx0aWYgKCFtc3NnLVxcdTAwM2VzcHUuZHN0KVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jPTE5Nz1zcHVfc2tjaXBoZXJfdHhfc2dfY3JlYXRlKHN0cnVjdCBicmNtX21lc3NhZ2UgKm1zc2csXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMjA2LVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYzoyMDc6XFx0bXNzZy1cXHUwMDNlc3B1LnNyYyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3Qgc2NhdHRlcmxpc3QsIHR4X2ZyYWdfbnVtLCByY3R4LVxcdTAwM2VnZnApO1xcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0yMDgtXFx0aWYgKHVubGlrZWx5KCFtc3NnLVxcdTAwM2VzcHUuc3JjKSlcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYz01MjQ9c3B1X2FoYXNoX3J4X3NnX2NyZWF0ZShzdHJ1Y3QgYnJjbV9tZXNzYWdlICptc3NnLFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jLTUzMi1cXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM6NTMzOlxcdG1zc2ctXFx1MDAzZXNwdS5kc3QgPSBrbWFsbG9jX29ianMoc3RydWN0IHNjYXR0ZXJsaXN0LCByeF9mcmFnX251bSwgcmN0eC1cXHUwMDNlZ2ZwKTtcXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtNTM0LVxcdGlmICghbXNzZy1cXHUwMDNlc3B1LmRzdClcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYz01NzU9c3B1X2FoYXNoX3R4X3NnX2NyZWF0ZShzdHJ1Y3QgYnJjbV9tZXNzYWdlICptc3NnLFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jLTU4Ni1cXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM6NTg3OlxcdG1zc2ctXFx1MDAzZXNwdS5zcmMgPSBrbWFsbG9jX29ianMoc3RydWN0IHNjYXR0ZXJsaXN0LCB0eF9mcmFnX251bSwgcmN0eC1cXHUwMDNlZ2ZwKTtcXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtNTg4LVxcdGlmICghbXNzZy1cXHUwMDNlc3B1LnNyYylcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYz0xMDM4PXN0YXRpYyBpbnQgc3B1X2FlYWRfcnhfc2dfY3JlYXRlKHN0cnVjdCBicmNtX21lc3NhZ2UgKm1zc2csXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMTA3NS1cXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmM6MTA3NjpcXHRtc3NnLVxcdTAwM2VzcHUuZHN0ID0ga21hbGxvY19vYmpzKHN0cnVjdCBzY2F0dGVybGlzdCwgcnhfZnJhZ19udW0sIHJjdHgtXFx1MDAzZWdmcCk7XFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jLTEwNzctXFx0aWYgKCFtc3NnLVxcdTAwM2VzcHUuZHN0KVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vYmNtL2NpcGhlci5jPTExNTc9c3RhdGljIGludCBzcHVfYWVhZF90eF9zZ19jcmVhdGUoc3RydWN0IGJyY21fbWVzc2FnZSAqbXNzZyxcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYy0xMTc2LVxcbmRyaXZlcnMvY3J5cHRvL2JjbS9jaXBoZXIuYzoxMTc3OlxcdG1zc2ctXFx1MDAzZXNwdS5zcmMgPSBrbWFsbG9jX29ianMoc3RydWN0IHNjYXR0ZXJsaXN0LCB0eF9mcmFnX251bSwgcmN0eC1cXHUwMDNlZ2ZwKTtcXG5kcml2ZXJzL2NyeXB0by9iY20vY2lwaGVyLmMtMTE3OC1cXHRpZiAoIW1zc2ctXFx1MDAzZXNwdS5zcmMpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYz0zMDY9c3RhdGljIHN0cnVjdCBzbGFfYnVmZmVyX2hkciAqc2xhX2J1ZmZlcl9tYXAoc3RydWN0IHNsYV9hZGRyX3Qgc2xhKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmMtMzMyLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jOjMzMzpcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBwID0ga21hbGxvY19vYmpzKHBwWzBdLCBucGFnZXMpO1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jLTMzNC1cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl90ZWxlbWV0cnkuYz01OD1zdGF0aWMgaW50IGFkZl90bF9hbGxvY19tZW0oc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2RldilcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzI6MjUuNTc3NjgyNDA0WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzNjA1ODEwNjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS01TQU4gSW1wYWN0IG9mIGEgdmhvc3QtdnNvY2sgT3B0aW1pemF0aW9uIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgYGttYWxsb2Nfb2Jqc2AuIEhtbSwgdGhhdCdzIG5vdCB0aGUgc3RhbmRhcmQgYGttYWxsb2NfYXJyYXlgLCBzbyBpdCdzIHByb2JhYmx5IGEgY3VzdG9tIG1hY3JvLiBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgaXQncyBkZWZpbmVkLiBPaCwgaXQncyBkZXByZWNhdGVkISBJbnRlcmVzdGluZy4gTGluZSA1MTkgb2YgYGRyaXZlcnMvdmhvc3Qvdmhvc3QuY2AgbG9va3MgcmVsZXZhbnQ6IGB2cS1cdTAwM2VoZWFkcyA9IGttYWxsb2NfYXJyYXkoZGV2LVx1MDAzZWlvdl9saW1pdCwgc2l6ZW9mKCp2cS1cdTAwM2VoZWFkcyksIEdGUF9LRVJORUwpO2AgVGhlIGdyZXAgb3V0cHV0IHNob3dzIHRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYGttYWxsb2Nfb2Jqc2AsIHdoaWNoIGlzIGxpa2VseSBhIG1hY3JvIHNpbWlsYXIgdG8gYGttYWxsb2NfYXJyYXlgLCBhbGxvY2F0aW5nIGFuIGFycmF5IG9mIGBkZXYtXHUwMDNlaW92X2xpbWl0YCBlbGVtZW50cy4gQW5kIHllcywgdGhlIGB1c2VkX2xpbWl0YCBpcyBpbmRlZWQgYm91bmRlZCBieSBgZGV2LVx1MDAzZWlvdl9saW1pdGAsIHNvIHRoZSBhbGxvY2F0aW9uIGlzIHN1ZmZpY2llbnQuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgS01TQU4gdmVyc3VzIEtBU0FOLiBLTVNBTiBpcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHdoaWxlIEtBU0FOIGlzIGZvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBiYXRjaGluZyB1c2VkIGVsZW1lbnQgdXBkYXRlcywgc3BlY2lmaWNhbGx5IHBvcHVsYXRpbmcgdGhlIGB2cS1cdTAwM2VoZWFkc2AgYXJyYXkgd2l0aCBgdXNlZC1cdTAwM2VpZGAgYW5kIGB1c2VkLVx1MDAzZWxlbmAuIEJvdGggZmllbGRzIGFyZSBpbml0aWFsaXplZC4gQW5kIGdvb2QsIHRoZXJlJ3Mgbm8gcGFkZGluZyBpbiB0aGUgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gLiBUaGVuLCBgdmhvc3RfcHV0X3VzZWRgIGNvcGllcyB0aGlzIGFycmF5IHRvIHVzZXIgc3BhY2UsIGNhbGxpbmcgYHZob3N0X2NvcHlfdG9fdXNlcmAuIFNpbmNlIHRoZSBtZW1vcnkgYmVpbmcgY29waWVkICppcyogZnVsbHkgaW5pdGlhbGl6ZWQsIHRoZXJlJ3Mgbm8gd2F5IHRvIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuXG5cblNvLCBoZXJlJ3MgdGhlIHJlYXNvbmluZyB0byBwdXQgZG93bi4gVGhlIHBhdGNoIGlzIG9wdGltaXppbmcgdGhlIHZpcnRpbyB2c29jayB0cmFuc21pc3Npb24gcGF0aCBieSBiYXRjaGluZyB1cGRhdGVzLiBJdCBpbnRyb2R1Y2VzIGB2aG9zdF92c29ja19hZGRfdXNlZGAgdG8gcG9wdWxhdGUgYW4gYXJyYXkgKGB2cS1cdTAwM2VoZWFkc2ApIHdpdGggYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIGFuZCBgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZGAgdG8gZmx1c2ggdG8gZ3Vlc3QgbWVtb3J5LiBUaGUgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIGNvbnNpc3RzIG9mIHR3byAzMi1iaXQgaW50ZWdlcnMsIGBpZGAgYW5kIGBsZW5gLCB3aXRoIG5vIHBhZGRpbmcuIFRoZXNlIGZpZWxkcyBhcmUgKmV4cGxpY2l0bHkqIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgY29weS4gVGhlIGFycmF5IGJvdW5kcyBhcmUgYWxzbyBjaGVja2VkIGFnYWluc3QgYGRldi1cdTAwM2Vpb3ZfbGltaXRgLiBUaGlzIGNvbXBsZXRlbHkgZWxpbWluYXRlcyBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFraW5nIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXNuJ3QgbmVlZCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4gSXQncyBzYWZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTc5MCwiT3V0cHV0VG9rZW5zIjoyNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6MzI6NDkuMTgzNDk2MDE5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgdGhlIHZpcnRpbyB2c29jayB0cmFuc21pc3Npb24gcGF0aCBieSBiYXRjaGluZyB1c2VkIGVsZW1lbnQgdXBkYXRlcy4gSXQgaW50cm9kdWNlcyBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIHRvIHBvcHVsYXRlIGFuIGFycmF5IG9mIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCAoYHZxLVxcdTAwM2VoZWFkc2ApIGFuZCBgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZGAgdG8gZmx1c2ggdGhlbSB0byB0aGUgZ3Vlc3QgbWVtb3J5IHZpYSBgdmhvc3RfYWRkX3VzZWRfbmAuXFxuVGhlIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCBjb25zaXN0cyBvZiB0d28gMzItYml0IGludGVnZXJzIChgaWRgIGFuZCBgbGVuYCkgYW5kIGNvbnRhaW5zIG5vIHBhZGRpbmcgYnl0ZXMuIEJvdGggZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGB2aG9zdF92c29ja19hZGRfdXNlZGAgYmVmb3JlIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIChndWVzdCBtZW1vcnkpIHZpYSBgdmhvc3RfcHV0X3VzZWRgIGFuZCBgdmhvc3RfY29weV90b191c2VyYC5cXG5TaW5jZSB0aGUgbWVtb3J5IGJlaW5nIGNvcGllZCBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgdGhlcmUgYXJlIG5vIHBhZGRpbmcgYnl0ZXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlIGJvdW5kcyBvZiB0aGUgYXJyYXkgYXJlIGFsc28gcHJvcGVybHkgY2hlY2tlZCBhZ2FpbnN0IGBkZXYtXFx1MDAzZWlvdl9saW1pdGAsIHByZXZlbnRpbmcgYW55IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbnl3YXkpLlxcblRodXMsIHRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb3B0aW1pemVzIHRoZSB2aXJ0aW8gdnNvY2sgdHJhbnNtaXNzaW9uIHBhdGggYnkgYmF0Y2hpbmcgdXNlZCBlbGVtZW50IHVwZGF0ZXMuIEl0IGludHJvZHVjZXMgYHZob3N0X3Zzb2NrX2FkZF91c2VkYCB0byBwb3B1bGF0ZSBhbiBhcnJheSBvZiBgc3RydWN0IHZyaW5nX3VzZWRfZWxlbWAgKGB2cS1cXHUwMDNlaGVhZHNgKSBhbmQgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgIHRvIGZsdXNoIHRoZW0gdG8gdGhlIGd1ZXN0IG1lbW9yeSB2aWEgYHZob3N0X2FkZF91c2VkX25gLlxcblRoZSBgc3RydWN0IHZyaW5nX3VzZWRfZWxlbWAgY29uc2lzdHMgb2YgdHdvIDMyLWJpdCBpbnRlZ2VycyAoYGlkYCBhbmQgYGxlbmApIGFuZCBjb250YWlucyBubyBwYWRkaW5nIGJ5dGVzLiBCb3RoIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIGJlZm9yZSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSAoZ3Vlc3QgbWVtb3J5KSB2aWEgYHZob3N0X3B1dF91c2VkYCBhbmQgYHZob3N0X2NvcHlfdG9fdXNlcmAuXFxuU2luY2UgdGhlIG1lbW9yeSBiZWluZyBjb3BpZWQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIHRoZXJlIGFyZSBubyBwYWRkaW5nIGJ5dGVzLCB0aGVyZSBpcyBubyByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZSBib3VuZHMgb2YgdGhlIGFycmF5IGFyZSBhbHNvIHByb3Blcmx5IGNoZWNrZWQgYWdhaW5zdCBgZGV2LVxcdTAwM2Vpb3ZfbGltaXRgLCBwcmV2ZW50aW5nIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW55d2F5KS5cXG5UaHVzLCB0aGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow78mdm[1] Phase: Succeeded StartedAt: 2026-08-27 06:33:00 +0000 UTC FinishedAt: 2026-08-27 06:33:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-27 06:33:00 +0000 UTC FinishedAt: 2026-08-27 06:33:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[2] Phase: Succeeded StartedAt: 2026-08-27 06:33:00 +0000 UTC FinishedAt: 2026-08-27 10:23:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-27 06:33:00 +0000 UTC FinishedAt: 2026-08-27 10:23:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-27 06:33:00 +0000 UTC FinishedAt: 2026-08-27 06:33:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-27 06:33:00 +0000 UTC FinishedAt: 2026-08-27 06:33:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflow78mdm/series-workflow78mdm-convert-artifact-3973288604/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-27 06:33:10 +0000 UTC FinishedAt: 2026-08-27 06:49:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-27 06:33:10 +0000 UTC FinishedAt: 2026-08-27 06:49:55 +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:*b9b36dc9-213c-4d98-9ac4-835c1d7e1a87,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-workflow78mdm/series-workflow78mdm-convert-artifact-3973288604/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": "4dde10b7-2287-443d-bb09-b27ec5dda931", "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-workflow78mdm/series-workflow78mdm-build-action-1803434186/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-27 06:33:10 +0000 UTC FinishedAt: 2026-08-27 06:49:45 +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:*b9b36dc9-213c-4d98-9ac4-835c1d7e1a87,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-workflow78mdm/series-workflow78mdm-convert-artifact-3973288604/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": "4dde10b7-2287-443d-bb09-b27ec5dda931", "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-workflow78mdm/series-workflow78mdm-build-action-1803434186/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-27 06:49:55 +0000 UTC FinishedAt: 2026-08-27 06:49:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-27 06:49:55 +0000 UTC FinishedAt: 2026-08-27 06:49:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-27 06:49:55 +0000 UTC FinishedAt: 2026-08-27 06:50:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-27 06:49:55 +0000 UTC FinishedAt: 2026-08-27 06:50:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflow78mdm/series-workflow78mdm-convert-artifact-3630367451/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-27 06:50:05 +0000 UTC FinishedAt: 2026-08-27 06:52:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-27 06:50:05 +0000 UTC FinishedAt: 2026-08-27 06:51:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4dde10b7-2287-443d-bb09-b27ec5dda931,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-workflow78mdm/series-workflow78mdm-build-action-1803434186/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-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-27 06:52:02 +0000 UTC FinishedAt: 2026-08-27 06:52:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-27 06:52:02 +0000 UTC FinishedAt: 2026-08-27 06:52:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-27 06:52:02 +0000 UTC FinishedAt: 2026-08-27 07:15:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-27 06:52:02 +0000 UTC FinishedAt: 2026-08-27 07:15:43 +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:*b9b36dc9-213c-4d98-9ac4-835c1d7e1a87,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-workflow78mdm/series-workflow78mdm-convert-artifact-3630367451/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": "de43ad3a-a01c-44c0-adbe-11e5d37e089f", "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-workflow78mdm/series-workflow78mdm-build-action-3667306879/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-27 06:52:02 +0000 UTC FinishedAt: 2026-08-27 07:15:33 +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:*b9b36dc9-213c-4d98-9ac4-835c1d7e1a87,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-workflow78mdm/series-workflow78mdm-convert-artifact-3630367451/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": "de43ad3a-a01c-44c0-adbe-11e5d37e089f", "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-workflow78mdm/series-workflow78mdm-build-action-3667306879/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-27 07:15:43 +0000 UTC FinishedAt: 2026-08-27 07:15:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-27 07:15:43 +0000 UTC FinishedAt: 2026-08-27 07:15:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-27 07:15:43 +0000 UTC FinishedAt: 2026-08-27 07:17:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-27 07:15:43 +0000 UTC FinishedAt: 2026-08-27 07:17:37 +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:*de43ad3a-a01c-44c0-adbe-11e5d37e089f,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-workflow78mdm/series-workflow78mdm-build-action-3667306879/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-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-27 07:17:48 +0000 UTC FinishedAt: 2026-08-27 10:23:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-27 07:17:48 +0000 UTC FinishedAt: 2026-08-27 10:23:45 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"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:*4dde10b7-2287-443d-bb09-b27ec5dda931,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*de43ad3a-a01c-44c0-adbe-11e5d37e089f,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-workflow78mdm/series-workflow78mdm-build-action-1803434186/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-workflow78mdm/series-workflow78mdm-build-action-3667306879/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-27 07:17:48 +0000 UTC FinishedAt: 2026-08-27 07:18:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-27 07:17:48 +0000 UTC FinishedAt: 2026-08-27 07:18:14 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"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-workflow78mdm/series-workflow78mdm-convert-artifact-3394278100/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-27 07:17:48 +0000 UTC FinishedAt: 2026-08-27 07:17:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-27 07:17:48 +0000 UTC FinishedAt: 2026-08-27 07:17:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-27 07:17:48 +0000 UTC FinishedAt: 2026-08-27 07:17:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-27 07:18:26 +0000 UTC FinishedAt: 2026-08-27 10:23:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78mdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_transport_send_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS"],"series_id":"997588ba-75a5-4dbf-a0de-d4c1dad86b60","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-27 07:18:26 +0000 UTC FinishedAt: 2026-08-27 10:23:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4dde10b7-2287-443d-bb09-b27ec5dda931,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*de43ad3a-a01c-44c0-adbe-11e5d37e089f,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-workflow78mdm/series-workflow78mdm-build-action-1803434186/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-workflow78mdm/series-workflow78mdm-build-action-3667306879/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-workflow78mdm/series-workflow78mdm-convert-artifact-3394278100/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,}